diff --git a/DEPS b/DEPS index d1ee856..cbd7179 100644 --- a/DEPS +++ b/DEPS
@@ -304,7 +304,7 @@ # 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': '13266cc111b94a8a29bf8ef1d86f39db3e5d124e', + 'skia_revision': 'b06e934cb6374a2a741a5b5c727c2abfad719665', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling V8 # and whatever else without interference from each other. @@ -312,7 +312,7 @@ # 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': '341dabf8e58e999974d70295ee498cc10b266c17', + 'angle_revision': 'af1768a4875660cf8b08fcec75066a275ebc33e7', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling SwiftShader # and whatever else without interference from each other. @@ -375,7 +375,7 @@ # Three lines of non-changing comments so that # the commit queue can handle CLs rolling catapult # and whatever else without interference from each other. - 'catapult_revision': 'ca32af6260e4fbe258113f0563b3678924e5cb0f', + 'catapult_revision': 'c684fe0312182df04f259e1b03a2acb41b34406f', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling CrossBench # and whatever else without interference from each other. @@ -391,7 +391,7 @@ # Three lines of non-changing comments so that # the commit queue can handle CLs rolling devtools-frontend # and whatever else without interference from each other. - 'devtools_frontend_revision': 'ce4ba169ed6f00e60a797a829d15b5cc8675e392', + 'devtools_frontend_revision': '4d2c9fc82e14d16e286d2633d3a753dd68d7483a', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling libprotobuf-mutator # and whatever else without interference from each other. @@ -812,11 +812,11 @@ }, 'src/docs/website': { - 'url': Var('chromium_git') + '/website.git' + '@' + '8baa1dd892d545b1dd5464ade2904c79ed2d9b51', + 'url': Var('chromium_git') + '/website.git' + '@' + '3a2072ce6c0d103649676683a7805b42031ff495', }, 'src/ios/third_party/earl_grey2/src': { - 'url': Var('chromium_git') + '/external/github.com/google/EarlGrey.git' + '@' + '3b368a2418585a66a2ea2d957001e91aa895c829', + 'url': Var('chromium_git') + '/external/github.com/google/EarlGrey.git' + '@' + '90fa652f6ba7ee1db976f176b574bc6e205bcedf', 'condition': 'checkout_ios', }, @@ -906,7 +906,7 @@ 'packages': [ { 'package': 'chromium/rts/model/linux-amd64', - 'version': 'HFsh1P6Q9AZxEBnZbZ8zC_v5zztnXXWNmyjn0MaThHUC', + 'version': '6NdT2C0XTtRJKYySVpFn-NtX6WEjOK2MlXPTs5LaqVcC', }, ], 'dep_type': 'cipd', @@ -917,7 +917,7 @@ 'packages': [ { 'package': 'chromium/rts/model/mac-amd64', - 'version': '9rAXeZlEUT08AdM7PN2TtSEqW7a2DWPdWcPA9AF5IqMC', + 'version': 'egCFe24NDoUekIFph8bPWB6yY3Z4wgnF7xfe5zOoWIwC', }, ], 'dep_type': 'cipd', @@ -928,7 +928,7 @@ 'packages': [ { 'package': 'chromium/rts/model/windows-amd64', - 'version': '8lKx6IDFtNPp1wUoEzdh8TChcpYO7mxFW6EiSyHdCzgC', + 'version': 'BRg1F6qOO4fhwj34n4Q7h013V0BdjAiXJxwuHssMCH0C', }, ], 'dep_type': 'cipd', @@ -1243,13 +1243,13 @@ }, 'src/third_party/depot_tools': - Var('chromium_git') + '/chromium/tools/depot_tools.git' + '@' + '2b19afb82030a638f8a3d8f592fa25269b924800', + Var('chromium_git') + '/chromium/tools/depot_tools.git' + '@' + 'f407ae35d322e21364ea96a05e0ba4577ffa200d', 'src/third_party/devtools-frontend/src': Var('chromium_git') + '/devtools/devtools-frontend' + '@' + Var('devtools_frontend_revision'), 'src/third_party/devtools-frontend-internal': { - 'url': Var('chrome_git') + '/devtools/devtools-internal.git' + '@' + '7a7573005bba31d7ae3c2698ca065865fa17242f', + 'url': Var('chrome_git') + '/devtools/devtools-internal.git' + '@' + '78fc3badfe464c86799425f41059de8cc66cc9a5', 'condition': 'checkout_src_internal', }, @@ -1507,7 +1507,7 @@ Var('chromium_git') + '/external/libaddressinput.git' + '@' + 'e8712e415627f22d0b00ebee8db99547077f39bd', 'src/third_party/libaom/source/libaom': - Var('aomedia_git') + '/aom.git' + '@' + 'b6ead6c2763416c98277c299cfd92befa1376fd6', + Var('aomedia_git') + '/aom.git' + '@' + '233000f66e9ff0bb09226a2f222a029bb4c89de6', 'src/third_party/libavif/src': Var('chromium_git') + '/external/github.com/AOMediaCodec/libavif.git' + '@' + Var('libavif_revision'), @@ -1716,7 +1716,7 @@ Var('pdfium_git') + '/pdfium.git' + '@' + Var('pdfium_revision'), 'src/third_party/perfetto': - Var('android_git') + '/platform/external/perfetto.git' + '@' + '49f628ceb9c9a69c1a92f08eeafa26e715f8ad46', + Var('android_git') + '/platform/external/perfetto.git' + '@' + 'e314b79bfe9e5d5cd0cf47a146175d8d8e3190b2', 'src/third_party/perl': { 'url': Var('chromium_git') + '/chromium/deps/perl.git' + '@' + '6f3e5028eb65d0b4c5fdd792106ac4c84eee1eb3', @@ -1861,7 +1861,7 @@ 'dep_type': 'cipd', }, - 'src/third_party/vulkan-deps': '{chromium_git}/vulkan-deps@16ff5c9d2ecbdcfdc33565bfd66f1c8bbe91dba0', + 'src/third_party/vulkan-deps': '{chromium_git}/vulkan-deps@cebf5626ca506bce289b618dbf933b704610604b', 'src/third_party/vulkan_memory_allocator': Var('chromium_git') + '/external/github.com/GPUOpen-LibrariesAndSDKs/VulkanMemoryAllocator.git' + '@' + 'ebe84bec02c041d28f902da0214bf442743fc907', @@ -1901,7 +1901,7 @@ Var('chromium_git') + '/external/github.com/gpuweb/cts.git' + '@' + 'e957d8fd868b0793b5e9f14fd523f436ac3f761c', 'src/third_party/webrtc': - Var('webrtc_git') + '/src.git' + '@' + 'b7af6b963bedfa9015d015f4b08d9b1e7766bcda', + Var('webrtc_git') + '/src.git' + '@' + '8f1903e3cff7ca9169c3704e73420dd24c34bb08', # Wuffs' canonical repository is at github.com/google/wuffs, but we use # Skia's mirror of Wuffs, the same as in upstream Skia's DEPS file.
diff --git a/android_webview/java/src/org/chromium/android_webview/common/ProductionSupportedFlagList.java b/android_webview/java/src/org/chromium/android_webview/common/ProductionSupportedFlagList.java index bee8c655..5ea9cfe2 100644 --- a/android_webview/java/src/org/chromium/android_webview/common/ProductionSupportedFlagList.java +++ b/android_webview/java/src/org/chromium/android_webview/common/ProductionSupportedFlagList.java
@@ -112,7 +112,7 @@ "Disables WebView from checking for app recovery mitigations."), Flag.commandLine(AwSwitches.WEBVIEW_ENABLE_APP_RECOVERY, "Enables WebView to check for app recovery mitigations."), - Flag.commandLine(BlinkFeatures.USER_AGENT_CLIENT_HINT, + Flag.baseFeature(BlinkFeatures.USER_AGENT_CLIENT_HINT, "Enables user-agent client hints in WebView."), Flag.baseFeature("DefaultPassthroughCommandDecoder", "Use the passthrough GLES2 command decoder."),
diff --git a/android_webview/javatests/src/org/chromium/android_webview/test/AwActivityTestRule.java b/android_webview/javatests/src/org/chromium/android_webview/test/AwActivityTestRule.java index 6c90d32..39a508dc 100644 --- a/android_webview/javatests/src/org/chromium/android_webview/test/AwActivityTestRule.java +++ b/android_webview/javatests/src/org/chromium/android_webview/test/AwActivityTestRule.java
@@ -94,8 +94,11 @@ @Override public void evaluate() throws Throwable { setUp(); - base.evaluate(); - tearDown(); + try { + base.evaluate(); + } finally { + tearDown(); + } } }, description); }
diff --git a/ash/capture_mode/stop_recording_button_tray.h b/ash/capture_mode/stop_recording_button_tray.h index a7333d9a..48c370b 100644 --- a/ash/capture_mode/stop_recording_button_tray.h +++ b/ash/capture_mode/stop_recording_button_tray.h
@@ -30,6 +30,9 @@ private: // TrayBackgroundView: void ClickedOutsideBubble() override {} + // No need to override since this view doesn't have an active/inactive state + // Clicking on it will stop the recording and make this view disappear. + void UpdateTrayItemColor(bool is_active) override {} std::u16string GetAccessibleNameForTray() override; void HandleLocaleChange() override {} void HideBubbleWithView(const TrayBubbleView* bubble_view) override {}
diff --git a/ash/components/arc/ime/arc_ime_service.cc b/ash/components/arc/ime/arc_ime_service.cc index 5aa1a41..90ab516c 100644 --- a/ash/components/arc/ime/arc_ime_service.cc +++ b/ash/components/arc/ime/arc_ime_service.cc
@@ -473,7 +473,7 @@ if (IsCharacterKeyEvent(&event)) { has_composition_text_ = false; - ime_bridge_->SendInsertText(std::u16string(1, event.GetText()), + ime_bridge_->SendInsertText(std::u16string(1, event.GetCharacter()), /*new_cursor_position=*/1); } }
diff --git a/ash/display/cursor_window_controller.cc b/ash/display/cursor_window_controller.cc index 22ef817..a993d789 100644 --- a/ash/display/cursor_window_controller.cc +++ b/ash/display/cursor_window_controller.cc
@@ -135,7 +135,7 @@ void OnBoundsChanged(const gfx::Rect& old_bounds, const gfx::Rect& new_bounds) override {} gfx::NativeCursor GetCursor(const gfx::Point& point) override { - return gfx::kNullCursor; + return gfx::NativeCursor{}; } int GetNonClientComponent(const gfx::Point& point) const override { return HTNOWHERE;
diff --git a/ash/drag_drop/drag_drop_tracker.cc b/ash/drag_drop/drag_drop_tracker.cc index a8644f4..e0bbe856 100644 --- a/ash/drag_drop/drag_drop_tracker.cc +++ b/ash/drag_drop/drag_drop_tracker.cc
@@ -36,7 +36,7 @@ void OnBoundsChanged(const gfx::Rect& old_bounds, const gfx::Rect& new_bounds) override {} gfx::NativeCursor GetCursor(const gfx::Point& point) override { - return gfx::kNullCursor; + return gfx::NativeCursor{}; } int GetNonClientComponent(const gfx::Point& point) const override { return HTCAPTION;
diff --git a/ash/login/login_screen_test_api.cc b/ash/login/login_screen_test_api.cc index 3d59b083..e12f886 100644 --- a/ash/login/login_screen_test_api.cc +++ b/ash/login/login_screen_test_api.cc
@@ -348,8 +348,8 @@ return false; } LoginUserView::TestApi user_test(big_user_view->GetUserView()); - auto* enterprise_icon = user_test.enterprise_icon(); - return enterprise_icon->GetVisible(); + auto* enterprise_icon_container = user_test.enterprise_icon_container(); + return enterprise_icon_container->GetVisible(); } // static
diff --git a/ash/login/ui/arrow_button_view.cc b/ash/login/ui/arrow_button_view.cc index 4e28889d..981de29 100644 --- a/ash/login/ui/arrow_button_view.cc +++ b/ash/login/ui/arrow_button_view.cc
@@ -22,6 +22,7 @@ #include "ui/gfx/canvas.h" #include "ui/gfx/geometry/rect.h" #include "ui/gfx/geometry/skia_conversions.h" +#include "ui/views/background.h" #include "ui/views/border.h" #include "ui/views/controls/focus_ring.h" #include "ui/views/controls/highlight_path_generator.h" @@ -78,7 +79,7 @@ SetPreferredSize(gfx::Size(size + 2 * kBorderForFocusRingDp, size + 2 * kBorderForFocusRingDp)); SetFocusBehavior(FocusBehavior::ALWAYS); - + SetBackgroundColorId(kColorAshControlBackgroundColorInactive); // Layer rendering is needed for animation. SetPaintToLayer(); layer()->SetFillsBoundsOpaquely(false); @@ -99,26 +100,12 @@ ArrowButtonView::~ArrowButtonView() = default; void ArrowButtonView::PaintButtonContents(gfx::Canvas* canvas) { - const gfx::Rect rect(GetContentsBounds()); - - // Draw background. - cc::PaintFlags flags; - flags.setAntiAlias(true); - SkColor background_color = - background_color_id_ ? GetColorProvider()->GetColor(*background_color_id_) - : AshColorProvider::Get()->GetControlsLayerColor( - AshColorProvider::ControlsLayerType:: - kControlBackgroundColorInactive); - - flags.setColor(background_color); - flags.setStyle(cc::PaintFlags::kFill_Style); - canvas->DrawCircle(gfx::PointF(rect.CenterPoint()), rect.width() / 2, flags); - // Draw arrow icon. views::ImageButton::PaintButtonContents(canvas); // Draw the arc of the loading animation. if (loading_animation_) { + const gfx::Rect rect(GetContentsBounds()); PaintLoadingArc(canvas, rect, loading_animation_->GetCurrentValue()); } } @@ -208,6 +195,11 @@ owner_->SchedulePaint(); } +void ArrowButtonView::SetBackgroundColorId(ui::ColorId color_id) { + SetBackground(views::CreateThemedRoundedRectBackground( + color_id, GetPreferredSize().width() / 2, 2 * kBorderForFocusRingDp)); +} + BEGIN_METADATA(ArrowButtonView, LoginButton) END_METADATA
diff --git a/ash/login/ui/arrow_button_view.h b/ash/login/ui/arrow_button_view.h index f8e6f3b..f7649ad 100644 --- a/ash/login/ui/arrow_button_view.h +++ b/ash/login/ui/arrow_button_view.h
@@ -48,9 +48,7 @@ // the animation is looped. void EnableLoadingAnimation(bool enabled); - void SetBackgroundColorId(ui::ColorId color_id) { - background_color_id_ = color_id; - } + void SetBackgroundColorId(ui::ColorId color_id); private: // Helper class that translates events from the loading animation events into @@ -72,7 +70,6 @@ LoadingAnimationDelegate loading_animation_delegate_{this}; std::unique_ptr<gfx::MultiAnimation> loading_animation_; - absl::optional<ui::ColorId> background_color_id_; }; } // namespace ash
diff --git a/ash/login/ui/login_expanded_public_account_view.cc b/ash/login/ui/login_expanded_public_account_view.cc index 459bb80..01bb386 100644 --- a/ash/login/ui/login_expanded_public_account_view.cc +++ b/ash/login/ui/login_expanded_public_account_view.cc
@@ -21,17 +21,20 @@ #include "ash/strings/grit/ash_strings.h" #include "ash/style/ash_color_id.h" #include "ash/style/ash_color_provider.h" +#include "ash/style/system_shadow.h" #include "base/functional/bind.h" #include "base/functional/callback.h" #include "base/functional/callback_helpers.h" #include "base/memory/raw_ptr.h" #include "base/strings/utf_string_conversions.h" +#include "chromeos/constants/chromeos_features.h" #include "chromeos/strings/grit/chromeos_strings.h" #include "components/prefs/pref_registry_simple.h" #include "components/prefs/pref_service.h" #include "components/vector_icons/vector_icons.h" #include "ui/base/l10n/l10n_util.h" #include "ui/base/models/image_model.h" +#include "ui/chromeos/styles/cros_tokens_color_mappings.h" #include "ui/compositor/layer.h" #include "ui/gfx/canvas.h" #include "ui/gfx/text_constants.h" @@ -39,6 +42,7 @@ #include "ui/views/border.h" #include "ui/views/controls/image_view.h" #include "ui/views/controls/label.h" +#include "ui/views/highlight_border.h" #include "ui/views/layout/box_layout.h" #include "ui/views/layout/fill_layout.h" #include "ui/views/layout/layout_provider.h" @@ -69,11 +73,14 @@ constexpr int kTextLineHeightDp = 16; constexpr int kRoundRectCornerRadiusDp = 2; +constexpr int kJellyRoundRectCornerRadiusDp = 8; constexpr int kDropDownIconSizeDp = 16; +constexpr int kJellyDropDownIconSizeDp = 20; constexpr int kArrowButtonSizeDp = 48; constexpr int kAdvancedViewButtonWidthDp = 190; constexpr int kAdvancedViewButtonHeightDp = 16; +constexpr int kJellyAdvancedViewButtonHeightDp = 20; constexpr int kSpacingBetweenSelectionTitleAndButtonDp = 4; constexpr int kNonEmptyWidth = 1; @@ -163,7 +170,10 @@ views::BoxLayout::MainAxisAlignment::kStart); AddChildView(label_container); - label_ = CreateLabel(text, kColorAshTextColorPrimary); + const bool is_jelly = chromeos::features::IsJellyrollEnabled(); + label_ = CreateLabel(text, is_jelly ? static_cast<ui::ColorId>( + cros_tokens::kCrosSysOnSurface) + : kColorAshTextColorPrimary); left_margin_view_ = add_horizontal_margin(left_margin_, label_container); label_container->AddChildView(label_.get()); @@ -178,8 +188,8 @@ icon_ = new views::ImageView; icon_->SetVerticalAlignment(views::ImageView::Alignment::kCenter); - icon_->SetPreferredSize( - gfx::Size(kDropDownIconSizeDp, kDropDownIconSizeDp)); + int icon_size = is_jelly ? kJellyDropDownIconSizeDp : kDropDownIconSizeDp; + icon_->SetPreferredSize(gfx::Size(icon_size, icon_size)); icon_container->AddChildView(icon_.get()); right_margin_view_ = add_horizontal_margin(right_margin_, icon_container); @@ -244,16 +254,22 @@ MonitoringWarningView() : NonAccessibleView(kMonitoringWarningClassName), warning_type_(WarningType::kNone) { + const bool is_jelly = chromeos::features::IsJellyrollEnabled(); image_ = new views::ImageView(); image_->SetImage(ui::ImageModel::FromVectorIcon( - vector_icons::kWarningIcon, kColorAshIconColorWarning, + vector_icons::kWarningIcon, + is_jelly ? static_cast<ui::ColorId>(cros_tokens::kCrosSysOnSurface) + : kColorAshIconColorWarning, kMonitoringWarningIconSizeDp)); image_->SetVisible(false); AddChildView(image_.get()); const std::u16string label_text = l10n_util::GetStringUTF16( IDS_ASH_LOGIN_PUBLIC_ACCOUNT_MONITORING_WARNING); - label_ = CreateLabel(label_text, kColorAshTextColorPrimary); + label_ = CreateLabel( + label_text, + is_jelly ? static_cast<ui::ColorId>(cros_tokens::kCrosSysOnSurface) + : kColorAshTextColorPrimary); label_->SetMultiLine(true); label_->SetLineHeight(kTextLineHeightDp); AddChildView(label_.get()); @@ -353,18 +369,21 @@ learn_more_label_ = AddChildView(std::make_unique<views::StyledLabel>()); learn_more_label_->SetText(text); + const bool is_jelly = chromeos::features::IsJellyrollEnabled(); + views::StyledLabel::RangeStyleInfo style; style.custom_font = learn_more_label_->GetFontList().Derive( 0, gfx::Font::FontStyle::NORMAL, gfx::Font::Weight::NORMAL); - style.override_color = AshColorProvider::Get()->GetContentLayerColor( - AshColorProvider::ContentLayerType::kTextColorPrimary); + style.override_color_id = + is_jelly ? static_cast<ui::ColorId>(cros_tokens::kCrosSysOnSurface) + : kColorAshTextColorPrimary; learn_more_label_->AddStyleRange(gfx::Range(0, offset), style); views::StyledLabel::RangeStyleInfo link_style = views::StyledLabel::RangeStyleInfo::CreateForLink(on_learn_more_tapped); - const SkColor blue = AshColorProvider::Get()->GetContentLayerColor( - AshColorProvider::ContentLayerType::kButtonLabelColorBlue); - link_style.override_color = blue; + link_style.override_color_id = + is_jelly ? static_cast<ui::ColorId>(cros_tokens::kCrosSysPrimary) + : kColorAshButtonLabelColorBlue; learn_more_label_->AddStyleRange(gfx::Range(offset, offset + link.length()), link_style); learn_more_label_->SetAutoColorReadabilityEnabled(false); @@ -381,11 +400,18 @@ base::Unretained(this)), l10n_util::GetStringUTF16( IDS_ASH_LOGIN_PUBLIC_SESSION_LANGUAGE_AND_INPUT)); - advanced_view_button_->SetTextColorId(kColorAshButtonLabelColorBlue); + ui::ColorId advanced_view_button_color_id = + is_jelly ? static_cast<ui::ColorId>(cros_tokens::kCrosSysPrimary) + : kColorAshButtonLabelColorBlue; + int advanced_view_button_icon_size = is_jelly + ? kJellyAdvancedViewButtonHeightDp + : kAdvancedViewButtonHeightDp; + advanced_view_button_->SetTextColorId(advanced_view_button_color_id); advanced_view_button_->SetIcon(kLoginScreenButtonDropdownIcon, - kColorAshButtonLabelColorBlue); + advanced_view_button_color_id); + advanced_view_button_->SetPreferredSize( - gfx::Size(kAdvancedViewButtonWidthDp, kAdvancedViewButtonHeightDp)); + gfx::Size(kAdvancedViewButtonWidthDp, advanced_view_button_icon_size)); AddChildView(advanced_view_button_.get()); advanced_view_button_->SetProperty( @@ -708,6 +734,21 @@ on_dismissed_(on_dismissed), event_handler_( std::make_unique<LoginExpandedPublicAccountEventHandler>(this)) { + if (chromeos::features::IsJellyrollEnabled()) { + SetBackground(views::CreateThemedRoundedRectBackground( + cros_tokens::kCrosSysSystemBaseElevated, + kJellyRoundRectCornerRadiusDp)); + SetBorder(std::make_unique<views::HighlightBorder>( + kJellyRoundRectCornerRadiusDp, + views::HighlightBorder::Type::kHighlightBorder1)); + shadow_ = SystemShadow::CreateShadowOnNinePatchLayerForView( + this, SystemShadow::Type::kElevation12); + shadow_->SetRoundedCornerRadius(kJellyRoundRectCornerRadiusDp); + } else { + SetBackground(views::CreateThemedRoundedRectBackground( + kColorAshShieldAndBase80, kRoundRectCornerRadiusDp)); + } + SetPreferredSize(GetPreferredSizeLandscape()); layout_ = SetLayoutManager(std::make_unique<views::BoxLayout>()); @@ -735,8 +776,12 @@ } separator_ = AddChildView(std::make_unique<views::View>()); + ui::ColorId separator_color_id = + chromeos::features::IsJellyrollEnabled() + ? static_cast<ui::ColorId>(cros_tokens::kCrosSysSeparator) + : kColorAshSeparatorColor; separator_->SetBackground( - views::CreateThemedSolidBackground(kColorAshSeparatorColor)); + views::CreateThemedSolidBackground(separator_color_id)); right_pane_ = new RightPaneView( base::BindRepeating(&LoginExpandedPublicAccountView::ShowWarningDialog, @@ -748,6 +793,10 @@ kArrowButtonSizeDp)); submit_button_->SetAccessibleName(l10n_util::GetStringUTF16( IDS_ASH_LOGIN_PUBLIC_ACCOUNT_LOG_IN_BUTTON_ACCESSIBLE_NAME)); + if (chromeos::features::IsJellyrollEnabled()) { + submit_button_->SetBackgroundColorId( + cros_tokens::kCrosSysSystemPrimaryContainer); + } // `submit_button_` has absolute position and is laid out in our `Layout()` // override. submit_button_->SetProperty(views::kViewIgnoredByLayoutKey, true); @@ -815,6 +864,7 @@ } void LoginExpandedPublicAccountView::Hide() { + shadow_.reset(); SetVisible(false); right_pane_->Reset(); on_dismissed_.Run(); @@ -875,16 +925,6 @@ submit_button_->SetPosition(gfx::Point{submit_button_x, submit_button_y}); } -void LoginExpandedPublicAccountView::OnPaint(gfx::Canvas* canvas) { - views::View::OnPaint(canvas); - - cc::PaintFlags flags; - flags.setStyle(cc::PaintFlags::kFill_Style); - flags.setColor(GetColorProvider()->GetColor(kColorAshShieldAndBase80)); - flags.setAntiAlias(true); - canvas->DrawRoundRect(GetContentsBounds(), kRoundRectCornerRadiusDp, flags); -} - void LoginExpandedPublicAccountView::OnKeyEvent(ui::KeyEvent* event) { if (!GetVisible() || event->type() != ui::ET_KEY_PRESSED) { return;
diff --git a/ash/login/ui/login_expanded_public_account_view.h b/ash/login/ui/login_expanded_public_account_view.h index d286101..5422af0 100644 --- a/ash/login/ui/login_expanded_public_account_view.h +++ b/ash/login/ui/login_expanded_public_account_view.h
@@ -10,6 +10,7 @@ #include "ash/ash_export.h" #include "ash/login/ui/non_accessible_view.h" #include "ash/login/ui/public_account_menu_view.h" +#include "ash/style/system_shadow.h" #include "base/memory/raw_ptr.h" #include "ui/events/event_handler.h" #include "ui/views/controls/image_view.h" @@ -89,7 +90,6 @@ int GetHeightForWidth(int width) const override; void Layout() override; void OnBoundsChanged(const gfx::Rect& previous_bounds) override; - void OnPaint(gfx::Canvas* canvas) override; // ui::EventHandler: void OnKeyEvent(ui::KeyEvent* event) override; @@ -111,6 +111,7 @@ raw_ptr<PublicAccountMonitoringInfoDialog, ExperimentalAsh> learn_more_dialog_ = nullptr; std::unique_ptr<ui::EventHandler> event_handler_; + std::unique_ptr<SystemShadow> shadow_; base::WeakPtrFactory<LoginExpandedPublicAccountView> weak_factory_{this}; };
diff --git a/ash/login/ui/login_user_view.cc b/ash/login/ui/login_user_view.cc index ca51597..556f4c952 100644 --- a/ash/login/ui/login_user_view.cc +++ b/ash/login/ui/login_user_view.cc
@@ -109,54 +109,31 @@ AnimationFrames frames_; }; -class IconRoundedView : public views::View { +class EnterpriseBadgeLayout : public views::LayoutManager { public: - explicit IconRoundedView(int size) : size_(size) {} - ~IconRoundedView() override = default; + explicit EnterpriseBadgeLayout(int size) : size_(size) {} - IconRoundedView(const IconRoundedView&) = delete; - IconRoundedView& operator=(const IconRoundedView&) = delete; + EnterpriseBadgeLayout(const EnterpriseBadgeLayout&) = delete; + EnterpriseBadgeLayout& operator=(const EnterpriseBadgeLayout&) = delete; - void OnPaint(gfx::Canvas* canvas) override { - View::OnPaint(canvas); + ~EnterpriseBadgeLayout() override = default; - const int radius = size_ / 2; - const gfx::Rect content_bounds(GetContentsBounds()); - const gfx::Point center_circle(content_bounds.width() - radius, - content_bounds.height() - radius); - const gfx::Point left_corner_icon( - std::round(content_bounds.width() - radius * (1 + kIconProportion)), - std::round(content_bounds.height() - radius * (1 + kIconProportion))); - gfx::Rect image_bounds(left_corner_icon, icon_.size()); - SkPath path; - path.addRect(gfx::RectToSkRect(image_bounds)); - cc::PaintFlags flags; - flags.setAntiAlias(true); - flags.setColor(AshColorProvider::Get()->GetContentLayerColor( - AshColorProvider::ContentLayerType::kIconColorSecondaryBackground)); - flags.setStyle(cc::PaintFlags::kFill_Style); - // The colored circle on which we paint the icon. - canvas->DrawCircle(center_circle, radius, flags); - canvas->DrawImageInPath(icon_, image_bounds.x(), image_bounds.y(), path, - flags); + // views::LayoutManager: + void Layout(views::View* host) override { + DCHECK_EQ(host->children().size(), 1U); + const gfx::Rect content_bounds(host->GetContentsBounds()); + const int offset = content_bounds.width() - size_; + auto* child = host->children()[0]; + child->SetPosition({offset, offset}); + child->SetSize({size_, size_}); } - // views::View: - void OnThemeChanged() override { - views::View::OnThemeChanged(); - icon_ = gfx::ImageSkiaOperations::CreateResizedImage( - gfx::CreateVectorIcon( - chromeos::kEnterpriseIcon, - AshColorProvider::Get()->GetContentLayerColor( - AshColorProvider::ContentLayerType::kIconColorSecondary)), - skia::ImageOperations::RESIZE_BEST, - gfx::Size(size_ * kIconProportion, size_ * kIconProportion)); - SchedulePaint(); + gfx::Size GetPreferredSize(const views::View* host) const override { + return gfx::Size(size_, size_); } private: const int size_; - gfx::ImageSkia icon_; }; } // namespace @@ -169,7 +146,9 @@ explicit TestApi(LoginUserView::UserImage* view) : view_(view) {} ~TestApi() = default; - views::View* enterprise_icon() const { return view_->enterprise_icon_; } + views::View* enterprise_icon_container() const { + return view_->enterprise_icon_container_; + } private: const raw_ptr<LoginUserView::UserImage, ExperimentalAsh> view_; @@ -183,11 +162,17 @@ image_ = new AnimatedRoundedImageView(gfx::Size(image_size, image_size), image_size / 2); AddChildView(image_.get()); - + enterprise_icon_container_ = AddChildView(std::make_unique<views::View>()); const int icon_size = GetIconSize(style); - enterprise_icon_ = new IconRoundedView(icon_size); - enterprise_icon_->SetVisible(false); - AddChildView(enterprise_icon_.get()); + enterprise_icon_container_->SetLayoutManager( + std::make_unique<EnterpriseBadgeLayout>(icon_size)); + + views::ImageView* icon_ = enterprise_icon_container_->AddChildView( + std::make_unique<views::ImageView>(ui::ImageModel::FromVectorIcon( + chromeos::kEnterpriseIcon, kColorAshIconColorSecondary, + icon_size * kIconProportion))); + icon_->SetBackground(views::CreateThemedRoundedRectBackground( + kColorAshIconColorSecondaryBackground, icon_size / 2)); } UserImage(const UserImage&) = delete; @@ -214,7 +199,7 @@ bool is_managed = user.user_account_manager || user.basic_user_info.type == user_manager::USER_TYPE_PUBLIC_ACCOUNT; - enterprise_icon_->SetVisible(is_managed); + enterprise_icon_container_->SetVisible(is_managed); } void SetAnimationEnabled(bool enable) { @@ -263,7 +248,7 @@ } raw_ptr<AnimatedRoundedImageView, ExperimentalAsh> image_ = nullptr; - raw_ptr<IconRoundedView, ExperimentalAsh> enterprise_icon_ = nullptr; + raw_ptr<views::View, ExperimentalAsh> enterprise_icon_container_ = nullptr; bool animation_enabled_ = false; base::WeakPtrFactory<UserImage> weak_factory_{this}; @@ -398,9 +383,9 @@ return view_->remove_account_dialog_; } -views::View* LoginUserView::TestApi::enterprise_icon() const { +views::View* LoginUserView::TestApi::enterprise_icon_container() const { return LoginUserView::UserImage::TestApi(view_->user_image_) - .enterprise_icon(); + .enterprise_icon_container(); } void LoginUserView::TestApi::OnTap() const {
diff --git a/ash/login/ui/login_user_view.h b/ash/login/ui/login_user_view.h index 9c23eb8..ce95199 100644 --- a/ash/login/ui/login_user_view.h +++ b/ash/login/ui/login_user_view.h
@@ -39,7 +39,7 @@ views::View* tap_button() const; views::View* dropdown() const; LoginRemoveAccountDialog* remove_account_dialog() const; - views::View* enterprise_icon() const; + views::View* enterprise_icon_container() const; void OnTap() const;
diff --git a/ash/projector/projector_annotation_tray.cc b/ash/projector/projector_annotation_tray.cc index d051666..3bd49019 100644 --- a/ash/projector/projector_annotation_tray.cc +++ b/ash/projector/projector_annotation_tray.cc
@@ -20,8 +20,11 @@ #include "ash/system/tray/tray_container.h" #include "ash/system/tray/tray_popup_utils.h" #include "ash/system/tray/tray_utils.h" +#include "chromeos/constants/chromeos_features.h" #include "components/prefs/pref_service.h" #include "ui/base/l10n/l10n_util.h" +#include "ui/base/models/image_model.h" +#include "ui/chromeos/styles/cros_tokens_color_mappings.h" #include "ui/compositor/layer.h" #include "ui/events/event.h" #include "ui/gfx/paint_vector_icon.h" @@ -150,6 +153,14 @@ CloseBubble(); } +void ProjectorAnnotationTray::UpdateTrayItemColor(bool is_active) { + DCHECK(chromeos::features::IsJellyEnabled()); + image_view_->SetImage(ui::ImageModel::FromVectorIcon( + GetIconForTool(GetCurrentTool(), current_pen_color_), + is_active ? cros_tokens::kCrosSysSystemOnPrimaryContainer + : cros_tokens::kCrosSysOnSurface)); +} + std::u16string ProjectorAnnotationTray::GetAccessibleNameForTray() { std::u16string enabled_state = l10n_util::GetStringUTF16( GetCurrentTool() == kToolNone @@ -171,7 +182,7 @@ void ProjectorAnnotationTray::CloseBubble() { pen_view_ = nullptr; bubble_.reset(); - + SetIsActive(false); shelf()->UpdateAutoHideState(); } @@ -294,12 +305,16 @@ void ProjectorAnnotationTray::UpdateIcon() { const ProjectorTool tool = GetCurrentTool(); - image_view_->SetImage(gfx::CreateVectorIcon( - GetIconForTool(tool, current_pen_color_), - AshColorProvider::Get()->GetContentLayerColor( - AshColorProvider::ContentLayerType::kIconColorPrimary))); - image_view_->SetTooltipText(GetTooltip()); SetIsActive(tool != kToolNone); + // Only sets the image if Jelly is not enabled, since `UpdateTrayItemColor()` + // will be called in `SetIsActive()` to set the image for Jelly. + if (!chromeos::features::IsJellyEnabled()) { + image_view_->SetImage(gfx::CreateVectorIcon( + GetIconForTool(tool, current_pen_color_), + AshColorProvider::Get()->GetContentLayerColor( + AshColorProvider::ContentLayerType::kIconColorPrimary))); + } + image_view_->SetTooltipText(GetTooltip()); } void ProjectorAnnotationTray::OnPenColorPressed(SkColor color) {
diff --git a/ash/projector/projector_annotation_tray.h b/ash/projector/projector_annotation_tray.h index b9e80cd..7e574f7 100644 --- a/ash/projector/projector_annotation_tray.h +++ b/ash/projector/projector_annotation_tray.h
@@ -46,6 +46,7 @@ // TrayBackgroundView: void OnGestureEvent(ui::GestureEvent* event) override; void ClickedOutsideBubble() override; + void UpdateTrayItemColor(bool is_active) override; std::u16string GetAccessibleNameForTray() override; void HandleLocaleChange() override; void HideBubbleWithView(const TrayBubbleView* bubble_view) override; @@ -68,7 +69,7 @@ // UI. void DeactivateActiveTool(); - // Updates the icon in the status area. + // Updates the icon and tooltip of `image_view_` in the status area. void UpdateIcon(); void OnPenColorPressed(SkColor color);
diff --git a/ash/public/cpp/test/in_process_image_decoder.cc b/ash/public/cpp/test/in_process_image_decoder.cc index 3e8316e..72cd3eb 100644 --- a/ash/public/cpp/test/in_process_image_decoder.cc +++ b/ash/public/cpp/test/in_process_image_decoder.cc
@@ -112,6 +112,10 @@ mojo::PendingReceiver<data_decoder::mojom::Gzipper> receiver) override { FAIL(); } + void BindCborParser(mojo::PendingReceiver<data_decoder::mojom::CborParser> + receiver) override { + FAIL(); + } void BindBleScanParser( mojo::PendingReceiver<data_decoder::mojom::BleScanParser> receiver) override {
diff --git a/ash/public/cpp/test/test_image_decoder.cc b/ash/public/cpp/test/test_image_decoder.cc index 1d3c06d..df46831 100644 --- a/ash/public/cpp/test/test_image_decoder.cc +++ b/ash/public/cpp/test/test_image_decoder.cc
@@ -4,7 +4,9 @@ #include "ash/public/cpp/test/test_image_decoder.h" +#include "mojo/public/cpp/bindings/pending_receiver.h" #include "mojo/public/cpp/bindings/self_owned_receiver.h" +#include "services/data_decoder/public/mojom/cbor_parser.mojom.h" #include "services/data_decoder/public/mojom/image_decoder.mojom.h" #include "testing/gtest/include/gtest/gtest.h" @@ -91,6 +93,10 @@ mojo::PendingReceiver<data_decoder::mojom::Gzipper> receiver) override { FAIL(); } + void BindCborParser(mojo::PendingReceiver<data_decoder::mojom::CborParser> + receiver) override { + FAIL(); + } void BindBleScanParser( mojo::PendingReceiver<data_decoder::mojom::BleScanParser> receiver) override {
diff --git a/ash/system/accessibility/dictation_button_tray.cc b/ash/system/accessibility/dictation_button_tray.cc index ff094a4..8dccbd7 100644 --- a/ash/system/accessibility/dictation_button_tray.cc +++ b/ash/system/accessibility/dictation_button_tray.cc
@@ -19,6 +19,7 @@ #include "ash/system/tray/tray_constants.h" #include "ash/system/tray/tray_container.h" #include "ash/system/tray/tray_utils.h" +#include "chromeos/constants/chromeos_features.h" #include "components/prefs/pref_service.h" #include "ui/accessibility/accessibility_features.h" #include "ui/base/ime/text_input_client.h" @@ -40,8 +41,17 @@ // |enabled| indicates whether the tray button is enabled, i.e. clickable. // A secondary color is used to indicate the icon is not enabled. ui::ImageModel GetIconImage(bool active, bool enabled) { - const ui::ColorId color_id = - enabled ? kColorAshIconColorPrimary : kColorAshIconColorSecondary; + ui::ColorId color_id; + if (chromeos::features::IsJellyEnabled()) { + // For Jelly: the color will change based on whether this tray is active or + // not. + color_id = enabled ? (active ? cros_tokens::kCrosSysSystemOnPrimaryContainer + : cros_tokens::kCrosSysOnSurface) + : cros_tokens::kCrosSysSecondary; + } else { + color_id = + enabled ? kColorAshIconColorPrimary : kColorAshIconColorSecondary; + } return active ? ui::ImageModel::FromVectorIcon(kDictationOnNewuiIcon, color_id) : ui::ImageModel::FromVectorIcon(kDictationOffNewuiIcon, color_id);
diff --git a/ash/system/accessibility/dictation_button_tray.h b/ash/system/accessibility/dictation_button_tray.h index bb4ad48..684fabb 100644 --- a/ash/system/accessibility/dictation_button_tray.h +++ b/ash/system/accessibility/dictation_button_tray.h
@@ -59,6 +59,9 @@ // TrayBackgroundView: void Initialize() override; void ClickedOutsideBubble() override; + // No need to override since the icon gets updated in `UpdateIcon()` along + // with the activation state change. + void UpdateTrayItemColor(bool is_active) override {} std::u16string GetAccessibleNameForTray() override; void HandleLocaleChange() override; void HideBubbleWithView(const TrayBubbleView* bubble_view) override;
diff --git a/ash/system/accessibility/select_to_speak/select_to_speak_tray.cc b/ash/system/accessibility/select_to_speak/select_to_speak_tray.cc index 452ca759..8267fdf5 100644 --- a/ash/system/accessibility/select_to_speak/select_to_speak_tray.cc +++ b/ash/system/accessibility/select_to_speak/select_to_speak_tray.cc
@@ -14,6 +14,7 @@ #include "ash/system/tray/tray_constants.h" #include "ash/system/tray/tray_container.h" #include "ash/system/tray/tray_utils.h" +#include "chromeos/constants/chromeos_features.h" #include "ui/accessibility/accessibility_features.h" #include "ui/base/l10n/l10n_util.h" #include "ui/base/metadata/metadata_impl_macros.h" @@ -33,16 +34,29 @@ ui::ImageModel GetImageOnCurrentSelectToSpeakStatus( const SelectToSpeakState& select_to_speak_state) { + const bool is_jelly_enabled = chromeos::features::IsJellyEnabled(); + // For Jelly: `kSelectToSpeakStateInactive` means the tray is inactive and + // will have a different icon color. `kSelectToSpeakStateSelecting` and + // `kSelectToSpeakStateSpeaking` means the tray is active. switch (select_to_speak_state) { case SelectToSpeakState::kSelectToSpeakStateInactive: - return ui::ImageModel::FromVectorIcon(kSystemTraySelectToSpeakNewuiIcon, - kColorAshIconColorPrimary); + return ui::ImageModel::FromVectorIcon( + kSystemTraySelectToSpeakNewuiIcon, + is_jelly_enabled + ? static_cast<ui::ColorId>(cros_tokens::kCrosSysOnSurface) + : kColorAshIconColorPrimary); case SelectToSpeakState::kSelectToSpeakStateSelecting: return ui::ImageModel::FromVectorIcon( - kSystemTraySelectToSpeakActiveNewuiIcon, kColorAshIconColorPrimary); + kSystemTraySelectToSpeakActiveNewuiIcon, + is_jelly_enabled ? static_cast<ui::ColorId>( + cros_tokens::kCrosSysSystemOnPrimaryContainer) + : kColorAshIconColorPrimary); case SelectToSpeakState::kSelectToSpeakStateSpeaking: - return ui::ImageModel::FromVectorIcon(kSystemTrayStopNewuiIcon, - kColorAshIconColorPrimary); + return ui::ImageModel::FromVectorIcon( + kSystemTrayStopNewuiIcon, + is_jelly_enabled ? static_cast<ui::ColorId>( + cros_tokens::kCrosSysSystemOnPrimaryContainer) + : kColorAshIconColorPrimary); } }
diff --git a/ash/system/accessibility/select_to_speak/select_to_speak_tray.h b/ash/system/accessibility/select_to_speak/select_to_speak_tray.h index afdedf1..92a52514 100644 --- a/ash/system/accessibility/select_to_speak/select_to_speak_tray.h +++ b/ash/system/accessibility/select_to_speak/select_to_speak_tray.h
@@ -42,6 +42,9 @@ // no-ops. void HideBubbleWithView(const TrayBubbleView* bubble_view) override {} void ClickedOutsideBubble() override {} + // No need to override since the icon and tray activation state will change + // and get updated simultaneously in `UpdateUXOnCurrentStatus()`. + void UpdateTrayItemColor(bool is_active) override {} // AccessibilityObserver: void OnAccessibilityStatusChanged() override;
diff --git a/ash/system/eche/eche_tray.cc b/ash/system/eche/eche_tray.cc index a7a25a7..57964c4f 100644 --- a/ash/system/eche/eche_tray.cc +++ b/ash/system/eche/eche_tray.cc
@@ -254,8 +254,13 @@ // Note: `ScreenLayoutObserver` starts observing at its constructor. observed_session_.Observe(Shell::Get()->session_controller()); icon_->SetTooltipText(GetAccessibleNameForTray()); - icon_->SetImage(ui::ImageModel::FromVectorIcon(kPhoneHubPhoneIcon, - kColorAshIconColorPrimary)); + if (chromeos::features::IsJellyEnabled()) { + UpdateTrayItemColor(is_active()); + } else { + icon_->SetImage(ui::ImageModel::FromVectorIcon(kPhoneHubPhoneIcon, + kColorAshIconColorPrimary)); + } + shelf_observation_.Observe(shelf); tablet_mode_observation_.Observe(Shell::Get()->tablet_mode_controller()); shell_observer_.Observe(Shell::Get()); @@ -280,6 +285,14 @@ // Do nothing } +void EcheTray::UpdateTrayItemColor(bool is_active) { + DCHECK(chromeos::features::IsJellyEnabled()); + icon_->SetImage(ui::ImageModel::FromVectorIcon( + kPhoneHubPhoneIcon, is_active + ? cros_tokens::kCrosSysSystemOnPrimaryContainer + : cros_tokens::kCrosSysOnSurface)); +} + std::u16string EcheTray::GetAccessibleNameForTray() { // TODO(nayebi): Change this based on the final model of interaction // between phone hub and Eche.
diff --git a/ash/system/eche/eche_tray.h b/ash/system/eche/eche_tray.h index 7e89e79..c87a0104 100644 --- a/ash/system/eche/eche_tray.h +++ b/ash/system/eche/eche_tray.h
@@ -126,6 +126,7 @@ // TrayBackgroundView: void ClickedOutsideBubble() override; + void UpdateTrayItemColor(bool is_active) override; std::u16string GetAccessibleNameForTray() override; void HandleLocaleChange() override; void HideBubbleWithView(const TrayBubbleView* bubble_view) override;
diff --git a/ash/system/holding_space/holding_space_tray.h b/ash/system/holding_space/holding_space_tray.h index af4443b1..76f455c 100644 --- a/ash/system/holding_space/holding_space_tray.h +++ b/ash/system/holding_space/holding_space_tray.h
@@ -67,6 +67,9 @@ // TrayBackgroundView: void Initialize() override; void ClickedOutsideBubble() override; + // TODO(http://b/287098833): No need to override since the update will be + // handled in the linked bug. + void UpdateTrayItemColor(bool is_active) override {} std::u16string GetAccessibleNameForTray() override; views::View* GetTooltipHandlerForPoint(const gfx::Point& point) override; std::u16string GetTooltipText(const gfx::Point& point) const override;
diff --git a/ash/system/ime_menu/ime_menu_tray.cc b/ash/system/ime_menu/ime_menu_tray.cc index e0017436d..c4fd02c 100644 --- a/ash/system/ime_menu/ime_menu_tray.cc +++ b/ash/system/ime_menu/ime_menu_tray.cc
@@ -51,6 +51,7 @@ #include "ui/base/metadata/metadata_impl_macros.h" #include "ui/base/models/image_model.h" #include "ui/base/resource/resource_bundle.h" +#include "ui/chromeos/styles/cros_tokens_color_mappings.h" #include "ui/compositor/layer.h" #include "ui/gfx/geometry/insets.h" #include "ui/gfx/paint_vector_icon.h" @@ -502,6 +503,12 @@ CloseBubble(); } +void ImeMenuTray::UpdateTrayItemColor(bool is_active) { + DCHECK(chromeos::features::IsJellyEnabled()); + UpdateTrayImageOrLabelColor( + extension_ime_util::IsArcIME(ime_controller_->current_ime().id)); +} + void ImeMenuTray::OnTrayActivated(const ui::Event& event) { if (!event.IsMouseEvent() && !event.IsGestureEvent()) return; @@ -608,15 +615,22 @@ // IME. if (extension_ime_util::IsArcIME(current_ime.id)) { CreateImageView(); - image_view_->SetImage(ui::ImageModel::FromVectorIcon( - kShelfGlobeIcon, kColorAshIconColorPrimary)); + if (chromeos::features::IsJellyEnabled()) { + UpdateTrayImageOrLabelColor(/*is_image=*/true); + } else { + image_view_->SetImage(ui::ImageModel::FromVectorIcon( + kShelfGlobeIcon, kColorAshIconColorPrimary)); + } return; } // Updates the tray label based on the current input method. CreateLabel(); - - label_->SetEnabledColorId(kColorAshIconColorPrimary); + if (chromeos::features::IsJellyEnabled()) { + UpdateTrayImageOrLabelColor(/*is_image=*/false); + } else { + label_->SetEnabledColorId(kColorAshIconColorPrimary); + } if (current_ime.third_party) label_->SetText(current_ime.short_name + u"*"); @@ -655,6 +669,21 @@ tray_container()->AddChildView(image_view_.get()); } +void ImeMenuTray::UpdateTrayImageOrLabelColor(bool is_image) { + DCHECK(chromeos::features::IsJellyEnabled()); + const ui::ColorId color_id = + is_active() ? cros_tokens::kCrosSysSystemOnPrimaryContainer + : cros_tokens::kCrosSysOnSurface; + + if (is_image) { + image_view_->SetImage( + ui::ImageModel::FromVectorIcon(kShelfGlobeIcon, color_id)); + return; + } + + label_->SetEnabledColorId(color_id); +} + BEGIN_METADATA(ImeMenuTray, TrayBackgroundView) END_METADATA
diff --git a/ash/system/ime_menu/ime_menu_tray.h b/ash/system/ime_menu/ime_menu_tray.h index b4557e27..b8651ca 100644 --- a/ash/system/ime_menu/ime_menu_tray.h +++ b/ash/system/ime_menu/ime_menu_tray.h
@@ -60,6 +60,7 @@ void HandleLocaleChange() override; void HideBubbleWithView(const TrayBubbleView* bubble_view) override; void ClickedOutsideBubble() override; + void UpdateTrayItemColor(bool is_active) override; void OnTrayActivated(const ui::Event& event) override; void CloseBubble() override; void ShowBubble() override; @@ -93,6 +94,10 @@ void CreateLabel(); void CreateImageView(); + // For Jelly: Updates the color of `image_view_` if `is_image` is true or the + // color of `label_` otherwise. + void UpdateTrayImageOrLabelColor(bool is_image); + raw_ptr<ImeControllerImpl, ExperimentalAsh> ime_controller_; // Bubble for default and detailed views.
diff --git a/ash/system/media/media_tray.cc b/ash/system/media/media_tray.cc index 5ae18dd..21243203 100644 --- a/ash/system/media/media_tray.cc +++ b/ash/system/media/media_tray.cc
@@ -224,9 +224,13 @@ auto icon = std::make_unique<views::ImageView>(); icon->SetTooltipText(l10n_util::GetStringUTF16( IDS_ASH_GLOBAL_MEDIA_CONTROLS_BUTTON_TOOLTIP_TEXT)); - icon->SetImage(ui::ImageModel::FromVectorIcon(kGlobalMediaControlsIcon, - kColorAshIconColorPrimary)); icon_ = tray_container()->AddChildView(std::move(icon)); + if (chromeos::features::IsJellyEnabled()) { + UpdateTrayItemColor(is_active()); + } else { + icon_->SetImage(ui::ImageModel::FromVectorIcon(kGlobalMediaControlsIcon, + kColorAshIconColorPrimary)); + } } MediaTray::~MediaTray() { @@ -295,6 +299,14 @@ CloseBubble(); } +void MediaTray::UpdateTrayItemColor(bool is_active) { + DCHECK(chromeos::features::IsJellyEnabled()); + icon_->SetImage(ui::ImageModel::FromVectorIcon( + kGlobalMediaControlsIcon, + is_active ? cros_tokens::kCrosSysSystemOnPrimaryContainer + : cros_tokens::kCrosSysOnSurface)); +} + void MediaTray::OnLockStateChanged(bool locked) { UpdateDisplayState(); }
diff --git a/ash/system/media/media_tray.h b/ash/system/media/media_tray.h index 9d64a77..0dff4211 100644 --- a/ash/system/media/media_tray.h +++ b/ash/system/media/media_tray.h
@@ -73,6 +73,7 @@ void CloseBubble() override; void HideBubbleWithView(const TrayBubbleView* bubble_view) override; void ClickedOutsideBubble() override; + void UpdateTrayItemColor(bool is_active) override; void AnchorUpdated() override; // SessionObserver:
diff --git a/ash/system/media/media_tray_unittest.cc b/ash/system/media/media_tray_unittest.cc index 44d0eda..55f2d18 100644 --- a/ash/system/media/media_tray_unittest.cc +++ b/ash/system/media/media_tray_unittest.cc
@@ -85,6 +85,7 @@ void HandleLocaleChange() override {} void HideBubbleWithView(const TrayBubbleView* bubble_view) override {} void ClickedOutsideBubble() override {} + void UpdateTrayItemColor(bool is_active) override {} }; } // namespace
diff --git a/ash/system/notification_center/notification_center_tray.cc b/ash/system/notification_center/notification_center_tray.cc index 8342d791..0b4a3fc 100644 --- a/ash/system/notification_center/notification_center_tray.cc +++ b/ash/system/notification_center/notification_center_tray.cc
@@ -141,6 +141,14 @@ CloseBubble(); } +void NotificationCenterTray::UpdateTrayItemColor(bool is_active) { + DCHECK(chromeos::features::IsJellyEnabled()); + for (auto* tray_item : tray_container()->children()) { + static_cast<TrayItemView*>(tray_item)->UpdateLabelOrImageViewColor( + is_active); + } +} + void NotificationCenterTray::CloseBubble() { if (!bubble_) { return; @@ -148,7 +156,6 @@ bubble_.reset(); SetIsActive(false); - UpdateTrayItemsColor(/*active=*/false); // Inform the message center that the bubble has closed so that popups are // created for new notifications. @@ -174,7 +181,6 @@ bubble_->ShowBubble(); SetIsActive(true); - UpdateTrayItemsColor(/*active=*/true); } void NotificationCenterTray::UpdateAfterLoginStatusChange() { @@ -222,7 +228,9 @@ message_center::MessageCenter::Get()->NotificationCount() > 0 && system_tray_visible_; SetVisiblePreferred(new_visibility); - UpdateTrayItemsColor(is_active()); + if (chromeos::features::IsJellyEnabled()) { + UpdateTrayItemColor(is_active()); + } // We should close the bubble if there are no more notifications to show. if (!new_visibility && bubble_) { @@ -230,15 +238,6 @@ } } -void NotificationCenterTray::UpdateTrayItemsColor(bool active) { - if (!chromeos::features::IsJellyEnabled()) { - return; - } - for (auto* tray_item : tray_container()->children()) { - static_cast<TrayItemView*>(tray_item)->UpdateLabelOrImageViewColor(active); - } -} - BEGIN_METADATA(NotificationCenterTray, TrayBackgroundView) END_METADATA
diff --git a/ash/system/notification_center/notification_center_tray.h b/ash/system/notification_center/notification_center_tray.h index 6a564dbf..693c5c3 100644 --- a/ash/system/notification_center/notification_center_tray.h +++ b/ash/system/notification_center/notification_center_tray.h
@@ -72,6 +72,7 @@ void HandleLocaleChange() override; void HideBubbleWithView(const TrayBubbleView* bubble_view) override; void ClickedOutsideBubble() override; + void UpdateTrayItemColor(bool is_active) override; void CloseBubble() override; void ShowBubble() override; void UpdateAfterLoginStatusChange() override; @@ -97,10 +98,6 @@ friend class NotificationCounterViewTest; friend class NotificationIconsControllerTest; - // Updates the color of all tray item views in `tray_container()` based on the - // active status. - void UpdateTrayItemsColor(bool active); - // Manages notification metrics. const std::unique_ptr<NotificationMetricsRecorder> notification_metrics_recorder_;
diff --git a/ash/system/overview/overview_button_tray.cc b/ash/system/overview/overview_button_tray.cc index 9ad1f6d..4b00ad2d4 100644 --- a/ash/system/overview/overview_button_tray.cc +++ b/ash/system/overview/overview_button_tray.cc
@@ -23,8 +23,12 @@ #include "ash/wm/window_state.h" #include "base/metrics/user_metrics.h" #include "base/metrics/user_metrics_action.h" +#include "chromeos/constants/chromeos_features.h" #include "ui/base/l10n/l10n_util.h" #include "ui/base/metadata/metadata_impl_macros.h" +#include "ui/chromeos/styles/cros_tokens_color_mappings.h" +#include "ui/gfx/image/image.h" +#include "ui/gfx/image/image_skia.h" #include "ui/gfx/paint_vector_icon.h" #include "ui/views/animation/ink_drop.h" #include "ui/views/border.h" @@ -35,13 +39,6 @@ namespace { -gfx::ImageSkia GetIconImage() { - return gfx::CreateVectorIcon( - kShelfOverviewIcon, - AshColorProvider::Get()->GetContentLayerColor( - AshColorProvider::ContentLayerType::kButtonIconColor)); -} - bool ShouldButtonBeVisible() { auto* shell = Shell::Get(); SessionControllerImpl* session_controller = shell->session_controller(); @@ -154,6 +151,11 @@ void OverviewButtonTray::ClickedOutsideBubble() {} +void OverviewButtonTray::UpdateTrayItemColor(bool is_active) { + DCHECK(chromeos::features::IsJellyEnabled()); + icon_->SetImage(GetIconImage()); +} + std::u16string OverviewButtonTray::GetAccessibleNameForTray() { return l10n_util::GetStringUTF16(IDS_ASH_OVERVIEW_BUTTON_ACCESSIBLE_NAME); } @@ -239,6 +241,19 @@ SetVisiblePreferred(ShouldButtonBeVisible()); } +gfx::ImageSkia OverviewButtonTray::GetIconImage() { + SkColor color; + if (GetColorProvider() && chromeos::features::IsJellyEnabled()) { + color = GetColorProvider()->GetColor( + is_active() ? cros_tokens::kCrosSysSystemOnPrimaryContainer + : cros_tokens::kCrosSysOnSurface); + } else { + color = AshColorProvider::Get()->GetContentLayerColor( + AshColorProvider::ContentLayerType::kButtonIconColor); + } + return gfx::CreateVectorIcon(kShelfOverviewIcon, color); +} + BEGIN_METADATA(OverviewButtonTray, TrayBackgroundView) END_METADATA
diff --git a/ash/system/overview/overview_button_tray.h b/ash/system/overview/overview_button_tray.h index 49d4e4a..4518553 100644 --- a/ash/system/overview/overview_button_tray.h +++ b/ash/system/overview/overview_button_tray.h
@@ -81,6 +81,7 @@ // TrayBackgroundView: void UpdateAfterLoginStatusChange() override; void ClickedOutsideBubble() override; + void UpdateTrayItemColor(bool is_active) override; std::u16string GetAccessibleNameForTray() override; void HandleLocaleChange() override; void HideBubbleWithView(const TrayBubbleView* bubble_view) override; @@ -95,6 +96,9 @@ void UpdateIconVisibility(); + // Gets the icon image of `icon_`. + gfx::ImageSkia GetIconImage(); + // Weak pointer, will be parented by TrayContainer for its lifetime. raw_ptr<views::ImageView, ExperimentalAsh> icon_;
diff --git a/ash/system/palette/palette_tray.cc b/ash/system/palette/palette_tray.cc index 9b4e729..5cd2bf9 100644 --- a/ash/system/palette/palette_tray.cc +++ b/ash/system/palette/palette_tray.cc
@@ -46,6 +46,7 @@ #include "ui/accessibility/ax_node_data.h" #include "ui/base/l10n/l10n_util.h" #include "ui/base/resource/resource_bundle.h" +#include "ui/chromeos/styles/cros_tokens_color_mappings.h" #include "ui/color/color_id.h" #include "ui/compositor/layer.h" #include "ui/display/display.h" @@ -276,7 +277,6 @@ icon->SetTooltipText(l10n_util::GetStringUTF16(IDS_ASH_STYLUS_TOOLS_TITLE)); tray_container()->SetMargin(kTrayIconMainAxisInset, kTrayIconCrossAxisInset); icon_ = tray_container()->AddChildView(std::move(icon)); - UpdateTrayIcon(); Shell::Get()->AddShellObserver(this); Shell::Get()->window_tree_host_manager()->AddObserver(this); @@ -464,6 +464,11 @@ HidePalette(); } +void PaletteTray::UpdateTrayItemColor(bool is_active) { + DCHECK(chromeos::features::IsJellyEnabled()); + UpdateTrayIcon(); +} + void PaletteTray::OnThemeChanged() { TrayBackgroundView::OnThemeChanged(); UpdateTrayIcon(); @@ -702,12 +707,19 @@ } void PaletteTray::UpdateTrayIcon() { + SkColor color; + if (chromeos::features::IsJellyEnabled()) { + color = GetColorProvider()->GetColor( + is_active() ? cros_tokens::kCrosSysSystemOnPrimaryContainer + : cros_tokens::kCrosSysOnSurface); + } else { + color = AshColorProvider::Get()->GetContentLayerColor( + AshColorProvider::ContentLayerType::kIconColorPrimary); + } icon_->SetImage(CreateVectorIcon( palette_tool_manager_->GetActiveTrayIcon( palette_tool_manager_->GetActiveTool(PaletteGroup::MODE)), - kTrayIconSize, - AshColorProvider::Get()->GetContentLayerColor( - AshColorProvider::ContentLayerType::kIconColorPrimary))); + kTrayIconSize, color)); } void PaletteTray::OnPaletteEnabledPrefChanged() {
diff --git a/ash/system/palette/palette_tray.h b/ash/system/palette/palette_tray.h index e8519a55..e214caa96 100644 --- a/ash/system/palette/palette_tray.h +++ b/ash/system/palette/palette_tray.h
@@ -98,6 +98,7 @@ // TrayBackgroundView: void ClickedOutsideBubble() override; + void UpdateTrayItemColor(bool is_active) override; void OnThemeChanged() override; std::u16string GetAccessibleNameForTray() override; void HandleLocaleChange() override;
diff --git a/ash/system/phonehub/phone_hub_tray.cc b/ash/system/phonehub/phone_hub_tray.cc index d64d7d4..576b1a1 100644 --- a/ash/system/phonehub/phone_hub_tray.cc +++ b/ash/system/phonehub/phone_hub_tray.cc
@@ -115,16 +115,15 @@ views::ImageButton::VerticalAlignment::ALIGN_MIDDLE); icon->SetImageHorizontalAlignment( views::ImageButton::HorizontalAlignment::ALIGN_CENTER); - - icon->SetImageModel( - views::ImageButton::STATE_NORMAL, - ui::ImageModel::FromVectorIcon( - kPhoneHubPhoneIcon, - chromeos::features::IsJellyrollEnabled() - ? static_cast<ui::ColorId>(cros_tokens::kCrosSysOnSurface) - : kColorAshIconColorPrimary)); - icon_ = tray_container()->AddChildView(std::move(icon)); + if (chromeos::features::IsJellyEnabled()) { + UpdateTrayItemColor(is_active()); + } else { + icon_->SetImageModel(views::ImageButton::STATE_NORMAL, + ui::ImageModel::FromVectorIcon( + kPhoneHubPhoneIcon, kColorAshIconColorPrimary)); + } + Shell::Get()->window_tree_host_manager()->AddObserver(this); } @@ -153,6 +152,16 @@ CloseBubble(); } +void PhoneHubTray::UpdateTrayItemColor(bool is_active) { + DCHECK(chromeos::features::IsJellyEnabled()); + icon_->SetImageModel( + views::ImageButton::STATE_NORMAL, + ui::ImageModel::FromVectorIcon( + kPhoneHubPhoneIcon, + is_active ? cros_tokens::kCrosSysSystemOnPrimaryContainer + : cros_tokens::kCrosSysOnSurface)); +} + std::u16string PhoneHubTray::GetAccessibleNameForTray() { return l10n_util::GetStringUTF16(IDS_ASH_PHONE_HUB_TRAY_ACCESSIBLE_NAME); }
diff --git a/ash/system/phonehub/phone_hub_tray.h b/ash/system/phonehub/phone_hub_tray.h index 0895f693..b39e67fd 100644 --- a/ash/system/phonehub/phone_hub_tray.h +++ b/ash/system/phonehub/phone_hub_tray.h
@@ -65,6 +65,7 @@ // TrayBackgroundView: void ClickedOutsideBubble() override; + void UpdateTrayItemColor(bool is_active) override; std::u16string GetAccessibleNameForTray() override; void HandleLocaleChange() override; void HideBubbleWithView(const TrayBubbleView* bubble_view) override;
diff --git a/ash/system/session/logout_button_tray.h b/ash/system/session/logout_button_tray.h index 7c7d0f6..375684d8 100644 --- a/ash/system/session/logout_button_tray.h +++ b/ash/system/session/logout_button_tray.h
@@ -44,6 +44,9 @@ void UpdateLayout() override; void UpdateBackground() override; void ClickedOutsideBubble() override; + // No need to override since this view doesn't have an active/inactive state. + // Clicking on it will log out of the session and make this view disappear. + void UpdateTrayItemColor(bool is_active) override {} void HideBubbleWithView(const TrayBubbleView* bubble_view) override; std::u16string GetAccessibleNameForTray() override; void HandleLocaleChange() override;
diff --git a/ash/system/tray/status_area_overflow_button_tray.h b/ash/system/tray/status_area_overflow_button_tray.h index 6ed539e..0d6de2c2 100644 --- a/ash/system/tray/status_area_overflow_button_tray.h +++ b/ash/system/tray/status_area_overflow_button_tray.h
@@ -43,6 +43,8 @@ // TrayBackgroundView: void ClickedOutsideBubble() override; + // No need to override since this view doesn't have an active/inactive state. + void UpdateTrayItemColor(bool is_active) override {} std::u16string GetAccessibleNameForTray() override; void HandleLocaleChange() override; void HideBubbleWithView(const TrayBubbleView* bubble_view) override;
diff --git a/ash/system/tray/tray_background_view.cc b/ash/system/tray/tray_background_view.cc index 413c094..4a5ea8c 100644 --- a/ash/system/tray/tray_background_view.cc +++ b/ash/system/tray/tray_background_view.cc
@@ -863,13 +863,15 @@ return; } is_active_ = is_active; - if (!chromeos::features::IsJellyEnabled()) { + UpdateBackgroundColor(is_active); + if (chromeos::features::IsJellyEnabled()) { + UpdateTrayItemColor(is_active); + } else { views::InkDrop::Get(this)->AnimateToState( is_active_ ? views::InkDropState::ACTIVATED : views::InkDropState::DEACTIVATED, nullptr); } - UpdateBackgroundColor(is_active); } views::View* TrayBackgroundView::GetBubbleAnchor() const {
diff --git a/ash/system/tray/tray_background_view.h b/ash/system/tray/tray_background_view.h index a4ed7bc..261a10b 100644 --- a/ash/system/tray/tray_background_view.h +++ b/ash/system/tray/tray_background_view.h
@@ -161,6 +161,10 @@ // Updates the background layer. virtual void UpdateBackground(); + // For Jelly: updates the color of either the icon or the label of this view + // based on the active state specified by `is_active`. + virtual void UpdateTrayItemColor(bool is_active) = 0; + // Gets the anchor for bubbles, which is tray_container(). views::View* GetBubbleAnchor() const;
diff --git a/ash/system/tray/tray_background_view_unittest.cc b/ash/system/tray/tray_background_view_unittest.cc index 86ecc715..13a3d2c 100644 --- a/ash/system/tray/tray_background_view_unittest.cc +++ b/ash/system/tray/tray_background_view_unittest.cc
@@ -38,6 +38,7 @@ // TrayBackgroundView: void ClickedOutsideBubble() override {} + void UpdateTrayItemColor(bool is_active) override {} std::u16string GetAccessibleNameForTray() override { return u"TestTrayBackgroundView"; }
diff --git a/ash/system/unified/date_tray.cc b/ash/system/unified/date_tray.cc index 04d34cea..0b32fe52 100644 --- a/ash/system/unified/date_tray.cc +++ b/ash/system/unified/date_tray.cc
@@ -106,14 +106,16 @@ } } +void DateTray::UpdateTrayItemColor(bool is_active) { + time_view_->UpdateLabelOrImageViewColor(is_active); +} + void DateTray::OnOpeningCalendarView() { SetIsActive(true); - time_view_->UpdateLabelOrImageViewColor(/*active=*/true); } void DateTray::OnLeavingCalendarView() { SetIsActive(false); - time_view_->UpdateLabelOrImageViewColor(/*active=*/false); } void DateTray::OnButtonPressed(const ui::Event& event) {
diff --git a/ash/system/unified/date_tray.h b/ash/system/unified/date_tray.h index b7c4254..265c821 100644 --- a/ash/system/unified/date_tray.h +++ b/ash/system/unified/date_tray.h
@@ -50,6 +50,7 @@ void CloseBubble() override; void HideBubbleWithView(const TrayBubbleView* bubble_view) override {} void ClickedOutsideBubble() override; + void UpdateTrayItemColor(bool is_active) override; // UnifiedSystemTray::Observer: void OnOpeningCalendarView() override;
diff --git a/ash/system/unified/unified_system_tray.cc b/ash/system/unified/unified_system_tray.cc index 64b20bab..30fd46a 100644 --- a/ash/system/unified/unified_system_tray.cc +++ b/ash/system/unified/unified_system_tray.cc
@@ -541,7 +541,6 @@ void UnifiedSystemTray::OnOpeningCalendarView() { SetIsActive(false); - UpdateTrayItemsColor(/*active=*/false); for (auto& observer : observers_) { observer.OnOpeningCalendarView(); } @@ -549,7 +548,6 @@ void UnifiedSystemTray::OnTransitioningFromCalendarToMainView() { SetIsActive(true); - UpdateTrayItemsColor(/*active=*/true); for (auto& observer : observers_) { observer.OnLeavingCalendarView(); } @@ -792,13 +790,11 @@ return; } SetIsActive(true); - UpdateTrayItemsColor(/*active=*/true); } void UnifiedSystemTray::HideBubbleInternal() { DestroyBubbles(); SetIsActive(false); - UpdateTrayItemsColor(/*active=*/false); } void UnifiedSystemTray::UpdateNotificationInternal() { @@ -863,12 +859,10 @@ bubble_.reset(); } -void UnifiedSystemTray::UpdateTrayItemsColor(bool active) { - if (!chromeos::features::IsJellyEnabled()) { - return; - } +void UnifiedSystemTray::UpdateTrayItemColor(bool is_active) { + DCHECK(chromeos::features::IsJellyEnabled()); for (auto* tray_item : tray_items_) { - tray_item->UpdateLabelOrImageViewColor(active); + tray_item->UpdateLabelOrImageViewColor(is_active); } }
diff --git a/ash/system/unified/unified_system_tray.h b/ash/system/unified/unified_system_tray.h index 3bc0856..b9a0cf7 100644 --- a/ash/system/unified/unified_system_tray.h +++ b/ash/system/unified/unified_system_tray.h
@@ -208,6 +208,7 @@ void HideBubble(const TrayBubbleView* bubble_view) override; void HideBubbleWithView(const TrayBubbleView* bubble_view) override; void ClickedOutsideBubble() override; + void UpdateTrayItemColor(bool is_active) override; void UpdateLayout() override; void UpdateAfterLoginStatusChange() override; bool ShouldEnableExtraKeyboardAccessibility() override; @@ -300,10 +301,6 @@ // removing bubble related observers. void DestroyBubbles(); - // Updates the color of all tray item views in `tray_container()` based on the - // active status. - void UpdateTrayItemsColor(bool active); - std::unique_ptr<UiDelegate> ui_delegate_; std::unique_ptr<UnifiedSystemTrayBubble> bubble_;
diff --git a/ash/system/video_conference/video_conference_tray.h b/ash/system/video_conference/video_conference_tray.h index fd116d9d..df196ac 100644 --- a/ash/system/video_conference/video_conference_tray.h +++ b/ash/system/video_conference/video_conference_tray.h
@@ -126,6 +126,8 @@ std::u16string GetAccessibleNameForBubble() override; void HideBubbleWithView(const TrayBubbleView* bubble_view) override; void ClickedOutsideBubble() override; + // No need to override since this view doesn't have an active/inactive state. + void UpdateTrayItemColor(bool is_active) override {} void HandleLocaleChange() override; void AnchorUpdated() override; void OnAnimationEnded() override;
diff --git a/ash/system/virtual_keyboard/virtual_keyboard_tray.cc b/ash/system/virtual_keyboard/virtual_keyboard_tray.cc index d215a63c..858ae22 100644 --- a/ash/system/virtual_keyboard/virtual_keyboard_tray.cc +++ b/ash/system/virtual_keyboard/virtual_keyboard_tray.cc
@@ -17,6 +17,7 @@ #include "ash/style/ash_color_id.h" #include "ash/system/tray/tray_constants.h" #include "ash/system/tray/tray_container.h" +#include "chromeos/constants/chromeos_features.h" #include "ui/base/l10n/l10n_util.h" #include "ui/base/metadata/metadata_impl_macros.h" #include "ui/base/models/image_model.h" @@ -52,6 +53,12 @@ icon->SetBorder(views::CreateEmptyBorder( gfx::Insets::VH(vertical_padding, horizontal_padding))); icon_ = tray_container()->AddChildView(std::move(icon)); + // First sets the image with non-Jelly color to get the image dimension and + // create the correct paddings, and then updates the color if Jelly is + // enabled. + if (chromeos::features::IsJellyEnabled()) { + UpdateTrayItemColor(is_active()); + } // The Shell may not exist in some unit tests. if (Shell::HasInstance()) { @@ -119,6 +126,14 @@ void VirtualKeyboardTray::ClickedOutsideBubble() {} +void VirtualKeyboardTray::UpdateTrayItemColor(bool is_active) { + DCHECK(chromeos::features::IsJellyEnabled()); + icon_->SetImage(ui::ImageModel::FromVectorIcon( + kShelfKeyboardNewuiIcon, + is_active ? cros_tokens::kCrosSysSystemOnPrimaryContainer + : cros_tokens::kCrosSysOnSurface)); +} + void VirtualKeyboardTray::OnAccessibilityStatusChanged() { bool new_enabled = Shell::Get()->accessibility_controller()->virtual_keyboard().enabled();
diff --git a/ash/system/virtual_keyboard/virtual_keyboard_tray.h b/ash/system/virtual_keyboard/virtual_keyboard_tray.h index a0e247e8..631d3d5 100644 --- a/ash/system/virtual_keyboard/virtual_keyboard_tray.h +++ b/ash/system/virtual_keyboard/virtual_keyboard_tray.h
@@ -42,6 +42,7 @@ void HandleLocaleChange() override; void HideBubbleWithView(const TrayBubbleView* bubble_view) override; void ClickedOutsideBubble() override; + void UpdateTrayItemColor(bool is_active) override; // AccessibilityObserver: void OnAccessibilityStatusChanged() override;
diff --git a/ash/webui/camera_app_ui/resources/js/main.ts b/ash/webui/camera_app_ui/resources/js/main.ts index d6ce35b..731a0de 100644 --- a/ash/webui/camera_app_ui/resources/js/main.ts +++ b/ash/webui/camera_app_ui/resources/js/main.ts
@@ -3,7 +3,7 @@ // found in the LICENSE file. import { - startColorChangeUpdater, + ColorChangeUpdater, } from 'chrome://resources/cr_components/color_change_listener/colors_css_updater.js'; @@ -516,7 +516,7 @@ }); } if (loadTimeData.getChromeFlag(Flag.JELLY)) { - startColorChangeUpdater(); + ColorChangeUpdater.forDocument().start(); await loadCSS('chrome://theme/colors.css?sets=ref,sys'); } else { await loadCSS('/css/colors_default.css');
diff --git a/ash/webui/color_internals/resources/index.ts b/ash/webui/color_internals/resources/index.ts index c16766f9..271f4114 100644 --- a/ash/webui/color_internals/resources/index.ts +++ b/ash/webui/color_internals/resources/index.ts
@@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -import {COLOR_PROVIDER_CHANGED, ColorChangeUpdater, startColorChangeUpdater} from 'chrome://resources/cr_components/color_change_listener/colors_css_updater.js'; +import {COLOR_PROVIDER_CHANGED, ColorChangeUpdater} from 'chrome://resources/cr_components/color_change_listener/colors_css_updater.js'; import {getRGBAFromComputedStyle} from './utils.js'; import {startObservingWallpaperColors} from './wallpaper_colors.js'; @@ -104,7 +104,7 @@ window.onload = () => { populateTokenTable(); - startColorChangeUpdater(); + ColorChangeUpdater.forDocument().start(); startObservingWallpaperColors(); ColorChangeUpdater.forDocument().eventTarget.addEventListener( COLOR_PROVIDER_CHANGED, onColorChange);
diff --git a/ash/webui/common/resources/cellular_setup/base_page.html b/ash/webui/common/resources/cellular_setup/base_page.html index 8b5a558..a945978 100644 --- a/ash/webui/common/resources/cellular_setup/base_page.html +++ b/ash/webui/common/resources/cellular_setup/base_page.html
@@ -1,4 +1,4 @@ -<style include="iron-positioning"> +<style include="iron-positioning cros-color-overrides"> :host { display: flex; flex-direction: column;
diff --git a/ash/webui/common/resources/cellular_setup/base_page.js b/ash/webui/common/resources/cellular_setup/base_page.js index 7c2cfe12..7e096d0 100644 --- a/ash/webui/common/resources/cellular_setup/base_page.js +++ b/ash/webui/common/resources/cellular_setup/base_page.js
@@ -3,8 +3,9 @@ // found in the LICENSE file. /** Base template with elements common to all Cellular Setup flow sub-pages. */ -import '//resources/cr_elements/cr_shared_vars.css.js'; import '//resources/ash/common/cellular_setup/cellular_setup_icons.html.js'; +import '//resources/cr_elements/chromeos/cros_color_overrides.css.js'; +import '//resources/cr_elements/cr_shared_vars.css.js'; import '//resources/polymer/v3_0/iron-flex-layout/iron-flex-layout-classes.js'; import {I18nBehavior} from '//resources/ash/common/i18n_behavior.js';
diff --git a/ash/webui/common/resources/cellular_setup/button_bar.html b/ash/webui/common/resources/cellular_setup/button_bar.html index 5f068e7..ce392974 100644 --- a/ash/webui/common/resources/cellular_setup/button_bar.html +++ b/ash/webui/common/resources/cellular_setup/button_bar.html
@@ -1,4 +1,4 @@ -<style> +<style include="cros-color-overrides"> :host { display: flex; justify-content: flex-end;
diff --git a/ash/webui/common/resources/cellular_setup/button_bar.js b/ash/webui/common/resources/cellular_setup/button_bar.js index 03b6b0b..a8ec87f 100644 --- a/ash/webui/common/resources/cellular_setup/button_bar.js +++ b/ash/webui/common/resources/cellular_setup/button_bar.js
@@ -3,13 +3,14 @@ // found in the LICENSE file. /** Element containing navigation buttons for the Cellular Setup flow. */ +import '//resources/cr_elements/chromeos/cros_color_overrides.css.js'; import '//resources/cr_elements/cr_button/cr_button.js'; import '//resources/cr_elements/cr_shared_style.css.js'; import '//resources/cr_elements/cr_shared_vars.css.js'; +import {assert, assertNotReached} from '//resources/ash/common/assert.js'; import {focusWithoutInk} from '//resources/ash/common/focus_without_ink_js.js'; import {I18nBehavior} from '//resources/ash/common/i18n_behavior.js'; -import {assert, assertNotReached} from '//resources/ash/common/assert.js'; import {Polymer} from '//resources/polymer/v3_0/polymer/polymer_bundled.min.js'; import {getTemplate} from './button_bar.html.js';
diff --git a/ash/webui/common/resources/multidevice_setup/multidevice_setup.js b/ash/webui/common/resources/multidevice_setup/multidevice_setup.js index 1aa1d5af..2f1a53a 100644 --- a/ash/webui/common/resources/multidevice_setup/multidevice_setup.js +++ b/ash/webui/common/resources/multidevice_setup/multidevice_setup.js
@@ -14,7 +14,7 @@ import {assert} from '//resources/ash/common/assert.js'; import {WebUIListenerBehavior} from '//resources/ash/common/web_ui_listener_behavior.js'; import {Polymer} from '//resources/polymer/v3_0/polymer/polymer_bundled.min.js'; -import {startColorChangeUpdater} from 'chrome://resources/cr_components/color_change_listener/colors_css_updater.js'; +import {ColorChangeUpdater} from 'chrome://resources/cr_components/color_change_listener/colors_css_updater.js'; import {loadTimeData} from 'chrome://resources/js/load_time_data.js'; import {HostDevice} from 'chrome://resources/mojo/chromeos/ash/services/multidevice_setup/public/mojom/multidevice_setup.mojom-webui.js'; @@ -192,7 +192,10 @@ link.href = 'chrome://theme/colors.css?sets=legacy,sys'; document.head.appendChild(link); document.body.classList.add('jelly-enabled'); - startColorChangeUpdater(); + /** @suppress {checkTypes} */ + (function() { + ColorChangeUpdater.forDocument().start(); + })(); } },
diff --git a/ash/webui/common/resources/office_fallback/office_fallback_dialog.ts b/ash/webui/common/resources/office_fallback/office_fallback_dialog.ts index 09fef3f8..b83c725 100644 --- a/ash/webui/common/resources/office_fallback/office_fallback_dialog.ts +++ b/ash/webui/common/resources/office_fallback/office_fallback_dialog.ts
@@ -6,7 +6,7 @@ import './strings.m.js'; import {loadTimeData} from 'chrome://resources/ash/common/load_time_data.m.js'; -import {startColorChangeUpdater} from 'chrome://resources/cr_components/color_change_listener/colors_css_updater.js'; +import {ColorChangeUpdater} from 'chrome://resources/cr_components/color_change_listener/colors_css_updater.js'; import {assert} from 'chrome://resources/js/assert_ts.js'; import {DialogChoice} from './office_fallback.mojom-webui.js'; @@ -17,7 +17,7 @@ const jellyEnabled = loadTimeData.getBoolean('isJellyEnabled'); const theme = jellyEnabled ? 'refresh23' : 'legacy'; document.documentElement.setAttribute('theme', theme); - startColorChangeUpdater(); + ColorChangeUpdater.forDocument().start(); }); /**
diff --git a/ash/webui/diagnostics_ui/resources/diagnostics_app.ts b/ash/webui/diagnostics_ui/resources/diagnostics_app.ts index 18f1caa..6fff07e 100644 --- a/ash/webui/diagnostics_ui/resources/diagnostics_app.ts +++ b/ash/webui/diagnostics_ui/resources/diagnostics_app.ts
@@ -16,7 +16,7 @@ import {loadTimeData} from 'chrome://resources/ash/common/load_time_data.m.js'; import {SelectorItem} from 'chrome://resources/ash/common/navigation_selector.js'; import {NavigationViewPanelElement} from 'chrome://resources/ash/common/navigation_view_panel.js'; -import {startColorChangeUpdater} from 'chrome://resources/cr_components/color_change_listener/colors_css_updater.js'; +import {ColorChangeUpdater} from 'chrome://resources/cr_components/color_change_listener/colors_css_updater.js'; import {CrToastElement} from 'chrome://resources/cr_elements/cr_toast/cr_toast.js'; import {I18nMixin} from 'chrome://resources/cr_elements/i18n_mixin.js'; import {assert} from 'chrome://resources/js/assert_ts.js'; @@ -210,7 +210,7 @@ typographyLink.rel = 'stylesheet'; document.head.appendChild(typographyLink); document.body.classList.add('jelly-enabled'); - startColorChangeUpdater(); + ColorChangeUpdater.forDocument().start(); } this.createNavigationPanel();
diff --git a/ash/webui/firmware_update_ui/resources/firmware_update_app.js b/ash/webui/firmware_update_ui/resources/firmware_update_app.js index ec59d854..1605aa8f 100644 --- a/ash/webui/firmware_update_ui/resources/firmware_update_app.js +++ b/ash/webui/firmware_update_ui/resources/firmware_update_app.js
@@ -11,7 +11,7 @@ import {I18nBehavior, I18nBehaviorInterface} from 'chrome://resources/ash/common/i18n_behavior.js'; import {loadTimeData} from 'chrome://resources/ash/common/load_time_data.m.js'; -import {startColorChangeUpdater} from 'chrome://resources/cr_components/color_change_listener/colors_css_updater.js'; +import {ColorChangeUpdater} from 'chrome://resources/cr_components/color_change_listener/colors_css_updater.js'; import {html, mixinBehaviors, PolymerElement} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js'; /** @@ -52,9 +52,12 @@ typographyLink.rel = 'stylesheet'; document.head.appendChild(typographyLink); document.body.classList.add('jelly-enabled'); - startColorChangeUpdater(); + /** @suppress {checkTypes} */ + (function() { + ColorChangeUpdater.forDocument().start(); + })(); } } } -customElements.define(FirmwareUpdateAppElement.is, FirmwareUpdateAppElement); \ No newline at end of file +customElements.define(FirmwareUpdateAppElement.is, FirmwareUpdateAppElement);
diff --git a/ash/webui/help_app_ui/resources/receiver.js b/ash/webui/help_app_ui/resources/receiver.js index 163f938..779a113 100644 --- a/ash/webui/help_app_ui/resources/receiver.js +++ b/ash/webui/help_app_ui/resources/receiver.js
@@ -8,7 +8,7 @@ */ import './sandboxed_load_time_data.js'; -import {COLOR_PROVIDER_CHANGED, ColorChangeUpdater, startColorChangeUpdater} from '//resources/cr_components/color_change_listener/colors_css_updater.js'; +import {COLOR_PROVIDER_CHANGED, ColorChangeUpdater} from '//resources/cr_components/color_change_listener/colors_css_updater.js'; import {MessagePipe} from './message_pipe.js'; import {Message} from './message_types.js'; @@ -89,11 +89,12 @@ delegate: DELEGATE, }; -window.addEventListener('DOMContentLoaded', () => { - // Start listening to color change events. These events get picked up by logic - // in ts_helpers.ts on the google3 side. - startColorChangeUpdater(); -}); +window.addEventListener( + 'DOMContentLoaded', /** @suppress {checkTypes} */ function() { + // Start listening to color change events. These events get picked up by + // logic in ts_helpers.ts on the google3 side. + ColorChangeUpdater.forDocument().start(); + }); // Expose functions to bind to color change events to window so they can be // automatically picked up by installColors(). See ts_helpers.ts in google3. window['addColorChangeListener'] =
diff --git a/ash/webui/media_app_ui/resources/js/receiver.js b/ash/webui/media_app_ui/resources/js/receiver.js index 7759a35..c6e299b 100644 --- a/ash/webui/media_app_ui/resources/js/receiver.js +++ b/ash/webui/media_app_ui/resources/js/receiver.js
@@ -4,7 +4,7 @@ import './sandboxed_load_time_data.js'; -import {COLOR_PROVIDER_CHANGED, ColorChangeUpdater, startColorChangeUpdater} from '//resources/cr_components/color_change_listener/colors_css_updater.js'; +import {COLOR_PROVIDER_CHANGED, ColorChangeUpdater} from '//resources/cr_components/color_change_listener/colors_css_updater.js'; import {assertCast, MessagePipe} from './message_pipe.js'; import {EditInPhotosMessage, FileContext, IsFileArcWritableMessage, IsFileArcWritableResponse, IsFileBrowserWritableMessage, IsFileBrowserWritableResponse, LoadFilesMessage, Message, OpenAllowedFileMessage, OpenAllowedFileResponse, OpenFilesWithPickerMessage, OverwriteFileMessage, OverwriteViaFilePickerResponse, RenameFileResponse, RenameResult, RequestSaveFileMessage, RequestSaveFileResponse, SaveAsMessage, SaveAsResponse} from './message_types.js'; @@ -440,7 +440,10 @@ window.addEventListener('DOMContentLoaded', () => { // Start listening to color change events. These events get picked up by logic // in ts_helpers.ts on the google3 side. - startColorChangeUpdater(); + /** @suppress {checkTypes} */ + (function() { + ColorChangeUpdater.forDocument().start(); + })(); const app = getApp(); if (app) {
diff --git a/ash/webui/os_feedback_ui/resources/feedback_flow.js b/ash/webui/os_feedback_ui/resources/feedback_flow.js index ca009bf..c8d1fc9 100644 --- a/ash/webui/os_feedback_ui/resources/feedback_flow.js +++ b/ash/webui/os_feedback_ui/resources/feedback_flow.js
@@ -10,7 +10,7 @@ import {loadTimeData} from 'chrome://resources/ash/common/load_time_data.m.js'; import {stringToMojoString16} from 'chrome://resources/ash/common/mojo_utils.js'; -import {startColorChangeUpdater} from 'chrome://resources/cr_components/color_change_listener/colors_css_updater.js'; +import {ColorChangeUpdater} from 'chrome://resources/cr_components/color_change_listener/colors_css_updater.js'; import {html, PolymerElement} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js'; import {FeedbackAppExitPath, FeedbackAppHelpContentOutcome, FeedbackAppPreSubmitAction, FeedbackContext, FeedbackServiceProviderInterface, Report, SendReportStatus} from './feedback_types.js'; @@ -279,7 +279,10 @@ typographyLink.rel = 'stylesheet'; document.head.appendChild(typographyLink); document.body.classList.add('jelly-enabled'); - startColorChangeUpdater(); + /** @suppress {checkTypes} */ + (function() { + ColorChangeUpdater.forDocument().start(); + })(); } }
diff --git a/ash/webui/os_feedback_ui/untrusted_resources/untrusted_index.js b/ash/webui/os_feedback_ui/untrusted_resources/untrusted_index.js index aa672a4..e638ebc 100644 --- a/ash/webui/os_feedback_ui/untrusted_resources/untrusted_index.js +++ b/ash/webui/os_feedback_ui/untrusted_resources/untrusted_index.js
@@ -3,7 +3,7 @@ // found in the LICENSE file. import {loadTimeData} from '//resources/ash/common/load_time_data.m.js'; -import {startColorChangeUpdater} from '//resources/cr_components/color_change_listener/colors_css_updater.js'; +import {ColorChangeUpdater} from '//resources/cr_components/color_change_listener/colors_css_updater.js'; import {HelpContentElement} from './help_content.js'; @@ -48,8 +48,8 @@ typographyLink.rel = 'stylesheet'; document.head.appendChild(typographyLink); document.body.classList.add('jelly-enabled'); - startColorChangeUpdater(); - // Post a message to parent to make testing `startColorChangeUpdater()` + ColorChangeUpdater.forDocument().start(); + // Post a message to parent to make testing `ColorChangeUpdater#start()` // called from untrusted ui easier. window.parent.postMessage( {
diff --git a/ash/webui/personalization_app/resources/js/personalization_app.ts b/ash/webui/personalization_app/resources/js/personalization_app.ts index 70254c01..c1b5b0d 100644 --- a/ash/webui/personalization_app/resources/js/personalization_app.ts +++ b/ash/webui/personalization_app/resources/js/personalization_app.ts
@@ -44,7 +44,7 @@ import './wallpaper/index.js'; import {loadTimeData} from 'chrome://resources/ash/common/load_time_data.m.js'; -import {startColorChangeUpdater} from 'chrome://resources/cr_components/color_change_listener/colors_css_updater.js'; +import {ColorChangeUpdater} from 'chrome://resources/cr_components/color_change_listener/colors_css_updater.js'; import {isPersonalizationJellyEnabled} from './load_time_booleans.js'; import {emptyState} from './personalization_state.js'; @@ -146,5 +146,5 @@ fontLink.href = 'chrome://theme/typography.css'; document.head.appendChild(fontLink); document.body.classList.add('jelly-enabled'); - startColorChangeUpdater(); + ColorChangeUpdater.forDocument().start(); }
diff --git a/ash/webui/print_management/resources/print_management.ts b/ash/webui/print_management/resources/print_management.ts index 557137e..671440c 100644 --- a/ash/webui/print_management/resources/print_management.ts +++ b/ash/webui/print_management/resources/print_management.ts
@@ -18,7 +18,7 @@ import {IronIconElement} from '//resources/polymer/v3_0/iron-icon/iron-icon.js'; import {loadTimeData} from 'chrome://resources/ash/common/load_time_data.m.js'; -import {startColorChangeUpdater} from 'chrome://resources/cr_components/color_change_listener/colors_css_updater.js'; +import {ColorChangeUpdater} from 'chrome://resources/cr_components/color_change_listener/colors_css_updater.js'; import {I18nMixin} from 'chrome://resources/cr_elements/i18n_mixin.js'; import {assert} from 'chrome://resources/js/assert_ts.js'; import {PolymerElementProperties} from 'chrome://resources/polymer/v3_0/polymer/interfaces.js'; @@ -194,7 +194,7 @@ typographyLink.rel = 'stylesheet'; document.head.appendChild(typographyLink); document.body.classList.add('jelly-enabled'); - startColorChangeUpdater(); + ColorChangeUpdater.forDocument().start(); } }
diff --git a/ash/webui/sample_system_web_app_ui/resources/trusted/page_handler.ts b/ash/webui/sample_system_web_app_ui/resources/trusted/page_handler.ts index 5bdb52e..48bc27b32 100644 --- a/ash/webui/sample_system_web_app_ui/resources/trusted/page_handler.ts +++ b/ash/webui/sample_system_web_app_ui/resources/trusted/page_handler.ts
@@ -36,7 +36,7 @@ */ import {PageCallbackRouter, PageHandlerFactory, PageHandlerRemote} from '/ash/webui/sample_system_web_app_ui/mojom/sample_system_web_app_ui.mojom-webui.js'; -import {startColorChangeUpdater} from 'chrome://resources/cr_components/color_change_listener/colors_css_updater.js'; +import {ColorChangeUpdater} from 'chrome://resources/cr_components/color_change_listener/colors_css_updater.js'; // Used to make calls on the remote PageHandler interface. Singleton that client // modules can use directly. @@ -52,4 +52,4 @@ pageHandler.$.bindNewPipeAndPassReceiver(), callbackRouter.$.bindNewPipeAndPassRemote()); -startColorChangeUpdater(); +ColorChangeUpdater.forDocument().start();
diff --git a/ash/webui/scanning/resources/scanning_app.js b/ash/webui/scanning/resources/scanning_app.js index 568c984..77ef945b 100644 --- a/ash/webui/scanning/resources/scanning_app.js +++ b/ash/webui/scanning/resources/scanning_app.js
@@ -32,7 +32,7 @@ import {CrContainerShadowBehavior} from 'chrome://resources/ash/common/cr_container_shadow_behavior.js'; import {I18nBehavior} from 'chrome://resources/ash/common/i18n_behavior.js'; import {loadTimeData} from 'chrome://resources/ash/common/load_time_data.m.js'; -import {startColorChangeUpdater} from 'chrome://resources/cr_components/color_change_listener/colors_css_updater.js'; +import {ColorChangeUpdater} from 'chrome://resources/cr_components/color_change_listener/colors_css_updater.js'; import {afterNextRender, html, Polymer} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js'; import {getScanService} from './mojo_interface_provider.js'; @@ -414,7 +414,10 @@ typographyLink.rel = 'stylesheet'; document.head.appendChild(typographyLink); document.body.classList.add('jelly-enabled'); - startColorChangeUpdater(); + /** @suppress {checkTypes} */ + (function() { + ColorChangeUpdater.forDocument().start(); + })(); } },
diff --git a/ash/webui/shortcut_customization_ui/resources/js/shortcut_customization_app.ts b/ash/webui/shortcut_customization_ui/resources/js/shortcut_customization_app.ts index b77d341..0c863f9d 100644 --- a/ash/webui/shortcut_customization_ui/resources/js/shortcut_customization_app.ts +++ b/ash/webui/shortcut_customization_ui/resources/js/shortcut_customization_app.ts
@@ -16,7 +16,7 @@ import {loadTimeData} from 'chrome://resources/ash/common/load_time_data.m.js'; import {NavigationViewPanelElement} from 'chrome://resources/ash/common/navigation_view_panel.js'; -import {startColorChangeUpdater} from 'chrome://resources/cr_components/color_change_listener/colors_css_updater.js'; +import {ColorChangeUpdater} from 'chrome://resources/cr_components/color_change_listener/colors_css_updater.js'; import {I18nMixin} from 'chrome://resources/cr_elements/i18n_mixin.js'; import {PolymerElementProperties} from 'chrome://resources/polymer/v3_0/polymer/interfaces.js'; import {PolymerElement} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js'; @@ -125,7 +125,7 @@ typographyLink.rel = 'stylesheet'; document.head.appendChild(typographyLink); document.body.classList.add('jelly-enabled'); - startColorChangeUpdater(); + ColorChangeUpdater.forDocument().start(); } this.fetchAccelerators();
diff --git a/ash/wm_mode/wm_mode_button_tray.cc b/ash/wm_mode/wm_mode_button_tray.cc index c903f9c..a3481e8 100644 --- a/ash/wm_mode/wm_mode_button_tray.cc +++ b/ash/wm_mode/wm_mode_button_tray.cc
@@ -13,7 +13,9 @@ #include "ash/system/tray/tray_constants.h" #include "ash/system/tray/tray_container.h" #include "ash/wm_mode/wm_mode_controller.h" +#include "chromeos/constants/chromeos_features.h" #include "ui/base/models/image_model.h" +#include "ui/color/color_id.h" #include "ui/events/event.h" #include "ui/gfx/geometry/size.h" #include "ui/gfx/paint_vector_icon.h" @@ -49,9 +51,15 @@ } void WmModeButtonTray::UpdateButtonVisuals(bool is_wm_mode_active) { + const ui::ColorId color_id = + chromeos::features::IsJellyEnabled() + ? static_cast<ui::ColorId>( + is_wm_mode_active + ? cros_tokens::kCrosSysSystemOnPrimaryContainer + : cros_tokens::kCrosSysOnSurface) + : kColorAshIconColorPrimary; image_view_->SetImage(ui::ImageModel::FromVectorIcon( - is_wm_mode_active ? kWmModeOnIcon : kWmModeOffIcon, - GetColorProvider()->GetColor(kColorAshIconColorPrimary))); + is_wm_mode_active ? kWmModeOnIcon : kWmModeOffIcon, color_id)); SetIsActive(is_wm_mode_active); }
diff --git a/ash/wm_mode/wm_mode_button_tray.h b/ash/wm_mode/wm_mode_button_tray.h index fd8f19a6..d2f0e15 100644 --- a/ash/wm_mode/wm_mode_button_tray.h +++ b/ash/wm_mode/wm_mode_button_tray.h
@@ -37,6 +37,9 @@ void HandleLocaleChange() override {} void HideBubbleWithView(const TrayBubbleView* bubble_view) override {} void ClickedOutsideBubble() override {} + // No need to override since the icon and activation state of this tray will + // change and get updated simultaneously in `UpdateButtonVisuals()`. + void UpdateTrayItemColor(bool is_active) override {} // SessionObserver: void OnSessionStateChanged(session_manager::SessionState state) override;
diff --git a/base/BUILD.gn b/base/BUILD.gn index ba907d5..0ab0665 100644 --- a/base/BUILD.gn +++ b/base/BUILD.gn
@@ -2131,7 +2131,13 @@ "profiler/module_cache_mac.cc", "synchronization/waitable_event_mac.cc", ] - frameworks += [ "Security.framework" ] + frameworks += [ + "CoreFoundation.framework", + "CoreGraphics.framework", + "CoreText.framework", + "Foundation.framework", + "Security.framework", + ] public_deps += [ ":base_arc" ] allow_circular_includes_from = [ ":base_arc" ] }
diff --git a/base/apple/owned_objc.h b/base/apple/owned_objc.h index 52aff36..6366a8e 100644 --- a/base/apple/owned_objc.h +++ b/base/apple/owned_objc.h
@@ -38,24 +38,27 @@ #define OWNED_TYPE_DECL_OBJC_ADDITIONS(name, objctype) #endif // __OBJC__ -#define OWNED_OBJC_DECL(name, objctype) \ - namespace base::apple { \ - class BASE_EXPORT Owned##name { \ - public: \ - /* Default-construct in a null state. */ \ - Owned##name(); \ - ~Owned##name(); \ - Owned##name(const Owned##name&); \ - Owned##name& operator=(const Owned##name&); \ - /* Returns whether the object contains a valid object.*/ \ - bool IsValid() const; \ - /* Objective-C-only constructor and getter. */ \ - OWNED_TYPE_DECL_OBJC_ADDITIONS(name, objctype) \ - \ - private: \ - struct ObjCStorage; \ - std::unique_ptr<ObjCStorage> objc_storage_; \ - }; \ +#define OWNED_OBJC_DECL(name, objctype) \ + namespace base::apple { \ + class BASE_EXPORT Owned##name { \ + public: \ + /* Default-construct in a null state. */ \ + Owned##name(); \ + ~Owned##name(); \ + Owned##name(const Owned##name&); \ + Owned##name& operator=(const Owned##name&); \ + /* Returns whether the object contains a valid object. */ \ + bool IsValid() const; \ + /* Comparisons. */ \ + bool operator==(const Owned##name& other) const; \ + bool operator!=(const Owned##name& other) const; \ + /* Objective-C-only constructor and getter. */ \ + OWNED_TYPE_DECL_OBJC_ADDITIONS(name, objctype) \ + \ + private: \ + struct ObjCStorage; \ + std::unique_ptr<ObjCStorage> objc_storage_; \ + }; \ } // namespace base::apple #define GENERATE_OWNED_OBJC_TYPE(name) OWNED_OBJC_DECL(name, name*)
diff --git a/base/apple/owned_objc.mm b/base/apple/owned_objc.mm index f919df9..7e68609 100644 --- a/base/apple/owned_objc.mm +++ b/base/apple/owned_objc.mm
@@ -33,6 +33,12 @@ bool Owned##name::IsValid() const { \ return objc_storage_->obj != nil; \ } \ + bool Owned##name::operator==(const Owned##name& other) const { \ + return objc_storage_->obj == other.objc_storage_->obj; \ + } \ + bool Owned##name::operator!=(const Owned##name& other) const { \ + return !this->operator==(other); \ + } \ objctype Owned##name::Get() const { \ return objc_storage_->obj; \ } \
diff --git a/base/apple/owned_objc_types.h b/base/apple/owned_objc_types.h index 68be95d..e0e3d950 100644 --- a/base/apple/owned_objc_types.h +++ b/base/apple/owned_objc_types.h
@@ -14,6 +14,7 @@ #endif #if BUILDFLAG(IS_MAC) +GENERATE_OWNED_OBJC_TYPE(NSCursor) GENERATE_OWNED_OBJC_TYPE(NSEvent) #elif BUILDFLAG(IS_IOS) GENERATE_OWNED_OBJC_TYPE(UIEvent)
diff --git a/build/config/BUILD.gn b/build/config/BUILD.gn index dc8034f..53511ac 100644 --- a/build/config/BUILD.gn +++ b/build/config/BUILD.gn
@@ -211,14 +211,9 @@ # linking can have run-time side effects, nothing should be listed here. libs = [] } else if (is_ios) { - # The libraries listed here will be specified for both the target and the - # host. Only the common ones should be listed here. - frameworks = [ - "CoreFoundation.framework", - "CoreGraphics.framework", - "CoreText.framework", - "Foundation.framework", - ] + # Targets should choose to explicitly link frameworks they require. Since + # linking can have run-time side effects, nothing should be listed here. + libs = [] } else if (is_linux || is_chromeos) { libs = [ "dl",
diff --git a/build/config/ios/rules.gni b/build/config/ios/rules.gni index 1561058..68523b9 100644 --- a/build/config/ios/rules.gni +++ b/build/config/ios/rules.gni
@@ -598,11 +598,6 @@ visibility += [ ":${_variant.target_name}" ] } - if (!defined(frameworks)) { - frameworks = [] - } - frameworks += [ "UIKit.framework" ] - if (target_environment == "simulator") { if (!defined(deps)) { deps = []
diff --git a/cc/layers/layer.cc b/cc/layers/layer.cc index 20926a1..57d6f9ca 100644 --- a/cc/layers/layer.cc +++ b/cc/layers/layer.cc
@@ -1439,6 +1439,10 @@ layer_tree_host()->SetNeedsUpdateLayers(); } +bool Layer::RequiresSetNeedsDisplayOnHdrHeadroomChange() const { + return false; +} + bool Layer::IsSnappedToPixelGridInTarget() const { return false; }
diff --git a/cc/layers/layer.h b/cc/layers/layer.h index 890978a..9805082 100644 --- a/cc/layers/layer.h +++ b/cc/layers/layer.h
@@ -272,6 +272,10 @@ // SetNeedsDisplay() that have not been committed to the compositor thread. const gfx::Rect& update_rect() const { return update_rect_.Read(*this); } + // If this returns true, then `SetNeedsDisplay` will be called in response to + // the HDR headroom of the display that the content is rendering to changing. + virtual bool RequiresSetNeedsDisplayOnHdrHeadroomChange() const; + void ResetUpdateRectForTesting() { update_rect_.Write(*this) = gfx::Rect(); } // For layer tree mode only.
diff --git a/cc/layers/picture_layer.cc b/cc/layers/picture_layer.cc index 85b4412..6254839 100644 --- a/cc/layers/picture_layer.cc +++ b/cc/layers/picture_layer.cc
@@ -117,6 +117,16 @@ Layer::SetNeedsDisplayRect(layer_rect); } +bool PictureLayer::RequiresSetNeedsDisplayOnHdrHeadroomChange() const { + const auto& display_list = picture_layer_inputs_.display_list; + if (display_list && + display_list->discardable_image_map().content_color_usage() == + gfx::ContentColorUsage::kHDR) { + return true; + } + return false; +} + bool PictureLayer::Update() { update_source_frame_number_.Write(*this) = layer_tree_host()->SourceFrameNumber();
diff --git a/cc/layers/picture_layer.h b/cc/layers/picture_layer.h index 1d1e837..a29c6792 100644 --- a/cc/layers/picture_layer.h +++ b/cc/layers/picture_layer.h
@@ -47,6 +47,7 @@ const CommitState& commit_state, const ThreadUnsafeCommitState& unsafe_state) override; void SetNeedsDisplayRect(const gfx::Rect& layer_rect) override; + bool RequiresSetNeedsDisplayOnHdrHeadroomChange() const override; sk_sp<const SkPicture> GetPicture() const override; bool Update() override; void RunMicroBenchmark(MicroBenchmark* benchmark) override;
diff --git a/cc/layers/texture_layer.cc b/cc/layers/texture_layer.cc index 18f4b9a..d2e3231 100644 --- a/cc/layers/texture_layer.cc +++ b/cc/layers/texture_layer.cc
@@ -174,6 +174,12 @@ Layer::HasDrawableContent(); } +bool TextureLayer::RequiresSetNeedsDisplayOnHdrHeadroomChange() const { + // TODO(https://crbug.com/1450807): Only return true if the contents of the + // video are HDR. + return true; +} + bool TextureLayer::Update() { bool updated = Layer::Update(); if (client_.Read(*this)) {
diff --git a/cc/layers/texture_layer.h b/cc/layers/texture_layer.h index a53478d..c0e5a0d4 100644 --- a/cc/layers/texture_layer.h +++ b/cc/layers/texture_layer.h
@@ -131,6 +131,7 @@ absl::optional<gfx::HDRMetadata> hdr_metadata); void SetLayerTreeHost(LayerTreeHost* layer_tree_host) override; + bool RequiresSetNeedsDisplayOnHdrHeadroomChange() const override; bool Update() override; bool IsSnappedToPixelGridInTarget() const override; void PushPropertiesTo(LayerImpl* layer,
diff --git a/cc/layers/video_layer.cc b/cc/layers/video_layer.cc index 0d86a39..21b6d7de 100644 --- a/cc/layers/video_layer.cc +++ b/cc/layers/video_layer.cc
@@ -29,6 +29,12 @@ transform_); } +bool VideoLayer::RequiresSetNeedsDisplayOnHdrHeadroomChange() const { + // TODO(https://crbug.com/1450807): Only return true if the contents of the + // video are HDR. + return true; +} + bool VideoLayer::Update() { bool updated = Layer::Update();
diff --git a/cc/layers/video_layer.h b/cc/layers/video_layer.h index 5bbdc83..c8f3ea42 100644 --- a/cc/layers/video_layer.h +++ b/cc/layers/video_layer.h
@@ -31,7 +31,7 @@ std::unique_ptr<LayerImpl> CreateLayerImpl( LayerTreeImpl* tree_impl) const override; - + bool RequiresSetNeedsDisplayOnHdrHeadroomChange() const override; bool Update() override; // Clears |provider_| to ensure it is not used after destruction.
diff --git a/cc/test/fake_picture_layer.cc b/cc/test/fake_picture_layer.cc index 13e331f..6fe92926 100644 --- a/cc/test/fake_picture_layer.cc +++ b/cc/test/fake_picture_layer.cc
@@ -41,4 +41,8 @@ return updated || always_update_resources_; } +bool FakePictureLayer::RequiresSetNeedsDisplayOnHdrHeadroomChange() const { + return reraster_on_hdr_change_; +} + } // namespace cc
diff --git a/cc/test/fake_picture_layer.h b/cc/test/fake_picture_layer.h index b7eb6ca5..e3a7c322 100644 --- a/cc/test/fake_picture_layer.h +++ b/cc/test/fake_picture_layer.h
@@ -32,6 +32,7 @@ std::unique_ptr<LayerImpl> CreateLayerImpl( LayerTreeImpl* tree_impl) const override; bool Update() override; + bool RequiresSetNeedsDisplayOnHdrHeadroomChange() const override; int update_count() const { return update_count_; } void reset_update_count() { update_count_ = 0; } @@ -40,6 +41,10 @@ always_update_resources_ = always_update_resources; } + void set_reraster_on_hdr_change(bool reraster_on_hdr_change) { + reraster_on_hdr_change_ = reraster_on_hdr_change; + } + void set_fixed_tile_size(gfx::Size fixed_tile_size) { fixed_tile_size_ = fixed_tile_size; } @@ -52,6 +57,7 @@ int update_count_ = 0; bool always_update_resources_ = false; + bool reraster_on_hdr_change_ = false; gfx::Size fixed_tile_size_; };
diff --git a/cc/trees/layer_tree_host.cc b/cc/trees/layer_tree_host.cc index cbd4b51..2ac8e68 100644 --- a/cc/trees/layer_tree_host.cc +++ b/cc/trees/layer_tree_host.cc
@@ -1500,9 +1500,16 @@ const gfx::DisplayColorSpaces& display_color_spaces) { if (pending_commit_state()->display_color_spaces == display_color_spaces) return; + bool only_hdr_changed = gfx::DisplayColorSpaces::EqualExceptForHdrParameters( + pending_commit_state()->display_color_spaces, display_color_spaces); pending_commit_state()->display_color_spaces = display_color_spaces; - for (auto* layer : *this) - layer->SetNeedsDisplay(); + + for (auto* layer : *this) { + if (!only_hdr_changed || + layer->RequiresSetNeedsDisplayOnHdrHeadroomChange()) { + layer->SetNeedsDisplay(); + } + } } void LayerTreeHost::UpdateViewportIsMobileOptimized(
diff --git a/cc/trees/layer_tree_host_impl.cc b/cc/trees/layer_tree_host_impl.cc index 258a66d..d663b4b 100644 --- a/cc/trees/layer_tree_host_impl.cc +++ b/cc/trees/layer_tree_host_impl.cc
@@ -795,9 +795,6 @@ } void LayerTreeHostImpl::UpdateSyncTreeAfterCommitOrImplSideInvalidation() { - // LayerTreeHost may have changed the GPU rasterization flags state, which - // may require an update of the tree resources. - UpdateTreeResourcesForGpuRasterizationIfNeeded(); sync_tree()->set_needs_update_draw_properties(); // We need an update immediately post-commit to have the opportunity to create @@ -2861,17 +2858,7 @@ } bool LayerTreeHostImpl::UpdateGpuRasterizationStatus() { - if (!raster_caps().need_update_gpu_rasterization_status) { - return false; - } - raster_caps_.need_update_gpu_rasterization_status = false; - - // TODO(danakj): Can we avoid having this run when there's no - // LayerTreeFrameSink? - // For now just early out and leave things unchanged, we'll come back here - // when we get a LayerTreeFrameSink. - if (!layer_tree_frame_sink_) - return false; + CHECK(layer_tree_frame_sink_); RasterCapabilities new_raster_caps; [this](RasterCapabilities& gpu_caps) { @@ -2879,8 +2866,7 @@ return; } - if (!(layer_tree_frame_sink_ && - layer_tree_frame_sink_->context_provider() && + if (!(layer_tree_frame_sink_->context_provider() && layer_tree_frame_sink_->worker_context_provider())) { return; } @@ -2915,28 +2901,6 @@ return true; } -void LayerTreeHostImpl::UpdateTreeResourcesForGpuRasterizationIfNeeded() { - if (!UpdateGpuRasterizationStatus()) - return; - - // Clean up and replace existing tile manager with another one that uses - // appropriate rasterizer. Only do this however if we already have a - // resource pool, since otherwise we might not be able to create a new - // one. - ReleaseTileResources(); - if (resource_pool_) { - CleanUpTileManagerResources(); - CreateTileManagerResources(); - } - RecreateTileResources(); - - // We have released tilings for both active and pending tree. - // We would not have any content to draw until the pending tree is activated. - // Prevent the active tree from drawing until activation. - // TODO(crbug.com/469175): Replace with RequiresHighResToDraw. - SetRequiresHighResToDraw(); -} - ImageDecodeCache* LayerTreeHostImpl::GetImageDecodeCache() const { return image_decode_cache_holder_ ? image_decode_cache_holder_->image_decode_cache() @@ -3930,7 +3894,6 @@ // Since the new context may support GPU raster or be capable of MSAA, update // status here. We don't need to check the return value since we are // recreating all resources already. - SetNeedUpdateGpuRasterizationStatus(); UpdateGpuRasterizationStatus(); // See note in LayerTreeImpl::UpdateDrawProperties, new LayerTreeFrameSink @@ -4972,10 +4935,6 @@ element_id, scroll_node->id, scroll_offset, tree); } -void LayerTreeHostImpl::SetNeedUpdateGpuRasterizationStatus() { - raster_caps_.need_update_gpu_rasterization_status = true; -} - void LayerTreeHostImpl::SetElementFilterMutated( ElementId element_id, ElementListType list_type,
diff --git a/cc/trees/layer_tree_host_impl.h b/cc/trees/layer_tree_host_impl.h index 63418e8..097f74fa 100644 --- a/cc/trees/layer_tree_host_impl.h +++ b/cc/trees/layer_tree_host_impl.h
@@ -414,10 +414,6 @@ void SetTreeLayerScrollOffsetMutated(ElementId element_id, LayerTreeImpl* tree, const gfx::PointF& scroll_offset); - void SetNeedUpdateGpuRasterizationStatus(); - bool NeedUpdateGpuRasterizationStatusForTesting() const { - return raster_caps().need_update_gpu_rasterization_status; - } // ProtectedSequenceSynchronizer implementation. bool IsOwnerThread() const override; @@ -973,7 +969,6 @@ // Returns true if status changed. bool UpdateGpuRasterizationStatus(); - void UpdateTreeResourcesForGpuRasterizationIfNeeded(); bool AnimatePageScale(base::TimeTicks monotonic_time); bool AnimateScrollbars(base::TimeTicks monotonic_time);
diff --git a/cc/trees/layer_tree_host_unittest.cc b/cc/trees/layer_tree_host_unittest.cc index abe07b9..c56a353 100644 --- a/cc/trees/layer_tree_host_unittest.cc +++ b/cc/trees/layer_tree_host_unittest.cc
@@ -2797,6 +2797,8 @@ void SetupTree() override { space1_ = gfx::DisplayColorSpaces(gfx::ColorSpace::CreateXYZD50()); space2_ = gfx::DisplayColorSpaces(gfx::ColorSpace::CreateSRGB()); + space2_with_hdr_ = space2_; + space2_with_hdr_.SetHDRMaxLuminanceRelative(2.f); root_layer_ = Layer::Create(); root_layer_->SetBounds(gfx::Size(10, 20)); @@ -2819,6 +2821,7 @@ EXPECT_EQ(DRAW_SUCCESS, draw_result); int source_frame = host_impl->active_tree()->source_frame_number(); + gfx::Rect expected_root_damage_rect; switch (source_frame) { case 0: // The first frame will have full damage, and should be in the initial @@ -2826,6 +2829,8 @@ EXPECT_FALSE(frame_data->has_no_damage); EXPECT_TRUE(space1_ == host_impl->active_tree()->display_color_spaces()); + expected_root_damage_rect = + gfx::Rect(host_impl->active_tree()->root_layer()->bounds()); break; case 1: // Empty commit. @@ -2838,6 +2843,8 @@ EXPECT_FALSE(frame_data->has_no_damage); EXPECT_TRUE(space2_ == host_impl->active_tree()->display_color_spaces()); + expected_root_damage_rect = + gfx::Rect(host_impl->active_tree()->root_layer()->bounds()); break; case 3: // Empty commit with the color space set to space2 redundantly. @@ -2846,15 +2853,16 @@ host_impl->active_tree()->display_color_spaces()); break; case 4: - // The change from space2 to space1 should cause full damage. + // The change from space2 to space2_with_hdr should cause full damage. EXPECT_FALSE(frame_data->has_no_damage); - EXPECT_TRUE(space1_ == + EXPECT_TRUE(space2_with_hdr_ == host_impl->active_tree()->display_color_spaces()); + expected_root_damage_rect = gfx::Rect(0, 0, 10, 10); break; case 5: // Empty commit. EXPECT_TRUE(frame_data->has_no_damage); - EXPECT_TRUE(space1_ == + EXPECT_TRUE(space2_with_hdr_ == host_impl->active_tree()->display_color_spaces()); EndTest(); break; @@ -2866,8 +2874,7 @@ if (!frame_data->has_no_damage) { gfx::Rect root_damage_rect = frame_data->render_passes.back()->damage_rect; - EXPECT_EQ(gfx::Rect(host_impl->active_tree()->root_layer()->bounds()), - root_damage_rect); + EXPECT_EQ(expected_root_damage_rect, root_damage_rect); } return draw_result; @@ -2892,7 +2899,17 @@ break; case 4: EXPECT_TRUE(child_layer_->update_rect().IsEmpty()); - layer_tree_host()->SetDisplayColorSpaces(space1_); + // Setting to space2_with_hdr_ should be a no-op, because there is + // no HDR content. + layer_tree_host()->SetDisplayColorSpaces(space2_with_hdr_); + EXPECT_TRUE(child_layer_->update_rect().IsEmpty()); + // Same with setting back to space2_. + layer_tree_host()->SetDisplayColorSpaces(space2_); + EXPECT_TRUE(child_layer_->update_rect().IsEmpty()); + // Now set the content to be HDR, and set to space2_with_hdr. This + // should trigger a commit. + child_layer_->set_reraster_on_hdr_change(true); + layer_tree_host()->SetDisplayColorSpaces(space2_with_hdr_); EXPECT_FALSE(child_layer_->update_rect().IsEmpty()); break; case 5: @@ -2910,9 +2927,10 @@ private: gfx::DisplayColorSpaces space1_; gfx::DisplayColorSpaces space2_; + gfx::DisplayColorSpaces space2_with_hdr_; FakeContentLayerClient client_; scoped_refptr<Layer> root_layer_; - scoped_refptr<Layer> child_layer_; + scoped_refptr<FakePictureLayer> child_layer_; }; SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostTestRasterColorSpaceChange);
diff --git a/cc/trees/layer_tree_impl.cc b/cc/trees/layer_tree_impl.cc index 44984b4c0..47f7ef72 100644 --- a/cc/trees/layer_tree_impl.cc +++ b/cc/trees/layer_tree_impl.cc
@@ -1409,7 +1409,6 @@ set_needs_update_draw_properties(); if (IsActiveTree()) host_impl_->SetViewportDamage(GetDeviceViewport()); - host_impl_->SetNeedUpdateGpuRasterizationStatus(); } void LayerTreeImpl::SetLocalSurfaceIdFromParent(
diff --git a/cc/trees/raster_capabilities.h b/cc/trees/raster_capabilities.h index 3815d8f0..80a79ee1 100644 --- a/cc/trees/raster_capabilities.h +++ b/cc/trees/raster_capabilities.h
@@ -15,7 +15,6 @@ RasterCapabilities& operator=(const RasterCapabilities& other) = delete; ~RasterCapabilities() = default; - bool need_update_gpu_rasterization_status = false; bool use_gpu_rasterization = false; bool can_use_msaa = false;
diff --git a/chrome/android/features/tab_ui/javatests/src/org/chromium/chrome/browser/tasks/tab_management/TabGridAccessibilityHelperTest.java b/chrome/android/features/tab_ui/javatests/src/org/chromium/chrome/browser/tasks/tab_management/TabGridAccessibilityHelperTest.java index 09ffcc6..046b626 100644 --- a/chrome/android/features/tab_ui/javatests/src/org/chromium/chrome/browser/tasks/tab_management/TabGridAccessibilityHelperTest.java +++ b/chrome/android/features/tab_ui/javatests/src/org/chromium/chrome/browser/tasks/tab_management/TabGridAccessibilityHelperTest.java
@@ -13,10 +13,8 @@ import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; -import static org.chromium.base.test.util.Restriction.RESTRICTION_TYPE_NON_LOW_END_DEVICE; import static org.chromium.chrome.browser.tasks.tab_management.TabUiTestHelper.createTabs; import static org.chromium.chrome.browser.tasks.tab_management.TabUiTestHelper.enterTabSwitcher; -import static org.chromium.chrome.browser.tasks.tab_management.TabUiTestHelper.leaveTabSwitcher; import static org.chromium.chrome.browser.tasks.tab_management.TabUiTestHelper.verifyTabSwitcherCardCount; import android.content.Context; @@ -26,31 +24,27 @@ import android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction; import androidx.annotation.IntDef; -import androidx.recyclerview.widget.GridLayoutManager; -import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; import androidx.test.filters.MediumTest; import org.junit.After; import org.junit.Before; -import org.junit.ClassRule; import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; -import org.chromium.base.test.util.Batch; import org.chromium.base.test.util.CommandLineFlags; import org.chromium.base.test.util.CriteriaHelper; +import org.chromium.base.test.util.DisabledTest; import org.chromium.base.test.util.Restriction; import org.chromium.chrome.browser.ChromeTabbedActivity; import org.chromium.chrome.browser.compositor.layouts.Layout; import org.chromium.chrome.browser.flags.ChromeFeatureList; import org.chromium.chrome.browser.flags.ChromeSwitches; -import org.chromium.chrome.browser.layouts.LayoutType; +import org.chromium.chrome.features.start_surface.TabSwitcherAndStartSurfaceLayout; import org.chromium.chrome.test.ChromeJUnit4ClassRunner; import org.chromium.chrome.test.ChromeTabbedActivityTestRule; import org.chromium.chrome.test.R; -import org.chromium.chrome.test.batch.BlankCTATabInitialStateRule; import org.chromium.chrome.test.util.ActivityTestUtils; import org.chromium.chrome.test.util.browser.Features; import org.chromium.ui.test.util.UiRestriction; @@ -66,11 +60,7 @@ // clang-format off @CommandLineFlags.Add({ChromeSwitches.DISABLE_FIRST_RUN_EXPERIENCE}) @Restriction(UiRestriction.RESTRICTION_TYPE_PHONE) -// START_SURFACE_REFACTOR is required to have stable parent id logic. -@Features.EnableFeatures({ChromeFeatureList.TAB_GRID_LAYOUT_ANDROID, - ChromeFeatureList.START_SURFACE_REFACTOR, - ChromeFeatureList.TAB_GROUPS_CONTINUATION_ANDROID}) -@Batch(Batch.PER_CLASS) +@Features.EnableFeatures({ChromeFeatureList.TAB_GRID_LAYOUT_ANDROID}) public class TabGridAccessibilityHelperTest { // clang-format on @IntDef({TabMovementDirection.LEFT, TabMovementDirection.RIGHT, TabMovementDirection.UP, @@ -84,38 +74,29 @@ int NUM_ENTRIES = 4; } - @ClassRule - public static ChromeTabbedActivityTestRule sActivityTestRule = - new ChromeTabbedActivityTestRule(); - @Rule - public BlankCTATabInitialStateRule mBlankCTATabInitialStateRule = - new BlankCTATabInitialStateRule(sActivityTestRule, false); + public ChromeTabbedActivityTestRule mActivityTestRule = new ChromeTabbedActivityTestRule(); @Before public void setUp() { - Layout layout = - sActivityTestRule.getActivity().getLayoutManager().getTabSwitcherLayoutForTesting(); - assertTrue(layout instanceof TabSwitcherLayout); + mActivityTestRule.startMainActivityFromLauncher(); + Layout layout = mActivityTestRule.getActivity().getLayoutManager().getOverviewLayout(); + assertTrue(layout instanceof TabSwitcherAndStartSurfaceLayout); CriteriaHelper.pollUiThread( - sActivityTestRule.getActivity().getTabModelSelector()::isTabStateInitialized); + mActivityTestRule.getActivity().getTabModelSelector()::isTabStateInitialized); } @After public void tearDown() { - ActivityTestUtils.clearActivityOrientation(sActivityTestRule.getActivity()); - final ChromeTabbedActivity cta = sActivityTestRule.getActivity(); - if (cta != null && cta.getLayoutManager().isLayoutVisible(LayoutType.TAB_SWITCHER)) { - leaveTabSwitcher(cta); - } + ActivityTestUtils.clearActivityOrientation(mActivityTestRule.getActivity()); } @Test @MediumTest - // Low-end uses list mode. - @Restriction(RESTRICTION_TYPE_NON_LOW_END_DEVICE) + @DisabledTest(message = "https://crbug.com/1318376") public void testGetPotentialActionsForView() { - final ChromeTabbedActivity cta = sActivityTestRule.getActivity(); + // clang-format on + final ChromeTabbedActivity cta = mActivityTestRule.getActivity(); final AccessibilityActionChecker checker = new AccessibilityActionChecker(cta); createTabs(cta, false, 5); enterTabSwitcher(cta); @@ -128,13 +109,8 @@ // Verify action list in portrait mode with span count = 2. onView(allOf(withParent(withId(R.id.compositor_view_holder)), withId(R.id.tab_list_view))) .check((v, noMatchingViewException) -> { - if (noMatchingViewException != null) { - throw noMatchingViewException; - } assertTrue(v instanceof RecyclerView); RecyclerView recyclerView = (RecyclerView) v; - assertEquals(2, - ((GridLayoutManager) recyclerView.getLayoutManager()).getSpanCount()); View item1 = getItemViewForPosition(recyclerView, 0); checker.verifyListOfAccessibilityAction( @@ -171,15 +147,8 @@ // Verify action list in landscape mode with span count = 3. onView(allOf(withParent(withId(R.id.compositor_view_holder)), withId(R.id.tab_list_view))) .check((v, noMatchingViewException) -> { - if (noMatchingViewException != null) { - throw noMatchingViewException; - } assertTrue(v instanceof RecyclerView); RecyclerView recyclerView = (RecyclerView) v; - // This case only applies for a span of 3. - if (((GridLayoutManager) recyclerView.getLayoutManager()).getSpanCount() != 3) { - return; - } View item1 = getItemViewForPosition(recyclerView, 0); checker.verifyListOfAccessibilityAction( @@ -214,10 +183,9 @@ @Test @MediumTest - // Low-end uses list mode. - @Restriction(RESTRICTION_TYPE_NON_LOW_END_DEVICE) + @DisabledTest(message = "https://crbug.com/1318394") public void testGetPositionsOfReorderAction() { - final ChromeTabbedActivity cta = sActivityTestRule.getActivity(); + final ChromeTabbedActivity cta = mActivityTestRule.getActivity(); int leftActionId = R.id.move_tab_left; int rightActionId = R.id.move_tab_right; int upActionId = R.id.move_tab_up; @@ -230,17 +198,10 @@ instanceof TabListMediator.TabGridAccessibilityHelper); TabListMediator.TabGridAccessibilityHelper helper = cta.findViewById(R.id.tab_list_view); - // Span count 2. onView(allOf(withParent(withId(R.id.compositor_view_holder)), withId(R.id.tab_list_view))) .check((v, noMatchingViewException) -> { - if (noMatchingViewException != null) { - throw noMatchingViewException; - } assertTrue(v instanceof RecyclerView); RecyclerView recyclerView = (RecyclerView) v; - assertEquals(2, - ((GridLayoutManager) recyclerView.getLayoutManager()).getSpanCount()); - Pair<Integer, Integer> positions; View item1 = getItemViewForPosition(recyclerView, 0); @@ -264,19 +225,10 @@ ActivityTestUtils.rotateActivityToOrientation(cta, Configuration.ORIENTATION_LANDSCAPE); - // Span count 3. onView(allOf(withParent(withId(R.id.compositor_view_holder)), withId(R.id.tab_list_view))) .check((v, noMatchingViewException) -> { - if (noMatchingViewException != null) { - throw noMatchingViewException; - } assertTrue(v instanceof RecyclerView); RecyclerView recyclerView = (RecyclerView) v; - // This case only applies for a span of 3. - if (((GridLayoutManager) recyclerView.getLayoutManager()).getSpanCount() != 3) { - return; - } - Pair<Integer, Integer> positions; View item2 = getItemViewForPosition(recyclerView, 1); @@ -304,8 +256,6 @@ } private View getItemViewForPosition(RecyclerView recyclerView, int position) { - // Scroll to position to ensure the ViewHolder is not recycled. - ((LinearLayoutManager) recyclerView.getLayoutManager()).scrollToPosition(position); RecyclerView.ViewHolder viewHolder = recyclerView.findViewHolderForAdapterPosition(position); assertNotNull(viewHolder);
diff --git a/chrome/android/features/tab_ui/javatests/src/org/chromium/chrome/browser/tasks/tab_management/TabSwitcherMultiWindowTest.java b/chrome/android/features/tab_ui/javatests/src/org/chromium/chrome/browser/tasks/tab_management/TabSwitcherMultiWindowTest.java index f3654ea9..0a99bd9 100644 --- a/chrome/android/features/tab_ui/javatests/src/org/chromium/chrome/browser/tasks/tab_management/TabSwitcherMultiWindowTest.java +++ b/chrome/android/features/tab_ui/javatests/src/org/chromium/chrome/browser/tasks/tab_management/TabSwitcherMultiWindowTest.java
@@ -16,6 +16,7 @@ import static org.chromium.chrome.browser.tasks.tab_management.TabUiTestHelper.clickFirstCardFromTabSwitcher; import static org.chromium.chrome.browser.tasks.tab_management.TabUiTestHelper.clickFirstTabInDialog; import static org.chromium.chrome.browser.tasks.tab_management.TabUiTestHelper.enterTabSwitcher; +import static org.chromium.chrome.browser.tasks.tab_management.TabUiTestHelper.leaveTabSwitcher; import static org.chromium.chrome.browser.tasks.tab_management.TabUiTestHelper.mergeAllIncognitoTabsToAGroup; import static org.chromium.chrome.browser.tasks.tab_management.TabUiTestHelper.mergeAllNormalTabsToAGroup; import static org.chromium.chrome.browser.tasks.tab_management.TabUiTestHelper.switchTabModel; @@ -27,21 +28,26 @@ import androidx.test.filters.MediumTest; import androidx.test.platform.app.InstrumentationRegistry; +import org.junit.After; import org.junit.Before; +import org.junit.ClassRule; import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; +import org.chromium.base.test.util.ApplicationTestUtils; +import org.chromium.base.test.util.Batch; import org.chromium.base.test.util.CommandLineFlags; import org.chromium.base.test.util.CriteriaHelper; -import org.chromium.base.test.util.DisabledTest; import org.chromium.base.test.util.Restriction; import org.chromium.chrome.browser.ChromeTabbedActivity; import org.chromium.chrome.browser.flags.ChromeFeatureList; import org.chromium.chrome.browser.flags.ChromeSwitches; +import org.chromium.chrome.browser.layouts.LayoutType; import org.chromium.chrome.test.ChromeJUnit4ClassRunner; import org.chromium.chrome.test.ChromeTabbedActivityTestRule; import org.chromium.chrome.test.R; +import org.chromium.chrome.test.batch.BlankCTATabInitialStateRule; import org.chromium.chrome.test.util.MenuUtils; import org.chromium.chrome.test.util.browser.Features; import org.chromium.ui.test.util.UiRestriction; @@ -53,211 +59,229 @@ ChromeSwitches.DISABLE_TAB_MERGING_FOR_TESTING}) @Restriction({UiRestriction.RESTRICTION_TYPE_PHONE, RESTRICTION_TYPE_NON_LOW_END_DEVICE}) @Features.EnableFeatures({ChromeFeatureList.TAB_GRID_LAYOUT_ANDROID}) +@Batch(Batch.PER_CLASS) public class TabSwitcherMultiWindowTest { // clang-format on + @ClassRule + public static ChromeTabbedActivityTestRule sActivityTestRule = + new ChromeTabbedActivityTestRule(); + @Rule - public ChromeTabbedActivityTestRule mActivityTestRule = new ChromeTabbedActivityTestRule(); + public BlankCTATabInitialStateRule mBlankCTATabInitialStateRule = + new BlankCTATabInitialStateRule(sActivityTestRule, true); + + private ChromeTabbedActivity mCta1; + private ChromeTabbedActivity mCta2; @Before public void setUp() { - mActivityTestRule.startMainActivityOnBlankPage(); - TabUiTestHelper.verifyTabSwitcherLayoutType(mActivityTestRule.getActivity()); - CriteriaHelper.pollUiThread( - mActivityTestRule.getActivity().getTabModelSelector()::isTabStateInitialized); + TabUiTestHelper.verifyTabSwitcherLayoutType(sActivityTestRule.getActivity()); + mCta1 = sActivityTestRule.getActivity(); + CriteriaHelper.pollUiThread(mCta1.getTabModelSelector()::isTabStateInitialized); + } + + @After + public void tearDown() throws Exception { + if (mCta2 != null) { + ApplicationTestUtils.finishActivity(mCta2); + } + if (mCta1 != null) { + moveActivityToFront(mCta1); + if (mCta1.getLayoutManager().isLayoutVisible(LayoutType.TAB_SWITCHER)) { + leaveTabSwitcher(mCta1); + } + } } @Test @LargeTest - @DisabledTest(message = "https://crbug.com/1382930") public void testMoveTabsAcrossWindow_GTS_WithoutGroup() { - final ChromeTabbedActivity cta1 = mActivityTestRule.getActivity(); // Initially, we have 4 normal tabs (including the one created at activity start) and 3 - // incognito tabs in cta1. - TabUiTestHelper.addBlankTabs(cta1, false, 3); - TabUiTestHelper.addBlankTabs(cta1, true, 3); - verifyTabModelTabCount(cta1, 4, 3); + // incognito tabs in mCta1. + TabUiTestHelper.addBlankTabs(mCta1, false, 3); + TabUiTestHelper.addBlankTabs(mCta1, true, 3); + verifyTabModelTabCount(mCta1, 4, 3); - // Enter tab switcher in cta1 in incognito mode. - enterTabSwitcher(cta1); - assertTrue(cta1.getTabModelSelector().getCurrentModel().isIncognito()); + // Enter tab switcher in mCta1 in incognito mode. + enterTabSwitcher(mCta1); + assertTrue(mCta1.getTabModelSelector().getCurrentModel().isIncognito()); - // Before move, there are 3 incognito tabs in cta1. - verifyTabSwitcherCardCount(cta1, 3); + // Before move, there are 3 incognito tabs in mCta1. + verifyTabSwitcherCardCount(mCta1, 3); - // Move 2 incognito tabs to cta2. - clickFirstCardFromTabSwitcher(cta1); - MenuUtils.invokeCustomMenuActionSync(InstrumentationRegistry.getInstrumentation(), cta1, + // Move 2 incognito tabs to mCta2. + clickFirstCardFromTabSwitcher(mCta1); + MenuUtils.invokeCustomMenuActionSync(InstrumentationRegistry.getInstrumentation(), mCta1, R.id.move_to_other_window_menu_id); - final ChromeTabbedActivity cta2 = waitForSecondChromeTabbedActivity(); - moveActivityToFront(cta1); - moveTabsToOtherWindow(cta1, 1); + mCta2 = waitForSecondChromeTabbedActivity(); + CriteriaHelper.pollUiThread(mCta2.getTabModelSelector()::isTabStateInitialized); + moveActivityToFront(mCta1); + moveTabsToOtherWindow(mCta1, 1); - // After move, there are 1 incognito tab in cta1 and 2 incognito tabs in cta2. - enterTabSwitcher(cta1); - verifyTabSwitcherCardCount(cta1, 1); - clickFirstCardFromTabSwitcher(cta1); - moveActivityToFront(cta2); - enterTabSwitcher(cta2); - verifyTabSwitcherCardCount(cta2, 2); - verifyTabModelTabCount(cta1, 4, 1); - verifyTabModelTabCount(cta2, 0, 2); + // After move, there are 1 incognito tab in mCta1 and 2 incognito tabs in mCta2. + enterTabSwitcher(mCta1); + verifyTabSwitcherCardCount(mCta1, 1); + clickFirstCardFromTabSwitcher(mCta1); + moveActivityToFront(mCta2); + enterTabSwitcher(mCta2); + verifyTabSwitcherCardCount(mCta2, 2); + verifyTabModelTabCount(mCta1, 4, 1); + verifyTabModelTabCount(mCta2, 0, 2); - // Move 1 incognito tab back to cta1. - clickFirstCardFromTabSwitcher(cta2); - moveTabsToOtherWindow(cta2, 1); + // Move 1 incognito tab back to mCta1. + clickFirstCardFromTabSwitcher(mCta2); + moveTabsToOtherWindow(mCta2, 1); - // After move, there are 2 incognito tabs in cta1 and 1 incognito tab in cta2. - enterTabSwitcher(cta2); - verifyTabSwitcherCardCount(cta2, 1); - clickFirstCardFromTabSwitcher(cta2); - moveActivityToFront(cta1); - enterTabSwitcher(cta1); - verifyTabSwitcherCardCount(cta1, 2); - verifyTabModelTabCount(cta1, 4, 2); - verifyTabModelTabCount(cta2, 0, 1); + // After move, there are 2 incognito tabs in mCta1 and 1 incognito tab in mCta2. + enterTabSwitcher(mCta2); + verifyTabSwitcherCardCount(mCta2, 1); + clickFirstCardFromTabSwitcher(mCta2); + moveActivityToFront(mCta1); + enterTabSwitcher(mCta1); + verifyTabSwitcherCardCount(mCta1, 2); + verifyTabModelTabCount(mCta1, 4, 2); + verifyTabModelTabCount(mCta2, 0, 1); - // Switch to normal tab list in cta1. - switchTabModel(cta1, false); - assertFalse(cta1.getTabModelSelector().getCurrentModel().isIncognito()); + // Switch to normal tab list in mCta1. + switchTabModel(mCta1, false); + assertFalse(mCta1.getTabModelSelector().getCurrentModel().isIncognito()); - // Move 3 normal tabs to cta2. - clickFirstCardFromTabSwitcher(cta1); - moveTabsToOtherWindow(cta1, 3); + // Move 3 normal tabs to mCta2. + clickFirstCardFromTabSwitcher(mCta1); + moveTabsToOtherWindow(mCta1, 3); - // After move, there are 1 normal tab in cta1 and 3 normal tabs in cta2. - enterTabSwitcher(cta1); - verifyTabSwitcherCardCount(cta1, 1); - clickFirstCardFromTabSwitcher(cta1); - moveActivityToFront(cta2); - enterTabSwitcher(cta2); - verifyTabSwitcherCardCount(cta2, 3); - verifyTabModelTabCount(cta1, 1, 2); - verifyTabModelTabCount(cta2, 3, 1); + // After move, there are 1 normal tab in mCta1 and 3 normal tabs in mCta2. + enterTabSwitcher(mCta1); + verifyTabSwitcherCardCount(mCta1, 1); + clickFirstCardFromTabSwitcher(mCta1); + moveActivityToFront(mCta2); + enterTabSwitcher(mCta2); + verifyTabSwitcherCardCount(mCta2, 3); + verifyTabModelTabCount(mCta1, 1, 2); + verifyTabModelTabCount(mCta2, 3, 1); - // Move 2 normal tabs back to cta1. - clickFirstCardFromTabSwitcher(cta2); - moveTabsToOtherWindow(cta2, 2); + // Move 2 normal tabs back to mCta1. + clickFirstCardFromTabSwitcher(mCta2); + moveTabsToOtherWindow(mCta2, 2); - // After move, there are 3 normal tabs in cta1 and 1 normal tab in cta2. - enterTabSwitcher(cta2); - verifyTabSwitcherCardCount(cta2, 1); - clickFirstCardFromTabSwitcher(cta2); - moveActivityToFront(cta1); - enterTabSwitcher(cta1); - verifyTabSwitcherCardCount(cta1, 3); - verifyTabModelTabCount(cta1, 3, 2); - verifyTabModelTabCount(cta2, 1, 1); + // After move, there are 3 normal tabs in mCta1 and 1 normal tab in mCta2. + enterTabSwitcher(mCta2); + verifyTabSwitcherCardCount(mCta2, 1); + clickFirstCardFromTabSwitcher(mCta2); + moveActivityToFront(mCta1); + enterTabSwitcher(mCta1); + verifyTabSwitcherCardCount(mCta1, 3); + verifyTabModelTabCount(mCta1, 3, 2); + verifyTabModelTabCount(mCta2, 1, 1); } @Test @LargeTest @Features.EnableFeatures({ChromeFeatureList.TAB_GROUPS_ANDROID}) - @DisabledTest(message = "https://crbug.com/1413875") public void testMoveTabsAcrossWindow_GTS_WithGroup() { // Initially, we have 5 normal tabs (including the one created at activity start) and 5 - // incognito tabs in cta1. - final ChromeTabbedActivity cta1 = mActivityTestRule.getActivity(); - TabUiTestHelper.addBlankTabs(cta1, false, 4); - TabUiTestHelper.addBlankTabs(cta1, true, 5); - verifyTabModelTabCount(cta1, 5, 5); + // incognito tabs in mCta1. + TabUiTestHelper.addBlankTabs(mCta1, false, 4); + TabUiTestHelper.addBlankTabs(mCta1, true, 5); + verifyTabModelTabCount(mCta1, 5, 5); - // Enter tab switcher in cta1 in incognito mode. - enterTabSwitcher(cta1); - assertTrue(cta1.getTabModelSelector().getCurrentModel().isIncognito()); + // Enter tab switcher in mCta1 in incognito mode. + enterTabSwitcher(mCta1); + assertTrue(mCta1.getTabModelSelector().getCurrentModel().isIncognito()); // Merge all incognito tabs into one group. - mergeAllIncognitoTabsToAGroup(cta1); - verifyTabSwitcherCardCount(cta1, 1); + mergeAllIncognitoTabsToAGroup(mCta1); + verifyTabSwitcherCardCount(mCta1, 1); // Enter group and verify there are 5 favicons in tab strip. - clickFirstCardFromTabSwitcher(cta1); - clickFirstTabInDialog(cta1); - verifyTabStripFaviconCount(cta1, 5); + clickFirstCardFromTabSwitcher(mCta1); + clickFirstTabInDialog(mCta1); + verifyTabStripFaviconCount(mCta1, 5); - // Move 3 incognito tabs in this group to cta2. - MenuUtils.invokeCustomMenuActionSync(InstrumentationRegistry.getInstrumentation(), cta1, + // Move 3 incognito tabs in this group to mCta2. + MenuUtils.invokeCustomMenuActionSync(InstrumentationRegistry.getInstrumentation(), mCta1, R.id.move_to_other_window_menu_id); - final ChromeTabbedActivity cta2 = waitForSecondChromeTabbedActivity(); - moveActivityToFront(cta1); - moveTabsToOtherWindow(cta1, 2); + mCta2 = waitForSecondChromeTabbedActivity(); + CriteriaHelper.pollUiThread(mCta2.getTabModelSelector()::isTabStateInitialized); + moveActivityToFront(mCta1); + moveTabsToOtherWindow(mCta1, 2); - // After move, there is a group of 2 incognito tabs in cta1 and a group of 3 incognito tabs - // in cta2. - verifyTabStripFaviconCount(cta1, 2); - moveActivityToFront(cta2); - verifyTabStripFaviconCount(cta2, 3); - verifyTabModelTabCount(cta1, 5, 2); - verifyTabModelTabCount(cta2, 0, 3); + // After move, there is a group of 2 incognito tabs in mCta1 and a group of 3 incognito tabs + // in mCta2. + verifyTabStripFaviconCount(mCta1, 2); + moveActivityToFront(mCta2); + verifyTabStripFaviconCount(mCta2, 3); + verifyTabModelTabCount(mCta1, 5, 2); + verifyTabModelTabCount(mCta2, 0, 3); - // Move one incognito tab in group back to cta1. - moveTabsToOtherWindow(cta2, 1); + // Move one incognito tab in group back to mCta1. + moveTabsToOtherWindow(mCta2, 1); - // After move, there is group of 3 incognito tabs in cta1 and a group of 2 incognito tabs in - // cta2. - verifyTabStripFaviconCount(cta2, 2); - moveActivityToFront(cta1); - verifyTabStripFaviconCount(cta1, 3); - verifyTabModelTabCount(cta1, 5, 3); - verifyTabModelTabCount(cta2, 0, 2); + // After move, there is group of 3 incognito tabs in mCta1 and a group of 2 incognito tabs + // in mCta2. + verifyTabStripFaviconCount(mCta2, 2); + moveActivityToFront(mCta1); + verifyTabStripFaviconCount(mCta1, 3); + verifyTabModelTabCount(mCta1, 5, 3); + verifyTabModelTabCount(mCta2, 0, 2); - // Switch to normal tab model in cta1 and create a tab group with 5 normal tabs. - enterTabSwitcher(cta1); - switchTabModel(cta1, false); - mergeAllNormalTabsToAGroup(cta1); - verifyTabSwitcherCardCount(cta1, 1); + // Switch to normal tab model in mCta1 and create a tab group with 5 normal tabs. + enterTabSwitcher(mCta1); + switchTabModel(mCta1, false); + mergeAllNormalTabsToAGroup(mCta1); + verifyTabSwitcherCardCount(mCta1, 1); // Enter group and verify there are 5 favicons in tab strip. - clickFirstCardFromTabSwitcher(cta1); - clickFirstTabInDialog(cta1); - verifyTabStripFaviconCount(cta1, 5); + clickFirstCardFromTabSwitcher(mCta1); + clickFirstTabInDialog(mCta1); + verifyTabStripFaviconCount(mCta1, 5); - // Move 3 normal tabs in this group to cta2. - moveTabsToOtherWindow(cta1, 3); + // Move 3 normal tabs in this group to mCta2. + moveTabsToOtherWindow(mCta1, 3); - // After move, there is a group of 2 normal tabs in cta1 and a group of 3 normal tabs in - // cta2. - verifyTabStripFaviconCount(cta1, 2); - moveActivityToFront(cta2); - verifyTabStripFaviconCount(cta2, 3); - verifyTabModelTabCount(cta1, 2, 3); - verifyTabModelTabCount(cta2, 3, 2); + // After move, there is a group of 2 normal tabs in mCta1 and a group of 3 normal tabs in + // mCta2. + verifyTabStripFaviconCount(mCta1, 2); + moveActivityToFront(mCta2); + verifyTabStripFaviconCount(mCta2, 3); + verifyTabModelTabCount(mCta1, 2, 3); + verifyTabModelTabCount(mCta2, 3, 2); - // Move one normal tab in group back to cta1. - moveTabsToOtherWindow(cta2, 1); + // Move one normal tab in group back to mCta1. + moveTabsToOtherWindow(mCta2, 1); - // After move, there is a group of 3 normal tabs in cta1 and a group of 2 normal tabs in - // cta2. - verifyTabStripFaviconCount(cta2, 2); - moveActivityToFront(cta1); - verifyTabStripFaviconCount(cta1, 3); - verifyTabModelTabCount(cta1, 3, 3); - verifyTabModelTabCount(cta2, 2, 2); + // After move, there is a group of 3 normal tabs in mCta1 and a group of 2 normal tabs in + // mCta2. + verifyTabStripFaviconCount(mCta2, 2); + moveActivityToFront(mCta1); + verifyTabStripFaviconCount(mCta1, 3); + verifyTabModelTabCount(mCta1, 3, 3); + verifyTabModelTabCount(mCta2, 2, 2); } @Test @MediumTest - @DisabledTest(message = "https://crbug.com/1363248") // clang-format off @Features.EnableFeatures({ChromeFeatureList.TAB_GROUPS_ANDROID}) public void testMoveLastIncognitoTab() { // clang-format on - // Initially, we have 1 normal tab (created in #setup()) and 1 incognito tab in cta1. - final ChromeTabbedActivity cta1 = mActivityTestRule.getActivity(); - TabUiTestHelper.addBlankTabs(cta1, true, 1); - verifyTabModelTabCount(cta1, 1, 1); + // Initially, we have 1 normal tab (created in #setup()) and 1 incognito tab in mCta1. + TabUiTestHelper.addBlankTabs(mCta1, true, 1); + verifyTabModelTabCount(mCta1, 1, 1); - // Move the incognito tab to cta2. - assertTrue(cta1.getTabModelSelector().getCurrentModel().isIncognito()); - MenuUtils.invokeCustomMenuActionSync(InstrumentationRegistry.getInstrumentation(), cta1, + // Move the incognito tab to mCta2. + assertTrue(mCta1.getTabModelSelector().getCurrentModel().isIncognito()); + MenuUtils.invokeCustomMenuActionSync(InstrumentationRegistry.getInstrumentation(), mCta1, R.id.move_to_other_window_menu_id); - final ChromeTabbedActivity cta2 = waitForSecondChromeTabbedActivity(); + mCta2 = waitForSecondChromeTabbedActivity(); + CriteriaHelper.pollUiThread(mCta2.getTabModelSelector()::isTabStateInitialized); - assertThat(cta1.getTabModelSelector() + assertThat(mCta1.getTabModelSelector() .getTabModelFilterProvider() .getTabModelFilter(true) .getCount(), is(0)); - assertThat(cta2.getTabModelSelector() + assertThat(mCta2.getTabModelSelector() .getTabModelFilterProvider() .getTabModelFilter(true) .getCount(),
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/survey/OWNERS b/chrome/android/java/src/org/chromium/chrome/browser/survey/OWNERS index aa90d3a..2aea6b1 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/survey/OWNERS +++ b/chrome/android/java/src/org/chromium/chrome/browser/survey/OWNERS
@@ -1,4 +1,5 @@ wenyufu@chromium.org #Backup +skym@chromium.org twellington@chromium.org
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/customtabs/CustomTabActivityTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/customtabs/CustomTabActivityTest.java index 57ef28d..df3890a 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/customtabs/CustomTabActivityTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/customtabs/CustomTabActivityTest.java
@@ -469,11 +469,9 @@ * Test if an action button is shown with correct image and size, and clicking it sends the * correct {@link PendingIntent}. */ - // TODO(crbug.com/1420991): Re-enable this test after fixing/diagnosing flakiness. @Test @SmallTest @Feature({"UiCatalogue"}) - @DisabledTest(message = "https://crbug.com/1420991") public void testActionButton() throws TimeoutException { Bitmap expectedIcon = createVectorDrawableBitmap(R.drawable.ic_credit_card_black, 77, 48); Intent intent = createMinimalCustomTabIntent();
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/permissions/PermissionTestRule.java b/chrome/android/javatests/src/org/chromium/chrome/browser/permissions/PermissionTestRule.java index b6a3565..e4c916b 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/permissions/PermissionTestRule.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/permissions/PermissionTestRule.java
@@ -4,7 +4,11 @@ package org.chromium.chrome.browser.permissions; -import android.view.View; +import static androidx.test.espresso.action.ViewActions.click; +import static androidx.test.espresso.matcher.ViewMatchers.isDisplayed; +import static androidx.test.espresso.matcher.ViewMatchers.withId; + +import static org.hamcrest.CoreMatchers.allOf; import androidx.annotation.IdRes; @@ -25,13 +29,13 @@ import org.chromium.chrome.test.util.InfoBarTestAnimationListener; import org.chromium.chrome.test.util.InfoBarUtil; import org.chromium.components.browser_ui.modaldialog.ModalDialogTestUtils; -import org.chromium.components.browser_ui.modaldialog.TabModalPresenter; import org.chromium.components.infobars.InfoBar; import org.chromium.components.permissions.PermissionDialogController; import org.chromium.content_public.browser.test.util.TestThreadUtils; import org.chromium.content_public.browser.test.util.TouchCommon; import org.chromium.ui.modaldialog.ModalDialogManager; import org.chromium.ui.modaldialog.ModalDialogManager.ModalDialogType; +import org.chromium.ui.test.util.ViewUtils; /** * TestRule for permissions UI testing on Android. @@ -293,16 +297,7 @@ // only then add modal dialog view into the container. @IdRes int buttonId = allow ? R.id.positive_button : R.id.negative_button; - CriteriaHelper.pollUiThread(() -> { - TabModalPresenter presenter = (TabModalPresenter) activity.getModalDialogManager() - .getCurrentPresenterForTest(); - View buttonView = presenter.getDialogContainerForTest().findViewById(buttonId); - if (buttonView == null) { - return false; - } - TouchCommon.singleClickView(buttonView); - return true; - }); + ViewUtils.onViewWaiting(allOf(withId(buttonId), isDisplayed())).perform(click()); } /**
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/permissions/RuntimePermissionTestUtils.java b/chrome/android/javatests/src/org/chromium/chrome/browser/permissions/RuntimePermissionTestUtils.java index c5bc81d..7c0dba7e 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/permissions/RuntimePermissionTestUtils.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/permissions/RuntimePermissionTestUtils.java
@@ -122,12 +122,12 @@ } private static void waitUntilDifferentDialogIsShowing( - final PermissionTestRule permissionTestRule, final PropertyModel currentDialog) { + final PermissionTestRule permissionTestRule, final PropertyModel previousDialog) { CriteriaHelper.pollUiThread(() -> { final ModalDialogManager manager = permissionTestRule.getActivity().getModalDialogManager(); Criteria.checkThat(manager.isShowing(), Matchers.is(true)); - Criteria.checkThat(manager.getCurrentDialogForTest(), Matchers.not(currentDialog)); + Criteria.checkThat(manager.getCurrentDialogForTest(), Matchers.not(previousDialog)); }); } @@ -171,18 +171,20 @@ permissionTestRule.runJavaScriptCodeInCurrentTabWithGesture(javascriptToExecute); } + PropertyModel askPermissionDialogModel = null; if (permissionPromptAllow != null) { // A permission prompt dialog is expected. Wait for chrome to display and accept or // deny. PermissionTestRule.waitForDialog(activity); + final ModalDialogManager manager = TestThreadUtils.runOnUiThreadBlockingNoException( + activity::getModalDialogManager); + askPermissionDialogModel = manager.getCurrentDialogForTest(); + PermissionTestRule.replyToDialog(permissionPromptAllow, activity); if (waitForMissingPermissionPrompt) { // Wait for Chrome to inform user that a permission is missing --> different dialog - final ModalDialogManager manager = TestThreadUtils.runOnUiThreadBlockingNoException( - activity::getModalDialogManager); - waitUntilDifferentDialogIsShowing( - permissionTestRule, manager.getCurrentDialogForTest()); + waitUntilDifferentDialogIsShowing(permissionTestRule, askPermissionDialogModel); } } @@ -193,8 +195,7 @@ // Wait for the dialog that informs the user permissions are missing, when the initial // prompt is rejected or expected to not be shown. if (!Boolean.TRUE.equals(permissionPromptAllow)) { - waitUntilDifferentDialogIsShowing( - permissionTestRule, manager.getCurrentDialogForTest()); + waitUntilDifferentDialogIsShowing(permissionTestRule, askPermissionDialogModel); } // Verify the correct missing permission string resource is displayed.
diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn index 5f804ba..924e58a 100644 --- a/chrome/browser/BUILD.gn +++ b/chrome/browser/BUILD.gn
@@ -8244,6 +8244,10 @@ if (safe_browsing_mode == 1) { sources += [ + "enterprise/connectors/analysis/fake_content_analysis_delegate.cc", + "enterprise/connectors/analysis/fake_content_analysis_delegate.h", + "enterprise/connectors/analysis/fake_files_request_handler.cc", + "enterprise/connectors/analysis/fake_files_request_handler.h", "extensions/fake_safe_browsing_database_manager.cc", "extensions/fake_safe_browsing_database_manager.h", ]
diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc index 6a3b1ad..2c75aba3 100644 --- a/chrome/browser/about_flags.cc +++ b/chrome/browser/about_flags.cc
@@ -3362,6 +3362,19 @@ std::size(kHeuristicMemorySaverConservative), nullptr}, }; +const FeatureEntry::FeatureParam + kHighEfficiencyMultistateModeDefaultHeuristic[] = { + {"default_heuristic_mode", "true"}, +}; +// TODO(charlesmeng): rename option after default_heuristic_mode feature param +// actually sets the default pref value +const FeatureEntry::FeatureVariation kHighEfficiencyMultistateModeVariations[] = + { + {"With Recommended Badge", + kHighEfficiencyMultistateModeDefaultHeuristic, + std::size(kHighEfficiencyMultistateModeDefaultHeuristic), nullptr}, +}; + const FeatureEntry::FeatureParam kDiscardedTabTreatmentWithRing30Opacity[] = { {"discard_tab_treatment_option", "2"}, {"discard_tab_treatment_opacity", "0.3"}}; @@ -9858,8 +9871,10 @@ flag_descriptions::kHighEfficiencyMultistateModeAvailableName, flag_descriptions::kHighEfficiencyMultistateModeAvailableDescription, kOsDesktop, - FEATURE_VALUE_TYPE( - performance_manager::features::kHighEfficiencyMultistateMode)}, + FEATURE_WITH_PARAMS_VALUE_TYPE( + performance_manager::features::kHighEfficiencyMultistateMode, + kHighEfficiencyMultistateModeVariations, + "HighEfficiencyMultistateMode")}, {"memory-saver-discarded-tab-treatment", flag_descriptions::kHighEfficiencyDiscardedTabTreatmentName,
diff --git a/chrome/browser/android/vr/gvr_scheduler_delegate.cc b/chrome/browser/android/vr/gvr_scheduler_delegate.cc index 88fac2a..14dc2248 100644 --- a/chrome/browser/android/vr/gvr_scheduler_delegate.cc +++ b/chrome/browser/android/vr/gvr_scheduler_delegate.cc
@@ -1329,11 +1329,4 @@ "Environment integration is not supported."); } -void GvrSchedulerDelegate::SetInputSourceButtonListener( - mojo::PendingAssociatedRemote<device::mojom::XRInputSourceButtonListener>) { - // Input eventing is not supported. This call should not - // be made on this device. - frame_data_receiver_.ReportBadMessage("Input eventing is not supported."); -} - } // namespace vr
diff --git a/chrome/browser/android/vr/gvr_scheduler_delegate.h b/chrome/browser/android/vr/gvr_scheduler_delegate.h index e06014aa..83afcaf 100644 --- a/chrome/browser/android/vr/gvr_scheduler_delegate.h +++ b/chrome/browser/android/vr/gvr_scheduler_delegate.h
@@ -146,9 +146,6 @@ mojo::PendingAssociatedReceiver< device::mojom::XREnvironmentIntegrationProvider> environment_provider) override; - void SetInputSourceButtonListener( - mojo::PendingAssociatedRemote<device::mojom::XRInputSourceButtonListener>) - override; // XRPresentationProvider void SubmitFrameMissing(int16_t frame_index, const gpu::SyncToken&) override;
diff --git a/chrome/browser/ash/BUILD.gn b/chrome/browser/ash/BUILD.gn index c518982..f3a7273 100644 --- a/chrome/browser/ash/BUILD.gn +++ b/chrome/browser/ash/BUILD.gn
@@ -5824,7 +5824,6 @@ "//chrome/browser/chromeos:test_support", "//chrome/browser/chromeos/drivefs", "//chrome/browser/chromeos/launcher_search:search_util", - "//chrome/browser/enterprise/connectors/test:test_support", "//chrome/browser/extensions", "//chrome/browser/extensions:test_support", "//chrome/browser/image_decoder",
diff --git a/chrome/browser/ash/file_manager/copy_or_move_io_task_unittest.cc b/chrome/browser/ash/file_manager/copy_or_move_io_task_unittest.cc index c5c8f20..a741f807 100644 --- a/chrome/browser/ash/file_manager/copy_or_move_io_task_unittest.cc +++ b/chrome/browser/ash/file_manager/copy_or_move_io_task_unittest.cc
@@ -29,8 +29,8 @@ #include "chrome/browser/enterprise/connectors/analysis/mock_file_transfer_analysis_delegate.h" #include "chrome/browser/enterprise/connectors/analysis/source_destination_test_util.h" #include "chrome/browser/enterprise/connectors/connectors_service.h" -#include "chrome/browser/enterprise/connectors/test/deep_scanning_test_utils.h" #include "chrome/browser/policy/dm_token_utils.h" +#include "chrome/browser/safe_browsing/cloud_content_scanning/deep_scanning_test_utils.h" #include "chrome/common/chrome_features.h" #include "chrome/test/base/testing_browser_process.h" #include "chrome/test/base/testing_profile.h" @@ -620,9 +620,9 @@ // Set the analysis connector (enterprise_connectors) for FILE_TRANSFER. // It is also required for FileTransferAnalysisDelegate::IsEnabled() to // return a meaningful result. - enterprise_connectors::test::SetAnalysisConnector( - profile_->GetPrefs(), enterprise_connectors::FILE_TRANSFER, - kBlockingScansForDlpAndMalware); + safe_browsing::SetAnalysisConnector(profile_->GetPrefs(), + enterprise_connectors::FILE_TRANSFER, + kBlockingScansForDlpAndMalware); source_destination_testing_helper_ = std::make_unique<enterprise_connectors::SourceDestinationTestingHelper>(
diff --git a/chrome/browser/ash/file_manager/file_manager_browsertest.cc b/chrome/browser/ash/file_manager/file_manager_browsertest.cc index 94227a7..9a9f2fa2 100644 --- a/chrome/browser/ash/file_manager/file_manager_browsertest.cc +++ b/chrome/browser/ash/file_manager/file_manager_browsertest.cc
@@ -27,14 +27,14 @@ #include "chrome/browser/chromeos/policy/dlp/dlp_rules_manager.h" #include "chrome/browser/chromeos/policy/dlp/dlp_rules_manager_factory.h" #include "chrome/browser/chromeos/policy/dlp/mock_dlp_rules_manager.h" +#include "chrome/browser/enterprise/connectors/analysis/fake_content_analysis_delegate.h" +#include "chrome/browser/enterprise/connectors/analysis/fake_files_request_handler.h" #include "chrome/browser/enterprise/connectors/analysis/mock_file_transfer_analysis_delegate.h" #include "chrome/browser/enterprise/connectors/reporting/realtime_reporting_client_factory.h" -#include "chrome/browser/enterprise/connectors/test/deep_scanning_test_utils.h" -#include "chrome/browser/enterprise/connectors/test/fake_content_analysis_delegate.h" -#include "chrome/browser/enterprise/connectors/test/fake_files_request_handler.h" #include "chrome/browser/extensions/api/safe_browsing_private/safe_browsing_private_event_router.h" #include "chrome/browser/extensions/api/safe_browsing_private/safe_browsing_private_event_router_factory.h" #include "chrome/browser/policy/dm_token_utils.h" +#include "chrome/browser/safe_browsing/cloud_content_scanning/deep_scanning_test_utils.h" #include "chrome/browser/signin/identity_manager_factory.h" #include "chrome/common/chrome_features.h" #include "chrome/common/pref_names.h" @@ -762,12 +762,11 @@ SetDMTokenForTesting(policy::DMToken::CreateValidToken("dm_token")); // Enable reporting. - enterprise_connectors::test::SetOnSecurityEventReporting( - profile()->GetPrefs(), - /*enabled*/ true, - /*enabled_event_names*/ {}, - /*enabled_opt_in_events*/ {}, - /*machine_scope*/ false); + safe_browsing::SetOnSecurityEventReporting(profile()->GetPrefs(), + /*enabled*/ true, + /*enabled_event_names*/ {}, + /*enabled_opt_in_events*/ {}, + /*machine_scope*/ false); // Add mock to check reports. cloud_policy_client_ = std::make_unique<policy::MockCloudPolicyClient>(); cloud_policy_client_->SetDMToken("dm_token"); @@ -855,7 +854,7 @@ CHECK(destination); LOG(INFO) << "Setting file transfer policy for transfers from " << *source << " to " << *destination; - enterprise_connectors::test::SetAnalysisConnector( + safe_browsing::SetAnalysisConnector( profile()->GetPrefs(), enterprise_connectors::FILE_TRANSFER, base::StringPrintf(kFileTransferConnectorSettingsForDlp, source->c_str(), destination->c_str(), @@ -865,7 +864,7 @@ // responses. enterprise_connectors::FilesRequestHandler::SetFactoryForTesting( base::BindRepeating( - &enterprise_connectors::test::FakeFilesRequestHandler::Create, + &enterprise_connectors::FakeFilesRequestHandler::Create, base::BindRepeating(&FileTransferConnectorFilesAppBrowserTest:: FakeFileUploadCallback, base::Unretained(this), *source, @@ -969,9 +968,8 @@ expected_scan_ids.push_back(GetScanIDForFileName(file_name)); } - validator_ = - std::make_unique<enterprise_connectors::test::EventReportValidator>( - cloud_policy_client()); + validator_ = std::make_unique<safe_browsing::EventReportValidator>( + cloud_policy_client()); validator_->ExpectSensitiveDataEvents( /*url*/ "", /*source*/ *source_volume_name, @@ -1003,8 +1001,8 @@ safe_browsing::BinaryUploadService::Result result, const base::FilePath& path, std::unique_ptr<safe_browsing::BinaryUploadService::Request> request, - enterprise_connectors::test::FakeFilesRequestHandler:: - FakeFileRequestCallback callback) { + enterprise_connectors::FakeFilesRequestHandler::FakeFileRequestCallback + callback) { DCHECK_CURRENTLY_ON(content::BrowserThread::UI); EXPECT_FALSE(path.empty()); EXPECT_EQ(request->device_token(), "dm_token"); @@ -1050,12 +1048,12 @@ enterprise_connectors::ContentAnalysisResponse response; // We return a block verdict if the basename contains "blocked". if (base::Contains(path.BaseName().value(), "blocked")) { - response = enterprise_connectors::test::FakeContentAnalysisDelegate:: + response = enterprise_connectors::FakeContentAnalysisDelegate:: FakeContentAnalysisDelegate::DlpResponse( enterprise_connectors::ContentAnalysisResponse::Result::SUCCESS, "rule", enterprise_connectors::TriggeredRule::BLOCK); } else { - response = enterprise_connectors::test::FakeContentAnalysisDelegate:: + response = enterprise_connectors::FakeContentAnalysisDelegate:: SuccessfulResponse({"dlp"}); } response.set_request_token( @@ -1070,7 +1068,7 @@ // Used to test reporting. std::unique_ptr<policy::MockCloudPolicyClient> cloud_policy_client_; std::unique_ptr<signin::IdentityTestEnvironment> identity_test_environment_; - std::unique_ptr<enterprise_connectors::test::EventReportValidator> validator_; + std::unique_ptr<safe_browsing::EventReportValidator> validator_; static constexpr char kUserName[] = "test@chromium.org"; static constexpr char kScanId[] = "scan id";
diff --git a/chrome/browser/ash/login/oobe_quick_start/connectivity/target_device_connection_broker.cc b/chrome/browser/ash/login/oobe_quick_start/connectivity/target_device_connection_broker.cc index 2ca1680..300346f 100644 --- a/chrome/browser/ash/login/oobe_quick_start/connectivity/target_device_connection_broker.cc +++ b/chrome/browser/ash/login/oobe_quick_start/connectivity/target_device_connection_broker.cc
@@ -4,9 +4,10 @@ #include "chrome/browser/ash/login/oobe_quick_start/connectivity/target_device_connection_broker.h" -#include "base/base64url.h" +#include "base/base64.h" #include "base/hash/sha1.h" #include "base/strings/string_number_conversions.h" +#include "url/url_util.h" namespace ash::quick_start { @@ -50,12 +51,16 @@ const SharedSecret shared_secret) const { std::string shared_secret_str(shared_secret.begin(), shared_secret.end()); std::string shared_secret_base64; - base::Base64UrlEncode(shared_secret_str, - base::Base64UrlEncodePolicy::OMIT_PADDING, - &shared_secret_base64); + base::Base64Encode(shared_secret_str, &shared_secret_base64); + url::RawCanonOutputT<char> shared_secret_base64_uriencoded; + url::EncodeURIComponent(shared_secret_base64.data(), + shared_secret_base64.size(), + &shared_secret_base64_uriencoded); std::string url = "https://signin.google/qs/" + random_session_id.ToString() + - "?key=" + shared_secret_base64; + "?key=" + + std::string(shared_secret_base64_uriencoded.data(), + shared_secret_base64_uriencoded.length()); return std::vector<uint8_t>(url.begin(), url.end()); }
diff --git a/chrome/browser/ash/login/oobe_quick_start/connectivity/target_device_connection_broker_impl_unittest.cc b/chrome/browser/ash/login/oobe_quick_start/connectivity/target_device_connection_broker_impl_unittest.cc index d99d473..b3a4b53d 100644 --- a/chrome/browser/ash/login/oobe_quick_start/connectivity/target_device_connection_broker_impl_unittest.cc +++ b/chrome/browser/ash/login/oobe_quick_start/connectivity/target_device_connection_broker_impl_unittest.cc
@@ -64,7 +64,7 @@ // Base64 representation of kSharedSecret. constexpr char kSharedSecretBase64[] = - "VL1Az4p8L2rKFVnP8-sxCJBz79qH1CPAVdWDWwQoSfI"; + "VL1Az4p8L2rKFVnP8%2BsxCJBz79qH1CPAVdWDWwQoSfI%3D"; // Arbitrary string to use as the endpoint id. constexpr char kEndpointId[] = "endpoint_id";
diff --git a/chrome/browser/ash/login/oobe_quick_start/target_device_bootstrap_controller.cc b/chrome/browser/ash/login/oobe_quick_start/target_device_bootstrap_controller.cc index 95b0b12..2c9f355 100644 --- a/chrome/browser/ash/login/oobe_quick_start/target_device_bootstrap_controller.cc +++ b/chrome/browser/ash/login/oobe_quick_start/target_device_bootstrap_controller.cc
@@ -100,7 +100,7 @@ status_.step = Step::ADVERTISING; connection_broker_->StartAdvertising( - this, /*use_pin_authentication=*/true, + this, /*use_pin_authentication=*/false, base::BindOnce(&TargetDeviceBootstrapController::OnStartAdvertisingResult, weak_ptr_factory_.GetWeakPtr())); NotifyObservers();
diff --git a/chrome/browser/ash/login/screens/choobe_screen.cc b/chrome/browser/ash/login/screens/choobe_screen.cc index 8fc4e9d6..7b60f958 100644 --- a/chrome/browser/ash/login/screens/choobe_screen.cc +++ b/chrome/browser/ash/login/screens/choobe_screen.cc
@@ -43,7 +43,8 @@ // to check with the ChoobeFlowController whether to skip CHOOBE screen. bool ChoobeScreen::MaybeSkip(WizardContext& context) { - if (context.skip_post_login_screens_for_tests) { + if (context.skip_post_login_screens_for_tests || + context.skip_choobe_for_tests) { exit_callback_.Run(Result::NOT_APPLICABLE); return true; }
diff --git a/chrome/browser/ash/login/screens/display_size_screen_browsertest.cc b/chrome/browser/ash/login/screens/display_size_screen_browsertest.cc index 5f615e0..8b2e09c7 100644 --- a/chrome/browser/ash/login/screens/display_size_screen_browsertest.cc +++ b/chrome/browser/ash/login/screens/display_size_screen_browsertest.cc
@@ -54,6 +54,10 @@ } void ShowDisplaySizeScreen() { + LoginDisplayHost::default_host() + ->GetWizardContextForTesting() + ->skip_choobe_for_tests = true; + login_manager_mixin_.LoginAsNewRegularUser(); OobeScreenExitWaiter(GetFirstSigninScreen()).Wait(); WizardController::default_controller()->AdvanceToScreen(
diff --git a/chrome/browser/ash/login/screens/drive_pinning_screen_browsertest.cc b/chrome/browser/ash/login/screens/drive_pinning_screen_browsertest.cc index a1e3a626..42eebd33 100644 --- a/chrome/browser/ash/login/screens/drive_pinning_screen_browsertest.cc +++ b/chrome/browser/ash/login/screens/drive_pinning_screen_browsertest.cc
@@ -71,6 +71,10 @@ } void ShowDrivePinningScreen() { + LoginDisplayHost::default_host() + ->GetWizardContextForTesting() + ->skip_choobe_for_tests = true; + login_manager_mixin_.LoginAsNewRegularUser(); OobeScreenExitWaiter(GetFirstSigninScreen()).Wait(); WizardController::default_controller()->AdvanceToScreen(
diff --git a/chrome/browser/ash/login/screens/quick_start_screen_browsertest.cc b/chrome/browser/ash/login/screens/quick_start_screen_browsertest.cc index 76cb561..8c4c7d3 100644 --- a/chrome/browser/ash/login/screens/quick_start_screen_browsertest.cc +++ b/chrome/browser/ash/login/screens/quick_start_screen_browsertest.cc
@@ -134,8 +134,10 @@ WaitForVerificationStep(); - test::OobeJS().ExpectAttributeEQ("canvasSize_", - {QuickStartView::kScreenId.name}, 185); + int canvas_size = test::OobeJS().GetAttributeInt( + "canvasSize_", {QuickStartView::kScreenId.name}); + EXPECT_GE(canvas_size, 185); + EXPECT_LE(canvas_size, 265); } IN_PROC_BROWSER_TEST_F(QuickStartBrowserTest, PinCode) {
diff --git a/chrome/browser/ash/login/screens/theme_selection_screen_browsertest.cc b/chrome/browser/ash/login/screens/theme_selection_screen_browsertest.cc index ed59f531..6ebfa8f 100644 --- a/chrome/browser/ash/login/screens/theme_selection_screen_browsertest.cc +++ b/chrome/browser/ash/login/screens/theme_selection_screen_browsertest.cc
@@ -77,6 +77,10 @@ } void ShowThemeSelectionScreen() { + LoginDisplayHost::default_host() + ->GetWizardContextForTesting() + ->skip_choobe_for_tests = true; + login_manager_mixin_.LoginAsNewRegularUser(); OobeScreenExitWaiter(GetFirstSigninScreen()).Wait(); WizardController::default_controller()->AdvanceToScreen( @@ -233,6 +237,10 @@ }; IN_PROC_BROWSER_TEST_P(ThemeSelectionScreenResumeTest, PRE_ResumedScreen) { + LoginDisplayHost::default_host() + ->GetWizardContextForTesting() + ->skip_choobe_for_tests = true; + OobeScreenWaiter(UserCreationView::kScreenId).Wait(); LoginManagerMixin::TestUserInfo test_user(user_); login_mixin_.LoginWithDefaultContext(test_user);
diff --git a/chrome/browser/ash/login/screens/touchpad_scroll_screen_browsertest.cc b/chrome/browser/ash/login/screens/touchpad_scroll_screen_browsertest.cc index 1e7064a..6bb1323 100644 --- a/chrome/browser/ash/login/screens/touchpad_scroll_screen_browsertest.cc +++ b/chrome/browser/ash/login/screens/touchpad_scroll_screen_browsertest.cc
@@ -66,6 +66,10 @@ } void ShowTouchpadScrollScreen() { + LoginDisplayHost::default_host() + ->GetWizardContextForTesting() + ->skip_choobe_for_tests = true; + login_manager_mixin_.LoginAsNewRegularUser(); OobeScreenExitWaiter(GetFirstSigninScreen()).Wait(); WizardController::default_controller()->AdvanceToScreen(
diff --git a/chrome/browser/ash/login/wizard_context.h b/chrome/browser/ash/login/wizard_context.h index d859bc80..b436f62 100644 --- a/chrome/browser/ash/login/wizard_context.h +++ b/chrome/browser/ash/login/wizard_context.h
@@ -82,6 +82,12 @@ // screens in tests. Is set by WizardController::SkipPostLoginScreensForTests. bool skip_post_login_screens_for_tests = false; + // Whether CHOOBE screen should be skipped. Setting this flag will force skip + // CHOOBE screen regardless of the number of eligible optional screens. + // To test an optional screen without selecting the screen from CHOOBE screen, + // set this flag to true before logging in as a new user. + bool skip_choobe_for_tests = false; + // Whether user creation screen is enabled (could be disabled due to disabled // feature or on managed device). It determines the behavior of back button // for GaiaScreen and OfflineLoginScreen. Value is set to true in
diff --git a/chrome/browser/ash/login/wizard_controller_browsertest.cc b/chrome/browser/ash/login/wizard_controller_browsertest.cc index 200d071..c22a098c 100644 --- a/chrome/browser/ash/login/wizard_controller_browsertest.cc +++ b/chrome/browser/ash/login/wizard_controller_browsertest.cc
@@ -3073,6 +3073,10 @@ IN_PROC_BROWSER_TEST_F(WizardControllerThemeSelectionTest, TransitionToMarketingOptIn) { + LoginDisplayHost::default_host() + ->GetWizardContextForTesting() + ->skip_choobe_for_tests = true; + LoginDisplayHost::default_host()->GetWizardContext()->is_branded_build = true; login_mixin_.LoginAsNewRegularUser(); WizardController::default_controller()->AdvanceToScreen( @@ -3083,6 +3087,10 @@ IN_PROC_BROWSER_TEST_F(WizardControllerThemeSelectionTest, TransitionToThemeSelection) { + LoginDisplayHost::default_host() + ->GetWizardContextForTesting() + ->skip_choobe_for_tests = true; + login_mixin_.LoginAsNewRegularUser(); WizardController::default_controller()->AdvanceToScreen( GestureNavigationScreenView::kScreenId);
diff --git a/chrome/browser/autofill/autofill_interactive_uitest.cc b/chrome/browser/autofill/autofill_interactive_uitest.cc index 0ddadba3..7cf4ffd 100644 --- a/chrome/browser/autofill/autofill_interactive_uitest.cc +++ b/chrome/browser/autofill/autofill_interactive_uitest.cc
@@ -1388,6 +1388,22 @@ EXPECT_EQ(kDefaultAddressValues.state_short, GetFieldValueById("state")); } +// Test that hidden selectmenus get filled. Selectmenus should have the same +// autofill behaviour as selects for the sake of simplicity. +IN_PROC_BROWSER_TEST_F(AutofillInteractiveTest, FillHiddenSelectMenu) { + CreateTestProfile(); + GURL url = embedded_test_server()->GetURL( + "a.com", "/autofill/form_hidden_selectmenu.html"); + ASSERT_TRUE(ui_test_utils::NavigateToURL(browser(), url)); + ASSERT_TRUE(AutofillFlow(GetElementById("firstname"), this)); + + // Make sure the form was filled correctly. + EXPECT_EQ(kDefaultAddressValues.first_name, GetFieldValueById("firstname")); + EXPECT_EQ(kDefaultAddressValues.address1, GetFieldValueById("address1")); + EXPECT_EQ(kDefaultAddressValues.city, GetFieldValueById("city")); + EXPECT_EQ(kDefaultAddressValues.state_short, GetFieldValueById("state")); +} + // AutofillInteractiveTest subclass which disables autofilling <selectmenu>. class AutofillInteractiveDisableAutofillSelectMenuTest : public AutofillInteractiveTest {
diff --git a/chrome/browser/browsing_topics/browsing_topics_service_browsertest.cc b/chrome/browser/browsing_topics/browsing_topics_service_browsertest.cc index d38e0a4..1df86ef 100644 --- a/chrome/browser/browsing_topics/browsing_topics_service_browsertest.cc +++ b/chrome/browser/browsing_topics/browsing_topics_service_browsertest.cc
@@ -30,6 +30,8 @@ #include "components/optimization_guide/core/test_model_info_builder.h" #include "components/optimization_guide/core/test_optimization_guide_model_provider.h" #include "components/optimization_guide/proto/page_topics_model_metadata.pb.h" +#include "components/privacy_sandbox/privacy_sandbox_attestations/privacy_sandbox_attestations.h" +#include "components/privacy_sandbox/privacy_sandbox_features.h" #include "components/privacy_sandbox/privacy_sandbox_settings.h" #include "components/ukm/test_ukm_recorder.h" #include "content/public/browser/browsing_topics_site_data_manager.h" @@ -41,6 +43,7 @@ #include "content/public/test/fenced_frame_test_util.h" #include "content/public/test/prerender_test_util.h" #include "content/public/test/test_navigation_observer.h" +#include "net/base/schemeful_site.h" #include "net/dns/mock_host_resolver.h" #include "net/test/embedded_test_server/request_handler_util.h" #include "services/metrics/public/cpp/ukm_builders.h" @@ -484,6 +487,10 @@ return browsing_topics_service()->browsing_topics_state(); } + privacy_sandbox::PrivacySandboxSettings* privacy_sandbox_settings() { + return PrivacySandboxSettingsFactory::GetForProfile(browser()->profile()); + } + content::test::PrerenderTestHelper& prerender_helper() { return prerender_helper_; } @@ -2337,4 +2344,81 @@ EXPECT_EQ(api_usage_contexts[2].hashed_context_domain, HashedDomain(1)); } +// Tests that the Topics API abides by the Privacy Sandbox Enrollment framework. +class AttestationBrowsingTopicsBrowserTest : public BrowsingTopicsBrowserTest { + public: + AttestationBrowsingTopicsBrowserTest() { + scoped_feature_list_.InitWithFeatures( + /*enabled_features=*/ + {blink::features::kBrowsingTopics, blink::features::kBrowsingTopicsXHR, + blink::features::kBrowsingTopicsBypassIPIsPubliclyRoutableCheck, + features::kPrivacySandboxAdsAPIsOverride, + privacy_sandbox::kEnforcePrivacySandboxAttestations}, + /*disabled_features=*/{}); + } + + ~AttestationBrowsingTopicsBrowserTest() override = default; + + protected: + base::test::ScopedFeatureList scoped_feature_list_; +}; + +// Site a.test is attested for Topics, so it should receive a valid response. +IN_PROC_BROWSER_TEST_F(AttestationBrowsingTopicsBrowserTest, + AttestedSiteCanGetBrowsingTopics) { + privacy_sandbox::PrivacySandboxAttestationsMap map; + map.insert_or_assign( + net::SchemefulSite(GURL("https://a.test")), + privacy_sandbox::PrivacySandboxAttestationsGatedAPISet{ + privacy_sandbox::PrivacySandboxAttestationsGatedAPI::kTopics}); + privacy_sandbox_settings()->SetPrivacySandboxAttestationsMapForTesting(map); + + GURL main_frame_url = + https_server_.GetURL("a.test", "/browsing_topics/one_iframe_page.html"); + + ASSERT_TRUE(ui_test_utils::NavigateToURL(browser(), main_frame_url)); + + std::string result = InvokeTopicsAPI(web_contents()); + EXPECT_EQ(result, kExpectedApiResult); +} + +// Site b.test is not attested for Topics, so it should receive no topics. Note: +// Attestation failure works differently from other failure modes like operating +// in an insecure context. In this case, the API is still exposed, but handling +// will exit before any topics are filled. +IN_PROC_BROWSER_TEST_F(AttestationBrowsingTopicsBrowserTest, + UnattestedSiteCannotGetBrowsingTopics) { + privacy_sandbox::PrivacySandboxAttestationsMap map; + map.insert_or_assign( + net::SchemefulSite(GURL("https://a.test")), + privacy_sandbox::PrivacySandboxAttestationsGatedAPISet{ + privacy_sandbox::PrivacySandboxAttestationsGatedAPI::kTopics}); + privacy_sandbox_settings()->SetPrivacySandboxAttestationsMapForTesting(map); + + GURL main_frame_url = + https_server_.GetURL("b.test", "/browsing_topics/one_iframe_page.html"); + + ASSERT_TRUE(ui_test_utils::NavigateToURL(browser(), main_frame_url)); + + EXPECT_EQ("[]", InvokeTopicsAPI(web_contents())); +} + +// Site a.test is attested, but not for Topics, so no topics should be returned. +IN_PROC_BROWSER_TEST_F(AttestationBrowsingTopicsBrowserTest, + AttestedSiteCannotGetBrowsingTopicsWithMismatchedMap) { + privacy_sandbox::PrivacySandboxAttestationsMap map; + map.insert_or_assign(net::SchemefulSite(GURL("https://a.test")), + privacy_sandbox::PrivacySandboxAttestationsGatedAPISet{ + privacy_sandbox::PrivacySandboxAttestationsGatedAPI:: + kProtectedAudience}); + privacy_sandbox_settings()->SetPrivacySandboxAttestationsMapForTesting(map); + + GURL main_frame_url = + https_server_.GetURL("a.test", "/browsing_topics/one_iframe_page.html"); + + ASSERT_TRUE(ui_test_utils::NavigateToURL(browser(), main_frame_url)); + + EXPECT_EQ("[]", InvokeTopicsAPI(web_contents())); +} + } // namespace browsing_topics
diff --git a/chrome/browser/chrome_content_browser_client_browsertest.cc b/chrome/browser/chrome_content_browser_client_browsertest.cc index 21c8c170..6415cdc 100644 --- a/chrome/browser/chrome_content_browser_client_browsertest.cc +++ b/chrome/browser/chrome_content_browser_client_browsertest.cc
@@ -72,26 +72,20 @@ #include "chrome/test/base/launchservices_utils_mac.h" #endif -// TODO(b/283093731): Replace this macro with cloud content analysis equivalent -// buildflag condition. -#if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_LINUX) || \ - BUILDFLAG(IS_CHROMEOS) +#if BUILDFLAG(FULL_SAFE_BROWSING) #include "base/files/scoped_temp_dir.h" #include "base/test/bind.h" #include "base/threading/scoped_blocking_call.h" +#include "chrome/browser/enterprise/connectors/analysis/fake_content_analysis_delegate.h" #include "chrome/browser/enterprise/connectors/connectors_service.h" -#include "chrome/browser/enterprise/connectors/test/deep_scanning_test_utils.h" // nogncheck -#include "chrome/browser/enterprise/connectors/test/fake_content_analysis_delegate.h" // nogncheck +#include "chrome/browser/safe_browsing/cloud_content_scanning/deep_scanning_test_utils.h" #include "ui/base/clipboard/clipboard_format_type.h" -// TODO(b/283093731): Replace this macro with local content analysis equivalent -// buildflag condition. #if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_LINUX) #include "chrome/browser/enterprise/connectors/analysis/fake_content_analysis_sdk_manager.h" // nogncheck #endif -#endif // BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_LINUX) || - // BUILDFLAG(IS_CHROMEOS) +#endif // BUILDFLAG(FULL_SAFE_BROWSING) namespace { @@ -688,8 +682,7 @@ #endif // !BUILDFLAG(IS_ANDROID) -#if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_LINUX) || \ - BUILDFLAG(IS_CHROMEOS) +#if BUILDFLAG(FULL_SAFE_BROWSING) class IsClipboardPasteContentAllowedTest : public InProcessBrowserTest { public: @@ -701,16 +694,16 @@ InProcessBrowserTest::SetUpOnMainThread(); // Make sure enterprise policies are set to turn on content analysis. - enterprise_connectors::test::SetAnalysisConnector( - browser()->profile()->GetPrefs(), - enterprise_connectors::BULK_DATA_ENTRY, kBulkDataEntryPolicyValue); - enterprise_connectors::test::SetAnalysisConnector( - browser()->profile()->GetPrefs(), enterprise_connectors::FILE_ATTACHED, - kFileAttachedPolicyValue); + safe_browsing::SetAnalysisConnector(browser()->profile()->GetPrefs(), + enterprise_connectors::BULK_DATA_ENTRY, + kBulkDataEntryPolicyValue); + safe_browsing::SetAnalysisConnector(browser()->profile()->GetPrefs(), + enterprise_connectors::FILE_ATTACHED, + kFileAttachedPolicyValue); enterprise_connectors::ContentAnalysisDelegate::SetFactoryForTesting( base::BindRepeating( - &enterprise_connectors::test::FakeContentAnalysisDelegate::Create, + &enterprise_connectors::FakeContentAnalysisDelegate::Create, base::DoNothing(), base::BindRepeating([](const std::string& contents, const base::FilePath& path) { @@ -722,11 +715,10 @@ path.BaseName().AsUTF8Unsafe().substr(0, 5) == "allow"; } return success - ? enterprise_connectors::test:: - FakeContentAnalysisDelegate::SuccessfulResponse( - {"dlp"}) - : enterprise_connectors::test:: - FakeContentAnalysisDelegate::DlpResponse( + ? enterprise_connectors::FakeContentAnalysisDelegate:: + SuccessfulResponse({"dlp"}) + : enterprise_connectors::FakeContentAnalysisDelegate:: + DlpResponse( enterprise_connectors:: ContentAnalysisResponse::Result::SUCCESS, "rule-name", @@ -891,7 +883,6 @@ EXPECT_EQ(clipboard_paste_data->file_paths[0], paths[0]); })); } -#endif // BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_LINUX) || - // BUILDFLAG(IS_CHROMEOS) +#endif } // namespace
diff --git a/chrome/browser/download/notification/download_item_notification_unittest.cc b/chrome/browser/download/notification/download_item_notification_unittest.cc index 42331f2f..5e6e7a2c5 100644 --- a/chrome/browser/download/notification/download_item_notification_unittest.cc +++ b/chrome/browser/download/notification/download_item_notification_unittest.cc
@@ -24,13 +24,13 @@ #include "chrome/browser/download/download_commands.h" #include "chrome/browser/download/notification/download_notification_manager.h" #include "chrome/browser/download/offline_item_utils.h" -#include "chrome/browser/enterprise/connectors/test/deep_scanning_test_utils.h" #include "chrome/browser/notifications/notification_display_service.h" #include "chrome/browser/notifications/notification_display_service_factory.h" #include "chrome/browser/notifications/notification_display_service_tester.h" #include "chrome/browser/notifications/notification_handler.h" #include "chrome/browser/notifications/notification_test_util.h" #include "chrome/browser/notifications/platform_notification_service_impl.h" +#include "chrome/browser/safe_browsing/cloud_content_scanning/deep_scanning_test_utils.h" #include "chrome/test/base/testing_browser_process.h" #include "chrome/test/base/testing_profile.h" #include "chrome/test/base/testing_profile_manager.h" @@ -426,9 +426,9 @@ CreateDownloadItemNotification(); // Can't open while scanning. - enterprise_connectors::test::SetAnalysisConnector( - profile_->GetPrefs(), enterprise_connectors::FILE_DOWNLOADED, - R"( + safe_browsing::SetAnalysisConnector(profile_->GetPrefs(), + enterprise_connectors::FILE_DOWNLOADED, + R"( { "service_provider": "google", "enable": [{"url_list": ["*"], "tags": ["malware"]}], @@ -441,9 +441,9 @@ download_item_notification_->Click(absl::nullopt, absl::nullopt); // Can be opened while scanning. - enterprise_connectors::test::SetAnalysisConnector( - profile_->GetPrefs(), enterprise_connectors::FILE_DOWNLOADED, - R"( + safe_browsing::SetAnalysisConnector(profile_->GetPrefs(), + enterprise_connectors::FILE_DOWNLOADED, + R"( { "service_provider": "google", "enable": [{"url_list": ["*"], "tags": ["malware"]}],
diff --git a/chrome/browser/enterprise/connectors/analysis/content_analysis_delegate_browsertest.cc b/chrome/browser/enterprise/connectors/analysis/content_analysis_delegate_browsertest.cc index 94f59af6..484ad64 100644 --- a/chrome/browser/enterprise/connectors/analysis/content_analysis_delegate_browsertest.cc +++ b/chrome/browser/enterprise/connectors/analysis/content_analysis_delegate_browsertest.cc
@@ -20,13 +20,13 @@ #include "chrome/browser/enterprise/connectors/common.h" #include "chrome/browser/enterprise/connectors/connectors_service.h" #include "chrome/browser/enterprise/connectors/reporting/realtime_reporting_client_factory.h" -#include "chrome/browser/enterprise/connectors/test/deep_scanning_browsertest_base.h" -#include "chrome/browser/enterprise/connectors/test/deep_scanning_test_utils.h" #include "chrome/browser/enterprise/identifiers/profile_id_service_factory.h" #include "chrome/browser/extensions/api/safe_browsing_private/safe_browsing_private_event_router.h" #include "chrome/browser/extensions/api/safe_browsing_private/safe_browsing_private_event_router_factory.h" #include "chrome/browser/policy/dm_token_utils.h" #include "chrome/browser/safe_browsing/cloud_content_scanning/cloud_binary_upload_service.h" +#include "chrome/browser/safe_browsing/cloud_content_scanning/deep_scanning_browsertest_base.h" +#include "chrome/browser/safe_browsing/cloud_content_scanning/deep_scanning_test_utils.h" #include "chrome/browser/safe_browsing/cloud_content_scanning/deep_scanning_utils.h" #include "chrome/browser/ui/browser.h" #include "chrome/common/chrome_paths.h" @@ -278,7 +278,7 @@ // Tests the behavior of the dialog delegate with minimal overriding of methods. // Only responses obtained via the BinaryUploadService are faked. class ContentAnalysisDelegateBrowserTestBase - : public test::DeepScanningBrowserTestBase, + : public safe_browsing::DeepScanningBrowserTestBase, public ContentAnalysisDialog::TestObserver { public: explicit ContentAnalysisDelegateBrowserTestBase(bool machine_scope) @@ -293,7 +293,7 @@ if (machine_scope_) { SetDMTokenForTesting(policy::DMToken::CreateValidToken(kBrowserDMToken)); } else { - test::SetProfileDMToken(browser()->profile(), kProfileDMToken); + safe_browsing::SetProfileDMToken(browser()->profile(), kProfileDMToken); } #endif @@ -307,20 +307,20 @@ ], "block_until_verdict": 1 })"; - enterprise_connectors::test::SetAnalysisConnector( + safe_browsing::SetAnalysisConnector( browser()->profile()->GetPrefs(), FILE_ATTACHED, kBlockingScansForDlpAndMalware, machine_scope_); - enterprise_connectors::test::SetAnalysisConnector( + safe_browsing::SetAnalysisConnector( browser()->profile()->GetPrefs(), BULK_DATA_ENTRY, kBlockingScansForDlpAndMalware, machine_scope_); - test::SetOnSecurityEventReporting(browser()->profile()->GetPrefs(), - /*enabled*/ true, - /*enabled_event_names*/ {}, - /*enabled_opt_in_events*/ {}, + safe_browsing::SetOnSecurityEventReporting(browser()->profile()->GetPrefs(), + /*enabled*/ true, + /*enabled_event_names*/ {}, + /*enabled_opt_in_events*/ {}, #if BUILDFLAG(IS_CHROMEOS_ASH) - /*machine_scope*/ false); + /*machine_scope*/ false); #else - machine_scope_); + machine_scope_); #endif client_ = std::make_unique<policy::MockCloudPolicyClient>(); @@ -425,7 +425,7 @@ browser()->profile(), GURL(kTestUrl), &data, FILE_ATTACHED)); // Nothing should be reported for unauthorized users. - test::EventReportValidator validator(client()); + safe_browsing::EventReportValidator validator(client()); validator.ExpectNoReport(); ContentAnalysisDelegate::CreateForWebContents( @@ -477,7 +477,7 @@ browser()->profile(), GURL(kTestUrl), &data, FILE_ATTACHED)); // The malware verdict means an event should be reported. - test::EventReportValidator validator(client()); + safe_browsing::EventReportValidator validator(client()); validator.ExpectDangerousDeepScanningResult( /*url*/ "about:blank", /*source*/ "", @@ -568,7 +568,7 @@ FakeBinaryUploadServiceStorage()->SetAuthorized(true); - test::EventReportValidator validator(client()); + safe_browsing::EventReportValidator validator(client()); // Prepare a complex DLP response to test that the verdict is reported // correctly in the sensitive data event. ContentAnalysisResponse response; @@ -910,7 +910,7 @@ browser()->profile(), GURL(kTestUrl), &data, FILE_ATTACHED)); // The malware verdict means an event should be reported. - test::EventReportValidator validator(client()); + safe_browsing::EventReportValidator validator(client()); validator.ExpectUnscannedFileEvents( /*url*/ "about:blank", /*source*/ "", @@ -1032,7 +1032,7 @@ "block_until_verdict": 1, "block_password_protected": %s })"; - enterprise_connectors::test::SetAnalysisConnector( + safe_browsing::SetAnalysisConnector( browser()->profile()->GetPrefs(), FILE_ATTACHED, base::StringPrintf(kPasswordProtectedPref, bool_setting_value()), machine_scope()); @@ -1055,7 +1055,7 @@ browser()->profile(), GURL(kTestUrl), &data, FILE_ATTACHED)); // The file should be reported as unscanned. - test::EventReportValidator validator(client()); + safe_browsing::EventReportValidator validator(client()); validator.ExpectUnscannedFileEvent( /*url*/ "about:blank", /*source*/ "", @@ -1117,7 +1117,7 @@ "block_until_verdict": 1, "block_large_files": %s })"; - enterprise_connectors::test::SetAnalysisConnector( + safe_browsing::SetAnalysisConnector( browser()->profile()->GetPrefs(), FILE_ATTACHED, base::StringPrintf(kBlockLargeFilesPref, bool_setting_value()), machine_scope()); @@ -1145,7 +1145,7 @@ browser()->profile(), GURL(kTestUrl), &data, FILE_ATTACHED)); // The file should be reported as unscanned. - test::EventReportValidator validator(client()); + safe_browsing::EventReportValidator validator(client()); validator.ExpectUnscannedFileEvent( /*url*/ "about:blank", /*source*/ "", @@ -1209,7 +1209,7 @@ "block_until_verdict": 1, "block_large_files": %s })"; - enterprise_connectors::test::SetAnalysisConnector( + safe_browsing::SetAnalysisConnector( browser()->profile()->GetPrefs(), PRINT, base::StringPrintf(kBlockLargePagesPref, bool_setting_value()), machine_scope()); @@ -1275,7 +1275,7 @@ ], "block_until_verdict": %s })"; - enterprise_connectors::test::SetAnalysisConnector( + safe_browsing::SetAnalysisConnector( browser()->profile()->GetPrefs(), FILE_ATTACHED, base::StringPrintf(kBlockUntilVerdictPref, int_setting_value()), machine_scope()); @@ -1296,7 +1296,7 @@ browser()->profile(), GURL(kTestUrl), &data, FILE_ATTACHED)); // The file should be reported as malware and sensitive content. - test::EventReportValidator validator(client()); + safe_browsing::EventReportValidator validator(client()); ContentAnalysisResponse response; response.set_request_token(kScanId1); @@ -1406,7 +1406,7 @@ if (machine_scope()) { SetDMTokenForTesting(policy::DMToken::CreateValidToken(dm_token())); } else { - test::SetProfileDMToken(browser()->profile(), dm_token()); + safe_browsing::SetProfileDMToken(browser()->profile(), dm_token()); } #endif @@ -1423,7 +1423,7 @@ })", blocking_scan() ? 1 : 0); - enterprise_connectors::test::SetAnalysisConnector( + safe_browsing::SetAnalysisConnector( browser()->profile()->GetPrefs(), file_scan ? FILE_ATTACHED : BULK_DATA_ENTRY, pref, machine_scope()); file_scan_ = file_scan;
diff --git a/chrome/browser/enterprise/connectors/analysis/content_analysis_delegate_unittest.cc b/chrome/browser/enterprise/connectors/analysis/content_analysis_delegate_unittest.cc index d37b347c..20ff092 100644 --- a/chrome/browser/enterprise/connectors/analysis/content_analysis_delegate_unittest.cc +++ b/chrome/browser/enterprise/connectors/analysis/content_analysis_delegate_unittest.cc
@@ -23,12 +23,12 @@ #include "base/test/scoped_feature_list.h" #include "build/build_config.h" #include "chrome/browser/enterprise/connectors/analysis/analysis_settings.h" +#include "chrome/browser/enterprise/connectors/analysis/fake_content_analysis_delegate.h" #include "chrome/browser/enterprise/connectors/common.h" #include "chrome/browser/enterprise/connectors/connectors_service.h" -#include "chrome/browser/enterprise/connectors/test/deep_scanning_test_utils.h" -#include "chrome/browser/enterprise/connectors/test/fake_content_analysis_delegate.h" #include "chrome/browser/policy/dm_token_utils.h" #include "chrome/browser/safe_browsing/cloud_content_scanning/binary_upload_service.h" +#include "chrome/browser/safe_browsing/cloud_content_scanning/deep_scanning_test_utils.h" #include "chrome/browser/safe_browsing/cloud_content_scanning/deep_scanning_utils.h" #include "chrome/common/chrome_paths.h" #include "chrome/test/base/testing_browser_process.h" @@ -218,8 +218,8 @@ } TEST_F(ContentAnalysisDelegateIsEnabledTest, NoDMToken) { - enterprise_connectors::test::SetAnalysisConnector( - profile_->GetPrefs(), FILE_ATTACHED, kBlockingScansForDlpAndMalware); + safe_browsing::SetAnalysisConnector(profile_->GetPrefs(), FILE_ATTACHED, + kBlockingScansForDlpAndMalware); ScopedSetDMToken scoped_dm_token(policy::DMToken::CreateInvalidToken()); ContentAnalysisDelegate::Data data; @@ -241,8 +241,8 @@ TEST_F(ContentAnalysisDelegateIsEnabledTest, DlpNoPref2) { ScopedSetDMToken scoped_dm_token(policy::DMToken::CreateValidToken(kDmToken)); - enterprise_connectors::test::SetAnalysisConnector( - profile_->GetPrefs(), FILE_ATTACHED, kNothingEnabled); + safe_browsing::SetAnalysisConnector(profile_->GetPrefs(), FILE_ATTACHED, + kNothingEnabled); ContentAnalysisDelegate::Data data; EXPECT_FALSE(ContentAnalysisDelegate::IsEnabled(profile(), GURL(), &data, @@ -253,8 +253,8 @@ TEST_F(ContentAnalysisDelegateIsEnabledTest, DlpNoPref3) { ScopedSetDMToken scoped_dm_token(policy::DMToken::CreateValidToken(kDmToken)); - enterprise_connectors::test::SetAnalysisConnector( - profile_->GetPrefs(), FILE_DOWNLOADED, kBlockingScansForDlpAndMalware); + safe_browsing::SetAnalysisConnector(profile_->GetPrefs(), FILE_DOWNLOADED, + kBlockingScansForDlpAndMalware); ContentAnalysisDelegate::Data data; EXPECT_FALSE(ContentAnalysisDelegate::IsEnabled(profile(), GURL(), &data, @@ -265,8 +265,8 @@ TEST_F(ContentAnalysisDelegateIsEnabledTest, DlpEnabled) { ScopedSetDMToken scoped_dm_token(policy::DMToken::CreateValidToken(kDmToken)); - enterprise_connectors::test::SetAnalysisConnector( - profile_->GetPrefs(), FILE_ATTACHED, kBlockingScansForDlp); + safe_browsing::SetAnalysisConnector(profile_->GetPrefs(), FILE_ATTACHED, + kBlockingScansForDlp); ContentAnalysisDelegate::Data data; EXPECT_TRUE(ContentAnalysisDelegate::IsEnabled(profile(), GURL(), &data, @@ -277,10 +277,10 @@ TEST_F(ContentAnalysisDelegateIsEnabledTest, DlpEnabled2) { ScopedSetDMToken scoped_dm_token(policy::DMToken::CreateValidToken(kDmToken)); - enterprise_connectors::test::SetAnalysisConnector( - profile_->GetPrefs(), FILE_ATTACHED, kBlockingScansForDlp); - enterprise_connectors::test::SetAnalysisConnector( - profile_->GetPrefs(), FILE_DOWNLOADED, kBlockingScansForDlp); + safe_browsing::SetAnalysisConnector(profile_->GetPrefs(), FILE_ATTACHED, + kBlockingScansForDlp); + safe_browsing::SetAnalysisConnector(profile_->GetPrefs(), FILE_DOWNLOADED, + kBlockingScansForDlp); ContentAnalysisDelegate::Data data; EXPECT_TRUE(ContentAnalysisDelegate::IsEnabled(profile(), GURL(), &data, @@ -291,10 +291,10 @@ TEST_F(ContentAnalysisDelegateIsEnabledTest, DlpEnabledWithUrl) { ScopedSetDMToken scoped_dm_token(policy::DMToken::CreateValidToken(kDmToken)); - enterprise_connectors::test::SetAnalysisConnector( - profile_->GetPrefs(), FILE_ATTACHED, kBlockingScansForDlp); - enterprise_connectors::test::SetAnalysisConnector( - profile_->GetPrefs(), FILE_DOWNLOADED, kBlockingScansForDlp); + safe_browsing::SetAnalysisConnector(profile_->GetPrefs(), FILE_ATTACHED, + kBlockingScansForDlp); + safe_browsing::SetAnalysisConnector(profile_->GetPrefs(), FILE_DOWNLOADED, + kBlockingScansForDlp); GURL url(kTestUrl); ContentAnalysisDelegate::Data data; @@ -307,9 +307,8 @@ TEST_F(ContentAnalysisDelegateIsEnabledTest, DlpDisabledByList) { ScopedSetDMToken scoped_dm_token(policy::DMToken::CreateValidToken(kDmToken)); - enterprise_connectors::test::SetAnalysisConnector(profile_->GetPrefs(), - FILE_ATTACHED, - R"( + safe_browsing::SetAnalysisConnector(profile_->GetPrefs(), FILE_ATTACHED, + R"( { "service_provider": "google", "enable": [ @@ -336,9 +335,8 @@ TEST_F(ContentAnalysisDelegateIsEnabledTest, DlpDisabledByListWithPatterns) { ScopedSetDMToken scoped_dm_token(policy::DMToken::CreateValidToken(kDmToken)); - enterprise_connectors::test::SetAnalysisConnector(profile_->GetPrefs(), - FILE_ATTACHED, - R"( + safe_browsing::SetAnalysisConnector(profile_->GetPrefs(), FILE_ATTACHED, + R"( { "service_provider": "google", "enable": [ @@ -396,8 +394,8 @@ TEST_F(ContentAnalysisDelegateIsEnabledTest, MalwareNoPref2) { ScopedSetDMToken scoped_dm_token(policy::DMToken::CreateValidToken(kDmToken)); - enterprise_connectors::test::SetAnalysisConnector( - profile_->GetPrefs(), FILE_ATTACHED, kNothingEnabled); + safe_browsing::SetAnalysisConnector(profile_->GetPrefs(), FILE_ATTACHED, + kNothingEnabled); ContentAnalysisDelegate::Data data; EXPECT_FALSE(ContentAnalysisDelegate::IsEnabled(profile(), GURL(), &data, @@ -408,8 +406,8 @@ TEST_F(ContentAnalysisDelegateIsEnabledTest, MalwareNoPref3) { ScopedSetDMToken scoped_dm_token(policy::DMToken::CreateValidToken(kDmToken)); - enterprise_connectors::test::SetAnalysisConnector( - profile_->GetPrefs(), FILE_DOWNLOADED, kBlockingScansForDlpAndMalware); + safe_browsing::SetAnalysisConnector(profile_->GetPrefs(), FILE_DOWNLOADED, + kBlockingScansForDlpAndMalware); ContentAnalysisDelegate::Data data; EXPECT_FALSE(ContentAnalysisDelegate::IsEnabled(profile(), GURL(), &data, @@ -420,9 +418,8 @@ TEST_F(ContentAnalysisDelegateIsEnabledTest, MalwareEnabled) { ScopedSetDMToken scoped_dm_token(policy::DMToken::CreateValidToken(kDmToken)); - enterprise_connectors::test::SetAnalysisConnector(profile_->GetPrefs(), - FILE_ATTACHED, - R"( + safe_browsing::SetAnalysisConnector(profile_->GetPrefs(), FILE_ATTACHED, + R"( { "service_provider": "google", "enable": [ @@ -444,8 +441,8 @@ TEST_F(ContentAnalysisDelegateIsEnabledTest, NoScanInIncognito) { GURL url(kTestUrl); ScopedSetDMToken scoped_dm_token(policy::DMToken::CreateValidToken(kDmToken)); - enterprise_connectors::test::SetAnalysisConnector( - profile_->GetPrefs(), FILE_ATTACHED, kBlockingScansForDlpAndMalware); + safe_browsing::SetAnalysisConnector(profile_->GetPrefs(), FILE_ATTACHED, + kBlockingScansForDlpAndMalware); ContentAnalysisDelegate::Data data; EXPECT_TRUE( @@ -466,9 +463,8 @@ TEST_F(ContentAnalysisDelegateIsEnabledTest, MalwareEnabledWithPatterns) { ScopedSetDMToken scoped_dm_token(policy::DMToken::CreateValidToken(kDmToken)); - enterprise_connectors::test::SetAnalysisConnector(profile_->GetPrefs(), - FILE_ATTACHED, - R"( + safe_browsing::SetAnalysisConnector(profile_->GetPrefs(), FILE_ATTACHED, + R"( { "service_provider": "google", "enable": [ @@ -530,17 +526,17 @@ for (auto connector : {FILE_ATTACHED, BULK_DATA_ENTRY, PRINT}) { if (include_dlp_ && include_malware_) { - enterprise_connectors::test::SetAnalysisConnector( - profile_->GetPrefs(), connector, kBlockingScansForDlpAndMalware); + safe_browsing::SetAnalysisConnector(profile_->GetPrefs(), connector, + kBlockingScansForDlpAndMalware); } else if (include_dlp_) { - enterprise_connectors::test::SetAnalysisConnector( - profile_->GetPrefs(), connector, kBlockingScansForDlp); + safe_browsing::SetAnalysisConnector(profile_->GetPrefs(), connector, + kBlockingScansForDlp); } else if (include_malware_) { - enterprise_connectors::test::SetAnalysisConnector( - profile_->GetPrefs(), connector, kBlockingScansForMalware); + safe_browsing::SetAnalysisConnector(profile_->GetPrefs(), connector, + kBlockingScansForMalware); } else { - enterprise_connectors::test::SetAnalysisConnector( - profile_->GetPrefs(), connector, kNothingEnabled); + safe_browsing::SetAnalysisConnector(profile_->GetPrefs(), connector, + kNothingEnabled); } } } @@ -548,21 +544,20 @@ void SetUp() override { BaseTest::SetUp(); - enterprise_connectors::test::SetAnalysisConnector( - profile_->GetPrefs(), FILE_ATTACHED, kBlockingScansForDlpAndMalware); - enterprise_connectors::test::SetAnalysisConnector( - profile_->GetPrefs(), BULK_DATA_ENTRY, kBlockingScansForDlpAndMalware); - enterprise_connectors::test::SetAnalysisConnector( - profile_->GetPrefs(), PRINT, kBlockingScansForDlpAndMalware); + safe_browsing::SetAnalysisConnector(profile_->GetPrefs(), FILE_ATTACHED, + kBlockingScansForDlpAndMalware); + safe_browsing::SetAnalysisConnector(profile_->GetPrefs(), BULK_DATA_ENTRY, + kBlockingScansForDlpAndMalware); + safe_browsing::SetAnalysisConnector(profile_->GetPrefs(), PRINT, + kBlockingScansForDlpAndMalware); ContentAnalysisDelegate::SetFactoryForTesting(base::BindRepeating( - &test::FakeContentAnalysisDelegate::Create, run_loop_.QuitClosure(), + &FakeContentAnalysisDelegate::Create, run_loop_.QuitClosure(), base::BindRepeating( &ContentAnalysisDelegateAuditOnlyTest::ConnectorStatusCallback, base::Unretained(this)), kDmToken)); - test::FakeContentAnalysisDelegate:: - ResetStaticDialogFlagsAndTotalRequestsCount(); + FakeContentAnalysisDelegate::ResetStaticDialogFlagsAndTotalRequestsCount(); } ContentAnalysisResponse ConnectorStatusCallback(const std::string& contents, @@ -572,7 +567,7 @@ ContentAnalysisResponse response = it != failures_.end() ? it->second - : test::FakeContentAnalysisDelegate::SuccessfulResponse([this]() { + : FakeContentAnalysisDelegate::SuccessfulResponse([this]() { std::set<std::string> tags; if (include_dlp_ && !dlp_response_.has_value()) tags.insert("dlp"); @@ -623,8 +618,7 @@ }, &called)); RunUntilDone(); - EXPECT_EQ(0, - test::FakeContentAnalysisDelegate::GetTotalAnalysisRequestsCount()); + EXPECT_EQ(0, FakeContentAnalysisDelegate::GetTotalAnalysisRequestsCount()); EXPECT_TRUE(called); } @@ -650,8 +644,7 @@ }, &called)); RunUntilDone(); - EXPECT_EQ(1, - test::FakeContentAnalysisDelegate::GetTotalAnalysisRequestsCount()); + EXPECT_EQ(1, FakeContentAnalysisDelegate::GetTotalAnalysisRequestsCount()); EXPECT_TRUE(called); } @@ -679,8 +672,7 @@ }, &called)); RunUntilDone(); - EXPECT_EQ(1, - test::FakeContentAnalysisDelegate::GetTotalAnalysisRequestsCount()); + EXPECT_EQ(1, FakeContentAnalysisDelegate::GetTotalAnalysisRequestsCount()); EXPECT_TRUE(called); } @@ -695,7 +687,7 @@ data.text.emplace_back(small_text()); data.text.emplace_back(small_text()); - SetDLPResponse(test::FakeContentAnalysisDelegate::DlpResponse( + SetDLPResponse(FakeContentAnalysisDelegate::DlpResponse( ContentAnalysisResponse::Result::SUCCESS, "rule", TriggeredRule::BLOCK)); bool called = false; @@ -714,8 +706,7 @@ &called)); RunUntilDone(); // Text too small, no analysis request is created. - EXPECT_EQ(0, - test::FakeContentAnalysisDelegate::GetTotalAnalysisRequestsCount()); + EXPECT_EQ(0, FakeContentAnalysisDelegate::GetTotalAnalysisRequestsCount()); EXPECT_TRUE(called); } @@ -746,8 +737,7 @@ &called), safe_browsing::DeepScanAccessPoint::PRINT); RunUntilDone(); - EXPECT_EQ(1, - test::FakeContentAnalysisDelegate::GetTotalAnalysisRequestsCount()); + EXPECT_EQ(1, FakeContentAnalysisDelegate::GetTotalAnalysisRequestsCount()); EXPECT_TRUE(called); } @@ -758,7 +748,7 @@ data.page = normal_page(); ASSERT_TRUE(data.page.IsValid()); - SetDLPResponse(test::FakeContentAnalysisDelegate::DlpResponse( + SetDLPResponse(FakeContentAnalysisDelegate::DlpResponse( ContentAnalysisResponse::Result::SUCCESS, "rule", TriggeredRule::BLOCK)); bool called = false; @@ -780,8 +770,7 @@ &called), safe_browsing::DeepScanAccessPoint::PRINT); RunUntilDone(); - EXPECT_EQ(1, - test::FakeContentAnalysisDelegate::GetTotalAnalysisRequestsCount()); + EXPECT_EQ(1, FakeContentAnalysisDelegate::GetTotalAnalysisRequestsCount()); EXPECT_TRUE(called); } @@ -808,8 +797,7 @@ }, &called)); RunUntilDone(); - EXPECT_EQ(1, - test::FakeContentAnalysisDelegate::GetTotalAnalysisRequestsCount()); + EXPECT_EQ(1, FakeContentAnalysisDelegate::GetTotalAnalysisRequestsCount()); EXPECT_TRUE(called); } @@ -838,8 +826,7 @@ }, &called)); RunUntilDone(); - EXPECT_EQ(2, - test::FakeContentAnalysisDelegate::GetTotalAnalysisRequestsCount()); + EXPECT_EQ(2, FakeContentAnalysisDelegate::GetTotalAnalysisRequestsCount()); EXPECT_TRUE(called); } @@ -868,16 +855,14 @@ }, &called)); RunUntilDone(); - EXPECT_EQ(2, - test::FakeContentAnalysisDelegate::GetTotalAnalysisRequestsCount()); + EXPECT_EQ(2, FakeContentAnalysisDelegate::GetTotalAnalysisRequestsCount()); EXPECT_TRUE(called); } TEST_F(ContentAnalysisDelegateAuditOnlyTest, FileIsEncrypted) { content::InProcessUtilityThreadHelper in_process_utility_thread_helper; - enterprise_connectors::test::SetAnalysisConnector(profile_->GetPrefs(), - FILE_ATTACHED, R"( + safe_browsing::SetAnalysisConnector(profile_->GetPrefs(), FILE_ATTACHED, R"( { "service_provider": "google", "enable": [ @@ -916,16 +901,14 @@ &called)); RunUntilDone(); // "FILE_ATTACHED" is exempt from scanning. - EXPECT_EQ(0, - test::FakeContentAnalysisDelegate::GetTotalAnalysisRequestsCount()); + EXPECT_EQ(0, FakeContentAnalysisDelegate::GetTotalAnalysisRequestsCount()); EXPECT_TRUE(called); } TEST_F(ContentAnalysisDelegateAuditOnlyTest, FileIsEncrypted_PolicyAllows) { content::InProcessUtilityThreadHelper in_process_utility_thread_helper; - enterprise_connectors::test::SetAnalysisConnector(profile_->GetPrefs(), - FILE_ATTACHED, R"( + safe_browsing::SetAnalysisConnector(profile_->GetPrefs(), FILE_ATTACHED, R"( { "service_provider": "google", "enable": [ @@ -964,8 +947,7 @@ &called)); RunUntilDone(); // "FILE_ATTACHED" is exempt from scanning. - EXPECT_EQ(0, - test::FakeContentAnalysisDelegate::GetTotalAnalysisRequestsCount()); + EXPECT_EQ(0, FakeContentAnalysisDelegate::GetTotalAnalysisRequestsCount()); EXPECT_TRUE(called); } @@ -978,9 +960,8 @@ CreateFilesForTest( {FILE_PATH_LITERAL("good.doc"), FILE_PATH_LITERAL("bad.doc")}, &data); - PathFailsDeepScan( - data.paths[1], - test::FakeContentAnalysisDelegate::MalwareResponse(TriggeredRule::BLOCK)); + PathFailsDeepScan(data.paths[1], FakeContentAnalysisDelegate::MalwareResponse( + TriggeredRule::BLOCK)); bool called = false; ScanUpload(contents(), std::move(data), @@ -997,8 +978,7 @@ }, &called)); RunUntilDone(); - EXPECT_EQ(2, - test::FakeContentAnalysisDelegate::GetTotalAnalysisRequestsCount()); + EXPECT_EQ(2, FakeContentAnalysisDelegate::GetTotalAnalysisRequestsCount()); EXPECT_TRUE(called); } @@ -1027,8 +1007,7 @@ }, &called)); RunUntilDone(); - EXPECT_EQ(2, - test::FakeContentAnalysisDelegate::GetTotalAnalysisRequestsCount()); + EXPECT_EQ(2, FakeContentAnalysisDelegate::GetTotalAnalysisRequestsCount()); EXPECT_TRUE(called); } @@ -1042,10 +1021,9 @@ CreateFilesForTest( {FILE_PATH_LITERAL("good.doc"), FILE_PATH_LITERAL("bad.doc")}, &data); - PathFailsDeepScan(data.paths[1], - test::FakeContentAnalysisDelegate::DlpResponse( - ContentAnalysisResponse::Result::SUCCESS, "rule", - TriggeredRule::BLOCK)); + PathFailsDeepScan(data.paths[1], FakeContentAnalysisDelegate::DlpResponse( + ContentAnalysisResponse::Result::SUCCESS, + "rule", TriggeredRule::BLOCK)); bool called = false; ScanUpload(contents(), std::move(data), @@ -1062,8 +1040,7 @@ }, &called)); RunUntilDone(); - EXPECT_EQ(2, - test::FakeContentAnalysisDelegate::GetTotalAnalysisRequestsCount()); + EXPECT_EQ(2, FakeContentAnalysisDelegate::GetTotalAnalysisRequestsCount()); EXPECT_TRUE(called); } @@ -1080,7 +1057,7 @@ PathFailsDeepScan( data.paths[1], - test::FakeContentAnalysisDelegate::MalwareAndDlpResponse( + FakeContentAnalysisDelegate::MalwareAndDlpResponse( TriggeredRule::BLOCK, ContentAnalysisResponse::Result::SUCCESS, "rule", TriggeredRule::BLOCK)); @@ -1099,8 +1076,7 @@ }, &called)); RunUntilDone(); - EXPECT_EQ(2, - test::FakeContentAnalysisDelegate::GetTotalAnalysisRequestsCount()); + EXPECT_EQ(2, FakeContentAnalysisDelegate::GetTotalAnalysisRequestsCount()); EXPECT_TRUE(called); } @@ -1130,8 +1106,7 @@ }, &called)); RunUntilDone(); - EXPECT_EQ(3, - test::FakeContentAnalysisDelegate::GetTotalAnalysisRequestsCount()); + EXPECT_EQ(3, FakeContentAnalysisDelegate::GetTotalAnalysisRequestsCount()); EXPECT_TRUE(called); } @@ -1165,8 +1140,7 @@ }, &called)); RunUntilDone(); - EXPECT_EQ(3, - test::FakeContentAnalysisDelegate::GetTotalAnalysisRequestsCount()); + EXPECT_EQ(3, FakeContentAnalysisDelegate::GetTotalAnalysisRequestsCount()); EXPECT_TRUE(called); } @@ -1190,8 +1164,7 @@ }, &called)); RunUntilDone(); - EXPECT_EQ(1, - test::FakeContentAnalysisDelegate::GetTotalAnalysisRequestsCount()); + EXPECT_EQ(1, FakeContentAnalysisDelegate::GetTotalAnalysisRequestsCount()); EXPECT_TRUE(called); } @@ -1215,8 +1188,7 @@ }, &called)); RunUntilDone(); - EXPECT_EQ(2, - test::FakeContentAnalysisDelegate::GetTotalAnalysisRequestsCount()); + EXPECT_EQ(2, FakeContentAnalysisDelegate::GetTotalAnalysisRequestsCount()); EXPECT_TRUE(called); } @@ -1230,7 +1202,7 @@ data.text.emplace_back(large_text()); data.text.emplace_back(large_text()); - SetDLPResponse(test::FakeContentAnalysisDelegate::DlpResponse( + SetDLPResponse(FakeContentAnalysisDelegate::DlpResponse( ContentAnalysisResponse::Result::SUCCESS, "rule", TriggeredRule::BLOCK)); bool called = false; @@ -1248,8 +1220,7 @@ }, &called)); RunUntilDone(); - EXPECT_EQ(1, - test::FakeContentAnalysisDelegate::GetTotalAnalysisRequestsCount()); + EXPECT_EQ(1, FakeContentAnalysisDelegate::GetTotalAnalysisRequestsCount()); EXPECT_TRUE(called); } @@ -1268,20 +1239,16 @@ &data); // Mark some files with failed scans. - PathFailsDeepScan( - data.paths[1], - test::FakeContentAnalysisDelegate::MalwareResponse(TriggeredRule::WARN)); - PathFailsDeepScan( - data.paths[2], - test::FakeContentAnalysisDelegate::MalwareResponse(TriggeredRule::BLOCK)); - PathFailsDeepScan(data.paths[3], - test::FakeContentAnalysisDelegate::DlpResponse( - ContentAnalysisResponse::Result::FAILURE, "", - TriggeredRule::REPORT_ONLY)); - PathFailsDeepScan(data.paths[4], - test::FakeContentAnalysisDelegate::DlpResponse( - ContentAnalysisResponse::Result::SUCCESS, "rule", - TriggeredRule::BLOCK)); + PathFailsDeepScan(data.paths[1], FakeContentAnalysisDelegate::MalwareResponse( + TriggeredRule::WARN)); + PathFailsDeepScan(data.paths[2], FakeContentAnalysisDelegate::MalwareResponse( + TriggeredRule::BLOCK)); + PathFailsDeepScan(data.paths[3], FakeContentAnalysisDelegate::DlpResponse( + ContentAnalysisResponse::Result::FAILURE, + "", TriggeredRule::REPORT_ONLY)); + PathFailsDeepScan(data.paths[4], FakeContentAnalysisDelegate::DlpResponse( + ContentAnalysisResponse::Result::SUCCESS, + "rule", TriggeredRule::BLOCK)); bool called = false; ScanUpload(contents(), std::move(data), @@ -1302,14 +1269,12 @@ }, &called)); RunUntilDone(); - EXPECT_EQ(6, - test::FakeContentAnalysisDelegate::GetTotalAnalysisRequestsCount()); + EXPECT_EQ(6, FakeContentAnalysisDelegate::GetTotalAnalysisRequestsCount()); EXPECT_TRUE(called); } TEST_F(ContentAnalysisDelegateAuditOnlyTest, NoDelay) { - enterprise_connectors::test::SetAnalysisConnector(profile_->GetPrefs(), - FILE_ATTACHED, R"( + safe_browsing::SetAnalysisConnector(profile_->GetPrefs(), FILE_ATTACHED, R"( { "service_provider": "google", "enable": [ @@ -1334,25 +1299,20 @@ &data); // Mark all files and text with failed scans. - SetDLPResponse(test::FakeContentAnalysisDelegate::DlpResponse( + SetDLPResponse(FakeContentAnalysisDelegate::DlpResponse( ContentAnalysisResponse::Result::SUCCESS, "rule", TriggeredRule::BLOCK)); - PathFailsDeepScan( - data.paths[0], - test::FakeContentAnalysisDelegate::MalwareResponse(TriggeredRule::BLOCK)); - PathFailsDeepScan( - data.paths[1], - test::FakeContentAnalysisDelegate::MalwareResponse(TriggeredRule::WARN)); - PathFailsDeepScan( - data.paths[2], - test::FakeContentAnalysisDelegate::MalwareResponse(TriggeredRule::BLOCK)); - PathFailsDeepScan(data.paths[3], - test::FakeContentAnalysisDelegate::DlpResponse( - ContentAnalysisResponse::Result::FAILURE, "", - TriggeredRule::REPORT_ONLY)); - PathFailsDeepScan(data.paths[4], - test::FakeContentAnalysisDelegate::DlpResponse( - ContentAnalysisResponse::Result::SUCCESS, "rule", - TriggeredRule::BLOCK)); + PathFailsDeepScan(data.paths[0], FakeContentAnalysisDelegate::MalwareResponse( + TriggeredRule::BLOCK)); + PathFailsDeepScan(data.paths[1], FakeContentAnalysisDelegate::MalwareResponse( + TriggeredRule::WARN)); + PathFailsDeepScan(data.paths[2], FakeContentAnalysisDelegate::MalwareResponse( + TriggeredRule::BLOCK)); + PathFailsDeepScan(data.paths[3], FakeContentAnalysisDelegate::DlpResponse( + ContentAnalysisResponse::Result::FAILURE, + "", TriggeredRule::REPORT_ONLY)); + PathFailsDeepScan(data.paths[4], FakeContentAnalysisDelegate::DlpResponse( + ContentAnalysisResponse::Result::SUCCESS, + "rule", TriggeredRule::BLOCK)); bool called = false; ScanUpload(contents(), std::move(data), @@ -1377,8 +1337,7 @@ &called)); RunUntilDone(); // Text too small, only file analysis requests are created. - EXPECT_EQ(5, - test::FakeContentAnalysisDelegate::GetTotalAnalysisRequestsCount()); + EXPECT_EQ(5, FakeContentAnalysisDelegate::GetTotalAnalysisRequestsCount()); EXPECT_TRUE(called); } @@ -1401,8 +1360,7 @@ }, &called)); RunUntilDone(); - EXPECT_EQ(0, - test::FakeContentAnalysisDelegate::GetTotalAnalysisRequestsCount()); + EXPECT_EQ(0, FakeContentAnalysisDelegate::GetTotalAnalysisRequestsCount()); EXPECT_TRUE(called); } @@ -1418,19 +1376,18 @@ void SetUp() override { BaseTest::SetUp(); - enterprise_connectors::test::SetAnalysisConnector( + safe_browsing::SetAnalysisConnector( profile_->GetPrefs(), FILE_ATTACHED, is_cloud() ? kBlockingScansForDlpAndMalware : kLocalBlockingScansForDlpAndMalware); ContentAnalysisDelegate::SetFactoryForTesting(base::BindRepeating( - &test::FakeContentAnalysisDelegate::Create, run_loop_.QuitClosure(), + &FakeContentAnalysisDelegate::Create, run_loop_.QuitClosure(), base::BindRepeating( &ContentAnalysisDelegateResultHandlingTest::ConnectorStatusCallback, base::Unretained(this)), kDmToken)); - test::FakeContentAnalysisDelegate:: - ResetStaticDialogFlagsAndTotalRequestsCount(); + FakeContentAnalysisDelegate::ResetStaticDialogFlagsAndTotalRequestsCount(); } safe_browsing::BinaryUploadService::Result result() const { @@ -1441,8 +1398,7 @@ ContentAnalysisResponse ConnectorStatusCallback(const std::string& contents, const base::FilePath& path) { - return test::FakeContentAnalysisDelegate::SuccessfulResponse( - {"dlp", "malware"}); + return FakeContentAnalysisDelegate::SuccessfulResponse({"dlp", "malware"}); } protected: @@ -1466,7 +1422,7 @@ GURL url(kTestUrl); ContentAnalysisDelegate::Data data; - test::FakeContentAnalysisDelegate::SetResponseResult(result()); + FakeContentAnalysisDelegate::SetResponseResult(result()); ASSERT_TRUE( ContentAnalysisDelegate::IsEnabled(profile(), url, &data, FILE_ATTACHED)); @@ -1490,8 +1446,8 @@ RunUntilDone(); EXPECT_TRUE(called); - EXPECT_EQ(is_cloud(), test::FakeContentAnalysisDelegate::WasDialogShown()); - EXPECT_NE(is_cloud(), test::FakeContentAnalysisDelegate::WasDialogCanceled()); + EXPECT_EQ(is_cloud(), FakeContentAnalysisDelegate::WasDialogShown()); + EXPECT_NE(is_cloud(), FakeContentAnalysisDelegate::WasDialogCanceled()); } INSTANTIATE_TEST_SUITE_P(
diff --git a/chrome/browser/enterprise/connectors/analysis/content_analysis_dialog_browsertest.cc b/chrome/browser/enterprise/connectors/analysis/content_analysis_dialog_browsertest.cc index 15b66319..8e31e6d 100644 --- a/chrome/browser/enterprise/connectors/analysis/content_analysis_dialog_browsertest.cc +++ b/chrome/browser/enterprise/connectors/analysis/content_analysis_dialog_browsertest.cc
@@ -13,9 +13,9 @@ #include "chrome/browser/browser_process.h" #include "chrome/browser/enterprise/connectors/analysis/content_analysis_dialog.h" #include "chrome/browser/enterprise/connectors/analysis/content_analysis_downloads_delegate.h" -#include "chrome/browser/enterprise/connectors/test/deep_scanning_browsertest_base.h" -#include "chrome/browser/enterprise/connectors/test/deep_scanning_test_utils.h" -#include "chrome/browser/enterprise/connectors/test/fake_content_analysis_delegate.h" +#include "chrome/browser/enterprise/connectors/analysis/fake_content_analysis_delegate.h" +#include "chrome/browser/safe_browsing/cloud_content_scanning/deep_scanning_browsertest_base.h" +#include "chrome/browser/safe_browsing/cloud_content_scanning/deep_scanning_test_utils.h" #include "chrome/browser/safe_browsing/cloud_content_scanning/deep_scanning_utils.h" #include "chrome/browser/ui/browser.h" #include "chrome/browser/ui/test/test_browser_dialog.h" @@ -95,7 +95,7 @@ // observer. // - It sends accessibility events correctly. class ContentAnalysisDialogBehaviorBrowserTest - : public test::DeepScanningBrowserTestBase, + : public safe_browsing::DeepScanningBrowserTestBase, public ContentAnalysisDialog::TestObserver, public testing::WithParamInterface< std::tuple<bool, bool, base::TimeDelta>> { @@ -277,7 +277,7 @@ // - It returns a negative verdict on the scanned content. // - The "CancelledByUser" metrics are recorded. class ContentAnalysisDialogCancelPendingScanBrowserTest - : public test::DeepScanningBrowserTestBase, + : public safe_browsing::DeepScanningBrowserTestBase, public ContentAnalysisDialog::TestObserver { public: ContentAnalysisDialogCancelPendingScanBrowserTest() { @@ -319,7 +319,7 @@ // - It calls the appropriate methods when the user bypasses/respects the // warning. class ContentAnalysisDialogWarningBrowserTest - : public test::DeepScanningBrowserTestBase, + : public safe_browsing::DeepScanningBrowserTestBase, public ContentAnalysisDialog::TestObserver, public testing::WithParamInterface<bool> { public: @@ -365,7 +365,7 @@ // type. // - It shows the appropriate spinner depending on its state. class ContentAnalysisDialogAppearanceBrowserTest - : public test::DeepScanningBrowserTestBase, + : public safe_browsing::DeepScanningBrowserTestBase, public ContentAnalysisDialog::TestObserver, public testing::WithParamInterface< std::tuple<bool, bool, safe_browsing::DeepScanAccessPoint>> { @@ -495,15 +495,15 @@ // Setup policies to enable deep scanning, its UI and the responses to be // simulated. - enterprise_connectors::test::SetAnalysisConnector( - browser()->profile()->GetPrefs(), FILE_ATTACHED, - kBlockingScansForDlpAndMalware); + safe_browsing::SetAnalysisConnector(browser()->profile()->GetPrefs(), + FILE_ATTACHED, + kBlockingScansForDlpAndMalware); SetStatusCallbackResponse( safe_browsing::SimpleContentAnalysisResponseForTesting( dlp_success(), malware_success())); // Set up delegate test values. - test::FakeContentAnalysisDelegate::SetResponseDelay(response_delay()); + FakeContentAnalysisDelegate::SetResponseDelay(response_delay()); SetUpDelegate(); bool called = false; @@ -558,15 +558,15 @@ // Setup policies to enable deep scanning, its UI and the responses to be // simulated. - enterprise_connectors::test::SetAnalysisConnector( - browser()->profile()->GetPrefs(), FILE_ATTACHED, kBlockingScansForDlp); + safe_browsing::SetAnalysisConnector(browser()->profile()->GetPrefs(), + FILE_ATTACHED, kBlockingScansForDlp); SetStatusCallbackResponse( safe_browsing::SimpleContentAnalysisResponseForTesting( /*dlp=*/true, /*malware=*/absl::nullopt)); // Set up delegate test values. An unresponsive delegate is set up to avoid // a race between the file responses and the "Cancel" button being clicked. - test::FakeContentAnalysisDelegate::SetResponseDelay(kSmallDelay); + FakeContentAnalysisDelegate::SetResponseDelay(kSmallDelay); SetUpUnresponsiveDelegate(); bool called = false; @@ -601,8 +601,8 @@ base::ScopedAllowBlockingForTesting allow_blocking; // Setup policies. - enterprise_connectors::test::SetAnalysisConnector( - browser()->profile()->GetPrefs(), FILE_ATTACHED, kBlockingScansForDlp); + safe_browsing::SetAnalysisConnector(browser()->profile()->GetPrefs(), + FILE_ATTACHED, kBlockingScansForDlp); // Setup the DLP warning response. enterprise_connectors::ContentAnalysisResponse response; @@ -659,16 +659,16 @@ // Setup policies to enable deep scanning, its UI and the responses to be // simulated. - enterprise_connectors::test::SetAnalysisConnector( - browser()->profile()->GetPrefs(), FILE_ATTACHED, - kBlockingScansForDlpAndMalware); + safe_browsing::SetAnalysisConnector(browser()->profile()->GetPrefs(), + FILE_ATTACHED, + kBlockingScansForDlpAndMalware); SetStatusCallbackResponse( safe_browsing::SimpleContentAnalysisResponseForTesting(success(), success())); // Set up delegate test values. - test::FakeContentAnalysisDelegate::SetResponseDelay(kSmallDelay); + FakeContentAnalysisDelegate::SetResponseDelay(kSmallDelay); SetUpDelegate(); bool called = false; @@ -719,7 +719,7 @@ // Setup policies to enable deep scanning, its UI and the responses to be // simulated. - enterprise_connectors::test::SetAnalysisConnector( + safe_browsing::SetAnalysisConnector( browser()->profile()->GetPrefs(), FILE_ATTACHED, kBlockingScansForDlpAndMalwareWithCustomMessage); @@ -728,7 +728,7 @@ success())); // Set up delegate test values. - test::FakeContentAnalysisDelegate::SetResponseDelay(kSmallDelay); + FakeContentAnalysisDelegate::SetResponseDelay(kSmallDelay); SetUpDelegate(); bool called = false; @@ -1143,7 +1143,7 @@ /*bypass_justification_enabled*/ testing::Bool())); class ContentAnalysysDialogDownloadObserverTest - : public test::DeepScanningBrowserTestBase, + : public safe_browsing::DeepScanningBrowserTestBase, public ContentAnalysisDialog::TestObserver { public: ContentAnalysysDialogDownloadObserverTest() {
diff --git a/chrome/browser/enterprise/connectors/test/fake_content_analysis_delegate.cc b/chrome/browser/enterprise/connectors/analysis/fake_content_analysis_delegate.cc similarity index 84% rename from chrome/browser/enterprise/connectors/test/fake_content_analysis_delegate.cc rename to chrome/browser/enterprise/connectors/analysis/fake_content_analysis_delegate.cc index 55a5ca6..d1d6e16a 100644 --- a/chrome/browser/enterprise/connectors/test/fake_content_analysis_delegate.cc +++ b/chrome/browser/enterprise/connectors/analysis/fake_content_analysis_delegate.cc
@@ -2,17 +2,21 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "chrome/browser/enterprise/connectors/test/fake_content_analysis_delegate.h" +#include "chrome/browser/enterprise/connectors/analysis/fake_content_analysis_delegate.h" +#include "base/functional/bind.h" +#include "base/functional/callback.h" +#include "base/functional/callback_forward.h" +#include "base/logging.h" #include "base/task/single_thread_task_runner.h" #include "base/test/bind.h" #include "base/time/time.h" -#include "chrome/browser/enterprise/connectors/test/fake_files_request_handler.h" +#include "chrome/browser/enterprise/connectors/analysis/fake_files_request_handler.h" #include "chrome/browser/safe_browsing/cloud_content_scanning/binary_upload_service.h" #include "components/enterprise/common/proto/connectors.pb.h" #include "third_party/abseil-cpp/absl/types/optional.h" -namespace enterprise_connectors::test { +namespace enterprise_connectors { namespace { @@ -43,9 +47,8 @@ dm_token_(std::move(dm_token)) {} FakeContentAnalysisDelegate::~FakeContentAnalysisDelegate() { - if (!delete_closure_.is_null()) { + if (!delete_closure_.is_null()) delete_closure_.Run(); - } } // static @@ -101,26 +104,29 @@ } // static -ContentAnalysisResponse FakeContentAnalysisDelegate::SuccessfulResponse( +enterprise_connectors::ContentAnalysisResponse +FakeContentAnalysisDelegate::SuccessfulResponse( const std::set<std::string>& tags) { - ContentAnalysisResponse response; + enterprise_connectors::ContentAnalysisResponse response; auto* result = response.mutable_results()->Add(); - result->set_status(ContentAnalysisResponse::Result::SUCCESS); - for (const std::string& tag : tags) { + result->set_status( + enterprise_connectors::ContentAnalysisResponse::Result::SUCCESS); + for (const std::string& tag : tags) result->set_tag(tag); - } return response; } // static -ContentAnalysisResponse FakeContentAnalysisDelegate::MalwareResponse( - TriggeredRule::Action action) { - ContentAnalysisResponse response; +enterprise_connectors::ContentAnalysisResponse +FakeContentAnalysisDelegate::MalwareResponse( + enterprise_connectors::TriggeredRule::Action action) { + enterprise_connectors::ContentAnalysisResponse response; auto* result = response.mutable_results()->Add(); - result->set_status(ContentAnalysisResponse::Result::SUCCESS); + result->set_status( + enterprise_connectors::ContentAnalysisResponse::Result::SUCCESS); result->set_tag("malware"); auto* rule = result->add_triggered_rules(); @@ -130,11 +136,12 @@ } // static -ContentAnalysisResponse FakeContentAnalysisDelegate::DlpResponse( - ContentAnalysisResponse::Result::Status status, +enterprise_connectors::ContentAnalysisResponse +FakeContentAnalysisDelegate::DlpResponse( + enterprise_connectors::ContentAnalysisResponse::Result::Status status, const std::string& rule_name, - TriggeredRule::Action action) { - ContentAnalysisResponse response; + enterprise_connectors::TriggeredRule::Action action) { + enterprise_connectors::ContentAnalysisResponse response; auto* result = response.mutable_results()->Add(); result->set_status(status); @@ -148,15 +155,17 @@ } // static -ContentAnalysisResponse FakeContentAnalysisDelegate::MalwareAndDlpResponse( - TriggeredRule::Action malware_action, - ContentAnalysisResponse::Result::Status dlp_status, +enterprise_connectors::ContentAnalysisResponse +FakeContentAnalysisDelegate::MalwareAndDlpResponse( + enterprise_connectors::TriggeredRule::Action malware_action, + enterprise_connectors::ContentAnalysisResponse::Result::Status dlp_status, const std::string& dlp_rule_name, - TriggeredRule::Action dlp_action) { - ContentAnalysisResponse response; + enterprise_connectors::TriggeredRule::Action dlp_action) { + enterprise_connectors::ContentAnalysisResponse response; auto* malware_result = response.add_results(); - malware_result->set_status(ContentAnalysisResponse::Result::SUCCESS); + malware_result->set_status( + enterprise_connectors::ContentAnalysisResponse::Result::SUCCESS); malware_result->set_tag("malware"); auto* malware_rule = malware_result->add_triggered_rules(); malware_rule->set_action(malware_action); @@ -181,7 +190,7 @@ auto response = (status_callback_.is_null() || result_ != safe_browsing::BinaryUploadService::Result::SUCCESS) - ? ContentAnalysisResponse() + ? enterprise_connectors::ContentAnalysisResponse() : status_callback_.Run(contents, path); if (request->IsAuthRequest()) { StringRequestCallback(result_, response); @@ -324,4 +333,4 @@ return nullptr; } -} // namespace enterprise_connectors::test +} // namespace enterprise_connectors
diff --git a/chrome/browser/enterprise/connectors/test/fake_content_analysis_delegate.h b/chrome/browser/enterprise/connectors/analysis/fake_content_analysis_delegate.h similarity index 78% rename from chrome/browser/enterprise/connectors/test/fake_content_analysis_delegate.h rename to chrome/browser/enterprise/connectors/analysis/fake_content_analysis_delegate.h index bbda8914..65309c15 100644 --- a/chrome/browser/enterprise/connectors/test/fake_content_analysis_delegate.h +++ b/chrome/browser/enterprise/connectors/analysis/fake_content_analysis_delegate.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_ENTERPRISE_CONNECTORS_TEST_FAKE_CONTENT_ANALYSIS_DELEGATE_H_ -#define CHROME_BROWSER_ENTERPRISE_CONNECTORS_TEST_FAKE_CONTENT_ANALYSIS_DELEGATE_H_ +#ifndef CHROME_BROWSER_ENTERPRISE_CONNECTORS_ANALYSIS_FAKE_CONTENT_ANALYSIS_DELEGATE_H_ +#define CHROME_BROWSER_ENTERPRISE_CONNECTORS_ANALYSIS_FAKE_CONTENT_ANALYSIS_DELEGATE_H_ #include <memory> @@ -11,7 +11,7 @@ #include "base/functional/callback_forward.h" #include "base/memory/weak_ptr.h" #include "chrome/browser/enterprise/connectors/analysis/content_analysis_delegate.h" -#include "chrome/browser/enterprise/connectors/test/fake_files_request_handler.h" +#include "chrome/browser/enterprise/connectors/analysis/fake_files_request_handler.h" #include "chrome/browser/safe_browsing/cloud_content_scanning/binary_upload_service.h" #include "components/enterprise/common/proto/connectors.pb.h" @@ -19,7 +19,7 @@ class WebContents; } -namespace enterprise_connectors::test { +namespace enterprise_connectors { // A derivative of ContentAnalysisDelegate that overrides calls to the // real binary upload service and re-implements them locally. @@ -33,9 +33,10 @@ // // For text requests, contents is not empty and path is empty. // For print requests, both contents and path are empty. - using StatusCallback = base::RepeatingCallback<ContentAnalysisResponse( - const std::string& contents, - const base::FilePath&)>; + using StatusCallback = + base::RepeatingCallback<enterprise_connectors::ContentAnalysisResponse( + const std::string& contents, + const base::FilePath&)>; FakeContentAnalysisDelegate(base::RepeatingClosure delete_closure, StatusCallback status_callback, @@ -62,24 +63,25 @@ // Returns a content analysis response that represents a successful scan and // includes the given tags. - static ContentAnalysisResponse SuccessfulResponse( + static enterprise_connectors::ContentAnalysisResponse SuccessfulResponse( const std::set<std::string>& tags); // Returns a content analysis response with a specific malware action. - static ContentAnalysisResponse MalwareResponse(TriggeredRule::Action action); + static enterprise_connectors::ContentAnalysisResponse MalwareResponse( + enterprise_connectors::TriggeredRule::Action action); // Returns a content analysis response with a specific DLP action. - static ContentAnalysisResponse DlpResponse( - ContentAnalysisResponse::Result::Status status, + static enterprise_connectors::ContentAnalysisResponse DlpResponse( + enterprise_connectors::ContentAnalysisResponse::Result::Status status, const std::string& rule_name, - TriggeredRule::Action action); + enterprise_connectors::TriggeredRule::Action action); // Returns a content analysis response with specific malware and DLP actions. - static ContentAnalysisResponse MalwareAndDlpResponse( - TriggeredRule::Action malware_action, - ContentAnalysisResponse::Result::Status dlp_status, + static enterprise_connectors::ContentAnalysisResponse MalwareAndDlpResponse( + enterprise_connectors::TriggeredRule::Action malware_action, + enterprise_connectors::ContentAnalysisResponse::Result::Status dlp_status, const std::string& dlp_rule_name, - TriggeredRule::Action dlp_action); + enterprise_connectors::TriggeredRule::Action dlp_action); // Sets the BinaryUploadService::Result to use in the next response callback. static void SetResponseResult( @@ -136,6 +138,6 @@ base::WeakPtrFactory<FakeContentAnalysisDelegate> weakptr_factory_{this}; }; -} // namespace enterprise_connectors::test +} // namespace enterprise_connectors -#endif // CHROME_BROWSER_ENTERPRISE_CONNECTORS_TEST_FAKE_CONTENT_ANALYSIS_DELEGATE_H_ +#endif // CHROME_BROWSER_ENTERPRISE_CONNECTORS_ANALYSIS_FAKE_CONTENT_ANALYSIS_DELEGATE_H_
diff --git a/chrome/browser/enterprise/connectors/test/fake_files_request_handler.cc b/chrome/browser/enterprise/connectors/analysis/fake_files_request_handler.cc similarity index 63% rename from chrome/browser/enterprise/connectors/test/fake_files_request_handler.cc rename to chrome/browser/enterprise/connectors/analysis/fake_files_request_handler.cc index 7327fe8..a26eb67 100644 --- a/chrome/browser/enterprise/connectors/test/fake_files_request_handler.cc +++ b/chrome/browser/enterprise/connectors/analysis/fake_files_request_handler.cc
@@ -2,17 +2,17 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "chrome/browser/enterprise/connectors/test/fake_files_request_handler.h" +#include "chrome/browser/enterprise/connectors/analysis/fake_files_request_handler.h" #include "base/functional/bind.h" #include "base/memory/weak_ptr.h" -namespace enterprise_connectors::test { +namespace enterprise_connectors { FakeFilesRequestHandler::FakeFilesRequestHandler( FakeFileUploadCallback fake_file_upload_callback, safe_browsing::BinaryUploadService* upload_service, Profile* profile, - const AnalysisSettings& analysis_settings, + const enterprise_connectors::AnalysisSettings& analysis_settings, GURL url, const std::string& source, const std::string& destination, @@ -21,27 +21,28 @@ safe_browsing::DeepScanAccessPoint access_point, const std::vector<base::FilePath>& paths, CompletionCallback callback) - : FilesRequestHandler(upload_service, - profile, - analysis_settings, - url, - source, - destination, - user_action_id, - tab_title, - access_point, - paths, - std::move(callback)), + : enterprise_connectors::FilesRequestHandler(upload_service, + profile, + analysis_settings, + url, + source, + destination, + user_action_id, + tab_title, + access_point, + paths, + std::move(callback)), fake_file_upload_callback_(fake_file_upload_callback) {} FakeFilesRequestHandler::~FakeFilesRequestHandler() = default; // static -std::unique_ptr<FilesRequestHandler> FakeFilesRequestHandler::Create( +std::unique_ptr<enterprise_connectors::FilesRequestHandler> +FakeFilesRequestHandler::Create( FakeFileUploadCallback fake_file_upload_callback, safe_browsing::BinaryUploadService* upload_service, Profile* profile, - const AnalysisSettings& analysis_settings, + const enterprise_connectors::AnalysisSettings& analysis_settings, GURL url, const std::string& source, const std::string& destination, @@ -49,7 +50,7 @@ const std::string& tab_title, safe_browsing::DeepScanAccessPoint access_point, const std::vector<base::FilePath>& paths, - FilesRequestHandler::CompletionCallback callback) { + enterprise_connectors::FilesRequestHandler::CompletionCallback callback) { return std::make_unique<FakeFilesRequestHandler>( fake_file_upload_callback, upload_service, profile, analysis_settings, url, source, destination, user_action_id, tab_title, access_point, paths, @@ -70,4 +71,4 @@ return weak_ptr_factory_.GetWeakPtr(); } -} // namespace enterprise_connectors::test +} // namespace enterprise_connectors
diff --git a/chrome/browser/enterprise/connectors/analysis/fake_files_request_handler.h b/chrome/browser/enterprise/connectors/analysis/fake_files_request_handler.h new file mode 100644 index 0000000..2cc129f --- /dev/null +++ b/chrome/browser/enterprise/connectors/analysis/fake_files_request_handler.h
@@ -0,0 +1,72 @@ +// Copyright 2022 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef CHROME_BROWSER_ENTERPRISE_CONNECTORS_ANALYSIS_FAKE_FILES_REQUEST_HANDLER_H_ +#define CHROME_BROWSER_ENTERPRISE_CONNECTORS_ANALYSIS_FAKE_FILES_REQUEST_HANDLER_H_ + +#include "base/functional/callback_forward.h" +#include "base/memory/weak_ptr.h" +#include "chrome/browser/enterprise/connectors/analysis/files_request_handler.h" + +namespace enterprise_connectors { + +class FakeFilesRequestHandler : public FilesRequestHandler { + public: + using FakeFileRequestCallback = base::OnceCallback<void( + base::FilePath path, + safe_browsing::BinaryUploadService::Result result, + enterprise_connectors::ContentAnalysisResponse response)>; + + using FakeFileUploadCallback = base::RepeatingCallback<void( + safe_browsing::BinaryUploadService::Result result, + const base::FilePath& path, + std::unique_ptr<safe_browsing::BinaryUploadService::Request> request, + FakeFileRequestCallback callback)>; + + FakeFilesRequestHandler( + FakeFileUploadCallback fake_file_upload_callback, + safe_browsing::BinaryUploadService* upload_service, + Profile* profile, + const enterprise_connectors::AnalysisSettings& analysis_settings, + GURL url, + const std::string& source, + const std::string& destination, + const std::string& user_action_id, + const std::string& tab_title, + safe_browsing::DeepScanAccessPoint access_point, + const std::vector<base::FilePath>& paths, + CompletionCallback callback); + + ~FakeFilesRequestHandler() override; + + static std::unique_ptr<enterprise_connectors::FilesRequestHandler> Create( + FakeFileUploadCallback fake_file_upload_callback, + safe_browsing::BinaryUploadService* upload_service, + Profile* profile, + const enterprise_connectors::AnalysisSettings& analysis_settings, + GURL url, + const std::string& source, + const std::string& destination, + const std::string& user_action_id, + const std::string& tab_title, + safe_browsing::DeepScanAccessPoint access_point, + const std::vector<base::FilePath>& paths, + enterprise_connectors::FilesRequestHandler::CompletionCallback callback); + + base::WeakPtr<FakeFilesRequestHandler> GetWeakPtr(); + + private: + void UploadFileForDeepScanning( + safe_browsing::BinaryUploadService::Result result, + const base::FilePath& path, + std::unique_ptr<safe_browsing::BinaryUploadService::Request> request) + override; + + FakeFileUploadCallback fake_file_upload_callback_; + base::WeakPtrFactory<FakeFilesRequestHandler> weak_ptr_factory_{this}; +}; + +} // namespace enterprise_connectors + +#endif // CHROME_BROWSER_ENTERPRISE_CONNECTORS_ANALYSIS_FAKE_FILES_REQUEST_HANDLER_H_
diff --git a/chrome/browser/enterprise/connectors/analysis/file_transfer_analysis_delegate_unittest.cc b/chrome/browser/enterprise/connectors/analysis/file_transfer_analysis_delegate_unittest.cc index dec4c76..aa6b2d6 100644 --- a/chrome/browser/enterprise/connectors/analysis/file_transfer_analysis_delegate_unittest.cc +++ b/chrome/browser/enterprise/connectors/analysis/file_transfer_analysis_delegate_unittest.cc
@@ -21,17 +21,17 @@ #include "base/task/single_thread_task_runner.h" #include "base/test/scoped_feature_list.h" #include "base/test/test_future.h" +#include "chrome/browser/enterprise/connectors/analysis/fake_content_analysis_delegate.h" +#include "chrome/browser/enterprise/connectors/analysis/fake_files_request_handler.h" #include "chrome/browser/enterprise/connectors/analysis/files_request_handler.h" #include "chrome/browser/enterprise/connectors/analysis/source_destination_test_util.h" #include "chrome/browser/enterprise/connectors/common.h" #include "chrome/browser/enterprise/connectors/connectors_service.h" #include "chrome/browser/enterprise/connectors/reporting/realtime_reporting_client_factory.h" -#include "chrome/browser/enterprise/connectors/test/deep_scanning_test_utils.h" -#include "chrome/browser/enterprise/connectors/test/fake_content_analysis_delegate.h" -#include "chrome/browser/enterprise/connectors/test/fake_files_request_handler.h" #include "chrome/browser/extensions/api/safe_browsing_private/safe_browsing_private_event_router_factory.h" #include "chrome/browser/policy/dm_token_utils.h" #include "chrome/browser/safe_browsing/cloud_content_scanning/binary_upload_service.h" +#include "chrome/browser/safe_browsing/cloud_content_scanning/deep_scanning_test_utils.h" #include "chrome/browser/safe_browsing/cloud_content_scanning/deep_scanning_utils.h" #include "chrome/browser/safe_browsing/test_extension_event_observer.h" #include "chrome/common/chrome_paths.h" @@ -360,26 +360,26 @@ case NO_PREF: break; case NOTHING_ENABLED_PREF: - enterprise_connectors::test::SetAnalysisConnector( - profile_->GetPrefs(), FILE_TRANSFER, kNothingEnabled); + safe_browsing::SetAnalysisConnector(profile_->GetPrefs(), FILE_TRANSFER, + kNothingEnabled); break; case DLP_PREF: - enterprise_connectors::test::SetAnalysisConnector( - profile_->GetPrefs(), FILE_TRANSFER, kBlockingScansForDlp); + safe_browsing::SetAnalysisConnector(profile_->GetPrefs(), FILE_TRANSFER, + kBlockingScansForDlp); break; case MALWARE_PREF: - enterprise_connectors::test::SetAnalysisConnector( - profile_->GetPrefs(), FILE_TRANSFER, kBlockingScansForMalware); + safe_browsing::SetAnalysisConnector(profile_->GetPrefs(), FILE_TRANSFER, + kBlockingScansForMalware); break; case DLP_MALWARE_PREF: - enterprise_connectors::test::SetAnalysisConnector( - profile_->GetPrefs(), FILE_TRANSFER, kBlockingScansForDlpAndMalware); + safe_browsing::SetAnalysisConnector(profile_->GetPrefs(), FILE_TRANSFER, + kBlockingScansForDlpAndMalware); break; } if (GetUnrelatedPrefEnabled()) { // Set for wrong policy (FILE_DOWNLOADED instead of FILE_TRANSFER)! - enterprise_connectors::test::SetAnalysisConnector( - profile_->GetPrefs(), FILE_DOWNLOADED, kBlockingScansForDlpAndMalware); + safe_browsing::SetAnalysisConnector(profile_->GetPrefs(), FILE_DOWNLOADED, + kBlockingScansForDlpAndMalware); } auto settings = FileTransferAnalysisDelegate::IsEnabledVec( @@ -406,8 +406,8 @@ TEST_F(FileTransferAnalysisDelegateIsEnabledTestSameFileSystem, DlpMalwareDisabledForSameFileSystem) { ScopedSetDMToken scoped_dm_token(policy::DMToken::CreateValidToken(kDmToken)); - enterprise_connectors::test::SetAnalysisConnector( - profile_->GetPrefs(), FILE_TRANSFER, kBlockingScansForDlpAndMalware); + safe_browsing::SetAnalysisConnector(profile_->GetPrefs(), FILE_TRANSFER, + kBlockingScansForDlpAndMalware); auto settings = FileTransferAnalysisDelegate::IsEnabledVec( profile(), @@ -425,9 +425,8 @@ TEST_F(FileTransferAnalysisDelegateIsEnabledTestMultiple, Test) { ScopedSetDMToken scoped_dm_token(policy::DMToken::CreateValidToken(kDmToken)); - enterprise_connectors::test::SetAnalysisConnector(profile_->GetPrefs(), - FILE_TRANSFER, - R"({ + safe_browsing::SetAnalysisConnector(profile_->GetPrefs(), FILE_TRANSFER, + R"({ "service_provider": "google", "enable": [ { @@ -486,8 +485,8 @@ VolumeInfo source_volume = GetParam(); - enterprise_connectors::test::SetAnalysisConnector( - profile_->GetPrefs(), FILE_TRANSFER, kBlockingScansForDlpAndMalware); + safe_browsing::SetAnalysisConnector(profile_->GetPrefs(), FILE_TRANSFER, + kBlockingScansForDlpAndMalware); VolumeInfo dest_volume = GetParam(); @@ -505,7 +504,7 @@ VolumeInfo source_volume = GetParam(); - enterprise_connectors::test::SetAnalysisConnector( + safe_browsing::SetAnalysisConnector( profile_->GetPrefs(), FILE_TRANSFER, base::StringPrintf(R"( { @@ -560,7 +559,7 @@ VolumeInfo dest_volume = GetParam(); - enterprise_connectors::test::SetAnalysisConnector( + safe_browsing::SetAnalysisConnector( profile_->GetPrefs(), FILE_TRANSFER, base::StringPrintf(R"( { @@ -615,10 +614,9 @@ VolumeInfo source_volume = GetParam(); - enterprise_connectors::test::SetAnalysisConnector( - profile_->GetPrefs(), FILE_TRANSFER, - base::StringPrintf( - R"({ + safe_browsing::SetAnalysisConnector(profile_->GetPrefs(), FILE_TRANSFER, + base::StringPrintf( + R"({ "service_provider": "google", "enable": [ { @@ -637,7 +635,7 @@ ], "block_until_verdict": 1 })", - source_volume.fs_config_string)); + source_volume.fs_config_string)); VolumeInfo dest_volume = GetAnyOtherVolume(source_volume); @@ -655,10 +653,9 @@ VolumeInfo dest_volume = GetParam(); - enterprise_connectors::test::SetAnalysisConnector( - profile_->GetPrefs(), FILE_TRANSFER, - base::StringPrintf( - R"({ + safe_browsing::SetAnalysisConnector(profile_->GetPrefs(), FILE_TRANSFER, + base::StringPrintf( + R"({ "service_provider": "google", "enable": [ { @@ -677,7 +674,7 @@ ], "block_until_verdict": 1 })", - dest_volume.fs_config_string)); + dest_volume.fs_config_string)); VolumeInfo source_volume = GetAnyOtherVolume(dest_volume); @@ -701,15 +698,15 @@ void SetUp() override { BaseTest::SetUp(); - enterprise_connectors::test::SetAnalysisConnector( - profile_->GetPrefs(), FILE_TRANSFER, kBlockingScansForDlpAndMalware); + safe_browsing::SetAnalysisConnector(profile_->GetPrefs(), FILE_TRANSFER, + kBlockingScansForDlpAndMalware); // Setup reporting: - test::SetOnSecurityEventReporting(profile()->GetPrefs(), - /*enabled*/ true, - /*enabled_event_names*/ {}, - /*enabled_opt_in_events*/ {}, - /*machine_scope*/ false); + safe_browsing::SetOnSecurityEventReporting(profile()->GetPrefs(), + /*enabled*/ true, + /*enabled_event_names*/ {}, + /*enabled_opt_in_events*/ {}, + /*machine_scope*/ false); cloud_policy_client_ = std::make_unique<policy::MockCloudPolicyClient>(); cloud_policy_client_->SetDMToken(kDmToken); extensions::SafeBrowsingPrivateEventRouterFactory::GetInstance() @@ -730,7 +727,7 @@ identity_test_environment_->identity_manager()); FilesRequestHandler::SetFactoryForTesting(base::BindRepeating( - &test::FakeFilesRequestHandler::Create, + &FakeFilesRequestHandler::Create, base::BindRepeating( &FileTransferAnalysisDelegateAuditOnlyTest::FakeFileUploadCallback, base::Unretained(this)))); @@ -796,7 +793,7 @@ safe_browsing::BinaryUploadService::Result result, const base::FilePath& path, std::unique_ptr<safe_browsing::BinaryUploadService::Request> request, - test::FakeFilesRequestHandler::FakeFileRequestCallback callback) { + FakeFilesRequestHandler::FakeFileRequestCallback callback) { EXPECT_FALSE(path.empty()); EXPECT_EQ(request->device_token(), kDmToken); @@ -820,7 +817,7 @@ ContentAnalysisResponse response = it != failures_.end() ? it->second - : test::FakeContentAnalysisDelegate::SuccessfulResponse([this]() { + : FakeContentAnalysisDelegate::SuccessfulResponse([this]() { std::set<std::string> tags; if (!dlp_response_.has_value()) { tags.insert("dlp"); @@ -897,7 +894,7 @@ storage::FileSystemURL source_url = GetEmptyTestSrcUrl(); storage::FileSystemURL destination_url = GetEmptyTestDestUrl(); - test::EventReportValidator validator(cloud_policy_client()); + safe_browsing::EventReportValidator validator(cloud_policy_client()); validator.ExpectNoReport(); ScanUpload(source_url, destination_url); @@ -914,7 +911,7 @@ storage::FileSystemURL source_url = PathToFileSystemURL( source_directory_url_.path().Append("does_not_exist")); - test::EventReportValidator validator(cloud_policy_client()); + safe_browsing::EventReportValidator validator(cloud_policy_client()); validator.ExpectNoReport(); ScanUpload(source_url, destination_directory_url_); @@ -929,7 +926,7 @@ } TEST_F(FileTransferAnalysisDelegateAuditOnlyTest, EmptyDirectory) { - test::EventReportValidator validator(cloud_policy_client()); + safe_browsing::EventReportValidator validator(cloud_policy_client()); validator.ExpectNoReport(); ScanUpload(source_directory_url_, destination_directory_url_); @@ -949,7 +946,7 @@ storage::FileSystemURL source_url = PathToFileSystemURL(paths[0]); - test::EventReportValidator validator(cloud_policy_client()); + safe_browsing::EventReportValidator validator(cloud_policy_client()); validator.ExpectNoReport(); ScanUpload(source_url, destination_directory_url_); @@ -971,10 +968,8 @@ // Mark all files and text with failed scans. std::string scan_id = "scan_id"; - ContentAnalysisResponse response = - test::FakeContentAnalysisDelegate::DlpResponse( - ContentAnalysisResponse::Result::SUCCESS, "rule", - TriggeredRule::BLOCK); + ContentAnalysisResponse response = FakeContentAnalysisDelegate::DlpResponse( + ContentAnalysisResponse::Result::SUCCESS, "rule", TriggeredRule::BLOCK); response.set_request_token(scan_id); SetDLPResponse(response); @@ -982,7 +977,7 @@ storage::FileSystemURL source_url = PathToFileSystemURL(paths[0]); // Check reporting. - test::EventReportValidator validator(cloud_policy_client()); + safe_browsing::EventReportValidator validator(cloud_policy_client()); validator.ExpectSensitiveDataEvent( /*url*/ "", /*source*/ kSourceVolumeInfo.fs_config_string, @@ -1017,9 +1012,8 @@ TEST_F(FileTransferAnalysisDelegateAuditOnlyTest, SingleFileBlockedDlpReportOnly) { - enterprise_connectors::test::SetAnalysisConnector( - profile_->GetPrefs(), FILE_TRANSFER, - kBlockingScansForDlpAndMalwareReportOnly); + safe_browsing::SetAnalysisConnector(profile_->GetPrefs(), FILE_TRANSFER, + kBlockingScansForDlpAndMalwareReportOnly); // For report-only mode, the destination is scanned, because we perform the // scan after a transfer. So we create the file at the destination. @@ -1028,10 +1022,8 @@ // Mark all files and text with failed scans. std::string scan_id = "scan_id"; - ContentAnalysisResponse response = - test::FakeContentAnalysisDelegate::DlpResponse( - ContentAnalysisResponse::Result::SUCCESS, "rule", - TriggeredRule::BLOCK); + ContentAnalysisResponse response = FakeContentAnalysisDelegate::DlpResponse( + ContentAnalysisResponse::Result::SUCCESS, "rule", TriggeredRule::BLOCK); response.set_request_token(scan_id); SetDLPResponse(response); @@ -1041,7 +1033,7 @@ storage::FileSystemURL destination_url = PathToFileSystemURL(paths[0]); // Check reporting. - test::EventReportValidator validator(cloud_policy_client()); + safe_browsing::EventReportValidator validator(cloud_policy_client()); validator.ExpectSensitiveDataEvent( /*url*/ "", /*source*/ kSourceVolumeInfo.fs_config_string, @@ -1078,7 +1070,7 @@ // Mark all files and text with failed scans. std::string scan_id = "scan_id"; ContentAnalysisResponse response = - test::FakeContentAnalysisDelegate::MalwareResponse(TriggeredRule::BLOCK); + FakeContentAnalysisDelegate::MalwareResponse(TriggeredRule::BLOCK); // Setting the rule_name is required for a correct value of thread_type in the // report. @@ -1093,7 +1085,7 @@ storage::FileSystemURL source_url = PathToFileSystemURL(paths[0]); // Check reporting. - test::EventReportValidator validator(cloud_policy_client()); + safe_browsing::EventReportValidator validator(cloud_policy_client()); validator.ExpectDangerousDeepScanningResult( /*url*/ "", /*source*/ kSourceVolumeInfo.fs_config_string, @@ -1140,10 +1132,8 @@ // Mark all files and text with failed scans. std::string scan_id = "scan_id"; - ContentAnalysisResponse response = - test::FakeContentAnalysisDelegate::DlpResponse( - ContentAnalysisResponse::Result::SUCCESS, "rule", - TriggeredRule::BLOCK); + ContentAnalysisResponse response = FakeContentAnalysisDelegate::DlpResponse( + ContentAnalysisResponse::Result::SUCCESS, "rule", TriggeredRule::BLOCK); response.set_request_token(scan_id); SetDLPResponse(response); @@ -1151,7 +1141,7 @@ storage::FileSystemURL source_url = PathToFileSystemURL(path); // Check reporting. - test::EventReportValidator validator(cloud_policy_client()); + safe_browsing::EventReportValidator validator(cloud_policy_client()); validator.ExpectUnscannedFileEvent( /*url*/ "", /*source*/ kSourceVolumeInfo.fs_config_string, @@ -1190,7 +1180,7 @@ storage::FileSystemURL source_url = PathToFileSystemURL(paths[0]); - test::EventReportValidator validator(cloud_policy_client()); + safe_browsing::EventReportValidator validator(cloud_policy_client()); validator.ExpectNoReport(); ScanUpload(source_directory_url_, destination_directory_url_); @@ -1213,15 +1203,13 @@ // Mark all files and text with failed scans. std::string scan_id = "scan_id"; - ContentAnalysisResponse response = - test::FakeContentAnalysisDelegate::DlpResponse( - ContentAnalysisResponse::Result::SUCCESS, "rule", - TriggeredRule::BLOCK); + ContentAnalysisResponse response = FakeContentAnalysisDelegate::DlpResponse( + ContentAnalysisResponse::Result::SUCCESS, "rule", TriggeredRule::BLOCK); response.set_request_token(scan_id); SetDLPResponse(response); // Check reporting. - test::EventReportValidator validator(cloud_policy_client()); + safe_browsing::EventReportValidator validator(cloud_policy_client()); validator.ExpectSensitiveDataEvent( /*url*/ "", /*source*/ kSourceVolumeInfo.fs_config_string, @@ -1261,7 +1249,7 @@ FILE_PATH_LITERAL("blub.doc")}, source_directory_url_.path()); - test::EventReportValidator validator(cloud_policy_client()); + safe_browsing::EventReportValidator validator(cloud_policy_client()); validator.ExpectNoReport(); ScanUpload(source_directory_url_, destination_directory_url_); @@ -1288,16 +1276,14 @@ // Mark all files and text with failed scans. std::string scan_id = "scan_id"; - ContentAnalysisResponse response = - test::FakeContentAnalysisDelegate::DlpResponse( - ContentAnalysisResponse::Result::SUCCESS, "rule", - TriggeredRule::BLOCK); + ContentAnalysisResponse response = FakeContentAnalysisDelegate::DlpResponse( + ContentAnalysisResponse::Result::SUCCESS, "rule", TriggeredRule::BLOCK); response.set_request_token(scan_id); SetDLPResponse(response); storage::FileSystemURL source_url = PathToFileSystemURL(paths[0]); - test::EventReportValidator validator(cloud_policy_client()); + safe_browsing::EventReportValidator validator(cloud_policy_client()); validator.ExpectSensitiveDataEvents( /*url*/ "", /*source*/ kSourceVolumeInfo.fs_config_string, @@ -1351,7 +1337,7 @@ for (const auto& path : paths) { if (path.value().find("bad") != std::string::npos) { ContentAnalysisResponse response = - test::FakeContentAnalysisDelegate::DlpResponse( + FakeContentAnalysisDelegate::DlpResponse( ContentAnalysisResponse::Result::SUCCESS, "rule", TriggeredRule::BLOCK); response.set_request_token(scan_id); @@ -1362,7 +1348,7 @@ storage::FileSystemURL source_url = PathToFileSystemURL(paths[0]); - test::EventReportValidator validator(cloud_policy_client()); + safe_browsing::EventReportValidator validator(cloud_policy_client()); validator.ExpectSensitiveDataEvents( /*url*/ "", /*source*/ kSourceVolumeInfo.fs_config_string, @@ -1429,7 +1415,7 @@ auto&& path = paths[i]; if (path.value().find("bad") != std::string::npos) { ContentAnalysisResponse response = - test::FakeContentAnalysisDelegate::DlpResponse( + FakeContentAnalysisDelegate::DlpResponse( ContentAnalysisResponse::Result::SUCCESS, base::StrCat({"rule", base::NumberToString(i)}), TriggeredRule::BLOCK); @@ -1450,7 +1436,7 @@ storage::FileSystemURL source_url = PathToFileSystemURL(paths[0]); - test::EventReportValidator validator(cloud_policy_client()); + safe_browsing::EventReportValidator validator(cloud_policy_client()); validator.ExpectSensitiveDataEvents( /*url*/ "", /*source*/ kSourceVolumeInfo.fs_config_string,
diff --git a/chrome/browser/enterprise/connectors/analysis/files_request_handler_unittest.cc b/chrome/browser/enterprise/connectors/analysis/files_request_handler_unittest.cc index 4a6d0f9..66619e5 100644 --- a/chrome/browser/enterprise/connectors/analysis/files_request_handler_unittest.cc +++ b/chrome/browser/enterprise/connectors/analysis/files_request_handler_unittest.cc
@@ -21,13 +21,13 @@ #include "base/test/gmock_callback_support.h" #include "base/test/test_future.h" #include "build/build_config.h" +#include "chrome/browser/enterprise/connectors/analysis/fake_content_analysis_delegate.h" +#include "chrome/browser/enterprise/connectors/analysis/fake_files_request_handler.h" #include "chrome/browser/enterprise/connectors/common.h" #include "chrome/browser/enterprise/connectors/connectors_service.h" -#include "chrome/browser/enterprise/connectors/test/deep_scanning_test_utils.h" -#include "chrome/browser/enterprise/connectors/test/fake_content_analysis_delegate.h" -#include "chrome/browser/enterprise/connectors/test/fake_files_request_handler.h" #include "chrome/browser/policy/dm_token_utils.h" #include "chrome/browser/safe_browsing/cloud_content_scanning/binary_upload_service.h" +#include "chrome/browser/safe_browsing/cloud_content_scanning/deep_scanning_test_utils.h" #include "chrome/browser/safe_browsing/cloud_content_scanning/deep_scanning_utils.h" #include "chrome/common/chrome_paths.h" #include "chrome/test/base/testing_browser_process.h" @@ -139,7 +139,7 @@ TestingProfileManager profile_manager_; raw_ptr<TestingProfile> profile_; base::ScopedTempDir temp_dir_; - std::unique_ptr<test::FakeFilesRequestHandler> fake_files_request_handler_; + std::unique_ptr<FakeFilesRequestHandler> fake_files_request_handler_; }; MATCHER_P3(MatchesRequestHandlerResult, complies, final_result, tag, "") { @@ -192,8 +192,7 @@ absl::optional<std::vector<RequestHandlerResult>> ScanUpload( const std::vector<base::FilePath>& paths) { // The settings need to exist until the "scanning" has completed, we can - // thus not pass it into test::FakeFilesRequestHandler as a rvalue - // reference. + // thus not pass it into FakeFilesRequestHandler as a rvalue reference. absl::optional<AnalysisSettings> settings = GetSettings(); if (!settings.has_value()) { return absl::nullopt; @@ -205,16 +204,14 @@ // The access point is only used for metrics, so its value doesn't affect // the tests in this file and can always be the same. - fake_files_request_handler_ = - std::make_unique<test::FakeFilesRequestHandler>( - base::BindRepeating( - &FilesRequestHandlerTest::FakeFileUploadCallback, - weak_ptr_factory_.GetWeakPtr(), - settings->cloud_or_local_settings.is_cloud_analysis()), - /*upload_service=*/nullptr, profile_, *settings, GURL(kTestUrl), "", - "", kUserActionId, kTabTitle, - safe_browsing::DeepScanAccessPoint::UPLOAD, paths, - future.GetCallback()); + fake_files_request_handler_ = std::make_unique<FakeFilesRequestHandler>( + base::BindRepeating( + &FilesRequestHandlerTest::FakeFileUploadCallback, + weak_ptr_factory_.GetWeakPtr(), + settings->cloud_or_local_settings.is_cloud_analysis()), + /*upload_service=*/nullptr, profile_, *settings, GURL(kTestUrl), "", "", + kUserActionId, kTabTitle, safe_browsing::DeepScanAccessPoint::UPLOAD, + paths, future.GetCallback()); fake_files_request_handler_->UploadData(); @@ -266,30 +263,30 @@ include_malware_ = malware; if (include_dlp_ && include_malware_) { - enterprise_connectors::test::SetAnalysisConnector( - profile_->GetPrefs(), AnalysisConnector::FILE_ATTACHED, - kBlockingScansForDlpAndMalware); + safe_browsing::SetAnalysisConnector(profile_->GetPrefs(), + AnalysisConnector::FILE_ATTACHED, + kBlockingScansForDlpAndMalware); } else if (include_dlp_) { - enterprise_connectors::test::SetAnalysisConnector( - profile_->GetPrefs(), AnalysisConnector::FILE_ATTACHED, - kBlockingScansForDlp); + safe_browsing::SetAnalysisConnector(profile_->GetPrefs(), + AnalysisConnector::FILE_ATTACHED, + kBlockingScansForDlp); } else if (include_malware_) { - enterprise_connectors::test::SetAnalysisConnector( - profile_->GetPrefs(), AnalysisConnector::FILE_ATTACHED, - kBlockingScansForMalware); + safe_browsing::SetAnalysisConnector(profile_->GetPrefs(), + AnalysisConnector::FILE_ATTACHED, + kBlockingScansForMalware); } else { - enterprise_connectors::test::SetAnalysisConnector( - profile_->GetPrefs(), AnalysisConnector::FILE_ATTACHED, - kNothingEnabled); + safe_browsing::SetAnalysisConnector(profile_->GetPrefs(), + AnalysisConnector::FILE_ATTACHED, + kNothingEnabled); } } void SetUp() override { BaseTest::SetUp(); - enterprise_connectors::test::SetAnalysisConnector( - profile_->GetPrefs(), AnalysisConnector::FILE_ATTACHED, - kBlockingScansForDlpAndMalware); + safe_browsing::SetAnalysisConnector(profile_->GetPrefs(), + AnalysisConnector::FILE_ATTACHED, + kBlockingScansForDlpAndMalware); } void FakeFileUploadCallback( @@ -297,7 +294,7 @@ safe_browsing::BinaryUploadService::Result result, const base::FilePath& path, std::unique_ptr<safe_browsing::BinaryUploadService::Request> request, - test::FakeFilesRequestHandler::FakeFileRequestCallback callback) { + FakeFilesRequestHandler::FakeFileRequestCallback callback) { EXPECT_FALSE(path.empty()); if (is_cloud_analysis) { EXPECT_EQ(request->device_token(), kDmToken); @@ -323,7 +320,7 @@ ContentAnalysisResponse response = it != failures_.end() ? it->second - : test::FakeContentAnalysisDelegate::SuccessfulResponse([this]() { + : FakeContentAnalysisDelegate::SuccessfulResponse([this]() { std::set<std::string> tags; if (include_dlp_ && !dlp_response_.has_value()) { tags.insert("dlp"); @@ -425,9 +422,8 @@ TEST_F(FilesRequestHandlerTest, FileIsEncrypted) { content::InProcessUtilityThreadHelper in_process_utility_thread_helper; - enterprise_connectors::test::SetAnalysisConnector( - profile_->GetPrefs(), AnalysisConnector::FILE_ATTACHED, - R"( + safe_browsing::SetAnalysisConnector(profile_->GetPrefs(), + AnalysisConnector::FILE_ATTACHED, R"( { "service_provider": "google", "enable": [ @@ -462,9 +458,9 @@ TEST_F(FilesRequestHandlerTest, FileIsEncrypted_LocalAnalysis) { content::InProcessUtilityThreadHelper in_process_utility_thread_helper; - enterprise_connectors::test::SetAnalysisConnector( - profile_->GetPrefs(), AnalysisConnector::FILE_ATTACHED, - kLocalServiceProvider); + safe_browsing::SetAnalysisConnector(profile_->GetPrefs(), + AnalysisConnector::FILE_ATTACHED, + kLocalServiceProvider); GURL url(kTestUrl); std::vector<base::FilePath> paths; @@ -487,9 +483,8 @@ TEST_F(FilesRequestHandlerTest, FileIsEncrypted_PolicyAllows) { content::InProcessUtilityThreadHelper in_process_utility_thread_helper; - enterprise_connectors::test::SetAnalysisConnector( - profile_->GetPrefs(), AnalysisConnector::FILE_ATTACHED, - R"( + safe_browsing::SetAnalysisConnector(profile_->GetPrefs(), + AnalysisConnector::FILE_ATTACHED, R"( { "service_provider": "google", "enable": [ @@ -524,9 +519,9 @@ TEST_F(FilesRequestHandlerTest, FileIsLarge_LocalAnalysis) { content::InProcessUtilityThreadHelper in_process_utility_thread_helper; - enterprise_connectors::test::SetAnalysisConnector( - profile_->GetPrefs(), AnalysisConnector::FILE_ATTACHED, - kLocalServiceProvider); + safe_browsing::SetAnalysisConnector(profile_->GetPrefs(), + AnalysisConnector::FILE_ATTACHED, + kLocalServiceProvider); GURL url(kTestUrl); std::vector<base::FilePath> paths; @@ -552,9 +547,9 @@ TEST_F(FilesRequestHandlerTest, MultipleFilesUpload_LocalAnalysis) { content::InProcessUtilityThreadHelper in_process_utility_thread_helper; - enterprise_connectors::test::SetAnalysisConnector( - profile_->GetPrefs(), AnalysisConnector::FILE_ATTACHED, - kLocalServiceProvider); + safe_browsing::SetAnalysisConnector(profile_->GetPrefs(), + AnalysisConnector::FILE_ATTACHED, + kLocalServiceProvider); GURL url(kTestUrl); std::vector<base::FilePath> paths = CreateFilesForTest( {FILE_PATH_LITERAL("good.doc"), FILE_PATH_LITERAL("good2.doc")}); @@ -577,9 +572,8 @@ std::vector<base::FilePath> paths = CreateFilesForTest( {FILE_PATH_LITERAL("good.doc"), FILE_PATH_LITERAL("bad.doc")}); - PathFailsDeepScan( - paths[1], - test::FakeContentAnalysisDelegate::MalwareResponse(TriggeredRule::BLOCK)); + PathFailsDeepScan(paths[1], FakeContentAnalysisDelegate::MalwareResponse( + TriggeredRule::BLOCK)); auto results = ScanUpload(paths); ASSERT_TRUE(results.has_value()); @@ -645,7 +639,7 @@ std::vector<base::FilePath> paths = CreateFilesForTest( {FILE_PATH_LITERAL("good.doc"), FILE_PATH_LITERAL("bad.doc")}); - PathFailsDeepScan(paths[1], test::FakeContentAnalysisDelegate::DlpResponse( + PathFailsDeepScan(paths[1], FakeContentAnalysisDelegate::DlpResponse( ContentAnalysisResponse::Result::SUCCESS, "rule", TriggeredRule::BLOCK)); @@ -669,7 +663,7 @@ PathFailsDeepScan( paths[1], - test::FakeContentAnalysisDelegate::MalwareAndDlpResponse( + FakeContentAnalysisDelegate::MalwareAndDlpResponse( TriggeredRule::BLOCK, ContentAnalysisResponse::Result::SUCCESS, "rule", TriggeredRule::BLOCK)); @@ -693,9 +687,8 @@ // Note that this behavior is different compared to the // ContentAnalysisDelegateUnittest which checks that the Delegate allows // access to all data for block_until_verdict==0. - enterprise_connectors::test::SetAnalysisConnector( - profile_->GetPrefs(), AnalysisConnector::FILE_ATTACHED, - R"( + safe_browsing::SetAnalysisConnector(profile_->GetPrefs(), + AnalysisConnector::FILE_ATTACHED, R"( { "service_provider": "google", "enable": [ @@ -716,21 +709,18 @@ FILE_PATH_LITERAL("foo_fail_dlp_rule.doc")}); // Mark all files and text with failed scans. - SetDLPResponse(test::FakeContentAnalysisDelegate::DlpResponse( + SetDLPResponse(FakeContentAnalysisDelegate::DlpResponse( ContentAnalysisResponse::Result::SUCCESS, "rule", TriggeredRule::BLOCK)); - PathFailsDeepScan( - paths[0], - test::FakeContentAnalysisDelegate::MalwareResponse(TriggeredRule::BLOCK)); - PathFailsDeepScan( - paths[1], - test::FakeContentAnalysisDelegate::MalwareResponse(TriggeredRule::WARN)); - PathFailsDeepScan( - paths[2], - test::FakeContentAnalysisDelegate::MalwareResponse(TriggeredRule::BLOCK)); - PathFailsDeepScan(paths[3], test::FakeContentAnalysisDelegate::DlpResponse( + PathFailsDeepScan(paths[0], FakeContentAnalysisDelegate::MalwareResponse( + TriggeredRule::BLOCK)); + PathFailsDeepScan(paths[1], FakeContentAnalysisDelegate::MalwareResponse( + TriggeredRule::WARN)); + PathFailsDeepScan(paths[2], FakeContentAnalysisDelegate::MalwareResponse( + TriggeredRule::BLOCK)); + PathFailsDeepScan(paths[3], FakeContentAnalysisDelegate::DlpResponse( ContentAnalysisResponse::Result::FAILURE, "", TriggeredRule::REPORT_ONLY)); - PathFailsDeepScan(paths[4], test::FakeContentAnalysisDelegate::DlpResponse( + PathFailsDeepScan(paths[4], FakeContentAnalysisDelegate::DlpResponse( ContentAnalysisResponse::Result::SUCCESS, "dlp", TriggeredRule::BLOCK));
diff --git a/chrome/browser/enterprise/connectors/analysis/print_content_analysis_utils_unittest.cc b/chrome/browser/enterprise/connectors/analysis/print_content_analysis_utils_unittest.cc index e7570d6..d6ed06e 100644 --- a/chrome/browser/enterprise/connectors/analysis/print_content_analysis_utils_unittest.cc +++ b/chrome/browser/enterprise/connectors/analysis/print_content_analysis_utils_unittest.cc
@@ -10,11 +10,11 @@ #include "build/build_config.h" #include "chrome/browser/enterprise/connectors/reporting/realtime_reporting_client.h" #include "chrome/browser/enterprise/connectors/reporting/realtime_reporting_client_factory.h" -#include "chrome/browser/enterprise/connectors/test/deep_scanning_test_utils.h" #include "chrome/browser/extensions/api/safe_browsing_private/safe_browsing_private_event_router.h" #include "chrome/browser/extensions/api/safe_browsing_private/safe_browsing_private_event_router_factory.h" #include "chrome/browser/policy/dm_token_utils.h" #include "chrome/browser/printing/print_preview_test.h" +#include "chrome/browser/safe_browsing/cloud_content_scanning/deep_scanning_test_utils.h" #include "chrome/browser/ui/browser_commands.h" #include "chrome/test/base/testing_browser_process.h" #include "components/policy/core/common/cloud/mock_cloud_policy_client.h" @@ -178,9 +178,9 @@ ->SetIdentityManagerForTesting( identity_test_environment_.identity_manager()); - enterprise_connectors::test::SetAnalysisConnector(profile()->GetPrefs(), - PRINT, GetParam()); - test::SetOnSecurityEventReporting(profile()->GetPrefs(), true); + safe_browsing::SetAnalysisConnector(profile()->GetPrefs(), PRINT, + GetParam()); + safe_browsing::SetOnSecurityEventReporting(profile()->GetPrefs(), true); } void TearDown() override { @@ -215,7 +215,7 @@ &PrintTestContentAnalysisDelegate::Create, ContentAnalysisResponse::Result::TriggeredRule::ACTION_UNSPECIFIED)); - test::EventReportValidator validator(client_.get()); + safe_browsing::EventReportValidator validator(client_.get()); validator.ExpectNoReport(); auto data = CreateData(); @@ -235,7 +235,7 @@ &PrintTestContentAnalysisDelegate::Create, ContentAnalysisResponse::Result::TriggeredRule::REPORT_ONLY)); - test::EventReportValidator validator(client_.get()); + safe_browsing::EventReportValidator validator(client_.get()); validator.ExpectSensitiveDataEvent( /*url*/ "", /*source*/ "", @@ -271,7 +271,7 @@ &PrintTestContentAnalysisDelegate::Create, ContentAnalysisResponse::Result::TriggeredRule::WARN)); - test::EventReportValidator validator(client_.get()); + safe_browsing::EventReportValidator validator(client_.get()); validator.SetDoneClosure(base::BindLambdaForTesting([this, &validator]() { testing::Mock::VerifyAndClearExpectations(client_.get()); validator.ExpectNoReport(); @@ -314,7 +314,7 @@ ContentAnalysisResponse::Result::TriggeredRule::WARN)); bool bypassed = false; - test::EventReportValidator validator(client_.get()); + safe_browsing::EventReportValidator validator(client_.get()); validator.SetDoneClosure(base::BindLambdaForTesting([this, &validator, &bypassed]() { // Only do this once to avoid infinite recursion since bypassing triggers @@ -382,7 +382,7 @@ &PrintTestContentAnalysisDelegate::Create, ContentAnalysisResponse::Result::TriggeredRule::BLOCK)); - test::EventReportValidator validator(client_.get()); + safe_browsing::EventReportValidator validator(client_.get()); validator.ExpectSensitiveDataEvent( /*url*/ "", /*source*/ "",
diff --git a/chrome/browser/enterprise/connectors/common_unittest.cc b/chrome/browser/enterprise/connectors/common_unittest.cc index 660da6f..01f2a66 100644 --- a/chrome/browser/enterprise/connectors/common_unittest.cc +++ b/chrome/browser/enterprise/connectors/common_unittest.cc
@@ -6,8 +6,8 @@ #include "base/memory/raw_ptr.h" #include "chrome/browser/enterprise/connectors/connectors_service.h" -#include "chrome/browser/enterprise/connectors/test/deep_scanning_test_utils.h" #include "chrome/browser/policy/dm_token_utils.h" +#include "chrome/browser/safe_browsing/cloud_content_scanning/deep_scanning_test_utils.h" #include "chrome/browser/safe_browsing/cloud_content_scanning/deep_scanning_utils.h" #include "chrome/test/base/testing_browser_process.h" #include "chrome/test/base/testing_profile.h" @@ -82,7 +82,8 @@ "block_large_files": %s })", bool_setting()); - test::SetAnalysisConnector(profile()->GetPrefs(), FILE_ATTACHED, pref); + safe_browsing::SetAnalysisConnector(profile()->GetPrefs(), FILE_ATTACHED, + pref); EXPECT_EQ(allowed(), ResultShouldAllowDataUse( settings(), @@ -98,7 +99,8 @@ "block_password_protected": %s })", bool_setting()); - test::SetAnalysisConnector(profile()->GetPrefs(), FILE_ATTACHED, pref); + safe_browsing::SetAnalysisConnector(profile()->GetPrefs(), FILE_ATTACHED, + pref); EXPECT_EQ(allowed(), ResultShouldAllowDataUse( settings(), @@ -114,7 +116,8 @@ "block_unsupported_file_types": %s })", bool_setting()); - test::SetAnalysisConnector(profile()->GetPrefs(), FILE_ATTACHED, pref); + safe_browsing::SetAnalysisConnector(profile()->GetPrefs(), FILE_ATTACHED, + pref); EXPECT_EQ(allowed(), ResultShouldAllowDataUse( settings(), safe_browsing::BinaryUploadService::Result::
diff --git a/chrome/browser/enterprise/connectors/connectors_service_browsertest.cc b/chrome/browser/enterprise/connectors/connectors_service_browsertest.cc index 0135a1e..66190a24 100644 --- a/chrome/browser/enterprise/connectors/connectors_service_browsertest.cc +++ b/chrome/browser/enterprise/connectors/connectors_service_browsertest.cc
@@ -14,11 +14,11 @@ #include "chrome/browser/browser_process.h" #include "chrome/browser/enterprise/connectors/common.h" #include "chrome/browser/enterprise/connectors/connectors_prefs.h" -#include "chrome/browser/enterprise/connectors/test/deep_scanning_browsertest_base.h" -#include "chrome/browser/enterprise/connectors/test/deep_scanning_test_utils.h" #include "chrome/browser/policy/chrome_browser_policy_connector.h" #include "chrome/browser/policy/dm_token_utils.h" #include "chrome/browser/profiles/reporting_util.h" +#include "chrome/browser/safe_browsing/cloud_content_scanning/deep_scanning_browsertest_base.h" +#include "chrome/browser/safe_browsing/cloud_content_scanning/deep_scanning_test_utils.h" #include "chrome/browser/ui/browser.h" #include "components/enterprise/browser/controller/fake_browser_dm_token_storage.h" #include "components/enterprise/browser/enterprise_switches.h" @@ -147,7 +147,7 @@ enum class ManagementStatus { AFFILIATED, UNAFFILIATED, UNMANAGED }; class ConnectorsServiceProfileBrowserTest - : public test::DeepScanningBrowserTestBase { + : public safe_browsing::DeepScanningBrowserTestBase { public: explicit ConnectorsServiceProfileBrowserTest( ManagementStatus management_status) @@ -170,7 +170,7 @@ } void SetUpOnMainThread() override { - test::DeepScanningBrowserTestBase::SetUpOnMainThread(); + safe_browsing::DeepScanningBrowserTestBase::SetUpOnMainThread(); SetUpProfileData(); @@ -192,7 +192,7 @@ #if BUILDFLAG(IS_CHROMEOS_LACROS) EXPECT_TRUE(browser()->profile()->IsMainProfile()); #elif !BUILDFLAG(IS_CHROMEOS_ASH) - test::SetProfileDMToken(browser()->profile(), kFakeProfileDMToken); + safe_browsing::SetProfileDMToken(browser()->profile(), kFakeProfileDMToken); #endif enterprise_management::PolicyData profile_policy_data;
diff --git a/chrome/browser/enterprise/connectors/connectors_service_unittest.cc b/chrome/browser/enterprise/connectors/connectors_service_unittest.cc index feb9f53f..1dd9aa5 100644 --- a/chrome/browser/enterprise/connectors/connectors_service_unittest.cc +++ b/chrome/browser/enterprise/connectors/connectors_service_unittest.cc
@@ -14,9 +14,9 @@ #include "chrome/browser/enterprise/connectors/connectors_manager.h" #include "chrome/browser/enterprise/connectors/reporting/browser_crash_event_router.h" #include "chrome/browser/enterprise/connectors/service_provider_config.h" -#include "chrome/browser/enterprise/connectors/test/deep_scanning_test_utils.h" #include "chrome/browser/policy/dm_token_utils.h" #include "chrome/browser/profiles/profile_testing_helper.h" +#include "chrome/browser/safe_browsing/cloud_content_scanning/deep_scanning_test_utils.h" #include "chrome/test/base/testing_browser_process.h" #include "chrome/test/base/testing_profile_manager.h" #include "components/enterprise/common/proto/connectors.pb.h" @@ -127,7 +127,8 @@ }; TEST_P(ConnectorsServiceHasExtraUiTest, AnalysisConnectors) { - test::SetAnalysisConnector(profile_->GetPrefs(), FILE_DOWNLOADED, pref()); + safe_browsing::SetAnalysisConnector(profile_->GetPrefs(), FILE_DOWNLOADED, + pref()); auto* service = ConnectorsServiceFactory::GetForBrowserContext(profile_); bool show_extra_ui = service->HasExtraUiToDisplay(FILE_DOWNLOADED, kDlpTag); ASSERT_EQ(show_extra_ui, has_extra_ui());
diff --git a/chrome/browser/enterprise/connectors/device_trust/device_trust_browsertest.cc b/chrome/browser/enterprise/connectors/device_trust/device_trust_browsertest.cc index df0179c..080b151 100644 --- a/chrome/browser/enterprise/connectors/device_trust/device_trust_browsertest.cc +++ b/chrome/browser/enterprise/connectors/device_trust/device_trust_browsertest.cc
@@ -42,7 +42,6 @@ #else #include "chrome/browser/enterprise/connectors/device_trust/key_management/browser/commands/scoped_key_rotation_command_factory.h" #include "chrome/browser/enterprise/connectors/device_trust/key_management/core/persistence/scoped_key_persistence_delegate_factory.h" -#include "chrome/browser/enterprise/connectors/test/deep_scanning_test_utils.h" #include "components/enterprise/browser/device_trust/device_trust_key_manager.h" #endif
diff --git a/chrome/browser/enterprise/connectors/reporting/extension_install_event_router_unittest.cc b/chrome/browser/enterprise/connectors/reporting/extension_install_event_router_unittest.cc index 5cf3047..2c256d8 100644 --- a/chrome/browser/enterprise/connectors/reporting/extension_install_event_router_unittest.cc +++ b/chrome/browser/enterprise/connectors/reporting/extension_install_event_router_unittest.cc
@@ -12,8 +12,8 @@ #include "chrome/browser/enterprise/connectors/reporting/realtime_reporting_client.h" #include "chrome/browser/enterprise/connectors/reporting/realtime_reporting_client_factory.h" #include "chrome/browser/enterprise/connectors/reporting/reporting_service_settings.h" -#include "chrome/browser/enterprise/connectors/test/deep_scanning_test_utils.h" #include "chrome/browser/policy/dm_token_utils.h" +#include "chrome/browser/safe_browsing/cloud_content_scanning/deep_scanning_test_utils.h" #include "chrome/test/base/testing_browser_process.h" #include "chrome/test/base/testing_profile.h" #include "chrome/test/base/testing_profile_manager.h" @@ -81,7 +81,7 @@ mockRealtimeReportingClient_ = static_cast<MockRealtimeReportingClient*>( RealtimeReportingClientFactory::GetForProfile(profile_)); - test::SetOnSecurityEventReporting( + safe_browsing::SetOnSecurityEventReporting( profile_->GetPrefs(), /*enabled=*/true, /*enabled_event_names=*/std::set<std::string>(), /*enabled_opt_in_events=*/
diff --git a/chrome/browser/enterprise/connectors/test/BUILD.gn b/chrome/browser/enterprise/connectors/test/BUILD.gn index ccc9239..877e22c8 100644 --- a/chrome/browser/enterprise/connectors/test/BUILD.gn +++ b/chrome/browser/enterprise/connectors/test/BUILD.gn
@@ -7,46 +7,30 @@ source_set("test_support") { testonly = true public = [ - "deep_scanning_browsertest_base.h", - "deep_scanning_test_utils.h", - "fake_content_analysis_delegate.h", - "fake_files_request_handler.h", "management_context_mixin.h", "test_constants.h", ] sources = [ - "deep_scanning_browsertest_base.cc", - "deep_scanning_test_utils.cc", - "fake_content_analysis_delegate.cc", - "fake_files_request_handler.cc", "management_context_mixin.cc", "test_constants.cc", ] public_deps = [ - "//base", - "//chrome/browser/safe_browsing", "//chrome/browser/ui", "//chrome/test:test_support_ui", - "//components/enterprise/common/proto:connectors_proto", "//components/policy/core/common:common_constants", "//components/policy/core/common:test_support", "//components/policy/proto", - "//components/safe_browsing/core/common", - "//components/safe_browsing/core/common:safe_browsing_prefs", "//testing/gmock", - "//third_party/abseil-cpp:absl", ] deps = [ + "//base", "//chrome/browser", - "//chrome/browser:browser_process", "//chrome/browser/profiles:profile", - "//chrome/test:test_support", "//components/policy/core/browser", "//components/policy/core/common", - "//components/prefs", ] if (is_win || is_linux || is_mac) {
diff --git a/chrome/browser/enterprise/connectors/test/browser/management_context_mixin_browser.cc b/chrome/browser/enterprise/connectors/test/browser/management_context_mixin_browser.cc index 63a8e73..989e1c3 100644 --- a/chrome/browser/enterprise/connectors/test/browser/management_context_mixin_browser.cc +++ b/chrome/browser/enterprise/connectors/test/browser/management_context_mixin_browser.cc
@@ -6,10 +6,10 @@ #include "build/branding_buildflags.h" #include "chrome/browser/browser_process.h" -#include "chrome/browser/enterprise/connectors/test/deep_scanning_test_utils.h" #include "chrome/browser/enterprise/connectors/test/test_constants.h" #include "chrome/browser/policy/chrome_browser_policy_connector.h" #include "chrome/browser/profiles/profile.h" +#include "chrome/browser/safe_browsing/cloud_content_scanning/deep_scanning_test_utils.h" #include "chrome/test/base/in_process_browser_test.h" #include "components/enterprise/browser/controller/fake_browser_dm_token_storage.h" #include "components/enterprise/browser/enterprise_switches.h" @@ -31,7 +31,7 @@ void ManagementContextMixinBrowser::ManageCloudUser() { ManagementContextMixin::ManageCloudUser(); - SetProfileDMToken(browser()->profile(), kProfileDmToken); + safe_browsing::SetProfileDMToken(browser()->profile(), kProfileDmToken); auto* profile_policy_manager = browser()->profile()->GetUserCloudPolicyManager();
diff --git a/chrome/browser/enterprise/connectors/test/deep_scanning_browsertest_base.cc b/chrome/browser/enterprise/connectors/test/deep_scanning_browsertest_base.cc deleted file mode 100644 index 6641ed7..0000000 --- a/chrome/browser/enterprise/connectors/test/deep_scanning_browsertest_base.cc +++ /dev/null
@@ -1,176 +0,0 @@ -// Copyright 2020 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "chrome/browser/enterprise/connectors/test/deep_scanning_browsertest_base.h" - -#include "base/functional/bind.h" -#include "base/functional/callback_helpers.h" -#include "chrome/browser/browser_process.h" -#include "chrome/browser/enterprise/connectors/analysis/content_analysis_dialog.h" -#include "chrome/browser/enterprise/connectors/analysis/files_request_handler.h" -#include "chrome/browser/enterprise/connectors/connectors_service.h" -#include "chrome/browser/enterprise/connectors/test/deep_scanning_test_utils.h" -#include "chrome/browser/enterprise/connectors/test/fake_content_analysis_delegate.h" -#include "chrome/browser/policy/dm_token_utils.h" -#include "chrome/browser/ui/browser.h" -#include "chrome/test/base/testing_browser_process.h" -#include "components/prefs/pref_service.h" -#include "components/prefs/scoped_user_pref_update.h" -#include "components/safe_browsing/core/common/features.h" -#include "components/safe_browsing/core/common/safe_browsing_prefs.h" - -namespace enterprise_connectors::test { - -namespace { - -constexpr char kDmToken[] = "dm_token"; - -constexpr base::TimeDelta kMinimumPendingDelay = base::Milliseconds(400); -constexpr base::TimeDelta kSuccessTimeout = base::Milliseconds(100); -constexpr base::TimeDelta kShowDialogDelay = base::Milliseconds(0); - -class UnresponsiveFilesRequestHandler : public FilesRequestHandler { - public: - using FilesRequestHandler::FilesRequestHandler; - - static std::unique_ptr<FilesRequestHandler> Create( - safe_browsing::BinaryUploadService* upload_service, - Profile* profile, - const AnalysisSettings& analysis_settings, - GURL url, - const std::string& source, - const std::string& destination, - const std::string& user_action_id, - const std::string& tab_title, - safe_browsing::DeepScanAccessPoint access_point, - const std::vector<base::FilePath>& paths, - FilesRequestHandler::CompletionCallback callback) { - return base::WrapUnique(new UnresponsiveFilesRequestHandler( - upload_service, profile, analysis_settings, url, source, destination, - user_action_id, tab_title, access_point, paths, std::move(callback))); - } - - private: - void UploadFileForDeepScanning( - safe_browsing::BinaryUploadService::Result result, - const base::FilePath& path, - std::unique_ptr<safe_browsing::BinaryUploadService::Request> request) - override { - // Do nothing. - } -}; - -class UnresponsiveContentAnalysisDelegate : public FakeContentAnalysisDelegate { - public: - using FakeContentAnalysisDelegate::FakeContentAnalysisDelegate; - - static std::unique_ptr<ContentAnalysisDelegate> Create( - base::RepeatingClosure delete_closure, - StatusCallback status_callback, - std::string dm_token, - content::WebContents* web_contents, - Data data, - CompletionCallback callback) { - FilesRequestHandler::SetFactoryForTesting( - base::BindRepeating(&UnresponsiveFilesRequestHandler::Create)); - return std::make_unique<UnresponsiveContentAnalysisDelegate>( - delete_closure, status_callback, std::move(dm_token), web_contents, - std::move(data), std::move(callback)); - } - - private: - void UploadTextForDeepScanning( - std::unique_ptr<safe_browsing::BinaryUploadService::Request> request) - override { - // Do nothing. - } -}; - -} // namespace - -DeepScanningBrowserTestBase::DeepScanningBrowserTestBase() { - // Change the time values of the upload UI to smaller ones to make tests - // showing it run faster. - ContentAnalysisDialog::SetMinimumPendingDialogTimeForTesting( - kMinimumPendingDelay); - ContentAnalysisDialog::SetSuccessDialogTimeoutForTesting(kSuccessTimeout); - ContentAnalysisDialog::SetShowDialogDelayForTesting(kShowDialogDelay); -} - -DeepScanningBrowserTestBase::~DeepScanningBrowserTestBase() = default; - -void DeepScanningBrowserTestBase::TearDownOnMainThread() { - ContentAnalysisDelegate::ResetFactoryForTesting(); - FilesRequestHandler::ResetFactoryForTesting(); - - ClearAnalysisConnector(browser()->profile()->GetPrefs(), FILE_ATTACHED); - ClearAnalysisConnector(browser()->profile()->GetPrefs(), FILE_DOWNLOADED); - ClearAnalysisConnector(browser()->profile()->GetPrefs(), BULK_DATA_ENTRY); - ClearAnalysisConnector(browser()->profile()->GetPrefs(), PRINT); - SetOnSecurityEventReporting(browser()->profile()->GetPrefs(), false); -} - -void DeepScanningBrowserTestBase::SetUpDelegate() { - SetDMTokenForTesting(policy::DMToken::CreateValidToken(kDmToken)); - ContentAnalysisDelegate::SetFactoryForTesting(base::BindRepeating( - &FakeContentAnalysisDelegate::Create, base::DoNothing(), - base::BindRepeating(&DeepScanningBrowserTestBase::StatusCallback, - base::Unretained(this)), - kDmToken)); -} - -void DeepScanningBrowserTestBase::SetUpUnresponsiveDelegate() { - SetDMTokenForTesting(policy::DMToken::CreateValidToken(kDmToken)); - ContentAnalysisDelegate::SetFactoryForTesting(base::BindRepeating( - &UnresponsiveContentAnalysisDelegate::Create, base::DoNothing(), - base::BindRepeating(&DeepScanningBrowserTestBase::StatusCallback, - base::Unretained(this)), - kDmToken)); -} - -void DeepScanningBrowserTestBase::SetQuitClosure( - base::RepeatingClosure quit_closure) { - quit_closure_ = quit_closure; -} - -void DeepScanningBrowserTestBase::CallQuitClosure() { - if (!quit_closure_.is_null()) { - quit_closure_.Run(); - } -} - -void DeepScanningBrowserTestBase::SetStatusCallbackResponse( - ContentAnalysisResponse response) { - connector_status_callback_response_ = response; -} - -ContentAnalysisResponse DeepScanningBrowserTestBase::StatusCallback( - const std::string& contents, - const base::FilePath& path) { - return connector_status_callback_response_; -} - -void DeepScanningBrowserTestBase::CreateFilesForTest( - const std::vector<std::string>& paths, - const std::vector<std::string>& contents, - ContentAnalysisDelegate::Data* data) { - ASSERT_EQ(paths.size(), contents.size()); - - ASSERT_TRUE(temp_dir_.CreateUniqueTempDir()); - - for (size_t i = 0; i < paths.size(); ++i) { - base::FilePath path = temp_dir_.GetPath().AppendASCII(paths[i]); - created_file_paths_.emplace_back(path); - base::File file(path, base::File::FLAG_CREATE | base::File::FLAG_WRITE); - file.WriteAtCurrentPos(contents[i].data(), contents[i].size()); - data->paths.emplace_back(path); - } -} - -const std::vector<base::FilePath>& -DeepScanningBrowserTestBase::created_file_paths() const { - return created_file_paths_; -} - -} // namespace enterprise_connectors::test
diff --git a/chrome/browser/enterprise/connectors/test/fake_files_request_handler.h b/chrome/browser/enterprise/connectors/test/fake_files_request_handler.h deleted file mode 100644 index 57aa3b1..0000000 --- a/chrome/browser/enterprise/connectors/test/fake_files_request_handler.h +++ /dev/null
@@ -1,71 +0,0 @@ -// Copyright 2022 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef CHROME_BROWSER_ENTERPRISE_CONNECTORS_TEST_FAKE_FILES_REQUEST_HANDLER_H_ -#define CHROME_BROWSER_ENTERPRISE_CONNECTORS_TEST_FAKE_FILES_REQUEST_HANDLER_H_ - -#include "base/functional/callback_forward.h" -#include "base/memory/weak_ptr.h" -#include "chrome/browser/enterprise/connectors/analysis/files_request_handler.h" - -namespace enterprise_connectors::test { - -class FakeFilesRequestHandler : public FilesRequestHandler { - public: - using FakeFileRequestCallback = - base::OnceCallback<void(base::FilePath path, - safe_browsing::BinaryUploadService::Result result, - ContentAnalysisResponse response)>; - - using FakeFileUploadCallback = base::RepeatingCallback<void( - safe_browsing::BinaryUploadService::Result result, - const base::FilePath& path, - std::unique_ptr<safe_browsing::BinaryUploadService::Request> request, - FakeFileRequestCallback callback)>; - - FakeFilesRequestHandler(FakeFileUploadCallback fake_file_upload_callback, - safe_browsing::BinaryUploadService* upload_service, - Profile* profile, - const AnalysisSettings& analysis_settings, - GURL url, - const std::string& source, - const std::string& destination, - const std::string& user_action_id, - const std::string& tab_title, - safe_browsing::DeepScanAccessPoint access_point, - const std::vector<base::FilePath>& paths, - CompletionCallback callback); - - ~FakeFilesRequestHandler() override; - - static std::unique_ptr<FilesRequestHandler> Create( - FakeFileUploadCallback fake_file_upload_callback, - safe_browsing::BinaryUploadService* upload_service, - Profile* profile, - const AnalysisSettings& analysis_settings, - GURL url, - const std::string& source, - const std::string& destination, - const std::string& user_action_id, - const std::string& tab_title, - safe_browsing::DeepScanAccessPoint access_point, - const std::vector<base::FilePath>& paths, - FilesRequestHandler::CompletionCallback callback); - - base::WeakPtr<FakeFilesRequestHandler> GetWeakPtr(); - - private: - void UploadFileForDeepScanning( - safe_browsing::BinaryUploadService::Result result, - const base::FilePath& path, - std::unique_ptr<safe_browsing::BinaryUploadService::Request> request) - override; - - FakeFileUploadCallback fake_file_upload_callback_; - base::WeakPtrFactory<FakeFilesRequestHandler> weak_ptr_factory_{this}; -}; - -} // namespace enterprise_connectors::test - -#endif // CHROME_BROWSER_ENTERPRISE_CONNECTORS_TEST_FAKE_FILES_REQUEST_HANDLER_H_
diff --git a/chrome/browser/extensions/api/enterprise_reporting_private/enterprise_reporting_private_apitest.cc b/chrome/browser/extensions/api/enterprise_reporting_private/enterprise_reporting_private_apitest.cc index 3cbbdf4c..934f77e 100644 --- a/chrome/browser/extensions/api/enterprise_reporting_private/enterprise_reporting_private_apitest.cc +++ b/chrome/browser/extensions/api/enterprise_reporting_private/enterprise_reporting_private_apitest.cc
@@ -50,7 +50,7 @@ #endif // BUILDFLAG(IS_WIN) #if !BUILDFLAG(IS_CHROMEOS_ASH) -#include "chrome/browser/enterprise/connectors/test/deep_scanning_test_utils.h" +#include "chrome/browser/safe_browsing/cloud_content_scanning/deep_scanning_test_utils.h" #include "components/enterprise/browser/controller/fake_browser_dm_token_storage.h" #include "components/policy/core/common/cloud/cloud_policy_core.h" #include "components/policy/core/common/cloud/cloud_policy_store.h" @@ -154,8 +154,7 @@ account_info.hosted_domain = "example.com"; identity_test_env()->UpdateAccountInfoForAccount(account_info); - enterprise_connectors::test::SetProfileDMToken(profile(), - "fake_user_dmtoken"); + safe_browsing::SetProfileDMToken(profile(), "fake_user_dmtoken"); auto profile_policy_data = std::make_unique<enterprise_management::PolicyData>(); profile_policy_data->add_user_affiliation_ids(kAffiliationId);
diff --git a/chrome/browser/extensions/api/enterprise_reporting_private/enterprise_reporting_private_browsertest.cc b/chrome/browser/extensions/api/enterprise_reporting_private/enterprise_reporting_private_browsertest.cc index efdf31f..f25982c 100644 --- a/chrome/browser/extensions/api/enterprise_reporting_private/enterprise_reporting_private_browsertest.cc +++ b/chrome/browser/extensions/api/enterprise_reporting_private/enterprise_reporting_private_browsertest.cc
@@ -9,13 +9,13 @@ #include "build/chromeos_buildflags.h" #include "chrome/browser/browser_process.h" #include "chrome/browser/content_settings/host_content_settings_map_factory.h" -#include "chrome/browser/enterprise/connectors/test/deep_scanning_test_utils.h" #include "chrome/browser/enterprise/util/managed_browser_utils.h" #include "chrome/browser/net/profile_network_context_service.h" #include "chrome/browser/net/profile_network_context_service_factory.h" #include "chrome/browser/policy/chrome_browser_policy_connector.h" #include "chrome/browser/policy/policy_test_utils.h" #include "chrome/browser/profiles/profile.h" +#include "chrome/browser/safe_browsing/cloud_content_scanning/deep_scanning_test_utils.h" #include "chrome/browser/ui/browser.h" #include "chrome/common/chrome_features.h" #include "chrome/common/extensions/api/enterprise_reporting_private.h" @@ -198,8 +198,7 @@ profile_policy_manager->core()->client()->SetupRegistration( "dm_token", "client_id", {}); #else - enterprise_connectors::test::SetProfileDMToken(browser()->profile(), - "dm_token"); + safe_browsing::SetProfileDMToken(browser()->profile(), "dm_token"); auto* profile_policy_manager = browser()->profile()->GetUserCloudPolicyManager(); #endif @@ -410,9 +409,9 @@ IN_PROC_BROWSER_TEST_F(EnterpriseReportingPrivateGetContextInfoBaseBrowserTest, TestFileAttachedProviderName) { SetupDMToken(); - enterprise_connectors::test::SetAnalysisConnector( - browser()->profile()->GetPrefs(), enterprise_connectors::FILE_ATTACHED, - kGoogleServiceProvider); + safe_browsing::SetAnalysisConnector(browser()->profile()->GetPrefs(), + enterprise_connectors::FILE_ATTACHED, + kGoogleServiceProvider); auto function = base::MakeRefCounted<EnterpriseReportingPrivateGetContextInfoFunction>(); @@ -437,9 +436,9 @@ IN_PROC_BROWSER_TEST_F(EnterpriseReportingPrivateGetContextInfoBaseBrowserTest, TestFileDownloadedProviderName) { SetupDMToken(); - enterprise_connectors::test::SetAnalysisConnector( - browser()->profile()->GetPrefs(), enterprise_connectors::FILE_DOWNLOADED, - kGoogleServiceProvider); + safe_browsing::SetAnalysisConnector(browser()->profile()->GetPrefs(), + enterprise_connectors::FILE_DOWNLOADED, + kGoogleServiceProvider); auto function = base::MakeRefCounted<EnterpriseReportingPrivateGetContextInfoFunction>(); @@ -464,9 +463,9 @@ IN_PROC_BROWSER_TEST_F(EnterpriseReportingPrivateGetContextInfoBaseBrowserTest, TestBulkDataEntryProviderName) { SetupDMToken(); - enterprise_connectors::test::SetAnalysisConnector( - browser()->profile()->GetPrefs(), enterprise_connectors::BULK_DATA_ENTRY, - kGoogleServiceProvider); + safe_browsing::SetAnalysisConnector(browser()->profile()->GetPrefs(), + enterprise_connectors::BULK_DATA_ENTRY, + kGoogleServiceProvider); auto function = base::MakeRefCounted<EnterpriseReportingPrivateGetContextInfoFunction>(); @@ -491,9 +490,9 @@ IN_PROC_BROWSER_TEST_F(EnterpriseReportingPrivateGetContextInfoBaseBrowserTest, TestPrintProviderName) { SetupDMToken(); - enterprise_connectors::test::SetAnalysisConnector( - browser()->profile()->GetPrefs(), enterprise_connectors::PRINT, - kGoogleServiceProvider); + safe_browsing::SetAnalysisConnector(browser()->profile()->GetPrefs(), + enterprise_connectors::PRINT, + kGoogleServiceProvider); auto function = base::MakeRefCounted<EnterpriseReportingPrivateGetContextInfoFunction>(); @@ -518,18 +517,18 @@ IN_PROC_BROWSER_TEST_F(EnterpriseReportingPrivateGetContextInfoBaseBrowserTest, TestAllProviderNamesSet) { SetupDMToken(); - enterprise_connectors::test::SetAnalysisConnector( - browser()->profile()->GetPrefs(), enterprise_connectors::BULK_DATA_ENTRY, - kGoogleServiceProvider); - enterprise_connectors::test::SetAnalysisConnector( - browser()->profile()->GetPrefs(), enterprise_connectors::FILE_ATTACHED, - kOtherServiceProvider); - enterprise_connectors::test::SetAnalysisConnector( - browser()->profile()->GetPrefs(), enterprise_connectors::FILE_DOWNLOADED, - kAnotherServiceProvider); - enterprise_connectors::test::SetAnalysisConnector( - browser()->profile()->GetPrefs(), enterprise_connectors::PRINT, - kAndAnotherServiceProvider); + safe_browsing::SetAnalysisConnector(browser()->profile()->GetPrefs(), + enterprise_connectors::BULK_DATA_ENTRY, + kGoogleServiceProvider); + safe_browsing::SetAnalysisConnector(browser()->profile()->GetPrefs(), + enterprise_connectors::FILE_ATTACHED, + kOtherServiceProvider); + safe_browsing::SetAnalysisConnector(browser()->profile()->GetPrefs(), + enterprise_connectors::FILE_DOWNLOADED, + kAnotherServiceProvider); + safe_browsing::SetAnalysisConnector(browser()->profile()->GetPrefs(), + enterprise_connectors::PRINT, + kAndAnotherServiceProvider); auto function = base::MakeRefCounted<EnterpriseReportingPrivateGetContextInfoFunction>(); @@ -578,9 +577,8 @@ IN_PROC_BROWSER_TEST_F(EnterpriseReportingPrivateGetContextInfoBaseBrowserTest, TestOnSecurityEventProviderNameSet) { SetupDMToken(); - enterprise_connectors::test::SetOnSecurityEventReporting( - browser()->profile()->GetPrefs(), - /* enabled= */ true); + safe_browsing::SetOnSecurityEventReporting(browser()->profile()->GetPrefs(), + /* enabled= */ true); auto function = base::MakeRefCounted<EnterpriseReportingPrivateGetContextInfoFunction>(); @@ -595,7 +593,7 @@ context_info_value->GetDict(), info)); EXPECT_EQ(1UL, info.on_security_event_providers.size()); - // test::SetOnSecurityEventReporting sets the provider name to google + // SetOnSecurityEventReporting sets the provider name to google EXPECT_EQ("google", info.on_security_event_providers[0]); }
diff --git a/chrome/browser/extensions/api/safe_browsing_private/safe_browsing_private_event_router_unittest.cc b/chrome/browser/extensions/api/safe_browsing_private/safe_browsing_private_event_router_unittest.cc index 6ef1f8c6..947bedd1 100644 --- a/chrome/browser/extensions/api/safe_browsing_private/safe_browsing_private_event_router_unittest.cc +++ b/chrome/browser/extensions/api/safe_browsing_private/safe_browsing_private_event_router_unittest.cc
@@ -25,9 +25,9 @@ #include "chrome/browser/enterprise/connectors/connectors_service.h" #include "chrome/browser/enterprise/connectors/reporting/realtime_reporting_client.h" #include "chrome/browser/enterprise/connectors/reporting/realtime_reporting_client_factory.h" -#include "chrome/browser/enterprise/connectors/test/deep_scanning_test_utils.h" #include "chrome/browser/extensions/api/safe_browsing_private/safe_browsing_private_event_router_factory.h" #include "chrome/browser/policy/dm_token_utils.h" +#include "chrome/browser/safe_browsing/cloud_content_scanning/deep_scanning_test_utils.h" #include "chrome/browser/safe_browsing/cloud_content_scanning/deep_scanning_utils.h" #include "chrome/browser/safe_browsing/test_extension_event_observer.h" #include "chrome/common/chrome_switches.h" @@ -262,9 +262,9 @@ const std::map<std::string, std::vector<std::string>>& enabled_opt_in_events = std::map<std::string, std::vector<std::string>>()) { - enterprise_connectors::test::SetOnSecurityEventReporting( - profile_->GetPrefs(), enabled, enabled_event_names, - enabled_opt_in_events); + safe_browsing::SetOnSecurityEventReporting(profile_->GetPrefs(), enabled, + enabled_event_names, + enabled_opt_in_events); // If we are not enabling reporting, or if the client has already been // set for testing, just return. @@ -816,7 +816,7 @@ identity_test_environment.MakePrimaryAccountAvailable( profile_->GetProfileUserName(), signin::ConsentLevel::kSignin); - enterprise_connectors::test::EventReportValidator validator(client_.get()); + safe_browsing::EventReportValidator validator(client_.get()); validator.ExpectLoginEvent("https://www.example.com/", false, "", profile_->GetProfileUserName(), GetProfileIdentifier(), u"*****"); @@ -839,7 +839,7 @@ identity_test_environment.MakePrimaryAccountAvailable( profile_->GetProfileUserName(), signin::ConsentLevel::kSignin); - enterprise_connectors::test::EventReportValidator validator(client_.get()); + safe_browsing::EventReportValidator validator(client_.get()); validator.ExpectNoReport(); TriggerOnLoginEvent(GURL("https://www.example.com/"), u"login-username"); @@ -860,7 +860,7 @@ identity_test_environment.MakePrimaryAccountAvailable( profile_->GetProfileUserName(), signin::ConsentLevel::kSignin); - enterprise_connectors::test::EventReportValidator validator(client_.get()); + safe_browsing::EventReportValidator validator(client_.get()); validator.ExpectLoginEvent("https://www.example.com/", false, "", profile_->GetProfileUserName(), GetProfileIdentifier(), u"*****@example.com"); @@ -883,7 +883,7 @@ identity_test_environment.MakePrimaryAccountAvailable( profile_->GetProfileUserName(), signin::ConsentLevel::kSignin); - enterprise_connectors::test::EventReportValidator validator(client_.get()); + safe_browsing::EventReportValidator validator(client_.get()); validator.ExpectLoginEvent( "https://www.example.com/", true, "https://www.google.com", profile_->GetProfileUserName(), GetProfileIdentifier(), u"*****"); @@ -906,7 +906,7 @@ identity_test_environment.MakePrimaryAccountAvailable( profile_->GetProfileUserName(), signin::ConsentLevel::kSignin); - enterprise_connectors::test::EventReportValidator validator(client_.get()); + safe_browsing::EventReportValidator validator(client_.get()); validator.ExpectPasswordBreachEvent( "SAFETY_CHECK", { @@ -938,7 +938,7 @@ identity_test_environment.MakePrimaryAccountAvailable( profile_->GetProfileUserName(), signin::ConsentLevel::kSignin); - enterprise_connectors::test::EventReportValidator validator(client_.get()); + safe_browsing::EventReportValidator validator(client_.get()); validator.ExpectNoReport(); TriggerOnPasswordBreachEvent( @@ -967,7 +967,7 @@ // The event is only enabled on secondexample.com, so expect only the // information related to that origin to be reported. - enterprise_connectors::test::EventReportValidator validator(client_.get()); + safe_browsing::EventReportValidator validator(client_.get()); validator.ExpectPasswordBreachEvent( "SAFETY_CHECK", {
diff --git a/chrome/browser/k_anonymity_service/k_anonymity_service_client.cc b/chrome/browser/k_anonymity_service/k_anonymity_service_client.cc index c3c9b55..86f0cedf 100644 --- a/chrome/browser/k_anonymity_service/k_anonymity_service_client.cc +++ b/chrome/browser/k_anonymity_service/k_anonymity_service_client.cc
@@ -18,6 +18,9 @@ #include "chrome/browser/k_anonymity_service/remote_trust_token_query_answerer.h" #include "chrome/browser/signin/identity_manager_factory.h" #include "chrome/common/chrome_features.h" +#include "components/signin/public/identity_manager/account_info.h" +#include "components/signin/public/identity_manager/identity_manager.h" +#include "components/signin/public/identity_manager/tribool.h" #include "content/public/browser/browser_thread.h" #include "content/public/browser/storage_partition.h" #include "crypto/sha2.h" @@ -192,10 +195,6 @@ &trust_token_answerer_, storage_.get()), profile_(profile) { - // We are currently relying on callers of this service to limit which users - // are allowed to use this service. No children should use this service - // since we are not approved to process their data. - DCHECK(!profile->IsChild()); join_origin_ = url::Origin::Create(GURL(features::kKAnonymityServiceJoinServer.Get())); DCHECK(!join_origin_.opaque()); @@ -206,8 +205,27 @@ KAnonymityServiceClient::~KAnonymityServiceClient() = default; +bool KAnonymityServiceClient::CanUseKAnonymityService(Profile* profile) { + signin::IdentityManager* identity_manager = + IdentityManagerFactory::GetForProfile(profile); + if (!identity_manager) { + return false; + } + const AccountInfo account_info = identity_manager->FindExtendedAccountInfo( + identity_manager->GetPrimaryAccountInfo(signin::ConsentLevel::kSignin)); + auto capability = + account_info.capabilities.can_run_chrome_privacy_sandbox_trials(); + return capability == signin::Tribool::kTrue; +} + void KAnonymityServiceClient::JoinSet(std::string id, base::OnceCallback<void(bool)> callback) { + if (!CanUseKAnonymityService(profile_)) { + base::SequencedTaskRunner::GetCurrentDefault()->PostTask( + FROM_HERE, base::BindOnce(std::move(callback), false)); + return; + } + RecordJoinSetAction(KAnonymityServiceJoinSetAction::kJoinSet); // Fail immediately if the queue is full. @@ -428,6 +446,12 @@ void KAnonymityServiceClient::QuerySets( std::vector<std::string> set_ids, base::OnceCallback<void(std::vector<bool>)> callback) { + if (!CanUseKAnonymityService(profile_)) { + base::SequencedTaskRunner::GetCurrentDefault()->PostTask( + FROM_HERE, base::BindOnce(std::move(callback), std::vector<bool>())); + return; + } + RecordQuerySetAction(KAnonymityServiceQuerySetAction::kQuerySet); RecordQuerySetSize(set_ids.size());
diff --git a/chrome/browser/k_anonymity_service/k_anonymity_service_client.h b/chrome/browser/k_anonymity_service/k_anonymity_service_client.h index 3d11d0b..4fa9e50 100644 --- a/chrome/browser/k_anonymity_service/k_anonymity_service_client.h +++ b/chrome/browser/k_anonymity_service/k_anonymity_service_client.h
@@ -77,6 +77,12 @@ base::TimeDelta GetJoinInterval() override; base::TimeDelta GetQueryInterval() override; + // Returns true if the profile is allowed to use the k-anonymity service. This + // currently checks if the primary profile CanRunChromePrivacySandboxTrials. + // This is partially to prevent exposing minors' data to the k-anonymity + // service. + static bool CanUseKAnonymityService(Profile* profile); + private: struct PendingJoinRequest { PendingJoinRequest(std::string set_id,
diff --git a/chrome/browser/k_anonymity_service/k_anonymity_service_client_unittest.cc b/chrome/browser/k_anonymity_service/k_anonymity_service_client_unittest.cc index 96772d8..5619826 100644 --- a/chrome/browser/k_anonymity_service/k_anonymity_service_client_unittest.cc +++ b/chrome/browser/k_anonymity_service/k_anonymity_service_client_unittest.cc
@@ -10,11 +10,14 @@ #include "base/test/bind.h" #include "base/test/metrics/histogram_tester.h" #include "chrome/browser/k_anonymity_service/k_anonymity_service_metrics.h" +#include "chrome/browser/signin/identity_manager_factory.h" #include "chrome/browser/signin/identity_test_environment_profile_adaptor.h" #include "chrome/common/chrome_features.h" #include "chrome/test/base/testing_browser_process.h" #include "chrome/test/base/testing_profile.h" #include "chrome/test/base/testing_profile_manager.h" +#include "components/signin/public/identity_manager/account_capabilities_test_mutator.h" +#include "components/signin/public/identity_manager/identity_manager.h" #include "content/public/browser/k_anonymity_service_delegate.h" #include "content/public/browser/storage_partition.h" #include "content/public/test/browser_task_environment.h" @@ -51,17 +54,25 @@ } void InitializeIdentity(bool signed_on) { + const std::string kTestEmail = "user@gmail.com"; auto identity_test_env_adaptor = std::make_unique<IdentityTestEnvironmentProfileAdaptor>(profile_.get()); auto* identity_test_env = identity_test_env_adaptor->identity_test_env(); auto* identity_manager = identity_test_env->identity_manager(); identity_test_env->SetAutomaticIssueOfAccessTokens(true); + if (signed_on) { identity_test_env->MakePrimaryAccountAvailable( - "user@gmail.com", signin::ConsentLevel::kSignin); + kTestEmail, signin::ConsentLevel::kSignin); ASSERT_TRUE( identity_manager->HasPrimaryAccount(signin::ConsentLevel::kSignin)); EXPECT_EQ(1U, identity_manager->GetAccountsWithRefreshTokens().size()); + + auto account_info = + identity_manager->FindExtendedAccountInfoByEmailAddress(kTestEmail); + AccountCapabilitiesTestMutator mutator(&account_info.capabilities); + mutator.set_can_run_chrome_privacy_sandbox_trials(true); + signin::UpdateAccountInfoForAccount(identity_manager, account_info); } } @@ -152,7 +163,9 @@ data_decoder::test::InProcessDataDecoder decoder_; }; -TEST_F(KAnonymityServiceClientTest, TryJoinSetFetchTokenFails) { +// JoinSet fails because the user is not logged in and doesn't have the +// capability needed to use the K-AnonymityService. +TEST_F(KAnonymityServiceClientTest, TryJoinSetFails) { InitializeIdentity(false); KAnonymityServiceClient k_service(profile()); base::HistogramTester hist; @@ -165,10 +178,7 @@ })); run_loop.Run(); EXPECT_EQ(0, GetNumPendingURLRequests()); - CheckJoinSetHistogramActions( - hist, { - {KAnonymityServiceJoinSetAction::kJoinSet, 1}, - }); + CheckJoinSetHistogramActions(hist, {}); } TEST_F(KAnonymityServiceClientTest, TryJoinSetSuccess) { @@ -316,7 +326,29 @@ {KAnonymityServiceJoinSetAction::kJoinSetQueueFull, 1}}); } +// Query fails because the user is not logged in and doesn't have the +// capability needed to use the K-AnonymityService. +TEST_F(KAnonymityServiceClientTest, TryQuerySetFailed) { + KAnonymityServiceClient k_service(profile()); + + base::HistogramTester hist; + base::RunLoop run_loop; + std::vector<std::string> sets; + sets.push_back("1"); + sets.push_back("2"); + k_service.QuerySets( + std::move(sets), + base::BindLambdaForTesting([&run_loop](std::vector<bool> result) { + run_loop.Quit(); + EXPECT_EQ(0u, result.size()); + })); + run_loop.Run(); + EXPECT_EQ(0, GetNumPendingURLRequests()); + CheckQuerySetHistogramActions(hist, {}); +} + TEST_F(KAnonymityServiceClientTest, TryQuerySetAllNotKAnon) { + InitializeIdentity(true); KAnonymityServiceClient k_service(profile()); base::HistogramTester hist; @@ -753,6 +785,7 @@ } TEST_F(KAnonymityServiceClientJoinQueryTest, TryQuerySetBadResponse) { + InitializeIdentity(true); base::HistogramTester hist; std::vector<std::string> sets; sets.push_back("1"); @@ -833,6 +866,7 @@ } TEST_F(KAnonymityServiceClientJoinQueryTest, TryQuerySet) { + InitializeIdentity(true); KAnonymityServiceClient k_service(profile()); base::HistogramTester hist; std::vector<std::string> sets; @@ -863,6 +897,7 @@ } TEST_F(KAnonymityServiceClientJoinQueryTest, TryQuerySetMultipleSets) { + InitializeIdentity(true); KAnonymityServiceClient k_service(profile()); base::HistogramTester hist; std::vector<std::string> sets; @@ -913,6 +948,7 @@ } TEST_F(KAnonymityServiceClientJoinQueryTest, TryQuerySetCoalescesSplitSets) { + InitializeIdentity(true); KAnonymityServiceClient k_service(profile()); base::HistogramTester hist; std::vector<std::string> sets; @@ -953,6 +989,7 @@ TEST_F(KAnonymityServiceClientJoinQueryTest, TryQuerySetSingleFailureDropsAllRequests) { + InitializeIdentity(true); KAnonymityServiceClient k_service(profile()); base::HistogramTester hist; std::vector<std::string> sets; @@ -987,8 +1024,11 @@ {KAnonymityServiceQuerySetAction::kFetchQuerySetOHTTPKeyFailed, 1}}); } +// This test is disabled as the current policy blocks running in OTR mode +// entirely. +// TODO(behamilton): Re-enable this test when we are allowed to run in OTR mode. TEST_F(KAnonymityServiceClientJoinQueryTest, - StorageDoesNotPersistWhenOffTheRecord) { + DISABLED_StorageDoesNotPersistWhenOffTheRecord) { CreateOffTheRecordProfile(); std::vector<std::string> sets; sets.push_back("1");
diff --git a/chrome/browser/k_anonymity_service/k_anonymity_service_factory.cc b/chrome/browser/k_anonymity_service/k_anonymity_service_factory.cc index 2098ec3..69f1b37 100644 --- a/chrome/browser/k_anonymity_service/k_anonymity_service_factory.cc +++ b/chrome/browser/k_anonymity_service/k_anonymity_service_factory.cc
@@ -16,6 +16,7 @@ #include "components/keyed_service/core/keyed_service.h" #include "content/public/browser/browser_context.h" #include "content/public/browser/k_anonymity_service_delegate.h" +#include "k_anonymity_service_client.h" namespace { ProfileSelections BuildKAnonymityServiceProfileSelections() { @@ -61,7 +62,7 @@ KeyedService* KAnonymityServiceFactory::BuildServiceInstanceFor( content::BrowserContext* context) const { Profile* profile = Profile::FromBrowserContext(context); - if (!profile || profile->IsChild()) { + if (!KAnonymityServiceClient::CanUseKAnonymityService(profile)) { return nullptr; } return new KAnonymityServiceClient(Profile::FromBrowserContext(context));
diff --git a/chrome/browser/metrics/chrome_feature_list_creator.cc b/chrome/browser/metrics/chrome_feature_list_creator.cc index 07f7104..19c6908 100644 --- a/chrome/browser/metrics/chrome_feature_list_creator.cc +++ b/chrome/browser/metrics/chrome_feature_list_creator.cc
@@ -88,8 +88,8 @@ {switches::kEnablePrivacySandboxAdsApis, std::cref(privacy_sandbox::kOverridePrivacySandboxSettingsLocalTesting), base::FeatureList::OVERRIDE_ENABLE_FEATURE}, - // Enabled FedCM when the --block-third-party-cookies switch is used. - {network::switches::kBlockThirdPartyCookies, + // Enable FedCM to test behavior for third-party cookie phaseout. + {network::switches::kTestThirdPartyCookiePhaseout, std::cref(features::kFedCmWithoutThirdPartyCookies), base::FeatureList::OVERRIDE_ENABLE_FEATURE}, };
diff --git a/chrome/browser/net/cookie_policy_browsertest.cc b/chrome/browser/net/cookie_policy_browsertest.cc index b4ef928..ebb98f37 100644 --- a/chrome/browser/net/cookie_policy_browsertest.cc +++ b/chrome/browser/net/cookie_policy_browsertest.cc
@@ -9,6 +9,7 @@ #include "base/strings/strcat.h" #include "base/strings/stringprintf.h" #include "base/test/metrics/histogram_tester.h" +#include "base/test/scoped_feature_list.h" #include "chrome/browser/content_settings/cookie_settings_factory.h" #include "chrome/browser/net/storage_test_utils.h" #include "chrome/browser/profiles/profile.h" @@ -698,6 +699,37 @@ ExpectStorage(GetNestedFrame(), true); } +class ThirdPartyCookiePhaseoutPolicyStorageBrowserTest + : public CookiePolicyBrowserTest { + protected: + ThirdPartyCookiePhaseoutPolicyStorageBrowserTest() { + feature_list_.InitWithFeatures( + { + net::features::kForceThirdPartyCookieBlocking, + net::features::kThirdPartyStoragePartitioning, + }, + {}); + } + + private: + base::test::ScopedFeatureList feature_list_; +}; + +IN_PROC_BROWSER_TEST_F(ThirdPartyCookiePhaseoutPolicyStorageBrowserTest, + ForceThirdPartyCookieBlocking) { + NavigateToPageWithFrame(kHostA); + NavigateFrameTo(kHostB, "/iframe.html"); + NavigateNestedFrameTo(kHostA, "/browsing_data/site_data.html"); + + // Test that we can access storage. This feature's impact on cookies is tested + // separately from this file. + storage::test::SetStorageForFrame(GetNestedFrame(), + /*include_cookies=*/false); + storage::test::ExpectStorageForFrame(GetNestedFrame(), + /*include_cookies=*/false, + /*expected=*/true); +} + INSTANTIATE_TEST_SUITE_P(, CookiePolicyStorageBrowserTest, testing::Values(ContextType::kFrame,
diff --git a/chrome/browser/password_manager/android/pwd_migration/java/src/org/chromium/chrome/browser/pwd_migration/PasswordMigrationWarningMediator.java b/chrome/browser/password_manager/android/pwd_migration/java/src/org/chromium/chrome/browser/pwd_migration/PasswordMigrationWarningMediator.java index c730b13e..689715e 100644 --- a/chrome/browser/password_manager/android/pwd_migration/java/src/org/chromium/chrome/browser/pwd_migration/PasswordMigrationWarningMediator.java +++ b/chrome/browser/password_manager/android/pwd_migration/java/src/org/chromium/chrome/browser/pwd_migration/PasswordMigrationWarningMediator.java
@@ -7,6 +7,7 @@ import static org.chromium.chrome.browser.pwd_migration.PasswordMigrationWarningProperties.CURRENT_SCREEN; import static org.chromium.chrome.browser.pwd_migration.PasswordMigrationWarningProperties.VISIBLE; +import org.chromium.chrome.browser.pwd_migration.PasswordMigrationWarningProperties.MigrationOption; import org.chromium.chrome.browser.pwd_migration.PasswordMigrationWarningProperties.ScreenType; import org.chromium.components.browser_ui.bottomsheet.BottomSheetController; import org.chromium.components.browser_ui.bottomsheet.BottomSheetController.StateChangeReason; @@ -47,7 +48,8 @@ } @Override - public void onNext() { + public void onNext(@MigrationOption int selectedOption) { + mModel.set(VISIBLE, false); // TODO(crbug.com/1445065): Launch the password Export flow. }
diff --git a/chrome/browser/password_manager/android/pwd_migration/java/src/org/chromium/chrome/browser/pwd_migration/PasswordMigrationWarningMediatorTest.java b/chrome/browser/password_manager/android/pwd_migration/java/src/org/chromium/chrome/browser/pwd_migration/PasswordMigrationWarningMediatorTest.java index 97d409d..7fc51a02 100644 --- a/chrome/browser/password_manager/android/pwd_migration/java/src/org/chromium/chrome/browser/pwd_migration/PasswordMigrationWarningMediatorTest.java +++ b/chrome/browser/password_manager/android/pwd_migration/java/src/org/chromium/chrome/browser/pwd_migration/PasswordMigrationWarningMediatorTest.java
@@ -26,6 +26,7 @@ import org.chromium.base.test.BaseRobolectricTestRunner; import org.chromium.base.test.util.Batch; +import org.chromium.chrome.browser.pwd_migration.PasswordMigrationWarningProperties.MigrationOption; import org.chromium.chrome.browser.pwd_migration.PasswordMigrationWarningProperties.ScreenType; import org.chromium.chrome.test.util.browser.Features; import org.chromium.components.browser_ui.bottomsheet.BottomSheetController; @@ -90,13 +91,25 @@ @Test public void testOnAcknowledgeHidesTheSheet() { + mMediator.showWarning(ScreenType.INTRO_SCREEN); + assertTrue(mModel.get(VISIBLE)); mMediator.onAcknowledge(mBottomSheetController); assertFalse(mModel.get(VISIBLE)); } @Test public void testOnCancelHidesTheSheet() { + mMediator.showWarning(ScreenType.INTRO_SCREEN); + assertTrue(mModel.get(VISIBLE)); mMediator.onCancel(mBottomSheetController); assertFalse(mModel.get(VISIBLE)); } + + @Test + public void testOnNextDismissesTheSheet() { + mMediator.showWarning(ScreenType.INTRO_SCREEN); + assertTrue(mModel.get(VISIBLE)); + mMediator.onNext(MigrationOption.SYNC_PASSWORDS); + assertFalse(mModel.get(VISIBLE)); + } }
diff --git a/chrome/browser/password_manager/android/pwd_migration/java/src/org/chromium/chrome/browser/pwd_migration/PasswordMigrationWarningOnClickHandler.java b/chrome/browser/password_manager/android/pwd_migration/java/src/org/chromium/chrome/browser/pwd_migration/PasswordMigrationWarningOnClickHandler.java index e726d766..e2494d8d 100644 --- a/chrome/browser/password_manager/android/pwd_migration/java/src/org/chromium/chrome/browser/pwd_migration/PasswordMigrationWarningOnClickHandler.java +++ b/chrome/browser/password_manager/android/pwd_migration/java/src/org/chromium/chrome/browser/pwd_migration/PasswordMigrationWarningOnClickHandler.java
@@ -4,6 +4,7 @@ package org.chromium.chrome.browser.pwd_migration; +import org.chromium.chrome.browser.pwd_migration.PasswordMigrationWarningProperties.MigrationOption; import org.chromium.components.browser_ui.bottomsheet.BottomSheetController; /** @@ -28,8 +29,10 @@ /** * Starts the sign-in/sync flow or the export flow depending on the user * choice in the screen with more options. + * + * @param selectedOption is the flow that the user wants to proceed with. */ - void onNext(); + void onNext(@MigrationOption int selectedOption); /** * Closes the sheet when the "Cancel" button is clicked, but doesn't mark
diff --git a/chrome/browser/password_manager/android/pwd_migration/java/src/org/chromium/chrome/browser/pwd_migration/PasswordMigrationWarningOptionsFragment.java b/chrome/browser/password_manager/android/pwd_migration/java/src/org/chromium/chrome/browser/pwd_migration/PasswordMigrationWarningOptionsFragment.java index 6122bf7..cd2b9ef 100644 --- a/chrome/browser/password_manager/android/pwd_migration/java/src/org/chromium/chrome/browser/pwd_migration/PasswordMigrationWarningOptionsFragment.java +++ b/chrome/browser/password_manager/android/pwd_migration/java/src/org/chromium/chrome/browser/pwd_migration/PasswordMigrationWarningOptionsFragment.java
@@ -11,6 +11,8 @@ import androidx.annotation.Nullable; import androidx.fragment.app.Fragment; +import org.chromium.base.Callback; +import org.chromium.chrome.browser.pwd_migration.PasswordMigrationWarningProperties.MigrationOption; import org.chromium.components.browser_ui.widget.RadioButtonWithDescription; /** @@ -21,12 +23,14 @@ */ public class PasswordMigrationWarningOptionsFragment extends Fragment { private Context mContext; - private Runnable mNextCallback; + private Callback<Integer> mNextCallback; private Runnable mCancelCallback; private String mChannelString; + private RadioButtonWithDescription mSignInOrSyncButton; + private RadioButtonWithDescription mPasswordExportButton; - public PasswordMigrationWarningOptionsFragment( - Context context, Runnable nextCallback, Runnable cancelCallback, String channelString) { + public PasswordMigrationWarningOptionsFragment(Context context, Callback<Integer> nextCallback, + Runnable cancelCallback, String channelString) { super(R.layout.pwd_migration_warning_options); mContext = context; mNextCallback = nextCallback; @@ -36,18 +40,24 @@ @Override public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { - RadioButtonWithDescription signInOrSyncButton = - view.findViewById(R.id.radio_sign_in_or_sync); - RadioButtonWithDescription passwordExportButton = - view.findViewById(R.id.radio_password_export); + mSignInOrSyncButton = view.findViewById(R.id.radio_sign_in_or_sync); + mPasswordExportButton = view.findViewById(R.id.radio_password_export); Button nextButton = view.findViewById(R.id.password_migration_next_button); Button cancelButton = view.findViewById(R.id.password_migration_cancel_button); - signInOrSyncButton.setChecked(true); - passwordExportButton.setDescriptionText( + mSignInOrSyncButton.setChecked(true); + mPasswordExportButton.setDescriptionText( mContext.getString(R.string.password_migration_warning_password_export_subtitle) .replace("%1$s", mChannelString)); - nextButton.setOnClickListener((unusedView) -> mNextCallback.run()); + nextButton.setOnClickListener((unusedView) -> handleOptionSelected()); cancelButton.setOnClickListener((unusedView) -> mCancelCallback.run()); } + + private void handleOptionSelected() { + if (mSignInOrSyncButton.isChecked()) { + mNextCallback.onResult(MigrationOption.SYNC_PASSWORDS); + } else if (mPasswordExportButton.isChecked()) { + mNextCallback.onResult(MigrationOption.EXPORT_AND_DELETE); + } + } }
diff --git a/chrome/browser/password_manager/android/pwd_migration/java/src/org/chromium/chrome/browser/pwd_migration/PasswordMigrationWarningProperties.java b/chrome/browser/password_manager/android/pwd_migration/java/src/org/chromium/chrome/browser/pwd_migration/PasswordMigrationWarningProperties.java index 2f78a20..d95b7ee 100644 --- a/chrome/browser/password_manager/android/pwd_migration/java/src/org/chromium/chrome/browser/pwd_migration/PasswordMigrationWarningProperties.java +++ b/chrome/browser/password_manager/android/pwd_migration/java/src/org/chromium/chrome/browser/pwd_migration/PasswordMigrationWarningProperties.java
@@ -19,6 +19,13 @@ * Properties defined here reflect the visible state of the local passwords migration warning. */ class PasswordMigrationWarningProperties { + @IntDef({MigrationOption.SYNC_PASSWORDS, MigrationOption.EXPORT_AND_DELETE}) + @Retention(RetentionPolicy.SOURCE) + public @interface MigrationOption { + int SYNC_PASSWORDS = 0; + int EXPORT_AND_DELETE = 1; + } + /** * The different screens that can be shown on the sheet. */
diff --git a/chrome/browser/password_manager/android/pwd_migration/java/src/org/chromium/chrome/browser/pwd_migration/PasswordMigrationWarningViewTest.java b/chrome/browser/password_manager/android/pwd_migration/java/src/org/chromium/chrome/browser/pwd_migration/PasswordMigrationWarningViewTest.java index 1efcb7b8..ace7019 100644 --- a/chrome/browser/password_manager/android/pwd_migration/java/src/org/chromium/chrome/browser/pwd_migration/PasswordMigrationWarningViewTest.java +++ b/chrome/browser/password_manager/android/pwd_migration/java/src/org/chromium/chrome/browser/pwd_migration/PasswordMigrationWarningViewTest.java
@@ -5,6 +5,7 @@ package org.chromium.chrome.browser.pwd_migration; import static androidx.test.espresso.Espresso.onView; +import static androidx.test.espresso.action.ViewActions.click; import static androidx.test.espresso.assertion.ViewAssertions.matches; import static androidx.test.espresso.matcher.ViewMatchers.assertThat; import static androidx.test.espresso.matcher.ViewMatchers.isDisplayed; @@ -36,6 +37,7 @@ import org.chromium.base.test.util.Batch; import org.chromium.base.test.util.CommandLineFlags; import org.chromium.chrome.browser.flags.ChromeSwitches; +import org.chromium.chrome.browser.pwd_migration.PasswordMigrationWarningProperties.MigrationOption; import org.chromium.chrome.browser.pwd_migration.PasswordMigrationWarningProperties.ScreenType; import org.chromium.chrome.test.ChromeJUnit4ClassRunner; import org.chromium.chrome.test.ChromeTabbedActivityTestRule; @@ -147,13 +149,67 @@ R.id.password_migration_cancel_button) != null); onView(withId(R.id.radio_button_layout)).check(matches(isDisplayed())); - RadioButtonWithDescription signInOrSyncButton = - mActivityTestRule.getActivity().findViewById(R.id.radio_sign_in_or_sync); - assertTrue(signInOrSyncButton.isChecked()); + runOnUiThreadBlocking(() -> { + RadioButtonWithDescription signInOrSyncButton = + mActivityTestRule.getActivity().findViewById(R.id.radio_sign_in_or_sync); + assertTrue(signInOrSyncButton.isChecked()); + }); onView(withId(R.id.password_migration_next_button)).check(matches(isDisplayed())); onView(withId(R.id.password_migration_cancel_button)).check(matches(isDisplayed())); } + @Test + @MediumTest + public void testNextButtonPropagatesSyncOption() { + // The sheet is shown. + runOnUiThreadBlocking(() -> mModel.set(VISIBLE, true)); + BottomSheetTestSupport.waitForOpen(mBottomSheetController); + // Setting the options screen. + runOnUiThreadBlocking(() -> mModel.set(CURRENT_SCREEN, ScreenType.OPTIONS_SCREEN)); + // The test waits for the fragment containing the button to be attached. + pollUiThread(() + -> mActivityTestRule.getActivity().findViewById( + R.id.password_migration_cancel_button) + != null); + onView(withId(R.id.radio_button_layout)).check(matches(isDisplayed())); + + // Verify that the sync button is checked by default. + runOnUiThreadBlocking(() -> { + RadioButtonWithDescription signInOrSyncButton = + mActivityTestRule.getActivity().findViewById(R.id.radio_sign_in_or_sync); + assertTrue(signInOrSyncButton.isChecked()); + }); + + onView(withId(R.id.password_migration_next_button)).perform(click()); + verify(mOnClickHandler).onNext(MigrationOption.SYNC_PASSWORDS); + } + + @Test + @MediumTest + public void testNextButtonPropagatesExportOption() { + // The sheet is shown. + runOnUiThreadBlocking(() -> mModel.set(VISIBLE, true)); + BottomSheetTestSupport.waitForOpen(mBottomSheetController); + // Setting the options screen. + runOnUiThreadBlocking(() -> mModel.set(CURRENT_SCREEN, ScreenType.OPTIONS_SCREEN)); + // The test waits for the fragment containing the button to be attached. + pollUiThread(() + -> mActivityTestRule.getActivity().findViewById( + R.id.password_migration_cancel_button) + != null); + onView(withId(R.id.radio_button_layout)).check(matches(isDisplayed())); + + // Select the export button. + runOnUiThreadBlocking(() -> { + RadioButtonWithDescription exportButton = + mActivityTestRule.getActivity().findViewById(R.id.radio_password_export); + exportButton.setChecked(true); + }); + + onView(withId(R.id.password_migration_next_button)).perform(click()); + verify(mOnClickHandler).onNext(MigrationOption.EXPORT_AND_DELETE); + } + /** * Checks that no crash happens and everything works as expected if CURRENT_SCREEN will be set * first. It can happen in production, because the order is not guaranteed.
diff --git a/chrome/browser/printing/system_access_process_print_browsertest.cc b/chrome/browser/printing/system_access_process_print_browsertest.cc index 73c39de..27de39b 100644 --- a/chrome/browser/printing/system_access_process_print_browsertest.cc +++ b/chrome/browser/printing/system_access_process_print_browsertest.cc
@@ -47,10 +47,10 @@ #endif #if BUILDFLAG(ENABLE_PRINT_CONTENT_ANALYSIS) +#include "chrome/browser/enterprise/connectors/analysis/fake_content_analysis_delegate.h" #include "chrome/browser/enterprise/connectors/common.h" -#include "chrome/browser/enterprise/connectors/test/deep_scanning_test_utils.h" -#include "chrome/browser/enterprise/connectors/test/fake_content_analysis_delegate.h" #include "chrome/browser/policy/dm_token_utils.h" +#include "chrome/browser/safe_browsing/cloud_content_scanning/deep_scanning_test_utils.h" #endif // BUILDFLAG(ENABLE_PRINT_CONTENT_ANALYSIS) #if BUILDFLAG(IS_CHROMEOS) @@ -2162,7 +2162,7 @@ policy::DMToken::CreateValidToken(kFakeDmToken)); enterprise_connectors::ContentAnalysisDelegate::SetFactoryForTesting( base::BindRepeating( - &enterprise_connectors::test::FakeContentAnalysisDelegate::Create, + &enterprise_connectors::FakeContentAnalysisDelegate::Create, base::DoNothing(), base::BindRepeating( &ContentAnalysisPrintBrowserTest::ScanningResponse, @@ -2179,7 +2179,7 @@ } void SetUpOnMainThread() override { - enterprise_connectors::test::SetAnalysisConnector( + safe_browsing::SetAnalysisConnector( browser()->profile()->GetPrefs(), enterprise_connectors::AnalysisConnector::PRINT, R"({
diff --git a/chrome/browser/resources/ash/OWNERS b/chrome/browser/resources/ash/OWNERS new file mode 100644 index 0000000..44a1559 --- /dev/null +++ b/chrome/browser/resources/ash/OWNERS
@@ -0,0 +1 @@ +file://ash/webui/PLATFORM_OWNERS
diff --git a/chrome/browser/resources/ash/settings/OWNERS b/chrome/browser/resources/ash/settings/OWNERS new file mode 100644 index 0000000..dd362a93 --- /dev/null +++ b/chrome/browser/resources/ash/settings/OWNERS
@@ -0,0 +1,4 @@ +# TODO(b/283986054) Remove reference to old OWNERS file and update this file's +# contents once the code is moved to this directory. + +file://chrome/browser/resources/settings/chromeos/OWNERS
diff --git a/chrome/browser/resources/chromeos/bluetooth_pairing_dialog/bluetooth_pairing_dialog.js b/chrome/browser/resources/chromeos/bluetooth_pairing_dialog/bluetooth_pairing_dialog.js index 9e996a4f..55d31a9a 100644 --- a/chrome/browser/resources/chromeos/bluetooth_pairing_dialog/bluetooth_pairing_dialog.js +++ b/chrome/browser/resources/chromeos/bluetooth_pairing_dialog/bluetooth_pairing_dialog.js
@@ -11,7 +11,7 @@ import {I18nBehavior} from 'chrome://resources/ash/common/i18n_behavior.js'; import {loadTimeData} from 'chrome://resources/ash/common/load_time_data.m.js'; -import {startColorChangeUpdater} from 'chrome://resources/cr_components/color_change_listener/colors_css_updater.js'; +import {ColorChangeUpdater} from 'chrome://resources/cr_components/color_change_listener/colors_css_updater.js'; import {html, Polymer} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js'; /** @@ -79,7 +79,10 @@ link.href = 'chrome://theme/colors.css?sets=legacy,sys'; document.head.appendChild(link); document.body.classList.add('jelly-enabled'); - startColorChangeUpdater(); + /** @suppress {checkTypes} */ + (function() { + ColorChangeUpdater.forDocument().start(); + })(); } const dialogArgs = chrome.getVariableValue('dialogArguments');
diff --git a/chrome/browser/resources/chromeos/cloud_upload/main.ts b/chrome/browser/resources/chromeos/cloud_upload/main.ts index 5a64f49..4a6ecdf 100644 --- a/chrome/browser/resources/chromeos/cloud_upload/main.ts +++ b/chrome/browser/resources/chromeos/cloud_upload/main.ts
@@ -8,7 +8,7 @@ import './strings.m.js'; import {loadTimeData} from 'chrome://resources/ash/common/load_time_data.m.js'; -import {startColorChangeUpdater} from 'chrome://resources/cr_components/color_change_listener/colors_css_updater.js'; +import {ColorChangeUpdater} from 'chrome://resources/cr_components/color_change_listener/colors_css_updater.js'; import {assert} from 'chrome://resources/js/assert_ts.js'; import {DialogPage} from './cloud_upload.mojom-webui.js'; @@ -20,7 +20,7 @@ const jellyEnabled = loadTimeData.getBoolean('isJellyEnabled'); const theme = jellyEnabled ? 'refresh23' : 'legacy'; document.documentElement.setAttribute('theme', theme); - startColorChangeUpdater(); + ColorChangeUpdater.forDocument().start(); }); const dialogArgs =
diff --git a/chrome/browser/resources/chromeos/internet_config_dialog/internet_config_dialog.js b/chrome/browser/resources/chromeos/internet_config_dialog/internet_config_dialog.js index c2fc69b..58cf71d 100644 --- a/chrome/browser/resources/chromeos/internet_config_dialog/internet_config_dialog.js +++ b/chrome/browser/resources/chromeos/internet_config_dialog/internet_config_dialog.js
@@ -15,7 +15,7 @@ import {assert} from 'chrome://resources/ash/common/assert.js'; import {I18nBehavior} from 'chrome://resources/ash/common/i18n_behavior.js'; import {loadTimeData} from 'chrome://resources/ash/common/load_time_data.m.js'; -import {startColorChangeUpdater} from 'chrome://resources/cr_components/color_change_listener/colors_css_updater.js'; +import {ColorChangeUpdater} from 'chrome://resources/cr_components/color_change_listener/colors_css_updater.js'; import {html, Polymer} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js'; /** @@ -108,7 +108,11 @@ link.href = 'chrome://theme/colors.css?sets=legacy,sys'; document.head.appendChild(link); document.body.classList.add('jelly-enabled'); - startColorChangeUpdater(); + + /** @suppress {checkTypes} */ + (function() { + ColorChangeUpdater.forDocument().start(); + })(); } this.$.networkConfig.init();
diff --git a/chrome/browser/resources/chromeos/internet_detail_dialog/internet_detail_dialog.js b/chrome/browser/resources/chromeos/internet_detail_dialog/internet_detail_dialog.js index b53d009..c6c3386b 100644 --- a/chrome/browser/resources/chromeos/internet_detail_dialog/internet_detail_dialog.js +++ b/chrome/browser/resources/chromeos/internet_detail_dialog/internet_detail_dialog.js
@@ -30,7 +30,7 @@ import {MojoInterfaceProviderImpl} from 'chrome://resources/ash/common/network/mojo_interface_provider.js'; import {NetworkListenerBehavior} from 'chrome://resources/ash/common/network/network_listener_behavior.js'; import {OncMojo} from 'chrome://resources/ash/common/network/onc_mojo.js'; -import {startColorChangeUpdater} from 'chrome://resources/cr_components/color_change_listener/colors_css_updater.js'; +import {ColorChangeUpdater} from 'chrome://resources/cr_components/color_change_listener/colors_css_updater.js'; import {ApnProperties, ConfigProperties, CrosNetworkConfigInterface, GlobalPolicy, IPConfigProperties, ManagedProperties, MAX_NUM_CUSTOM_APNS, NetworkStateProperties, ProxySettings, StartConnectResult} from 'chrome://resources/mojo/chromeos/services/network_config/public/mojom/cros_network_config.mojom-webui.js'; import {ConnectionStateType, NetworkType, OncSource, PortalState} from 'chrome://resources/mojo/chromeos/services/network_config/public/mojom/network_types.mojom-webui.js'; import {html, Polymer} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js'; @@ -186,7 +186,10 @@ link.href = 'chrome://theme/colors.css?sets=legacy,sys'; document.head.appendChild(link); document.body.classList.add('jelly-enabled'); - startColorChangeUpdater(); + /** @suppress {checkTypes} */ + (function() { + ColorChangeUpdater.forDocument().start(); + })(); } let type; let name;
diff --git a/chrome/browser/resources/chromeos/login/components/oobe_display_size_selector.html b/chrome/browser/resources/chromeos/login/components/oobe_display_size_selector.html index 7d3c2b0..1af18f2 100644 --- a/chrome/browser/resources/chromeos/login/components/oobe_display_size_selector.html +++ b/chrome/browser/resources/chromeos/login/components/oobe_display_size_selector.html
@@ -29,6 +29,10 @@ } #previewTitle { + color: var(--cros-text-color-primary); + font-size: 14px; + font-weight: 500; /* roboto-medium */ + line-height: 20px; margin-bottom: 0; margin-top: 16px; }
diff --git a/chrome/browser/resources/chromeos/login/screens/common/touchpad_scroll.html b/chrome/browser/resources/chromeos/login/screens/common/touchpad_scroll.html index 31e22d5..b29d019f 100644 --- a/chrome/browser/resources/chromeos/login/screens/common/touchpad_scroll.html +++ b/chrome/browser/resources/chromeos/login/screens/common/touchpad_scroll.html
@@ -26,7 +26,10 @@ #areaText { color: var(--cros-text-color-primary); + font-size: 14px; + font-weight: 500; /* roboto-medium */ left: 20px; + line-height: 20px; position: sticky; top: 20px; z-index : 1;
diff --git a/chrome/browser/resources/chromeos/set_time_dialog/set_time.js b/chrome/browser/resources/chromeos/set_time_dialog/set_time.js index 0500f14..7b524efa 100644 --- a/chrome/browser/resources/chromeos/set_time_dialog/set_time.js +++ b/chrome/browser/resources/chromeos/set_time_dialog/set_time.js
@@ -11,7 +11,7 @@ import './set_time_dialog.js'; import {loadTimeData} from 'chrome://resources/ash/common/load_time_data.m.js'; -import {startColorChangeUpdater} from 'chrome://resources/cr_components/color_change_listener/colors_css_updater.js'; +import {ColorChangeUpdater} from 'chrome://resources/cr_components/color_change_listener/colors_css_updater.js'; // TODO(b/257329722) After the Jelly experiment is launched, add the CSS link // element directly to the HTML. @@ -26,6 +26,6 @@ window.onload = () => { if (jellyEnabled) { - startColorChangeUpdater(); + ColorChangeUpdater.forDocument().start(); } };
diff --git a/chrome/browser/resources/chromeos/smb_shares/smb_credentials_dialog.js b/chrome/browser/resources/chromeos/smb_shares/smb_credentials_dialog.js index e2bd23f5..14b4716d 100644 --- a/chrome/browser/resources/chromeos/smb_shares/smb_credentials_dialog.js +++ b/chrome/browser/resources/chromeos/smb_shares/smb_credentials_dialog.js
@@ -11,7 +11,7 @@ import {assert} from 'chrome://resources/ash/common/assert.js'; import {I18nBehavior} from 'chrome://resources/ash/common/i18n_behavior.js'; import {SmbBrowserProxy, SmbBrowserProxyImpl} from 'chrome://resources/ash/common/smb_shares/smb_browser_proxy.js'; -import {startColorChangeUpdater} from 'chrome://resources/cr_components/color_change_listener/colors_css_updater.js'; +import {ColorChangeUpdater} from 'chrome://resources/cr_components/color_change_listener/colors_css_updater.js'; import {html, Polymer} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js'; /** @@ -50,7 +50,11 @@ const jellyEnabled = loadTimeData.getBoolean('isJellyEnabled'); const theme = jellyEnabled ? 'refresh23' : 'legacy'; document.documentElement.setAttribute('theme', theme); - startColorChangeUpdater(); + + /** @suppress {checkTypes} */ + (function() { + ColorChangeUpdater.forDocument().start(); + })(); }, /** @override */
diff --git a/chrome/browser/resources/chromeos/smb_shares/smb_share_dialog.js b/chrome/browser/resources/chromeos/smb_shares/smb_share_dialog.js index c9736525..4aa5d5e 100644 --- a/chrome/browser/resources/chromeos/smb_shares/smb_share_dialog.js +++ b/chrome/browser/resources/chromeos/smb_shares/smb_share_dialog.js
@@ -6,7 +6,7 @@ import './strings.m.js'; import {I18nBehavior} from 'chrome://resources/ash/common/i18n_behavior.js'; -import {startColorChangeUpdater} from 'chrome://resources/cr_components/color_change_listener/colors_css_updater.js'; +import {ColorChangeUpdater} from 'chrome://resources/cr_components/color_change_listener/colors_css_updater.js'; import {html, Polymer} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js'; /** @@ -22,9 +22,12 @@ behaviors: [I18nBehavior], - /** @override */ + /** + * @suppress {checkTypes} + * @override + */ created() { - startColorChangeUpdater(); + ColorChangeUpdater.forDocument().start(); }, /** @private */
diff --git a/chrome/browser/resources/feedback/js/sys_info.ts b/chrome/browser/resources/feedback/js/sys_info.ts index 486cd52..d8ed529d 100644 --- a/chrome/browser/resources/feedback/js/sys_info.ts +++ b/chrome/browser/resources/feedback/js/sys_info.ts
@@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -import {startColorChangeUpdater} from 'chrome://resources/cr_components/color_change_listener/colors_css_updater.js'; +import {ColorChangeUpdater} from 'chrome://resources/cr_components/color_change_listener/colors_css_updater.js'; import {loadTimeData} from 'chrome://resources/js/load_time_data.js'; import {createLogsMapTable} from './logs_map_page.js'; @@ -21,7 +21,7 @@ function configureJellyColors() { if (loadTimeData.getBoolean('isJellyEnabledForOsFeedback')) { document.body.classList.add('jelly-enabled'); - startColorChangeUpdater(); + ColorChangeUpdater.forDocument().start(); } }
diff --git a/chrome/browser/resources/internals/user_education/user_education_internals.ts b/chrome/browser/resources/internals/user_education/user_education_internals.ts index 2f0bd87..ce6e596 100644 --- a/chrome/browser/resources/internals/user_education/user_education_internals.ts +++ b/chrome/browser/resources/internals/user_education/user_education_internals.ts
@@ -12,7 +12,7 @@ import 'chrome://resources/polymer/v3_0/iron-icon/iron-icon.js'; import './user_education_internals_card.js'; -import {startColorChangeUpdater} from 'chrome://resources/cr_components/color_change_listener/colors_css_updater.js'; +import {ColorChangeUpdater} from 'chrome://resources/cr_components/color_change_listener/colors_css_updater.js'; import {HelpBubbleMixin, HelpBubbleMixinInterface} from 'chrome://resources/cr_components/help_bubble/help_bubble_mixin.js'; import {CrContainerShadowMixin, CrContainerShadowMixinInterface} from 'chrome://resources/cr_elements/cr_container_shadow_mixin.js'; import {CrToastElement} from 'chrome://resources/cr_elements/cr_toast/cr_toast.js'; @@ -79,7 +79,7 @@ override ready() { super.ready(); - startColorChangeUpdater(); + ColorChangeUpdater.forDocument().start(); this.handler_.getTutorials().then(({tutorialInfos}) => { this.tutorials_ = tutorialInfos;
diff --git a/chrome/browser/resources/nearby_share/app.ts b/chrome/browser/resources/nearby_share/app.ts index 1241e166..e6c8bb5 100644 --- a/chrome/browser/resources/nearby_share/app.ts +++ b/chrome/browser/resources/nearby_share/app.ts
@@ -12,7 +12,7 @@ import {ConfirmationManagerInterface, PayloadPreview, ShareTarget, TransferUpdateListenerPendingReceiver} from '/shared/nearby_share.mojom-webui.js'; import {NearbyShareSettingsMixin} from '/shared/nearby_share_settings_mixin.js'; import {CloseReason} from '/shared/types.js'; -import {startColorChangeUpdater} from 'chrome://resources/cr_components/color_change_listener/colors_css_updater.js'; +import {ColorChangeUpdater} from 'chrome://resources/cr_components/color_change_listener/colors_css_updater.js'; import {CrViewManagerElement} from 'chrome://resources/cr_elements/cr_view_manager/cr_view_manager.js'; import {loadTimeData} from 'chrome://resources/js/load_time_data.js'; import {PolymerElement} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js'; @@ -134,7 +134,7 @@ fontLink.rel = 'stylesheet'; fontLink.href = 'chrome://theme/typography.css'; document.head.appendChild(fontLink); - startColorChangeUpdater(); + ColorChangeUpdater.forDocument().start(); } }
diff --git a/chrome/browser/resources/new_tab_page/app.ts b/chrome/browser/resources/new_tab_page/app.ts index 46ea376..51b1e7c 100644 --- a/chrome/browser/resources/new_tab_page/app.ts +++ b/chrome/browser/resources/new_tab_page/app.ts
@@ -8,7 +8,7 @@ import 'chrome://resources/cr_elements/cr_button/cr_button.js'; import 'chrome://resources/cr_elements/cr_shared_style.css.js'; -import {startColorChangeUpdater} from 'chrome://resources/cr_components/color_change_listener/colors_css_updater.js'; +import {ColorChangeUpdater} from 'chrome://resources/cr_components/color_change_listener/colors_css_updater.js'; import {HelpBubbleMixin, HelpBubbleMixinInterface} from 'chrome://resources/cr_components/help_bubble/help_bubble_mixin.js'; import {ClickInfo, Command} from 'chrome://resources/js/browser_command.mojom-webui.js'; import {BrowserCommandProxy} from 'chrome://resources/js/browser_command/browser_command_proxy.js'; @@ -405,7 +405,7 @@ }, Math.floor(window.innerWidth)); - startColorChangeUpdater(); + ColorChangeUpdater.forDocument().start(); } override connectedCallback() {
diff --git a/chrome/browser/resources/omnibox_popup/app.ts b/chrome/browser/resources/omnibox_popup/app.ts index 16f8372..53d45d5c 100644 --- a/chrome/browser/resources/omnibox_popup/app.ts +++ b/chrome/browser/resources/omnibox_popup/app.ts
@@ -5,7 +5,7 @@ import '//resources/cr_components/omnibox/realbox_dropdown.js'; import './strings.m.js'; -import {startColorChangeUpdater} from '//resources/cr_components/color_change_listener/colors_css_updater.js'; +import {ColorChangeUpdater} from '//resources/cr_components/color_change_listener/colors_css_updater.js'; import {AutocompleteResult, PageCallbackRouter} from '//resources/cr_components/omnibox/omnibox.mojom-webui.js'; import {RealboxBrowserProxy} from '//resources/cr_components/omnibox/realbox_browser_proxy.js'; import {RealboxDropdownElement} from '//resources/cr_components/omnibox/realbox_dropdown.js'; @@ -70,7 +70,7 @@ constructor() { super(); this.callbackRouter_ = RealboxBrowserProxy.getInstance().callbackRouter; - startColorChangeUpdater(); + ColorChangeUpdater.forDocument().start(); } override connectedCallback() {
diff --git a/chrome/browser/resources/settings/chromeos/crostini_page/crostini_page.html b/chrome/browser/resources/settings/chromeos/crostini_page/crostini_page.html index add176a..fdb9e6b0 100644 --- a/chrome/browser/resources/settings/chromeos/crostini_page/crostini_page.html +++ b/chrome/browser/resources/settings/chromeos/crostini_page/crostini_page.html
@@ -1,6 +1,7 @@ <style include="settings-shared"></style> -<os-settings-animated-pages id="pages" section="crostini" +<os-settings-animated-pages id="pages" + section="[[section_]]" focus-config="[[focusConfig_]]"> <div route-path="default"> <div id="crostini" class="settings-box two-line first"
diff --git a/chrome/browser/resources/settings/chromeos/crostini_page/crostini_page.ts b/chrome/browser/resources/settings/chromeos/crostini_page/crostini_page.ts index 1ea1b7c..2d5502732 100644 --- a/chrome/browser/resources/settings/chromeos/crostini_page/crostini_page.ts +++ b/chrome/browser/resources/settings/chromeos/crostini_page/crostini_page.ts
@@ -34,6 +34,7 @@ import {isCrostiniAllowed, isCrostiniSupported} from '../common/load_time_booleans.js'; import {DeepLinkingMixin} from '../deep_linking_mixin.js'; +import {Section} from '../mojom-webui/routes.mojom-webui.js'; import {Setting} from '../mojom-webui/setting.mojom-webui.js'; import {RouteObserverMixin} from '../route_observer_mixin.js'; import {Route, Router, routes} from '../router.js'; @@ -55,6 +56,12 @@ static get properties() { return { + section_: { + type: Number, + value: Section.kCrostini, + readOnly: true, + }, + focusConfig_: { type: Object, value() { @@ -146,6 +153,7 @@ private disableCrostiniInstall_: boolean; private isCrostiniAllowed_: boolean; private isCrostiniSupported_: boolean; + private section_: Section; constructor() { super();
diff --git a/chrome/browser/resources/settings/chromeos/date_time_page/date_time_page.html b/chrome/browser/resources/settings/chromeos/date_time_page/date_time_page.html index f5e58f1..083aa3e 100644 --- a/chrome/browser/resources/settings/chromeos/date_time_page/date_time_page.html +++ b/chrome/browser/resources/settings/chromeos/date_time_page/date_time_page.html
@@ -4,7 +4,8 @@ padding-inline-start: var(--cr-section-indent-padding); } </style> -<os-settings-animated-pages id="pages" section="dateTime" +<os-settings-animated-pages id="pages" + section="[[section_]]" focus-config="[[focusConfig_]]"> <div id="main" route-path="default"> <template is="dom-if"
diff --git a/chrome/browser/resources/settings/chromeos/date_time_page/date_time_page.ts b/chrome/browser/resources/settings/chromeos/date_time_page/date_time_page.ts index 0c2c63d87..e7e12ae 100644 --- a/chrome/browser/resources/settings/chromeos/date_time_page/date_time_page.ts +++ b/chrome/browser/resources/settings/chromeos/date_time_page/date_time_page.ts
@@ -25,6 +25,7 @@ import {PolymerElement} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js'; import {DeepLinkingMixin} from '../deep_linking_mixin.js'; +import {Section} from '../mojom-webui/routes.mojom-webui.js'; import {Setting} from '../mojom-webui/setting.mojom-webui.js'; import {RouteObserverMixin} from '../route_observer_mixin.js'; import {Route, Router, routes} from '../router.js'; @@ -46,6 +47,12 @@ static get properties() { return { + section_: { + type: Number, + value: Section.kDateAndTime, + readOnly: true, + }, + /** * Whether date and time are settable. Normally the date and time are * forced by network time, so default to false to initially hide the @@ -114,6 +121,7 @@ private canSetDateTime_: boolean; private displayManagedByParentIcon_: boolean; private focusConfig_: Map<string, string>; + private section_: Section; private timeZoneSettingSubLabel_: string; constructor() {
diff --git a/chrome/browser/resources/settings/chromeos/device_page/device_page.html b/chrome/browser/resources/settings/chromeos/device_page/device_page.html index f740fe2..dea03888 100644 --- a/chrome/browser/resources/settings/chromeos/device_page/device_page.html +++ b/chrome/browser/resources/settings/chromeos/device_page/device_page.html
@@ -10,7 +10,8 @@ margin-inline-end: 8px; } </style> -<os-settings-animated-pages id="pages" section="device" +<os-settings-animated-pages id="pages" + section="[[section_]]" focus-config="[[focusConfig_]]"> <div id="main" route-path="default"> <template is="dom-if"
diff --git a/chrome/browser/resources/settings/chromeos/device_page/device_page.ts b/chrome/browser/resources/settings/chromeos/device_page/device_page.ts index 07f3356c..871756869 100644 --- a/chrome/browser/resources/settings/chromeos/device_page/device_page.ts +++ b/chrome/browser/resources/settings/chromeos/device_page/device_page.ts
@@ -36,6 +36,7 @@ import {KeyboardPolicies, MousePolicies} from '../mojom-webui/input_device_settings.mojom-webui.js'; import {KeyboardSettingsObserverReceiver, MouseSettingsObserverReceiver, PointingStickSettingsObserverReceiver, TouchpadSettingsObserverReceiver} from '../mojom-webui/input_device_settings_provider.mojom-webui.js'; +import {Section} from '../mojom-webui/routes.mojom-webui.js'; import {RouteObserverMixin} from '../route_observer_mixin.js'; import {Router, routes} from '../router.js'; @@ -71,6 +72,12 @@ notify: true, }, + section_: { + type: Number, + value: Section.kDevice, + readOnly: true, + }, + /** * |hasMouse_|, |hasPointingStick_|, and |hasTouchpad_| start undefined so * observers don't trigger until they have been populated. @@ -235,6 +242,7 @@ private touchpadSettingsObserverReceiver: TouchpadSettingsObserverReceiver; private inputDeviceSettingsProvider: InputDeviceSettingsProviderInterface; private mouseSettingsObserverReceiver: MouseSettingsObserverReceiver; + private section_: Section; constructor() { super();
diff --git a/chrome/browser/resources/settings/chromeos/internet_page/internet_page.html b/chrome/browser/resources/settings/chromeos/internet_page/internet_page.html index 2d156ac..4c67106 100644 --- a/chrome/browser/resources/settings/chromeos/internet_page/internet_page.html +++ b/chrome/browser/resources/settings/chromeos/internet_page/internet_page.html
@@ -26,7 +26,8 @@ top: -22px; } </style> -<os-settings-animated-pages id="pages" section="internet" +<os-settings-animated-pages id="pages" + section="[[section_]]" focus-config="[[focusConfig_]]"> <div route-path="default"> <network-summary default-network="{{defaultNetwork}}"
diff --git a/chrome/browser/resources/settings/chromeos/internet_page/internet_page.ts b/chrome/browser/resources/settings/chromeos/internet_page/internet_page.ts index 201c0ead..9a0587df 100644 --- a/chrome/browser/resources/settings/chromeos/internet_page/internet_page.ts +++ b/chrome/browser/resources/settings/chromeos/internet_page/internet_page.ts
@@ -51,6 +51,7 @@ import {castExists} from '../assert_extras.js'; import {DeepLinkingMixin, DeepLinkingMixinInterface} from '../deep_linking_mixin.js'; import {recordSettingChange} from '../metrics_recorder.js'; +import {Section} from '../mojom-webui/routes.mojom-webui.js'; import {Setting} from '../mojom-webui/setting.mojom-webui.js'; import {RouteObserverMixin, RouteObserverMixinInterface} from '../route_observer_mixin.js'; import {Route, Router, routes} from '../router.js'; @@ -115,6 +116,12 @@ static get properties() { return { + section_: { + type: Number, + value: Section.kNetwork, + readOnly: true, + }, + /** * The device state for each network device type, keyed by NetworkType. * Set by network-summary. @@ -346,6 +353,7 @@ private pendingShowCellularSetupDialogAttemptPageName_: CellularSetupPageName| null; private pendingShowSimLockDialog_: boolean; + private section_: Section; private showCellularSetupDialog_: boolean; private showESimProfileRenameDialog_: boolean; private showESimRemoveProfileDialog_: boolean;
diff --git a/chrome/browser/resources/settings/chromeos/kerberos_page/kerberos_page.html b/chrome/browser/resources/settings/chromeos/kerberos_page/kerberos_page.html index bd17089..f1e5fd5 100644 --- a/chrome/browser/resources/settings/chromeos/kerberos_page/kerberos_page.html +++ b/chrome/browser/resources/settings/chromeos/kerberos_page/kerberos_page.html
@@ -1,5 +1,6 @@ <style include="settings-shared iron-flex"></style> -<os-settings-animated-pages id="pages" section="kerberos" +<os-settings-animated-pages id="pages" + section="[[section_]]" focus-config="[[focusConfig_]]"> <div route-path="default"> <cr-link-row id="kerberosAccountsSubpageTrigger"
diff --git a/chrome/browser/resources/settings/chromeos/kerberos_page/kerberos_page.ts b/chrome/browser/resources/settings/chromeos/kerberos_page/kerberos_page.ts index 325b6a40..3e88a18 100644 --- a/chrome/browser/resources/settings/chromeos/kerberos_page/kerberos_page.ts +++ b/chrome/browser/resources/settings/chromeos/kerberos_page/kerberos_page.ts
@@ -19,6 +19,7 @@ import {WebUiListenerMixin} from 'chrome://resources/cr_elements/web_ui_listener_mixin.js'; import {PolymerElement} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js'; +import {Section} from '../mojom-webui/routes.mojom-webui.js'; import {Router, routes} from '../router.js'; import {getTemplate} from './kerberos_page.html.js'; @@ -38,6 +39,12 @@ static get properties() { return { + section_: { + type: Number, + value: Section.kKerberos, + readOnly: true, + }, + focusConfig_: { type: Object, value() { @@ -54,6 +61,7 @@ } private focusConfig_: Map<string, string>; + private section_: Section; private onKerberosAccountsClick_(): void { Router.getInstance().navigateTo(routes.KERBEROS_ACCOUNTS_V2);
diff --git a/chrome/browser/resources/settings/chromeos/main_page_container/main_page_container.html b/chrome/browser/resources/settings/chromeos/main_page_container/main_page_container.html index 4ed6594..2429398 100644 --- a/chrome/browser/resources/settings/chromeos/main_page_container/main_page_container.html +++ b/chrome/browser/resources/settings/chromeos/main_page_container/main_page_container.html
@@ -139,80 +139,91 @@ <div class="flex">$i18n{secondaryUserBannerText}</div> </div> <template is="dom-if" - if="[[shouldStampPage_(pageAvailability.internet)]]" restamp> + if="[[shouldStampPage_(pageAvailability, Section.kNetwork)]]" + restamp> <os-settings-section page-title="$i18n{internetPageTitle}" - section="internet"> + section="[[Section.kNetwork]]"> <settings-internet-page prefs="{{prefs}}"> </settings-internet-page> </os-settings-section> </template> <template is="dom-if" - if="[[shouldStampPage_(pageAvailability.bluetooth)]]" restamp> + if="[[shouldStampPage_(pageAvailability, Section.kBluetooth)]]" + restamp> <os-settings-section page-title="$i18n{bluetoothPageTitle}" - section="bluetooth"> + section="[[Section.kBluetooth]]"> <os-settings-bluetooth-page prefs="{{prefs}}"> </os-settings-bluetooth-page> </os-settings-section> </template> <template is="dom-if" - if="[[shouldStampPage_(pageAvailability.multidevice)]]" restamp> + if="[[shouldStampPage_(pageAvailability, Section.kMultiDevice)]]" + restamp> <os-settings-section page-title="$i18n{multidevicePageTitle}" - section="multidevice"> + section="[[Section.kMultiDevice]]"> <settings-multidevice-page prefs="{{prefs}}"> </settings-multidevice-page> </os-settings-section> </template> <template is="dom-if" - if="[[shouldStampPage_(pageAvailability.osPeople)]]" restamp> + if="[[shouldStampPage_(pageAvailability, Section.kPeople)]]" + restamp> <os-settings-section page-title="$i18n{osPeoplePageTitle}" - section="osPeople"> + section="[[Section.kPeople]]"> <os-settings-people-page prefs="{{prefs}}" page-availability="[[pageAvailability]]"> </os-settings-people-page> </os-settings-section> </template> <template is="dom-if" - if="[[shouldStampPage_(pageAvailability.kerberos)]]" restamp> + if="[[shouldStampPage_(pageAvailability, Section.kKerberos)]]" + restamp> <os-settings-section page-title="$i18n{kerberosPageTitle}" - section="kerberos"> + section="[[Section.kKerberos]]"> <settings-kerberos-page></settings-kerberos-page> </os-settings-section> </template> <template is="dom-if" - if="[[shouldStampPage_(pageAvailability.device)]]" restamp> + if="[[shouldStampPage_(pageAvailability, Section.kDevice)]]" + restamp> <os-settings-section page-title="$i18n{devicePageTitle}" - section="device"> + section="[[Section.kDevice]]"> <settings-device-page prefs="{{prefs}}"> </settings-device-page> </os-settings-section> </template> <template is="dom-if" - if="[[shouldStampPage_(pageAvailability.personalization)]]" restamp> + if="[[shouldStampPage_(pageAvailability, Section.kPersonalization)]]" + restamp> <os-settings-section page-title="$i18n{personalizationPageTitle}" - section="personalization"> + section="[[Section.kPersonalization]]"> <settings-personalization-page prefs="{{prefs}}"> </settings-personalization-page> </os-settings-section> </template> <template is="dom-if" - if="[[shouldStampPage_(pageAvailability.osSearch)]]" restamp> + if="[[shouldStampPage_(pageAvailability, Section.kSearchAndAssistant)]]" + restamp> <os-settings-section page-title="$i18n{osSearchPageTitle}" - section="osSearch"> + section="[[Section.kSearchAndAssistant]]"> <os-settings-search-page prefs="{{prefs}}"> </os-settings-search-page> </os-settings-section> </template> <template is="dom-if" - if="[[shouldStampPage_(pageAvailability.osPrivacy)]]" restamp> + if="[[shouldStampPage_(pageAvailability, Section.kPrivacyAndSecurity)]]" + restamp> <os-settings-section page-title="$i18n{privacyPageTitle}" - section="osPrivacy"> + section="[[Section.kPrivacyAndSecurity]]"> <os-settings-privacy-page prefs="{{prefs}}"> </os-settings-privacy-page> </os-settings-section> </template> <template is="dom-if" - if="[[shouldStampPage_(pageAvailability.apps)]]" restamp> - <os-settings-section page-title="$i18n{appsPageTitle}" section="apps"> + if="[[shouldStampPage_(pageAvailability, Section.kApps)]]" + restamp> + <os-settings-section page-title="$i18n{appsPageTitle}" + section="[[Section.kApps]]"> <os-settings-apps-page prefs="{{prefs}}" android-apps-info="[[androidAppsInfo]]"> @@ -220,9 +231,10 @@ </os-settings-section> </template> <template is="dom-if" - if="[[shouldStampPage_(pageAvailability.osAccessibility)]]" restamp> + if="[[shouldStampPage_(pageAvailability, Section.kAccessibility)]]" + restamp> <os-settings-section page-title="$i18n{a11yPageTitle}" - section="osAccessibility"> + section="[[Section.kAccessibility]]"> <os-settings-a11y-page prefs="{{prefs}}"> </os-settings-a11y-page> </os-settings-section> @@ -250,49 +262,56 @@ currentRoute_, hasExpandedSection_, advancedToggleExpanded)]]"> <template is="dom-if" - if="[[shouldStampPage_(pageAvailability.dateTime)]]" restamp> + if="[[shouldStampPage_(pageAvailability, Section.kDateAndTime)]]" + restamp> <os-settings-section page-title="$i18n{dateTimePageTitle}" - section="dateTime"> + section="[[Section.kDateAndTime]]"> <settings-date-time-page prefs="{{prefs}}"> </settings-date-time-page> </os-settings-section> </template> <template is="dom-if" - if="[[shouldStampPage_(pageAvailability.osLanguages)]]" restamp> + if="[[shouldStampPage_(pageAvailability, + Section.kLanguagesAndInput)]]" + restamp> <os-settings-section page-title="$i18n{osLanguagesPageTitle}" - section="osLanguages"> + section="[[Section.kLanguagesAndInput]]"> <os-settings-languages-section prefs="{{prefs}}"> </os-settings-languages-section> </os-settings-section> </template> <template is="dom-if" - if="[[shouldStampPage_(pageAvailability.files)]]" restamp> + if="[[shouldStampPage_(pageAvailability, Section.kFiles)]]" + restamp> <os-settings-section page-title="$i18n{filesPageTitle}" - section="files"> + section="[[Section.kFiles]]"> <os-settings-files-page prefs="{{prefs}}"> </os-settings-files-page> </os-settings-section> </template> <template is="dom-if" - if="[[shouldStampPage_(pageAvailability.osPrinting)]]" restamp> + if="[[shouldStampPage_(pageAvailability, Section.kPrinting)]]" + restamp> <os-settings-section page-title="$i18n{printingPageTitle}" - section="osPrinting"> + section="[[Section.kPrinting]]"> <os-settings-printing-page prefs="{{prefs}}"> </os-settings-printing-page> </os-settings-section> </template> - <template is="dom-if" restamp - if="[[shouldStampPage_(pageAvailability.crostini)]]"> + <template is="dom-if" + if="[[shouldStampPage_(pageAvailability, Section.kCrostini)]]" + restamp> <os-settings-section page-title="$i18n{crostiniPageTitle}" - section="crostini"> + section="[[Section.kCrostini]]"> <settings-crostini-page prefs="{{prefs}}"> </settings-crostini-page> </os-settings-section> </template> <template is="dom-if" - if="[[shouldStampPage_(pageAvailability.osReset)]]" restamp> + if="[[shouldStampPage_(pageAvailability, Section.kReset)]]" + restamp> <os-settings-section page-title="$i18n{resetPageTitle}" - section="osReset"> + section="[[Section.kReset]]"> <os-settings-reset-page></os-settings-reset-page> </os-settings-section> </template>
diff --git a/chrome/browser/resources/settings/chromeos/main_page_container/main_page_container.ts b/chrome/browser/resources/settings/chromeos/main_page_container/main_page_container.ts index 3a2d38a..5f9dc14 100644 --- a/chrome/browser/resources/settings/chromeos/main_page_container/main_page_container.ts +++ b/chrome/browser/resources/settings/chromeos/main_page_container/main_page_container.ts
@@ -45,6 +45,7 @@ import {castExists} from '../assert_extras.js'; import {isRevampWayfindingEnabled} from '../common/load_time_booleans.js'; import {MainPageMixin} from '../main_page_mixin.js'; +import {Section} from '../mojom-webui/routes.mojom-webui.js'; import {AboutPageBrowserProxyImpl} from '../os_about_page/about_page_browser_proxy.js'; import {AndroidAppsBrowserProxyImpl, AndroidAppsInfo} from '../os_apps_page/android_apps_browser_proxy.js'; import {OsPageAvailability} from '../os_page_availability.js'; @@ -72,6 +73,12 @@ notify: true, }, + /** Mirror Section enum to be used in Polymer data bindings. */ + Section: { + type: Object, + value: Section, + }, + androidAppsInfo: Object, /** @@ -213,8 +220,9 @@ } /** Stamp page in the DOM depending on page availability */ - private shouldStampPage_(available?: boolean): boolean { - return !!available; + private shouldStampPage_( + pageAvailability: OsPageAvailability, pageName: Section): boolean { + return !!pageAvailability[pageName]; } private computeShowSecondaryUserBanner_(): boolean {
diff --git a/chrome/browser/resources/settings/chromeos/main_page_mixin.ts b/chrome/browser/resources/settings/chromeos/main_page_mixin.ts index 2f34bc5..d14ea5b 100644 --- a/chrome/browser/resources/settings/chromeos/main_page_mixin.ts +++ b/chrome/browser/resources/settings/chromeos/main_page_mixin.ts
@@ -9,6 +9,7 @@ import {isRevampWayfindingEnabled} from './common/load_time_booleans.js'; import {Constructor} from './common/types.js'; import {ensureLazyLoaded} from './ensure_lazy_loaded.js'; +import {Section} from './mojom-webui/routes.mojom-webui.js'; import {SettingsIdleLoadElement} from './os_settings_page/settings_idle_load.js'; import {RouteObserverMixin, RouteObserverMixinInterface} from './route_observer_mixin.js'; import {isAdvancedRoute, Route, Router, routes} from './router.js'; @@ -155,7 +156,7 @@ private async enterSubpage_(route: Route) { if (isRevampWayfindingEnabled()) { // Make the parent page visible to ensure the subpage is visible - this.showPage(route); + await this.showPage(route); } this.lastScrollTop_ = this.scroller_.scrollTop; this.scroller_.scrollTop = 0; @@ -425,7 +426,10 @@ /** * Helper function to get a section from the local DOM. */ - private querySection(section: string): HTMLElement|null { + querySection(section: Section|null): HTMLElement|null { + if (section === null) { + return null; + } return this.shadowRoot!.querySelector( `os-settings-section[section="${section}"]`); }
diff --git a/chrome/browser/resources/settings/chromeos/multidevice_page/multidevice_page.html b/chrome/browser/resources/settings/chromeos/multidevice_page/multidevice_page.html index ba4052c..852eb8c7 100644 --- a/chrome/browser/resources/settings/chromeos/multidevice_page/multidevice_page.html +++ b/chrome/browser/resources/settings/chromeos/multidevice_page/multidevice_page.html
@@ -3,7 +3,8 @@ padding: 0 var(--cr-controlled-by-spacing); } </style> -<os-settings-animated-pages id="pages" section="multidevice" +<os-settings-animated-pages id="pages" + section="[[section_]]" focus-config="[[focusConfig_]]"> <div route-path="default"> <div id="multidevice-item"
diff --git a/chrome/browser/resources/settings/chromeos/multidevice_page/multidevice_page.ts b/chrome/browser/resources/settings/chromeos/multidevice_page/multidevice_page.ts index 12a8114..6ae5b926 100644 --- a/chrome/browser/resources/settings/chromeos/multidevice_page/multidevice_page.ts +++ b/chrome/browser/resources/settings/chromeos/multidevice_page/multidevice_page.ts
@@ -26,6 +26,7 @@ import {DeepLinkingMixin} from '../deep_linking_mixin.js'; import {recordSettingChange} from '../metrics_recorder.js'; +import {Section} from '../mojom-webui/routes.mojom-webui.js'; import {Setting} from '../mojom-webui/setting.mojom-webui.js'; import {RouteObserverMixin} from '../route_observer_mixin.js'; import {Route, Router, routes} from '../router.js'; @@ -53,6 +54,12 @@ static get properties() { return { + section_: { + type: Number, + value: Section.kMultiDevice, + readOnly: true, + }, + /** * A Map specifying which element should be focused when exiting a * subpage. The key of the map holds a Route path, and the value holds a @@ -176,6 +183,7 @@ private isPasswordDialogShowing_: boolean; private isPhoneScreenLockEnabled_: boolean; private isPinNumberDialogShowing_: boolean; + private section_: Section; private shouldEnableNearbyShareBackgroundScanningRevamp_: boolean; private showPasswordPromptDialog_: boolean; private showPhonePermissionSetupDialog_: boolean;
diff --git a/chrome/browser/resources/settings/chromeos/os_a11y_page/os_a11y_page.html b/chrome/browser/resources/settings/chromeos/os_a11y_page/os_a11y_page.html index 7da3349..d44d74f 100644 --- a/chrome/browser/resources/settings/chromeos/os_a11y_page/os_a11y_page.html +++ b/chrome/browser/resources/settings/chromeos/os_a11y_page/os_a11y_page.html
@@ -1,6 +1,8 @@ <style include="settings-shared"></style> -<os-settings-animated-pages id="pages" current-route="{{currentRoute}}" - section="osAccessibility" focus-config="[[focusConfig_]]"> +<os-settings-animated-pages id="pages" + current-route="{{currentRoute}}" + section="[[section_]]" + focus-config="[[focusConfig_]]"> <div route-path="default"> <settings-toggle-button id="a11yImageLabels"
diff --git a/chrome/browser/resources/settings/chromeos/os_a11y_page/os_a11y_page.ts b/chrome/browser/resources/settings/chromeos/os_a11y_page/os_a11y_page.ts index 439feff8..bf4c7ae 100644 --- a/chrome/browser/resources/settings/chromeos/os_a11y_page/os_a11y_page.ts +++ b/chrome/browser/resources/settings/chromeos/os_a11y_page/os_a11y_page.ts
@@ -20,6 +20,7 @@ import {PolymerElement} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js'; import {DeepLinkingMixin} from '../deep_linking_mixin.js'; +import {Section} from '../mojom-webui/routes.mojom-webui.js'; import {Setting} from '../mojom-webui/setting.mojom-webui.js'; import {RouteOriginMixin} from '../route_origin_mixin.js'; import {Route, Router, routes} from '../router.js'; @@ -55,6 +56,12 @@ notify: true, }, + section_: { + type: Number, + value: Section.kAccessibility, + readOnly: true, + }, + /** * Whether a screen reader is enabled. */ @@ -134,6 +141,7 @@ private isGuest_: boolean; private isKioskModeActive_: boolean; private route_: Route; + private section_: Section; private showAccessibilityLabelsSetting_: boolean; private isAccessibilityChromeVoxPageMigrationEnabled_: boolean; private isAccessibilitySelectToSpeakPageMigrationEnabled_: boolean;
diff --git a/chrome/browser/resources/settings/chromeos/os_about_page/os_about_page.html b/chrome/browser/resources/settings/chromeos/os_about_page/os_about_page.html index 525d528..4226de84 100644 --- a/chrome/browser/resources/settings/chromeos/os_about_page/os_about_page.html +++ b/chrome/browser/resources/settings/chromeos/os_about_page/os_about_page.html
@@ -79,8 +79,10 @@ <iron-media-query query="(prefers-color-scheme: dark)" query-matches="{{isDarkModeActive_}}"> </iron-media-query> -<os-settings-section page-title="$i18n{aboutOsPageTitle}" section="about"> - <os-settings-animated-pages id="pages" section="about" +<os-settings-section page-title="$i18n{aboutOsPageTitle}" + section="[[section_]]"> + <os-settings-animated-pages id="pages" + section="[[section_]]" focus-config="[[focusConfig_]]"> <div route-path="default"> <div class="settings-box two-line first">
diff --git a/chrome/browser/resources/settings/chromeos/os_about_page/os_about_page.ts b/chrome/browser/resources/settings/chromeos/os_about_page/os_about_page.ts index 7953a26..c8b1e25 100644 --- a/chrome/browser/resources/settings/chromeos/os_about_page/os_about_page.ts +++ b/chrome/browser/resources/settings/chromeos/os_about_page/os_about_page.ts
@@ -38,6 +38,7 @@ import {DeepLinkingMixin} from '../deep_linking_mixin.js'; import {MainPageMixin} from '../main_page_mixin.js'; import {recordSettingChange} from '../metrics_recorder.js'; +import {Section} from '../mojom-webui/routes.mojom-webui.js'; import {Setting} from '../mojom-webui/setting.mojom-webui.js'; import {isAboutRoute, Route, Router, routes} from '../router.js'; @@ -71,6 +72,12 @@ static get properties() { return { + section_: { + type: Number, + value: Section.kAboutChromeOs, + readOnly: true, + }, + /** * Whether the about page is being rendered in dark mode. */ @@ -265,12 +272,13 @@ private eolMessageWithMonthAndYear_: string; private hasInternetConnection_: boolean; private firmwareUpdateCount_: number; + private focusConfig_: Map<string, string>; private showCrostiniLicense_: boolean; private showUpdateStatus_: boolean; private showButtonContainer_: boolean; private showRelaunch_: boolean; private showCheckUpdates_: boolean; - private focusConfig_: Map<string, string>; + private section_: Section; private showUpdateWarningDialog_: boolean; private showTPMFirmwareUpdateLineItem_: boolean; private showTPMFirmwareUpdateDialog_: boolean;
diff --git a/chrome/browser/resources/settings/chromeos/os_apps_page/os_apps_page.html b/chrome/browser/resources/settings/chromeos/os_apps_page/os_apps_page.html index 39c6e85..8098540 100644 --- a/chrome/browser/resources/settings/chromeos/os_apps_page/os_apps_page.html +++ b/chrome/browser/resources/settings/chromeos/os_apps_page/os_apps_page.html
@@ -5,7 +5,8 @@ } </style> -<os-settings-animated-pages id="pages" section="apps" +<os-settings-animated-pages id="pages" + section="[[section_]]" focus-config="[[focusConfig_]]"> <div route-path="default"> <cr-link-row id="appManagement"
diff --git a/chrome/browser/resources/settings/chromeos/os_apps_page/os_apps_page.ts b/chrome/browser/resources/settings/chromeos/os_apps_page/os_apps_page.ts index ebf9186..17fbef8 100644 --- a/chrome/browser/resources/settings/chromeos/os_apps_page/os_apps_page.ts +++ b/chrome/browser/resources/settings/chromeos/os_apps_page/os_apps_page.ts
@@ -38,6 +38,7 @@ import {androidAppsVisible, isArcVmEnabled, isPlayStoreAvailable, isPluginVmAvailable} from '../common/load_time_booleans.js'; import {DeepLinkingMixin} from '../deep_linking_mixin.js'; import {App as AppWithNotifications, AppNotificationsHandlerInterface, AppNotificationsObserverReceiver, Readiness} from '../mojom-webui/app_notification_handler.mojom-webui.js'; +import {Section} from '../mojom-webui/routes.mojom-webui.js'; import {Setting} from '../mojom-webui/setting.mojom-webui.js'; import {RouteObserverMixin} from '../route_observer_mixin.js'; import {Route, Router, routes} from '../router.js'; @@ -77,6 +78,12 @@ static get properties() { return { + section_: { + type: Number, + value: Section.kApps, + readOnly: true, + }, + /** * This object holds the playStoreEnabled and settingsAppAvailable * boolean. @@ -203,6 +210,7 @@ private isPluginVmAvailable_: boolean; private mojoInterfaceProvider_: AppNotificationsHandlerInterface; private onStartupOptions_: DropdownMenuOptionList; + private section_: Section; private showAndroidApps_: boolean; private showAppNotificationsRow_: boolean; private showStartup_: boolean;
diff --git a/chrome/browser/resources/settings/chromeos/os_bluetooth_page/os_bluetooth_page.html b/chrome/browser/resources/settings/chromeos/os_bluetooth_page/os_bluetooth_page.html index 0ded1e8..12a17d0 100644 --- a/chrome/browser/resources/settings/chromeos/os_bluetooth_page/os_bluetooth_page.html +++ b/chrome/browser/resources/settings/chromeos/os_bluetooth_page/os_bluetooth_page.html
@@ -1,6 +1,7 @@ <style include="settings-shared iron-flex"> </style> -<os-settings-animated-pages id="pages" section="bluetooth"> +<os-settings-animated-pages id="pages" + section="[[section_]]"> <div route-path="default"> <os-settings-bluetooth-summary on-start-pairing="onStartPairing_"
diff --git a/chrome/browser/resources/settings/chromeos/os_bluetooth_page/os_bluetooth_page.ts b/chrome/browser/resources/settings/chromeos/os_bluetooth_page/os_bluetooth_page.ts index d4f1e51..dae317b 100644 --- a/chrome/browser/resources/settings/chromeos/os_bluetooth_page/os_bluetooth_page.ts +++ b/chrome/browser/resources/settings/chromeos/os_bluetooth_page/os_bluetooth_page.ts
@@ -23,6 +23,8 @@ import {BluetoothSystemProperties, BluetoothSystemState, SystemPropertiesObserverReceiver} from 'chrome://resources/mojo/chromeos/ash/services/bluetooth_config/public/mojom/cros_bluetooth_config.mojom-webui.js'; import {PolymerElement} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js'; +import {Section} from '../mojom-webui/routes.mojom-webui.js'; + import {OsBluetoothDevicesSubpageBrowserProxy, OsBluetoothDevicesSubpageBrowserProxyImpl} from './os_bluetooth_devices_subpage_browser_proxy.js'; import {getTemplate} from './os_bluetooth_page.html.js'; @@ -39,6 +41,12 @@ static get properties() { return { + section_: { + type: Number, + value: Section.kBluetooth, + readOnly: true, + }, + systemProperties_: Object, shouldShowPairingDialog_: { @@ -55,6 +63,7 @@ } private browserProxy_: OsBluetoothDevicesSubpageBrowserProxy; + private section_: Section; private showSavedDevicesLoadingIndicators_: boolean; private shouldShowPairingDialog_: boolean; private systemProperties_: BluetoothSystemProperties;
diff --git a/chrome/browser/resources/settings/chromeos/os_files_page/os_files_page.html b/chrome/browser/resources/settings/chromeos/os_files_page/os_files_page.html index c051b29..dbb576d 100644 --- a/chrome/browser/resources/settings/chromeos/os_files_page/os_files_page.html +++ b/chrome/browser/resources/settings/chromeos/os_files_page/os_files_page.html
@@ -1,5 +1,6 @@ <style include="settings-shared"></style> -<os-settings-animated-pages id="pages" section="files" +<os-settings-animated-pages id="pages" + section="[[section_]]" focus-config="[[focusConfig_]]"> <div route-path="default"> <template is="dom-if" if="[[!isBulkPinningEnabled_]]">
diff --git a/chrome/browser/resources/settings/chromeos/os_files_page/os_files_page.ts b/chrome/browser/resources/settings/chromeos/os_files_page/os_files_page.ts index 2cbbf89..6a0f9e7 100644 --- a/chrome/browser/resources/settings/chromeos/os_files_page/os_files_page.ts +++ b/chrome/browser/resources/settings/chromeos/os_files_page/os_files_page.ts
@@ -21,6 +21,7 @@ import {PolymerElement} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js'; import {DeepLinkingMixin} from '../deep_linking_mixin.js'; +import {Section} from '../mojom-webui/routes.mojom-webui.js'; import {Setting} from '../mojom-webui/setting.mojom-webui.js'; import {RouteObserverMixin} from '../route_observer_mixin.js'; import {Route, Router, routes} from '../router.js'; @@ -54,6 +55,12 @@ static get properties() { return { + section_: { + type: Number, + value: Section.kFiles, + readOnly: true, + }, + /** * Used by DeepLinkingMixin to focus this page's deep links. */ @@ -117,6 +124,7 @@ private isOneDriveConnected_: boolean; private oneDriveEmailAddress_: string|null; private oneDriveProxy_: OneDriveBrowserProxy; + private section_: Section; override currentRouteChanged(route: Route, _oldRoute?: Route) { // Does not apply to this page.
diff --git a/chrome/browser/resources/settings/chromeos/os_languages_page/os_languages_section.html b/chrome/browser/resources/settings/chromeos/os_languages_page/os_languages_section.html index 1905446..5a4bac8 100644 --- a/chrome/browser/resources/settings/chromeos/os_languages_page/os_languages_section.html +++ b/chrome/browser/resources/settings/chromeos/os_languages_page/os_languages_section.html
@@ -6,7 +6,8 @@ </settings-languages> <!-- Top-level settings section. --> -<os-settings-animated-pages id="pages" section="osLanguages" +<os-settings-animated-pages id="pages" + section="[[section_]]" focus-config="[[focusConfig_]]"> <div route-path="default"> <cr-link-row
diff --git a/chrome/browser/resources/settings/chromeos/os_languages_page/os_languages_section.ts b/chrome/browser/resources/settings/chromeos/os_languages_page/os_languages_section.ts index ccac2b5d..f499af0 100644 --- a/chrome/browser/resources/settings/chromeos/os_languages_page/os_languages_section.ts +++ b/chrome/browser/resources/settings/chromeos/os_languages_page/os_languages_section.ts
@@ -26,6 +26,7 @@ import {PolymerElement} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js'; import {FocusConfig} from '../focus_config.js'; +import {Section} from '../mojom-webui/routes.mojom-webui.js'; import {Router, routes} from '../router.js'; import {LanguageHelper, LanguagesModel} from './languages_types.js'; @@ -51,6 +52,12 @@ return { prefs: Object, + section_: { + type: Number, + value: Section.kLanguagesAndInput, + readOnly: true, + }, + languages: { type: Object, notify: true, @@ -102,6 +109,7 @@ // Only defined after a render. private languageHelper: LanguageHelper; private focusConfig_: FocusConfig; + private section_: Section; // loadTimeData flags and strings. private inputPageTitle_: string;
diff --git a/chrome/browser/resources/settings/chromeos/os_page_availability.ts b/chrome/browser/resources/settings/chromeos/os_page_availability.ts index 335859b..e53223b 100644 --- a/chrome/browser/resources/settings/chromeos/os_page_availability.ts +++ b/chrome/browser/resources/settings/chromeos/os_page_availability.ts
@@ -16,13 +16,16 @@ */ import {isGuest, isKerberosEnabled, isPowerwashAllowed} from './common/load_time_booleans.js'; -import {OsPageAvailability} from './mojom-webui/routes.mojom-webui.js'; - -export {OsPageAvailability}; +import {Section} from './mojom-webui/routes.mojom-webui.js'; /** - * Used to create the pageAvailability object. - * + * Defines which top-level pages/sections are available to the user. Page keys + * should must derive from the Section enum in routes.mojom. + */ +export type OsPageAvailability = Record<Section, boolean>; + +/** + * Used to create the pageAvailability object depending on load time data. * Can be used to create the pageAvailability object with expected values after * overriding load time data within tests. */ @@ -30,22 +33,23 @@ const isGuestMode = isGuest(); return { - apps: true, - bluetooth: true, - crostini: true, - dateTime: true, - device: true, - files: !isGuestMode, - internet: true, - kerberos: isKerberosEnabled(), - multidevice: !isGuestMode, - osAccessibility: true, - osLanguages: true, - osPeople: !isGuestMode, - osPrinting: true, - osPrivacy: true, - osReset: isPowerwashAllowed(), - osSearch: true, - personalization: !isGuestMode, + [Section.kAboutChromeOs]: true, + [Section.kAccessibility]: true, + [Section.kApps]: true, + [Section.kBluetooth]: true, + [Section.kCrostini]: true, + [Section.kDateAndTime]: true, + [Section.kDevice]: true, + [Section.kFiles]: !isGuestMode, + [Section.kKerberos]: isKerberosEnabled(), + [Section.kLanguagesAndInput]: true, + [Section.kMultiDevice]: !isGuestMode, + [Section.kNetwork]: true, + [Section.kPeople]: !isGuestMode, + [Section.kPersonalization]: !isGuestMode, + [Section.kPrinting]: true, + [Section.kPrivacyAndSecurity]: true, + [Section.kReset]: isPowerwashAllowed(), + [Section.kSearchAndAssistant]: true, }; }
diff --git a/chrome/browser/resources/settings/chromeos/os_people_page/os_people_page.html b/chrome/browser/resources/settings/chromeos/os_people_page/os_people_page.html index 2b6d2ea..c3059cb 100644 --- a/chrome/browser/resources/settings/chromeos/os_people_page/os_people_page.html +++ b/chrome/browser/resources/settings/chromeos/os_people_page/os_people_page.html
@@ -40,7 +40,8 @@ width: 40px; } </style> -<os-settings-animated-pages id="pages" section="osPeople" +<os-settings-animated-pages id="pages" + section="[[section_]]" focus-config="[[focusConfig_]]"> <div route-path="default"> <div class="settings-box first two-line">
diff --git a/chrome/browser/resources/settings/chromeos/os_people_page/os_people_page.ts b/chrome/browser/resources/settings/chromeos/os_people_page/os_people_page.ts index 88b34073..1b01264 100644 --- a/chrome/browser/resources/settings/chromeos/os_people_page/os_people_page.ts +++ b/chrome/browser/resources/settings/chromeos/os_people_page/os_people_page.ts
@@ -29,6 +29,7 @@ import {isAccountManagerEnabled} from '../common/load_time_booleans.js'; import {DeepLinkingMixin} from '../deep_linking_mixin.js'; import {LockStateMixin} from '../lock_state_mixin.js'; +import {Section} from '../mojom-webui/routes.mojom-webui.js'; import {Setting} from '../mojom-webui/setting.mojom-webui.js'; import {OsPageAvailability} from '../os_page_availability.js'; import {RouteObserverMixin} from '../route_observer_mixin.js'; @@ -57,6 +58,12 @@ notify: true, }, + section_: { + type: Number, + value: Section.kPeople, + readOnly: true, + }, + /** * The current sync status, supplied by SyncBrowserProxy. */ @@ -183,6 +190,7 @@ private isAccountManagerEnabled_: boolean; private showParentalControls_: boolean; private focusConfig_: Map<string, string>; + private section_: Section; private showPasswordPromptDialog_: boolean; private showSyncSettingsRevamp_: boolean; private setModes_: Object|undefined;
diff --git a/chrome/browser/resources/settings/chromeos/os_printing_page/os_printing_page.html b/chrome/browser/resources/settings/chromeos/os_printing_page/os_printing_page.html index c51a7a1..7d7bc41 100644 --- a/chrome/browser/resources/settings/chromeos/os_printing_page/os_printing_page.html +++ b/chrome/browser/resources/settings/chromeos/os_printing_page/os_printing_page.html
@@ -1,5 +1,6 @@ <style include="settings-shared"></style> -<os-settings-animated-pages id="pages" section="osPrinting" +<os-settings-animated-pages id="pages" + section="[[section_]]" focus-config="[[focusConfig_]]"> <div route-path="default"> <cr-link-row id="cupsPrinters" label="$i18n{cupsPrintersTitle}"
diff --git a/chrome/browser/resources/settings/chromeos/os_printing_page/os_printing_page.ts b/chrome/browser/resources/settings/chromeos/os_printing_page/os_printing_page.ts index 296e023..707d925e 100644 --- a/chrome/browser/resources/settings/chromeos/os_printing_page/os_printing_page.ts +++ b/chrome/browser/resources/settings/chromeos/os_printing_page/os_printing_page.ts
@@ -12,6 +12,7 @@ import {DeepLinkingMixin} from '../deep_linking_mixin.js'; import {recordSettingChange} from '../metrics_recorder.js'; +import {Section} from '../mojom-webui/routes.mojom-webui.js'; import {Setting} from '../mojom-webui/setting.mojom-webui.js'; import {RouteObserverMixin} from '../route_observer_mixin.js'; import {Route, Router, routes} from '../router.js'; @@ -42,6 +43,12 @@ notify: true, }, + section_: { + type: Number, + value: Section.kPrinting, + readOnly: true, + }, + /** * Printer search string. * */ @@ -76,6 +83,7 @@ private browserProxy_: CupsPrintersBrowserProxy; private focusConfig_: Map<string, string>; + private section_: Section; constructor() { super();
diff --git a/chrome/browser/resources/settings/chromeos/os_privacy_page/os_privacy_page.html b/chrome/browser/resources/settings/chromeos/os_privacy_page/os_privacy_page.html index 710a038..b11dec5 100644 --- a/chrome/browser/resources/settings/chromeos/os_privacy_page/os_privacy_page.html +++ b/chrome/browser/resources/settings/chromeos/os_privacy_page/os_privacy_page.html
@@ -11,7 +11,8 @@ } </style> -<os-settings-animated-pages id="pages" section="osPrivacy" +<os-settings-animated-pages id="pages" + section="[[section_]]" focus-config="[[focusConfig_]]"> <div route-path="default">
diff --git a/chrome/browser/resources/settings/chromeos/os_privacy_page/os_privacy_page.ts b/chrome/browser/resources/settings/chromeos/os_privacy_page/os_privacy_page.ts index f453425..2f5d574 100644 --- a/chrome/browser/resources/settings/chromeos/os_privacy_page/os_privacy_page.ts +++ b/chrome/browser/resources/settings/chromeos/os_privacy_page/os_privacy_page.ts
@@ -27,6 +27,7 @@ import {DeepLinkingMixin} from '../deep_linking_mixin.js'; import {LockStateMixin} from '../lock_state_mixin.js'; import {recordSettingChange} from '../metrics_recorder.js'; +import {Section} from '../mojom-webui/routes.mojom-webui.js'; import {Setting} from '../mojom-webui/setting.mojom-webui.js'; import {RouteObserverMixin} from '../route_observer_mixin.js'; import {Route, Router, routes} from '../router.js'; @@ -57,6 +58,12 @@ static get properties() { return { + section_: { + type: Number, + value: Section.kPrivacyAndSecurity, + readOnly: true, + }, + focusConfig_: { type: Object, value() { @@ -230,6 +237,7 @@ private isSmartPrivacyEnabled_: boolean; private isThunderboltSupported_: boolean; private isUserConfigurable_: boolean; + private section_: Section; private setModes_: Object|undefined; private showDisableProtectionDialog_: boolean; private showPasswordPromptDialog_: boolean;
diff --git a/chrome/browser/resources/settings/chromeos/os_search_page/os_search_page.html b/chrome/browser/resources/settings/chromeos/os_search_page/os_search_page.html index f3e8eeeb..55d55c7 100644 --- a/chrome/browser/resources/settings/chromeos/os_search_page/os_search_page.html +++ b/chrome/browser/resources/settings/chromeos/os_search_page/os_search_page.html
@@ -9,7 +9,8 @@ padding-inline-end: 8px; } </style> -<os-settings-animated-pages id="pages" section="osSearch" +<os-settings-animated-pages id="pages" + section="[[section_]]" focus-config="[[focusConfig_]]"> <div route-path="default"> <template is="dom-if" if="[[!shouldShowQuickAnswersSettings_]]">
diff --git a/chrome/browser/resources/settings/chromeos/os_search_page/os_search_page.ts b/chrome/browser/resources/settings/chromeos/os_search_page/os_search_page.ts index 09d9810..e6e0c33 100644 --- a/chrome/browser/resources/settings/chromeos/os_search_page/os_search_page.ts +++ b/chrome/browser/resources/settings/chromeos/os_search_page/os_search_page.ts
@@ -25,6 +25,7 @@ import {PolymerElement} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js'; import {DeepLinkingMixin} from '../deep_linking_mixin.js'; +import {Section} from '../mojom-webui/routes.mojom-webui.js'; import {Setting} from '../mojom-webui/setting.mojom-webui.js'; import {RouteObserverMixin} from '../route_observer_mixin.js'; import {Route, Router, routes} from '../router.js'; @@ -46,6 +47,12 @@ static get properties() { return { + section_: { + type: Number, + value: Section.kSearchAndAssistant, + readOnly: true, + }, + focusConfig_: Object, shouldShowQuickAnswersSettings_: { @@ -75,6 +82,7 @@ private isAssistantAllowed_: boolean; private focusConfig_: Map<string, string>; + private section_: Section; private shouldShowQuickAnswersSettings_: boolean; override ready() {
diff --git a/chrome/browser/resources/settings/chromeos/os_settings.ts b/chrome/browser/resources/settings/chromeos/os_settings.ts index 18eb282..cd3081b 100644 --- a/chrome/browser/resources/settings/chromeos/os_settings.ts +++ b/chrome/browser/resources/settings/chromeos/os_settings.ts
@@ -69,7 +69,7 @@ import './os_bluetooth_page/os_saved_devices_list_item.js'; import './os_bluetooth_page/settings_fast_pair_constants.js'; -import {startColorChangeUpdater} from 'chrome://resources/cr_components/color_change_listener/colors_css_updater.js'; +import {ColorChangeUpdater} from 'chrome://resources/cr_components/color_change_listener/colors_css_updater.js'; import {loadTimeData} from 'chrome://resources/js/load_time_data.js'; /** @@ -175,7 +175,7 @@ export {OsSettingsMainElement} from './os_settings_main/os_settings_main.js'; export {OsSettingsMenuElement} from './os_settings_menu/os_settings_menu.js'; export {OsSettingsSectionElement} from './os_settings_page/os_settings_section.js'; -export {createRoutes as createRoutesForTesting, OsSettingsRoutes} from './os_settings_routes.js'; +export {createRoutes as createRoutesForTesting, createSection as createSectionForTesting, createSubpage as createSubpageForTesting, OsSettingsRoutes} from './os_settings_routes.js'; export {OsSettingsSearchBoxElement} from './os_settings_search_box/os_settings_search_box.js'; export {OsSettingsSearchBoxBrowserProxyImpl} from './os_settings_search_box/os_settings_search_box_browser_proxy.js'; export {OsSettingsHatsBrowserProxy, OsSettingsHatsBrowserProxyImpl} from './os_settings_ui/os_settings_hats_browser_proxy.js'; @@ -207,6 +207,6 @@ window.addEventListener('load', () => { if (jellyEnabled) { - startColorChangeUpdater(); + ColorChangeUpdater.forDocument().start(); } });
diff --git a/chrome/browser/resources/settings/chromeos/os_settings_menu/os_settings_menu.html b/chrome/browser/resources/settings/chromeos/os_settings_menu/os_settings_menu.html index 631678a..72072571 100644 --- a/chrome/browser/resources/settings/chromeos/os_settings_menu/os_settings_menu.html +++ b/chrome/browser/resources/settings/chromeos/os_settings_menu/os_settings_menu.html
@@ -159,7 +159,7 @@ selected="[[selectedUrl_]]"> <template is="dom-repeat" items="[[basicMenuItems_]]" id="topMenuRepeat"> <a href="[[item.path]]" class="item" - data-page-name$="[[item.pageName]]"> + data-section$="[[item.pageName]]"> <iron-icon icon="[[item.icon]]"></iron-icon> [[item.label]] </a> @@ -180,7 +180,7 @@ selected="[[selectedUrl_]]"> <template is="dom-repeat" items="[[advancedMenuItems_]]"> <a href="[[item.path]]" class="item" - data-page-name$="[[item.pageName]]"> + data-section$="[[item.pageName]]"> <iron-icon icon="[[item.icon]]"></iron-icon> [[item.label]] </a>
diff --git a/chrome/browser/resources/settings/chromeos/os_settings_menu/os_settings_menu.ts b/chrome/browser/resources/settings/chromeos/os_settings_menu/os_settings_menu.ts index 2349ab2..260d673 100644 --- a/chrome/browser/resources/settings/chromeos/os_settings_menu/os_settings_menu.ts +++ b/chrome/browser/resources/settings/chromeos/os_settings_menu/os_settings_menu.ts
@@ -27,7 +27,7 @@ import {getTemplate} from './os_settings_menu.html.js'; interface MenuItemData { - pageName: keyof OsPageAvailability; + pageName: routesMojom.Section; path: string; icon: string; label: string; @@ -137,69 +137,70 @@ } private computeBasicMenuItems_(): MenuItemData[] { + const {Section} = routesMojom; const basicMenuItems: MenuItemData[] = [ { - pageName: 'internet', + pageName: Section.kNetwork, path: routesMojom.NETWORK_SECTION_PATH, icon: 'os-settings:network-wifi', label: this.i18n('internetPageTitle'), }, { - pageName: 'bluetooth', + pageName: Section.kBluetooth, path: routesMojom.BLUETOOTH_SECTION_PATH, icon: 'cr:bluetooth', label: this.i18n('bluetoothPageTitle'), }, { - pageName: 'multidevice', + pageName: Section.kMultiDevice, path: routesMojom.MULTI_DEVICE_SECTION_PATH, icon: 'os-settings:multidevice-better-together-suite', label: this.i18n('multidevicePageTitle'), }, { - pageName: 'osPeople', + pageName: Section.kPeople, path: routesMojom.PEOPLE_SECTION_PATH, icon: 'cr:person', label: this.i18n('osPeoplePageTitle'), }, { - pageName: 'kerberos', + pageName: Section.kKerberos, path: routesMojom.KERBEROS_SECTION_PATH, icon: 'os-settings:auth-key', label: this.i18n('kerberosPageTitle'), }, { - pageName: 'device', + pageName: Section.kDevice, path: routesMojom.DEVICE_SECTION_PATH, icon: 'os-settings:laptop-chromebook', label: this.i18n('devicePageTitle'), }, { - pageName: 'personalization', + pageName: Section.kPersonalization, path: routesMojom.PERSONALIZATION_SECTION_PATH, icon: 'os-settings:paint-brush', label: this.i18n('personalizationPageTitle'), }, { - pageName: 'osSearch', + pageName: Section.kSearchAndAssistant, path: routesMojom.SEARCH_AND_ASSISTANT_SECTION_PATH, icon: 'cr:search', label: this.i18n('osSearchPageTitle'), }, { - pageName: 'osPrivacy', + pageName: Section.kPrivacyAndSecurity, path: routesMojom.PRIVACY_AND_SECURITY_SECTION_PATH, icon: 'cr:security', label: this.i18n('privacyPageTitle'), }, { - pageName: 'apps', + pageName: Section.kApps, path: routesMojom.APPS_SECTION_PATH, icon: 'os-settings:apps', label: this.i18n('appsPageTitle'), }, { - pageName: 'osAccessibility', + pageName: Section.kAccessibility, path: routesMojom.ACCESSIBILITY_SECTION_PATH, icon: 'os-settings:accessibility', label: this.i18n('a11yPageTitle'), @@ -211,39 +212,40 @@ } private computeAdvancedMenuItems_(): MenuItemData[] { + const {Section} = routesMojom; const advancedMenuItems: MenuItemData[] = [ { - pageName: 'dateTime', + pageName: Section.kDateAndTime, path: routesMojom.DATE_AND_TIME_SECTION_PATH, icon: 'os-settings:access-time', label: this.i18n('dateTimePageTitle'), }, { - pageName: 'osLanguages', + pageName: Section.kLanguagesAndInput, path: routesMojom.LANGUAGES_AND_INPUT_SECTION_PATH, icon: 'os-settings:language', label: this.i18n('osLanguagesPageTitle'), }, { - pageName: 'files', + pageName: Section.kFiles, path: routesMojom.FILES_SECTION_PATH, icon: 'os-settings:folder-outline', label: this.i18n('filesPageTitle'), }, { - pageName: 'osPrinting', + pageName: Section.kPrinting, path: routesMojom.PRINTING_SECTION_PATH, icon: 'os-settings:print', label: this.i18n('printingPageTitle'), }, { - pageName: 'crostini', + pageName: Section.kCrostini, path: routesMojom.CROSTINI_SECTION_PATH, icon: 'os-settings:developer-tags', label: this.i18n('crostiniPageTitle'), }, { - pageName: 'osReset', + pageName: Section.kReset, path: routesMojom.RESET_SECTION_PATH, icon: 'os-settings:restore', label: this.i18n('resetPageTitle'),
diff --git a/chrome/browser/resources/settings/chromeos/os_settings_page/os_settings_animated_pages.ts b/chrome/browser/resources/settings/chromeos/os_settings_page/os_settings_animated_pages.ts index ab61b11..9dfc98d 100644 --- a/chrome/browser/resources/settings/chromeos/os_settings_page/os_settings_animated_pages.ts +++ b/chrome/browser/resources/settings/chromeos/os_settings_page/os_settings_animated_pages.ts
@@ -9,7 +9,7 @@ * * Example: * - * <os-settings-animated-pages section="privacy"> + * <os-settings-animated-pages section="[[Section.kNetwork]]"> * <!-- Insert your section controls here --> * </os-settings-animated-pages> */ @@ -23,6 +23,7 @@ import {getSettingIdParameter} from '../common/setting_id_param_util.js'; import {FocusConfig} from '../focus_config.js'; +import {Section} from '../mojom-webui/routes.mojom-webui.js'; import {RouteObserverMixin} from '../route_observer_mixin.js'; import {Route, Router} from '../router.js'; @@ -51,12 +52,16 @@ return { /** * Routes with this section activate this element. For instance, if this - * property is 'search', and currentRoute.section is also set to 'search', - * this element will display the subpage in currentRoute.subpage. + * property is Section.kNetwork and currentRoute.section is also set to + * Section.kNetwork, this element will display the corresponding page or + * subpage. * - * The section name must match the name specified in route.js. + * Must match one of the Section enum entries from routes.mojom. */ - section: String, + section: { + type: Number, + reflectToAttribute: true, + }, /** * A Map specifying which element should be focused when exiting a @@ -68,7 +73,7 @@ }; } - section: string; + section: Section; focusConfig: FocusConfig|null = null; private previousRoute_: Route|null; private lightDomReady_: boolean = false; @@ -89,6 +94,12 @@ this.previousRoute_ = null; } + override ready() { + super.ready(); + + assert(this.section in Section, `Invalid section: ${this.section}.`); + } + private onIronSelect_(e: Event) { // Ignore bubbling 'iron-select' events not originating from // |animatedPages| itself.
diff --git a/chrome/browser/resources/settings/chromeos/os_settings_page/os_settings_section.ts b/chrome/browser/resources/settings/chromeos/os_settings_page/os_settings_section.ts index d3fe4c8..9bb4895 100644 --- a/chrome/browser/resources/settings/chromeos/os_settings_page/os_settings_section.ts +++ b/chrome/browser/resources/settings/chromeos/os_settings_page/os_settings_section.ts
@@ -4,21 +4,26 @@ /** * @fileoverview - * 'settings-section' shows a paper material themed section with a header + * 'os-settings-section' shows a paper material themed section with a header * which shows its page title. * * The section can expand vertically to fill its container's padding edge. * * Example: * - * <settings-section page-title="[[pageTitle]]" section="privacy"> + * <os-settings-section + * page-title="[[pageTitle]]" + * section="[[Section.kNetwork]]"> * <!-- Insert your section controls here --> - * </settings-section> + * </os-settings-section> */ import '//resources/cr_elements/cr_shared_vars.css.js'; import {PolymerElement} from '//resources/polymer/v3_0/polymer/polymer_bundled.min.js'; +import {assert} from 'chrome://resources/js/assert_ts.js'; + +import {Section} from '../mojom-webui/routes.mojom-webui.js'; import {getTemplate} from './os_settings_section.html.js'; @@ -34,11 +39,14 @@ static get properties() { return { /** - * The section name should match a name specified in route.js. The - * MainPageBeMixin will expand this section if this section name matches - * currentRoute.section. + * If defined, the value must match one of the Section enum entries from + * routes.mojom. MainPageBeMixin will expand this section if this section + * name matches currentRoute.section. */ - section: String, + section: { + type: Number, + reflectToAttribute: true, + }, /** * Title for the section header. Initialize so we can use the @@ -51,9 +59,17 @@ }; } - section: string; + section: Section; pageTitle: string; + override ready() { + super.ready(); + + if (this.section !== undefined) { + assert(this.section in Section, `Invalid section: ${this.section}.`); + } + } + /** * Get the value to which to set the aria-hidden attribute of the section * heading.
diff --git a/chrome/browser/resources/settings/chromeos/os_settings_routes.ts b/chrome/browser/resources/settings/chromeos/os_settings_routes.ts index b047cf4..c59b726b 100644 --- a/chrome/browser/resources/settings/chromeos/os_settings_routes.ts +++ b/chrome/browser/resources/settings/chromeos/os_settings_routes.ts
@@ -16,42 +16,51 @@ import {androidAppsVisible, isArcVmEnabled, isCrostiniSupported, isGuest, isKerberosEnabled, isPluginVmAvailable, isPowerwashAllowed} from './common/load_time_booleans.js'; import * as routesMojom from './mojom-webui/routes.mojom-webui.js'; -/** Class for navigable routes. */ +/** + * Class for navigable routes. Routes are representing by a tree data structure. + */ export class Route { depth: number; + + /** + * Whether this route corresponds to a navigable dialog. Navigable dialog + * routes must belong to a |section|. + */ isNavigableDialog: boolean; - section: string; + + /** + * The top-level page/section that this route belongs to. Values are derived + * from the Section enum in routes.mojom. + */ + section: routesMojom.Section|null; + + /** + * The document title that should be displayed for this route. + */ title: string|undefined; parent: Route|null; path: string; constructor(path: string, title?: string) { + assert(path.startsWith('/')); + this.path = path; this.title = title; this.parent = null; this.depth = 0; - - /** - * Whether this route corresponds to a navigable dialog. Those routes must - * belong to a "section". - */ this.isNavigableDialog = false; - - // Below are all legacy properties to provide compatibility with the old - // routing system. - this.section = ''; + this.section = null; } /** - * Returns a new Route instance that's a child of this route. + * @returns A new Route instance that is a child of this route. If |path| does + * not have a leading slash, then it extends this route's path. Else, the + * given path is set. */ createChild(path: string, title?: string): Route { assert(path); - // |path| extends this route's path if it doesn't have a leading slash. - // If it does have a leading slash, it's just set as the child route's path - const childPath = path[0] === '/' ? path : `${this.path}/${path}`; - + const childPath = path.startsWith('/') ? path : `${this.path}/${path}`; const route = new Route(childPath, title); route.parent = this; route.section = this.section; @@ -60,16 +69,6 @@ } /** - * Returns a new Route instance that's a child section of this route. - * TODO(tommycli): Remove once we've obsoleted the concept of sections. - */ - createSection(path: string, section: string, title?: string): Route { - const route = this.createChild(path, title); - route.section = section; - return route; - } - - /** * Returns the absolute path string for this Route, assuming this function * has been called from within chrome://os-settings. */ @@ -93,7 +92,7 @@ * Returns true if this route is a subpage of a section. */ isSubpage(): boolean { - return !this.isNavigableDialog && !!this.parent && !!this.section && + return !this.isNavigableDialog && !!this.parent && this.section !== null && this.parent.section === this.section; } } @@ -213,13 +212,15 @@ SYNC_ADVANCED: Route; } -function createSection( - parent: Route, path: string, _section: routesMojom.Section): Route { - // TODO(khorimoto): Add |section| to the the Route object. - return parent.createSection(`/${path}`, /*section=*/ path); +export function createSection( + parent: Route, path: string, section: routesMojom.Section, + title?: string): Route { + const route = parent.createChild(`/${path}`, title); + route.section = section; + return route; } -function createSubpage( +export function createSubpage( parent: Route, path: string, _subpage: routesMojom.Subpage): Route { // TODO(khorimoto): Add |subpage| to the Route object. return parent.createChild('/' + path); @@ -247,14 +248,14 @@ // and kWifiDetails subpages. r.INTERNET_NETWORKS = createSubpage(r.INTERNET, 'networks', Subpage.kWifiNetworks); - r.NETWORK_DETAIL = - createSubpage(r.INTERNET, 'networkDetail', Subpage.kWifiDetails); + r.NETWORK_DETAIL = createSubpage( + r.INTERNET, routesMojom.WIFI_DETAILS_SUBPAGE_PATH, Subpage.kWifiDetails); r.KNOWN_NETWORKS = createSubpage( r.INTERNET, routesMojom.KNOWN_NETWORKS_SUBPAGE_PATH, Subpage.kKnownNetworks); if (loadTimeData.getBoolean('isHotspotEnabled')) { - r.HOTSPOT_DETAIL = - createSubpage(r.INTERNET, 'hotspotDetail', Subpage.kHotspotDetails); + r.HOTSPOT_DETAIL = createSubpage( + r.INTERNET, routesMojom.HOTSPOT_SUBPAGE_PATH, Subpage.kHotspotDetails); } if (loadTimeData.getBoolean('isApnRevampEnabled')) { r.APN = @@ -581,8 +582,9 @@ // implemented using createSection(). // TODO(khorimoto): Add Section.kAboutChromeOs to Route object. r.ABOUT = new Route('/' + routesMojom.ABOUT_CHROME_OS_SECTION_PATH); - r.ABOUT_ABOUT = r.ABOUT.createSection( - '/' + routesMojom.ABOUT_CHROME_OS_DETAILS_SUBPAGE_PATH, 'about'); + r.ABOUT_ABOUT = createSection( + r.ABOUT, routesMojom.ABOUT_CHROME_OS_DETAILS_SUBPAGE_PATH, + Section.kAboutChromeOs); r.DETAILED_BUILD_INFO = createSubpage( r.ABOUT_ABOUT, routesMojom.DETAILED_BUILD_INFO_SUBPAGE_PATH, Subpage.kDetailedBuildInfo);
diff --git a/chrome/browser/resources/settings/chromeos/personalization_page/personalization_page.html b/chrome/browser/resources/settings/chromeos/personalization_page/personalization_page.html index 6b28433..b5dad19ec 100644 --- a/chrome/browser/resources/settings/chromeos/personalization_page/personalization_page.html +++ b/chrome/browser/resources/settings/chromeos/personalization_page/personalization_page.html
@@ -1,5 +1,6 @@ <style include="settings-shared"></style> -<os-settings-animated-pages id="pages" section="personalization"> +<os-settings-animated-pages id="pages" + section="[[section_]]"> <div route-path="default"> <cr-link-row id="personalizationHubButton" label="$i18n{personalizationHubTitle}"
diff --git a/chrome/browser/resources/settings/chromeos/personalization_page/personalization_page.ts b/chrome/browser/resources/settings/chromeos/personalization_page/personalization_page.ts index 1f7f112..ec52e77 100644 --- a/chrome/browser/resources/settings/chromeos/personalization_page/personalization_page.ts +++ b/chrome/browser/resources/settings/chromeos/personalization_page/personalization_page.ts
@@ -15,6 +15,8 @@ import {I18nMixin} from 'chrome://resources/cr_elements/i18n_mixin.js'; import {PolymerElement} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js'; +import {Section} from '../mojom-webui/routes.mojom-webui.js'; + import {PersonalizationHubBrowserProxy, PersonalizationHubBrowserProxyImpl} from './personalization_hub_browser_proxy.js'; import {getTemplate} from './personalization_page.html.js'; @@ -30,7 +32,18 @@ return getTemplate(); } + static get properties() { + return { + section_: { + type: Number, + value: Section.kPersonalization, + readOnly: true, + }, + }; + } + private personalizationHubBrowserProxy_: PersonalizationHubBrowserProxy; + private section_: Section; constructor() { super();
diff --git a/chrome/browser/resources/side_panel/bookmarks/power_bookmarks_list.ts b/chrome/browser/resources/side_panel/bookmarks/power_bookmarks_list.ts index 3f95c26..3cd9696 100644 --- a/chrome/browser/resources/side_panel/bookmarks/power_bookmarks_list.ts +++ b/chrome/browser/resources/side_panel/bookmarks/power_bookmarks_list.ts
@@ -30,7 +30,7 @@ import {ShoppingListApiProxy, ShoppingListApiProxyImpl} from '//bookmarks-side-panel.top-chrome/shared/commerce/shopping_list_api_proxy.js'; import {BookmarkProductInfo} from '//bookmarks-side-panel.top-chrome/shared/shopping_list.mojom-webui.js'; import {SpEmptyStateElement} from '//bookmarks-side-panel.top-chrome/shared/sp_empty_state.js'; -import {startColorChangeUpdater} from '//resources/cr_components/color_change_listener/colors_css_updater.js'; +import {ColorChangeUpdater} from '//resources/cr_components/color_change_listener/colors_css_updater.js'; import {getInstance as getAnnouncerInstance} from '//resources/cr_elements/cr_a11y_announcer/cr_a11y_announcer.js'; import {CrActionMenuElement} from '//resources/cr_elements/cr_action_menu/cr_action_menu.js'; import {CrDialogElement} from '//resources/cr_elements/cr_dialog/cr_dialog.js'; @@ -233,7 +233,7 @@ constructor() { super(); - startColorChangeUpdater(); + ColorChangeUpdater.forDocument().start(); } override connectedCallback() {
diff --git a/chrome/browser/resources/side_panel/customize_chrome/app.ts b/chrome/browser/resources/side_panel/customize_chrome/app.ts index f53e342a..46d16db 100644 --- a/chrome/browser/resources/side_panel/customize_chrome/app.ts +++ b/chrome/browser/resources/side_panel/customize_chrome/app.ts
@@ -12,7 +12,7 @@ import './shortcuts.js'; import './themes.js'; -import {startColorChangeUpdater} from 'chrome://resources/cr_components/color_change_listener/colors_css_updater.js'; +import {ColorChangeUpdater} from 'chrome://resources/cr_components/color_change_listener/colors_css_updater.js'; import {HelpBubbleMixin, HelpBubbleMixinInterface} from 'chrome://resources/cr_components/help_bubble/help_bubble_mixin.js'; import {assert} from 'chrome://resources/js/assert_ts.js'; import {loadTimeData} from 'chrome://resources/js/load_time_data.js'; @@ -83,7 +83,7 @@ override ready() { super.ready(); - startColorChangeUpdater(); + ColorChangeUpdater.forDocument().start(); this.registerHelpBubble( CHANGE_CHROME_THEME_BUTTON_ELEMENT_ID, ['#appearanceElement', '#editThemeButton']);
diff --git a/chrome/browser/resources/side_panel/reading_list/app.ts b/chrome/browser/resources/side_panel/reading_list/app.ts index 2158fe2..59cecba 100644 --- a/chrome/browser/resources/side_panel/reading_list/app.ts +++ b/chrome/browser/resources/side_panel/reading_list/app.ts
@@ -17,7 +17,7 @@ import './reading_list_item.js'; import '../strings.m.js'; -import {startColorChangeUpdater} from '//resources/cr_components/color_change_listener/colors_css_updater.js'; +import {ColorChangeUpdater} from '//resources/cr_components/color_change_listener/colors_css_updater.js'; import {HelpBubbleMixin, HelpBubbleMixinInterface} from 'chrome://resources/cr_components/help_bubble/help_bubble_mixin.js'; import {assertNotReached} from 'chrome://resources/js/assert_ts.js'; import {EventTracker} from 'chrome://resources/js/event_tracker.js'; @@ -108,7 +108,7 @@ constructor() { super(); - startColorChangeUpdater(); + ColorChangeUpdater.forDocument().start(); this.visibilityChangedListener_ = () => { // Refresh Reading List's list data when transitioning into a visible
diff --git a/chrome/browser/resources/tab_search/app.ts b/chrome/browser/resources/tab_search/app.ts index 3c5fbeb..d5291f0 100644 --- a/chrome/browser/resources/tab_search/app.ts +++ b/chrome/browser/resources/tab_search/app.ts
@@ -16,7 +16,7 @@ import './title_item.js'; import './strings.m.js'; -import {startColorChangeUpdater} from '//resources/cr_components/color_change_listener/colors_css_updater.js'; +import {ColorChangeUpdater} from '//resources/cr_components/color_change_listener/colors_css_updater.js'; import {assert} from 'chrome://resources/js/assert_ts.js'; import {loadTimeData} from 'chrome://resources/js/load_time_data.js'; import {MetricsReporter, MetricsReporterImpl} from 'chrome://resources/js/metrics_reporter/metrics_reporter.js'; @@ -145,7 +145,7 @@ constructor() { super(); - startColorChangeUpdater(); + ColorChangeUpdater.forDocument().start(); this.visibilityChangedListener_ = () => { // Refresh Tab Search's tab data when transitioning into a visible state.
diff --git a/chrome/browser/resources/tab_strip/tab_list.ts b/chrome/browser/resources/tab_strip/tab_list.ts index 8fa85901..0456f99 100644 --- a/chrome/browser/resources/tab_strip/tab_list.ts +++ b/chrome/browser/resources/tab_strip/tab_list.ts
@@ -6,7 +6,7 @@ import './tab.js'; import './tab_group.js'; -import {startColorChangeUpdater} from 'chrome://resources/cr_components/color_change_listener/colors_css_updater.js'; +import {ColorChangeUpdater} from 'chrome://resources/cr_components/color_change_listener/colors_css_updater.js'; import {assert} from 'chrome://resources/js/assert_ts.js'; import {CustomElement} from 'chrome://resources/js/custom_element.js'; import {EventTracker} from 'chrome://resources/js/event_tracker.js'; @@ -262,7 +262,7 @@ const dragManager = new DragManager(this); dragManager.startObserving(); - startColorChangeUpdater(); + ColorChangeUpdater.forDocument().start(); } private addAnimationPromise_(promise: Promise<void>) {
diff --git a/chrome/browser/resources/webui_gallery/app.ts b/chrome/browser/resources/webui_gallery/app.ts index de729a0..d170048 100644 --- a/chrome/browser/resources/webui_gallery/app.ts +++ b/chrome/browser/resources/webui_gallery/app.ts
@@ -8,7 +8,7 @@ import '//resources/cr_elements/cr_shared_style.css.js'; import '//resources/polymer/v3_0/iron-location/iron-location.js'; -import {COLORS_CSS_SELECTOR, startColorChangeUpdater} from '//resources/cr_components/color_change_listener/colors_css_updater.js'; +import {ColorChangeUpdater, COLORS_CSS_SELECTOR} from '//resources/cr_components/color_change_listener/colors_css_updater.js'; import {CrMenuSelector} from '//resources/cr_elements/cr_menu_selector/cr_menu_selector.js'; import {assert} from '//resources/js/assert_ts.js'; import {PolymerElement} from '//resources/polymer/v3_0/polymer/polymer_bundled.min.js'; @@ -174,7 +174,7 @@ override ready() { super.ready(); - startColorChangeUpdater(); + ColorChangeUpdater.forDocument().start(); } private async onPathChanged_() {
diff --git a/chrome/browser/safe_browsing/cloud_content_scanning/deep_scanning_browsertest_base.cc b/chrome/browser/safe_browsing/cloud_content_scanning/deep_scanning_browsertest_base.cc new file mode 100644 index 0000000..eeb498b49 --- /dev/null +++ b/chrome/browser/safe_browsing/cloud_content_scanning/deep_scanning_browsertest_base.cc
@@ -0,0 +1,186 @@ +// Copyright 2020 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "chrome/browser/safe_browsing/cloud_content_scanning/deep_scanning_browsertest_base.h" + +#include "base/functional/bind.h" +#include "base/functional/callback_helpers.h" +#include "chrome/browser/browser_process.h" +#include "chrome/browser/enterprise/connectors/analysis/content_analysis_dialog.h" +#include "chrome/browser/enterprise/connectors/analysis/fake_content_analysis_delegate.h" +#include "chrome/browser/enterprise/connectors/analysis/files_request_handler.h" +#include "chrome/browser/enterprise/connectors/connectors_service.h" +#include "chrome/browser/policy/dm_token_utils.h" +#include "chrome/browser/safe_browsing/cloud_content_scanning/deep_scanning_test_utils.h" +#include "chrome/browser/ui/browser.h" +#include "chrome/test/base/testing_browser_process.h" +#include "components/prefs/pref_service.h" +#include "components/prefs/scoped_user_pref_update.h" +#include "components/safe_browsing/core/common/features.h" +#include "components/safe_browsing/core/common/safe_browsing_prefs.h" + +namespace safe_browsing { + +namespace { + +constexpr char kDmToken[] = "dm_token"; + +constexpr base::TimeDelta kMinimumPendingDelay = base::Milliseconds(400); +constexpr base::TimeDelta kSuccessTimeout = base::Milliseconds(100); +constexpr base::TimeDelta kShowDialogDelay = base::Milliseconds(0); + +class UnresponsiveFilesRequestHandler + : public enterprise_connectors::FilesRequestHandler { + public: + using enterprise_connectors::FilesRequestHandler::FilesRequestHandler; + + static std::unique_ptr<enterprise_connectors::FilesRequestHandler> Create( + safe_browsing::BinaryUploadService* upload_service, + Profile* profile, + const enterprise_connectors::AnalysisSettings& analysis_settings, + GURL url, + const std::string& source, + const std::string& destination, + const std::string& user_action_id, + const std::string& tab_title, + safe_browsing::DeepScanAccessPoint access_point, + const std::vector<base::FilePath>& paths, + enterprise_connectors::FilesRequestHandler::CompletionCallback callback) { + return base::WrapUnique(new UnresponsiveFilesRequestHandler( + upload_service, profile, analysis_settings, url, source, destination, + user_action_id, tab_title, access_point, paths, std::move(callback))); + } + + private: + void UploadFileForDeepScanning( + safe_browsing::BinaryUploadService::Result result, + const base::FilePath& path, + std::unique_ptr<safe_browsing::BinaryUploadService::Request> request) + override { + // Do nothing. + } +}; + +class UnresponsiveContentAnalysisDelegate + : public enterprise_connectors::FakeContentAnalysisDelegate { + public: + using enterprise_connectors::FakeContentAnalysisDelegate:: + FakeContentAnalysisDelegate; + + static std::unique_ptr<enterprise_connectors::ContentAnalysisDelegate> Create( + base::RepeatingClosure delete_closure, + StatusCallback status_callback, + std::string dm_token, + content::WebContents* web_contents, + Data data, + CompletionCallback callback) { + enterprise_connectors::FilesRequestHandler::SetFactoryForTesting( + base::BindRepeating(&UnresponsiveFilesRequestHandler::Create)); + return std::make_unique<UnresponsiveContentAnalysisDelegate>( + delete_closure, status_callback, std::move(dm_token), web_contents, + std::move(data), std::move(callback)); + } + + private: + void UploadTextForDeepScanning( + std::unique_ptr<BinaryUploadService::Request> request) override { + // Do nothing. + } +}; + +} // namespace + +DeepScanningBrowserTestBase::DeepScanningBrowserTestBase() { + // Change the time values of the upload UI to smaller ones to make tests + // showing it run faster. + enterprise_connectors::ContentAnalysisDialog:: + SetMinimumPendingDialogTimeForTesting(kMinimumPendingDelay); + enterprise_connectors::ContentAnalysisDialog:: + SetSuccessDialogTimeoutForTesting(kSuccessTimeout); + enterprise_connectors::ContentAnalysisDialog::SetShowDialogDelayForTesting( + kShowDialogDelay); +} + +DeepScanningBrowserTestBase::~DeepScanningBrowserTestBase() = default; + +void DeepScanningBrowserTestBase::TearDownOnMainThread() { + enterprise_connectors::ContentAnalysisDelegate::ResetFactoryForTesting(); + enterprise_connectors::FilesRequestHandler::ResetFactoryForTesting(); + + ClearAnalysisConnector(browser()->profile()->GetPrefs(), + enterprise_connectors::FILE_ATTACHED); + ClearAnalysisConnector(browser()->profile()->GetPrefs(), + enterprise_connectors::FILE_DOWNLOADED); + ClearAnalysisConnector(browser()->profile()->GetPrefs(), + enterprise_connectors::BULK_DATA_ENTRY); + ClearAnalysisConnector(browser()->profile()->GetPrefs(), + enterprise_connectors::PRINT); + SetOnSecurityEventReporting(browser()->profile()->GetPrefs(), false); +} + +void DeepScanningBrowserTestBase::SetUpDelegate() { + SetDMTokenForTesting(policy::DMToken::CreateValidToken(kDmToken)); + enterprise_connectors::ContentAnalysisDelegate::SetFactoryForTesting( + base::BindRepeating( + &enterprise_connectors::FakeContentAnalysisDelegate::Create, + base::DoNothing(), + base::BindRepeating(&DeepScanningBrowserTestBase::StatusCallback, + base::Unretained(this)), + kDmToken)); +} + +void DeepScanningBrowserTestBase::SetUpUnresponsiveDelegate() { + SetDMTokenForTesting(policy::DMToken::CreateValidToken(kDmToken)); + enterprise_connectors::ContentAnalysisDelegate::SetFactoryForTesting( + base::BindRepeating( + &UnresponsiveContentAnalysisDelegate::Create, base::DoNothing(), + base::BindRepeating(&DeepScanningBrowserTestBase::StatusCallback, + base::Unretained(this)), + kDmToken)); +} + +void DeepScanningBrowserTestBase::SetQuitClosure( + base::RepeatingClosure quit_closure) { + quit_closure_ = quit_closure; +} + +void DeepScanningBrowserTestBase::CallQuitClosure() { + if (!quit_closure_.is_null()) + quit_closure_.Run(); +} + +void DeepScanningBrowserTestBase::SetStatusCallbackResponse( + enterprise_connectors::ContentAnalysisResponse response) { + connector_status_callback_response_ = response; +} + +enterprise_connectors::ContentAnalysisResponse +DeepScanningBrowserTestBase::StatusCallback(const std::string& contents, + const base::FilePath& path) { + return connector_status_callback_response_; +} + +void DeepScanningBrowserTestBase::CreateFilesForTest( + const std::vector<std::string>& paths, + const std::vector<std::string>& contents, + enterprise_connectors::ContentAnalysisDelegate::Data* data) { + ASSERT_EQ(paths.size(), contents.size()); + + ASSERT_TRUE(temp_dir_.CreateUniqueTempDir()); + + for (size_t i = 0; i < paths.size(); ++i) { + base::FilePath path = temp_dir_.GetPath().AppendASCII(paths[i]); + created_file_paths_.emplace_back(path); + base::File file(path, base::File::FLAG_CREATE | base::File::FLAG_WRITE); + file.WriteAtCurrentPos(contents[i].data(), contents[i].size()); + data->paths.emplace_back(path); + } +} + +const std::vector<base::FilePath>& +DeepScanningBrowserTestBase::created_file_paths() const { + return created_file_paths_; +} + +} // namespace safe_browsing
diff --git a/chrome/browser/enterprise/connectors/test/deep_scanning_browsertest_base.h b/chrome/browser/safe_browsing/cloud_content_scanning/deep_scanning_browsertest_base.h similarity index 65% rename from chrome/browser/enterprise/connectors/test/deep_scanning_browsertest_base.h rename to chrome/browser/safe_browsing/cloud_content_scanning/deep_scanning_browsertest_base.h index ac12f86..1e92a41 100644 --- a/chrome/browser/enterprise/connectors/test/deep_scanning_browsertest_base.h +++ b/chrome/browser/safe_browsing/cloud_content_scanning/deep_scanning_browsertest_base.h
@@ -2,14 +2,14 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef CHROME_BROWSER_ENTERPRISE_CONNECTORS_TEST_DEEP_SCANNING_BROWSERTEST_BASE_H_ -#define CHROME_BROWSER_ENTERPRISE_CONNECTORS_TEST_DEEP_SCANNING_BROWSERTEST_BASE_H_ +#ifndef CHROME_BROWSER_SAFE_BROWSING_CLOUD_CONTENT_SCANNING_DEEP_SCANNING_BROWSERTEST_BASE_H_ +#define CHROME_BROWSER_SAFE_BROWSING_CLOUD_CONTENT_SCANNING_DEEP_SCANNING_BROWSERTEST_BASE_H_ #include "chrome/browser/enterprise/connectors/analysis/content_analysis_delegate.h" #include "chrome/test/base/in_process_browser_test.h" #include "components/safe_browsing/core/common/safe_browsing_prefs.h" -namespace enterprise_connectors::test { +namespace safe_browsing { // Base test class for deep scanning browser tests. Common utility functions // used by browser tests should be added to this class. @@ -33,16 +33,19 @@ void CallQuitClosure(); // Set what StatusCallback returns. - void SetStatusCallbackResponse(ContentAnalysisResponse response); + void SetStatusCallbackResponse( + enterprise_connectors::ContentAnalysisResponse response); // Callbacks used to set up the fake delegate factory. - ContentAnalysisResponse StatusCallback(const std::string& contents, - const base::FilePath& path); + enterprise_connectors::ContentAnalysisResponse StatusCallback( + const std::string& contents, + const base::FilePath& path); // Creates temporary files for testing in |temp_dir_|, and add them to |data|. - void CreateFilesForTest(const std::vector<std::string>& paths, - const std::vector<std::string>& contents, - ContentAnalysisDelegate::Data* data); + void CreateFilesForTest( + const std::vector<std::string>& paths, + const std::vector<std::string>& contents, + enterprise_connectors::ContentAnalysisDelegate::Data* data); const std::vector<base::FilePath>& created_file_paths() const; @@ -51,11 +54,12 @@ private: base::RepeatingClosure quit_closure_; - ContentAnalysisResponse connector_status_callback_response_; + enterprise_connectors::ContentAnalysisResponse + connector_status_callback_response_; base::ScopedTempDir temp_dir_; std::vector<base::FilePath> created_file_paths_; }; -} // namespace enterprise_connectors::test +} // namespace safe_browsing -#endif // CHROME_BROWSER_ENTERPRISE_CONNECTORS_TEST_DEEP_SCANNING_BROWSERTEST_BASE_H_ +#endif // CHROME_BROWSER_SAFE_BROWSING_CLOUD_CONTENT_SCANNING_DEEP_SCANNING_BROWSERTEST_BASE_H_
diff --git a/chrome/browser/enterprise/connectors/test/deep_scanning_test_utils.cc b/chrome/browser/safe_browsing/cloud_content_scanning/deep_scanning_test_utils.cc similarity index 93% rename from chrome/browser/enterprise/connectors/test/deep_scanning_test_utils.cc rename to chrome/browser/safe_browsing/cloud_content_scanning/deep_scanning_test_utils.cc index ddbe456b..5fac298 100644 --- a/chrome/browser/enterprise/connectors/test/deep_scanning_test_utils.cc +++ b/chrome/browser/safe_browsing/cloud_content_scanning/deep_scanning_test_utils.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/enterprise/connectors/test/deep_scanning_test_utils.h" +#include "chrome/browser/safe_browsing/cloud_content_scanning/deep_scanning_test_utils.h" #include "base/containers/contains.h" #include "base/containers/flat_map.h" @@ -31,7 +31,7 @@ using extensions::SafeBrowsingPrivateEventRouter; using ::testing::_; -namespace enterprise_connectors::test { +namespace safe_browsing { EventReportValidator::EventReportValidator( policy::MockCloudPolicyClient* client) @@ -166,7 +166,8 @@ const std::string& expected_filename, const std::string& expected_sha256, const std::string& expected_trigger, - const ContentAnalysisResponse::Result& expected_dlp_verdict, + const enterprise_connectors::ContentAnalysisResponse::Result& + expected_dlp_verdict, const std::set<std::string>* expected_mimetypes, absl::optional<int64_t> expected_content_size, const std::string& expected_result, @@ -206,7 +207,8 @@ const std::vector<std::string>& expected_filenames, const std::vector<std::string>& expected_sha256s, const std::string& expected_trigger, - const std::vector<ContentAnalysisResponse::Result>& expected_dlp_verdicts, + const std::vector<enterprise_connectors::ContentAnalysisResponse::Result>& + expected_dlp_verdicts, const std::set<std::string>* expected_mimetypes, int64_t expected_content_size, const std::vector<std::string>& expected_results, @@ -248,7 +250,8 @@ const std::string& expected_sha256, const std::string& expected_threat_type, const std::string& expected_trigger, - const ContentAnalysisResponse::Result& expected_dlp_verdict, + const enterprise_connectors::ContentAnalysisResponse::Result& + expected_dlp_verdict, const std::set<std::string>* expected_mimetypes, int64_t expected_content_size, const std::string& expected_result, @@ -298,7 +301,8 @@ const std::string& expected_sha256, const std::string& expected_threat_type, const std::string& expected_trigger, - const ContentAnalysisResponse::Result& expected_dlp_verdict, + const enterprise_connectors::ContentAnalysisResponse::Result& + expected_dlp_verdict, const std::set<std::string>* expected_mimetypes, int64_t expected_content_size, const std::string& expected_result, @@ -457,8 +461,10 @@ unscanned_reason_); ValidateField(event, SafeBrowsingPrivateEventRouter::kKeyProfileUserName, username_); - ValidateField(event, RealtimeReportingClient::kKeyProfileIdentifier, - profile_identifier_); + ValidateField( + event, + enterprise_connectors::RealtimeReportingClient::kKeyProfileIdentifier, + profile_identifier_); ValidateField(event, SafeBrowsingPrivateEventRouter::kKeyIsFederated, is_federated_); ValidateField(event, SafeBrowsingPrivateEventRouter::kKeyLoginUserName, @@ -528,7 +534,7 @@ void EventReportValidator::ValidateDlpVerdict( const base::Value::Dict* value, - const ContentAnalysisResponse::Result& result) { + const enterprise_connectors::ContentAnalysisResponse::Result& result) { const base::Value::List* triggered_rules = value->FindList(SafeBrowsingPrivateEventRouter::kKeyTriggeredRuleInfo); ASSERT_NE(nullptr, triggered_rules); @@ -542,7 +548,8 @@ void EventReportValidator::ValidateDlpRule( const base::Value::Dict* value, - const ContentAnalysisResponse::Result::TriggeredRule& expected_rule) { + const enterprise_connectors::ContentAnalysisResponse::Result::TriggeredRule& + expected_rule) { ValidateField(value, SafeBrowsingPrivateEventRouter::kKeyTriggeredRuleName, expected_rule.rule_name()); ValidateField(value, SafeBrowsingPrivateEventRouter::kKeyTriggeredRuleId, @@ -634,7 +641,7 @@ } void SetAnalysisConnector(PrefService* prefs, - AnalysisConnector connector, + enterprise_connectors::AnalysisConnector connector, const std::string& pref_value, bool machine_scope) { ScopedListPrefUpdate settings_list(prefs, ConnectorPref(connector)); @@ -654,13 +661,15 @@ base::Value::List enabled_opt_in_events_list; for (const auto& enabled_opt_in_event : enabled_opt_in_events) { base::Value::Dict event_value; - event_value.Set(kKeyOptInEventName, enabled_opt_in_event.first); + event_value.Set(enterprise_connectors::kKeyOptInEventName, + enabled_opt_in_event.first); base::Value::List url_patterns_list; for (const auto& url_pattern : enabled_opt_in_event.second) { url_patterns_list.Append(url_pattern); } - event_value.Set(kKeyOptInEventUrlPatterns, std::move(url_patterns_list)); + event_value.Set(enterprise_connectors::kKeyOptInEventUrlPatterns, + std::move(url_patterns_list)); enabled_opt_in_events_list.Append(std::move(event_value)); } @@ -674,38 +683,43 @@ const std::map<std::string, std::vector<std::string>>& enabled_opt_in_events, bool machine_scope) { - ScopedListPrefUpdate settings_list(prefs, kOnSecurityEventPref); + ScopedListPrefUpdate settings_list( + prefs, enterprise_connectors::kOnSecurityEventPref); if (!enabled) { settings_list->clear(); - prefs->ClearPref(kOnSecurityEventScopePref); + prefs->ClearPref(enterprise_connectors::kOnSecurityEventScopePref); return; } if (settings_list->empty()) { base::Value::Dict settings; - settings.Set(kKeyServiceProvider, base::Value("google")); + settings.Set(enterprise_connectors::kKeyServiceProvider, + base::Value("google")); if (!enabled_event_names.empty()) { base::Value::List enabled_event_name_list; for (const auto& enabled_event_name : enabled_event_names) { enabled_event_name_list.Append(enabled_event_name); } - settings.Set(kKeyEnabledEventNames, std::move(enabled_event_name_list)); + settings.Set(enterprise_connectors::kKeyEnabledEventNames, + std::move(enabled_event_name_list)); } if (!enabled_opt_in_events.empty()) { - settings.Set(kKeyEnabledOptInEvents, + settings.Set(enterprise_connectors::kKeyEnabledOptInEvents, CreateOptInEventsList(enabled_opt_in_events)); } settings_list->Append(std::move(settings)); } prefs->SetInteger( - kOnSecurityEventScopePref, + enterprise_connectors::kOnSecurityEventScopePref, machine_scope ? policy::POLICY_SCOPE_MACHINE : policy::POLICY_SCOPE_USER); } -void ClearAnalysisConnector(PrefService* prefs, AnalysisConnector connector) { +void ClearAnalysisConnector( + PrefService* prefs, + enterprise_connectors::AnalysisConnector connector) { ScopedListPrefUpdate settings_list(prefs, ConnectorPref(connector)); settings_list->clear(); prefs->ClearPref(ConnectorScopePref(connector)); @@ -726,4 +740,4 @@ } #endif -} // namespace enterprise_connectors::test +} // namespace safe_browsing
diff --git a/chrome/browser/enterprise/connectors/test/deep_scanning_test_utils.h b/chrome/browser/safe_browsing/cloud_content_scanning/deep_scanning_test_utils.h similarity index 87% rename from chrome/browser/enterprise/connectors/test/deep_scanning_test_utils.h rename to chrome/browser/safe_browsing/cloud_content_scanning/deep_scanning_test_utils.h index 92dd5b4..bd0db8a 100644 --- a/chrome/browser/enterprise/connectors/test/deep_scanning_test_utils.h +++ b/chrome/browser/safe_browsing/cloud_content_scanning/deep_scanning_test_utils.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_ENTERPRISE_CONNECTORS_TEST_DEEP_SCANNING_TEST_UTILS_H_ -#define CHROME_BROWSER_ENTERPRISE_CONNECTORS_TEST_DEEP_SCANNING_TEST_UTILS_H_ +#ifndef CHROME_BROWSER_SAFE_BROWSING_CLOUD_CONTENT_SCANNING_DEEP_SCANNING_TEST_UTILS_H_ +#define CHROME_BROWSER_SAFE_BROWSING_CLOUD_CONTENT_SCANNING_DEEP_SCANNING_TEST_UTILS_H_ #include <set> #include <string> @@ -22,7 +22,7 @@ class MockCloudPolicyClient; } -namespace enterprise_connectors::test { +namespace safe_browsing { // Helper class that represents a report that's expected from a test. The // non-optional fields are expected for every kind of Deep Scanning reports. @@ -56,7 +56,8 @@ const std::string& expected_filename, const std::string& expected_sha256, const std::string& expected_trigger, - const ContentAnalysisResponse::Result& expected_dlp_verdict, + const enterprise_connectors::ContentAnalysisResponse::Result& + expected_dlp_verdict, const std::set<std::string>* expected_mimetypes, absl::optional<int64_t> expected_content_size, const std::string& expected_result, @@ -71,7 +72,8 @@ const std::vector<std::string>& expected_filenames, const std::vector<std::string>& expected_sha256s, const std::string& expected_trigger, - const std::vector<ContentAnalysisResponse::Result>& expected_dlp_verdicts, + const std::vector<enterprise_connectors::ContentAnalysisResponse::Result>& + expected_dlp_verdicts, const std::set<std::string>* expected_mimetypes, int64_t expected_content_size, const std::vector<std::string>& expected_results, @@ -87,7 +89,8 @@ const std::string& expected_sha256, const std::string& expected_threat_type, const std::string& expected_trigger, - const ContentAnalysisResponse::Result& expected_dlp_verdict, + const enterprise_connectors::ContentAnalysisResponse::Result& + expected_dlp_verdict, const std::set<std::string>* expected_mimetypes, int64_t expected_content_size, const std::string& expected_result, @@ -103,7 +106,8 @@ const std::string& expected_sha256, const std::string& expected_threat_type, const std::string& expected_trigger, - const ContentAnalysisResponse::Result& expected_dlp_verdict, + const enterprise_connectors::ContentAnalysisResponse::Result& + expected_dlp_verdict, const std::set<std::string>* expected_mimetypes, int64_t expected_content_size, const std::string& expected_result, @@ -174,11 +178,12 @@ void ValidateFederatedOrigin(const base::Value::Dict* value); void ValidateIdentities(const base::Value::Dict* value); void ValidateMimeType(const base::Value::Dict* value); - void ValidateDlpVerdict(const base::Value::Dict* value, - const ContentAnalysisResponse::Result& result); - void ValidateDlpRule( + void ValidateDlpVerdict( const base::Value::Dict* value, - const ContentAnalysisResponse::Result::TriggeredRule& expected_rule); + const enterprise_connectors::ContentAnalysisResponse::Result& result); + void ValidateDlpRule(const base::Value::Dict* value, + const enterprise_connectors::ContentAnalysisResponse:: + Result::TriggeredRule& expected_rule); void ValidateFilenameMappedAttributes(const base::Value::Dict* value); void ValidateField(const base::Value::Dict* value, const std::string& field_key, @@ -215,7 +220,9 @@ // When multiple files generate events, we don't necessarily know in which // order they will be reported. As such, we use maps to ensure all of them // are called as expected. - base::flat_map<std::string, ContentAnalysisResponse::Result> dlp_verdicts_; + base::flat_map<std::string, + enterprise_connectors::ContentAnalysisResponse::Result> + dlp_verdicts_; base::flat_map<std::string, std::string> results_; base::flat_map<std::string, std::string> filenames_and_hashes_; base::flat_map<std::string, std::string> scan_ids_; @@ -225,7 +232,7 @@ // Helper functions that set Connector policies for testing. void SetAnalysisConnector(PrefService* prefs, - AnalysisConnector connector, + enterprise_connectors::AnalysisConnector connector, const std::string& pref_value, bool machine_scope = true); void SetOnSecurityEventReporting( @@ -236,7 +243,8 @@ enabled_opt_in_events = std::map<std::string, std::vector<std::string>>(), bool machine_scope = true); -void ClearAnalysisConnector(PrefService* prefs, AnalysisConnector connector); +void ClearAnalysisConnector(PrefService* prefs, + enterprise_connectors::AnalysisConnector connector); #if !BUILDFLAG(IS_CHROMEOS_ASH) // Helper function to set the profile DM token. It installs a @@ -245,6 +253,6 @@ void SetProfileDMToken(Profile* profile, const std::string& dm_token); #endif -} // namespace enterprise_connectors::test +} // namespace safe_browsing -#endif // CHROME_BROWSER_ENTERPRISE_CONNECTORS_TEST_DEEP_SCANNING_TEST_UTILS_H_ +#endif // CHROME_BROWSER_SAFE_BROWSING_CLOUD_CONTENT_SCANNING_DEEP_SCANNING_TEST_UTILS_H_
diff --git a/chrome/browser/safe_browsing/download_protection/deep_scanning_browsertest.cc b/chrome/browser/safe_browsing/download_protection/deep_scanning_browsertest.cc index 4e2b1b9..4a44240 100644 --- a/chrome/browser/safe_browsing/download_protection/deep_scanning_browsertest.cc +++ b/chrome/browser/safe_browsing/download_protection/deep_scanning_browsertest.cc
@@ -24,8 +24,6 @@ #include "chrome/browser/download/download_prefs.h" #include "chrome/browser/enterprise/connectors/connectors_service.h" #include "chrome/browser/enterprise/connectors/reporting/realtime_reporting_client_factory.h" -#include "chrome/browser/enterprise/connectors/test/deep_scanning_browsertest_base.h" -#include "chrome/browser/enterprise/connectors/test/deep_scanning_test_utils.h" #include "chrome/browser/enterprise/identifiers/profile_id_service_factory.h" #include "chrome/browser/extensions/api/safe_browsing_private/safe_browsing_private_event_router.h" #include "chrome/browser/extensions/api/safe_browsing_private/safe_browsing_private_event_router_factory.h" @@ -35,6 +33,8 @@ #include "chrome/browser/safe_browsing/cloud_content_scanning/binary_upload_service.h" #include "chrome/browser/safe_browsing/cloud_content_scanning/cloud_binary_upload_service.h" #include "chrome/browser/safe_browsing/cloud_content_scanning/cloud_binary_upload_service_factory.h" +#include "chrome/browser/safe_browsing/cloud_content_scanning/deep_scanning_browsertest_base.h" +#include "chrome/browser/safe_browsing/cloud_content_scanning/deep_scanning_test_utils.h" #include "chrome/browser/safe_browsing/download_protection/deep_scanning_request.h" #include "chrome/browser/safe_browsing/download_protection/download_protection_service.h" #include "chrome/browser/safe_browsing/download_protection/ppapi_download_request.h" @@ -127,7 +127,7 @@ // Integration tests for download deep scanning behavior, only mocking network // traffic and FCM dependencies. class DownloadDeepScanningBrowserTestBase - : public enterprise_connectors::test::DeepScanningBrowserTestBase, + : public DeepScanningBrowserTestBase, public content::DownloadManager::Observer, public download::DownloadItem::Observer { public: @@ -150,10 +150,10 @@ } void SetUpReporting() { - enterprise_connectors::test::SetOnSecurityEventReporting( - browser()->profile()->GetPrefs(), - /*enabled*/ true, /*enabled_event_names*/ {}, - /*enabled_opt_in_events*/ {}, connectors_machine_scope()); + SetOnSecurityEventReporting(browser()->profile()->GetPrefs(), + /*enabled*/ true, /*enabled_event_names*/ {}, + /*enabled_opt_in_events*/ {}, + connectors_machine_scope()); client_ = std::make_unique<policy::MockCloudPolicyClient>(); client_->SetDMToken("dm_token"); @@ -216,14 +216,12 @@ if (connectors_machine_scope()) { SetDMTokenForTesting(policy::DMToken::CreateValidToken("dm_token")); } else { - enterprise_connectors::test::SetProfileDMToken(browser()->profile(), - "dm_token"); + SetProfileDMToken(browser()->profile(), "dm_token"); } #endif - enterprise_connectors::test::SetAnalysisConnector( - browser()->profile()->GetPrefs(), - enterprise_connectors::FILE_DOWNLOADED, - R"({ + SetAnalysisConnector(browser()->profile()->GetPrefs(), + enterprise_connectors::FILE_DOWNLOADED, + R"({ "service_provider": "google", "enable": [ { @@ -234,7 +232,7 @@ "block_until_verdict": 1, "block_password_protected": true })", - connectors_machine_scope()); + connectors_machine_scope()); } } @@ -779,7 +777,7 @@ // A single unsafe event should be recorded for this request. std::set<std::string> zip_types = {"application/zip", "application/x-zip-compressed"}; - enterprise_connectors::test::EventReportValidator validator(client()); + EventReportValidator validator(client()); validator.ExpectDangerousDeepScanningResult( /*url*/ url.spec(), /*source*/ "", @@ -872,7 +870,7 @@ // Both the DLP and malware violations generate an event. std::set<std::string> zip_types = {"application/zip", "application/x-zip-compressed"}; - enterprise_connectors::test::EventReportValidator validator(client()); + EventReportValidator validator(client()); validator.ExpectSensitiveDataEventAndDangerousDeepScanningResult( /*url*/ url.spec(), /*source*/ "", @@ -926,10 +924,9 @@ browser()->profile()->GetPrefs()->SetInteger( prefs::kDownloadRestrictions, static_cast<int>(DownloadPrefs::DownloadRestriction::DANGEROUS_FILES)); - enterprise_connectors::test::SetAnalysisConnector( - browser()->profile()->GetPrefs(), - enterprise_connectors::FILE_DOWNLOADED, - R"({ + SetAnalysisConnector(browser()->profile()->GetPrefs(), + enterprise_connectors::FILE_DOWNLOADED, + R"({ "service_provider": "google", "enable": [ { @@ -939,7 +936,7 @@ ], "block_until_verdict": 1 })", - connectors_machine_scope()); + connectors_machine_scope()); } }; @@ -964,7 +961,7 @@ browser(), url, WindowOpenDisposition::CURRENT_TAB, ui_test_utils::BROWSER_TEST_NO_WAIT); - enterprise_connectors::test::EventReportValidator validator(client()); + EventReportValidator validator(client()); std::set<std::string> zip_types = {"application/zip", "application/x-zip-compressed"}; validator.ExpectDangerousDownloadEvent( @@ -1283,7 +1280,7 @@ enterprise_connectors::ContentAnalysisResponse::Result::SUCCESS); // That response should not trigger a security event. - enterprise_connectors::test::EventReportValidator validator(client()); + EventReportValidator validator(client()); validator.ExpectNoReport(); SendFcmMessage(response); @@ -1333,7 +1330,7 @@ dlp_verdict->set_action(enterprise_connectors::TriggeredRule::BLOCK); // That blocking response should trigger a security event. - enterprise_connectors::test::EventReportValidator validator(client()); + EventReportValidator validator(client()); std::set<std::string> mimetypes = {"text/plain"}; validator.ExpectSensitiveDataEvent( /*url*/ url.spec(), @@ -1399,7 +1396,7 @@ // That warning response should trigger a security event. base::RunLoop validator_run_loop; - enterprise_connectors::test::EventReportValidator validator(client()); + EventReportValidator validator(client()); validator.SetDoneClosure(validator_run_loop.QuitClosure()); std::set<std::string> mimetypes = {"text/plain"}; validator.ExpectSensitiveDataEvent( @@ -1502,7 +1499,7 @@ // That warning response should trigger a security event. base::RunLoop validator_run_loop; - enterprise_connectors::test::EventReportValidator validator(client()); + EventReportValidator validator(client()); validator.SetDoneClosure(validator_run_loop.QuitClosure()); std::set<std::string> mimetypes = {"text/plain"}; validator.ExpectSensitiveDataEvent( @@ -1600,7 +1597,7 @@ dlp_verdict->set_action(enterprise_connectors::TriggeredRule::BLOCK); base::RunLoop validator_run_loop; - enterprise_connectors::test::EventReportValidator validator(client()); + EventReportValidator validator(client()); validator.SetDoneClosure(validator_run_loop.QuitClosure()); std::set<std::string> mimetypes = {"text/plain"}; validator.ExpectSensitiveDataEvent(
diff --git a/chrome/browser/safe_browsing/download_protection/deep_scanning_request_unittest.cc b/chrome/browser/safe_browsing/download_protection/deep_scanning_request_unittest.cc index 96f4d4625..a4d67422 100644 --- a/chrome/browser/safe_browsing/download_protection/deep_scanning_request_unittest.cc +++ b/chrome/browser/safe_browsing/download_protection/deep_scanning_request_unittest.cc
@@ -26,12 +26,12 @@ #include "chrome/browser/enterprise/connectors/connectors_prefs.h" #include "chrome/browser/enterprise/connectors/connectors_service.h" #include "chrome/browser/enterprise/connectors/reporting/realtime_reporting_client_factory.h" -#include "chrome/browser/enterprise/connectors/test/deep_scanning_test_utils.h" #include "chrome/browser/extensions/api/safe_browsing_private/safe_browsing_private_event_router.h" #include "chrome/browser/extensions/api/safe_browsing_private/safe_browsing_private_event_router_factory.h" #include "chrome/browser/policy/dm_token_utils.h" #include "chrome/browser/safe_browsing/cloud_content_scanning/binary_fcm_service.h" #include "chrome/browser/safe_browsing/cloud_content_scanning/cloud_binary_upload_service.h" +#include "chrome/browser/safe_browsing/cloud_content_scanning/deep_scanning_test_utils.h" #include "chrome/browser/safe_browsing/cloud_content_scanning/deep_scanning_utils.h" #include "chrome/browser/safe_browsing/download_protection/download_protection_service.h" #include "chrome/browser/safe_browsing/download_protection/download_protection_util.h" @@ -360,9 +360,9 @@ }; TEST_F(DeepScanningRequestFeaturesEnabledTest, ChecksFeatureFlags) { - enterprise_connectors::test::SetAnalysisConnector( - profile_->GetPrefs(), enterprise_connectors::FILE_DOWNLOADED, - kScanForDlpAndMalware); + SetAnalysisConnector(profile_->GetPrefs(), + enterprise_connectors::FILE_DOWNLOADED, + kScanForDlpAndMalware); // Try each request with settings indicating both DLP and Malware requests // should be sent to show features work correctly. @@ -416,9 +416,9 @@ TEST_F(DeepScanningRequestAllFeaturesEnabledTest, GeneratesCorrectRequestFromPolicy) { { - enterprise_connectors::test::SetAnalysisConnector( - profile_->GetPrefs(), enterprise_connectors::FILE_DOWNLOADED, - kScanForDlpAndMalware); + SetAnalysisConnector(profile_->GetPrefs(), + enterprise_connectors::FILE_DOWNLOADED, + kScanForDlpAndMalware); base::RunLoop run_loop; DeepScanningRequest request( &item_, DeepScanningRequest::DeepScanTrigger::TRIGGER_POLICY, @@ -462,9 +462,9 @@ { base::RunLoop run_loop; - enterprise_connectors::test::SetAnalysisConnector( - profile_->GetPrefs(), enterprise_connectors::FILE_DOWNLOADED, - kScanForMalware); + SetAnalysisConnector(profile_->GetPrefs(), + enterprise_connectors::FILE_DOWNLOADED, + kScanForMalware); DeepScanningRequest request( &item_, DeepScanningRequest::DeepScanTrigger::TRIGGER_POLICY, DownloadCheckResult::SAFE, @@ -489,9 +489,8 @@ { base::RunLoop run_loop; - enterprise_connectors::test::SetAnalysisConnector( - profile_->GetPrefs(), enterprise_connectors::FILE_DOWNLOADED, - kScanForDlp); + SetAnalysisConnector(profile_->GetPrefs(), + enterprise_connectors::FILE_DOWNLOADED, kScanForDlp); DeepScanningRequest request( &item_, DeepScanningRequest::DeepScanTrigger::TRIGGER_POLICY, DownloadCheckResult::SAFE, @@ -515,8 +514,8 @@ { base::RunLoop run_loop; - enterprise_connectors::test::SetAnalysisConnector( - profile_->GetPrefs(), enterprise_connectors::FILE_DOWNLOADED, kNoScan); + SetAnalysisConnector(profile_->GetPrefs(), + enterprise_connectors::FILE_DOWNLOADED, kNoScan); EXPECT_FALSE(settings().has_value()); enterprise_connectors::AnalysisSettings analysis_settings; analysis_settings.block_until_verdict = @@ -590,17 +589,16 @@ ->SetIdentityManagerForTesting( identity_test_environment_.identity_manager()); - enterprise_connectors::test::SetOnSecurityEventReporting( - profile_->GetPrefs(), true); + SetOnSecurityEventReporting(profile_->GetPrefs(), true); #if BUILDFLAG(IS_CHROMEOS_ASH) fake_statistics_provider_.SetMachineStatistic( ash::system::kSerialNumberKeyForTest, "fake_serial_number"); #endif - enterprise_connectors::test::SetAnalysisConnector( - profile_->GetPrefs(), enterprise_connectors::FILE_DOWNLOADED, - kScanForDlpAndMalware); + SetAnalysisConnector(profile_->GetPrefs(), + enterprise_connectors::FILE_DOWNLOADED, + kScanForDlpAndMalware); } void TearDown() override { @@ -662,7 +660,7 @@ ->SetExpectedFinalAction( enterprise_connectors::ContentAnalysisAcknowledgement::WARN); - enterprise_connectors::test::EventReportValidator validator(client_.get()); + EventReportValidator validator(client_.get()); validator.ExpectDangerousDeepScanningResultAndSensitiveDataEvent( /*url*/ "https://example.com/download.exe", /*source*/ "", @@ -733,7 +731,7 @@ ->SetExpectedFinalAction( enterprise_connectors::ContentAnalysisAcknowledgement::WARN); - enterprise_connectors::test::EventReportValidator validator(client_.get()); + EventReportValidator validator(client_.get()); validator.ExpectDangerousDeepScanningResultAndSensitiveDataEvent( /*url*/ "https://example.com/download.exe", /*source*/ "", @@ -796,7 +794,7 @@ ->SetExpectedFinalAction( enterprise_connectors::ContentAnalysisAcknowledgement::BLOCK); - enterprise_connectors::test::EventReportValidator validator(client_.get()); + EventReportValidator validator(client_.get()); validator.ExpectSensitiveDataEvent( /*url*/ "https://example.com/download.exe", /*source*/ "", @@ -857,7 +855,7 @@ ->SetExpectedFinalAction( enterprise_connectors::ContentAnalysisAcknowledgement::WARN); - enterprise_connectors::test::EventReportValidator validator(client_.get()); + EventReportValidator validator(client_.get()); validator.ExpectSensitiveDataEvent( /*url*/ "https://example.com/download.exe", /*source*/ "", @@ -922,7 +920,7 @@ ->SetExpectedFinalAction( enterprise_connectors::ContentAnalysisAcknowledgement::BLOCK); - enterprise_connectors::test::EventReportValidator validator(client_.get()); + EventReportValidator validator(client_.get()); validator.ExpectSensitiveDataEvent( /*url*/ "https://example.com/download.exe", /*source*/ "", @@ -978,7 +976,7 @@ ->SetExpectedFinalAction( enterprise_connectors::ContentAnalysisAcknowledgement::ALLOW); - enterprise_connectors::test::EventReportValidator validator(client_.get()); + EventReportValidator validator(client_.get()); validator.ExpectUnscannedFileEvent( /*url*/ "https://example.com/download.exe", /*source*/ "", @@ -1034,7 +1032,7 @@ ->SetExpectedFinalAction( enterprise_connectors::ContentAnalysisAcknowledgement::ALLOW); - enterprise_connectors::test::EventReportValidator validator(client_.get()); + EventReportValidator validator(client_.get()); validator.ExpectUnscannedFileEvent( /*url*/ "https://example.com/download.exe", /*source*/ "", @@ -1095,7 +1093,7 @@ ->SetExpectedFinalAction( enterprise_connectors::ContentAnalysisAcknowledgement::WARN); - enterprise_connectors::test::EventReportValidator validator(client_.get()); + EventReportValidator validator(client_.get()); validator.ExpectUnscannedFileEvent( /*url*/ "https://example.com/download.exe", /*source*/ "", @@ -1172,7 +1170,7 @@ ->SetExpectedFinalAction( enterprise_connectors::ContentAnalysisAcknowledgement::ALLOW); - enterprise_connectors::test::EventReportValidator validator(client_.get()); + EventReportValidator validator(client_.get()); validator.ExpectNoReport(); request.Start(); @@ -1241,7 +1239,7 @@ ->SetExpectedFinalAction( enterprise_connectors::ContentAnalysisAcknowledgement::ALLOW); - enterprise_connectors::test::EventReportValidator validator(client_.get()); + EventReportValidator validator(client_.get()); validator.ExpectUnscannedFileEvent( /*url*/ "https://example.com/download.exe", /*source*/ "", @@ -1335,7 +1333,7 @@ ->SetExpectedFinalAction( enterprise_connectors::ContentAnalysisAcknowledgement::BLOCK); - enterprise_connectors::test::EventReportValidator validator(client_.get()); + EventReportValidator validator(client_.get()); validator.ExpectSensitiveDataEvents( /*url*/ "https://example.com/download.exe", /*source*/ "", @@ -1401,7 +1399,7 @@ download_path_, BinaryUploadService::Result::TIMEOUT, enterprise_connectors::ContentAnalysisResponse()); - enterprise_connectors::test::EventReportValidator validator(client_.get()); + EventReportValidator validator(client_.get()); validator.ExpectUnscannedFileEvent( /*url*/ "https://example.com/download.exe", /*source*/ "", @@ -1490,9 +1488,8 @@ DownloadPrefs::DownloadRestriction::MALICIOUS_FILES)); TEST_P(DeepScanningDownloadRestrictionsTest, GeneratesCorrectReport) { - enterprise_connectors::test::SetAnalysisConnector( - profile_->GetPrefs(), enterprise_connectors::FILE_DOWNLOADED, - kScanForMalware); + SetAnalysisConnector(profile_->GetPrefs(), + enterprise_connectors::FILE_DOWNLOADED, kScanForMalware); { base::RunLoop run_loop; @@ -1527,7 +1524,7 @@ download_protection_service_.GetFakeBinaryUploadService() ->SetExpectedFinalAction(expected_final_action()); - enterprise_connectors::test::EventReportValidator validator(client_.get()); + EventReportValidator validator(client_.get()); validator.ExpectDangerousDeepScanningResult( /*url*/ "https://example.com/download.exe", /*source*/ "", @@ -1588,7 +1585,7 @@ ->SetExpectedFinalAction( enterprise_connectors::ContentAnalysisAcknowledgement::WARN); - enterprise_connectors::test::EventReportValidator validator(client_.get()); + EventReportValidator validator(client_.get()); validator.ExpectDangerousDeepScanningResult( /*url*/ "https://example.com/download.exe", /*source*/ "", @@ -1641,7 +1638,7 @@ ->SetExpectedFinalAction( enterprise_connectors::ContentAnalysisAcknowledgement::BLOCK); - enterprise_connectors::test::EventReportValidator validator(client_.get()); + EventReportValidator validator(client_.get()); validator.ExpectUnscannedFileEvent( /*url*/ "https://example.com/download.exe", /*source*/ "", @@ -1699,7 +1696,7 @@ ->SetExpectedFinalAction( enterprise_connectors::ContentAnalysisAcknowledgement::BLOCK); - enterprise_connectors::test::EventReportValidator validator(client_.get()); + EventReportValidator validator(client_.get()); validator.ExpectUnscannedFileEvent( /*url*/ "https://example.com/download.exe", /*source*/ "", @@ -1730,9 +1727,8 @@ TEST_F(DeepScanningRequestConnectorsFeatureTest, ShouldUploadBinary_MalwareListPolicy) { - enterprise_connectors::test::SetAnalysisConnector( - profile_->GetPrefs(), enterprise_connectors::FILE_DOWNLOADED, - kScanForMalware); + SetAnalysisConnector(profile_->GetPrefs(), + enterprise_connectors::FILE_DOWNLOADED, kScanForMalware); content::DownloadItemUtils::AttachInfoForTesting(&item_, profile_, nullptr); EXPECT_CALL(item_, GetURL()).WillRepeatedly(ReturnRef(download_url_)); @@ -1747,10 +1743,10 @@ // With the new malware policy list set, the item should not be uploaded since // DeepScanningRequest honours that policy. - enterprise_connectors::test::SetAnalysisConnector( - profile_->GetPrefs(), enterprise_connectors::FILE_DOWNLOADED, - base::StringPrintf( - R"({ + SetAnalysisConnector(profile_->GetPrefs(), + enterprise_connectors::FILE_DOWNLOADED, + base::StringPrintf( + R"({ "service_provider": "google", "enable": [ {"url_list": ["*"], "tags": ["malware"]} @@ -1760,14 +1756,14 @@ ], "block_until_verdict": 1 })", - download_url_.host().c_str())); + download_url_.host().c_str())); EXPECT_FALSE(settings().has_value()); } TEST_F(DeepScanningRequestConnectorsFeatureTest, ShouldUploadBinary_FileURLs) { - enterprise_connectors::test::SetAnalysisConnector( - profile_->GetPrefs(), enterprise_connectors::FILE_DOWNLOADED, - kScanForDlpAndMalware); + SetAnalysisConnector(profile_->GetPrefs(), + enterprise_connectors::FILE_DOWNLOADED, + kScanForDlpAndMalware); content::DownloadItemUtils::AttachInfoForTesting(&item_, profile_, nullptr); @@ -1791,9 +1787,9 @@ } TEST_F(DeepScanningRequestAllFeaturesEnabledTest, PopulatesRequest) { - enterprise_connectors::test::SetAnalysisConnector( - profile_->GetPrefs(), enterprise_connectors::FILE_DOWNLOADED, - kScanForDlpAndMalware); + SetAnalysisConnector(profile_->GetPrefs(), + enterprise_connectors::FILE_DOWNLOADED, + kScanForDlpAndMalware); base::RunLoop run_loop; DeepScanningRequest request(
diff --git a/chrome/browser/safe_browsing/download_protection/download_protection_service_unittest.cc b/chrome/browser/safe_browsing/download_protection/download_protection_service_unittest.cc index cf87835..ed295d1c 100644 --- a/chrome/browser/safe_browsing/download_protection/download_protection_service_unittest.cc +++ b/chrome/browser/safe_browsing/download_protection/download_protection_service_unittest.cc
@@ -43,7 +43,6 @@ #include "chrome/browser/download/download_core_service_factory.h" #include "chrome/browser/enterprise/connectors/connectors_service.h" #include "chrome/browser/enterprise/connectors/reporting/realtime_reporting_client_factory.h" -#include "chrome/browser/enterprise/connectors/test/deep_scanning_test_utils.h" #include "chrome/browser/extensions/api/safe_browsing_private/safe_browsing_private_event_router.h" #include "chrome/browser/extensions/api/safe_browsing_private/safe_browsing_private_event_router_factory.h" #include "chrome/browser/history/history_service_factory.h" @@ -54,6 +53,7 @@ #include "chrome/browser/safe_browsing/advanced_protection_status_manager_factory.h" #include "chrome/browser/safe_browsing/cloud_content_scanning/binary_upload_service.h" #include "chrome/browser/safe_browsing/cloud_content_scanning/cloud_binary_upload_service_factory.h" +#include "chrome/browser/safe_browsing/cloud_content_scanning/deep_scanning_test_utils.h" #include "chrome/browser/safe_browsing/cloud_content_scanning/test_binary_upload_service.h" #include "chrome/browser/safe_browsing/download_protection/check_file_system_access_write_request.h" #include "chrome/browser/safe_browsing/download_protection/download_feedback_service.h" @@ -2950,8 +2950,7 @@ profile()) ->SetBrowserCloudPolicyClientForTesting(client_.get()); - enterprise_connectors::test::SetOnSecurityEventReporting( - profile()->GetPrefs(), true); + safe_browsing::SetOnSecurityEventReporting(profile()->GetPrefs(), true); NiceMockDownloadItem item; PrepareBasicDownloadItem(&item, @@ -2963,7 +2962,7 @@ // This test sets the mimetype to the empty string, so pass a valid set // pointer, but only put the empty string in it. std::set<std::string> expected_mimetypes{""}; - enterprise_connectors::test::EventReportValidator validator(client_.get()); + EventReportValidator validator(client_.get()); validator.ExpectDangerousDownloadEvent( "", // URL, not set in this test "a.exe", // Simple filename without the directory @@ -2998,8 +2997,7 @@ profile()) ->SetBrowserCloudPolicyClientForTesting(client_.get()); - enterprise_connectors::test::SetOnSecurityEventReporting( - profile()->GetPrefs(), true); + safe_browsing::SetOnSecurityEventReporting(profile()->GetPrefs(), true); NiceMockDownloadItem item; PrepareBasicDownloadItem(&item, @@ -3031,7 +3029,7 @@ Return(download::DOWNLOAD_DANGER_TYPE_SENSITIVE_CONTENT_WARNING)); std::set<std::string> expected_mimetypes{"fake/mimetype"}; - enterprise_connectors::test::EventReportValidator validator(client_.get()); + EventReportValidator validator(client_.get()); validator.ExpectSensitiveDataEvent( "", // URL, not set in this test "", // source, not used for file downloads. @@ -3058,8 +3056,7 @@ profile()) ->SetBrowserCloudPolicyClientForTesting(client_.get()); - enterprise_connectors::test::SetOnSecurityEventReporting( - profile()->GetPrefs(), true); + safe_browsing::SetOnSecurityEventReporting(profile()->GetPrefs(), true); NiceMockDownloadItem item; PrepareBasicDownloadItem(&item, @@ -3085,7 +3082,7 @@ // This test sets the mimetype to the empty string, so pass a valid set // pointer, but only put the empty string in it. std::set<std::string> expected_mimetypes{""}; - enterprise_connectors::test::EventReportValidator validator(client_.get()); + EventReportValidator validator(client_.get()); validator.ExpectDangerousDownloadEvent( "", // URL, not set in this test "a.exe", // Simple filename without the directory @@ -3111,8 +3108,7 @@ profile()) ->SetBrowserCloudPolicyClientForTesting(client_.get()); - enterprise_connectors::test::SetOnSecurityEventReporting( - profile()->GetPrefs(), true); + safe_browsing::SetOnSecurityEventReporting(profile()->GetPrefs(), true); NiceMockDownloadItem item; PrepareBasicDownloadItem(&item, @@ -3147,7 +3143,7 @@ Return(download::DOWNLOAD_DANGER_TYPE_SENSITIVE_CONTENT_WARNING)); std::set<std::string> expected_mimetypes{"fake/mimetype"}; - enterprise_connectors::test::EventReportValidator validator(client_.get()); + EventReportValidator validator(client_.get()); validator.ExpectSensitiveDataEvent( "", // URL, not set in this test "", // source, not used for file downloads. @@ -3174,8 +3170,7 @@ profile()) ->SetBrowserCloudPolicyClientForTesting(client_.get()); - enterprise_connectors::test::SetOnSecurityEventReporting( - profile()->GetPrefs(), true); + safe_browsing::SetOnSecurityEventReporting(profile()->GetPrefs(), true); NiceMockDownloadItem item; PrepareBasicDownloadItem(&item, @@ -3210,7 +3205,7 @@ Return(download::DOWNLOAD_DANGER_TYPE_SENSITIVE_CONTENT_BLOCK)); std::set<std::string> expected_mimetypes{"fake/mimetype"}; - enterprise_connectors::test::EventReportValidator validator(client_.get()); + EventReportValidator validator(client_.get()); validator.ExpectSensitiveDataEvent( "", // URL, not set in this test "", // source, not used for file downloads. @@ -3523,8 +3518,8 @@ enterprise_connectors::ContentAnalysisResponse()); { - enterprise_connectors::test::SetAnalysisConnector( - profile()->GetPrefs(), enterprise_connectors::FILE_DOWNLOADED, R"( + SetAnalysisConnector(profile()->GetPrefs(), + enterprise_connectors::FILE_DOWNLOADED, R"( { "service_provider": "google", "enable": [ @@ -3553,8 +3548,8 @@ } { - enterprise_connectors::test::SetAnalysisConnector( - profile()->GetPrefs(), enterprise_connectors::FILE_DOWNLOADED, R"( + SetAnalysisConnector(profile()->GetPrefs(), + enterprise_connectors::FILE_DOWNLOADED, R"( { "service_provider": "google", "enable": [ @@ -3610,8 +3605,8 @@ enterprise_connectors::ContentAnalysisResponse()); { - enterprise_connectors::test::SetAnalysisConnector( - profile()->GetPrefs(), enterprise_connectors::FILE_DOWNLOADED, R"( + SetAnalysisConnector(profile()->GetPrefs(), + enterprise_connectors::FILE_DOWNLOADED, R"( { "service_provider": "google", "enable": [ @@ -3633,8 +3628,8 @@ } { - enterprise_connectors::test::SetAnalysisConnector( - profile()->GetPrefs(), enterprise_connectors::FILE_DOWNLOADED, R"( + SetAnalysisConnector(profile()->GetPrefs(), + enterprise_connectors::FILE_DOWNLOADED, R"( { "service_provider": "google", "enable": [ @@ -3694,8 +3689,8 @@ .Times(2); { - enterprise_connectors::test::SetAnalysisConnector( - profile()->GetPrefs(), enterprise_connectors::FILE_DOWNLOADED, R"( + SetAnalysisConnector(profile()->GetPrefs(), + enterprise_connectors::FILE_DOWNLOADED, R"( { "service_provider": "google", "enable": [ @@ -3717,8 +3712,8 @@ } { - enterprise_connectors::test::SetAnalysisConnector( - profile()->GetPrefs(), enterprise_connectors::FILE_DOWNLOADED, R"( + SetAnalysisConnector(profile()->GetPrefs(), + enterprise_connectors::FILE_DOWNLOADED, R"( { "service_provider": "google", "enable": [ @@ -4551,9 +4546,9 @@ ExtractImageFeatures( tmp_path_, BinaryFeatureExtractor::kDefaultOptions, _, _)); - enterprise_connectors::test::SetAnalysisConnector( - profile()->GetPrefs(), enterprise_connectors::FILE_DOWNLOADED, - R"({ + SetAnalysisConnector(profile()->GetPrefs(), + enterprise_connectors::FILE_DOWNLOADED, + R"({ "service_provider": "google", "enable": [ { @@ -4605,8 +4600,8 @@ ExtractImageFeatures( tmp_path_, BinaryFeatureExtractor::kDefaultOptions, _, _)); - enterprise_connectors::test::ClearAnalysisConnector( - profile()->GetPrefs(), enterprise_connectors::FILE_DOWNLOADED); + ClearAnalysisConnector(profile()->GetPrefs(), + enterprise_connectors::FILE_DOWNLOADED); TestBinaryUploadService* test_upload_service = static_cast<TestBinaryUploadService*>( @@ -4658,8 +4653,8 @@ ExtractImageFeatures( tmp_path_, BinaryFeatureExtractor::kDefaultOptions, _, _)); - enterprise_connectors::test::SetAnalysisConnector( - profile()->GetPrefs(), enterprise_connectors::FILE_DOWNLOADED, R"( + SetAnalysisConnector(profile()->GetPrefs(), + enterprise_connectors::FILE_DOWNLOADED, R"( { "service_provider": "google", "enable": [ @@ -4888,8 +4883,8 @@ FILE_PATH_LITERAL("a.exe")); // final_path content::DownloadItemUtils::AttachInfoForTesting(&item, profile(), nullptr); - enterprise_connectors::test::SetAnalysisConnector( - profile()->GetPrefs(), enterprise_connectors::FILE_DOWNLOADED, R"( + SetAnalysisConnector(profile()->GetPrefs(), + enterprise_connectors::FILE_DOWNLOADED, R"( { "service_provider": "google", "enable": [ @@ -4926,9 +4921,9 @@ FILE_PATH_LITERAL("a.exe")); // final_path content::DownloadItemUtils::AttachInfoForTesting(&item, profile(), nullptr); - enterprise_connectors::test::SetAnalysisConnector( - profile()->GetPrefs(), enterprise_connectors::FILE_DOWNLOADED, - R"({ + SetAnalysisConnector(profile()->GetPrefs(), + enterprise_connectors::FILE_DOWNLOADED, + R"({ "service_provider": "google", "enable": [ {"url_list": ["*"], "tags": ["malware"]} @@ -4974,9 +4969,9 @@ ExtractImageFeatures( tmp_path_, BinaryFeatureExtractor::kDefaultOptions, _, _)); - enterprise_connectors::test::SetAnalysisConnector( - profile()->GetPrefs(), enterprise_connectors::FILE_DOWNLOADED, - R"({ + SetAnalysisConnector(profile()->GetPrefs(), + enterprise_connectors::FILE_DOWNLOADED, + R"({ "service_provider": "google", "enable": [ {"url_list": ["*"], "tags": ["malware"]}
diff --git a/chrome/browser/share/android/java/res/layout/qrcode_camera_error_layout.xml b/chrome/browser/share/android/java/res/layout/qrcode_camera_error_layout.xml index 424c341..7be20f8 100644 --- a/chrome/browser/share/android/java/res/layout/qrcode_camera_error_layout.xml +++ b/chrome/browser/share/android/java/res/layout/qrcode_camera_error_layout.xml
@@ -4,22 +4,18 @@ Use of this source code is governed by a BSD-style license that can be found in the LICENSE file. --> -<ScrollView +<org.chromium.components.browser_ui.widget.FadingEdgeScrollView xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/permission_layout" android:layout_width="match_parent" android:layout_height="match_parent" - android:orientation="vertical"> + android:orientation="vertical" + app:topEdgeVisibility="fading"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical"> - <ImageView - android:id="@+id/tab_line" - android:layout_width="match_parent" - style="@style/TabBarShadow" - android:importantForAccessibility="no"/> - <TextView android:id="@+id/qrcode_camera_error_text" android:layout_width="250dp" @@ -32,4 +28,4 @@ android:maxWidth="250dp" android:textAppearance="@style/TextAppearance.ErrorCaption" /> </LinearLayout> -</ScrollView> +</org.chromium.components.browser_ui.widget.FadingEdgeScrollView>
diff --git a/chrome/browser/share/android/java/res/layout/qrcode_open_settings_layout.xml b/chrome/browser/share/android/java/res/layout/qrcode_open_settings_layout.xml index 7ba6d61..7d73872 100644 --- a/chrome/browser/share/android/java/res/layout/qrcode_open_settings_layout.xml +++ b/chrome/browser/share/android/java/res/layout/qrcode_open_settings_layout.xml
@@ -4,23 +4,18 @@ Use of this source code is governed by a BSD-style license that can be found in the LICENSE file. --> -<ScrollView +<org.chromium.components.browser_ui.widget.FadingEdgeScrollView xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/permission_layout" android:layout_width="match_parent" android:layout_height="match_parent" - android:orientation="vertical"> + android:orientation="vertical" + app:topEdgeVisibility="fading"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical"> - <ImageView - android:id="@+id/tab_line" - android:layout_width="match_parent" - style="@style/TabBarShadow" - android:importantForAccessibility="no"/> - <org.chromium.ui.widget.ChromeImageView android:id="@+id/camera_icon" android:layout_marginTop="112dp" @@ -52,4 +47,4 @@ android:text="@string/qr_code_open_settings_label" style="@style/TextButton"/> </LinearLayout> -</ScrollView> +</org.chromium.components.browser_ui.widget.FadingEdgeScrollView>
diff --git a/chrome/browser/share/android/java/res/layout/qrcode_permission_layout.xml b/chrome/browser/share/android/java/res/layout/qrcode_permission_layout.xml index 10b73959..7a00c66 100644 --- a/chrome/browser/share/android/java/res/layout/qrcode_permission_layout.xml +++ b/chrome/browser/share/android/java/res/layout/qrcode_permission_layout.xml
@@ -4,23 +4,18 @@ Use of this source code is governed by a BSD-style license that can be found in the LICENSE file. --> -<ScrollView +<org.chromium.components.browser_ui.widget.FadingEdgeScrollView xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/permission_layout" android:layout_width="match_parent" android:layout_height="match_parent" - android:orientation="vertical"> + android:orientation="vertical" + app:topEdgeVisibility="fading"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical"> - <ImageView - android:id="@+id/tab_line" - android:layout_width="match_parent" - style="@style/TabBarShadow" - android:importantForAccessibility="no"/> - <org.chromium.ui.widget.ChromeImageView android:id="@+id/camera_icon" android:layout_marginTop="112dp" @@ -52,4 +47,4 @@ android:text="@string/qr_code_permission_continue_label" style="@style/TextButton"/> </LinearLayout> -</ScrollView> +</org.chromium.components.browser_ui.widget.FadingEdgeScrollView>
diff --git a/chrome/browser/share/android/java/res/layout/qrcode_share_layout.xml b/chrome/browser/share/android/java/res/layout/qrcode_share_layout.xml index a5d38ba..038b55a4 100644 --- a/chrome/browser/share/android/java/res/layout/qrcode_share_layout.xml +++ b/chrome/browser/share/android/java/res/layout/qrcode_share_layout.xml
@@ -4,21 +4,18 @@ Use of this source code is governed by a BSD-style license that can be found in the LICENSE file. --> -<ScrollView +<org.chromium.components.browser_ui.widget.FadingEdgeScrollView xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/share_layout" android:layout_width="match_parent" android:layout_height="match_parent" - android:orientation="vertical"> + android:orientation="vertical" + app:topEdgeVisibility="fading"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical"> - <ImageView - android:id="@+id/tab_line" - android:layout_width="match_parent" - style="@style/TabBarShadow" - android:importantForAccessibility="no"/> <TextView android:id="@+id/qrcode_text_image" @@ -75,4 +72,4 @@ android:enabled="false" style="@style/TextButton"/> </LinearLayout> -</ScrollView> +</org.chromium.components.browser_ui.widget.FadingEdgeScrollView>
diff --git a/chrome/browser/sharing/sharing_fcm_handler.cc b/chrome/browser/sharing/sharing_fcm_handler.cc index 4ca7deafe..87c6b9b0 100644 --- a/chrome/browser/sharing/sharing_fcm_handler.cc +++ b/chrome/browser/sharing/sharing_fcm_handler.cc
@@ -91,7 +91,6 @@ const gcm::IncomingMessage& message) { TRACE_EVENT_BEGIN0("sharing", "SharingFCMHandler::OnMessage"); - base::TimeTicks message_received_time = base::TimeTicks::Now(); chrome_browser_sharing::SharingMessage sharing_message; if (!sharing_message.ParseFromString(message.raw_data)) { LOG(ERROR) << "Failed to parse incoming message with id : " @@ -121,8 +120,8 @@ done_callback = base::BindOnce( &SharingFCMHandler::SendAckMessage, weak_ptr_factory_.GetWeakPtr(), std::move(message_id), message_type, GetFCMChannel(sharing_message), - GetServerChannel(sharing_message), GetSenderPlatform(sharing_message), - message_received_time); + GetServerChannel(sharing_message), + GetSenderPlatform(sharing_message)); } handler->OnMessage(std::move(sharing_message), std::move(done_callback)); @@ -182,10 +181,7 @@ absl::optional<chrome_browser_sharing::ServerChannelConfiguration> server_channel, SharingDevicePlatform sender_device_type, - base::TimeTicks message_received_time, std::unique_ptr<chrome_browser_sharing::ResponseMessage> response) { - LogSharingMessageHandlerTime(original_message_type, - base::TimeTicks::Now() - message_received_time); if (!fcm_channel && !server_channel) { LOG(ERROR) << "Unable to find ack channel configuration"; return;
diff --git a/chrome/browser/sharing/sharing_fcm_handler.h b/chrome/browser/sharing/sharing_fcm_handler.h index ce502aa..c5c897a 100644 --- a/chrome/browser/sharing/sharing_fcm_handler.h +++ b/chrome/browser/sharing/sharing_fcm_handler.h
@@ -90,7 +90,6 @@ absl::optional<chrome_browser_sharing::ServerChannelConfiguration> server_channel, SharingDevicePlatform sender_device_type, - base::TimeTicks message_received_time, std::unique_ptr<chrome_browser_sharing::ResponseMessage> response); void OnAckMessageSent(
diff --git a/chrome/browser/sharing/sharing_metrics.cc b/chrome/browser/sharing/sharing_metrics.cc index 66455ce1..742339e6 100644 --- a/chrome/browser/sharing/sharing_metrics.cc +++ b/chrome/browser/sharing/sharing_metrics.cc
@@ -175,14 +175,6 @@ chrome_browser_sharing::MessageType_ARRAYSIZE); } -void LogSharingRegistrationResult(SharingDeviceRegistrationResult result) { - base::UmaHistogramEnumeration("Sharing.DeviceRegistrationResult", result); -} - -void LogSharingUnregistrationResult(SharingDeviceRegistrationResult result) { - base::UmaHistogramEnumeration("Sharing.DeviceUnregistrationResult", result); -} - void LogSharingDevicesToShow(SharingFeatureName feature, const char* histogram_suffix, int count) { @@ -236,15 +228,6 @@ /*value_max=*/20); } -void LogSharingMessageHandlerTime( - chrome_browser_sharing::MessageType message_type, - base::TimeDelta time_taken) { - base::UmaHistogramMediumTimes( - base::StrCat({"Sharing.MessageHandlerTime.", - SharingMessageTypeToString(message_type)}), - time_taken); -} - void LogSharingDialogShown(SharingFeatureName feature, SharingDialogType type) { base::UmaHistogramEnumeration( base::StrCat({"Sharing.", GetEnumStringValue(feature), "DialogShown"}),
diff --git a/chrome/browser/sharing/sharing_service.cc b/chrome/browser/sharing/sharing_service.cc index 940f1d5..b740fd4 100644 --- a/chrome/browser/sharing/sharing_service.cc +++ b/chrome/browser/sharing/sharing_service.cc
@@ -181,7 +181,6 @@ void SharingService::OnDeviceRegistered( SharingDeviceRegistrationResult result) { - LogSharingRegistrationResult(result); switch (result) { case SharingDeviceRegistrationResult::kSuccess: backoff_entry_.InformOfRequest(true); @@ -229,7 +228,6 @@ void SharingService::OnDeviceUnregistered( SharingDeviceRegistrationResult result) { - LogSharingUnregistrationResult(result); if (IsSyncEnabledForSharing(sync_service_)) { // In case sync is enabled during un-registration, register it. state_ = State::REGISTERING;
diff --git a/chrome/browser/ui/BUILD.gn b/chrome/browser/ui/BUILD.gn index ee8672b..1c613120 100644 --- a/chrome/browser/ui/BUILD.gn +++ b/chrome/browser/ui/BUILD.gn
@@ -4611,6 +4611,8 @@ "views/autofill/payments/virtual_card_manual_fallback_icon_view.h", "views/autofill/popup/popup_base_view.cc", "views/autofill/popup/popup_base_view.h", + "views/autofill/popup/popup_cell_utils.cc", + "views/autofill/popup/popup_cell_utils.h", "views/autofill/popup/popup_cell_view.cc", "views/autofill/popup/popup_cell_view.h", "views/autofill/popup/popup_row_strategy.cc", @@ -6302,6 +6304,7 @@ if (is_mac) { assert(toolkit_views) + configs += [ "//build/config/compiler:enable_arc" ] sources += [ "cocoa/test/cocoa_test_helper.h", "cocoa/test/cocoa_test_helper.mm",
diff --git a/chrome/browser/ui/cocoa/test/cocoa_test_helper.mm b/chrome/browser/ui/cocoa/test/cocoa_test_helper.mm index 32f1b6dd..d94077d 100644 --- a/chrome/browser/ui/cocoa/test/cocoa_test_helper.mm +++ b/chrome/browser/ui/cocoa/test/cocoa_test_helper.mm
@@ -8,6 +8,10 @@ #include "base/path_service.h" #include "chrome/common/chrome_constants.h" +#if !defined(__has_feature) || !__has_feature(objc_arc) +#error "This file requires ARC support." +#endif + CocoaTestHelper::CocoaTestHelper() { CocoaTest::BootstrapCocoa(); }
diff --git a/chrome/browser/ui/cocoa/test/run_loop_testing.mm b/chrome/browser/ui/cocoa/test/run_loop_testing.mm index e2985af..e68fa79 100644 --- a/chrome/browser/ui/cocoa/test/run_loop_testing.mm +++ b/chrome/browser/ui/cocoa/test/run_loop_testing.mm
@@ -3,15 +3,18 @@ // found in the LICENSE file. #include "chrome/browser/ui/cocoa/test/run_loop_testing.h" -#include "base/memory/raw_ptr.h" #import <Foundation/Foundation.h> #include <memory> -#include "base/mac/scoped_nsobject.h" +#include "base/memory/raw_ptr.h" #include "base/message_loop/message_pump_mac.h" +#if !defined(__has_feature) || !__has_feature(objc_arc) +#error "This file requires ARC support." +#endif + // This class is scheduled with a delayed selector to quit the message pump. @interface CocoaQuitTask : NSObject { @private @@ -36,25 +39,22 @@ //////////////////////////////////////////////////////////////////////////////// -namespace chrome { -namespace testing { +namespace chrome::testing { void NSRunLoopRunAllPending() { - std::unique_ptr<base::MessagePumpNSRunLoop> message_pump( - new base::MessagePumpNSRunLoop); + auto message_pump = std::make_unique<base::MessagePumpNSRunLoop>(); // Put a delayed selector on the queue. All other pending delayed selectors // will run before this, after which the internal loop can end. - base::scoped_nsobject<CocoaQuitTask> quit_task( - [[CocoaQuitTask alloc] initWithMessagePump:message_pump.get()]); + CocoaQuitTask* quit_task = + [[CocoaQuitTask alloc] initWithMessagePump:message_pump.get()]; [quit_task performSelector:@selector(doQuit) withObject:nil afterDelay:0]; - // Spin the internal loop, running it until the quit task is pumped. Pass NULL - // because there is no delegate MessageLoop; only the Cocoa work queues will - // be pumped. - message_pump->Run(NULL); + // Spin the internal loop, running it until the quit task is pumped. Pass + // nullptr because there is no delegate MessageLoop; only the Cocoa work + // queues will be pumped. + message_pump->Run(nullptr); } -} // namespace testing -} // namespace chrome +} // namespace chrome::testing
diff --git a/chrome/browser/ui/cookie_controls/cookie_controls_controller_unittest.cc b/chrome/browser/ui/cookie_controls/cookie_controls_controller_unittest.cc index e5584919a8..3942a161e 100644 --- a/chrome/browser/ui/cookie_controls/cookie_controls_controller_unittest.cc +++ b/chrome/browser/ui/cookie_controls/cookie_controls_controller_unittest.cc
@@ -12,6 +12,7 @@ #include "components/content_settings/browser/page_specific_content_settings.h" #include "components/content_settings/browser/ui/cookie_controls_view.h" #include "components/content_settings/core/browser/cookie_settings.h" +#include "components/content_settings/core/common/cookie_controls_breakage_confidence_level.h" #include "components/content_settings/core/common/cookie_controls_enforcement.h" #include "components/content_settings/core/common/features.h" #include "components/content_settings/core/common/pref_names.h" @@ -45,6 +46,9 @@ CookieControlsEnforcement, absl::optional<base::Time>)); MOCK_METHOD(void, OnSitesCountChanged, (int, int)); + MOCK_METHOD(void, + OnBreakageConfidenceLevelChanged, + (CookieControlsBreakageConfidenceLevel)); }; } // namespace
diff --git a/chrome/browser/ui/tab_contents/chrome_web_contents_view_handle_drop_unittest.cc b/chrome/browser/ui/tab_contents/chrome_web_contents_view_handle_drop_unittest.cc index e21738d..591d5c8 100644 --- a/chrome/browser/ui/tab_contents/chrome_web_contents_view_handle_drop_unittest.cc +++ b/chrome/browser/ui/tab_contents/chrome_web_contents_view_handle_drop_unittest.cc
@@ -16,10 +16,10 @@ #include "base/test/bind.h" #include "base/test/scoped_feature_list.h" #include "chrome/browser/enterprise/connectors/analysis/content_analysis_delegate.h" +#include "chrome/browser/enterprise/connectors/analysis/fake_content_analysis_delegate.h" #include "chrome/browser/enterprise/connectors/connectors_service.h" -#include "chrome/browser/enterprise/connectors/test/deep_scanning_test_utils.h" -#include "chrome/browser/enterprise/connectors/test/fake_content_analysis_delegate.h" #include "chrome/browser/policy/dm_token_utils.h" +#include "chrome/browser/safe_browsing/cloud_content_scanning/deep_scanning_test_utils.h" #include "chrome/browser/ui/tab_contents/chrome_web_contents_view_handle_drop.h" #include "chrome/test/base/testing_browser_process.h" #include "chrome/test/base/testing_profile.h" @@ -63,22 +63,21 @@ ], "block_until_verdict": 1 })"; - enterprise_connectors::test::SetAnalysisConnector( + safe_browsing::SetAnalysisConnector( profile_->GetPrefs(), enterprise_connectors::FILE_ATTACHED, kEnabled); - enterprise_connectors::test::SetAnalysisConnector( + safe_browsing::SetAnalysisConnector( profile_->GetPrefs(), enterprise_connectors::BULK_DATA_ENTRY, kEnabled); } else { - enterprise_connectors::test::ClearAnalysisConnector( + safe_browsing::ClearAnalysisConnector( profile_->GetPrefs(), enterprise_connectors::FILE_ATTACHED); - enterprise_connectors::test::ClearAnalysisConnector( + safe_browsing::ClearAnalysisConnector( profile_->GetPrefs(), enterprise_connectors::BULK_DATA_ENTRY); } run_loop_ = std::make_unique<base::RunLoop>(); - using FakeDelegate = - enterprise_connectors::test::FakeContentAnalysisDelegate; + using FakeDelegate = enterprise_connectors::FakeContentAnalysisDelegate; policy::SetDMTokenForTesting(policy::DMToken::CreateValidToken("dm_token")); auto callback = base::BindLambdaForTesting( @@ -119,7 +118,7 @@ }); enterprise_connectors::ContentAnalysisDelegate::SetFactoryForTesting( base::BindRepeating( - &enterprise_connectors::test::FakeContentAnalysisDelegate::Create, + &enterprise_connectors::FakeContentAnalysisDelegate::Create, run_loop_->QuitClosure(), callback, "dm_token")); enterprise_connectors::ContentAnalysisDelegate::DisableUIForTesting(); enterprise_connectors::ContentAnalysisDelegate::
diff --git a/chrome/browser/ui/views/autofill/popup/popup_cell_utils.cc b/chrome/browser/ui/views/autofill/popup/popup_cell_utils.cc new file mode 100644 index 0000000..d98253c --- /dev/null +++ b/chrome/browser/ui/views/autofill/popup/popup_cell_utils.cc
@@ -0,0 +1,545 @@ +// Copyright 2023 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "chrome/browser/ui/views/autofill/popup/popup_cell_utils.h" + +#include <memory> +#include <utility> + +#include "base/feature_list.h" +#include "build/branding_buildflags.h" +#include "chrome/app/vector_icons/vector_icons.h" +#include "chrome/browser/autofill/autofill_popup_controller_utils.h" +#include "chrome/browser/ui/autofill/autofill_popup_controller.h" +#include "chrome/browser/ui/passwords/ui_utils.h" +#include "chrome/browser/ui/views/autofill/popup/popup_base_view.h" +#include "chrome/browser/ui/views/autofill/popup/popup_cell_view.h" +#include "chrome/browser/ui/views/chrome_layout_provider.h" +#include "chrome/browser/ui/views/chrome_typography.h" +#include "components/autofill/core/browser/data_model/credit_card.h" +#include "components/autofill/core/browser/ui/suggestion.h" +#include "components/autofill/core/common/autofill_features.h" +#include "components/autofill/core/common/autofill_payments_features.h" +#include "components/omnibox/browser/vector_icons.h" +#include "components/strings/grit/components_strings.h" +#include "components/vector_icons/vector_icons.h" +#include "ui/base/l10n/l10n_util.h" +#include "ui/gfx/paint_vector_icon.h" +#include "ui/views/controls/image_view.h" +#include "ui/views/controls/label.h" +#include "ui/views/controls/menu/menu_config.h" +#include "ui/views/layout/box_layout.h" +#include "ui/views/layout/box_layout_view.h" +#include "ui/views/layout/flex_layout.h" +#include "ui/views/layout/table_layout_view.h" +#include "ui/views/view.h" + +namespace autofill::popup_cell_utils { + +namespace { + +// The default icon size used in the suggestion drop down. +constexpr int kIconSize = 16; + +// Max width for the username and masked password. +constexpr int kAutofillPopupUsernameMaxWidth = 272; + +// Max width for address profile suggestion text. +constexpr int kAutofillPopupAddressProfileMaxWidth = 192; +// Max width for address credit card suggestion text. +constexpr int kAutofillPopupCreditCardMaxWidth = 192; + +// The additional height of the row in case it has two lines of text. +constexpr int kAutofillPopupAdditionalDoubleRowHeight = 22; + +// The additional padding of the row in case it has three lines of text. +constexpr int kAutofillPopupAdditionalPadding = 16; + +// Vertical spacing between labels in one row. +constexpr int kAdjacentLabelsVerticalSpacing = 2; + +// The icon size used in the suggestion dropdown for displaying the Google +// Password Manager icon in the Manager Passwords entry. +constexpr int kGooglePasswordManagerIconSize = 20; + +// Returns the name of the network for payment method icons, empty string +// otherwise. +std::u16string GetIconAccessibleName(const std::string& icon_text) { + // Networks for which icons are currently shown. + if (icon_text == autofill::kAmericanExpressCard) { + return l10n_util::GetStringUTF16(IDS_AUTOFILL_CC_AMEX); + } + if (icon_text == autofill::kDinersCard) { + return l10n_util::GetStringUTF16(IDS_AUTOFILL_CC_DINERS); + } + if (icon_text == autofill::kDiscoverCard) { + return l10n_util::GetStringUTF16(IDS_AUTOFILL_CC_DISCOVER); + } + if (icon_text == autofill::kEloCard) { + return l10n_util::GetStringUTF16(IDS_AUTOFILL_CC_ELO); + } + if (icon_text == autofill::kJCBCard) { + return l10n_util::GetStringUTF16(IDS_AUTOFILL_CC_JCB); + } + if (icon_text == autofill::kMasterCard) { + return l10n_util::GetStringUTF16(IDS_AUTOFILL_CC_MASTERCARD); + } + if (icon_text == autofill::kMirCard) { + return l10n_util::GetStringUTF16(IDS_AUTOFILL_CC_MIR); + } + if (icon_text == autofill::kTroyCard) { + return l10n_util::GetStringUTF16(IDS_AUTOFILL_CC_TROY); + } + if (icon_text == autofill::kUnionPay) { + return l10n_util::GetStringUTF16(IDS_AUTOFILL_CC_UNION_PAY); + } + if (icon_text == autofill::kVisaCard) { + return l10n_util::GetStringUTF16(IDS_AUTOFILL_CC_VISA); + } + // Other networks. + if (icon_text == autofill::kGenericCard) { + return l10n_util::GetStringUTF16(IDS_AUTOFILL_CC_GENERIC); + } + return std::u16string(); +} + +std::unique_ptr<views::ImageView> ImageViewFromImageSkia( + const gfx::ImageSkia& image_skia) { + if (image_skia.isNull()) { + return nullptr; + } + auto image_view = std::make_unique<views::ImageView>(); + image_view->SetImage(image_skia); + return image_view; +} + +std::unique_ptr<views::ImageView> GetIconImageViewByName( + const std::string& icon_str) { + if (icon_str.empty()) { + return nullptr; + } + + // For http warning message, get icon images from VectorIcon, which is the + // same as security indicator icons in location bar. + if (icon_str == "httpWarning") { + return ImageViewFromVectorIcon(omnibox::kHttpIcon, kIconSize); + } + + if (icon_str == "httpsInvalid") { + return std::make_unique<views::ImageView>( + ui::ImageModel::FromVectorIcon(vector_icons::kNotSecureWarningIcon, + ui::kColorAlertHighSeverity, kIconSize)); + } + + if (icon_str == "keyIcon") { + return ImageViewFromVectorIcon(kKeyIcon, kIconSize); + } + + if (icon_str == "clearIcon") { + return ImageViewFromVectorIcon(kBackspaceIcon, kIconSize); + } + + if (icon_str == "globeIcon") { + return ImageViewFromVectorIcon(kGlobeIcon, kIconSize); + } + + if (icon_str == "accountIcon") { + return ImageViewFromVectorIcon(kAccountCircleIcon, kIconSize); + } + + if (icon_str == "settingsIcon") { + return ImageViewFromVectorIcon(omnibox::kProductIcon, kIconSize); + } + + if (icon_str == "empty") { + return ImageViewFromVectorIcon(omnibox::kHttpIcon, kIconSize); + } + + if (icon_str == "device") { + return ImageViewFromVectorIcon(kDevicesIcon, kIconSize); + } + + if (icon_str == "google") { +#if BUILDFLAG(GOOGLE_CHROME_BRANDING) + return ImageViewFromImageSkia(gfx::CreateVectorIcon( + vector_icons::kGoogleGLogoIcon, kIconSize, gfx::kPlaceholderColor)); +#else + return nullptr; +#endif + } + + if (icon_str == "googlePasswordManager") { + return ImageViewFromVectorIcon(GooglePasswordManagerVectorIcon(), + kGooglePasswordManagerIconSize); + } + +#if !BUILDFLAG(GOOGLE_CHROME_BRANDING) + if (icon_str == "googlePay" || icon_str == "googlePayDark") { + return nullptr; + } +#endif + // For other suggestion entries, get icon from PNG files. + int icon_id = GetIconResourceID(icon_str); + DCHECK_NE(icon_id, 0); + return ImageViewFromImageSkia( + *ui::ResourceBundle::GetSharedInstance().GetImageSkiaNamed(icon_id)); +} + +} // namespace + +std::unique_ptr<views::ImageView> ImageViewFromVectorIcon( + const gfx::VectorIcon& vector_icon, + int icon_size = kIconSize) { + return std::make_unique<views::ImageView>( + ui::ImageModel::FromVectorIcon(vector_icon, ui::kColorIcon, icon_size)); +} + +std::u16string GetVoiceOverStringFromSuggestion(const Suggestion& suggestion) { + if (suggestion.voice_over) { + return *suggestion.voice_over; + } + + std::vector<std::u16string> text; + auto add_if_not_empty = [&text](std::u16string value) { + if (!value.empty()) { + text.push_back(std::move(value)); + } + }; + + add_if_not_empty(GetIconAccessibleName(suggestion.icon)); + text.push_back(suggestion.main_text.value); + add_if_not_empty(suggestion.minor_text.value); + + for (const std::vector<Suggestion::Text>& row : suggestion.labels) { + for (const Suggestion::Text& label : row) { + // `label_text` is not populated for footers or autocomplete entries. + add_if_not_empty(label.value); + } + } + + // `additional_label` is only populated in a passwords context. + add_if_not_empty(suggestion.additional_label); + + return base::JoinString(text, u" "); +} + +gfx::Insets GetMarginsForContentCell(bool has_control_element) { + int left_margin = PopupBaseView::GetHorizontalMargin(); + int right_margin = left_margin; + + if (base::FeatureList::IsEnabled( + features::kAutofillShowAutocompleteDeleteButton)) { + // If the feature is enabled, then the row already adds some extra + // horizontal margin on the left - deduct that. + left_margin = std::max( + 0, left_margin - ChromeLayoutProvider::Get()->GetDistanceMetric( + DISTANCE_CONTENT_LIST_VERTICAL_SINGLE)); + + // If there is no control element, then this is the only cell and the same + // correction needs to be made on the right side, too. + if (!has_control_element) { + right_margin = left_margin; + } + } + return gfx::Insets::TLBR(0, left_margin, 0, right_margin); +} + +std::unique_ptr<views::ImageView> GetIconImageView( + const Suggestion& suggestion) { + if (!suggestion.custom_icon.IsEmpty()) { + return ImageViewFromImageSkia(suggestion.custom_icon.AsImageSkia()); + } + + return GetIconImageViewByName(suggestion.icon); +} + +std::unique_ptr<views::ImageView> GetTrailingIconImageView( + const Suggestion& suggestion) { + return GetIconImageViewByName(suggestion.trailing_icon); +} + +// Adds a spacer with `spacer_width` to `view`. `layout` must be the +// LayoutManager of `view`. +void AddSpacerWithSize(views::View& view, + views::BoxLayout& layout, + int spacer_width, + bool resize) { + auto spacer = views::Builder<views::View>() + .SetPreferredSize(gfx::Size(spacer_width, 1)) + .Build(); + layout.SetFlexForView(view.AddChildView(std::move(spacer)), + /*flex=*/resize ? 1 : 0, + /*use_min_size=*/true); +} + +// Creates the table in which all the Autofill suggestion content apart from +// leading and trailing icons is contained and adds it to `content_view`. +// It registers `main_text_label`, `minor_text_label`, and `description_label` +// with `content_view` for tracking, but assumes that the labels inside of of +// `subtext_views` have already been registered for tracking with +// `content_view`. +void AddSuggestionContentTableToView( + std::unique_ptr<views::Label> main_text_label, + std::unique_ptr<views::Label> minor_text_label, + std::unique_ptr<views::Label> description_label, + std::vector<std::unique_ptr<views::View>> subtext_views, + PopupCellView& content_view) { + const int kDividerSpacing = ChromeLayoutProvider::Get()->GetDistanceMetric( + DISTANCE_RELATED_LABEL_HORIZONTAL_LIST); + auto content_table = + views::Builder<views::TableLayoutView>() + .AddColumn(views::LayoutAlignment::kStart, + views::LayoutAlignment::kStretch, + views::TableLayout::kFixedSize, + views::TableLayout::ColumnSize::kUsePreferred, 0, 0) + .AddPaddingColumn(views::TableLayout::kFixedSize, kDividerSpacing) + .AddColumn(views::LayoutAlignment::kStart, + views::LayoutAlignment::kStretch, + views::TableLayout::kFixedSize, + views::TableLayout::ColumnSize::kUsePreferred, 0, 0) + .Build(); + + // Major and minor text go into the first row, first column. + content_table->AddRows(1, 0); + if (minor_text_label) { + auto first_line_container = std::make_unique<views::View>(); + first_line_container + ->SetLayoutManager(std::make_unique<views::FlexLayout>()) + ->SetOrientation(views::LayoutOrientation::kHorizontal) + .SetMainAxisAlignment(views::LayoutAlignment::kStart) + .SetCrossAxisAlignment(views::LayoutAlignment::kCenter) + .SetIgnoreDefaultMainAxisMargins(true) + .SetCollapseMargins(true) + .SetDefault( + views::kMarginsKey, + gfx::Insets::VH(0, ChromeLayoutProvider::Get()->GetDistanceMetric( + DISTANCE_RELATED_LABEL_HORIZONTAL_LIST))); + + content_view.TrackLabel( + first_line_container->AddChildView(std::move(main_text_label))); + content_view.TrackLabel( + first_line_container->AddChildView(std::move(minor_text_label))); + content_table->AddChildView(std::move(first_line_container)); + } else { + content_view.TrackLabel( + content_table->AddChildView(std::move(main_text_label))); + } + + // The description goes into the first row, second column. + if (description_label) { + content_view.TrackLabel( + content_table->AddChildView(std::move(description_label))); + } else { + content_table->AddChildView(std::make_unique<views::View>()); + } + + // Every subtext label goes into an additional row. + for (std::unique_ptr<views::View>& subtext_view : subtext_views) { + content_table->AddPaddingRow(0, kAdjacentLabelsVerticalSpacing) + .AddRows(1, 0); + content_table->AddChildView(std::move(subtext_view)); + content_table->AddChildView(std::make_unique<views::View>()); + } + content_view.AddChildView(std::move(content_table)); +} + +// Creates the content structure shared by autocomplete, address, credit card, +// and password suggestions. +// - `minor_text_label`, `description_label`, and `subtext_labels` may all be +// null or empty. +// - `content_view` is the (assumed to be empty) view to which the content +// structure for the `suggestion` is added. +void AddSuggestionContentToView( + const Suggestion& suggestion, + std::unique_ptr<views::Label> main_text_label, + std::unique_ptr<views::Label> minor_text_label, + std::unique_ptr<views::Label> description_label, + std::vector<std::unique_ptr<views::View>> subtext_views, + PopupCellView& content_view) { + bool has_control_element = + suggestion.popup_item_id == PopupItemId::kAutocompleteEntry && + base::FeatureList::IsEnabled( + features::kAutofillShowAutocompleteDeleteButton); + views::BoxLayout& layout = + *content_view.SetLayoutManager(std::make_unique<views::BoxLayout>( + views::BoxLayout::Orientation::kHorizontal, + GetMarginsForContentCell(has_control_element))); + + layout.set_cross_axis_alignment( + views::BoxLayout::CrossAxisAlignment::kCenter); + + // Adjust the cell height based on the number of subtexts. + const int kStandardRowHeight = + views::MenuConfig::instance().touchable_menu_height; + const int kActualHeight = + kStandardRowHeight + + (subtext_views.empty() ? 0 : kAutofillPopupAdditionalDoubleRowHeight); + layout.set_minimum_cross_axis_size(kActualHeight); + + // If there are three rows in total, add extra padding to avoid cramming. + DCHECK_LE(subtext_views.size(), 2u); + if (subtext_views.size() == 2u) { + layout.set_inside_border_insets(gfx::Insets::VH( + kAutofillPopupAdditionalPadding, PopupBaseView::GetHorizontalMargin())); + } + + // The leading icon. + if (std::unique_ptr<views::ImageView> icon = GetIconImageView(suggestion)) { + content_view.AddChildView(std::move(icon)); + AddSpacerWithSize(content_view, layout, + PopupBaseView::GetHorizontalPadding(), + /*resize=*/false); + } + + // The actual content table. + AddSuggestionContentTableToView( + std::move(main_text_label), std::move(minor_text_label), + std::move(description_label), std::move(subtext_views), content_view); + + // The trailing icon. + if (std::unique_ptr<views::ImageView> trailing_icon = + GetTrailingIconImageView(suggestion)) { + AddSpacerWithSize(content_view, layout, + PopupBaseView::GetHorizontalPadding(), + /*resize=*/true); + content_view.AddChildView(std::move(trailing_icon)); + } + + // Force a refresh to ensure all the labels'styles are correct. + content_view.RefreshStyle(); +} + +void FormatLabel(views::Label& label, + const Suggestion::Text& text, + base::WeakPtr<const AutofillPopupController> controller) { + DCHECK(controller); + if (controller->GetPopupType() == PopupType::kAddresses) { + label.SetMaximumWidthSingleLine(kAutofillPopupAddressProfileMaxWidth); + } else if (controller->GetPopupType() == PopupType::kCreditCards && + text.should_truncate.value()) { + // should_truncate should only be set to true iff the experiments are + // enabled. + DCHECK(base::FeatureList::IsEnabled( + autofill::features::kAutofillEnableVirtualCardMetadata)); + DCHECK(base::FeatureList::IsEnabled( + autofill::features::kAutofillEnableCardProductName)); + label.SetMaximumWidthSingleLine(kAutofillPopupCreditCardMaxWidth); + } +} + +// Creates a label for the suggestion's main text. +std::unique_ptr<views::Label> CreateMainTextLabel( + const Suggestion::Text& main_text, + int text_style) { + return std::make_unique<views::Label>( + main_text.value, views::style::CONTEXT_DIALOG_BODY_TEXT, + !main_text.is_primary ? views::style::STYLE_PRIMARY : text_style); +} + +// Creates a label for the suggestion's minor text. +std::unique_ptr<views::Label> CreateMinorTextLabel( + const Suggestion::Text& minor_text) { + return minor_text.value.empty() + ? nullptr + : std::make_unique<views::Label>( + minor_text.value, views::style::CONTEXT_DIALOG_BODY_TEXT, + views::style::STYLE_SECONDARY); +} + +std::unique_ptr<views::Label> CreateDescriptionLabel( + PopupCellView& content_view, + base::WeakPtr<AutofillPopupController> controller, + int line_number) { + const Suggestion& kSuggestion = controller->GetSuggestionAt(line_number); + if (kSuggestion.labels.empty()) { + return nullptr; + } + + DCHECK_EQ(kSuggestion.labels.size(), 1u); + DCHECK_EQ(kSuggestion.labels[0].size(), 1u); + + auto label = std::make_unique<views::Label>( + kSuggestion.labels[0][0].value, views::style::CONTEXT_DIALOG_BODY_TEXT, + views::style::STYLE_SECONDARY); + label->SetElideBehavior(gfx::ELIDE_HEAD); + label->SetMaximumWidthSingleLine(kAutofillPopupUsernameMaxWidth); + return label; +} + +std::vector<std::unique_ptr<views::View>> CreateAndTrackSubtextViews( + PopupCellView& content_view, + base::WeakPtr<AutofillPopupController> controller, + int line_number) { + std::vector<std::unique_ptr<views::View>> result; + const int kHorizontalSpacing = ChromeLayoutProvider::Get()->GetDistanceMetric( + DISTANCE_RELATED_LABEL_HORIZONTAL_LIST); + + for (const std::vector<Suggestion::Text>& label_row : + controller->GetSuggestionAt(line_number).labels) { + DCHECK_LE(label_row.size(), 2u); + DCHECK(!label_row.empty()); + if (base::ranges::all_of(label_row, &std::u16string::empty, + &Suggestion::Text::value)) { + // If a row is empty, do not include any further rows. + return result; + } + + auto label_row_container_view = + views::Builder<views::BoxLayoutView>() + .SetOrientation(views::BoxLayout::Orientation::kHorizontal) + .SetBetweenChildSpacing(kHorizontalSpacing) + .Build(); + for (const Suggestion::Text& label_text : label_row) { + // If a column is empty, do not include any further columns. + if (label_text.value.empty()) { + break; + } + auto* label = + label_row_container_view->AddChildView(std::make_unique<views::Label>( + label_text.value, + ChromeTextContext::CONTEXT_DIALOG_BODY_TEXT_SMALL, + views::style::STYLE_SECONDARY)); + content_view.TrackLabel(label); + FormatLabel(*label, label_text, controller); + } + result.push_back(std::move(label_row_container_view)); + } + + return result; +} + +// Adds the callbacks for the content area to `content_view`. +void AddCallbacksToContentView( + base::WeakPtr<AutofillPopupController> controller, + int line_number, + PopupCellView& content_view) { + content_view.SetOnSelectedCallback(base::BindRepeating( + &AutofillPopupController::SelectSuggestion, controller, line_number)); + content_view.SetOnUnselectedCallback(base::BindRepeating( + &AutofillPopupController::SelectSuggestion, controller, absl::nullopt)); + content_view.SetOnAcceptedCallback(base::BindRepeating( + &AutofillPopupController::AcceptSuggestion, controller, line_number)); +} + +void AddSuggestionStrategyContentCellChildren( + PopupCellView* view, + base::WeakPtr<AutofillPopupController> controller, + int line_number) { + DCHECK(controller); + const Suggestion& kSuggestion = controller->GetSuggestionAt(line_number); + // Add the label views. + std::unique_ptr<views::Label> main_text_label = CreateMainTextLabel( + kSuggestion.main_text, views::style::TextStyle::STYLE_PRIMARY); + FormatLabel(*main_text_label, kSuggestion.main_text, controller); + AddSuggestionContentToView( + kSuggestion, std::move(main_text_label), + CreateMinorTextLabel(kSuggestion.minor_text), + /*description_label=*/nullptr, + CreateAndTrackSubtextViews(*view, controller, line_number), *view); + + // Prepare the callbacks to the controller. + AddCallbacksToContentView(controller, line_number, *view); +} + +} // namespace autofill::popup_cell_utils
diff --git a/chrome/browser/ui/views/autofill/popup/popup_cell_utils.h b/chrome/browser/ui/views/autofill/popup/popup_cell_utils.h new file mode 100644 index 0000000..248f11f --- /dev/null +++ b/chrome/browser/ui/views/autofill/popup/popup_cell_utils.h
@@ -0,0 +1,150 @@ +// Copyright 2023 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef CHROME_BROWSER_UI_VIEWS_AUTOFILL_POPUP_POPUP_CELL_UTILS_H_ +#define CHROME_BROWSER_UI_VIEWS_AUTOFILL_POPUP_POPUP_CELL_UTILS_H_ + +#include <memory> + +#include "base/memory/weak_ptr.h" +#include "components/autofill/core/browser/ui/suggestion.h" +#include "ui/gfx/vector_icon_types.h" + +namespace views { +class View; +class Label; +class BoxLayout; +class ImageView; +} // namespace views + +namespace autofill { +class AutofillPopupController; +class PopupCellView; +} // namespace autofill + +namespace gfx { +class Insets; +} + +namespace autofill::popup_cell_utils { + +// Returns the padding for a content cell. +// +// For content cells that make up the entire Autofill popup row (i.e. there is +// no control element), the following reasoning applies: +// * If `kAutofillShowAutocompleteDeleteButton` is on, then there is padding +// with distance `DISTANCE_CONTENT_LIST_VERTICAL_SINGLE` between the edge of +// the Autofill popup row and the start of the content cell. +// * In addition, there is also padding inside the content cell. Together, these +// two paddings need to add up to `PopupBaseView::GetHorizontalMargin`, since +// to ensure that the content inside the content cell is aligned with the +// popup bubble's arrow. +// * Similarly, the right padding of the content cell needs to be adjusted. +// +// / \ +// / \ +// / \ +// / arrow \ +// ┌─────/ \────────────────────────┐ +// │ ┌──────────────────────────────────┐ │ +// │ │ ┌─────────┐ ┌────────────────┐ │ │ +// ├──┼──┤ │ │ │ │ │ +// ├──┤▲ │ Icon │ │ Text labels │ │ │ +// │▲ │| │ │ │ │ │ │ +// ││ ││ └─────────┘ └────────────────┘ │ │ +// ││ └┼─────────────────────────────────┘ │ +// └┼──┼────────────────────────────────────┘ +// │ │ +// │ PopupBaseView::GetHorizontalMargin() +// │ +// DISTANCE_CONTENT_LIST_VERTICAL_SINGLE +// +// If the popup row has a control element, then the adjustment does not need +// to be made for the right padding, since the right side of the content cell +// borders another cell and not the right padding area of the popup row. +gfx::Insets GetMarginsForContentCell(bool has_control_element); + +std::u16string GetVoiceOverStringFromSuggestion(const Suggestion& suggestion); + +std::unique_ptr<views::ImageView> GetIconImageView( + const Suggestion& suggestion); + +std::unique_ptr<views::ImageView> GetTrailingIconImageView( + const Suggestion& suggestion); + +// Adds a spacer with `spacer_width` to `view`. `layout` must be the +// LayoutManager of `view`. +void AddSpacerWithSize(views::View& view, + views::BoxLayout& layout, + int spacer_width, + bool resize); + +// Creates the table in which all the Autofill suggestion content apart from +// leading and trailing icons is contained and adds it to `content_view`. +// It registers `main_text_label`, `minor_text_label`, and `description_label` +// with `content_view` for tracking, but assumes that the labels inside of of +// `subtext_views` have already been registered for tracking with +// `content_view`. +void AddSuggestionContentTableToView( + std::unique_ptr<views::Label> main_text_label, + std::unique_ptr<views::Label> minor_text_label, + std::unique_ptr<views::Label> description_label, + std::vector<std::unique_ptr<views::View>> subtext_views, + PopupCellView& content_view); + +// Creates the content structure shared by autocomplete, address, credit card, +// and password suggestions. +// - `minor_text_label`, `description_label`, and `subtext_labels` may all be +// null or empty. +// - `content_view` is the (assumed to be empty) view to which the content +// structure for the `suggestion` is added. +void AddSuggestionContentToView( + const Suggestion& suggestion, + std::unique_ptr<views::Label> main_text_label, + std::unique_ptr<views::Label> minor_text_label, + std::unique_ptr<views::Label> description_label, + std::vector<std::unique_ptr<views::View>> subtext_views, + PopupCellView& content_view); + +void FormatLabel(views::Label& label, + const Suggestion::Text& text, + base::WeakPtr<const AutofillPopupController> controller); + +// Creates a label for the suggestion's main text. +std::unique_ptr<views::Label> CreateMainTextLabel( + const Suggestion::Text& main_text, + int text_style); + +// Creates a label for the suggestion's minor text. +std::unique_ptr<views::Label> CreateMinorTextLabel( + const Suggestion::Text& minor_text); + +std::vector<std::unique_ptr<views::View>> CreateAndTrackSubtextViews( + PopupCellView& content_view, + base::WeakPtr<AutofillPopupController> controller, + int line_number); + +std::unique_ptr<views::Label> CreateDescriptionLabel( + PopupCellView& content_view, + base::WeakPtr<AutofillPopupController> controller, + int line_number); + +// Adds the callbacks for the content area to `content_view`. +void AddCallbacksToContentView( + base::WeakPtr<AutofillPopupController> controller, + int line_number, + PopupCellView& content_view); + +void AddSuggestionStrategyContentCellChildren( + PopupCellView* view, + base::WeakPtr<AutofillPopupController> controller, + int line_number); + +std::unique_ptr<views::ImageView> ImageViewFromVectorIcon( + const gfx::VectorIcon& vector_icon, + int icon_size); + +} // namespace autofill::popup_cell_utils + +#endif // CHROME_BROWSER_UI_VIEWS_AUTOFILL_POPUP_POPUP_CELL_UTILS_H_
diff --git a/chrome/browser/ui/views/autofill/popup/popup_row_strategy.cc b/chrome/browser/ui/views/autofill/popup/popup_row_strategy.cc index f7d9181f..a662ba8 100644 --- a/chrome/browser/ui/views/autofill/popup/popup_row_strategy.cc +++ b/chrome/browser/ui/views/autofill/popup/popup_row_strategy.cc
@@ -4,86 +4,31 @@ #include "chrome/browser/ui/views/autofill/popup/popup_row_strategy.h" -#include <memory> -#include <string> -#include <utility> -#include <vector> - -#include "base/containers/contains.h" #include "base/feature_list.h" -#include "base/functional/bind.h" -#include "base/functional/callback.h" -#include "base/memory/weak_ptr.h" -#include "base/ranges/algorithm.h" -#include "base/strings/string_util.h" -#include "base/time/time.h" -#include "build/branding_buildflags.h" #include "chrome/app/vector_icons/vector_icons.h" -#include "chrome/browser/autofill/autofill_popup_controller_utils.h" #include "chrome/browser/ui/autofill/autofill_popup_controller.h" -#include "chrome/browser/ui/passwords/ui_utils.h" #include "chrome/browser/ui/views/autofill/popup/popup_base_view.h" -#include "chrome/browser/ui/views/autofill/popup/popup_cell_view.h" -#include "chrome/browser/ui/views/chrome_layout_provider.h" -#include "chrome/browser/ui/views/chrome_typography.h" -#include "components/autofill/core/browser/data_model/credit_card.h" +#include "chrome/browser/ui/views/autofill/popup/popup_cell_utils.h" #include "components/autofill/core/browser/metrics/autofill_metrics.h" -#include "components/autofill/core/browser/ui/popup_item_ids.h" -#include "components/autofill/core/browser/ui/popup_types.h" -#include "components/autofill/core/browser/ui/suggestion.h" #include "components/autofill/core/common/autofill_features.h" -#include "components/autofill/core/common/autofill_payments_features.h" -#include "components/omnibox/browser/vector_icons.h" #include "components/strings/grit/components_strings.h" -#include "components/vector_icons/vector_icons.h" -#include "ui/accessibility/ax_enums.mojom.h" #include "ui/base/l10n/l10n_util.h" -#include "ui/base/models/image_model.h" -#include "ui/color/color_id.h" -#include "ui/gfx/geometry/insets.h" -#include "ui/gfx/image/image_skia.h" -#include "ui/gfx/paint_vector_icon.h" -#include "ui/gfx/vector_icon_types.h" -#include "ui/views/controls/button/image_button.h" #include "ui/views/controls/image_view.h" -#include "ui/views/controls/label.h" #include "ui/views/controls/menu/menu_config.h" #include "ui/views/controls/throbber.h" -#include "ui/views/layout/box_layout.h" #include "ui/views/layout/box_layout_view.h" -#include "ui/views/layout/flex_layout.h" -#include "ui/views/layout/table_layout_view.h" namespace autofill { namespace { +// The default icon size used in the suggestion drop down. +constexpr int kTrashCanLightIconSize = 12; + // Max width for the username and masked password. constexpr int kAutofillPopupUsernameMaxWidth = 272; constexpr int kAutofillPopupPasswordMaxWidth = 108; -// Max width for address profile suggestion text. -constexpr int kAutofillPopupAddressProfileMaxWidth = 192; -// Max width for address credit card suggestion text. -constexpr int kAutofillPopupCreditCardMaxWidth = 192; - -// The additional height of the row in case it has two lines of text. -constexpr int kAutofillPopupAdditionalDoubleRowHeight = 22; - -// The additional padding of the row in case it has three lines of text. -constexpr int kAutofillPopupAdditionalPadding = 16; - -// Vertical spacing between labels in one row. -constexpr int kAdjacentLabelsVerticalSpacing = 2; - -// The default icon size used in the suggestion drop down. -constexpr int kIconSize = 16; -constexpr int kTrashCanLightIconSize = 12; - -// The icon size used in the suggestion dropdown for displaying the Google -// Password Manager icon in the Manager Passwords entry. -constexpr int kGooglePasswordManagerIconSize = 20; - constexpr int kAutocompleteDeleteIconHorizontalPadding = 8; // Popup items that use a leading icon instead of a trailing one. @@ -97,417 +42,6 @@ PopupItemId::kPasswordAccountStorageReSignin, PopupItemId::kPasswordAccountStorageOptInAndGenerate}; -std::unique_ptr<views::ImageView> ImageViewFromImageSkia( - const gfx::ImageSkia& image_skia) { - if (image_skia.isNull()) { - return nullptr; - } - auto image_view = std::make_unique<views::ImageView>(); - image_view->SetImage(image_skia); - return image_view; -} - -std::unique_ptr<views::ImageView> ImageViewFromVectorIcon( - const gfx::VectorIcon& vector_icon, - int icon_size = kIconSize) { - return std::make_unique<views::ImageView>( - ui::ImageModel::FromVectorIcon(vector_icon, ui::kColorIcon, icon_size)); -} - -std::unique_ptr<views::ImageView> GetIconImageViewByName( - const std::string& icon_str) { - if (icon_str.empty()) { - return nullptr; - } - - // For http warning message, get icon images from VectorIcon, which is the - // same as security indicator icons in location bar. - if (icon_str == "httpWarning") { - return ImageViewFromVectorIcon(omnibox::kHttpIcon); - } - - if (icon_str == "httpsInvalid") { - return std::make_unique<views::ImageView>( - ui::ImageModel::FromVectorIcon(vector_icons::kNotSecureWarningIcon, - ui::kColorAlertHighSeverity, kIconSize)); - } - - if (icon_str == "keyIcon") { - return ImageViewFromVectorIcon(kKeyIcon); - } - - if (icon_str == "clearIcon") { - return ImageViewFromVectorIcon(kBackspaceIcon); - } - - if (icon_str == "globeIcon") { - return ImageViewFromVectorIcon(kGlobeIcon); - } - - if (icon_str == "accountIcon") { - return ImageViewFromVectorIcon(kAccountCircleIcon); - } - - if (icon_str == "settingsIcon") { - return ImageViewFromVectorIcon(omnibox::kProductIcon); - } - - if (icon_str == "empty") { - return ImageViewFromVectorIcon(omnibox::kHttpIcon); - } - - if (icon_str == "device") { - return ImageViewFromVectorIcon(kDevicesIcon); - } - - if (icon_str == "google") { -#if BUILDFLAG(GOOGLE_CHROME_BRANDING) - return ImageViewFromImageSkia(gfx::CreateVectorIcon( - vector_icons::kGoogleGLogoIcon, kIconSize, gfx::kPlaceholderColor)); -#else - return nullptr; -#endif - } - - if (icon_str == "googlePasswordManager") { - return ImageViewFromVectorIcon(GooglePasswordManagerVectorIcon(), - kGooglePasswordManagerIconSize); - } - -#if !BUILDFLAG(GOOGLE_CHROME_BRANDING) - if (icon_str == "googlePay" || icon_str == "googlePayDark") { - return nullptr; - } -#endif - // For other suggestion entries, get icon from PNG files. - int icon_id = GetIconResourceID(icon_str); - DCHECK_NE(icon_id, 0); - return ImageViewFromImageSkia( - *ui::ResourceBundle::GetSharedInstance().GetImageSkiaNamed(icon_id)); -} - -std::unique_ptr<views::ImageView> GetIconImageView( - const Suggestion& suggestion) { - if (!suggestion.custom_icon.IsEmpty()) { - return ImageViewFromImageSkia(suggestion.custom_icon.AsImageSkia()); - } - - return GetIconImageViewByName(suggestion.icon); -} - -std::unique_ptr<views::ImageView> GetTrailingIconImageView( - const Suggestion& suggestion) { - return GetIconImageViewByName(suggestion.trailing_icon); -} - -// Creates a label for the suggestion's main text. -std::unique_ptr<views::Label> CreateMainTextLabel( - const Suggestion::Text& main_text, - int text_style) { - return std::make_unique<views::Label>( - main_text.value, views::style::CONTEXT_DIALOG_BODY_TEXT, - !main_text.is_primary ? views::style::STYLE_PRIMARY : text_style); -} - -// Creates a label for the suggestion's minor text. -std::unique_ptr<views::Label> CreateMinorTextLabel( - const Suggestion::Text& minor_text) { - return minor_text.value.empty() - ? nullptr - : std::make_unique<views::Label>( - minor_text.value, views::style::CONTEXT_DIALOG_BODY_TEXT, - views::style::STYLE_SECONDARY); -} - -// Adds a spacer with `spacer_width` to `view`. `layout` must be the -// LayoutManager of `view`. -void AddSpacerWithSize(views::View& view, - views::BoxLayout& layout, - int spacer_width, - bool resize) { - auto spacer = views::Builder<views::View>() - .SetPreferredSize(gfx::Size(spacer_width, 1)) - .Build(); - layout.SetFlexForView(view.AddChildView(std::move(spacer)), - /*flex=*/resize ? 1 : 0, - /*use_min_size=*/true); -} - -// Returns the padding for a content cell. -// -// For content cells that make up the entire Autofill popup row (i.e. there is -// no control element), the following reasoning applies: -// * If `kAutofillShowAutocompleteDeleteButton` is on, then there is padding -// with distance `DISTANCE_CONTENT_LIST_VERTICAL_SINGLE` between the edge of -// the Autofill popup row and the start of the content cell. -// * In addition, there is also padding inside the content cell. Together, these -// two paddings need to add up to `PopupBaseView::GetHorizontalMargin`, since -// to ensure that the content inside the content cell is aligned with the -// popup bubble's arrow. -// * Similarly, the right padding of the content cell needs to be adjusted. -// -// / \ -// / \ -// / \ -// / arrow \ -// ┌─────/ \────────────────────────┐ -// │ ┌──────────────────────────────────┐ │ -// │ │ ┌─────────┐ ┌────────────────┐ │ │ -// ├──┼──┤ │ │ │ │ │ -// ├──┤▲ │ Icon │ │ Text labels │ │ │ -// │▲ │| │ │ │ │ │ │ -// ││ ││ └─────────┘ └────────────────┘ │ │ -// ││ └┼─────────────────────────────────┘ │ -// └┼──┼────────────────────────────────────┘ -// │ │ -// │ PopupBaseView::GetHorizontalMargin() -// │ -// DISTANCE_CONTENT_LIST_VERTICAL_SINGLE -// -// If the popup row has a control element, then the adjustment does not need -// to be made for the right padding, since the right side of the content cell -// borders another cell and not the right padding area of the popup row. -gfx::Insets GetMarginsForContentCell(bool has_control_element) { - int left_margin = PopupBaseView::GetHorizontalMargin(); - int right_margin = left_margin; - - if (base::FeatureList::IsEnabled( - features::kAutofillShowAutocompleteDeleteButton)) { - // If the feature is enabled, then the row already adds some extra - // horizontal margin on the left - deduct that. - left_margin = std::max( - 0, left_margin - ChromeLayoutProvider::Get()->GetDistanceMetric( - DISTANCE_CONTENT_LIST_VERTICAL_SINGLE)); - - // If there is no control element, then this is the only cell and the same - // correction needs to be made on the right side, too. - if (!has_control_element) { - right_margin = left_margin; - } - } - return gfx::Insets::TLBR(0, left_margin, 0, right_margin); -} - -// Creates the table in which all the Autofill suggestion content apart from -// leading and trailing icons is contained and adds it to `content_view`. -// It registers `main_text_label`, `minor_text_label`, and `description_label` -// with `content_view` for tracking, but assumes that the labels inside of of -// `subtext_views` have already been registered for tracking with -// `content_view`. -void AddSuggestionContentTableToView( - std::unique_ptr<views::Label> main_text_label, - std::unique_ptr<views::Label> minor_text_label, - std::unique_ptr<views::Label> description_label, - std::vector<std::unique_ptr<views::View>> subtext_views, - PopupCellView& content_view) { - const int kDividerSpacing = ChromeLayoutProvider::Get()->GetDistanceMetric( - DISTANCE_RELATED_LABEL_HORIZONTAL_LIST); - auto content_table = - views::Builder<views::TableLayoutView>() - .AddColumn(views::LayoutAlignment::kStart, - views::LayoutAlignment::kStretch, - views::TableLayout::kFixedSize, - views::TableLayout::ColumnSize::kUsePreferred, 0, 0) - .AddPaddingColumn(views::TableLayout::kFixedSize, kDividerSpacing) - .AddColumn(views::LayoutAlignment::kStart, - views::LayoutAlignment::kStretch, - views::TableLayout::kFixedSize, - views::TableLayout::ColumnSize::kUsePreferred, 0, 0) - .Build(); - - // Major and minor text go into the first row, first column. - content_table->AddRows(1, 0); - if (minor_text_label) { - auto first_line_container = std::make_unique<views::View>(); - first_line_container - ->SetLayoutManager(std::make_unique<views::FlexLayout>()) - ->SetOrientation(views::LayoutOrientation::kHorizontal) - .SetMainAxisAlignment(views::LayoutAlignment::kStart) - .SetCrossAxisAlignment(views::LayoutAlignment::kCenter) - .SetIgnoreDefaultMainAxisMargins(true) - .SetCollapseMargins(true) - .SetDefault( - views::kMarginsKey, - gfx::Insets::VH(0, ChromeLayoutProvider::Get()->GetDistanceMetric( - DISTANCE_RELATED_LABEL_HORIZONTAL_LIST))); - - content_view.TrackLabel( - first_line_container->AddChildView(std::move(main_text_label))); - content_view.TrackLabel( - first_line_container->AddChildView(std::move(minor_text_label))); - content_table->AddChildView(std::move(first_line_container)); - } else { - content_view.TrackLabel( - content_table->AddChildView(std::move(main_text_label))); - } - - // The description goes into the first row, second column. - if (description_label) { - content_view.TrackLabel( - content_table->AddChildView(std::move(description_label))); - } else { - content_table->AddChildView(std::make_unique<views::View>()); - } - - // Every subtext label goes into an additional row. - for (std::unique_ptr<views::View>& subtext_view : subtext_views) { - content_table->AddPaddingRow(0, kAdjacentLabelsVerticalSpacing) - .AddRows(1, 0); - content_table->AddChildView(std::move(subtext_view)); - content_table->AddChildView(std::make_unique<views::View>()); - } - content_view.AddChildView(std::move(content_table)); -} - -// Creates the content structure shared by autocomplete, address, credit card, -// and password suggestions. -// - `minor_text_label`, `description_label`, and `subtext_labels` may all be -// null or empty. -// - `content_view` is the (assumed to be empty) view to which the content -// structure for the `suggestion` is added. -void AddSuggestionContentToView( - const Suggestion& suggestion, - std::unique_ptr<views::Label> main_text_label, - std::unique_ptr<views::Label> minor_text_label, - std::unique_ptr<views::Label> description_label, - std::vector<std::unique_ptr<views::View>> subtext_views, - PopupCellView& content_view) { - bool has_control_element = - suggestion.popup_item_id == PopupItemId::kAutocompleteEntry && - base::FeatureList::IsEnabled( - features::kAutofillShowAutocompleteDeleteButton); - views::BoxLayout& layout = - *content_view.SetLayoutManager(std::make_unique<views::BoxLayout>( - views::BoxLayout::Orientation::kHorizontal, - GetMarginsForContentCell(has_control_element))); - - layout.set_cross_axis_alignment( - views::BoxLayout::CrossAxisAlignment::kCenter); - - // Adjust the cell height based on the number of subtexts. - const int kStandardRowHeight = - views::MenuConfig::instance().touchable_menu_height; - const int kActualHeight = - kStandardRowHeight + - (subtext_views.empty() ? 0 : kAutofillPopupAdditionalDoubleRowHeight); - layout.set_minimum_cross_axis_size(kActualHeight); - - // If there are three rows in total, add extra padding to avoid cramming. - DCHECK_LE(subtext_views.size(), 2u); - if (subtext_views.size() == 2u) { - layout.set_inside_border_insets(gfx::Insets::VH( - kAutofillPopupAdditionalPadding, PopupBaseView::GetHorizontalMargin())); - } - - // The leading icon. - if (std::unique_ptr<views::ImageView> icon = GetIconImageView(suggestion)) { - content_view.AddChildView(std::move(icon)); - AddSpacerWithSize(content_view, layout, - PopupBaseView::GetHorizontalPadding(), - /*resize=*/false); - } - - // The actual content table. - AddSuggestionContentTableToView( - std::move(main_text_label), std::move(minor_text_label), - std::move(description_label), std::move(subtext_views), content_view); - - // The trailing icon. - if (std::unique_ptr<views::ImageView> trailing_icon = - GetTrailingIconImageView(suggestion)) { - AddSpacerWithSize(content_view, layout, - PopupBaseView::GetHorizontalPadding(), - /*resize=*/true); - content_view.AddChildView(std::move(trailing_icon)); - } - - // Force a refresh to ensure all the labels'styles are correct. - content_view.RefreshStyle(); -} - -// Returns the name of the network for payment method icons, empty string -// otherwise. -std::u16string GetIconAccessibleName(const std::string& icon_text) { - // Networks for which icons are currently shown. - if (icon_text == autofill::kAmericanExpressCard) { - return l10n_util::GetStringUTF16(IDS_AUTOFILL_CC_AMEX); - } - if (icon_text == autofill::kDinersCard) { - return l10n_util::GetStringUTF16(IDS_AUTOFILL_CC_DINERS); - } - if (icon_text == autofill::kDiscoverCard) { - return l10n_util::GetStringUTF16(IDS_AUTOFILL_CC_DISCOVER); - } - if (icon_text == autofill::kEloCard) { - return l10n_util::GetStringUTF16(IDS_AUTOFILL_CC_ELO); - } - if (icon_text == autofill::kJCBCard) { - return l10n_util::GetStringUTF16(IDS_AUTOFILL_CC_JCB); - } - if (icon_text == autofill::kMasterCard) { - return l10n_util::GetStringUTF16(IDS_AUTOFILL_CC_MASTERCARD); - } - if (icon_text == autofill::kMirCard) { - return l10n_util::GetStringUTF16(IDS_AUTOFILL_CC_MIR); - } - if (icon_text == autofill::kTroyCard) { - return l10n_util::GetStringUTF16(IDS_AUTOFILL_CC_TROY); - } - if (icon_text == autofill::kUnionPay) { - return l10n_util::GetStringUTF16(IDS_AUTOFILL_CC_UNION_PAY); - } - if (icon_text == autofill::kVisaCard) { - return l10n_util::GetStringUTF16(IDS_AUTOFILL_CC_VISA); - } - // Other networks. - if (icon_text == autofill::kGenericCard) { - return l10n_util::GetStringUTF16(IDS_AUTOFILL_CC_GENERIC); - } - return std::u16string(); -} - -std::u16string GetVoiceOverStringFromSuggestion(const Suggestion& suggestion) { - if (suggestion.voice_over) { - return *suggestion.voice_over; - } - - std::vector<std::u16string> text; - auto add_if_not_empty = [&text](std::u16string value) { - if (!value.empty()) { - text.push_back(std::move(value)); - } - }; - - add_if_not_empty(GetIconAccessibleName(suggestion.icon)); - text.push_back(suggestion.main_text.value); - add_if_not_empty(suggestion.minor_text.value); - - for (const std::vector<Suggestion::Text>& row : suggestion.labels) { - for (const Suggestion::Text& label : row) { - // `label_text` is not populated for footers or autocomplete entries. - add_if_not_empty(label.value); - } - } - - // `additional_label` is only populated in a passwords context. - add_if_not_empty(suggestion.additional_label); - - return base::JoinString(text, u" "); -} - -// Adds the callbacks for the content area to `content_view`. -void AddCallbacksToContentView( - base::WeakPtr<AutofillPopupController> controller, - int line_number, - PopupCellView& content_view) { - content_view.SetOnSelectedCallback(base::BindRepeating( - &AutofillPopupController::SelectSuggestion, controller, line_number)); - content_view.SetOnUnselectedCallback(base::BindRepeating( - &AutofillPopupController::SelectSuggestion, controller, absl::nullopt)); - content_view.SetOnAcceptedCallback(base::BindRepeating( - &AutofillPopupController::AcceptSuggestion, controller, line_number)); -} - // ********************* AccessibilityDelegate implementations ***************** // ********************* ContentItemAccessibilityDelegate ********************* @@ -538,7 +72,7 @@ int line_number) { DCHECK(controller); - voice_over_string_ = GetVoiceOverStringFromSuggestion( + voice_over_string_ = popup_cell_utils::GetVoiceOverStringFromSuggestion( controller->GetSuggestionAt(line_number)); set_size_ = 0; @@ -590,7 +124,7 @@ DCHECK(controller); voice_over_string_ = l10n_util::GetStringFUTF16( IDS_AUTOFILL_DELETE_AUTOCOMPLETE_SUGGESTION_A11Y_HINT, - GetVoiceOverStringFromSuggestion( + popup_cell_utils::GetVoiceOverStringFromSuggestion( controller->GetSuggestionAt(line_number))); } @@ -643,77 +177,26 @@ .Build(); // Add the actual views. - std::unique_ptr<views::Label> main_text_label = CreateMainTextLabel( - kSuggestion.main_text, views::style::TextStyle::STYLE_PRIMARY); - FormatLabel(*main_text_label, kSuggestion.main_text); - AddSuggestionContentToView(kSuggestion, std::move(main_text_label), - CreateMinorTextLabel(kSuggestion.minor_text), - /*description_label=*/nullptr, - CreateAndTrackSubtextViews(*view), *view); + std::unique_ptr<views::Label> main_text_label = + popup_cell_utils::CreateMainTextLabel( + kSuggestion.main_text, views::style::TextStyle::STYLE_PRIMARY); + popup_cell_utils::FormatLabel(*main_text_label, kSuggestion.main_text, + GetController()); + popup_cell_utils::AddSuggestionContentToView( + kSuggestion, std::move(main_text_label), + popup_cell_utils::CreateMinorTextLabel(kSuggestion.minor_text), + /*description_label=*/nullptr, + popup_cell_utils::CreateAndTrackSubtextViews(*view, GetController(), + GetLineNumber()), + *view); // Prepare the callbacks to the controller. - AddCallbacksToContentView(GetController(), GetLineNumber(), *view); + popup_cell_utils::AddCallbacksToContentView(GetController(), GetLineNumber(), + *view); return view; } -std::vector<std::unique_ptr<views::View>> -PopupSuggestionStrategy::CreateAndTrackSubtextViews( - PopupCellView& content_view) const { - std::vector<std::unique_ptr<views::View>> result; - const int kHorizontalSpacing = ChromeLayoutProvider::Get()->GetDistanceMetric( - DISTANCE_RELATED_LABEL_HORIZONTAL_LIST); - - for (const std::vector<Suggestion::Text>& label_row : - GetController()->GetSuggestionAt(GetLineNumber()).labels) { - DCHECK_LE(label_row.size(), 2u); - DCHECK(!label_row.empty()); - if (base::ranges::all_of(label_row, &std::u16string::empty, - &Suggestion::Text::value)) { - // If a row is empty, do not include any further rows. - return result; - } - - auto label_row_container_view = - views::Builder<views::BoxLayoutView>() - .SetOrientation(views::BoxLayout::Orientation::kHorizontal) - .SetBetweenChildSpacing(kHorizontalSpacing) - .Build(); - for (const Suggestion::Text& label_text : label_row) { - // If a column is empty, do not include any further columns. - if (label_text.value.empty()) { - break; - } - auto* label = - label_row_container_view->AddChildView(std::make_unique<views::Label>( - label_text.value, - ChromeTextContext::CONTEXT_DIALOG_BODY_TEXT_SMALL, - views::style::STYLE_SECONDARY)); - content_view.TrackLabel(label); - FormatLabel(*label, label_text); - } - result.push_back(std::move(label_row_container_view)); - } - - return result; -} - -void PopupSuggestionStrategy::FormatLabel(views::Label& label, - const Suggestion::Text& text) const { - if (GetPopupType() == PopupType::kAddresses) { - label.SetMaximumWidthSingleLine(kAutofillPopupAddressProfileMaxWidth); - } else if (GetPopupType() == PopupType::kCreditCards && - text.should_truncate.value()) { - // should_truncate should only be set to true iff the experiments are - // enabled. - DCHECK(base::FeatureList::IsEnabled( - autofill::features::kAutofillEnableVirtualCardMetadata)); - DCHECK(base::FeatureList::IsEnabled( - autofill::features::kAutofillEnableCardProductName)); - label.SetMaximumWidthSingleLine(kAutofillPopupCreditCardMaxWidth); - } -} - std::unique_ptr<PopupCellView> PopupSuggestionStrategy::CreateControl() { if (!GetController()) { return nullptr; @@ -734,8 +217,9 @@ view->SetLayoutManager(std::make_unique<views::BoxLayout>( views::BoxLayout::Orientation::kHorizontal, gfx::Insets::VH(0, kAutocompleteDeleteIconHorizontalPadding))); - views::ImageView* delete_icon = view->AddChildView( - ImageViewFromVectorIcon(kTrashCanLightIcon, kTrashCanLightIconSize)); + views::ImageView* delete_icon = + view->AddChildView(popup_cell_utils::ImageViewFromVectorIcon( + kTrashCanLightIcon, kTrashCanLightIconSize)); // The tooltip is set for both the cell and the image to ensure that it is // also shown over the padding area. delete_icon->SetTooltipText(l10n_util::GetStringUTF16( @@ -783,17 +267,19 @@ .Build(); // Add the actual views. - std::unique_ptr<views::Label> main_text_label = CreateMainTextLabel( - kSuggestion.main_text, views::style::TextStyle::STYLE_PRIMARY); + std::unique_ptr<views::Label> main_text_label = + popup_cell_utils::CreateMainTextLabel( + kSuggestion.main_text, views::style::TextStyle::STYLE_PRIMARY); main_text_label->SetMaximumWidthSingleLine(kAutofillPopupUsernameMaxWidth); - AddSuggestionContentToView(kSuggestion, std::move(main_text_label), - CreateMinorTextLabel(kSuggestion.minor_text), - CreateDescriptionLabel(), - CreateAndTrackSubtextViews(*view), *view); + popup_cell_utils::AddSuggestionContentToView( + kSuggestion, std::move(main_text_label), + popup_cell_utils::CreateMinorTextLabel(kSuggestion.minor_text), + CreateDescriptionLabel(), CreateAndTrackSubtextViews(*view), *view); // Prepare the callbacks to the controller. - AddCallbacksToContentView(GetController(), GetLineNumber(), *view); + popup_cell_utils::AddCallbacksToContentView(GetController(), GetLineNumber(), + *view); return view; } @@ -862,58 +348,63 @@ views::BoxLayout* layout_manager = view->SetLayoutManager(std::make_unique<views::BoxLayout>( views::BoxLayout::Orientation::kHorizontal, - GetMarginsForContentCell(/*has_control_element=*/false))); + popup_cell_utils::GetMarginsForContentCell( + /*has_control_element=*/false))); layout_manager->set_cross_axis_alignment( views::BoxLayout::CrossAxisAlignment::kCenter); - std::unique_ptr<views::ImageView> icon = GetIconImageView(kSuggestion); + std::unique_ptr<views::ImageView> icon = + popup_cell_utils::GetIconImageView(kSuggestion); const bool kUseLeadingIcon = base::Contains(kItemTypesUsingLeadingIcons, kSuggestion.popup_item_id); if (kSuggestion.is_loading) { view->AddChildView(std::make_unique<views::Throbber>())->Start(); - AddSpacerWithSize(*view, *layout_manager, - PopupBaseView::GetHorizontalPadding(), - /*resize=*/false); + popup_cell_utils::AddSpacerWithSize(*view, *layout_manager, + PopupBaseView::GetHorizontalPadding(), + /*resize=*/false); } else if (icon && kUseLeadingIcon) { view->AddChildView(std::move(icon)); - AddSpacerWithSize(*view, *layout_manager, - PopupBaseView::GetHorizontalPadding(), - /*resize=*/false); + popup_cell_utils::AddSpacerWithSize(*view, *layout_manager, + PopupBaseView::GetHorizontalPadding(), + /*resize=*/false); } layout_manager->set_minimum_cross_axis_size( views::MenuConfig::instance().touchable_menu_height); std::unique_ptr<views::Label> main_text_label = - CreateMainTextLabel(kSuggestion.main_text, views::style::STYLE_SECONDARY); + popup_cell_utils::CreateMainTextLabel(kSuggestion.main_text, + views::style::STYLE_SECONDARY); main_text_label->SetEnabled(!kSuggestion.is_loading); view->TrackLabel(view->AddChildView(std::move(main_text_label))); - AddSpacerWithSize(*view, *layout_manager, 0, /*resize=*/true); + popup_cell_utils::AddSpacerWithSize(*view, *layout_manager, 0, + /*resize=*/true); if (icon && !kUseLeadingIcon) { - AddSpacerWithSize(*view, *layout_manager, - PopupBaseView::GetHorizontalPadding(), - /*resize=*/false); + popup_cell_utils::AddSpacerWithSize(*view, *layout_manager, + PopupBaseView::GetHorizontalPadding(), + /*resize=*/false); view->AddChildView(std::move(icon)); } std::unique_ptr<views::ImageView> trailing_icon = - GetTrailingIconImageView(kSuggestion); + popup_cell_utils::GetTrailingIconImageView(kSuggestion); if (trailing_icon) { - AddSpacerWithSize(*view, *layout_manager, - PopupBaseView::GetHorizontalPadding(), - /*resize=*/true); + popup_cell_utils::AddSpacerWithSize(*view, *layout_manager, + PopupBaseView::GetHorizontalPadding(), + /*resize=*/true); view->AddChildView(std::move(trailing_icon)); } // Force a refresh to ensure all the labels'styles are correct. view->RefreshStyle(); - AddCallbacksToContentView(GetController(), GetLineNumber(), *view); + popup_cell_utils::AddCallbacksToContentView(GetController(), GetLineNumber(), + *view); return view; }
diff --git a/chrome/browser/ui/views/chrome_typography.cc b/chrome/browser/ui/views/chrome_typography.cc index 37e06c6..8a49741 100644 --- a/chrome/browser/ui/views/chrome_typography.cc +++ b/chrome/browser/ui/views/chrome_typography.cc
@@ -17,8 +17,8 @@ int GetFontSizeDeltaBoundedByAvailableHeight(int available_height, int desired_font_size) { - int size_delta = - GetFontSizeDeltaIgnoringUserOrLocaleSettings(desired_font_size); + int size_delta = views::style::GetFontSizeDeltaIgnoringUserOrLocaleSettings( + desired_font_size); ui::ResourceBundle& bundle = ui::ResourceBundle::GetSharedInstance(); gfx::FontList base_font = bundle.GetFontListWithDelta(size_delta); @@ -33,28 +33,6 @@ user_or_locale_delta; } -int GetFontSizeDeltaIgnoringUserOrLocaleSettings(int desired_font_size) { - int size_delta = desired_font_size - gfx::PlatformFont::kDefaultBaseFontSize; - ui::ResourceBundle& bundle = ui::ResourceBundle::GetSharedInstance(); - gfx::FontList base_font = bundle.GetFontListWithDelta(size_delta); - - // The ResourceBundle's default font may not actually be kDefaultBaseFontSize - // if, for example, the user has changed their system font sizes or the - // current locale has been overridden to use a different default font size. - // Adjust for the difference in default font sizes. - int user_or_locale_delta = 0; - if (base_font.GetFontSize() != desired_font_size) { - user_or_locale_delta = desired_font_size - base_font.GetFontSize(); - base_font = bundle.GetFontListWithDelta(size_delta + user_or_locale_delta); - } - DCHECK_EQ(desired_font_size, base_font.GetFontSize()); - - // To ensure a subsequent request from the ResourceBundle ignores the delta - // due to user or locale settings, include it here. - return base_font.GetFontSize() - gfx::PlatformFont::kDefaultBaseFontSize + - user_or_locale_delta; -} - void ApplyCommonFontStyles(int context, int style, ui::ResourceBundle::FontDetails& details) { @@ -70,7 +48,8 @@ break; } case CONTEXT_TAB_COUNTER: { - details.size_delta = GetFontSizeDeltaIgnoringUserOrLocaleSettings(14); + details.size_delta = + views::style::GetFontSizeDeltaIgnoringUserOrLocaleSettings(14); details.weight = gfx::Font::Weight::BOLD; break; } @@ -119,16 +98,19 @@ break; #endif case CONTEXT_IPH_BUBBLE_TITLE: - details.size_delta = GetFontSizeDeltaIgnoringUserOrLocaleSettings(18); + details.size_delta = + views::style::GetFontSizeDeltaIgnoringUserOrLocaleSettings(18); if (base::FeatureList::IsEnabled(features::kChromeRefresh2023)) { details.weight = gfx::Font::Weight::MEDIUM; } break; case CONTEXT_IPH_BUBBLE_BODY: - details.size_delta = GetFontSizeDeltaIgnoringUserOrLocaleSettings(14); + details.size_delta = + views::style::GetFontSizeDeltaIgnoringUserOrLocaleSettings(14); break; case CONTEXT_SIDE_PANEL_TITLE: - details.size_delta = GetFontSizeDeltaIgnoringUserOrLocaleSettings(13); + details.size_delta = + views::style::GetFontSizeDeltaIgnoringUserOrLocaleSettings(13); break; } }
diff --git a/chrome/browser/ui/views/chrome_typography_provider.cc b/chrome/browser/ui/views/chrome_typography_provider.cc index 4f1c63fe..3b2b36b 100644 --- a/chrome/browser/ui/views/chrome_typography_provider.cc +++ b/chrome/browser/ui/views/chrome_typography_provider.cc
@@ -44,6 +44,13 @@ << "context: " << context << " style: " << style; ui::ResourceBundle::FontDetails details; + + if (style > views::style::STYLE_OVERRIDE_TYPOGRAPHY_START && + style < views::style::STYLE_OVERRIDE_TYPOGRAPHY_END) { + details = TypographyProvider::GetFontDetails(context, style); + return details; + } + details.size_delta = kDefaultSize - gfx::PlatformFont::kDefaultBaseFontSize; #if BUILDFLAG(IS_CHROMEOS_ASH)
diff --git a/chrome/browser/ui/views/extensions/extension_action_test_helper_mac.mm b/chrome/browser/ui/views/extensions/extension_action_test_helper_mac.mm index 9861b22..96ed42e 100644 --- a/chrome/browser/ui/views/extensions/extension_action_test_helper_mac.mm +++ b/chrome/browser/ui/views/extensions/extension_action_test_helper_mac.mm
@@ -6,22 +6,26 @@ #include <AppKit/AppKit.h> -#import "base/mac/scoped_nsobject.h" #import "ui/base/test/windowed_nsnotification_observer.h" +#if !defined(__has_feature) || !__has_feature(objc_arc) +#error "This file requires ARC support." +#endif + bool ExtensionActionTestHelper::WaitForPopup() { - NSWindow* window = [GetPopupNativeView().GetNativeNSView() window]; + NSWindow* window = GetPopupNativeView().GetNativeNSView().window; if (!window) return false; - if ([window isKeyWindow]) + if (window.keyWindow) { return true; + } - base::scoped_nsobject<WindowedNSNotificationObserver> waiter( + WindowedNSNotificationObserver* waiter = [[WindowedNSNotificationObserver alloc] initForNotification:NSWindowDidBecomeKeyNotification - object:window]); + object:window]; BOOL notification_observed = [waiter wait]; - return notification_observed && [window isKeyWindow]; + return notification_observed && window.keyWindow; }
diff --git a/chrome/browser/ui/views/side_panel/search_companion/companion_side_panel_controller_utils.cc b/chrome/browser/ui/views/side_panel/search_companion/companion_side_panel_controller_utils.cc index a20fb78..4e5482c 100644 --- a/chrome/browser/ui/views/side_panel/search_companion/companion_side_panel_controller_utils.cc +++ b/chrome/browser/ui/views/side_panel/search_companion/companion_side_panel_controller_utils.cc
@@ -20,8 +20,7 @@ auto* browser_window = BrowserWindow::FindBrowserWindowWithWebContents(web_contents); auto* browser_view = static_cast<BrowserView*>(browser_window); - CHECK(browser_view); - return browser_view->browser(); + return browser_view ? browser_view->browser() : nullptr; } } // namespace companion
diff --git a/chrome/browser/ui/webui/management/management_ui_handler_unittest.cc b/chrome/browser/ui/webui/management/management_ui_handler_unittest.cc index 4202a44..2618ff5 100644 --- a/chrome/browser/ui/webui/management/management_ui_handler_unittest.cc +++ b/chrome/browser/ui/webui/management/management_ui_handler_unittest.cc
@@ -19,9 +19,8 @@ #include "base/task/single_thread_task_runner.h" #include "base/values.h" #include "build/chromeos_buildflags.h" -#include "chrome/browser/enterprise/connectors/test/deep_scanning_test_utils.h" #include "chrome/browser/policy/dm_token_utils.h" -#include "chrome/browser/ui/webui/management/management_ui_handler.h" +#include "chrome/browser/safe_browsing/cloud_content_scanning/deep_scanning_test_utils.h" #include "chrome/common/pref_names.h" #include "chrome/test/base/testing_profile.h" #include "chromeos/ash/components/settings/cros_settings_names.h" @@ -1496,25 +1495,25 @@ // When policies are set to values that enable the feature without a usable DM // token, nothing to report. policy::SetDMTokenForTesting(policy::DMToken::CreateInvalidToken()); - enterprise_connectors::test::SetAnalysisConnector( - profile_no_domain->GetPrefs(), enterprise_connectors::FILE_ATTACHED, - "[{\"service_provider\":\"google\"}]"); - enterprise_connectors::test::SetAnalysisConnector( - profile_no_domain->GetPrefs(), enterprise_connectors::FILE_DOWNLOADED, - "[{\"service_provider\":\"google\"}]"); - enterprise_connectors::test::SetAnalysisConnector( - profile_no_domain->GetPrefs(), enterprise_connectors::BULK_DATA_ENTRY, - "[{\"service_provider\":\"google\"}]"); - enterprise_connectors::test::SetAnalysisConnector( - profile_no_domain->GetPrefs(), enterprise_connectors::PRINT, - "[{\"service_provider\":\"google\"}]"); + safe_browsing::SetAnalysisConnector(profile_no_domain->GetPrefs(), + enterprise_connectors::FILE_ATTACHED, + "[{\"service_provider\":\"google\"}]"); + safe_browsing::SetAnalysisConnector(profile_no_domain->GetPrefs(), + enterprise_connectors::FILE_DOWNLOADED, + "[{\"service_provider\":\"google\"}]"); + safe_browsing::SetAnalysisConnector(profile_no_domain->GetPrefs(), + enterprise_connectors::BULK_DATA_ENTRY, + "[{\"service_provider\":\"google\"}]"); + safe_browsing::SetAnalysisConnector(profile_no_domain->GetPrefs(), + enterprise_connectors::PRINT, + "[{\"service_provider\":\"google\"}]"); #if BUILDFLAG(IS_CHROMEOS) - enterprise_connectors::test::SetAnalysisConnector( - profile_no_domain->GetPrefs(), enterprise_connectors::FILE_TRANSFER, - "[{\"service_provider\":\"google\"}]"); + safe_browsing::SetAnalysisConnector(profile_no_domain->GetPrefs(), + enterprise_connectors::FILE_TRANSFER, + "[{\"service_provider\":\"google\"}]"); #endif - enterprise_connectors::test::SetOnSecurityEventReporting( - profile_no_domain->GetPrefs(), true); + safe_browsing::SetOnSecurityEventReporting(profile_no_domain->GetPrefs(), + true); profile_no_domain->GetPrefs()->SetInteger( prefs::kSafeBrowsingEnterpriseRealTimeUrlCheckMode, 1); profile_no_domain->GetPrefs()->SetInteger(
diff --git a/chrome/browser/ui/webui/print_preview/print_preview_handler_unittest.cc b/chrome/browser/ui/webui/print_preview/print_preview_handler_unittest.cc index 58ea319..3c6bebc 100644 --- a/chrome/browser/ui/webui/print_preview/print_preview_handler_unittest.cc +++ b/chrome/browser/ui/webui/print_preview/print_preview_handler_unittest.cc
@@ -50,10 +50,10 @@ #include "third_party/abseil-cpp/absl/types/optional.h" #if BUILDFLAG(ENABLE_PRINT_CONTENT_ANALYSIS) +#include "chrome/browser/enterprise/connectors/analysis/fake_content_analysis_delegate.h" #include "chrome/browser/enterprise/connectors/common.h" -#include "chrome/browser/enterprise/connectors/test/deep_scanning_test_utils.h" -#include "chrome/browser/enterprise/connectors/test/fake_content_analysis_delegate.h" #include "chrome/browser/policy/dm_token_utils.h" +#include "chrome/browser/safe_browsing/cloud_content_scanning/deep_scanning_test_utils.h" #if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_LINUX) #include "chrome/browser/enterprise/connectors/analysis/fake_content_analysis_sdk_manager.h" //nogncheck @@ -1557,7 +1557,7 @@ void SetUp() override { enterprise_connectors::ContentAnalysisDelegate::SetFactoryForTesting( base::BindRepeating( - &enterprise_connectors::test::FakeContentAnalysisDelegate::Create, + &enterprise_connectors::FakeContentAnalysisDelegate::Create, run_loop_.QuitClosure(), base::BindRepeating( &ContentAnalysisPrintPreviewHandlerTest::ScanningResponse, @@ -1568,7 +1568,7 @@ PrintPreviewHandlerTest::SetUp(); // Set the policy that enables local content analysis for print. - enterprise_connectors::test::SetAnalysisConnector( + safe_browsing::SetAnalysisConnector( profile()->GetPrefs(), enterprise_connectors::AnalysisConnector::PRINT, R"({ "service_provider": "local_system_agent",
diff --git a/chrome/browser/ui/webui/settings/chromeos/constants/routes.mojom b/chrome/browser/ui/webui/settings/chromeos/constants/routes.mojom index 6cc3ff7..bd6ad44 100644 --- a/chrome/browser/ui/webui/settings/chromeos/constants/routes.mojom +++ b/chrome/browser/ui/webui/settings/chromeos/constants/routes.mojom
@@ -4,9 +4,10 @@ module chromeos.settings.mojom; -// Chrome OS Settings sections (i.e., top-level navigation items). Each section -// has a corresponding path string listed below. Numerical values are used for -// metrics; do not change or reuse values. +// ChromeOS Settings sections (i.e., top-level pages & their navigation items). +// Each section has a corresponding path string listed below. Numerical values +// are used for metrics. +// DO NOT change or reuse values. enum Section { kNetwork = 0, kBluetooth = 1, @@ -321,25 +322,3 @@ // Kerberos section. const string kKerberosSectionPath = "kerberos"; const string kKerberosAccountsV2SubpagePath = "kerberos/kerberosAccounts"; - -// The properties should match the top-level section paths defined above -// Keep alphabetized -struct OsPageAvailability { - bool apps; - bool bluetooth; - bool crostini; - bool dateTime; - bool device; - bool files; - bool internet; - bool kerberos; - bool multidevice; - bool osAccessibility; - bool osLanguages; - bool osPeople; - bool osPrinting; - bool osPrivacy; - bool osReset; - bool osSearch; - bool personalization; -};
diff --git a/chrome/browser/ui/webui/side_panel/companion/companion_page_handler.cc b/chrome/browser/ui/webui/side_panel/companion/companion_page_handler.cc index c4e0ac7..068502d26 100644 --- a/chrome/browser/ui/webui/side_panel/companion/companion_page_handler.cc +++ b/chrome/browser/ui/webui/side_panel/companion/companion_page_handler.cc
@@ -160,6 +160,11 @@ // Calls to the browser need to happen after the ShowUI() call above since // it is only added to browser hierarchy after the side panel has loaded the // page. + auto* browser = GetBrowser(); + if (!browser) { + return; + } + auto* active_web_contents = GetBrowser()->tab_strip_model()->GetActiveWebContents(); Observe(active_web_contents);
diff --git a/chrome/browser/ui/webui/side_panel/companion/signin_delegate_impl.cc b/chrome/browser/ui/webui/side_panel/companion/signin_delegate_impl.cc index 40b493c..0ff3dbe3 100644 --- a/chrome/browser/ui/webui/side_panel/companion/signin_delegate_impl.cc +++ b/chrome/browser/ui/webui/side_panel/companion/signin_delegate_impl.cc
@@ -77,13 +77,17 @@ } void SigninDelegateImpl::OpenUrlInBrowser(const GURL& url, bool use_new_tab) { + auto* browser = companion::GetBrowserForWebContents(webui_contents_); + if (!browser) { + return; + } + content::OpenURLParams params(url, content::Referrer(), use_new_tab ? WindowOpenDisposition::NEW_FOREGROUND_TAB : WindowOpenDisposition::CURRENT_TAB, ui::PAGE_TRANSITION_AUTO_TOPLEVEL, /*is_renderer_initiated*/ false); - auto* browser = companion::GetBrowserForWebContents(webui_contents_); browser->OpenURL(params); }
diff --git a/chrome/build/mac-arm.pgo.txt b/chrome/build/mac-arm.pgo.txt index 9453079..432bf3c 100644 --- a/chrome/build/mac-arm.pgo.txt +++ b/chrome/build/mac-arm.pgo.txt
@@ -1 +1 @@ -chrome-mac-arm-main-1686751181-b090ec8fcf0029d366528dd7a1aca48ad0cc3ce7.profdata +chrome-mac-arm-main-1686758346-f228fc14950ae53b74df10aa18d8075891994471.profdata
diff --git a/chrome/build/win64.pgo.txt b/chrome/build/win64.pgo.txt index e8e8c9d..8161f11 100644 --- a/chrome/build/win64.pgo.txt +++ b/chrome/build/win64.pgo.txt
@@ -1 +1 @@ -chrome-win64-main-1686743662-1cdc8d15119eba6f66cff7bf15709d8d1f07439a.profdata +chrome-win64-main-1686754776-64fec57127d4e24f1e31fe0b507d059b06d1ce09.profdata
diff --git a/chrome/renderer/accessibility/read_anything_app_model.cc b/chrome/renderer/accessibility/read_anything_app_model.cc index ea9a3ce..02a674f6 100644 --- a/chrome/renderer/accessibility/read_anything_app_model.cc +++ b/chrome/renderer/accessibility/read_anything_app_model.cc
@@ -8,14 +8,26 @@ #include "base/containers/contains.h" #include "base/metrics/histogram_functions.h" +#include "content/public/renderer/render_thread.h" +#include "services/metrics/public/cpp/mojo_ukm_recorder.h" +#include "services/metrics/public/cpp/ukm_builders.h" #include "ui/accessibility/ax_enums.mojom-shared.h" #include "ui/accessibility/ax_node.h" #include "ui/accessibility/ax_role_properties.h" #include "ui/accessibility/ax_serializable_tree.h" #include "ui/accessibility/ax_tree_update_util.h" -ReadAnythingAppModel::ReadAnythingAppModel() = default; -ReadAnythingAppModel::~ReadAnythingAppModel() = default; +ReadAnythingAppModel::ReadAnythingAppModel() { + // TODO(crbug.com/1450930): Use a global ukm recorder instance instead. + mojo::Remote<ukm::mojom::UkmRecorderFactory> factory; + content::RenderThread::Get()->BindHostReceiver( + factory.BindNewPipeAndPassReceiver()); + ukm_recorder_ = ukm::MojoUkmRecorder::Create(*factory); +} + +ReadAnythingAppModel::~ReadAnythingAppModel() { + SetActiveUkmSourceId(ukm::kInvalidSourceId); +} void ReadAnythingAppModel::OnThemeChanged( read_anything::mojom::ReadAnythingThemePtr new_theme) { @@ -81,6 +93,7 @@ base::UmaHistogramEnumeration( string_constants::kEmptyStateHistogramName, ReadAnythingEmptyState::kSelectionAfterEmptyStateShown); + num_selections_++; } // If the main panel selection contains content outside of the distilled @@ -408,6 +421,19 @@ EraseTree(tree_id); } +void ReadAnythingAppModel::SetActiveUkmSourceId(ukm::SourceId source_id) { + // Record the number of selections made on the current page if it was not + // distillable. + if (active_ukm_source_id_ != ukm::kInvalidSourceId && + content_node_ids_.empty()) { + ukm::builders::Accessibility_ReadAnything_EmptyState(active_ukm_source_id_) + .SetTotalNumSelections(num_selections_) + .Record(ukm_recorder_.get()); + } + num_selections_ = 0; + active_ukm_source_id_ = source_id; +} + ui::AXNode* ReadAnythingAppModel::GetAXNode(ui::AXNodeID ax_node_id) const { ui::AXSerializableTree* tree = GetTreeFromId(active_tree_id_).get(); return tree->GetFromId(ax_node_id);
diff --git a/chrome/renderer/accessibility/read_anything_app_model.h b/chrome/renderer/accessibility/read_anything_app_model.h index ae8212e..a21d775b 100644 --- a/chrome/renderer/accessibility/read_anything_app_model.h +++ b/chrome/renderer/accessibility/read_anything_app_model.h
@@ -18,6 +18,10 @@ class AXSerializableTree; } // namespace ui +namespace ukm { +class MojoUkmRecorder; +} + // A class that holds state for the ReadAnythingAppController for the Read // Anything WebUI app. class ReadAnythingAppModel { @@ -81,9 +85,7 @@ void SetActiveTreeSelectable(bool active_tree_selectable) { active_tree_selectable_ = active_tree_selectable; } - void SetActiveUkmSourceId(ukm::SourceId source_id) { - active_ukm_source_id_ = source_id; - } + void SetActiveUkmSourceId(ukm::SourceId source_id); void SetActiveTreeId(ui::AXTreeID tree_id) { active_tree_id_ = tree_id; } @@ -218,6 +220,13 @@ bool requires_distillation_ = false; bool requires_post_process_selection_ = false; bool selection_from_action_ = false; + + std::unique_ptr<ukm::MojoUkmRecorder> ukm_recorder_; + + // Used to keep track of how many selections were made for the + // active_ukm_source_id_. Only recorded during the select-to-distill flow + // (when the empty state page is shown). + int32_t num_selections_ = 0; }; #endif // CHROME_RENDERER_ACCESSIBILITY_READ_ANYTHING_APP_MODEL_H_
diff --git a/chrome/test/BUILD.gn b/chrome/test/BUILD.gn index a45aa0a..061c2128 100644 --- a/chrome/test/BUILD.gn +++ b/chrome/test/BUILD.gn
@@ -518,6 +518,8 @@ "../browser/renderer_context_menu/mock_render_view_context_menu.h", "../browser/renderer_context_menu/render_view_context_menu_test_util.cc", "../browser/renderer_context_menu/render_view_context_menu_test_util.h", + "../browser/safe_browsing/cloud_content_scanning/deep_scanning_test_utils.cc", + "../browser/safe_browsing/cloud_content_scanning/deep_scanning_test_utils.h", "../browser/signin/signin_browser_test_base.h", "../browser/themes/test/theme_service_changed_waiter.cc", "../browser/themes/test/theme_service_changed_waiter.h", @@ -1526,6 +1528,7 @@ "//components/privacy_sandbox", "//components/privacy_sandbox:privacy_sandbox_prefs", "//components/privacy_sandbox:test_support", + "//components/privacy_sandbox/privacy_sandbox_attestations", "//components/proxy_config", "//components/reading_list/core", "//components/reading_list/features:flags", @@ -1901,6 +1904,8 @@ "../browser/download/save_page_browsertest.cc", "../browser/engagement/site_engagement_helper_browsertest.cc", "../browser/enterprise/browser_management/management_service_browsertest.cc", + "../browser/enterprise/connectors/analysis/content_analysis_dialog_browsertest.cc", + "../browser/enterprise/connectors/connectors_service_browsertest.cc", "../browser/enterprise/connectors/reporting/crash_reporting_context_browsertest.cc", "../browser/enterprise/reporting/report_scheduler_browsertest.cc", "../browser/enterprise/util/managed_browser_utils_browsertest.cc", @@ -2166,6 +2171,8 @@ "../browser/resource_coordinator/tab_helper_browsertest.cc", "../browser/resource_coordinator/tab_manager_browsertest.cc", "../browser/safe_browsing/client_side_detection_service_browsertest.cc", + "../browser/safe_browsing/cloud_content_scanning/deep_scanning_browsertest_base.cc", + "../browser/safe_browsing/cloud_content_scanning/deep_scanning_browsertest_base.h", "../browser/safe_browsing/download_protection/download_protection_service_browsertest.cc", "../browser/safe_browsing/test_safe_browsing_database_helper.cc", "../browser/safe_browsing/test_safe_browsing_database_helper.h", @@ -2533,6 +2540,10 @@ if (!is_chromeos_lacros) { sources += [ + # crbug.com/1230268 These tests need to be fixed for Lacros. + "../browser/enterprise/connectors/analysis/content_analysis_delegate_browsertest.cc", + "../browser/safe_browsing/download_protection/deep_scanning_browsertest.cc", + # Lacros does not seem to have any actual WebView-based UI to test. "../browser/accessibility/live_translate_controller_browsertest.cc", "../browser/ui/webui/webui_webview_browsertest.cc", @@ -2559,16 +2570,6 @@ "../browser/accessibility/live_caption/live_caption_speech_recognition_host_browsertest.cc", ] } - - # TODO(b/283093731): Replace the platforms below with a condition for - # cloud content analysis. - if (is_win || is_linux || is_mac || is_chromeos) { - sources += [ - # crbug.com/1230268 These tests need to be fixed for Lacros. - "../browser/enterprise/connectors/analysis/content_analysis_delegate_browsertest.cc", - "../browser/safe_browsing/download_protection/deep_scanning_browsertest.cc", - ] - } } if (is_win) { @@ -3095,6 +3096,8 @@ "../browser/extensions/api/desktop_capture/desktop_capture_apitest.cc", "../browser/extensions/api/developer_private/developer_private_apitest.cc", "../browser/extensions/api/downloads/downloads_api_browsertest.cc", + "../browser/extensions/api/enterprise_reporting_private/enterprise_reporting_private_apitest.cc", + "../browser/extensions/api/enterprise_reporting_private/enterprise_reporting_private_browsertest.cc", "../browser/extensions/api/extension_action/browser_action_apitest.cc", "../browser/extensions/api/extension_action/browser_action_browsertest.cc", "../browser/extensions/api/extension_action/extension_action_apitest.cc", @@ -3344,17 +3347,6 @@ ] } - # TODO(b/283093731): Replace the platforms below with a condition for - # cloud content analysis. - if (is_win || is_linux || is_mac || is_chromeos) { - sources += [ - "../browser/enterprise/connectors/analysis/content_analysis_dialog_browsertest.cc", - "../browser/enterprise/connectors/connectors_service_browsertest.cc", - "../browser/extensions/api/enterprise_reporting_private/enterprise_reporting_private_apitest.cc", - "../browser/extensions/api/enterprise_reporting_private/enterprise_reporting_private_browsertest.cc", - ] - deps += [ "//chrome/browser/enterprise/connectors/test:test_support" ] - } if (is_win || is_linux || is_mac || is_chromeos_ash) { sources += [ "../browser/enterprise/connectors/device_trust/device_trust_browsertest.cc" ] @@ -3363,6 +3355,7 @@ "//chrome/browser/enterprise/connectors/device_trust:prefs", "//chrome/browser/enterprise/connectors/device_trust/common", "//chrome/browser/enterprise/connectors/device_trust/test:test_support", + "//chrome/browser/enterprise/connectors/test:test_support", "//components/device_signals/core/common", "//components/device_signals/core/common:features", "//components/device_signals/test:test_support", @@ -8799,12 +8792,7 @@ "../common/safe_browsing/ipc_protobuf_message_test_messages.h", "../common/safe_browsing/ipc_protobuf_message_unittest.cc", ] - deps += [ - # TODO(b/283093731): Replace the dependency below to a more specific - # condition for cloud content analysis. - "../browser/enterprise/connectors/test:test_support", - "../common/safe_browsing:archive_analyzer_results", - ] + deps += [ "../common/safe_browsing:archive_analyzer_results" ] if (is_mac) { sources += [ "../browser/safe_browsing/incident_reporting/binary_integrity_analyzer_mac_unittest.cc",
diff --git a/chrome/test/data/autofill/form_hidden_selectmenu.html b/chrome/test/data/autofill/form_hidden_selectmenu.html new file mode 100644 index 0000000..bc48242 --- /dev/null +++ b/chrome/test/data/autofill/form_hidden_selectmenu.html
@@ -0,0 +1,13 @@ +<!-- A page that is used to test that filling <select> works properly if the <select> is hidden. --> +<body> + <form name="addr1.1" id="form1" action="https://example.com/" method="post"> + Name: <input type="text" name="firstname" id="firstname" autocomplete="given-name"><br> + Address: <input type="text" name="address1" id="address1"><br> + City: <input type="text" name="city" id="city"><br> + State: <selectmenu name="state" id="state" style="display:none"> + <option value="MI">MI</option> + <option value="NY">NY</option> + <option value="TX">TX</option> + </selectmenu> + </form> +</body>
diff --git a/chrome/test/data/webui/settings/chromeos/kerberos_page/kerberos_accounts_subpage_test.ts b/chrome/test/data/webui/settings/chromeos/kerberos_page/kerberos_accounts_subpage_test.ts index 4d3d145..5b29d11 100644 --- a/chrome/test/data/webui/settings/chromeos/kerberos_page/kerberos_accounts_subpage_test.ts +++ b/chrome/test/data/webui/settings/chromeos/kerberos_page/kerberos_accounts_subpage_test.ts
@@ -5,7 +5,7 @@ import 'chrome://os-settings/lazy_load.js'; import {KerberosAccountsBrowserProxyImpl, SettingsKerberosAccountsSubpageElement} from 'chrome://os-settings/lazy_load.js'; -import {Route, Router, routes} from 'chrome://os-settings/os_settings.js'; +import {createSectionForTesting, createSubpageForTesting, Router, routes, routesMojom} from 'chrome://os-settings/os_settings.js'; import {CrButtonElement} from 'chrome://resources/cr_elements/cr_button/cr_button.js'; import {CrToastElement} from 'chrome://resources/cr_elements/cr_toast/cr_toast.js'; import {webUIListenerCallback} from 'chrome://resources/js/cr.js'; @@ -30,20 +30,21 @@ REMOVE_ACCOUNT: 2, }; - setup(() => { - routes.BASIC = new Route('/'), - routes.KERBEROS = routes.BASIC.createSection('/kerberos', 'kerberos'); - routes.KERBEROS_ACCOUNTS_V2 = - routes.KERBEROS.createChild('/kerberos/kerberosAccounts'); + suiteSetup(() => { + routes.KERBEROS = createSectionForTesting( + routes.BASIC, routesMojom.KERBEROS_SECTION_PATH, + routesMojom.Section.kKerberos); + routes.KERBEROS_ACCOUNTS_V2 = createSubpageForTesting( + routes.KERBEROS, routesMojom.KERBEROS_ACCOUNTS_V2_SUBPAGE_PATH, + routesMojom.Subpage.kKerberosAccountsV2); Router.resetInstanceForTesting(new Router(routes)); + }); + setup(() => { browserProxy = new TestKerberosAccountsBrowserProxy(); KerberosAccountsBrowserProxyImpl.setInstanceForTesting(browserProxy); - // Setting the default value of the relevant load time data. - loadTimeData.overrideValues({kerberosAddAccountsAllowed: true}); - createDialog(); });
diff --git a/chrome/test/data/webui/settings/chromeos/kerberos_page/kerberos_page_test.ts b/chrome/test/data/webui/settings/chromeos/kerberos_page/kerberos_page_test.ts index 5cd43be..a509e47 100644 --- a/chrome/test/data/webui/settings/chromeos/kerberos_page/kerberos_page_test.ts +++ b/chrome/test/data/webui/settings/chromeos/kerberos_page/kerberos_page_test.ts
@@ -5,7 +5,7 @@ import 'chrome://os-settings/os_settings.js'; import {KerberosAccountsBrowserProxyImpl} from 'chrome://os-settings/lazy_load.js'; -import {Route, Router, routes, SettingsKerberosPageElement} from 'chrome://os-settings/os_settings.js'; +import {createSectionForTesting, createSubpageForTesting, Router, routes, routesMojom, SettingsKerberosPageElement} from 'chrome://os-settings/os_settings.js'; import {assert} from 'chrome://resources/js/assert_ts.js'; import {flush} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js'; import {assertEquals, assertFalse} from 'chrome://webui-test/chai_assert.js'; @@ -16,14 +16,18 @@ let kerberosPage: SettingsKerberosPageElement; let browserProxy: TestKerberosAccountsBrowserProxy; - setup(() => { - routes.BASIC = new Route('/'), - routes.KERBEROS = routes.BASIC.createSection('/kerberos', 'kerberos'); - routes.KERBEROS_ACCOUNTS_V2 = - routes.KERBEROS.createChild('/kerberos/kerberosAccounts'); + suiteSetup(() => { + routes.KERBEROS = createSectionForTesting( + routes.BASIC, routesMojom.KERBEROS_SECTION_PATH, + routesMojom.Section.kKerberos); + routes.KERBEROS_ACCOUNTS_V2 = createSubpageForTesting( + routes.KERBEROS, routesMojom.KERBEROS_ACCOUNTS_V2_SUBPAGE_PATH, + routesMojom.Subpage.kKerberosAccountsV2); Router.resetInstanceForTesting(new Router(routes)); + }); + setup(() => { browserProxy = new TestKerberosAccountsBrowserProxy(); KerberosAccountsBrowserProxyImpl.setInstanceForTesting(browserProxy); });
diff --git a/chrome/test/data/webui/settings/chromeos/main_page_container_test.js b/chrome/test/data/webui/settings/chromeos/main_page_container_test.js index 97cb719..5f94da7 100644 --- a/chrome/test/data/webui/settings/chromeos/main_page_container_test.js +++ b/chrome/test/data/webui/settings/chromeos/main_page_container_test.js
@@ -4,7 +4,7 @@ import 'chrome://os-settings/lazy_load.js'; -import {createPageAvailabilityForTesting, CrSettingsPrefs, Router, routes, setContactManagerForTesting, setNearbyShareSettingsForTesting} from 'chrome://os-settings/os_settings.js'; +import {createPageAvailabilityForTesting, CrSettingsPrefs, Router, routes, routesMojom, setContactManagerForTesting, setNearbyShareSettingsForTesting} from 'chrome://os-settings/os_settings.js'; import {setBluetoothConfigForTesting} from 'chrome://resources/ash/common/bluetooth/cros_bluetooth_config.js'; import {loadTimeData} from 'chrome://resources/js/load_time_data.js'; import {flush} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js'; @@ -14,6 +14,8 @@ import {FakeNearbyShareSettings} from 'chrome://webui-test/nearby_share/shared/fake_nearby_share_settings.js'; import {eventToPromise} from 'chrome://webui-test/test_util.js'; +const {Section} = routesMojom; + suite('<main-page-container>', function() { /** @type {?MainPageContainerElement} */ let mainPageContainer = null; @@ -72,73 +74,73 @@ [ // Basic pages { - pageName: 'internet', + pageName: 'kNetwork', elementName: 'settings-internet-page', }, { - pageName: 'bluetooth', + pageName: 'kBluetooth', elementName: 'os-settings-bluetooth-page', }, { - pageName: 'multidevice', + pageName: 'kMultiDevice', elementName: 'settings-multidevice-page', }, { - pageName: 'kerberos', + pageName: 'kKerberos', elementName: 'settings-kerberos-page', }, { - pageName: 'osPeople', + pageName: 'kPeople', elementName: 'os-settings-people-page', }, { - pageName: 'device', + pageName: 'kDevice', elementName: 'settings-device-page', }, { - pageName: 'personalization', + pageName: 'kPersonalization', elementName: 'settings-personalization-page', }, { - pageName: 'osSearch', + pageName: 'kSearchAndAssistant', elementName: 'os-settings-search-page', }, { - pageName: 'osPrivacy', + pageName: 'kPrivacyAndSecurity', elementName: 'os-settings-privacy-page', }, { - pageName: 'apps', + pageName: 'kApps', elementName: 'os-settings-apps-page', }, { - pageName: 'osAccessibility', + pageName: 'kAccessibility', elementName: 'os-settings-a11y-page', }, // Advanced section pages { - pageName: 'dateTime', + pageName: 'kDateAndTime', elementName: 'settings-date-time-page', }, { - pageName: 'osLanguages', + pageName: 'kLanguagesAndInput', elementName: 'os-settings-languages-section', }, { - pageName: 'files', + pageName: 'kFiles', elementName: 'os-settings-files-page', }, { - pageName: 'osPrinting', + pageName: 'kPrinting', elementName: 'os-settings-printing-page', }, { - pageName: 'crostini', + pageName: 'kCrostini', elementName: 'settings-crostini-page', }, { - pageName: 'osReset', + pageName: 'kReset', elementName: 'os-settings-reset-page', }, ].forEach(({pageName, elementName}) => { @@ -146,7 +148,7 @@ // Make page available mainPageContainer.pageAvailability = { ...mainPageContainer.pageAvailability, - [pageName]: true, + [Section[pageName]]: true, }; flush(); @@ -157,7 +159,7 @@ // Make page unavailable mainPageContainer.pageAvailability = { ...mainPageContainer.pageAvailability, - [pageName]: false, + [Section[pageName]]: false, }; flush(); @@ -194,13 +196,15 @@ }); suite('Route navigations', () => { + const {Section} = routesMojom; + /** * Asserts the following: * - Only one page is marked active * - Active page does not have style "display: none" * - Inactive pages have style "display: none" */ - function assertOnlyActivePageIsVisible(pageName) { + function assertOnlyActivePageIsVisible(section) { const pages = mainPageContainer.shadowRoot.querySelectorAll( 'os-settings-section'); let numActive = 0; @@ -210,7 +214,7 @@ if (page.hasAttribute('active')) { numActive++; assertNotEquals('none', displayStyle); - assertEquals(pageName, page.section); + assertEquals(section, page.section); } else { assertEquals('none', displayStyle); } @@ -221,7 +225,7 @@ suite('From Initial', () => { test('to Root should only show Network page', () => { - assertOnlyActivePageIsVisible('internet'); + assertOnlyActivePageIsVisible(Section.kNetwork); }); }); @@ -233,7 +237,7 @@ Router.getInstance().navigateTo(routes.INTERNET); await navigationCompletePromise; - assertOnlyActivePageIsVisible('internet'); + assertOnlyActivePageIsVisible(Section.kNetwork); }); test('to Subpage should result in only one active page', async () => { @@ -243,7 +247,7 @@ Router.getInstance().navigateTo(routes.BLUETOOTH_DEVICES); await navigationCompletePromise; - assertOnlyActivePageIsVisible('bluetooth'); + assertOnlyActivePageIsVisible(Section.kBluetooth); }); test( @@ -259,7 +263,7 @@ /*removeSearch=*/ true); await navigationCompletePromise; - assertOnlyActivePageIsVisible('internet'); + assertOnlyActivePageIsVisible(Section.kNetwork); }); }); @@ -274,7 +278,7 @@ Router.getInstance().navigateTo(routes.BLUETOOTH); await navigationCompletePromise; - assertOnlyActivePageIsVisible('bluetooth'); + assertOnlyActivePageIsVisible(Section.kBluetooth); }); test('to Subpage should result in only one active page', async () => { @@ -286,7 +290,7 @@ routes.A11Y_DISPLAY_AND_MAGNIFICATION); await navigationCompletePromise; - assertOnlyActivePageIsVisible('osAccessibility'); + assertOnlyActivePageIsVisible(Section.kAccessibility); }); test('to Root should result in only one active page', async () => { @@ -297,7 +301,7 @@ Router.getInstance().navigateTo(routes.BASIC); await navigationCompletePromise; - assertOnlyActivePageIsVisible('internet'); + assertOnlyActivePageIsVisible(Section.kNetwork); }); }); });
diff --git a/chrome/test/data/webui/settings/chromeos/multidevice_page/multidevice_feature_item_test.ts b/chrome/test/data/webui/settings/chromeos/multidevice_page/multidevice_feature_item_test.ts index 2075877..19e53677 100644 --- a/chrome/test/data/webui/settings/chromeos/multidevice_page/multidevice_feature_item_test.ts +++ b/chrome/test/data/webui/settings/chromeos/multidevice_page/multidevice_feature_item_test.ts
@@ -89,8 +89,8 @@ crToggle = featureToggle.$.toggle; initialRoute = routes.MULTIDEVICE_FEATURES; - const FREE_CANDY = routes.BASIC.createSection('/freeCandy', 'freeCandy'); - featureItem.subpageRoute = FREE_CANDY; + const dummyRoute = new Route('/freeCandy'); + featureItem.subpageRoute = dummyRoute; resetFeatureData(); Router.getInstance().navigateTo(initialRoute);
diff --git a/chrome/test/data/webui/settings/chromeos/os_page_availability_test.ts b/chrome/test/data/webui/settings/chromeos/os_page_availability_test.ts index 087ac811..d992ad09 100644 --- a/chrome/test/data/webui/settings/chromeos/os_page_availability_test.ts +++ b/chrome/test/data/webui/settings/chromeos/os_page_availability_test.ts
@@ -4,10 +4,13 @@ import 'chrome://os-settings/os_settings.js'; -import {createPageAvailabilityForTesting, OsPageAvailability} from 'chrome://os-settings/os_settings.js'; +import {createPageAvailabilityForTesting, routesMojom} from 'chrome://os-settings/os_settings.js'; import {loadTimeData} from 'chrome://resources/js/load_time_data.js'; import {assertFalse, assertTrue} from 'chrome://webui-test/chai_assert.js'; +const {Section} = routesMojom; +type PageName = keyof typeof Section; + suite('Page availability', () => { setup(() => { // Setup consistent load time data for each test so overrides do not carry @@ -24,51 +27,51 @@ */ function runLoadTimeControlledTests() { interface LoadTimeControlledPage { - pageName: keyof OsPageAvailability; + pageName: PageName; loadTimeId: string; } const loadTimeControlled: LoadTimeControlledPage[] = [ - {pageName: 'kerberos', loadTimeId: 'isKerberosEnabled'}, - {pageName: 'osReset', loadTimeId: 'allowPowerwash'}, + {pageName: 'kKerberos', loadTimeId: 'isKerberosEnabled'}, + {pageName: 'kReset', loadTimeId: 'allowPowerwash'}, ]; loadTimeControlled.forEach(({pageName, loadTimeId}) => { test(`${pageName} page is available when ${loadTimeId}=true`, () => { loadTimeData.overrideValues({[loadTimeId]: true}); const pageAvailability = createPageAvailabilityForTesting(); - assertTrue(!!pageAvailability[pageName]); + assertTrue(!!pageAvailability[Section[pageName]]); }); test(`${pageName} page is unavailable when ${loadTimeId}=false`, () => { loadTimeData.overrideValues({[loadTimeId]: false}); const pageAvailability = createPageAvailabilityForTesting(); - assertFalse(!!pageAvailability[pageName]); + assertFalse(!!pageAvailability[Section[pageName]]); }); }); } suite('When signed in as user', () => { - const alwaysAvailable: Array<keyof OsPageAvailability> = [ - 'apps', - 'bluetooth', - 'crostini', - 'dateTime', - 'device', - 'files', - 'internet', - 'multidevice', - 'osAccessibility', - 'osLanguages', - 'osPeople', - 'osPrinting', - 'osPrivacy', - 'osSearch', - 'personalization', + const alwaysAvailable: PageName[] = [ + 'kAccessibility', + 'kApps', + 'kBluetooth', + 'kCrostini', + 'kDateAndTime', + 'kDevice', + 'kFiles', + 'kLanguagesAndInput', + 'kMultiDevice', + 'kNetwork', + 'kPeople', + 'kPersonalization', + 'kPrinting', + 'kPrivacyAndSecurity', + 'kSearchAndAssistant', ]; alwaysAvailable.forEach((pageName) => { test(`${pageName} page should always be available`, () => { const pageAvailability = createPageAvailabilityForTesting(); - assertTrue(!!pageAvailability[pageName]); + assertTrue(!!pageAvailability[Section[pageName]]); }); }); @@ -80,36 +83,36 @@ loadTimeData.overrideValues({isGuest: true}); }); - const alwaysAvailable: Array<keyof OsPageAvailability> = [ - 'apps', - 'bluetooth', - 'crostini', - 'dateTime', - 'device', - 'internet', - 'osAccessibility', - 'osLanguages', - 'osPrinting', - 'osPrivacy', - 'osSearch', + const alwaysAvailable: PageName[] = [ + 'kAccessibility', + 'kApps', + 'kBluetooth', + 'kCrostini', + 'kDateAndTime', + 'kDevice', + 'kLanguagesAndInput', + 'kNetwork', + 'kPrinting', + 'kPrivacyAndSecurity', + 'kSearchAndAssistant', ]; alwaysAvailable.forEach((pageName) => { test(`${pageName} page should always be available`, () => { const pageAvailability = createPageAvailabilityForTesting(); - assertTrue(!!pageAvailability[pageName]); + assertTrue(!!pageAvailability[Section[pageName]]); }); }); - const neverAvailable: Array<keyof OsPageAvailability> = [ - 'files', - 'multidevice', - 'osPeople', - 'personalization', + const neverAvailable: PageName[] = [ + 'kFiles', + 'kMultiDevice', + 'kPeople', + 'kPersonalization', ]; neverAvailable.forEach((pageName) => { test(`${pageName} page should never be available`, () => { const pageAvailability = createPageAvailabilityForTesting(); - assertFalse(!!pageAvailability[pageName]); + assertFalse(!!pageAvailability[Section[pageName]]); }); });
diff --git a/chrome/test/data/webui/settings/chromeos/os_settings_menu/os_settings_menu_test.ts b/chrome/test/data/webui/settings/chromeos/os_settings_menu/os_settings_menu_test.ts index 84316af..f509283 100644 --- a/chrome/test/data/webui/settings/chromeos/os_settings_menu/os_settings_menu_test.ts +++ b/chrome/test/data/webui/settings/chromeos/os_settings_menu/os_settings_menu_test.ts
@@ -4,40 +4,16 @@ import 'chrome://os-settings/os_settings.js'; -import {createPageAvailabilityForTesting, OsSettingsMenuElement, OsSettingsRoutes, Route, Router, routes} from 'chrome://os-settings/os_settings.js'; +import {createPageAvailabilityForTesting, OsSettingsMenuElement, Router, routes, routesMojom} from 'chrome://os-settings/os_settings.js'; import {IronIconElement} from 'chrome://resources/polymer/v3_0/iron-icon/iron-icon.js'; import {flush} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js'; import {assertEquals, assertFalse, assertNotEquals, assertNull, assertTrue} from 'chrome://webui-test/chai_assert.js'; /** @fileoverview Runs tests for the OS settings menu. */ - -function setupRouter() { - const basicRoute = new Route('/'); - const bluetoothRoute = basicRoute.createSection('/bluetooth', 'bluetooth'); - const advancedRoute = new Route('/advanced'); - const resetRoute = advancedRoute.createSection('/osReset', 'osReset'); - - const testRoutes = { - BASIC: basicRoute, - ABOUT: new Route('/about'), - ADVANCED: advancedRoute, - BLUETOOTH: bluetoothRoute, - OS_RESET: resetRoute, - }; - - Router.resetInstanceForTesting(new Router(testRoutes as OsSettingsRoutes)); - - routes.OS_RESET = testRoutes.OS_RESET; - routes.BLUETOOTH = testRoutes.BLUETOOTH; - routes.ADVANCED = testRoutes.ADVANCED; - routes.BASIC = testRoutes.BASIC; -} - suite('<os-settings-menu>', () => { let settingsMenu: OsSettingsMenuElement; setup(() => { - setupRouter(); settingsMenu = document.createElement('os-settings-menu'); settingsMenu.pageAvailability = createPageAvailabilityForTesting(); document.body.appendChild(settingsMenu); @@ -112,7 +88,6 @@ let settingsMenu: OsSettingsMenuElement; setup(() => { - setupRouter(); Router.getInstance().navigateTo(routes.OS_RESET); settingsMenu = document.createElement('os-settings-menu'); settingsMenu.pageAvailability = createPageAvailabilityForTesting(); @@ -159,6 +134,9 @@ suite('<os-settings-menu> page availability', () => { let settingsMenu: OsSettingsMenuElement; + const {Section} = routesMojom; + type PageName = keyof typeof Section; + setup(() => { settingsMenu = document.createElement('os-settings-menu'); settingsMenu.pageAvailability = createPageAvailabilityForTesting(); @@ -170,52 +148,52 @@ settingsMenu.remove(); }); - function queryMenuItemByPageName(pageName: string): HTMLElement|null { + function queryMenuItem(pageName: PageName): HTMLElement|null { return settingsMenu.shadowRoot!.querySelector<HTMLElement>( - `a.item[data-page-name='${pageName}']`); + `a.item[data-section="${Section[pageName]}"]`); } - const pages = [ + const pageNames: PageName[] = [ // Basic pages - 'internet', - 'bluetooth', - 'multidevice', - 'kerberos', - 'osPeople', - 'device', - 'personalization', - 'osSearch', - 'osPrivacy', - 'apps', - 'osAccessibility', + 'kNetwork', + 'kBluetooth', + 'kMultiDevice', + 'kKerberos', + 'kPeople', + 'kDevice', + 'kPersonalization', + 'kSearchAndAssistant', + 'kPrivacyAndSecurity', + 'kApps', + 'kAccessibility', // Advanced section pages - 'dateTime', - 'osLanguages', - 'files', - 'osPrinting', - 'crostini', - 'osReset', + 'kDateAndTime', + 'kLanguagesAndInput', + 'kFiles', + 'kPrinting', + 'kCrostini', + 'kReset', ]; - for (const pageName of pages) { + for (const pageName of pageNames) { test(`${pageName} menu item is controlled by pageAvailability`, () => { // Make page available settingsMenu.pageAvailability = { ...settingsMenu.pageAvailability, - [pageName]: true, + [Section[pageName]]: true, }; flush(); - let menuItem = queryMenuItemByPageName(pageName); + let menuItem = queryMenuItem(pageName); assertTrue(!!menuItem, `Menu item for ${pageName} should be stamped.`); // Make page unavailable settingsMenu.pageAvailability = { ...settingsMenu.pageAvailability, - [pageName]: false, + [Section[pageName]]: false, }; flush(); - menuItem = queryMenuItemByPageName(pageName); + menuItem = queryMenuItem(pageName); assertNull(menuItem, `Menu item for ${pageName} should not be stamped.`); }); }
diff --git a/chrome/test/data/webui/settings/chromeos/os_settings_ui/os_settings_ui_about_page_test.js b/chrome/test/data/webui/settings/chromeos/os_settings_ui/os_settings_ui_about_page_test.js index 12f47a660..9827054 100644 --- a/chrome/test/data/webui/settings/chromeos/os_settings_ui/os_settings_ui_about_page_test.js +++ b/chrome/test/data/webui/settings/chromeos/os_settings_ui/os_settings_ui_about_page_test.js
@@ -2,12 +2,14 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -import {CrSettingsPrefs, Router, routes, setNearbyShareSettingsForTesting} from 'chrome://os-settings/os_settings.js'; +import {CrSettingsPrefs, Router, routes, routesMojom, setNearbyShareSettingsForTesting} from 'chrome://os-settings/os_settings.js'; import {flush} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js'; import {assertEquals, assertTrue} from 'chrome://webui-test/chai_assert.js'; import {FakeNearbyShareSettings} from 'chrome://webui-test/nearby_share/shared/fake_nearby_share_settings.js'; import {waitBeforeNextRender} from 'chrome://webui-test/polymer_test_util.js'; +const {Section} = routesMojom; + suite('<os-settings-ui> about page', () => { let ui; let fakeNearbySettings; @@ -55,8 +57,9 @@ const aboutPage = settingsMain.shadowRoot.querySelector('os-settings-about-page'); await waitBeforeNextRender(aboutPage); + const aboutSection = aboutPage.shadowRoot.querySelector( - 'os-settings-section[section="about"]'); + `os-settings-section[section="${Section.kAboutChromeOs}"]`); assertEquals(aboutSection, aboutPage.shadowRoot.activeElement); });
diff --git a/chrome/test/data/webui/settings/chromeos/os_settings_ui/os_settings_ui_page_availability_test.ts b/chrome/test/data/webui/settings/chromeos/os_settings_ui/os_settings_ui_page_availability_test.ts index 14f18fc..217f08d 100644 --- a/chrome/test/data/webui/settings/chromeos/os_settings_ui/os_settings_ui_page_availability_test.ts +++ b/chrome/test/data/webui/settings/chromeos/os_settings_ui/os_settings_ui_page_availability_test.ts
@@ -8,11 +8,14 @@ * Separated into a separate file to mitigate test timeouts. */ -import {CrSettingsPrefs, MainPageContainerElement, OsSettingsMainElement, OsSettingsSectionElement, OsSettingsUiElement} from 'chrome://os-settings/os_settings.js'; +import {CrSettingsPrefs, MainPageContainerElement, OsSettingsMainElement, OsSettingsSectionElement, OsSettingsUiElement, routesMojom} from 'chrome://os-settings/os_settings.js'; import {assert} from 'chrome://resources/js/assert_ts.js'; import {loadTimeData} from 'chrome://resources/js/load_time_data.js'; import {flush} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js'; -import {assertEquals, assertGT, assertTrue} from 'chrome://webui-test/chai_assert.js'; +import {assertEquals, assertGT, assertNull, assertTrue} from 'chrome://webui-test/chai_assert.js'; + +const {Section} = routesMojom; +type PageName = keyof typeof Section; suite('<os-settings-ui> page availability', () => { let ui: OsSettingsUiElement; @@ -97,31 +100,32 @@ ui.remove(); }); - const availablePages = [ - 'apps', - 'bluetooth', - 'crostini', - 'dateTime', - 'device', - 'files', - 'internet', - 'kerberos', - 'multidevice', - 'osAccessibility', - 'osLanguages', - 'osPeople', - 'osPrinting', - 'osPrivacy', - 'osReset', - 'osSearch', - 'personalization', + const availablePages: PageName[] = [ + 'kAccessibility', + 'kApps', + 'kBluetooth', + 'kCrostini', + 'kDateAndTime', + 'kDevice', + 'kFiles', + 'kKerberos', + 'kMultiDevice', + 'kLanguagesAndInput', + 'kNetwork', + 'kPeople', + 'kPersonalization', + 'kPrinting', + 'kPrivacyAndSecurity', + 'kReset', + 'kSearchAndAssistant', ]; - for (const name of availablePages) { - test(`${name} page should be stamped and subpages hidden`, () => { - const section = mainPageContainer.shadowRoot! - .querySelector<OsSettingsSectionElement>( - `os-settings-section[section=${name}]`); - assertTrue(!!section, `Expected to find ${name} page stamped`); + for (const pageName of availablePages) { + test(`${pageName} page should be stamped and subpages hidden`, () => { + const section = + mainPageContainer.shadowRoot! + .querySelector<OsSettingsSectionElement>( + `os-settings-section[section="${Section[pageName]}"]`); + assertTrue(!!section, `Expected to find ${pageName} page stamped.`); verifySubpagesHidden(section); }); } @@ -141,40 +145,42 @@ ui.remove(); }); - const unavailablePages = [ - 'files', - 'multidevice', - 'osPeople', - 'personalization', + const unavailablePages: PageName[] = [ + 'kFiles', + 'kMultiDevice', + 'kPeople', + 'kPersonalization', ]; - for (const name of unavailablePages) { - test(`${name} page should not be stamped`, () => { - const section = mainPageContainer.shadowRoot! - .querySelector<OsSettingsSectionElement>( - `os-settings-section[section=${name}]`); - assertEquals(null, section, `Found unexpected page ${name}`); + for (const pageName of unavailablePages) { + test(`${pageName} page should not be stamped`, () => { + const section = + mainPageContainer.shadowRoot! + .querySelector<OsSettingsSectionElement>( + `os-settings-section[section="${Section[pageName]}"]`); + assertNull(section, `Found unexpected page ${pageName}.`); }); } - const availablePages = [ - 'apps', - 'bluetooth', - 'dateTime', - 'device', - 'internet', - 'kerberos', - 'osAccessibility', - 'osLanguages', - 'osPrivacy', - 'osReset', - 'osSearch', + const availablePages: PageName[] = [ + 'kAccessibility', + 'kApps', + 'kBluetooth', + 'kDateAndTime', + 'kDevice', + 'kKerberos', + 'kLanguagesAndInput', + 'kNetwork', + 'kPrivacyAndSecurity', + 'kReset', + 'kSearchAndAssistant', ]; - for (const name of availablePages) { - test(`${name} page should be stamped and subpages hidden`, () => { - const section = mainPageContainer.shadowRoot! - .querySelector<OsSettingsSectionElement>( - `os-settings-section[section=${name}]`); - assertTrue(!!section, `Expected to find ${name} page stamped`); + for (const pageName of availablePages) { + test(`${pageName} page should be stamped and subpages hidden`, () => { + const section = + mainPageContainer.shadowRoot! + .querySelector<OsSettingsSectionElement>( + `os-settings-section[section="${Section[pageName]}"]`); + assertTrue(!!section, `Expected to find ${pageName} page stamped.`); verifySubpagesHidden(section); }); }
diff --git a/chrome/test/data/webui/settings/chromeos/os_settings_ui/os_settings_ui_page_visibility_test.ts b/chrome/test/data/webui/settings/chromeos/os_settings_ui/os_settings_ui_page_visibility_test.ts index 52f5ddf..3f2f894 100644 --- a/chrome/test/data/webui/settings/chromeos/os_settings_ui/os_settings_ui_page_visibility_test.ts +++ b/chrome/test/data/webui/settings/chromeos/os_settings_ui/os_settings_ui_page_visibility_test.ts
@@ -11,13 +11,16 @@ import 'chrome://os-settings/os_settings.js'; -import {createRoutesForTesting, CrSettingsPrefs, MainPageContainerElement, OsSettingsMainElement, OsSettingsMenuElement, OsSettingsRoutes, OsSettingsUiElement, Router} from 'chrome://os-settings/os_settings.js'; +import {createRoutesForTesting, CrSettingsPrefs, MainPageContainerElement, OsSettingsMainElement, OsSettingsMenuElement, OsSettingsRoutes, OsSettingsUiElement, Router, routesMojom} from 'chrome://os-settings/os_settings.js'; import {assert} from 'chrome://resources/js/assert_ts.js'; import {loadTimeData} from 'chrome://resources/js/load_time_data.js'; import {flush} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js'; import {assertEquals, assertNotEquals, assertTrue} from 'chrome://webui-test/chai_assert.js'; import {eventToPromise} from 'chrome://webui-test/test_util.js'; +const {Section} = routesMojom; +type PageName = keyof typeof Section; + suite('<os-settings-ui> page visibility', () => { let ui: OsSettingsUiElement; let settingsMain: OsSettingsMainElement; @@ -52,9 +55,9 @@ flush(); } - function queryMenuItem(pageName: string): HTMLElement|null { + function queryMenuItem(pageName: PageName): HTMLElement|null { return menu.shadowRoot!.querySelector<HTMLElement>( - `a.item[data-page-name='${pageName}']`); + `a.item[data-section="${Section[pageName]}"]`); } /** @@ -63,7 +66,7 @@ * - Active page does not have style "display: none" * - Inactive pages have style "display: none" */ - function assertOnlyActivePageIsVisible(pageName: string): void { + function assertOnlyActivePageIsVisible(pageName: PageName): void { const pages = mainPageContainer.shadowRoot!.querySelectorAll('os-settings-section'); let numActive = 0; @@ -73,7 +76,7 @@ if (page.hasAttribute('active')) { numActive++; assertNotEquals('none', displayStyle); - assertEquals(pageName, page.section); + assertEquals(Section[pageName], page.section); } else { assertEquals('none', displayStyle); } @@ -106,27 +109,27 @@ test('Network page should be the default visible page', () => { Router.getInstance().navigateTo(testRoutes.BASIC); - assertOnlyActivePageIsVisible('internet'); + assertOnlyActivePageIsVisible('kNetwork'); }); - const pageNames = [ - 'apps', - 'bluetooth', - 'crostini', - 'dateTime', - 'device', - 'files', - 'internet', - 'kerberos', - 'multidevice', - 'osAccessibility', - 'osLanguages', - 'osPeople', - 'osPrinting', - 'osPrivacy', - 'osReset', - 'osSearch', - 'personalization', + const pageNames: PageName[] = [ + 'kAccessibility', + 'kApps', + 'kBluetooth', + 'kCrostini', + 'kDateAndTime', + 'kDevice', + 'kFiles', + 'kKerberos', + 'kMultiDevice', + 'kLanguagesAndInput', + 'kNetwork', + 'kPeople', + 'kPersonalization', + 'kPrinting', + 'kPrivacyAndSecurity', + 'kReset', + 'kSearchAndAssistant', ]; for (const pageName of pageNames) { test(
diff --git a/chrome/test/enterprise/e2e/connector/device_trust_connector/device_trust_connector_windows_enrollment_test.py b/chrome/test/enterprise/e2e/connector/device_trust_connector/device_trust_connector_windows_enrollment_test.py index 1f7db8f..5c4d4cf 100644 --- a/chrome/test/enterprise/e2e/connector/device_trust_connector/device_trust_connector_windows_enrollment_test.py +++ b/chrome/test/enterprise/e2e/connector/device_trust_connector/device_trust_connector_windows_enrollment_test.py
@@ -82,13 +82,13 @@ logging.info('key_trust_level: %s' % result['KeyTrustLevel']) self.assertIsNotNone(result['SpkiHash']) logging.info('device_hash: %s' % result['SpkiHash']) - # self.assertTrue(result['HistogramSuccess']) self.assertIsNotNone(result['FakeIdP']) self.assertIsNotNone(result['Histograms']) client = result['ClientSignals'] server = result['ServerSignals'] self.assertEqual(client['deviceEnrollmentDomain'], 'beyondcorp.bigr.name') self.assertEqual(client['safeBrowsingProtectionLevel'], 1) + self.assertEqual(client['trigger'], 1) self.assertEqual(server['keyTrustLevel'], 'CHROME_BROWSER_HW_KEY') self.assertIsNotNone(server['devicePermanentId'])
diff --git a/components/autofill/content/renderer/form_autofill_util.cc b/components/autofill/content/renderer/form_autofill_util.cc index 921c9528..96bc449 100644 --- a/components/autofill/content/renderer/form_autofill_util.cc +++ b/components/autofill/content/renderer/form_autofill_util.cc
@@ -1135,7 +1135,7 @@ // See description for FILTER_NON_FOCUSABLE_ELEMENTS. ((filters & FILTER_NON_FOCUSABLE_ELEMENTS) && !IsWebElementFocusableForAutofill(element) && - !IsSelectElement(element))) { + !IsSelectOrSelectMenuElement(element))) { continue; }
diff --git a/components/autofill/core/browser/autofill_field.cc b/components/autofill/core/browser/autofill_field.cc index a8e6a80f8..68c0e89 100644 --- a/components/autofill/core/browser/autofill_field.cc +++ b/components/autofill/core/browser/autofill_field.cc
@@ -320,9 +320,16 @@ return AutofillType(server_type()); } - // If the explicit type is cc-exp and either the server or heuristics agree - // on a 2 vs 4 digit specialization of cc-exp, use that specialization. - if (html_type_ == HtmlFieldType::kCreditCardExp) { + // TODO(crbug/1441057) Delete this if-statement when + // features::kAutofillEnableExpirationDateImprovements has launched. This + // should be covered by + // FormStructureRationalizer::RationalizeAutocompleteAttributes. + // + // If the explicit type is cc-exp and either the server or heuristics agree on + // a 2 vs 4 digit specialization of cc-exp, use that specialization. + if (html_type_ == HtmlFieldType::kCreditCardExp && + !base::FeatureList::IsEnabled( + features::kAutofillEnableExpirationDateImprovements)) { if (server_type() == CREDIT_CARD_EXP_DATE_2_DIGIT_YEAR || server_type() == CREDIT_CARD_EXP_DATE_4_DIGIT_YEAR) { return AutofillType(server_type());
diff --git a/components/autofill/core/browser/browser_autofill_manager.cc b/components/autofill/core/browser/browser_autofill_manager.cc index e03b1a6c..f5271913 100644 --- a/components/autofill/core/browser/browser_autofill_manager.cc +++ b/components/autofill/core/browser/browser_autofill_manager.cc
@@ -2316,10 +2316,10 @@ FieldTypeGroup field_group_type = autofill_field->Type().group(); - // Don't fill unfocusable fields, with the exception of <select> fields, for - // the sake of filling the synthetic fields. + // Don't fill unfocusable fields, with the exception of <select> and + // <selectmenu> fields, for the sake of filling the synthetic fields. if (!autofill_field->IsFocusable()) { - bool skip = result.fields[i].form_control_type != "select-one"; + bool skip = !result.fields[i].IsSelectOrSelectMenuElement(); form_interactions_ukm_logger() ->LogHiddenRepresentationalFieldSkipDecision(*form_structure, *autofill_field, skip);
diff --git a/components/autofill/core/browser/field_filler.cc b/components/autofill/core/browser/field_filler.cc index 6888095d..739b790 100644 --- a/components/autofill/core/browser/field_filler.cc +++ b/components/autofill/core/browser/field_filler.cc
@@ -770,36 +770,27 @@ std::u16string yyyy = credit_card.Expiration4DigitYearAsString(); ServerFieldType field_type = field.Type().GetStorableType(); - CreditCardField::ExpirationDateFormat format = - CreditCardField::DetermineExpirationDateFormat(field, field_type); - - // In case of a server override, try whether the server's format fits and use - // it if possible. - // TODO(crbug.com/1441057): Experiment with choosing the server type (when - // it's not an override) over the format string found on the website. - std::u16string server_year; - if (field.server_type() == CREDIT_CARD_EXP_DATE_2_DIGIT_YEAR) { - server_year = yy; - } else if (field.server_type() == CREDIT_CARD_EXP_DATE_4_DIGIT_YEAR) { - server_year = yyyy; - } - if (field.server_type_prediction_is_override() && !server_year.empty()) { - // Try several separators (longest to shortest), hoping that one fits. - std::array<std::u16string, 4> separator_candidates = { - format.separator, - std::u16string(base::TrimWhitespace(format.separator, base::TRIM_ALL)), - std::u16string(u"/"), std::u16string()}; - for (const std::u16string& separator : separator_candidates) { - std::u16string expiration_candidate = - base::StrCat({mm, separator, server_year}); - if (field.max_length == 0 || - expiration_candidate.length() <= field.max_length) { - return expiration_candidate; - } - } + // At this point the field type is determined, so we pass it even as + // `forced_field_type`. + CreditCardField::ExpirationDateFormat format; + if (base::FeatureList::IsEnabled( + features::kAutofillEnableExpirationDateImprovements)) { + format = CreditCardField::DetermineExpirationDateFormat( + field, /*fallback_type=*/field_type, + /*server_hint=*/field_type, /*forced_field_type=*/field_type); + } else { + // Before the experiment, the type was not fully determined yet. That + // happened at field filling time like in this else-branch. + ServerFieldType server_hint = field.server_type(); + ServerFieldType forced_field_type = + field.server_type_prediction_is_override() ? server_hint + : NO_SERVER_DATA; + ServerFieldType fallback_type = field.Type().GetStorableType(); + format = CreditCardField::DetermineExpirationDateFormat( + field, /*fallback_type=*/fallback_type, + /*server_hint=*/server_hint, /*forced_field_type=*/forced_field_type); } - // Now try the format data derived locally from the website. std::u16string expiration_candidate = base::StrCat({mm, format.separator, format.digits_in_expiration_year == 4 ? yyyy : yy});
diff --git a/components/autofill/core/browser/field_filler_unittest.cc b/components/autofill/core/browser/field_filler_unittest.cc index 61237d2c..0c9a04f 100644 --- a/components/autofill/core/browser/field_filler_unittest.cc +++ b/components/autofill/core/browser/field_filler_unittest.cc
@@ -645,20 +645,63 @@ u"3"})); struct FillUtilExpirationDateTestCase { + const char* name; HtmlFieldType field_type; size_t field_max_length; std::u16string expected_value; bool expected_response; const char* opt_label = nullptr; ServerFieldType server_override = UNKNOWN_TYPE; + // If this is absl::nullopt, a test is valid regardless whether the + // features::kAutofillEnableExpirationDateImprovements is enabled or not. + // If it is true, it should only execute if + // features::kAutofillEnableExpirationDateImprovements is enabled. The inverse + // applies for false. + // TODO(crbug.com/1441057): Remove once launched. Delete all tests with a + // value of false, and remove the attribute from tests with a value of true. + absl::optional<bool> for_expiration_date_improvements_experiment = + absl::nullopt; }; class ExpirationDateTest : public AutofillFieldFillerTest, - public testing::WithParamInterface<FillUtilExpirationDateTestCase> {}; + public testing::WithParamInterface< + std::tuple<FillUtilExpirationDateTestCase, + // Whether kAutofillEnableExpirationDateImprovements should + // be enabled. + bool>> {}; TEST_P(ExpirationDateTest, FillExpirationDateInput) { - auto test_case = GetParam(); + auto test_case = std::get<0>(GetParam()); + auto enable_expiration_date_improvements = std::get<1>(GetParam()); + base::test::ScopedFeatureList scoped_feature_list; + scoped_feature_list.InitWithFeatureState( + features::kAutofillEnableExpirationDateImprovements, + enable_expiration_date_improvements); + SCOPED_TRACE( + ::testing::Message() + << "name=" << test_case.name << ", field_type=" << test_case.field_type + << ", field_max_length=" << test_case.field_max_length + << ", expected_value=" << test_case.expected_value + << ", expected_response=" << test_case.expected_response + << ", opt_label=" << test_case.opt_label + << ", server_override=" << test_case.server_override + << ", for_expiration_date_improvements_experiment=" + << (test_case.for_expiration_date_improvements_experiment.has_value() + ? (test_case.for_expiration_date_improvements_experiment.value() + ? "1" + : "0") + : "not set")); + + if (test_case.for_expiration_date_improvements_experiment.has_value() && + test_case.for_expiration_date_improvements_experiment.value() != + base::FeatureList::IsEnabled( + features::kAutofillEnableExpirationDateImprovements)) { + // The test case does not apply to the current experiment configuration and + // gets skipped. + return; + } + AutofillField field; field.form_control_type = "text"; field.SetHtmlType(test_case.field_type, HtmlFieldMode()); @@ -666,7 +709,8 @@ CreditCardField::ExpirationDateFormat format = CreditCardField::DetermineExpirationDateFormat( - field, CREDIT_CARD_EXP_DATE_4_DIGIT_YEAR); + field, CREDIT_CARD_EXP_DATE_4_DIGIT_YEAR, NO_SERVER_DATA, + NO_SERVER_DATA); field.set_heuristic_type(PatternSource::kLegacy, format.digits_in_expiration_year == 2 ? CREDIT_CARD_EXP_DATE_2_DIGIT_YEAR @@ -694,135 +738,201 @@ INSTANTIATE_TEST_SUITE_P( AutofillFieldFillerTest, ExpirationDateTest, - testing::Values( - // A field predicted as a expiration date w/ 2 digit year should fill - // with a format of MM/YY unless it has max-length of: - // 4: Use format MMYY - // 6: Use format MMYYYY - // 7: Use format MM/YYYY - FillUtilExpirationDateTestCase{ - HtmlFieldType::kCreditCardExpDate2DigitYear, - /* default value */ 0, u"03/22", true}, - // Unsupported max lengths of 1-3, fail - FillUtilExpirationDateTestCase{ - HtmlFieldType::kCreditCardExpDate2DigitYear, 1, u"", false}, - FillUtilExpirationDateTestCase{ - HtmlFieldType::kCreditCardExpDate2DigitYear, 2, u"", false}, - FillUtilExpirationDateTestCase{ - HtmlFieldType::kCreditCardExpDate2DigitYear, 3, u"", false}, - // A max length of 4 indicates a format of MMYY. - FillUtilExpirationDateTestCase{ - HtmlFieldType::kCreditCardExpDate2DigitYear, 4, u"0322", true}, - // A max length of 6 indicates a format of MMYYYY, the 21st century is - // assumed. - // Desired case of proper max length >= 5 - FillUtilExpirationDateTestCase{ - HtmlFieldType::kCreditCardExpDate2DigitYear, 5, u"03/22", true}, - FillUtilExpirationDateTestCase{ - HtmlFieldType::kCreditCardExpDate2DigitYear, 6, u"032022", true}, - // A max length of 7 indicates a format of MM/YYYY, the 21st century is - // assumed. - FillUtilExpirationDateTestCase{ - HtmlFieldType::kCreditCardExpDate2DigitYear, 7, u"03/2022", true}, - FillUtilExpirationDateTestCase{ - HtmlFieldType::kCreditCardExpDate2DigitYear, 12, u"03/22", true}, + testing::Combine( + testing::Values( + // A field predicted as a expiration date w/ 2 digit year should + // fill with a format of MM/YY + FillUtilExpirationDateTestCase{ + "Test 1", HtmlFieldType::kCreditCardExpDate2DigitYear, + /* default value */ 0, u"03/22", true}, + // Unsupported max lengths of 1-3, fail + FillUtilExpirationDateTestCase{ + "Test 2", HtmlFieldType::kCreditCardExpDate2DigitYear, 1, u"", + false}, + FillUtilExpirationDateTestCase{ + "Test 3", HtmlFieldType::kCreditCardExpDate2DigitYear, 2, u"", + false}, + FillUtilExpirationDateTestCase{ + "Test 4", HtmlFieldType::kCreditCardExpDate2DigitYear, 3, u"", + false}, + // A max length of 4 indicates a format of MMYY. + FillUtilExpirationDateTestCase{ + "Test 5", HtmlFieldType::kCreditCardExpDate2DigitYear, 4, + u"0322", true}, + // Desired case of proper max length >= 5 + FillUtilExpirationDateTestCase{ + "Test 6", HtmlFieldType::kCreditCardExpDate2DigitYear, 5, + u"03/22", true}, + // If kAutofillEnableExpirationDateImprovements is enabled, the + // overall type comes from + // HtmlFieldType::kCreditCardExpDate2DigitYear and therefore, we + // fill 03/22. + FillUtilExpirationDateTestCase{ + .name = "Test 7", + .field_type = HtmlFieldType::kCreditCardExpDate2DigitYear, + .field_max_length = 6, + .expected_value = u"03/22", + .expected_response = true, + .for_expiration_date_improvements_experiment = true}, + // If kAutofillEnableExpirationDateImprovements is disabled, the max + // length drives the length of the filling. + FillUtilExpirationDateTestCase{ + .name = "Test 8", + .field_type = HtmlFieldType::kCreditCardExpDate2DigitYear, + .field_max_length = 6, + .expected_value = u"032022", + .expected_response = true, + .for_expiration_date_improvements_experiment = false}, + // If kAutofillEnableExpirationDateImprovements is enabled, the + // overall type comes from + // HtmlFieldType::kCreditCardExpDate2DigitYear and therefore, we + // fill 03/22. + FillUtilExpirationDateTestCase{ + .name = "Test 9", + .field_type = HtmlFieldType::kCreditCardExpDate2DigitYear, + .field_max_length = 7, + .expected_value = u"03/22", + .expected_response = true, + .for_expiration_date_improvements_experiment = true}, + // If kAutofillEnableExpirationDateImprovements is disabled, the max + // length drives the length of the filling. + FillUtilExpirationDateTestCase{ + .name = "Test 10", + .field_type = HtmlFieldType::kCreditCardExpDate2DigitYear, + .field_max_length = 7, + .expected_value = u"03/2022", + .expected_response = true, + .for_expiration_date_improvements_experiment = false}, + FillUtilExpirationDateTestCase{ + "Test 11", HtmlFieldType::kCreditCardExpDate2DigitYear, 12, + u"03/22", true}, - // A field predicted as a expiration date w/ 4 digit year should fill - // with a format of MM/YYYY unless it has max-length of: - // 4: Use format MMYY - // 5: Use format MM/YY - // 6: Use format MMYYYY - FillUtilExpirationDateTestCase{ - HtmlFieldType::kCreditCardExpDate4DigitYear, - /* default value */ 0, u"03/2022", true}, - // Unsupported max lengths of 1-3, fail - FillUtilExpirationDateTestCase{ - HtmlFieldType::kCreditCardExpDate4DigitYear, 1, u"", false}, - FillUtilExpirationDateTestCase{ - HtmlFieldType::kCreditCardExpDate4DigitYear, 2, u"", false}, - FillUtilExpirationDateTestCase{ - HtmlFieldType::kCreditCardExpDate4DigitYear, 3, u"", false}, - // A max length of 4 indicates a format of MMYY. - FillUtilExpirationDateTestCase{ - HtmlFieldType::kCreditCardExpDate4DigitYear, 4, u"0322", true}, - // A max length of 5 indicates a format of MM/YY. - FillUtilExpirationDateTestCase{ - HtmlFieldType::kCreditCardExpDate4DigitYear, 5, u"03/22", true}, - // A max length of 6 indicates a format of MMYYYY. - FillUtilExpirationDateTestCase{ - HtmlFieldType::kCreditCardExpDate4DigitYear, 6, u"032022", true}, - // Desired case of proper max length >= 7 - FillUtilExpirationDateTestCase{ - HtmlFieldType::kCreditCardExpDate4DigitYear, 7, u"03/2022", true}, - FillUtilExpirationDateTestCase{ - HtmlFieldType::kCreditCardExpDate4DigitYear, 12, u"03/2022", true}, + // A field predicted as a expiration date w/ 4 digit year should + // fill with a format of MM/YYYY unless it has max-length of: 4: Use + // format MMYY 5: Use format MM/YY 6: Use format MMYYYY + FillUtilExpirationDateTestCase{ + "Test 12", HtmlFieldType::kCreditCardExpDate4DigitYear, + /* default value */ 0, u"03/2022", true}, + // Unsupported max lengths of 1-3, fail + FillUtilExpirationDateTestCase{ + "Test 13", HtmlFieldType::kCreditCardExpDate4DigitYear, 1, u"", + false}, + FillUtilExpirationDateTestCase{ + "Test 14", HtmlFieldType::kCreditCardExpDate4DigitYear, 2, u"", + false}, + FillUtilExpirationDateTestCase{ + "Test 15", HtmlFieldType::kCreditCardExpDate4DigitYear, 3, u"", + false}, + // A max length of 4 indicates a format of MMYY. + FillUtilExpirationDateTestCase{ + "Test 16", HtmlFieldType::kCreditCardExpDate4DigitYear, 4, + u"0322", true}, + // A max length of 5 indicates a format of MM/YY. + FillUtilExpirationDateTestCase{ + "Test 17", HtmlFieldType::kCreditCardExpDate4DigitYear, 5, + u"03/22", true}, + // A max length of 6 indicates a format of MMYYYY. + FillUtilExpirationDateTestCase{ + "Test 18", HtmlFieldType::kCreditCardExpDate4DigitYear, 6, + u"032022", true}, + // Desired case of proper max length >= 7 + FillUtilExpirationDateTestCase{ + "Test 19", HtmlFieldType::kCreditCardExpDate4DigitYear, 7, + u"03/2022", true}, + FillUtilExpirationDateTestCase{ + "Test 20", HtmlFieldType::kCreditCardExpDate4DigitYear, 12, + u"03/2022", true}, - // Tests for features::kAutofillFillCreditCardAsPerFormatString: + // Tests for features::kAutofillFillCreditCardAsPerFormatString: - // Base case works regardless of capitalization. - FillUtilExpirationDateTestCase{ - HtmlFieldType::kCreditCardExpDate2DigitYear, 0, u"03/22", true, - "mm/yy"}, - FillUtilExpirationDateTestCase{ - HtmlFieldType::kCreditCardExpDate2DigitYear, 0, u"03/22", true, - "MM/YY"}, - // Even if we expect a 4 digit expiration date, we follow the - // placeholder. - FillUtilExpirationDateTestCase{ - HtmlFieldType::kCreditCardExpDate4DigitYear, 0, u"03/22", true, - "MM/YY"}, - // Whitespaces are respected. - FillUtilExpirationDateTestCase{ - HtmlFieldType::kCreditCardExpDate2DigitYear, 0, u"03 / 22", true, - "MM / YY"}, - // Whitespaces are stripped if that makes the string fit. - FillUtilExpirationDateTestCase{ - HtmlFieldType::kCreditCardExpDate2DigitYear, 5, u"03/22", true, - "MM / YY"}, - // Different separators work. - FillUtilExpirationDateTestCase{ - HtmlFieldType::kCreditCardExpDate2DigitYear, 0, u"03-22", true, - "MM-YY"}, - // Four year expiration years work. - FillUtilExpirationDateTestCase{ - HtmlFieldType::kCreditCardExpDate2DigitYear, 0, u"03-2022", true, - "MM-YYYY"}, - // Some extra text around the pattern does not matter. - FillUtilExpirationDateTestCase{ - HtmlFieldType::kCreditCardExpDate2DigitYear, 0, u"03/22", true, - "Credit card in format MM/YY."}, - // Fallback to the length based filling in case the maxlength is too - // low. - FillUtilExpirationDateTestCase{ - HtmlFieldType::kCreditCardExpDate4DigitYear, 5, u"03/22", true, - "MM/YYYY"}, - // Empty strings are handled gracefully. - FillUtilExpirationDateTestCase{ - HtmlFieldType::kCreditCardExpDate4DigitYear, 5, u"03/22", true, ""}, + // Base case works regardless of capitalization. + FillUtilExpirationDateTestCase{ + "Test 21", HtmlFieldType::kCreditCardExpDate2DigitYear, 0, + u"03/22", true, "mm/yy"}, + FillUtilExpirationDateTestCase{ + "Test 22", HtmlFieldType::kCreditCardExpDate2DigitYear, 0, + u"03/22", true, "MM/YY"}, + // If we expect a 4 digit expiration date, we consider only the + // separator of the the placeholder once + // kAutofillEnableExpirationDateImprovements is launched. + // + // If kAutofillEnableExpirationDateImprovements is enabled, the + // overall type comes from + // HtmlFieldType::kCreditCardExpDate4DigitYear and therefore, we + // fill 03/2022. + FillUtilExpirationDateTestCase{ + .name = "Test 23", + .field_type = HtmlFieldType::kCreditCardExpDate4DigitYear, + .field_max_length = 0, + .expected_value = u"03/2022", + .expected_response = true, + .opt_label = "MM/YY", + .for_expiration_date_improvements_experiment = true}, + // If kAutofillEnableExpirationDateImprovements is disabled, the + // pattern defines the length of the filling. + FillUtilExpirationDateTestCase{ + .name = "Test 24", + .field_type = HtmlFieldType::kCreditCardExpDate4DigitYear, + .field_max_length = 0, + .expected_value = u"03/22", + .expected_response = true, + .opt_label = "MM/YY", + .for_expiration_date_improvements_experiment = false}, + // Whitespaces are respected. + FillUtilExpirationDateTestCase{ + "Test 25", HtmlFieldType::kCreditCardExpDate2DigitYear, 0, + u"03 / 22", true, "MM / YY"}, + // Whitespaces are stripped if that makes the string fit. + FillUtilExpirationDateTestCase{ + "Test 26", HtmlFieldType::kCreditCardExpDate2DigitYear, 5, + u"03/22", true, "MM / YY"}, + // Different separators work. + FillUtilExpirationDateTestCase{ + "Test 27", HtmlFieldType::kCreditCardExpDate2DigitYear, 0, + u"03-22", true, "MM-YY"}, + // Four year expiration years work. + FillUtilExpirationDateTestCase{ + "Test 28", HtmlFieldType::kCreditCardExpDate4DigitYear, 0, + u"03-2022", true, "MM-YYYY"}, + // Some extra text around the pattern does not matter. + FillUtilExpirationDateTestCase{ + "Test 29", HtmlFieldType::kCreditCardExpDate2DigitYear, 0, + u"03/22", true, "Credit card in format MM/YY."}, + // Fallback to the length based filling in case the maxlength is too + // low. + FillUtilExpirationDateTestCase{ + "Test 30", HtmlFieldType::kCreditCardExpDate4DigitYear, 5, + u"03/22", true, "MM/YYYY"}, + // Empty strings are handled gracefully. + FillUtilExpirationDateTestCase{ + "Test 31", HtmlFieldType::kCreditCardExpDate4DigitYear, 5, + u"03/22", true, ""}, - // Test manual server overrides: - // Even if the label indicates a mm/yy, a server override for a 4 digit - // year should be honored if it fits. - FillUtilExpirationDateTestCase{ - HtmlFieldType::kCreditCardExpDate2DigitYear, 0, u"03/2022", true, - "mm/yy", CREDIT_CARD_EXP_DATE_4_DIGIT_YEAR}, - // Follow the server if it overrides a shorter date format. - FillUtilExpirationDateTestCase{ - HtmlFieldType::kCreditCardExpDate4DigitYear, 0, u"03/22", true, - "mm/yyyy", CREDIT_CARD_EXP_DATE_2_DIGIT_YEAR}, - // Follow the server but preserve the separator if possible. - FillUtilExpirationDateTestCase{ - HtmlFieldType::kCreditCardExpDate4DigitYear, 0, u"03 - 22", true, - "mm - yyyy", CREDIT_CARD_EXP_DATE_2_DIGIT_YEAR}, - // Follow the server but preserve the separator if possible, even if - // that means that whitespaces need to be pruned. - FillUtilExpirationDateTestCase{ - HtmlFieldType::kCreditCardExpDate4DigitYear, 5, u"03-22", true, - "mm - yy", CREDIT_CARD_EXP_DATE_2_DIGIT_YEAR}, - // If the server format just does not fit, fall back to heuristics. - FillUtilExpirationDateTestCase{ - HtmlFieldType::kCreditCardExpDate4DigitYear, 4, u"0322", true, - "mm/yy", CREDIT_CARD_EXP_DATE_4_DIGIT_YEAR})); + // Test manual server overrides: + // Even if the label indicates a mm/yy, a server override for a 4 + // digit year should be honored if it fits. + FillUtilExpirationDateTestCase{ + "Test 32", HtmlFieldType::kCreditCardExpDate2DigitYear, 0, + u"03/2022", true, "mm/yy", CREDIT_CARD_EXP_DATE_4_DIGIT_YEAR}, + // Follow the server if it overrides a shorter date format. + FillUtilExpirationDateTestCase{ + "Test 33", HtmlFieldType::kCreditCardExpDate4DigitYear, 0, + u"03/22", true, "mm/yyyy", CREDIT_CARD_EXP_DATE_2_DIGIT_YEAR}, + // Follow the server but preserve the separator if possible. + FillUtilExpirationDateTestCase{ + "Test 34", HtmlFieldType::kCreditCardExpDate4DigitYear, 0, + u"03 - 22", true, "mm - yyyy", + CREDIT_CARD_EXP_DATE_2_DIGIT_YEAR}, + // Follow the server but preserve the separator if possible, even if + // that means that whitespaces need to be pruned. + FillUtilExpirationDateTestCase{ + "Test 35", HtmlFieldType::kCreditCardExpDate4DigitYear, 5, + u"03-22", true, "mm - yy", CREDIT_CARD_EXP_DATE_2_DIGIT_YEAR}, + // If the server format just does not fit, fall back to heuristics. + FillUtilExpirationDateTestCase{ + "Test 36", HtmlFieldType::kCreditCardExpDate4DigitYear, 4, + u"0322", true, "mm/yy", CREDIT_CARD_EXP_DATE_4_DIGIT_YEAR}), + testing::Bool())); TEST_F(AutofillFieldFillerTest, FillSelectControlByValue) { std::vector<const char*> kOptions = {
diff --git a/components/autofill/core/browser/form_parsing/credit_card_field.cc b/components/autofill/core/browser/form_parsing/credit_card_field.cc index e9ea2ac..14f9cf4 100644 --- a/components/autofill/core/browser/form_parsing/credit_card_field.cc +++ b/components/autofill/core/browser/form_parsing/credit_card_field.cc
@@ -10,6 +10,7 @@ #include <string> #include <utility> +#include "base/containers/contains.h" #include "base/memory/ptr_util.h" #include "base/strings/string_number_conversions.h" #include "base/strings/string_util.h" @@ -504,8 +505,10 @@ ? CREDIT_CARD_EXP_DATE_2_DIGIT_YEAR : CREDIT_CARD_EXP_DATE_4_DIGIT_YEAR; ExpirationDateFormat format = - CreditCardField::DetermineExpirationDateFormat(*expiration_date_, - fallback_type); + CreditCardField::DetermineExpirationDateFormat( + *expiration_date_, /*fallback_type=*/fallback_type, + /*server_hint=*/NO_SERVER_DATA, + /*forced_field_type=*/NO_SERVER_DATA); AddClassification(expiration_date_, format.digits_in_expiration_year == 2 ? CREDIT_CARD_EXP_DATE_2_DIGIT_YEAR @@ -671,9 +674,11 @@ CreditCardField::ExpirationDateFormat CreditCardField::DetermineExpirationDateFormat( const AutofillField& field, - ServerFieldType assumed_field_type) { - CHECK(assumed_field_type == CREDIT_CARD_EXP_DATE_2_DIGIT_YEAR || - assumed_field_type == CREDIT_CARD_EXP_DATE_4_DIGIT_YEAR); + ServerFieldType fallback_type, + ServerFieldType server_hint, + ServerFieldType forced_field_type) { + CHECK(fallback_type == CREDIT_CARD_EXP_DATE_2_DIGIT_YEAR || + fallback_type == CREDIT_CARD_EXP_DATE_4_DIGIT_YEAR); static constexpr size_t kMonthLength = 2; // 2 characters for a MM format. // Check whether we find one of the standard format descriptors like // "mm/yy", "mm/yyyy", "mm / yy", "mm-yyyy", ... in one of the human @@ -682,6 +687,7 @@ bool matches = false; if (base::FeatureList::IsEnabled( features::kAutofillEnableExpirationDateImprovements)) { + // TODO(crbug/1326244): We should use a language specific regex. static constexpr char16_t kFormatRegex[] = u"mm(\\s?[/-]?\\s?)?(y{2,4}|a{2,4})"; // ^^^^ opt white space @@ -699,25 +705,70 @@ matches = MatchesRegex<kFormatRegEx>(field.placeholder, &groups) || MatchesRegex<kFormatRegEx>(field.label, &groups); } - // TODO(crbug/1326244): We should use language specific regex. + + // Build a list of separator candidates from the regular expression sorted + // by what we want to fill most. + std::vector<std::u16string> separator_candidates; if (matches) { + // First choice: The matching separator with padding whitespace. const std::u16string& separator = groups[1]; - const std::u16string& year_format = groups[2]; - uint8_t year_length = year_format.length(); - uint8_t candidate_size = kMonthLength + separator.length() + year_length; - if (field.max_length == 0 || candidate_size <= field.max_length) { - return {separator, year_length}; - } - // Try once more with a stripped version of the separator if the previous - // version did not fit. + separator_candidates.emplace_back(separator); + + // Fallback: The matching separator with padding whitespace trimmed. base::StringPiece16 trimmed_separator = - base::TrimWhitespace(groups[1], base::TRIM_ALL); - candidate_size = kMonthLength + trimmed_separator.length() + year_length; - if (field.max_length == 0 || candidate_size <= field.max_length) { - return {std::u16string(trimmed_separator), year_length}; + base::TrimWhitespace(separator, base::TRIM_ALL); + if (trimmed_separator != separator) { + separator_candidates.emplace_back(trimmed_separator); + } + } + // Add generic fallbacks. + for (const char16_t* fallback : {u"/", u""}) { + if (!base::Contains(separator_candidates, fallback)) { + separator_candidates.emplace_back(fallback); } } + // Build a list of lengths of the expiration year (this can only contain + // entries for a length of 2 or 4 digits; or remain empty). The order of the + // elements matters. + // We may temporarily add 0 entries in case a specific parameter does not + // have an indication for the format to use. This simplifies the code. + constexpr uint8_t kInvalid = 0; + auto type_length = [](ServerFieldType type) -> uint8_t { + return type == CREDIT_CARD_EXP_DATE_2_DIGIT_YEAR ? 2 + : type == CREDIT_CARD_EXP_DATE_4_DIGIT_YEAR ? 4 + : kInvalid; + }; + std::vector<uint8_t> year_length_candidates = { + // First choice: Look at the forced field type (this is a server override + // or the result of the entire classification chain). + type_length(forced_field_type), + // Fall back to a pattern found with the regex if the server does not have + // an override. If the regex matched, groups[2] refers to the the the year + // part (i.e. YY or YYYY in English strings). + matches ? static_cast<uint8_t>(groups[2].length()) : kInvalid, + // Finally, fall back to server hints if they are available. + type_length(server_hint)}; + // Now erase all zeros that indicate that some of the three cases above did + // not lead to a hint. + base::Erase(year_length_candidates, kInvalid); + + // If we don't have any concrete hints from the server or the matched date + // pattern, we leave `year_length_candidates` empty (instead of always adding + // a 4 and/or 2) as we have further heuristics based on `field.max_length` + // that will be processed later. + + for (uint8_t year_length : year_length_candidates) { + for (const std::u16string& separator : separator_candidates) { + uint8_t candidate_size = kMonthLength + separator.length() + year_length; + if (field.max_length == 0 || candidate_size <= field.max_length) { + return {separator, year_length}; + } + } + } + + // Now use to the `field.max_length` attribute to guess an appropriate + // format. switch (field.max_length) { case 1: case 2: @@ -739,7 +790,7 @@ return {.separator = u"/", .digits_in_expiration_year = 4}; default: // Includes the case where max_length is not specified (0). - return assumed_field_type == CREDIT_CARD_EXP_DATE_2_DIGIT_YEAR + return fallback_type == CREDIT_CARD_EXP_DATE_2_DIGIT_YEAR ? ExpirationDateFormat{u"/", /*digits_in_expiration_year*/ 2} : ExpirationDateFormat{u"/", /*digits_in_expiration_year*/ 4}; }
diff --git a/components/autofill/core/browser/form_parsing/credit_card_field.h b/components/autofill/core/browser/form_parsing/credit_card_field.h index ffcfab24..d449dde 100644 --- a/components/autofill/core/browser/form_parsing/credit_card_field.h +++ b/components/autofill/core/browser/form_parsing/credit_card_field.h
@@ -46,12 +46,27 @@ }; // Returns formatting instructions for an CC expiration date <input> field // based on properties of the field (maximum length, label, placeholder, ...). - // The `assumed_field_type` specifies the number of digits to use for a field + // + // The `forced_field_type` is always used over detected patterns (like "MM / + // YY" or "MM/YYYY") in a label or placeholder if possible. There are two main + // usecases for this: 1) server overrides should be given precedence over + // local heuristics. 2) During the final filling moment, we try to stick to + // the overall type for filling and only diverge if the type does not fit into + // the field. If the `forced_field_type` is `NO_SERVER_DATA`, it gets ignored. + // + // The `server_hint` is used if `DetermineExpirationDateFormat` does not + // detect any pattern on the website. This is for classical crowdsourcing, + // which sometimes makes errors. If the `server_hint` is `NO_SERVER_DATA`, it + // gets ignored. + // + // The `fallback_type` specifies the number of digits to use for a field // if there are no hints on what's best. It must be either // CREDIT_CARD_EXP_DATE_2_DIGIT_YEAR or CREDIT_CARD_EXP_DATE_4_DIGIT_YEAR. static ExpirationDateFormat DetermineExpirationDateFormat( const AutofillField& field, - ServerFieldType assumed_field_type); + ServerFieldType fallback_type, + ServerFieldType server_hint, + ServerFieldType forced_field_type); protected: void AddClassifications(FieldCandidatesMap& field_candidates) const override;
diff --git a/components/autofill/core/browser/form_parsing/credit_card_field_unittest.cc b/components/autofill/core/browser/form_parsing/credit_card_field_unittest.cc index 31f3e07..3fe3dca 100644 --- a/components/autofill/core/browser/form_parsing/credit_card_field_unittest.cc +++ b/components/autofill/core/browser/form_parsing/credit_card_field_unittest.cc
@@ -589,6 +589,8 @@ const uint8_t expected_year_length; const std::string label; const int max_length; + ServerFieldType server_type_hint = NO_SERVER_DATA; + bool is_server_override = false; }; class DetermineExpirationDateFormat @@ -668,7 +670,41 @@ DetermineExpirationDateFormatTestCase{" - ", 2, "MM - YY", 0}, // Date fits after stripping whitespaces from separator. - DetermineExpirationDateFormatTestCase{"-", 2, "MM - YY", 5})); + DetermineExpirationDateFormatTestCase{"-", 2, "MM - YY", 5}, + + // Verify that server hints are getting priority over max_length + // but not over the pattern. + // + // Due to the MM / YY pattern, the 2 digit expiration date is chosen. + DetermineExpirationDateFormatTestCase{ + " / ", 2, "MM / YY", 0, CREDIT_CARD_EXP_DATE_4_DIGIT_YEAR}, + DetermineExpirationDateFormatTestCase{ + " / ", 2, "MM / YY", 7, CREDIT_CARD_EXP_DATE_4_DIGIT_YEAR}, + // If no pattern and max length are given, the server hint wins. + DetermineExpirationDateFormatTestCase{ + "/", 4, "", 0, CREDIT_CARD_EXP_DATE_4_DIGIT_YEAR}, + DetermineExpirationDateFormatTestCase{ + "/", 2, "", 0, CREDIT_CARD_EXP_DATE_2_DIGIT_YEAR}, + // The max-length may require a pruning of the separator. + DetermineExpirationDateFormatTestCase{ + "/", 4, "", 7, CREDIT_CARD_EXP_DATE_4_DIGIT_YEAR}, + DetermineExpirationDateFormatTestCase{ + "", 4, "", 6, CREDIT_CARD_EXP_DATE_4_DIGIT_YEAR}, + // But at some point we ignore the server if the type does not fit: + DetermineExpirationDateFormatTestCase{ + "/", 2, "", 5, CREDIT_CARD_EXP_DATE_4_DIGIT_YEAR}, + + // Verify that server overrides are prioritized over everything else. + DetermineExpirationDateFormatTestCase{ + " / ", 4, "MM / YY", 0, CREDIT_CARD_EXP_DATE_4_DIGIT_YEAR, true}, + // The max-length may require a pruning of the separator. + DetermineExpirationDateFormatTestCase{ + "/", 4, "MM / YY", 7, CREDIT_CARD_EXP_DATE_4_DIGIT_YEAR, true}, + DetermineExpirationDateFormatTestCase{ + "", 4, "MM / YY", 6, CREDIT_CARD_EXP_DATE_4_DIGIT_YEAR, true}, + // But at some point we ignore the server if the type does not fit: + DetermineExpirationDateFormatTestCase{ + "/", 2, "MM / YY", 5, CREDIT_CARD_EXP_DATE_4_DIGIT_YEAR, true})); TEST_P(DetermineExpirationDateFormat, TestDetermineFormat) { // Assists in identifying which case has failed. @@ -676,15 +712,20 @@ SCOPED_TRACE(test_case().expected_year_length); SCOPED_TRACE(test_case().label); SCOPED_TRACE(test_case().max_length); + SCOPED_TRACE(test_case().server_type_hint); + SCOPED_TRACE(test_case().is_server_override); AutofillField field; field.max_length = test_case().max_length; field.label = base::UTF8ToUTF16(test_case().label); - ServerFieldType assumed_field_type = CREDIT_CARD_EXP_DATE_4_DIGIT_YEAR; + ServerFieldType fallback_type = CREDIT_CARD_EXP_DATE_4_DIGIT_YEAR; CreditCardField::ExpirationDateFormat result = - CreditCardField::DetermineExpirationDateFormat(field, assumed_field_type); + CreditCardField::DetermineExpirationDateFormat( + field, fallback_type, test_case().server_type_hint, + test_case().is_server_override ? test_case().server_type_hint + : NO_SERVER_DATA); EXPECT_EQ(base::UTF8ToUTF16(test_case().expected_separator), result.separator); EXPECT_EQ(test_case().expected_year_length, result.digits_in_expiration_year);
diff --git a/components/autofill/core/browser/form_parsing/form_field.cc b/components/autofill/core/browser/form_parsing/form_field.cc index 1c046901..666fe8d 100644 --- a/components/autofill/core/browser/form_parsing/form_field.cc +++ b/components/autofill/core/browser/form_parsing/form_field.cc
@@ -378,11 +378,11 @@ // Ignore checkable fields as they interfere with parsers assuming context. // Eg., while parsing address, "Is PO box" checkbox after ADDRESS_LINE1 // interferes with correctly understanding ADDRESS_LINE2. - // Ignore fields marked as presentational, unless for 'select' fields (for - // synthetic fields.) + // Ignore fields marked as presentational, unless for 'select' and + // 'selectmenu' fields (for synthetic fields.) if (IsCheckable(field->check_status) || (field->role == FormFieldData::RoleAttribute::kPresentation && - field->form_control_type != "select-one")) { + !field->IsSelectOrSelectMenuElement())) { continue; } processed_fields.push_back(field.get());
diff --git a/components/autofill/core/browser/form_structure_rationalizer.cc b/components/autofill/core/browser/form_structure_rationalizer.cc index 774bbaf..bc0bd61 100644 --- a/components/autofill/core/browser/form_structure_rationalizer.cc +++ b/components/autofill/core/browser/form_structure_rationalizer.cc
@@ -116,12 +116,26 @@ set_html_type(HtmlFieldType::kAdditionalNameInitial); } break; + // We look at kCreditCardExpDate2DigitYear and + // kCreditCardExpDate4DigitYear as well (not just kCreditCardExp which + // is generated by the autocomplete attribute parser) because the server + // hints can have changed (they may not have been available during the + // first rationalization). In that case we want to rationalize again. case HtmlFieldType::kCreditCardExp: + case HtmlFieldType::kCreditCardExpDate2DigitYear: + case HtmlFieldType::kCreditCardExpDate4DigitYear: if (base::FeatureList::IsEnabled( features::kAutofillEnableExpirationDateImprovements)) { - set_html_type(CreditCardField::DetermineExpirationDateFormat( - *field, CREDIT_CARD_EXP_DATE_4_DIGIT_YEAR) - .digits_in_expiration_year == 4 + ServerFieldType server_hint = field->server_type(); + ServerFieldType forced_field_type = + field->server_type_prediction_is_override() ? field->server_type() + : NO_SERVER_DATA; + CreditCardField::ExpirationDateFormat format = + CreditCardField::DetermineExpirationDateFormat( + *field, /*fallback_type=*/CREDIT_CARD_EXP_DATE_4_DIGIT_YEAR, + /*server_hint=*/server_hint, + /*forced_field_type=*/forced_field_type); + set_html_type(format.digits_in_expiration_year == 4 ? HtmlFieldType::kCreditCardExpDate4DigitYear : HtmlFieldType::kCreditCardExpDate2DigitYear); } else { @@ -330,6 +344,40 @@ break; } } + + // If after rationalization we have an expiration date field, we consider + // once more whether we should make this a field with a 2 or 4 digit + // expiration year based on server information. + if (base::FeatureList::IsEnabled( + features::kAutofillEnableExpirationDateImprovements)) { + for (const auto& field : *fields_) { + // Here we look at the type after rationalization. + ServerFieldType current_field_type = field->Type().GetStorableType(); + if (current_field_type == CREDIT_CARD_EXP_DATE_2_DIGIT_YEAR || + current_field_type == CREDIT_CARD_EXP_DATE_4_DIGIT_YEAR) { + ServerFieldType server_hint = field->server_type(); + ServerFieldType forced_field_type = + field->server_type_prediction_is_override() ? server_hint + : NO_SERVER_DATA; + CreditCardField::ExpirationDateFormat format = + CreditCardField::DetermineExpirationDateFormat( + *field, /*fallback_type=*/CREDIT_CARD_EXP_DATE_4_DIGIT_YEAR, + /*server_hint=*/server_hint, + /*forced_field_type=*/forced_field_type); + ServerFieldType new_field_type = + format.digits_in_expiration_year == 4 + ? CREDIT_CARD_EXP_DATE_4_DIGIT_YEAR + : CREDIT_CARD_EXP_DATE_2_DIGIT_YEAR; + if (new_field_type != current_field_type) { + LOG_AF(log_manager) + << LoggingScope::kRationalization << LogMessage::kRationalization + << "Credit card rationalization: Updated expiration date format " + "with server hints or via patterns found in the labels."; + field->SetTypeTo(AutofillType(new_field_type)); + } + } + } + } } void FormStructureRationalizer::RationalizeMultiOriginCreditCardFields( @@ -624,9 +672,10 @@ for (auto current_index = field_index + 1; current_index < fields_->size(); current_index++) { if ((*fields_)[current_index]->IsFocusable() || - (*fields_)[current_index]->form_control_type != "select-one" || - (*fields_)[current_index]->Type().GetStorableType() != old_type) + !(*fields_)[current_index]->IsSelectOrSelectMenuElement() || + (*fields_)[current_index]->Type().GetStorableType() != old_type) { break; + } ApplyRationalizationsToFieldAndLog(current_index, new_type, form_signature, form_interactions_ukm_logger); } @@ -637,9 +686,10 @@ return; for (auto current_index = field_index - 1;; current_index--) { if ((*fields_)[current_index]->IsFocusable() || - (*fields_)[current_index]->form_control_type != "select-one" || - (*fields_)[current_index]->Type().GetStorableType() != old_type) + !(*fields_)[current_index]->IsSelectOrSelectMenuElement() || + (*fields_)[current_index]->Type().GetStorableType() != old_type) { break; + } ApplyRationalizationsToFieldAndLog(current_index, new_type, form_signature, form_interactions_ukm_logger); if (current_index == 0)
diff --git a/components/autofill/core/browser/form_structure_rationalizer_unittest.cc b/components/autofill/core/browser/form_structure_rationalizer_unittest.cc index 46998273..d3ea30c 100644 --- a/components/autofill/core/browser/form_structure_rationalizer_unittest.cc +++ b/components/autofill/core/browser/form_structure_rationalizer_unittest.cc
@@ -4,6 +4,7 @@ #include "components/autofill/core/browser/form_structure_rationalizer.h" +#include <tuple> #include <utility> #include "base/base64.h" @@ -44,6 +45,8 @@ base::StringPiece name; // This is a field type we assume the autofill server would provide for // the given field. + // TODO(crbug.com/1441057) Rename field_type to server_type to clarify what + // it represents. Also change to server_type_is_override below. ServerFieldType field_type = UNKNOWN_TYPE; // Section name of a field. base::StringPiece section = ""; @@ -54,6 +57,9 @@ FormFieldData::RoleAttribute role = FormFieldData::RoleAttribute::kOther; absl::optional<url::Origin> subframe_origin; absl::optional<FormGlobalId> host_form; + bool field_type_is_override = false; + // Only appled if BuildFormStructure is called with run_heuristics=false. + ServerFieldType heuristic_type = UNKNOWN_TYPE; }; // These are helper functions that set a special flag in a field_template. @@ -115,20 +121,29 @@ field_suggestion->set_field_signature( CalculateFieldSignatureForField(form.fields[i]).value()); *field_suggestion->add_predictions() = - ::autofill::test::CreateFieldPrediction(fields[i].field_type); + ::autofill::test::CreateFieldPrediction( + fields[i].field_type, fields[i].field_type_is_override); } std::string response_string = SerializeAndEncode(response); return std::make_pair(form, response_string); } -std::unique_ptr<FormStructure> BuildFormStructure(FormData form, - std::string response_string, - bool run_heuristics) { +std::unique_ptr<FormStructure> BuildFormStructure( + const std::vector<FieldTemplate>& fields, + bool run_heuristics) { + FormData form; + std::string response_string; + std::tie(form, response_string) = CreateFormAndServerClassification(fields); auto form_structure = std::make_unique<FormStructure>(form); // Identifies the sections based on the heuristics types. if (run_heuristics) { form_structure->DetermineHeuristicTypes(nullptr, nullptr); + } else { + for (size_t i = 0; i < fields.size(); ++i) { + form_structure->field(i)->set_heuristic_type(PatternSource::kLegacy, + fields[i].heuristic_type); + } } // Calls RationalizeFieldTypePredictions. FormStructure::ParseApiQueryResponse( @@ -137,14 +152,6 @@ return form_structure; } -std::unique_ptr<FormStructure> BuildFormStructure( - std::pair<FormData, std::string> form_and_server_classifications, - bool run_heuristics) { - return BuildFormStructure(std::move(form_and_server_classifications.first), - std::move(form_and_server_classifications.second), - run_heuristics); -} - std::vector<ServerFieldType> GetTypes(const FormStructure& form_structure) { std::vector<ServerFieldType> server_types; server_types.reserve(form_structure.field_count()); @@ -207,11 +214,10 @@ TEST_F(FormStructureRationalizerTest, ParseQueryResponse_RationalizeLoneField) { std::unique_ptr<FormStructure> form_structure = BuildFormStructure( - CreateFormAndServerClassification( - {{"fullname", "fullname", NAME_FULL}, - {"address", "address", ADDRESS_HOME_LINE1}, - {"height", "height", CREDIT_CARD_EXP_MONTH}, // Uh-oh! - {"email", "email", EMAIL_ADDRESS}}), + {{"fullname", "fullname", NAME_FULL}, + {"address", "address", ADDRESS_HOME_LINE1}, + {"height", "height", CREDIT_CARD_EXP_MONTH}, // Uh-oh! + {"email", "email", EMAIL_ADDRESS}}, /*run_heuristics=*/false); EXPECT_THAT( GetTypes(*form_structure), @@ -220,10 +226,9 @@ TEST_F(FormStructureRationalizerTest, ParseQueryResponse_RationalizeCCName) { std::unique_ptr<FormStructure> form_structure = - BuildFormStructure(CreateFormAndServerClassification( - {{"First Name", "fname", CREDIT_CARD_NAME_FIRST}, - {"Last Name", "lname", CREDIT_CARD_NAME_LAST}, - {"email", "email", EMAIL_ADDRESS}}), + BuildFormStructure({{"First Name", "fname", CREDIT_CARD_NAME_FIRST}, + {"Last Name", "lname", CREDIT_CARD_NAME_LAST}, + {"email", "email", EMAIL_ADDRESS}}, /*run_heuristics=*/false); EXPECT_THAT(GetTypes(*form_structure), ElementsAre(NAME_FIRST, NAME_LAST, EMAIL_ADDRESS)); @@ -231,13 +236,13 @@ TEST_F(FormStructureRationalizerTest, ParseQueryResponse_RationalizeMultiMonth_1) { std::unique_ptr<FormStructure> form_structure = BuildFormStructure( - CreateFormAndServerClassification({ + { {"Cardholder", "fullname", CREDIT_CARD_NAME_FULL}, {"Card Number", "address", CREDIT_CARD_NUMBER}, {"Month", "expiry_month", CREDIT_CARD_EXP_MONTH}, {"Year", "expiry_year", CREDIT_CARD_EXP_2_DIGIT_YEAR}, {"Quantity", "quantity", CREDIT_CARD_EXP_MONTH} // Uh-oh! - }), + }, /*run_heuristics=*/false); EXPECT_THAT(GetTypes(*form_structure), ElementsAre(CREDIT_CARD_NAME_FULL, CREDIT_CARD_NUMBER, @@ -248,12 +253,12 @@ TEST_F(FormStructureRationalizerTest, ParseQueryResponse_RationalizeMultiMonth_2) { std::unique_ptr<FormStructure> form_structure = BuildFormStructure( - CreateFormAndServerClassification({ + { {"Cardholder", "fullname", CREDIT_CARD_NAME_FULL}, {"Card Number", "address", CREDIT_CARD_NUMBER}, {"Expiry Date (MMYY)", "expiry", CREDIT_CARD_EXP_DATE_2_DIGIT_YEAR}, {"Quantity", "quantity", CREDIT_CARD_EXP_MONTH}, // Uh-oh! - }), + }, /*run_heuristics=*/false); EXPECT_THAT(GetTypes(*form_structure), ElementsAre(CREDIT_CARD_NAME_FULL, CREDIT_CARD_NUMBER, @@ -263,12 +268,12 @@ TEST_F(FormStructureRationalizerTest, RationalizePhoneNumber_RunsOncePerSection) { std::unique_ptr<FormStructure> form_structure = BuildFormStructure( - CreateFormAndServerClassification({ + { {"Full Name", "fullName", NAME_FULL}, {"Address", "address", ADDRESS_HOME_STREET_ADDRESS}, {"Home Phone", "homePhoneNumber", PHONE_HOME_WHOLE_NUMBER}, {"Cell Phone", "cellPhoneNumber", PHONE_HOME_WHOLE_NUMBER}, - }), + }, /*run_heuristics=*/false); Section s = form_structure->field(0)->section; EXPECT_FALSE(test_api(*form_structure).phone_rationalized(s)); @@ -284,11 +289,11 @@ TEST_F(FormStructureRationalizerTest, RationalizeStreetAddressAndAddressLine) { std::unique_ptr<FormStructure> form_structure = BuildFormStructure( - CreateFormAndServerClassification({ + { {"Full Name", "fullName", NAME_FULL}, {"Address1", "address1", ADDRESS_HOME_STREET_ADDRESS}, {"Address2", "address2", ADDRESS_HOME_LINE2}, - }), + }, /*run_heuristics=*/false); EXPECT_THAT(GetTypes(*form_structure), ElementsAre(NAME_FULL, ADDRESS_HOME_LINE1, ADDRESS_HOME_LINE2)); @@ -334,8 +339,8 @@ for (ServerFieldType type : kCorrectTypes) { fields.push_back({"", "", type}); } - std::unique_ptr<FormStructure> form_structure = BuildFormStructure( - CreateFormAndServerClassification(fields), /*run_heuristics=*/false); + std::unique_ptr<FormStructure> form_structure = + BuildFormStructure(fields, /*run_heuristics=*/false); // Expect `kCorrectTypes` twice. std::vector<ServerFieldType> expected_types = kCorrectTypes; @@ -348,11 +353,11 @@ // ADDRESS_HOME_STREET_ADDRESS is not modified by the address rationalization. TEST_F(FormStructureRationalizerTest, RationalizeRepeatedFields_OneAddress) { std::unique_ptr<FormStructure> form_structure = BuildFormStructure( - CreateFormAndServerClassification({ + { {"Full Name", "fullName", NAME_FULL}, {"Address", "address", ADDRESS_HOME_STREET_ADDRESS}, {"City", "city", ADDRESS_HOME_CITY}, - }), + }, /*run_heuristics=*/false); EXPECT_THAT( GetTypes(*form_structure), @@ -364,12 +369,12 @@ // ADDRESS_HOME_LINE1 and ADDRESS_HOME_LINE2 instead. TEST_F(FormStructureRationalizerTest, RationalizeRepreatedFields_TwoAddresses) { std::unique_ptr<FormStructure> form_structure = BuildFormStructure( - CreateFormAndServerClassification({ + { {"Full Name", "fullName", NAME_FULL}, {"Address", "address", ADDRESS_HOME_STREET_ADDRESS}, {"Address", "address", ADDRESS_HOME_STREET_ADDRESS}, {"City", "city", ADDRESS_HOME_CITY}, - }), + }, /*run_heuristics=*/false); EXPECT_THAT(GetTypes(*form_structure), ElementsAre(NAME_FULL, ADDRESS_HOME_LINE1, ADDRESS_HOME_LINE2, @@ -382,13 +387,13 @@ TEST_F(FormStructureRationalizerTest, RationalizeRepreatedFields_ThreeAddresses) { std::unique_ptr<FormStructure> form_structure = BuildFormStructure( - CreateFormAndServerClassification({ + { {"Full Name", "fullName", NAME_FULL}, {"Address", "address", ADDRESS_HOME_STREET_ADDRESS}, {"Address", "address", ADDRESS_HOME_STREET_ADDRESS}, {"Address", "address", ADDRESS_HOME_STREET_ADDRESS}, {"City", "city", ADDRESS_HOME_CITY}, - }), + }, /*run_heuristics=*/false); EXPECT_THAT(GetTypes(*form_structure), ElementsAre(NAME_FULL, ADDRESS_HOME_LINE1, ADDRESS_HOME_LINE2, @@ -402,14 +407,14 @@ TEST_F(FormStructureRationalizerTest, RationalizeRepreatedFields_FourAddresses) { std::unique_ptr<FormStructure> form_structure = BuildFormStructure( - CreateFormAndServerClassification({ + { {"Full Name", "fullName", NAME_FULL}, {"Address", "address", ADDRESS_HOME_STREET_ADDRESS}, {"Address", "address", ADDRESS_HOME_STREET_ADDRESS}, {"Address", "address", ADDRESS_HOME_STREET_ADDRESS}, {"Address", "address", ADDRESS_HOME_STREET_ADDRESS}, {"City", "city", ADDRESS_HOME_CITY}, - }), + }, /*run_heuristics=*/false); EXPECT_THAT( GetTypes(*form_structure), @@ -423,7 +428,7 @@ TEST_F(FormStructureRationalizerTest, RationalizeRepreatedFields_OneAddressEachSection) { std::unique_ptr<FormStructure> form_structure = BuildFormStructure( - CreateFormAndServerClassification({ + { // Billing {"Full Name", "fullName", NAME_FULL, "Billing"}, {"Address", "address", ADDRESS_HOME_STREET_ADDRESS, "Billing"}, @@ -432,7 +437,7 @@ {"Full Name", "fullName", NAME_FULL, "Shipping"}, {"Address", "address", ADDRESS_HOME_STREET_ADDRESS, "Shipping"}, {"City", "city", ADDRESS_HOME_CITY, "Shipping"}, - }), + }, /*run_heuristics=*/false); EXPECT_THAT(GetTypes(*form_structure), ElementsAre( @@ -450,7 +455,7 @@ FormStructureRationalizerTest, RationalizeRepreatedFields_SectionTwoAddress_SectionThreeAddress_SectionFourAddresses) { std::unique_ptr<FormStructure> form_structure = BuildFormStructure( - CreateFormAndServerClassification({ + { // Shipping. {"Full Name", "fullName", NAME_FULL, "Shipping"}, {"Address", "address", ADDRESS_HOME_STREET_ADDRESS, "Shipping"}, @@ -469,7 +474,7 @@ {"Address", "address", ADDRESS_HOME_STREET_ADDRESS, "Work"}, {"Address", "address", ADDRESS_HOME_STREET_ADDRESS, "Work"}, {"City", "city", ADDRESS_HOME_CITY, "Work"}, - }), + }, /*run_heuristics=*/false); EXPECT_THAT( GetTypes(*form_structure), @@ -491,7 +496,7 @@ TEST_F(FormStructureRationalizerTest, RationalizeRepreatedFields_MultipleSectionsByHeuristics_OneAddressEach) { std::unique_ptr<FormStructure> form_structure = BuildFormStructure( - CreateFormAndServerClassification({ + { // Billing. {"Full Name", "fullName", NAME_FULL}, {"Address", "address", ADDRESS_HOME_STREET_ADDRESS}, @@ -500,7 +505,7 @@ {"Full Name", "fullName", NAME_FULL}, {"Address", "address", ADDRESS_HOME_STREET_ADDRESS}, {"City", "city", ADDRESS_HOME_CITY}, - }), + }, /*run_heuristics=*/true); EXPECT_THAT(GetTypes(*form_structure), ElementsAre( @@ -517,7 +522,7 @@ FormStructureRationalizerTest, RationalizeRepreatedFields_MultipleSectionsByHeuristics_TwoAddress_ThreeAddress) { std::unique_ptr<FormStructure> form_structure = BuildFormStructure( - CreateFormAndServerClassification({ + { // Shipping {"Full Name", "fullName", NAME_FULL}, {"Address", "address", ADDRESS_HOME_STREET_ADDRESS}, @@ -529,7 +534,7 @@ {"Address", "address", ADDRESS_HOME_STREET_ADDRESS}, {"Address", "address", ADDRESS_HOME_STREET_ADDRESS}, {"City", "city", ADDRESS_HOME_CITY}, - }), + }, /*run_heuristics=*/true); EXPECT_THAT( GetTypes(*form_structure), @@ -543,24 +548,24 @@ TEST_F(FormStructureRationalizerTest, RationalizeRepreatedFields_StateCountry_NoRationalization) { - std::unique_ptr<FormStructure> form_structure = - BuildFormStructure(CreateFormAndServerClassification({ - // First Section - {"Full Name", "fullName", NAME_FULL}, - {"State", "state", ADDRESS_HOME_STATE}, - {"Country", "country", ADDRESS_HOME_COUNTRY}, - // Second Section - {"Country", "country", ADDRESS_HOME_COUNTRY}, - {"Full Name", "fullName", NAME_FULL}, - {"State", "state", ADDRESS_HOME_STATE}, - // Third Section - {"Full Name", "fullName", NAME_FULL}, - {"State", "state", ADDRESS_HOME_STATE}, - // Fourth Section - {"Full Name", "fullName", NAME_FULL}, - {"Country", "country", ADDRESS_HOME_COUNTRY}, - }), - /*run_heuristics=*/true); + std::unique_ptr<FormStructure> form_structure = BuildFormStructure( + { + // First Section + {"Full Name", "fullName", NAME_FULL}, + {"State", "state", ADDRESS_HOME_STATE}, + {"Country", "country", ADDRESS_HOME_COUNTRY}, + // Second Section + {"Country", "country", ADDRESS_HOME_COUNTRY}, + {"Full Name", "fullName", NAME_FULL}, + {"State", "state", ADDRESS_HOME_STATE}, + // Third Section + {"Full Name", "fullName", NAME_FULL}, + {"State", "state", ADDRESS_HOME_STATE}, + // Fourth Section + {"Full Name", "fullName", NAME_FULL}, + {"Country", "country", ADDRESS_HOME_COUNTRY}, + }, + /*run_heuristics=*/true); EXPECT_THAT(GetTypes(*form_structure), ElementsAre( // First section. @@ -576,7 +581,7 @@ TEST_F(FormStructureRationalizerTest, RationalizeRepreatedFields_CountryStateNoHeuristics) { std::unique_ptr<FormStructure> form_structure = BuildFormStructure( - CreateFormAndServerClassification({ + { // Shipping. {"Full Name", "fullName", NAME_FULL, "shipping"}, {"City", "city", ADDRESS_HOME_CITY, "shipping"}, @@ -600,7 +605,7 @@ {"Country", "country", ADDRESS_HOME_STATE, "billing-2"}, {"Full Name", "fullName", NAME_FULL, "billing-2"}, {"State", "state", ADDRESS_HOME_STATE, "billing-2"}, - }), + }, /*run_heuristics=*/false); EXPECT_THAT(GetTypes(*form_structure), ElementsAre( @@ -618,7 +623,7 @@ TEST_F(FormStructureRationalizerTest, RationalizeRepreatedFields_StateCountryWithHeuristics) { std::unique_ptr<FormStructure> form_structure = BuildFormStructure( - CreateFormAndServerClassification({ + { // First section. {"Full Name", "fullName", NAME_FULL}, ToSelectOne( @@ -642,7 +647,7 @@ {"Country", "country", ADDRESS_HOME_COUNTRY}, ToSelectOne( ToNotFocusable({"Country", "country2", ADDRESS_HOME_COUNTRY})), - }), + }, /*run_heuristics=*/true); EXPECT_THAT(GetTypes(*form_structure), ElementsAre( @@ -659,7 +664,7 @@ TEST_F(FormStructureRationalizerTest, RationalizeRepreatedFields_FirstFieldRationalized) { std::unique_ptr<FormStructure> form_structure = BuildFormStructure( - CreateFormAndServerClassification({ + { {"Country", "country", ADDRESS_HOME_STATE, "billing"}, ToSelectOne(ToNotFocusable( {"Country", "country2", ADDRESS_HOME_STATE, "billing"})), @@ -667,7 +672,7 @@ {"Country", "country3", ADDRESS_HOME_STATE, "billing"})), {"Full Name", "fullName", NAME_FULL, "billing"}, {"State", "state", ADDRESS_HOME_STATE, "billing"}, - }), + }, /*run_heuristics=*/false); EXPECT_THAT(GetTypes(*form_structure), ElementsAre(ADDRESS_HOME_COUNTRY, ADDRESS_HOME_COUNTRY, @@ -677,7 +682,7 @@ TEST_F(FormStructureRationalizerTest, RationalizeRepreatedFields_LastFieldRationalized) { std::unique_ptr<FormStructure> form_structure = BuildFormStructure( - CreateFormAndServerClassification({ + { {"Country", "country", ADDRESS_HOME_COUNTRY, "billing"}, ToSelectOne(ToNotFocusable( {"Country", "country2", ADDRESS_HOME_COUNTRY, "billing"})), @@ -687,7 +692,7 @@ ToSelectOne(ToNotFocusable( {"State", "state", ADDRESS_HOME_COUNTRY, "billing"})), ToSelectOne({"State", "state2", ADDRESS_HOME_COUNTRY, "billing"}), - }), + }, /*run_heuristics=*/false); EXPECT_THAT(GetTypes(*form_structure), ElementsAre(ADDRESS_HOME_COUNTRY, ADDRESS_HOME_COUNTRY, @@ -717,13 +722,13 @@ RationalizeIfSensitiveFieldsOnMainAndCrossOrigin) { EXPECT_THAT( *BuildFormStructure( - CreateFormAndServerClassification({ + { {.field_type = CREDIT_CARD_NAME_FULL}, {.field_type = sensitive_type()}, {.field_type = sensitive_type(), .subframe_origin = url::Origin::Create(GURL("https://psp.com"))}, {.field_type = CREDIT_CARD_EXP_DATE_2_DIGIT_YEAR}, - }), + }, /*run_heuristics=*/false), AreFields(HasType(CREDIT_CARD_NAME_FULL), HasType(UNKNOWN_TYPE), // Because there are sub-frames. @@ -737,12 +742,13 @@ TEST_P(FormStructureRationalizerTestMultiOriginCreditCardFields, DoNotRationalizeIfSensitiveFieldsOnlyOnMainOrigin) { EXPECT_THAT( - *BuildFormStructure(CreateFormAndServerClassification({ - {.field_type = CREDIT_CARD_NAME_FULL}, - {.field_type = sensitive_type()}, - {.field_type = CREDIT_CARD_EXP_DATE_2_DIGIT_YEAR}, - }), - /*run_heuristics=*/false), + *BuildFormStructure( + { + {.field_type = CREDIT_CARD_NAME_FULL}, + {.field_type = sensitive_type()}, + {.field_type = CREDIT_CARD_EXP_DATE_2_DIGIT_YEAR}, + }, + /*run_heuristics=*/false), AreFields(HasType(CREDIT_CARD_NAME_FULL), HasType(sensitive_type()), HasType(CREDIT_CARD_EXP_DATE_2_DIGIT_YEAR))); } @@ -752,7 +758,7 @@ TEST_P(FormStructureRationalizerTestMultiOriginCreditCardFields, DoNotRationalizeIfSensitiveFieldsOnlyOnCrossOrigins) { EXPECT_THAT(*BuildFormStructure( - CreateFormAndServerClassification({ + { {.field_type = CREDIT_CARD_NAME_FULL}, {.field_type = sensitive_type(), .subframe_origin = @@ -761,7 +767,7 @@ .subframe_origin = url::Origin::Create(GURL("https://psp2.com"))}, {.field_type = CREDIT_CARD_EXP_DATE_2_DIGIT_YEAR}, - }), + }, /*run_heuristics=*/false), AreFields(HasType(CREDIT_CARD_NAME_FULL), HasType(sensitive_type()), HasType(sensitive_type()), @@ -777,12 +783,12 @@ features::kAutofillSplitCreditCardNumbersCautiously); EXPECT_THAT( *BuildFormStructure( - CreateFormAndServerClassification({ + { {.field_type = CREDIT_CARD_NUMBER, .max_length = 1}, {.field_type = CREDIT_CARD_NAME_FULL}, {.field_type = CREDIT_CARD_NUMBER}, {.field_type = CREDIT_CARD_EXP_DATE_2_DIGIT_YEAR}, - }), + }, /*run_heuristics=*/false), AreFields(HasTypeAndOffset(CREDIT_CARD_NUMBER, 0), HasTypeAndOffset(CREDIT_CARD_NAME_FULL, 0), @@ -798,13 +804,13 @@ base::test::ScopedFeatureList feature_list( features::kAutofillSplitCreditCardNumbersCautiously); EXPECT_THAT(*BuildFormStructure( - CreateFormAndServerClassification({ + { {.field_type = CREDIT_CARD_NAME_FULL}, {.field_type = CREDIT_CARD_NUMBER, .max_length = 1}, {.field_type = CREDIT_CARD_NUMBER}, {.field_type = CREDIT_CARD_EXP_DATE_2_DIGIT_YEAR}, {.field_type = CREDIT_CARD_NUMBER}, - }), + }, /*run_heuristics=*/false), AreFields(HasTypeAndOffset(CREDIT_CARD_NAME_FULL, 0), HasTypeAndOffset(CREDIT_CARD_NUMBER, 0), @@ -820,7 +826,7 @@ base::test::ScopedFeatureList feature_list( features::kAutofillSplitCreditCardNumbersCautiously); EXPECT_THAT(*BuildFormStructure( - CreateFormAndServerClassification({ + { {.field_type = CREDIT_CARD_NAME_FULL}, {.field_type = CREDIT_CARD_NUMBER, .max_length = 4}, {.field_type = CREDIT_CARD_NUMBER, .max_length = 4}, @@ -828,7 +834,7 @@ {.field_type = CREDIT_CARD_NUMBER, .max_length = 4}, {.field_type = CREDIT_CARD_EXP_DATE_2_DIGIT_YEAR}, {.field_type = CREDIT_CARD_NUMBER}, - }), + }, /*run_heuristics=*/false), AreFields(HasTypeAndOffset(CREDIT_CARD_NAME_FULL, 0), HasTypeAndOffset(CREDIT_CARD_NUMBER, 0), @@ -845,7 +851,7 @@ base::test::ScopedFeatureList feature_list( features::kAutofillSplitCreditCardNumbersCautiously); EXPECT_THAT(*BuildFormStructure( - CreateFormAndServerClassification({ + { {.field_type = CREDIT_CARD_NAME_FULL}, {.field_type = CREDIT_CARD_NUMBER, .is_focusable = false, @@ -857,7 +863,7 @@ {.field_type = CREDIT_CARD_NUMBER, .max_length = 4}, {.field_type = CREDIT_CARD_EXP_DATE_2_DIGIT_YEAR}, {.field_type = CREDIT_CARD_NUMBER}, - }), + }, /*run_heuristics=*/false), AreFields(HasTypeAndOffset(CREDIT_CARD_NAME_FULL, 0), HasTypeAndOffset(CREDIT_CARD_NUMBER, 0), @@ -875,7 +881,7 @@ features::kAutofillSplitCreditCardNumbersCautiously); FormGlobalId other_host_form = test::MakeFormGlobalId(); EXPECT_THAT(*BuildFormStructure( - CreateFormAndServerClassification({ + { {.field_type = CREDIT_CARD_NAME_FULL}, {.field_type = CREDIT_CARD_NUMBER, .max_length = 4, @@ -887,7 +893,7 @@ {.field_type = CREDIT_CARD_NUMBER, .max_length = 4}, {.field_type = CREDIT_CARD_EXP_DATE_2_DIGIT_YEAR}, {.field_type = CREDIT_CARD_NUMBER}, - }), + }, /*run_heuristics=*/false), AreFields(HasTypeAndOffset(CREDIT_CARD_NAME_FULL, 0), HasTypeAndOffset(CREDIT_CARD_NUMBER, 0), @@ -905,7 +911,7 @@ base::test::ScopedFeatureList feature_list( features::kAutofillSplitCreditCardNumbersCautiously); EXPECT_THAT(*BuildFormStructure( - CreateFormAndServerClassification({ + { {.field_type = CREDIT_CARD_NAME_FULL}, {.field_type = CREDIT_CARD_NUMBER, .max_length = 4}, {.field_type = CREDIT_CARD_NUMBER, .max_length = 4}, @@ -913,7 +919,7 @@ {.field_type = CREDIT_CARD_NUMBER}, {.field_type = CREDIT_CARD_EXP_DATE_2_DIGIT_YEAR}, {.field_type = CREDIT_CARD_NUMBER}, - }), + }, /*run_heuristics=*/false), AreFields(HasTypeAndOffset(CREDIT_CARD_NAME_FULL, 0), HasTypeAndOffset(CREDIT_CARD_NUMBER, 0), @@ -933,7 +939,7 @@ base::test::ScopedFeatureList feature_list( features::kAutofillSplitCreditCardNumbersCautiously); EXPECT_THAT(*BuildFormStructure( - CreateFormAndServerClassification({ + { {.field_type = CREDIT_CARD_NUMBER}, {.field_type = CREDIT_CARD_NAME_FULL}, {.field_type = CREDIT_CARD_NUMBER, .max_length = 1}, @@ -949,7 +955,7 @@ {.field_type = CREDIT_CARD_NUMBER}, {.field_type = CREDIT_CARD_EXP_DATE_2_DIGIT_YEAR}, {.field_type = CREDIT_CARD_NUMBER}, - }), + }, /*run_heuristics=*/false), AreFields(HasTypeAndOffset(CREDIT_CARD_NUMBER, 0), HasTypeAndOffset(CREDIT_CARD_NAME_FULL, 0), @@ -1013,6 +1019,37 @@ .field_type = HtmlFieldType::kCreditCardExp}, .max_length = 7}}, .final_types = {CREDIT_CARD_EXP_DATE_2_DIGIT_YEAR}}, + // <input autocomplete="cc-exp" max-length=20> becomes a MM/YYYY field + // by default (see test above), but if later a server classification is + // available, the type is re-rationalized to a 2 digit expiration field. + RationalizeAutocompleteTestParam{ + .fields = + {{.label = "MM / YY", + // Server verdict, which contradicts max_length=7. + .field_type = CREDIT_CARD_EXP_DATE_2_DIGIT_YEAR, + // Rationalization verdict without server type, which should + // get corrected. + .parsed_autocomplete = + AutocompleteParsingResult{ + .field_type = + HtmlFieldType::kCreditCardExpDate4DigitYear}, + .max_length = 7}}, + .final_types = {CREDIT_CARD_EXP_DATE_2_DIGIT_YEAR}}, + // The pattern "MM / YY" trumps a server verdict. + RationalizeAutocompleteTestParam{ + .fields = {{.label = "MM / YY", + .field_type = CREDIT_CARD_EXP_DATE_4_DIGIT_YEAR, + .max_length = 7, + .heuristic_type = CREDIT_CARD_EXP_DATE_2_DIGIT_YEAR}}, + .final_types = {CREDIT_CARD_EXP_DATE_2_DIGIT_YEAR}}, + // The pattern "MM / YY" does NOT trump a server override. + RationalizeAutocompleteTestParam{ + .fields = {{.label = "MM / YY", + .field_type = CREDIT_CARD_EXP_DATE_4_DIGIT_YEAR, + .max_length = 7, + .field_type_is_override = true, + .heuristic_type = CREDIT_CARD_EXP_DATE_2_DIGIT_YEAR}}, + .final_types = {CREDIT_CARD_EXP_DATE_4_DIGIT_YEAR}}, // <input autocomplete="cc-exp-year" max-length=4> becomes a YYYY field. RationalizeAutocompleteTestParam{ .fields = @@ -1040,7 +1077,7 @@ TEST_P(RationalizeAutocompleteTest, RationalizeAutocompleteAttribute) { std::unique_ptr<FormStructure> form_structure = - BuildFormStructure(CreateFormAndServerClassification(GetParam().fields), + BuildFormStructure(GetParam().fields, /*run_heuristics=*/false); EXPECT_THAT(GetTypes(*form_structure), GetParam().final_types); } @@ -1081,11 +1118,10 @@ // Just adding >=3 random fields to trigger rationalization. std::unique_ptr<FormStructure> form_structure = BuildFormStructure( - CreateFormAndServerClassification( - {{"First Name", "firstName", NAME_FIRST}, - {"Last Name", "lastName", NAME_LAST}, - {"Address", "address", ADDRESS_HOME_LINE1}, - {"Something under test", "tested-thing", filtered_off_field}}), + {{"First Name", "firstName", NAME_FIRST}, + {"Last Name", "lastName", NAME_LAST}, + {"Address", "address", ADDRESS_HOME_LINE1}, + {"Something under test", "tested-thing", filtered_off_field}}, /*run_heuristics=*/true); EXPECT_THAT( GetTypes(*form_structure), @@ -1102,12 +1138,11 @@ // Just adding >=3 random fields to trigger rationalization. std::unique_ptr<FormStructure> form_structure = BuildFormStructure( - CreateFormAndServerClassification( - {{"First Name", "firstName", NAME_FIRST}, - {"Last Name", "lastName", NAME_LAST}, - {"Some field with required type", "some-name", - test_params.required_type}, - {"Something under test", "tested-thing", test_params.server_type}}), + {{"First Name", "firstName", NAME_FIRST}, + {"Last Name", "lastName", NAME_LAST}, + {"Some field with required type", "some-name", + test_params.required_type}, + {"Something under test", "tested-thing", test_params.server_type}}, /*run_heuristics=*/true); EXPECT_THAT( GetTypes(*form_structure),
diff --git a/components/autofill/core/browser/form_structure_sectioning_util.cc b/components/autofill/core/browser/form_structure_sectioning_util.cc index c8a4d7d..3ed23ac 100644 --- a/components/autofill/core/browser/form_structure_sectioning_util.cc +++ b/components/autofill/core/browser/form_structure_sectioning_util.cc
@@ -55,9 +55,10 @@ // Sectionable fields are all the fields that are in a non-default section. // Generally, only focusable fields are assigned a section. As an exception, // unfocusable <select> elements get a section, as hidden <select> elements are -// common in custom select elements. +// common in custom select elements. <selectmenu> elements behave the same as +// <select> elements for the sake of simplicity. bool IsSectionable(const AutofillField& field) { - return field.IsFocusable() || field.form_control_type == "select-one"; + return field.IsFocusable() || field.IsSelectOrSelectMenuElement(); } // Assign all credit card fields without a valid autocomplete attribute section
diff --git a/components/browser_ui/widget/android/java/res/values/attrs.xml b/components/browser_ui/widget/android/java/res/values/attrs.xml index c544dc3..0e4a3fa 100644 --- a/components/browser_ui/widget/android/java/res/values/attrs.xml +++ b/components/browser_ui/widget/android/java/res/values/attrs.xml
@@ -123,6 +123,19 @@ <attr name="cardElevation" format="reference|dimension"/> </declare-styleable> + <declare-styleable name="FadingEdgeScrollView"> + <attr name="topEdgeVisibility" format="enum"> + <enum name="none" value="0" /> + <enum name="fading" value="1" /> + <enum name="hard" value="2" /> + </attr> + <attr name="bottomEdgeVisibility" format="enum"> + <enum name="none" value="0" /> + <enum name="fading" value="1" /> + <enum name="hard" value="2" /> + </attr> + </declare-styleable> + <!-- Surface color resources. See https://crbug.com/1410537. --> <attr name="tileViewIconBackgroundModern" format="reference"/> <attr name="cardElevation" format="reference|dimension"/>
diff --git a/components/browser_ui/widget/android/java/src/org/chromium/components/browser_ui/widget/FadingEdgeScrollView.java b/components/browser_ui/widget/android/java/src/org/chromium/components/browser_ui/widget/FadingEdgeScrollView.java index 6c6fcb3..4c51f9d 100644 --- a/components/browser_ui/widget/android/java/src/org/chromium/components/browser_ui/widget/FadingEdgeScrollView.java +++ b/components/browser_ui/widget/android/java/src/org/chromium/components/browser_ui/widget/FadingEdgeScrollView.java
@@ -5,6 +5,7 @@ package org.chromium.components.browser_ui.widget; import android.content.Context; +import android.content.res.TypedArray; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; @@ -50,6 +51,8 @@ mSeparatorColor = getContext().getColor(R.color.toolbar_shadow_color); mSeparatorHeight = getResources().getDimensionPixelSize(R.dimen.divider_height); + + if (attrs != null) parseAttributes(attrs); } @Override @@ -113,4 +116,18 @@ canvas.drawRect(left, top, right, top + mSeparatorHeight, mSeparatorPaint); } } + + private void parseAttributes(AttributeSet attrs) { + TypedArray a = getContext().obtainStyledAttributes(attrs, R.styleable.FadingEdgeScrollView); + + if (a.hasValue(R.styleable.FadingEdgeScrollView_topEdgeVisibility)) { + mDrawTopEdge = + a.getInt(R.styleable.FadingEdgeScrollView_topEdgeVisibility, EdgeType.FADING); + } + if (a.hasValue(R.styleable.FadingEdgeScrollView_bottomEdgeVisibility)) { + mDrawBottomEdge = a.getInt( + R.styleable.FadingEdgeScrollView_bottomEdgeVisibility, EdgeType.FADING); + } + a.recycle(); + } }
diff --git a/components/commerce/core/shopping_service.cc b/components/commerce/core/shopping_service.cc index f33f917..5ef17699 100644 --- a/components/commerce/core/shopping_service.cc +++ b/components/commerce/core/shopping_service.cc
@@ -51,6 +51,7 @@ #include "components/unified_consent/url_keyed_data_collection_consent_helper.h" #include "services/network/public/cpp/shared_url_loader_factory.h" #include "ui/base/resource/resource_bundle.h" +#include "url/url_constants.h" namespace commerce { @@ -381,7 +382,7 @@ } const std::string* currency = on_page_meta_map.FindString(kOgPriceCurrency); - const std::string* amount = on_page_meta_map.FindString(kOgPriceCurrency); + const std::string* amount = on_page_meta_map.FindString(kOgPriceAmount); const std::string* image = on_page_meta_map.FindString(kOgImage); if (currency && amount && image) { @@ -635,7 +636,8 @@ std::move(callback).Run(url, absl::nullopt); // If doing local PDP detection, we might still want to run this. - if (base::FeatureList::IsEnabled(kCommerceLocalPDPDetection)) { + if (base::FeatureList::IsEnabled(kCommerceLocalPDPDetection) && + url.SchemeIsHTTPOrHTTPS()) { UpdateProductInfoCache(url, true, nullptr); if (web) { ScheduleProductInfoJavascript(web);
diff --git a/components/commerce/core/shopping_service_metrics_unittest.cc b/components/commerce/core/shopping_service_metrics_unittest.cc index 592d821a..0015d47 100644 --- a/components/commerce/core/shopping_service_metrics_unittest.cc +++ b/components/commerce/core/shopping_service_metrics_unittest.cc
@@ -277,6 +277,25 @@ histogram_tester_->ExpectTotalCount(metrics::kPDPStateWithLocalMetaName, 1); } +TEST_F(ShoppingServiceMetricsTest, TestLocalPDPDetection_IllegalScheme) { + test_features_.InitWithFeatures({kShoppingList, kCommerceLocalPDPDetection}, + {}); + + base::Value js_result("{\"" + std::string(kOgType) + "\": \"" + + kOgTypeOgProduct + "\"}"); + MockWebWrapper web(GURL("chrome://internal-page"), false, &js_result); + + opt_guide_->SetResponse(GURL(kProductUrl), OptimizationType::PRICE_TRACKING, + OptimizationGuideDecision::kFalse, + OptimizationMetadata()); + + DidNavigatePrimaryMainFrame(&web); + DidFinishLoad(&web); + SimulateProductInfoJsTaskFinished(); + + histogram_tester_->ExpectTotalCount(metrics::kPDPStateWithLocalMetaName, 0); +} + TEST_F(ShoppingServiceMetricsTest, TestLocalPDPDetection_NoServer_NoExperimentFlag) { test_features_.InitWithFeatures({kShoppingList},
diff --git a/components/content_settings/browser/content_settings_manager_impl.cc b/components/content_settings/browser/content_settings_manager_impl.cc index 86869a3..baddb40a 100644 --- a/components/content_settings/browser/content_settings_manager_impl.cc +++ b/components/content_settings/browser/content_settings_manager_impl.cc
@@ -16,6 +16,7 @@ #include "content/public/browser/render_process_host.h" #include "content/public/common/content_features.h" #include "mojo/public/cpp/bindings/self_owned_receiver.h" +#include "net/cookies/cookie_util.h" #include "net/cookies/site_for_cookies.h" using content_settings::PageSpecificContentSettings; @@ -154,6 +155,13 @@ bool allowed = cookie_settings_->IsFullCookieAccessAllowed( url, site_for_cookies, top_frame_origin, cookie_settings_->SettingOverridesForStorage()); + // Allow storage when --test-third-party-cookie-phaseout is used, but ensure + // that only partitioned storage is available. This developer flag is meant to + // simulate Chrome's behavior when 3P cookies are turned down to help + // developers test their site. + if (!allowed && net::cookie_util::IsForceThirdPartyCookieBlockingEnabled()) { + allowed = true; + } if (delegate_->AllowStorageAccess(render_process_id_, render_frame_id, storage_type, url, allowed, &callback)) { DCHECK(!callback);
diff --git a/components/content_settings/browser/ui/cookie_controls_controller.cc b/components/content_settings/browser/ui/cookie_controls_controller.cc index f3f8fae8..5558bdb 100644 --- a/components/content_settings/browser/ui/cookie_controls_controller.cc +++ b/components/content_settings/browser/ui/cookie_controls_controller.cc
@@ -65,6 +65,9 @@ observer.OnStatusChanged(status.status, status.enforcement, status.expiration); observer.OnSitesCountChanged(allowed_sites, blocked_sites); + // TODO(crbug.com/1446230): Return the actual confidence level. + observer.OnBreakageConfidenceLevelChanged( + CookieControlsBreakageConfidenceLevel::kMedium); } } else { int allowed_cookies = GetAllowedCookieCount();
diff --git a/components/content_settings/browser/ui/cookie_controls_view.h b/components/content_settings/browser/ui/cookie_controls_view.h index 0604c66..fe3fbc4 100644 --- a/components/content_settings/browser/ui/cookie_controls_view.h +++ b/components/content_settings/browser/ui/cookie_controls_view.h
@@ -7,6 +7,7 @@ #include "base/observer_list_types.h" #include "base/time/time.h" +#include "components/content_settings/core/common/cookie_controls_breakage_confidence_level.h" #include "components/content_settings/core/common/cookie_controls_enforcement.h" #include "components/content_settings/core/common/cookie_controls_status.h" #include "third_party/abseil-cpp/absl/types/optional.h" @@ -46,6 +47,12 @@ // are blocked from accessing site data. There might be reasons other than // 3PCB to why a site is blocked or allowed (ex. site data exceptions). virtual void OnSitesCountChanged(int allowed_sites, int blocked_sites) = 0; + + // Called wherever the site breakage confidence level changes. It takes into + // account blocked third-party cookie access, exceptions lifecycle, site + // engagement index and recent user activity (like frequent page reloads). + virtual void OnBreakageConfidenceLevelChanged( + CookieControlsBreakageConfidenceLevel level) = 0; }; } // namespace content_settings
diff --git a/components/content_settings/core/browser/cookie_settings_unittest.cc b/components/content_settings/core/browser/cookie_settings_unittest.cc index 9442ffd9..97ed28c 100644 --- a/components/content_settings/core/browser/cookie_settings_unittest.cc +++ b/components/content_settings/core/browser/cookie_settings_unittest.cc
@@ -421,10 +421,15 @@ /*top_frame_origin=*/absl::nullopt, cookie_setting_overrides)); } -TEST_P(CookieSettingsTest, ForceThirdPartyCookieBlocking) { +TEST_P(CookieSettingsTest, TestThirdPartyCookiePhaseout) { base::test::ScopedFeatureList feature_list; - feature_list.InitAndEnableFeature( - net::features::kForceThirdPartyCookieBlocking); + feature_list.InitWithFeatures( + { + net::features::kForceThirdPartyCookieBlocking, + net::features::kThirdPartyStoragePartitioning, + }, + {}); + ASSERT_TRUE(net::cookie_util::IsForceThirdPartyCookieBlockingEnabled()); auto cookie_setting_overrides = GetCookieSettingOverrides();
diff --git a/components/content_settings/core/common/BUILD.gn b/components/content_settings/core/common/BUILD.gn index 64694c8b..61a11e0 100644 --- a/components/content_settings/core/common/BUILD.gn +++ b/components/content_settings/core/common/BUILD.gn
@@ -22,6 +22,7 @@ "content_settings_types.h", "content_settings_utils.cc", "content_settings_utils.h", + "cookie_controls_breakage_confidence_level.h", "cookie_controls_enforcement.h", "cookie_controls_status.h", "cookie_settings_base.cc",
diff --git a/components/content_settings/core/common/cookie_controls_breakage_confidence_level.h b/components/content_settings/core/common/cookie_controls_breakage_confidence_level.h new file mode 100644 index 0000000..61de61a --- /dev/null +++ b/components/content_settings/core/common/cookie_controls_breakage_confidence_level.h
@@ -0,0 +1,19 @@ +// Copyright 2023 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef COMPONENTS_CONTENT_SETTINGS_CORE_COMMON_COOKIE_CONTROLS_BREAKAGE_CONFIDENCE_LEVEL_H_ +#define COMPONENTS_CONTENT_SETTINGS_CORE_COMMON_COOKIE_CONTROLS_BREAKAGE_CONFIDENCE_LEVEL_H_ + +// The confidence level that a site is broken and the user needs to use cookie +// controls. It takes into account blocked third-party cookie access, exceptions +// lifecycle, site engagement index and recent user activity (like frequent page +// reloads). +enum class CookieControlsBreakageConfidenceLevel { + kUninitialized, + kLow, + kMedium, + kHigh, +}; + +#endif // COMPONENTS_CONTENT_SETTINGS_CORE_COMMON_COOKIE_CONTROLS_BREAKAGE_CONFIDENCE_LEVEL_H_
diff --git a/components/cronet/android/test/javatests/src/org/chromium/net/ExperimentalOptionsTranslationTest.java b/components/cronet/android/test/javatests/src/org/chromium/net/ExperimentalOptionsTranslationTest.java index 86f30c4d..669219a 100644 --- a/components/cronet/android/test/javatests/src/org/chromium/net/ExperimentalOptionsTranslationTest.java +++ b/components/cronet/android/test/javatests/src/org/chromium/net/ExperimentalOptionsTranslationTest.java
@@ -5,11 +5,9 @@ package org.chromium.net; import static com.google.common.truth.Truth.assertThat; +import static com.google.common.truth.Truth.assertWithMessage; -import static org.junit.Assert.assertNull; import static org.junit.Assert.assertThrows; -import static org.junit.Assert.assertTrue; -import static org.junit.Assert.fail; import androidx.annotation.OptIn; import androidx.test.ext.junit.runners.AndroidJUnit4; @@ -50,7 +48,7 @@ ConnectionMigrationOptions.builder().enableDefaultNetworkMigration(true)); builder.build(); - assertNull(mockBuilderImpl.mConnectionMigrationOptions); + assertThat(mockBuilderImpl.mConnectionMigrationOptions).isNull(); assertJsonEquals(EXPECTED_CONNECTION_MIGRATION_ENABLED_STRING, mockBuilderImpl.mEffectiveExperimentalOptions); } @@ -65,8 +63,9 @@ ConnectionMigrationOptions.builder().enableDefaultNetworkMigration(true)); builder.build(); - assertTrue(mockBuilderImpl.mConnectionMigrationOptions.getEnableDefaultNetworkMigration()); - assertNull(mockBuilderImpl.mEffectiveExperimentalOptions); + assertThat(mockBuilderImpl.mConnectionMigrationOptions.getEnableDefaultNetworkMigration()) + .isTrue(); + assertThat(mockBuilderImpl.mEffectiveExperimentalOptions).isNull(); } @Test @@ -86,7 +85,7 @@ "{\"QUIC\": {\"migrate_sessions_on_network_change_v2\": false}}"); builder.build(); - assertNull(mockBuilderImpl.mConnectionMigrationOptions); + assertThat(mockBuilderImpl.mConnectionMigrationOptions).isNull(); assertJsonEquals(EXPECTED_CONNECTION_MIGRATION_ENABLED_STRING, mockBuilderImpl.mEffectiveExperimentalOptions); } @@ -101,7 +100,7 @@ ConnectionMigrationOptions.builder().allowNonDefaultNetworkUsage(true)); builder.build(); - assertNull(mockBuilderImpl.mConnectionMigrationOptions); + assertThat(mockBuilderImpl.mConnectionMigrationOptions).isNull(); assertJsonEquals("{\"QUIC\":{}}", mockBuilderImpl.mEffectiveExperimentalOptions); } @@ -115,7 +114,7 @@ ConnectionMigrationOptions.builder().enablePathDegradationMigration(true)); builder.build(); - assertNull(mockBuilderImpl.mConnectionMigrationOptions); + assertThat(mockBuilderImpl.mConnectionMigrationOptions).isNull(); assertJsonEquals("{\"QUIC\":{\"allow_port_migration\":true}}", mockBuilderImpl.mEffectiveExperimentalOptions); } @@ -131,7 +130,7 @@ .allowNonDefaultNetworkUsage(true)); builder.build(); - assertNull(mockBuilderImpl.mConnectionMigrationOptions); + assertThat(mockBuilderImpl.mConnectionMigrationOptions).isNull(); assertJsonEquals("{\"QUIC\":{\"migrate_sessions_early_v2\":true}}", mockBuilderImpl.mEffectiveExperimentalOptions); } @@ -147,7 +146,7 @@ .allowNonDefaultNetworkUsage(false)); builder.build(); - assertNull(mockBuilderImpl.mConnectionMigrationOptions); + assertThat(mockBuilderImpl.mConnectionMigrationOptions).isNull(); assertJsonEquals( "{\"QUIC\":{\"migrate_sessions_early_v2\":false,\"allow_port_migration\":true}}", mockBuilderImpl.mEffectiveExperimentalOptions); @@ -164,9 +163,8 @@ .allowNonDefaultNetworkUsage(true)); IllegalArgumentException e = assertThrows(IllegalArgumentException.class, builder::build); - assertTrue(e.getMessage().contains( - "Unable to turn on non-default network usage without path degradation" - + " migration")); + assertThat(e).hasMessageThat().contains( + "Unable to turn on non-default network usage without path degradation migration"); } @Test @@ -366,13 +364,13 @@ JSONObject expectedJson = new JSONObject(expected); JSONObject actualJson = new JSONObject(actual); - assertJsonEquals(expectedJson, actualJson); + assertJsonEquals(expectedJson, actualJson, ""); } catch (JSONException e) { throw new AssertionError(e); } } - private static void assertJsonEquals(JSONObject expected, JSONObject actual) + private static void assertJsonEquals(JSONObject expected, JSONObject actual, String currentPath) throws JSONException { assertThat(jsonKeys(actual)).isEqualTo(jsonKeys(expected)); @@ -382,15 +380,16 @@ if (expectedValue == actualValue) { continue; } + String fullKey = currentPath.isEmpty() ? key : currentPath + "." + key; if (expectedValue instanceof JSONObject) { - if (actualValue instanceof JSONObject) { - assertJsonEquals((JSONObject) expectedValue, (JSONObject) actualValue); - } else { - fail("key [" + key + "]: expected [" + expectedValue + "] but got [" - + actualValue + "]"); - } + assertWithMessage("key is '" + fullKey + "'") + .that(actualValue) + .isInstanceOf(JSONObject.class); + assertJsonEquals((JSONObject) expectedValue, (JSONObject) actualValue, fullKey); } else { - assertThat(actualValue).isEqualTo(expectedValue); + assertWithMessage("key is '" + fullKey + "'") + .that(actualValue) + .isEqualTo(expectedValue); } } }
diff --git a/components/embedder_support/content_settings_utils.cc b/components/embedder_support/content_settings_utils.cc index 6c9276b..33d1e1fa 100644 --- a/components/embedder_support/content_settings_utils.cc +++ b/components/embedder_support/content_settings_utils.cc
@@ -10,6 +10,7 @@ #include "components/content_settings/core/common/content_settings_utils.h" #include "content/public/browser/browser_thread.h" #include "net/cookies/cookie_setting_override.h" +#include "net/cookies/cookie_util.h" #include "net/cookies/site_for_cookies.h" #include "url/gurl.h" #include "url/origin.h" @@ -30,6 +31,13 @@ bool allow = cookie_settings->IsFullCookieAccessAllowed( url, net::SiteForCookies::FromUrl(url), url::Origin::Create(url), net::CookieSettingOverrides()); + // Allow storage when --test-third-party-cookie-phaseout is used, but ensure + // that only partitioned storage is available. This developer flag is meant to + // simulate Chrome's behavior when 3P cookies are turned down to help + // developers test their site. + if (!allow && net::cookie_util::IsForceThirdPartyCookieBlockingEnabled()) { + allow = true; + } for (const auto& it : render_frames) { content_settings::PageSpecificContentSettings::StorageAccessed( @@ -67,6 +75,14 @@ bool allow_cookies = cookie_settings->IsFullCookieAccessAllowed( scope, site_for_cookies, top_frame_origin, cookie_settings->SettingOverridesForStorage()); + // Allow storage when --test-third-party-cookie-phaseout is used, but ensure + // that only partitioned storage is available. This developer flag is meant to + // simulate Chrome's behavior when 3P cookies are turned down to help + // developers test their site. + if (!allow_cookies && + net::cookie_util::IsForceThirdPartyCookieBlockingEnabled()) { + allow_cookies = true; + } return content::AllowServiceWorkerResult::FromPolicy(!allow_javascript, !allow_cookies); @@ -85,6 +101,14 @@ worker_url, site_for_cookies, top_frame_origin, cookie_settings->SettingOverridesForStorage()); + // Allow storage when --test-third-party-cookie-phaseout is used, but ensure + // that only partitioned storage is available. This developer flag is meant to + // simulate Chrome's behavior when 3P cookies are turned down to help + // developers test their site. + if (!allow && net::cookie_util::IsForceThirdPartyCookieBlockingEnabled()) { + allow = true; + } + content_settings::PageSpecificContentSettings::SharedWorkerAccessed( render_process_id, render_frame_id, worker_url, name, storage_key, !allow);
diff --git a/components/payments/content/payment_response_helper.cc b/components/payments/content/payment_response_helper.cc index 298d91b..3391177 100644 --- a/components/payments/content/payment_response_helper.cc +++ b/components/payments/content/payment_response_helper.cc
@@ -26,14 +26,14 @@ namespace payments { PaymentResponseHelper::PaymentResponseHelper( - const std::string& app_locale, + std::string app_locale, base::WeakPtr<PaymentRequestSpec> spec, base::WeakPtr<PaymentApp> selected_app, base::WeakPtr<PaymentRequestDelegate> payment_request_delegate, autofill::AutofillProfile* selected_shipping_profile, autofill::AutofillProfile* selected_contact_profile, base::WeakPtr<Delegate> delegate) - : app_locale_(app_locale), + : app_locale_(std::move(app_locale)), is_waiting_for_shipping_address_normalization_(false), is_waiting_for_instrument_details_(false), spec_(spec), @@ -126,7 +126,7 @@ } else { DCHECK(selected_contact_profile); payer->name = base::UTF16ToUTF8( - selected_contact_profile->GetInfo(autofill::NAME_FULL, *app_locale_)); + selected_contact_profile->GetInfo(autofill::NAME_FULL, app_locale_)); } } if (spec_->request_payer_email()) { @@ -150,10 +150,10 @@ // https://w3c.github.io/payment-request/#paymentrequest-updated-algorithm const std::string original_number = base::UTF16ToUTF8(selected_contact_profile->GetInfo( - autofill::PHONE_HOME_WHOLE_NUMBER, *app_locale_)); + autofill::PHONE_HOME_WHOLE_NUMBER, app_locale_)); const std::string default_region_code = - autofill::AutofillCountry::CountryCodeForLocale(*app_locale_); + autofill::AutofillCountry::CountryCodeForLocale(app_locale_); payer->phone = autofill::i18n::FormatPhoneForResponse( original_number, default_region_code); } @@ -184,7 +184,7 @@ } else { payment_response->shipping_address = data_util::GetPaymentAddressFromAutofillProfile(shipping_address_, - *app_locale_); + app_locale_); payment_response->shipping_option = spec_->selected_shipping_option()->id; } }
diff --git a/components/payments/content/payment_response_helper.h b/components/payments/content/payment_response_helper.h index 67889723..e71b24a4 100644 --- a/components/payments/content/payment_response_helper.h +++ b/components/payments/content/payment_response_helper.h
@@ -36,7 +36,7 @@ // The spec, selected_app and delegate cannot be null. PaymentResponseHelper( - const std::string& app_locale, + std::string app_locale, base::WeakPtr<PaymentRequestSpec> spec, base::WeakPtr<PaymentApp> selected_app, base::WeakPtr<PaymentRequestDelegate> payment_request_delegate, @@ -66,7 +66,7 @@ void OnAddressNormalized(bool success, const autofill::AutofillProfile& normalized_profile); - const raw_ref<const std::string> app_locale_; + const std::string app_locale_; bool is_waiting_for_shipping_address_normalization_; bool is_waiting_for_instrument_details_;
diff --git a/components/privacy_sandbox/privacy_sandbox_attestations/privacy_sandbox_attestations.h b/components/privacy_sandbox/privacy_sandbox_attestations/privacy_sandbox_attestations.h index 0c8e0e4..5ecbcf5 100644 --- a/components/privacy_sandbox/privacy_sandbox_attestations/privacy_sandbox_attestations.h +++ b/components/privacy_sandbox/privacy_sandbox_attestations/privacy_sandbox_attestations.h
@@ -22,11 +22,13 @@ kMaxValue = kSharedStorage, }; -using PrivacySandboxAttestationsMap = base::flat_map< - net::SchemefulSite, +using PrivacySandboxAttestationsGatedAPISet = base::EnumSet<PrivacySandboxAttestationsGatedAPI, PrivacySandboxAttestationsGatedAPI::kTopics, - PrivacySandboxAttestationsGatedAPI::kMaxValue>>; + PrivacySandboxAttestationsGatedAPI::kMaxValue>; + +using PrivacySandboxAttestationsMap = + base::flat_map<net::SchemefulSite, PrivacySandboxAttestationsGatedAPISet>; class PrivacySandboxAttestations { public: @@ -36,7 +38,7 @@ PrivacySandboxAttestations(PrivacySandboxAttestations&) = delete; // Returns whether `site` is enrolled and attested for `invoking_api`. - // (If the `kEnforcePrivacySandboxAttestations` flag is enabled, returns + // (If the `kEnforcePrivacySandboxAttestations` flag is disabled, returns // true unconditionally.) bool IsSiteAttested(net::SchemefulSite site, PrivacySandboxAttestationsGatedAPI invoking_api) const;
diff --git a/components/safe_browsing/core/browser/db/hash_prefix_map.cc b/components/safe_browsing/core/browser/db/hash_prefix_map.cc index da6bbfb..1c35f53 100644 --- a/components/safe_browsing/core/browser/db/hash_prefix_map.cc +++ b/components/safe_browsing/core/browser/db/hash_prefix_map.cc
@@ -370,8 +370,19 @@ const V4StoreFileFormat& file_format) { DCHECK(file_format.list_update_response().additions().empty()); for (const auto& hash_file : file_format.hash_files()) { - if (!GetFileInfo(hash_file.prefix_size()).Initialize(hash_file)) + auto& file_info = GetFileInfo(hash_file.prefix_size()); + // Make sure file size is correct before attempting to mmap. + int64_t file_size; + if (!GetFileSize(GetPath(store_path_, hash_file.extension()), &file_size)) { return MMAP_FAILURE; + } + if (static_cast<uint64_t>(file_size) != hash_file.file_size()) { + return MMAP_FAILURE; + } + + if (!file_info.Initialize(hash_file)) { + return MMAP_FAILURE; + } } return APPLY_UPDATE_SUCCESS; }
diff --git a/components/safe_browsing/core/browser/db/hash_prefix_map_unittest.cc b/components/safe_browsing/core/browser/db/hash_prefix_map_unittest.cc index 00d8745..c5b1635 100644 --- a/components/safe_browsing/core/browser/db/hash_prefix_map_unittest.cc +++ b/components/safe_browsing/core/browser/db/hash_prefix_map_unittest.cc
@@ -133,6 +133,7 @@ auto* hash_file = file_format.add_hash_files(); hash_file->set_prefix_size(4); hash_file->set_extension("foo"); + hash_file->set_file_size(3); MmapHashPrefixMap map(GetBasePath()); EXPECT_EQ(map.ReadFromDisk(file_format), APPLY_UPDATE_SUCCESS); @@ -151,10 +152,12 @@ auto* hash_file = file_format.add_hash_files(); hash_file->set_prefix_size(4); hash_file->set_extension("foo"); + hash_file->set_file_size(3); hash_file = file_format.add_hash_files(); hash_file->set_prefix_size(2); hash_file->set_extension("bar"); + hash_file->set_file_size(3); MmapHashPrefixMap map(GetBasePath()); EXPECT_EQ(map.ReadFromDisk(file_format), APPLY_UPDATE_SUCCESS); @@ -172,15 +175,29 @@ auto* hash_file = file_format.add_hash_files(); hash_file->set_prefix_size(4); hash_file->set_extension("foo"); + hash_file->set_file_size(3); MmapHashPrefixMap map(GetBasePath()); EXPECT_EQ(map.ReadFromDisk(file_format), MMAP_FAILURE); EXPECT_EQ(map.IsValid(), MMAP_FAILURE); } +TEST_F(HashPrefixMapTest, ReadFileWrongSize) { + base::WriteFile(GetPath("foo"), ""); + + V4StoreFileFormat file_format; + auto* hash_file = file_format.add_hash_files(); + hash_file->set_prefix_size(4); + hash_file->set_extension("foo"); + hash_file->set_file_size(4); + + MmapHashPrefixMap map(GetBasePath()); + EXPECT_EQ(map.ReadFromDisk(file_format), MMAP_FAILURE); +} + TEST_F(HashPrefixMapTest, WriteAndReadFile) { MmapHashPrefixMap map(GetBasePath()); - map.Append(4, "foo"); + map.Append(4, "fooo"); V4StoreFileFormat file_format; EXPECT_TRUE(map.WriteToDisk(&file_format)); @@ -192,7 +209,7 @@ HashPrefixMapView view = map_read.view(); EXPECT_EQ(view.size(), 1u); - EXPECT_EQ(view[4], "foo"); + EXPECT_EQ(view[4], "fooo"); } TEST_F(HashPrefixMapTest, ClearingMapBeforeWriteDeletesFile) {
diff --git a/components/safe_browsing/core/browser/db/v4_store_unittest.cc b/components/safe_browsing/core/browser/db/v4_store_unittest.cc index bdf3b762..5d7f8dc 100644 --- a/components/safe_browsing/core/browser/db/v4_store_unittest.cc +++ b/components/safe_browsing/core/browser/db/v4_store_unittest.cc
@@ -936,6 +936,7 @@ auto* hash_file = file_format.add_hash_files(); hash_file->set_prefix_size(5); hash_file->set_extension("foo"); + hash_file->set_file_size(5); WriteFileFormatProtoToFile(&file_format, 0x600D71FE, 9, &list_update_response); @@ -946,7 +947,7 @@ EXPECT_EQ(READ_SUCCESS, store.ReadFromDisk()); EXPECT_FALSE(store.expected_checksum_.empty()); EXPECT_EQ("test_client_state", store.state()); - EXPECT_EQ(78, store.file_size_); + EXPECT_EQ(85, store.file_size_); EXPECT_TRUE(store.VerifyChecksum());
diff --git a/components/viz/service/display/skia_renderer.cc b/components/viz/service/display/skia_renderer.cc index f5de5807..e9c8048 100644 --- a/components/viz/service/display/skia_renderer.cc +++ b/components/viz/service/display/skia_renderer.cc
@@ -947,11 +947,11 @@ if (current_frame()->root_render_pass->content_color_usage == gfx::ContentColorUsage::kHDR) { surface_candidate.hdr_metadata.emplace(); - surface_candidate.hdr_metadata->extended_range_brightness.emplace(); + surface_candidate.hdr_metadata->extended_range.emplace(); // TODO(https://crbug.com/1430768): Track the actual brightness of the // content. For now, assume that all HDR content is 1,000 nits. - surface_candidate.hdr_metadata->extended_range_brightness - ->desired_ratio = 1000.f / gfx::ColorSpace::kDefaultSDRWhiteLevel; + surface_candidate.hdr_metadata->extended_range->desired_headroom = + 1000.f / gfx::ColorSpace::kDefaultSDRWhiteLevel; } surface_candidate.is_opaque = !surface_plane.enable_blending; surface_candidate.opacity = surface_plane.opacity;
diff --git a/content/browser/media/capture/mouse_cursor_overlay_controller_mac.mm b/content/browser/media/capture/mouse_cursor_overlay_controller_mac.mm index f398f1b6..87e64d87 100644 --- a/content/browser/media/capture/mouse_cursor_overlay_controller_mac.mm +++ b/content/browser/media/capture/mouse_cursor_overlay_controller_mac.mm
@@ -157,11 +157,11 @@ const { DCHECK_CALLED_ON_VALID_SEQUENCE(ui_sequence_checker_); - NSCursor* cursor = [NSCursor currentCursor]; + NSCursor* cursor = NSCursor.currentCursor; if (!cursor) { - cursor = [NSCursor arrowCursor]; + cursor = NSCursor.arrowCursor; } - return cursor; + return base::apple::OwnedNSCursor(cursor); } gfx::RectF MouseCursorOverlayController::ComputeRelativeBoundsForOverlay( @@ -180,11 +180,12 @@ } if (target_size.GetArea()) { + NSCursor* ns_cursor = cursor.Get(); // The documentation on NSCursor reference states that the hot spot is in // flipped coordinates which, from the perspective of the Aura coordinate // system, means it's not flipped. - const NSPoint hotspot = [cursor hotSpot]; - const NSSize size = [[cursor image] size]; + const NSPoint hotspot = ns_cursor.hotSpot; + const NSSize size = ns_cursor.image.size; return gfx::ScaleRect( gfx::RectF(location_aura.x() - hotspot.x, location_aura.y() - hotspot.y, size.width, size.height), @@ -208,7 +209,8 @@ SkBitmap MouseCursorOverlayController::GetCursorImage( const gfx::NativeCursor& cursor) { return skia::NSImageToSkBitmapWithColorSpace( - [cursor image], /*is_opaque=*/false, base::mac::GetSystemColorSpace()); + cursor.Get().image, /*is_opaque=*/false, + base::mac::GetSystemColorSpace()); } } // namespace content
diff --git a/content/browser/renderer_host/input/web_input_event_builders_ios.h b/content/browser/renderer_host/input/web_input_event_builders_ios.h index 1eb6d4d9..b2b70e32 100644 --- a/content/browser/renderer_host/input/web_input_event_builders_ios.h +++ b/content/browser/renderer_host/input/web_input_event_builders_ios.h
@@ -30,10 +30,12 @@ class CONTENT_EXPORT WebTouchEventBuilder { public: - static blink::WebTouchEvent Build(blink::WebInputEvent::Type type, - UITouch* touch, - UIEvent* event, - UIView* view); + static blink::WebTouchEvent Build( + blink::WebInputEvent::Type type, + UITouch* touch, + UIEvent* event, + UIView* view, + const absl::optional<gfx::Vector2dF>& view_offset); }; } // namespace content
diff --git a/content/browser/renderer_host/input/web_input_event_builders_ios.mm b/content/browser/renderer_host/input/web_input_event_builders_ios.mm index 7dddb0c..c250f1e 100644 --- a/content/browser/renderer_host/input/web_input_event_builders_ios.mm +++ b/content/browser/renderer_host/input/web_input_event_builders_ios.mm
@@ -112,9 +112,11 @@ // TODO(dtapuska): Support stylus. } -blink::WebTouchPoint CreateWebTouchPoint(UIView* view, - UITouch* event, - bool was_changed) { +blink::WebTouchPoint CreateWebTouchPoint( + UIView* view, + UITouch* event, + bool was_changed, + const absl::optional<gfx::Vector2dF>& view_offset) { blink::WebTouchPoint touch; size_t pointer_index = GetTouchPointerId(event); @@ -124,10 +126,17 @@ [event force]); touch.state = ToWebTouchPointState(event, was_changed); - CGPoint view_location = [event locationInView:view]; - touch.SetPositionInWidget(view_location.x, view_location.y); - CGPoint window_location = [event locationInView:nil]; - touch.SetPositionInScreen(window_location.x, window_location.y); + gfx::PointF window_location = gfx::PointF([event locationInView:nil]); + touch.SetPositionInScreen(window_location); + + gfx::PointF view_location; + if (view_offset) { + view_location = gfx::PointF(window_location); + view_location += view_offset.value(); + } else { + view_location = gfx::PointF([event locationInView:view]); + } + touch.SetPositionInWidget(view_location); float major_radius = event.majorRadius; float minor_radius = event.majorRadius; @@ -181,7 +190,8 @@ blink::WebInputEvent::Type type, UITouch* touch, UIEvent* event, - UIView* view) { + UIView* view, + const absl::optional<gfx::Vector2dF>& view_offset) { blink::WebTouchEvent result(type, ModifiersFromEvent(event), ui::EventTimeStampFromSeconds([event timestamp])); // TODO(dtapuska): Enable @@ -198,7 +208,7 @@ AddUITouch(touch); } result.touches[touch_index] = - CreateWebTouchPoint(view, touch, /*was_changed=*/true); + CreateWebTouchPoint(view, touch, /*was_changed=*/true, view_offset); ++touch_index; if (type == blink::WebInputEvent::Type::kTouchCancel || type == blink::WebInputEvent::Type::kTouchEnd) { @@ -213,7 +223,7 @@ continue; } result.touches[touch_index] = CreateWebTouchPoint( - view, g_active_touches_map[i], /*was_changed=*/false); + view, g_active_touches_map[i], /*was_changed=*/false, view_offset); ++touch_index; } result.touches_length = touch_index;
diff --git a/content/browser/renderer_host/render_widget_host_view_ios.h b/content/browser/renderer_host/render_widget_host_view_ios.h index 8db1b23..1e57d27 100644 --- a/content/browser/renderer_host/render_widget_host_view_ios.h +++ b/content/browser/renderer_host/render_widget_host_view_ios.h
@@ -52,7 +52,8 @@ public BrowserCompositorIOSClient, public TextInputManager::Observer, public ui::GestureProviderClient, - public ui::CALayerFrameSink { + public ui::CALayerFrameSink, + public RenderFrameMetadataProvider::Observer { public: // The view will associate itself with the given widget. The native view must // be hooked up immediately to the view hierarchy, or else when it is @@ -119,6 +120,15 @@ const gfx::Size& dst_size, base::OnceCallback<void(const SkBitmap&)> callback) override; ui::Compositor* GetCompositor() override; + void GestureEventAck( + const blink::WebGestureEvent& event, + blink::mojom::InputEventResultState ack_result, + blink::mojom::ScrollResultDataPtr scroll_result_data) override; + void ChildDidAckGestureEvent( + const blink::WebGestureEvent& event, + blink::mojom::InputEventResultState ack_result, + blink::mojom::ScrollResultDataPtr scroll_result_data) override; + void OnSynchronizedDisplayPropertiesChanged(bool rotation) override; BrowserCompositorIOS* BrowserCompositor() const { return browser_compositor_.get(); @@ -155,6 +165,15 @@ RenderWidgetHostViewBase* updated_view, bool did_update_state) override; + // RenderFrameMetadataProvider::Observer implementation. + void OnRenderFrameMetadataChangedBeforeActivation( + const cc::RenderFrameMetadata& metadata) override; + void OnRenderFrameMetadataChangedAfterActivation( + base::TimeTicks activation_time) override {} + void OnRenderFrameSubmission() override {} + void OnLocalSurfaceIdChanged( + const cc::RenderFrameMetadata& metadata) override {} + void SetActive(bool active); void OnTouchEvent(blink::WebTouchEvent event); void UpdateNativeViewTree(gfx::NativeView view); @@ -181,6 +200,7 @@ bool CanBecomeFirstResponderForTesting() const; bool CanResignFirstResponderForTesting() const; + void ContentInsetChanged(); private: friend class MockPointerLockRenderWidgetHostView; @@ -195,6 +215,8 @@ bool ComputeIsViewOrSubviewFirstResponder() const; + void ApplyRootScrollOffsetChanged(const gfx::PointF& root_scroll_offset); + // Provides gesture synthesis given a stream of touch events and touch event // acks. This is for generating gesture events from injected touch events. ui::FilteredGestureProvider gesture_provider_; @@ -218,6 +240,9 @@ // EnsureSurfaceSynchronizedForWebTest(). uint32_t latest_capture_sequence_number_ = 0u; + absl::optional<gfx::PointF> last_root_scroll_offset_; + bool is_scrolling_ = false; + std::unique_ptr<BrowserCompositorIOS> browser_compositor_; std::unique_ptr<UIViewHolder> ui_view_; std::unique_ptr<ui::DisplayCALayerTree> display_tree_;
diff --git a/content/browser/renderer_host/render_widget_host_view_ios.mm b/content/browser/renderer_host/render_widget_host_view_ios.mm index 9e989b0..958cc0d8 100644 --- a/content/browser/renderer_host/render_widget_host_view_ios.mm +++ b/content/browser/renderer_host/render_widget_host_view_ios.mm
@@ -13,6 +13,7 @@ #include "content/browser/renderer_host/input/motion_event_web.h" #include "content/browser/renderer_host/input/synthetic_gesture_target_ios.h" #include "content/browser/renderer_host/input/web_input_event_builders_ios.h" +#include "content/browser/renderer_host/render_view_host_delegate_view.h" #include "content/browser/renderer_host/render_widget_host_impl.h" #include "content/browser/renderer_host/render_widget_host_input_event_router.h" #include "content/browser/renderer_host/text_input_manager.h" @@ -25,11 +26,14 @@ #include "ui/base/ime/text_input_type.h" #include "ui/display/screen.h" #include "ui/events/gesture_detection/gesture_provider_config_helper.h" +#include "ui/gfx/geometry/size_conversions.h" // Used for settng the requested renderer size when testing. constexpr int kDefaultWidthForTesting = 800; constexpr int kDefaultHeightForTesting = 600; +static void* kObservingContext = &kObservingContext; + @interface UIApplication (Testing) - (BOOL)isRunningTests; @end @@ -60,11 +64,28 @@ @interface RenderWidgetUIView : CALayerFrameSinkProvider { raw_ptr<content::RenderWidgetHostViewIOS> _view; + absl::optional<gfx::Vector2dF> _view_offset_during_touch_sequence; } // TextInput state. @property(nonatomic, strong) RenderWidgetUIViewTextInput* textInput; +/** The constraint between the top edge of @c contentView and its superview. */ +@property(nonatomic, strong, nonnull) + NSLayoutConstraint* contentViewTopConstraint; + +/** The constraint between the bottom edge of @c contentView and its superview. + */ +@property(nonatomic, strong, nonnull) + NSLayoutConstraint* contentViewBottomConstraint; + +/** The constraint between the trailing edge of @c contentView and its + * superview. */ +@property(nonatomic, strong, nonnull) + NSLayoutConstraint* contentViewTrailingConstraint; + +- (void)updateView:(UIScrollView*)view; +- (void)removeView; @end @implementation CALayerFrameSinkProvider @@ -216,30 +237,82 @@ } } for (UITouch* touch in touches) { - _view->OnTouchEvent(content::WebTouchEventBuilder::Build( - blink::WebInputEvent::Type::kTouchStart, touch, event, self)); + blink::WebTouchEvent webTouchEvent = content::WebTouchEventBuilder::Build( + blink::WebInputEvent::Type::kTouchStart, touch, event, self, + _view_offset_during_touch_sequence); + if (!_view_offset_during_touch_sequence) { + _view_offset_during_touch_sequence = + webTouchEvent.touches[0].PositionInWidget() - + webTouchEvent.touches[0].PositionInScreen(); + } + _view->OnTouchEvent(std::move(webTouchEvent)); } } - (void)touchesEnded:(NSSet<UITouch*>*)touches withEvent:(UIEvent*)event { for (UITouch* touch in touches) { _view->OnTouchEvent(content::WebTouchEventBuilder::Build( - blink::WebInputEvent::Type::kTouchEnd, touch, event, self)); + blink::WebInputEvent::Type::kTouchEnd, touch, event, self, + _view_offset_during_touch_sequence)); + } + if (event.allTouches.count == 1) { + _view_offset_during_touch_sequence.reset(); } } - (void)touchesMoved:(NSSet<UITouch*>*)touches withEvent:(UIEvent*)event { for (UITouch* touch in touches) { _view->OnTouchEvent(content::WebTouchEventBuilder::Build( - blink::WebInputEvent::Type::kTouchMove, touch, event, self)); + blink::WebInputEvent::Type::kTouchMove, touch, event, self, + _view_offset_during_touch_sequence)); } } - (void)touchesCancelled:(NSSet<UITouch*>*)touches withEvent:(UIEvent*)event { for (UITouch* touch in touches) { _view->OnTouchEvent(content::WebTouchEventBuilder::Build( - blink::WebInputEvent::Type::kTouchCancel, touch, event, self)); + blink::WebInputEvent::Type::kTouchCancel, touch, event, self, + _view_offset_during_touch_sequence)); } + _view_offset_during_touch_sequence.reset(); +} + +- (void)observeValueForKeyPath:(NSString*)keyPath + ofObject:(id)object + change:(NSDictionary*)change + context:(void*)context { + if (context == kObservingContext) { + _view->ContentInsetChanged(); + } else { + [super observeValueForKeyPath:keyPath + ofObject:object + change:change + context:context]; + } +} + +- (void)removeView { + UIScrollView* view = (UIScrollView*)[self superview]; + [view removeObserver:self + forKeyPath:NSStringFromSelector(@selector(contentInset))]; + [self removeFromSuperview]; +} + +- (void)updateView:(UIScrollView*)view { + [view addSubview:self]; + view.scrollEnabled = NO; + CGRect parentBounds = [view bounds]; + CGRect frameBounds = CGRectZero; + frameBounds.size = parentBounds.size; + self.frame = frameBounds; + // Remove all existing gestureRecognizers since the header might be reused. + for (UIGestureRecognizer* recognizer in view.gestureRecognizers) { + [view removeGestureRecognizer:recognizer]; + } + [view addObserver:self + forKeyPath:NSStringFromSelector(@selector(contentInset)) + options:NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld + context:kObservingContext]; } @end @@ -296,12 +369,14 @@ text_input_manager_->AddObserver(this); } + host()->render_frame_metadata_provider()->AddObserver(this); host()->SetView(this); } RenderWidgetHostViewIOS::~RenderWidgetHostViewIOS() = default; void RenderWidgetHostViewIOS::Destroy() { + host()->render_frame_metadata_provider()->RemoveObserver(this); if (text_input_manager_) { text_input_manager_->RemoveObserver(this); } @@ -530,6 +605,11 @@ RenderWidgetHostViewBase::UpdateScreenInfo(); } +void RenderWidgetHostViewIOS::OnSynchronizedDisplayPropertiesChanged( + bool rotation) { + host()->SynchronizeVisualProperties(); +} + void RenderWidgetHostViewIOS::UpdateCALayerTree( const gfx::CALayerParams& ca_layer_params) { DCHECK(display_tree_); @@ -738,10 +818,9 @@ void RenderWidgetHostViewIOS::UpdateNativeViewTree(gfx::NativeView view) { if (view) { - [view addSubview:ui_view_->view_]; - ui_view_->view_.get().frame = [view bounds]; + [ui_view_->view_ updateView:(UIScrollView*)view]; } else { - [ui_view_->view_ removeFromSuperview]; + [ui_view_->view_ removeView]; } } @@ -814,4 +893,93 @@ return browser_compositor_->GetCompositor(); } +void RenderWidgetHostViewIOS::GestureEventAck( + const blink::WebGestureEvent& event, + blink::mojom::InputEventResultState ack_result, + blink::mojom::ScrollResultDataPtr scroll_result_data) { + UIScrollView* scrollView = (UIScrollView*)[ui_view_->view_ superview]; + switch (event.GetType()) { + case blink::WebInputEvent::Type::kGestureScrollBegin: + is_scrolling_ = true; + [[scrollView delegate] scrollViewWillBeginDragging:scrollView]; + break; + case blink::WebInputEvent::Type::kGestureScrollUpdate: + if (scroll_result_data && scroll_result_data->root_scroll_offset) { + ApplyRootScrollOffsetChanged(*scroll_result_data->root_scroll_offset); + } + break; + case blink::WebInputEvent::Type::kGestureScrollEnd: { + is_scrolling_ = false; + CGPoint targetOffset = [scrollView contentOffset]; + [[scrollView delegate] scrollViewWillEndDragging:scrollView + withVelocity:CGPoint() + targetContentOffset:&targetOffset]; + [[scrollView delegate] scrollViewDidEndDragging:scrollView + willDecelerate:NO]; + host()->SynchronizeVisualProperties(); + break; + } + default: + break; + } +} + +void RenderWidgetHostViewIOS::ChildDidAckGestureEvent( + const blink::WebGestureEvent& event, + blink::mojom::InputEventResultState ack_result, + blink::mojom::ScrollResultDataPtr scroll_result_data) { + if (scroll_result_data && scroll_result_data->root_scroll_offset) { + ApplyRootScrollOffsetChanged(*scroll_result_data->root_scroll_offset); + } +} + +void RenderWidgetHostViewIOS::ApplyRootScrollOffsetChanged( + const gfx::PointF& root_scroll_offset) { + UIScrollView* scrollView = (UIScrollView*)[ui_view_->view_ superview]; + gfx::PointF scrollOffset = root_scroll_offset; + UIEdgeInsets insets = [scrollView contentInset]; + scrollOffset.Offset(insets.left, insets.top); + CGRect parentBounds = [[ui_view_->view_ superview] bounds]; + gfx::SizeF viewportSize(parentBounds.size); + + // Adjust the viewport so that it doesn't overhang the screen when the + // min controls are shown, otherwise we won't be able to scroll to all + // the content. + RenderViewHostDelegateView* rvh_delegate_view = + host()->delegate()->GetDelegateView(); + viewportSize.Enlarge(0, -(rvh_delegate_view->GetTopControlsMinHeight() + + rvh_delegate_view->GetBottomControlsMinHeight())); + CGRect frameBounds; + frameBounds.origin = scrollOffset.ToCGPoint(); + frameBounds.size = viewportSize.ToCGSize(); + + [ui_view_->view_ setFrame:frameBounds]; + if (last_root_scroll_offset_ != root_scroll_offset) { + [scrollView setContentOffset:root_scroll_offset.ToCGPoint()]; + last_root_scroll_offset_ = root_scroll_offset; + [[scrollView delegate] scrollViewDidScroll:scrollView]; + } +} + +void RenderWidgetHostViewIOS::OnRenderFrameMetadataChangedBeforeActivation( + const cc::RenderFrameMetadata& metadata) { + UIScrollView* scrollView = (UIScrollView*)[ui_view_->view_ superview]; + CGSize newContentSize = metadata.root_layer_size.ToCGSize(); + if (!CGSizeEqualToSize([scrollView contentSize], newContentSize)) { + [scrollView setContentSize:newContentSize]; + } + if (metadata.root_scroll_offset) { + ApplyRootScrollOffsetChanged(*metadata.root_scroll_offset); + } +} + +void RenderWidgetHostViewIOS::ContentInsetChanged() { + if (last_root_scroll_offset_) { + ApplyRootScrollOffsetChanged(*last_root_scroll_offset_); + } + if (!is_scrolling_) { + host()->SynchronizeVisualProperties(); + } +} + } // namespace content
diff --git a/content/browser/utility_process_host.cc b/content/browser/utility_process_host.cc index cf3c0c18..4a5df7b 100644 --- a/content/browser/utility_process_host.cc +++ b/content/browser/utility_process_host.cc
@@ -307,13 +307,13 @@ // Browser command-line switches to propagate to the utility process. static const char* const kSwitchNames[] = { network::switches::kAdditionalTrustTokenKeyCommitments, - network::switches::kBlockThirdPartyCookies, network::switches::kForceEffectiveConnectionType, network::switches::kHostResolverRules, network::switches::kIgnoreCertificateErrorsSPKIList, network::switches::kIgnoreUrlFetcherCertRequests, network::switches::kLogNetLog, network::switches::kNetLogCaptureMode, + network::switches::kTestThirdPartyCookiePhaseout, sandbox::policy::switches::kNoSandbox, #if BUILDFLAG(IS_LINUX) && !BUILDFLAG(IS_CHROMEOS) switches::kDisableDevShmUsage,
diff --git a/content/browser/web_contents/web_contents_view_aura.cc b/content/browser/web_contents/web_contents_view_aura.cc index dc348722b..18ad2b55 100644 --- a/content/browser/web_contents/web_contents_view_aura.cc +++ b/content/browser/web_contents/web_contents_view_aura.cc
@@ -1302,7 +1302,7 @@ } gfx::NativeCursor WebContentsViewAura::GetCursor(const gfx::Point& point) { - return gfx::kNullCursor; + return gfx::NativeCursor{}; } int WebContentsViewAura::GetNonClientComponent(const gfx::Point& point) const {
diff --git a/content/browser/web_contents/web_contents_view_ios.mm b/content/browser/web_contents/web_contents_view_ios.mm index cb7209d..0049200 100644 --- a/content/browser/web_contents/web_contents_view_ios.mm +++ b/content/browser/web_contents/web_contents_view_ios.mm
@@ -38,7 +38,7 @@ // of the WebContentsViewIOS. class WebContentsUIViewHolder { public: - base::scoped_nsobject<UIView> view_; + base::scoped_nsobject<UIScrollView> view_; }; std::unique_ptr<WebContentsView> CreateWebContentsView( @@ -56,7 +56,9 @@ std::unique_ptr<WebContentsViewDelegate> delegate) : web_contents_(web_contents), delegate_(std::move(delegate)) { ui_view_ = std::make_unique<WebContentsUIViewHolder>(); - ui_view_->view_ = base::scoped_nsobject<UIView>([[UIView alloc] init]); + ui_view_->view_ = + base::scoped_nsobject<UIScrollView>([[UIScrollView alloc] init]); + [ui_view_->view_ setScrollEnabled:NO]; [ui_view_->view_ setAutoresizingMask:UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight]; }
diff --git a/content/common/cursors/webcursor_android.cc b/content/common/cursors/webcursor_android.cc index a574b3e..9c5cdc77 100644 --- a/content/common/cursors/webcursor_android.cc +++ b/content/common/cursors/webcursor_android.cc
@@ -8,7 +8,7 @@ namespace content { gfx::NativeCursor WebCursor::GetNativeCursor() { - return gfx::kNullCursor; + return gfx::NativeCursor{}; } #if defined(USE_AURA)
diff --git a/content/public/android/java/src/org/chromium/content/browser/accessibility/AccessibilityNodeInfoUtils.java b/content/public/android/java/src/org/chromium/content/browser/accessibility/AccessibilityNodeInfoUtils.java index fd7dd484..8b90d35 100644 --- a/content/public/android/java/src/org/chromium/content/browser/accessibility/AccessibilityNodeInfoUtils.java +++ b/content/public/android/java/src/org/chromium/content/browser/accessibility/AccessibilityNodeInfoUtils.java
@@ -247,6 +247,11 @@ || action.equals(ACTION_SCROLL_RIGHT) || action.equals(ACTION_SCROLL_LEFT)) { continue; } + // Page actions are dependent on screen size, so ignore them to reduce flakiness. + if (action.equals(ACTION_PAGE_UP) || action.equals(ACTION_PAGE_DOWN) + || action.equals(ACTION_PAGE_LEFT) || action.equals(ACTION_PAGE_RIGHT)) { + continue; + } actionStrings.add(toString(action.getId())); }
diff --git a/content/public/common/content_switch_dependent_feature_overrides.cc b/content/public/common/content_switch_dependent_feature_overrides.cc index 34ebf6c..9e902dc 100644 --- a/content/public/common/content_switch_dependent_feature_overrides.cc +++ b/content/public/common/content_switch_dependent_feature_overrides.cc
@@ -119,10 +119,13 @@ std::cref(net::features::kPartitionedCookies), base::FeatureList::OVERRIDE_ENABLE_FEATURE}, - // Override third-party cookie blocking. - {network::switches::kBlockThirdPartyCookies, + // Test behavior for third-party cookie phaseout. + {network::switches::kTestThirdPartyCookiePhaseout, std::cref(net::features::kForceThirdPartyCookieBlocking), base::FeatureList::OVERRIDE_ENABLE_FEATURE}, + {network::switches::kTestThirdPartyCookiePhaseout, + std::cref(net::features::kThirdPartyStoragePartitioning), + base::FeatureList::OVERRIDE_ENABLE_FEATURE}, // Overrides for --isolation-by-default. {switches::kIsolationByDefault,
diff --git a/content/test/data/accessibility/css/font-size-expected-android-external.txt b/content/test/data/accessibility/css/font-size-expected-android-external.txt index b049d86..0376f18 100644 --- a/content/test/data/accessibility/css/font-size-expected-android-external.txt +++ b/content/test/data/accessibility/css/font-size-expected-android-external.txt
@@ -1,4 +1,4 @@ -WebView focusable focused scrollable actions:[CLEAR_FOCUS, AX_FOCUS, PAGE_DOWN] bundle:[chromeRole="rootWebArea"] +WebView focusable focused scrollable actions:[CLEAR_FOCUS, AX_FOCUS] bundle:[chromeRole="rootWebArea"] ++TextView text:"10.2340920823px" actions:[AX_FOCUS, NEXT, PREVIOUS] bundle:[chromeRole="paragraph"] ++TextView text:"10px" actions:[AX_FOCUS, NEXT, PREVIOUS] bundle:[chromeRole="paragraph"] ++TextView text:"11px" actions:[AX_FOCUS, NEXT, PREVIOUS] bundle:[chromeRole="paragraph"]
diff --git a/content/test/data/accessibility/html/iframe-focus-expected-android-external.txt b/content/test/data/accessibility/html/iframe-focus-expected-android-external.txt index dcacb84..279ab5530 100644 --- a/content/test/data/accessibility/html/iframe-focus-expected-android-external.txt +++ b/content/test/data/accessibility/html/iframe-focus-expected-android-external.txt
@@ -1,10 +1,10 @@ WebView focusable focused scrollable actions:[CLEAR_FOCUS, AX_FOCUS] bundle:[chromeRole="rootWebArea"] ++View actions:[AX_FOCUS] bundle:[chromeRole="genericContainer"] ++++View actions:[AX_FOCUS] bundle:[chromeRole="iframe"] -++++++View scrollable actions:[AX_FOCUS, PAGE_RIGHT] bundle:[chromeRole="rootWebArea"] +++++++View scrollable actions:[AX_FOCUS] bundle:[chromeRole="rootWebArea"] ++++++++Button text:"Button with focus handler" clickable focusable actions:[FOCUS, CLICK, AX_FOCUS, NEXT, PREVIOUS] bundle:[chromeRole="button", clickableScore="300", roleDescription="button"] ++++++++TextView viewIdResName:"focused_log" actions:[AX_FOCUS] bundle:[chromeRole="genericContainer"] ++++View actions:[AX_FOCUS] bundle:[chromeRole="iframe"] -++++++View scrollable actions:[AX_FOCUS, PAGE_RIGHT] bundle:[chromeRole="rootWebArea"] +++++++View scrollable actions:[AX_FOCUS] bundle:[chromeRole="rootWebArea"] ++++++++View actions:[AX_FOCUS] bundle:[chromeRole="genericContainer"] ++++++++++Button text:"Ordinary Button" clickable focusable actions:[FOCUS, CLICK, AX_FOCUS, NEXT, PREVIOUS] bundle:[chromeRole="button", clickableScore="300", roleDescription="button"] \ No newline at end of file
diff --git a/content/test/data/accessibility/html/offscreen-iframe-expected-android-external.txt b/content/test/data/accessibility/html/offscreen-iframe-expected-android-external.txt index 00983cf..56adbf13 100644 --- a/content/test/data/accessibility/html/offscreen-iframe-expected-android-external.txt +++ b/content/test/data/accessibility/html/offscreen-iframe-expected-android-external.txt
@@ -1,6 +1,6 @@ WebView focusable focused scrollable actions:[CLEAR_FOCUS, AX_FOCUS] bundle:[chromeRole="rootWebArea"] ++View actions:[AX_FOCUS] bundle:[chromeRole="genericContainer"] ++++View actions:[AX_FOCUS] bundle:[chromeRole="iframe"] -++++++View scrollable actions:[AX_FOCUS, PAGE_DOWN] bundle:[chromeRole="rootWebArea"] +++++++View scrollable actions:[AX_FOCUS] bundle:[chromeRole="rootWebArea"] ++++++++View text:"iframe_onscreen" actions:[AX_FOCUS, NEXT, PREVIOUS] bundle:[chromeRole="group"] ++++++++View text:"iframe_offscreen" actions:[AX_FOCUS, NEXT, PREVIOUS] bundle:[chromeRole="group"] \ No newline at end of file
diff --git a/content/test/data/accessibility/html/overflow-actions-expected-android-external.txt b/content/test/data/accessibility/html/overflow-actions-expected-android-external.txt index ebc25bb..353540eb 100644 --- a/content/test/data/accessibility/html/overflow-actions-expected-android-external.txt +++ b/content/test/data/accessibility/html/overflow-actions-expected-android-external.txt
@@ -1,5 +1,5 @@ WebView focusable focused scrollable actions:[CLEAR_FOCUS, AX_FOCUS] bundle:[chromeRole="rootWebArea"] -++View text:"Example Paragraph 1 Example Paragraph 2" scrollable actions:[AX_FOCUS, NEXT, PREVIOUS, PAGE_DOWN] bundle:[chromeRole="genericContainer"] +++View text:"Example Paragraph 1 Example Paragraph 2" scrollable actions:[AX_FOCUS, NEXT, PREVIOUS] bundle:[chromeRole="genericContainer"] ++++TextView text:"Example Paragraph 1" actions:[AX_FOCUS, NEXT, PREVIOUS] bundle:[chromeRole="paragraph"] ++++TextView text:"Example Paragraph 2" actions:[AX_FOCUS, NEXT, PREVIOUS] bundle:[chromeRole="paragraph"] ++View actions:[AX_FOCUS] bundle:[chromeRole="genericContainer"]
diff --git a/content/test/data/accessibility/html/scrollable-expected-android-external.txt b/content/test/data/accessibility/html/scrollable-expected-android-external.txt index 738e93fa..1887df11 100644 --- a/content/test/data/accessibility/html/scrollable-expected-android-external.txt +++ b/content/test/data/accessibility/html/scrollable-expected-android-external.txt
@@ -1,4 +1,4 @@ WebView focusable focused scrollable actions:[CLEAR_FOCUS, AX_FOCUS] bundle:[chromeRole="rootWebArea"] ++TextView text:"not scrollable" actions:[AX_FOCUS, NEXT, PREVIOUS] bundle:[chromeRole="genericContainer"] -++TextView scrollable actions:[AX_FOCUS, PAGE_RIGHT] bundle:[chromeRole="genericContainer"] -++TextView scrollable actions:[AX_FOCUS, PAGE_DOWN] bundle:[chromeRole="genericContainer"] \ No newline at end of file +++TextView scrollable actions:[AX_FOCUS] bundle:[chromeRole="genericContainer"] +++TextView scrollable actions:[AX_FOCUS] bundle:[chromeRole="genericContainer"] \ No newline at end of file
diff --git a/content/test/data/accessibility/html/scrollable-overflow-expected-android-external.txt b/content/test/data/accessibility/html/scrollable-overflow-expected-android-external.txt index 4502258..0e0945e 100644 --- a/content/test/data/accessibility/html/scrollable-overflow-expected-android-external.txt +++ b/content/test/data/accessibility/html/scrollable-overflow-expected-android-external.txt
@@ -1,26 +1,26 @@ WebView focusable focused scrollable actions:[CLEAR_FOCUS, AX_FOCUS] bundle:[chromeRole="rootWebArea"] ++TextView text:"no overflow" actions:[AX_FOCUS, NEXT, PREVIOUS] bundle:[chromeRole="paragraph"] ++TextView text:"clipped large lots of text more text" actions:[AX_FOCUS, NEXT, PREVIOUS] bundle:[chromeRole="paragraph"] -++EditText text:"ab cd" clickable editable focusable multiLine scrollable textSelectionStart:0 textSelectionEnd:0 actions:[FOCUS, CLICK, AX_FOCUS, NEXT, PREVIOUS, COPY, PASTE, CUT, SET_SELECTION, SET_TEXT, PAGE_DOWN, IME_ENTER] bundle:[chromeRole="textField", clickableScore="300"] +++EditText text:"ab cd" clickable editable focusable multiLine scrollable textSelectionStart:0 textSelectionEnd:0 actions:[FOCUS, CLICK, AX_FOCUS, NEXT, PREVIOUS, COPY, PASTE, CUT, SET_SELECTION, SET_TEXT, IME_ENTER] bundle:[chromeRole="textField", clickableScore="300"] ++View actions:[AX_FOCUS] bundle:[chromeRole="genericContainer"] ++++TextView text:"tiny" actions:[AX_FOCUS, NEXT, PREVIOUS] bundle:[chromeRole="paragraph"] ++View actions:[AX_FOCUS] bundle:[chromeRole="group"] ++++View actions:[AX_FOCUS] bundle:[chromeRole="genericContainer"] ++++++TextView text:"x=hidden" actions:[AX_FOCUS, NEXT, PREVIOUS] bundle:[chromeRole="paragraph"] -++++View text:"x=hidden" scrollable actions:[AX_FOCUS, NEXT, PREVIOUS, PAGE_DOWN, PAGE_RIGHT] bundle:[chromeRole="genericContainer"] +++++View text:"x=hidden" scrollable actions:[AX_FOCUS, NEXT, PREVIOUS] bundle:[chromeRole="genericContainer"] ++++++TextView text:"x=hidden" actions:[AX_FOCUS, NEXT, PREVIOUS] bundle:[chromeRole="paragraph"] -++++View text:"x=auto" scrollable actions:[AX_FOCUS, NEXT, PREVIOUS, PAGE_RIGHT] bundle:[chromeRole="genericContainer"] +++++View text:"x=auto" scrollable actions:[AX_FOCUS, NEXT, PREVIOUS] bundle:[chromeRole="genericContainer"] ++++++TextView text:"x=auto" actions:[AX_FOCUS, NEXT, PREVIOUS] bundle:[chromeRole="paragraph"] -++++View text:"x=scroll" scrollable actions:[AX_FOCUS, NEXT, PREVIOUS, PAGE_RIGHT] bundle:[chromeRole="genericContainer"] +++++View text:"x=scroll" scrollable actions:[AX_FOCUS, NEXT, PREVIOUS] bundle:[chromeRole="genericContainer"] ++++++TextView text:"x=scroll" actions:[AX_FOCUS, NEXT, PREVIOUS] bundle:[chromeRole="paragraph"] ++++TextView text:"x=visible" actions:[AX_FOCUS, NEXT, PREVIOUS] bundle:[chromeRole="paragraph"] ++View actions:[AX_FOCUS] bundle:[chromeRole="group"] ++++View actions:[AX_FOCUS] bundle:[chromeRole="genericContainer"] ++++++TextView text:"y=hidden" actions:[AX_FOCUS, NEXT, PREVIOUS] bundle:[chromeRole="paragraph"] -++++View text:"y=hidden" scrollable actions:[AX_FOCUS, NEXT, PREVIOUS, PAGE_DOWN, PAGE_RIGHT] bundle:[chromeRole="genericContainer"] +++++View text:"y=hidden" scrollable actions:[AX_FOCUS, NEXT, PREVIOUS] bundle:[chromeRole="genericContainer"] ++++++TextView text:"y=hidden" actions:[AX_FOCUS, NEXT, PREVIOUS] bundle:[chromeRole="paragraph"] -++++View text:"y=auto" scrollable actions:[AX_FOCUS, NEXT, PREVIOUS, PAGE_DOWN] bundle:[chromeRole="genericContainer"] +++++View text:"y=auto" scrollable actions:[AX_FOCUS, NEXT, PREVIOUS] bundle:[chromeRole="genericContainer"] ++++++TextView text:"y=auto" actions:[AX_FOCUS, NEXT, PREVIOUS] bundle:[chromeRole="paragraph"] -++++View text:"y=scroll" scrollable actions:[AX_FOCUS, NEXT, PREVIOUS, PAGE_DOWN] bundle:[chromeRole="genericContainer"] +++++View text:"y=scroll" scrollable actions:[AX_FOCUS, NEXT, PREVIOUS] bundle:[chromeRole="genericContainer"] ++++++TextView text:"y=scroll" actions:[AX_FOCUS, NEXT, PREVIOUS] bundle:[chromeRole="paragraph"] ++++TextView text:"y=visible" actions:[AX_FOCUS, NEXT, PREVIOUS] bundle:[chromeRole="paragraph"] \ No newline at end of file
diff --git a/content/test/data/accessibility/html/scrollable-textarea-expected-android-external.txt b/content/test/data/accessibility/html/scrollable-textarea-expected-android-external.txt index fa92bc719..63d31a6 100644 --- a/content/test/data/accessibility/html/scrollable-textarea-expected-android-external.txt +++ b/content/test/data/accessibility/html/scrollable-textarea-expected-android-external.txt
@@ -1,4 +1,4 @@ WebView focusable focused scrollable actions:[CLEAR_FOCUS, AX_FOCUS] bundle:[chromeRole="rootWebArea"] ++View actions:[AX_FOCUS] bundle:[chromeRole="genericContainer"] ++++EditText text:"little" clickable editable focusable multiLine textSelectionStart:0 textSelectionEnd:0 actions:[FOCUS, CLICK, AX_FOCUS, NEXT, PREVIOUS, COPY, PASTE, CUT, SET_SELECTION, SET_TEXT, IME_ENTER] bundle:[chromeRole="textField", clickableScore="300"] -++++EditText text:"lots+of+text+ lots+of+text+ lots+of+text+ lots+of+text+ lots+of+text+ lots+of+text+ lots+of+text+ lots+of+text+ lots+of+text+ lots+of+text+ lots+of+text+ lots+of+text" clickable editable focusable multiLine scrollable textSelectionStart:0 textSelectionEnd:0 actions:[FOCUS, CLICK, AX_FOCUS, NEXT, PREVIOUS, COPY, PASTE, CUT, SET_SELECTION, SET_TEXT, PAGE_DOWN, IME_ENTER] bundle:[chromeRole="textField", clickableScore="300"] \ No newline at end of file +++++EditText text:"lots+of+text+ lots+of+text+ lots+of+text+ lots+of+text+ lots+of+text+ lots+of+text+ lots+of+text+ lots+of+text+ lots+of+text+ lots+of+text+ lots+of+text+ lots+of+text" clickable editable focusable multiLine scrollable textSelectionStart:0 textSelectionEnd:0 actions:[FOCUS, CLICK, AX_FOCUS, NEXT, PREVIOUS, COPY, PASTE, CUT, SET_SELECTION, SET_TEXT, IME_ENTER] bundle:[chromeRole="textField", clickableScore="300"] \ No newline at end of file
diff --git a/device/vr/android/arcore/arcore_gl.cc b/device/vr/android/arcore/arcore_gl.cc index 78a72e6c..6242648 100644 --- a/device/vr/android/arcore/arcore_gl.cc +++ b/device/vr/android/arcore/arcore_gl.cc
@@ -1423,13 +1423,6 @@ &ArCoreGl::OnBindingDisconnect, weak_ptr_factory_.GetWeakPtr())); } -void ArCoreGl::SetInputSourceButtonListener( - mojo::PendingAssociatedRemote<device::mojom::XRInputSourceButtonListener>) { - // Input eventing is not supported. This call should not - // be made on this device. - frame_data_receiver_.ReportBadMessage("Input eventing is not supported."); -} - void ArCoreGl::SubscribeToHitTest( mojom::XRNativeOriginInformationPtr native_origin_information, const std::vector<mojom::EntityTypeForHitTest>& entity_types,
diff --git a/device/vr/android/arcore/arcore_gl.h b/device/vr/android/arcore/arcore_gl.h index 8cd5291f..decb4cd 100644 --- a/device/vr/android/arcore/arcore_gl.h +++ b/device/vr/android/arcore/arcore_gl.h
@@ -145,9 +145,6 @@ void GetEnvironmentIntegrationProvider( mojo::PendingAssociatedReceiver<mojom::XREnvironmentIntegrationProvider> environment_provider) override; - void SetInputSourceButtonListener( - mojo::PendingAssociatedRemote<device::mojom::XRInputSourceButtonListener>) - override; // XRPresentationProvider void SubmitFrameMissing(int16_t frame_index, const gpu::SyncToken&) override;
diff --git a/device/vr/android/cardboard/cardboard_render_loop.cc b/device/vr/android/cardboard/cardboard_render_loop.cc index 2a8f8b8..9ff84d1b 100644 --- a/device/vr/android/cardboard/cardboard_render_loop.cc +++ b/device/vr/android/cardboard/cardboard_render_loop.cc
@@ -72,13 +72,6 @@ "Environment integration is not supported."); } -void CardboardRenderLoop::SetInputSourceButtonListener( - mojo::PendingAssociatedRemote<device::mojom::XRInputSourceButtonListener>) { - // Input eventing is not supported. This call should not - // be made on this device. - frame_data_receiver_.ReportBadMessage("Input eventing is not supported."); -} - void CardboardRenderLoop::CreateSession( CardboardRequestSessionCallback session_request_callback, base::OnceClosure session_shutdown_callback,
diff --git a/device/vr/android/cardboard/cardboard_render_loop.h b/device/vr/android/cardboard/cardboard_render_loop.h index 4f128fd..029cd80a 100644 --- a/device/vr/android/cardboard/cardboard_render_loop.h +++ b/device/vr/android/cardboard/cardboard_render_loop.h
@@ -61,9 +61,6 @@ // mojom::XRFrameDataProvider void GetFrameData(mojom::XRFrameDataRequestOptionsPtr options, GetFrameDataCallback callback) override; - void SetInputSourceButtonListener( - mojo::PendingAssociatedRemote<device::mojom::XRInputSourceButtonListener> - input_listener_remote) override; void GetEnvironmentIntegrationProvider( mojo::PendingAssociatedReceiver<
diff --git a/device/vr/orientation/orientation_session.cc b/device/vr/orientation/orientation_session.cc index 588c58c..d8ef2f7 100644 --- a/device/vr/orientation/orientation_session.cc +++ b/device/vr/orientation/orientation_session.cc
@@ -52,13 +52,6 @@ "Environment integration is not supported."); } -void VROrientationSession::SetInputSourceButtonListener( - mojo::PendingAssociatedRemote<device::mojom::XRInputSourceButtonListener>) { - // Input eventing is not supported. This call should not - // be made on this device. - magic_window_receiver_.ReportBadMessage("Input eventing is not supported."); -} - // XRSessionController void VROrientationSession::SetFrameDataRestricted(bool frame_data_restricted) { restrict_frame_data_ = frame_data_restricted;
diff --git a/device/vr/orientation/orientation_session.h b/device/vr/orientation/orientation_session.h index dcba850..270724b 100644 --- a/device/vr/orientation/orientation_session.h +++ b/device/vr/orientation/orientation_session.h
@@ -35,10 +35,6 @@ void GetEnvironmentIntegrationProvider( mojo::PendingAssociatedReceiver<mojom::XREnvironmentIntegrationProvider> environment_provider) override; - void SetInputSourceButtonListener( - mojo::PendingAssociatedRemote<device::mojom::XRInputSourceButtonListener>) - override; - // Accessible to tests. protected: // mojom::XRFrameDataProvider
diff --git a/device/vr/public/mojom/vr_service.mojom b/device/vr/public/mojom/vr_service.mojom index 905ed51a..35033948 100644 --- a/device/vr/public/mojom/vr_service.mojom +++ b/device/vr/public/mojom/vr_service.mojom
@@ -148,10 +148,6 @@ // This structure contains a description of the device's active configuration // for the session being established. struct XRSessionDeviceConfig { - // Indicates whether the device backing this session sends input events solely - // via eventing (as opposed to polling). - bool uses_input_eventing; - // The default scale that should be applied to the native framebuffer size // unless overridden by the developer. float default_framebuffer_scale = 1.0; @@ -821,10 +817,7 @@ array<XRView> views; // For immersive sessions only, reports the state of all active input devices - // at the time of this frame. If a session has indicated that it - // |uses_input_eventing|, then these input states should not fire select, - // squeeze, or similar events, but all controller state, including current - // button states, should still be updated. + // at the time of this frame. all controller state, including current array<XRInputSourceState>? input_state; // Stage parameters may be provided per-frame, or only re-computed @@ -1082,13 +1075,6 @@ DetachAnchor(uint64 anchor_id); }; -// Provides a mechanism for a channel to plumb up any button click events -// separately from polling, to provide better latency/position tracking for -// those events. -interface XRInputSourceButtonListener { - OnButtonEvent(XRInputSourceState input_source); -}; - struct XRFrameDataRequestOptions { // Controls whether |XRFrameData.light_estimation_data| should be populated // by the request to |XRFrameDataProvider.GetFrameData()|. @@ -1113,8 +1099,6 @@ GetEnvironmentIntegrationProvider( pending_associated_receiver<XREnvironmentIntegrationProvider> environment_provider); - SetInputSourceButtonListener( - pending_associated_remote<XRInputSourceButtonListener>? event_listener); }; // Provides the necessary functionality for sending frames to a headset.
diff --git a/device/vr/windows/compositor_base.cc b/device/vr/windows/compositor_base.cc index 90e0d54e..4d24623 100644 --- a/device/vr/windows/compositor_base.cc +++ b/device/vr/windows/compositor_base.cc
@@ -179,7 +179,6 @@ presentation_receiver_.reset(); frame_data_receiver_.reset(); overlay_receiver_.reset(); - input_event_listener_.reset(); StopRuntime(); } @@ -193,12 +192,6 @@ SetOverlayAndWebXRVisibility(false, true); } -bool XRCompositorCommon::UsesInputEventing() { - // By default we don't use input eventing. Any subclass that does will need - // to override this. - return false; -} - void XRCompositorCommon::UpdateLayerBounds(int16_t frame_id, const gfx::RectF& left_bounds, const gfx::RectF& right_bounds, @@ -306,7 +299,6 @@ enabled_features_.end()); session->device_config = device::mojom::XRSessionDeviceConfig::New(); - session->device_config->uses_input_eventing = UsesInputEventing(); session->device_config->enable_anti_aliasing = CanEnableAntiAliasing(); session->device_config->views = GetDefaultViews(); session->enviroment_blend_mode = GetEnvironmentBlendMode(options->mode); @@ -479,14 +471,6 @@ } } -void XRCompositorCommon::SetInputSourceButtonListener( - mojo::PendingAssociatedRemote<device::mojom::XRInputSourceButtonListener> - input_listener_remote) { - DCHECK(UsesInputEventing()); - input_event_listener_.reset(); - input_event_listener_.Bind(std::move(input_listener_remote)); -} - void XRCompositorCommon::SendFrameData( XRFrameDataProvider::GetFrameDataCallback callback, mojom::XRFrameDataPtr frame_data) {
diff --git a/device/vr/windows/compositor_base.h b/device/vr/windows/compositor_base.h index caa1995..3e1a942 100644 --- a/device/vr/windows/compositor_base.h +++ b/device/vr/windows/compositor_base.h
@@ -96,9 +96,6 @@ void GetFrameData(mojom::XRFrameDataRequestOptionsPtr options, XRFrameDataProvider::GetFrameDataCallback callback) final; - void SetInputSourceButtonListener( - mojo::PendingAssociatedRemote<device::mojom::XRInputSourceButtonListener> - input_listener_remote) override; void GetEnvironmentIntegrationProvider( mojo::PendingAssociatedReceiver< @@ -110,7 +107,6 @@ virtual gpu::gles2::GLES2Interface* GetContextGL() = 0; protected: - virtual bool UsesInputEventing(); void SetVisibilityState(mojom::XRVisibilityState visibility_state); const mojom::VRStageParametersPtr& GetCurrentStageParameters() const; void SetStageParameters(mojom::VRStageParametersPtr stage_parameters); @@ -121,8 +117,6 @@ // Allow derived classes to call methods on the main thread. scoped_refptr<base::SingleThreadTaskRunner> main_thread_task_runner_; - mojo::AssociatedRemote<mojom::XRInputSourceButtonListener> - input_event_listener_; // Derived classes override this to be notified to clear its pending frame. virtual void ClearPendingFrameInternal() {}
diff --git a/docs/linux/build_instructions.md b/docs/linux/build_instructions.md index ff04be2..b51299e 100644 --- a/docs/linux/build_instructions.md +++ b/docs/linux/build_instructions.md
@@ -412,8 +412,8 @@ ```shell $ sudo pacman -S --needed python perl gcc gcc-libs bison flex gperf pkgconfig \ -nss alsa-lib glib2 gtk3 nspr freetype2 cairo dbus libgnome-keyring \ -xorg-server-xvfb xorg-xdpyinfo +nss alsa-lib glib2 gtk3 nspr freetype2 cairo dbus xorg-server-xvfb \ +xorg-xdpyinfo ``` For the optional packages on Arch Linux: @@ -447,11 +447,10 @@ cups-devel dbus-devel dbus-glib-devel expat-devel fontconfig-devel \ freetype-devel gcc-c++ glib2-devel glibc.i686 gperf glib2-devel \ gtk3-devel java-1.*.0-openjdk-devel libatomic libcap-devel libffi-devel \ -libgcc.i686 libgnome-keyring-devel libjpeg-devel libstdc++.i686 libX11-devel \ -libXScrnSaver-devel libXtst-devel libxkbcommon-x11-devel ncurses-compat-libs \ -nspr-devel nss-devel pam-devel pango-devel pciutils-devel \ -pulseaudio-libs-devel zlib.i686 httpd mod_ssl php php-cli python-psutil wdiff \ -xorg-x11-server-Xvfb' +libgcc.i686 libjpeg-devel libstdc++.i686 libX11-devel libXScrnSaver-devel \ +libXtst-devel libxkbcommon-x11-devel ncurses-compat-libs nspr-devel nss-devel \ +pam-devel pango-devel pciutils-devel pulseaudio-libs-devel zlib.i686 httpd \ +mod_ssl php php-cli python-psutil wdiff xorg-x11-server-Xvfb' ``` The fonts needed by Blink's web tests can be obtained by following [these
diff --git a/docs/linux/password_storage.md b/docs/linux/password_storage.md index 0418e64..e32edc6f 100644 --- a/docs/linux/password_storage.md +++ b/docs/linux/password_storage.md
@@ -1,21 +1,22 @@ # Linux Password Storage -On Linux, Chromium can store passwords in three ways: +On Linux, Chromium can store passwords in four ways: -* GNOME Keyring +* GNOME Libsecret * KWallet 4 +* KWallet 5 * plain text Chromium chooses which store to use automatically, based on your desktop environment. -Passwords stored in GNOME Keyring or KWallet are encrypted on disk, and access +Passwords stored in KWallet are encrypted on disk, and access to them is controlled by dedicated daemon software. Passwords stored in plain -text are not encrypted. Because of this, when either GNOME Keyring or KWallet is +text are not encrypted. Because of this, when KWallet is in use, any unencrypted passwords that have been stored previously are automatically moved into the encrypted store. -Support for using GNOME Keyring and KWallet was added in version 6, but using +Support for using KWallet was added in version 6, but using these (when available) was not made the default mode until version 12. ## Details @@ -23,8 +24,9 @@ Although Chromium chooses which store to use automatically, the store to use can also be specified with a command line argument: -* `--password-store=gnome` (to use GNOME Keyring) -* `--password-store=kwallet` (to use KWallet) +* `--password-store=gnome-libsecret` (to use GNOME Libsecret) +* `--password-store=kwallet` (to use KWallet 4) +* `--password-store=kwallet5` (to use KWallet 5) * `--password-store=basic` (to use the plain text store) Note that Chromium will fall back to `basic` if a requested or autodetected
diff --git a/docs/security/faq.md b/docs/security/faq.md index ab55f6bf..1ce9576 100644 --- a/docs/security/faq.md +++ b/docs/security/faq.md
@@ -851,11 +851,11 @@ encrypted on disk with a key that is then stored in the user's Keychain. See [Issue 466638](https://crbug.com/466638) for further explanation. * On Linux, Chrome previously stored credentials directly in the user's - Gnome Keyring or KWallet, but for technical reasons, it has switched to + Gnome Secret Service or KWallet, but for technical reasons, it has switched to storing the credentials in "Login Data" in the Chrome user's profile directory, but encrypted on disk with a key that is then stored in the user's Gnome - Keyring or KWallet. If there is no available Keyring or KWallet, the data is - not encrypted when stored. + Secret Service or KWallet. If there is no available Secret Service or KWallet, + the data is not encrypted when stored. * On iOS, passwords are currently stored directly in the iOS Keychain and referenced from the rest of the metadata stored in a separate DB. The plan there is to just store them in plain text in the DB, because iOS gives
diff --git a/fuchsia_web/runners/cast/test/cast_runner_launcher.cc b/fuchsia_web/runners/cast/test/cast_runner_launcher.cc index d2aca2e..92f5640 100644 --- a/fuchsia_web/runners/cast/test/cast_runner_launcher.cc +++ b/fuchsia_web/runners/cast/test/cast_runner_launcher.cc
@@ -22,6 +22,7 @@ #include <fuchsia/ui/composition/cpp/fidl.h> #include <fuchsia/ui/scenic/cpp/fidl.h> #include <fuchsia/web/cpp/fidl.h> +#include <lib/vfs/cpp/pseudo_dir.h> #include <lib/vfs/cpp/remote_dir.h> #include <memory>
diff --git a/fuchsia_web/runners/cast/test/fake_cast_agent.cc b/fuchsia_web/runners/cast/test/fake_cast_agent.cc index 1ab2eca9..331389b 100644 --- a/fuchsia_web/runners/cast/test/fake_cast_agent.cc +++ b/fuchsia_web/runners/cast/test/fake_cast_agent.cc
@@ -4,6 +4,8 @@ #include "fuchsia_web/runners/cast/test/fake_cast_agent.h" +#include <lib/vfs/cpp/service.h> + #include <memory> #include <utility>
diff --git a/fuchsia_web/webengine/test/web_engine_browser_test.cc b/fuchsia_web/webengine/test/web_engine_browser_test.cc index 8e1a338..c3e487f 100644 --- a/fuchsia_web/webengine/test/web_engine_browser_test.cc +++ b/fuchsia_web/webengine/test/web_engine_browser_test.cc
@@ -7,6 +7,8 @@ #include <fuchsia/web/cpp/fidl.h> #include <lib/sys/cpp/component_context.h> #include <lib/sys/cpp/service_directory.h> +#include <lib/vfs/cpp/pseudo_dir.h> + #include <vector> #include "base/command_line.h"
diff --git a/gpu/command_buffer/service/shared_image/d3d_image_backing.cc b/gpu/command_buffer/service/shared_image/d3d_image_backing.cc index 6408e4b..3bb031a5 100644 --- a/gpu/command_buffer/service/shared_image/d3d_image_backing.cc +++ b/gpu/command_buffer/service/shared_image/d3d_image_backing.cc
@@ -57,6 +57,8 @@ case DXGI_FORMAT_NV12: case DXGI_FORMAT_P010: return 2; + case DXGI_FORMAT_R8_UNORM: + case DXGI_FORMAT_R8G8_UNORM: case DXGI_FORMAT_R8G8B8A8_UNORM: case DXGI_FORMAT_B8G8R8A8_UNORM: case DXGI_FORMAT_R10G10B10A2_UNORM:
diff --git a/infra/config/generated/builders/ci/chromeos-js-code-coverage/properties.json b/infra/config/generated/builders/ci/chromeos-js-code-coverage/properties.json index b8e87de..726c165 100644 --- a/infra/config/generated/builders/ci/chromeos-js-code-coverage/properties.json +++ b/infra/config/generated/builders/ci/chromeos-js-code-coverage/properties.json
@@ -43,6 +43,10 @@ { "builder": "chromeos-js-code-coverage", "group": "tryserver.chromium.linux" + }, + { + "builder": "chromeos-js-coverage-rel", + "group": "tryserver.chromium.linux" } ] }
diff --git a/infra/config/generated/builders/try/chromeos-js-coverage-rel/properties.json b/infra/config/generated/builders/try/chromeos-js-coverage-rel/properties.json new file mode 100644 index 0000000..7a3d8ee --- /dev/null +++ b/infra/config/generated/builders/try/chromeos-js-coverage-rel/properties.json
@@ -0,0 +1,65 @@ +{ + "$build/chromium_tests_builder_config": { + "builder_config": { + "builder_db": { + "entries": [ + { + "builder_id": { + "bucket": "ci", + "builder": "chromeos-js-code-coverage", + "project": "chromium" + }, + "builder_spec": { + "build_gs_bucket": "chromium-fyi-archive", + "builder_group": "chromium.coverage", + "execution_mode": "COMPILE_AND_TEST", + "legacy_chromium_config": { + "apply_configs": [ + "mb" + ], + "build_config": "Release", + "config": "chromium", + "target_bits": 64, + "target_platform": "chromeos" + }, + "legacy_gclient_config": { + "apply_configs": [ + "chromeos" + ], + "config": "chromium" + } + } + } + ] + }, + "builder_ids": [ + { + "bucket": "ci", + "builder": "chromeos-js-code-coverage", + "project": "chromium" + } + ] + } + }, + "$build/code_coverage": { + "coverage_test_types": [ + "unit", + "overall" + ], + "use_javascript_coverage": true + }, + "$build/reclient": { + "instance": "rbe-chromium-untrusted", + "metrics_project": "chromium-reclient-metrics" + }, + "$recipe_engine/resultdb/test_presentation": { + "column_keys": [], + "grouping_keys": [ + "status", + "v.test_suite" + ] + }, + "builder_group": "tryserver.chromium.linux", + "cq": "path-based", + "recipe": "chromium_trybot" +} \ No newline at end of file
diff --git a/infra/config/generated/cq-builders.md b/infra/config/generated/cq-builders.md index 5881f8d..720d8a2e 100644 --- a/infra/config/generated/cq-builders.md +++ b/infra/config/generated/cq-builders.md
@@ -543,6 +543,12 @@ as required builders. ### chromium +* [chromeos-js-coverage-rel](https://ci.chromium.org/p/chromium/builders/try/chromeos-js-coverage-rel) ([definition](https://cs.chromium.org/search?q=+file:/try/.*\.star$+""chromeos-js-coverage-rel"")) + * Experiment percentage: 10.0 + + Location filters: + * [`//.*\.(js|ts)`](https://cs.chromium.org/search?q=+file:.*\.(js|ts)) + * [dawn-android-arm64-deps-rel](https://ci.chromium.org/p/chromium/builders/try/dawn-android-arm64-deps-rel) ([definition](https://cs.chromium.org/search?q=+file:/try/.*\.star$+""dawn-android-arm64-deps-rel"")) * Experiment percentage: 100.0
diff --git a/infra/config/generated/luci/commit-queue.cfg b/infra/config/generated/luci/commit-queue.cfg index 9222d913a..353b2a5 100644 --- a/infra/config/generated/luci/commit-queue.cfg +++ b/infra/config/generated/luci/commit-queue.cfg
@@ -1303,6 +1303,32 @@ includable_only: true } builders { + name: "chromium/try/chromeos-js-coverage-rel" + experiment_percentage: 10 + location_filters { + gerrit_host_regexp: ".*" + gerrit_project_regexp: ".*" + path_regexp: ".*\\.(js|ts)" + } + location_filters { + gerrit_host_regexp: ".*" + gerrit_project_regexp: ".*" + path_regexp: "docs/.+" + exclude: true + } + location_filters { + gerrit_host_regexp: ".*" + gerrit_project_regexp: ".*" + path_regexp: "infra/config/.+" + exclude: true + } + location_filters { + gerrit_host_regexp: ".*" + gerrit_project_regexp: ".*" + path_regexp: "infra/config/generated/builders/try/chromeos-js-coverage-rel/.+" + } + } + builders { name: "chromium/try/chromeos-octopus-rel" includable_only: true }
diff --git a/infra/config/generated/luci/cr-buildbucket-dev.cfg b/infra/config/generated/luci/cr-buildbucket-dev.cfg index 6e0d953..8ea1171 100644 --- a/infra/config/generated/luci/cr-buildbucket-dev.cfg +++ b/infra/config/generated/luci/cr-buildbucket-dev.cfg
@@ -468,7 +468,7 @@ name: "mac-arm-rel-dev" swarming_host: "chromium-swarm-dev.appspot.com" dimensions: "cpu:arm64" - dimensions: "os:Mac-12|Mac-13" + dimensions: "os:Mac-13" exe { cipd_package: "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build" cipd_version: "refs/heads/main" @@ -558,7 +558,7 @@ name: "mac-rel-dev" swarming_host: "chromium-swarm-dev.appspot.com" dimensions: "cpu:x86-64" - dimensions: "os:Mac-12|Mac-13" + dimensions: "os:Mac-13" exe { cipd_package: "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build" cipd_version: "refs/heads/main"
diff --git a/infra/config/generated/luci/cr-buildbucket.cfg b/infra/config/generated/luci/cr-buildbucket.cfg index 32733be..3f5ff42 100644 --- a/infra/config/generated/luci/cr-buildbucket.cfg +++ b/infra/config/generated/luci/cr-buildbucket.cfg
@@ -99,7 +99,7 @@ dimensions: "builderless:1" dimensions: "cpu:x86-64" dimensions: "free_space:standard" - dimensions: "os:Mac-12|Mac-13" + dimensions: "os:Mac-13" dimensions: "pool:luci.chromium.ci" exe { cipd_package: "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build" @@ -3948,7 +3948,7 @@ dimensions: "builderless:1" dimensions: "cpu:x86-64" dimensions: "free_space:standard" - dimensions: "os:Mac-12|Mac-13" + dimensions: "os:Mac-13" dimensions: "pool:luci.chromium.ci" exe { cipd_package: "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build" @@ -4031,7 +4031,7 @@ dimensions: "builderless:1" dimensions: "cpu:x86-64" dimensions: "free_space:standard" - dimensions: "os:Mac-12|Mac-13" + dimensions: "os:Mac-13" dimensions: "pool:luci.chromium.ci" dimensions: "ssd:1" exe { @@ -4116,7 +4116,7 @@ dimensions: "builderless:1" dimensions: "cpu:x86-64" dimensions: "free_space:standard" - dimensions: "os:Mac-12|Mac-13" + dimensions: "os:Mac-13" dimensions: "pool:luci.chromium.ci" exe { cipd_package: "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build" @@ -4199,7 +4199,7 @@ dimensions: "builderless:1" dimensions: "cpu:arm64" dimensions: "free_space:standard" - dimensions: "os:Mac-12|Mac-13" + dimensions: "os:Mac-13" dimensions: "pool:luci.chromium.ci" exe { cipd_package: "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build" @@ -4699,7 +4699,7 @@ dimensions: "builderless:1" dimensions: "cpu:x86-64" dimensions: "free_space:standard" - dimensions: "os:Mac-12|Mac-13" + dimensions: "os:Mac-13" dimensions: "pool:luci.chromium.ci" exe { cipd_package: "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build" @@ -4786,7 +4786,7 @@ dimensions: "builderless:1" dimensions: "cpu:x86-64" dimensions: "free_space:standard" - dimensions: "os:Mac-12|Mac-13" + dimensions: "os:Mac-13" dimensions: "pool:luci.chromium.ci" dimensions: "ssd:1" exe { @@ -11507,7 +11507,7 @@ dimensions: "builder:Libfuzzer Upload Mac ASan" dimensions: "cores:24" dimensions: "cpu:x86-64" - dimensions: "os:Mac-12|Mac-13" + dimensions: "os:Mac-13" dimensions: "pool:luci.chromium.ci" exe { cipd_package: "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build" @@ -11662,7 +11662,7 @@ dimensions: "builder:Libfuzzer Upload iOS Catalyst Debug" dimensions: "cores:12" dimensions: "cpu:x86-64" - dimensions: "os:Mac-12|Mac-13" + dimensions: "os:Mac-13" dimensions: "pool:luci.chromium.ci" exe { cipd_package: "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build" @@ -14617,7 +14617,7 @@ dimensions: "builder:Mac ASAN Release" dimensions: "cores:12" dimensions: "cpu:x86-64" - dimensions: "os:Mac-12|Mac-13" + dimensions: "os:Mac-13" dimensions: "pool:luci.chromium.ci" exe { cipd_package: "infra/chromium/bootstrapper/${platform}" @@ -14702,7 +14702,7 @@ dimensions: "builder:Mac ASAN Release Media" dimensions: "cores:12" dimensions: "cpu:x86-64" - dimensions: "os:Mac-12|Mac-13" + dimensions: "os:Mac-13" dimensions: "pool:luci.chromium.ci" exe { cipd_package: "infra/chromium/bootstrapper/${platform}" @@ -14786,7 +14786,7 @@ swarming_host: "chromium-swarm.appspot.com" dimensions: "builder:Mac ASan 64 Builder" dimensions: "cpu:x86-64" - dimensions: "os:Mac-12|Mac-13" + dimensions: "os:Mac-13" dimensions: "pool:luci.chromium.ci" exe { cipd_package: "infra/chromium/bootstrapper/${platform}" @@ -14871,7 +14871,7 @@ dimensions: "builder:Mac ASan 64 Tests (1)" dimensions: "cores:12" dimensions: "cpu:x86-64" - dimensions: "os:Mac-12|Mac-13" + dimensions: "os:Mac-13" dimensions: "pool:luci.chromium.ci" exe { cipd_package: "infra/chromium/bootstrapper/${platform}" @@ -14955,7 +14955,7 @@ swarming_host: "chromium-swarm.appspot.com" dimensions: "builder:Mac Builder" dimensions: "cpu:x86-64" - dimensions: "os:Mac-12|Mac-13" + dimensions: "os:Mac-13" dimensions: "pool:luci.chromium.ci" exe { cipd_package: "infra/chromium/bootstrapper/${platform}" @@ -15124,7 +15124,7 @@ dimensions: "builderless:1" dimensions: "cpu:x86-64" dimensions: "free_space:standard" - dimensions: "os:Mac-12|Mac-13" + dimensions: "os:Mac-13" dimensions: "pool:luci.chromium.ci" exe { cipd_package: "infra/chromium/bootstrapper/${platform}" @@ -16852,7 +16852,7 @@ swarming_host: "chromium-swarm.appspot.com" dimensions: "builder:Mac deterministic" dimensions: "cpu:x86-64" - dimensions: "os:Mac-12|Mac-13" + dimensions: "os:Mac-13" dimensions: "pool:luci.chromium.ci" exe { cipd_package: "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build" @@ -16927,7 +16927,7 @@ swarming_host: "chromium-swarm.appspot.com" dimensions: "builder:Mac deterministic (dbg)" dimensions: "cpu:x86-64" - dimensions: "os:Mac-12|Mac-13" + dimensions: "os:Mac-13" dimensions: "pool:luci.chromium.ci" exe { cipd_package: "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build" @@ -19937,7 +19937,7 @@ dimensions: "cores:12" dimensions: "cpu:x86-64" dimensions: "free_space:standard" - dimensions: "os:Mac-12|Mac-13" + dimensions: "os:Mac-13" dimensions: "pool:luci.chromium.ci" dimensions: "ssd:1" exe { @@ -20024,7 +20024,7 @@ dimensions: "cores:12" dimensions: "cpu:x86-64" dimensions: "free_space:standard" - dimensions: "os:Mac-12|Mac-13" + dimensions: "os:Mac-13" dimensions: "pool:luci.chromium.ci" dimensions: "ssd:1" exe { @@ -20111,7 +20111,7 @@ dimensions: "cores:12" dimensions: "cpu:x86-64" dimensions: "free_space:standard" - dimensions: "os:Mac-12|Mac-13" + dimensions: "os:Mac-13" dimensions: "pool:luci.chromium.ci" dimensions: "ssd:1" exe { @@ -20198,7 +20198,7 @@ dimensions: "cores:12" dimensions: "cpu:x86-64" dimensions: "free_space:standard" - dimensions: "os:Mac-12|Mac-13" + dimensions: "os:Mac-13" dimensions: "pool:luci.chromium.ci" dimensions: "ssd:1" exe { @@ -21039,7 +21039,7 @@ swarming_host: "chromium-swarm.appspot.com" dimensions: "builder:ToTiOS" dimensions: "cpu:x86-64" - dimensions: "os:Mac-12|Mac-13" + dimensions: "os:Mac-13" dimensions: "pool:luci.chromium.ci" dimensions: "ssd:1" exe { @@ -21128,7 +21128,7 @@ swarming_host: "chromium-swarm.appspot.com" dimensions: "builder:ToTiOSDevice" dimensions: "cpu:x86-64" - dimensions: "os:Mac-12|Mac-13" + dimensions: "os:Mac-13" dimensions: "pool:luci.chromium.ci" dimensions: "ssd:1" exe { @@ -32762,7 +32762,7 @@ swarming_host: "chromium-swarm.appspot.com" dimensions: "builder:ios-asan" dimensions: "cpu:x86-64" - dimensions: "os:Mac-12|Mac-13" + dimensions: "os:Mac-13" dimensions: "pool:luci.chromium.ci" exe { cipd_package: "infra/chromium/bootstrapper/${platform}" @@ -32935,7 +32935,7 @@ swarming_host: "chromium-swarm.appspot.com" dimensions: "builder:ios-catalyst" dimensions: "cpu:x86-64" - dimensions: "os:Mac-12|Mac-13" + dimensions: "os:Mac-13" dimensions: "pool:luci.chromium.ci" exe { cipd_package: "infra/chromium/bootstrapper/${platform}" @@ -33024,7 +33024,7 @@ swarming_host: "chromium-swarm.appspot.com" dimensions: "builder:ios-device" dimensions: "cpu:x86-64" - dimensions: "os:Mac-12|Mac-13" + dimensions: "os:Mac-13" dimensions: "pool:luci.chromium.ci" exe { cipd_package: "infra/chromium/bootstrapper/${platform}" @@ -33198,7 +33198,7 @@ swarming_host: "chromium-swarm.appspot.com" dimensions: "builder:ios-m1-simulator" dimensions: "cpu:arm64" - dimensions: "os:Mac-12|Mac-13" + dimensions: "os:Mac-13" dimensions: "pool:luci.chromium.ci" exe { cipd_package: "infra/chromium/bootstrapper/${platform}" @@ -33284,7 +33284,7 @@ swarming_host: "chromium-swarm.appspot.com" dimensions: "builder:ios-m1-simulator-cronet" dimensions: "cpu:arm64" - dimensions: "os:Mac-12|Mac-13" + dimensions: "os:Mac-13" dimensions: "pool:luci.chromium.ci" exe { cipd_package: "infra/chromium/bootstrapper/${platform}" @@ -33370,7 +33370,7 @@ swarming_host: "chromium-swarm.appspot.com" dimensions: "builder:ios-simulator" dimensions: "cpu:x86-64" - dimensions: "os:Mac-12|Mac-13" + dimensions: "os:Mac-13" dimensions: "pool:luci.chromium.ci" exe { cipd_package: "infra/chromium/bootstrapper/${platform}" @@ -33459,7 +33459,7 @@ swarming_host: "chromium-swarm.appspot.com" dimensions: "builder:ios-simulator-code-coverage" dimensions: "cpu:x86-64" - dimensions: "os:Mac-12|Mac-13" + dimensions: "os:Mac-13" dimensions: "pool:luci.chromium.ci" dimensions: "ssd:1" exe { @@ -33631,7 +33631,7 @@ swarming_host: "chromium-swarm.appspot.com" dimensions: "builder:ios-simulator-full-configs" dimensions: "cpu:x86-64" - dimensions: "os:Mac-12|Mac-13" + dimensions: "os:Mac-13" dimensions: "pool:luci.chromium.ci" exe { cipd_package: "infra/chromium/bootstrapper/${platform}" @@ -33805,7 +33805,7 @@ swarming_host: "chromium-swarm.appspot.com" dimensions: "builder:ios-simulator-noncq" dimensions: "cpu:x86-64" - dimensions: "os:Mac-12|Mac-13" + dimensions: "os:Mac-13" dimensions: "pool:luci.chromium.ci" exe { cipd_package: "infra/chromium/bootstrapper/${platform}" @@ -33979,7 +33979,7 @@ swarming_host: "chromium-swarm.appspot.com" dimensions: "builder:ios-wpt-fyi-rel" dimensions: "cpu:x86-64" - dimensions: "os:Mac-12|Mac-13" + dimensions: "os:Mac-13" dimensions: "pool:luci.chromium.ci" exe { cipd_package: "infra/chromium/bootstrapper/${platform}" @@ -42725,7 +42725,7 @@ dimensions: "builder:mac-archive-dbg" dimensions: "cores:12" dimensions: "cpu:x86-64" - dimensions: "os:Mac-12|Mac-13" + dimensions: "os:Mac-13" dimensions: "pool:luci.chromium.ci" exe { cipd_package: "infra/chromium/bootstrapper/${platform}" @@ -42810,7 +42810,7 @@ dimensions: "builder:mac-archive-rel" dimensions: "cores:12" dimensions: "cpu:x86-64" - dimensions: "os:Mac-12|Mac-13" + dimensions: "os:Mac-13" dimensions: "pool:luci.chromium.ci" exe { cipd_package: "infra/chromium/bootstrapper/${platform}" @@ -42895,7 +42895,7 @@ dimensions: "builder:mac-arm64-archive-dbg" dimensions: "cores:12" dimensions: "cpu:x86-64" - dimensions: "os:Mac-12|Mac-13" + dimensions: "os:Mac-13" dimensions: "pool:luci.chromium.ci" exe { cipd_package: "infra/chromium/bootstrapper/${platform}" @@ -42980,7 +42980,7 @@ dimensions: "builder:mac-arm64-archive-rel" dimensions: "cores:12" dimensions: "cpu:x86-64" - dimensions: "os:Mac-12|Mac-13" + dimensions: "os:Mac-13" dimensions: "pool:luci.chromium.ci" exe { cipd_package: "infra/chromium/bootstrapper/${platform}" @@ -43064,7 +43064,7 @@ swarming_host: "chromium-swarm.appspot.com" dimensions: "builder:mac-arm64-on-arm64-rel" dimensions: "cpu:arm64" - dimensions: "os:Mac-12|Mac-13" + dimensions: "os:Mac-13" dimensions: "pool:luci.chromium.ci" exe { cipd_package: "infra/chromium/bootstrapper/${platform}" @@ -43148,7 +43148,7 @@ swarming_host: "chromium-swarm.appspot.com" dimensions: "builder:mac-arm64-rel" dimensions: "cpu:x86-64" - dimensions: "os:Mac-12|Mac-13" + dimensions: "os:Mac-13" dimensions: "pool:luci.chromium.ci" exe { cipd_package: "infra/chromium/bootstrapper/${platform}" @@ -43318,7 +43318,7 @@ dimensions: "builderless:1" dimensions: "cpu:x86-64" dimensions: "free_space:standard" - dimensions: "os:Mac-12|Mac-13" + dimensions: "os:Mac-13" dimensions: "pool:luci.chromium.ci" exe { cipd_package: "infra/chromium/bootstrapper/${platform}" @@ -43485,7 +43485,7 @@ swarming_host: "chromium-swarm.appspot.com" dimensions: "builder:mac-intel-on-arm64-rel" dimensions: "cpu:arm64" - dimensions: "os:Mac-12|Mac-13" + dimensions: "os:Mac-13" dimensions: "pool:luci.chromium.ci" exe { cipd_package: "infra/chromium/bootstrapper/${platform}" @@ -43818,7 +43818,7 @@ dimensions: "cores:8" dimensions: "cpu:x86-64" dimensions: "free_space:standard" - dimensions: "os:Mac-12|Mac-13" + dimensions: "os:Mac-13" dimensions: "pool:luci.chromium.ci" exe { cipd_package: "infra/chromium/bootstrapper/${platform}" @@ -43901,7 +43901,7 @@ dimensions: "builderless:1" dimensions: "cpu:x86-64" dimensions: "free_space:standard" - dimensions: "os:Mac-12|Mac-13" + dimensions: "os:Mac-13" dimensions: "pool:luci.chromium.ci" exe { cipd_package: "infra/chromium/bootstrapper/${platform}" @@ -43987,7 +43987,7 @@ dimensions: "cores:12" dimensions: "cpu:x86-64" dimensions: "free_space:standard" - dimensions: "os:Mac-12|Mac-13" + dimensions: "os:Mac-13" dimensions: "pool:luci.chromium.ci" exe { cipd_package: "infra/chromium/bootstrapper/${platform}" @@ -44564,7 +44564,7 @@ dimensions: "builderless:1" dimensions: "cpu:x86-64" dimensions: "free_space:standard" - dimensions: "os:Mac-12|Mac-13" + dimensions: "os:Mac-13" dimensions: "pool:luci.chromium.ci" exe { cipd_package: "infra/chromium/bootstrapper/${platform}" @@ -51984,7 +51984,7 @@ swarming_host: "chromium-swarm.appspot.com" dimensions: "builder:Chromium Mac Goma RBE Staging" dimensions: "cpu:x86-64" - dimensions: "os:Mac-12|Mac-13" + dimensions: "os:Mac-13" dimensions: "pool:luci.chromium.ci" exe { cipd_package: "infra/chromium/bootstrapper/${platform}" @@ -52032,7 +52032,7 @@ swarming_host: "chromium-swarm.appspot.com" dimensions: "builder:Chromium Mac Goma RBE Staging (dbg)" dimensions: "cpu:x86-64" - dimensions: "os:Mac-12|Mac-13" + dimensions: "os:Mac-13" dimensions: "pool:luci.chromium.ci" exe { cipd_package: "infra/chromium/bootstrapper/${platform}" @@ -52229,7 +52229,7 @@ swarming_host: "chromium-swarm.appspot.com" dimensions: "builder:Mac Builder (dbg) Goma RBE Canary (clobber)" dimensions: "cpu:x86-64" - dimensions: "os:Mac-12|Mac-13" + dimensions: "os:Mac-13" dimensions: "pool:luci.chromium.ci" exe { cipd_package: "infra/chromium/bootstrapper/${platform}" @@ -52277,7 +52277,7 @@ swarming_host: "chromium-swarm.appspot.com" dimensions: "builder:Mac M1 Builder (dbg) Goma RBE Canary (clobber)" dimensions: "cpu:arm64" - dimensions: "os:Mac-12|Mac-13" + dimensions: "os:Mac-13" dimensions: "pool:luci.chromium.ci" exe { cipd_package: "infra/chromium/bootstrapper/${platform}" @@ -52723,7 +52723,7 @@ swarming_host: "chromium-swarm.appspot.com" dimensions: "builder:ios-device-goma-rbe-canary-clobber" dimensions: "cpu:x86-64" - dimensions: "os:Mac-12|Mac-13" + dimensions: "os:Mac-13" dimensions: "pool:luci.chromium.ci" exe { cipd_package: "infra/chromium/bootstrapper/${platform}" @@ -52877,7 +52877,7 @@ swarming_host: "chromium-swarm.appspot.com" dimensions: "builder:mac-archive-rel-goma-rbe-canary" dimensions: "cpu:x86-64" - dimensions: "os:Mac-12|Mac-13" + dimensions: "os:Mac-13" dimensions: "pool:luci.chromium.ci" exe { cipd_package: "infra/chromium/bootstrapper/${platform}" @@ -53662,7 +53662,7 @@ dimensions: "cores:12" dimensions: "cpu:x86-64" dimensions: "free_space:standard" - dimensions: "os:Mac-12|Mac-13" + dimensions: "os:Mac-13" dimensions: "pool:luci.chromium.ci" exe { cipd_package: "infra/chromium/bootstrapper/${platform}" @@ -53747,7 +53747,7 @@ dimensions: "cores:12" dimensions: "cpu:x86-64" dimensions: "free_space:standard" - dimensions: "os:Mac-12|Mac-13" + dimensions: "os:Mac-13" dimensions: "pool:luci.chromium.ci" exe { cipd_package: "infra/chromium/bootstrapper/${platform}" @@ -53831,7 +53831,7 @@ dimensions: "builderless:1" dimensions: "cpu:x86-64" dimensions: "free_space:standard" - dimensions: "os:Mac-12|Mac-13" + dimensions: "os:Mac-13" dimensions: "pool:luci.chromium.ci" exe { cipd_package: "infra/chromium/bootstrapper/${platform}" @@ -53915,7 +53915,7 @@ dimensions: "builderless:1" dimensions: "cpu:x86-64" dimensions: "free_space:standard" - dimensions: "os:Mac-12|Mac-13" + dimensions: "os:Mac-13" dimensions: "pool:luci.chromium.ci" exe { cipd_package: "infra/chromium/bootstrapper/${platform}" @@ -54844,7 +54844,7 @@ dimensions: "cores:12" dimensions: "cpu:x86-64" dimensions: "free_space:standard" - dimensions: "os:Mac-12|Mac-13" + dimensions: "os:Mac-13" dimensions: "pool:luci.chromium.ci" exe { cipd_package: "infra/chromium/bootstrapper/${platform}" @@ -54933,7 +54933,7 @@ dimensions: "cores:12" dimensions: "cpu:x86-64" dimensions: "free_space:standard" - dimensions: "os:Mac-12|Mac-13" + dimensions: "os:Mac-13" dimensions: "pool:luci.chromium.ci" exe { cipd_package: "infra/chromium/bootstrapper/${platform}" @@ -55022,7 +55022,7 @@ dimensions: "cores:12" dimensions: "cpu:x86-64" dimensions: "free_space:standard" - dimensions: "os:Mac-12|Mac-13" + dimensions: "os:Mac-13" dimensions: "pool:luci.chromium.ci" exe { cipd_package: "infra/chromium/bootstrapper/${platform}" @@ -55111,7 +55111,7 @@ dimensions: "cores:12" dimensions: "cpu:x86-64" dimensions: "free_space:standard" - dimensions: "os:Mac-12|Mac-13" + dimensions: "os:Mac-13" dimensions: "pool:luci.chromium.ci" exe { cipd_package: "infra/chromium/bootstrapper/${platform}" @@ -55200,7 +55200,7 @@ dimensions: "cores:12" dimensions: "cpu:x86-64" dimensions: "free_space:standard" - dimensions: "os:Mac-12|Mac-13" + dimensions: "os:Mac-13" dimensions: "pool:luci.chromium.ci" exe { cipd_package: "infra/chromium/bootstrapper/${platform}" @@ -55285,7 +55285,7 @@ dimensions: "cores:12" dimensions: "cpu:x86-64" dimensions: "free_space:standard" - dimensions: "os:Mac-12|Mac-13" + dimensions: "os:Mac-13" dimensions: "pool:luci.chromium.ci" exe { cipd_package: "infra/chromium/bootstrapper/${platform}" @@ -55370,7 +55370,7 @@ dimensions: "cores:12" dimensions: "cpu:x86-64" dimensions: "free_space:standard" - dimensions: "os:Mac-12|Mac-13" + dimensions: "os:Mac-13" dimensions: "pool:luci.chromium.ci" exe { cipd_package: "infra/chromium/bootstrapper/${platform}" @@ -55455,7 +55455,7 @@ dimensions: "cores:12" dimensions: "cpu:x86-64" dimensions: "free_space:standard" - dimensions: "os:Mac-12|Mac-13" + dimensions: "os:Mac-13" dimensions: "pool:luci.chromium.ci" exe { cipd_package: "infra/chromium/bootstrapper/${platform}" @@ -55997,7 +55997,7 @@ ' "builderless": "1",' ' "cpu": "x86-64",' ' "free_space": "standard",' - ' "os": "Mac-12|Mac-13",' + ' "os": "Mac-13",' ' "ssd": "1"' ' },' ' "tester_filter": {' @@ -56234,7 +56234,7 @@ swarming_host: "chromium-swarm.appspot.com" dimensions: "builderless:1" dimensions: "cpu:x86-64" - dimensions: "os:Mac-12|Mac-13" + dimensions: "os:Mac-13" dimensions: "pool:luci.chromium.try" exe { cipd_package: "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build" @@ -63082,6 +63082,97 @@ } } builders { + name: "chromeos-js-coverage-rel" + swarming_host: "chromium-swarm.appspot.com" + dimensions: "builderless:1" + dimensions: "cores:8" + dimensions: "cpu:x86-64" + dimensions: "os:Ubuntu-18.04" + dimensions: "pool:luci.chromium.try" + dimensions: "ssd:0" + exe { + cipd_package: "infra/chromium/bootstrapper/${platform}" + cipd_version: "latest" + cmd: "bootstrapper" + } + properties: + '{' + ' "$bootstrap/exe": {' + ' "exe": {' + ' "cipd_package": "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build",' + ' "cipd_version": "refs/heads/main",' + ' "cmd": [' + ' "luciexe"' + ' ]' + ' }' + ' },' + ' "$bootstrap/properties": {' + ' "properties_file": "infra/config/generated/builders/try/chromeos-js-coverage-rel/properties.json",' + ' "top_level_project": {' + ' "ref": "refs/heads/main",' + ' "repo": {' + ' "host": "chromium.googlesource.com",' + ' "project": "chromium/src"' + ' }' + ' }' + ' },' + ' "builder_group": "tryserver.chromium.linux",' + ' "cq": "path-based",' + ' "led_builder_is_bootstrapped": true,' + ' "recipe": "chromium_trybot"' + '}' + execution_timeout_secs: 14400 + expiration_secs: 7200 + grace_period { + seconds: 120 + } + build_numbers: YES + service_account: "chromium-try-builder@chops-service-accounts.iam.gserviceaccount.com" + task_template_canary_percentage { + value: 5 + } + experiments { + key: "chromium_swarming.expose_merge_script_failures" + value: 100 + } + experiments { + key: "luci.recipes.use_python3" + value: 100 + } + resultdb { + enable: true + bq_exports { + project: "chrome-luci-data" + dataset: "chromium" + table: "try_test_results" + test_results {} + } + bq_exports { + project: "chrome-luci-data" + dataset: "chromium" + table: "gpu_try_test_results" + test_results { + predicate { + test_id_regexp: "ninja://chrome/test:telemetry_gpu_integration_test[^/]*/.+" + } + } + } + bq_exports { + project: "chrome-luci-data" + dataset: "chromium" + table: "blink_web_tests_try_test_results" + test_results { + predicate { + test_id_regexp: "(ninja://[^/]*blink_web_tests/.+)|(ninja://[^/]*blink_wpt_tests/.+)" + } + } + } + history_options { + use_invocation_timestamp: true + } + } + } + builders { name: "chromeos-octopus-rel" swarming_host: "chromium-swarm.appspot.com" dimensions: "builderless:1" @@ -70025,7 +70116,7 @@ swarming_host: "chromium-swarm.appspot.com" dimensions: "builder:ios-asan" dimensions: "cpu:x86-64" - dimensions: "os:Mac-12|Mac-13" + dimensions: "os:Mac-13" dimensions: "pool:luci.chromium.try" exe { cipd_package: "infra/chromium/bootstrapper/${platform}" @@ -70117,7 +70208,7 @@ swarming_host: "chromium-swarm.appspot.com" dimensions: "builder:ios-blink-dbg-fyi" dimensions: "cpu:arm64" - dimensions: "os:Mac-12|Mac-13" + dimensions: "os:Mac-13" dimensions: "pool:luci.chromium.try" exe { cipd_package: "infra/chromium/bootstrapper/${platform}" @@ -70209,7 +70300,7 @@ swarming_host: "chromium-swarm.appspot.com" dimensions: "builder:ios-catalyst" dimensions: "cpu:x86-64" - dimensions: "os:Mac-12|Mac-13" + dimensions: "os:Mac-13" dimensions: "pool:luci.chromium.try" exe { cipd_package: "infra/chromium/bootstrapper/${platform}" @@ -70301,7 +70392,7 @@ swarming_host: "chromium-swarm.appspot.com" dimensions: "builder:ios-device" dimensions: "cpu:x86-64" - dimensions: "os:Mac-12|Mac-13" + dimensions: "os:Mac-13" dimensions: "pool:luci.chromium.try" exe { cipd_package: "infra/chromium/bootstrapper/${platform}" @@ -70393,7 +70484,7 @@ swarming_host: "chromium-swarm.appspot.com" dimensions: "builderless:1" dimensions: "cpu:x86-64" - dimensions: "os:Mac-12|Mac-13" + dimensions: "os:Mac-13" dimensions: "pool:luci.chromium.try" exe { cipd_package: "infra/chromium/bootstrapper/${platform}" @@ -70485,7 +70576,7 @@ swarming_host: "chromium-swarm.appspot.com" dimensions: "builder:ios-m1-simulator" dimensions: "cpu:arm64" - dimensions: "os:Mac-12|Mac-13" + dimensions: "os:Mac-13" dimensions: "pool:luci.chromium.try" exe { cipd_package: "infra/chromium/bootstrapper/${platform}" @@ -70577,7 +70668,7 @@ swarming_host: "chromium-swarm.appspot.com" dimensions: "builder:ios-m1-simulator-cronet" dimensions: "cpu:arm64" - dimensions: "os:Mac-12|Mac-13" + dimensions: "os:Mac-13" dimensions: "pool:luci.chromium.try" exe { cipd_package: "infra/chromium/bootstrapper/${platform}" @@ -70764,7 +70855,7 @@ swarming_host: "chromium-swarm.appspot.com" dimensions: "builder:ios-simulator-code-coverage" dimensions: "cpu:x86-64" - dimensions: "os:Mac-12|Mac-13" + dimensions: "os:Mac-13" dimensions: "pool:luci.chromium.try" exe { cipd_package: "infra/chromium/bootstrapper/${platform}" @@ -70856,7 +70947,7 @@ swarming_host: "chromium-swarm.appspot.com" dimensions: "builder:ios-simulator-compilator" dimensions: "cpu:x86-64" - dimensions: "os:Mac-12|Mac-13" + dimensions: "os:Mac-13" dimensions: "pool:luci.chromium.try" exe { cipd_package: "infra/chromium/bootstrapper/${platform}" @@ -70949,7 +71040,7 @@ swarming_host: "chromium-swarm.appspot.com" dimensions: "builder:ios-simulator-cronet" dimensions: "cpu:x86-64" - dimensions: "os:Mac-12|Mac-13" + dimensions: "os:Mac-13" dimensions: "pool:luci.chromium.try" exe { cipd_package: "infra/chromium/bootstrapper/${platform}" @@ -71042,7 +71133,7 @@ swarming_host: "chromium-swarm.appspot.com" dimensions: "builder:ios-simulator-full-configs" dimensions: "cpu:x86-64" - dimensions: "os:Mac-12|Mac-13" + dimensions: "os:Mac-13" dimensions: "pool:luci.chromium.try" exe { cipd_package: "infra/chromium/bootstrapper/${platform}" @@ -71135,7 +71226,7 @@ swarming_host: "chromium-swarm.appspot.com" dimensions: "builder:ios-simulator-inverse-fieldtrials-fyi" dimensions: "cpu:x86-64" - dimensions: "os:Mac-12|Mac-13" + dimensions: "os:Mac-13" dimensions: "pool:luci.chromium.try" exe { cipd_package: "infra/chromium/bootstrapper/${platform}" @@ -71227,7 +71318,7 @@ swarming_host: "chromium-swarm.appspot.com" dimensions: "builder:ios-simulator-multi-window" dimensions: "cpu:x86-64" - dimensions: "os:Mac-12|Mac-13" + dimensions: "os:Mac-13" dimensions: "pool:luci.chromium.try" exe { cipd_package: "infra/chromium/bootstrapper/${platform}" @@ -71319,7 +71410,7 @@ swarming_host: "chromium-swarm.appspot.com" dimensions: "builder:ios-simulator-noncq" dimensions: "cpu:x86-64" - dimensions: "os:Mac-12|Mac-13" + dimensions: "os:Mac-13" dimensions: "pool:luci.chromium.try" exe { cipd_package: "infra/chromium/bootstrapper/${platform}" @@ -71412,7 +71503,7 @@ swarming_host: "chromium-swarm.appspot.com" dimensions: "builder:ios-wpt-fyi-rel" dimensions: "cpu:x86-64" - dimensions: "os:Mac-12|Mac-13" + dimensions: "os:Mac-13" dimensions: "pool:luci.chromium.try" exe { cipd_package: "infra/chromium/bootstrapper/${platform}" @@ -81113,7 +81204,7 @@ swarming_host: "chromium-swarm.appspot.com" dimensions: "builder:mac-arm64-on-arm64-rel" dimensions: "cpu:arm64" - dimensions: "os:Mac-12|Mac-13" + dimensions: "os:Mac-13" dimensions: "pool:luci.chromium.try" dimensions: "ssd:1" exe { @@ -81291,7 +81382,7 @@ swarming_host: "chromium-swarm.appspot.com" dimensions: "builderless:1" dimensions: "cpu:x86-64" - dimensions: "os:Mac-12|Mac-13" + dimensions: "os:Mac-13" dimensions: "pool:luci.chromium.try" dimensions: "ssd:1" exe { @@ -81467,7 +81558,7 @@ swarming_host: "chromium-swarm.appspot.com" dimensions: "builderless:1" dimensions: "cpu:x86-64" - dimensions: "os:Mac-12|Mac-13" + dimensions: "os:Mac-13" dimensions: "pool:luci.chromium.try" dimensions: "ssd:1" exe { @@ -81644,7 +81735,7 @@ swarming_host: "chromium-swarm.appspot.com" dimensions: "builderless:1" dimensions: "cpu:x86-64" - dimensions: "os:Mac-12|Mac-13" + dimensions: "os:Mac-13" dimensions: "pool:luci.chromium.try" dimensions: "ssd:1" exe { @@ -81733,7 +81824,7 @@ swarming_host: "chromium-swarm.appspot.com" dimensions: "builder:mac-intel-on-arm64-rel" dimensions: "cpu:arm64" - dimensions: "os:Mac-12|Mac-13" + dimensions: "os:Mac-13" dimensions: "pool:luci.chromium.try" dimensions: "ssd:1" exe { @@ -81822,7 +81913,7 @@ swarming_host: "chromium-swarm.appspot.com" dimensions: "builderless:1" dimensions: "cpu:x86-64" - dimensions: "os:Mac-12|Mac-13" + dimensions: "os:Mac-13" dimensions: "pool:luci.chromium.try" dimensions: "ssd:1" exe { @@ -82276,7 +82367,7 @@ swarming_host: "chromium-swarm.appspot.com" dimensions: "builderless:1" dimensions: "cpu:x86-64" - dimensions: "os:Mac-12|Mac-13" + dimensions: "os:Mac-13" dimensions: "pool:luci.chromium.try" exe { cipd_package: "infra/chromium/bootstrapper/${platform}" @@ -82364,7 +82455,7 @@ swarming_host: "chromium-swarm.appspot.com" dimensions: "builder:mac-rel-compilator" dimensions: "cpu:x86-64" - dimensions: "os:Mac-12|Mac-13" + dimensions: "os:Mac-13" dimensions: "pool:luci.chromium.try" dimensions: "ssd:1" exe { @@ -84142,7 +84233,7 @@ swarming_host: "chromium-swarm.appspot.com" dimensions: "builder:mac13-arm64-rel-compilator" dimensions: "cpu:x86-64" - dimensions: "os:Mac-12|Mac-13" + dimensions: "os:Mac-13" dimensions: "pool:luci.chromium.try" dimensions: "ssd:1" exe { @@ -85211,7 +85302,7 @@ swarming_host: "chromium-swarm.appspot.com" dimensions: "builderless:1" dimensions: "cpu:x86-64" - dimensions: "os:Mac-12|Mac-13" + dimensions: "os:Mac-13" dimensions: "pool:luci.chromium.try" dimensions: "ssd:1" exe {
diff --git a/infra/config/generated/luci/luci-milo.cfg b/infra/config/generated/luci/luci-milo.cfg index bc6d9def..ad84c58 100644 --- a/infra/config/generated/luci/luci-milo.cfg +++ b/infra/config/generated/luci/luci-milo.cfg
@@ -3048,6 +3048,9 @@ name: "buildbucket/luci.chromium.try/chromeos-jacuzzi-rel" } builders { + name: "buildbucket/luci.chromium.try/chromeos-js-coverage-rel" + } + builders { name: "buildbucket/luci.chromium.try/chromeos-octopus-rel" } builders { @@ -17379,6 +17382,9 @@ name: "buildbucket/luci.chromium.try/chromeos-js-code-coverage" } builders { + name: "buildbucket/luci.chromium.try/chromeos-js-coverage-rel" + } + builders { name: "buildbucket/luci.chromium.try/chromeos-octopus-rel" } builders { @@ -18894,6 +18900,9 @@ name: "buildbucket/luci.chromium.try/chromeos-js-code-coverage" } builders { + name: "buildbucket/luci.chromium.try/chromeos-js-coverage-rel" + } + builders { name: "buildbucket/luci.chromium.try/gpu-fyi-try-lacros-amd-rel" } builders {
diff --git a/infra/config/lib/builders.star b/infra/config/lib/builders.star index 41fc784..f79cad8d 100644 --- a/infra/config/lib/builders.star +++ b/infra/config/lib/builders.star
@@ -78,8 +78,7 @@ MAC_10_15 = os_enum(os_category.MAC, "Mac-10.15"), MAC_12 = os_enum(os_category.MAC, "Mac-12"), MAC_13 = os_enum(os_category.MAC, "Mac-13"), - # TODO(crbug.com/1448262) Remove Mac 12 once builders migrate to Mac 13 - MAC_DEFAULT = os_enum(os_category.MAC, "Mac-12|Mac-13"), + MAC_DEFAULT = os_enum(os_category.MAC, "Mac-13"), MAC_ANY = os_enum(os_category.MAC, "Mac"), WINDOWS_10 = os_enum(os_category.WINDOWS, "Windows-10"), WINDOWS_11 = os_enum(os_category.WINDOWS, "Windows-11"),
diff --git a/infra/config/subprojects/chromium/try/tryserver.chromium.linux.star b/infra/config/subprojects/chromium/try/tryserver.chromium.linux.star index 9070daf..c54f919 100644 --- a/infra/config/subprojects/chromium/try/tryserver.chromium.linux.star +++ b/infra/config/subprojects/chromium/try/tryserver.chromium.linux.star
@@ -745,6 +745,25 @@ use_javascript_coverage = True, ) +# This builder is different from try/chromeos-js-code-coverage builder below as +# this is a try builder meant to provide javascript coverage for webui related +# CLs, where as try/chromeos-js-code-coverage builder is there to test changes +# in ci/chromeos-js-code-coverage builder and would mostly be used by coverage +# devs only. +try_.builder( + name = "chromeos-js-coverage-rel", + mirrors = ["ci/chromeos-js-code-coverage"], + coverage_test_types = ["unit", "overall"], + main_list_view = "try", + tryjob = try_.job( + experiment_percentage = 10, + location_filters = [ + cq.location_filter(path_regexp = r".*\.(js|ts)"), + ], + ), + use_javascript_coverage = True, +) + # Coverage builders set up mainly to test changes in CI builders try_.builder( name = "linux-code-coverage",
diff --git a/ios/chrome/browser/flags/about_flags.mm b/ios/chrome/browser/flags/about_flags.mm index 4c15b3b..0baa00d 100644 --- a/ios/chrome/browser/flags/about_flags.mm +++ b/ios/chrome/browser/flags/about_flags.mm
@@ -517,10 +517,10 @@ {"(will not show again after user interacts with keyboard accessories)", kAutofillBrandingIOSDismissWhenInteractedNoAnimation, std::size(kAutofillBrandingIOSDismissWhenInteractedNoAnimation), nullptr}, - {"(shows and fades to the left every time)", + {"(shows and fades to leading edge every time)", kAutofillBrandingIOSAlwaysShowAndDismiss, std::size(kAutofillBrandingIOSAlwaysShowAndDismiss), nullptr}, - {"(fades to the left after user interacts with keyboard accessories)", + {"(fades to leading edge after user interacts with keyboard accessories)", kAutofillBrandingIOSDismissWhenInteractedWithAnimation, std::size(kAutofillBrandingIOSDismissWhenInteractedWithAnimation), nullptr}};
diff --git a/ios/chrome/browser/shared/model/prefs/browser_prefs.mm b/ios/chrome/browser/shared/model/prefs/browser_prefs.mm index a55b151..f0114441 100644 --- a/ios/chrome/browser/shared/model/prefs/browser_prefs.mm +++ b/ios/chrome/browser/shared/model/prefs/browser_prefs.mm
@@ -392,7 +392,12 @@ registry->RegisterDictionaryPref(kPrefPromoObject); // Register pref storing whether Web Inspector support is enabled. +#if BUILDFLAG(CHROMIUM_BRANDING) && !defined(NDEBUG) + // Enable it by default on debug builds + registry->RegisterBooleanPref(prefs::kWebInspectorEnabled, true); +#else registry->RegisterBooleanPref(prefs::kWebInspectorEnabled, false); +#endif // Register prerender network prediction preferences. registry->RegisterIntegerPref(
diff --git a/ios/chrome/browser/ui/autofill/branding/branding_view_controller.mm b/ios/chrome/browser/ui/autofill/branding/branding_view_controller.mm index b7e3d68..035dcb7 100644 --- a/ios/chrome/browser/ui/autofill/branding/branding_view_controller.mm +++ b/ios/chrome/browser/ui/autofill/branding/branding_view_controller.mm
@@ -21,9 +21,12 @@ // The left margin of the branding logo, if visible. constexpr CGFloat kLeadingInset = 10; // The scale used by the "pop" animation. -constexpr CGFloat kAnimationScale = ((CGFloat)4) / 3; +constexpr CGFloat kPopAnimationScale = ((CGFloat)4) / 3; // Wait time after the keyboard settles into place to perform pop animation. -constexpr base::TimeDelta kAnimationWaitTime = base::Milliseconds(200); +constexpr base::TimeDelta kPopAnimationWaitTime = base::Milliseconds(200); +// Wait time after the keyboard settles into place to perform the +// slide-away-from-leading-edge animation. +constexpr base::TimeDelta kSlideAnimationWaitTime = base::Milliseconds(400); // Time it takes the "pop" animation to perform. constexpr base::TimeDelta kTimeToAnimate = base::Milliseconds(400); // Minimum time interval between two animations. @@ -36,10 +39,10 @@ // Button that shows the branding. UIButton* _brandingIcon; // The start time of the last or ongoing animation. - base::TimeTicks _lastAnimationStartTime; - // A constraint of the view that should be activated when the branding is - // invisible. - NSLayoutConstraint* _constraintToHideView; + base::TimeTicks _lastPopAnimationStartTime; + // Horizontal constraints that are used for animation purpose. + NSLayoutConstraint* _leadingConstraint; + NSLayoutConstraint* _widthConstraintWhenHidingBranding; // A boolean representing visibility of the keyboard. BOOL _keyboardVisible; } @@ -92,7 +95,26 @@ #pragma mark - BrandingConsumer - (void)slideAwayFromLeadingEdge { - // TODO(crbug.com/1447909): Implement "exit to the leading edge" animation. + __weak BrandingViewController* weakSelf = self; + __weak UIButton* weakBranding = _brandingIcon; + base::SequencedTaskRunner::GetCurrentDefault()->PostDelayedTask( + FROM_HERE, base::BindOnce(^{ + [UIView animateWithDuration:kTimeToAnimate.InSecondsF() + animations:^{ + [weakSelf slideAwayAnimation]; + } + completion:^(BOOL finished) { + if (weakBranding.superview == nil || !finished) { + return; + } + [NSLayoutConstraint + deactivateConstraints:weakSelf.view.constraints]; + [weakSelf hideBranding]; + // Restore original size. + weakBranding.transform = CGAffineTransformIdentity; + }]; + }), + kSlideAnimationWaitTime); } #pragma mark - Keyboard Event Handlers @@ -109,19 +131,23 @@ } // Add or remove the branding icon to keyboard accessories accordingly. - if (!_constraintToHideView) { - _constraintToHideView = [self.view.widthAnchor constraintEqualToConstant:0]; + if (!_widthConstraintWhenHidingBranding) { + _widthConstraintWhenHidingBranding = + [self.view.widthAnchor constraintEqualToConstant:0]; } BOOL shouldShow = self.visible && self.keyboardAccessoryVisible; if (shouldShow && _brandingIcon.superview == nil) { [self.view addSubview:_brandingIcon]; - _constraintToHideView.active = NO; - AddSameConstraintsWithInsets( + _widthConstraintWhenHidingBranding.active = NO; + AddSameConstraintsToSides( _brandingIcon, self.view, - NSDirectionalEdgeInsetsMake(0, kLeadingInset, 0, 0)); + LayoutSides::kTop | LayoutSides::kBottom | LayoutSides::kTrailing); + _leadingConstraint = [_brandingIcon.leadingAnchor + constraintEqualToAnchor:self.view.leadingAnchor + constant:kLeadingInset]; + _leadingConstraint.active = YES; } else if (!shouldShow) { - [_brandingIcon removeFromSuperview]; - _constraintToHideView.active = YES; + [self hideBranding]; } } @@ -141,7 +167,7 @@ return; } [self.delegate brandingIconDidShow]; - const base::TimeTicks lastAnimationStartTime = _lastAnimationStartTime; + const base::TimeTicks lastAnimationStartTime = _lastPopAnimationStartTime; BOOL shouldPerformPopAnimation = self.shouldPerformPopAnimation && (lastAnimationStartTime.is_null() || @@ -155,7 +181,7 @@ FROM_HERE, base::BindOnce(^{ [weakSelf performPopAnimation]; }), - kAnimationWaitTime); + kPopAnimationWaitTime); } } @@ -166,23 +192,50 @@ #pragma mark - Private +// Hides the branding icon from the view. This does NOT mean that the branding +// would not show again when the keyboard pops up next time. +- (void)hideBranding { + [_brandingIcon removeFromSuperview]; + _leadingConstraint.active = NO; + _leadingConstraint = nil; + _widthConstraintWhenHidingBranding.constant = 0; + _widthConstraintWhenHidingBranding.active = YES; +} + // Method that is invoked when the user taps the branding icon. - (void)onBrandingTapped { [_delegate brandingIconDidPress]; } +// Animation to slide the branding away from the leading edge, +- (void)slideAwayAnimation { + if (_brandingIcon.superview == nil) { + return; + } + _leadingConstraint.constant = 0; + [self.view layoutIfNeeded]; + _brandingIcon.transform = + CGAffineTransformScale(CGAffineTransformIdentity, 0.1, 0.1); + CGFloat newWidth = CGSizeApplyAffineTransform(_brandingIcon.bounds.size, + _brandingIcon.transform) + .width; + _widthConstraintWhenHidingBranding.constant = newWidth; + _widthConstraintWhenHidingBranding.active = YES; + [self.view.superview layoutIfNeeded]; +} + // Performs the "pop" animation. This includes a quick enlarging of the icon // and shrinking it back to the original size, and if finishes successfully, // also notifies the delegate on completion. - (void)performPopAnimation { - _lastAnimationStartTime = base::TimeTicks::Now(); + _lastPopAnimationStartTime = base::TimeTicks::Now(); __weak UIButton* weakBranding = _brandingIcon; __weak id<BrandingViewControllerDelegate> weakDelegate = self.delegate; [UIView animateWithDuration:kTimeToAnimate.InSecondsF() / 2 // Scale up the icon. animations:^{ weakBranding.transform = CGAffineTransformScale( - CGAffineTransformIdentity, kAnimationScale, kAnimationScale); + CGAffineTransformIdentity, kPopAnimationScale, kPopAnimationScale); } completion:^(BOOL finished) { if (!finished) {
diff --git a/ios/chrome/browser/ui/autofill/branding/branding_view_controller_egtest.mm b/ios/chrome/browser/ui/autofill/branding/branding_view_controller_egtest.mm index 0179322..0990aec 100644 --- a/ios/chrome/browser/ui/autofill/branding/branding_view_controller_egtest.mm +++ b/ios/chrome/browser/ui/autofill/branding/branding_view_controller_egtest.mm
@@ -315,33 +315,6 @@ CheckBrandingHasVisiblity(NO); } -// Tests that when the "always show and dismiss" variation is turned on, the -// autofill branding icon shows until the user interacts with it. -- (void)testBrandingAlwaysSlideToLeadingEdgeOnPhone { - AppLaunchConfiguration config = ConfigWithBrandingEnabledWithFrequencyType( - /*phone=*/autofill::features:: - kAutofillBrandingIOSParamFrequencyTypeAlwaysShowAndDismiss, - /*tablet=*/autofill::features:: - kAutofillBrandingIOSParamFrequencyTypeAlways); - [[AppLaunchManager sharedManager] ensureAppLaunchedWithConfiguration:config]; - EnableManualFillButtonForPassword(); - // First time. - BringUpKeyboard(); - CheckBrandingHasVisiblity(YES); - // TODO(crbug.com/1447909): Icon should have slid away from the leading edge. - // CheckBrandingHasVisiblity([ChromeEarlGrey isIPadIdiom]); - [[EarlGrey selectElementWithMatcher:ManualFallbackPasswordIconMatcher()] - performAction:grey_tap()]; - DismissKeyboard(); - // Second time: branding is still visible after user interacts with a keyboard - // accessory element. - BringUpKeyboard(); - CheckBrandingHasVisiblity(YES); - base::test::ios::SpinRunLoopWithMinDelay(base::Seconds(0.5)); - // TODO(crbug.com/1447909): Icon should have slid away from the leading edge. - // CheckBrandingHasVisiblity([ChromeEarlGrey isIPadIdiom]); -} - // Tests that when the "dismiss when interacted" variation is turned on, the // autofill branding icon shows until the user interacts with it. - (void)testBrandingSlideToLeadingEdgeWhenInteractedOnPhone { @@ -361,9 +334,11 @@ CheckBrandingHasVisiblity(YES); [[EarlGrey selectElementWithMatcher:ManualFallbackPasswordIconMatcher()] performAction:grey_tap()]; + // On iPhone, the branding should be sliding away from the leading edge after + // a slight wait time. base::test::ios::SpinRunLoopWithMinDelay(base::Seconds(0.5)); - // TODO(crbug.com/1447909): Icon should have slid away from the leading edge. - // CheckBrandingHasVisiblity([ChromeEarlGrey isIPadIdiom]); + [ChromeEarlGreyUI waitForAppToIdle]; + CheckBrandingHasVisiblity([ChromeEarlGrey isIPadIdiom]); DismissKeyboard(); // Third time: branding should not be visible on iPhone, but visible on iPad. BringUpKeyboard();
diff --git a/ios/chrome/browser/ui/browser_view/BUILD.gn b/ios/chrome/browser/ui/browser_view/BUILD.gn index cdcf661..239d8a44 100644 --- a/ios/chrome/browser/ui/browser_view/BUILD.gn +++ b/ios/chrome/browser/ui/browser_view/BUILD.gn
@@ -26,7 +26,6 @@ deps = [ "//base", "//base:i18n", - "//build:blink_buildflags", "//components/bookmarks/browser", "//components/feature_engagement/public", "//components/image_fetcher/ios",
diff --git a/ios/chrome/browser/ui/browser_view/browser_view_controller.mm b/ios/chrome/browser/ui/browser_view/browser_view_controller.mm index 5378c19f..b3e219d2 100644 --- a/ios/chrome/browser/ui/browser_view/browser_view_controller.mm +++ b/ios/chrome/browser/ui/browser_view/browser_view_controller.mm
@@ -10,7 +10,6 @@ #import "base/mac/foundation_util.h" #import "base/strings/sys_string_conversions.h" #import "base/task/sequenced_task_runner.h" -#import "build/blink_buildflags.h" #import "components/password_manager/core/browser/ui/credential_ui_entry.h" #import "components/signin/public/identity_manager/identity_manager.h" #import "components/strings/grit/components_strings.h" @@ -1710,13 +1709,6 @@ self.fullscreenController->GetCurrentViewportInsets(); viewFrame = UIEdgeInsetsInsetRect(viewFrame, viewportInsets); } - -#if BUILDFLAG(USE_BLINK) - // Temporary workaround to keep web view under toolbar. - CGFloat toolbarHeight = [self expandedTopToolbarHeight]; - viewFrame = UIEdgeInsetsInsetRect(viewFrame, - UIEdgeInsetsMake(toolbarHeight, 0, 0, 0)); -#endif view.frame = viewFrame; [self updateToolbarState];
diff --git a/ios/chrome/browser/ui/content_suggestions/content_suggestions_coordinator.mm b/ios/chrome/browser/ui/content_suggestions/content_suggestions_coordinator.mm index 28fbf7ed..6de144eb 100644 --- a/ios/chrome/browser/ui/content_suggestions/content_suggestions_coordinator.mm +++ b/ios/chrome/browser/ui/content_suggestions/content_suggestions_coordinator.mm
@@ -407,7 +407,7 @@ action:^{ [weakMediator disableSetUpList]; } - style:UIAlertActionStyleDefault]; + style:UIAlertActionStyleDestructive]; [_actionSheetCoordinator addItemWithTitle:l10n_util::GetNSString( IDS_IOS_SET_UP_LIST_SETTINGS_CANCEL)
diff --git a/ios/chrome/browser/ui/content_suggestions/content_suggestions_view_controller.mm b/ios/chrome/browser/ui/content_suggestions/content_suggestions_view_controller.mm index 4c21dd3..4373447 100644 --- a/ios/chrome/browser/ui/content_suggestions/content_suggestions_view_controller.mm +++ b/ios/chrome/browser/ui/content_suggestions/content_suggestions_view_controller.mm
@@ -455,6 +455,7 @@ } for (SetUpListItemViewData* data in items) { data.compactLayout = shouldShowCompactedSetUpListModule; + data.heroCellMagicStackLayout = !shouldShowCompactedSetUpListModule; SetUpListItemView* view = [[SetUpListItemView alloc] initWithData:data]; view.tapDelegate = self; ContentSuggestionsModuleType type = @@ -587,6 +588,8 @@ SetUpListItemViewData* allSetData = [[SetUpListItemViewData alloc] initWithType:SetUpListItemType::kAllSet complete:NO]; + allSetData.heroCellMagicStackLayout = + !set_up_list_utils::ShouldShowCompactedSetUpListModule(); SetUpListItemView* view = [[SetUpListItemView alloc] initWithData:allSetData]; MagicStackModuleContainer* allSetModule = [[MagicStackModuleContainer alloc]
diff --git a/ios/chrome/browser/ui/content_suggestions/set_up_list/BUILD.gn b/ios/chrome/browser/ui/content_suggestions/set_up_list/BUILD.gn index 9905664..3418f89 100644 --- a/ios/chrome/browser/ui/content_suggestions/set_up_list/BUILD.gn +++ b/ios/chrome/browser/ui/content_suggestions/set_up_list/BUILD.gn
@@ -23,6 +23,7 @@ "//ios/chrome/browser/ntp:set_up_list_item_type", "//ios/chrome/browser/shared/ui/elements", "//ios/chrome/browser/shared/ui/symbols", + "//ios/chrome/browser/shared/ui/util", "//ios/chrome/browser/ui/content_suggestions/set_up_list/resources", "//ios/chrome/common/ui/colors", "//ios/chrome/common/ui/util",
diff --git a/ios/chrome/browser/ui/content_suggestions/set_up_list/set_up_list_item_icon.h b/ios/chrome/browser/ui/content_suggestions/set_up_list/set_up_list_item_icon.h index b130f4e..20ad1d3 100644 --- a/ios/chrome/browser/ui/content_suggestions/set_up_list/set_up_list_item_icon.h +++ b/ios/chrome/browser/ui/content_suggestions/set_up_list/set_up_list_item_icon.h
@@ -16,10 +16,12 @@ @interface SetUpListItemIcon : UIView // Instantiates a `SetUpListItemItemIcon` for the given `type` with the -// given `complete` state and whether to configure with a `compactLayout`. +// given `complete` state, whether to configure with a `compactLayout`, and +// whether it should be placed `inSquare` container. - (instancetype)initWithType:(SetUpListItemType)type complete:(BOOL)complete - compactLayout:(BOOL)compactLayout; + compactLayout:(BOOL)compactLayout + inSquare:(BOOL)inSquare; // Plays the "sparkle" animation with the given `duration`, after the given // `delay`.
diff --git a/ios/chrome/browser/ui/content_suggestions/set_up_list/set_up_list_item_icon.mm b/ios/chrome/browser/ui/content_suggestions/set_up_list/set_up_list_item_icon.mm index a5421214..458c2ad19 100644 --- a/ios/chrome/browser/ui/content_suggestions/set_up_list/set_up_list_item_icon.mm +++ b/ios/chrome/browser/ui/content_suggestions/set_up_list/set_up_list_item_icon.mm
@@ -23,6 +23,7 @@ constexpr CGFloat kSymbolPointSize = 18; constexpr CGFloat kSparkleSize = 72; constexpr CGFloat kSparkleOffset = (kSparkleSize - kIconSize) / 2; +constexpr CGFloat kIconSquareContainerRadius = 7.0f; // The amount of rotation for the icons, during the animation. constexpr CGFloat kAnimationRotation = 90 * M_PI / 180; @@ -35,16 +36,12 @@ // `colorName`. UIImageView* IconForSymbol(NSString* symbol, BOOL compact_layout, - NSString* color_name = nil) { + NSArray<UIColor*>* color_palette = nil) { UIImageSymbolConfiguration* config = [UIImageSymbolConfiguration configurationWithWeight:UIImageSymbolWeightLight]; - if (color_name) { - // Create a palette which uses whiteColor as the stroke color. whiteColor - // is the same in Dark and Light modes. - NSArray<UIColor*>* palette = - @[ [UIColor whiteColor], [UIColor colorNamed:color_name] ]; - UIImageSymbolConfiguration* colorConfig = - [UIImageSymbolConfiguration configurationWithPaletteColors:palette]; + if (color_palette) { + UIImageSymbolConfiguration* colorConfig = [UIImageSymbolConfiguration + configurationWithPaletteColors:color_palette]; config = [config configurationByApplyingConfiguration:colorConfig]; } UIImage* image = DefaultSymbolWithConfiguration(symbol, config); @@ -58,6 +55,21 @@ return icon; } +UIView* IconInSquareContainer(UIImageView* icon, NSString* color) { + UIView* square_view = [[UIView alloc] init]; + square_view.translatesAutoresizingMaskIntoConstraints = NO; + square_view.layer.cornerRadius = kIconSquareContainerRadius; + square_view.backgroundColor = [UIColor colorNamed:color]; + + [square_view addSubview:icon]; + AddSameCenterConstraints(icon, square_view); + [NSLayoutConstraint activateConstraints:@[ + [square_view.widthAnchor constraintEqualToConstant:kIconSize], + [square_view.heightAnchor constraintEqualToAnchor:square_view.widthAnchor], + ]]; + return square_view; +} + UIImageView* DefaultBrowserIcon(BOOL compact_layout) { #if BUILDFLAG(IOS_USE_BRANDED_SYMBOLS) UIImageView* container = [[UIImageView alloc] init]; @@ -122,26 +134,59 @@ return circle_view; } +UIView* IconInSquare(NSString* symbol, + BOOL compact_layout, + NSString* color_name) { + UIImageConfiguration* compactImageConfiguration = [UIImageSymbolConfiguration + configurationWithPointSize:kSymbolPointSize + weight:UIImageSymbolWeightLight + scale:UIImageSymbolScaleSmall]; + UIView* square_view = [[UIView alloc] init]; + square_view.translatesAutoresizingMaskIntoConstraints = NO; + square_view.layer.cornerRadius = kIconSquareContainerRadius; + square_view.backgroundColor = [UIColor colorNamed:color_name]; + UIImage* symbol_image = + compact_layout + ? DefaultSymbolWithConfiguration(symbol, compactImageConfiguration) + : DefaultSymbolWithPointSize(symbol, kSymbolPointSize); + CHECK(symbol_image); + + UIImageView* symbol_view = [[UIImageView alloc] initWithImage:symbol_image]; + symbol_view.tintColor = [UIColor whiteColor]; + symbol_view.translatesAutoresizingMaskIntoConstraints = NO; + [square_view addSubview:symbol_view]; + AddSameCenterConstraints(symbol_view, square_view); + [NSLayoutConstraint activateConstraints:@[ + [square_view.widthAnchor constraintEqualToConstant:kIconSize], + [square_view.heightAnchor constraintEqualToAnchor:square_view.widthAnchor], + ]]; + return square_view; +} + } // namespace @implementation SetUpListItemIcon { SetUpListItemType _type; BOOL _complete; - UIImageView* _typeIcon; + UIView* _typeIcon; UIImageView* _checkmark; UIImageView* _sparkle; // YES if this view should configure itself with a compacted layout. BOOL _compactLayout; + // YES if this view should place the icon in a square shape. + BOOL _inSquare; } - (instancetype)initWithType:(SetUpListItemType)type complete:(BOOL)complete - compactLayout:(BOOL)compactLayout { + compactLayout:(BOOL)compactLayout + inSquare:(BOOL)inSquare { self = [super init]; if (self) { _type = type; _complete = complete; _compactLayout = compactLayout; + _inSquare = inSquare; } return self; } @@ -199,8 +244,9 @@ } _typeIcon = [self createTypeIcon]; - _checkmark = - IconForSymbol(kCheckmarkCircleFillSymbol, _compactLayout, kBlue500Color); + _checkmark = IconForSymbol( + kCheckmarkCircleFillSymbol, _compactLayout, + @[ [UIColor whiteColor], [UIColor colorNamed:kBlue500Color] ]); _sparkle = [self createSparkle]; [self addSubview:_typeIcon]; [self addSubview:_checkmark]; @@ -216,18 +262,35 @@ } // Creates the type-specific icon for this item. -- (UIImageView*)createTypeIcon { +- (UIView*)createTypeIcon { switch (_type) { - case SetUpListItemType::kSignInSync: - return IconForSymbol(kSyncCircleSymbol, _compactLayout, kGreen500Color); - case SetUpListItemType::kDefaultBrowser: - return DefaultBrowserIcon(_compactLayout); - case SetUpListItemType::kAutofill: - return IconInCircle(kEllipsisRectangleSymbol, _compactLayout, - kBlue500Color); - case SetUpListItemType::kAllSet: - return IconForSymbol(kCheckmarkSealFillSymbol, _compactLayout, - kBlue500Color); + case SetUpListItemType::kSignInSync: { + UIImageView* icon_image = IconForSymbol( + kSyncCircleSymbol, _compactLayout || _inSquare, + @[ [UIColor whiteColor], [UIColor colorNamed:kGreen500Color] ]); + if (_inSquare) { + return IconInSquareContainer(icon_image, kGreen500Color); + } + return icon_image; + } + case SetUpListItemType::kDefaultBrowser: { + UIImageView* icon_image = DefaultBrowserIcon(_compactLayout || _inSquare); + if (_inSquare) { + return IconInSquareContainer(icon_image, kBackgroundColor); + } + return icon_image; + } + case SetUpListItemType::kAutofill: { + return _inSquare + ? IconInSquare(kEllipsisRectangleSymbol, NO, kBlue500Color) + : IconInCircle(kEllipsisRectangleSymbol, _compactLayout, + kBlue500Color); + } + case SetUpListItemType::kAllSet: { + return IconForSymbol( + kCheckmarkSealFillSymbol, _compactLayout, + @[ [UIColor whiteColor], [UIColor colorNamed:kBlue500Color] ]); + } case SetUpListItemType::kFollow: // TODO(crbug.com/1428070): Add a Follow item to the Set Up List. NOTREACHED();
diff --git a/ios/chrome/browser/ui/content_suggestions/set_up_list/set_up_list_item_view.mm b/ios/chrome/browser/ui/content_suggestions/set_up_list/set_up_list_item_view.mm index 3a4c187f..a546b5e 100644 --- a/ios/chrome/browser/ui/content_suggestions/set_up_list/set_up_list_item_view.mm +++ b/ios/chrome/browser/ui/content_suggestions/set_up_list/set_up_list_item_view.mm
@@ -12,6 +12,7 @@ #import "ios/chrome/browser/ntp/set_up_list_item_type.h" #import "ios/chrome/browser/shared/ui/elements/crossfade_label.h" #import "ios/chrome/browser/shared/ui/symbols/symbols.h" +#import "ios/chrome/browser/shared/ui/util/uikit_ui_util.h" #import "ios/chrome/browser/ui/content_suggestions/set_up_list/constants.h" #import "ios/chrome/browser/ui/content_suggestions/set_up_list/set_up_list_item_icon.h" #import "ios/chrome/browser/ui/content_suggestions/set_up_list/set_up_list_item_view+private.h" @@ -54,6 +55,7 @@ // Holds all the configurable attributes of this view. struct ViewConfig { BOOL compact_layout; + BOOL hero_layout; int signin_sync_description; int default_browser_description; int autofill_description; @@ -66,6 +68,7 @@ @implementation SetUpListItemView { SetUpListItemIcon* _icon; + UIView* _iconContainerView; CrossfadeLabel* _title; CrossfadeLabel* _description; UIStackView* _contentStack; @@ -78,23 +81,7 @@ if (self) { _type = data.type; _complete = data.complete; - if (!data.compactLayout) { - // Normal ViewConfig. - const int syncString = - base::FeatureList::IsEnabled( - password_manager::features::kEnablePasswordsAccountStorage) - ? IDS_IOS_SET_UP_LIST_SIGN_IN_SYNC_DESCRIPTION_NO_PASSWORDS - : IDS_IOS_SET_UP_LIST_SIGN_IN_SYNC_DESCRIPTION; - _config = { - NO, - syncString, - IDS_IOS_SET_UP_LIST_DEFAULT_BROWSER_DESCRIPTION, - IDS_IOS_SET_UP_LIST_AUTOFILL_DESCRIPTION, - UIFontTextStyleSubheadline, - UIFontTextStyleFootnote, - kTextSpacing, - }; - } else { + if (data.compactLayout) { // ViewConfig for a compact layout. const int syncString = base::FeatureList::IsEnabled( @@ -103,6 +90,7 @@ : IDS_IOS_SET_UP_LIST_SIGN_IN_SYNC_SHORT_DESCRIPTION; _config = { YES, + NO, syncString, IDS_IOS_SET_UP_LIST_DEFAULT_BROWSER_SHORT_DESCRIPTION, IDS_IOS_SET_UP_LIST_AUTOFILL_SHORT_DESCRIPTION, @@ -110,6 +98,35 @@ UIFontTextStyleCaption2, kCompactTextSpacing, }; + + } else if (data.heroCellMagicStackLayout) { + _config = { + NO, + YES, + IDS_IOS_SET_UP_LIST_SIGN_IN_SYNC_MAGIC_STACK_DESCRIPTION, + IDS_IOS_SET_UP_LIST_DEFAULT_BROWSER_MAGIC_STACK_DESCRIPTION, + IDS_IOS_SET_UP_LIST_AUTOFILL_MAGIC_STACK_DESCRIPTION, + UIFontTextStyleSubheadline, + UIFontTextStyleFootnote, + kTextSpacing, + }; + } else { + // Normal ViewConfig. + const int syncString = + base::FeatureList::IsEnabled( + password_manager::features::kEnablePasswordsAccountStorage) + ? IDS_IOS_SET_UP_LIST_SIGN_IN_SYNC_DESCRIPTION_NO_PASSWORDS + : IDS_IOS_SET_UP_LIST_SIGN_IN_SYNC_DESCRIPTION; + _config = { + NO, + NO, + syncString, + IDS_IOS_SET_UP_LIST_DEFAULT_BROWSER_DESCRIPTION, + IDS_IOS_SET_UP_LIST_AUTOFILL_DESCRIPTION, + UIFontTextStyleSubheadline, + UIFontTextStyleFootnote, + kTextSpacing, + }; } } return self; @@ -193,9 +210,28 @@ self.accessibilityTraits += UIAccessibilityTraitNotEnabled; } + BOOL putIconInSquareBackground = + _config.hero_layout && _type != SetUpListItemType::kAllSet; _icon = [[SetUpListItemIcon alloc] initWithType:_type complete:_complete - compactLayout:_config.compact_layout]; + compactLayout:_config.compact_layout + inSquare:putIconInSquareBackground]; + if (putIconInSquareBackground) { + _icon.translatesAutoresizingMaskIntoConstraints = NO; + _iconContainerView = [[UIView alloc] init]; + _iconContainerView.backgroundColor = [UIColor colorNamed:kGrey100Color]; + _iconContainerView.layer.cornerRadius = 12; + _iconContainerView.layer.masksToBounds = NO; + _iconContainerView.clipsToBounds = YES; + [_iconContainerView addSubview:_icon]; + AddSameCenterConstraints(_icon, _iconContainerView); + [NSLayoutConstraint activateConstraints:@[ + [_iconContainerView.widthAnchor constraintEqualToConstant:56], + [_iconContainerView.widthAnchor + constraintEqualToAnchor:_iconContainerView.heightAnchor], + ]]; + } + _title = [self createTitle]; _description = [self createDescription]; @@ -207,8 +243,11 @@ textStack.spacing = _config.text_spacing; // Add a horizontal stack to contain the icon(s) and the text stack. + NSArray* arrangedSubviews = putIconInSquareBackground + ? @[ _iconContainerView, textStack ] + : @[ _icon, textStack ]; _contentStack = - [[UIStackView alloc] initWithArrangedSubviews:@[ _icon, textStack ]]; + [[UIStackView alloc] initWithArrangedSubviews:arrangedSubviews]; _contentStack.translatesAutoresizingMaskIntoConstraints = NO; _contentStack.alignment = UIStackViewAlignmentCenter; _contentStack.spacing = kPadding; @@ -229,7 +268,11 @@ CrossfadeLabel* label = [[CrossfadeLabel alloc] init]; label.text = [self titleText]; label.translatesAutoresizingMaskIntoConstraints = NO; - label.font = [UIFont preferredFontForTextStyle:_config.title_font]; + label.font = + _config.hero_layout + ? CreateDynamicFont(UIFontTextStyleFootnote, UIFontWeightSemibold) + : [UIFont preferredFontForTextStyle:_config.title_font]; + label.adjustsFontForContentSizeCategory = YES; if (_complete) { label.textColor = [UIColor colorNamed:kTextQuaternaryColor]; label.attributedText = Strikethrough(label.text); @@ -311,6 +354,9 @@ // Sets the various subview properties that should be animated. - (void)setAnimations { [_icon markComplete]; + if (_iconContainerView) { + _iconContainerView.backgroundColor = [UIColor clearColor]; + } [_title crossfade]; [_description crossfade]; }
diff --git a/ios/chrome/browser/ui/content_suggestions/set_up_list/set_up_list_item_view_data.h b/ios/chrome/browser/ui/content_suggestions/set_up_list/set_up_list_item_view_data.h index da0b528..cb610a03 100644 --- a/ios/chrome/browser/ui/content_suggestions/set_up_list/set_up_list_item_view_data.h +++ b/ios/chrome/browser/ui/content_suggestions/set_up_list/set_up_list_item_view_data.h
@@ -24,6 +24,10 @@ // YES if this view should configure itself with a compacted layout. @property(nonatomic, assign) BOOL compactLayout; +// YES if this view should configure itself for a hero cell layout in the Magic +// Stack. +@property(nonatomic, assign) BOOL heroCellMagicStackLayout; + @end #endif // IOS_CHROME_BROWSER_UI_CONTENT_SUGGESTIONS_SET_UP_LIST_SET_UP_LIST_ITEM_VIEW_DATA_H_
diff --git a/ios/chrome/browser/ui/content_suggestions/set_up_list/set_up_list_view.mm b/ios/chrome/browser/ui/content_suggestions/set_up_list/set_up_list_view.mm index 655807d..b7c786d 100644 --- a/ios/chrome/browser/ui/content_suggestions/set_up_list/set_up_list_view.mm +++ b/ios/chrome/browser/ui/content_suggestions/set_up_list/set_up_list_view.mm
@@ -38,6 +38,9 @@ // The padding used inside the list. constexpr CGFloat kPadding = 15; +// The spacing between items in the list. +constexpr CGFloat kItemSpacing = 18; + // The spacing used between title and description in the "All Set" View. constexpr CGFloat kAllSetSpacing = 10; @@ -280,7 +283,7 @@ [[UIStackView alloc] initWithArrangedSubviews:initialItems]; stack.axis = UILayoutConstraintAxisVertical; stack.translatesAutoresizingMaskIntoConstraints = NO; - stack.spacing = kPadding; + stack.spacing = kItemSpacing; stack.layer.masksToBounds = YES; stack.layer.cornerRadius = kBorderRadius; stack.layer.borderWidth = kBorderWidth;
diff --git a/ios/chrome/browser/ui/first_run/signin/signin_screen_coordinator.mm b/ios/chrome/browser/ui/first_run/signin/signin_screen_coordinator.mm index 57bddb09..00c5f8f 100644 --- a/ios/chrome/browser/ui/first_run/signin/signin_screen_coordinator.mm +++ b/ios/chrome/browser/ui/first_run/signin/signin_screen_coordinator.mm
@@ -139,6 +139,11 @@ self.mediator = nil; self.accountManagerService = nil; self.authenticationService = nil; + [super stop]; +} + +- (void)dealloc { + CHECK(!self.authenticationService); } #pragma mark - Private
diff --git a/ios/chrome/browser/ui/ntp/new_tab_page_coordinator.mm b/ios/chrome/browser/ui/ntp/new_tab_page_coordinator.mm index fc78bd87..748ae661 100644 --- a/ios/chrome/browser/ui/ntp/new_tab_page_coordinator.mm +++ b/ios/chrome/browser/ui/ntp/new_tab_page_coordinator.mm
@@ -792,7 +792,7 @@ #pragma mark - NewTabPageHeaderCommands - (void)updateForHeaderSizeChange { - [self.NTPViewController updateHeightAboveFeedAndScrollToTopIfNeeded]; + [self.NTPViewController updateHeightAboveFeed]; } - (void)fakeboxTapped {
diff --git a/ios/chrome/browser/ui/ntp/new_tab_page_view_controller.h b/ios/chrome/browser/ui/ntp/new_tab_page_view_controller.h index a18a0d6..e2061761 100644 --- a/ios/chrome/browser/ui/ntp/new_tab_page_view_controller.h +++ b/ios/chrome/browser/ui/ntp/new_tab_page_view_controller.h
@@ -100,12 +100,6 @@ // Lays out content above feed and adjusts content suggestions. - (void)updateNTPLayout; -// Signal to the ViewController that the height above the feed needs to be -// recalculated and thus also likely needs to be scrolled up to accommodate for -// the new height. Nothing may happen if the ViewController determines that the -// current scroll state should not change. -- (void)updateHeightAboveFeedAndScrollToTopIfNeeded; - // Signals to the ViewController that the height above the feed needs to be // recalculated. Usually called in response to an event that happens after // all the content has been loaded (example: a UI element expanding). Keeps
diff --git a/ios/chrome/browser/ui/ntp/new_tab_page_view_controller.mm b/ios/chrome/browser/ui/ntp/new_tab_page_view_controller.mm index 73f4081b..ba3804d 100644 --- a/ios/chrome/browser/ui/ntp/new_tab_page_view_controller.mm +++ b/ios/chrome/browser/ui/ntp/new_tab_page_view_controller.mm
@@ -525,18 +525,6 @@ [self updateFakeOmniboxForScrollPosition]; } -- (void)updateHeightAboveFeedAndScrollToTopIfNeeded { - if (self.viewDidFinishLoading && - !self.hasSavedOffsetFromPreviousScrollState) { - // Do not scroll to the top if there is a saved scroll state. Also, - // `-setContentOffsetToTop` potentially updates constaints, and if - // viewDidLoad has not finished, some views may not in the view hierarchy - // yet. - [self updateFeedInsetsForContentAbove]; - [self setContentOffsetToTop]; - } -} - - (void)updateHeightAboveFeed { if (self.viewDidFinishLoading) { CGFloat oldHeightAboveFeed = self.collectionView.contentInset.top; @@ -1412,6 +1400,22 @@ _backgroundGradientView.hidden = style == UIUserInterfaceStyleLight; } +// Signal to the ViewController that the height above the feed needs to be +// recalculated and thus also likely needs to be scrolled up to accommodate for +// the new height. Nothing may happen if the ViewController determines that the +// current scroll state should not change. +- (void)updateHeightAboveFeedAndScrollToTopIfNeeded { + if (self.viewDidFinishLoading && + !self.hasSavedOffsetFromPreviousScrollState) { + // Do not scroll to the top if there is a saved scroll state. Also, + // `-setContentOffsetToTop` potentially updates constaints, and if + // viewDidLoad has not finished, some views may not in the view hierarchy + // yet. + [self updateFeedInsetsForContentAbove]; + [self setContentOffsetToTop]; + } +} + #pragma mark - Helpers - (UIViewController*)contentSuggestionsViewController {
diff --git a/ios/chrome/browser/ui/overscroll_actions/BUILD.gn b/ios/chrome/browser/ui/overscroll_actions/BUILD.gn index c4ec70c..65f8911 100644 --- a/ios/chrome/browser/ui/overscroll_actions/BUILD.gn +++ b/ios/chrome/browser/ui/overscroll_actions/BUILD.gn
@@ -14,6 +14,7 @@ ] deps = [ "//base", + "//build:blink_buildflags", "//ios/chrome/app/strings", "//ios/chrome/app/theme", "//ios/chrome/browser/shared/public/features",
diff --git a/ios/chrome/browser/ui/overscroll_actions/overscroll_actions_controller.mm b/ios/chrome/browser/ui/overscroll_actions/overscroll_actions_controller.mm index e0eb7b6..f536673 100644 --- a/ios/chrome/browser/ui/overscroll_actions/overscroll_actions_controller.mm +++ b/ios/chrome/browser/ui/overscroll_actions/overscroll_actions_controller.mm
@@ -15,6 +15,7 @@ #import "base/metrics/user_metrics_action.h" #import "base/notreached.h" #import "base/time/time.h" +#import "build/blink_buildflags.h" #import "ios/chrome/browser/shared/ui/util/rtl_geometry.h" #import "ios/chrome/browser/shared/ui/util/uikit_ui_util.h" #import "ios/chrome/browser/ui/fullscreen/fullscreen_controller.h" @@ -460,11 +461,16 @@ // If Overscroll actions are triggered and dismissed quickly, it is // possible to be in a state where drag is enough to be in STARTED_PULLING // or ACTION_READY state, but with no selectedAction. + // TODO: This is not quite correct for blink, the contentOffset is always + // positive while scrolling the main content, resetting the insets causes + // after scrolling is done seems wrong. +#if !BUILDFLAG(USE_BLINK) if (contentOffset.y >= 0 || self.overscrollState == OverscrollState::NO_PULL_STARTED || self.overscrollActionView.selectedAction == OverscrollAction::NONE) { [self resetScrollViewTopContentInset]; } +#endif [self triggerActionIfNeeded]; _allowPullingActions = NO;
diff --git a/ios/chrome/browser/ui/popup_menu/overflow_menu/overflow_menu_carousel_egtest.mm b/ios/chrome/browser/ui/popup_menu/overflow_menu/overflow_menu_carousel_egtest.mm index 5195978..4ddaf54 100644 --- a/ios/chrome/browser/ui/popup_menu/overflow_menu/overflow_menu_carousel_egtest.mm +++ b/ios/chrome/browser/ui/popup_menu/overflow_menu/overflow_menu_carousel_egtest.mm
@@ -76,6 +76,7 @@ // Clean up What's New destination promo data. [ChromeEarlGrey removeUserDefaultObjectForKey:kWhatsNewUsageEntryKey]; + [ChromeEarlGrey removeUserDefaultObjectForKey:kWhatsNewM116UsageEntryKey]; } // Resolves the passphrase error from the Overflow Menu.
diff --git a/ios/chrome/browser/ui/popup_menu/overflow_menu/overflow_menu_mediator_unittest.mm b/ios/chrome/browser/ui/popup_menu/overflow_menu/overflow_menu_mediator_unittest.mm index e133d00..4df9c4fb 100644 --- a/ios/chrome/browser/ui/popup_menu/overflow_menu/overflow_menu_mediator_unittest.mm +++ b/ios/chrome/browser/ui/popup_menu/overflow_menu/overflow_menu_mediator_unittest.mm
@@ -107,6 +107,8 @@ void CleanupNSUserDefaults() { [[NSUserDefaults standardUserDefaults] removeObjectForKey:kWhatsNewUsageEntryKey]; + [[NSUserDefaults standardUserDefaults] + removeObjectForKey:kWhatsNewM116UsageEntryKey]; } } // namespace
diff --git a/ios/chrome/browser/ui/settings/google_services/manage_sync_settings_coordinator.mm b/ios/chrome/browser/ui/settings/google_services/manage_sync_settings_coordinator.mm index e8021e1..cdb905d 100644 --- a/ios/chrome/browser/ui/settings/google_services/manage_sync_settings_coordinator.mm +++ b/ios/chrome/browser/ui/settings/google_services/manage_sync_settings_coordinator.mm
@@ -25,6 +25,7 @@ #import "ios/chrome/browser/shared/ui/table_view/table_view_utils.h" #import "ios/chrome/browser/signin/authentication_service.h" #import "ios/chrome/browser/signin/authentication_service_factory.h" +#import "ios/chrome/browser/signin/identity_manager_factory.h" #import "ios/chrome/browser/signin/system_identity_manager.h" #import "ios/chrome/browser/sync/sync_observer_bridge.h" #import "ios/chrome/browser/sync/sync_service_factory.h" @@ -98,9 +99,9 @@ - (void)start { DCHECK(self.baseNavigationController); + ChromeBrowserState* browserState = self.browser->GetBrowserState(); SyncSetupService* syncSetupService = - SyncSetupServiceFactory::GetForBrowserState( - self.browser->GetBrowserState()); + SyncSetupServiceFactory::GetForBrowserState(browserState); switch (_accountState) { case SyncSettingsAccountState::kAdvancedInitialSyncSetup: case SyncSettingsAccountState::kSyncing: @@ -117,10 +118,12 @@ self.mediator = [[ManageSyncSettingsMediator alloc] initWithSyncService:self.syncService - userPrefService:self.browser->GetBrowserState()->GetPrefs() + userPrefService:browserState->GetPrefs() + identityManager:IdentityManagerFactory::GetForBrowserState( + browserState) initialAccountState:_accountState]; - self.mediator.syncSetupService = SyncSetupServiceFactory::GetForBrowserState( - self.browser->GetBrowserState()); + self.mediator.syncSetupService = + SyncSetupServiceFactory::GetForBrowserState(browserState); self.mediator.commandHandler = self; self.mediator.syncErrorHandler = self; self.mediator.forcedSigninEnabled = @@ -144,7 +147,7 @@ self.mediator.consumer = self.viewController; [self.baseNavigationController pushViewController:self.viewController animated:YES]; - _syncObserver.reset(new SyncObserverBridge(self, self.syncService)); + _syncObserver = std::make_unique<SyncObserverBridge>(self, self.syncService); } - (void)stop {
diff --git a/ios/chrome/browser/ui/settings/google_services/manage_sync_settings_mediator.h b/ios/chrome/browser/ui/settings/google_services/manage_sync_settings_mediator.h index 17eac27..e437611 100644 --- a/ios/chrome/browser/ui/settings/google_services/manage_sync_settings_mediator.h +++ b/ios/chrome/browser/ui/settings/google_services/manage_sync_settings_mediator.h
@@ -20,6 +20,9 @@ namespace syncer { class SyncService; } // syncer +namespace signin { +class IdentityManager; +} // namespace signin // Mediator for the manager sync settings. @interface ManageSyncSettingsMediator @@ -51,6 +54,7 @@ // `syncService`: Sync service. Should not be null. - (instancetype)initWithSyncService:(syncer::SyncService*)syncService userPrefService:(PrefService*)userPrefService + identityManager:(signin::IdentityManager*)identityManager initialAccountState: (SyncSettingsAccountState)initialAccountState NS_DESIGNATED_INITIALIZER;
diff --git a/ios/chrome/browser/ui/settings/google_services/manage_sync_settings_mediator.mm b/ios/chrome/browser/ui/settings/google_services/manage_sync_settings_mediator.mm index 24199df..1d6947d 100644 --- a/ios/chrome/browser/ui/settings/google_services/manage_sync_settings_mediator.mm +++ b/ios/chrome/browser/ui/settings/google_services/manage_sync_settings_mediator.mm
@@ -110,21 +110,28 @@ PrefBackedBoolean* _autocompleteWalletPreference; // Sync service. syncer::SyncService* _syncService; + // Observer for `IdentityManager`. + std::unique_ptr<signin::IdentityManagerObserverBridge> + _identityManagerObserver; } - (instancetype)initWithSyncService:(syncer::SyncService*)syncService userPrefService:(PrefService*)userPrefService + identityManager:(signin::IdentityManager*)identityManager initialAccountState: (SyncSettingsAccountState)initialAccountState { self = [super init]; if (self) { DCHECK(syncService); _syncService = syncService; - _syncObserver.reset(new SyncObserverBridge(self, syncService)); + _syncObserver = std::make_unique<SyncObserverBridge>(self, syncService); _autocompleteWalletPreference = [[PrefBackedBoolean alloc] initWithPrefService:userPrefService prefName:autofill::prefs::kAutofillWalletImportEnabled]; _autocompleteWalletPreference.observer = self; + _identityManagerObserver = + std::make_unique<signin::IdentityManagerObserverBridge>(identityManager, + self); _initialAccountState = initialAccountState; } return self; @@ -136,6 +143,7 @@ _autocompleteWalletPreference.observer = nil; [_autocompleteWalletPreference stop]; _autocompleteWalletPreference = nil; + _identityManagerObserver.reset(); } #pragma mark - Loads sync data type section
diff --git a/ios/chrome/browser/ui/settings/google_services/manage_sync_settings_mediator_unittest.mm b/ios/chrome/browser/ui/settings/google_services/manage_sync_settings_mediator_unittest.mm index 257e8db..a2f7989b 100644 --- a/ios/chrome/browser/ui/settings/google_services/manage_sync_settings_mediator_unittest.mm +++ b/ios/chrome/browser/ui/settings/google_services/manage_sync_settings_mediator_unittest.mm
@@ -23,6 +23,7 @@ #import "ios/chrome/browser/shared/ui/table_view/table_view_model.h" #import "ios/chrome/browser/signin/fake_system_identity.h" #import "ios/chrome/browser/signin/fake_system_identity_manager.h" +#import "ios/chrome/browser/signin/identity_manager_factory.h" #import "ios/chrome/browser/sync/mock_sync_service_utils.h" #import "ios/chrome/browser/sync/sync_service_factory.h" #import "ios/chrome/browser/sync/sync_setup_service_factory.h" @@ -99,6 +100,8 @@ mediator_ = [[ManageSyncSettingsMediator alloc] initWithSyncService:sync_service_mock_ userPrefService:pref_service_ + identityManager:IdentityManagerFactory::GetForBrowserState( + browser_state_.get()) initialAccountState:SyncSettingsAccountState::kSyncing]; mediator_.syncSetupService = sync_setup_service_mock_; mediator_.consumer = consumer_;
diff --git a/ios/chrome/browser/ui/whats_new/constants.h b/ios/chrome/browser/ui/whats_new/constants.h index 98ce5ff..abe2aeb 100644 --- a/ios/chrome/browser/ui/whats_new/constants.h +++ b/ios/chrome/browser/ui/whats_new/constants.h
@@ -20,4 +20,8 @@ // menu. extern NSString* const kWhatsNewUsageEntryKey; +// Key to store whether a user interacted with What's New M116 from the overflow +// menu. +extern NSString* const kWhatsNewM116UsageEntryKey; + #endif // IOS_CHROME_BROWSER_UI_WHATS_NEW_CONSTANTS_H_
diff --git a/ios/chrome/browser/ui/whats_new/constants.mm b/ios/chrome/browser/ui/whats_new/constants.mm index c27f31e..081b1887 100644 --- a/ios/chrome/browser/ui/whats_new/constants.mm +++ b/ios/chrome/browser/ui/whats_new/constants.mm
@@ -17,3 +17,6 @@ NSString* const kWhatsNewLaunchesAfterFre = @"whatsNewLaunchesAfterFre"; NSString* const kWhatsNewUsageEntryKey = @"userHasInteractedWithWhatsNew"; + +NSString* const kWhatsNewM116UsageEntryKey = + @"userHasInteractedWithWhatsNewM116";
diff --git a/ios/chrome/browser/ui/whats_new/promo/whats_new_scene_agent_unittest.mm b/ios/chrome/browser/ui/whats_new/promo/whats_new_scene_agent_unittest.mm index 297614e..a476292 100644 --- a/ios/chrome/browser/ui/whats_new/promo/whats_new_scene_agent_unittest.mm +++ b/ios/chrome/browser/ui/whats_new/promo/whats_new_scene_agent_unittest.mm
@@ -48,6 +48,8 @@ removeObjectForKey:kWhatsNewPromoRegistrationKey]; [[NSUserDefaults standardUserDefaults] removeObjectForKey:kWhatsNewUsageEntryKey]; + [[NSUserDefaults standardUserDefaults] + removeObjectForKey:kWhatsNewM116UsageEntryKey]; } } // namespace
diff --git a/ios/chrome/browser/ui/whats_new/whats_new_util.h b/ios/chrome/browser/ui/whats_new/whats_new_util.h index fb9115b..bbd90f8 100644 --- a/ios/chrome/browser/ui/whats_new/whats_new_util.h +++ b/ios/chrome/browser/ui/whats_new/whats_new_util.h
@@ -26,6 +26,9 @@ // menu. extern NSString* const kWhatsNewUsageEntryKey; +// Key to store whether a user interacted with What's New M116. +extern NSString* const kWhatsNewM116UsageEntryKey; + // Returns whether What's New was used in the overflow menu. This is used to // decide on the location of the What's New entry point in the overflow menu. bool WasWhatsNewUsed();
diff --git a/ios/chrome/browser/ui/whats_new/whats_new_util.mm b/ios/chrome/browser/ui/whats_new/whats_new_util.mm index 04fee2a..37671f7 100644 --- a/ios/chrome/browser/ui/whats_new/whats_new_util.mm +++ b/ios/chrome/browser/ui/whats_new/whats_new_util.mm
@@ -70,6 +70,14 @@ base::FEATURE_DISABLED_BY_DEFAULT); bool WasWhatsNewUsed() { + if (IsWhatsNewM116Enabled()) { + // Remove the previous user defaults + [[NSUserDefaults standardUserDefaults] + removeObjectForKey:kWhatsNewUsageEntryKey]; + return [[NSUserDefaults standardUserDefaults] + boolForKey:kWhatsNewM116UsageEntryKey]; + } + return [[NSUserDefaults standardUserDefaults] boolForKey:kWhatsNewUsageEntryKey]; } @@ -83,8 +91,13 @@ DCHECK(promosManager); promosManager->DeregisterPromo(promos_manager::Promo::WhatsNew); - [[NSUserDefaults standardUserDefaults] setBool:YES - forKey:kWhatsNewUsageEntryKey]; + if (IsWhatsNewM116Enabled()) { + [[NSUserDefaults standardUserDefaults] setBool:YES + forKey:kWhatsNewM116UsageEntryKey]; + } else { + [[NSUserDefaults standardUserDefaults] setBool:YES + forKey:kWhatsNewUsageEntryKey]; + } } void setWhatsNewPromoRegistration() {
diff --git a/ios/chrome/intents_extension/BUILD.gn b/ios/chrome/intents_extension/BUILD.gn index 41c203b..5e2b4d65 100644 --- a/ios/chrome/intents_extension/BUILD.gn +++ b/ios/chrome/intents_extension/BUILD.gn
@@ -10,5 +10,8 @@ ] deps = [ "//ios/chrome/common/intents" ] - frameworks = [ "Intents.framework" ] + frameworks = [ + "Intents.framework", + "Foundation.framework", + ] }
diff --git a/ios/chrome/intents_extension/chrome_intents_handler.mm b/ios/chrome/intents_extension/chrome_intents_handler.mm index 61318fc0..e4f13be 100644 --- a/ios/chrome/intents_extension/chrome_intents_handler.mm +++ b/ios/chrome/intents_extension/chrome_intents_handler.mm
@@ -4,6 +4,8 @@ #import "ios/chrome/intents_extension/chrome_intents_handler.h" +#import <Foundation/Foundation.h> + #import "ios/chrome/common/intents/OpenInChromeIncognitoIntent.h" #import "ios/chrome/common/intents/OpenInChromeIntent.h" #import "ios/chrome/common/intents/SearchInChromeIntent.h"
diff --git a/ios/chrome/widget_kit_extension/shortcuts_widget.swift b/ios/chrome/widget_kit_extension/shortcuts_widget.swift index a50e7a3..d9a349c 100644 --- a/ios/chrome/widget_kit_extension/shortcuts_widget.swift +++ b/ios/chrome/widget_kit_extension/shortcuts_widget.swift
@@ -168,7 +168,7 @@ // Shows the widget with 4 shortcuts placeholder in the gallery view to respect user's privacy. public var websitesPlaceholder: some View { - HStack(spacing: 0.5) { + HStack(spacing: 3) { WebSitePlaceholder() SeparatorVertical() WebSitePlaceholder() @@ -177,9 +177,7 @@ SeparatorVertical() WebSitePlaceholder() } - .padding(.horizontal, Dimensions.placeholdersPadding) .frame(minWidth: 0, maxWidth: .infinity) - .padding([.leading, .trailing], Dimensions.iconsPadding) } // Shows the "No shortcuts available" text when the user's delete @@ -252,8 +250,8 @@ } Spacer() }.frame(minWidth: 0, maxWidth: .infinity) - .padding([.leading, .trailing], Dimensions.stackFramePadding) } + Spacer() }.background(Colors.widgetMostVisitedSitesRow) } } @@ -269,7 +267,7 @@ // Vertical `|` separator view between two shortcuts in a row of the Shortcuts widget. struct SeparatorVertical: View { enum Dimensions { - static let height: CGFloat = 40 + static let height: CGFloat = 32 static let width: CGFloat = 2 static let cornerRadius: CGFloat = 1 } @@ -288,10 +286,13 @@ enum Dimensions { static let placeholderSize: CGFloat = 28 } + enum Colors { + static let widgetTextColor = Color("widget_text_color") + } var body: some View { Circle() .frame(width: Dimensions.placeholderSize, height: Dimensions.placeholderSize) - .foregroundColor(Color(.darkGray)) + .foregroundColor(Colors.widgetTextColor) .opacity(0.2) .frame(minWidth: 0, maxWidth: .infinity) } @@ -301,11 +302,13 @@ struct WebsiteLogo: View { enum Dimensions { static let placeholderSize: CGFloat = 28 - static let cornerRadius: CGFloat = 2 + static let cornerRadius: CGFloat = 4 static let fontSize: CGFloat = 15 } + enum Colors { - static let widgetTextColor: Color = Color("widget_text_color") + static let shortcutBackgroundColor = Color("widget_background_color") + static let shortcutTextColor = Color("widget_text_color") } let ntpTile: NTPTile @@ -314,7 +317,7 @@ if let backgroundColor = ntpTile.fallbackBackgroundColor { return Color(backgroundColor) } else { - return Color(.darkGray).opacity(0.3) + return Colors.shortcutBackgroundColor } } var fallbackMonogram: String { @@ -324,7 +327,7 @@ if let fallbackTextColor = ntpTile.fallbackTextColor { return Color(fallbackTextColor) } else { - return Colors.widgetTextColor + return Colors.shortcutTextColor } } var faviconImage: Image? { @@ -343,7 +346,6 @@ ZStack { RoundedRectangle(cornerRadius: Dimensions.cornerRadius, style: .continuous) .frame(width: Dimensions.placeholderSize, height: Dimensions.placeholderSize) - .foregroundColor(Color.white) faviconImage.resizable() .frame(width: Dimensions.placeholderSize, height: Dimensions.placeholderSize) } @@ -354,22 +356,21 @@ RoundedRectangle(cornerRadius: Dimensions.cornerRadius, style: .continuous) .frame(width: Dimensions.placeholderSize, height: Dimensions.placeholderSize) .foregroundColor(backgroundColor) - .frame(minWidth: 0, maxWidth: .infinity) monogramText } } var monogramText: some View { Text(verbatim: fallbackMonogram) - .font(.system(size: Dimensions.fontSize, weight: .bold)) - .foregroundColor(Color.white) + .font(.system(size: Dimensions.fontSize)) + .foregroundColor(fallbackTextColor) } var body: some View { if let faviconImage = faviconImage { - backgroundWithLogo(faviconImage: faviconImage) + backgroundWithLogo(faviconImage: faviconImage).cornerRadius(Dimensions.cornerRadius) } else { - monogramIcon + monogramIcon.cornerRadius(Dimensions.cornerRadius) } } }
diff --git a/ios/web/content/BUILD.gn b/ios/web/content/BUILD.gn index 16d175b6..2ae3660 100644 --- a/ios/web/content/BUILD.gn +++ b/ios/web/content/BUILD.gn
@@ -34,6 +34,8 @@ "web_state/content_web_state_builder.mm", "web_state/crc_web_view_proxy_impl.h", "web_state/crc_web_view_proxy_impl.mm", + "web_state/crc_web_viewport_container_view.h", + "web_state/crc_web_viewport_container_view.mm", ] deps = [ ":send_webkit_message_js",
diff --git a/ios/web/content/web_state/content_web_state.h b/ios/web/content/web_state/content_web_state.h index 6816be4..8f7bb29 100644 --- a/ios/web/content/web_state/content_web_state.h +++ b/ios/web/content/web_state/content_web_state.h
@@ -20,6 +20,7 @@ #import "ios/web/public/favicon/favicon_status.h" #import "ios/web/public/session/session_certificate_policy_cache.h" +@class CRCWebViewportContainerView; @class CRWWebViewProxy; #if !BUILDFLAG(USE_BLINK) @@ -174,10 +175,18 @@ const blink::mojom::WindowFeatures& window_features, bool user_gesture, bool* was_blocked) override; + int GetTopControlsHeight() override; + int GetTopControlsMinHeight() override; + int GetBottomControlsHeight() override; + int GetBottomControlsMinHeight() override; + bool ShouldAnimateBrowserControlsHeightChanges() override; + bool DoBrowserControlsShrinkRendererSize( + content::WebContents* web_contents) override; + bool OnlyExpandTopControlsAtPageTop() override; private: WebStateDelegate* delegate_ = nullptr; - UIScrollView* web_view_; + CRCWebViewportContainerView* web_view_; CRWSessionStorage* session_storage_; std::unique_ptr<content::WebContents> web_contents_; std::unique_ptr<content::WebContents> child_web_contents_;
diff --git a/ios/web/content/web_state/content_web_state.mm b/ios/web/content/web_state/content_web_state.mm index 630613d..389039d 100644 --- a/ios/web/content/web_state/content_web_state.mm +++ b/ios/web/content/web_state/content_web_state.mm
@@ -4,6 +4,7 @@ #import "ios/web/content/web_state/content_web_state.h" +#import "base/mac/foundation_util.h" #import "base/strings/utf_string_conversions.h" #import "content/public/browser/navigation_entry.h" #import "content/public/browser/web_contents.h" @@ -11,6 +12,7 @@ #import "ios/web/content/navigation/content_navigation_context.h" #import "ios/web/content/web_state/content_web_state_builder.h" #import "ios/web/content/web_state/crc_web_view_proxy_impl.h" +#import "ios/web/content/web_state/crc_web_viewport_container_view.h" #import "ios/web/find_in_page/java_script_find_in_page_manager_impl.h" #import "ios/web/public/favicon/favicon_url.h" #import "ios/web/public/navigation/navigation_item.h" @@ -96,18 +98,19 @@ this, params.browser_state, web_contents_->GetController()); web_frames_manager_ = std::make_unique<ContentWebFramesManager>(this); - UIView* web_contents_view = web_contents_->GetNativeView(); - web_contents_view.translatesAutoresizingMaskIntoConstraints = NO; - web_contents_view.layer.backgroundColor = UIColor.grayColor.CGColor; + UIScrollView* web_contents_view = + base::mac::ObjCCastStrict<UIScrollView>(web_contents_->GetNativeView()); - web_view_ = [[UIScrollView alloc] init]; - web_view_.translatesAutoresizingMaskIntoConstraints = NO; - web_view_.backgroundColor = UIColor.redColor; + web_view_ = [[CRCWebViewportContainerView alloc] init]; + // Comment this back in to show visual glitches that might be present. + // web_view_.backgroundColor = UIColor.redColor; CRCWebViewProxyImpl* proxy = [[CRCWebViewProxyImpl alloc] init]; - proxy.contentView = web_view_; + proxy.contentView = web_contents_view; web_view_proxy_ = proxy; + [web_view_ addSubview:web_contents_view]; + // These should be moved when the are removed from CRWWebController. web::JavaScriptFindInPageManagerImpl::CreateForWebState(this); web::TextFragmentsManagerImpl::CreateForWebState(this); @@ -177,7 +180,7 @@ void ContentWebState::SetWebUsageEnabled(bool enabled) {} UIView* ContentWebState::GetView() { - return session_storage_ ? nil : web_contents_->GetNativeView(); + return web_view_; } void ContentWebState::DidCoverWebContent() {} @@ -566,4 +569,38 @@ DCHECK(!child_web_contents_); } +int ContentWebState::GetTopControlsHeight() { + return [web_view_ maxViewportInsets].top; +} + +int ContentWebState::GetTopControlsMinHeight() { + return [web_view_ minViewportInsets].top; +} + +int ContentWebState::GetBottomControlsHeight() { + return [web_view_ maxViewportInsets].bottom; +} + +int ContentWebState::GetBottomControlsMinHeight() { + return [web_view_ minViewportInsets].bottom; +} + +bool ContentWebState::ShouldAnimateBrowserControlsHeightChanges() { + return false; +} + +bool ContentWebState::DoBrowserControlsShrinkRendererSize( + content::WebContents* web_contents) { + UIScrollView* web_contents_view = + base::mac::ObjCCastStrict<UIScrollView>(web_contents->GetNativeView()); + if (web_contents_view.contentInset.top > GetTopControlsMinHeight()) { + return true; + } + return false; +} + +bool ContentWebState::OnlyExpandTopControlsAtPageTop() { + return false; +} + } // namespace web
diff --git a/ios/web/content/web_state/crc_web_viewport_container_view.h b/ios/web/content/web_state/crc_web_viewport_container_view.h new file mode 100644 index 0000000..2abbc95 --- /dev/null +++ b/ios/web/content/web_state/crc_web_viewport_container_view.h
@@ -0,0 +1,24 @@ +// Copyright 2023 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef IOS_WEB_CONTENT_WEB_STATE_CRC_WEB_VIEWPORT_CONTAINER_VIEW_H_ +#define IOS_WEB_CONTENT_WEB_STATE_CRC_WEB_VIEWPORT_CONTAINER_VIEW_H_ + +#import <UIKit/UIKit.h> + +#import "ios/web/common/crw_content_view.h" +#import "ios/web/common/crw_viewport_adjustment_container.h" + +// Container view class that manages the display of content. +@interface CRCWebViewportContainerView : UIView <CRWViewportAdjustmentContainer> + +// The minimum viewport insets. +@property(nonatomic, assign) UIEdgeInsets minViewportInsets; + +// The maximum viewport insets. +@property(nonatomic, assign) UIEdgeInsets maxViewportInsets; + +@end + +#endif // IOS_WEB_CONTENT_WEB_STATE_CRC_WEB_VIEWPORT_CONTAINER_VIEW_H_
diff --git a/ios/web/content/web_state/crc_web_viewport_container_view.mm b/ios/web/content/web_state/crc_web_viewport_container_view.mm new file mode 100644 index 0000000..c90e5c2 --- /dev/null +++ b/ios/web/content/web_state/crc_web_viewport_container_view.mm
@@ -0,0 +1,37 @@ +// Copyright 2023 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#import "ios/web/content/web_state/crc_web_viewport_container_view.h" + +#import "base/check.h" +#import "base/notreached.h" +#import "ios/web/common/crw_viewport_adjustment.h" +#import "ios/web/common/crw_viewport_adjustment_container.h" + +#if !defined(__has_feature) || !__has_feature(objc_arc) +#error "This file requires ARC support." +#endif + +@interface CRCWebViewportContainerView () <CRWViewportAdjustment> + +@end + +@implementation CRCWebViewportContainerView + +@synthesize viewportInsets = _viewportInsets; +@synthesize viewportEdgesAffectedBySafeArea = _viewportEdgesAffectedBySafeArea; +@synthesize minViewportInsets = _minViewportInsets; +@synthesize maxViewportInsets = _maxViewportInsets; + +- (UIView<CRWViewportAdjustment>*)fullscreenViewportAdjuster { + return self; +} + +- (void)updateMinViewportInsets:(UIEdgeInsets)minInsets + maxViewportInsets:(UIEdgeInsets)maxInsets { + _minViewportInsets = minInsets; + _maxViewportInsets = maxInsets; +} + +@end
diff --git a/media/base/callback_timeout_helpers.h b/media/base/callback_timeout_helpers.h index 3da31226..f2860c5 100644 --- a/media/base/callback_timeout_helpers.h +++ b/media/base/callback_timeout_helpers.h
@@ -47,6 +47,16 @@ namespace media { +// Enum class for reporting callback timeout status to UMA. +// These values are persisted to logs. Entries should not be renumbered and +// numeric values should never be reused. +enum class CallbackTimeoutStatus { + kCreate = 0, + kTimeout = 1, + kDestructedBeforeTimeout = 2, + kMaxValue = kDestructedBeforeTimeout, +}; + // Callback time for the timeout handler in `WrapCallbackWithTimeoutHandler`. // If `called_on_destruction` is true, the timeout callback was called because // the original callback was destructed without running. Otherwise, it was
diff --git a/media/base/pipeline_impl.cc b/media/base/pipeline_impl.cc index fef461c..7115fa8 100644 --- a/media/base/pipeline_impl.cc +++ b/media/base/pipeline_impl.cc
@@ -14,6 +14,7 @@ #include "base/functional/callback_helpers.h" #include "base/location.h" #include "base/memory/raw_ptr.h" +#include "base/metrics/histogram_functions.h" #include "base/metrics/histogram_macros.h" #include "base/strings/string_number_conversions.h" #include "base/synchronization/lock.h" @@ -22,6 +23,7 @@ #include "base/task/sequenced_task_runner.h" #include "base/task/single_thread_task_runner.h" #include "build/build_config.h" +#include "media/base/callback_timeout_helpers.h" #include "media/base/cdm_context.h" #include "media/base/decoder.h" #include "media/base/demuxer.h" @@ -52,6 +54,16 @@ return natural_size; } +void OnCallbackTimeout(const std::string& uma_name, + bool called_on_destruction) { + DVLOG(1) << "Callback Timeout: " << uma_name + << ", called_on_destruction=" << called_on_destruction; + base::UmaHistogramEnumeration( + uma_name, called_on_destruction + ? CallbackTimeoutStatus::kDestructedBeforeTimeout + : CallbackTimeoutStatus::kTimeout); +} + } // namespace // A wrapper of Renderer that runs on the |media_task_runner|. @@ -1154,7 +1166,14 @@ shared_state_.renderer->SetWasPlayedWithUserActivation( was_played_with_user_activation_); - shared_state_.renderer->Initialize(demuxer_, this, std::move(done_cb)); + // Initialize Renderer and report timeout UMA. + std::string uma_name = "Media.InitializeRendererTimeout"; + base::UmaHistogramEnumeration(uma_name, CallbackTimeoutStatus::kCreate); + shared_state_.renderer->Initialize( + demuxer_, this, + WrapCallbackWithTimeoutHandler( + std::move(done_cb), /*timeout_delay=*/base::Seconds(10), + base::BindOnce(&OnCallbackTimeout, uma_name))); } void PipelineImpl::RendererWrapper::DestroyRenderer() {
diff --git a/media/gpu/chromeos/image_processor_perf_test.cc b/media/gpu/chromeos/image_processor_perf_test.cc index 8d7004c..bfa6d1d 100644 --- a/media/gpu/chromeos/image_processor_perf_test.cc +++ b/media/gpu/chromeos/image_processor_perf_test.cc
@@ -7,6 +7,7 @@ #include <vector> #include "base/bits.h" +#include "base/logging.h" #include "base/rand_util.h" #include "base/run_loop.h" #include "base/test/bind.h" @@ -33,12 +34,15 @@ static constexpr int kNumberOfTestFrames = 10; static constexpr int kNumberOfTestCycles = 1000; +static constexpr int kNumberOfCappedTestCycles = 300; static constexpr int kTestImageWidth = 1920; static constexpr int kTestImageHeight = 1088; static constexpr int kRandomFrameSeed = 1000; +static constexpr int kUsecPerFrameAt60fps = 16666; + namespace media { namespace { @@ -291,6 +295,142 @@ reporter.AddResult(".frames_per_second", fps); } +// Tests GLImageProcessor by feeding in |kNumberOfTestFrames| unique input +// frames looped over |kNumberOfCappedTestCycles| iterations to the +// GLImageProcessor at 60fps. Will print out elapsed processing time. +TEST_F(ImageProcessorPerfTest, CappedGLImageProcessorPerfTest) { + InitializeImageProcessorTest(); + + scoped_refptr<base::SequencedTaskRunner> client_task_runner = + base::SequencedTaskRunner::GetCurrentDefault(); + base::RepeatingClosure quit_closure = run_loop_.QuitClosure(); + std::unique_ptr<ImageProcessor> gl_image_processor = ImageProcessorFactory:: + CreateGLImageProcessorWithInputCandidatesForTesting( + candidates_, test_image_visible_rect_, test_image_size_, + /*num_buffers=*/1, client_task_runner, pick_format_cb_, error_cb_); + ASSERT_TRUE(gl_image_processor) << "Error creating GLImageProcessor"; + + LOG(INFO) << "Running GLImageProcessor Capped Perf Test"; + int loop_iterations = kNumberOfCappedTestCycles; + base::TimeTicks start, end; + base::RepeatingCallback<void(scoped_refptr<VideoFrame>)>* gl_callback_ptr; + base::RepeatingCallback gl_callback = + base::BindLambdaForTesting([&](scoped_refptr<VideoFrame> frame) { + CHECK(client_task_runner->RunsTasksInCurrentSequence()); + + if (!(--loop_iterations)) { + quit_closure.Run(); + } else { + end = base::TimeTicks::Now(); + base::TimeDelta delta_time = end - start; + if (delta_time.InMicroseconds() < kUsecPerFrameAt60fps) { + usleep(kUsecPerFrameAt60fps - delta_time.InMicroseconds()); + } else { + LOG(WARNING) << "Frame detiling was late by " + << (delta_time.InMicroseconds() - kUsecPerFrameAt60fps) + << "us"; + } + start = base::TimeTicks::Now(); + gl_image_processor->Process( + input_frames_[loop_iterations % kNumberOfTestFrames], + output_frame_, *gl_callback_ptr); + } + }); + + gl_callback_ptr = &gl_callback; + + gl_image_processor->Process(input_frames_[0], output_frame_, + *gl_callback_ptr); + + start = base::TimeTicks::Now(); + auto total_start_time = base::TimeTicks::Now(); + run_loop_.Run(); + + auto total_end_time = base::TimeTicks::Now(); + base::TimeDelta total_delta_time = total_end_time - total_start_time; + const double fps = (kNumberOfCappedTestCycles / total_delta_time.InSeconds()); + + perf_test::PerfResultReporter reporter("GLImageProcessor", "Capped Test"); + reporter.RegisterImportantMetric(".frames_decoded", "frames"); + reporter.RegisterImportantMetric(".total_duration", "us"); + reporter.RegisterImportantMetric(".frames_per_second", "fps"); + + reporter.AddResult(".frames_decoded", + static_cast<double>(kNumberOfCappedTestCycles)); + reporter.AddResult(".total_duration", + static_cast<double>(total_delta_time.InMicroseconds())); + reporter.AddResult(".frames_per_second", fps); +} + +// Tests LibYUV by feeding in |kNumberOfTestFrames| unique input +// frames looped over |kNumberOfCappedTestCycles| iterations to the +// LibYUV at 60fps. Will print out elapsed processing time. +TEST_F(ImageProcessorPerfTest, CappedLibYUVPerfTest) { + InitializeImageProcessorTest(); + + scoped_refptr<base::SequencedTaskRunner> client_task_runner = + base::SequencedTaskRunner::GetCurrentDefault(); + base::RepeatingClosure quit_closure = run_loop_.QuitClosure(); + std::unique_ptr<ImageProcessor> libyuv_image_processor = + ImageProcessorFactory:: + CreateLibYUVImageProcessorWithInputCandidatesForTesting( + candidates_, test_image_visible_rect_, test_image_size_, + /*num_buffers=*/1, client_task_runner, pick_format_cb_, + error_cb_); + ASSERT_TRUE(libyuv_image_processor) << "Error creating LibYUV"; + + LOG(INFO) << "Running LibYUV Capped Perf Test"; + int loop_iterations = 0; + base::TimeTicks start, end; + base::RepeatingCallback<void(scoped_refptr<VideoFrame>)>* libyuv_callback_ptr; + base::RepeatingCallback libyuv_callback = + base::BindLambdaForTesting([&](scoped_refptr<VideoFrame> frame) { + CHECK(client_task_runner->RunsTasksInCurrentSequence()); + + if ((++loop_iterations) >= kNumberOfCappedTestCycles) { + quit_closure.Run(); + } else { + end = base::TimeTicks::Now(); + base::TimeDelta delta_time = end - start; + if (delta_time.InMicroseconds() < kUsecPerFrameAt60fps) { + usleep(kUsecPerFrameAt60fps - delta_time.InMicroseconds()); + } else { + LOG(WARNING) << "Frame detiling was late by " + << (delta_time.InMicroseconds() - kUsecPerFrameAt60fps) + << "us"; + } + start = base::TimeTicks::Now(); + libyuv_image_processor->Process( + input_frames_[loop_iterations % kNumberOfTestFrames], + output_frame_, *libyuv_callback_ptr); + } + }); + + libyuv_callback_ptr = &libyuv_callback; + + libyuv_image_processor->Process(input_frames_[0], output_frame_, + *libyuv_callback_ptr); + + start = base::TimeTicks::Now(); + auto total_start_time = base::TimeTicks::Now(); + run_loop_.Run(); + + auto total_end_time = base::TimeTicks::Now(); + base::TimeDelta total_delta_time = total_end_time - total_start_time; + const double fps = (kNumberOfCappedTestCycles / total_delta_time.InSeconds()); + + perf_test::PerfResultReporter reporter("LibYUV", "Capped Test"); + reporter.RegisterImportantMetric(".frames_decoded", "frames"); + reporter.RegisterImportantMetric(".total_duration", "us"); + reporter.RegisterImportantMetric(".frames_per_second", "fps"); + + reporter.AddResult(".frames_decoded", + static_cast<double>(kNumberOfCappedTestCycles)); + reporter.AddResult(".total_duration", + static_cast<double>(total_delta_time.InMicroseconds())); + reporter.AddResult(".frames_per_second", fps); +} + } // namespace } // namespace media
diff --git a/media/gpu/mac/video_toolbox_decompression_interface.cc b/media/gpu/mac/video_toolbox_decompression_interface.cc index cbfa6a4..72aed22 100644 --- a/media/gpu/mac/video_toolbox_decompression_interface.cc +++ b/media/gpu/mac/video_toolbox_decompression_interface.cc
@@ -11,15 +11,18 @@ #include "base/functional/callback_forward.h" #include "base/logging.h" #include "base/mac/mac_logging.h" +#include "media/base/media_log.h" #include "media/gpu/mac/video_toolbox_decompression_session.h" namespace media { VideoToolboxDecompressionInterface::VideoToolboxDecompressionInterface( scoped_refptr<base::SequencedTaskRunner> task_runner, + std::unique_ptr<MediaLog> media_log, OutputCB output_cb, ErrorCB error_cb) : task_runner_(std::move(task_runner)), + media_log_(std::move(media_log)), output_cb_(std::move(output_cb)), error_cb_(std::move(error_cb)) { DVLOG(1) << __func__; @@ -27,7 +30,7 @@ weak_this_ = weak_this_factory_.GetWeakPtr(); decompression_session_ = std::make_unique<VideoToolboxDecompressionSessionImpl>( - task_runner_, + task_runner_, media_log_->Clone(), base::BindRepeating(&VideoToolboxDecompressionInterface::OnOutput, weak_this_)); } @@ -50,7 +53,7 @@ pending_decodes_.push(std::make_pair(std::move(sample), context)); if (!ProcessDecodes()) { - NotifyError(); + NotifyError(DecoderStatus::Codes::kPlatformDecodeFailure); return; } } @@ -74,7 +77,7 @@ return pending_decodes_.size() + active_decodes_; } -void VideoToolboxDecompressionInterface::NotifyError() { +void VideoToolboxDecompressionInterface::NotifyError(DecoderStatus status) { DVLOG(1) << __func__; DCHECK(task_runner_->RunsTasksInCurrentSequence()); DCHECK(error_cb_); @@ -86,13 +89,14 @@ task_runner_->PostTask( FROM_HERE, base::BindOnce(&VideoToolboxDecompressionInterface::CallErrorCB, - weak_this_, std::move(error_cb_))); + weak_this_, std::move(error_cb_), std::move(status))); } -void VideoToolboxDecompressionInterface::CallErrorCB(ErrorCB error_cb) { +void VideoToolboxDecompressionInterface::CallErrorCB(ErrorCB error_cb, + DecoderStatus status) { DVLOG(4) << __func__; DCHECK(task_runner_->RunsTasksInCurrentSequence()); - std::move(error_cb).Run(); + std::move(error_cb).Run(std::move(status)); } bool VideoToolboxDecompressionInterface::ProcessDecodes() { @@ -158,6 +162,7 @@ &kCFTypeDictionaryValueCallBacks)); if (!decoder_config) { DLOG(ERROR) << "CFDictionaryCreateMutable() failed"; + MEDIA_LOG(ERROR, media_log_.get()) << "CFDictionaryCreateMutable() failed"; return false; } @@ -208,16 +213,20 @@ if (status != noErr) { OSSTATUS_DLOG(ERROR, status) << "VTDecompressionOutputCallback"; - NotifyError(); + OSSTATUS_MEDIA_LOG(ERROR, status, media_log_.get()) + << "VTDecompressionOutputCallback"; + NotifyError(DecoderStatus::Codes::kPlatformDecodeFailure); return; } if (!image || CFGetTypeID(image) != CVPixelBufferGetTypeID()) { DLOG(ERROR) << "Decoded image is not a CVPixelBuffer"; + MEDIA_LOG(ERROR, media_log_.get()) + << "Decoded image is not a CVPixelBuffer"; // TODO(crbug.com/1331597): Potentially allow intentional dropped frames. // (signaled in |flags|). It might make sense to dump without crashing to // help track down why this happens. - NotifyError(); + NotifyError(DecoderStatus::Codes::kPlatformDecodeFailure); return; } @@ -228,7 +237,7 @@ if (draining_ && !active_decodes_) { DestroySession(); if (!ProcessDecodes()) { - NotifyError(); + NotifyError(DecoderStatus::Codes::kPlatformDecodeFailure); return; } }
diff --git a/media/gpu/mac/video_toolbox_decompression_interface.h b/media/gpu/mac/video_toolbox_decompression_interface.h index 6a0f183c..a3e5b15 100644 --- a/media/gpu/mac/video_toolbox_decompression_interface.h +++ b/media/gpu/mac/video_toolbox_decompression_interface.h
@@ -17,11 +17,14 @@ #include "base/memory/scoped_refptr.h" #include "base/memory/weak_ptr.h" #include "base/task/sequenced_task_runner.h" +#include "media/base/decoder_status.h" #include "media/gpu/mac/video_toolbox_decompression_session.h" #include "media/gpu/media_gpu_export.h" namespace media { +class MediaLog; + // Wraps VideoToolboxDecompressionSession to handle reconfiguration. Callbacks // are never called re-entrantly or after destruction. class MEDIA_GPU_EXPORT VideoToolboxDecompressionInterface { @@ -29,10 +32,11 @@ using OutputCB = base::RepeatingCallback<void(base::ScopedCFTypeRef<CVImageBufferRef>, void*)>; - using ErrorCB = base::OnceClosure; + using ErrorCB = base::OnceCallback<void(DecoderStatus)>; VideoToolboxDecompressionInterface( scoped_refptr<base::SequencedTaskRunner> task_runner, + std::unique_ptr<MediaLog> media_log, OutputCB output_cb, ErrorCB error_cb); @@ -59,11 +63,11 @@ private: // Shut down and call |error_cb_|. - void NotifyError(); + void NotifyError(DecoderStatus status); // Helper to call |error_cb|. Used to post |error_cb_| without calling it // after destruction. - void CallErrorCB(ErrorCB error_cb); + void CallErrorCB(ErrorCB error_cb, DecoderStatus status); // Send queued decodes to VideoToolbox if possible. [[nodiscard]] bool ProcessDecodes(); @@ -75,6 +79,7 @@ void DestroySession(); scoped_refptr<base::SequencedTaskRunner> task_runner_; + std::unique_ptr<MediaLog> media_log_; OutputCB output_cb_; ErrorCB error_cb_; // |!error_cb_| indicates an error state.
diff --git a/media/gpu/mac/video_toolbox_decompression_interface_unittest.cc b/media/gpu/mac/video_toolbox_decompression_interface_unittest.cc index baec38f3..0cb83bc5b3 100644 --- a/media/gpu/mac/video_toolbox_decompression_interface_unittest.cc +++ b/media/gpu/mac/video_toolbox_decompression_interface_unittest.cc
@@ -3,10 +3,13 @@ // found in the LICENSE file. #include <stdint.h> +#include <memory> #include "base/memory/ptr_util.h" #include "base/memory/raw_ptr.h" #include "base/test/task_environment.h" +#include "media/base/decoder_status.h" +#include "media/base/media_util.h" #include "media/gpu/mac/video_toolbox_decompression_interface.h" #include "media/gpu/mac/video_toolbox_decompression_session.h" #include "testing/gmock/include/gmock/gmock.h" @@ -139,13 +142,14 @@ ~VideoToolboxDecompressionInterfaceTest() override = default; protected: - MOCK_METHOD0(OnError, void()); + MOCK_METHOD1(OnError, void(DecoderStatus)); MOCK_METHOD2(OnOutput, void(base::ScopedCFTypeRef<CVImageBufferRef>, void*)); base::test::TaskEnvironment task_environment_; std::unique_ptr<VideoToolboxDecompressionInterface> video_toolbox_{ std::make_unique<VideoToolboxDecompressionInterface>( task_environment_.GetMainThreadTaskRunner(), + std::make_unique<NullMediaLog>(), base::BindRepeating(&VideoToolboxDecompressionInterfaceTest::OnOutput, base::Unretained(this)), base::BindOnce(&VideoToolboxDecompressionInterfaceTest::OnError, @@ -184,7 +188,7 @@ decompression_session_->can_create = false; - EXPECT_CALL(*this, OnError()); + EXPECT_CALL(*this, OnError(_)); video_toolbox_->Decode(sample, context); @@ -262,7 +266,7 @@ decompression_session_->can_decode_frame = false; - EXPECT_CALL(*this, OnError()); + EXPECT_CALL(*this, OnError(_)); video_toolbox_->Decode(sample, context); @@ -283,7 +287,7 @@ EXPECT_EQ(video_toolbox_->PendingDecodes(), 1ul); EXPECT_EQ(decompression_session_->ActiveDecodes(), 1ul); - EXPECT_CALL(*this, OnError()); + EXPECT_CALL(*this, OnError(_)); decompression_session_->FailDecode();
diff --git a/media/gpu/mac/video_toolbox_decompression_session.cc b/media/gpu/mac/video_toolbox_decompression_session.cc index b00fabb..cac27c81 100644 --- a/media/gpu/mac/video_toolbox_decompression_session.cc +++ b/media/gpu/mac/video_toolbox_decompression_session.cc
@@ -6,6 +6,7 @@ #include "base/logging.h" #include "base/mac/mac_logging.h" +#include "media/base/media_log.h" namespace media { @@ -30,8 +31,11 @@ VideoToolboxDecompressionSessionImpl::VideoToolboxDecompressionSessionImpl( scoped_refptr<base::SequencedTaskRunner> task_runner, + std::unique_ptr<MediaLog> media_log, OutputCB output_cb) - : task_runner_(std::move(task_runner)), output_cb_(std::move(output_cb)) { + : task_runner_(std::move(task_runner)), + media_log_(std::move(media_log)), + output_cb_(std::move(output_cb)) { DVLOG(1) << __func__; weak_this_ = weak_this_factory_.GetWeakPtr(); } @@ -61,6 +65,8 @@ session_.InitializeInto()); if (status != noErr) { OSSTATUS_DLOG(ERROR, status) << "VTDecompressionSessionCreate()"; + OSSTATUS_MEDIA_LOG(ERROR, status, media_log_.get()) + << "VTDecompressionSessionCreate()"; DCHECK(!session_); return false; } @@ -114,6 +120,8 @@ session_, sample, decode_flags, context, nullptr); if (status != noErr) { OSSTATUS_DLOG(ERROR, status) << "VTDecompressionSessionDecodeFrame()"; + OSSTATUS_MEDIA_LOG(ERROR, status, media_log_.get()) + << "VTDecompressionSessionDecodeFrame()"; return false; }
diff --git a/media/gpu/mac/video_toolbox_decompression_session.h b/media/gpu/mac/video_toolbox_decompression_session.h index 6b5bacb0..668eeca 100644 --- a/media/gpu/mac/video_toolbox_decompression_session.h +++ b/media/gpu/mac/video_toolbox_decompression_session.h
@@ -8,6 +8,8 @@ #include <CoreMedia/CoreMedia.h> #include <VideoToolbox/VideoToolbox.h> +#include <memory> + #include "base/functional/callback.h" #include "base/mac/scoped_cftyperef.h" #include "base/memory/scoped_refptr.h" @@ -17,6 +19,8 @@ namespace media { +class MediaLog; + // This interface wraps VideoToolbox platform APIs so that they can be swapped // out for testing. class MEDIA_GPU_EXPORT VideoToolboxDecompressionSession { @@ -48,6 +52,7 @@ VideoToolboxDecompressionSessionImpl( scoped_refptr<base::SequencedTaskRunner> task_runner, + std::unique_ptr<MediaLog> media_log, OutputCB output_cb); ~VideoToolboxDecompressionSessionImpl() override; @@ -72,6 +77,7 @@ base::ScopedCFTypeRef<CVImageBufferRef> image); scoped_refptr<base::SequencedTaskRunner> task_runner_; + std::unique_ptr<MediaLog> media_log_; OutputCB output_cb_; base::ScopedCFTypeRef<VTDecompressionSessionRef> session_;
diff --git a/media/gpu/mac/video_toolbox_frame_converter.cc b/media/gpu/mac/video_toolbox_frame_converter.cc index c5641330..e877aa7 100644 --- a/media/gpu/mac/video_toolbox_frame_converter.cc +++ b/media/gpu/mac/video_toolbox_frame_converter.cc
@@ -16,6 +16,7 @@ #include "gpu/ipc/common/gpu_memory_buffer_impl_io_surface.h" #include "gpu/ipc/service/gpu_channel.h" #include "gpu/ipc/service/shared_image_stub.h" +#include "media/base/media_log.h" #include "media/base/media_switches.h" #include "ui/gfx/color_space.h" #include "ui/gfx/geometry/rect.h" @@ -37,10 +38,12 @@ VideoToolboxFrameConverter::VideoToolboxFrameConverter( scoped_refptr<base::SequencedTaskRunner> gpu_task_runner, + std::unique_ptr<MediaLog> media_log, GetCommandBufferStubCB get_stub_cb) : base::RefCountedDeleteOnSequence<VideoToolboxFrameConverter>( gpu_task_runner), gpu_task_runner_(std::move(gpu_task_runner)), + media_log_(std::move(media_log)), get_stub_cb_(std::move(get_stub_cb)) { DVLOG(1) << __func__; DCHECK(get_stub_cb_); @@ -69,6 +72,7 @@ stub_ = std::move(get_stub_cb_).Run(); if (!stub_) { DVLOG(1) << __func__ << ": Failed to get command buffer stub."; + MEDIA_LOG(ERROR, media_log_.get()) << "Failed to get command buffer stub."; return; } @@ -83,6 +87,7 @@ sis_ = stub_->channel()->shared_image_stub(); if (!sis_) { DVLOG(1) << __func__ << ": Failed to get shared image stub."; + MEDIA_LOG(ERROR, media_log_.get()) << "Failed to get shared image stub."; DestroyStub(); return; } @@ -119,6 +124,7 @@ } if (!stub_) { + MEDIA_LOG(ERROR, media_log_.get()) << "Failed to get command buffer stub."; std::move(output_cb).Run(nullptr, context); } @@ -148,6 +154,7 @@ kTopLeft_GrSurfaceOrigin, kOpaque_SkAlphaType, kSharedImageUsage, kSharedImageDebugLabel); if (!result) { + MEDIA_LOG(ERROR, media_log_.get()) << "Failed to create shared image."; std::move(output_cb).Run(nullptr, context); } @@ -171,6 +178,8 @@ visible_rect, natural_size, timestamp); if (!frame) { + MEDIA_LOG(ERROR, media_log_.get()) << "Failed to create VideoFrame."; + // |image| was dropped along with |release_cb|, but the SharedImage is still // alive. sis_->GetSharedImageDestructionCallback(mailbox).Run(gpu::SyncToken());
diff --git a/media/gpu/mac/video_toolbox_frame_converter.h b/media/gpu/mac/video_toolbox_frame_converter.h index b07bf92..77a00c17 100644 --- a/media/gpu/mac/video_toolbox_frame_converter.h +++ b/media/gpu/mac/video_toolbox_frame_converter.h
@@ -7,6 +7,8 @@ #include <CoreMedia/CoreMedia.h> +#include <memory> + #include "base/functional/callback.h" #include "base/mac/scoped_cftyperef.h" #include "base/memory/raw_ptr.h" @@ -25,6 +27,8 @@ namespace media { +class MediaLog; + // Converts IOSurface-backed CVImageBuffers to VideoFrames. class VideoToolboxFrameConverter : public gpu::CommandBufferStub::DestructionObserver, @@ -40,6 +44,7 @@ // any sequence, but Convert() must be called on `gpu_task_runner`. VideoToolboxFrameConverter( scoped_refptr<base::SequencedTaskRunner> gpu_task_runner, + std::unique_ptr<MediaLog> media_log, GetCommandBufferStubCB get_stub_cb); void Convert(base::ScopedCFTypeRef<CVImageBufferRef> image, @@ -65,9 +70,10 @@ const gpu::SyncToken& sync_token); scoped_refptr<base::SequencedTaskRunner> gpu_task_runner_; + std::unique_ptr<MediaLog> media_log_; GetCommandBufferStubCB get_stub_cb_; - bool initialized_ = false; + bool initialized_ = false; raw_ptr<gpu::CommandBufferStub> stub_ = nullptr; gpu::SequenceId wait_sequence_id_; raw_ptr<gpu::SharedImageStub> sis_ = nullptr;
diff --git a/media/gpu/mac/video_toolbox_h264_accelerator.cc b/media/gpu/mac/video_toolbox_h264_accelerator.cc index f65a7e48..807c23b7 100644 --- a/media/gpu/mac/video_toolbox_h264_accelerator.cc +++ b/media/gpu/mac/video_toolbox_h264_accelerator.cc
@@ -6,6 +6,7 @@ #include "base/mac/mac_logging.h" #include "base/sys_byteorder.h" +#include "media/base/media_log.h" namespace media { @@ -13,9 +14,13 @@ constexpr size_t kNALUHeaderLength = 4; } // namespace -VideoToolboxH264Accelerator::VideoToolboxH264Accelerator(DecodeCB decode_cb, - OutputCB output_cb) - : decode_cb_(std::move(decode_cb)), output_cb_(std::move(output_cb)) { +VideoToolboxH264Accelerator::VideoToolboxH264Accelerator( + std::unique_ptr<MediaLog> media_log, + DecodeCB decode_cb, + OutputCB output_cb) + : media_log_(std::move(media_log)), + decode_cb_(std::move(decode_cb)), + output_cb_(std::move(output_cb)) { DVLOG(1) << __func__; DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); } @@ -86,6 +91,8 @@ if (status != noErr) { OSSTATUS_DLOG(ERROR, status) << "CMVideoFormatDescriptionCreateFromH264ParameterSets()"; + OSSTATUS_MEDIA_LOG(ERROR, status, media_log_.get()) + << "CMVideoFormatDescriptionCreateFromH264ParameterSets()"; return Status::kFail; } @@ -136,12 +143,16 @@ data.InitializeInto()); if (status != noErr) { OSSTATUS_DLOG(ERROR, status) << "CMBlockBufferCreateWithMemoryBlock()"; + OSSTATUS_MEDIA_LOG(ERROR, status, media_log_.get()) + << "CMBlockBufferCreateWithMemoryBlock()"; return Status::kFail; } status = CMBlockBufferAssureBlockMemory(data); if (status != noErr) { OSSTATUS_DLOG(ERROR, status) << "CMBlockBufferAssureBlockMemory()"; + OSSTATUS_MEDIA_LOG(ERROR, status, media_log_.get()) + << "CMBlockBufferAssureBlockMemory()"; return Status::kFail; } @@ -155,6 +166,8 @@ CMBlockBufferReplaceDataBytes(&header, data, offset, kNALUHeaderLength); if (status != noErr) { OSSTATUS_DLOG(ERROR, status) << "CMBlockBufferReplaceDataBytes()"; + OSSTATUS_MEDIA_LOG(ERROR, status, media_log_.get()) + << "CMBlockBufferReplaceDataBytes()"; return Status::kFail; } offset += kNALUHeaderLength; @@ -164,6 +177,8 @@ nalu_data.size()); if (status != noErr) { OSSTATUS_DLOG(ERROR, status) << "CMBlockBufferReplaceDataBytes()"; + OSSTATUS_MEDIA_LOG(ERROR, status, media_log_.get()) + << "CMBlockBufferReplaceDataBytes()"; return Status::kFail; } offset += nalu_data.size(); @@ -185,6 +200,8 @@ sample.InitializeInto()); if (status != noErr) { OSSTATUS_DLOG(ERROR, status) << "CMSampleBufferCreate()"; + OSSTATUS_MEDIA_LOG(ERROR, status, media_log_.get()) + << "CMSampleBufferCreate()"; return Status::kFail; }
diff --git a/media/gpu/mac/video_toolbox_h264_accelerator.h b/media/gpu/mac/video_toolbox_h264_accelerator.h index fff3387..e7c6fddd 100644 --- a/media/gpu/mac/video_toolbox_h264_accelerator.h +++ b/media/gpu/mac/video_toolbox_h264_accelerator.h
@@ -8,6 +8,7 @@ #include <CoreMedia/CoreMedia.h> #include <stdint.h> +#include <memory> #include <vector> #include "base/containers/flat_map.h" @@ -20,6 +21,8 @@ namespace media { +class MediaLog; + class MEDIA_GPU_EXPORT VideoToolboxH264Accelerator : public H264Decoder::H264Accelerator { public: @@ -28,7 +31,9 @@ scoped_refptr<CodecPicture>)>; using OutputCB = base::RepeatingCallback<void(scoped_refptr<CodecPicture>)>; - VideoToolboxH264Accelerator(DecodeCB decode_cb, OutputCB output_cb); + VideoToolboxH264Accelerator(std::unique_ptr<MediaLog> media_log, + DecodeCB decode_cb, + OutputCB output_cb); ~VideoToolboxH264Accelerator() override; // H264Accelerator implementation. @@ -57,6 +62,8 @@ void Reset() override; private: + std::unique_ptr<MediaLog> media_log_; + // Callbacks are called synchronously, which is always re-entrant. DecodeCB decode_cb_; OutputCB output_cb_;
diff --git a/media/gpu/mac/video_toolbox_h264_accelerator_unittest.cc b/media/gpu/mac/video_toolbox_h264_accelerator_unittest.cc index 6f9151a6..2df33b3 100644 --- a/media/gpu/mac/video_toolbox_h264_accelerator_unittest.cc +++ b/media/gpu/mac/video_toolbox_h264_accelerator_unittest.cc
@@ -5,6 +5,7 @@ #include <memory> #include "base/containers/span.h" +#include "media/base/media_util.h" #include "media/gpu/codec_picture.h" #include "media/gpu/mac/video_toolbox_h264_accelerator.h" #include "media/video/h264_parser.h" @@ -15,8 +16,6 @@ using testing::_; using testing::ElementsAre; -using testing::Eq; -using testing::Not; using testing::SaveArg; namespace { @@ -52,6 +51,7 @@ std::unique_ptr<VideoToolboxH264Accelerator> accelerator_{ std::make_unique<VideoToolboxH264Accelerator>( + std::make_unique<NullMediaLog>(), base::BindRepeating(&VideoToolboxH264AcceleratorTest::OnDecode, base::Unretained(this)), base::BindRepeating(&VideoToolboxH264AcceleratorTest::OnOutput,
diff --git a/media/gpu/mac/video_toolbox_video_decoder.cc b/media/gpu/mac/video_toolbox_video_decoder.cc index a9cafd5..87205c67 100644 --- a/media/gpu/mac/video_toolbox_video_decoder.cc +++ b/media/gpu/mac/video_toolbox_video_decoder.cc
@@ -16,6 +16,7 @@ #include "base/mac/scoped_cftyperef.h" #include "base/memory/scoped_policy.h" #include "base/task/bind_post_task.h" +#include "media/base/decoder_status.h" #include "media/base/media_log.h" #include "media/base/video_frame.h" #include "media/gpu/accelerated_video_decoder.h" @@ -86,33 +87,30 @@ DVLOG(1) << __func__; DCHECK(config.IsValidConfig()); - if (has_error_) { + if (!has_error_) { task_runner_->PostTask( FROM_HERE, base::BindOnce(std::move(init_cb), DecoderStatus::Codes::kFailed)); return; } + // Make |init_cb| available to NotifyError(). + init_cb_ = std::move(init_cb); + if (!IsSupportedProfile(config.profile())) { - task_runner_->PostTask( - FROM_HERE, base::BindOnce(std::move(init_cb), - DecoderStatus::Codes::kUnsupportedProfile)); - NotifyError(); + NotifyError(DecoderStatus::Codes::kUnsupportedProfile); return; } if (config.is_encrypted()) { - task_runner_->PostTask( - FROM_HERE, - base::BindOnce(std::move(init_cb), - DecoderStatus::Codes::kUnsupportedEncryptionMode)); - NotifyError(); + NotifyError(DecoderStatus::Codes::kUnsupportedEncryptionMode); return; } if (!accelerator_) { accelerator_ = std::make_unique<H264Decoder>( std::make_unique<VideoToolboxH264Accelerator>( + media_log_->Clone(), base::BindRepeating(&VideoToolboxVideoDecoder::OnAcceleratorDecode, base::Unretained(this)), base::BindRepeating(&VideoToolboxVideoDecoder::OnAcceleratorOutput, @@ -120,22 +118,19 @@ config.profile(), config.color_space_info()); video_toolbox_ = std::make_unique<VideoToolboxDecompressionInterface>( - task_runner_, + task_runner_, media_log_->Clone(), base::BindRepeating(&VideoToolboxVideoDecoder::OnVideoToolboxOutput, base::Unretained(this)), base::BindRepeating(&VideoToolboxVideoDecoder::OnVideoToolboxError, base::Unretained(this))); converter_ = base::MakeRefCounted<VideoToolboxFrameConverter>( - gpu_task_runner_, std::move(get_stub_cb_)); + gpu_task_runner_, media_log_->Clone(), std::move(get_stub_cb_)); } else { // TODO(crbug.com/1331597): Support codec changes. // TODO(crbug.com/1331597): Handle color space changes. if (config.codec() != config_.codec()) { - task_runner_->PostTask( - FROM_HERE, - base::BindOnce(std::move(init_cb), DecoderStatus::Codes::kFailed)); - NotifyError(); + NotifyError(DecoderStatus::Codes::kCantChangeCodec); return; } } @@ -143,8 +138,8 @@ config_ = config; output_cb_ = output_cb; - task_runner_->PostTask( - FROM_HERE, base::BindOnce(std::move(init_cb), DecoderStatus::Codes::kOk)); + task_runner_->PostTask(FROM_HERE, base::BindOnce(std::move(init_cb_), + DecoderStatus::Codes::kOk)); } void VideoToolboxVideoDecoder::Decode(scoped_refptr<DecoderBuffer> buffer, @@ -161,7 +156,7 @@ if (buffer->end_of_stream()) { flush_cb_ = std::move(decode_cb); if (!accelerator_->Flush()) { - NotifyError(); + NotifyError(DecoderStatus::Codes::kMalformedBitstream); return; } ProcessOutputs(); @@ -182,7 +177,8 @@ case AcceleratedVideoDecoder::kRanOutOfSurfaces: case AcceleratedVideoDecoder::kNeedContextUpdate: case AcceleratedVideoDecoder::kTryAgain: - NotifyError(); + // More specific reasons are logged to the media log. + NotifyError(DecoderStatus::Codes::kMalformedBitstream); return; case AcceleratedVideoDecoder::kConfigChange: @@ -210,7 +206,7 @@ task_runner_->PostTask(FROM_HERE, std::move(reset_cb)); } -void VideoToolboxVideoDecoder::NotifyError() { +void VideoToolboxVideoDecoder::NotifyError(DecoderStatus status) { DVLOG(1) << __func__; if (has_error_) { @@ -218,12 +214,17 @@ } has_error_ = true; - ResetInternal(DecoderStatus::Codes::kFailed); + ResetInternal(status); } void VideoToolboxVideoDecoder::ResetInternal(DecoderStatus status) { DVLOG(4) << __func__; + if (init_cb_) { + task_runner_->PostTask(FROM_HERE, + base::BindOnce(std::move(init_cb_), status)); + } + while (!decode_cbs_.empty()) { task_runner_->PostTask( FROM_HERE, base::BindOnce(std::move(decode_cbs_.front()), status)); @@ -328,9 +329,9 @@ ReleaseDecodeCallbacks(); } -void VideoToolboxVideoDecoder::OnVideoToolboxError() { +void VideoToolboxVideoDecoder::OnVideoToolboxError(DecoderStatus status) { DVLOG(1) << __func__; - NotifyError(); + NotifyError(std::move(status)); } void VideoToolboxVideoDecoder::OnConverterOutput( @@ -343,7 +344,8 @@ } if (!frame) { - NotifyError(); + // More specific reasons are logged to the media log. + NotifyError(DecoderStatus::Codes::kFailedToGetVideoFrame); return; }
diff --git a/media/gpu/mac/video_toolbox_video_decoder.h b/media/gpu/mac/video_toolbox_video_decoder.h index 8c2ea522..337873c 100644 --- a/media/gpu/mac/video_toolbox_video_decoder.h +++ b/media/gpu/mac/video_toolbox_video_decoder.h
@@ -14,6 +14,7 @@ #include "base/containers/flat_map.h" #include "base/containers/queue.h" #include "base/functional/callback.h" +#include "base/functional/callback_forward.h" #include "base/mac/scoped_cftyperef.h" #include "base/memory/scoped_refptr.h" #include "base/task/sequenced_task_runner.h" @@ -63,7 +64,7 @@ private: // Shut down and enter a permanent error state. - void NotifyError(); + void NotifyError(DecoderStatus status); // Drop all state, calling decode callbacks with |status|. void ResetInternal(DecoderStatus status); @@ -82,7 +83,7 @@ // |video_toolbox_| callbacks. void OnVideoToolboxOutput(base::ScopedCFTypeRef<CVImageBufferRef> image, void* context); - void OnVideoToolboxError(); + void OnVideoToolboxError(DecoderStatus status); // |converter_| callbacks. void OnConverterOutput(scoped_refptr<VideoFrame> frame, void* context); @@ -92,10 +93,10 @@ scoped_refptr<base::SequencedTaskRunner> gpu_task_runner_; GetCommandBufferStubCB get_stub_cb_; - // TODO(crbug.com/1331597): Store a DecoderStatus to report to future - // calls, and log errors to the MediaLog. bool has_error_ = false; + VideoDecoderConfig config_; + InitCB init_cb_; OutputCB output_cb_; DecodeCB flush_cb_;
diff --git a/media/mojo/clients/mojo_cdm.cc b/media/mojo/clients/mojo_cdm.cc index d5b0d87..464fce5 100644 --- a/media/mojo/clients/mojo_cdm.cc +++ b/media/mojo/clients/mojo_cdm.cc
@@ -37,16 +37,8 @@ connection_error_happened); } -// These values are persisted to logs. Entries should not be renumbered and -// numeric values should never be reused. -enum class CallbackTimeoutStatus { - kCreate = 0, - kTimeout = 1, - kDestructedBeforeTimeout = 2, - kMaxValue = kDestructedBeforeTimeout, -}; - -void OnCallbackTimeout(const std::string uma_name, bool called_on_destruction) { +void OnCallbackTimeout(const std::string& uma_name, + bool called_on_destruction) { DVLOG(1) << "Callback Timeout: " << uma_name << ", called_on_destruction=" << called_on_destruction; base::UmaHistogramEnumeration(
diff --git a/net/cookies/cookie_util.cc b/net/cookies/cookie_util.cc index f4859b3..f4004f8f 100644 --- a/net/cookies/cookie_util.cc +++ b/net/cookies/cookie_util.cc
@@ -1006,7 +1006,9 @@ } NET_EXPORT bool IsForceThirdPartyCookieBlockingEnabled() { - return base::FeatureList::IsEnabled(features::kForceThirdPartyCookieBlocking); + return base::FeatureList::IsEnabled( + features::kForceThirdPartyCookieBlocking) && + base::FeatureList::IsEnabled(features::kThirdPartyStoragePartitioning); } } // namespace net::cookie_util
diff --git a/net/cookies/cookie_util.h b/net/cookies/cookie_util.h index 8c7ecff..82bba3e6 100644 --- a/net/cookies/cookie_util.h +++ b/net/cookies/cookie_util.h
@@ -333,7 +333,7 @@ // Returns the default third-party cookie blocking setting, which is false // unless you enable ForceThirdPartyCookieBlocking with the command line switch -// --block-third-party-cookies. +// --test-third-party-cookie-phaseout. NET_EXPORT bool IsForceThirdPartyCookieBlockingEnabled(); } // namespace cookie_util
diff --git a/services/data_decoder/data_decoder_service.cc b/services/data_decoder/data_decoder_service.cc index 65c82e2..a0545bc 100644 --- a/services/data_decoder/data_decoder_service.cc +++ b/services/data_decoder/data_decoder_service.cc
@@ -13,6 +13,7 @@ #include "components/web_package/web_bundle_parser_factory.h" #include "mojo/public/cpp/bindings/generic_pending_receiver.h" #include "mojo/public/cpp/bindings/self_owned_receiver.h" +#include "services/data_decoder/cbor_parser_impl.h" #include "services/data_decoder/gzipper.h" #include "services/data_decoder/json_parser_impl.h" #include "services/data_decoder/public/mojom/image_decoder.mojom.h" @@ -92,6 +93,12 @@ mojo::MakeSelfOwnedReceiver(std::make_unique<Gzipper>(), std::move(receiver)); } +void DataDecoderService::BindCborParser( + mojo::PendingReceiver<mojom::CborParser> receiver) { + mojo::MakeSelfOwnedReceiver(std::make_unique<CborParserImpl>(), + std::move(receiver)); +} + #if BUILDFLAG(IS_CHROMEOS_ASH) void DataDecoderService::BindBleScanParser( mojo::PendingReceiver<mojom::BleScanParser> receiver) {
diff --git a/services/data_decoder/data_decoder_service.h b/services/data_decoder/data_decoder_service.h index d081862..bc95284 100644 --- a/services/data_decoder/data_decoder_service.h +++ b/services/data_decoder/data_decoder_service.h
@@ -9,6 +9,7 @@ #include "components/web_package/mojom/web_bundle_parser.mojom.h" #include "mojo/public/cpp/bindings/pending_receiver.h" #include "mojo/public/cpp/bindings/receiver_set.h" +#include "services/data_decoder/public/mojom/cbor_parser.mojom.h" #include "services/data_decoder/public/mojom/data_decoder_service.mojom.h" #include "services/data_decoder/public/mojom/gzipper.mojom.h" #include "services/data_decoder/public/mojom/image_decoder.mojom.h" @@ -72,6 +73,8 @@ mojo::PendingReceiver<web_package::mojom::WebBundleParserFactory> receiver) override; void BindGzipper(mojo::PendingReceiver<mojom::Gzipper> receiver) override; + void BindCborParser( + mojo::PendingReceiver<mojom::CborParser> receiver) override; #if BUILDFLAG(IS_CHROMEOS_ASH) void BindBleScanParser(
diff --git a/services/data_decoder/public/cpp/data_decoder.cc b/services/data_decoder/public/cpp/data_decoder.cc index 2c9bf0c..461775f 100644 --- a/services/data_decoder/public/cpp/data_decoder.cc +++ b/services/data_decoder/public/cpp/data_decoder.cc
@@ -19,6 +19,7 @@ #include "build/blink_buildflags.h" #include "build/build_config.h" #include "net/http/structured_headers.h" +#include "services/data_decoder/public/mojom/cbor_parser.mojom.h" #include "services/data_decoder/public/mojom/gzipper.mojom.h" #include "services/data_decoder/public/mojom/json_parser.mojom.h" #include "services/data_decoder/public/mojom/structured_headers_parser.mojom.h" @@ -415,4 +416,34 @@ request)); } +void DataDecoder::ParseCbor(base::span<const uint8_t> data, + ValueParseCallback callback) { + auto request = + base::MakeRefCounted<ValueParseRequest<mojom::CborParser, base::Value>>( + std::move(callback), cancel_requests_); + GetService()->BindCborParser(request->BindRemote()); + request->remote()->Parse( + data, + base::BindOnce(&ValueParseRequest<mojom::CborParser, + base::Value>::OnServiceValueOrError, + request)); +} + +// static +void DataDecoder::ParseCborIsolated(base::span<const uint8_t> data, + ValueParseCallback callback) { + auto decoder = std::make_unique<DataDecoder>(); + auto* raw_decoder = decoder.get(); + + // We bind the DataDecoder's ownership into the result callback to ensure that + // it stays alive until the operation is complete. + raw_decoder->ParseCbor( + data, base::BindOnce( + [](std::unique_ptr<DataDecoder>, ValueParseCallback callback, + ValueOrError result) { + std::move(callback).Run(std::move(result)); + }, + std::move(decoder), std::move(callback))); +} + } // namespace data_decoder
diff --git a/services/data_decoder/public/cpp/data_decoder.h b/services/data_decoder/public/cpp/data_decoder.h index 77efe71d..6adc821 100644 --- a/services/data_decoder/public/cpp/data_decoder.h +++ b/services/data_decoder/public/cpp/data_decoder.h
@@ -175,6 +175,25 @@ // or fails before this DataDecoder is destroyed. void GzipUncompress(base::span<const uint8_t> data, GzipperCallback callback); + // Parses the potentially unsafe CBOR bytes in |cbor| using this + // DataDecoder's service instance or some other platform-specific decoding + // facility. The parser conforms to RFC 7049, except a few limitations: + // - Does not support null or undefined values. + // - Integers must fit in the 'int' type. + // - Does not support float values (limitations in components/cbor library). + // - The keys in Maps must be a string or byte-string. + // - If at least one Map key is invalid, an error will be returned. + // + // Note that |callback| will only be called if the parsing operation succeeds + // or fails before this DataDecoder is destroyed. + void ParseCbor(base::span<const uint8_t> cbor, ValueParseCallback callback); + + // Parses the potentially unsafe CBOR bytes in |cbor|. This static helper + // uses a dedicated instance of the Data Decoder service on applicable + // platforms. + static void ParseCborIsolated(base::span<const uint8_t> cbor, + ValueParseCallback callback); + private: // The amount of idle time to tolerate on a DataDecoder instance. If the // instance is unused for this period of time, the underlying service process
diff --git a/services/data_decoder/public/cpp/data_decoder_unittest.cc b/services/data_decoder/public/cpp/data_decoder_unittest.cc index 8c3bab3..538090d 100644 --- a/services/data_decoder/public/cpp/data_decoder_unittest.cc +++ b/services/data_decoder/public/cpp/data_decoder_unittest.cc
@@ -12,8 +12,11 @@ #include "base/task/thread_pool/thread_pool_instance.h" #include "base/test/bind.h" #include "base/test/task_environment.h" +#include "base/types/expected.h" +#include "base/values.h" #include "build/build_config.h" #include "services/data_decoder/public/cpp/test_support/in_process_data_decoder.h" +#include "services/data_decoder/public/mojom/cbor_parser.mojom.h" #include "services/data_decoder/public/mojom/json_parser.mojom.h" #include "testing/gtest/include/gtest/gtest.h" @@ -28,7 +31,7 @@ test::InProcessDataDecoder in_process_data_decoder_; }; -TEST_F(DataDecoderTest, Reuse) { +TEST_F(DataDecoderTest, ReuseJson) { // Verify that a single DataDecoder with concurrent interface connections will // only use one service instance. @@ -47,7 +50,7 @@ EXPECT_EQ(1u, service().receivers().size()); } -TEST_F(DataDecoderTest, Isolation) { +TEST_F(DataDecoderTest, IsolationJson) { // Verify that separate DataDecoder instances make separate connections to the // service. @@ -66,6 +69,83 @@ EXPECT_EQ(2u, service().receivers().size()); } +TEST_F(DataDecoderTest, ReuseCbor) { + // Verify that a single DataDecoder with concurrent interface connections will + // only use one service instance. + DataDecoder decoder; + mojo::Remote<mojom::CborParser> parser1; + decoder.GetService()->BindCborParser(parser1.BindNewPipeAndPassReceiver()); + parser1.FlushForTesting(); + EXPECT_TRUE(parser1.is_connected()); + EXPECT_EQ(1u, service().receivers().size()); + + mojo::Remote<mojom::CborParser> parser2; + decoder.GetService()->BindCborParser(parser2.BindNewPipeAndPassReceiver()); + parser2.FlushForTesting(); + EXPECT_TRUE(parser1.is_connected()); + EXPECT_TRUE(parser2.is_connected()); + EXPECT_EQ(1u, service().receivers().size()); +} + +TEST_F(DataDecoderTest, IsolationCbor) { + // Verify that separate DataDecoder instances make separate connections to the + // service. + DataDecoder decoder1; + mojo::Remote<mojom::CborParser> parser1; + decoder1.GetService()->BindCborParser(parser1.BindNewPipeAndPassReceiver()); + parser1.FlushForTesting(); + EXPECT_TRUE(parser1.is_connected()); + EXPECT_EQ(1u, service().receivers().size()); + + DataDecoder decoder2; + mojo::Remote<mojom::CborParser> parser2; + decoder2.GetService()->BindCborParser(parser2.BindNewPipeAndPassReceiver()); + parser2.FlushForTesting(); + EXPECT_TRUE(parser2.is_connected()); + EXPECT_EQ(2u, service().receivers().size()); +} + +TEST_F(DataDecoderTest, ParseCborToInteger) { + base::RunLoop run_loop; + DataDecoder decoder; + DataDecoder::ValueOrError result; + // 100 + std::vector<uint8_t> input = {0x18, 0x64}; + + decoder.ParseCborIsolated( + input, + base::BindLambdaForTesting( + [&run_loop, &result](DataDecoder::ValueOrError value_or_error) { + result = std::move(value_or_error); + run_loop.Quit(); + })); + run_loop.Run(); + + ASSERT_TRUE(result.has_value()); + ASSERT_TRUE(result->is_int()); + ASSERT_EQ(result->GetInt(), 100); +} + +TEST_F(DataDecoderTest, ParseCborAndFailed) { + base::RunLoop run_loop; + DataDecoder decoder; + DataDecoder::ValueOrError result; + // Null + std::vector<uint8_t> input = {0xF6}; + + decoder.ParseCborIsolated( + input, + base::BindLambdaForTesting( + [&run_loop, &result](DataDecoder::ValueOrError value_or_error) { + result = std::move(value_or_error); + run_loop.Quit(); + })); + run_loop.Run(); + + ASSERT_FALSE(result.has_value()); + ASSERT_EQ(result.error(), "Error unexpected CBOR value."); +} + #if BUILDFLAG(IS_ANDROID) || BUILDFLAG(BUILD_RUST_JSON_READER) class DataDecoderMultiThreadTest : public testing::Test {
diff --git a/services/data_decoder/public/mojom/data_decoder_service.mojom b/services/data_decoder/public/mojom/data_decoder_service.mojom index 254d8a5..31cb918 100644 --- a/services/data_decoder/public/mojom/data_decoder_service.mojom +++ b/services/data_decoder/public/mojom/data_decoder_service.mojom
@@ -6,6 +6,7 @@ import "components/web_package/mojom/web_bundle_parser.mojom"; import "sandbox/policy/mojom/sandbox.mojom"; +import "services/data_decoder/public/mojom/cbor_parser.mojom"; import "services/data_decoder/public/mojom/gzipper.mojom"; import "services/data_decoder/public/mojom/image_decoder.mojom"; import "services/data_decoder/public/mojom/json_parser.mojom"; @@ -42,4 +43,7 @@ // Binds an interface which can be used to parse structured headers. BindStructuredHeadersParser(pending_receiver<StructuredHeadersParser> receiver); + + // Binds an interface which can be used to parse CBOR data. + BindCborParser(pending_receiver<CborParser> receiver); };
diff --git a/services/network/cookie_settings_unittest.cc b/services/network/cookie_settings_unittest.cc index a53131c0..9e642f2 100644 --- a/services/network/cookie_settings_unittest.cc +++ b/services/network/cookie_settings_unittest.cc
@@ -1291,8 +1291,12 @@ TEST_P(CookieSettingsTest, ForceThirdPartyCookieBlocking) { base::test::ScopedFeatureList feature_list; - feature_list.InitAndEnableFeature( - net::features::kForceThirdPartyCookieBlocking); + feature_list.InitWithFeatures( + { + net::features::kForceThirdPartyCookieBlocking, + net::features::kThirdPartyStoragePartitioning, + }, + {}); CookieSettings settings; EXPECT_TRUE(settings.are_third_party_cookies_blocked());
diff --git a/services/network/public/cpp/network_switches.cc b/services/network/public/cpp/network_switches.cc index 97914ca..9b41edc 100644 --- a/services/network/public/cpp/network_switches.cc +++ b/services/network/public/cpp/network_switches.cc
@@ -6,8 +6,6 @@ namespace network::switches { -const char kBlockThirdPartyCookies[] = "block-third-party-cookies"; - // Forces Network Quality Estimator (NQE) to return a specific effective // connection type. const char kForceEffectiveConnectionType[] = "force-effective-connection-type"; @@ -75,6 +73,8 @@ // for the format. const char kSSLKeyLogFile[] = "ssl-key-log-file"; +const char kTestThirdPartyCookiePhaseout[] = "test-third-party-cookie-phaseout"; + // Treat given (insecure) origins as secure origins. Multiple origins can be // supplied as a comma-separated list. For the definition of secure contexts, // see https://w3c.github.io/webappsec-secure-contexts/ and
diff --git a/services/network/public/cpp/network_switches.h b/services/network/public/cpp/network_switches.h index 598dd71..348f46f 100644 --- a/services/network/public/cpp/network_switches.h +++ b/services/network/public/cpp/network_switches.h
@@ -11,7 +11,6 @@ namespace switches { -COMPONENT_EXPORT(NETWORK_CPP) extern const char kBlockThirdPartyCookies[]; COMPONENT_EXPORT(NETWORK_CPP) extern const char kForceEffectiveConnectionType[]; COMPONENT_EXPORT(NETWORK_CPP) extern const char kHostResolverRules[]; @@ -25,6 +24,7 @@ COMPONENT_EXPORT(NETWORK_CPP) extern const char kLogNetLog[]; COMPONENT_EXPORT(NETWORK_CPP) extern const char kNetLogCaptureMode[]; COMPONENT_EXPORT(NETWORK_CPP) extern const char kSSLKeyLogFile[]; +COMPONENT_EXPORT(NETWORK_CPP) extern const char kTestThirdPartyCookiePhaseout[]; COMPONENT_EXPORT(NETWORK_CPP) extern const char kUnsafelyTreatInsecureOriginAsSecure[]; COMPONENT_EXPORT(NETWORK_CPP)
diff --git a/styleguide/web/web.md b/styleguide/web/web.md index 09b0887..4a24223 100644 --- a/styleguide/web/web.md +++ b/styleguide/web/web.md
@@ -296,8 +296,7 @@ ## JavaScript/TypeScript -New WebUI code (except for ChromeOS specific code) should be written in -TypeScript. +New WebUI code should be written in TypeScript. ### Style @@ -341,10 +340,11 @@ feature when the code needs to handle null/undefined gracefully. -### Closure compiler (ChromeOS Ash code only) +### Closure compiler (legacy ChromeOS Ash code only) -* Closure compiler can only be used on ChromeOS Ash. All other platforms - are required to use TypeScript to add type checking. +* Closure compiler can only be used on legacy ChromeOS Ash code. All other + platforms and new ChromeOS code are required to use TypeScript to add type + checking. * Use the [closure compiler](https://chromium.googlesource.com/chromium/src/+/main/docs/closure_compilation.md)
diff --git a/testing/buildbot/chromium.cft.json b/testing/buildbot/chromium.cft.json index 0e0f89e8f5..7d41615 100644 --- a/testing/buildbot/chromium.cft.json +++ b/testing/buildbot/chromium.cft.json
@@ -4345,7 +4345,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -4363,7 +4363,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -4381,7 +4381,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -4400,7 +4400,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -4418,7 +4418,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -4436,7 +4436,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -4454,7 +4454,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -4472,7 +4472,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -4490,7 +4490,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -4509,7 +4509,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -4527,7 +4527,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -4545,7 +4545,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -4567,7 +4567,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", @@ -4589,7 +4589,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -4607,7 +4607,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -4625,7 +4625,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -4643,7 +4643,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -4661,7 +4661,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -4679,7 +4679,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -4697,7 +4697,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -4715,7 +4715,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -4733,7 +4733,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", @@ -4752,7 +4752,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -4770,7 +4770,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -4788,7 +4788,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -4806,7 +4806,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -4824,7 +4824,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -4842,7 +4842,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -4860,7 +4860,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -4878,7 +4878,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -4897,7 +4897,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -4915,7 +4915,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -4933,7 +4933,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -4951,7 +4951,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -4969,7 +4969,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -4987,7 +4987,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -5005,7 +5005,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -5023,7 +5023,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -5041,7 +5041,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -5059,7 +5059,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -5077,7 +5077,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -5095,7 +5095,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -5113,7 +5113,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -5134,7 +5134,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", @@ -5153,7 +5153,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -5171,7 +5171,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -5190,7 +5190,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -5208,7 +5208,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -5226,7 +5226,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -5244,7 +5244,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -5262,7 +5262,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -5280,7 +5280,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -5298,7 +5298,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -5316,7 +5316,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -5334,7 +5334,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -5352,7 +5352,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -5370,7 +5370,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -5388,7 +5388,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -5406,7 +5406,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -5424,7 +5424,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -5442,7 +5442,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -5460,7 +5460,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -5478,7 +5478,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -5496,7 +5496,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -5514,7 +5514,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -5532,7 +5532,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -5550,7 +5550,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -5568,7 +5568,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -5586,7 +5586,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -5604,7 +5604,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -5623,7 +5623,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", @@ -5642,7 +5642,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -5660,7 +5660,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -5678,7 +5678,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -5696,7 +5696,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -5714,7 +5714,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -5732,7 +5732,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -5750,7 +5750,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -5768,7 +5768,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -5787,7 +5787,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -5805,7 +5805,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -5830,7 +5830,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -5862,7 +5862,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", @@ -5889,7 +5889,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -5908,7 +5908,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -5933,7 +5933,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -5956,7 +5956,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -5979,7 +5979,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -6001,7 +6001,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -6023,7 +6023,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -6045,7 +6045,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "idempotent": false, @@ -6072,7 +6072,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "idempotent": false, @@ -6100,7 +6100,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "idempotent": false, @@ -6127,7 +6127,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
diff --git a/testing/buildbot/chromium.clang.json b/testing/buildbot/chromium.clang.json index bc3bfcd8..7530ca8 100644 --- a/testing/buildbot/chromium.clang.json +++ b/testing/buildbot/chromium.clang.json
@@ -2345,7 +2345,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -2417,7 +2417,7 @@ { "cpu": "x86-64", "device": "iPhone9,1", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "expiration": 21600,
diff --git a/testing/buildbot/chromium.coverage.json b/testing/buildbot/chromium.coverage.json index 908978b..67dd49f 100644 --- a/testing/buildbot/chromium.coverage.json +++ b/testing/buildbot/chromium.coverage.json
@@ -10274,7 +10274,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -10327,7 +10327,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -10380,7 +10380,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -10433,7 +10433,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -10486,7 +10486,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -10539,7 +10539,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -10592,7 +10592,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -10645,7 +10645,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -10698,7 +10698,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -10751,7 +10751,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -10804,7 +10804,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -10857,7 +10857,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -10910,7 +10910,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -10963,7 +10963,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -11016,7 +11016,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -11069,7 +11069,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -11122,7 +11122,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -11175,7 +11175,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -11228,7 +11228,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -11281,7 +11281,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -11334,7 +11334,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -11387,7 +11387,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -11440,7 +11440,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -11493,7 +11493,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -11546,7 +11546,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -11599,7 +11599,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -11652,7 +11652,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -11705,7 +11705,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -11758,7 +11758,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -11811,7 +11811,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -11864,7 +11864,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -11917,7 +11917,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -11970,7 +11970,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -12023,7 +12023,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -12076,7 +12076,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -12129,7 +12129,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -12182,7 +12182,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -12235,7 +12235,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -12288,7 +12288,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -12341,7 +12341,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -12394,7 +12394,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -12447,7 +12447,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -12501,7 +12501,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -12555,7 +12555,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -12609,7 +12609,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -12663,7 +12663,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -12717,7 +12717,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -12771,7 +12771,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -12825,7 +12825,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -12879,7 +12879,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -12933,7 +12933,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -12988,7 +12988,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -13043,7 +13043,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -13098,7 +13098,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -13153,7 +13153,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -13208,7 +13208,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -13263,7 +13263,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -13318,7 +13318,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -13373,7 +13373,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -13428,7 +13428,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -13483,7 +13483,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -13538,7 +13538,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -13593,7 +13593,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -13648,7 +13648,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -13703,7 +13703,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -13758,7 +13758,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -13813,7 +13813,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -13868,7 +13868,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -13923,7 +13923,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -13978,7 +13978,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -14033,7 +14033,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -14088,7 +14088,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -14143,7 +14143,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -14198,7 +14198,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -14253,7 +14253,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -14307,7 +14307,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -14361,7 +14361,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -14415,7 +14415,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -14469,7 +14469,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -14523,7 +14523,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -14577,7 +14577,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -14631,7 +14631,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -14685,7 +14685,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -14740,7 +14740,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -14795,7 +14795,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -14850,7 +14850,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -14905,7 +14905,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -14960,7 +14960,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -15015,7 +15015,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -15070,7 +15070,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -15124,7 +15124,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -15177,7 +15177,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -15230,7 +15230,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -15283,7 +15283,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -15336,7 +15336,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -15389,7 +15389,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -15442,7 +15442,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -15495,7 +15495,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -15548,7 +15548,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -15601,7 +15601,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -15655,7 +15655,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -15710,7 +15710,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -15765,7 +15765,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -15820,7 +15820,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -15875,7 +15875,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -15930,7 +15930,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -15985,7 +15985,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -16040,7 +16040,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -16094,7 +16094,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -16147,7 +16147,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -16200,7 +16200,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -16254,7 +16254,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -16308,7 +16308,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -16361,7 +16361,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -16415,7 +16415,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -16469,7 +16469,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -16523,7 +16523,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -16577,7 +16577,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -16631,7 +16631,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -16685,7 +16685,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -16739,7 +16739,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -16793,7 +16793,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -16846,7 +16846,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -16899,7 +16899,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -16952,7 +16952,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -17005,7 +17005,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -17058,7 +17058,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -17111,7 +17111,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -17164,7 +17164,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -17217,7 +17217,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -17270,7 +17270,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -17323,7 +17323,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -17376,7 +17376,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -17429,7 +17429,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -17483,7 +17483,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -17537,7 +17537,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -17591,7 +17591,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -17645,7 +17645,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -17699,7 +17699,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -17753,7 +17753,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -17807,7 +17807,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -17861,7 +17861,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -17914,7 +17914,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -17967,7 +17967,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -18020,7 +18020,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -18073,7 +18073,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -18126,7 +18126,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -18179,7 +18179,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -18232,7 +18232,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -18285,7 +18285,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -18338,7 +18338,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -18391,7 +18391,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -18444,7 +18444,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -18497,7 +18497,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -18550,7 +18550,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -18603,7 +18603,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -18656,7 +18656,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -18709,7 +18709,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -18762,7 +18762,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -18815,7 +18815,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -18868,7 +18868,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -18921,7 +18921,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -18974,7 +18974,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -19027,7 +19027,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -19080,7 +19080,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -19133,7 +19133,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -19186,7 +19186,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -19239,7 +19239,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -19292,7 +19292,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -19345,7 +19345,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -19398,7 +19398,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -19451,7 +19451,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -19504,7 +19504,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -19557,7 +19557,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -19610,7 +19610,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -19663,7 +19663,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -19716,7 +19716,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -19769,7 +19769,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -19822,7 +19822,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -19875,7 +19875,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -19928,7 +19928,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -19981,7 +19981,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -20034,7 +20034,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -20087,7 +20087,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -20140,7 +20140,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -20193,7 +20193,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -20246,7 +20246,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -20299,7 +20299,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -20352,7 +20352,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -20405,7 +20405,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -20458,7 +20458,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -20511,7 +20511,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -20564,7 +20564,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -20617,7 +20617,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -20670,7 +20670,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -20723,7 +20723,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -20776,7 +20776,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -20829,7 +20829,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -20882,7 +20882,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -20935,7 +20935,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -26529,7 +26529,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -26547,7 +26547,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -26565,7 +26565,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -26584,7 +26584,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -26602,7 +26602,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -26620,7 +26620,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -26638,7 +26638,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -26656,7 +26656,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -26674,7 +26674,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -26693,7 +26693,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -26711,7 +26711,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -26729,7 +26729,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -26750,7 +26750,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -26768,7 +26768,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -26786,7 +26786,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -26804,7 +26804,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -26822,7 +26822,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -26840,7 +26840,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -26858,7 +26858,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -26876,7 +26876,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -26897,7 +26897,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", @@ -26916,7 +26916,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -26934,7 +26934,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -26952,7 +26952,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -26970,7 +26970,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -26988,7 +26988,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -27006,7 +27006,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -27024,7 +27024,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -27042,7 +27042,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -27061,7 +27061,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -27079,7 +27079,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -27097,7 +27097,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -27115,7 +27115,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -27133,7 +27133,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -27151,7 +27151,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -27169,7 +27169,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -27187,7 +27187,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -27205,7 +27205,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -27223,7 +27223,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -27241,7 +27241,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -27259,7 +27259,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -27277,7 +27277,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -27298,7 +27298,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", @@ -27317,7 +27317,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -27335,7 +27335,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -27354,7 +27354,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -27372,7 +27372,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -27390,7 +27390,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -27408,7 +27408,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -27426,7 +27426,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -27444,7 +27444,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -27462,7 +27462,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -27480,7 +27480,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -27498,7 +27498,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -27516,7 +27516,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -27534,7 +27534,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -27552,7 +27552,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -27570,7 +27570,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -27588,7 +27588,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -27606,7 +27606,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -27624,7 +27624,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -27642,7 +27642,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -27660,7 +27660,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -27678,7 +27678,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -27696,7 +27696,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -27714,7 +27714,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -27732,7 +27732,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -27750,7 +27750,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -27768,7 +27768,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -27786,7 +27786,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -27807,7 +27807,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", @@ -27826,7 +27826,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -27844,7 +27844,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -27862,7 +27862,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -27880,7 +27880,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -27898,7 +27898,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -27916,7 +27916,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -27934,7 +27934,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -27952,7 +27952,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -27971,7 +27971,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -27989,7 +27989,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
diff --git a/testing/buildbot/chromium.dev.json b/testing/buildbot/chromium.dev.json index 867de27..34086d9 100644 --- a/testing/buildbot/chromium.dev.json +++ b/testing/buildbot/chromium.dev.json
@@ -313,7 +313,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester-dev@chops-service-accounts.iam.gserviceaccount.com" @@ -330,7 +330,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester-dev@chops-service-accounts.iam.gserviceaccount.com" @@ -347,7 +347,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester-dev@chops-service-accounts.iam.gserviceaccount.com" @@ -364,7 +364,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester-dev@chops-service-accounts.iam.gserviceaccount.com" @@ -381,7 +381,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester-dev@chops-service-accounts.iam.gserviceaccount.com" @@ -398,7 +398,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester-dev@chops-service-accounts.iam.gserviceaccount.com"
diff --git a/testing/buildbot/chromium.fyi.json b/testing/buildbot/chromium.fyi.json index 277a266c..ef3299e 100644 --- a/testing/buildbot/chromium.fyi.json +++ b/testing/buildbot/chromium.fyi.json
@@ -4818,7 +4818,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -4869,7 +4869,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -4921,7 +4921,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -4972,7 +4972,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -5023,7 +5023,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -5074,7 +5074,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -5125,7 +5125,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -5176,7 +5176,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -5227,7 +5227,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -5278,7 +5278,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -5329,7 +5329,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -5380,7 +5380,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -5431,7 +5431,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -5482,7 +5482,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -5533,7 +5533,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -5584,7 +5584,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -5637,7 +5637,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "expiration": 10800, @@ -5692,7 +5692,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -5743,7 +5743,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -5794,7 +5794,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -5845,7 +5845,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -5896,7 +5896,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -5947,7 +5947,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -5998,7 +5998,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -6049,7 +6049,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -6100,7 +6100,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -6151,7 +6151,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -6202,7 +6202,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -6253,7 +6253,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -6304,7 +6304,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -6355,7 +6355,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -6406,7 +6406,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -6457,7 +6457,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -6508,7 +6508,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -6559,7 +6559,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -6610,7 +6610,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -6661,7 +6661,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -6712,7 +6712,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -6763,7 +6763,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -6814,7 +6814,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -6865,7 +6865,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -6916,7 +6916,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -6967,7 +6967,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -7018,7 +7018,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -7069,7 +7069,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -7120,7 +7120,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -7171,7 +7171,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -7222,7 +7222,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -7273,7 +7273,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -7324,7 +7324,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -7375,7 +7375,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -7432,7 +7432,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13", + "os": "Mac-13", "pool": "chromium.tests.finch" } ], @@ -7486,7 +7486,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13", + "os": "Mac-13", "pool": "chromium.tests.finch" } ], @@ -7540,7 +7540,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13", + "os": "Mac-13", "pool": "chromium.tests.finch" } ], @@ -7595,7 +7595,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13", + "os": "Mac-13", "pool": "chromium.tests.finch" } ], @@ -7650,7 +7650,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13", + "os": "Mac-13", "pool": "chromium.tests.finch" } ], @@ -7705,7 +7705,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13", + "os": "Mac-13", "pool": "chromium.tests.finch" } ], @@ -7760,7 +7760,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13", + "os": "Mac-13", "pool": "chromium.tests.finch" } ], @@ -7815,7 +7815,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13", + "os": "Mac-13", "pool": "chromium.tests.finch" } ], @@ -7870,7 +7870,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13", + "os": "Mac-13", "pool": "chromium.tests.finch" } ], @@ -7924,7 +7924,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13", + "os": "Mac-13", "pool": "chromium.tests.finch" } ], @@ -7978,7 +7978,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13", + "os": "Mac-13", "pool": "chromium.tests.finch" } ], @@ -8033,7 +8033,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13", + "os": "Mac-13", "pool": "chromium.tests.finch" } ], @@ -8088,7 +8088,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13", + "os": "Mac-13", "pool": "chromium.tests.finch" } ], @@ -8143,7 +8143,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13", + "os": "Mac-13", "pool": "chromium.tests.finch" } ], @@ -8198,7 +8198,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13", + "os": "Mac-13", "pool": "chromium.tests.finch" } ], @@ -8252,7 +8252,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13", + "os": "Mac-13", "pool": "chromium.tests.finch" } ], @@ -8306,7 +8306,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13", + "os": "Mac-13", "pool": "chromium.tests.finch" } ], @@ -8360,7 +8360,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13", + "os": "Mac-13", "pool": "chromium.tests.finch" } ], @@ -8419,7 +8419,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -8470,7 +8470,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -8521,7 +8521,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -8572,7 +8572,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -8623,7 +8623,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -8674,7 +8674,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -8725,7 +8725,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -8776,7 +8776,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -8827,7 +8827,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -8878,7 +8878,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -8929,7 +8929,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -8980,7 +8980,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -9031,7 +9031,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -9082,7 +9082,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -9133,7 +9133,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -9184,7 +9184,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -9235,7 +9235,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -9286,7 +9286,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -9340,7 +9340,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -9394,7 +9394,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -9448,7 +9448,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -9502,7 +9502,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -9557,7 +9557,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -9612,7 +9612,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -9667,7 +9667,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -9722,7 +9722,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -9777,7 +9777,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -9832,7 +9832,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -9887,7 +9887,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -9942,7 +9942,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -9997,7 +9997,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -10052,7 +10052,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -10106,7 +10106,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -10160,7 +10160,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -10214,7 +10214,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -10269,7 +10269,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -10324,7 +10324,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -10376,7 +10376,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -10427,7 +10427,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -10478,7 +10478,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -10529,7 +10529,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -10583,7 +10583,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -10638,7 +10638,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -10693,7 +10693,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -10745,7 +10745,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -10796,7 +10796,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -10848,7 +10848,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -10902,7 +10902,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -10956,7 +10956,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -11010,7 +11010,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -11061,7 +11061,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -11112,7 +11112,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -11163,7 +11163,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -11214,7 +11214,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -11265,7 +11265,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -11319,7 +11319,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -11373,7 +11373,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -11427,7 +11427,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -11481,7 +11481,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -11532,7 +11532,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -11583,7 +11583,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -11634,7 +11634,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -11685,7 +11685,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -11736,7 +11736,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -11787,7 +11787,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -11838,7 +11838,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -11889,7 +11889,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -11940,7 +11940,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -11991,7 +11991,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -12042,7 +12042,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -12093,7 +12093,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -12144,7 +12144,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -12195,7 +12195,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -12246,7 +12246,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -12297,7 +12297,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -12348,7 +12348,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -12399,7 +12399,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -12450,7 +12450,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -12501,7 +12501,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -12552,7 +12552,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -12603,7 +12603,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -12654,7 +12654,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -12705,7 +12705,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -12760,7 +12760,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -12815,7 +12815,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -12870,7 +12870,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -12921,7 +12921,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -12972,7 +12972,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -13023,7 +13023,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -13074,7 +13074,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -13125,7 +13125,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -13176,7 +13176,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -13227,7 +13227,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -13278,7 +13278,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -13330,7 +13330,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -13382,7 +13382,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -13435,7 +13435,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -13488,7 +13488,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -13541,7 +13541,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -13593,7 +13593,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -13645,7 +13645,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -13697,7 +13697,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -13749,7 +13749,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -13800,7 +13800,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -13852,7 +13852,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -13904,7 +13904,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -13955,7 +13955,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -14006,7 +14006,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -14058,7 +14058,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -14109,7 +14109,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -14160,7 +14160,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -14211,7 +14211,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -14262,7 +14262,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -14313,7 +14313,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -14364,7 +14364,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -14415,7 +14415,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -14466,7 +14466,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -14517,7 +14517,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -14574,7 +14574,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -14627,7 +14627,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -14680,7 +14680,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -14733,7 +14733,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -14786,7 +14786,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -14839,7 +14839,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -14892,7 +14892,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -14945,7 +14945,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -14998,7 +14998,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -15051,7 +15051,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -15104,7 +15104,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -15157,7 +15157,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -15210,7 +15210,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -15263,7 +15263,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -15316,7 +15316,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -15369,7 +15369,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -15422,7 +15422,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -15475,7 +15475,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -15529,7 +15529,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -15583,7 +15583,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -15637,7 +15637,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -15692,7 +15692,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -15747,7 +15747,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -15802,7 +15802,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -15857,7 +15857,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -15912,7 +15912,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -15967,7 +15967,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -16021,7 +16021,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -16075,7 +16075,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -16130,7 +16130,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -16184,7 +16184,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -16237,7 +16237,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -16291,7 +16291,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -16346,7 +16346,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -16400,7 +16400,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -16453,7 +16453,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -16506,7 +16506,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -16560,7 +16560,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -16614,7 +16614,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -16667,7 +16667,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -16721,7 +16721,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -16775,7 +16775,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -16828,7 +16828,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -16881,7 +16881,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -16934,7 +16934,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -16987,7 +16987,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -17041,7 +17041,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -17095,7 +17095,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -17148,7 +17148,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -17201,7 +17201,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -17254,7 +17254,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -17307,7 +17307,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -17360,7 +17360,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -17413,7 +17413,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -17466,7 +17466,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -17519,7 +17519,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -17572,7 +17572,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -17625,7 +17625,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -17678,7 +17678,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -17731,7 +17731,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -17784,7 +17784,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -17837,7 +17837,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -17890,7 +17890,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -17943,7 +17943,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -17996,7 +17996,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -18049,7 +18049,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -18103,7 +18103,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "expiration": 18000, @@ -44394,7 +44394,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13", + "os": "Mac-13", "pool": "chromium.tests.finch" } ], @@ -44417,7 +44417,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13", + "os": "Mac-13", "pool": "chromium.tests.finch" } ], @@ -44439,7 +44439,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13", + "os": "Mac-13", "pool": "chromium.tests.finch" } ], @@ -44461,7 +44461,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13", + "os": "Mac-13", "pool": "chromium.tests.finch" } ],
diff --git a/testing/buildbot/chromium.mac.json b/testing/buildbot/chromium.mac.json index dabe249..9b0f7dd 100644 --- a/testing/buildbot/chromium.mac.json +++ b/testing/buildbot/chromium.mac.json
@@ -7043,7 +7043,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-12" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -7061,7 +7061,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-12" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -7079,7 +7079,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-12" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -7098,7 +7098,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-12" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -7116,7 +7116,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-12" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -7134,7 +7134,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-12" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -7152,7 +7152,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-12" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -7170,7 +7170,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-12" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -7188,7 +7188,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-12" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -7207,7 +7207,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-12" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -7225,7 +7225,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-12" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -7243,7 +7243,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-12" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -7262,7 +7262,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-12" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", @@ -7284,7 +7284,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-12" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -7302,7 +7302,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-12" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -7320,7 +7320,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-12" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -7338,7 +7338,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-12" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -7356,7 +7356,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-12" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -7374,7 +7374,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-12" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -7392,7 +7392,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-12" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -7410,7 +7410,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-12" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -7428,7 +7428,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-12" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", @@ -7447,7 +7447,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-12" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -7465,7 +7465,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-12" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -7483,7 +7483,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-12" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -7501,7 +7501,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-12" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -7519,7 +7519,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-12" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -7537,7 +7537,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-12" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -7555,7 +7555,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-12" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -7573,7 +7573,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-12" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -7592,7 +7592,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-12" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -7610,7 +7610,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-12" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -7628,7 +7628,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-12" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -7646,7 +7646,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-12" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -7664,7 +7664,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-12" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -7682,7 +7682,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-12" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -7700,7 +7700,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-12" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -7718,7 +7718,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-12" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -7736,7 +7736,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-12" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -7754,7 +7754,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-12" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -7772,7 +7772,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-12" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -7790,7 +7790,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-12" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -7808,7 +7808,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-12" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -7826,7 +7826,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-12" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", @@ -7845,7 +7845,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-12" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -7863,7 +7863,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-12" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -7882,7 +7882,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-12" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -7900,7 +7900,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-12" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -7918,7 +7918,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-12" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -7936,7 +7936,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-12" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -7954,7 +7954,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-12" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -7972,7 +7972,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-12" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -7990,7 +7990,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-12" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -8008,7 +8008,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-12" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -8026,7 +8026,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-12" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -8044,7 +8044,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-12" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -8062,7 +8062,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-12" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -8080,7 +8080,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-12" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -8098,7 +8098,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-12" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -8116,7 +8116,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-12" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -8134,7 +8134,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-12" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -8152,7 +8152,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-12" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -8170,7 +8170,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-12" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -8188,7 +8188,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-12" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -8206,7 +8206,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-12" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -8224,7 +8224,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-12" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -8242,7 +8242,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-12" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -8260,7 +8260,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-12" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -8278,7 +8278,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-12" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -8296,7 +8296,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-12" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -8315,7 +8315,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-12" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", @@ -8334,7 +8334,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-12" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -8352,7 +8352,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-12" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -8370,7 +8370,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-12" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -8388,7 +8388,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-12" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -8406,7 +8406,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-12" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -8424,7 +8424,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-12" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -8442,7 +8442,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-12" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -8460,7 +8460,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-12" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -8479,7 +8479,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-12" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -8497,7 +8497,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-12" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -8522,7 +8522,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-12" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -8553,7 +8553,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-12" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", @@ -8585,7 +8585,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-12" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", @@ -8612,7 +8612,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-12" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -8631,7 +8631,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-12" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -8656,7 +8656,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-12" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -8679,7 +8679,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-12" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -8702,7 +8702,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-12" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -8724,7 +8724,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-12" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -8743,7 +8743,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-12" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -8765,7 +8765,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-12" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -8787,7 +8787,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-12" } ], "idempotent": false, @@ -8814,7 +8814,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-12" } ], "idempotent": false, @@ -8842,7 +8842,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-12" } ], "idempotent": false, @@ -8866,7 +8866,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-12" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -8891,7 +8891,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-12" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -8913,7 +8913,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-12" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -12478,8 +12478,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "mac_model": "Macmini8,1", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -12531,8 +12530,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "mac_model": "Macmini8,1", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -12584,8 +12582,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "mac_model": "Macmini8,1", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -12637,8 +12634,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "mac_model": "Macmini8,1", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -12690,8 +12686,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "mac_model": "Macmini8,1", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -12743,8 +12738,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "mac_model": "Macmini8,1", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -12796,8 +12790,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "mac_model": "Macmini8,1", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -12849,8 +12842,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "mac_model": "Macmini8,1", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -12902,8 +12894,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "mac_model": "Macmini8,1", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -12955,8 +12946,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "mac_model": "Macmini8,1", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -13008,8 +12998,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "mac_model": "Macmini8,1", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -13061,8 +13050,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "mac_model": "Macmini8,1", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -13115,8 +13103,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "mac_model": "Macmini8,1", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -13169,8 +13156,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "mac_model": "Macmini8,1", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -13222,8 +13208,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "mac_model": "Macmini8,1", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -13275,8 +13260,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "mac_model": "Macmini8,1", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -13328,8 +13312,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "mac_model": "Macmini8,1", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -13382,8 +13365,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "mac_model": "Macmini8,1", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -13435,8 +13417,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "mac_model": "Macmini8,1", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -13488,8 +13469,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "mac_model": "Macmini8,1", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -13541,8 +13521,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "mac_model": "Macmini8,1", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -13595,8 +13574,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "mac_model": "Macmini8,1", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -13648,8 +13626,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "mac_model": "Macmini8,1", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -13701,8 +13678,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "mac_model": "Macmini8,1", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -13754,8 +13730,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "mac_model": "Macmini8,1", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -13807,8 +13782,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "mac_model": "Macmini8,1", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -13860,8 +13834,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "mac_model": "Macmini8,1", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -13913,8 +13886,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "mac_model": "Macmini8,1", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -13966,8 +13938,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "mac_model": "Macmini8,1", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -14019,8 +13990,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "mac_model": "Macmini8,1", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -14072,8 +14042,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "mac_model": "Macmini8,1", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -14125,8 +14094,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "mac_model": "Macmini8,1", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -14178,8 +14146,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "mac_model": "Macmini8,1", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -14231,8 +14198,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "mac_model": "Macmini8,1", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -14284,8 +14250,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "mac_model": "Macmini8,1", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -14337,8 +14302,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "mac_model": "Macmini8,1", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -14397,8 +14361,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "mac_model": "Macmini8,1", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -14450,8 +14413,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "mac_model": "Macmini8,1", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -14503,8 +14465,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "mac_model": "Macmini8,1", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -14556,8 +14517,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "mac_model": "Macmini8,1", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -14609,8 +14569,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "mac_model": "Macmini8,1", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -14662,8 +14621,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "mac_model": "Macmini8,1", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -14715,8 +14673,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "mac_model": "Macmini8,1", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -14768,8 +14725,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "mac_model": "Macmini8,1", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -14821,8 +14777,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "mac_model": "Macmini8,1", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -14874,8 +14829,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "mac_model": "Macmini8,1", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -14927,8 +14881,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "mac_model": "Macmini8,1", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -14980,8 +14933,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "mac_model": "Macmini8,1", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -15033,8 +14985,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "mac_model": "Macmini8,1", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -15086,8 +15037,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "mac_model": "Macmini8,1", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -15139,8 +15089,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "mac_model": "Macmini8,1", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -15192,8 +15141,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "mac_model": "Macmini8,1", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -15245,8 +15193,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "mac_model": "Macmini8,1", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -15298,8 +15245,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "mac_model": "Macmini8,1", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -15352,8 +15298,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "mac_model": "Macmini8,1", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -15406,8 +15351,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "mac_model": "Macmini8,1", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -15460,8 +15404,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "mac_model": "Macmini8,1", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -15514,8 +15457,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "mac_model": "Macmini8,1", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -15568,8 +15510,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "mac_model": "Macmini8,1", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -15623,8 +15564,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "mac_model": "Macmini8,1", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -15678,8 +15618,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "mac_model": "Macmini8,1", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -15733,8 +15672,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "mac_model": "Macmini8,1", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -15788,8 +15726,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "mac_model": "Macmini8,1", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -15843,8 +15780,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "mac_model": "Macmini8,1", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -15898,8 +15834,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "mac_model": "Macmini8,1", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -15953,8 +15888,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "mac_model": "Macmini8,1", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -16008,8 +15942,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "mac_model": "Macmini8,1", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -16063,8 +15996,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "mac_model": "Macmini8,1", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -16118,8 +16050,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "mac_model": "Macmini8,1", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -16173,8 +16104,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "mac_model": "Macmini8,1", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -16228,8 +16158,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "mac_model": "Macmini8,1", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -16282,8 +16211,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "mac_model": "Macmini8,1", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -16336,8 +16264,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "mac_model": "Macmini8,1", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -16390,8 +16317,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "mac_model": "Macmini8,1", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -16444,8 +16370,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "mac_model": "Macmini8,1", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -16499,8 +16424,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "mac_model": "Macmini8,1", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -16554,8 +16478,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "mac_model": "Macmini8,1", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -16609,8 +16532,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "mac_model": "Macmini8,1", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -16663,8 +16585,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "mac_model": "Macmini8,1", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -16716,8 +16637,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "mac_model": "Macmini8,1", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -16769,8 +16689,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "mac_model": "Macmini8,1", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -16822,8 +16741,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "mac_model": "Macmini8,1", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -16876,8 +16794,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "mac_model": "Macmini8,1", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -16931,8 +16848,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "mac_model": "Macmini8,1", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -16986,8 +16902,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "mac_model": "Macmini8,1", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -17041,8 +16956,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "mac_model": "Macmini8,1", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -17095,8 +17009,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "mac_model": "Macmini8,1", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -17148,8 +17061,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "mac_model": "Macmini8,1", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -17202,8 +17114,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "mac_model": "Macmini8,1", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -17256,8 +17167,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "mac_model": "Macmini8,1", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -17310,8 +17220,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "mac_model": "Macmini8,1", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -17364,8 +17273,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "mac_model": "Macmini8,1", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -17418,8 +17326,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "mac_model": "Macmini8,1", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -17471,8 +17378,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "mac_model": "Macmini8,1", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -17524,8 +17430,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "mac_model": "Macmini8,1", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -17577,8 +17482,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "mac_model": "Macmini8,1", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -17630,8 +17534,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "mac_model": "Macmini8,1", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -17683,8 +17586,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "mac_model": "Macmini8,1", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -17737,8 +17639,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "mac_model": "Macmini8,1", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -17791,8 +17692,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "mac_model": "Macmini8,1", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -17845,8 +17745,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "mac_model": "Macmini8,1", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -17899,8 +17798,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "mac_model": "Macmini8,1", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -17952,8 +17850,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "mac_model": "Macmini8,1", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -18005,8 +17902,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "mac_model": "Macmini8,1", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -18058,8 +17954,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "mac_model": "Macmini8,1", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -18111,8 +18006,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "mac_model": "Macmini8,1", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -18164,8 +18058,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "mac_model": "Macmini8,1", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -18217,8 +18110,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "mac_model": "Macmini8,1", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -18270,8 +18162,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "mac_model": "Macmini8,1", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -18323,8 +18214,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "mac_model": "Macmini8,1", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -18376,8 +18266,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "mac_model": "Macmini8,1", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -18429,8 +18318,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "mac_model": "Macmini8,1", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -18482,8 +18370,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "mac_model": "Macmini8,1", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -18535,8 +18422,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "mac_model": "Macmini8,1", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -18588,8 +18474,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "mac_model": "Macmini8,1", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -18641,8 +18526,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "mac_model": "Macmini8,1", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -18694,8 +18578,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "mac_model": "Macmini8,1", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -18747,8 +18630,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "mac_model": "Macmini8,1", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -18800,8 +18682,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "mac_model": "Macmini8,1", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -18853,8 +18734,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "mac_model": "Macmini8,1", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -18906,8 +18786,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "mac_model": "Macmini8,1", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -18959,8 +18838,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "mac_model": "Macmini8,1", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -19012,8 +18890,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "mac_model": "Macmini8,1", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -19065,8 +18942,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "mac_model": "Macmini8,1", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -19118,8 +18994,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "mac_model": "Macmini8,1", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -19171,8 +19046,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "mac_model": "Macmini8,1", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -19230,7 +19104,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -19281,7 +19155,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -19332,7 +19206,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -19383,7 +19257,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -19434,7 +19308,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -19485,7 +19359,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -19536,7 +19410,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -19587,7 +19461,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -19638,7 +19512,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -19689,7 +19563,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -19740,7 +19614,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -19791,7 +19665,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -19845,7 +19719,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -19900,7 +19774,7 @@ { "cpu": "x86-64", "mac_model": "Macmini8,1", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -19954,7 +19828,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -20008,7 +19882,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -20063,7 +19937,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -20118,7 +19992,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -20174,7 +20048,7 @@ { "cpu": "x86-64", "mac_model": "Macmini8,1", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -20229,7 +20103,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -20284,7 +20158,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -20340,7 +20214,7 @@ { "cpu": "x86-64", "mac_model": "Macmini8,1", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -20395,7 +20269,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -20450,7 +20324,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -20505,7 +20379,7 @@ { "cpu": "x86-64", "mac_model": "Macmini8,1", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -20559,7 +20433,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -20613,7 +20487,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -20669,7 +20543,7 @@ { "cpu": "x86-64", "mac_model": "Macmini8,1", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -20724,7 +20598,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -20776,7 +20650,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -20827,7 +20701,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -20878,7 +20752,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -20929,7 +20803,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -20983,7 +20857,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -21039,7 +20913,7 @@ { "cpu": "x86-64", "mac_model": "Macmini8,1", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -21094,7 +20968,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -21147,7 +21021,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -21201,7 +21075,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -21256,7 +21130,7 @@ { "cpu": "x86-64", "mac_model": "Macmini8,1", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -21310,7 +21184,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -21361,7 +21235,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -21412,7 +21286,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -21463,7 +21337,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -21514,7 +21388,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -21568,7 +21442,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -21622,7 +21496,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -21673,7 +21547,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -21724,7 +21598,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -21775,7 +21649,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -21826,7 +21700,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -21877,7 +21751,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -21928,7 +21802,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -21979,7 +21853,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -22030,7 +21904,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -22081,7 +21955,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -22132,7 +22006,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -22183,7 +22057,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -22234,7 +22108,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -22285,7 +22159,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -22336,7 +22210,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -22387,7 +22261,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -22438,7 +22312,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -22489,7 +22363,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -22540,7 +22414,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -22591,7 +22465,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -22642,7 +22516,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -24336,7 +24210,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-12" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -24354,7 +24228,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-12" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -24372,7 +24246,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-12" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -24391,7 +24265,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-12" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -24409,7 +24283,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-12" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -24427,7 +24301,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-12" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -24445,7 +24319,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-12" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -24463,7 +24337,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-12" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -24481,7 +24355,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-12" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -24500,7 +24374,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-12" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -24518,7 +24392,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-12" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -24536,7 +24410,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-12" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -24557,7 +24431,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-12" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -24575,7 +24449,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-12" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -24593,7 +24467,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-12" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -24611,7 +24485,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-12" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -24629,7 +24503,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-12" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -24647,7 +24521,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-12" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -24665,7 +24539,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-12" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -24683,7 +24557,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-12" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -24701,7 +24575,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-12" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", @@ -24720,7 +24594,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-12" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -24738,7 +24612,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-12" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -24756,7 +24630,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-12" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -24774,7 +24648,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-12" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -24792,7 +24666,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-12" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -24810,7 +24684,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-12" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -24828,7 +24702,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-12" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -24846,7 +24720,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-12" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -24864,7 +24738,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-12" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -24882,7 +24756,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-12" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -24900,7 +24774,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-12" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -24918,7 +24792,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-12" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -24936,7 +24810,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-12" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -24954,7 +24828,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-12" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -24972,7 +24846,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-12" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -24990,7 +24864,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-12" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -25008,7 +24882,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-12" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -25026,7 +24900,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-12" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -25044,7 +24918,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-12" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -25062,7 +24936,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-12" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -25080,7 +24954,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-12" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", @@ -25099,7 +24973,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-12" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -25117,7 +24991,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-12" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -25135,7 +25009,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-12" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -25153,7 +25027,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-12" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -25171,7 +25045,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-12" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -25189,7 +25063,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-12" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -25207,7 +25081,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-12" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -25225,7 +25099,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-12" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -25243,7 +25117,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-12" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -25261,7 +25135,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-12" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -25279,7 +25153,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-12" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -25297,7 +25171,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-12" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -25315,7 +25189,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-12" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -25333,7 +25207,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-12" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -25351,7 +25225,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-12" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -25369,7 +25243,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-12" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -25387,7 +25261,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-12" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -25405,7 +25279,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-12" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -25423,7 +25297,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-12" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -25441,7 +25315,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-12" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -25459,7 +25333,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-12" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -25477,7 +25351,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-12" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -25495,7 +25369,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-12" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -25513,7 +25387,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-12" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -25531,7 +25405,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-12" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -25549,7 +25423,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-12" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -25567,7 +25441,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-12" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -25585,7 +25459,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-12" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -25603,7 +25477,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-12" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -25621,7 +25495,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-12" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -25639,7 +25513,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-12" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -25657,7 +25531,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-12" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -25675,7 +25549,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-12" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -25693,7 +25567,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-12" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -25712,7 +25586,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-12" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -25730,7 +25604,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-12" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -25755,7 +25629,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-12" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -25786,7 +25660,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-12" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", @@ -25818,7 +25692,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-12" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", @@ -25845,7 +25719,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-12" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -25864,7 +25738,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-12" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -25889,7 +25763,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-12" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -25912,7 +25786,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-12" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -25935,7 +25809,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-12" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -25954,7 +25828,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-12" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -25976,7 +25850,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-12" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -25998,7 +25872,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-12" } ], "idempotent": false, @@ -26024,7 +25898,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-12" } ], "idempotent": false, @@ -26051,7 +25925,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13" + "os": "Mac-12" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
diff --git a/testing/buildbot/chromium.memory.json b/testing/buildbot/chromium.memory.json index a984f77..a4f54d8 100644 --- a/testing/buildbot/chromium.memory.json +++ b/testing/buildbot/chromium.memory.json
@@ -14684,7 +14684,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -14735,7 +14735,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -14786,7 +14786,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -14837,7 +14837,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -14888,7 +14888,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -14939,7 +14939,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -14990,7 +14990,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -15041,7 +15041,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -15092,7 +15092,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -15143,7 +15143,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -15194,7 +15194,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -15245,7 +15245,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -15296,7 +15296,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -15347,7 +15347,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -15398,7 +15398,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -15449,7 +15449,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -15500,7 +15500,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -15551,7 +15551,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -15602,7 +15602,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -15653,7 +15653,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -15704,7 +15704,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -15755,7 +15755,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -15806,7 +15806,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -15858,7 +15858,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -15910,7 +15910,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -15961,7 +15961,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -16012,7 +16012,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -16063,7 +16063,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -16114,7 +16114,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -16165,7 +16165,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -16216,7 +16216,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -16267,7 +16267,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -16318,7 +16318,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -16369,7 +16369,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -16420,7 +16420,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -16471,7 +16471,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -16522,7 +16522,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -16573,7 +16573,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -16624,7 +16624,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -16675,7 +16675,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -16726,7 +16726,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -16777,7 +16777,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -16828,7 +16828,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -16879,7 +16879,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -16930,7 +16930,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -16981,7 +16981,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -17032,7 +17032,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -17083,7 +17083,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [
diff --git a/testing/buildbot/chromium.rust.json b/testing/buildbot/chromium.rust.json index f04fe66c..536aa39 100644 --- a/testing/buildbot/chromium.rust.json +++ b/testing/buildbot/chromium.rust.json
@@ -750,7 +750,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -770,7 +770,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -787,7 +787,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -804,7 +804,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -821,7 +821,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -839,7 +839,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -857,7 +857,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -878,7 +878,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
diff --git a/testing/buildbot/chromium.webrtc.fyi.json b/testing/buildbot/chromium.webrtc.fyi.json index d1f203e..495cc227 100644 --- a/testing/buildbot/chromium.webrtc.fyi.json +++ b/testing/buildbot/chromium.webrtc.fyi.json
@@ -381,7 +381,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -404,7 +404,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -424,7 +424,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -447,7 +447,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -471,7 +471,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -491,7 +491,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -511,7 +511,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -726,7 +726,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [ @@ -777,7 +777,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "named_caches": [
diff --git a/testing/buildbot/chromium.webrtc.json b/testing/buildbot/chromium.webrtc.json index 99754bd..ef00874 100644 --- a/testing/buildbot/chromium.webrtc.json +++ b/testing/buildbot/chromium.webrtc.json
@@ -297,7 +297,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -320,7 +320,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -340,7 +340,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -363,7 +363,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -387,7 +387,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -407,7 +407,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -427,7 +427,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Mac-12|Mac-13" + "os": "Mac-13" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
diff --git a/testing/buildbot/filters/android.emulator_11.chrome_public_test_apk.filter b/testing/buildbot/filters/android.emulator_11.chrome_public_test_apk.filter index 100c718..e1691cd0 100644 --- a/testing/buildbot/filters/android.emulator_11.chrome_public_test_apk.filter +++ b/testing/buildbot/filters/android.emulator_11.chrome_public_test_apk.filter
@@ -6,10 +6,6 @@ -org.chromium.chrome.browser.download.OMADownloadHandlerTest.testQueryDownloadResult # crbug.com/1193814 --org.chromium.chrome.browser.download.DownloadTest.testDangerousDownload__UseDownloadOfflineContentProviderDisabled --org.chromium.chrome.browser.download.DownloadTest.testDangerousDownload__UseDownloadOfflineContentProviderEnabled --org.chromium.chrome.browser.download.DownloadTest.testDuplicateHttpPostDownload_Dismiss__UseDownloadOfflineContentProviderDisabled --org.chromium.chrome.browser.download.DownloadTest.testDuplicateHttpPostDownload_Dismiss__UseDownloadOfflineContentProviderEnabled -org.chromium.chrome.browser.download.DownloadTest.testHttpGetDownload__UseDownloadOfflineContentProviderDisabled -org.chromium.chrome.browser.download.DownloadTest.testHttpGetDownload__UseDownloadOfflineContentProviderEnabled -org.chromium.chrome.browser.download.DownloadTest.testHttpPostDownload__UseDownloadOfflineContentProviderDisabled
diff --git a/testing/buildbot/filters/android.emulator_12.chrome_public_test_apk.filter b/testing/buildbot/filters/android.emulator_12.chrome_public_test_apk.filter index c618df2..c4dc326b 100644 --- a/testing/buildbot/filters/android.emulator_12.chrome_public_test_apk.filter +++ b/testing/buildbot/filters/android.emulator_12.chrome_public_test_apk.filter
@@ -6,10 +6,6 @@ -org.chromium.chrome.browser.download.OMADownloadHandlerTest.testQueryDownloadResult # crbug.com/1193814 --org.chromium.chrome.browser.download.DownloadTest.testDangerousDownload__UseDownloadOfflineContentProviderDisabled --org.chromium.chrome.browser.download.DownloadTest.testDangerousDownload__UseDownloadOfflineContentProviderEnabled --org.chromium.chrome.browser.download.DownloadTest.testDuplicateHttpPostDownload_Dismiss__UseDownloadOfflineContentProviderDisabled --org.chromium.chrome.browser.download.DownloadTest.testDuplicateHttpPostDownload_Dismiss__UseDownloadOfflineContentProviderEnabled -org.chromium.chrome.browser.download.DownloadTest.testHttpGetDownload__UseDownloadOfflineContentProviderDisabled -org.chromium.chrome.browser.download.DownloadTest.testHttpGetDownload__UseDownloadOfflineContentProviderEnabled -org.chromium.chrome.browser.download.DownloadTest.testHttpPostDownload__UseDownloadOfflineContentProviderDisabled
diff --git a/testing/buildbot/filters/android.pie_arm64_rel.chrome_public_test_apk.filter b/testing/buildbot/filters/android.pie_arm64_rel.chrome_public_test_apk.filter index 81ccbcb..b328c74 100644 --- a/testing/buildbot/filters/android.pie_arm64_rel.chrome_public_test_apk.filter +++ b/testing/buildbot/filters/android.pie_arm64_rel.chrome_public_test_apk.filter
@@ -74,9 +74,6 @@ -org.chromium.chrome.browser.translate.TranslateCompactInfoBarTest.testManualInitiationWithBarOpen -org.chromium.chrome.browser.translate.TranslateCompactInfoBarTest.testStartTranslateOnManualInitiation -# crbug.com/1128665 --org.chromium.chrome.browser.download.DownloadTest.testDuplicateHttpPostDownload_Cancel__UseDownloadOfflineContentProviderEnabled - # crbug.com/1165459 -org.chromium.chrome.browser.share.long_screenshots.LongScreenshotsEntryTest.testCaptured
diff --git a/testing/buildbot/internal.chrome.fyi.json b/testing/buildbot/internal.chrome.fyi.json index 2845200..1baffcf 100644 --- a/testing/buildbot/internal.chrome.fyi.json +++ b/testing/buildbot/internal.chrome.fyi.json
@@ -212,7 +212,7 @@ "dimension_sets": [ { "cpu": "arm64", - "os": "Mac-12|Mac-13", + "os": "Mac-13", "pool": "chrome.tests.finch" } ],
diff --git a/testing/buildbot/mixins.pyl b/testing/buildbot/mixins.pyl index 9365c87..833bd62 100644 --- a/testing/buildbot/mixins.pyl +++ b/testing/buildbot/mixins.pyl
@@ -906,34 +906,6 @@ }, }, }, - # TODO (crbug/1448671): remove the 3 OR mixins below after Mac13 upgrade completes - 'mac_12_or_13_arm64': { - 'swarming': { - 'dimensions': { - 'cpu': 'arm64', - 'os': 'Mac-12|Mac-13', - }, - }, - }, - # this can be replaced with mac_13_x64 mixins after upgrade completes. Mac13 machines - # are automatically on T2 or above - 'mac_12_or_13_t2_x64': { - 'swarming': { - 'dimensions': { - 'cpu': 'x86-64', - 'mac_model': 'Macmini8,1', - 'os': 'Mac-12|Mac-13', - }, - }, - }, - 'mac_12_or_13_x64': { - 'swarming': { - 'dimensions': { - 'cpu': 'x86-64', - 'os': 'Mac-12|Mac-13', - }, - }, - }, 'mac_12_x64': { 'swarming': { 'dimensions': { @@ -1008,6 +980,22 @@ }, }, }, + 'mac_default_arm64': { + 'swarming': { + 'dimensions': { + 'cpu': 'arm64', + 'os': 'Mac-13', + }, + }, + }, + 'mac_default_x64': { + 'swarming': { + 'dimensions': { + 'cpu': 'x86-64', + 'os': 'Mac-13', + }, + }, + }, 'mac_mini_intel_gpu_experimental': { 'swarming': { 'dimensions': {
diff --git a/testing/buildbot/waterfalls.pyl b/testing/buildbot/waterfalls.pyl index fac99e9..fa60f6b 100644 --- a/testing/buildbot/waterfalls.pyl +++ b/testing/buildbot/waterfalls.pyl
@@ -1359,7 +1359,7 @@ # which doesn't exist in the CfT config. 'mac-rel-cft': { 'mixins': [ - 'mac_12_or_13_x64', + 'mac_default_x64', 'isolate_profile_data', ], # TODO(crbug.com/1399527) - for some reason gcapi_example @@ -2084,7 +2084,7 @@ ], 'mixins': [ 'has_native_resultdb_integration', - 'mac_12_or_13_x64', + 'mac_default_x64', 'mac_toolchain', 'out_dir_arg', 'xcode_14_main', @@ -2118,7 +2118,7 @@ 'has_native_resultdb_integration', 'ios_restart_device', 'limited_capacity_bot', - 'mac_12_or_13_x64', + 'mac_default_x64', 'mac_toolchain', 'out_dir_arg', 'xcode_14_main', @@ -2220,7 +2220,7 @@ 'has_native_resultdb_integration', 'ios_output_disabled_tests', 'isolate_profile_data', - 'mac_12_or_13_x64', + 'mac_default_x64', 'mac_toolchain', 'out_dir_arg', 'xcode_14_main', @@ -2280,7 +2280,7 @@ 'mac-code-coverage': { 'mixins': [ 'isolate_profile_data', - 'mac_12_or_13_x64', + 'mac_default_x64', ], 'test_suites': { 'gtest_tests': 'chromium_mac_gtests', @@ -2729,7 +2729,7 @@ }, 'mac-arm-rel-dev': { 'mixins': [ - 'mac_12_or_13_arm64', + 'mac_default_arm64', ], 'test_suites': { 'gtest_tests': 'chromium_dev_desktop_gtests', @@ -3094,7 +3094,7 @@ 'mixins': [ 'has_native_resultdb_integration', 'isolate_profile_data', - 'mac_12_or_13_x64', + 'mac_default_x64', 'mac_toolchain', 'out_dir_arg', 'xcode_14_main', @@ -3290,7 +3290,7 @@ ], 'mixins': [ 'has_native_resultdb_integration', - 'mac_12_or_13_arm64', + 'mac_default_arm64', 'mac_toolchain', 'out_dir_arg', 'xcode_14_main', @@ -3304,7 +3304,7 @@ 'mixins': [ 'finch-chromium-swarming-pool', 'has_native_resultdb_integration', - 'mac_12_or_13_arm64', + 'mac_default_arm64', 'mac_toolchain', 'out_dir_arg', 'xcode_14_main', @@ -3322,7 +3322,7 @@ ], 'mixins': [ 'has_native_resultdb_integration', - 'mac_12_or_13_arm64', + 'mac_default_arm64', 'mac_toolchain', 'out_dir_arg', 'xcode_14_main', @@ -3335,7 +3335,7 @@ 'ios-m1-simulator-cronet': { 'mixins': [ 'has_native_resultdb_integration', - 'mac_12_or_13_arm64', + 'mac_default_arm64', 'mac_toolchain', 'out_dir_arg', 'xcode_14_main', @@ -3348,7 +3348,7 @@ 'ios-simulator-cronet': { 'mixins': [ 'has_native_resultdb_integration', - 'mac_12_or_13_x64', + 'mac_default_x64', 'mac_toolchain', 'out_dir_arg', 'xcode_14_main', @@ -3361,7 +3361,7 @@ 'ios-simulator-multi-window': { 'mixins': [ 'has_native_resultdb_integration', - 'mac_12_or_13_x64', + 'mac_default_x64', 'mac_toolchain', 'out_dir_arg', 'xcode_14_main', @@ -3375,7 +3375,7 @@ 'mixins': [ 'has_native_resultdb_integration', 'ios_custom_webkit', - 'mac_12_or_13_x64', + 'mac_default_x64', 'mac_toolchain', 'out_dir_arg', 'xcode_14_main', @@ -3388,7 +3388,7 @@ 'ios-wpt-fyi-rel': { 'mixins': [ 'has_native_resultdb_integration', - 'mac_12_or_13_x64', + 'mac_default_x64', 'mac_toolchain', 'xcode_14_main', ], @@ -3742,7 +3742,7 @@ 'mac-fieldtrial-tester': { 'mixins': [ 'finch-chromium-swarming-pool', - 'mac_12_or_13_arm64', + 'mac_default_arm64', ], 'test_suites': { 'gtest_tests': 'fieldtrial_browser_tests', @@ -4967,7 +4967,7 @@ }, 'Mac12 Tests': { 'mixins': [ - 'mac_12_or_13_x64', + 'mac_12_x64', 'isolate_profile_data', ], 'test_suites': { @@ -5015,7 +5015,7 @@ 'mixins': [ 'has_native_resultdb_integration', 'isolate_profile_data', - 'mac_12_or_13_t2_x64', + 'mac_default_x64', 'mac_toolchain', 'out_dir_arg', 'xcode_14_main', @@ -5032,7 +5032,7 @@ 'mixins': [ 'has_native_resultdb_integration', 'isolate_profile_data', - 'mac_12_or_13_t2_x64', + 'mac_default_x64', 'mac_toolchain', 'out_dir_arg', 'xcode_14_main', @@ -5048,7 +5048,7 @@ ], 'mixins': [ 'has_native_resultdb_integration', - 'mac_12_or_13_x64', + 'mac_default_x64', 'mac_toolchain', 'out_dir_arg', 'xcode_14_main', @@ -5086,7 +5086,7 @@ 'mixins': [ # Only run selected test suites on CQ. https://crbug.com/1234525. 'ci_only', - 'mac_12_or_13_arm64', + 'mac_12_arm64', ], 'test_suites': { 'gtest_tests': 'chromium_mac_gtests_no_nacl_no_nocompile', @@ -5243,7 +5243,7 @@ ], 'mixins': [ 'has_native_resultdb_integration', - 'mac_12_or_13_x64', + 'mac_default_x64', 'mac_toolchain', 'out_dir_arg', 'xcode_14_main', @@ -5468,7 +5468,7 @@ 'mixins': [ 'has_native_resultdb_integration', 'isolate_profile_data', - 'mac_12_or_13_x64', + 'mac_default_x64', 'mac_toolchain', 'out_dir_arg', 'xcode_14_main', @@ -5496,7 +5496,7 @@ 'mixins': [ 'has_native_resultdb_integration', 'isolate_profile_data', - 'mac_12_or_13_x64', + 'mac_default_x64', 'mac_toolchain', 'out_dir_arg', 'xcode_14_main', @@ -5637,7 +5637,7 @@ 'rust_build_tests', ], 'mixins': [ - 'mac_12_or_13_x64', + 'mac_default_x64', ], 'test_suites': { 'gtest_tests': 'rust_host_gtests', @@ -6053,7 +6053,7 @@ }, 'WebRTC Chromium Mac Tester': { 'mixins': [ - 'mac_12_or_13_x64', + 'mac_default_x64', ], 'test_suites': { # TODO(crbug.com/1409418): Reenable baremetal_tests. @@ -6142,7 +6142,7 @@ }, 'WebRTC Chromium FYI Mac Tester': { 'mixins': [ - 'mac_12_or_13_x64', + 'mac_default_x64', ], 'test_suites': { 'gtest_tests': 'webrtc_chromium_gtests', @@ -6170,7 +6170,7 @@ 'WebRTC Chromium FYI ios-simulator': { 'mixins': [ 'has_native_resultdb_integration', - 'mac_12_or_13_x64', + 'mac_default_x64', 'mac_toolchain', 'out_dir_arg', 'xcode_14_main', @@ -6575,7 +6575,7 @@ 'mac-arm64-finch-smoke-chrome': { 'mixins': [ 'chrome-finch-swarming-pool', - 'mac_12_or_13_arm64', + 'mac_default_arm64', ], 'test_suites': { 'isolated_scripts': 'chrome_finch_smoke_tests',
diff --git a/testing/variations/fieldtrial_testing_config.json b/testing/variations/fieldtrial_testing_config.json index e7986db..5ed13e3 100644 --- a/testing/variations/fieldtrial_testing_config.json +++ b/testing/variations/fieldtrial_testing_config.json
@@ -9175,6 +9175,27 @@ ] } ], + "OmniboxTailSuggestIOS": [ + { + "platforms": [ + "ios" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "OmniboxTailSuggest" + ] + }, + { + "name": "Enabled_WithSuggestEmbed", + "enable_features": [ + "OmniboxTailSuggest" + ] + } + ] + } + ], "OmniboxUISimplificationDesktop": [ { "platforms": [
diff --git a/third_party/blink/renderer/core/animation/timeline_offset.cc b/third_party/blink/renderer/core/animation/timeline_offset.cc index 8e9dca7..6025fc8 100644 --- a/third_party/blink/renderer/core/animation/timeline_offset.cc +++ b/third_party/blink/renderer/core/animation/timeline_offset.cc
@@ -222,7 +222,8 @@ CSSToLengthConversionData::Flags ignored_flags = 0; CSSToLengthConversionData length_conversion_data( element->ComputedStyleRef(), element_resolve_context.ParentStyle(), - element_resolve_context.RootElementStyle(), document.GetLayoutView(), + element_resolve_context.RootElementStyle(), + CSSToLengthConversionData::ViewportSize(document.GetLayoutView()), CSSToLengthConversionData::ContainerSizes(element), element->GetComputedStyle()->EffectiveZoom(), ignored_flags);
diff --git a/third_party/blink/renderer/core/animation/view_timeline.cc b/third_party/blink/renderer/core/animation/view_timeline.cc index 3878653b..011aaf7 100644 --- a/third_party/blink/renderer/core/animation/view_timeline.cc +++ b/third_party/blink/renderer/core/animation/view_timeline.cc
@@ -150,7 +150,8 @@ CSSToLengthConversionData::Flags ignored_flags = 0; CSSToLengthConversionData length_conversion_data( subject->ComputedStyleRef(), element_resolve_context.ParentStyle(), - element_resolve_context.RootElementStyle(), document.GetLayoutView(), + element_resolve_context.RootElementStyle(), + CSSToLengthConversionData::ViewportSize(document.GetLayoutView()), CSSToLengthConversionData::ContainerSizes(subject), subject->GetComputedStyle()->EffectiveZoom(), ignored_flags);
diff --git a/third_party/blink/renderer/core/css/css_gradient_value.cc b/third_party/blink/renderer/core/css/css_gradient_value.cc index 67c39e1..eba5cdb 100644 --- a/third_party/blink/renderer/core/css/css_gradient_value.cc +++ b/third_party/blink/renderer/core/css/css_gradient_value.cc
@@ -147,8 +147,9 @@ // TODO(crbug.com/947377): Conversion is not supposed to happen here. CSSToLengthConversionData::Flags ignored_flags = 0; CSSToLengthConversionData conversion_data( - style, &style, root_style, document.GetLayoutView(), container_sizes, - style.EffectiveZoom(), ignored_flags); + style, &style, root_style, + CSSToLengthConversionData::ViewportSize(document.GetLayoutView()), + container_sizes, style.EffectiveZoom(), ignored_flags); scoped_refptr<Gradient> gradient; switch (GetClassType()) {
diff --git a/third_party/blink/renderer/core/css/css_math_expression_node_test.cc b/third_party/blink/renderer/core/css/css_math_expression_node_test.cc index 960c1af6..977e73f 100644 --- a/third_party/blink/renderer/core/css/css_math_expression_node_test.cc +++ b/third_party/blink/renderer/core/css/css_math_expression_node_test.cc
@@ -99,7 +99,8 @@ scoped_refptr<const ComputedStyle> style = builder.TakeStyle(); CSSToLengthConversionData::Flags ignored_flags = 0; CSSToLengthConversionData conversion_data( - *style, style.get(), style.get(), nullptr, + *style, style.get(), style.get(), + CSSToLengthConversionData::ViewportSize(nullptr), CSSToLengthConversionData::ContainerSizes(), style->EffectiveZoom(), ignored_flags);
diff --git a/third_party/blink/renderer/core/css/css_to_length_conversion_data.h b/third_party/blink/renderer/core/css/css_to_length_conversion_data.h index 101e1bc..5840e04a 100644 --- a/third_party/blink/renderer/core/css/css_to_length_conversion_data.h +++ b/third_party/blink/renderer/core/css/css_to_length_conversion_data.h
@@ -138,6 +138,7 @@ dynamic_height_(height) {} explicit ViewportSize(const LayoutView*); + bool operator==(const ViewportSize&) const = default; // v* double Width() const { return LargeWidth(); } @@ -240,7 +241,7 @@ CSSToLengthConversionData(const ComputedStyleOrBuilder& element_style, const ComputedStyle* parent_style, const ComputedStyle* root_style, - const LayoutView* layout_view, + const ViewportSize& viewport_size, const ContainerSizes& container_sizes, float zoom, Flags& flags) @@ -250,7 +251,7 @@ LineHeightSize(parent_style ? parent_style->GetFontSizeStyle() : element_style.GetFontSizeStyle(), root_style), - ViewportSize(layout_view), + viewport_size, container_sizes, zoom, flags) {}
diff --git a/third_party/blink/renderer/core/css/css_to_length_conversion_data_test.cc b/third_party/blink/renderer/core/css/css_to_length_conversion_data_test.cc index b541bce2..2edd8df6 100644 --- a/third_party/blink/renderer/core/css/css_to_length_conversion_data_test.cc +++ b/third_party/blink/renderer/core/css/css_to_length_conversion_data_test.cc
@@ -52,7 +52,7 @@ return CSSToLengthConversionData( div->ComputedStyleRef(), GetDocument().body()->GetComputedStyle(), GetDocument().documentElement()->GetComputedStyle(), - GetDocument().GetLayoutView(), + CSSToLengthConversionData::ViewportSize(GetDocument().GetLayoutView()), CSSToLengthConversionData::ContainerSizes(), data_zoom.value_or(div->GetComputedStyle()->EffectiveZoom()), flags); }
diff --git a/third_party/blink/renderer/core/css/resolver/style_cascade_test.cc b/third_party/blink/renderer/core/css/resolver/style_cascade_test.cc index 4a7e5e08..849915e 100644 --- a/third_party/blink/renderer/core/css/resolver/style_cascade_test.cc +++ b/third_party/blink/renderer/core/css/resolver/style_cascade_test.cc
@@ -226,6 +226,7 @@ Element* Body() const { return GetDocument().body(); } static StyleResolverState& InitState(StyleResolverState& state) { + state.GetDocument().GetStyleEngine().UpdateViewportSize(); state.SetStyle(*InitialStyle(state.GetDocument())); state.SetParentStyle(InitialStyle(state.GetDocument())); state.SetOldStyle(state.GetElement().GetComputedStyle());
diff --git a/third_party/blink/renderer/core/css/resolver/style_resolver.cc b/third_party/blink/renderer/core/css/resolver/style_resolver.cc index f5e3c06..95bec9f1 100644 --- a/third_party/blink/renderer/core/css/resolver/style_resolver.cc +++ b/third_party/blink/renderer/core/css/resolver/style_resolver.cc
@@ -2249,6 +2249,7 @@ nullptr /* StyleRecalcContext */, StyleRequest(parent.get())); + GetDocument().GetStyleEngine().UpdateViewportSize(); state.SetStyle(*parent); StyleBuilder::ApplyProperty(GetCSSPropertyFilter(), state, @@ -2429,6 +2430,7 @@ StyleResolverState state(GetDocument(), element, nullptr /* StyleRecalcContext */, StyleRequest(&style)); + GetDocument().GetStyleEngine().UpdateViewportSize(); state.SetStyle(style); if (const ComputedStyle* parent_style = element.GetComputedStyle()) { state.SetParentStyle(parent_style);
diff --git a/third_party/blink/renderer/core/css/resolver/style_resolver_state.cc b/third_party/blink/renderer/core/css/resolver/style_resolver_state.cc index 48e61d65..4f70533 100644 --- a/third_party/blink/renderer/core/css/resolver/style_resolver_state.cc +++ b/third_party/blink/renderer/core/css/resolver/style_resolver_state.cc
@@ -120,7 +120,7 @@ void StyleResolverState::UpdateLengthConversionData() { css_to_length_conversion_data_ = CSSToLengthConversionData( *style_builder_, ParentStyle(), RootElementStyle(), - GetDocument().GetLayoutView(), + GetDocument().GetStyleEngine().GetViewportSize(), CSSToLengthConversionData::ContainerSizes(container_unit_context_), StyleBuilder().EffectiveZoom(), length_conversion_flags_); element_style_resources_.UpdateLengthConversionData(
diff --git a/third_party/blink/renderer/core/css/rule_set.cc b/third_party/blink/renderer/core/css/rule_set.cc index ed6ac08..0f10a1f 100644 --- a/third_party/blink/renderer/core/css/rule_set.cc +++ b/third_party/blink/renderer/core/css/rule_set.cc
@@ -177,6 +177,7 @@ const RuleData& rule_data) { rules.push_back(rule_data); rules.back().ComputeBloomFilterHashes(); + rules.back().ComputeEntirelyCoveredByBucketing(); need_compaction_ = true; }
diff --git a/third_party/blink/renderer/core/css/selector_checker-inl.h b/third_party/blink/renderer/core/css/selector_checker-inl.h index da86fd2bb..5fc640b2 100644 --- a/third_party/blink/renderer/core/css/selector_checker-inl.h +++ b/third_party/blink/renderer/core/css/selector_checker-inl.h
@@ -91,11 +91,6 @@ const CSSSelector* rewind_on_failure = nullptr; while (selector != nullptr) { - if (selector->IsCoveredByBucketing()) { - DCHECK(MatchOne(selector, element)) - << selector->SelectorText() << " unexpectedly didn't match " - << element; - } if (selector->IsCoveredByBucketing() || MatchOne(selector, element)) { if (selector->Relation() == CSSSelector::kDescendant) { // We matched the entire compound, but there are more.
diff --git a/third_party/blink/renderer/core/css/style_engine.cc b/third_party/blink/renderer/core/css/style_engine.cc index 90b693e..9bc636b 100644 --- a/third_party/blink/renderer/core/css/style_engine.cc +++ b/third_party/blink/renderer/core/css/style_engine.cc
@@ -215,6 +215,9 @@ WebThemeEngineHelper::GetNativeThemeEngine()->GetForcedColors(); UpdateForcedBackgroundColor(); UpdateColorScheme(); + + // Mostly for the benefit of unit tests. + UpdateViewportSize(); } StyleEngine::~StyleEngine() = default; @@ -3149,6 +3152,7 @@ if (cq_data->SkippedStyleRecalc()) { DecrementSkippedContainerRecalc(); } + UpdateViewportSize(); RecalcStyleForContainer(container, change); if (container.NeedsReattachLayoutTree()) { @@ -3329,6 +3333,7 @@ UpdateViewportStyle(); if (GetDocument().documentElement()) { + UpdateViewportSize(); NthIndexCache nth_index_cache(GetDocument()); if (NeedsStyleRecalc()) { TRACE_EVENT0("blink,blink_style", "Document::recalcStyle"); @@ -3956,4 +3961,9 @@ fill_or_clip_path_uri_value_cache_.clear(); } +void StyleEngine::UpdateViewportSize() { + viewport_size_ = + CSSToLengthConversionData::ViewportSize(GetDocument().GetLayoutView()); +} + } // namespace blink
diff --git a/third_party/blink/renderer/core/css/style_engine.h b/third_party/blink/renderer/core/css/style_engine.h index 9e146dca..4d2ac3e 100644 --- a/third_party/blink/renderer/core/css/style_engine.h +++ b/third_party/blink/renderer/core/css/style_engine.h
@@ -43,6 +43,7 @@ #include "third_party/blink/renderer/core/css/active_style_sheets.h" #include "third_party/blink/renderer/core/css/color_scheme_flags.h" #include "third_party/blink/renderer/core/css/css_global_rule_set.h" +#include "third_party/blink/renderer/core/css/css_to_length_conversion_data.h" #include "third_party/blink/renderer/core/css/invalidation/pending_invalidations.h" #include "third_party/blink/renderer/core/css/invalidation/style_invalidator.h" #include "third_party/blink/renderer/core/css/layout_tree_rebuild_root.h" @@ -52,6 +53,7 @@ #include "third_party/blink/renderer/core/css/style_invalidation_root.h" #include "third_party/blink/renderer/core/css/style_recalc_root.h" #include "third_party/blink/renderer/core/css/vision_deficiency.h" +#include "third_party/blink/renderer/core/dom/document.h" #include "third_party/blink/renderer/core/dom/element.h" #include "third_party/blink/renderer/core/layout/geometry/axis.h" #include "third_party/blink/renderer/platform/bindings/name_client.h" @@ -665,6 +667,14 @@ return active_user_style_sheets_; } + // See comment on viewport_size_. + void UpdateViewportSize(); + const CSSToLengthConversionData::ViewportSize& GetViewportSize() const { + DCHECK(viewport_size_ == CSSToLengthConversionData::ViewportSize( + GetDocument().GetLayoutView())); + return viewport_size_; + } + private: // FontSelectorClient implementation. void FontsNeedUpdate(FontSelector*, FontInvalidationReason) override; @@ -1020,6 +1030,10 @@ // for more info. HeapHashMap<AtomicString, Member<const CSSValue>> fill_or_clip_path_uri_value_cache_; + + // Cached because it can be expensive to compute anew for each element. + // You must call UpdateViewportSize() once before resolving style. + CSSToLengthConversionData::ViewportSize viewport_size_; }; void PossiblyScheduleNthPseudoInvalidations(Node& node);
diff --git a/third_party/blink/renderer/core/dom/document.cc b/third_party/blink/renderer/core/dom/document.cc index aeb1803..f49b76a0 100644 --- a/third_party/blink/renderer/core/dom/document.cc +++ b/third_party/blink/renderer/core/dom/document.cc
@@ -2700,6 +2700,7 @@ AtomicString page_name; if (const LayoutView* layout_view = GetLayoutView()) page_name = layout_view->NamedPageAtIndex(page_index); + GetStyleEngine().UpdateViewportSize(); GetStyleEngine().UpdateActiveStyle(); return GetStyleEngine().GetStyleResolver().StyleForPage(page_index, page_name);
diff --git a/third_party/blink/renderer/core/dom/element.cc b/third_party/blink/renderer/core/dom/element.cc index 6a645a4..a9152c04 100644 --- a/third_party/blink/renderer/core/dom/element.cc +++ b/third_party/blink/renderer/core/dom/element.cc
@@ -6206,6 +6206,7 @@ SelectorFilterParentScope::EnsureParentStackIsPushed(); SelectorFilter& filter = top->GetDocument().GetStyleResolver().GetSelectorFilter(); + GetDocument().GetStyleEngine().UpdateViewportSize(); // Don't call FromAncestors for elements whose parent is outside the // flat-tree, since those elements don't actually participate in style recalc. @@ -6795,6 +6796,8 @@ scoped_refptr<const ComputedStyle> Element::StyleForPseudoElement( const StyleRecalcContext& style_recalc_context, const StyleRequest& request) { + GetDocument().GetStyleEngine().UpdateViewportSize(); + const bool is_before_or_after = request.pseudo_id == kPseudoIdBefore || request.pseudo_id == kPseudoIdAfter;
diff --git a/third_party/blink/renderer/core/svg/svg_element_rare_data.cc b/third_party/blink/renderer/core/svg/svg_element_rare_data.cc index 66279b1..ca9bbbe 100644 --- a/third_party/blink/renderer/core/svg/svg_element_rare_data.cc +++ b/third_party/blink/renderer/core/svg/svg_element_rare_data.cc
@@ -46,6 +46,7 @@ // The style computed here contains no CSS Animations/Transitions or SMIL // induced rules - this is needed to compute the "base value" for the SMIL // animation sandwhich model. + element->GetDocument().GetStyleEngine().UpdateViewportSize(); override_computed_style_ = element->GetDocument().GetStyleResolver().ResolveStyle( element, style_recalc_context, style_request);
diff --git a/third_party/blink/renderer/core/svg/svg_length_context.cc b/third_party/blink/renderer/core/svg/svg_length_context.cc index 6f136d1a..44c8e56 100644 --- a/third_party/blink/renderer/core/svg/svg_length_context.cc +++ b/third_party/blink/renderer/core/svg/svg_length_context.cc
@@ -102,7 +102,8 @@ : CSSToLengthConversionData(style, &style, RootElementStyle(context), - context.GetDocument().GetLayoutView(), + CSSToLengthConversionData::ViewportSize( + context.GetDocument().GetLayoutView()), CSSToLengthConversionData::ContainerSizes( context.ParentOrShadowHostElement()), 1.0f,
diff --git a/third_party/blink/renderer/core/testing/page_test_base.cc b/third_party/blink/renderer/core/testing/page_test_base.cc index 2d901ff8..fd91619 100644 --- a/third_party/blink/renderer/core/testing/page_test_base.cc +++ b/third_party/blink/renderer/core/testing/page_test_base.cc
@@ -126,6 +126,10 @@ // Use desktop page scale limits by default. GetPage().SetDefaultPageScaleLimits(1, 4); + + // We do a lot of one-offs in unit tests, so update this so that every + // single test doesn't have to. + GetStyleEngine().UpdateViewportSize(); } void PageTestBase::SetUp(gfx::Size size) { @@ -142,6 +146,10 @@ // Use desktop page scale limits by default. GetPage().SetDefaultPageScaleLimits(1, 4); + + // We do a lot of one-offs in unit tests, so update this so that every + // single test doesn't have to. + GetStyleEngine().UpdateViewportSize(); } void PageTestBase::SetupPageWithClients( @@ -165,6 +173,10 @@ // Use desktop page scale limits by default. GetPage().SetDefaultPageScaleLimits(1, 4); + + // We do a lot of one-offs in unit tests, so update this so that every + // single test doesn't have to. + GetStyleEngine().UpdateViewportSize(); } void PageTestBase::TearDown() {
diff --git a/third_party/blink/renderer/modules/xr/xr_session.cc b/third_party/blink/renderer/modules/xr/xr_session.cc index b657789..c17a6f3 100644 --- a/third_party/blink/renderer/modules/xr/xr_session.cc +++ b/third_party/blink/renderer/modules/xr/xr_session.cc
@@ -350,11 +350,9 @@ CreateDepthManagerIfEnabled(enabled_features_, *device_config)), input_sources_(MakeGarbageCollected<XRInputSourceArray>()), client_receiver_(this, xr->GetExecutionContext()), - input_receiver_(this, xr->GetExecutionContext()), callback_collection_( MakeGarbageCollected<XRFrameRequestCallbackCollection>( xr->GetExecutionContext())), - uses_input_eventing_(device_config->uses_input_eventing), supports_viewport_scaling_(immersive() && device_config->supports_viewport_scaling), enable_anti_aliasing_(device_config->enable_anti_aliasing), @@ -467,13 +465,6 @@ return event_target_names::kXRSession; } -mojo::PendingAssociatedRemote<device::mojom::blink::XRInputSourceButtonListener> -XRSession::GetInputClickListener() { - DCHECK(!input_receiver_.is_bound()); - return input_receiver_.BindNewEndpointAndPassRemote( - xr_->GetExecutionContext()->GetTaskRunner(TaskType::kMiscPlatformAPI)); -} - void XRSession::updateRenderState(XRRenderStateInit* init, ExceptionState& exception_state) { if (ended_) { @@ -1738,11 +1729,7 @@ // after OnInputStateChangeInternal which updated input sources. UpdateWorldUnderstandingStateForFrame(timestamp, frame_data); - // If this session uses input eventing, XR select events are handled via - // OnButtonEvent, so they need to be ignored here to avoid duplicate events. - if (!uses_input_eventing_) { - ProcessInputSourceEvents(input_states); - } + ProcessInputSourceEvents(input_states); } else { UpdateWorldUnderstandingStateForFrame(timestamp, frame_data); } @@ -2067,14 +2054,6 @@ canvas_was_resized_ = true; } -void XRSession::OnButtonEvent( - device::mojom::blink::XRInputSourceStatePtr input_state) { - DCHECK(uses_input_eventing_); - auto input_states = base::make_span(&input_state, 1u); - OnInputStateChangeInternal(last_frame_id_, input_states); - ProcessInputSourceEvents(input_states); -} - void XRSession::OnInputStateChangeInternal( int16_t frame_id, base::span<const device::mojom::blink::XRInputSourceStatePtr> @@ -2413,7 +2392,6 @@ visitor->Trace(overlay_element_); visitor->Trace(dom_overlay_state_); visitor->Trace(client_receiver_); - visitor->Trace(input_receiver_); visitor->Trace(callback_collection_); visitor->Trace(create_anchor_promises_); visitor->Trace(request_hit_test_source_promises_);
diff --git a/third_party/blink/renderer/modules/xr/xr_session.h b/third_party/blink/renderer/modules/xr/xr_session.h index 19275da..066e0aa 100644 --- a/third_party/blink/renderer/modules/xr/xr_session.h +++ b/third_party/blink/renderer/modules/xr/xr_session.h
@@ -65,11 +65,9 @@ using XRSessionFeatureSet = HashSet<device::mojom::XRSessionFeature>; -class XRSession final - : public EventTargetWithInlineData, - public device::mojom::blink::XRSessionClient, - public device::mojom::blink::XRInputSourceButtonListener, - public ActiveScriptWrappable<XRSession> { +class XRSession final : public EventTargetWithInlineData, + public device::mojom::blink::XRSessionClient, + public ActiveScriptWrappable<XRSession> { DEFINE_WRAPPERTYPEINFO(); public: @@ -269,10 +267,6 @@ const absl::optional<gpu::MailboxHolder>& output_mailbox_holder, const absl::optional<gpu::MailboxHolder>& camera_image_mailbox_holder); - // XRInputSourceButtonListener - void OnButtonEvent( - device::mojom::blink::XRInputSourceStatePtr input_source) override; - const HeapVector<Member<XRViewData>>& views(); void AddTransientInputSource(XRInputSource* input_source); @@ -284,10 +278,6 @@ return stage_parameters_; } - mojo::PendingAssociatedRemote< - device::mojom::blink::XRInputSourceButtonListener> - GetInputClickListener(); - bool EmulatedPosition() const { // If we don't have display info then we should be using the identity // reference space, which by definition will be emulating the position. @@ -325,7 +315,6 @@ bool RemoveHitTestSource(XRHitTestSource* hit_test_source); bool RemoveHitTestSource(XRTransientInputHitTestSource* hit_test_source); - bool UsesInputEventing() { return uses_input_eventing_; } bool LightEstimationEnabled() { return !!world_light_probe_; } void Trace(Visitor* visitor) const override; @@ -586,9 +575,6 @@ HeapMojoReceiver<device::mojom::blink::XRSessionClient, XRSession> client_receiver_; - HeapMojoAssociatedReceiver<device::mojom::blink::XRInputSourceButtonListener, - XRSession> - input_receiver_; // Used to schedule video.rVFC callbacks for immersive sessions. Vector<ExecuteVfcCallback> vfc_execution_queue_; @@ -613,7 +599,6 @@ int output_width_ = 1; int output_height_ = 1; - bool uses_input_eventing_ = false; float recommended_framebuffer_scale_ = 1.0; // Corresponds to mojo XRSession.supportsViewportScaling
diff --git a/third_party/blink/renderer/modules/xr/xr_system.cc b/third_party/blink/renderer/modules/xr/xr_system.cc index e7a4d421..b7a90b3 100644 --- a/third_party/blink/renderer/modules/xr/xr_system.cc +++ b/third_party/blink/renderer/modules/xr/xr_system.cc
@@ -1577,12 +1577,6 @@ // element is already in fullscreen mode, and the session can proceed. session->SetDOMOverlayElement(query->DOMOverlayElement()); } - - if (query->mode() == device::mojom::blink::XRSessionMode::kImmersiveVr && - session->UsesInputEventing()) { - frameProvider()->GetImmersiveDataProvider()->SetInputSourceButtonListener( - session->GetInputClickListener()); - } } UseCounter::Count(ExecutionContext::From(query->GetScriptState()),
diff --git a/third_party/blink/tools/blinkpy/web_tests/fuzzy_diff_analyzer/analyzer.py b/third_party/blink/tools/blinkpy/web_tests/fuzzy_diff_analyzer/analyzer.py index f753cb4..ce90f8c 100644 --- a/third_party/blink/tools/blinkpy/web_tests/fuzzy_diff_analyzer/analyzer.py +++ b/third_party/blink/tools/blinkpy/web_tests/fuzzy_diff_analyzer/analyzer.py
@@ -3,7 +3,6 @@ # found in the LICENSE file. """Module for all matching analyzers.""" -import numpy as np from typing import List from blinkpy.web_tests.fuzzy_diff_analyzer import data_types as dt @@ -27,21 +26,21 @@ class FuzzyMatchingAnalyzer(ImageMatchingAnalyzer): def __init__(self, - fuzzy_match_image_num_threshold: int = 3, + fuzzy_match_image_diff_num_threshold: int = 3, fuzzy_match_distinct_diff_num_threshold: int = 3): """Class for the fuzzy matching analyzer for web tests. Args: - fuzzy_match_image_num_threshold: An int denoting the number of image - test result at least to get the suggested fuzzy match range. + fuzzy_match_image_diff_num_threshold: An int denoting the number of + image test result at least to get the suggested fuzzy match range. fuzzy_match_distinct_diff_num_threshold: An int denoting the number of different image diff result at least to calculate the suggested fuzzy match range. """ super().__init__() - assert fuzzy_match_image_num_threshold >= 0 + assert fuzzy_match_image_diff_num_threshold >= 0 assert fuzzy_match_distinct_diff_num_threshold >= 0 - self._image_num_threshold = fuzzy_match_image_num_threshold + self._image_diff_num_threshold = fuzzy_match_image_diff_num_threshold self._distinct_diff_num_threshold = fuzzy_match_distinct_diff_num_threshold def run_analyzer(self, test_results: dt.TestToTypTagsType) -> str: @@ -55,24 +54,24 @@ A string of fuzzy match range suggestion """ # Check the image num threshold - total_image_num = 0 + total_image_diff_num = 0 image_diff_counts = {} for image_diff_list in test_results.values(): - total_image_num += len(image_diff_list) + total_image_diff_num += len(image_diff_list) for image_diff in image_diff_list: key = dt.ImageDiffTagTupleType(image_diff.color_difference, image_diff.pixel_difference, "") image_diff_counts[key] = image_diff_counts.get(key, 0) + 1 - # Total image number does not reach the threshold, return no result. - if total_image_num < self._image_num_threshold: - return ('Total image number is less than %d, no result' % - self._image_num_threshold) + # Total image diff number does not meet the threshold, return no result. + if total_image_diff_num < self._image_diff_num_threshold: + return ('Total image diff number is less than %d, no result' % + self._image_diff_num_threshold) # Total distinct image diff number does not reach the threshold, return all # these image diff as suggested matching. if len(image_diff_counts) < self._distinct_diff_num_threshold: - result = 'Total image diff number is %d. ' % total_image_num + result = 'Total image diff number is %d. ' % total_image_diff_num result += 'Total distinct image diff number is less ' result += 'than %d. Suggested ' % self._distinct_diff_num_threshold result += 'make all following image diff (color_difference, ' @@ -90,7 +89,7 @@ color_diff_list += [image_diff.color_difference] * count pixel_diff_list += [image_diff.pixel_difference] * count - result = 'Total image diff number is %d. ' % total_image_num + result = 'Total image diff number is %d. ' % total_image_diff_num result += 'The list of fuzzy match range suggested for this test: ' result += '\nFor color difference:\n' result += self._calculate_data_percentile(color_diff_list) @@ -126,8 +125,8 @@ return "No data." def description(self) -> str: - des = ('Fuzzy match analyzer with image_num_threshold of %d and ' % - self._image_num_threshold) + des = ('Fuzzy match analyzer with image_diff_num_threshold of %d and ' % + self._image_diff_num_threshold) des += ('distinct_diff_num_threshold of %d' % self._distinct_diff_num_threshold) return des
diff --git a/third_party/blink/tools/blinkpy/web_tests/fuzzy_diff_analyzer/analyzer_unittest.py b/third_party/blink/tools/blinkpy/web_tests/fuzzy_diff_analyzer/analyzer_unittest.py index da8cbab..cc62370 100644 --- a/third_party/blink/tools/blinkpy/web_tests/fuzzy_diff_analyzer/analyzer_unittest.py +++ b/third_party/blink/tools/blinkpy/web_tests/fuzzy_diff_analyzer/analyzer_unittest.py
@@ -9,9 +9,9 @@ class FuzzyMatchingAnalyzerTest(unittest.TestCase): - def test_run_analyzer_in_image_num_threshold(self) -> None: + def test_run_analyzer_in_image_diff_num_threshold(self) -> None: fuzzy_match_analyzer = analyzer.FuzzyMatchingAnalyzer( - fuzzy_match_image_num_threshold=4, + fuzzy_match_image_diff_num_threshold=4, fuzzy_match_distinct_diff_num_threshold=5) test_data = \ @@ -26,12 +26,12 @@ 10, 40, 'http://ci.chromium.org/b/3333')], } actual_result = fuzzy_match_analyzer.run_analyzer(test_data) - expected_result = 'Total image number is less than 4, no result' + expected_result = 'Total image diff number is less than 4, no result' self.assertEqual(actual_result, expected_result) def test_run_analyzer_in_distinct_diff_num_threshold(self) -> None: fuzzy_match_analyzer = analyzer.FuzzyMatchingAnalyzer( - fuzzy_match_image_num_threshold=3, + fuzzy_match_image_diff_num_threshold=3, fuzzy_match_distinct_diff_num_threshold=4) test_data = \ @@ -56,7 +56,7 @@ def test_run_analyzer_in_fuzzy_match_range_in_different_platform( self) -> None: fuzzy_match_analyzer = analyzer.FuzzyMatchingAnalyzer( - fuzzy_match_image_num_threshold=3, + fuzzy_match_image_diff_num_threshold=3, fuzzy_match_distinct_diff_num_threshold=3) test_data = \ @@ -87,7 +87,7 @@ def test_run_analyzer_in_fuzzy_match_range_with_large_even_number_tests( self) -> None: fuzzy_match_analyzer = analyzer.FuzzyMatchingAnalyzer( - fuzzy_match_image_num_threshold=3, + fuzzy_match_image_diff_num_threshold=3, fuzzy_match_distinct_diff_num_threshold=3) image_diffs = [] for i in range(1, 101): @@ -109,7 +109,7 @@ def test_run_analyzer_in_fuzzy_match_range_with_large_odd_number_tests( self) -> None: fuzzy_match_analyzer = analyzer.FuzzyMatchingAnalyzer( - fuzzy_match_image_num_threshold=3, + fuzzy_match_image_diff_num_threshold=3, fuzzy_match_distinct_diff_num_threshold=3) image_diffs = [] for i in range(1, 102): @@ -132,10 +132,10 @@ # Test negative number. with self.assertRaises(AssertionError): analyzer.FuzzyMatchingAnalyzer( - fuzzy_match_image_num_threshold=-1, + fuzzy_match_image_diff_num_threshold=-1, fuzzy_match_distinct_diff_num_threshold=0) # Test negative number. with self.assertRaises(AssertionError): analyzer.FuzzyMatchingAnalyzer( - fuzzy_match_image_num_threshold=0, + fuzzy_match_image_diff_num_threshold=0, fuzzy_match_distinct_diff_num_threshold=-1)
diff --git a/third_party/blink/tools/blinkpy/web_tests/models/test_expectations.py b/third_party/blink/tools/blinkpy/web_tests/models/test_expectations.py index 1c2d76e3..04866b6 100644 --- a/third_party/blink/tools/blinkpy/web_tests/models/test_expectations.py +++ b/third_party/blink/tools/blinkpy/web_tests/models/test_expectations.py
@@ -33,6 +33,7 @@ import re from collections import defaultdict from collections import OrderedDict +from dataclasses import dataclass, field from functools import reduce from typing import ( ClassVar, @@ -40,6 +41,7 @@ Dict, FrozenSet, List, + Mapping, Optional, Set, Tuple, @@ -107,6 +109,37 @@ return 'ParseError(errors=%s)' % str(self.errors) +@dataclass +class ExpectationsChange: + lines_added: List[typ_types.Expectation] = field(default_factory=list) + lines_removed: List[typ_types.Expectation] = field(default_factory=list) + + def __add__(self, other: 'ExpectationsChange') -> 'ExpectationsChange': + lines_added = {line.to_string(): line for line in self.lines_added} + lines_removed = {line.to_string(): line for line in self.lines_removed} + self._add_delta(other.lines_added, lines_removed, lines_added) + self._add_delta(other.lines_removed, lines_added, lines_removed) + return ExpectationsChange(list(lines_added.values()), + list(lines_removed.values())) + + def _add_delta(self, lines: Collection[typ_types.Expectation], + negative: Dict[str, typ_types.Expectation], + positive: Dict[str, typ_types.Expectation]): + for line in lines: + formatted_line = line.to_string() + if formatted_line in negative: + negative.pop(formatted_line) + else: + positive[formatted_line] = line + + +def _exp_order(exp: typ_types.Expectation): + formatted_line = exp.to_string().strip() + meaningful = formatted_line and not formatted_line.startswith('#') + # Format empty lines and comments before semantically meaningful content. + return meaningful, formatted_line + + class TestExpectations: def __init__(self, port, expectations_dict=None): self._port = port @@ -215,7 +248,7 @@ for pattern_to_exps in (typ_expectations.individual_exps, typ_expectations.glob_exps): - for test in sorted(pattern_to_exps.keys()): + for test in sorted(pattern_to_exps): exps = pattern_to_exps[test] for exp in exps: lineno_to_exps[exp.lineno].append(exp) @@ -239,7 +272,7 @@ self._maybe_remove_comments_and_whitespace(lines) else: exps = lineno_to_exps[lineno] - lines.extend(sorted(exps, key=lambda exp: exp.to_string())) + lines.extend(sorted(exps, key=_exp_order)) lineno_to_exps.pop(lineno) # Handle Expectation instances with line numbers outside of the @@ -446,7 +479,7 @@ test=test, results=results).to_string() + '\n' self.merge_raw_expectations(raw_expectations) - def remove_expectations(self, path, exps): + def remove_expectations(self, path, exps) -> ExpectationsChange: """This method removes Expectation instances from an expectations file. It will delete the line in the expectations file associated with the Expectation instance. @@ -466,11 +499,12 @@ pattern_to_exps[exp.test].remove(exp) if not pattern_to_exps[exp.test]: pattern_to_exps.pop(exp.test) + return ExpectationsChange(lines_removed=exps) def add_expectations(self, path: str, exps: List[typ_types.Expectation], - lineno: int = 0): + lineno: int = 0) -> ExpectationsChange: """This method adds Expectation instances to an expectations file. It will add the new instances after the line number passed through the lineno parameter. If the lineno is set to a value outside the range of line numbers in the file @@ -507,14 +541,20 @@ typ_expectations.glob_exps = OrderedDict() for exp in glob_exps: typ_expectations.glob_exps.setdefault(exp.test, []).append(exp) + return ExpectationsChange(lines_added=exps) class SystemConfigurationEditor: ALL_SYSTEMS: ClassVar[str] = '' # Sentinel value to indicate no tag - def __init__(self, test_expectations: TestExpectations): + def __init__(self, + test_expectations: TestExpectations, + exp_path: Optional[str] = None, + macros: Optional[Mapping[str, Collection[str]]] = None): self._test_expectations = test_expectations - macros = self._test_expectations.port.configuration_specifier_macros() + macros = ( + macros + or self._test_expectations.port.configuration_specifier_macros()) self._versions_by_os = { os.lower(): frozenset(version.lower() for version in os_versions) for os, os_versions in macros.items() @@ -524,12 +564,12 @@ for os, versions in self._versions_by_os.items() for version in versions } - self._generic_exp_file_path = \ - self._test_expectations.port.path_to_generic_test_expectations_file() - fs = self._test_expectations.port.host.filesystem + port = self._test_expectations.port + self._exp_path = (exp_path + or port.path_to_generic_test_expectations_file()) self._tags_in_file = self._tags_in_expectation_file( - self._generic_exp_file_path, - fs.read_text_file(self._generic_exp_file_path)) + self._exp_path, + port.host.filesystem.read_text_file(self._exp_path)) @property def _os_specifiers(self) -> FrozenSet[str]: @@ -555,6 +595,7 @@ return self._versions_by_os.get(tag, {tag}) def _system_tag(self, tags: FrozenSet[str]) -> str: + tags = frozenset(tag.lower() for tag in tags) maybe_version = tags & self._version_specifiers maybe_os = tags & self._os_specifiers if maybe_version: @@ -589,15 +630,16 @@ return { new_tag: old_tags for new_tag, old_tags in system_specifiers.items() - if new_tag in self._tags_in_file + if new_tag in self._tags_in_file and old_tags } def update_versions(self, test_name: str, versions: Collection[str], results: Collection[ResultType], + reason: str = '', marker: Optional[str] = None, - autotriage: bool = True): + autotriage: bool = True) -> ExpectationsChange: """Update TestExpectations safely. Arguments: @@ -611,43 +653,50 @@ autotriage: Attempt to write the new expectation near an existing related line, if possible. """ - self.remove_os_versions(test_name, versions) + versions = versions or self._version_specifiers + versions = frozenset(version.lower() for version in versions) + change = self.remove_os_versions(test_name, versions) expectations = self._test_expectations.get_expectations_from_file( - self._generic_exp_file_path, test_name) - expectations = [] + self._exp_path, test_name) if autotriage: # Get expectations for this test with all specifiers matching except # for the system tag. expectations = [ exp for exp in expectations - if not (exp.tags - {self._system_tag(exp.tags)}) + if not ({tag.lower() + for tag in exp.tags} - {self._system_tag(exp.tags)}) and exp.results == results ] + else: + expectations = [] tags = sorted(self._system_tag(exp.tags) for exp in expectations) marker_line = self._find_marker(marker) for version in versions: anchor_exp = marker_line if expectations: - index = bisect.bisect(tags, version.lower()) + index = bisect.bisect(tags, version) anchor_exp = expectations[max(0, index - 1)] new_exp = typ_types.Expectation( tags={version}, results=results, is_slow_test=anchor_exp.is_slow_test, - reason=anchor_exp.reason, + reason=(reason or anchor_exp.reason), test=test_name, lineno=anchor_exp.lineno, trailing_comments=anchor_exp.trailing_comments) - self._test_expectations.add_expectations( - self._generic_exp_file_path, [new_exp], anchor_exp.lineno) + change += self._test_expectations.add_expectations( + self._exp_path, [new_exp], anchor_exp.lineno) + return change - def merge_versions(self, test_name: str): + def merge_versions(self, test_name: str) -> ExpectationsChange: """Merge test expectations for systems with the same results.""" + change = ExpectationsChange() expectations = self._test_expectations.get_expectations_from_file( - self._generic_exp_file_path, test_name) + self._exp_path, test_name) exps_by_other_tags = defaultdict(list) for exp in expectations: - other_tags = exp.tags - {self._system_tag(exp.tags)} + other_tags = frozenset(tag.lower() for tag in exp.tags) + other_tags -= {self._system_tag(exp.tags)} exps_by_other_tags[other_tags, exp.results].append(exp) exps_to_remove = [] # Try to collapse the group along the system tag dimension. @@ -667,10 +716,11 @@ new_tags.add(new_tag) old_exps = [exps_by_system_tags[tag] for tag in old_tags] new_exp = self._merge_expectations(old_exps, new_tags) - self._test_expectations.add_expectations( - self._generic_exp_file_path, [new_exp], new_exp.lineno) - self._test_expectations.remove_expectations( - self._generic_exp_file_path, exps_to_remove) + change += self._test_expectations.add_expectations( + self._exp_path, [new_exp], new_exp.lineno) + change += self._test_expectations.remove_expectations( + self._exp_path, exps_to_remove) + return change def _merge_expectations(self, exps: List[typ_types.Expectation], tags: FrozenSet[str]) -> typ_types.Expectation: @@ -696,17 +746,20 @@ def _find_marker(self, marker: Optional[str] = None) -> typ_types.Expectation: - lines = self._test_expectations.get_updated_lines( - self._generic_exp_file_path) + lines = self._test_expectations.get_updated_lines(self._exp_path) if marker: for line in lines: contents = line.to_string().lstrip() if marker in contents and contents.startswith('#'): return line + exps = [_NotExpectation(f'# {marker}', 0)] + self._test_expectations.add_expectations(self._exp_path, exps) + lines = self._test_expectations.get_updated_lines(self._exp_path) return lines[-1] - def remove_os_versions(self, test_name: str, - versions_to_remove: Collection[str]): + def remove_os_versions( + self, test_name: str, + versions_to_remove: Collection[str]) -> ExpectationsChange: """Remove system specifiers (e.g., `Mac10.10`) from expectations. This method will also split an expectation with no OS or OS version @@ -714,22 +767,23 @@ These residual expectations are written with OS-family specifiers (e.g., `Mac`) when possible. """ + change = ExpectationsChange() versions_to_remove = frozenset( specifier.lower() for specifier in versions_to_remove) if not versions_to_remove: # This will prevent making changes to test expectations which # have no OS versions to remove. - return + return change expectations = self._test_expectations.get_expectations_from_file( - self._generic_exp_file_path, test_name) - + self._exp_path, test_name) for exp in expectations: - versions = self._resolve_versions(exp.tags) + tags = frozenset(tag.lower() for tag in exp.tags) + versions = self._resolve_versions(tags) if not versions & versions_to_remove: continue versions -= versions_to_remove - other_specifiers = (exp.tags - self._os_specifiers - + other_specifiers = (tags - self._os_specifiers - self._version_specifiers) systems = self._simplify_versions(versions) tag_sets = [({system} if system != self.ALL_SYSTEMS else set()) @@ -744,10 +798,11 @@ trailing_comments=exp.trailing_comments) for tags in tag_sets ] - self._test_expectations.remove_expectations( - self._generic_exp_file_path, [exp]) - self._test_expectations.add_expectations( - self._generic_exp_file_path, residual_exps, exp.lineno) + change += self._test_expectations.remove_expectations( + self._exp_path, [exp]) + change += self._test_expectations.add_expectations( + self._exp_path, residual_exps, exp.lineno) + return change def update_expectations(self): self._test_expectations.commit_changes()
diff --git a/third_party/blink/tools/blinkpy/web_tests/models/test_expectations_unittest.py b/third_party/blink/tools/blinkpy/web_tests/models/test_expectations_unittest.py index f4ccb46e..50c6fded 100644 --- a/third_party/blink/tools/blinkpy/web_tests/models/test_expectations_unittest.py +++ b/third_party/blink/tools/blinkpy/web_tests/models/test_expectations_unittest.py
@@ -355,8 +355,10 @@ crbug.com/123 [ Mac ] failures/expected/text.html?\* [ Failure ] """) self.set_up_using_raw_expectations(raw_expectations) - self._system_config_remover.update_versions( + change = self._system_config_remover.update_versions( 'failures/expected/text.html?*', {'Mac10.11'}, {ResultType.Crash}) + self.assertEqual(len(change.lines_removed), 1) + self.assertEqual(len(change.lines_added), 3) self._system_config_remover.update_expectations() updated_exps = self._port.host.filesystem.read_text_file( self._general_exp_filename) @@ -383,9 +385,11 @@ [ Mac ] failures/expected/text.html?\* [ Failure ] """) self.set_up_using_raw_expectations(raw_expectations) - self._system_config_remover.update_versions( + change = self._system_config_remover.update_versions( 'failures/expected/image.html', {'Mac10.11'}, {ResultType.Crash}, marker='=== wpt-importer ===') + self.assertEqual(len(change.lines_removed), 0) + self.assertEqual(len(change.lines_added), 1) self._system_config_remover.update_expectations() updated_exps = self._port.host.filesystem.read_text_file( self._general_exp_filename) @@ -411,10 +415,12 @@ [ Mac Debug ] failures/expected/text.html?\* [ Failure ] """) self.set_up_using_raw_expectations(raw_expectations) - self._system_config_remover.update_versions( + change = self._system_config_remover.update_versions( 'failures/expected/text.html?*', {'Mac10.11'}, {ResultType.Failure}, - marker='does-not-exist') + marker='create-me') + self.assertEqual(len(change.lines_removed), 1) + self.assertEqual(len(change.lines_added), 3) self._system_config_remover.update_expectations() updated_exps = self._port.host.filesystem.read_text_file( self._general_exp_filename) @@ -426,6 +432,8 @@ # results: [ Failure Crash ] [ Debug Mac10.10 ] failures/expected/text.html?\* [ Failure ] [ Debug Mac10.12 ] failures/expected/text.html?\* [ Failure ] + + # create-me [ Mac10.11 ] failures/expected/text.html?\* [ Failure ] """)) @@ -438,10 +446,12 @@ """) self.set_up_using_raw_expectations(raw_expectations) - self._system_config_remover.update_versions( + change = self._system_config_remover.update_versions( 'failures/expected/text.html?*', {'Mac10.11'}, {ResultType.Failure, ResultType.Crash}, autotriage=False) + self.assertEqual(len(change.lines_removed), 1) + self.assertEqual(len(change.lines_added), 3) self._system_config_remover.update_expectations() updated_exps = self._port.host.filesystem.read_text_file( self._general_exp_filename) @@ -457,6 +467,24 @@ [ Mac10.11 ] failures/expected/text.html?\* [ Crash Failure ] """)) + def test_update_then_merge_without_net_change(self): + raw_expectations = textwrap.dedent("""\ + # tags: [ Win7 Win10 Win ] + # results: [ Failure Crash ] + crbug.com/123 [ Win ] failures/expected/text.html?\* [ Failure ] + """) + self.set_up_using_raw_expectations(raw_expectations) + change = self._system_config_remover.update_versions( + 'failures/expected/text.html?*', {'Win7'}, {ResultType.Failure}) + change += self._system_config_remover.merge_versions( + 'failures/expected/text.html?*') + self.assertEqual(len(change.lines_removed), 0) + self.assertEqual(len(change.lines_added), 0) + self._system_config_remover.update_expectations() + updated_exps = self._port.host.filesystem.read_text_file( + self._general_exp_filename) + self.assertEqual(updated_exps, raw_expectations) + def test_merge_versions_os(self): raw_expectations = textwrap.dedent("""\ # tags: [ Mac10.10 Mac10.11 Mac10.12 Mac10.13 Mac Win7 Win10 Win ] @@ -469,8 +497,10 @@ crbug.com/456 [ Mac10.13 ] failures/expected/text.html?\* [ Failure ] # comment 2 """) self.set_up_using_raw_expectations(raw_expectations) - self._system_config_remover.merge_versions( + change = self._system_config_remover.merge_versions( 'failures/expected/text.html?*') + self.assertEqual(len(change.lines_removed), 4) + self.assertEqual(len(change.lines_added), 1) self._system_config_remover.update_expectations() updated_exps = self._port.host.filesystem.read_text_file( self._general_exp_filename) @@ -496,8 +526,10 @@ crbug.com/123 [ Trusty ] failures/expected/text.html?\* [ Failure ] # comment """) self.set_up_using_raw_expectations(raw_expectations) - self._system_config_remover.merge_versions( + change = self._system_config_remover.merge_versions( 'failures/expected/text.html?*') + self.assertEqual(len(change.lines_removed), 5) + self.assertEqual(len(change.lines_added), 1) self._system_config_remover.update_expectations() updated_exps = self._port.host.filesystem.read_text_file( self._general_exp_filename) @@ -519,8 +551,10 @@ crbug.com/123 [ Debug Win10 ] failures/expected/text.html?\* [ Crash ] """) self.set_up_using_raw_expectations(raw_expectations) - self._system_config_remover.merge_versions( + change = self._system_config_remover.merge_versions( 'failures/expected/text.html?*') + self.assertEqual(len(change.lines_removed), 2) + self.assertEqual(len(change.lines_added), 1) self._system_config_remover.update_expectations() updated_exps = self._port.host.filesystem.read_text_file( self._general_exp_filename) @@ -546,8 +580,10 @@ crbug.com/123 [ Trusty ] failures/expected/text.html?\* [ Failure ] # comment """) self.set_up_using_raw_expectations(raw_expectations) - self._system_config_remover.merge_versions( + change = self._system_config_remover.merge_versions( 'failures/expected/text.html?*') + self.assertEqual(len(change.lines_removed), 4) + self.assertEqual(len(change.lines_added), 2) self._system_config_remover.update_expectations() updated_exps = self._port.host.filesystem.read_text_file( self._general_exp_filename) @@ -573,8 +609,10 @@ crbug.com/123 [ Release Win10 ] failures/expected/text.html?\* [ Failure ] """) self.set_up_using_raw_expectations(raw_expectations) - self._system_config_remover.merge_versions( + change = self._system_config_remover.merge_versions( 'failures/expected/text.html?*') + self.assertEqual(len(change.lines_removed), 0) + self.assertEqual(len(change.lines_added), 0) self._system_config_remover.update_expectations() updated_exps = self._port.host.filesystem.read_text_file( self._general_exp_filename) @@ -596,8 +634,10 @@ '# Below Expectation should be split\n' '[ Mac ] failures/expected/text.html?\* [ Failure ]\n') self.set_up_using_raw_expectations(raw_expectations) - self._system_config_remover.remove_os_versions( + change = self._system_config_remover.remove_os_versions( 'failures/expected/text.html?*', set(['Mac10.10'])) + self.assertEqual(len(change.lines_removed), 1) + self.assertEqual(len(change.lines_added), 2) self._system_config_remover.update_expectations() updated_exps = self._port.host.filesystem.read_text_file( self._general_exp_filename) @@ -616,8 +656,10 @@ '# Below Expectation should be unaffected\n' '[ Linux ] failures/expected/text.html [ Failure ]\n') self.set_up_using_raw_expectations(raw_expectations) - self._system_config_remover.remove_os_versions( + change = self._system_config_remover.remove_os_versions( 'failures/expected/text.html', set(['Mac10.10'])) + self.assertEqual(len(change.lines_removed), 0) + self.assertEqual(len(change.lines_added), 0) self._system_config_remover.update_expectations() updated_exps = self._port.host.filesystem.read_text_file( self._general_exp_filename) @@ -630,8 +672,10 @@ '# Below Expectation should be split\n' 'failures/expected/text.html [ Failure ]\n') self.set_up_using_raw_expectations(raw_expectations) - self._system_config_remover.remove_os_versions( + change = self._system_config_remover.remove_os_versions( 'failures/expected/text.html', set(['Mac10.10'])) + self.assertEqual(len(change.lines_removed), 1) + self.assertEqual(len(change.lines_added), 4) self._system_config_remover.update_expectations() updated_exps = self._port.host.filesystem.read_text_file( self._general_exp_filename) @@ -652,9 +696,11 @@ '# The expectation below and this comment block should be deleted\n' '[ Mac ] failures/expected/text.html [ Failure ]\n') self.set_up_using_raw_expectations(raw_expectations) - self._system_config_remover.remove_os_versions( + change = self._system_config_remover.remove_os_versions( 'failures/expected/text.html', {'Mac10.10', 'Mac10.11', 'Mac10.12'}) + self.assertEqual(len(change.lines_removed), 1) + self.assertEqual(len(change.lines_added), 0) self._system_config_remover.update_expectations() updated_exps = self._port.host.filesystem.read_text_file( self._general_exp_filename) @@ -669,9 +715,11 @@ '# Below Expectation should be split\n' 'failures/expected/text.html [ Failure ]\n') self.set_up_using_raw_expectations(raw_expectations) - self._system_config_remover.remove_os_versions( + change = self._system_config_remover.remove_os_versions( 'failures/expected/text.html', {'Mac10.10', 'Mac10.11', 'Mac10.12'}) + self.assertEqual(len(change.lines_removed), 1) + self.assertEqual(len(change.lines_added), 2) self._system_config_remover.update_expectations() updated_exps = self._port.host.filesystem.read_text_file( self._general_exp_filename) @@ -690,9 +738,11 @@ '# Below Expectation should be unaffected\n' '[ Linux ] failures/expected/text.html [ Failure ]\n') self.set_up_using_raw_expectations(raw_expectations) - self._system_config_remover.remove_os_versions( + change = self._system_config_remover.remove_os_versions( 'failures/expected/text.html', {'Mac10.10', 'Mac10.11', 'Mac10.12'}) + self.assertEqual(len(change.lines_removed), 0) + self.assertEqual(len(change.lines_added), 0) self._system_config_remover.update_expectations() updated_exps = self._port.host.filesystem.read_text_file( self._general_exp_filename) @@ -708,8 +758,10 @@ all_versions = reduce( lambda x, y: x + y, list(self._port.configuration_specifier_macros_dict.values())) - self._system_config_remover.remove_os_versions( + change = self._system_config_remover.remove_os_versions( 'failures/expected/text.html', all_versions) + self.assertEqual(len(change.lines_removed), 1) + self.assertEqual(len(change.lines_added), 0) self._system_config_remover.update_expectations() updated_exps = self._port.host.filesystem.read_text_file( self._general_exp_filename) @@ -728,8 +780,10 @@ all_versions = reduce( lambda x, y: x + y, list(self._port.configuration_specifier_macros_dict.values())) - self._system_config_remover.remove_os_versions( + change = self._system_config_remover.remove_os_versions( 'failures/expected/text.html', all_versions) + self.assertEqual(len(change.lines_removed), 1) + self.assertEqual(len(change.lines_added), 0) self._system_config_remover.update_expectations() updated_exps = self._port.host.filesystem.read_text_file( self._general_exp_filename) @@ -745,8 +799,10 @@ '# Below Expectation should be unaffected\n' '[ Mac10.11 ] failures/expected/text.html [ Failure ]\n') self.set_up_using_raw_expectations(raw_expectations) - self._system_config_remover.remove_os_versions( + change = self._system_config_remover.remove_os_versions( 'failures/expected/text.html', set(['Mac10.10'])) + self.assertEqual(len(change.lines_removed), 0) + self.assertEqual(len(change.lines_added), 0) self._system_config_remover.update_expectations() updated_exps = self._port.host.filesystem.read_text_file( self._general_exp_filename) @@ -759,8 +815,10 @@ '# Below Expectation as well as this comment should be deleted\n' '[ Mac10.10 ] failures/expected/text.html [ Failure ]\n') self.set_up_using_raw_expectations(raw_expectations) - self._system_config_remover.remove_os_versions( + change = self._system_config_remover.remove_os_versions( 'failures/expected/text.html', set(['Mac10.10'])) + self.assertEqual(len(change.lines_removed), 1) + self.assertEqual(len(change.lines_added), 0) self._system_config_remover.update_expectations() updated_exps = self._port.host.filesystem.read_text_file( self._general_exp_filename)
diff --git a/third_party/blink/web_tests/VirtualTestSuites b/third_party/blink/web_tests/VirtualTestSuites index 8f0c30e..d0e4f84 100644 --- a/third_party/blink/web_tests/VirtualTestSuites +++ b/third_party/blink/web_tests/VirtualTestSuites
@@ -1467,6 +1467,19 @@ "expires": "Aug 10, 2023" }, { + "prefix": "private-aggregation", + "platforms": ["Linux"], + "bases": [ + "external/wpt/private-aggregation" + ], + "exclusive_tests": [ + "external/wpt/private-aggregation" + ], + "args": [ + "--enable-features=SharedStorageAPI,FencedFrames:implementation_type/mparch,PrivacySandboxAdsAPIsOverride,FencedFramesAPIChanges,FencedFramesDefaultMode,PrivateAggregationApi"], + "expires": "Jan 1, 2024" + }, + { "prefix": "shared-storage-fenced-frame-mparch", "platforms": ["Linux", "Mac", "Win"], "bases": [
diff --git a/third_party/blink/web_tests/external/wpt/private-aggregation/private-aggregation-api-surface-failure-2.https.html b/third_party/blink/web_tests/external/wpt/private-aggregation/private-aggregation-api-surface-failure-2.https.html new file mode 100644 index 0000000..b39ecd8 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/private-aggregation/private-aggregation-api-surface-failure-2.https.html
@@ -0,0 +1,26 @@ +<!doctype html> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/common/utils.js"></script> +<script src="/shared-storage/resources/util.js"></script> +<script src="/private-aggregation/resources/util.js"></script> +<script src="/fenced-frame/resources/utils.js"></script> + +<body> +<script> +'use strict'; + +// Note: This file should contain at most 6 shared storage subtests due to the +// budget on selectURL(). + +promise_test(async () => { + const paa_data = { + enableDebugMode: true, + contributions: [{bucket: 1n, value: -2}] + }; + + await VerifyContributeToHistogram(paa_data, /*expected_error=*/true); +}, 'contributeToHistogram() with a negative value'); + +</script> +</body>
diff --git a/third_party/blink/web_tests/external/wpt/private-aggregation/private-aggregation-api-surface-failure.https.html b/third_party/blink/web_tests/external/wpt/private-aggregation/private-aggregation-api-surface-failure.https.html new file mode 100644 index 0000000..9dc62b1b --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/private-aggregation/private-aggregation-api-surface-failure.https.html
@@ -0,0 +1,74 @@ +<!doctype html> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/common/utils.js"></script> +<script src="/shared-storage/resources/util.js"></script> +<script src="/private-aggregation/resources/util.js"></script> +<script src="/fenced-frame/resources/utils.js"></script> + +<body> +<script> +'use strict'; + +// Note: This file should contain at most 6 shared storage subtests due to the +// budget on selectURL(). + +promise_test(async () => { + const paa_data = { + enableDebugMode: true, + contributions: [{bucket: 340282366920938463463374607431768211456n, value: 2}] + }; + + await VerifyContributeToHistogram(paa_data, /*expected_error=*/true); +}, 'contributeToHistogram() with a bucket too large'); + +promise_test(async () => { + const paa_data = { + enableDebugMode: true, + contributions: [{bucket: -1n, value: 2}] + }; + + await VerifyContributeToHistogram(paa_data, /*expected_error=*/true); +}, 'contributeToHistogram() with negative bucket'); + +promise_test(async () => { + const paa_data = { + enableDebugMode: true, + contributions: [{bucket: 1, value: 2}] + }; + + await VerifyContributeToHistogram(paa_data, /*expected_error=*/true); +}, 'contributeToHistogram() with non-BigInt bucket'); + +promise_test(async () => { + const paa_data = { + enableDebugMode: true, + enableDebugModeArgs: 1234n, + contributions: [{bucket: 1n, value: 2}] + }; + + await VerifyContributeToHistogram(paa_data, /*expected_error=*/true); +}, 'Invalid enableDebugMode argument'); + +promise_test(async () => { + const paa_data = { + enableDebugMode: true, + enableDebugModeArgs: {debugKey: 1234}, + contributions: [{bucket: 1n, value: 2}] + }; + + await VerifyContributeToHistogram(paa_data, /*expected_error=*/true); +}, 'contributeToHistogram() with a non-BigInt debugKey'); + +promise_test(async () => { + const paa_data = { + enableDebugMode: true, + enableDebugModeExtraTime: true, + contributions: [{bucket: 1n, value: 2}] + }; + + await VerifyContributeToHistogram(paa_data, /*expected_error=*/true); +}, 'enableDebugMode called twice'); + +</script> +</body>
diff --git a/third_party/blink/web_tests/external/wpt/private-aggregation/private-aggregation-api-surface-success-2.https.html b/third_party/blink/web_tests/external/wpt/private-aggregation/private-aggregation-api-surface-success-2.https.html new file mode 100644 index 0000000..8203fd1 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/private-aggregation/private-aggregation-api-surface-success-2.https.html
@@ -0,0 +1,27 @@ +<!doctype html> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/common/utils.js"></script> +<script src="/shared-storage/resources/util.js"></script> +<script src="/private-aggregation/resources/util.js"></script> +<script src="/fenced-frame/resources/utils.js"></script> + +<body> +<script> +'use strict'; + +// Note: This file should contain at most 6 shared storage subtests due to the +// budget on selectURL(). + +promise_test(async () => { + const paa_data = { + enableDebugMode: true, + enableDebugModeArgs: {debugKey: 1234n}, + contributions: [{bucket: 1n, value: 2}] + }; + + await VerifyContributeToHistogram(paa_data, /*expected_error=*/false); +}, 'contributeToHistogram() with a valid debugKey'); + +</script> +</body>
diff --git a/third_party/blink/web_tests/external/wpt/private-aggregation/private-aggregation-api-surface-success.https.html b/third_party/blink/web_tests/external/wpt/private-aggregation/private-aggregation-api-surface-success.https.html new file mode 100644 index 0000000..7012180 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/private-aggregation/private-aggregation-api-surface-success.https.html
@@ -0,0 +1,71 @@ +<!doctype html> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/common/utils.js"></script> +<script src="/shared-storage/resources/util.js"></script> +<script src="/private-aggregation/resources/util.js"></script> +<script src="/fenced-frame/resources/utils.js"></script> + +<body> +<script> +'use strict'; + +// Note: This file should contain at most 6 shared storage subtests due to the +// budget on selectURL(). + +promise_test(async () => { + const paa_data = { + enableDebugMode: true, + contributions: [{bucket: 1n, value: 2}] + }; + + await VerifyContributeToHistogram(paa_data, /*expected_error=*/false); +}, 'basic contributeToHistogram() test'); + +promise_test(async () => { + const paa_data = { + enableDebugMode: true, + contributions: [{bucket: 0n, value: 2}] + }; + + await VerifyContributeToHistogram(paa_data, /*expected_error=*/false); +}, 'contributeToHistogram() with a zero bucket'); + +promise_test(async () => { + const paa_data = { + enableDebugMode: true, + contributions: [{bucket: 1n, value: 0}] + }; + + await VerifyContributeToHistogram(paa_data, /*expected_error=*/false); +}, 'contributeToHistogram() with a zero value'); + +promise_test(async () => { + const paa_data = { + enableDebugMode: true, + contributions: [{bucket: 18446744073709551616n, value: 5}] + }; + + await VerifyContributeToHistogram(paa_data, /*expected_error=*/false); +}, 'contributeToHistogram() with a large bucket'); + +promise_test(async () => { + const paa_data = { + enableDebugMode: true, + contributions: [{bucket: 340282366920938463463374607431768211455n, value: 5}] + }; + + await VerifyContributeToHistogram(paa_data, /*expected_error=*/false); +}, 'contributeToHistogram() with a max bucket'); + +promise_test(async () => { + const paa_data = { + enableDebugMode: true, + contributions: [{bucket: 1n, value: 2.3}] + }; + + await VerifyContributeToHistogram(paa_data, /*expected_error=*/false); +}, 'contributeToHistogram() with a non-integer value'); + +</script> +</body>
diff --git a/third_party/blink/web_tests/external/wpt/private-aggregation/private-aggregation-permissions-policy-none.https.html b/third_party/blink/web_tests/external/wpt/private-aggregation/private-aggregation-permissions-policy-none.https.html new file mode 100644 index 0000000..3593ed7 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/private-aggregation/private-aggregation-permissions-policy-none.https.html
@@ -0,0 +1,23 @@ +<!doctype html> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/common/utils.js"></script> +<script src="/shared-storage/resources/util.js"></script> +<script src="/private-aggregation/resources/util.js"></script> +<script src="/fenced-frame/resources/utils.js"></script> + +<body> +<script> +'use strict'; + +promise_test(async () => { + const paa_data = { + enableDebugMode: true, + contributions: [{bucket: 1n, value: 2}] + }; + + await VerifyContributeToHistogram(paa_data, /*expected_error=*/true); +}, 'contributeToHistogram() with disabled "private-aggregation" permissions policy'); + +</script> +</body>
diff --git a/third_party/blink/web_tests/external/wpt/private-aggregation/private-aggregation-permissions-policy-none.https.html.headers b/third_party/blink/web_tests/external/wpt/private-aggregation/private-aggregation-permissions-policy-none.https.html.headers new file mode 100644 index 0000000..87819101 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/private-aggregation/private-aggregation-permissions-policy-none.https.html.headers
@@ -0,0 +1 @@ +Permissions-Policy: private-aggregation=()
diff --git a/third_party/blink/web_tests/external/wpt/private-aggregation/resources/private-aggregation-helper-module.js b/third_party/blink/web_tests/external/wpt/private-aggregation/resources/private-aggregation-helper-module.js new file mode 100644 index 0000000..f5a8533 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/private-aggregation/resources/private-aggregation-helper-module.js
@@ -0,0 +1,23 @@ +// Copyright 2023 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +class ContributeToHistogramOperation { + async run(urls, data) { + if (data.enableDebugMode) { + privateAggregation.enableDebugMode(data.enableDebugModeArgs); + + if (data.enableDebugModeExtraTime) { + privateAggregation.enableDebugMode(data.enableDebugModeArgs); + } + } + for (const contribution of data.contributions) { + privateAggregation.contributeToHistogram(contribution); + } + + // If an error occurs, the default URL will be picked instead. + return 1; + } +} + +register('contribute-to-histogram', ContributeToHistogramOperation);
diff --git a/third_party/blink/web_tests/external/wpt/private-aggregation/resources/util.js b/third_party/blink/web_tests/external/wpt/private-aggregation/resources/util.js new file mode 100644 index 0000000..7b3a2c5 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/private-aggregation/resources/util.js
@@ -0,0 +1,24 @@ +// Execute Private Aggregation functions in shared storage worklet given +// `paa_data`, and expect that success/failure result is `expected_error`. +async function VerifyContributeToHistogram(paa_data, expected_error) { + const ancestor_key = token(); + let url0 = generateURL("/shared-storage/resources/frame0.html", + [ancestor_key]); + let url1 = generateURL("/shared-storage/resources/frame1.html", + [ancestor_key]); + + await addModuleOnce("/private-aggregation/resources/private-aggregation-helper-module.js"); + + let select_url_result = await sharedStorage.selectURL( + "contribute-to-histogram", [{url: url0}, {url: url1}], + {data: paa_data, keepAlive: true}); + + attachFencedFrame(select_url_result, 'opaque-ads'); + const result = await nextValueFromServer(ancestor_key); + + if (expected_error) { + assert_equals(result, "frame0_loaded"); + } else { + assert_equals(result, "frame1_loaded"); + } +}
diff --git a/third_party/blink/web_tests/external/wpt/resources/chromium/webxr-test.js b/third_party/blink/web_tests/external/wpt/resources/chromium/webxr-test.js index ab2c6fa..c5eb1bd 100644 --- a/third_party/blink/web_tests/external/wpt/resources/chromium/webxr-test.js +++ b/third_party/blink/web_tests/external/wpt/resources/chromium/webxr-test.js
@@ -985,8 +985,6 @@ environmentProviderRequest.handle); } - setInputSourceButtonListener(listener) { listener.$.close(); } - // XREnvironmentIntegrationProvider implementation: subscribeToHitTest(nativeOriginInformation, entityTypes, ray) { if (!this.supportedModes_.includes(xrSessionMojom.XRSessionMode.kImmersiveAr)) { @@ -1212,7 +1210,6 @@ clientReceiver: clientReceiver, enabledFeatures: enabled_features, deviceConfig: { - usesInputEventing: false, defaultFramebufferScale: this.defaultFramebufferScale_, supportsViewportScaling: true, depthConfiguration:
diff --git a/third_party/blink/web_tests/http/tests/inspector-protocol/prerender/prerender-failure-status-update.js b/third_party/blink/web_tests/http/tests/inspector-protocol/prerender/prerender-failure-status-update.js index 208d30f..cb7c6e91 100644 --- a/third_party/blink/web_tests/http/tests/inspector-protocol/prerender/prerender-failure-status-update.js +++ b/third_party/blink/web_tests/http/tests/inspector-protocol/prerender/prerender-failure-status-update.js
@@ -1,15 +1,26 @@ - (async function(testRunner) { - const {page, session, dp} = await testRunner.startBlank( +(async function(testRunner) { + const {tabTargetSession} = await testRunner.startBlankWithTabTarget( `Test that prerender navigations receives the failure status updates`); - await dp.Preload.enable(); + + const childTargetManager = + new TestRunner.ChildTargetManager(testRunner, tabTargetSession); + await childTargetManager.startAutoAttach(); + const session1 = childTargetManager.findAttachedSessionPrimaryMainFrame(); + const dp1 = session1.protocol; + await dp1.Preload.enable(); // Navigate to speculation rules Prerender Page. - page.navigate('resources/bad-http-prerender.html'); - let statusReport = await dp.Preload.oncePrerenderStatusUpdated(); - testRunner.log(statusReport, '', ['loaderId', 'sessionId']); - statusReport = await dp.Preload.oncePrerenderStatusUpdated(); - testRunner.log(statusReport, '', ['loaderId', 'sessionId']); - statusReport = await dp.Preload.oncePrerenderStatusUpdated(); - testRunner.log(statusReport, '', ['loaderId', 'sessionId']); + session1.navigate('resources/bad-http-prerender.html'); + + testRunner.log( + await dp1.Preload.oncePrerenderStatusUpdated(), '', + ['loaderId', 'sessionId']); + testRunner.log( + await dp1.Preload.oncePrerenderStatusUpdated(), '', + ['loaderId', 'sessionId']); + testRunner.log( + await dp1.Preload.oncePrerenderStatusUpdated(), '', + ['loaderId', 'sessionId']); + testRunner.completeTest(); });
diff --git a/third_party/blink/web_tests/http/tests/inspector-protocol/prerender/prerender-status-update-expected.txt b/third_party/blink/web_tests/http/tests/inspector-protocol/prerender/prerender-status-update-expected.txt index d63ec6d..02ed7ed 100644 --- a/third_party/blink/web_tests/http/tests/inspector-protocol/prerender/prerender-status-update-expected.txt +++ b/third_party/blink/web_tests/http/tests/inspector-protocol/prerender/prerender-status-update-expected.txt
@@ -1,11 +1,5 @@ Test that prerender navigations receives the status updates { - id : <number> - result : { - } - sessionId : <string> -} -{ method : Preload.prerenderStatusUpdated params : { key : {
diff --git a/third_party/blink/web_tests/http/tests/inspector-protocol/prerender/prerender-status-update.js b/third_party/blink/web_tests/http/tests/inspector-protocol/prerender/prerender-status-update.js index 3d4f0cf..604b1bdb 100644 --- a/third_party/blink/web_tests/http/tests/inspector-protocol/prerender/prerender-status-update.js +++ b/third_party/blink/web_tests/http/tests/inspector-protocol/prerender/prerender-status-update.js
@@ -1,26 +1,41 @@ (async function(testRunner) { - const {page, session, dp} = await testRunner.startBlank( + const {tabTargetSession} = await testRunner.startBlankWithTabTarget( `Test that prerender navigations receives the status updates`); - const enableResponse = await dp.Preload.enable(); - testRunner.log(enableResponse); - // Navigate to speculation rules Prerender Page. - page.navigate('resources/simple-prerender.html'); + const childTargetManager = + new TestRunner.ChildTargetManager(testRunner, tabTargetSession); + await childTargetManager.startAutoAttach(); + const session1 = childTargetManager.findAttachedSessionPrimaryMainFrame(); + const dp1 = session1.protocol; + await dp1.Preload.enable(); - let statusReport = await dp.Preload.oncePrerenderStatusUpdated(); - testRunner.log(statusReport, '', ['loaderId', 'sessionId']); - let loaderId = statusReport.params.key.loaderId; - statusReport = await dp.Preload.oncePrerenderStatusUpdated(); - testRunner.log(statusReport, '', ['loaderId', 'sessionId']); - statusReport = await dp.Preload.oncePrerenderStatusUpdated(); - testRunner.log(statusReport, '', ['loaderId', 'sessionId']); + session1.navigate('resources/simple-prerender.html'); - session.evaluate(`document.getElementById('link').click()`); - statusReport = await dp.Preload.oncePrerenderStatusUpdated(); - testRunner.log(statusReport, '', ['loaderId', 'sessionId']); - let loaderIdActivation = statusReport.params.key.loaderId; + // Pending + const resultPending = await dp1.Preload.oncePrerenderStatusUpdated(); + testRunner.log(resultPending, '', ['loaderId', 'sessionId']); - if (loaderId !== loaderIdActivation) { + // Running + testRunner.log( + await dp1.Preload.oncePrerenderStatusUpdated(), '', + ['loaderId', 'sessionId']); + // Ready + testRunner.log( + await dp1.Preload.oncePrerenderStatusUpdated(), '', + ['loaderId', 'sessionId']); + + const session2 = childTargetManager.findAttachedSessionPrerender(); + const dp2 = session2.protocol; + await dp2.Preload.enable(); + + // Activate prerendered page. + session1.evaluate(`document.getElementById('link').click()`); + + // Success + const resultSuccess = await dp2.Preload.oncePrerenderStatusUpdated(); + testRunner.log(resultSuccess, '', ['loaderId', 'sessionId']); + + if (resultPending.params.key.loaderId !== resultSuccess.params.key.loaderId) { testRunner.log('loaderId should remain consistent.'); }
diff --git a/third_party/blink/web_tests/http/tests/inspector-protocol/prerender/report-prerender-bad-http-cancellation.js b/third_party/blink/web_tests/http/tests/inspector-protocol/prerender/report-prerender-bad-http-cancellation.js index 0eb6734c..0a30686 100644 --- a/third_party/blink/web_tests/http/tests/inspector-protocol/prerender/report-prerender-bad-http-cancellation.js +++ b/third_party/blink/web_tests/http/tests/inspector-protocol/prerender/report-prerender-bad-http-cancellation.js
@@ -1,12 +1,19 @@ (async function(testRunner) { - const {page, session, dp} = await testRunner.startBlank( + const {tabTargetSession} = await testRunner.startBlankWithTabTarget( `Test that prerender navigations reports bad http status failure on triggering`); - await dp.Preload.enable(); + + const childTargetManager = + new TestRunner.ChildTargetManager(testRunner, tabTargetSession); + await childTargetManager.startAutoAttach(); + const session1 = childTargetManager.findAttachedSessionPrimaryMainFrame(); + const dp1 = session1.protocol; + await dp1.Preload.enable(); // Navigate to speculation rules Prerender Page. - page.navigate('resources/bad-http-prerender.html'); - const statusReport = await dp.Preload.oncePrerenderAttemptCompleted(); - testRunner.log(statusReport, '', ['loaderId', 'initiatingFrameId', 'sessionId']); + session1.navigate('resources/bad-http-prerender.html'); + testRunner.log( + await dp1.Preload.oncePrerenderAttemptCompleted(), '', + ['loaderId', 'initiatingFrameId', 'sessionId']); testRunner.completeTest(); });
diff --git a/third_party/blink/web_tests/http/tests/inspector-protocol/prerender/report-prerender-cancellation-status.js b/third_party/blink/web_tests/http/tests/inspector-protocol/prerender/report-prerender-cancellation-status.js index 9e41abc..95b0bc838 100644 --- a/third_party/blink/web_tests/http/tests/inspector-protocol/prerender/report-prerender-cancellation-status.js +++ b/third_party/blink/web_tests/http/tests/inspector-protocol/prerender/report-prerender-cancellation-status.js
@@ -2,15 +2,24 @@ // prerendering is cancelled for some reasons. To emulate the cancellation, // this test navigates the prerender trigger page to an unrelated page so that // prerendering is cancelled with the `Destroyed` final status. -(async function(testRunner) { - const {page, session, dp} = await testRunner.startBlank( - `Test that prerender navigations report the final status`); - await dp.Preload.enable(); + (async function(testRunner) { + const {tabTargetSession} = await testRunner.startBlankWithTabTarget( + `Test that prerender navigations report the final status`); - // Navigate to speculation rules Prerender Page. - await page.navigate('resources/simple-prerender.html'); - page.navigate('resources/empty.html?navigateaway'); - const statusReport = await dp.Preload.oncePrerenderAttemptCompleted(); - testRunner.log(statusReport, '', ['loaderId', 'initiatingFrameId', 'sessionId']); - testRunner.completeTest(); -}); + const childTargetManager = + new TestRunner.ChildTargetManager(testRunner, tabTargetSession); + await childTargetManager.startAutoAttach(); + const session1 = childTargetManager.findAttachedSessionPrimaryMainFrame(); + const dp1 = session1.protocol; + await dp1.Preload.enable(); + + // Navigate to speculation rules Prerender Page. + await session1.navigate('resources/simple-prerender.html'); + session1.navigate('resources/empty.html?navigateaway'); + + testRunner.log( + await dp1.Preload.oncePrerenderAttemptCompleted(), '', + ['loaderId', 'initiatingFrameId', 'sessionId']); + + testRunner.completeTest(); + });
diff --git a/third_party/blink/web_tests/http/tests/inspector-protocol/prerender/report-prerender-final-status.js b/third_party/blink/web_tests/http/tests/inspector-protocol/prerender/report-prerender-final-status.js index 7bdf34e..9c54690 100644 --- a/third_party/blink/web_tests/http/tests/inspector-protocol/prerender/report-prerender-final-status.js +++ b/third_party/blink/web_tests/http/tests/inspector-protocol/prerender/report-prerender-final-status.js
@@ -1,13 +1,25 @@ (async function(testRunner) { - const {page, session, dp} = await testRunner.startBlank( + const {tabTargetSession} = await testRunner.startBlankWithTabTarget( `Test that prerender navigations report the final status`); - await dp.Preload.enable(); + + const childTargetManager = + new TestRunner.ChildTargetManager(testRunner, tabTargetSession); + await childTargetManager.startAutoAttach(); + const session1 = childTargetManager.findAttachedSessionPrimaryMainFrame(); + const dp1 = session1.protocol; + await dp1.Preload.enable(); // Navigate to speculation rules Prerender Page. - await page.navigate('resources/simple-prerender.html'); - session.evaluate(`document.getElementById('link').click()`); - const statusReport = await dp.Preload.oncePrerenderAttemptCompleted(); - testRunner.log(statusReport, '', ['loaderId', 'initiatingFrameId', 'sessionId']); + await session1.navigate('resources/simple-prerender.html'); + + const session2 = childTargetManager.findAttachedSessionPrerender(); + const dp2 = session2.protocol; + await dp2.Preload.enable(); + + session1.evaluate(`document.getElementById('link').click()`); + testRunner.log( + await dp2.Preload.oncePrerenderAttemptCompleted(), '', + ['loaderId', 'initiatingFrameId', 'sessionId']); testRunner.completeTest(); });
diff --git a/third_party/blink/web_tests/http/tests/inspector-protocol/prerender/report-prerender-maximum-exceeded.js b/third_party/blink/web_tests/http/tests/inspector-protocol/prerender/report-prerender-maximum-exceeded.js index cd0a734..2081c571 100644 --- a/third_party/blink/web_tests/http/tests/inspector-protocol/prerender/report-prerender-maximum-exceeded.js +++ b/third_party/blink/web_tests/http/tests/inspector-protocol/prerender/report-prerender-maximum-exceeded.js
@@ -1,12 +1,19 @@ (async function(testRunner) { - const {page, session, dp} = await testRunner.startBlank( + const {tabTargetSession} = await testRunner.startBlankWithTabTarget( `Test that prerender navigations reports failure on triggering`); - await dp.Preload.enable(); + + const childTargetManager = + new TestRunner.ChildTargetManager(testRunner, tabTargetSession); + await childTargetManager.startAutoAttach(); + const session1 = childTargetManager.findAttachedSessionPrimaryMainFrame(); + const dp1 = session1.protocol; + await dp1.Preload.enable(); // Navigate to speculation rules Prerender Page. - page.navigate('resources/multiple-prerender.html'); - const statusReport = await dp.Preload.oncePrerenderAttemptCompleted(); - testRunner.log(statusReport, '', ['loaderId', 'initiatingFrameId', 'sessionId']); + session1.navigate('resources/multiple-prerender.html'); + testRunner.log( + await dp1.Preload.oncePrerenderAttemptCompleted(), '', + ['loaderId', 'initiatingFrameId', 'sessionId']); testRunner.completeTest(); });
diff --git a/third_party/blink/web_tests/http/tests/inspector-protocol/resources/inspector-protocol-test.js b/third_party/blink/web_tests/http/tests/inspector-protocol/resources/inspector-protocol-test.js index 77c3410..b5e227933 100644 --- a/third_party/blink/web_tests/http/tests/inspector-protocol/resources/inspector-protocol-test.js +++ b/third_party/blink/web_tests/http/tests/inspector-protocol/resources/inspector-protocol-test.js
@@ -269,6 +269,28 @@ return this._start(description, options); } + async startBlankWithTabTarget(description) { + try { + if (!description) + throw new Error('Please provide a description for the test!'); + this.log(description); + + const bp = this.browserP(); + const params = {url: 'about:blank', forTab: true}; + const tabTargetId = + (await bp.Target.createTarget(params)).result.targetId; + const tabTargetSessionId = (await bp.Target.attachToTarget({ + targetId: tabTargetId, + flatten: true + })).result.sessionId; + const tabTargetSession = new TestRunner.Session(this, tabTargetSessionId); + + return {tabTargetSession}; + } catch (e) { + this.die('Error starting the test', e); + } + } + async logStackTrace(debuggers, stackTrace, debuggerId) { while (stackTrace) { const {description, callFrames, parent, parentId} = stackTrace; @@ -492,6 +514,54 @@ } }; +// Helper class to collect information of auto attached targets and +// create `TestRunner.Session` from them. +TestRunner.ChildTargetManager = class { + // @param {TestRunner} testRunner + // @param {Session} session + constructor(testRunner, session) { + this._testRunner = testRunner; + this._session = session; + this._attachedTargets = []; + } + + // @param {object|undefined} autoAttachParams + // @return {void} + // + // Issues `Target.setAutoAttach` and starts collecting auto attached + // `TargetInfo`. + async startAutoAttach(autoAttachParams) { + autoAttachParams = autoAttachParams || + {autoAttach: true, flatten: true, waitForDebuggerOnStart: false}; + this._session.protocol.Target.onAttachedToTarget(event => { + this._attachedTargets.push(event.params); + }); + await this._session.protocol.Target.setAutoAttach(autoAttachParams); + } + + // @param {(TargetInfo): bool} pred + // @return {TestRunner.Session|null} + findAttachedSession(pred) { + const found = + this._attachedTargets.find(({targetInfo}) => pred(targetInfo)); + return found ? this._session.createChild(found.sessionId) : null; + } + + // @return {TestRunner.Session|null} + findAttachedSessionPrimaryMainFrame() { + return this.findAttachedSession( + targetInfo => + targetInfo.type === 'page' && targetInfo.subtype === undefined); + } + + // @return {TestRunner.Session|null} + findAttachedSessionPrerender() { + return this.findAttachedSession( + targetInfo => + targetInfo.type === 'page' && targetInfo.subtype === 'prerender'); + } +}; + var DevToolsAPI = {}; DevToolsAPI._requestId = 0; DevToolsAPI._embedderMessageId = 0;
diff --git a/third_party/blink/web_tests/virtual/private-aggregation/README.md b/third_party/blink/web_tests/virtual/private-aggregation/README.md new file mode 100644 index 0000000..021f839a --- /dev/null +++ b/third_party/blink/web_tests/virtual/private-aggregation/README.md
@@ -0,0 +1,10 @@ +# Private Aggregation + +The tests are run with the flag: + +``` +--enable-features=SharedStorageAPI,FencedFrames:implementation_type/mparch,PrivacySandboxAdsAPIsOverride,FencedFramesAPIChanges,FencedFramesDefaultMode,PrivateAggregationApi +``` + +You can run these tests by targeting the following directory: +`virtual/private-aggregation/external/wpt/private-aggregation.
diff --git a/third_party/libaom/README.chromium b/third_party/libaom/README.chromium index 9e62861..9d12157 100644 --- a/third_party/libaom/README.chromium +++ b/third_party/libaom/README.chromium
@@ -2,8 +2,8 @@ Short Name: libaom URL: https://aomedia.googlesource.com/aom/ Version: 0 -Date: Friday June 02 2023 -Revision: b6ead6c2763416c98277c299cfd92befa1376fd6 +Date: Tuesday June 13 2023 +Revision: 233000f66e9ff0bb09226a2f222a029bb4c89de6 CPEPrefix: cpe:/a:aomedia:aomedia:3.6.0 License: BSD License File: source/libaom/LICENSE
diff --git a/third_party/libaom/libaom_srcs.gni b/third_party/libaom/libaom_srcs.gni index de808901..15d2858 100644 --- a/third_party/libaom/libaom_srcs.gni +++ b/third_party/libaom/libaom_srcs.gni
@@ -207,6 +207,7 @@ "//third_party/libaom/source/libaom/av1/encoder/arm/neon/av1_fwd_txfm2d_neon.c", "//third_party/libaom/source/libaom/av1/encoder/arm/neon/highbd_fwd_txfm_neon.c", "//third_party/libaom/source/libaom/av1/encoder/arm/neon/wedge_utils_neon.c", + "//third_party/libaom/source/libaom/av1/encoder/arm/neon/reconinter_enc_neon.c", "//third_party/libaom/source/libaom/av1/encoder/arm/neon/temporal_filter_neon.c", "//third_party/libaom/source/libaom/av1/encoder/arm/neon/av1_temporal_denoiser_neon.c", ] @@ -572,6 +573,7 @@ "//third_party/libaom/source/libaom/aom_dsp/arm/sadxd_neon.c", "//third_party/libaom/source/libaom/aom_dsp/arm/sad_neon.c", "//third_party/libaom/source/libaom/aom_dsp/arm/masked_sad_neon.c", + "//third_party/libaom/source/libaom/aom_dsp/arm/masked_sad4d_neon.c", "//third_party/libaom/source/libaom/aom_dsp/arm/subpel_variance_neon.c", "//third_party/libaom/source/libaom/aom_dsp/arm/variance_neon.c", "//third_party/libaom/source/libaom/aom_dsp/arm/hadamard_neon.c",
diff --git a/third_party/libaom/source/config/config/aom_version.h b/third_party/libaom/source/config/config/aom_version.h index 8bad106..70d12b8b 100644 --- a/third_party/libaom/source/config/config/aom_version.h +++ b/third_party/libaom/source/config/config/aom_version.h
@@ -12,8 +12,8 @@ #define VERSION_MAJOR 3 #define VERSION_MINOR 6 #define VERSION_PATCH 1 -#define VERSION_EXTRA "676-gb6ead6c27" +#define VERSION_EXTRA "733-g233000f66" #define VERSION_PACKED \ ((VERSION_MAJOR << 16) | (VERSION_MINOR << 8) | (VERSION_PATCH)) -#define VERSION_STRING_NOSP "3.6.1-676-gb6ead6c27" -#define VERSION_STRING " 3.6.1-676-gb6ead6c27" +#define VERSION_STRING_NOSP "3.6.1-733-g233000f66" +#define VERSION_STRING " 3.6.1-733-g233000f66"
diff --git a/third_party/libaom/source/config/ios/arm-neon/config/aom_dsp_rtcd.h b/third_party/libaom/source/config/ios/arm-neon/config/aom_dsp_rtcd.h index d268891..b9049395 100644 --- a/third_party/libaom/source/config/ios/arm-neon/config/aom_dsp_rtcd.h +++ b/third_party/libaom/source/config/ios/arm-neon/config/aom_dsp_rtcd.h
@@ -995,112 +995,256 @@ #define aom_masked_sad128x128 aom_masked_sad128x128_neon void aom_masked_sad128x128x4d_c(const uint8_t *src, int src_stride, const uint8_t *ref[4], int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask, unsigned sads[4]); -#define aom_masked_sad128x128x4d aom_masked_sad128x128x4d_c +void aom_masked_sad128x128x4d_neon(const uint8_t* src, + int src_stride, + const uint8_t* ref[4], + int ref_stride, + const uint8_t* second_pred, + const uint8_t* msk, + int msk_stride, + int invert_mask, + unsigned sads[4]); +#define aom_masked_sad128x128x4d aom_masked_sad128x128x4d_neon unsigned int aom_masked_sad128x64_c(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask); unsigned int aom_masked_sad128x64_neon(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask); #define aom_masked_sad128x64 aom_masked_sad128x64_neon void aom_masked_sad128x64x4d_c(const uint8_t *src, int src_stride, const uint8_t *ref[4], int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask, unsigned sads[4]); -#define aom_masked_sad128x64x4d aom_masked_sad128x64x4d_c +void aom_masked_sad128x64x4d_neon(const uint8_t* src, + int src_stride, + const uint8_t* ref[4], + int ref_stride, + const uint8_t* second_pred, + const uint8_t* msk, + int msk_stride, + int invert_mask, + unsigned sads[4]); +#define aom_masked_sad128x64x4d aom_masked_sad128x64x4d_neon unsigned int aom_masked_sad16x16_c(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask); unsigned int aom_masked_sad16x16_neon(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask); #define aom_masked_sad16x16 aom_masked_sad16x16_neon void aom_masked_sad16x16x4d_c(const uint8_t *src, int src_stride, const uint8_t *ref[4], int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask, unsigned sads[4]); -#define aom_masked_sad16x16x4d aom_masked_sad16x16x4d_c +void aom_masked_sad16x16x4d_neon(const uint8_t* src, + int src_stride, + const uint8_t* ref[4], + int ref_stride, + const uint8_t* second_pred, + const uint8_t* msk, + int msk_stride, + int invert_mask, + unsigned sads[4]); +#define aom_masked_sad16x16x4d aom_masked_sad16x16x4d_neon unsigned int aom_masked_sad16x32_c(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask); unsigned int aom_masked_sad16x32_neon(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask); #define aom_masked_sad16x32 aom_masked_sad16x32_neon void aom_masked_sad16x32x4d_c(const uint8_t *src, int src_stride, const uint8_t *ref[4], int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask, unsigned sads[4]); -#define aom_masked_sad16x32x4d aom_masked_sad16x32x4d_c +void aom_masked_sad16x32x4d_neon(const uint8_t* src, + int src_stride, + const uint8_t* ref[4], + int ref_stride, + const uint8_t* second_pred, + const uint8_t* msk, + int msk_stride, + int invert_mask, + unsigned sads[4]); +#define aom_masked_sad16x32x4d aom_masked_sad16x32x4d_neon unsigned int aom_masked_sad16x8_c(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask); unsigned int aom_masked_sad16x8_neon(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask); #define aom_masked_sad16x8 aom_masked_sad16x8_neon void aom_masked_sad16x8x4d_c(const uint8_t *src, int src_stride, const uint8_t *ref[4], int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask, unsigned sads[4]); -#define aom_masked_sad16x8x4d aom_masked_sad16x8x4d_c +void aom_masked_sad16x8x4d_neon(const uint8_t* src, + int src_stride, + const uint8_t* ref[4], + int ref_stride, + const uint8_t* second_pred, + const uint8_t* msk, + int msk_stride, + int invert_mask, + unsigned sads[4]); +#define aom_masked_sad16x8x4d aom_masked_sad16x8x4d_neon unsigned int aom_masked_sad32x16_c(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask); unsigned int aom_masked_sad32x16_neon(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask); #define aom_masked_sad32x16 aom_masked_sad32x16_neon void aom_masked_sad32x16x4d_c(const uint8_t *src, int src_stride, const uint8_t *ref[4], int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask, unsigned sads[4]); -#define aom_masked_sad32x16x4d aom_masked_sad32x16x4d_c +void aom_masked_sad32x16x4d_neon(const uint8_t* src, + int src_stride, + const uint8_t* ref[4], + int ref_stride, + const uint8_t* second_pred, + const uint8_t* msk, + int msk_stride, + int invert_mask, + unsigned sads[4]); +#define aom_masked_sad32x16x4d aom_masked_sad32x16x4d_neon unsigned int aom_masked_sad32x32_c(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask); unsigned int aom_masked_sad32x32_neon(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask); #define aom_masked_sad32x32 aom_masked_sad32x32_neon void aom_masked_sad32x32x4d_c(const uint8_t *src, int src_stride, const uint8_t *ref[4], int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask, unsigned sads[4]); -#define aom_masked_sad32x32x4d aom_masked_sad32x32x4d_c +void aom_masked_sad32x32x4d_neon(const uint8_t* src, + int src_stride, + const uint8_t* ref[4], + int ref_stride, + const uint8_t* second_pred, + const uint8_t* msk, + int msk_stride, + int invert_mask, + unsigned sads[4]); +#define aom_masked_sad32x32x4d aom_masked_sad32x32x4d_neon unsigned int aom_masked_sad32x64_c(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask); unsigned int aom_masked_sad32x64_neon(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask); #define aom_masked_sad32x64 aom_masked_sad32x64_neon void aom_masked_sad32x64x4d_c(const uint8_t *src, int src_stride, const uint8_t *ref[4], int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask, unsigned sads[4]); -#define aom_masked_sad32x64x4d aom_masked_sad32x64x4d_c +void aom_masked_sad32x64x4d_neon(const uint8_t* src, + int src_stride, + const uint8_t* ref[4], + int ref_stride, + const uint8_t* second_pred, + const uint8_t* msk, + int msk_stride, + int invert_mask, + unsigned sads[4]); +#define aom_masked_sad32x64x4d aom_masked_sad32x64x4d_neon unsigned int aom_masked_sad4x4_c(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask); unsigned int aom_masked_sad4x4_neon(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask); #define aom_masked_sad4x4 aom_masked_sad4x4_neon void aom_masked_sad4x4x4d_c(const uint8_t *src, int src_stride, const uint8_t *ref[4], int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask, unsigned sads[4]); -#define aom_masked_sad4x4x4d aom_masked_sad4x4x4d_c +void aom_masked_sad4x4x4d_neon(const uint8_t* src, + int src_stride, + const uint8_t* ref[4], + int ref_stride, + const uint8_t* second_pred, + const uint8_t* msk, + int msk_stride, + int invert_mask, + unsigned sads[4]); +#define aom_masked_sad4x4x4d aom_masked_sad4x4x4d_neon unsigned int aom_masked_sad4x8_c(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask); unsigned int aom_masked_sad4x8_neon(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask); #define aom_masked_sad4x8 aom_masked_sad4x8_neon void aom_masked_sad4x8x4d_c(const uint8_t *src, int src_stride, const uint8_t *ref[4], int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask, unsigned sads[4]); -#define aom_masked_sad4x8x4d aom_masked_sad4x8x4d_c +void aom_masked_sad4x8x4d_neon(const uint8_t* src, + int src_stride, + const uint8_t* ref[4], + int ref_stride, + const uint8_t* second_pred, + const uint8_t* msk, + int msk_stride, + int invert_mask, + unsigned sads[4]); +#define aom_masked_sad4x8x4d aom_masked_sad4x8x4d_neon unsigned int aom_masked_sad64x128_c(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask); unsigned int aom_masked_sad64x128_neon(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask); #define aom_masked_sad64x128 aom_masked_sad64x128_neon void aom_masked_sad64x128x4d_c(const uint8_t *src, int src_stride, const uint8_t *ref[4], int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask, unsigned sads[4]); -#define aom_masked_sad64x128x4d aom_masked_sad64x128x4d_c +void aom_masked_sad64x128x4d_neon(const uint8_t* src, + int src_stride, + const uint8_t* ref[4], + int ref_stride, + const uint8_t* second_pred, + const uint8_t* msk, + int msk_stride, + int invert_mask, + unsigned sads[4]); +#define aom_masked_sad64x128x4d aom_masked_sad64x128x4d_neon unsigned int aom_masked_sad64x32_c(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask); unsigned int aom_masked_sad64x32_neon(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask); #define aom_masked_sad64x32 aom_masked_sad64x32_neon void aom_masked_sad64x32x4d_c(const uint8_t *src, int src_stride, const uint8_t *ref[4], int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask, unsigned sads[4]); -#define aom_masked_sad64x32x4d aom_masked_sad64x32x4d_c +void aom_masked_sad64x32x4d_neon(const uint8_t* src, + int src_stride, + const uint8_t* ref[4], + int ref_stride, + const uint8_t* second_pred, + const uint8_t* msk, + int msk_stride, + int invert_mask, + unsigned sads[4]); +#define aom_masked_sad64x32x4d aom_masked_sad64x32x4d_neon unsigned int aom_masked_sad64x64_c(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask); unsigned int aom_masked_sad64x64_neon(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask); #define aom_masked_sad64x64 aom_masked_sad64x64_neon void aom_masked_sad64x64x4d_c(const uint8_t *src, int src_stride, const uint8_t *ref[4], int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask, unsigned sads[4]); -#define aom_masked_sad64x64x4d aom_masked_sad64x64x4d_c +void aom_masked_sad64x64x4d_neon(const uint8_t* src, + int src_stride, + const uint8_t* ref[4], + int ref_stride, + const uint8_t* second_pred, + const uint8_t* msk, + int msk_stride, + int invert_mask, + unsigned sads[4]); +#define aom_masked_sad64x64x4d aom_masked_sad64x64x4d_neon unsigned int aom_masked_sad8x16_c(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask); unsigned int aom_masked_sad8x16_neon(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask); #define aom_masked_sad8x16 aom_masked_sad8x16_neon void aom_masked_sad8x16x4d_c(const uint8_t *src, int src_stride, const uint8_t *ref[4], int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask, unsigned sads[4]); -#define aom_masked_sad8x16x4d aom_masked_sad8x16x4d_c +void aom_masked_sad8x16x4d_neon(const uint8_t* src, + int src_stride, + const uint8_t* ref[4], + int ref_stride, + const uint8_t* second_pred, + const uint8_t* msk, + int msk_stride, + int invert_mask, + unsigned sads[4]); +#define aom_masked_sad8x16x4d aom_masked_sad8x16x4d_neon unsigned int aom_masked_sad8x4_c(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask); unsigned int aom_masked_sad8x4_neon(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask); #define aom_masked_sad8x4 aom_masked_sad8x4_neon void aom_masked_sad8x4x4d_c(const uint8_t *src, int src_stride, const uint8_t *ref[4], int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask, unsigned sads[4]); -#define aom_masked_sad8x4x4d aom_masked_sad8x4x4d_c +void aom_masked_sad8x4x4d_neon(const uint8_t* src, + int src_stride, + const uint8_t* ref[4], + int ref_stride, + const uint8_t* second_pred, + const uint8_t* msk, + int msk_stride, + int invert_mask, + unsigned sads[4]); +#define aom_masked_sad8x4x4d aom_masked_sad8x4x4d_neon unsigned int aom_masked_sad8x8_c(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask); unsigned int aom_masked_sad8x8_neon(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask); #define aom_masked_sad8x8 aom_masked_sad8x8_neon void aom_masked_sad8x8x4d_c(const uint8_t *src, int src_stride, const uint8_t *ref[4], int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask, unsigned sads[4]); -#define aom_masked_sad8x8x4d aom_masked_sad8x8x4d_c +void aom_masked_sad8x8x4d_neon(const uint8_t* src, + int src_stride, + const uint8_t* ref[4], + int ref_stride, + const uint8_t* second_pred, + const uint8_t* msk, + int msk_stride, + int invert_mask, + unsigned sads[4]); +#define aom_masked_sad8x8x4d aom_masked_sad8x8x4d_neon unsigned int aom_masked_sub_pixel_variance128x128_c(const uint8_t *src, int src_stride, int xoffset, int yoffset, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask, unsigned int *sse); unsigned int aom_masked_sub_pixel_variance128x128_neon(
diff --git a/third_party/libaom/source/config/ios/arm-neon/config/av1_rtcd.h b/third_party/libaom/source/config/ios/arm-neon/config/av1_rtcd.h index 99a0c0a..13aceb4 100644 --- a/third_party/libaom/source/config/ios/arm-neon/config/av1_rtcd.h +++ b/third_party/libaom/source/config/ios/arm-neon/config/av1_rtcd.h
@@ -80,14 +80,21 @@ const MV *const mv, uint8_t *comp_pred, const uint8_t *pred, int width, int height, int subpel_x_q3, int subpel_y_q3, const uint8_t *ref, int ref_stride, int subpel_search); -#define aom_comp_avg_upsampled_pred aom_comp_avg_upsampled_pred_c - -void aom_comp_mask_upsampled_pred_c(MACROBLOCKD *xd, const struct AV1Common *const cm, int mi_row, int mi_col, - const MV *const mv, uint8_t *comp_pred, const uint8_t *pred, int width, - int height, int subpel_x_q3, int subpel_y_q3, const uint8_t *ref, - int ref_stride, const uint8_t *mask, int mask_stride, int invert_mask, - int subpel_search); -#define aom_comp_mask_upsampled_pred aom_comp_mask_upsampled_pred_c +void aom_comp_avg_upsampled_pred_neon(MACROBLOCKD* xd, + const struct AV1Common* const cm, + int mi_row, + int mi_col, + const MV* const mv, + uint8_t* comp_pred, + const uint8_t* pred, + int width, + int height, + int subpel_x_q3, + int subpel_y_q3, + const uint8_t* ref, + int ref_stride, + int subpel_search); +#define aom_comp_avg_upsampled_pred aom_comp_avg_upsampled_pred_neon void aom_dist_wtd_comp_avg_upsampled_pred_c(MACROBLOCKD *xd, const struct AV1Common *const cm, int mi_row, int mi_col, const MV *const mv, uint8_t *comp_pred, const uint8_t *pred, int width, @@ -102,7 +109,20 @@ void aom_upsampled_pred_c(MACROBLOCKD *xd, const struct AV1Common *const cm, int mi_row, int mi_col, const MV *const mv, uint8_t *comp_pred, int width, int height, int subpel_x_q3, int subpel_y_q3, const uint8_t *ref, int ref_stride, int subpel_search); -#define aom_upsampled_pred aom_upsampled_pred_c +void aom_upsampled_pred_neon(MACROBLOCKD* xd, + const struct AV1Common* const cm, + int mi_row, + int mi_col, + const MV* const mv, + uint8_t* comp_pred, + int width, + int height, + int subpel_x_q3, + int subpel_y_q3, + const uint8_t* ref, + int ref_stride, + int subpel_search); +#define aom_upsampled_pred aom_upsampled_pred_neon void av1_apply_selfguided_restoration_c(const uint8_t *dat, int width, int height, int stride, int eps, const int *xqd, uint8_t *dst, int dst_stride, int32_t *tmpbuf, int bit_depth, int highbd); void av1_apply_selfguided_restoration_neon(const uint8_t *dat, int width, int height, int stride, int eps, const int *xqd, uint8_t *dst, int dst_stride, int32_t *tmpbuf, int bit_depth, int highbd);
diff --git a/third_party/libaom/source/config/ios/arm64/config/aom_dsp_rtcd.h b/third_party/libaom/source/config/ios/arm64/config/aom_dsp_rtcd.h index d268891..b9049395 100644 --- a/third_party/libaom/source/config/ios/arm64/config/aom_dsp_rtcd.h +++ b/third_party/libaom/source/config/ios/arm64/config/aom_dsp_rtcd.h
@@ -995,112 +995,256 @@ #define aom_masked_sad128x128 aom_masked_sad128x128_neon void aom_masked_sad128x128x4d_c(const uint8_t *src, int src_stride, const uint8_t *ref[4], int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask, unsigned sads[4]); -#define aom_masked_sad128x128x4d aom_masked_sad128x128x4d_c +void aom_masked_sad128x128x4d_neon(const uint8_t* src, + int src_stride, + const uint8_t* ref[4], + int ref_stride, + const uint8_t* second_pred, + const uint8_t* msk, + int msk_stride, + int invert_mask, + unsigned sads[4]); +#define aom_masked_sad128x128x4d aom_masked_sad128x128x4d_neon unsigned int aom_masked_sad128x64_c(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask); unsigned int aom_masked_sad128x64_neon(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask); #define aom_masked_sad128x64 aom_masked_sad128x64_neon void aom_masked_sad128x64x4d_c(const uint8_t *src, int src_stride, const uint8_t *ref[4], int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask, unsigned sads[4]); -#define aom_masked_sad128x64x4d aom_masked_sad128x64x4d_c +void aom_masked_sad128x64x4d_neon(const uint8_t* src, + int src_stride, + const uint8_t* ref[4], + int ref_stride, + const uint8_t* second_pred, + const uint8_t* msk, + int msk_stride, + int invert_mask, + unsigned sads[4]); +#define aom_masked_sad128x64x4d aom_masked_sad128x64x4d_neon unsigned int aom_masked_sad16x16_c(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask); unsigned int aom_masked_sad16x16_neon(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask); #define aom_masked_sad16x16 aom_masked_sad16x16_neon void aom_masked_sad16x16x4d_c(const uint8_t *src, int src_stride, const uint8_t *ref[4], int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask, unsigned sads[4]); -#define aom_masked_sad16x16x4d aom_masked_sad16x16x4d_c +void aom_masked_sad16x16x4d_neon(const uint8_t* src, + int src_stride, + const uint8_t* ref[4], + int ref_stride, + const uint8_t* second_pred, + const uint8_t* msk, + int msk_stride, + int invert_mask, + unsigned sads[4]); +#define aom_masked_sad16x16x4d aom_masked_sad16x16x4d_neon unsigned int aom_masked_sad16x32_c(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask); unsigned int aom_masked_sad16x32_neon(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask); #define aom_masked_sad16x32 aom_masked_sad16x32_neon void aom_masked_sad16x32x4d_c(const uint8_t *src, int src_stride, const uint8_t *ref[4], int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask, unsigned sads[4]); -#define aom_masked_sad16x32x4d aom_masked_sad16x32x4d_c +void aom_masked_sad16x32x4d_neon(const uint8_t* src, + int src_stride, + const uint8_t* ref[4], + int ref_stride, + const uint8_t* second_pred, + const uint8_t* msk, + int msk_stride, + int invert_mask, + unsigned sads[4]); +#define aom_masked_sad16x32x4d aom_masked_sad16x32x4d_neon unsigned int aom_masked_sad16x8_c(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask); unsigned int aom_masked_sad16x8_neon(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask); #define aom_masked_sad16x8 aom_masked_sad16x8_neon void aom_masked_sad16x8x4d_c(const uint8_t *src, int src_stride, const uint8_t *ref[4], int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask, unsigned sads[4]); -#define aom_masked_sad16x8x4d aom_masked_sad16x8x4d_c +void aom_masked_sad16x8x4d_neon(const uint8_t* src, + int src_stride, + const uint8_t* ref[4], + int ref_stride, + const uint8_t* second_pred, + const uint8_t* msk, + int msk_stride, + int invert_mask, + unsigned sads[4]); +#define aom_masked_sad16x8x4d aom_masked_sad16x8x4d_neon unsigned int aom_masked_sad32x16_c(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask); unsigned int aom_masked_sad32x16_neon(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask); #define aom_masked_sad32x16 aom_masked_sad32x16_neon void aom_masked_sad32x16x4d_c(const uint8_t *src, int src_stride, const uint8_t *ref[4], int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask, unsigned sads[4]); -#define aom_masked_sad32x16x4d aom_masked_sad32x16x4d_c +void aom_masked_sad32x16x4d_neon(const uint8_t* src, + int src_stride, + const uint8_t* ref[4], + int ref_stride, + const uint8_t* second_pred, + const uint8_t* msk, + int msk_stride, + int invert_mask, + unsigned sads[4]); +#define aom_masked_sad32x16x4d aom_masked_sad32x16x4d_neon unsigned int aom_masked_sad32x32_c(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask); unsigned int aom_masked_sad32x32_neon(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask); #define aom_masked_sad32x32 aom_masked_sad32x32_neon void aom_masked_sad32x32x4d_c(const uint8_t *src, int src_stride, const uint8_t *ref[4], int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask, unsigned sads[4]); -#define aom_masked_sad32x32x4d aom_masked_sad32x32x4d_c +void aom_masked_sad32x32x4d_neon(const uint8_t* src, + int src_stride, + const uint8_t* ref[4], + int ref_stride, + const uint8_t* second_pred, + const uint8_t* msk, + int msk_stride, + int invert_mask, + unsigned sads[4]); +#define aom_masked_sad32x32x4d aom_masked_sad32x32x4d_neon unsigned int aom_masked_sad32x64_c(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask); unsigned int aom_masked_sad32x64_neon(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask); #define aom_masked_sad32x64 aom_masked_sad32x64_neon void aom_masked_sad32x64x4d_c(const uint8_t *src, int src_stride, const uint8_t *ref[4], int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask, unsigned sads[4]); -#define aom_masked_sad32x64x4d aom_masked_sad32x64x4d_c +void aom_masked_sad32x64x4d_neon(const uint8_t* src, + int src_stride, + const uint8_t* ref[4], + int ref_stride, + const uint8_t* second_pred, + const uint8_t* msk, + int msk_stride, + int invert_mask, + unsigned sads[4]); +#define aom_masked_sad32x64x4d aom_masked_sad32x64x4d_neon unsigned int aom_masked_sad4x4_c(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask); unsigned int aom_masked_sad4x4_neon(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask); #define aom_masked_sad4x4 aom_masked_sad4x4_neon void aom_masked_sad4x4x4d_c(const uint8_t *src, int src_stride, const uint8_t *ref[4], int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask, unsigned sads[4]); -#define aom_masked_sad4x4x4d aom_masked_sad4x4x4d_c +void aom_masked_sad4x4x4d_neon(const uint8_t* src, + int src_stride, + const uint8_t* ref[4], + int ref_stride, + const uint8_t* second_pred, + const uint8_t* msk, + int msk_stride, + int invert_mask, + unsigned sads[4]); +#define aom_masked_sad4x4x4d aom_masked_sad4x4x4d_neon unsigned int aom_masked_sad4x8_c(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask); unsigned int aom_masked_sad4x8_neon(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask); #define aom_masked_sad4x8 aom_masked_sad4x8_neon void aom_masked_sad4x8x4d_c(const uint8_t *src, int src_stride, const uint8_t *ref[4], int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask, unsigned sads[4]); -#define aom_masked_sad4x8x4d aom_masked_sad4x8x4d_c +void aom_masked_sad4x8x4d_neon(const uint8_t* src, + int src_stride, + const uint8_t* ref[4], + int ref_stride, + const uint8_t* second_pred, + const uint8_t* msk, + int msk_stride, + int invert_mask, + unsigned sads[4]); +#define aom_masked_sad4x8x4d aom_masked_sad4x8x4d_neon unsigned int aom_masked_sad64x128_c(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask); unsigned int aom_masked_sad64x128_neon(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask); #define aom_masked_sad64x128 aom_masked_sad64x128_neon void aom_masked_sad64x128x4d_c(const uint8_t *src, int src_stride, const uint8_t *ref[4], int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask, unsigned sads[4]); -#define aom_masked_sad64x128x4d aom_masked_sad64x128x4d_c +void aom_masked_sad64x128x4d_neon(const uint8_t* src, + int src_stride, + const uint8_t* ref[4], + int ref_stride, + const uint8_t* second_pred, + const uint8_t* msk, + int msk_stride, + int invert_mask, + unsigned sads[4]); +#define aom_masked_sad64x128x4d aom_masked_sad64x128x4d_neon unsigned int aom_masked_sad64x32_c(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask); unsigned int aom_masked_sad64x32_neon(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask); #define aom_masked_sad64x32 aom_masked_sad64x32_neon void aom_masked_sad64x32x4d_c(const uint8_t *src, int src_stride, const uint8_t *ref[4], int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask, unsigned sads[4]); -#define aom_masked_sad64x32x4d aom_masked_sad64x32x4d_c +void aom_masked_sad64x32x4d_neon(const uint8_t* src, + int src_stride, + const uint8_t* ref[4], + int ref_stride, + const uint8_t* second_pred, + const uint8_t* msk, + int msk_stride, + int invert_mask, + unsigned sads[4]); +#define aom_masked_sad64x32x4d aom_masked_sad64x32x4d_neon unsigned int aom_masked_sad64x64_c(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask); unsigned int aom_masked_sad64x64_neon(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask); #define aom_masked_sad64x64 aom_masked_sad64x64_neon void aom_masked_sad64x64x4d_c(const uint8_t *src, int src_stride, const uint8_t *ref[4], int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask, unsigned sads[4]); -#define aom_masked_sad64x64x4d aom_masked_sad64x64x4d_c +void aom_masked_sad64x64x4d_neon(const uint8_t* src, + int src_stride, + const uint8_t* ref[4], + int ref_stride, + const uint8_t* second_pred, + const uint8_t* msk, + int msk_stride, + int invert_mask, + unsigned sads[4]); +#define aom_masked_sad64x64x4d aom_masked_sad64x64x4d_neon unsigned int aom_masked_sad8x16_c(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask); unsigned int aom_masked_sad8x16_neon(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask); #define aom_masked_sad8x16 aom_masked_sad8x16_neon void aom_masked_sad8x16x4d_c(const uint8_t *src, int src_stride, const uint8_t *ref[4], int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask, unsigned sads[4]); -#define aom_masked_sad8x16x4d aom_masked_sad8x16x4d_c +void aom_masked_sad8x16x4d_neon(const uint8_t* src, + int src_stride, + const uint8_t* ref[4], + int ref_stride, + const uint8_t* second_pred, + const uint8_t* msk, + int msk_stride, + int invert_mask, + unsigned sads[4]); +#define aom_masked_sad8x16x4d aom_masked_sad8x16x4d_neon unsigned int aom_masked_sad8x4_c(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask); unsigned int aom_masked_sad8x4_neon(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask); #define aom_masked_sad8x4 aom_masked_sad8x4_neon void aom_masked_sad8x4x4d_c(const uint8_t *src, int src_stride, const uint8_t *ref[4], int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask, unsigned sads[4]); -#define aom_masked_sad8x4x4d aom_masked_sad8x4x4d_c +void aom_masked_sad8x4x4d_neon(const uint8_t* src, + int src_stride, + const uint8_t* ref[4], + int ref_stride, + const uint8_t* second_pred, + const uint8_t* msk, + int msk_stride, + int invert_mask, + unsigned sads[4]); +#define aom_masked_sad8x4x4d aom_masked_sad8x4x4d_neon unsigned int aom_masked_sad8x8_c(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask); unsigned int aom_masked_sad8x8_neon(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask); #define aom_masked_sad8x8 aom_masked_sad8x8_neon void aom_masked_sad8x8x4d_c(const uint8_t *src, int src_stride, const uint8_t *ref[4], int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask, unsigned sads[4]); -#define aom_masked_sad8x8x4d aom_masked_sad8x8x4d_c +void aom_masked_sad8x8x4d_neon(const uint8_t* src, + int src_stride, + const uint8_t* ref[4], + int ref_stride, + const uint8_t* second_pred, + const uint8_t* msk, + int msk_stride, + int invert_mask, + unsigned sads[4]); +#define aom_masked_sad8x8x4d aom_masked_sad8x8x4d_neon unsigned int aom_masked_sub_pixel_variance128x128_c(const uint8_t *src, int src_stride, int xoffset, int yoffset, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask, unsigned int *sse); unsigned int aom_masked_sub_pixel_variance128x128_neon(
diff --git a/third_party/libaom/source/config/ios/arm64/config/av1_rtcd.h b/third_party/libaom/source/config/ios/arm64/config/av1_rtcd.h index 99a0c0a..13aceb4 100644 --- a/third_party/libaom/source/config/ios/arm64/config/av1_rtcd.h +++ b/third_party/libaom/source/config/ios/arm64/config/av1_rtcd.h
@@ -80,14 +80,21 @@ const MV *const mv, uint8_t *comp_pred, const uint8_t *pred, int width, int height, int subpel_x_q3, int subpel_y_q3, const uint8_t *ref, int ref_stride, int subpel_search); -#define aom_comp_avg_upsampled_pred aom_comp_avg_upsampled_pred_c - -void aom_comp_mask_upsampled_pred_c(MACROBLOCKD *xd, const struct AV1Common *const cm, int mi_row, int mi_col, - const MV *const mv, uint8_t *comp_pred, const uint8_t *pred, int width, - int height, int subpel_x_q3, int subpel_y_q3, const uint8_t *ref, - int ref_stride, const uint8_t *mask, int mask_stride, int invert_mask, - int subpel_search); -#define aom_comp_mask_upsampled_pred aom_comp_mask_upsampled_pred_c +void aom_comp_avg_upsampled_pred_neon(MACROBLOCKD* xd, + const struct AV1Common* const cm, + int mi_row, + int mi_col, + const MV* const mv, + uint8_t* comp_pred, + const uint8_t* pred, + int width, + int height, + int subpel_x_q3, + int subpel_y_q3, + const uint8_t* ref, + int ref_stride, + int subpel_search); +#define aom_comp_avg_upsampled_pred aom_comp_avg_upsampled_pred_neon void aom_dist_wtd_comp_avg_upsampled_pred_c(MACROBLOCKD *xd, const struct AV1Common *const cm, int mi_row, int mi_col, const MV *const mv, uint8_t *comp_pred, const uint8_t *pred, int width, @@ -102,7 +109,20 @@ void aom_upsampled_pred_c(MACROBLOCKD *xd, const struct AV1Common *const cm, int mi_row, int mi_col, const MV *const mv, uint8_t *comp_pred, int width, int height, int subpel_x_q3, int subpel_y_q3, const uint8_t *ref, int ref_stride, int subpel_search); -#define aom_upsampled_pred aom_upsampled_pred_c +void aom_upsampled_pred_neon(MACROBLOCKD* xd, + const struct AV1Common* const cm, + int mi_row, + int mi_col, + const MV* const mv, + uint8_t* comp_pred, + int width, + int height, + int subpel_x_q3, + int subpel_y_q3, + const uint8_t* ref, + int ref_stride, + int subpel_search); +#define aom_upsampled_pred aom_upsampled_pred_neon void av1_apply_selfguided_restoration_c(const uint8_t *dat, int width, int height, int stride, int eps, const int *xqd, uint8_t *dst, int dst_stride, int32_t *tmpbuf, int bit_depth, int highbd); void av1_apply_selfguided_restoration_neon(const uint8_t *dat, int width, int height, int stride, int eps, const int *xqd, uint8_t *dst, int dst_stride, int32_t *tmpbuf, int bit_depth, int highbd);
diff --git a/third_party/libaom/source/config/linux/arm-neon-cpu-detect/config/aom_dsp_rtcd.h b/third_party/libaom/source/config/linux/arm-neon-cpu-detect/config/aom_dsp_rtcd.h index 6c9152db..7d353ef 100644 --- a/third_party/libaom/source/config/linux/arm-neon-cpu-detect/config/aom_dsp_rtcd.h +++ b/third_party/libaom/source/config/linux/arm-neon-cpu-detect/config/aom_dsp_rtcd.h
@@ -1251,112 +1251,384 @@ RTCD_EXTERN unsigned int (*aom_masked_sad128x128)(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask); void aom_masked_sad128x128x4d_c(const uint8_t *src, int src_stride, const uint8_t *ref[4], int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask, unsigned sads[4]); -#define aom_masked_sad128x128x4d aom_masked_sad128x128x4d_c +void aom_masked_sad128x128x4d_neon(const uint8_t* src, + int src_stride, + const uint8_t* ref[4], + int ref_stride, + const uint8_t* second_pred, + const uint8_t* msk, + int msk_stride, + int invert_mask, + unsigned sads[4]); +RTCD_EXTERN void (*aom_masked_sad128x128x4d)(const uint8_t* src, + int src_stride, + const uint8_t* ref[4], + int ref_stride, + const uint8_t* second_pred, + const uint8_t* msk, + int msk_stride, + int invert_mask, + unsigned sads[4]); unsigned int aom_masked_sad128x64_c(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask); unsigned int aom_masked_sad128x64_neon(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask); RTCD_EXTERN unsigned int (*aom_masked_sad128x64)(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask); void aom_masked_sad128x64x4d_c(const uint8_t *src, int src_stride, const uint8_t *ref[4], int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask, unsigned sads[4]); -#define aom_masked_sad128x64x4d aom_masked_sad128x64x4d_c +void aom_masked_sad128x64x4d_neon(const uint8_t* src, + int src_stride, + const uint8_t* ref[4], + int ref_stride, + const uint8_t* second_pred, + const uint8_t* msk, + int msk_stride, + int invert_mask, + unsigned sads[4]); +RTCD_EXTERN void (*aom_masked_sad128x64x4d)(const uint8_t* src, + int src_stride, + const uint8_t* ref[4], + int ref_stride, + const uint8_t* second_pred, + const uint8_t* msk, + int msk_stride, + int invert_mask, + unsigned sads[4]); unsigned int aom_masked_sad16x16_c(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask); unsigned int aom_masked_sad16x16_neon(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask); RTCD_EXTERN unsigned int (*aom_masked_sad16x16)(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask); void aom_masked_sad16x16x4d_c(const uint8_t *src, int src_stride, const uint8_t *ref[4], int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask, unsigned sads[4]); -#define aom_masked_sad16x16x4d aom_masked_sad16x16x4d_c +void aom_masked_sad16x16x4d_neon(const uint8_t* src, + int src_stride, + const uint8_t* ref[4], + int ref_stride, + const uint8_t* second_pred, + const uint8_t* msk, + int msk_stride, + int invert_mask, + unsigned sads[4]); +RTCD_EXTERN void (*aom_masked_sad16x16x4d)(const uint8_t* src, + int src_stride, + const uint8_t* ref[4], + int ref_stride, + const uint8_t* second_pred, + const uint8_t* msk, + int msk_stride, + int invert_mask, + unsigned sads[4]); unsigned int aom_masked_sad16x32_c(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask); unsigned int aom_masked_sad16x32_neon(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask); RTCD_EXTERN unsigned int (*aom_masked_sad16x32)(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask); void aom_masked_sad16x32x4d_c(const uint8_t *src, int src_stride, const uint8_t *ref[4], int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask, unsigned sads[4]); -#define aom_masked_sad16x32x4d aom_masked_sad16x32x4d_c +void aom_masked_sad16x32x4d_neon(const uint8_t* src, + int src_stride, + const uint8_t* ref[4], + int ref_stride, + const uint8_t* second_pred, + const uint8_t* msk, + int msk_stride, + int invert_mask, + unsigned sads[4]); +RTCD_EXTERN void (*aom_masked_sad16x32x4d)(const uint8_t* src, + int src_stride, + const uint8_t* ref[4], + int ref_stride, + const uint8_t* second_pred, + const uint8_t* msk, + int msk_stride, + int invert_mask, + unsigned sads[4]); unsigned int aom_masked_sad16x8_c(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask); unsigned int aom_masked_sad16x8_neon(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask); RTCD_EXTERN unsigned int (*aom_masked_sad16x8)(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask); void aom_masked_sad16x8x4d_c(const uint8_t *src, int src_stride, const uint8_t *ref[4], int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask, unsigned sads[4]); -#define aom_masked_sad16x8x4d aom_masked_sad16x8x4d_c +void aom_masked_sad16x8x4d_neon(const uint8_t* src, + int src_stride, + const uint8_t* ref[4], + int ref_stride, + const uint8_t* second_pred, + const uint8_t* msk, + int msk_stride, + int invert_mask, + unsigned sads[4]); +RTCD_EXTERN void (*aom_masked_sad16x8x4d)(const uint8_t* src, + int src_stride, + const uint8_t* ref[4], + int ref_stride, + const uint8_t* second_pred, + const uint8_t* msk, + int msk_stride, + int invert_mask, + unsigned sads[4]); unsigned int aom_masked_sad32x16_c(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask); unsigned int aom_masked_sad32x16_neon(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask); RTCD_EXTERN unsigned int (*aom_masked_sad32x16)(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask); void aom_masked_sad32x16x4d_c(const uint8_t *src, int src_stride, const uint8_t *ref[4], int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask, unsigned sads[4]); -#define aom_masked_sad32x16x4d aom_masked_sad32x16x4d_c +void aom_masked_sad32x16x4d_neon(const uint8_t* src, + int src_stride, + const uint8_t* ref[4], + int ref_stride, + const uint8_t* second_pred, + const uint8_t* msk, + int msk_stride, + int invert_mask, + unsigned sads[4]); +RTCD_EXTERN void (*aom_masked_sad32x16x4d)(const uint8_t* src, + int src_stride, + const uint8_t* ref[4], + int ref_stride, + const uint8_t* second_pred, + const uint8_t* msk, + int msk_stride, + int invert_mask, + unsigned sads[4]); unsigned int aom_masked_sad32x32_c(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask); unsigned int aom_masked_sad32x32_neon(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask); RTCD_EXTERN unsigned int (*aom_masked_sad32x32)(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask); void aom_masked_sad32x32x4d_c(const uint8_t *src, int src_stride, const uint8_t *ref[4], int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask, unsigned sads[4]); -#define aom_masked_sad32x32x4d aom_masked_sad32x32x4d_c +void aom_masked_sad32x32x4d_neon(const uint8_t* src, + int src_stride, + const uint8_t* ref[4], + int ref_stride, + const uint8_t* second_pred, + const uint8_t* msk, + int msk_stride, + int invert_mask, + unsigned sads[4]); +RTCD_EXTERN void (*aom_masked_sad32x32x4d)(const uint8_t* src, + int src_stride, + const uint8_t* ref[4], + int ref_stride, + const uint8_t* second_pred, + const uint8_t* msk, + int msk_stride, + int invert_mask, + unsigned sads[4]); unsigned int aom_masked_sad32x64_c(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask); unsigned int aom_masked_sad32x64_neon(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask); RTCD_EXTERN unsigned int (*aom_masked_sad32x64)(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask); void aom_masked_sad32x64x4d_c(const uint8_t *src, int src_stride, const uint8_t *ref[4], int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask, unsigned sads[4]); -#define aom_masked_sad32x64x4d aom_masked_sad32x64x4d_c +void aom_masked_sad32x64x4d_neon(const uint8_t* src, + int src_stride, + const uint8_t* ref[4], + int ref_stride, + const uint8_t* second_pred, + const uint8_t* msk, + int msk_stride, + int invert_mask, + unsigned sads[4]); +RTCD_EXTERN void (*aom_masked_sad32x64x4d)(const uint8_t* src, + int src_stride, + const uint8_t* ref[4], + int ref_stride, + const uint8_t* second_pred, + const uint8_t* msk, + int msk_stride, + int invert_mask, + unsigned sads[4]); unsigned int aom_masked_sad4x4_c(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask); unsigned int aom_masked_sad4x4_neon(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask); RTCD_EXTERN unsigned int (*aom_masked_sad4x4)(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask); void aom_masked_sad4x4x4d_c(const uint8_t *src, int src_stride, const uint8_t *ref[4], int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask, unsigned sads[4]); -#define aom_masked_sad4x4x4d aom_masked_sad4x4x4d_c +void aom_masked_sad4x4x4d_neon(const uint8_t* src, + int src_stride, + const uint8_t* ref[4], + int ref_stride, + const uint8_t* second_pred, + const uint8_t* msk, + int msk_stride, + int invert_mask, + unsigned sads[4]); +RTCD_EXTERN void (*aom_masked_sad4x4x4d)(const uint8_t* src, + int src_stride, + const uint8_t* ref[4], + int ref_stride, + const uint8_t* second_pred, + const uint8_t* msk, + int msk_stride, + int invert_mask, + unsigned sads[4]); unsigned int aom_masked_sad4x8_c(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask); unsigned int aom_masked_sad4x8_neon(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask); RTCD_EXTERN unsigned int (*aom_masked_sad4x8)(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask); void aom_masked_sad4x8x4d_c(const uint8_t *src, int src_stride, const uint8_t *ref[4], int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask, unsigned sads[4]); -#define aom_masked_sad4x8x4d aom_masked_sad4x8x4d_c +void aom_masked_sad4x8x4d_neon(const uint8_t* src, + int src_stride, + const uint8_t* ref[4], + int ref_stride, + const uint8_t* second_pred, + const uint8_t* msk, + int msk_stride, + int invert_mask, + unsigned sads[4]); +RTCD_EXTERN void (*aom_masked_sad4x8x4d)(const uint8_t* src, + int src_stride, + const uint8_t* ref[4], + int ref_stride, + const uint8_t* second_pred, + const uint8_t* msk, + int msk_stride, + int invert_mask, + unsigned sads[4]); unsigned int aom_masked_sad64x128_c(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask); unsigned int aom_masked_sad64x128_neon(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask); RTCD_EXTERN unsigned int (*aom_masked_sad64x128)(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask); void aom_masked_sad64x128x4d_c(const uint8_t *src, int src_stride, const uint8_t *ref[4], int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask, unsigned sads[4]); -#define aom_masked_sad64x128x4d aom_masked_sad64x128x4d_c +void aom_masked_sad64x128x4d_neon(const uint8_t* src, + int src_stride, + const uint8_t* ref[4], + int ref_stride, + const uint8_t* second_pred, + const uint8_t* msk, + int msk_stride, + int invert_mask, + unsigned sads[4]); +RTCD_EXTERN void (*aom_masked_sad64x128x4d)(const uint8_t* src, + int src_stride, + const uint8_t* ref[4], + int ref_stride, + const uint8_t* second_pred, + const uint8_t* msk, + int msk_stride, + int invert_mask, + unsigned sads[4]); unsigned int aom_masked_sad64x32_c(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask); unsigned int aom_masked_sad64x32_neon(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask); RTCD_EXTERN unsigned int (*aom_masked_sad64x32)(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask); void aom_masked_sad64x32x4d_c(const uint8_t *src, int src_stride, const uint8_t *ref[4], int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask, unsigned sads[4]); -#define aom_masked_sad64x32x4d aom_masked_sad64x32x4d_c +void aom_masked_sad64x32x4d_neon(const uint8_t* src, + int src_stride, + const uint8_t* ref[4], + int ref_stride, + const uint8_t* second_pred, + const uint8_t* msk, + int msk_stride, + int invert_mask, + unsigned sads[4]); +RTCD_EXTERN void (*aom_masked_sad64x32x4d)(const uint8_t* src, + int src_stride, + const uint8_t* ref[4], + int ref_stride, + const uint8_t* second_pred, + const uint8_t* msk, + int msk_stride, + int invert_mask, + unsigned sads[4]); unsigned int aom_masked_sad64x64_c(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask); unsigned int aom_masked_sad64x64_neon(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask); RTCD_EXTERN unsigned int (*aom_masked_sad64x64)(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask); void aom_masked_sad64x64x4d_c(const uint8_t *src, int src_stride, const uint8_t *ref[4], int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask, unsigned sads[4]); -#define aom_masked_sad64x64x4d aom_masked_sad64x64x4d_c +void aom_masked_sad64x64x4d_neon(const uint8_t* src, + int src_stride, + const uint8_t* ref[4], + int ref_stride, + const uint8_t* second_pred, + const uint8_t* msk, + int msk_stride, + int invert_mask, + unsigned sads[4]); +RTCD_EXTERN void (*aom_masked_sad64x64x4d)(const uint8_t* src, + int src_stride, + const uint8_t* ref[4], + int ref_stride, + const uint8_t* second_pred, + const uint8_t* msk, + int msk_stride, + int invert_mask, + unsigned sads[4]); unsigned int aom_masked_sad8x16_c(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask); unsigned int aom_masked_sad8x16_neon(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask); RTCD_EXTERN unsigned int (*aom_masked_sad8x16)(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask); void aom_masked_sad8x16x4d_c(const uint8_t *src, int src_stride, const uint8_t *ref[4], int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask, unsigned sads[4]); -#define aom_masked_sad8x16x4d aom_masked_sad8x16x4d_c +void aom_masked_sad8x16x4d_neon(const uint8_t* src, + int src_stride, + const uint8_t* ref[4], + int ref_stride, + const uint8_t* second_pred, + const uint8_t* msk, + int msk_stride, + int invert_mask, + unsigned sads[4]); +RTCD_EXTERN void (*aom_masked_sad8x16x4d)(const uint8_t* src, + int src_stride, + const uint8_t* ref[4], + int ref_stride, + const uint8_t* second_pred, + const uint8_t* msk, + int msk_stride, + int invert_mask, + unsigned sads[4]); unsigned int aom_masked_sad8x4_c(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask); unsigned int aom_masked_sad8x4_neon(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask); RTCD_EXTERN unsigned int (*aom_masked_sad8x4)(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask); void aom_masked_sad8x4x4d_c(const uint8_t *src, int src_stride, const uint8_t *ref[4], int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask, unsigned sads[4]); -#define aom_masked_sad8x4x4d aom_masked_sad8x4x4d_c +void aom_masked_sad8x4x4d_neon(const uint8_t* src, + int src_stride, + const uint8_t* ref[4], + int ref_stride, + const uint8_t* second_pred, + const uint8_t* msk, + int msk_stride, + int invert_mask, + unsigned sads[4]); +RTCD_EXTERN void (*aom_masked_sad8x4x4d)(const uint8_t* src, + int src_stride, + const uint8_t* ref[4], + int ref_stride, + const uint8_t* second_pred, + const uint8_t* msk, + int msk_stride, + int invert_mask, + unsigned sads[4]); unsigned int aom_masked_sad8x8_c(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask); unsigned int aom_masked_sad8x8_neon(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask); RTCD_EXTERN unsigned int (*aom_masked_sad8x8)(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask); void aom_masked_sad8x8x4d_c(const uint8_t *src, int src_stride, const uint8_t *ref[4], int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask, unsigned sads[4]); -#define aom_masked_sad8x8x4d aom_masked_sad8x8x4d_c +void aom_masked_sad8x8x4d_neon(const uint8_t* src, + int src_stride, + const uint8_t* ref[4], + int ref_stride, + const uint8_t* second_pred, + const uint8_t* msk, + int msk_stride, + int invert_mask, + unsigned sads[4]); +RTCD_EXTERN void (*aom_masked_sad8x8x4d)(const uint8_t* src, + int src_stride, + const uint8_t* ref[4], + int ref_stride, + const uint8_t* second_pred, + const uint8_t* msk, + int msk_stride, + int invert_mask, + unsigned sads[4]); unsigned int aom_masked_sub_pixel_variance128x128_c(const uint8_t *src, int src_stride, int xoffset, int yoffset, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask, unsigned int *sse); unsigned int aom_masked_sub_pixel_variance128x128_neon( @@ -3540,36 +3812,100 @@ if (flags & HAS_NEON) aom_lpf_vertical_8_quad = aom_lpf_vertical_8_quad_neon; aom_masked_sad128x128 = aom_masked_sad128x128_c; if (flags & HAS_NEON) aom_masked_sad128x128 = aom_masked_sad128x128_neon; + aom_masked_sad128x128x4d = aom_masked_sad128x128x4d_c; + if (flags & HAS_NEON) { + aom_masked_sad128x128x4d = aom_masked_sad128x128x4d_neon; + } aom_masked_sad128x64 = aom_masked_sad128x64_c; if (flags & HAS_NEON) aom_masked_sad128x64 = aom_masked_sad128x64_neon; + aom_masked_sad128x64x4d = aom_masked_sad128x64x4d_c; + if (flags & HAS_NEON) { + aom_masked_sad128x64x4d = aom_masked_sad128x64x4d_neon; + } aom_masked_sad16x16 = aom_masked_sad16x16_c; if (flags & HAS_NEON) aom_masked_sad16x16 = aom_masked_sad16x16_neon; + aom_masked_sad16x16x4d = aom_masked_sad16x16x4d_c; + if (flags & HAS_NEON) { + aom_masked_sad16x16x4d = aom_masked_sad16x16x4d_neon; + } aom_masked_sad16x32 = aom_masked_sad16x32_c; if (flags & HAS_NEON) aom_masked_sad16x32 = aom_masked_sad16x32_neon; + aom_masked_sad16x32x4d = aom_masked_sad16x32x4d_c; + if (flags & HAS_NEON) { + aom_masked_sad16x32x4d = aom_masked_sad16x32x4d_neon; + } aom_masked_sad16x8 = aom_masked_sad16x8_c; if (flags & HAS_NEON) aom_masked_sad16x8 = aom_masked_sad16x8_neon; + aom_masked_sad16x8x4d = aom_masked_sad16x8x4d_c; + if (flags & HAS_NEON) { + aom_masked_sad16x8x4d = aom_masked_sad16x8x4d_neon; + } aom_masked_sad32x16 = aom_masked_sad32x16_c; if (flags & HAS_NEON) aom_masked_sad32x16 = aom_masked_sad32x16_neon; + aom_masked_sad32x16x4d = aom_masked_sad32x16x4d_c; + if (flags & HAS_NEON) { + aom_masked_sad32x16x4d = aom_masked_sad32x16x4d_neon; + } aom_masked_sad32x32 = aom_masked_sad32x32_c; if (flags & HAS_NEON) aom_masked_sad32x32 = aom_masked_sad32x32_neon; + aom_masked_sad32x32x4d = aom_masked_sad32x32x4d_c; + if (flags & HAS_NEON) { + aom_masked_sad32x32x4d = aom_masked_sad32x32x4d_neon; + } aom_masked_sad32x64 = aom_masked_sad32x64_c; if (flags & HAS_NEON) aom_masked_sad32x64 = aom_masked_sad32x64_neon; + aom_masked_sad32x64x4d = aom_masked_sad32x64x4d_c; + if (flags & HAS_NEON) { + aom_masked_sad32x64x4d = aom_masked_sad32x64x4d_neon; + } aom_masked_sad4x4 = aom_masked_sad4x4_c; if (flags & HAS_NEON) aom_masked_sad4x4 = aom_masked_sad4x4_neon; + aom_masked_sad4x4x4d = aom_masked_sad4x4x4d_c; + if (flags & HAS_NEON) { + aom_masked_sad4x4x4d = aom_masked_sad4x4x4d_neon; + } aom_masked_sad4x8 = aom_masked_sad4x8_c; if (flags & HAS_NEON) aom_masked_sad4x8 = aom_masked_sad4x8_neon; + aom_masked_sad4x8x4d = aom_masked_sad4x8x4d_c; + if (flags & HAS_NEON) { + aom_masked_sad4x8x4d = aom_masked_sad4x8x4d_neon; + } aom_masked_sad64x128 = aom_masked_sad64x128_c; if (flags & HAS_NEON) aom_masked_sad64x128 = aom_masked_sad64x128_neon; + aom_masked_sad64x128x4d = aom_masked_sad64x128x4d_c; + if (flags & HAS_NEON) { + aom_masked_sad64x128x4d = aom_masked_sad64x128x4d_neon; + } aom_masked_sad64x32 = aom_masked_sad64x32_c; if (flags & HAS_NEON) aom_masked_sad64x32 = aom_masked_sad64x32_neon; + aom_masked_sad64x32x4d = aom_masked_sad64x32x4d_c; + if (flags & HAS_NEON) { + aom_masked_sad64x32x4d = aom_masked_sad64x32x4d_neon; + } aom_masked_sad64x64 = aom_masked_sad64x64_c; if (flags & HAS_NEON) aom_masked_sad64x64 = aom_masked_sad64x64_neon; + aom_masked_sad64x64x4d = aom_masked_sad64x64x4d_c; + if (flags & HAS_NEON) { + aom_masked_sad64x64x4d = aom_masked_sad64x64x4d_neon; + } aom_masked_sad8x16 = aom_masked_sad8x16_c; if (flags & HAS_NEON) aom_masked_sad8x16 = aom_masked_sad8x16_neon; + aom_masked_sad8x16x4d = aom_masked_sad8x16x4d_c; + if (flags & HAS_NEON) { + aom_masked_sad8x16x4d = aom_masked_sad8x16x4d_neon; + } aom_masked_sad8x4 = aom_masked_sad8x4_c; if (flags & HAS_NEON) aom_masked_sad8x4 = aom_masked_sad8x4_neon; + aom_masked_sad8x4x4d = aom_masked_sad8x4x4d_c; + if (flags & HAS_NEON) { + aom_masked_sad8x4x4d = aom_masked_sad8x4x4d_neon; + } aom_masked_sad8x8 = aom_masked_sad8x8_c; if (flags & HAS_NEON) aom_masked_sad8x8 = aom_masked_sad8x8_neon; + aom_masked_sad8x8x4d = aom_masked_sad8x8x4d_c; + if (flags & HAS_NEON) { + aom_masked_sad8x8x4d = aom_masked_sad8x8x4d_neon; + } aom_masked_sub_pixel_variance128x128 = aom_masked_sub_pixel_variance128x128_c; if (flags & HAS_NEON) {
diff --git a/third_party/libaom/source/config/linux/arm-neon-cpu-detect/config/av1_rtcd.h b/third_party/libaom/source/config/linux/arm-neon-cpu-detect/config/av1_rtcd.h index 8807417b..aafa4e9 100644 --- a/third_party/libaom/source/config/linux/arm-neon-cpu-detect/config/av1_rtcd.h +++ b/third_party/libaom/source/config/linux/arm-neon-cpu-detect/config/av1_rtcd.h
@@ -80,14 +80,35 @@ const MV *const mv, uint8_t *comp_pred, const uint8_t *pred, int width, int height, int subpel_x_q3, int subpel_y_q3, const uint8_t *ref, int ref_stride, int subpel_search); -#define aom_comp_avg_upsampled_pred aom_comp_avg_upsampled_pred_c - -void aom_comp_mask_upsampled_pred_c(MACROBLOCKD *xd, const struct AV1Common *const cm, int mi_row, int mi_col, - const MV *const mv, uint8_t *comp_pred, const uint8_t *pred, int width, - int height, int subpel_x_q3, int subpel_y_q3, const uint8_t *ref, - int ref_stride, const uint8_t *mask, int mask_stride, int invert_mask, - int subpel_search); -#define aom_comp_mask_upsampled_pred aom_comp_mask_upsampled_pred_c +void aom_comp_avg_upsampled_pred_neon(MACROBLOCKD* xd, + const struct AV1Common* const cm, + int mi_row, + int mi_col, + const MV* const mv, + uint8_t* comp_pred, + const uint8_t* pred, + int width, + int height, + int subpel_x_q3, + int subpel_y_q3, + const uint8_t* ref, + int ref_stride, + int subpel_search); +RTCD_EXTERN void (*aom_comp_avg_upsampled_pred)( + MACROBLOCKD* xd, + const struct AV1Common* const cm, + int mi_row, + int mi_col, + const MV* const mv, + uint8_t* comp_pred, + const uint8_t* pred, + int width, + int height, + int subpel_x_q3, + int subpel_y_q3, + const uint8_t* ref, + int ref_stride, + int subpel_search); void aom_dist_wtd_comp_avg_upsampled_pred_c(MACROBLOCKD *xd, const struct AV1Common *const cm, int mi_row, int mi_col, const MV *const mv, uint8_t *comp_pred, const uint8_t *pred, int width, @@ -102,7 +123,32 @@ void aom_upsampled_pred_c(MACROBLOCKD *xd, const struct AV1Common *const cm, int mi_row, int mi_col, const MV *const mv, uint8_t *comp_pred, int width, int height, int subpel_x_q3, int subpel_y_q3, const uint8_t *ref, int ref_stride, int subpel_search); -#define aom_upsampled_pred aom_upsampled_pred_c +void aom_upsampled_pred_neon(MACROBLOCKD* xd, + const struct AV1Common* const cm, + int mi_row, + int mi_col, + const MV* const mv, + uint8_t* comp_pred, + int width, + int height, + int subpel_x_q3, + int subpel_y_q3, + const uint8_t* ref, + int ref_stride, + int subpel_search); +RTCD_EXTERN void (*aom_upsampled_pred)(MACROBLOCKD* xd, + const struct AV1Common* const cm, + int mi_row, + int mi_col, + const MV* const mv, + uint8_t* comp_pred, + int width, + int height, + int subpel_x_q3, + int subpel_y_q3, + const uint8_t* ref, + int ref_stride, + int subpel_search); void av1_apply_selfguided_restoration_c(const uint8_t *dat, int width, int height, int stride, int eps, const int *xqd, uint8_t *dst, int dst_stride, int32_t *tmpbuf, int bit_depth, int highbd); void av1_apply_selfguided_restoration_neon(const uint8_t *dat, int width, int height, int stride, int eps, const int *xqd, uint8_t *dst, int dst_stride, int32_t *tmpbuf, int bit_depth, int highbd); @@ -598,8 +644,16 @@ (void)flags; + aom_comp_avg_upsampled_pred = aom_comp_avg_upsampled_pred_c; + if (flags & HAS_NEON) { + aom_comp_avg_upsampled_pred = aom_comp_avg_upsampled_pred_neon; + } aom_quantize_b_helper = aom_quantize_b_helper_c; if (flags & HAS_NEON) aom_quantize_b_helper = aom_quantize_b_helper_neon; + aom_upsampled_pred = aom_upsampled_pred_c; + if (flags & HAS_NEON) { + aom_upsampled_pred = aom_upsampled_pred_neon; + } av1_apply_selfguided_restoration = av1_apply_selfguided_restoration_c; if (flags & HAS_NEON) av1_apply_selfguided_restoration = av1_apply_selfguided_restoration_neon; av1_block_error = av1_block_error_c;
diff --git a/third_party/libaom/source/config/linux/arm-neon/config/aom_dsp_rtcd.h b/third_party/libaom/source/config/linux/arm-neon/config/aom_dsp_rtcd.h index d268891..b9049395 100644 --- a/third_party/libaom/source/config/linux/arm-neon/config/aom_dsp_rtcd.h +++ b/third_party/libaom/source/config/linux/arm-neon/config/aom_dsp_rtcd.h
@@ -995,112 +995,256 @@ #define aom_masked_sad128x128 aom_masked_sad128x128_neon void aom_masked_sad128x128x4d_c(const uint8_t *src, int src_stride, const uint8_t *ref[4], int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask, unsigned sads[4]); -#define aom_masked_sad128x128x4d aom_masked_sad128x128x4d_c +void aom_masked_sad128x128x4d_neon(const uint8_t* src, + int src_stride, + const uint8_t* ref[4], + int ref_stride, + const uint8_t* second_pred, + const uint8_t* msk, + int msk_stride, + int invert_mask, + unsigned sads[4]); +#define aom_masked_sad128x128x4d aom_masked_sad128x128x4d_neon unsigned int aom_masked_sad128x64_c(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask); unsigned int aom_masked_sad128x64_neon(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask); #define aom_masked_sad128x64 aom_masked_sad128x64_neon void aom_masked_sad128x64x4d_c(const uint8_t *src, int src_stride, const uint8_t *ref[4], int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask, unsigned sads[4]); -#define aom_masked_sad128x64x4d aom_masked_sad128x64x4d_c +void aom_masked_sad128x64x4d_neon(const uint8_t* src, + int src_stride, + const uint8_t* ref[4], + int ref_stride, + const uint8_t* second_pred, + const uint8_t* msk, + int msk_stride, + int invert_mask, + unsigned sads[4]); +#define aom_masked_sad128x64x4d aom_masked_sad128x64x4d_neon unsigned int aom_masked_sad16x16_c(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask); unsigned int aom_masked_sad16x16_neon(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask); #define aom_masked_sad16x16 aom_masked_sad16x16_neon void aom_masked_sad16x16x4d_c(const uint8_t *src, int src_stride, const uint8_t *ref[4], int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask, unsigned sads[4]); -#define aom_masked_sad16x16x4d aom_masked_sad16x16x4d_c +void aom_masked_sad16x16x4d_neon(const uint8_t* src, + int src_stride, + const uint8_t* ref[4], + int ref_stride, + const uint8_t* second_pred, + const uint8_t* msk, + int msk_stride, + int invert_mask, + unsigned sads[4]); +#define aom_masked_sad16x16x4d aom_masked_sad16x16x4d_neon unsigned int aom_masked_sad16x32_c(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask); unsigned int aom_masked_sad16x32_neon(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask); #define aom_masked_sad16x32 aom_masked_sad16x32_neon void aom_masked_sad16x32x4d_c(const uint8_t *src, int src_stride, const uint8_t *ref[4], int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask, unsigned sads[4]); -#define aom_masked_sad16x32x4d aom_masked_sad16x32x4d_c +void aom_masked_sad16x32x4d_neon(const uint8_t* src, + int src_stride, + const uint8_t* ref[4], + int ref_stride, + const uint8_t* second_pred, + const uint8_t* msk, + int msk_stride, + int invert_mask, + unsigned sads[4]); +#define aom_masked_sad16x32x4d aom_masked_sad16x32x4d_neon unsigned int aom_masked_sad16x8_c(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask); unsigned int aom_masked_sad16x8_neon(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask); #define aom_masked_sad16x8 aom_masked_sad16x8_neon void aom_masked_sad16x8x4d_c(const uint8_t *src, int src_stride, const uint8_t *ref[4], int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask, unsigned sads[4]); -#define aom_masked_sad16x8x4d aom_masked_sad16x8x4d_c +void aom_masked_sad16x8x4d_neon(const uint8_t* src, + int src_stride, + const uint8_t* ref[4], + int ref_stride, + const uint8_t* second_pred, + const uint8_t* msk, + int msk_stride, + int invert_mask, + unsigned sads[4]); +#define aom_masked_sad16x8x4d aom_masked_sad16x8x4d_neon unsigned int aom_masked_sad32x16_c(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask); unsigned int aom_masked_sad32x16_neon(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask); #define aom_masked_sad32x16 aom_masked_sad32x16_neon void aom_masked_sad32x16x4d_c(const uint8_t *src, int src_stride, const uint8_t *ref[4], int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask, unsigned sads[4]); -#define aom_masked_sad32x16x4d aom_masked_sad32x16x4d_c +void aom_masked_sad32x16x4d_neon(const uint8_t* src, + int src_stride, + const uint8_t* ref[4], + int ref_stride, + const uint8_t* second_pred, + const uint8_t* msk, + int msk_stride, + int invert_mask, + unsigned sads[4]); +#define aom_masked_sad32x16x4d aom_masked_sad32x16x4d_neon unsigned int aom_masked_sad32x32_c(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask); unsigned int aom_masked_sad32x32_neon(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask); #define aom_masked_sad32x32 aom_masked_sad32x32_neon void aom_masked_sad32x32x4d_c(const uint8_t *src, int src_stride, const uint8_t *ref[4], int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask, unsigned sads[4]); -#define aom_masked_sad32x32x4d aom_masked_sad32x32x4d_c +void aom_masked_sad32x32x4d_neon(const uint8_t* src, + int src_stride, + const uint8_t* ref[4], + int ref_stride, + const uint8_t* second_pred, + const uint8_t* msk, + int msk_stride, + int invert_mask, + unsigned sads[4]); +#define aom_masked_sad32x32x4d aom_masked_sad32x32x4d_neon unsigned int aom_masked_sad32x64_c(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask); unsigned int aom_masked_sad32x64_neon(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask); #define aom_masked_sad32x64 aom_masked_sad32x64_neon void aom_masked_sad32x64x4d_c(const uint8_t *src, int src_stride, const uint8_t *ref[4], int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask, unsigned sads[4]); -#define aom_masked_sad32x64x4d aom_masked_sad32x64x4d_c +void aom_masked_sad32x64x4d_neon(const uint8_t* src, + int src_stride, + const uint8_t* ref[4], + int ref_stride, + const uint8_t* second_pred, + const uint8_t* msk, + int msk_stride, + int invert_mask, + unsigned sads[4]); +#define aom_masked_sad32x64x4d aom_masked_sad32x64x4d_neon unsigned int aom_masked_sad4x4_c(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask); unsigned int aom_masked_sad4x4_neon(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask); #define aom_masked_sad4x4 aom_masked_sad4x4_neon void aom_masked_sad4x4x4d_c(const uint8_t *src, int src_stride, const uint8_t *ref[4], int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask, unsigned sads[4]); -#define aom_masked_sad4x4x4d aom_masked_sad4x4x4d_c +void aom_masked_sad4x4x4d_neon(const uint8_t* src, + int src_stride, + const uint8_t* ref[4], + int ref_stride, + const uint8_t* second_pred, + const uint8_t* msk, + int msk_stride, + int invert_mask, + unsigned sads[4]); +#define aom_masked_sad4x4x4d aom_masked_sad4x4x4d_neon unsigned int aom_masked_sad4x8_c(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask); unsigned int aom_masked_sad4x8_neon(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask); #define aom_masked_sad4x8 aom_masked_sad4x8_neon void aom_masked_sad4x8x4d_c(const uint8_t *src, int src_stride, const uint8_t *ref[4], int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask, unsigned sads[4]); -#define aom_masked_sad4x8x4d aom_masked_sad4x8x4d_c +void aom_masked_sad4x8x4d_neon(const uint8_t* src, + int src_stride, + const uint8_t* ref[4], + int ref_stride, + const uint8_t* second_pred, + const uint8_t* msk, + int msk_stride, + int invert_mask, + unsigned sads[4]); +#define aom_masked_sad4x8x4d aom_masked_sad4x8x4d_neon unsigned int aom_masked_sad64x128_c(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask); unsigned int aom_masked_sad64x128_neon(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask); #define aom_masked_sad64x128 aom_masked_sad64x128_neon void aom_masked_sad64x128x4d_c(const uint8_t *src, int src_stride, const uint8_t *ref[4], int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask, unsigned sads[4]); -#define aom_masked_sad64x128x4d aom_masked_sad64x128x4d_c +void aom_masked_sad64x128x4d_neon(const uint8_t* src, + int src_stride, + const uint8_t* ref[4], + int ref_stride, + const uint8_t* second_pred, + const uint8_t* msk, + int msk_stride, + int invert_mask, + unsigned sads[4]); +#define aom_masked_sad64x128x4d aom_masked_sad64x128x4d_neon unsigned int aom_masked_sad64x32_c(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask); unsigned int aom_masked_sad64x32_neon(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask); #define aom_masked_sad64x32 aom_masked_sad64x32_neon void aom_masked_sad64x32x4d_c(const uint8_t *src, int src_stride, const uint8_t *ref[4], int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask, unsigned sads[4]); -#define aom_masked_sad64x32x4d aom_masked_sad64x32x4d_c +void aom_masked_sad64x32x4d_neon(const uint8_t* src, + int src_stride, + const uint8_t* ref[4], + int ref_stride, + const uint8_t* second_pred, + const uint8_t* msk, + int msk_stride, + int invert_mask, + unsigned sads[4]); +#define aom_masked_sad64x32x4d aom_masked_sad64x32x4d_neon unsigned int aom_masked_sad64x64_c(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask); unsigned int aom_masked_sad64x64_neon(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask); #define aom_masked_sad64x64 aom_masked_sad64x64_neon void aom_masked_sad64x64x4d_c(const uint8_t *src, int src_stride, const uint8_t *ref[4], int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask, unsigned sads[4]); -#define aom_masked_sad64x64x4d aom_masked_sad64x64x4d_c +void aom_masked_sad64x64x4d_neon(const uint8_t* src, + int src_stride, + const uint8_t* ref[4], + int ref_stride, + const uint8_t* second_pred, + const uint8_t* msk, + int msk_stride, + int invert_mask, + unsigned sads[4]); +#define aom_masked_sad64x64x4d aom_masked_sad64x64x4d_neon unsigned int aom_masked_sad8x16_c(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask); unsigned int aom_masked_sad8x16_neon(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask); #define aom_masked_sad8x16 aom_masked_sad8x16_neon void aom_masked_sad8x16x4d_c(const uint8_t *src, int src_stride, const uint8_t *ref[4], int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask, unsigned sads[4]); -#define aom_masked_sad8x16x4d aom_masked_sad8x16x4d_c +void aom_masked_sad8x16x4d_neon(const uint8_t* src, + int src_stride, + const uint8_t* ref[4], + int ref_stride, + const uint8_t* second_pred, + const uint8_t* msk, + int msk_stride, + int invert_mask, + unsigned sads[4]); +#define aom_masked_sad8x16x4d aom_masked_sad8x16x4d_neon unsigned int aom_masked_sad8x4_c(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask); unsigned int aom_masked_sad8x4_neon(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask); #define aom_masked_sad8x4 aom_masked_sad8x4_neon void aom_masked_sad8x4x4d_c(const uint8_t *src, int src_stride, const uint8_t *ref[4], int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask, unsigned sads[4]); -#define aom_masked_sad8x4x4d aom_masked_sad8x4x4d_c +void aom_masked_sad8x4x4d_neon(const uint8_t* src, + int src_stride, + const uint8_t* ref[4], + int ref_stride, + const uint8_t* second_pred, + const uint8_t* msk, + int msk_stride, + int invert_mask, + unsigned sads[4]); +#define aom_masked_sad8x4x4d aom_masked_sad8x4x4d_neon unsigned int aom_masked_sad8x8_c(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask); unsigned int aom_masked_sad8x8_neon(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask); #define aom_masked_sad8x8 aom_masked_sad8x8_neon void aom_masked_sad8x8x4d_c(const uint8_t *src, int src_stride, const uint8_t *ref[4], int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask, unsigned sads[4]); -#define aom_masked_sad8x8x4d aom_masked_sad8x8x4d_c +void aom_masked_sad8x8x4d_neon(const uint8_t* src, + int src_stride, + const uint8_t* ref[4], + int ref_stride, + const uint8_t* second_pred, + const uint8_t* msk, + int msk_stride, + int invert_mask, + unsigned sads[4]); +#define aom_masked_sad8x8x4d aom_masked_sad8x8x4d_neon unsigned int aom_masked_sub_pixel_variance128x128_c(const uint8_t *src, int src_stride, int xoffset, int yoffset, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask, unsigned int *sse); unsigned int aom_masked_sub_pixel_variance128x128_neon(
diff --git a/third_party/libaom/source/config/linux/arm-neon/config/av1_rtcd.h b/third_party/libaom/source/config/linux/arm-neon/config/av1_rtcd.h index 99a0c0a..13aceb4 100644 --- a/third_party/libaom/source/config/linux/arm-neon/config/av1_rtcd.h +++ b/third_party/libaom/source/config/linux/arm-neon/config/av1_rtcd.h
@@ -80,14 +80,21 @@ const MV *const mv, uint8_t *comp_pred, const uint8_t *pred, int width, int height, int subpel_x_q3, int subpel_y_q3, const uint8_t *ref, int ref_stride, int subpel_search); -#define aom_comp_avg_upsampled_pred aom_comp_avg_upsampled_pred_c - -void aom_comp_mask_upsampled_pred_c(MACROBLOCKD *xd, const struct AV1Common *const cm, int mi_row, int mi_col, - const MV *const mv, uint8_t *comp_pred, const uint8_t *pred, int width, - int height, int subpel_x_q3, int subpel_y_q3, const uint8_t *ref, - int ref_stride, const uint8_t *mask, int mask_stride, int invert_mask, - int subpel_search); -#define aom_comp_mask_upsampled_pred aom_comp_mask_upsampled_pred_c +void aom_comp_avg_upsampled_pred_neon(MACROBLOCKD* xd, + const struct AV1Common* const cm, + int mi_row, + int mi_col, + const MV* const mv, + uint8_t* comp_pred, + const uint8_t* pred, + int width, + int height, + int subpel_x_q3, + int subpel_y_q3, + const uint8_t* ref, + int ref_stride, + int subpel_search); +#define aom_comp_avg_upsampled_pred aom_comp_avg_upsampled_pred_neon void aom_dist_wtd_comp_avg_upsampled_pred_c(MACROBLOCKD *xd, const struct AV1Common *const cm, int mi_row, int mi_col, const MV *const mv, uint8_t *comp_pred, const uint8_t *pred, int width, @@ -102,7 +109,20 @@ void aom_upsampled_pred_c(MACROBLOCKD *xd, const struct AV1Common *const cm, int mi_row, int mi_col, const MV *const mv, uint8_t *comp_pred, int width, int height, int subpel_x_q3, int subpel_y_q3, const uint8_t *ref, int ref_stride, int subpel_search); -#define aom_upsampled_pred aom_upsampled_pred_c +void aom_upsampled_pred_neon(MACROBLOCKD* xd, + const struct AV1Common* const cm, + int mi_row, + int mi_col, + const MV* const mv, + uint8_t* comp_pred, + int width, + int height, + int subpel_x_q3, + int subpel_y_q3, + const uint8_t* ref, + int ref_stride, + int subpel_search); +#define aom_upsampled_pred aom_upsampled_pred_neon void av1_apply_selfguided_restoration_c(const uint8_t *dat, int width, int height, int stride, int eps, const int *xqd, uint8_t *dst, int dst_stride, int32_t *tmpbuf, int bit_depth, int highbd); void av1_apply_selfguided_restoration_neon(const uint8_t *dat, int width, int height, int stride, int eps, const int *xqd, uint8_t *dst, int dst_stride, int32_t *tmpbuf, int bit_depth, int highbd);
diff --git a/third_party/libaom/source/config/linux/arm/config/av1_rtcd.h b/third_party/libaom/source/config/linux/arm/config/av1_rtcd.h index 37b426a..91a6e2d 100644 --- a/third_party/libaom/source/config/linux/arm/config/av1_rtcd.h +++ b/third_party/libaom/source/config/linux/arm/config/av1_rtcd.h
@@ -82,13 +82,6 @@ int ref_stride, int subpel_search); #define aom_comp_avg_upsampled_pred aom_comp_avg_upsampled_pred_c -void aom_comp_mask_upsampled_pred_c(MACROBLOCKD *xd, const struct AV1Common *const cm, int mi_row, int mi_col, - const MV *const mv, uint8_t *comp_pred, const uint8_t *pred, int width, - int height, int subpel_x_q3, int subpel_y_q3, const uint8_t *ref, - int ref_stride, const uint8_t *mask, int mask_stride, int invert_mask, - int subpel_search); -#define aom_comp_mask_upsampled_pred aom_comp_mask_upsampled_pred_c - void aom_dist_wtd_comp_avg_upsampled_pred_c(MACROBLOCKD *xd, const struct AV1Common *const cm, int mi_row, int mi_col, const MV *const mv, uint8_t *comp_pred, const uint8_t *pred, int width, int height, int subpel_x_q3, int subpel_y_q3, const uint8_t *ref,
diff --git a/third_party/libaom/source/config/linux/arm64/config/aom_dsp_rtcd.h b/third_party/libaom/source/config/linux/arm64/config/aom_dsp_rtcd.h index d268891..b9049395 100644 --- a/third_party/libaom/source/config/linux/arm64/config/aom_dsp_rtcd.h +++ b/third_party/libaom/source/config/linux/arm64/config/aom_dsp_rtcd.h
@@ -995,112 +995,256 @@ #define aom_masked_sad128x128 aom_masked_sad128x128_neon void aom_masked_sad128x128x4d_c(const uint8_t *src, int src_stride, const uint8_t *ref[4], int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask, unsigned sads[4]); -#define aom_masked_sad128x128x4d aom_masked_sad128x128x4d_c +void aom_masked_sad128x128x4d_neon(const uint8_t* src, + int src_stride, + const uint8_t* ref[4], + int ref_stride, + const uint8_t* second_pred, + const uint8_t* msk, + int msk_stride, + int invert_mask, + unsigned sads[4]); +#define aom_masked_sad128x128x4d aom_masked_sad128x128x4d_neon unsigned int aom_masked_sad128x64_c(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask); unsigned int aom_masked_sad128x64_neon(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask); #define aom_masked_sad128x64 aom_masked_sad128x64_neon void aom_masked_sad128x64x4d_c(const uint8_t *src, int src_stride, const uint8_t *ref[4], int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask, unsigned sads[4]); -#define aom_masked_sad128x64x4d aom_masked_sad128x64x4d_c +void aom_masked_sad128x64x4d_neon(const uint8_t* src, + int src_stride, + const uint8_t* ref[4], + int ref_stride, + const uint8_t* second_pred, + const uint8_t* msk, + int msk_stride, + int invert_mask, + unsigned sads[4]); +#define aom_masked_sad128x64x4d aom_masked_sad128x64x4d_neon unsigned int aom_masked_sad16x16_c(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask); unsigned int aom_masked_sad16x16_neon(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask); #define aom_masked_sad16x16 aom_masked_sad16x16_neon void aom_masked_sad16x16x4d_c(const uint8_t *src, int src_stride, const uint8_t *ref[4], int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask, unsigned sads[4]); -#define aom_masked_sad16x16x4d aom_masked_sad16x16x4d_c +void aom_masked_sad16x16x4d_neon(const uint8_t* src, + int src_stride, + const uint8_t* ref[4], + int ref_stride, + const uint8_t* second_pred, + const uint8_t* msk, + int msk_stride, + int invert_mask, + unsigned sads[4]); +#define aom_masked_sad16x16x4d aom_masked_sad16x16x4d_neon unsigned int aom_masked_sad16x32_c(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask); unsigned int aom_masked_sad16x32_neon(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask); #define aom_masked_sad16x32 aom_masked_sad16x32_neon void aom_masked_sad16x32x4d_c(const uint8_t *src, int src_stride, const uint8_t *ref[4], int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask, unsigned sads[4]); -#define aom_masked_sad16x32x4d aom_masked_sad16x32x4d_c +void aom_masked_sad16x32x4d_neon(const uint8_t* src, + int src_stride, + const uint8_t* ref[4], + int ref_stride, + const uint8_t* second_pred, + const uint8_t* msk, + int msk_stride, + int invert_mask, + unsigned sads[4]); +#define aom_masked_sad16x32x4d aom_masked_sad16x32x4d_neon unsigned int aom_masked_sad16x8_c(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask); unsigned int aom_masked_sad16x8_neon(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask); #define aom_masked_sad16x8 aom_masked_sad16x8_neon void aom_masked_sad16x8x4d_c(const uint8_t *src, int src_stride, const uint8_t *ref[4], int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask, unsigned sads[4]); -#define aom_masked_sad16x8x4d aom_masked_sad16x8x4d_c +void aom_masked_sad16x8x4d_neon(const uint8_t* src, + int src_stride, + const uint8_t* ref[4], + int ref_stride, + const uint8_t* second_pred, + const uint8_t* msk, + int msk_stride, + int invert_mask, + unsigned sads[4]); +#define aom_masked_sad16x8x4d aom_masked_sad16x8x4d_neon unsigned int aom_masked_sad32x16_c(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask); unsigned int aom_masked_sad32x16_neon(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask); #define aom_masked_sad32x16 aom_masked_sad32x16_neon void aom_masked_sad32x16x4d_c(const uint8_t *src, int src_stride, const uint8_t *ref[4], int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask, unsigned sads[4]); -#define aom_masked_sad32x16x4d aom_masked_sad32x16x4d_c +void aom_masked_sad32x16x4d_neon(const uint8_t* src, + int src_stride, + const uint8_t* ref[4], + int ref_stride, + const uint8_t* second_pred, + const uint8_t* msk, + int msk_stride, + int invert_mask, + unsigned sads[4]); +#define aom_masked_sad32x16x4d aom_masked_sad32x16x4d_neon unsigned int aom_masked_sad32x32_c(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask); unsigned int aom_masked_sad32x32_neon(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask); #define aom_masked_sad32x32 aom_masked_sad32x32_neon void aom_masked_sad32x32x4d_c(const uint8_t *src, int src_stride, const uint8_t *ref[4], int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask, unsigned sads[4]); -#define aom_masked_sad32x32x4d aom_masked_sad32x32x4d_c +void aom_masked_sad32x32x4d_neon(const uint8_t* src, + int src_stride, + const uint8_t* ref[4], + int ref_stride, + const uint8_t* second_pred, + const uint8_t* msk, + int msk_stride, + int invert_mask, + unsigned sads[4]); +#define aom_masked_sad32x32x4d aom_masked_sad32x32x4d_neon unsigned int aom_masked_sad32x64_c(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask); unsigned int aom_masked_sad32x64_neon(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask); #define aom_masked_sad32x64 aom_masked_sad32x64_neon void aom_masked_sad32x64x4d_c(const uint8_t *src, int src_stride, const uint8_t *ref[4], int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask, unsigned sads[4]); -#define aom_masked_sad32x64x4d aom_masked_sad32x64x4d_c +void aom_masked_sad32x64x4d_neon(const uint8_t* src, + int src_stride, + const uint8_t* ref[4], + int ref_stride, + const uint8_t* second_pred, + const uint8_t* msk, + int msk_stride, + int invert_mask, + unsigned sads[4]); +#define aom_masked_sad32x64x4d aom_masked_sad32x64x4d_neon unsigned int aom_masked_sad4x4_c(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask); unsigned int aom_masked_sad4x4_neon(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask); #define aom_masked_sad4x4 aom_masked_sad4x4_neon void aom_masked_sad4x4x4d_c(const uint8_t *src, int src_stride, const uint8_t *ref[4], int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask, unsigned sads[4]); -#define aom_masked_sad4x4x4d aom_masked_sad4x4x4d_c +void aom_masked_sad4x4x4d_neon(const uint8_t* src, + int src_stride, + const uint8_t* ref[4], + int ref_stride, + const uint8_t* second_pred, + const uint8_t* msk, + int msk_stride, + int invert_mask, + unsigned sads[4]); +#define aom_masked_sad4x4x4d aom_masked_sad4x4x4d_neon unsigned int aom_masked_sad4x8_c(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask); unsigned int aom_masked_sad4x8_neon(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask); #define aom_masked_sad4x8 aom_masked_sad4x8_neon void aom_masked_sad4x8x4d_c(const uint8_t *src, int src_stride, const uint8_t *ref[4], int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask, unsigned sads[4]); -#define aom_masked_sad4x8x4d aom_masked_sad4x8x4d_c +void aom_masked_sad4x8x4d_neon(const uint8_t* src, + int src_stride, + const uint8_t* ref[4], + int ref_stride, + const uint8_t* second_pred, + const uint8_t* msk, + int msk_stride, + int invert_mask, + unsigned sads[4]); +#define aom_masked_sad4x8x4d aom_masked_sad4x8x4d_neon unsigned int aom_masked_sad64x128_c(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask); unsigned int aom_masked_sad64x128_neon(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask); #define aom_masked_sad64x128 aom_masked_sad64x128_neon void aom_masked_sad64x128x4d_c(const uint8_t *src, int src_stride, const uint8_t *ref[4], int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask, unsigned sads[4]); -#define aom_masked_sad64x128x4d aom_masked_sad64x128x4d_c +void aom_masked_sad64x128x4d_neon(const uint8_t* src, + int src_stride, + const uint8_t* ref[4], + int ref_stride, + const uint8_t* second_pred, + const uint8_t* msk, + int msk_stride, + int invert_mask, + unsigned sads[4]); +#define aom_masked_sad64x128x4d aom_masked_sad64x128x4d_neon unsigned int aom_masked_sad64x32_c(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask); unsigned int aom_masked_sad64x32_neon(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask); #define aom_masked_sad64x32 aom_masked_sad64x32_neon void aom_masked_sad64x32x4d_c(const uint8_t *src, int src_stride, const uint8_t *ref[4], int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask, unsigned sads[4]); -#define aom_masked_sad64x32x4d aom_masked_sad64x32x4d_c +void aom_masked_sad64x32x4d_neon(const uint8_t* src, + int src_stride, + const uint8_t* ref[4], + int ref_stride, + const uint8_t* second_pred, + const uint8_t* msk, + int msk_stride, + int invert_mask, + unsigned sads[4]); +#define aom_masked_sad64x32x4d aom_masked_sad64x32x4d_neon unsigned int aom_masked_sad64x64_c(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask); unsigned int aom_masked_sad64x64_neon(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask); #define aom_masked_sad64x64 aom_masked_sad64x64_neon void aom_masked_sad64x64x4d_c(const uint8_t *src, int src_stride, const uint8_t *ref[4], int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask, unsigned sads[4]); -#define aom_masked_sad64x64x4d aom_masked_sad64x64x4d_c +void aom_masked_sad64x64x4d_neon(const uint8_t* src, + int src_stride, + const uint8_t* ref[4], + int ref_stride, + const uint8_t* second_pred, + const uint8_t* msk, + int msk_stride, + int invert_mask, + unsigned sads[4]); +#define aom_masked_sad64x64x4d aom_masked_sad64x64x4d_neon unsigned int aom_masked_sad8x16_c(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask); unsigned int aom_masked_sad8x16_neon(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask); #define aom_masked_sad8x16 aom_masked_sad8x16_neon void aom_masked_sad8x16x4d_c(const uint8_t *src, int src_stride, const uint8_t *ref[4], int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask, unsigned sads[4]); -#define aom_masked_sad8x16x4d aom_masked_sad8x16x4d_c +void aom_masked_sad8x16x4d_neon(const uint8_t* src, + int src_stride, + const uint8_t* ref[4], + int ref_stride, + const uint8_t* second_pred, + const uint8_t* msk, + int msk_stride, + int invert_mask, + unsigned sads[4]); +#define aom_masked_sad8x16x4d aom_masked_sad8x16x4d_neon unsigned int aom_masked_sad8x4_c(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask); unsigned int aom_masked_sad8x4_neon(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask); #define aom_masked_sad8x4 aom_masked_sad8x4_neon void aom_masked_sad8x4x4d_c(const uint8_t *src, int src_stride, const uint8_t *ref[4], int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask, unsigned sads[4]); -#define aom_masked_sad8x4x4d aom_masked_sad8x4x4d_c +void aom_masked_sad8x4x4d_neon(const uint8_t* src, + int src_stride, + const uint8_t* ref[4], + int ref_stride, + const uint8_t* second_pred, + const uint8_t* msk, + int msk_stride, + int invert_mask, + unsigned sads[4]); +#define aom_masked_sad8x4x4d aom_masked_sad8x4x4d_neon unsigned int aom_masked_sad8x8_c(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask); unsigned int aom_masked_sad8x8_neon(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask); #define aom_masked_sad8x8 aom_masked_sad8x8_neon void aom_masked_sad8x8x4d_c(const uint8_t *src, int src_stride, const uint8_t *ref[4], int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask, unsigned sads[4]); -#define aom_masked_sad8x8x4d aom_masked_sad8x8x4d_c +void aom_masked_sad8x8x4d_neon(const uint8_t* src, + int src_stride, + const uint8_t* ref[4], + int ref_stride, + const uint8_t* second_pred, + const uint8_t* msk, + int msk_stride, + int invert_mask, + unsigned sads[4]); +#define aom_masked_sad8x8x4d aom_masked_sad8x8x4d_neon unsigned int aom_masked_sub_pixel_variance128x128_c(const uint8_t *src, int src_stride, int xoffset, int yoffset, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask, unsigned int *sse); unsigned int aom_masked_sub_pixel_variance128x128_neon(
diff --git a/third_party/libaom/source/config/linux/arm64/config/av1_rtcd.h b/third_party/libaom/source/config/linux/arm64/config/av1_rtcd.h index 99a0c0a..13aceb4 100644 --- a/third_party/libaom/source/config/linux/arm64/config/av1_rtcd.h +++ b/third_party/libaom/source/config/linux/arm64/config/av1_rtcd.h
@@ -80,14 +80,21 @@ const MV *const mv, uint8_t *comp_pred, const uint8_t *pred, int width, int height, int subpel_x_q3, int subpel_y_q3, const uint8_t *ref, int ref_stride, int subpel_search); -#define aom_comp_avg_upsampled_pred aom_comp_avg_upsampled_pred_c - -void aom_comp_mask_upsampled_pred_c(MACROBLOCKD *xd, const struct AV1Common *const cm, int mi_row, int mi_col, - const MV *const mv, uint8_t *comp_pred, const uint8_t *pred, int width, - int height, int subpel_x_q3, int subpel_y_q3, const uint8_t *ref, - int ref_stride, const uint8_t *mask, int mask_stride, int invert_mask, - int subpel_search); -#define aom_comp_mask_upsampled_pred aom_comp_mask_upsampled_pred_c +void aom_comp_avg_upsampled_pred_neon(MACROBLOCKD* xd, + const struct AV1Common* const cm, + int mi_row, + int mi_col, + const MV* const mv, + uint8_t* comp_pred, + const uint8_t* pred, + int width, + int height, + int subpel_x_q3, + int subpel_y_q3, + const uint8_t* ref, + int ref_stride, + int subpel_search); +#define aom_comp_avg_upsampled_pred aom_comp_avg_upsampled_pred_neon void aom_dist_wtd_comp_avg_upsampled_pred_c(MACROBLOCKD *xd, const struct AV1Common *const cm, int mi_row, int mi_col, const MV *const mv, uint8_t *comp_pred, const uint8_t *pred, int width, @@ -102,7 +109,20 @@ void aom_upsampled_pred_c(MACROBLOCKD *xd, const struct AV1Common *const cm, int mi_row, int mi_col, const MV *const mv, uint8_t *comp_pred, int width, int height, int subpel_x_q3, int subpel_y_q3, const uint8_t *ref, int ref_stride, int subpel_search); -#define aom_upsampled_pred aom_upsampled_pred_c +void aom_upsampled_pred_neon(MACROBLOCKD* xd, + const struct AV1Common* const cm, + int mi_row, + int mi_col, + const MV* const mv, + uint8_t* comp_pred, + int width, + int height, + int subpel_x_q3, + int subpel_y_q3, + const uint8_t* ref, + int ref_stride, + int subpel_search); +#define aom_upsampled_pred aom_upsampled_pred_neon void av1_apply_selfguided_restoration_c(const uint8_t *dat, int width, int height, int stride, int eps, const int *xqd, uint8_t *dst, int dst_stride, int32_t *tmpbuf, int bit_depth, int highbd); void av1_apply_selfguided_restoration_neon(const uint8_t *dat, int width, int height, int stride, int eps, const int *xqd, uint8_t *dst, int dst_stride, int32_t *tmpbuf, int bit_depth, int highbd);
diff --git a/third_party/libaom/source/config/linux/generic/config/av1_rtcd.h b/third_party/libaom/source/config/linux/generic/config/av1_rtcd.h index 77657a9..80b0aed3 100644 --- a/third_party/libaom/source/config/linux/generic/config/av1_rtcd.h +++ b/third_party/libaom/source/config/linux/generic/config/av1_rtcd.h
@@ -82,13 +82,6 @@ int ref_stride, int subpel_search); #define aom_comp_avg_upsampled_pred aom_comp_avg_upsampled_pred_c -void aom_comp_mask_upsampled_pred_c(MACROBLOCKD *xd, const struct AV1Common *const cm, int mi_row, int mi_col, - const MV *const mv, uint8_t *comp_pred, const uint8_t *pred, int width, - int height, int subpel_x_q3, int subpel_y_q3, const uint8_t *ref, - int ref_stride, const uint8_t *mask, int mask_stride, int invert_mask, - int subpel_search); -#define aom_comp_mask_upsampled_pred aom_comp_mask_upsampled_pred_c - void aom_dist_wtd_comp_avg_upsampled_pred_c(MACROBLOCKD *xd, const struct AV1Common *const cm, int mi_row, int mi_col, const MV *const mv, uint8_t *comp_pred, const uint8_t *pred, int width, int height, int subpel_x_q3, int subpel_y_q3, const uint8_t *ref,
diff --git a/third_party/libaom/source/config/linux/ia32/config/av1_rtcd.h b/third_party/libaom/source/config/linux/ia32/config/av1_rtcd.h index 0f4e73f..70c2e7f 100644 --- a/third_party/libaom/source/config/linux/ia32/config/av1_rtcd.h +++ b/third_party/libaom/source/config/linux/ia32/config/av1_rtcd.h
@@ -86,18 +86,6 @@ int ref_stride, int subpel_search); #define aom_comp_avg_upsampled_pred aom_comp_avg_upsampled_pred_sse2 -void aom_comp_mask_upsampled_pred_c(MACROBLOCKD *xd, const struct AV1Common *const cm, int mi_row, int mi_col, - const MV *const mv, uint8_t *comp_pred, const uint8_t *pred, int width, - int height, int subpel_x_q3, int subpel_y_q3, const uint8_t *ref, - int ref_stride, const uint8_t *mask, int mask_stride, int invert_mask, - int subpel_search); -void aom_comp_mask_upsampled_pred_sse2(MACROBLOCKD *xd, const struct AV1Common *const cm, int mi_row, int mi_col, - const MV *const mv, uint8_t *comp_pred, const uint8_t *pred, int width, - int height, int subpel_x_q3, int subpel_y_q3, const uint8_t *ref, - int ref_stride, const uint8_t *mask, int mask_stride, int invert_mask, - int subpel_search); -#define aom_comp_mask_upsampled_pred aom_comp_mask_upsampled_pred_sse2 - void aom_dist_wtd_comp_avg_upsampled_pred_c(MACROBLOCKD *xd, const struct AV1Common *const cm, int mi_row, int mi_col, const MV *const mv, uint8_t *comp_pred, const uint8_t *pred, int width, int height, int subpel_x_q3, int subpel_y_q3, const uint8_t *ref,
diff --git a/third_party/libaom/source/config/linux/x64/config/av1_rtcd.h b/third_party/libaom/source/config/linux/x64/config/av1_rtcd.h index 0f4e73f..70c2e7f 100644 --- a/third_party/libaom/source/config/linux/x64/config/av1_rtcd.h +++ b/third_party/libaom/source/config/linux/x64/config/av1_rtcd.h
@@ -86,18 +86,6 @@ int ref_stride, int subpel_search); #define aom_comp_avg_upsampled_pred aom_comp_avg_upsampled_pred_sse2 -void aom_comp_mask_upsampled_pred_c(MACROBLOCKD *xd, const struct AV1Common *const cm, int mi_row, int mi_col, - const MV *const mv, uint8_t *comp_pred, const uint8_t *pred, int width, - int height, int subpel_x_q3, int subpel_y_q3, const uint8_t *ref, - int ref_stride, const uint8_t *mask, int mask_stride, int invert_mask, - int subpel_search); -void aom_comp_mask_upsampled_pred_sse2(MACROBLOCKD *xd, const struct AV1Common *const cm, int mi_row, int mi_col, - const MV *const mv, uint8_t *comp_pred, const uint8_t *pred, int width, - int height, int subpel_x_q3, int subpel_y_q3, const uint8_t *ref, - int ref_stride, const uint8_t *mask, int mask_stride, int invert_mask, - int subpel_search); -#define aom_comp_mask_upsampled_pred aom_comp_mask_upsampled_pred_sse2 - void aom_dist_wtd_comp_avg_upsampled_pred_c(MACROBLOCKD *xd, const struct AV1Common *const cm, int mi_row, int mi_col, const MV *const mv, uint8_t *comp_pred, const uint8_t *pred, int width, int height, int subpel_x_q3, int subpel_y_q3, const uint8_t *ref,
diff --git a/third_party/libaom/source/config/win/arm64/config/aom_dsp_rtcd.h b/third_party/libaom/source/config/win/arm64/config/aom_dsp_rtcd.h index d268891..b9049395 100644 --- a/third_party/libaom/source/config/win/arm64/config/aom_dsp_rtcd.h +++ b/third_party/libaom/source/config/win/arm64/config/aom_dsp_rtcd.h
@@ -995,112 +995,256 @@ #define aom_masked_sad128x128 aom_masked_sad128x128_neon void aom_masked_sad128x128x4d_c(const uint8_t *src, int src_stride, const uint8_t *ref[4], int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask, unsigned sads[4]); -#define aom_masked_sad128x128x4d aom_masked_sad128x128x4d_c +void aom_masked_sad128x128x4d_neon(const uint8_t* src, + int src_stride, + const uint8_t* ref[4], + int ref_stride, + const uint8_t* second_pred, + const uint8_t* msk, + int msk_stride, + int invert_mask, + unsigned sads[4]); +#define aom_masked_sad128x128x4d aom_masked_sad128x128x4d_neon unsigned int aom_masked_sad128x64_c(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask); unsigned int aom_masked_sad128x64_neon(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask); #define aom_masked_sad128x64 aom_masked_sad128x64_neon void aom_masked_sad128x64x4d_c(const uint8_t *src, int src_stride, const uint8_t *ref[4], int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask, unsigned sads[4]); -#define aom_masked_sad128x64x4d aom_masked_sad128x64x4d_c +void aom_masked_sad128x64x4d_neon(const uint8_t* src, + int src_stride, + const uint8_t* ref[4], + int ref_stride, + const uint8_t* second_pred, + const uint8_t* msk, + int msk_stride, + int invert_mask, + unsigned sads[4]); +#define aom_masked_sad128x64x4d aom_masked_sad128x64x4d_neon unsigned int aom_masked_sad16x16_c(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask); unsigned int aom_masked_sad16x16_neon(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask); #define aom_masked_sad16x16 aom_masked_sad16x16_neon void aom_masked_sad16x16x4d_c(const uint8_t *src, int src_stride, const uint8_t *ref[4], int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask, unsigned sads[4]); -#define aom_masked_sad16x16x4d aom_masked_sad16x16x4d_c +void aom_masked_sad16x16x4d_neon(const uint8_t* src, + int src_stride, + const uint8_t* ref[4], + int ref_stride, + const uint8_t* second_pred, + const uint8_t* msk, + int msk_stride, + int invert_mask, + unsigned sads[4]); +#define aom_masked_sad16x16x4d aom_masked_sad16x16x4d_neon unsigned int aom_masked_sad16x32_c(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask); unsigned int aom_masked_sad16x32_neon(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask); #define aom_masked_sad16x32 aom_masked_sad16x32_neon void aom_masked_sad16x32x4d_c(const uint8_t *src, int src_stride, const uint8_t *ref[4], int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask, unsigned sads[4]); -#define aom_masked_sad16x32x4d aom_masked_sad16x32x4d_c +void aom_masked_sad16x32x4d_neon(const uint8_t* src, + int src_stride, + const uint8_t* ref[4], + int ref_stride, + const uint8_t* second_pred, + const uint8_t* msk, + int msk_stride, + int invert_mask, + unsigned sads[4]); +#define aom_masked_sad16x32x4d aom_masked_sad16x32x4d_neon unsigned int aom_masked_sad16x8_c(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask); unsigned int aom_masked_sad16x8_neon(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask); #define aom_masked_sad16x8 aom_masked_sad16x8_neon void aom_masked_sad16x8x4d_c(const uint8_t *src, int src_stride, const uint8_t *ref[4], int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask, unsigned sads[4]); -#define aom_masked_sad16x8x4d aom_masked_sad16x8x4d_c +void aom_masked_sad16x8x4d_neon(const uint8_t* src, + int src_stride, + const uint8_t* ref[4], + int ref_stride, + const uint8_t* second_pred, + const uint8_t* msk, + int msk_stride, + int invert_mask, + unsigned sads[4]); +#define aom_masked_sad16x8x4d aom_masked_sad16x8x4d_neon unsigned int aom_masked_sad32x16_c(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask); unsigned int aom_masked_sad32x16_neon(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask); #define aom_masked_sad32x16 aom_masked_sad32x16_neon void aom_masked_sad32x16x4d_c(const uint8_t *src, int src_stride, const uint8_t *ref[4], int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask, unsigned sads[4]); -#define aom_masked_sad32x16x4d aom_masked_sad32x16x4d_c +void aom_masked_sad32x16x4d_neon(const uint8_t* src, + int src_stride, + const uint8_t* ref[4], + int ref_stride, + const uint8_t* second_pred, + const uint8_t* msk, + int msk_stride, + int invert_mask, + unsigned sads[4]); +#define aom_masked_sad32x16x4d aom_masked_sad32x16x4d_neon unsigned int aom_masked_sad32x32_c(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask); unsigned int aom_masked_sad32x32_neon(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask); #define aom_masked_sad32x32 aom_masked_sad32x32_neon void aom_masked_sad32x32x4d_c(const uint8_t *src, int src_stride, const uint8_t *ref[4], int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask, unsigned sads[4]); -#define aom_masked_sad32x32x4d aom_masked_sad32x32x4d_c +void aom_masked_sad32x32x4d_neon(const uint8_t* src, + int src_stride, + const uint8_t* ref[4], + int ref_stride, + const uint8_t* second_pred, + const uint8_t* msk, + int msk_stride, + int invert_mask, + unsigned sads[4]); +#define aom_masked_sad32x32x4d aom_masked_sad32x32x4d_neon unsigned int aom_masked_sad32x64_c(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask); unsigned int aom_masked_sad32x64_neon(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask); #define aom_masked_sad32x64 aom_masked_sad32x64_neon void aom_masked_sad32x64x4d_c(const uint8_t *src, int src_stride, const uint8_t *ref[4], int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask, unsigned sads[4]); -#define aom_masked_sad32x64x4d aom_masked_sad32x64x4d_c +void aom_masked_sad32x64x4d_neon(const uint8_t* src, + int src_stride, + const uint8_t* ref[4], + int ref_stride, + const uint8_t* second_pred, + const uint8_t* msk, + int msk_stride, + int invert_mask, + unsigned sads[4]); +#define aom_masked_sad32x64x4d aom_masked_sad32x64x4d_neon unsigned int aom_masked_sad4x4_c(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask); unsigned int aom_masked_sad4x4_neon(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask); #define aom_masked_sad4x4 aom_masked_sad4x4_neon void aom_masked_sad4x4x4d_c(const uint8_t *src, int src_stride, const uint8_t *ref[4], int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask, unsigned sads[4]); -#define aom_masked_sad4x4x4d aom_masked_sad4x4x4d_c +void aom_masked_sad4x4x4d_neon(const uint8_t* src, + int src_stride, + const uint8_t* ref[4], + int ref_stride, + const uint8_t* second_pred, + const uint8_t* msk, + int msk_stride, + int invert_mask, + unsigned sads[4]); +#define aom_masked_sad4x4x4d aom_masked_sad4x4x4d_neon unsigned int aom_masked_sad4x8_c(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask); unsigned int aom_masked_sad4x8_neon(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask); #define aom_masked_sad4x8 aom_masked_sad4x8_neon void aom_masked_sad4x8x4d_c(const uint8_t *src, int src_stride, const uint8_t *ref[4], int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask, unsigned sads[4]); -#define aom_masked_sad4x8x4d aom_masked_sad4x8x4d_c +void aom_masked_sad4x8x4d_neon(const uint8_t* src, + int src_stride, + const uint8_t* ref[4], + int ref_stride, + const uint8_t* second_pred, + const uint8_t* msk, + int msk_stride, + int invert_mask, + unsigned sads[4]); +#define aom_masked_sad4x8x4d aom_masked_sad4x8x4d_neon unsigned int aom_masked_sad64x128_c(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask); unsigned int aom_masked_sad64x128_neon(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask); #define aom_masked_sad64x128 aom_masked_sad64x128_neon void aom_masked_sad64x128x4d_c(const uint8_t *src, int src_stride, const uint8_t *ref[4], int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask, unsigned sads[4]); -#define aom_masked_sad64x128x4d aom_masked_sad64x128x4d_c +void aom_masked_sad64x128x4d_neon(const uint8_t* src, + int src_stride, + const uint8_t* ref[4], + int ref_stride, + const uint8_t* second_pred, + const uint8_t* msk, + int msk_stride, + int invert_mask, + unsigned sads[4]); +#define aom_masked_sad64x128x4d aom_masked_sad64x128x4d_neon unsigned int aom_masked_sad64x32_c(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask); unsigned int aom_masked_sad64x32_neon(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask); #define aom_masked_sad64x32 aom_masked_sad64x32_neon void aom_masked_sad64x32x4d_c(const uint8_t *src, int src_stride, const uint8_t *ref[4], int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask, unsigned sads[4]); -#define aom_masked_sad64x32x4d aom_masked_sad64x32x4d_c +void aom_masked_sad64x32x4d_neon(const uint8_t* src, + int src_stride, + const uint8_t* ref[4], + int ref_stride, + const uint8_t* second_pred, + const uint8_t* msk, + int msk_stride, + int invert_mask, + unsigned sads[4]); +#define aom_masked_sad64x32x4d aom_masked_sad64x32x4d_neon unsigned int aom_masked_sad64x64_c(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask); unsigned int aom_masked_sad64x64_neon(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask); #define aom_masked_sad64x64 aom_masked_sad64x64_neon void aom_masked_sad64x64x4d_c(const uint8_t *src, int src_stride, const uint8_t *ref[4], int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask, unsigned sads[4]); -#define aom_masked_sad64x64x4d aom_masked_sad64x64x4d_c +void aom_masked_sad64x64x4d_neon(const uint8_t* src, + int src_stride, + const uint8_t* ref[4], + int ref_stride, + const uint8_t* second_pred, + const uint8_t* msk, + int msk_stride, + int invert_mask, + unsigned sads[4]); +#define aom_masked_sad64x64x4d aom_masked_sad64x64x4d_neon unsigned int aom_masked_sad8x16_c(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask); unsigned int aom_masked_sad8x16_neon(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask); #define aom_masked_sad8x16 aom_masked_sad8x16_neon void aom_masked_sad8x16x4d_c(const uint8_t *src, int src_stride, const uint8_t *ref[4], int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask, unsigned sads[4]); -#define aom_masked_sad8x16x4d aom_masked_sad8x16x4d_c +void aom_masked_sad8x16x4d_neon(const uint8_t* src, + int src_stride, + const uint8_t* ref[4], + int ref_stride, + const uint8_t* second_pred, + const uint8_t* msk, + int msk_stride, + int invert_mask, + unsigned sads[4]); +#define aom_masked_sad8x16x4d aom_masked_sad8x16x4d_neon unsigned int aom_masked_sad8x4_c(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask); unsigned int aom_masked_sad8x4_neon(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask); #define aom_masked_sad8x4 aom_masked_sad8x4_neon void aom_masked_sad8x4x4d_c(const uint8_t *src, int src_stride, const uint8_t *ref[4], int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask, unsigned sads[4]); -#define aom_masked_sad8x4x4d aom_masked_sad8x4x4d_c +void aom_masked_sad8x4x4d_neon(const uint8_t* src, + int src_stride, + const uint8_t* ref[4], + int ref_stride, + const uint8_t* second_pred, + const uint8_t* msk, + int msk_stride, + int invert_mask, + unsigned sads[4]); +#define aom_masked_sad8x4x4d aom_masked_sad8x4x4d_neon unsigned int aom_masked_sad8x8_c(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask); unsigned int aom_masked_sad8x8_neon(const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask); #define aom_masked_sad8x8 aom_masked_sad8x8_neon void aom_masked_sad8x8x4d_c(const uint8_t *src, int src_stride, const uint8_t *ref[4], int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask, unsigned sads[4]); -#define aom_masked_sad8x8x4d aom_masked_sad8x8x4d_c +void aom_masked_sad8x8x4d_neon(const uint8_t* src, + int src_stride, + const uint8_t* ref[4], + int ref_stride, + const uint8_t* second_pred, + const uint8_t* msk, + int msk_stride, + int invert_mask, + unsigned sads[4]); +#define aom_masked_sad8x8x4d aom_masked_sad8x8x4d_neon unsigned int aom_masked_sub_pixel_variance128x128_c(const uint8_t *src, int src_stride, int xoffset, int yoffset, const uint8_t *ref, int ref_stride, const uint8_t *second_pred, const uint8_t *msk, int msk_stride, int invert_mask, unsigned int *sse); unsigned int aom_masked_sub_pixel_variance128x128_neon(
diff --git a/third_party/libaom/source/config/win/arm64/config/av1_rtcd.h b/third_party/libaom/source/config/win/arm64/config/av1_rtcd.h index 99a0c0a..13aceb4 100644 --- a/third_party/libaom/source/config/win/arm64/config/av1_rtcd.h +++ b/third_party/libaom/source/config/win/arm64/config/av1_rtcd.h
@@ -80,14 +80,21 @@ const MV *const mv, uint8_t *comp_pred, const uint8_t *pred, int width, int height, int subpel_x_q3, int subpel_y_q3, const uint8_t *ref, int ref_stride, int subpel_search); -#define aom_comp_avg_upsampled_pred aom_comp_avg_upsampled_pred_c - -void aom_comp_mask_upsampled_pred_c(MACROBLOCKD *xd, const struct AV1Common *const cm, int mi_row, int mi_col, - const MV *const mv, uint8_t *comp_pred, const uint8_t *pred, int width, - int height, int subpel_x_q3, int subpel_y_q3, const uint8_t *ref, - int ref_stride, const uint8_t *mask, int mask_stride, int invert_mask, - int subpel_search); -#define aom_comp_mask_upsampled_pred aom_comp_mask_upsampled_pred_c +void aom_comp_avg_upsampled_pred_neon(MACROBLOCKD* xd, + const struct AV1Common* const cm, + int mi_row, + int mi_col, + const MV* const mv, + uint8_t* comp_pred, + const uint8_t* pred, + int width, + int height, + int subpel_x_q3, + int subpel_y_q3, + const uint8_t* ref, + int ref_stride, + int subpel_search); +#define aom_comp_avg_upsampled_pred aom_comp_avg_upsampled_pred_neon void aom_dist_wtd_comp_avg_upsampled_pred_c(MACROBLOCKD *xd, const struct AV1Common *const cm, int mi_row, int mi_col, const MV *const mv, uint8_t *comp_pred, const uint8_t *pred, int width, @@ -102,7 +109,20 @@ void aom_upsampled_pred_c(MACROBLOCKD *xd, const struct AV1Common *const cm, int mi_row, int mi_col, const MV *const mv, uint8_t *comp_pred, int width, int height, int subpel_x_q3, int subpel_y_q3, const uint8_t *ref, int ref_stride, int subpel_search); -#define aom_upsampled_pred aom_upsampled_pred_c +void aom_upsampled_pred_neon(MACROBLOCKD* xd, + const struct AV1Common* const cm, + int mi_row, + int mi_col, + const MV* const mv, + uint8_t* comp_pred, + int width, + int height, + int subpel_x_q3, + int subpel_y_q3, + const uint8_t* ref, + int ref_stride, + int subpel_search); +#define aom_upsampled_pred aom_upsampled_pred_neon void av1_apply_selfguided_restoration_c(const uint8_t *dat, int width, int height, int stride, int eps, const int *xqd, uint8_t *dst, int dst_stride, int32_t *tmpbuf, int bit_depth, int highbd); void av1_apply_selfguided_restoration_neon(const uint8_t *dat, int width, int height, int stride, int eps, const int *xqd, uint8_t *dst, int dst_stride, int32_t *tmpbuf, int bit_depth, int highbd);
diff --git a/third_party/libaom/source/config/win/ia32/config/av1_rtcd.h b/third_party/libaom/source/config/win/ia32/config/av1_rtcd.h index 0f4e73f..70c2e7f 100644 --- a/third_party/libaom/source/config/win/ia32/config/av1_rtcd.h +++ b/third_party/libaom/source/config/win/ia32/config/av1_rtcd.h
@@ -86,18 +86,6 @@ int ref_stride, int subpel_search); #define aom_comp_avg_upsampled_pred aom_comp_avg_upsampled_pred_sse2 -void aom_comp_mask_upsampled_pred_c(MACROBLOCKD *xd, const struct AV1Common *const cm, int mi_row, int mi_col, - const MV *const mv, uint8_t *comp_pred, const uint8_t *pred, int width, - int height, int subpel_x_q3, int subpel_y_q3, const uint8_t *ref, - int ref_stride, const uint8_t *mask, int mask_stride, int invert_mask, - int subpel_search); -void aom_comp_mask_upsampled_pred_sse2(MACROBLOCKD *xd, const struct AV1Common *const cm, int mi_row, int mi_col, - const MV *const mv, uint8_t *comp_pred, const uint8_t *pred, int width, - int height, int subpel_x_q3, int subpel_y_q3, const uint8_t *ref, - int ref_stride, const uint8_t *mask, int mask_stride, int invert_mask, - int subpel_search); -#define aom_comp_mask_upsampled_pred aom_comp_mask_upsampled_pred_sse2 - void aom_dist_wtd_comp_avg_upsampled_pred_c(MACROBLOCKD *xd, const struct AV1Common *const cm, int mi_row, int mi_col, const MV *const mv, uint8_t *comp_pred, const uint8_t *pred, int width, int height, int subpel_x_q3, int subpel_y_q3, const uint8_t *ref,
diff --git a/third_party/libaom/source/config/win/x64/config/av1_rtcd.h b/third_party/libaom/source/config/win/x64/config/av1_rtcd.h index 0f4e73f..70c2e7f 100644 --- a/third_party/libaom/source/config/win/x64/config/av1_rtcd.h +++ b/third_party/libaom/source/config/win/x64/config/av1_rtcd.h
@@ -86,18 +86,6 @@ int ref_stride, int subpel_search); #define aom_comp_avg_upsampled_pred aom_comp_avg_upsampled_pred_sse2 -void aom_comp_mask_upsampled_pred_c(MACROBLOCKD *xd, const struct AV1Common *const cm, int mi_row, int mi_col, - const MV *const mv, uint8_t *comp_pred, const uint8_t *pred, int width, - int height, int subpel_x_q3, int subpel_y_q3, const uint8_t *ref, - int ref_stride, const uint8_t *mask, int mask_stride, int invert_mask, - int subpel_search); -void aom_comp_mask_upsampled_pred_sse2(MACROBLOCKD *xd, const struct AV1Common *const cm, int mi_row, int mi_col, - const MV *const mv, uint8_t *comp_pred, const uint8_t *pred, int width, - int height, int subpel_x_q3, int subpel_y_q3, const uint8_t *ref, - int ref_stride, const uint8_t *mask, int mask_stride, int invert_mask, - int subpel_search); -#define aom_comp_mask_upsampled_pred aom_comp_mask_upsampled_pred_sse2 - void aom_dist_wtd_comp_avg_upsampled_pred_c(MACROBLOCKD *xd, const struct AV1Common *const cm, int mi_row, int mi_col, const MV *const mv, uint8_t *comp_pred, const uint8_t *pred, int width, int height, int subpel_x_q3, int subpel_y_q3, const uint8_t *ref,
diff --git a/tools/clang/scripts/upload_revision.py b/tools/clang/scripts/upload_revision.py index 6796e2b..63730aa 100755 --- a/tools/clang/scripts/upload_revision.py +++ b/tools/clang/scripts/upload_revision.py
@@ -17,8 +17,8 @@ import sys import urllib.request -from build import (CheckoutGitRepo, GetCommitDescription, LLVM_DIR, - LLVM_GIT_URL, RunCommand) +from build import (CheckoutGitRepo, GetCommitDescription, GetLatestLLVMCommit, + LLVM_DIR, LLVM_GIT_URL, RunCommand) from update import CHROMIUM_DIR, DownloadAndUnpack # Access to //tools/rust @@ -26,7 +26,7 @@ os.path.join(os.path.dirname(os.path.abspath(__file__)), '..', '..', 'rust')) -from build_rust import RUST_GIT_URL, RUST_SRC_DIR +from build_rust import RUST_GIT_URL, RUST_SRC_DIR, GetLatestRustCommit # Path constants. THIS_DIR = os.path.dirname(__file__) @@ -36,11 +36,6 @@ 'update_rust.py') BUILD_RUST_PY_PATH = os.path.join(THIS_DIR, '..', '..', 'rust', 'build_rust.py') -# Constants for finding HEAD. -CLANG_URL = 'https://api.github.com/repos/llvm/llvm-project/git/refs/heads/main' -RUST_URL = 'https://api.github.com/repos/rust-lang/rust/git/refs/heads/master' -HEAD_SHA_REGEX = b'"sha":"([^"]+)"' - # Bots where we build Clang + Rust. BUILD_CLANG_BOTS = [ 'linux_upload_clang', @@ -136,12 +131,6 @@ and self.sub_revision == o.sub_revision) -def GetLatestGitHash(url): - with urllib.request.urlopen(url) as response: - m = re.search(HEAD_SHA_REGEX, response.read()) - return m.group(1).decode('utf-8') - - def PatchClangRevision(new_version: ClangVersion) -> ClangVersion: with open(CLANG_UPDATE_PY_PATH) as f: content = f.read() @@ -307,7 +296,7 @@ if args.clang_git_hash: clang_git_hash = args.clang_git_hash else: - clang_git_hash = GetLatestGitHash(CLANG_URL) + clang_git_hash = GetLatestLLVMCommit() # To `GetCommitDescription()`, we need a checkout. On success, the # CheckoutLLVM() makes `LLVM_DIR` be the current working directory, so that # we can GetCommitDescription() without changing directory. @@ -322,7 +311,7 @@ if args.rust_git_hash: rust_git_hash = args.rust_git_hash else: - rust_git_hash = GetLatestGitHash(RUST_URL) + rust_git_hash = GetLatestRustCommit() CheckoutGitRepo("Rust", RUST_GIT_URL, rust_git_hash, RUST_SRC_DIR) rust_version = RustVersion(rust_git_hash, args.rust_sub_revision) os.chdir(CHROMIUM_DIR)
diff --git a/tools/mb/mb_config.pyl b/tools/mb/mb_config.pyl index 95f75587..e4efaf4 100644 --- a/tools/mb/mb_config.pyl +++ b/tools/mb/mb_config.pyl
@@ -1174,6 +1174,7 @@ 'tryserver.chromium.linux': { 'cast-binary-size': 'cast_binary_size', 'chromeos-js-code-coverage': 'chromeos_js_coverage_reclient', + 'chromeos-js-code-coverage-rel': 'chromeos_js_coverage_reclient', 'chromium_presubmit': 'presubmit', 'gpu-fyi-try-lacros-amd-rel': 'gpu_tests_ozone_linux_non_x11_release_trybot_reclient', 'gpu-fyi-try-lacros-intel-rel': 'gpu_tests_ozone_linux_non_x11_release_trybot_reclient',
diff --git a/tools/mb/mb_config_expectations/tryserver.chromium.linux.json b/tools/mb/mb_config_expectations/tryserver.chromium.linux.json index 8a0217b..f791fcf0 100644 --- a/tools/mb/mb_config_expectations/tryserver.chromium.linux.json +++ b/tools/mb/mb_config_expectations/tryserver.chromium.linux.json
@@ -23,6 +23,19 @@ "use_remoteexec": true } }, + "chromeos-js-code-coverage-rel": { + "gn_args": { + "dcheck_always_on": false, + "ffmpeg_branding": "ChromeOS", + "is_component_build": false, + "is_debug": false, + "optimize_webui": false, + "proprietary_codecs": true, + "target_os": "chromeos", + "use_javascript_coverage": true, + "use_remoteexec": true + } + }, "gpu-fyi-try-lacros-amd-rel": { "gn_args": { "dcheck_always_on": true,
diff --git a/tools/metrics/histograms/metadata/histogram_suffixes_list.xml b/tools/metrics/histograms/metadata/histogram_suffixes_list.xml index d6c762f..2f1f321 100644 --- a/tools/metrics/histograms/metadata/histogram_suffixes_list.xml +++ b/tools/metrics/histograms/metadata/histogram_suffixes_list.xml
@@ -5173,7 +5173,6 @@ <suffix name="SMS_FETCH_REQUEST" label="SMS Fetch Request"/> <suffix name="UNKNOWN_MESSAGE" label="Unknown Message"/> <suffix name="WEB_RTC_SIGNALING_FRAME" label="Web RTC Signalling Message"/> - <affected-histogram name="Sharing.MessageHandlerTime"/> <affected-histogram name="Sharing.SendMessageResult"/> <affected-histogram name="Sharing.SendMessageResult.Android"/> <affected-histogram name="Sharing.SendMessageResult.ChromeOS"/>
diff --git a/tools/metrics/histograms/metadata/media/histograms.xml b/tools/metrics/histograms/metadata/media/histograms.xml index 210093a..669c4ad 100644 --- a/tools/metrics/histograms/metadata/media/histograms.xml +++ b/tools/metrics/histograms/metadata/media/histograms.xml
@@ -3266,6 +3266,13 @@ </summary> </histogram> +<histogram name="Media.InitializeRendererTimeout" enum="CallbackTimeoutStatus" + expires_after="2024-04-11"> + <owner>xhwang@chromium.org</owner> + <owner>media-dev@chromium.org</owner> + <summary>The timeout status of Renderer initialization.</summary> +</histogram> + <histogram name="Media.InputErrorMac" enum="OSStatus_Audio" expires_after="never"> <!-- expires-never: essential indicator for audio input stability in Chrome -->
diff --git a/tools/metrics/histograms/metadata/sharing/histograms.xml b/tools/metrics/histograms/metadata/sharing/histograms.xml index 7f64bc4..ebffa56 100644 --- a/tools/metrics/histograms/metadata/sharing/histograms.xml +++ b/tools/metrics/histograms/metadata/sharing/histograms.xml
@@ -127,38 +127,6 @@ </summary> </histogram> -<histogram name="Sharing.DeviceRegistrationResult" - enum="SharingDeviceRegistrationResult" expires_after="M97"> - <owner>knollr@chromium.org</owner> - <owner>peter@chromium.org</owner> - <summary> - Result of Sharing device registration. Logged after Sharing registration is - attempted. - </summary> -</histogram> - -<histogram name="Sharing.DeviceUnregistrationResult" - enum="SharingDeviceRegistrationResult" expires_after="M97"> - <owner>knollr@chromium.org</owner> - <owner>peter@chromium.org</owner> - <summary> - Result of Sharing device un-registration. Logged after Sharing - un-registration is attempted. - </summary> -</histogram> - -<histogram name="Sharing.MessageHandlerTime" units="ms" expires_after="M97"> -<!-- Name completed by histogram_suffix name="SharingMessage" --> - - <owner>mvanouwerkerk@chromium.org</owner> - <owner>knollr@chromium.org</owner> - <summary> - The time from receiving a SharingMessage in SharingFCMHandler until an ack - is sent back. Recorded when SendAckMessage callback is run in - SharingMessageHandler. - </summary> -</histogram> - <histogram name="Sharing.MessageReceivedType" enum="SharingMessageType" expires_after="2023-12-10"> <owner>mvanouwerkerk@chromium.org</owner>
diff --git a/tools/metrics/ukm/ukm.xml b/tools/metrics/ukm/ukm.xml index 4cf7e24..448ede5 100644 --- a/tools/metrics/ukm/ukm.xml +++ b/tools/metrics/ukm/ukm.xml
@@ -235,6 +235,21 @@ </metric> </event> +<event name="Accessibility.ReadAnything.EmptyState"> + <owner>abigailbklein@google.com</owner> + <summary> + Recorded when an empty state is shown in Read Anything. The empty state is + shown whenever distillation fails. When this happens, the user can + "select to distill", meaning they can manually select text in the + main web page they would like to see in reading mode. + </summary> + <metric name="TotalNumSelections"> + <summary> + Total number of selections made. + </summary> + </metric> +</event> + <event name="Accessibility.Renderer"> <owner>aleventhal@chromium.org</owner> <owner>nektar@chromium.org</owner>
diff --git a/ui/aura/demo/demo_main.cc b/ui/aura/demo/demo_main.cc index cfb41faf..387004e 100644 --- a/ui/aura/demo/demo_main.cc +++ b/ui/aura/demo/demo_main.cc
@@ -70,7 +70,7 @@ window_bounds_ = new_bounds; } gfx::NativeCursor GetCursor(const gfx::Point& point) override { - return gfx::kNullCursor; + return gfx::NativeCursor{}; } int GetNonClientComponent(const gfx::Point& point) const override { return HTCAPTION;
diff --git a/ui/aura/test/test_window_delegate.cc b/ui/aura/test/test_window_delegate.cc index 73a686c..d7880590 100644 --- a/ui/aura/test/test_window_delegate.cc +++ b/ui/aura/test/test_window_delegate.cc
@@ -52,7 +52,7 @@ } gfx::NativeCursor TestWindowDelegate::GetCursor(const gfx::Point& point) { - return gfx::kNullCursor; + return gfx::NativeCursor{}; } int TestWindowDelegate::GetNonClientComponent(const gfx::Point& point) const {
diff --git a/ui/aura/window.cc b/ui/aura/window.cc index da42daa..cbad57d 100644 --- a/ui/aura/window.cc +++ b/ui/aura/window.cc
@@ -667,7 +667,7 @@ } gfx::NativeCursor Window::GetCursor(const gfx::Point& point) const { - return delegate_ ? delegate_->GetCursor(point) : gfx::kNullCursor; + return delegate_ ? delegate_->GetCursor(point) : gfx::NativeCursor{}; } void Window::AddObserver(WindowObserver* observer) {
diff --git a/ui/aura_extra/image_window_delegate.cc b/ui/aura_extra/image_window_delegate.cc index 8c3a9f3..772e592 100644 --- a/ui/aura_extra/image_window_delegate.cc +++ b/ui/aura_extra/image_window_delegate.cc
@@ -42,7 +42,7 @@ } gfx::NativeCursor ImageWindowDelegate::GetCursor(const gfx::Point& point) { - return gfx::kNullCursor; + return gfx::NativeCursor{}; } int ImageWindowDelegate::GetNonClientComponent(const gfx::Point& point) const {
diff --git a/ui/color/color_id.h b/ui/color/color_id.h index a8cc3f5c..713dacb 100644 --- a/ui/color/color_id.h +++ b/ui/color/color_id.h
@@ -110,32 +110,34 @@ E_CPONLY(kColorRefNeutralVariant99) \ E_CPONLY(kColorRefNeutralVariant100) \ \ - /* UI material system color tokens */ \ - /* Primary. */ \ - E_CPONLY(kColorSysOnPrimary) \ - E_CPONLY(kColorSysOnPrimaryContainer) \ + /* UI material system color tokens. Id ordering matches UX design spec. */ \ E_CPONLY(kColorSysPrimary) \ + E_CPONLY(kColorSysOnPrimary) \ E_CPONLY(kColorSysPrimaryContainer) \ + E_CPONLY(kColorSysOnPrimaryContainer) \ /* Secondary. */ \ - E_CPONLY(kColorSysOnSecondary) \ - E_CPONLY(kColorSysOnSecondaryContainer) \ E_CPONLY(kColorSysSecondary) \ + E_CPONLY(kColorSysOnSecondary) \ E_CPONLY(kColorSysSecondaryContainer) \ + E_CPONLY(kColorSysOnSecondaryContainer) \ /* Tertiary. */ \ - E_CPONLY(kColorSysOnTertiary) \ - E_CPONLY(kColorSysOnTertiaryContainer) \ E_CPONLY(kColorSysTertiary) \ + E_CPONLY(kColorSysOnTertiary) \ E_CPONLY(kColorSysTertiaryContainer) \ + E_CPONLY(kColorSysOnTertiaryContainer) \ /* Error. */ \ E_CPONLY(kColorSysError) \ - E_CPONLY(kColorSysErrorContainer) \ E_CPONLY(kColorSysOnError) \ + E_CPONLY(kColorSysErrorContainer) \ E_CPONLY(kColorSysOnErrorContainer) \ /* Neutral. */ \ E_CPONLY(kColorSysOnSurface) \ E_CPONLY(kColorSysOnSurfaceVariant) \ E_CPONLY(kColorSysOutline) \ E_CPONLY(kColorSysSurfaceVariant) \ + /* Constant. */\ + E_CPONLY(kColorSysBlack) \ + E_CPONLY(kColorSysWhite) \ /* Inverse. */ \ E_CPONLY(kColorSysInversePrimary) \ E_CPONLY(kColorSysInverseOnSurface) \ @@ -161,7 +163,6 @@ E_CPONLY(kColorSysBase) \ E_CPONLY(kColorSysBaseContainer) \ E_CPONLY(kColorSysBaseContainerElevated) \ - E_CPONLY(kColorSysOnBaseSecondary) \ E_CPONLY(kColorSysOnBaseDivider) \ E_CPONLY(kColorSysHeader) \ E_CPONLY(kColorSysHeaderInactive) \ @@ -181,23 +182,25 @@ E_CPONLY(kColorSysStateFocusHighlight) \ E_CPONLY(kColorSysStateDisabled) \ E_CPONLY(kColorSysStateDisabledContainer) \ - E_CPONLY(kColorSysStateHoverCutout) \ - E_CPONLY(kColorSysStateHoverInverseCutout) \ - E_CPONLY(kColorSysStateOnHeaderHover) \ - E_CPONLY(kColorSysStateHeaderHover) \ E_CPONLY(kColorSysStateHoverDimBlendProtection) \ E_CPONLY(kColorSysStateHoverBrightBlendProtection) \ + E_CPONLY(kColorSysStateOnHeaderHover) \ + E_CPONLY(kColorSysStateHeaderHover) \ + E_CPONLY(kColorSysStateHeaderSelect) \ /* Effects. */ \ E_CPONLY(kColorSysShadow) \ /* Experimentation. */ \ E_CPONLY(kColorSysOmniboxContainer) \ /* Deprecated */ \ E_CPONLY(kColorSysOnBase) \ + E_CPONLY(kColorSysOnBaseSecondary) \ E_CPONLY(kColorSysOnBaseBorder) \ E_CPONLY(kColorSysStateHover) \ E_CPONLY(kColorSysStateFocus) \ E_CPONLY(kColorSysStatePressed) \ E_CPONLY(kColorSysStateDrag) \ + E_CPONLY(kColorSysStateHoverCutout) \ + E_CPONLY(kColorSysStateHoverInverseCutout) \ /* Core color concepts */ \ /* kColorAccent is used in color_provider_css_colors_test.ts. */ \ /* If changing the variable name, the variable name in the test needs to */ \
diff --git a/ui/color/sys_color_mixer.cc b/ui/color/sys_color_mixer.cc index 4ce3066..2b882cb 100644 --- a/ui/color/sys_color_mixer.cc +++ b/ui/color/sys_color_mixer.cc
@@ -116,6 +116,10 @@ : kColorRefNeutralVariant90}; // Inverse. + mixer[kColorSysBlack] = {kColorRefNeutral0}; + mixer[kColorSysWhite] = {kColorRefNeutral100}; + + // Inverse. mixer[kColorSysInversePrimary] = {dark_mode ? kColorRefPrimary40 : kColorRefPrimary80}; mixer[kColorSysInverseOnSurface] = {dark_mode ? kColorRefNeutral10 @@ -125,30 +129,40 @@ mixer[kColorSysSurface] = {dark_mode ? kColorRefNeutral10 : kColorRefNeutral100}; mixer[kColorSysSurface1] = - dark_mode ? GetResultingPaintColor(SetAlpha({kColorRefPrimary80}, 0x0C), - {kColorRefNeutral10}) - : GetResultingPaintColor(SetAlpha({kColorRefPrimary40}, 0x0C), - {kColorRefNeutral99}); + dark_mode ? GetResultingPaintColor( + SetAlpha({SkColorSetRGB(0xD1, 0xE1, 0xFF)}, 0x0C), + {kColorRefNeutral10}) + : GetResultingPaintColor( + SetAlpha({SkColorSetRGB(0x69, 0x91, 0xD6)}, 0x0C), + {kColorRefNeutral99}); mixer[kColorSysSurface2] = - dark_mode ? GetResultingPaintColor(SetAlpha({kColorRefPrimary80}, 0x14), - {kColorRefNeutral10}) - : GetResultingPaintColor(SetAlpha({kColorRefPrimary40}, 0x14), - {kColorRefNeutral99}); + dark_mode ? GetResultingPaintColor( + SetAlpha({SkColorSetRGB(0xD1, 0xE1, 0xFF)}, 0x14), + {kColorRefNeutral10}) + : GetResultingPaintColor( + SetAlpha({SkColorSetRGB(0x69, 0x91, 0xD6)}, 0x14), + {kColorRefNeutral99}); mixer[kColorSysSurface3] = - dark_mode ? GetResultingPaintColor(SetAlpha({kColorRefPrimary80}, 0x1C), - {kColorRefNeutral10}) - : GetResultingPaintColor(SetAlpha({kColorRefPrimary40}, 0x1C), - {kColorRefNeutral99}); + dark_mode ? GetResultingPaintColor( + SetAlpha({SkColorSetRGB(0xD1, 0xE1, 0xFF)}, 0x1C), + {kColorRefNeutral10}) + : GetResultingPaintColor( + SetAlpha({SkColorSetRGB(0x69, 0x91, 0xD6)}, 0x1C), + {kColorRefNeutral99}); mixer[kColorSysSurface4] = - dark_mode ? GetResultingPaintColor(SetAlpha({kColorRefPrimary80}, 0x1E), - {kColorRefNeutral10}) - : GetResultingPaintColor(SetAlpha({kColorRefPrimary40}, 0x1E), - {kColorRefNeutral99}); + dark_mode ? GetResultingPaintColor( + SetAlpha({SkColorSetRGB(0xD1, 0xE1, 0xFF)}, 0x1E), + {kColorRefNeutral10}) + : GetResultingPaintColor( + SetAlpha({SkColorSetRGB(0x69, 0x91, 0xD6)}, 0x1E), + {kColorRefNeutral99}); mixer[kColorSysSurface5] = - dark_mode ? GetResultingPaintColor(SetAlpha({kColorRefPrimary80}, 0x23), - {kColorRefNeutral10}) - : GetResultingPaintColor(SetAlpha({kColorRefPrimary40}, 0x23), - {kColorRefNeutral99}); + dark_mode ? GetResultingPaintColor( + SetAlpha({SkColorSetRGB(0xD1, 0xE1, 0xFF)}, 0x23), + {kColorRefNeutral10}) + : GetResultingPaintColor( + SetAlpha({SkColorSetRGB(0x69, 0x91, 0xD6)}, 0x23), + {kColorRefNeutral99}); // General. mixer[kColorSysOnSurfaceSecondary] = {dark_mode ? kColorRefNeutral80 @@ -184,8 +198,10 @@ mixer[kColorSysHeader] = {dark_mode ? kColorRefNeutral15 : kColorRefPrimary90}; - mixer[kColorSysHeaderInactive] = {dark_mode ? kColorSysSurface1 - : kColorSysSurface3}; + mixer[kColorSysHeaderInactive] = { + dark_mode ? kColorSysSurface1 + : GetResultingPaintColor(SetAlpha({kColorSysHeader}, 0x48), + {kColorSysSurfaceVariant})}; mixer[kColorSysHeaderContainer] = {dark_mode ? kColorRefNeutral25 : kColorRefPrimary95}; mixer[kColorSysHeaderContainerInactive] = {dark_mode ? kColorRefNeutral25 @@ -226,23 +242,17 @@ mixer[kColorSysStateDisabledContainer] = dark_mode ? SetAlpha({kColorRefNeutral90}, 0x1E) : SetAlpha({kColorRefNeutral10}, 0x1E); - mixer[kColorSysStateHoverCutout] = { - dark_mode ? SetAlpha({kColorRefNeutral10}, 0x0F) - : SetAlpha({kColorRefNeutral20}, 0x1F)}; - mixer[kColorSysStateHoverInverseCutout] = { - dark_mode ? SetAlpha({kColorRefNeutral10}, 0x29) - : SetAlpha({kColorRefNeutral10}, 0x0F)}; mixer[kColorSysStateHoverDimBlendProtection] = { dark_mode ? SetAlpha({kColorRefNeutral99}, 0x1A) : SetAlpha({kColorRefPrimary20}, 0x2E)}; mixer[kColorSysStateHoverBrightBlendProtection] = { dark_mode ? SetAlpha({kColorRefNeutral99}, 0x29) : SetAlpha({kColorRefNeutral10}, 0x0F)}; - mixer[kColorSysStateOnHeaderHover] = {dark_mode ? kColorRefSecondary90 : kColorRefPrimary20}; mixer[kColorSysStateHeaderHover] = {dark_mode ? kColorRefSecondary30 : kColorRefPrimary80}; + mixer[kColorSysStateHeaderSelect] = {SetAlpha({kColorSysBase}, 0x9A)}; // Effects. mixer[kColorSysShadow] = {kColorRefNeutral0}; @@ -267,6 +277,12 @@ : SetAlpha({kColorRefNeutral10}, 0x1E); mixer[kColorSysStateDrag] = dark_mode ? SetAlpha({kColorRefNeutral90}, 0x29) : SetAlpha({kColorRefNeutral10}, 0x29); + mixer[kColorSysStateHoverCutout] = { + dark_mode ? SetAlpha({kColorRefNeutral10}, 0x0F) + : SetAlpha({kColorRefNeutral20}, 0x1F)}; + mixer[kColorSysStateHoverInverseCutout] = { + dark_mode ? SetAlpha({kColorRefNeutral10}, 0x29) + : SetAlpha({kColorRefNeutral10}, 0x0F)}; if (key.user_color.has_value()) { AddThemedSysColorOverrides(mixer, key);
diff --git a/ui/display/BUILD.gn b/ui/display/BUILD.gn index 4fb4a862..082c6bc 100644 --- a/ui/display/BUILD.gn +++ b/ui/display/BUILD.gn
@@ -199,6 +199,7 @@ "mac/test/virtual_display_mac_util.h", "mac/test/virtual_display_mac_util.mm", ] + configs += [ "//build/config/compiler:enable_arc" ] } if (is_chromeos_ash) {
diff --git a/ui/display/mac/test/test_screen_mac.mm b/ui/display/mac/test/test_screen_mac.mm index d375464..49cbd9b7 100644 --- a/ui/display/mac/test/test_screen_mac.mm +++ b/ui/display/mac/test/test_screen_mac.mm
@@ -12,11 +12,15 @@ #include "ui/gfx/geometry/rect.h" #include "ui/gfx/geometry/size.h" +#if !defined(__has_feature) || !__has_feature(objc_arc) +#error "This file requires ARC support." +#endif + namespace display { namespace test { TestScreenMac::TestScreenMac(const gfx::Size& size) - : TestScreen(/* create_display = */ false) { + : TestScreen(/*create_display=*/false) { NSScreen* screen = [[NSScreen screens] firstObject]; CGDirectDisplayID display_id = [[screen deviceDescription][@"NSScreenNumber"] unsignedIntValue];
diff --git a/ui/display/mac/test/virtual_display_mac_util.mm b/ui/display/mac/test/virtual_display_mac_util.mm index d52d163..1b762449 100644 --- a/ui/display/mac/test/virtual_display_mac_util.mm +++ b/ui/display/mac/test/virtual_display_mac_util.mm
@@ -12,60 +12,35 @@ #include "base/check.h" #include "base/check_op.h" #include "base/mac/scoped_cftyperef.h" -#include "base/mac/scoped_nsobject.h" +#include "base/strings/sys_string_conversions.h" #include "ui/display/display.h" #include "ui/display/screen.h" #include "ui/gfx/geometry/size.h" +#if !defined(__has_feature) || !__has_feature(objc_arc) +#error "This file requires ARC support." +#endif + // These interfaces were generated from CoreGraphics binaries. API_AVAILABLE(macos(10.14)) -@interface CGVirtualDisplay : NSObject { - unsigned int _vendorID; - unsigned int _productID; - unsigned int _serialNum; - NSString* _name; - struct CGSize _sizeInMillimeters; - unsigned int _maxPixelsWide; - unsigned int _maxPixelsHigh; - struct CGPoint _redPrimary; - struct CGPoint _greenPrimary; - struct CGPoint _bluePrimary; - struct CGPoint _whitePoint; - id _queue; - id _terminationHandler; - unsigned int _displayID; - unsigned int _hiDPI; - NSArray* _modes; -} +@interface CGVirtualDisplay : NSObject -@property(readonly, nonatomic) - unsigned int vendorID; // @synthesize vendorID=_vendorID; -@property(readonly, nonatomic) - unsigned int productID; // @synthesize productID=_productID; -@property(readonly, nonatomic) - unsigned int serialNum; // @synthesize serialNum=_serialNum; -@property(readonly, nonatomic) NSString* name; // @synthesize name=_name; -@property(readonly, nonatomic) struct CGSize - sizeInMillimeters; // @synthesize sizeInMillimeters=_sizeInMillimeters; -@property(readonly, nonatomic) - unsigned int maxPixelsWide; // @synthesize maxPixelsWide=_maxPixelsWide; -@property(readonly, nonatomic) - unsigned int maxPixelsHigh; // @synthesize maxPixelsHigh=_maxPixelsHigh; -@property(readonly, nonatomic) - struct CGPoint redPrimary; // @synthesize redPrimary=_redPrimary; -@property(readonly, nonatomic) - struct CGPoint greenPrimary; // @synthesize greenPrimary=_greenPrimary; -@property(readonly, nonatomic) - struct CGPoint bluePrimary; // @synthesize bluePrimary=_bluePrimary; -@property(readonly, nonatomic) - struct CGPoint whitePoint; // @synthesize whitePoint=_whitePoint; -@property(readonly, nonatomic) id queue; // @synthesize queue=_queue; -@property(readonly, nonatomic) id - terminationHandler; // @synthesize terminationHandler=_terminationHandler; -@property(readonly, nonatomic) - unsigned int displayID; // @synthesize displayID=_displayID; -@property(readonly, nonatomic) unsigned int hiDPI; // @synthesize hiDPI=_hiDPI; -@property(readonly, nonatomic) NSArray* modes; // @synthesize modes=_modes; +@property(readonly, nonatomic) unsigned int vendorID; +@property(readonly, nonatomic) unsigned int productID; +@property(readonly, nonatomic) unsigned int serialNum; +@property(readonly, nonatomic) NSString* name; +@property(readonly, nonatomic) struct CGSize sizeInMillimeters; +@property(readonly, nonatomic) unsigned int maxPixelsWide; +@property(readonly, nonatomic) unsigned int maxPixelsHigh; +@property(readonly, nonatomic) struct CGPoint redPrimary; +@property(readonly, nonatomic) struct CGPoint greenPrimary; +@property(readonly, nonatomic) struct CGPoint bluePrimary; +@property(readonly, nonatomic) struct CGPoint whitePoint; +@property(readonly, nonatomic) id queue; +@property(readonly, nonatomic) id terminationHandler; +@property(readonly, nonatomic) unsigned int displayID; +@property(readonly, nonatomic) unsigned int hiDPI; +@property(readonly, nonatomic) NSArray* modes; - (BOOL)applySettings:(id)arg1; - (void)dealloc; - (id)initWithDescriptor:(id)arg1; @@ -74,45 +49,21 @@ // These interfaces were generated from CoreGraphics binaries. API_AVAILABLE(macos(10.14)) -@interface CGVirtualDisplayDescriptor : NSObject { - unsigned int _vendorID; - unsigned int _productID; - unsigned int _serialNum; - NSString* _name; - struct CGSize _sizeInMillimeters; - unsigned int _maxPixelsWide; - unsigned int _maxPixelsHigh; - struct CGPoint _redPrimary; - struct CGPoint _greenPrimary; - struct CGPoint _bluePrimary; - struct CGPoint _whitePoint; - id _queue; - id _terminationHandler; -} +@interface CGVirtualDisplayDescriptor : NSObject -@property(nonatomic) unsigned int vendorID; // @synthesize vendorID=_vendorID; -@property(nonatomic) - unsigned int productID; // @synthesize productID=_productID; -@property(nonatomic) - unsigned int serialNum; // @synthesize serialNum=_serialNum; -@property(strong, nonatomic) NSString* name; // @synthesize name=_name; -@property(nonatomic) struct CGSize - sizeInMillimeters; // @synthesize sizeInMillimeters=_sizeInMillimeters; -@property(nonatomic) - unsigned int maxPixelsWide; // @synthesize maxPixelsWide=_maxPixelsWide; -@property(nonatomic) - unsigned int maxPixelsHigh; // @synthesize maxPixelsHigh=_maxPixelsHigh; -@property(nonatomic) - struct CGPoint redPrimary; // @synthesize redPrimary=_redPrimary; -@property(nonatomic) - struct CGPoint greenPrimary; // @synthesize greenPrimary=_greenPrimary; -@property(nonatomic) - struct CGPoint bluePrimary; // @synthesize bluePrimary=_bluePrimary; -@property(nonatomic) - struct CGPoint whitePoint; // @synthesize whitePoint=_whitePoint; -@property(retain, nonatomic) id queue; // @synthesize queue=_queue; -@property(copy, nonatomic) id - terminationHandler; // @synthesize terminationHandler=_terminationHandler; +@property(nonatomic) unsigned int vendorID; +@property(nonatomic) unsigned int productID; +@property(nonatomic) unsigned int serialNum; +@property(strong, nonatomic) NSString* name; +@property(nonatomic) struct CGSize sizeInMillimeters; +@property(nonatomic) unsigned int maxPixelsWide; +@property(nonatomic) unsigned int maxPixelsHigh; +@property(nonatomic) struct CGPoint redPrimary; +@property(nonatomic) struct CGPoint greenPrimary; +@property(nonatomic) struct CGPoint bluePrimary; +@property(nonatomic) struct CGPoint whitePoint; +@property(strong, nonatomic) id queue; +@property(copy, nonatomic) id terminationHandler; - (void)dealloc; - (id)init; - (id)dispatchQueue; @@ -122,17 +73,11 @@ // These interfaces were generated from CoreGraphics binaries. API_AVAILABLE(macos(10.14)) -@interface CGVirtualDisplayMode : NSObject { - unsigned int _width; - unsigned int _height; - double _refreshRate; -} +@interface CGVirtualDisplayMode : NSObject -@property(readonly, nonatomic) unsigned int width; // @synthesize width=_width; -@property(readonly, nonatomic) - unsigned int height; // @synthesize height=_height; -@property(readonly, nonatomic) - double refreshRate; // @synthesize refreshRate=_refreshRate; +@property(readonly, nonatomic) unsigned int width; +@property(readonly, nonatomic) unsigned int height; +@property(readonly, nonatomic) double refreshRate; - (id)initWithWidth:(unsigned int)arg1 height:(unsigned int)arg2 refreshRate:(double)arg3; @@ -141,13 +86,10 @@ // These interfaces were generated from CoreGraphics binaries. API_AVAILABLE(macos(10.14)) -@interface CGVirtualDisplaySettings : NSObject { - NSArray* _modes; - unsigned int _hiDPI; -} +@interface CGVirtualDisplaySettings : NSObject -@property(strong, nonatomic) NSArray* modes; // @synthesize modes=_modes; -@property(nonatomic) unsigned int hiDPI; // @synthesize hiDPI=_hiDPI; +@property(strong, nonatomic) NSArray* modes; +@property(nonatomic) unsigned int hiDPI; - (void)dealloc; - (id)init; @@ -158,56 +100,55 @@ static bool g_need_display_removal_workaround = true; // A global singleton that tracks the current set of mocked displays. -std::map<int64_t, base::scoped_nsobject<CGVirtualDisplay>> g_display_map +std::map<int64_t, CGVirtualDisplay * __strong> g_display_map API_AVAILABLE(macos(10.14)); // A helper function for creating virtual display and return CGVirtualDisplay // object. -base::scoped_nsobject<CGVirtualDisplay> CreateVirtualDisplay(int width, - int height, - int ppi, - BOOL hiDPI, - NSString* name) +CGVirtualDisplay* CreateVirtualDisplay(int width, + int height, + int ppi, + BOOL hiDPI, + NSString* name) API_AVAILABLE(macos(10.14)) { - base::scoped_nsobject<CGVirtualDisplaySettings> settings( - [[CGVirtualDisplaySettings alloc] init]); - [settings setHiDPI:hiDPI]; + CGVirtualDisplaySettings* settings = [[CGVirtualDisplaySettings alloc] init]; + settings.hiDPI = hiDPI; - base::scoped_nsobject<CGVirtualDisplayDescriptor> descriptor( - [[CGVirtualDisplayDescriptor alloc] init]); - [descriptor - setQueue:dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0)]; - [descriptor setName:name]; + CGVirtualDisplayDescriptor* descriptor = + [[CGVirtualDisplayDescriptor alloc] init]; + descriptor.queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0); + descriptor.name = name; // See System Preferences > Displays > Color > Open Profile > Apple display // native information - [descriptor setWhitePoint:CGPointMake(0.3125, 0.3291)]; - [descriptor setBluePrimary:CGPointMake(0.1494, 0.0557)]; - [descriptor setGreenPrimary:CGPointMake(0.2559, 0.6983)]; - [descriptor setRedPrimary:CGPointMake(0.6797, 0.3203)]; - [descriptor setMaxPixelsHigh:height]; - [descriptor setMaxPixelsWide:width]; - [descriptor - setSizeInMillimeters:CGSizeMake(25.4 * width / ppi, 25.4 * height / ppi)]; - [descriptor setSerialNum:0]; - [descriptor setProductID:0]; - [descriptor setVendorID:0]; + descriptor.whitePoint = CGPointMake(0.3125, 0.3291); + descriptor.bluePrimary = CGPointMake(0.1494, 0.0557); + descriptor.greenPrimary = CGPointMake(0.2559, 0.6983); + descriptor.redPrimary = CGPointMake(0.6797, 0.3203); + descriptor.maxPixelsHigh = height; + descriptor.maxPixelsWide = width; + descriptor.sizeInMillimeters = + CGSizeMake(25.4 * width / ppi, 25.4 * height / ppi); + descriptor.serialNum = 0; + descriptor.productID = 0; + descriptor.vendorID = 0; - base::scoped_nsobject<CGVirtualDisplay> display( - [[CGVirtualDisplay alloc] initWithDescriptor:descriptor]); + CGVirtualDisplay* display = + [[CGVirtualDisplay alloc] initWithDescriptor:descriptor]; - if ([settings hiDPI]) { + if (settings.hiDPI) { width /= 2; height /= 2; } - base::scoped_nsobject<CGVirtualDisplayMode> mode([[CGVirtualDisplayMode alloc] - initWithWidth:width - height:height - refreshRate:60]); - [settings setModes:@[ mode ]]; + CGVirtualDisplayMode* mode = + [[CGVirtualDisplayMode alloc] initWithWidth:width + height:height + refreshRate:60]; + settings.modes = @[ mode ]; - if (![display applySettings:settings]) - return base::scoped_nsobject<CGVirtualDisplay>(); + if (![display applySettings:settings]) { + return nil; + } return display; } @@ -316,17 +257,17 @@ CGDisplayCopyAllDisplayModes(display_id, nullptr)); DCHECK(display_modes); - CGDisplayModeRef prefered_display_mode = nullptr; + CGDisplayModeRef preferred_display_mode = nullptr; for (CFIndex i = 0; i < CFArrayGetCount(display_modes); ++i) { CGDisplayModeRef display_mode = (CGDisplayModeRef)CFArrayGetValueAtIndex(display_modes, i); if (gfx::Size(CGDisplayModeGetWidth(display_mode), CGDisplayModeGetHeight(display_mode)) == size) { - prefered_display_mode = display_mode; + preferred_display_mode = display_mode; break; } } - DCHECK(prefered_display_mode); + DCHECK(preferred_display_mode); uint32_t expected_changed_metrics = display::DisplayObserver::DISPLAY_METRIC_BOUNDS | @@ -338,7 +279,7 @@ // This operation is always synchronous. The function doesn’t return until the // mode switch is complete. CGError result = - CGDisplaySetDisplayMode(display_id, prefered_display_mode, nullptr); + CGDisplaySetDisplayMode(display_id, preferred_display_mode, nullptr); DCHECK_EQ(result, kCGErrorSuccess); // Wait for `display::Screen` and `display::Display` structures to be updated. @@ -359,19 +300,17 @@ height(height), ppi(ppi), hiDPI(hiDPI), - description([NSString - stringWithCString:description.c_str() - encoding:[NSString defaultCStringEncoding]]) {} + description(base::SysUTF8ToNSString(description)) {} bool IsValid() const { - return width > 0 && height > 0 && ppi > 0 && [description length] > 0; + return width > 0 && height > 0 && ppi > 0 && description.length > 0; } int width; int height; int ppi; BOOL hiDPI; - base::scoped_nsobject<NSString> description; + NSString* __strong description; }; VirtualDisplayMacUtil::VirtualDisplayMacUtil() { @@ -390,10 +329,10 @@ NSString* display_name = [NSString stringWithFormat:@"Virtual Display #%lld", display_id]; - base::scoped_nsobject<CGVirtualDisplay> display = CreateVirtualDisplay( + CGVirtualDisplay* display = CreateVirtualDisplay( display_params.width, display_params.height, display_params.ppi, display_params.hiDPI, display_name); - DCHECK(display.get()); + DCHECK(display); // TODO(crbug.com/1126278): Please remove this log or replace it with // [D]CHECK() ASAP when the TEST is stable. @@ -401,7 +340,7 @@ << " - display id: " << display_id << ". CreateVirtualDisplay success."; - int64_t id = [display displayID]; + int64_t id = display.displayID; DCHECK_NE(id, 0u); WaitForDisplay(id, /*added=*/true);
diff --git a/ui/gfx/android/android_surface_control_compat.cc b/ui/gfx/android/android_surface_control_compat.cc index 30ea3665..9d9c77f 100644 --- a/ui/gfx/android/android_surface_control_compat.cc +++ b/ui/gfx/android/android_surface_control_compat.cc
@@ -867,11 +867,10 @@ uint64_t data_space = ADATASPACE_UNKNOWN; float extended_range_brightness_ratio = 1.f; float desired_brightness_ratio = 1.f; - if (metadata && metadata->extended_range_brightness && + if (metadata && metadata->extended_range && SurfaceControlMethods::Get() .ASurfaceTransaction_setExtendedRangeBrightnessFn) { - desired_brightness_ratio = - metadata->extended_range_brightness->desired_ratio; + desired_brightness_ratio = metadata->extended_range->desired_headroom; } ColorSpaceToADataSpace(color_space, desired_brightness_ratio, data_space, extended_range_brightness_ratio);
diff --git a/ui/gfx/display_color_spaces.cc b/ui/gfx/display_color_spaces.cc index 10df605..5bb4ab67 100644 --- a/ui/gfx/display_color_spaces.cc +++ b/ui/gfx/display_color_spaces.cc
@@ -205,4 +205,14 @@ return !(*this == other); } +// static +bool DisplayColorSpaces::EqualExceptForHdrParameters( + const DisplayColorSpaces& a, + const DisplayColorSpaces& b) { + DisplayColorSpaces b_with_a_params = b; + b_with_a_params.sdr_max_luminance_nits_ = a.sdr_max_luminance_nits_; + b_with_a_params.hdr_max_luminance_relative_ = a.hdr_max_luminance_relative_; + return a == b_with_a_params; +} + } // namespace gfx
diff --git a/ui/gfx/display_color_spaces.h b/ui/gfx/display_color_spaces.h index 8763a08f..3b7da56 100644 --- a/ui/gfx/display_color_spaces.h +++ b/ui/gfx/display_color_spaces.h
@@ -130,6 +130,11 @@ bool operator==(const DisplayColorSpaces& other) const; bool operator!=(const DisplayColorSpaces& other) const; + // Return true if the two parameters are equal except for their + // `hdr_max_luminance_relative_` and `sdr_max_luminance_nits_` members. + static bool EqualExceptForHdrParameters(const DisplayColorSpaces& a, + const DisplayColorSpaces& b); + private: // Serialization of DisplayColorSpaces directly accesses members. friend struct IPC::ParamTraits<gfx::DisplayColorSpaces>;
diff --git a/ui/gfx/hdr_metadata.cc b/ui/gfx/hdr_metadata.cc index c9606a8..ff486d91 100644 --- a/ui/gfx/hdr_metadata.cc +++ b/ui/gfx/hdr_metadata.cc
@@ -34,6 +34,14 @@ return ss.str(); } +std::string HdrMetadataExtendedRange::ToString() const { + std::stringstream ss; + ss << std::fixed << std::setprecision(4) << "{" + << "current_headroom:" << current_headroom << ", " + << "desired_headroom:" << desired_headroom << "}"; + return ss.str(); +} + // static HDRMetadata HDRMetadata::PopulateUnspecifiedWithDefaults( const absl::optional<gfx::HDRMetadata>& hdr_metadata) { @@ -72,11 +80,9 @@ if (cta_861_3) { ss << "cta_861_3:" << cta_861_3->ToString() << ", "; } - if (extended_range_brightness) { - ss << "cur_ratio: " << extended_range_brightness->current_buffer_ratio; - ss << "desired_ratio: " << extended_range_brightness->desired_ratio; + if (extended_range) { + ss << "extended_range:" << extended_range->ToString() << ", "; } - ss << "}"; return ss.str(); }
diff --git a/ui/gfx/hdr_metadata.h b/ui/gfx/hdr_metadata.h index 0477b30..05e9754e 100644 --- a/ui/gfx/hdr_metadata.h +++ b/ui/gfx/hdr_metadata.h
@@ -90,24 +90,29 @@ }; // HDR metadata for extended range color spaces. -struct COLOR_SPACE_EXPORT ExtendedRangeBrightness { - // The current hdr/sdr ratio of the current buffer. For example if the buffer - // was rendered with a target SDR whitepoint of 100 nits and a max display - // brightness of 200 nits, this should be set to 2.0f. - float current_buffer_ratio = 1.0f; +struct COLOR_SPACE_EXPORT HdrMetadataExtendedRange { + constexpr HdrMetadataExtendedRange() = default; + constexpr HdrMetadataExtendedRange(float current_headroom, + float desired_headroom) + : current_headroom(current_headroom), + desired_headroom(desired_headroom) {} - // The desired hdr/sdr ratio. This can be used to communicate the max desired - // brightness range. This is similar to the "max luminance" value in other HDR - // metadata formats, but represented as a ratio of the target SDR whitepoint - // to the max display brightness. - float desired_ratio = 1.0f; + // The HDR headroom of the contents of the current buffer. + float current_headroom = 1.f; - bool operator==(const ExtendedRangeBrightness& rhs) const { - return (current_buffer_ratio == rhs.current_buffer_ratio && - desired_ratio == rhs.desired_ratio); + // The desired HDR headroom of the content in the current buffer. This may be + // greater than `current_headroom` if the content in the current buffer had + // to be tonemapped to fit into `current_headroom`. + float desired_headroom = 1.f; + + std::string ToString() const; + + bool operator==(const HdrMetadataExtendedRange& rhs) const { + return (current_headroom == rhs.current_headroom && + desired_headroom == rhs.desired_headroom); } - bool operator!=(const ExtendedRangeBrightness& rhs) const { + bool operator!=(const HdrMetadataExtendedRange& rhs) const { return !(*this == rhs); } }; @@ -119,7 +124,7 @@ // Brightness points for extended range color spaces. // NOTE: Is not serialized over IPC. - absl::optional<ExtendedRangeBrightness> extended_range_brightness; + absl::optional<HdrMetadataExtendedRange> extended_range; HDRMetadata() = default; HDRMetadata(const HdrMetadataSmpteSt2086& smpte_st_2086, @@ -134,8 +139,7 @@ bool IsValid() const { return (cta_861_3 && cta_861_3->IsValid()) || - (smpte_st_2086 && smpte_st_2086->IsValid()) || - extended_range_brightness; + (smpte_st_2086 && smpte_st_2086->IsValid()) || extended_range; } // Return a copy of `hdr_metadata` with its `smpte_st_2086` fully @@ -151,7 +155,7 @@ bool operator==(const HDRMetadata& rhs) const { return cta_861_3 == rhs.cta_861_3 && smpte_st_2086 == rhs.smpte_st_2086 && - extended_range_brightness == rhs.extended_range_brightness; + extended_range == rhs.extended_range; } bool operator!=(const HDRMetadata& rhs) const { return !(*this == rhs); }
diff --git a/ui/gfx/mojom/BUILD.gn b/ui/gfx/mojom/BUILD.gn index 3cca6a9..82d95c7 100644 --- a/ui/gfx/mojom/BUILD.gn +++ b/ui/gfx/mojom/BUILD.gn
@@ -449,6 +449,10 @@ cpp = "::gfx::HdrMetadataSmpteSt2086" }, { + mojom = "gfx.mojom.HdrMetadataExtendedRange" + cpp = "::gfx::HdrMetadataExtendedRange" + }, + { mojom = "gfx.mojom.HDRMetadata" cpp = "::gfx::HDRMetadata" },
diff --git a/ui/gfx/mojom/hdr_metadata.mojom b/ui/gfx/mojom/hdr_metadata.mojom index ff15d97a..4a70fde1 100644 --- a/ui/gfx/mojom/hdr_metadata.mojom +++ b/ui/gfx/mojom/hdr_metadata.mojom
@@ -26,8 +26,16 @@ float luminance_min; }; +// Mojo equivalent of gfx::HdrMetadataExtendedRange. No validation is done on +// any of these values during serialization. +struct HdrMetadataExtendedRange { + float current_headroom; + float desired_headroom; +}; + // Mojo equivalent of gfx::HDRMetadata. struct HDRMetadata { HdrMetadataSmpteSt2086? smpte_st_2086; HdrMetadataCta861_3? cta_861_3; + HdrMetadataExtendedRange? extended_range; };
diff --git a/ui/gfx/mojom/hdr_metadata_mojom_traits.cc b/ui/gfx/mojom/hdr_metadata_mojom_traits.cc index d6adae0..3949188 100644 --- a/ui/gfx/mojom/hdr_metadata_mojom_traits.cc +++ b/ui/gfx/mojom/hdr_metadata_mojom_traits.cc
@@ -26,6 +26,15 @@ return true; } +bool StructTraits<gfx::mojom::HdrMetadataExtendedRangeDataView, + gfx::HdrMetadataExtendedRange>:: + Read(gfx::mojom::HdrMetadataExtendedRangeDataView data, + gfx::HdrMetadataExtendedRange* output) { + output->current_headroom = data.current_headroom(); + output->desired_headroom = data.desired_headroom(); + return true; +} + bool StructTraits<gfx::mojom::HDRMetadataDataView, gfx::HDRMetadata>::Read( gfx::mojom::HDRMetadataDataView data, gfx::HDRMetadata* output) { @@ -35,6 +44,9 @@ if (!data.ReadSmpteSt2086(&output->smpte_st_2086)) { return false; } + if (!data.ReadExtendedRange(&output->extended_range)) { + return false; + } return true; }
diff --git a/ui/gfx/mojom/hdr_metadata_mojom_traits.h b/ui/gfx/mojom/hdr_metadata_mojom_traits.h index 215838d..90416f2 100644 --- a/ui/gfx/mojom/hdr_metadata_mojom_traits.h +++ b/ui/gfx/mojom/hdr_metadata_mojom_traits.h
@@ -71,6 +71,20 @@ }; template <> +struct StructTraits<gfx::mojom::HdrMetadataExtendedRangeDataView, + gfx::HdrMetadataExtendedRange> { + static float current_headroom(const gfx::HdrMetadataExtendedRange& input) { + return input.current_headroom; + } + static float desired_headroom(const gfx::HdrMetadataExtendedRange& input) { + return input.desired_headroom; + } + + static bool Read(gfx::mojom::HdrMetadataExtendedRangeDataView data, + gfx::HdrMetadataExtendedRange* output); +}; + +template <> struct StructTraits<gfx::mojom::HDRMetadataDataView, gfx::HDRMetadata> { static const absl::optional<gfx::HdrMetadataCta861_3>& cta_861_3( const gfx::HDRMetadata& input) { @@ -80,6 +94,10 @@ const gfx::HDRMetadata& input) { return input.smpte_st_2086; } + static const absl::optional<gfx::HdrMetadataExtendedRange>& extended_range( + const gfx::HDRMetadata& input) { + return input.extended_range; + } static bool Read(gfx::mojom::HDRMetadataDataView data, gfx::HDRMetadata* output);
diff --git a/ui/gfx/mojom/mojom_traits_unittest.cc b/ui/gfx/mojom/mojom_traits_unittest.cc index 052a27f..cad38d4 100644 --- a/ui/gfx/mojom/mojom_traits_unittest.cc +++ b/ui/gfx/mojom/mojom_traits_unittest.cc
@@ -11,11 +11,15 @@ #include "mojo/public/cpp/bindings/receiver_set.h" #include "mojo/public/cpp/bindings/remote.h" #include "mojo/public/cpp/test_support/test_utils.h" +#include "skia/ext/skcolorspace_primaries.h" #include "testing/gtest/include/gtest/gtest.h" #include "ui/gfx/geometry/rrect_f.h" #include "ui/gfx/geometry/transform.h" +#include "ui/gfx/hdr_metadata.h" #include "ui/gfx/mojom/accelerated_widget_mojom_traits.h" #include "ui/gfx/mojom/buffer_types_mojom_traits.h" +#include "ui/gfx/mojom/hdr_metadata.mojom.h" +#include "ui/gfx/mojom/hdr_metadata_mojom_traits.h" #include "ui/gfx/mojom/presentation_feedback.mojom.h" #include "ui/gfx/mojom/presentation_feedback_mojom_traits.h" #include "ui/gfx/mojom/traits_test_service.mojom.h" @@ -330,4 +334,27 @@ EXPECT_EQ(input, output); } +TEST_F(StructTraitsTest, HDRMetadata) { + // Test an empty input/output. + gfx::HDRMetadata input; + gfx::HDRMetadata output; + mojo::test::SerializeAndDeserialize<gfx::mojom::HDRMetadata>(input, output); + EXPECT_EQ(input, output); + + // Include CTA 861.3. + input.cta_861_3.emplace(123, 456); + mojo::test::SerializeAndDeserialize<gfx::mojom::HDRMetadata>(input, output); + EXPECT_EQ(input, output); + + // Include SMPTE ST 2086. + input.smpte_st_2086.emplace(SkNamedPrimariesExt::kRec2020, 789, 123); + mojo::test::SerializeAndDeserialize<gfx::mojom::HDRMetadata>(input, output); + EXPECT_EQ(input, output); + + // Include extended range. + input.extended_range.emplace(10.f, 4.f); + mojo::test::SerializeAndDeserialize<gfx::mojom::HDRMetadata>(input, output); + EXPECT_EQ(input, output); +} + } // namespace gfx
diff --git a/ui/gfx/native_widget_types.cc b/ui/gfx/native_widget_types.cc index 89bd8a4..ac66b86 100644 --- a/ui/gfx/native_widget_types.cc +++ b/ui/gfx/native_widget_types.cc
@@ -4,11 +4,10 @@ #include "ui/gfx/native_widget_types.h" -// TODO(https://crbug.com/1443009): ui::PlatformEvent has its own version of -// this function. When unifying, remove one of these copies. - namespace gfx { +// TODO(https://crbug.com/1443009): ui::PlatformEvent has its own version of +// this function. When unifying, remove one of these copies. GFX_EXPORT bool IsNativeEventValid(const NativeEvent& event) { #if BUILDFLAG(IS_APPLE) return event.IsValid();
diff --git a/ui/gfx/native_widget_types.h b/ui/gfx/native_widget_types.h index 5199fc6c..de74d89 100644 --- a/ui/gfx/native_widget_types.h +++ b/ui/gfx/native_widget_types.h
@@ -52,6 +52,9 @@ // TODO(https://crbug.com/1443009): Both gfx::NativeEvent and ui::PlatformEvent // are typedefs for native event types on different platforms, but they're // slightly different and used in different places. They should be merged. +// +// TODO(https://crbug.com/1149906): gfx::NativeCursor is ui::Cursor in Aura; +// perhaps remove gfx::NativeCursor and use ui::Cursor everywhere? #if defined(USE_AURA) namespace aura { @@ -75,27 +78,21 @@ @class UIImage; @class UIView; @class UIWindow; -@class UITextField; #else class UIImage; class UIView; class UIWindow; -class UITextField; #endif // __OBJC__ #elif BUILDFLAG(IS_MAC) #ifdef __OBJC__ -@class NSCursor; @class NSImage; @class NSView; @class NSWindow; -@class NSTextField; #else struct objc_object; -class NSCursor; class NSImage; class NSView; class NSWindow; -class NSTextField; #endif // __OBJC__ #endif @@ -134,7 +131,7 @@ constexpr NativeView kNullNativeView = nullptr; constexpr NativeWindow kNullNativeWindow = nullptr; #elif BUILDFLAG(IS_MAC) -using NativeCursor = NSCursor*; +using NativeCursor = base::apple::OwnedNSCursor; using NativeEvent = base::apple::OwnedNSEvent; // NativeViews and NativeWindows on macOS are not necessarily in the same // process as the NSViews and NSWindows that they represent. Require an explicit @@ -249,14 +246,6 @@ // Returns if the event is valid. GFX_EXPORT bool IsNativeEventValid(const NativeEvent& event); -// A constant value to indicate that gfx::NativeCursor refers to no cursor. -#if defined(USE_AURA) -const ui::mojom::CursorType kNullCursor = - static_cast<ui::mojom::CursorType>(-1); -#else -const NativeCursor kNullCursor = static_cast<NativeCursor>(nullptr); -#endif - // Note: for test_shell we're packing a pointer into the NativeViewId. So, if // you make it a type which is smaller than a pointer, you have to fix // test_shell.
diff --git a/ui/gl/delegated_ink_point_renderer_gpu.h b/ui/gl/delegated_ink_point_renderer_gpu.h index 3bc033a..6030104 100644 --- a/ui/gl/delegated_ink_point_renderer_gpu.h +++ b/ui/gl/delegated_ink_point_renderer_gpu.h
@@ -247,8 +247,8 @@ TRACE_EVENT_WITH_FLOW1( "delegated_ink_trails", "DelegatedInkPointRendererGpu::SetDelegatedInkTrailStartPoint", - TRACE_ID_GLOBAL(metadata_->trace_id()), TRACE_EVENT_FLAG_FLOW_IN, - "metadata", metadata_->ToString()); + TRACE_ID_GLOBAL(metadata->trace_id()), TRACE_EVENT_FLAG_FLOW_IN, + "metadata", metadata->ToString()); DCHECK(ink_visual_); DCHECK(delegated_ink_trail_);
diff --git a/ui/views/controls/styled_label.cc b/ui/views/controls/styled_label.cc index 5fc2b10..2270679 100644 --- a/ui/views/controls/styled_label.cc +++ b/ui/views/controls/styled_label.cc
@@ -573,8 +573,11 @@ style_info.text_style.value_or(default_text_style_)); } - if (style_info.override_color) + if (style_info.override_color_id) { + result->SetEnabledColorId(style_info.override_color_id.value()); + } else if (style_info.override_color) { result->SetEnabledColor(style_info.override_color.value()); + } if (!style_info.tooltip.empty()) result->SetTooltipText(style_info.tooltip); if (!style_info.accessible_name.empty())
diff --git a/ui/views/controls/styled_label.h b/ui/views/controls/styled_label.h index 2757c861..f692edd 100644 --- a/ui/views/controls/styled_label.h +++ b/ui/views/controls/styled_label.h
@@ -65,6 +65,9 @@ // DEPRECATED: Use TextStyle. absl::optional<SkColor> override_color; + // Overrides the text color given by |text_style| for this range. + absl::optional<ui::ColorId> override_color_id; + // A callback to be called when this link is clicked. Only used if // |text_style| is style::STYLE_LINK. Link::ClickedCallback callback;
diff --git a/ui/views/examples/BUILD.gn b/ui/views/examples/BUILD.gn index a3b79f56..3e7c8d6 100644 --- a/ui/views/examples/BUILD.gn +++ b/ui/views/examples/BUILD.gn
@@ -100,6 +100,8 @@ "toggle_button_example.h", "tree_view_example.cc", "tree_view_example.h", + "typography_example.cc", + "typography_example.h", "vector_example.cc", "vector_example.h", "views_examples_export.h",
diff --git a/ui/views/examples/create_examples.cc b/ui/views/examples/create_examples.cc index b524934..db8d376d 100644 --- a/ui/views/examples/create_examples.cc +++ b/ui/views/examples/create_examples.cc
@@ -45,6 +45,7 @@ #include "ui/views/examples/throbber_example.h" #include "ui/views/examples/toggle_button_example.h" #include "ui/views/examples/tree_view_example.h" +#include "ui/views/examples/typography_example.h" #include "ui/views/examples/vector_example.h" #include "ui/views/examples/widget_example.h" @@ -97,6 +98,7 @@ examples.push_back(std::make_unique<ToggleButtonExample>()); examples.push_back(std::make_unique<ThrobberExample>()); examples.push_back(std::make_unique<TreeViewExample>()); + examples.push_back(std::make_unique<TypographyExample>()); examples.push_back(std::make_unique<VectorExample>()); examples.push_back(std::make_unique<WidgetExample>()); return examples;
diff --git a/ui/views/examples/typography_example.cc b/ui/views/examples/typography_example.cc new file mode 100644 index 0000000..38fc82a1 --- /dev/null +++ b/ui/views/examples/typography_example.cc
@@ -0,0 +1,149 @@ +// Copyright 2023 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "ui/views/examples/typography_example.h" + +#include <memory> +#include <utility> + +#include "ui/base/l10n/l10n_util.h" +#include "ui/views/controls/label.h" +#include "ui/views/controls/scroll_view.h" +#include "ui/views/examples/grit/views_examples_resources.h" +#include "ui/views/layout/box_layout_view.h" +#include "ui/views/layout/table_layout_view.h" +#include "ui/views/metadata/view_factory.h" +#include "ui/views/view_class_properties.h" + +namespace views::examples { + +TypographyExample::TypographyExample() + : ExampleBase( + l10n_util::GetStringUTF8(IDS_TYPOGRAPHY_SELECT_LABEL).c_str()) {} + +TypographyExample::~TypographyExample() = default; + +void TypographyExample::CreateExampleView(View* container) { + container->SetUseDefaultFillLayout(true); + + std::u16string headline_text = + l10n_util::GetStringUTF16(IDS_TYPOGRAPHY_HEADLINE_PLACEHOLDER_TEXT); + std::u16string body_text = + l10n_util::GetStringUTF16(IDS_TYPOGRAPHY_BODY_PLACEHOLDER_TEXT); + + auto headlines = + Builder<TableLayoutView>() + .AddColumn(LayoutAlignment::kStart, LayoutAlignment::kStart, + TableLayout::kFixedSize, + TableLayout::ColumnSize::kUsePreferred, 0, 0) + .AddPaddingColumn(TableLayout::kFixedSize, 4) + .AddColumn(LayoutAlignment::kStart, LayoutAlignment::kStart, + TableLayout::kFixedSize, TableLayout::ColumnSize::kFixed, + 600, 0) + .AddRows(5, TableLayout::kFixedSize, 0) + .AddChildren( + Builder<Label>().SetText(u"HeadLine1"), + Builder<Label>() + .SetText(headline_text) + .SetMultiLine(true) + .SetHorizontalAlignment(gfx::HorizontalAlignment::ALIGN_LEFT) + .SetTextStyle(style::STYLE_HEADLINE_1), + Builder<Label>().SetText(u"HeadLine2"), + Builder<Label>() + .SetText(headline_text) + .SetMultiLine(true) + .SetHorizontalAlignment(gfx::HorizontalAlignment::ALIGN_LEFT) + .SetTextStyle(style::STYLE_HEADLINE_2), + Builder<Label>().SetText(u"HeadLine3"), + Builder<Label>() + .SetText(headline_text) + .SetMultiLine(true) + .SetHorizontalAlignment(gfx::HorizontalAlignment::ALIGN_LEFT) + .SetTextStyle(style::STYLE_HEADLINE_3), + Builder<Label>().SetText(u"HeadLine4"), + Builder<Label>() + .SetText(headline_text) + .SetMultiLine(true) + .SetHorizontalAlignment(gfx::HorizontalAlignment::ALIGN_LEFT) + .SetTextStyle(style::STYLE_HEADLINE_4), + Builder<Label>().SetText(u"HeadLine5"), + Builder<Label>() + .SetText(headline_text) + .SetMultiLine(true) + .SetHorizontalAlignment(gfx::HorizontalAlignment::ALIGN_LEFT) + .SetTextStyle(style::STYLE_HEADLINE_5)) + .Build(); + + auto bodies = + Builder<TableLayoutView>() + .AddColumn(LayoutAlignment::kStart, LayoutAlignment::kStart, + TableLayout::kFixedSize, + TableLayout::ColumnSize::kUsePreferred, 0, 0) + .AddPaddingColumn(TableLayout::kFixedSize, 4) + .AddColumn(LayoutAlignment::kStart, LayoutAlignment::kStart, + TableLayout::kFixedSize, TableLayout::ColumnSize::kFixed, + 220, 0) + .AddRows(8, TableLayout::kFixedSize, 0) + .AddChildren( + Builder<Label>().SetText(u"Body1"), + Builder<Label>() + .SetText(body_text) + .SetMultiLine(true) + .SetHorizontalAlignment(gfx::HorizontalAlignment::ALIGN_LEFT) + .SetTextStyle(style::STYLE_BODY_1), + Builder<Label>().SetText(u"Body2"), + Builder<Label>() + .SetText(body_text) + .SetMultiLine(true) + .SetHorizontalAlignment(gfx::HorizontalAlignment::ALIGN_LEFT) + .SetTextStyle(style::STYLE_BODY_2), + Builder<Label>().SetText(u"Body3"), + Builder<Label>() + .SetText(body_text) + .SetMultiLine(true) + .SetHorizontalAlignment(gfx::HorizontalAlignment::ALIGN_LEFT) + .SetTextStyle(style::STYLE_BODY_3), + Builder<Label>().SetText(u"Body4"), + Builder<Label>() + .SetText(body_text) + .SetMultiLine(true) + .SetHorizontalAlignment(gfx::HorizontalAlignment::ALIGN_LEFT) + .SetTextStyle(style::STYLE_BODY_5), + Builder<Label>().SetText(u"Body5"), + Builder<Label>() + .SetText(body_text) + .SetMultiLine(true) + .SetHorizontalAlignment(gfx::HorizontalAlignment::ALIGN_LEFT) + .SetTextStyle(style::STYLE_BODY_5), + Builder<Label>().SetText(u"Caption"), + Builder<Label>() + .SetText(body_text) + .SetMultiLine(true) + .SetHorizontalAlignment(gfx::HorizontalAlignment::ALIGN_LEFT) + .SetTextStyle(style::STYLE_CAPTION), + Builder<Label>().SetText(u"Button"), + Builder<Label>() + .SetText(body_text) + .SetMultiLine(true) + .SetHorizontalAlignment(gfx::HorizontalAlignment::ALIGN_LEFT) + .SetTextStyle(style::STYLE_BUTTON), + Builder<Label>().SetText(u"Label"), + Builder<Label>() + .SetText(body_text) + .SetMultiLine(true) + .SetHorizontalAlignment(gfx::HorizontalAlignment::ALIGN_LEFT) + .SetTextStyle(style::STYLE_LABEL)) + .Build(); + + auto wrapper = std::make_unique<BoxLayoutView>(); + wrapper->SetOrientation(BoxLayout::Orientation::kVertical); + wrapper->AddChildView(std::move(headlines)); + wrapper->AddChildView(std::move(bodies)); + + auto scroll_view = std::make_unique<ScrollView>(); + scroll_view->SetContents(std::move(wrapper)); + container->AddChildView(std::move(scroll_view)); +} + +} // namespace views::examples
diff --git a/ui/views/examples/typography_example.h b/ui/views/examples/typography_example.h new file mode 100644 index 0000000..d3069f2a --- /dev/null +++ b/ui/views/examples/typography_example.h
@@ -0,0 +1,27 @@ +// Copyright 2023 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef UI_VIEWS_EXAMPLES_TYPOGRAPHY_EXAMPLE_H_ +#define UI_VIEWS_EXAMPLES_TYPOGRAPHY_EXAMPLE_H_ + +#include "ui/views/examples/example_base.h" + +namespace views::examples { + +class VIEWS_EXAMPLES_EXPORT TypographyExample : public ExampleBase { + public: + TypographyExample(); + + TypographyExample(const TypographyExample&) = delete; + TypographyExample& operator=(const TypographyExample&) = delete; + + ~TypographyExample() override; + + // ExampleBase: + void CreateExampleView(View* container) override; +}; + +} // namespace views::examples + +#endif // UI_VIEWS_EXAMPLES_TYPOGRAPHY_EXAMPLE_H_
diff --git a/ui/views/examples/views_examples_resources.grd b/ui/views/examples/views_examples_resources.grd index 49c5d0a..3ce083c 100644 --- a/ui/views/examples/views_examples_resources.grd +++ b/ui/views/examples/views_examples_resources.grd
@@ -523,6 +523,17 @@ Edit </message> + <!-- typography example --> + <message translateable="false" name="IDS_TYPOGRAPHY_SELECT_LABEL"> + Typography + </message> + <message translateable="false" name="IDS_TYPOGRAPHY_HEADLINE_PLACEHOLDER_TEXT"> + The quick brown fox jumps over the lazy dog + </message> + <message translateable="false" name="IDS_TYPOGRAPHY_BODY_PLACEHOLDER_TEXT"> + The quick brown fox jumps over the lazy dog Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. + </message> + <!-- vector example --> <message translateable="false" name="IDS_VECTOR_FILE_SELECT_LABEL"> Enter a file or folder to read
diff --git a/ui/views/style/typography.cc b/ui/views/style/typography.cc index 6dc8e9d..e3d774db 100644 --- a/ui/views/style/typography.cc +++ b/ui/views/style/typography.cc
@@ -37,6 +37,28 @@ style); } +int GetFontSizeDeltaIgnoringUserOrLocaleSettings(int desired_font_size) { + int size_delta = desired_font_size - gfx::PlatformFont::kDefaultBaseFontSize; + ui::ResourceBundle& bundle = ui::ResourceBundle::GetSharedInstance(); + gfx::FontList base_font = bundle.GetFontListWithDelta(size_delta); + + // The ResourceBundle's default font may not actually be kDefaultBaseFontSize + // if, for example, the user has changed their system font sizes or the + // current locale has been overridden to use a different default font size. + // Adjust for the difference in default font sizes. + int user_or_locale_delta = 0; + if (base_font.GetFontSize() != desired_font_size) { + user_or_locale_delta = desired_font_size - base_font.GetFontSize(); + base_font = bundle.GetFontListWithDelta(size_delta + user_or_locale_delta); + } + DCHECK_EQ(desired_font_size, base_font.GetFontSize()); + + // To ensure a subsequent request from the ResourceBundle ignores the delta + // due to user or locale settings, include it here. + return base_font.GetFontSize() - gfx::PlatformFont::kDefaultBaseFontSize + + user_or_locale_delta; +} + int GetLineHeight(int context, int style) { ValidateContextAndStyle(context, style); return LayoutProvider::Get()->GetTypographyProvider().GetLineHeight(context,
diff --git a/ui/views/style/typography.h b/ui/views/style/typography.h index 68924119..774743d 100644 --- a/ui/views/style/typography.h +++ b/ui/views/style/typography.h
@@ -7,6 +7,7 @@ #include "ui/base/resource/resource_bundle.h" #include "ui/color/color_id.h" +#include "ui/gfx/platform_font.h" #include "ui/views/views_export.h" namespace gfx { @@ -118,6 +119,24 @@ // Active tab in a tabbed pane. STYLE_TAB_ACTIVE, + // CR2023 typography tokens. + // These styles override the style specified by TextContext. + STYLE_OVERRIDE_TYPOGRAPHY_START, + STYLE_HEADLINE_1, + STYLE_HEADLINE_2, + STYLE_HEADLINE_3, + STYLE_HEADLINE_4, + STYLE_HEADLINE_5, + STYLE_BODY_1, + STYLE_BODY_2, + STYLE_BODY_3, + STYLE_BODY_4, + STYLE_BODY_5, + STYLE_CAPTION, + STYLE_BUTTON, + STYLE_LABEL, + STYLE_OVERRIDE_TYPOGRAPHY_END, + // Embedders must start TextStyle enum values from here. VIEWS_TEXT_STYLE_END }; @@ -133,6 +152,9 @@ VIEWS_EXPORT ui::ColorId GetColorId(int context, int style); +VIEWS_EXPORT int GetFontSizeDeltaIgnoringUserOrLocaleSettings( + int desired_font_size); + } // namespace views::style #endif // UI_VIEWS_STYLE_TYPOGRAPHY_H_
diff --git a/ui/views/style/typography_provider.cc b/ui/views/style/typography_provider.cc index 7e63a91..c5e163f 100644 --- a/ui/views/style/typography_provider.cc +++ b/ui/views/style/typography_provider.cc
@@ -4,8 +4,11 @@ #include "ui/views/style/typography_provider.h" +#include <map> #include <string> +#include "base/containers/contains.h" +#include "base/containers/fixed_flat_map.h" #include "build/build_config.h" #include "ui/base/default_style.h" #include "ui/base/resource/resource_bundle.h" @@ -114,6 +117,61 @@ case style::STYLE_EMPHASIZED_SECONDARY: details.weight = gfx::Font::Weight::SEMIBOLD; break; + case style::STYLE_HEADLINE_1: + details.size_delta = + style::GetFontSizeDeltaIgnoringUserOrLocaleSettings(24); + details.weight = gfx::Font::Weight::MEDIUM; + break; + case style::STYLE_HEADLINE_2: + details.size_delta = + style::GetFontSizeDeltaIgnoringUserOrLocaleSettings(20); + details.weight = gfx::Font::Weight::MEDIUM; + break; + case style::STYLE_HEADLINE_3: + details.size_delta = + style::GetFontSizeDeltaIgnoringUserOrLocaleSettings(18); + details.weight = gfx::Font::Weight::MEDIUM; + break; + case style::STYLE_HEADLINE_4: + details.size_delta = + style::GetFontSizeDeltaIgnoringUserOrLocaleSettings(16); + details.weight = gfx::Font::Weight::MEDIUM; + break; + case style::STYLE_HEADLINE_5: + details.size_delta = + style::GetFontSizeDeltaIgnoringUserOrLocaleSettings(14); + details.weight = gfx::Font::Weight::MEDIUM; + break; + case style::STYLE_BODY_1: + details.size_delta = + style::GetFontSizeDeltaIgnoringUserOrLocaleSettings(16); + details.weight = gfx::Font::Weight::NORMAL; + break; + case style::STYLE_BODY_2: + details.size_delta = + style::GetFontSizeDeltaIgnoringUserOrLocaleSettings(14); + details.weight = gfx::Font::Weight::NORMAL; + break; + case style::STYLE_BODY_3: + details.size_delta = + style::GetFontSizeDeltaIgnoringUserOrLocaleSettings(13); + details.weight = gfx::Font::Weight::NORMAL; + break; + case style::STYLE_BODY_4: + details.size_delta = + style::GetFontSizeDeltaIgnoringUserOrLocaleSettings(12); + details.weight = gfx::Font::Weight::NORMAL; + break; + case style::STYLE_BODY_5: + details.size_delta = + style::GetFontSizeDeltaIgnoringUserOrLocaleSettings(11); + details.weight = gfx::Font::Weight::NORMAL; + break; + case style::STYLE_CAPTION: + details.size_delta = + style::GetFontSizeDeltaIgnoringUserOrLocaleSettings(9); + details.weight = gfx::Font::Weight::NORMAL; + break; } return details; @@ -169,6 +227,24 @@ } int TypographyProvider::GetLineHeight(int context, int style) const { + constexpr auto line_heights = base::MakeFixedFlatMap<int, int>({ + {style::STYLE_HEADLINE_1, 32}, + {style::STYLE_HEADLINE_2, 24}, + {style::STYLE_HEADLINE_3, 24}, + {style::STYLE_HEADLINE_4, 24}, + {style::STYLE_HEADLINE_5, 20}, + {style::STYLE_BODY_1, 24}, + {style::STYLE_BODY_2, 20}, + {style::STYLE_BODY_3, 20}, + {style::STYLE_BODY_4, 16}, + {style::STYLE_BODY_5, 16}, + {style::STYLE_CAPTION, 12}, + }); + + if (base::Contains(line_heights, style)) { + return line_heights.at(style); + } + return GetFont(context, style).GetHeight(); }
diff --git a/ui/views/widget/desktop_aura/desktop_native_widget_aura.cc b/ui/views/widget/desktop_aura/desktop_native_widget_aura.cc index 1dcb402..0877e00 100644 --- a/ui/views/widget/desktop_aura/desktop_native_widget_aura.cc +++ b/ui/views/widget/desktop_aura/desktop_native_widget_aura.cc
@@ -301,9 +301,7 @@ : desktop_window_tree_host_(nullptr), content_window_(new aura::Window(this)), - native_widget_delegate_(delegate->AsWidget()->GetWeakPtr()), - - cursor_(gfx::kNullCursor) { + native_widget_delegate_(delegate->AsWidget()->GetWeakPtr()) { aura::client::SetFocusChangeObserver(content_window_, this); wm::SetActivationChangeObserver(content_window_, this); }
diff --git a/ui/webui/resources/cr_components/color_change_listener/colors_css_updater.ts b/ui/webui/resources/cr_components/color_change_listener/colors_css_updater.ts index 1910687..5552598 100644 --- a/ui/webui/resources/cr_components/color_change_listener/colors_css_updater.ts +++ b/ui/webui/resources/cr_components/color_change_listener/colors_css_updater.ts
@@ -115,6 +115,7 @@ } } +// <if expr="chromeos_ash"> /** * Starts listening for ColorProvider changes from the browser and updates the * top level HTML document whenever changes occur. @@ -122,3 +123,4 @@ export function startColorChangeUpdater() { ColorChangeUpdater.forDocument().start(); } +// </if>