diff --git a/DEPS b/DEPS index 23c3bc00..32adcd7 100644 --- a/DEPS +++ b/DEPS
@@ -308,19 +308,19 @@ # 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': '1b72d90ed5116a9d5d6be01ee558f3069957cd13', + 'skia_revision': '1643bb8a6a909e7fdc3e85f7939ecd2eed038745', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling V8 # and whatever else without interference from each other. - 'v8_revision': '4af3cc0bf6aac83198f5f430eb881d8824d5ad81', + 'v8_revision': '6e0e49b85051bddbad2fa43fc9b4f1ae3ab2a5c2', # 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': '6f03727305fc696f62f4490e35131fc1f7a4d44a', + 'angle_revision': '055d4c2fc3b3518326b63ec17eab03f69adac0a2', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling SwiftShader # and whatever else without interference from each other. - 'swiftshader_revision': '4dbbcd05ce72795a0fff806562e7a4bc519deee3', + 'swiftshader_revision': '666fb5f89f5a17e4f730fb0c93cc89bb7365250b', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling PDFium # and whatever else without interference from each other. @@ -335,7 +335,7 @@ # Three lines of non-changing comments so that # the commit queue can handle CLs rolling Fuchsia sdk # and whatever else without interference from each other. - 'fuchsia_version': 'version:9.20220928.2.1', + 'fuchsia_version': 'version:9.20220929.1.1', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling google-toolbox-for-mac # and whatever else without interference from each other. @@ -387,7 +387,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': '6f28dd5245070c0b63f43d27d42b1fbbf18cb845', + 'devtools_frontend_revision': '10f0a340eb0a9492a805c3c532497347eef09331', # 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. @@ -423,11 +423,11 @@ # Three lines of non-changing comments so that # the commit queue can handle CLs rolling feed # and whatever else without interference from each other. - 'dawn_revision': 'f6772c1332325a0bd2be760ed4092fcf794f3c6f', + 'dawn_revision': 'b764a15c2389e5f46e3ab2e75481740ec42ba224', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling feed # and whatever else without interference from each other. - 'quiche_revision': '4c1091388bcde3159196c9503d73a496009e78a5', + 'quiche_revision': '3e90101e4b8f960b29ff93a8de8d4c37740a506b', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling ios_webkit # and whatever else without interference from each other. @@ -447,7 +447,7 @@ # Three lines of non-changing comments so that # the commit queue can handle CLs rolling libavif # and whatever else without interference from each other. - 'libavif_revision': 'e0954237c40ff75dbc79991ea4774853ad09bed7', + 'libavif_revision': 'cd0bb358f83d01867f0fa53079470043618c9af5', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling nearby # and whatever else without interference from each other. @@ -491,7 +491,7 @@ # If you change this, also update the libc++ revision in # //buildtools/deps_revisions.gni. - 'libcxx_revision': '11bdb46a42a9947797fb273821769a59fa2becbb', + 'libcxx_revision': '5ee02b299379896f90faa88f576be98c61156f26', # GN CIPD package version. 'gn_version': 'git_revision:cc28efe62ef0c2fb32455f414a29c4a55bb7fbc4', @@ -805,7 +805,7 @@ Var('chromium_git') + '/external/github.com/toji/webvr.info.git' + '@' + 'c58ae99b9ff9e2aa4c524633519570bf33536248', 'src/docs/website': { - 'url': Var('chromium_git') + '/website.git' + '@' + '0f2bfe1e33befa23e452cbb310bf43d8af2ecb60', + 'url': Var('chromium_git') + '/website.git' + '@' + 'b9ca3384fa254e5d0bfecc99537f89d006ec01b9', }, 'src/ios/third_party/earl_grey2/src': { @@ -1199,7 +1199,7 @@ # Tools used when building Chrome for Chrome OS. This affects both the Simple # Chrome workflow, as well as the chromeos-chrome ebuild. 'src/third_party/chromite': { - 'url': Var('chromium_git') + '/chromiumos/chromite.git' + '@' + '9e04782ad06bb63e469959244bb90c224eb4b41d', + 'url': Var('chromium_git') + '/chromiumos/chromite.git' + '@' + '44ed5becfd7ae1a63c88070a23e6528961bbada5', 'condition': 'checkout_chromeos', }, @@ -1233,7 +1233,7 @@ Var('chromium_git') + '/devtools/devtools-frontend' + '@' + Var('devtools_frontend_revision'), 'src/third_party/devtools-frontend-internal': { - 'url': 'https://chrome-internal.googlesource.com/devtools/devtools-internal.git' + '@' + '44f34ded43f78c8e6f3f1722a7bf3574c0d27dff', + 'url': 'https://chrome-internal.googlesource.com/devtools/devtools-internal.git' + '@' + '2103bdd5c65b68b4d8c68b5e0545cd9602c9d13d', 'condition': 'checkout_src_internal', }, @@ -1645,7 +1645,7 @@ }, 'src/third_party/perfetto': - Var('android_git') + '/platform/external/perfetto.git' + '@' + '0f0f1ffa169ed3be5c0e61443fb319df380634f0', + Var('android_git') + '/platform/external/perfetto.git' + '@' + 'be1ac15a7380afc310b1a7eeb7b941525fdf0b53', 'src/third_party/perl': { 'url': Var('chromium_git') + '/chromium/deps/perl.git' + '@' + '6f3e5028eb65d0b4c5fdd792106ac4c84eee1eb3', @@ -1903,7 +1903,7 @@ Var('chromium_git') + '/v8/v8.git' + '@' + Var('v8_revision'), 'src-internal': { - 'url': 'https://chrome-internal.googlesource.com/chrome/src-internal.git@24eed1e54db858be536bfbc339e0325d7135f358', + 'url': 'https://chrome-internal.googlesource.com/chrome/src-internal.git@895841716b7f41442bf29b37d24405788ca7895d', 'condition': 'checkout_src_internal', }, @@ -1933,7 +1933,7 @@ 'packages': [ { 'package': 'chromeos_internal/apps/help_app/app', - 'version': 'Z_2FPzp80OEqjyi3S7fVcN483QmVqNiJz4MhAOGN92gC', + 'version': 'W1uYgk2OV6uUYDY61zydFOyDmMJnom75jGmAz91V0hQC', }, ], 'condition': 'checkout_chromeos and checkout_src_internal', @@ -1944,7 +1944,7 @@ 'packages': [ { 'package': 'chromeos_internal/apps/media_app/app', - 'version': 'PaiRQaKUYT2t-qryevUhOflAvdNxw7I1mf5WwaOVo1kC', + 'version': '-175YH83BENX1QhaDhvMX2HeTXah_MzCAhXTffTqV4MC', }, ], 'condition': 'checkout_chromeos and checkout_src_internal',
diff --git a/ash/accessibility/chromevox/touch_exploration_controller_unittest.cc b/ash/accessibility/chromevox/touch_exploration_controller_unittest.cc index 561c0f91..4e06524 100644 --- a/ash/accessibility/chromevox/touch_exploration_controller_unittest.cc +++ b/ash/accessibility/chromevox/touch_exploration_controller_unittest.cc
@@ -1184,9 +1184,9 @@ TEST_F(TouchExplorationTest, GestureSwipePortrit) { // Rotate the window 90-degrees counter-clockwise. - root_window()->GetHost()->SetRootTransform( - gfx::Transform(0, 1, 0, 0, -1, 0, 0, root_window()->bounds().height(), 0, - 0, 0, 0, 0, 0, 0, 0)); + root_window()->GetHost()->SetRootTransform(gfx::Transform::RowMajor( + 0, 1, 0, 0, -1, 0, 0, root_window()->bounds().height(), 0, 0, 0, 0, 0, 0, + 0, 0)); SwitchTouchExplorationMode(true);
diff --git a/ash/ambient/ui/media_string_view.cc b/ash/ambient/ui/media_string_view.cc index 68951a18..a8d727f 100644 --- a/ash/ambient/ui/media_string_view.cc +++ b/ash/ambient/ui/media_string_view.cc
@@ -44,6 +44,63 @@ namespace { +// A layer delegate used for mask layer, with left and right gradient fading out +// zones. +class FadeoutLayerDelegate : public ui::LayerDelegate { + public: + FadeoutLayerDelegate() : layer_(ui::LAYER_TEXTURED) { + layer_.set_delegate(this); + layer_.SetFillsBoundsOpaquely(false); + } + + ~FadeoutLayerDelegate() override { layer_.set_delegate(nullptr); } + + ui::Layer* layer() { return &layer_; } + + private: + // ui::LayerDelegate: + void OnPaintLayer(const ui::PaintContext& context) override { + const gfx::Size& size = layer()->size(); + gfx::Rect left_rect(0, 0, kMediaStringGradientWidthDip, size.height()); + gfx::Rect right_rect(size.width() - kMediaStringGradientWidthDip, 0, + kMediaStringGradientWidthDip, size.height()); + + views::PaintInfo paint_info = + views::PaintInfo::CreateRootPaintInfo(context, size); + const auto& prs = paint_info.paint_recording_size(); + + // Pass the scale factor when constructing PaintRecorder so the MaskLayer + // size is not incorrectly rounded (see https://crbug.com/921274). + ui::PaintRecorder recorder(context, paint_info.paint_recording_size(), + static_cast<float>(prs.width()) / size.width(), + static_cast<float>(prs.height()) / size.height(), + nullptr); + + gfx::Canvas* canvas = recorder.canvas(); + // Clear the canvas. + canvas->DrawColor(SK_ColorBLACK, SkBlendMode::kSrc); + // Draw left gradient zone. + cc::PaintFlags flags; + flags.setBlendMode(SkBlendMode::kSrc); + flags.setAntiAlias(false); + flags.setShader(gfx::CreateGradientShader( + gfx::Point(), gfx::Point(kMediaStringGradientWidthDip, 0), + SK_ColorTRANSPARENT, SK_ColorBLACK)); + canvas->DrawRect(left_rect, flags); + + // Draw right gradient zone. + flags.setShader(gfx::CreateGradientShader( + gfx::Point(size.width() - kMediaStringGradientWidthDip, 0), + gfx::Point(size.width(), 0), SK_ColorBLACK, SK_ColorTRANSPARENT)); + canvas->DrawRect(right_rect, flags); + } + + void OnDeviceScaleFactorChanged(float old_device_scale_factor, + float new_device_scale_factor) override {} + + ui::Layer layer_; +}; + // Typography. constexpr char16_t kMiddleDotSeparator[] = u" • "; @@ -232,28 +289,17 @@ void MediaStringView::UpdateMaskLayer() { if (!NeedToAnimate()) { - media_text_container_->layer()->SetGradientMask( - gfx::LinearGradient::GetEmpty()); + media_text_container_->layer()->SetMaskLayer(nullptr); return; } - // Invalid container width. - if (media_text_container_->layer()->size().width() == 0) { - media_text_container_->layer()->SetGradientMask( - gfx::LinearGradient::GetEmpty()); - return; + if (!fadeout_layer_delegate_) { + fadeout_layer_delegate_ = std::make_unique<FadeoutLayerDelegate>(); + fadeout_layer_delegate_->layer()->SetBounds( + media_text_container_->layer()->bounds()); } - - if (media_text_container_->layer()->gradient_mask().IsEmpty()) { - float fade_position = static_cast<float>(kMediaStringGradientWidthDip) / - media_text_container_->layer()->size().width(); - gfx::LinearGradient gradient_mask(/*angle=*/0); - gradient_mask.AddStep(/*fraction=*/0, /*alpha=*/0); - gradient_mask.AddStep(fade_position, 255); - gradient_mask.AddStep(1 - fade_position, 255); - gradient_mask.AddStep(1, 0); - media_text_container_->layer()->SetGradientMask(gradient_mask); - } + media_text_container_->layer()->SetMaskLayer( + fadeout_layer_delegate_->layer()); } bool MediaStringView::NeedToAnimate() const {
diff --git a/ash/ambient/ui/media_string_view.h b/ash/ambient/ui/media_string_view.h index 636c7f1..f6553b32 100644 --- a/ash/ambient/ui/media_string_view.h +++ b/ash/ambient/ui/media_string_view.h
@@ -23,6 +23,10 @@ namespace ash { +namespace { +class FadeoutLayerDelegate; +} + // Container for displaying ongoing media information, including the name of the // media and the artist, formatted with a proceding music note symbol and a // middle dot separator. @@ -101,6 +105,8 @@ // With an extra copy of media info text for scrolling animation. views::Label* media_text_ = nullptr; + std::unique_ptr<FadeoutLayerDelegate> fadeout_layer_delegate_; + // Used to receive updates to the active media controller. mojo::Remote<media_session::mojom::MediaController> media_controller_remote_; mojo::Receiver<media_session::mojom::MediaControllerObserver>
diff --git a/ash/ambient/ui/media_string_view_unittest.cc b/ash/ambient/ui/media_string_view_unittest.cc index c881fd2..fc3c010d 100644 --- a/ash/ambient/ui/media_string_view_unittest.cc +++ b/ash/ambient/ui/media_string_view_unittest.cc
@@ -278,8 +278,7 @@ EXPECT_LT(GetMediaStringViewTextLabel()->GetPreferredSize().width(), kMediaStringMaxWidthDip); - EXPECT_TRUE( - GetMediaStringViewTextContainer()->layer()->gradient_mask().IsEmpty()); + EXPECT_FALSE(GetMediaStringViewTextContainer()->layer()->layer_mask_layer()); } TEST_F(MediaStringViewTest, HasMaskLayerWithLongText) { @@ -299,8 +298,7 @@ EXPECT_GT(GetMediaStringViewTextLabel()->GetPreferredSize().width(), kMediaStringMaxWidthDip); - EXPECT_FALSE( - GetMediaStringViewTextContainer()->layer()->gradient_mask().IsEmpty()); + EXPECT_TRUE(GetMediaStringViewTextContainer()->layer()->layer_mask_layer()); } TEST_F(MediaStringViewTest, MaskLayerShouldUpdate) { @@ -320,8 +318,7 @@ EXPECT_LT(GetMediaStringViewTextLabel()->GetPreferredSize().width(), kMediaStringMaxWidthDip); - EXPECT_TRUE( - GetMediaStringViewTextContainer()->layer()->gradient_mask().IsEmpty()); + EXPECT_FALSE(GetMediaStringViewTextContainer()->layer()->layer_mask_layer()); // Change to long text. metadata.title = u"A super duper long title"; @@ -334,8 +331,7 @@ EXPECT_GT(GetMediaStringViewTextLabel()->GetPreferredSize().width(), kMediaStringMaxWidthDip); - EXPECT_FALSE( - GetMediaStringViewTextContainer()->layer()->gradient_mask().IsEmpty()); + EXPECT_TRUE(GetMediaStringViewTextContainer()->layer()->layer_mask_layer()); // Change to short text. metadata.title = u"title"; @@ -348,8 +344,7 @@ EXPECT_LT(GetMediaStringViewTextLabel()->GetPreferredSize().width(), kMediaStringMaxWidthDip); - EXPECT_TRUE( - GetMediaStringViewTextContainer()->layer()->gradient_mask().IsEmpty()); + EXPECT_FALSE(GetMediaStringViewTextContainer()->layer()->layer_mask_layer()); } TEST_F(MediaStringViewTest, ShowWhenMediaIsPlaying) {
diff --git a/ash/app_list/views/app_list_bubble_apps_page.cc b/ash/app_list/views/app_list_bubble_apps_page.cc index c87f094..18cd12b2 100644 --- a/ash/app_list/views/app_list_bubble_apps_page.cc +++ b/ash/app_list/views/app_list_bubble_apps_page.cc
@@ -11,6 +11,7 @@ #include <utility> #include "ash/app_list/app_list_model_provider.h" +#include "ash/app_list/app_list_util.h" #include "ash/app_list/app_list_view_delegate.h" #include "ash/app_list/model/app_list_model.h" #include "ash/app_list/views/app_list_keyboard_controller.h" @@ -493,6 +494,10 @@ } void AppListBubbleAppsPage::DisableFocusForShowingActiveFolder(bool disabled) { + toggle_continue_section_button_->SetEnabled(!disabled); + // Prevent container items from being accessed by ChromeVox. + SetViewIgnoredForAccessibility(continue_label_container_, disabled); + continue_section_->DisableFocusForShowingActiveFolder(disabled); recent_apps_->DisableFocusForShowingActiveFolder(disabled); if (toast_container_)
diff --git a/ash/app_list/views/app_list_bubble_view_unittest.cc b/ash/app_list/views/app_list_bubble_view_unittest.cc index 21fa08e..0f3cc95 100644 --- a/ash/app_list/views/app_list_bubble_view_unittest.cc +++ b/ash/app_list/views/app_list_bubble_view_unittest.cc
@@ -1275,7 +1275,14 @@ EXPECT_FALSE(GetFocusedView()) << GetFocusedViewName(); } +// Verifies that keyboard focus stays inside an open folder. If this test breaks +// then one of the DisableFocusForShowingActiveFolder() methods needs to be +// updated to include the incorrectly focused view. TEST_F(AppListBubbleViewTest, PressingTabMovesFocusInsideFolder) { + // Ensure all sections are showing, so the test verifies that none of these + // sections (or the hide continue section button) take focus. + AddContinueSuggestionResult(4); + AddRecentApps(5); AddFolderWithApps(3); ShowAppList();
diff --git a/ash/app_list/views/app_list_nudge_controller.cc b/ash/app_list/views/app_list_nudge_controller.cc index 8598d5a..7ef72aa 100644 --- a/ash/app_list/views/app_list_nudge_controller.cc +++ b/ash/app_list/views/app_list_nudge_controller.cc
@@ -84,7 +84,7 @@ int AppListNudgeController::GetShownCount(PrefService* prefs, NudgeType type) { const base::Value::Dict& dictionary = prefs->GetDict(GetPrefPath(type)); - return dictionary.FindIntByDottedPath(kReorderNudgeShownCount).value_or(0); + return dictionary.FindInt(kReorderNudgeShownCount).value_or(0); } // static @@ -124,8 +124,8 @@ return; // Record the reorder action so that the nudge view won't be showing anymore. - DictionaryPrefUpdate update(prefs, prefs::kAppListReorderNudge); - update->SetBoolPath(kReorderNudgeConfirmed, true); + ScopedDictPrefUpdate update(prefs, prefs::kAppListReorderNudge); + update->Set(kReorderNudgeConfirmed, true); } void AppListNudgeController::SetPrivacyNoticeAcceptedPref(bool accepted) { @@ -134,9 +134,9 @@ return; { - DictionaryPrefUpdate privacy_pref_update( + ScopedDictPrefUpdate privacy_pref_update( prefs, prefs::kLauncherFilesPrivacyNotice); - privacy_pref_update->SetBoolKey(kPrivacyNoticeAcceptedKey, accepted); + privacy_pref_update->Set(kPrivacyNoticeAcceptedKey, accepted); } } @@ -145,9 +145,9 @@ if (!prefs) return; - DictionaryPrefUpdate privacy_pref_update(prefs, + ScopedDictPrefUpdate privacy_pref_update(prefs, prefs::kLauncherFilesPrivacyNotice); - privacy_pref_update->SetBoolKey(kPrivacyNoticeShownKey, shown); + privacy_pref_update->Set(kPrivacyNoticeShownKey, shown); } bool AppListNudgeController::IsPrivacyNoticeAccepted() const { @@ -230,8 +230,8 @@ return; // Record the nudge as confirmed so that it will not show up again. - DictionaryPrefUpdate update(prefs, prefs::kAppListReorderNudge); - update->SetBoolPath(kReorderNudgeConfirmed, true); + ScopedDictPrefUpdate update(prefs, prefs::kAppListReorderNudge); + update->Set(kReorderNudgeConfirmed, true); } void AppListNudgeController::UpdateCurrentNudgeStateInPrefs( @@ -260,7 +260,7 @@ // Handle the case where the nudge is not active to the users. switch (current_nudge_) { case NudgeType::kReorderNudge: { - DictionaryPrefUpdate update(prefs, prefs::kAppListReorderNudge); + ScopedDictPrefUpdate update(prefs, prefs::kAppListReorderNudge); base::TimeDelta shown_duration = base::Time::Now() - current_nudge_show_timestamp_; @@ -286,15 +286,15 @@ } void AppListNudgeController::MaybeIncrementShownCountInPrefs( - DictionaryPrefUpdate& update, + ScopedDictPrefUpdate& update, base::TimeDelta duration) { // Only increment the shown count if the nudge changed to invisible state and // the nudge was shown long enough to the user before the nudge became // invisible. Note that if the nudge is inactive but visible, it doesn't count // as showing once to the user. if (!is_visible_ && is_nudge_considered_as_shown_) { - update->SetIntPath(kReorderNudgeShownCount, - GetShownCount(GetPrefs(), NudgeType::kReorderNudge) + 1); + update->Set(kReorderNudgeShownCount, + GetShownCount(GetPrefs(), NudgeType::kReorderNudge) + 1); } }
diff --git a/ash/app_list/views/app_list_nudge_controller.h b/ash/app_list/views/app_list_nudge_controller.h index 727deba..045824e 100644 --- a/ash/app_list/views/app_list_nudge_controller.h +++ b/ash/app_list/views/app_list_nudge_controller.h
@@ -110,7 +110,7 @@ private: // If the nudge is hidden and the showing duration is long enough, increments // the shown count in prefs. - void MaybeIncrementShownCountInPrefs(DictionaryPrefUpdate& update, + void MaybeIncrementShownCountInPrefs(ScopedDictPrefUpdate& update, base::TimeDelta duration); // The timestamp when the current nudge started showing.
diff --git a/ash/clipboard/clipboard_nudge_controller.cc b/ash/clipboard/clipboard_nudge_controller.cc index 8406d1a..dbe8916 100644 --- a/ash/clipboard/clipboard_nudge_controller.cc +++ b/ash/clipboard/clipboard_nudge_controller.cc
@@ -164,9 +164,9 @@ void ClipboardNudgeController::OnActiveUserPrefServiceChanged( PrefService* prefs) { // Reset the nudge prefs so that the nudge can be shown again. - DictionaryPrefUpdate update(prefs, prefs::kMultipasteNudges); - update->SetIntPath(kShownCount, 0); - update->SetPath(kLastTimeShown, base::TimeToValue(base::Time())); + ScopedDictPrefUpdate update(prefs, prefs::kMultipasteNudges); + update->Set(kShownCount, 0); + update->Set(kLastTimeShown, base::TimeToValue(base::Time())); } void ClipboardNudgeController::ShowNudge(ClipboardNudgeType nudge_type) { @@ -213,9 +213,9 @@ if (!prefs) return; const int shown_count = GetShownCount(prefs); - DictionaryPrefUpdate update(prefs, prefs::kMultipasteNudges); - update->SetIntPath(kShownCount, shown_count + 1); - update->SetPath(kLastTimeShown, base::TimeToValue(GetTime())); + ScopedDictPrefUpdate update(prefs, prefs::kMultipasteNudges); + update->Set(kShownCount, shown_count + 1); + update->Set(kLastTimeShown, base::TimeToValue(GetTime())); } void ClipboardNudgeController::OnClipboardHistoryMenuShown() {
diff --git a/ash/components/arc/metrics/stability_metrics_manager.cc b/ash/components/arc/metrics/stability_metrics_manager.cc index b6956a4f..505a489 100644 --- a/ash/components/arc/metrics/stability_metrics_manager.cc +++ b/ash/components/arc/metrics/stability_metrics_manager.cc
@@ -71,8 +71,7 @@ void StabilityMetricsManager::ResetMetrics() { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); - DictionaryPrefUpdate update(local_state_, prefs::kStabilityMetrics); - update->DictClear(); + local_state_->SetDict(prefs::kStabilityMetrics, base::Value::Dict()); } absl::optional<bool> StabilityMetricsManager::GetArcEnabledState() { @@ -84,8 +83,8 @@ void StabilityMetricsManager::SetArcEnabledState(bool enabled) { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); - DictionaryPrefUpdate update(local_state_, prefs::kStabilityMetrics); - update->SetBoolKey(kArcEnabledStateKey, enabled); + ScopedDictPrefUpdate update(local_state_, prefs::kStabilityMetrics); + update->Set(kArcEnabledStateKey, enabled); } absl::optional<NativeBridgeType> @@ -105,9 +104,8 @@ void StabilityMetricsManager::SetArcNativeBridgeType( NativeBridgeType native_bridge_type) { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); - DictionaryPrefUpdate update(local_state_, prefs::kStabilityMetrics); - update->SetIntKey(kArcNativeBridgeTypeKey, - static_cast<int>(native_bridge_type)); + ScopedDictPrefUpdate update(local_state_, prefs::kStabilityMetrics); + update->Set(kArcNativeBridgeTypeKey, static_cast<int>(native_bridge_type)); } } // namespace arc
diff --git a/ash/controls/contextual_tooltip.cc b/ash/controls/contextual_tooltip.cc index f11a6482..a8c553a 100644 --- a/ash/controls/contextual_tooltip.cc +++ b/ash/controls/contextual_tooltip.cc
@@ -217,15 +217,16 @@ void HandleNudgeShown(PrefService* prefs, TooltipType type) { const int shown_count = GetShownCount(prefs, type); - DictionaryPrefUpdate update(prefs, prefs::kContextualTooltips); - update->SetIntPath(GetPath(type, kShownCount), shown_count + 1); - update->SetPath(GetPath(type, kLastTimeShown), base::TimeToValue(GetTime())); + ScopedDictPrefUpdate update(prefs, prefs::kContextualTooltips); + update->SetByDottedPath(GetPath(type, kShownCount), shown_count + 1); + update->SetByDottedPath(GetPath(type, kLastTimeShown), + base::TimeToValue(GetTime())); } void HandleGesturePerformed(PrefService* prefs, TooltipType type) { const int success_count = GetSuccessCount(prefs, type); - DictionaryPrefUpdate update(prefs, prefs::kContextualTooltips); - update->SetIntPath(GetPath(type, kSuccessCount), success_count + 1); + ScopedDictPrefUpdate update(prefs, prefs::kContextualTooltips); + update->SetByDottedPath(GetPath(type, kSuccessCount), success_count + 1); } void SetDragHandleNudgeDisabledForHiddenShelf(bool nudge_disabled) { @@ -238,12 +239,12 @@ void ClearPrefs() { DCHECK(Shell::Get()->session_controller()->GetLastActiveUserPrefService()); - DictionaryPrefUpdate update( + ScopedDictPrefUpdate update( Shell::Get()->session_controller()->GetLastActiveUserPrefService(), prefs::kContextualTooltips); - base::Value* nudges_dict = update.Get(); - if (nudges_dict && !nudges_dict->DictEmpty()) - nudges_dict->DictClear(); + base::Value::Dict& nudges_dict = update.Get(); + if (!nudges_dict.empty()) + nudges_dict.clear(); } void OverrideClockForTesting(base::Clock* test_clock) {
diff --git a/ash/detachable_base/detachable_base_handler.cc b/ash/detachable_base/detachable_base_handler.cc index a6af79d..9a8afb71 100644 --- a/ash/detachable_base/detachable_base_handler.cc +++ b/ash/detachable_base/detachable_base_handler.cc
@@ -79,8 +79,8 @@ last_used_devices_.erase(user.account_id); if (local_state_) { - DictionaryPrefUpdate update(local_state_, prefs::kDetachableBaseDevices); - update->RemoveKey(GetKeyForPrefs(user.account_id)); + ScopedDictPrefUpdate update(local_state_, prefs::kDetachableBaseDevices); + update->Remove(GetKeyForPrefs(user.account_id)); } } @@ -127,9 +127,9 @@ last_used_devices_[user.account_id] = authenticated_base_id_; if (!user.is_ephemeral) { - DictionaryPrefUpdate update(local_state_, prefs::kDetachableBaseDevices); - update->SetPath({GetKeyForPrefs(user.account_id), kLastUsedByUserPrefKey}, - base::Value(authenticated_base_id_)); + ScopedDictPrefUpdate update(local_state_, prefs::kDetachableBaseDevices); + update->EnsureDict(GetKeyForPrefs(user.account_id)) + ->Set(kLastUsedByUserPrefKey, authenticated_base_id_); } return true;
diff --git a/ash/metrics/feature_discovery_duration_reporter_impl.cc b/ash/metrics/feature_discovery_duration_reporter_impl.cc index 5df3ffe8..7bcce0f 100644 --- a/ash/metrics/feature_discovery_duration_reporter_impl.cc +++ b/ash/metrics/feature_discovery_duration_reporter_impl.cc
@@ -136,9 +136,8 @@ TabletMode::Get()->IsInTabletMode()); } - DictionaryPrefUpdate update(active_pref_service_, kObservedFeatures); - update->GetDict().Set(feature_name, - base::Value(std::move(observed_feature_data))); + ScopedDictPrefUpdate update(active_pref_service_, kObservedFeatures); + update->Set(feature_name, std::move(observed_feature_data)); // Record observation start time. DCHECK(active_time_recordings_.find(feature) == @@ -201,9 +200,8 @@ // 1. Clearing the cumulated duration // 2. Marking that the observation finishes // 3. Erasing the saved tablet state if any - DictionaryPrefUpdate update(active_pref_service_, kObservedFeatures); - base::Value::Dict* mutable_feature_pref_data = - update->GetDict().FindDict(feature_name); + ScopedDictPrefUpdate update(active_pref_service_, kObservedFeatures); + base::Value::Dict* mutable_feature_pref_data = update->FindDict(feature_name); mutable_feature_pref_data->Remove(kCumulatedDuration); mutable_feature_pref_data->Set(kIsObservationFinished, true); mutable_feature_pref_data->Remove(kActivatedInTablet); @@ -277,11 +275,8 @@ void FeatureDiscoveryDurationReporterImpl::Deactivate() { if (!active_time_recordings_.empty()) { - DictionaryPrefUpdate update(active_pref_service_, kObservedFeatures); - base::Value* observed_features = update.Get(); - DCHECK(observed_features); - base::Value::Dict& mutable_observed_features_dict = - observed_features->GetDict(); + ScopedDictPrefUpdate update(active_pref_service_, kObservedFeatures); + base::Value::Dict& mutable_observed_features_dict = update.Get(); // Store the accumulated time duration as pref data. for (const auto& name_timestamp_pair : active_time_recordings_) {
diff --git a/ash/public/cpp/shelf_prefs.cc b/ash/public/cpp/shelf_prefs.cc index b68a608..025dab3 100644 --- a/ash/public/cpp/shelf_prefs.cc +++ b/ash/public/cpp/shelf_prefs.cc
@@ -92,7 +92,7 @@ if (display_id == display::kInvalidDisplayId) return; - // Avoid DictionaryPrefUpdate's notifications for read but unmodified prefs. + // Avoid ScopedDictPrefUpdate's notifications for read but unmodified prefs. const base::Value::Dict& current_shelf_prefs = prefs->GetDict(prefs::kShelfPreferences); std::string display_key = base::NumberToString(display_id); @@ -105,14 +105,10 @@ return; } - DictionaryPrefUpdate update(prefs, prefs::kShelfPreferences); - base::Value* shelf_prefs = update.Get(); - base::Value* display_prefs_weak = shelf_prefs->FindDictKey(display_key); - if (!display_prefs_weak) { - display_prefs_weak = shelf_prefs->SetKey( - display_key, base::Value(base::Value::Type::DICTIONARY)); - } - display_prefs_weak->SetKey(pref_key, base::Value(value)); + ScopedDictPrefUpdate update(prefs, prefs::kShelfPreferences); + base::Value::Dict& shelf_prefs = update.Get(); + base::Value::Dict* display_prefs_weak = shelf_prefs.EnsureDict(display_key); + display_prefs_weak->Set(pref_key, value); } ShelfAlignment AlignmentFromPref(const std::string& value) {
diff --git a/ash/shelf/home_button_unittest.cc b/ash/shelf/home_button_unittest.cc index 4c899021..c6d4b44 100644 --- a/ash/shelf/home_button_unittest.cc +++ b/ash/shelf/home_button_unittest.cc
@@ -46,36 +46,45 @@ return ui::GestureEvent(0, 0, ui::EF_NONE, base::TimeTicks(), details); } -class HomeButtonTest : public AshTestBase, +class HomeButtonTestBase : public AshTestBase { + public: + HomeButtonTestBase() = default; + HomeButtonTestBase(const HomeButtonTestBase&) = delete; + HomeButtonTestBase& operator=(const HomeButtonTestBase&) = delete; + ~HomeButtonTestBase() override = default; + + void SendGestureEvent(ui::GestureEvent* event) { + ASSERT_TRUE(home_button()); + home_button()->OnGestureEvent(event); + } + + HomeButton* home_button() const { + return GetPrimaryShelf() + ->shelf_widget() + ->navigation_widget() + ->GetHomeButton(); + } + + protected: + base::test::ScopedFeatureList scoped_feature_list_; +}; + +class HomeButtonTest : public HomeButtonTestBase, public testing::WithParamInterface<bool> { public: - HomeButtonTest() = default; - - HomeButtonTest(const HomeButtonTest&) = delete; - HomeButtonTest& operator=(const HomeButtonTest&) = delete; - - ~HomeButtonTest() override = default; - - // AshTestBase: + // HomeButtonTestBase: void SetUp() override { scoped_feature_list_.InitWithFeatureState( features::kHideShelfControlsInTabletMode, IsHideShelfControlsInTabletModeEnabled()); - AshTestBase::SetUp(); - } - - void SendGestureEvent(ui::GestureEvent* event) { - HomeButton* const home_button = - GetPrimaryShelf()->navigation_widget()->GetHomeButton(); - ASSERT_TRUE(home_button); - home_button->OnGestureEvent(event); + HomeButtonTestBase::SetUp(); } void SendGestureEventToSecondaryDisplay(ui::GestureEvent* event) { // Add secondary display. UpdateDisplay("1+1-1000x600,1002+0-600x400"); - ASSERT_TRUE(GetPrimaryShelf() + ASSERT_TRUE(Shelf::ForWindow(Shell::GetAllRootWindows()[1]) ->shelf_widget() ->navigation_widget() ->GetHomeButton()); @@ -89,13 +98,6 @@ bool IsHideShelfControlsInTabletModeEnabled() const { return GetParam(); } - const HomeButton* home_button() const { - return GetPrimaryShelf() - ->shelf_widget() - ->navigation_widget() - ->GetHomeButton(); - } - AssistantState* assistant_state() const { return AssistantState::Get(); } PrefService* prefs() { @@ -107,7 +109,7 @@ }; // Tests home button visibility animations. -class HomeButtonAnimationTest : public AshTestBase { +class HomeButtonAnimationTest : public HomeButtonTestBase { public: HomeButtonAnimationTest() { scoped_feature_list_.InitAndEnableFeature( @@ -115,9 +117,9 @@ } ~HomeButtonAnimationTest() override = default; - // AshTestBase: + // HomeButtonTestBase: void SetUp() override { - AshTestBase::SetUp(); + HomeButtonTestBase::SetUp(); animation_duration_.emplace( ui::ScopedAnimationDurationScaleMode::NON_ZERO_DURATION); @@ -125,7 +127,7 @@ void TearDown() override { animation_duration_.reset(); - AshTestBase::TearDown(); + HomeButtonTestBase::TearDown(); } private: @@ -144,7 +146,7 @@ // Tests home button visibility with number of accessibility setting enabled, // with kHideControlsInTabletModeFeature. class HomeButtonVisibilityWithAccessibilityFeaturesTest - : public AshTestBase, + : public HomeButtonTestBase, public ::testing::WithParamInterface<TestAccessibilityFeature> { public: HomeButtonVisibilityWithAccessibilityFeaturesTest() { @@ -402,8 +404,7 @@ // Verifies that home button visibility updates are animated. TEST_F(HomeButtonAnimationTest, VisibilityAnimation) { - views::View* const home_button_view = - GetPrimaryShelf()->shelf_widget()->navigation_widget()->GetHomeButton(); + views::View* const home_button_view = home_button(); ASSERT_TRUE(home_button_view); EXPECT_TRUE(home_button_view->GetVisible()); EXPECT_EQ(1.0f, home_button_view->layer()->opacity()); @@ -436,8 +437,7 @@ // Verifies that home button visibility updates if the button gets hidden while // it's still being shown. TEST_F(HomeButtonAnimationTest, HideWhileAnimatingToShow) { - views::View* const home_button_view = - GetPrimaryShelf()->shelf_widget()->navigation_widget()->GetHomeButton(); + views::View* const home_button_view = home_button(); ASSERT_TRUE(home_button_view); EXPECT_TRUE(home_button_view->GetVisible()); @@ -470,8 +470,7 @@ // Verifies that home button becomes visible if reshown while a hide animation // is still in progress. TEST_F(HomeButtonAnimationTest, ShowWhileAnimatingToHide) { - views::View* const home_button_view = - GetPrimaryShelf()->shelf_widget()->navigation_widget()->GetHomeButton(); + views::View* const home_button_view = home_button(); ASSERT_TRUE(home_button_view); EXPECT_TRUE(home_button_view->GetVisible()); @@ -501,9 +500,7 @@ // Verifies that unanimated navigation widget layout update interrupts in // progress button animation. TEST_F(HomeButtonAnimationTest, NonAnimatedLayoutDuringAnimation) { - Shelf* const shelf = GetPrimaryShelf(); - views::View* const home_button_view = - shelf->shelf_widget()->navigation_widget()->GetHomeButton(); + views::View* const home_button_view = home_button(); ASSERT_TRUE(home_button_view); EXPECT_TRUE(home_button_view->GetVisible()); EXPECT_EQ(1.0f, home_button_view->layer()->opacity()); @@ -512,6 +509,7 @@ // Switch to tablet mode changes the button visibility. Shell::Get()->tablet_mode_controller()->SetEnabledForTest(true); + Shelf* const shelf = GetPrimaryShelf(); ShelfViewTestAPI shelf_test_api(shelf->GetShelfViewForTesting()); ShelfNavigationWidget::TestApi test_api(shelf->navigation_widget()); @@ -769,8 +767,7 @@ // the center point of the home button is the same as the content view's center // point will avoid this problem. See http://crbug.com/1083713 TEST_P(HomeButtonTest, GestureHomeButtonHitTest) { - ShelfNavigationWidget* nav_widget = - AshTestBase::GetPrimaryShelf()->navigation_widget(); + ShelfNavigationWidget* nav_widget = GetPrimaryShelf()->navigation_widget(); ShelfNavigationWidget::TestApi test_api(nav_widget); gfx::Rect nav_widget_bounds = nav_widget->GetRootView()->bounds();
diff --git a/ash/shelf/launcher_nudge_controller.cc b/ash/shelf/launcher_nudge_controller.cc index 3ed9410..576a9ae 100644 --- a/ash/shelf/launcher_nudge_controller.cc +++ b/ash/shelf/launcher_nudge_controller.cc
@@ -200,9 +200,9 @@ return; const int shown_count = GetShownCount(prefs); - DictionaryPrefUpdate update(prefs, prefs::kShelfLauncherNudge); - update->SetIntKey(kShownCount, shown_count + 1); - update->SetKey(kLastShownTime, base::TimeToValue(GetNow())); + ScopedDictPrefUpdate update(prefs, prefs::kShelfLauncherNudge); + update->Set(kShownCount, shown_count + 1); + update->Set(kLastShownTime, base::TimeToValue(GetNow())); } void LauncherNudgeController::MaybeShowNudge() { @@ -263,8 +263,8 @@ if (Shell::Get()->session_controller()->IsUserFirstLogin()) { // If the current logged in user is a new one, record the first login time // to know when to show the nudge. - DictionaryPrefUpdate update(prefs, prefs::kShelfLauncherNudge); - update->SetKey(kFirstLoginTime, base::TimeToValue(GetNow())); + ScopedDictPrefUpdate update(prefs, prefs::kShelfLauncherNudge); + update->Set(kFirstLoginTime, base::TimeToValue(GetNow())); } else if (GetFirstLoginTime(prefs).is_null()) { // For the users that has logged in before the nudge feature is landed, we // assume the user has opened the launcher before and thus don't show the @@ -292,8 +292,8 @@ return; if (!WasLauncherShownPreviously(prefs) && shown) { - DictionaryPrefUpdate update(prefs, prefs::kShelfLauncherNudge); - update->SetBoolKey(kWasLauncherShown, true); + ScopedDictPrefUpdate update(prefs, prefs::kShelfLauncherNudge); + update->Set(kWasLauncherShown, true); } }
diff --git a/ash/system/camera/autozoom_nudge_controller.cc b/ash/system/camera/autozoom_nudge_controller.cc index 524b9b1..1685b5e 100644 --- a/ash/system/camera/autozoom_nudge_controller.cc +++ b/ash/system/camera/autozoom_nudge_controller.cc
@@ -52,10 +52,10 @@ // Reset the nudge prefs so that the nudge can be shown again. This observer // callback is only registered and called when // features::kAutozoomNudgeSessionReset is enabled. - DictionaryPrefUpdate update(prefs, prefs::kAutozoomNudges); - update->GetDict().Set(kShownCount, 0); - update->GetDict().Set(kLastTimeShown, base::TimeToValue(base::Time())); - update->GetDict().Set(kHadEnabled, false); + ScopedDictPrefUpdate update(prefs, prefs::kAutozoomNudges); + update->Set(kShownCount, 0); + update->Set(kLastTimeShown, base::TimeToValue(base::Time())); + update->Set(kHadEnabled, false); } base::Time AutozoomNudgeController::GetTime() { @@ -68,9 +68,9 @@ if (!prefs) return; const int shown_count = GetShownCount(prefs); - DictionaryPrefUpdate update(prefs, prefs::kAutozoomNudges); - update->SetIntPath(kShownCount, shown_count + 1); - update->SetPath(kLastTimeShown, base::TimeToValue(GetTime())); + ScopedDictPrefUpdate update(prefs, prefs::kAutozoomNudges); + update->Set(kShownCount, shown_count + 1); + update->Set(kLastTimeShown, base::TimeToValue(GetTime())); } bool AutozoomNudgeController::GetHadEnabled(PrefService* prefs) { @@ -134,8 +134,8 @@ Shell::Get()->session_controller()->GetLastActiveUserPrefService(); if (!prefs) return; - DictionaryPrefUpdate update(prefs, prefs::kAutozoomNudges); - update->SetBoolPath(kHadEnabled, true); + ScopedDictPrefUpdate update(prefs, prefs::kAutozoomNudges); + update->Set(kHadEnabled, true); } }
diff --git a/ash/system/unified/managed_device_tray_item_view.cc b/ash/system/unified/managed_device_tray_item_view.cc index 283a1bc..2fed069 100644 --- a/ash/system/unified/managed_device_tray_item_view.cc +++ b/ash/system/unified/managed_device_tray_item_view.cc
@@ -49,21 +49,48 @@ return "ManagedDeviceTrayItemView"; } +void ManagedDeviceTrayItemView::OnThemeChanged() { + TrayItemView::OnThemeChanged(); + UpdateIcon(); +} + void ManagedDeviceTrayItemView::HandleLocaleChange() { - Update(); + UpdateTooltipText(); } void ManagedDeviceTrayItemView::Update() { SessionControllerImpl* session = Shell::Get()->session_controller(); - if (session->IsUserPublicAccount()) { + if (!session->IsUserPublicAccount() && !session->IsUserChild()) { + SetVisible(false); + return; + } + + UpdateIcon(); + UpdateTooltipText(); + SetVisible(true); +} + +void ManagedDeviceTrayItemView::UpdateIcon() { + const gfx::VectorIcon* icon = nullptr; + SessionControllerImpl* session = Shell::Get()->session_controller(); + if (session->IsUserPublicAccount()) + icon = &kSystemTrayManagedIcon; + else if (session->IsUserChild()) + icon = &kSystemTraySupervisedUserIcon; + + if (icon) { image_view()->SetImage(gfx::CreateVectorIcon( - kSystemTrayManagedIcon, - TrayIconColor(Shell::Get()->session_controller()->GetSessionState()))); + *icon, TrayIconColor(session->GetSessionState()))); + } +} + +void ManagedDeviceTrayItemView::UpdateTooltipText() { + SessionControllerImpl* session = Shell::Get()->session_controller(); + if (session->IsUserPublicAccount()) { std::string enterprise_domain_manager = Shell::Get() ->system_tray_model() ->enterprise_domain() ->enterprise_domain_manager(); - SetVisible(true); if (!enterprise_domain_manager.empty()) { image_view()->SetTooltipText(l10n_util::GetStringFUTF16( IDS_ASH_ENTERPRISE_DEVICE_MANAGED_BY, ui::GetChromeOSDeviceName(), @@ -73,20 +100,10 @@ LOG(WARNING) << "Public account user, but device not enterprise-enrolled."; } - return; - } - - if (session->IsUserChild()) { - image_view()->SetImage(gfx::CreateVectorIcon( - kSystemTraySupervisedUserIcon, - TrayIconColor(Shell::Get()->session_controller()->GetSessionState()))); + } else if (session->IsUserChild()) { image_view()->SetTooltipText( l10n_util::GetStringUTF16(IDS_ASH_STATUS_TRAY_FAMILY_LINK_LABEL)); - SetVisible(true); - return; } - - SetVisible(false); } } // namespace ash
diff --git a/ash/system/unified/managed_device_tray_item_view.h b/ash/system/unified/managed_device_tray_item_view.h index 93ffc1c..15418f6 100644 --- a/ash/system/unified/managed_device_tray_item_view.h +++ b/ash/system/unified/managed_device_tray_item_view.h
@@ -35,10 +35,13 @@ // views::TrayItemView: const char* GetClassName() const override; + void OnThemeChanged() override; void HandleLocaleChange() override; private: void Update(); + void UpdateIcon(); + void UpdateTooltipText(); }; } // namespace ash
diff --git a/ash/webui/os_feedback_ui/resources/confirmation_page.html b/ash/webui/os_feedback_ui/resources/confirmation_page.html index ab1d04a..8a308327 100644 --- a/ash/webui/os_feedback_ui/resources/confirmation_page.html +++ b/ash/webui/os_feedback_ui/resources/confirmation_page.html
@@ -57,6 +57,11 @@ cr-link-row::part(icon) { --cr-icon-button-fill-color: var(--cros-icon-color-primary); } + + cr-link-row::part(icon):focus { + box-shadow: none; + outline: 2px solid var(--cros-focus-ring-color); + } </style> <div id="container"> <div id="header">
diff --git a/ash/webui/os_feedback_ui/resources/file_attachment.html b/ash/webui/os_feedback_ui/resources/file_attachment.html index 68372d8..aaa6014 100644 --- a/ash/webui/os_feedback_ui/resources/file_attachment.html +++ b/ash/webui/os_feedback_ui/resources/file_attachment.html
@@ -73,7 +73,7 @@ #addFileIcon { --cr-icon-button-fill-color: var(--cros-color-prominent); - --cr-icon-button-size: 34px; + --cr-icon-button-size: 32px; margin-inline-end: 4px; margin-inline-start: 6px; }
diff --git a/ash/webui/os_feedback_ui/resources/help_content.html b/ash/webui/os_feedback_ui/resources/help_content.html index b1619b2..3048006 100644 --- a/ash/webui/os_feedback_ui/resources/help_content.html +++ b/ash/webui/os_feedback_ui/resources/help_content.html
@@ -60,6 +60,7 @@ } #helpContentIcon:focus { + border-radius: 4px; outline: 2px solid var(--cros-focus-ring-color); }
diff --git a/ash/webui/os_feedback_ui/resources/os_feedback_shared_css.html b/ash/webui/os_feedback_ui/resources/os_feedback_shared_css.html index b9a5f5a..1bf259fc 100644 --- a/ash/webui/os_feedback_ui/resources/os_feedback_shared_css.html +++ b/ash/webui/os_feedback_ui/resources/os_feedback_shared_css.html
@@ -118,6 +118,7 @@ } .focusable:focus { + border-radius: 4px; outline: 2px solid var(--cros-focus-ring-color); } @@ -192,5 +193,14 @@ --paper-tooltip-background: var(--cros-tooltip-background-color); --paper-tooltip-text-color: var(--cros-tooltip-label-color); } + + cr-checkbox { + --cr-checkbox-ripple-opacity: 0; + --cr-checkbox-ripple-size: 32px; + } + + :host-context(.focus-outline-visible) cr-checkbox:focus-within { + --cr-checkbox-ripple-ring: 2px solid var(--cros-focus-ring-color); + } </style> </template>
diff --git a/ash/webui/os_feedback_ui/resources/share_data_page.html b/ash/webui/os_feedback_ui/resources/share_data_page.html index bbd9e34..999afc4 100644 --- a/ash/webui/os_feedback_ui/resources/share_data_page.html +++ b/ash/webui/os_feedback_ui/resources/share_data_page.html
@@ -187,7 +187,7 @@ disabled="[[!hasScreenshot_(screenshotUrl)]]"> </cr-checkbox> <label id="screenshotCheckLabel">[[i18n('attachScreenshotLabel')]]</label> - <button id="imageButton" on-click="handleScreenshotClick_"> + <button id="imageButton" class="focusable" on-click="handleScreenshotClick_"> <img id="screenshotImage" src="[[screenshotUrl]]"> </button> </div>
diff --git a/ash/wm/desks/desks_bar_view.cc b/ash/wm/desks/desks_bar_view.cc index 4689c797..b37ddcd5 100644 --- a/ash/wm/desks/desks_bar_view.cc +++ b/ash/wm/desks/desks_bar_view.cc
@@ -8,6 +8,7 @@ #include <utility> #include "ash/constants/ash_features.h" +#include "ash/controls/gradient_layer_delegate.h" #include "ash/glanceables/glanceables_controller.h" #include "ash/keyboard/ui/keyboard_ui_controller.h" #include "ash/public/cpp/shell_window_ids.h" @@ -441,6 +442,10 @@ scroll_view_contents_->SetLayoutManager( std::make_unique<DesksBarScrollViewLayout>(this)); + gradient_layer_delegate_ = + std::make_unique<GradientLayerDelegate>(/*animate_in=*/false); + scroll_view_->layer()->SetMaskLayer(gradient_layer_delegate_->layer()); + on_contents_scrolled_subscription_ = scroll_view_->AddContentsScrolledCallback(base::BindRepeating( &DesksBarView::OnContentsScrolled, base::Unretained(this))); @@ -804,7 +809,7 @@ scroll_view_->Layout(); UpdateScrollButtonsVisibility(); - UpdateGradientMask(); + UpdateGradientZone(); } bool DesksBarView::OnMousePressed(const ui::MouseEvent& event) { @@ -1175,7 +1180,7 @@ scroll_view_contents_->bounds().width()); } -void DesksBarView::UpdateGradientMask() { +void DesksBarView::UpdateGradientZone() { const bool is_rtl = base::i18n::IsRTL(); const bool is_left_scroll_button_visible = left_scroll_button_->GetVisible(); const bool is_right_scroll_button_visible = @@ -1205,29 +1210,35 @@ // LTR or RTL layout. While the |left_scroll_button_| will be changed from // left to right and |right_scroll_button_| will be changed from right to left // if it is RTL layout. - - // Horizontal linear gradient, from left to right. - gfx::LinearGradient gradient_mask(/*angle=*/0); - - // Fraction of layer width that gradient will be applied to. - const float fade_position = - should_show_start_gradient || should_show_end_gradient - ? static_cast<float>(kGradientZoneLength) / - scroll_view_->bounds().width() - : 0; - - // Left fade in section. + const gfx::Rect bounds = scroll_view_->bounds(); + gfx::Rect start_gradient_bounds, end_gradient_bounds; if (should_show_start_gradient) { - gradient_mask.AddStep(/*fraction=*/0, /*alpha=*/0); - gradient_mask.AddStep(fade_position, 255); + start_gradient_bounds = + gfx::Rect(0, 0, kGradientZoneLength, bounds.height()); } - // Right fade out section. if (should_show_end_gradient) { - gradient_mask.AddStep((1 - fade_position), 255); - gradient_mask.AddStep(1, 0); + end_gradient_bounds = gfx::Rect(bounds.width() - kGradientZoneLength, 0, + kGradientZoneLength, bounds.height()); } - scroll_view_->layer()->SetGradientMask(gradient_mask); + // Return early if the gradients do not change. + if (start_gradient_bounds == + gradient_layer_delegate_->start_fade_zone_bounds() && + end_gradient_bounds == gradient_layer_delegate_->end_fade_zone_bounds()) { + return; + } + + const GradientLayerDelegate::FadeZone start_gradient_zone = { + start_gradient_bounds, + /*fade_in=*/true, + /*is_horizontal=*/true}; + const GradientLayerDelegate::FadeZone end_gradient_zone = { + end_gradient_bounds, + /*fade_in=*/false, + /*is_horizonal=*/true}; + gradient_layer_delegate_->set_start_fade_zone(start_gradient_zone); + gradient_layer_delegate_->set_end_fade_zone(end_gradient_zone); + gradient_layer_delegate_->layer()->SetBounds(scroll_view_->layer()->bounds()); scroll_view_->SchedulePaint(); } @@ -1305,7 +1316,7 @@ void DesksBarView::OnContentsScrolled() { UpdateScrollButtonsVisibility(); - UpdateGradientMask(); + UpdateGradientZone(); } void DesksBarView::OnContentsScrollEnded() { @@ -1317,7 +1328,7 @@ scroll_view_->ScrollToPosition(scroll_view_->horizontal_scroll_bar(), adjusted_position); } - UpdateGradientMask(); + UpdateGradientZone(); } void DesksBarView::NudgeDeskName(int desk_index) {
diff --git a/ash/wm/desks/desks_bar_view.h b/ash/wm/desks/desks_bar_view.h index ca297355..72bb87fd 100644 --- a/ash/wm/desks/desks_bar_view.h +++ b/ash/wm/desks/desks_bar_view.h
@@ -22,6 +22,7 @@ class DeskDragProxy; class DeskMiniView; class ExpandedDesksBarButton; +class GradientLayerDelegate; class NewDeskButton; class OverviewGrid; class PersistentDesksBarVerticalDotsButton; @@ -244,7 +245,7 @@ // We will show a fade in gradient besides |left_scroll_button_| and a fade // out gradient besides |right_scroll_button_|. Show the gradient only when // the corresponding scroll button is visible. - void UpdateGradientMask(); + void UpdateGradientZone(); // Scrolls the desks bar to the previous or next page. The page size is the // width of the scroll view, the contents that are outside of the scroll view @@ -318,6 +319,10 @@ // Drag proxy for the dragged desk. std::unique_ptr<DeskDragProxy> drag_proxy_; + // The layer delegate used for |scroll_view_|'s mask layer, with left and + // right gradient asides the scroll buttons. + std::unique_ptr<GradientLayerDelegate> gradient_layer_delegate_; + // A circular button which when clicked will open the context menu of the // persistent desks bar. Note that this button will only be created when // persistent desks bar should be shown.
diff --git a/ash/wm/desks/desks_test_api.cc b/ash/wm/desks/desks_test_api.cc index ddb0c7e2..a78f671d 100644 --- a/ash/wm/desks/desks_test_api.cc +++ b/ash/wm/desks/desks_test_api.cc
@@ -4,6 +4,7 @@ #include "ash/wm/desks/desks_test_api.h" +#include "ash/controls/gradient_layer_delegate.h" #include "ash/shell.h" #include "ash/system/toast/toast_manager_impl.h" #include "ash/wm/desks/desk.h" @@ -136,20 +137,16 @@ // static bool DesksTestApi::IsDesksBarLeftGradientVisible() { - const auto& gradient_mask = - GetDesksBarView()->scroll_view_->layer()->gradient_mask(); - return !gradient_mask.IsEmpty() && - cc::MathUtil::IsWithinEpsilon(gradient_mask.steps()[0].fraction, 0.f); + return !GetDesksBarView() + ->gradient_layer_delegate_->start_fade_zone_bounds() + .IsEmpty(); } // static bool DesksTestApi::IsDesksBarRightGradientVisible() { - const auto& gradient_mask = - GetDesksBarView()->scroll_view_->layer()->gradient_mask(); - return !gradient_mask.IsEmpty() && - cc::MathUtil::IsWithinEpsilon( - gradient_mask.steps()[gradient_mask.step_count() - 1].fraction, - 1.f); + return !GetDesksBarView() + ->gradient_layer_delegate_->end_fade_zone_bounds() + .IsEmpty(); } // static
diff --git a/ash/wm/overview/delayed_animation_observer_impl_unittest.cc b/ash/wm/overview/delayed_animation_observer_impl_unittest.cc index 3a8ddeeb..2ab5dad8 100644 --- a/ash/wm/overview/delayed_animation_observer_impl_unittest.cc +++ b/ash/wm/overview/delayed_animation_observer_impl_unittest.cc
@@ -104,7 +104,7 @@ auto observer = std::make_unique<EnterAnimationObserver>(); animation_settings.AddObserver(observer.get()); delegate.AddEnterAnimationObserver(std::move(observer)); - window->SetTransform(gfx::Transform(1.f, 0.f, 0.f, 1.f, 100.f, 0.f)); + window->SetTransform(gfx::Transform::MakeTranslation(100.f, 0.f)); EXPECT_EQ(0u, delegate.num_exit_observers()); EXPECT_EQ(1u, delegate.num_enter_observers()); } @@ -131,7 +131,7 @@ auto observer = std::make_unique<ExitAnimationObserver>(); animation_settings.AddObserver(observer.get()); delegate.AddExitAnimationObserver(std::move(observer)); - window->SetTransform(gfx::Transform(1.f, 0.f, 0.f, 1.f, 100.f, 0.f)); + window->SetTransform(gfx::Transform::MakeTranslation(100.f, 0.f)); EXPECT_EQ(1u, delegate.num_exit_observers()); EXPECT_EQ(0u, delegate.num_enter_observers()); }
diff --git a/ash/wm/overview/scoped_overview_transform_window_unittest.cc b/ash/wm/overview/scoped_overview_transform_window_unittest.cc index d71eb55..1929cf2b 100644 --- a/ash/wm/overview/scoped_overview_transform_window_unittest.cc +++ b/ash/wm/overview/scoped_overview_transform_window_unittest.cc
@@ -261,7 +261,7 @@ EXPECT_TRUE(child->IsVisible()); EXPECT_FALSE(child2->IsVisible()); - gfx::Transform transform(1.f, 0.f, 0.f, 1.f, 10.f, 10.f); + auto transform = gfx::Transform::MakeTranslation(10.f, 10.f); SetTransform(window.get(), transform); EXPECT_EQ(transform, window->transform()); EXPECT_EQ(transform, child->transform());
diff --git a/ash/wm/window_mirror_view_unittest.cc b/ash/wm/window_mirror_view_unittest.cc index 77c7cec..6de4e73 100644 --- a/ash/wm/window_mirror_view_unittest.cc +++ b/ash/wm/window_mirror_view_unittest.cc
@@ -46,7 +46,7 @@ // the transform will be copied with it. auto widget = CreateTestWidget(); aura::Window* widget_window = widget->GetNativeWindow(); - const gfx::Transform transform(1.f, 0.f, 0.f, 1.f, 100.f, 100.f); + const auto transform = gfx::Transform::MakeTranslation(100.f, 100.f); widget_window->SetTransform(transform); auto mirror_widget = CreateTestWidget();
diff --git a/base/containers/stack_container_unittest.cc b/base/containers/stack_container_unittest.cc index af37120..68c6321 100644 --- a/base/containers/stack_container_unittest.cc +++ b/base/containers/stack_container_unittest.cc
@@ -6,11 +6,10 @@ #include <stddef.h> -#include <algorithm> - #include "base/memory/aligned_memory.h" #include "base/memory/raw_ptr.h" #include "base/memory/ref_counted.h" +#include "base/ranges/algorithm.h" #include "build/build_config.h" #include "testing/gtest/include/gtest/gtest.h" @@ -95,7 +94,7 @@ dummy = nullptr; EXPECT_EQ(alive, 1); - auto itr = std::find(vect->begin(), vect->end(), dummy_unref); + auto itr = ranges::find(vect, dummy_unref); EXPECT_EQ(itr->get(), dummy_unref); vect->erase(itr); EXPECT_EQ(alive, 0);
diff --git a/base/cxx20_to_address.h b/base/cxx20_to_address.h index 23b66e3..0010aec 100644 --- a/base/cxx20_to_address.h +++ b/base/cxx20_to_address.h
@@ -30,7 +30,7 @@ template <typename Ptr, typename... None> constexpr auto to_address(const Ptr& p, None...) noexcept { - return to_address(p.operator->()); + return base::to_address(p.operator->()); } } // namespace base
diff --git a/base/files/file_path.cc b/base/files/file_path.cc index 137c2965c..a43c093 100644 --- a/base/files/file_path.cc +++ b/base/files/file_path.cc
@@ -5,6 +5,7 @@ #include "base/files/file_path.h" #include <string.h> + #include <algorithm> #include "base/check_op.h"
diff --git a/base/ios/crb_protocol_observers.mm b/base/ios/crb_protocol_observers.mm index 0250e39..418e26bc 100644 --- a/base/ios/crb_protocol_observers.mm +++ b/base/ios/crb_protocol_observers.mm
@@ -6,12 +6,13 @@ #include <objc/runtime.h> #include <stddef.h> -#include <algorithm> + #include <vector> #include "base/check.h" #include "base/containers/contains.h" #include "base/notreached.h" +#include "base/ranges/algorithm.h" #if !defined(__has_feature) || !__has_feature(objc_arc) #error "This file requires ARC support." @@ -116,7 +117,7 @@ - (void)removeObserver:(id)observer { DCHECK(observer); - auto it = std::find(_observers.begin(), _observers.end(), observer); + auto it = base::ranges::find(_observers, observer); if (it != _observers.end()) { if (_invocationDepth) *it = nil;
diff --git a/base/message_loop/message_pump_epoll.cc b/base/message_loop/message_pump_epoll.cc index 351cc971..292dd03 100644 --- a/base/message_loop/message_pump_epoll.cc +++ b/base/message_loop/message_pump_epoll.cc
@@ -7,7 +7,6 @@ #include <sys/epoll.h> #include <sys/eventfd.h> -#include <algorithm> #include <cstddef> #include <cstdint> #include <utility> @@ -16,6 +15,7 @@ #include "base/check_op.h" #include "base/memory/ref_counted.h" #include "base/posix/eintr_wrapper.h" +#include "base/ranges/algorithm.h" #include "base/threading/thread_checker.h" #include "base/trace_event/base_tracing.h" #include "third_party/abseil-cpp/absl/types/optional.h" @@ -182,7 +182,7 @@ EpollEventEntry& entry = entry_it->second; auto& interests = entry.interests.container(); - auto it = std::find(interests.begin(), interests.end(), interest); + auto it = ranges::find(interests, interest); DCHECK(it != interests.end()); interests.erase(it);
diff --git a/base/metrics/user_metrics.cc b/base/metrics/user_metrics.cc index 9511f66..ce4f834 100644 --- a/base/metrics/user_metrics.cc +++ b/base/metrics/user_metrics.cc
@@ -11,6 +11,7 @@ #include "base/bind.h" #include "base/lazy_instance.h" #include "base/location.h" +#include "base/ranges/algorithm.h" #include "base/threading/thread_checker.h" #include "base/time/time.h" #include "base/trace_event/base_tracing.h" @@ -68,7 +69,7 @@ DCHECK(g_task_runner.Get()); DCHECK(g_task_runner.Get()->BelongsToCurrentThread()); std::vector<ActionCallback>* callbacks = g_callbacks.Pointer(); - const auto i = std::find(callbacks->begin(), callbacks->end(), callback); + const auto i = ranges::find(*callbacks, callback); if (i != callbacks->end()) callbacks->erase(i); }
diff --git a/base/path_service_unittest.cc b/base/path_service_unittest.cc index 9a04f6c..3bbaf21 100644 --- a/base/path_service_unittest.cc +++ b/base/path_service_unittest.cc
@@ -5,6 +5,7 @@ #include "base/path_service.h" #include "base/base_paths.h" +#include "base/containers/contains.h" #include "base/files/file_path.h" #include "base/files/file_util.h" #include "base/files/scoped_temp_dir.h" @@ -135,12 +136,9 @@ constexpr std::array<BasePathKey, 0> kUnsupportedKeys = {}; #endif // BUILDFLAG(IS_ANDROID) for (int key = PATH_START + 1; key < PATH_END; ++key) { - if (std::find(kUnsupportedKeys.begin(), kUnsupportedKeys.end(), key) == - kUnsupportedKeys.end()) { - EXPECT_PRED1(ReturnsValidPath, key); - } else { - EXPECT_PRED1(ReturnsInvalidPath, key); - } + EXPECT_PRED1(Contains(kUnsupportedKeys, key) ? &ReturnsInvalidPath + : &ReturnsValidPath, + key); } #if BUILDFLAG(IS_WIN) for (int key = PATH_WIN_START + 1; key < PATH_WIN_END; ++key) {
diff --git a/base/task/task_features.cc b/base/task/task_features.cc index ac809e1..d12481f 100644 --- a/base/task/task_features.cc +++ b/base/task/task_features.cc
@@ -6,7 +6,6 @@ #include "base/base_export.h" #include "base/feature_list.h" -#include "build/build_config.h" namespace base { @@ -43,16 +42,7 @@ const base::FeatureParam<TimeDelta> kTaskLeewayParam{&kAddTaskLeewayFeature, "leeway", kDefaultLeeway}; -BASE_FEATURE(kAlignWakeUps, - "AlignWakeUps", -#if BUILDFLAG(IS_FUCHSIA) - // TODO(crbug.com/1368989): Ensure that latency-sensitive - // activities (e.g. media playback) are compatible, and enable. - base::FEATURE_DISABLED_BY_DEFAULT -#else - base::FEATURE_ENABLED_BY_DEFAULT -#endif -); +BASE_FEATURE(kAlignWakeUps, "AlignWakeUps", base::FEATURE_ENABLED_BY_DEFAULT); BASE_FEATURE(kExplicitHighResolutionTimerWin, "ExplicitHighResolutionTimerWin",
diff --git a/build/fuchsia/test/ffx_integration.py b/build/fuchsia/test/ffx_integration.py index e5dc16d..44dbd51 100644 --- a/build/fuchsia/test/ffx_integration.py +++ b/build/fuchsia/test/ffx_integration.py
@@ -280,8 +280,8 @@ A subprocess.Popen object. """ command = [ - '--config', 'test.experimental_structured_output=false', 'test', - 'run', '--output-directory', self._results_dir, component_uri + 'test', 'run', '--output-directory', self._results_dir, + component_uri ] if test_args: command.append('--')
diff --git a/build/fuchsia/test/run_telemetry_test.py b/build/fuchsia/test/run_telemetry_test.py index a756a433..48caea27 100644 --- a/build/fuchsia/test/run_telemetry_test.py +++ b/build/fuchsia/test/run_telemetry_test.py
@@ -56,5 +56,6 @@ if self._test_args: test_cmd.extend(self._test_args) test_cmd.extend(['--chromium-output-directory', self._out_dir]) - test_cmd.extend(['--fuchsia-target-id', self._target_id]) + if self._target_id: + test_cmd.extend(['--fuchsia-target-id', self._target_id]) return subprocess.run(test_cmd, check=True)
diff --git a/build/fuchsia/test/run_test.py b/build/fuchsia/test/run_test.py index 41f0ccf..598a3589 100755 --- a/build/fuchsia/test/run_test.py +++ b/build/fuchsia/test/run_test.py
@@ -47,8 +47,8 @@ parser = argparse.ArgumentParser() parser.add_argument( 'test_type', - help='The type of test to run. Options include \'blink\', \'gpu\'' - 'or in the case of gtests, the gtest name.') + help='The type of test to run. Options include \'blink\', \'gpu\', ' + 'or in the case of executable tests, the test name.') parser.add_argument('--device', '-d', action='store_true',
diff --git a/build/fuchsia/test/test_server.py b/build/fuchsia/test/test_server.py index fe3c6cc2..c2ed3d2 100644 --- a/build/fuchsia/test/test_server.py +++ b/build/fuchsia/test/test_server.py
@@ -8,7 +8,7 @@ import sys import subprocess -from typing import List, Tuple +from typing import List, Optional, Tuple from common import DIR_SRC_ROOT, run_ffx_command from compatible_utils import get_ssh_prefix @@ -96,7 +96,7 @@ # pylint: enable=invalid-name,missing-function-docstring -def setup_test_server(target_id: str, test_concurrency: int)\ +def setup_test_server(target_id: Optional[str], test_concurrency: int)\ -> Tuple[chrome_test_server_spawner.SpawningServer, str]: """Provisions a test server and configures |target_id| to use it.
diff --git a/buildtools/deps_revisions.gni b/buildtools/deps_revisions.gni index 9dbde60..b653cd6 100644 --- a/buildtools/deps_revisions.gni +++ b/buildtools/deps_revisions.gni
@@ -5,5 +5,5 @@ declare_args() { # Used to cause full rebuilds on libc++ rolls. This should be kept in sync # with the libcxx_revision vars in //DEPS. - libcxx_revision = "11bdb46a42a9947797fb273821769a59fa2becbb" + libcxx_revision = "5ee02b299379896f90faa88f576be98c61156f26" }
diff --git a/cc/base/features.cc b/cc/base/features.cc index de1592c..5ac878de 100644 --- a/cc/base/features.cc +++ b/cc/base/features.cc
@@ -42,7 +42,7 @@ BASE_FEATURE(kScrollUnification, "ScrollUnification", - base::FEATURE_DISABLED_BY_DEFAULT); + base::FEATURE_ENABLED_BY_DEFAULT); BASE_FEATURE(kSchedulerSmoothnessForAnimatedScrolls, "SmoothnessModeForAnimatedScrolls",
diff --git a/cc/base/math_util_unittest.cc b/cc/base/math_util_unittest.cc index f8808a2dd..7bfd0b2a 100644 --- a/cc/base/math_util_unittest.cc +++ b/cc/base/math_util_unittest.cc
@@ -984,7 +984,7 @@ TEST(MathUtilTest, MapClippedQuadInfiniteMatrix) { // clang-format off - gfx::Transform transform( + auto transform = gfx::Transform::RowMajor( 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, -100.0f, 0.0f, std::numeric_limits<float>::infinity(), 0.0f, 0.0f, 1.0f, 0.0f,
diff --git a/cc/layers/layer_impl_unittest.cc b/cc/layers/layer_impl_unittest.cc index c3e22cf..0e12a04 100644 --- a/cc/layers/layer_impl_unittest.cc +++ b/cc/layers/layer_impl_unittest.cc
@@ -286,10 +286,11 @@ } // Test case from crbug.com/766021. { - gfx::Transform transform(-0.9397f, -0.7019f, 0.2796f, 2383.4521f, // row 1 - -0.0038f, 0.0785f, 1.0613f, 1876.4553f, // row 2 - -0.0835f, 0.9081f, -0.4105f, -2208.3035f, // row 3 - 0.0001f, -0.0008f, 0.0003f, 2.8435f); // row 4 + auto transform = gfx::Transform::RowMajor( + -0.9397f, -0.7019f, 0.2796f, 2383.4521f, // row 1 + -0.0038f, 0.0785f, 1.0613f, 1876.4553f, // row 2 + -0.0835f, 0.9081f, -0.4105f, -2208.3035f, // row 3 + 0.0001f, -0.0008f, 0.0003f, 2.8435f); // row 4 layer->draw_properties().screen_space_transform = transform; ASSERT_TRUE(layer->ScreenSpaceTransform().HasPerspective());
diff --git a/cc/layers/layer_unittest.cc b/cc/layers/layer_unittest.cc index 7973b9c..bdb36e3a 100644 --- a/cc/layers/layer_unittest.cc +++ b/cc/layers/layer_unittest.cc
@@ -1047,8 +1047,8 @@ test_layer->SetScrollOffset(gfx::PointF(10, 10))); EXPECT_SET_NEEDS_COMMIT_WAS_CALLED( test_layer->SetNonFastScrollableRegion(Region(gfx::Rect(1, 1, 2, 2)))); - EXPECT_SET_NEEDS_COMMIT_WAS_CALLED( - test_layer->SetTransform(gfx::Transform(0.0, 0.0, 0.0, 0.0, 0.0, 0.0))); + EXPECT_SET_NEEDS_COMMIT_WAS_CALLED(test_layer->SetTransform( + gfx::Transform::Affine(0.0, 0.0, 0.0, 0.0, 0.0, 0.0))); TouchActionRegion touch_action_region; touch_action_region.Union(TouchAction::kNone, gfx::Rect(10, 10)); EXPECT_SET_NEEDS_COMMIT_WAS_CALLED(
diff --git a/cc/layers/picture_layer.cc b/cc/layers/picture_layer.cc index 4bbab69..9859e46 100644 --- a/cc/layers/picture_layer.cc +++ b/cc/layers/picture_layer.cc
@@ -266,8 +266,8 @@ &inverse_outer_screen_space_transform)) { return; } - gfx::Transform combined_transform{ScreenSpaceTransform(), - inverse_outer_screen_space_transform}; + gfx::Transform combined_transform = + ScreenSpaceTransform() * inverse_outer_screen_space_transform; for (auto& i : *content) { i.visual_rect = MathUtil::ProjectEnclosingClippedRect(combined_transform, i.visual_rect);
diff --git a/cc/trees/draw_properties_unittest.cc b/cc/trees/draw_properties_unittest.cc index 1e63f37..3404f6b 100644 --- a/cc/trees/draw_properties_unittest.cc +++ b/cc/trees/draw_properties_unittest.cc
@@ -2374,7 +2374,8 @@ child->SetDrawsContent(true); // Case 1: a truly degenerate matrix - gfx::Transform uninvertible_matrix(0.0, 0.0, 0.0, 0.0, 0.0, 0.0); + auto uninvertible_matrix = + gfx::Transform::Affine(0.0, 0.0, 0.0, 0.0, 0.0, 0.0); ASSERT_FALSE(uninvertible_matrix.IsInvertible()); CopyProperties(root, child); @@ -2459,7 +2460,8 @@ child->SetBounds(gfx::Size(50, 50)); child->SetDrawsContent(true); - gfx::Transform uninvertible_matrix(0.0, 0.0, 0.0, 0.0, 0.0, 0.0); + auto uninvertible_matrix = + gfx::Transform::Affine(0.0, 0.0, 0.0, 0.0, 0.0, 0.0); ASSERT_FALSE(uninvertible_matrix.IsInvertible()); CopyProperties(root, child);
diff --git a/cc/trees/draw_property_utils.cc b/cc/trees/draw_property_utils.cc index a97f92c..0204347e 100644 --- a/cc/trees/draw_property_utils.cc +++ b/cc/trees/draw_property_utils.cc
@@ -602,8 +602,9 @@ template <typename LayerType> gfx::Transform ScreenSpaceTransformInternal(LayerType* layer, const TransformTree& tree) { - gfx::Transform xform(1, 0, 0, 1, layer->offset_to_transform_parent().x(), - layer->offset_to_transform_parent().y()); + gfx::Transform xform = + gfx::Transform::MakeTranslation(layer->offset_to_transform_parent().x(), + layer->offset_to_transform_parent().y()); gfx::Transform ssxform = tree.ToScreen(layer->transform_tree_index()); xform.ConcatTransform(ssxform); return xform;
diff --git a/cc/trees/layer_tree_host_unittest.cc b/cc/trees/layer_tree_host_unittest.cc index 3677b99..0218c8e3 100644 --- a/cc/trees/layer_tree_host_unittest.cc +++ b/cc/trees/layer_tree_host_unittest.cc
@@ -4307,7 +4307,7 @@ LayerTreeHostTest::SetupTree(); scoped_refptr<Layer> layer = PictureLayer::Create(&client_); - layer->SetTransform(gfx::Transform(0.0, 0.0, 0.0, 0.0, 0.0, 0.0)); + layer->SetTransform(gfx::Transform::Affine(0.0, 0.0, 0.0, 0.0, 0.0, 0.0)); layer->SetBounds(gfx::Size(10, 10)); layer_tree_host()->root_layer()->AddChild(layer); client_.set_bounds(layer->bounds());
diff --git a/cc/trees/occlusion_tracker.cc b/cc/trees/occlusion_tracker.cc index e3c3c2a2..fdb210cf 100644 --- a/cc/trees/occlusion_tracker.cc +++ b/cc/trees/occlusion_tracker.cc
@@ -166,9 +166,9 @@ } size_t last_index = stack_.size() - 1; - gfx::Transform old_target_to_new_target_transform( - inverse_new_target_screen_space_transform, - old_target_surface->screen_space_transform()); + gfx::Transform old_target_to_new_target_transform = + inverse_new_target_screen_space_transform * + old_target_surface->screen_space_transform(); stack_[last_index].occlusion_from_outside_target = TransformSurfaceOpaqueRegion( stack_[last_index - 1].occlusion_from_outside_target, false,
diff --git a/cc/trees/property_tree.cc b/cc/trees/property_tree.cc index f38a246..3dd0e67 100644 --- a/cc/trees/property_tree.cc +++ b/cc/trees/property_tree.cc
@@ -1529,8 +1529,8 @@ const TransformTree& transform_tree = property_trees()->transform_tree(); const TransformNode* transform_node = transform_tree.Node(scroll_node->transform_id); - gfx::Transform screen_space_transform( - 1, 0, 0, 1, scroll_node->offset_to_transform_parent.x(), + gfx::Transform screen_space_transform = gfx::Transform::MakeTranslation( + scroll_node->offset_to_transform_parent.x(), scroll_node->offset_to_transform_parent.y()); screen_space_transform.ConcatTransform( transform_tree.ToScreen(transform_node->id));
diff --git a/chrome/android/features/start_surface/java/src/org/chromium/chrome/features/start_surface/StartSurfaceConfiguration.java b/chrome/android/features/start_surface/java/src/org/chromium/chrome/features/start_surface/StartSurfaceConfiguration.java index d72b0c7..dc5e2fe 100644 --- a/chrome/android/features/start_surface/java/src/org/chromium/chrome/features/start_surface/StartSurfaceConfiguration.java +++ b/chrome/android/features/start_surface/java/src/org/chromium/chrome/features/start_surface/StartSurfaceConfiguration.java
@@ -28,9 +28,6 @@ public static final StringCachedFieldTrialParameter START_SURFACE_VARIATION = new StringCachedFieldTrialParameter( ChromeFeatureList.START_SURFACE_ANDROID, "start_surface_variation", "single"); - public static final BooleanCachedFieldTrialParameter START_SURFACE_EXCLUDE_MV_TILES = - new BooleanCachedFieldTrialParameter( - ChromeFeatureList.START_SURFACE_ANDROID, "exclude_mv_tiles", false); public static final BooleanCachedFieldTrialParameter START_SURFACE_HIDE_INCOGNITO_SWITCH_NO_TAB = new BooleanCachedFieldTrialParameter(ChromeFeatureList.START_SURFACE_ANDROID,
diff --git a/chrome/android/features/start_surface/java/src/org/chromium/chrome/features/start_surface/StartSurfaceCoordinator.java b/chrome/android/features/start_surface/java/src/org/chromium/chrome/features/start_surface/StartSurfaceCoordinator.java index 3729541..4835322 100644 --- a/chrome/android/features/start_surface/java/src/org/chromium/chrome/features/start_surface/StartSurfaceCoordinator.java +++ b/chrome/android/features/start_surface/java/src/org/chromium/chrome/features/start_surface/StartSurfaceCoordinator.java
@@ -271,8 +271,6 @@ mCrowButtonDelegate = crowButtonDelegate; mTabSwitcherCustomViewManagerSupplier = new OneshotSupplierImpl<>(); - boolean excludeMVTiles = StartSurfaceConfiguration.START_SURFACE_EXCLUDE_MV_TILES.getValue() - || !mIsStartSurfaceEnabled; boolean excludeQueryTiles = !mIsStartSurfaceEnabled || !CachedFeatureFlags.isEnabled(ChromeFeatureList.QUERY_TILES_ON_START); if (!mIsStartSurfaceEnabled) { @@ -288,7 +286,7 @@ } else { // createSwipeRefreshLayout has to be called before creating any surface. createSwipeRefreshLayout(); - createAndSetStartSurface(excludeMVTiles, excludeQueryTiles); + createAndSetStartSurface(excludeQueryTiles); } TabSwitcher.Controller controller = @@ -304,7 +302,7 @@ mTabModelSelector, mPropertyModel, mIsStartSurfaceEnabled ? this::initializeSecondaryTasksSurface : null, mIsStartSurfaceEnabled, mActivity, mBrowserControlsManager, - this::isActivityFinishingOrDestroyed, excludeMVTiles, excludeQueryTiles, + this::isActivityFinishingOrDestroyed, excludeQueryTiles, startSurfaceOneshotSupplier, hadWarmStart, jankTracker, initializeMVTilesRunnable, mParentTabSupplier, logoContainerView, backPressManager, feedPlaceholderParentView); @@ -673,20 +671,24 @@ return mTasksSurface.isMVTilesInitialized(); } - private void createAndSetStartSurface(boolean excludeMVTiles, boolean excludeQueryTiles) { + /** + * Called only when Start Surface is enabled. + */ + private void createAndSetStartSurface(boolean excludeQueryTiles) { ArrayList<PropertyKey> allProperties = new ArrayList<>(Arrays.asList(TasksSurfaceProperties.ALL_KEYS)); allProperties.addAll(Arrays.asList(StartSurfaceProperties.ALL_KEYS)); mPropertyModel = new PropertyModel(allProperties); + assert mIsStartSurfaceEnabled; + int tabSwitcherType = - mIsStartSurfaceEnabled ? TabSwitcherType.CAROUSEL : TabSwitcherType.GRID; - if (StartSurfaceConfiguration.START_SURFACE_LAST_ACTIVE_TAB_ONLY.getValue()) { - tabSwitcherType = TabSwitcherType.SINGLE; - } + StartSurfaceConfiguration.START_SURFACE_LAST_ACTIVE_TAB_ONLY.getValue() + ? TabSwitcherType.SINGLE + : TabSwitcherType.CAROUSEL; mTasksSurface = createTasksSurface(mActivity, mScrimCoordinator, mPropertyModel, - tabSwitcherType, mParentTabSupplier, !excludeMVTiles, !excludeQueryTiles, - mWindowAndroid, mActivityLifecycleDispatcher, mTabModelSelector, mSnackbarManager, + tabSwitcherType, mParentTabSupplier, true, !excludeQueryTiles, mWindowAndroid, + mActivityLifecycleDispatcher, mTabModelSelector, mSnackbarManager, mDynamicResourceLoaderSupplier, mTabContentManager, mModalDialogManager, mBrowserControlsManager, mTabCreatorManager, mMenuOrKeyboardActionController, mShareDelegateSupplier, mMultiWindowModeStateDispatcher, mContainerView);
diff --git a/chrome/android/features/start_surface/java/src/org/chromium/chrome/features/start_surface/StartSurfaceMediator.java b/chrome/android/features/start_surface/java/src/org/chromium/chrome/features/start_surface/StartSurfaceMediator.java index 9674c04..601a68d 100644 --- a/chrome/android/features/start_surface/java/src/org/chromium/chrome/features/start_surface/StartSurfaceMediator.java +++ b/chrome/android/features/start_surface/java/src/org/chromium/chrome/features/start_surface/StartSurfaceMediator.java
@@ -116,7 +116,6 @@ private final boolean mIsStartSurfaceEnabled; private final ObserverList<StartSurface.StateObserver> mStateObservers = new ObserverList<>(); private final boolean mHadWarmStart; - private final boolean mExcludeMVTiles; private final boolean mExcludeQueryTiles; private final Runnable mInitializeMVTilesRunnable; private final Supplier<Tab> mParentTabSupplier; @@ -195,9 +194,9 @@ @Nullable SecondaryTasksSurfaceInitializer secondaryTasksSurfaceInitializer, boolean isStartSurfaceEnabled, Context context, BrowserControlsStateProvider browserControlsStateProvider, - ActivityStateChecker activityStateChecker, boolean excludeMVTiles, - boolean excludeQueryTiles, OneshotSupplier<StartSurface> startSurfaceSupplier, - boolean hadWarmStart, JankTracker jankTracker, Runnable initializeMVTilesRunnable, + ActivityStateChecker activityStateChecker, boolean excludeQueryTiles, + OneshotSupplier<StartSurface> startSurfaceSupplier, boolean hadWarmStart, + JankTracker jankTracker, Runnable initializeMVTilesRunnable, Supplier<Tab> parentTabSupplier, View logoContainerView, BackPressManager backPressManager, ViewGroup feedPlaceholderParentView) { mController = controller; @@ -209,7 +208,6 @@ mContext = context; mBrowserControlsStateProvider = browserControlsStateProvider; mActivityStateChecker = activityStateChecker; - mExcludeMVTiles = excludeMVTiles; mExcludeQueryTiles = excludeQueryTiles; mStartSurfaceSupplier = startSurfaceSupplier; mHadWarmStart = hadWarmStart; @@ -1123,7 +1121,7 @@ } private void setMVTilesVisibility(boolean isVisible) { - if (mExcludeMVTiles) return; + if (mInitializeMVTilesRunnable == null) return; if (isVisible && mInitializeMVTilesRunnable != null) mInitializeMVTilesRunnable.run(); mPropertyModel.set(MV_TILES_VISIBLE, isVisible); }
diff --git a/chrome/android/features/start_surface/javatests/src/org/chromium/chrome/features/start_surface/InstantStartTest.java b/chrome/android/features/start_surface/javatests/src/org/chromium/chrome/features/start_surface/InstantStartTest.java index b16861b..510d62d 100644 --- a/chrome/android/features/start_surface/javatests/src/org/chromium/chrome/features/start_surface/InstantStartTest.java +++ b/chrome/android/features/start_surface/javatests/src/org/chromium/chrome/features/start_surface/InstantStartTest.java
@@ -28,7 +28,6 @@ import androidx.test.filters.MediumTest; import androidx.test.filters.SmallTest; -import org.hamcrest.core.AllOf; import org.junit.After; import org.junit.Assert; import org.junit.Before; @@ -304,46 +303,6 @@ @Test @SmallTest - @Feature({"RenderTest"}) - // clang-format off - @EnableFeatures({ChromeFeatureList.TAB_SWITCHER_ON_RETURN + "<Study,", - ChromeFeatureList.START_SURFACE_ANDROID + "<Study"}) - @CommandLineFlags.Add({ChromeSwitches.DISABLE_NATIVE_INITIALIZATION, - // Disable feed placeholder animation because we can't render it in exactly the same way - // for each run. - FeedPlaceholderLayout.DISABLE_ANIMATION_SWITCH, - INSTANT_START_TEST_BASE_PARAMS + - "/exclude_mv_tiles/true" + - "/hide_switch_when_no_incognito_tabs/true" + - "/show_last_active_tab_only/true"}) - public void renderSingleAsHomepage_SingleTabNoMVTiles() - throws IOException { - // clang-format on - - StartSurfaceTestUtils.createTabStateFile(new int[] {0}); - StartSurfaceTestUtils.createThumbnailBitmapAndWriteToFile(0); - TabAttributeCache.setTitleForTesting(0, "Google"); - - StartSurfaceTestUtils.startMainActivityFromLauncher(mActivityTestRule); - ChromeTabbedActivity cta = mActivityTestRule.getActivity(); - StartSurfaceTestUtils.waitForOverviewVisible(cta); - - View surface = cta.findViewById(R.id.primary_tasks_surface_view); - - ViewUtils.onViewWaiting(AllOf.allOf(withId(R.id.single_tab_view), isDisplayed())); - ChromeRenderTestRule.sanitize(surface); - // TODO(crbug.com/1065314): fix favicon. - mRenderTestRule.render(surface, "singlePane_singleTab_noMV4_FeedV2"); - - // Initializes native. - StartSurfaceTestUtils.startAndWaitNativeInitialization(mActivityTestRule); - - // TODO(crbug.com/1065314): fix login button animation in post-native rendering and - // make sure post-native single-tab card looks the same. - } - - @Test - @SmallTest @DisableFeatures(ChromeFeatureList.START_SURFACE_ANDROID) public void testInstantStartWithoutStartSurface() throws IOException { StartSurfaceTestUtils.createTabStateFile(new int[] {123}); @@ -471,7 +430,7 @@ // Disable feed placeholder animation because we can't render it in exactly the same // way for each run. FeedPlaceholderLayout.DISABLE_ANIMATION_SWITCH, - INSTANT_START_TEST_BASE_PARAMS + "/exclude_mv_tiles/false"}) + INSTANT_START_TEST_BASE_PARAMS}) public void testMVTilesWithExploreSitesView() throws InterruptedException, IOException { // clang-format on FakeMostVisitedSites mostVisitedSites = StartSurfaceTestUtils.setMVTiles(mSuggestionsDeps);
diff --git a/chrome/android/features/start_surface/javatests/src/org/chromium/chrome/features/start_surface/StartSurfaceNoTabsTest.java b/chrome/android/features/start_surface/javatests/src/org/chromium/chrome/features/start_surface/StartSurfaceNoTabsTest.java index 6cf58e1d..e472985 100644 --- a/chrome/android/features/start_surface/javatests/src/org/chromium/chrome/features/start_surface/StartSurfaceNoTabsTest.java +++ b/chrome/android/features/start_surface/javatests/src/org/chromium/chrome/features/start_surface/StartSurfaceNoTabsTest.java
@@ -140,7 +140,6 @@ @MediumTest @Feature({"StartSurface"}) // clang-format off - @CommandLineFlags.Add({BASE_PARAMS + "exclude_mv_tiles/true"}) @DisabledTest(message = "https://crbug.com/1263910") public void testShow_SingleAsHomepage_SingleTabSwitcher_NoTabs() { // clang-format on @@ -152,7 +151,7 @@ onView(withId(R.id.primary_tasks_surface_view)).check(matches(isDisplayed())); onView(withId(R.id.search_box_text)).check(matches(isDisplayed())); - onView(withId(R.id.mv_tiles_container)).check(matches(withEffectiveVisibility(GONE))); + onView(withId(R.id.mv_tiles_container)).check(matches(isDisplayed())); onView(withId(R.id.tab_switcher_title)).check(matches(withEffectiveVisibility(GONE))); onView(withId(R.id.carousel_tab_switcher_container)) .check(matches(withEffectiveVisibility(GONE)));
diff --git a/chrome/android/features/start_surface/javatests/src/org/chromium/chrome/features/start_surface/StartSurfaceTest.java b/chrome/android/features/start_surface/javatests/src/org/chromium/chrome/features/start_surface/StartSurfaceTest.java index 3727214e..d71fa60 100644 --- a/chrome/android/features/start_surface/javatests/src/org/chromium/chrome/features/start_surface/StartSurfaceTest.java +++ b/chrome/android/features/start_surface/javatests/src/org/chromium/chrome/features/start_surface/StartSurfaceTest.java
@@ -258,58 +258,10 @@ @Test @LargeTest @Feature({"StartSurface"}) - @CommandLineFlags. - Add({START_SURFACE_TEST_BASE_PARAMS + "exclude_mv_tiles/true/show_last_active_tab_only/false" - + "/open_ntp_instead_of_start/false/tab_count_button_on_start_surface/false" - + "/open_start_as_homepage/true"}) - // clang-format off - public void testShow_SingleAsHomepage_NoMVTiles() { - // clang-format on - if (!mImmediateReturn) { - StartSurfaceTestUtils.pressHomePageButton(mActivityTestRule.getActivity()); - } - ChromeTabbedActivity cta = mActivityTestRule.getActivity(); - StartSurfaceTestUtils.waitForOverviewVisible( - mLayoutChangedCallbackHelper, mCurrentlyActiveLayout, cta); - - onViewWaiting(withId(R.id.primary_tasks_surface_view)); - onViewWaiting(withId(R.id.search_box_text)); - onView(withId(R.id.mv_tiles_container)).check(matches(withEffectiveVisibility(GONE))); - onView(withId(R.id.tab_switcher_title)).check(matches(isDisplayed())); - onView(withId(R.id.carousel_tab_switcher_container)).check(matches(isDisplayed())); - onView(withId(R.id.tasks_surface_body)).check(matches(isDisplayed())); - - if (!isInstantReturn()) { - // TODO(crbug.com/1076274): fix toolbar to make incognito switch part of the view. - onView(withId(R.id.incognito_toggle_tabs)) - .check(matches(withEffectiveVisibility(GONE))); - } - - StartSurfaceTestUtils.clickMoreTabs(cta); - onViewWaiting(withId(R.id.secondary_tasks_surface_view)); - - StartSurfaceTestUtils.pressBack(mActivityTestRule); - onViewWaiting(withId(R.id.primary_tasks_surface_view)); - - if (isInstantReturn() - && (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP - && Build.VERSION.SDK_INT < Build.VERSION_CODES.O)) { - // TODO(crbug.com/1092642): Fix androidx.test.espresso.PerformException issue when - // performing a single click on position: 0. See code below. - return; - } - - StartSurfaceTestUtils.clickFirstTabInCarousel(); - LayoutTestUtils.waitForLayout(cta.getLayoutManager(), LayoutType.BROWSING); - } - - @Test - @LargeTest - @Feature({"StartSurface"}) @CommandLineFlags.Add({START_SURFACE_TEST_BASE_PARAMS - + "exclude_mv_tiles/true/open_ntp_instead_of_start/false/open_start_as_homepage/true"}) + + "open_ntp_instead_of_start/false/open_start_as_homepage/true"}) // clang-format off - public void testShow_SingleAsHomepage_SingleTabNoMVTiles() { + public void testShow_SingleAsHomepage_SingleTab() { // clang-format on Assume.assumeFalse("https://crbug.com/1205642, https://crbug.com/1214303", !mUseInstantStart && mImmediateReturn && VERSION.SDK_INT == VERSION_CODES.M); @@ -322,7 +274,7 @@ onViewWaiting(withId(R.id.primary_tasks_surface_view)); onViewWaiting(withId(R.id.search_box_text)); - onView(withId(R.id.mv_tiles_container)).check(matches(withEffectiveVisibility(GONE))); + onView(withId(R.id.mv_tiles_container)).check(matches(isDisplayed())); onView(withId(R.id.tab_switcher_title)).check(matches(withEffectiveVisibility(GONE))); onView(withId(R.id.carousel_tab_switcher_container)).check(matches(isDisplayed())); onView(withId(R.id.single_tab_view)).check(matches(isDisplayed()));
diff --git a/chrome/android/features/start_surface/junit/src/org/chromium/chrome/features/start_surface/StartSurfaceMediatorUnitTest.java b/chrome/android/features/start_surface/junit/src/org/chromium/chrome/features/start_surface/StartSurfaceMediatorUnitTest.java index d3f85076..54058f9 100644 --- a/chrome/android/features/start_surface/junit/src/org/chromium/chrome/features/start_surface/StartSurfaceMediatorUnitTest.java +++ b/chrome/android/features/start_surface/junit/src/org/chromium/chrome/features/start_surface/StartSurfaceMediatorUnitTest.java
@@ -263,7 +263,7 @@ doReturn(false).when(mTabModelSelector).isIncognitoSelected(); StartSurfaceMediator mediator = - createStartSurfaceMediator(/* isStartSurfaceEnabled= */ false, true); + createStartSurfaceMediator(/* isStartSurfaceEnabled= */ false); verify(mTabModelSelector, never()).addObserver(mTabModelSelectorObserverCaptor.capture()); verify(mMainTabGridController) .addTabSwitcherViewObserver(mTabSwitcherVisibilityObserverCaptor.capture()); @@ -290,7 +290,7 @@ doReturn(true).when(mVoiceRecognitionHandler).isVoiceSearchEnabled(); StartSurfaceMediator mediator = - createStartSurfaceMediator(/* isStartSurfaceEnabled= */ true, false); + createStartSurfaceMediator(/* isStartSurfaceEnabled= */ true); verify(mMainTabGridController) .addTabSwitcherViewObserver(mTabSwitcherVisibilityObserverCaptor.capture()); @@ -336,59 +336,6 @@ // TODO(crbug.com/1020223): Test the other SurfaceMode.SINGLE_PANE operations. } - @Test - public void showAndHideSingleSurfaceWithoutMVTiles() { - doReturn(false).when(mTabModelSelector).isIncognitoSelected(); - doReturn(mVoiceRecognitionHandler).when(mOmniboxStub).getVoiceRecognitionHandler(); - doReturn(true).when(mVoiceRecognitionHandler).isVoiceSearchEnabled(); - - StartSurfaceMediator mediator = - createStartSurfaceMediator(/* isStartSurfaceEnabled= */ true, true); - verify(mMainTabGridController) - .addTabSwitcherViewObserver(mTabSwitcherVisibilityObserverCaptor.capture()); - - assertThat(mediator.getStartSurfaceState(), equalTo(StartSurfaceState.NOT_SHOWN)); - // Sets the current StartSurfaceState to SHOWING_START before calling the - // {@link StartSurfaceMediator#showOverview()}. This is because if the current - // StartSurfaceState is NOT_SHOWN, the state will be set default to SHOWING_TABSWITCHER in - // {@link StartSurfaceMediator#showOverview()}. - mediator.setStartSurfaceState(StartSurfaceState.SHOWING_START); - - mediator.showOverview(false); - verify(mMainTabGridController).showTabSwitcherView(eq(false)); - verify(mOmniboxStub, times(2)) - .addUrlFocusChangeListener(mUrlFocusChangeListenerCaptor.capture()); - assertThat(mediator.getStartSurfaceState(), equalTo(StartSurfaceState.SHOWN_HOMEPAGE)); - assertThat(mPropertyModel.get(IS_INCOGNITO), equalTo(false)); - assertThat(mPropertyModel.get(IS_VOICE_RECOGNITION_BUTTON_VISIBLE), equalTo(true)); - assertThat(mPropertyModel.get(IS_EXPLORE_SURFACE_VISIBLE), equalTo(true)); - assertThat(mPropertyModel.get(MV_TILES_VISIBLE), equalTo(false)); - assertThat(mPropertyModel.get(IS_SHOWING_OVERVIEW), equalTo(true)); - - mTabSwitcherVisibilityObserverCaptor.getValue().startedShowing(); - mTabSwitcherVisibilityObserverCaptor.getValue().finishedShowing(); - - UrlFocusChangeListener urlFocusChangeListener = - mUrlFocusChangeListenerCaptor.getAllValues().get(1); - - urlFocusChangeListener.onUrlFocusChange(true); - assertThat(mPropertyModel.get(IS_FAKE_SEARCH_BOX_VISIBLE), equalTo(false)); - urlFocusChangeListener.onUrlFocusChange(false); - assertThat(mPropertyModel.get(IS_FAKE_SEARCH_BOX_VISIBLE), equalTo(true)); - assertThat(mPropertyModel.get(IS_VOICE_RECOGNITION_BUTTON_VISIBLE), equalTo(true)); - - mediator.hideTabSwitcherView(true); - verify(mMainTabGridController).hideTabSwitcherView(eq(true)); - - mTabSwitcherVisibilityObserverCaptor.getValue().startedHiding(); - assertThat(mPropertyModel.get(IS_SHOWING_OVERVIEW), equalTo(false)); - verify(mOmniboxStub).removeUrlFocusChangeListener(urlFocusChangeListener); - - mTabSwitcherVisibilityObserverCaptor.getValue().finishedHiding(); - - // TODO(crbug.com/1020223): Test the other SurfaceMode.SINGLE_PANE operations. - } - // TODO(crbug.com/1020223): Test SurfaceMode.SINGLE_PANE and SurfaceMode.TWO_PANES modes. @Test public void hideTabCarouselWithNoTabs() { @@ -397,7 +344,7 @@ doReturn(true).when(mVoiceRecognitionHandler).isVoiceSearchEnabled(); StartSurfaceMediator mediator = - createStartSurfaceMediator(/* isStartSurfaceEnabled= */ true, false); + createStartSurfaceMediator(/* isStartSurfaceEnabled= */ true); doReturn(0).when(mNormalTabModel).getCount(); mediator.setStartSurfaceState(StartSurfaceState.SHOWN_HOMEPAGE); @@ -416,7 +363,7 @@ doReturn(true).when(mVoiceRecognitionHandler).isVoiceSearchEnabled(); StartSurfaceMediator mediator = - createStartSurfaceMediator(/* isStartSurfaceEnabled= */ true, false); + createStartSurfaceMediator(/* isStartSurfaceEnabled= */ true); doReturn(2).when(mNormalTabModel).getCount(); doReturn(true).when(mTabModelSelector).isTabStateInitialized(); @@ -447,7 +394,7 @@ doReturn(true).when(mVoiceRecognitionHandler).isVoiceSearchEnabled(); StartSurfaceMediator mediator = - createStartSurfaceMediator(/* isStartSurfaceEnabled= */ true, false); + createStartSurfaceMediator(/* isStartSurfaceEnabled= */ true); doReturn(1).when(mNormalTabModel).getCount(); @@ -487,7 +434,7 @@ mTabModels.clear(); StartSurfaceMediator mediator = - createStartSurfaceMediator(/* isStartSurfaceEnabled= */ true, false); + createStartSurfaceMediator(/* isStartSurfaceEnabled= */ true); verify(mTabModelSelector).addObserver(mTabModelSelectorObserverCaptor.capture()); mediator.setStartSurfaceState(StartSurfaceState.SHOWN_HOMEPAGE); @@ -506,7 +453,7 @@ mTabModels.clear(); StartSurfaceMediator mediator = - createStartSurfaceMediator(/* isStartSurfaceEnabled= */ true, false); + createStartSurfaceMediator(/* isStartSurfaceEnabled= */ true); verify(mTabModelSelector).addObserver(mTabModelSelectorObserverCaptor.capture()); mediator.setStartSurfaceState(StartSurfaceState.SHOWN_HOMEPAGE); @@ -534,7 +481,7 @@ mTabModels.clear(); StartSurfaceMediator mediator = - createStartSurfaceMediator(/* isStartSurfaceEnabled= */ true, false); + createStartSurfaceMediator(/* isStartSurfaceEnabled= */ true); verify(mTabModelSelector).addObserver(mTabModelSelectorObserverCaptor.capture()); mTabModels.add(mNormalTabModel); @@ -561,7 +508,7 @@ doReturn(true).when(mVoiceRecognitionHandler).isVoiceSearchEnabled(); StartSurfaceMediator mediator = - createStartSurfaceMediator(/* isStartSurfaceEnabled= */ true, false); + createStartSurfaceMediator(/* isStartSurfaceEnabled= */ true); verify(mNormalTabModel, never()).addObserver(mTabModelObserverCaptor.capture()); mediator.setStartSurfaceState(StartSurfaceState.SHOWING_HOMEPAGE); @@ -579,7 +526,7 @@ doReturn(true).when(mVoiceRecognitionHandler).isVoiceSearchEnabled(); StartSurfaceMediator mediator = - createStartSurfaceMediator(/* isStartSurfaceEnabled= */ true, false); + createStartSurfaceMediator(/* isStartSurfaceEnabled= */ true); verify(mTabModelSelector, never()).addObserver(mTabModelSelectorObserverCaptor.capture()); @@ -598,7 +545,7 @@ doReturn(true).when(mVoiceRecognitionHandler).isVoiceSearchEnabled(); StartSurfaceMediator mediator = - createStartSurfaceMediator(/* isStartSurfaceEnabled= */ true, false); + createStartSurfaceMediator(/* isStartSurfaceEnabled= */ true); assertThat(mediator.getStartSurfaceState(), equalTo(StartSurfaceState.NOT_SHOWN)); doReturn(2).when(mNormalTabModel).getCount(); @@ -650,7 +597,7 @@ doReturn(true).when(mVoiceRecognitionHandler).isVoiceSearchEnabled(); StartSurfaceMediator mediator = - createStartSurfaceMediator(/* isStartSurfaceEnabled= */ true, false); + createStartSurfaceMediator(/* isStartSurfaceEnabled= */ true); mediator.setSecondaryTasksSurfacePropertyModel(mSecondaryTasksSurfacePropertyModel); assertThat(mediator.getStartSurfaceState(), equalTo(StartSurfaceState.NOT_SHOWN)); @@ -683,7 +630,7 @@ doReturn(true).when(mVoiceRecognitionHandler).isVoiceSearchEnabled(); StartSurfaceMediator mediator = - createStartSurfaceMediator(/* isStartSurfaceEnabled= */ true, false); + createStartSurfaceMediator(/* isStartSurfaceEnabled= */ true); mediator.setSecondaryTasksSurfacePropertyModel(mSecondaryTasksSurfacePropertyModel); assertThat(mediator.getStartSurfaceState(), equalTo(StartSurfaceState.NOT_SHOWN)); @@ -727,7 +674,7 @@ doReturn(true).when(mVoiceRecognitionHandler).isVoiceSearchEnabled(); StartSurfaceMediator mediator = - createStartSurfaceMediator(/* isStartSurfaceEnabled= */ true, false); + createStartSurfaceMediator(/* isStartSurfaceEnabled= */ true); assertThat(mediator.getStartSurfaceState(), equalTo(StartSurfaceState.NOT_SHOWN)); doReturn(2).when(mNormalTabModel).getCount(); @@ -783,7 +730,7 @@ doReturn(true).when(mVoiceRecognitionHandler).isVoiceSearchEnabled(); StartSurfaceMediator mediator = - createStartSurfaceMediator(/* isStartSurfaceEnabled= */ true, false); + createStartSurfaceMediator(/* isStartSurfaceEnabled= */ true); mediator.setSecondaryTasksSurfacePropertyModel(mSecondaryTasksSurfacePropertyModel); assertThat(mediator.getStartSurfaceState(), equalTo(StartSurfaceState.NOT_SHOWN)); @@ -819,7 +766,7 @@ doReturn(true).when(mVoiceRecognitionHandler).isVoiceSearchEnabled(); StartSurfaceMediator mediator = - createStartSurfaceMediator(/* isStartSurfaceEnabled= */ true, false); + createStartSurfaceMediator(/* isStartSurfaceEnabled= */ true); verify(mMainTabGridController) .addTabSwitcherViewObserver(mTabSwitcherVisibilityObserverCaptor.capture()); mediator.setSecondaryTasksSurfacePropertyModel(mSecondaryTasksSurfacePropertyModel); @@ -858,7 +805,7 @@ doReturn(true).when(mVoiceRecognitionHandler).isVoiceSearchEnabled(); StartSurfaceMediator mediator = - createStartSurfaceMediator(/* isStartSurfaceEnabled= */ true, false); + createStartSurfaceMediator(/* isStartSurfaceEnabled= */ true); mediator.setStartSurfaceState(StartSurfaceState.SHOWING_HOMEPAGE); mediator.showOverview(false); verify(mTabModelSelector).addObserver(mTabModelSelectorObserverCaptor.capture()); @@ -896,7 +843,7 @@ doReturn(true).when(mVoiceRecognitionHandler).isVoiceSearchEnabled(); StartSurfaceMediator mediator = - createStartSurfaceMediator(/* isStartSurfaceEnabled= */ true, false); + createStartSurfaceMediator(/* isStartSurfaceEnabled= */ true); mediator.setStartSurfaceState(StartSurfaceState.SHOWN_HOMEPAGE); mediator.showOverview(false); verify(mTabModelSelector).addObserver(mTabModelSelectorObserverCaptor.capture()); @@ -934,7 +881,7 @@ doReturn(true).when(mVoiceRecognitionHandler).isVoiceSearchEnabled(); StartSurfaceMediator mediator = - createStartSurfaceMediator(/* isStartSurfaceEnabled= */ true, false); + createStartSurfaceMediator(/* isStartSurfaceEnabled= */ true); verify(mMainTabGridController) .addTabSwitcherViewObserver(mTabSwitcherVisibilityObserverCaptor.capture()); @@ -977,7 +924,7 @@ doReturn(mVoiceRecognitionHandler).when(mOmniboxStub).getVoiceRecognitionHandler(); doReturn(true).when(mVoiceRecognitionHandler).isVoiceSearchEnabled(); StartSurfaceMediator mediator = - createStartSurfaceMediator(/* isStartSurfaceEnabled= */ true, false); + createStartSurfaceMediator(/* isStartSurfaceEnabled= */ true); String instanceState = "state"; StartSurfaceUserData.getInstance().saveFeedInstanceState(instanceState); @@ -995,7 +942,7 @@ doReturn(mVoiceRecognitionHandler).when(mOmniboxStub).getVoiceRecognitionHandler(); doReturn(true).when(mVoiceRecognitionHandler).isVoiceSearchEnabled(); StartSurfaceMediator mediator = - createStartSurfaceMediator(/* isStartSurfaceEnabled= */ true, false); + createStartSurfaceMediator(/* isStartSurfaceEnabled= */ true); String instanceState = "state"; StartSurfaceUserData.getInstance().saveFeedInstanceState(instanceState); @@ -1014,7 +961,7 @@ doReturn(true).when(mVoiceRecognitionHandler).isVoiceSearchEnabled(); StartSurfaceMediator mediator = - createStartSurfaceMediator(/* isStartSurfaceEnabled= */ true, false); + createStartSurfaceMediator(/* isStartSurfaceEnabled= */ true); verify(mMainTabGridController) .addTabSwitcherViewObserver(mTabSwitcherVisibilityObserverCaptor.capture()); @@ -1030,7 +977,7 @@ doReturn(true).when(mVoiceRecognitionHandler).isVoiceSearchEnabled(); StartSurfaceMediator mediator = - createStartSurfaceMediator(/* isStartSurfaceEnabled= */ true, false); + createStartSurfaceMediator(/* isStartSurfaceEnabled= */ true); verify(mMainTabGridController) .addTabSwitcherViewObserver(mTabSwitcherVisibilityObserverCaptor.capture()); @@ -1071,7 +1018,7 @@ doReturn(true).when(mVoiceRecognitionHandler).isVoiceSearchEnabled(); StartSurfaceMediator mediator = - createStartSurfaceMediator(/* isStartSurfaceEnabled= */ true, false); + createStartSurfaceMediator(/* isStartSurfaceEnabled= */ true); InOrder mainTabGridController = inOrder(mMainTabGridController); mainTabGridController.verify(mMainTabGridController) .addTabSwitcherViewObserver(mTabSwitcherVisibilityObserverCaptor.capture()); @@ -1127,7 +1074,7 @@ doReturn(true).when(mVoiceRecognitionHandler).isVoiceSearchEnabled(); StartSurfaceMediator mediator = - createStartSurfaceMediator(/* isStartSurfaceEnabled= */ true, false); + createStartSurfaceMediator(/* isStartSurfaceEnabled= */ true); InOrder mainTabGridController = inOrder(mMainTabGridController); mainTabGridController.verify(mMainTabGridController) .addTabSwitcherViewObserver(mTabSwitcherVisibilityObserverCaptor.capture()); @@ -1172,7 +1119,7 @@ .when(mBrowserControlsStateProvider) .addObserver(mBrowserControlsStateProviderCaptor.capture()); StartSurfaceMediator mediator = - createStartSurfaceMediator(/* isStartSurfaceEnabled= */ true, false); + createStartSurfaceMediator(/* isStartSurfaceEnabled= */ true); // The top margin of homepage should be consistent with top controls min height/offset // (indicator height). @@ -1218,7 +1165,7 @@ doReturn(true).when(mVoiceRecognitionHandler).isVoiceSearchEnabled(); StartSurfaceMediator mediator = createStartSurfaceMediatorWithoutInit( - /* isStartSurfaceEnabled= */ true, /* excludeMVTiles= */ false, + /* isStartSurfaceEnabled= */ true, /* hadWarmStart= */ false); verify(mMainTabGridController) .addTabSwitcherViewObserver(mTabSwitcherVisibilityObserverCaptor.capture()); @@ -1254,7 +1201,6 @@ resources.getDimensionPixelSize(R.dimen.tab_switcher_title_top_margin); createStartSurfaceMediatorWithoutInit(/* isStartSurfaceEnabled= */ true, - /* excludeMVTiles= */ false, /* hadWarmStart= */ false); assertThat(mPropertyModel.get(TASKS_SURFACE_BODY_TOP_MARGIN), equalTo(tasksSurfaceBodyTopMargin)); @@ -1272,7 +1218,7 @@ doReturn(true).when(mVoiceRecognitionHandler).isVoiceSearchEnabled(); StartSurfaceMediator mediator = createStartSurfaceMediator( - /* isStartSurfaceEnabled= */ true, /* excludeMVTiles= */ false, + /* isStartSurfaceEnabled= */ true, /* hadWarmStart= */ true); assertFalse(mediator.shouldShowFeedPlaceholder()); @@ -1294,7 +1240,7 @@ doReturn(true).when(mVoiceRecognitionHandler).isVoiceSearchEnabled(); StartSurfaceMediator mediator = - createStartSurfaceMediator(/* isStartSurfaceEnabled= */ true, false); + createStartSurfaceMediator(/* isStartSurfaceEnabled= */ true); mediator.setSecondaryTasksSurfacePropertyModel(mSecondaryTasksSurfacePropertyModel); mediator.setSecondaryTasksSurfaceController(mSecondaryTasksSurfaceController); assertThat(mediator.getStartSurfaceState(), equalTo(StartSurfaceState.NOT_SHOWN)); @@ -1317,7 +1263,7 @@ doReturn(TabSwitcherType.SINGLE).when(mMainTabGridController).getTabSwitcherType(); StartSurfaceMediator mediator = - createStartSurfaceMediator(/* isStartSurfaceEnabled= */ true, false); + createStartSurfaceMediator(/* isStartSurfaceEnabled= */ true); doReturn(2).when(mNormalTabModel).getCount(); doReturn(true).when(mTabModelSelector).isTabStateInitialized(); @@ -1344,7 +1290,7 @@ when(mTabModelSelector.getCurrentTab()).thenReturn(regularTab); StartSurfaceMediator mediator = - createStartSurfaceMediator(/* isStartSurfaceEnabled= */ true, false); + createStartSurfaceMediator(/* isStartSurfaceEnabled= */ true); mediator.setStartSurfaceState(StartSurfaceState.SHOWING_HOMEPAGE); mediator.showOverview(false); @@ -1364,7 +1310,7 @@ doReturn(true).when(mTabModelSelector).isTabStateInitialized(); StartSurfaceMediator mediator = - createStartSurfaceMediator(/* isStartSurfaceEnabled= */ true, false); + createStartSurfaceMediator(/* isStartSurfaceEnabled= */ true); mediator.setStartSurfaceState(StartSurfaceState.SHOWN_HOMEPAGE); verify(mInitializeMVTilesRunnable).run(); } @@ -1414,8 +1360,7 @@ public void testFeedReliabilityLoggerPageLoadStarted() { doReturn(mVoiceRecognitionHandler).when(mOmniboxStub).getVoiceRecognitionHandler(); - StartSurfaceMediator mediator = - createStartSurfaceMediator(/*isStartSurfaceEnabled=*/true, false); + StartSurfaceMediator mediator = createStartSurfaceMediator(/*isStartSurfaceEnabled=*/true); mediator.setStartSurfaceState(StartSurfaceState.SHOWN_HOMEPAGE); mediator.showOverview(true); @@ -1429,8 +1374,7 @@ public void testFeedReliabilityLoggerObservesUrlFocus() { doReturn(mVoiceRecognitionHandler).when(mOmniboxStub).getVoiceRecognitionHandler(); - StartSurfaceMediator mediator = - createStartSurfaceMediator(/*isStartSurfaceEnabled=*/true, false); + StartSurfaceMediator mediator = createStartSurfaceMediator(/*isStartSurfaceEnabled=*/true); verify(mMainTabGridController) .addTabSwitcherViewObserver(mTabSwitcherVisibilityObserverCaptor.capture()); mediator.setStartSurfaceState(StartSurfaceState.SHOWN_HOMEPAGE); @@ -1455,8 +1399,7 @@ @Test public void testFeedReliabilityLoggerBackPressed() { doReturn(mVoiceRecognitionHandler).when(mOmniboxStub).getVoiceRecognitionHandler(); - StartSurfaceMediator mediator = - createStartSurfaceMediator(/*isStartSurfaceEnabled=*/true, false); + StartSurfaceMediator mediator = createStartSurfaceMediator(/*isStartSurfaceEnabled=*/true); mediator.setStartSurfaceState(StartSurfaceState.SHOWN_HOMEPAGE); mediator.showOverview(true); mediator.onBackPressed(); @@ -1476,8 +1419,7 @@ .when(mSecondaryTasksSurfaceController) .isDialogVisible(); - StartSurfaceMediator mediator = - createStartSurfaceMediator(/*isStartSurfaceEnabled=*/true, false); + StartSurfaceMediator mediator = createStartSurfaceMediator(/*isStartSurfaceEnabled=*/true); mediator.setSecondaryTasksSurfacePropertyModel(mSecondaryTasksSurfacePropertyModel); mediator.setSecondaryTasksSurfaceController(mSecondaryTasksSurfaceController); @@ -1525,8 +1467,7 @@ doReturn(false).when(mTabModelSelector).isIncognitoSelected(); doReturn(mVoiceRecognitionHandler).when(mOmniboxStub).getVoiceRecognitionHandler(); doReturn(true).when(mVoiceRecognitionHandler).isVoiceSearchEnabled(); - StartSurfaceMediator mediator = - createStartSurfaceMediator(/*isStartSurfaceEnabled=*/true, false); + StartSurfaceMediator mediator = createStartSurfaceMediator(/*isStartSurfaceEnabled=*/true); mediator.setStartSurfaceState(StartSurfaceState.SHOWN_HOMEPAGE); Assert.assertEquals(StartSurfaceState.SHOWN_HOMEPAGE, mediator.getStartSurfaceState()); @@ -1551,8 +1492,7 @@ doReturn(mVoiceRecognitionHandler).when(mOmniboxStub).getVoiceRecognitionHandler(); doReturn(true).when(mVoiceRecognitionHandler).isVoiceSearchEnabled(); - StartSurfaceMediator mediator = - createStartSurfaceMediator(/*isStartSurfaceEnabled=*/true, false); + StartSurfaceMediator mediator = createStartSurfaceMediator(/*isStartSurfaceEnabled=*/true); mediator.setSecondaryTasksSurfacePropertyModel(mSecondaryTasksSurfacePropertyModel); mediator.setSecondaryTasksSurfaceController(mSecondaryTasksSurfaceController); @@ -1589,8 +1529,7 @@ doReturn(mVoiceRecognitionHandler).when(mOmniboxStub).getVoiceRecognitionHandler(); doReturn(true).when(mVoiceRecognitionHandler).isVoiceSearchEnabled(); - StartSurfaceMediator mediator = - createStartSurfaceMediator(/*isStartSurfaceEnabled=*/true, false); + StartSurfaceMediator mediator = createStartSurfaceMediator(/*isStartSurfaceEnabled=*/true); mediator.setSecondaryTasksSurfacePropertyModel(mSecondaryTasksSurfacePropertyModel); mediator.setSecondaryTasksSurfaceController(mSecondaryTasksSurfaceController); @@ -1615,16 +1554,14 @@ StartSurfaceState.SHOWN_HOMEPAGE, mediator.getStartSurfaceState()); } - private StartSurfaceMediator createStartSurfaceMediator( - boolean isStartSurfaceEnabled, boolean excludeMVTiles) { - return createStartSurfaceMediator( - isStartSurfaceEnabled, excludeMVTiles, /* hadWarmStart= */ false); + private StartSurfaceMediator createStartSurfaceMediator(boolean isStartSurfaceEnabled) { + return createStartSurfaceMediator(isStartSurfaceEnabled, /* hadWarmStart= */ false); } private StartSurfaceMediator createStartSurfaceMediator( - boolean isStartSurfaceEnabled, boolean excludeMVTiles, boolean hadWarmStart) { - StartSurfaceMediator mediator = createStartSurfaceMediatorWithoutInit( - isStartSurfaceEnabled, excludeMVTiles, hadWarmStart); + boolean isStartSurfaceEnabled, boolean hadWarmStart) { + StartSurfaceMediator mediator = + createStartSurfaceMediatorWithoutInit(isStartSurfaceEnabled, hadWarmStart); mediator.initWithNative(mOmniboxStub, isStartSurfaceEnabled ? mExploreSurfaceCoordinatorFactory : null, mPrefService, null); @@ -1635,15 +1572,15 @@ } private StartSurfaceMediator createStartSurfaceMediatorWithoutInit( - boolean isStartSurfaceEnabled, boolean excludeMVTiles, boolean hadWarmStart) { + boolean isStartSurfaceEnabled, boolean hadWarmStart) { return new StartSurfaceMediator(mMainTabGridController, null /* tabSwitcherContainer */, mTabModelSelector, !isStartSurfaceEnabled ? null : mPropertyModel, isStartSurfaceEnabled ? mSecondaryTasksSurfaceInitializer : null, isStartSurfaceEnabled, ContextUtils.getApplicationContext(), - mBrowserControlsStateProvider, mActivityStateChecker, excludeMVTiles, - true /* excludeQueryTiles */, mStartSurfaceSupplier, hadWarmStart, - new DummyJankTracker(), mInitializeMVTilesRunnable, mParentTabSupplier, - mLogoContainerView, mBackPressManager, null /* feedPlaceholderParentView */); + mBrowserControlsStateProvider, mActivityStateChecker, true /* excludeQueryTiles */, + mStartSurfaceSupplier, hadWarmStart, new DummyJankTracker(), + mInitializeMVTilesRunnable, mParentTabSupplier, mLogoContainerView, + mBackPressManager, null /* feedPlaceholderParentView */); } private void onControlsOffsetChanged(int topOffset, int topControlsMinHeightOffset) {
diff --git a/chrome/android/features/tab_ui/javatests/src/org/chromium/chrome/browser/tasks/tab_management/TabSelectionEditorMenuTest.java b/chrome/android/features/tab_ui/javatests/src/org/chromium/chrome/browser/tasks/tab_management/TabSelectionEditorMenuTest.java index 2a8532d4..96f67316 100644 --- a/chrome/android/features/tab_ui/javatests/src/org/chromium/chrome/browser/tasks/tab_management/TabSelectionEditorMenuTest.java +++ b/chrome/android/features/tab_ui/javatests/src/org/chromium/chrome/browser/tasks/tab_management/TabSelectionEditorMenuTest.java
@@ -33,6 +33,7 @@ import org.chromium.base.test.BaseJUnit4ClassRunner; import org.chromium.base.test.util.Batch; import org.chromium.base.test.util.CallbackHelper; +import org.chromium.base.test.util.DisabledTest; import org.chromium.base.test.util.Feature; import org.chromium.chrome.browser.tab.Tab; import org.chromium.chrome.browser.tabmodel.TabModel; @@ -251,6 +252,7 @@ @Test @MediumTest + @DisabledTest(message = "https://crbug.com/1348710") public void testSingleActionView_Click() throws Exception { List<FakeTabSelectionEditorAction> actions = new ArrayList<>(); TestThreadUtils.runOnUiThreadBlocking(() -> {
diff --git a/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/FeedSurfaceCoordinator.java b/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/FeedSurfaceCoordinator.java index d20ff5f..2cc3ef0 100644 --- a/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/FeedSurfaceCoordinator.java +++ b/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/FeedSurfaceCoordinator.java
@@ -619,7 +619,6 @@ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { view.setDefaultFocusHighlightEnabled(false); } - if (mOverScrollDisabled) { view.setOverScrollMode(View.OVER_SCROLL_NEVER); }
diff --git a/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/FeedSurfaceMediator.java b/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/FeedSurfaceMediator.java index e836442..dd606868 100644 --- a/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/FeedSurfaceMediator.java +++ b/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/FeedSurfaceMediator.java
@@ -31,6 +31,8 @@ import org.chromium.chrome.browser.feed.sections.SectionHeaderProperties; import org.chromium.chrome.browser.feed.sections.ViewVisibility; import org.chromium.chrome.browser.feed.sort_ui.FeedOptionsCoordinator; +import org.chromium.chrome.browser.feed.sort_ui.FeedOptionsCoordinator.OptionChangedListener; +import org.chromium.chrome.browser.feed.v2.ContentOrder; import org.chromium.chrome.browser.feed.v2.FeedUserActionType; import org.chromium.chrome.browser.flags.ChromeFeatureList; import org.chromium.chrome.browser.ntp.NewTabPageLaunchOrigin; @@ -75,7 +77,7 @@ @VisibleForTesting(otherwise = VisibleForTesting.PACKAGE_PRIVATE) public class FeedSurfaceMediator implements FeedSurfaceScrollDelegate, TouchEnabledDelegate, TemplateUrlServiceObserver, - ListMenu.Delegate, IdentityManager.Observer { + ListMenu.Delegate, IdentityManager.Observer, OptionChangedListener { private static final String TAG = "FeedSurfaceMediator"; private static final int INTEREST_FEED_HEADER_POSITION = 0; @@ -96,6 +98,7 @@ headerList.get(index).set(SectionHeaderProperties.OPTIONS_INDICATOR_VISIBILITY_KEY, ViewVisibility.VISIBLE); } + updateLayout(newStream.supportsOptions(), false); if (!mSettingUpStreams) { logSwitchedFeeds(newStream); bindStream(newStream, /*shouldScrollToTop=*/true); @@ -183,6 +186,9 @@ private static PrefChangeRegistrar sTestPrefChangeRegistar; private static PrefService sPrefServiceForTest; + private static final int SPAN_COUNT_SMALL_WIDTH = 1; + private static final int SPAN_COUNT_LARGE_WIDTH = 2; + private static final int SMALL_WIDTH = 600; private final FeedSurfaceCoordinator mCoordinator; private final Context mContext; @@ -244,6 +250,7 @@ Profile.getLastUsedRegularProfile()); mActionDelegate = actionDelegate; mOptionsCoordinator = optionsCoordinator; + mOptionsCoordinator.setOptionsListener(this); if (sTestPrefChangeRegistar != null) { mPrefChangeRegistrar = sTestPrefChangeRegistar; @@ -270,6 +277,27 @@ initialize(); } + @Override + public void onOptionChanged() { + updateLayout(true, false); + } + + private void updateLayout(boolean optionsSupported, boolean overrideSingleSpan) { + ListLayoutHelper listLayoutHelper = + mCoordinator.getHybridListRenderer().getListLayoutHelper(); + if (!FeedFeatures.isMultiColumnFeedEnabled(mContext) || listLayoutHelper == null) return; + int spanCount = overrideSingleSpan ? SPAN_COUNT_SMALL_WIDTH : SPAN_COUNT_LARGE_WIDTH; + if (!overrideSingleSpan && optionsSupported) { + @ContentOrder + int selectedOption = mOptionsCoordinator.getSelectedOptionId(); + // Override to single span count when showing following feed sort by site. + if (ContentOrder.GROUPED == selectedOption) { + spanCount = SPAN_COUNT_SMALL_WIDTH; + } + } + listLayoutHelper.setSpanCount(spanCount); + } + /** Clears any dependencies. */ void destroy() { destroyPropertiesForStream(); @@ -291,6 +319,13 @@ mCoordinator.getView().addOnLayoutChangeListener( (v, left, top, right, bottom, oldLeft, oldTop, oldRight, oldBottom) -> { mSnapScrollHelper.handleScroll(); + if (FeedFeatures.isMultiColumnFeedEnabled(mContext)) { + boolean useSingleSpan = (right - left) <= SMALL_WIDTH; + Stream stream = mTabToStreamMap.get(mSectionHeaderModel.get( + SectionHeaderListProperties.CURRENT_TAB_INDEX_KEY)); + boolean supportsOptions = (stream != null) && stream.supportsOptions(); + updateLayout(supportsOptions, useSingleSpan); + } }); }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/app/bookmarks/BookmarkAddEditFolderActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/app/bookmarks/BookmarkAddEditFolderActivity.java index 45fea68b..ca5e6ff 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/app/bookmarks/BookmarkAddEditFolderActivity.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/app/bookmarks/BookmarkAddEditFolderActivity.java
@@ -20,11 +20,12 @@ import org.chromium.base.metrics.RecordUserAction; import org.chromium.chrome.R; import org.chromium.chrome.browser.SynchronousInitializationActivity; -import org.chromium.chrome.browser.bookmarks.BookmarkBridge.BookmarkItem; import org.chromium.chrome.browser.bookmarks.BookmarkBridge.BookmarkModelObserver; import org.chromium.chrome.browser.bookmarks.BookmarkModel; import org.chromium.chrome.browser.bookmarks.BookmarkTextInputLayout; +import org.chromium.chrome.browser.bookmarks.BookmarkUtils; import org.chromium.components.bookmarks.BookmarkId; +import org.chromium.components.bookmarks.BookmarkItem; import org.chromium.components.browser_ui.widget.TintedDrawable; import java.util.ArrayList; @@ -161,7 +162,7 @@ final EditText editText = mFolderTitle.getEditText(); editText.setText(bookmarkItem.getTitle()); editText.setSelection(editText.getText().length()); - mParentTextView.setEnabled(bookmarkItem.isMovable()); + mParentTextView.setEnabled(BookmarkUtils.isMovable(bookmarkItem)); } mParentTextView.setText(mModel.getBookmarkTitle(mParentId));
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/app/bookmarks/BookmarkEditActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/app/bookmarks/BookmarkEditActivity.java index 403b1a01..c9d22e6 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/app/bookmarks/BookmarkEditActivity.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/app/bookmarks/BookmarkEditActivity.java
@@ -17,11 +17,12 @@ import org.chromium.base.Log; import org.chromium.chrome.R; import org.chromium.chrome.browser.SynchronousInitializationActivity; -import org.chromium.chrome.browser.bookmarks.BookmarkBridge.BookmarkItem; import org.chromium.chrome.browser.bookmarks.BookmarkBridge.BookmarkModelObserver; import org.chromium.chrome.browser.bookmarks.BookmarkModel; import org.chromium.chrome.browser.bookmarks.BookmarkTextInputLayout; +import org.chromium.chrome.browser.bookmarks.BookmarkUtils; import org.chromium.components.bookmarks.BookmarkId; +import org.chromium.components.bookmarks.BookmarkItem; import org.chromium.components.browser_ui.widget.TintedDrawable; import org.chromium.components.url_formatter.UrlFormatter; import org.chromium.url.GURL; @@ -124,7 +125,7 @@ mFolderTextView.setText(mModel.getBookmarkTitle(bookmarkItem.getParentId())); mTitleEditText.setEnabled(bookmarkItem.isEditable()); mUrlEditText.setEnabled(bookmarkItem.isUrlEditable()); - mFolderTextView.setEnabled(bookmarkItem.isMovable()); + mFolderTextView.setEnabled(BookmarkUtils.isMovable(bookmarkItem)); } @Override
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/app/bookmarks/BookmarkFolderSelectActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/app/bookmarks/BookmarkFolderSelectActivity.java index 1e3a7ca..608a95b4a 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/app/bookmarks/BookmarkFolderSelectActivity.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/app/bookmarks/BookmarkFolderSelectActivity.java
@@ -28,13 +28,13 @@ import org.chromium.base.IntentUtils; import org.chromium.chrome.R; import org.chromium.chrome.browser.SynchronousInitializationActivity; -import org.chromium.chrome.browser.bookmarks.BookmarkBridge.BookmarkItem; import org.chromium.chrome.browser.bookmarks.BookmarkBridge.BookmarkModelObserver; import org.chromium.chrome.browser.bookmarks.BookmarkModel; import org.chromium.chrome.browser.bookmarks.BookmarkUtils; import org.chromium.chrome.browser.bookmarks.ReadingListFeatures; import org.chromium.chrome.browser.read_later.ReadingListUtils; import org.chromium.components.bookmarks.BookmarkId; +import org.chromium.components.bookmarks.BookmarkItem; import org.chromium.components.browser_ui.widget.selectable_list.SelectableItemView; import java.util.ArrayList;
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/app/flags/ChromeCachedFlags.java b/chrome/android/java/src/org/chromium/chrome/browser/app/flags/ChromeCachedFlags.java index 0a4365c..6250cfa 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/app/flags/ChromeCachedFlags.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/app/flags/ChromeCachedFlags.java
@@ -166,7 +166,6 @@ add(StartSurfaceConfiguration .SIGNIN_PROMO_NTP_SINCE_FIRST_TIME_SHOWN_LIMIT_HOURS); add(StartSurfaceConfiguration.SIGNIN_PROMO_NTP_RESET_AFTER_HOURS); - add(StartSurfaceConfiguration.START_SURFACE_EXCLUDE_MV_TILES); add(StartSurfaceConfiguration.START_SURFACE_HIDE_INCOGNITO_SWITCH_NO_TAB); add(StartSurfaceConfiguration.START_SURFACE_LAST_ACTIVE_TAB_ONLY); add(StartSurfaceConfiguration.START_SURFACE_OPEN_NTP_INSTEAD_OF_START);
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkActionBar.java b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkActionBar.java index 5e52192..bbfdb42 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkActionBar.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkActionBar.java
@@ -17,12 +17,12 @@ import org.chromium.chrome.R; import org.chromium.chrome.browser.app.bookmarks.BookmarkAddEditFolderActivity; import org.chromium.chrome.browser.app.bookmarks.BookmarkFolderSelectActivity; -import org.chromium.chrome.browser.bookmarks.BookmarkBridge.BookmarkItem; import org.chromium.chrome.browser.incognito.IncognitoUtils; import org.chromium.chrome.browser.renderer_host.ChromeNavigationUIData; import org.chromium.chrome.browser.tab.TabLaunchType; import org.chromium.chrome.browser.tabmodel.document.TabDelegate; import org.chromium.components.bookmarks.BookmarkId; +import org.chromium.components.bookmarks.BookmarkItem; import org.chromium.components.bookmarks.BookmarkType; import org.chromium.components.browser_ui.util.ToolbarUtils; import org.chromium.components.browser_ui.widget.dragreorder.DragReorderableListAdapter;
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkBridge.java b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkBridge.java index 5318562..97b4e47 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkBridge.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkBridge.java
@@ -31,13 +31,12 @@ import org.chromium.chrome.browser.subscriptions.SubscriptionsManager; import org.chromium.chrome.browser.tab.Tab; import org.chromium.components.bookmarks.BookmarkId; +import org.chromium.components.bookmarks.BookmarkItem; import org.chromium.components.bookmarks.BookmarkType; import org.chromium.components.commerce.PriceTracking.ProductPrice; import org.chromium.components.power_bookmarks.PowerBookmarkMeta; import org.chromium.components.power_bookmarks.PowerBookmarkType; import org.chromium.components.power_bookmarks.ShoppingSpecifics; -import org.chromium.components.url_formatter.SchemeDisplay; -import org.chromium.components.url_formatter.UrlFormatter; import org.chromium.content_public.browser.WebContents; import org.chromium.url.GURL; @@ -201,111 +200,6 @@ } /** - * Contains data about a bookmark or bookmark folder. - */ - public static class BookmarkItem { - private final String mTitle; - private final GURL mUrl; - private final BookmarkId mId; - private final boolean mIsFolder; - private final BookmarkId mParentId; - private final boolean mIsEditable; - private final boolean mIsManaged; - private boolean mForceEditableForTesting; - private long mDateAdded; - private boolean mRead; - - @VisibleForTesting - public BookmarkItem(BookmarkId id, String title, GURL url, boolean isFolder, - BookmarkId parentId, boolean isEditable, boolean isManaged, long dateAdded, - boolean read) { - mId = id; - mTitle = title; - mUrl = url; - mIsFolder = isFolder; - mParentId = parentId; - mIsEditable = isEditable; - mIsManaged = isManaged; - mDateAdded = dateAdded; - mRead = read; - } - - /** Returns the title of the bookmark item. */ - public String getTitle() { - return mTitle; - } - - /** Returns the url of the bookmark item. */ - public GURL getUrl() { - return mUrl; - } - - /** Returns the string to display for the item's url. */ - public String getUrlForDisplay() { - return UrlFormatter.formatUrlForSecurityDisplay( - getUrl(), SchemeDisplay.OMIT_HTTP_AND_HTTPS); - } - - /** Returns whether item is a folder or a bookmark. */ - public boolean isFolder() { - return mIsFolder; - } - - /** Returns the parent id of the bookmark item. */ - public BookmarkId getParentId() { - return mParentId; - } - - /** Returns whether this bookmark can be edited. */ - public boolean isEditable() { - return mForceEditableForTesting || mIsEditable; - } - - /** Returns whether this bookmark's URL can be edited */ - public boolean isUrlEditable() { - return isEditable() && mId.getType() == BookmarkType.NORMAL; - } - - /** Returns whether this bookmark can be moved */ - public boolean isMovable() { - return ReadingListUtils.isSwappableReadingListItem(mId) || isReorderable(); - } - - /** Returns whether this bookmark can be moved */ - public boolean isReorderable() { - return isEditable() && mId.getType() == BookmarkType.NORMAL; - } - - /** Returns whether this is a managed bookmark. */ - public boolean isManaged() { - return mIsManaged; - } - - /** Returns the {@link BookmarkId}. */ - public BookmarkId getId() { - return mId; - } - - /** Retuns the timestamp in milliseconds since epoch that the bookmark is added. */ - public long getDateAdded() { - return mDateAdded; - } - - /** - * Returns whether the bookmark is read. Only valid for {@link BookmarkType#READING_LIST}. - * Defaults to "false" for other types. - */ - public boolean isRead() { - return mRead; - } - - // TODO(https://crbug.com/1019217): Remove when BookmarkModel is stubbed in tests instead. - public void forceEditableForTesting() { - mForceEditableForTesting = true; - } - } - - /** * Handler to fetch the bookmarks, titles, urls and folder hierarchy. * @param profile Profile instance corresponding to the active profile. */
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkFolderRow.java b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkFolderRow.java index 0be5f6a9..22a2b044 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkFolderRow.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkFolderRow.java
@@ -11,8 +11,8 @@ import androidx.appcompat.content.res.AppCompatResources; import org.chromium.chrome.R; -import org.chromium.chrome.browser.bookmarks.BookmarkBridge.BookmarkItem; import org.chromium.components.bookmarks.BookmarkId; +import org.chromium.components.bookmarks.BookmarkItem; import org.chromium.components.bookmarks.BookmarkType; /**
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkItemRow.java b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkItemRow.java index 37cfa06..14a5f68d 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkItemRow.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkItemRow.java
@@ -10,9 +10,9 @@ import android.util.AttributeSet; import org.chromium.chrome.R; -import org.chromium.chrome.browser.bookmarks.BookmarkBridge.BookmarkItem; import org.chromium.chrome.browser.ui.favicon.FaviconUtils; import org.chromium.components.bookmarks.BookmarkId; +import org.chromium.components.bookmarks.BookmarkItem; import org.chromium.components.browser_ui.widget.RoundedIconGenerator; import org.chromium.components.favicon.IconType; import org.chromium.components.favicon.LargeIconBridge.LargeIconCallback;
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkItemsAdapter.java b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkItemsAdapter.java index 9ae03b2..40b64dd 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkItemsAdapter.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkItemsAdapter.java
@@ -20,7 +20,6 @@ import org.chromium.base.metrics.RecordUserAction; import org.chromium.chrome.R; -import org.chromium.chrome.browser.bookmarks.BookmarkBridge.BookmarkItem; import org.chromium.chrome.browser.bookmarks.BookmarkBridge.BookmarkModelObserver; import org.chromium.chrome.browser.bookmarks.BookmarkListEntry.ViewType; import org.chromium.chrome.browser.bookmarks.BookmarkRow.Location; @@ -35,6 +34,7 @@ import org.chromium.chrome.browser.ui.signin.PersonalizedSigninPromoView; import org.chromium.chrome.browser.ui.signin.SyncPromoController.SyncPromoState; import org.chromium.components.bookmarks.BookmarkId; +import org.chromium.components.bookmarks.BookmarkItem; import org.chromium.components.bookmarks.BookmarkType; import org.chromium.components.browser_ui.util.GlobalDiscardableReferencePool; import org.chromium.components.browser_ui.widget.dragreorder.DragReorderableListAdapter; @@ -586,7 +586,7 @@ private int getBookmarkItemEndIndex() { int endIndex = mElements.size() - 1; BookmarkItem bookmarkItem = mElements.get(endIndex).getBookmarkItem(); - if (bookmarkItem == null || !bookmarkItem.isMovable()) { + if (bookmarkItem == null || !BookmarkUtils.isMovable(bookmarkItem)) { endIndex--; } return endIndex;
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkListEntry.java b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkListEntry.java index 681196ee..e920c07 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkListEntry.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkListEntry.java
@@ -9,7 +9,7 @@ import androidx.annotation.IntDef; import androidx.annotation.Nullable; -import org.chromium.chrome.browser.bookmarks.BookmarkBridge.BookmarkItem; +import org.chromium.components.bookmarks.BookmarkItem; import org.chromium.components.power_bookmarks.PowerBookmarkMeta; import java.lang.annotation.Retention;
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkManager.java b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkManager.java index a12fe5f..09cdffd 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkManager.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkManager.java
@@ -22,7 +22,6 @@ import org.chromium.base.metrics.RecordUserAction; import org.chromium.chrome.R; import org.chromium.chrome.browser.app.bookmarks.BookmarkActivity; -import org.chromium.chrome.browser.bookmarks.BookmarkBridge.BookmarkItem; import org.chromium.chrome.browser.bookmarks.BookmarkBridge.BookmarkModelObserver; import org.chromium.chrome.browser.commerce.ShoppingFeatures; import org.chromium.chrome.browser.partnerbookmarks.PartnerBookmarksReader; @@ -31,6 +30,7 @@ import org.chromium.chrome.browser.ui.messages.snackbar.SnackbarManager; import org.chromium.chrome.browser.ui.native_page.BasicNativePage; import org.chromium.components.bookmarks.BookmarkId; +import org.chromium.components.bookmarks.BookmarkItem; import org.chromium.components.bookmarks.BookmarkType; import org.chromium.components.browser_ui.util.ConversionUtils; import org.chromium.components.browser_ui.widget.dragreorder.DragStateDelegate;
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkModel.java b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkModel.java index b88daa9..6b095bd 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkModel.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkModel.java
@@ -10,6 +10,7 @@ import org.chromium.base.ObserverList; import org.chromium.chrome.browser.profiles.Profile; import org.chromium.components.bookmarks.BookmarkId; +import org.chromium.components.bookmarks.BookmarkItem; import org.chromium.components.bookmarks.BookmarkType; import java.util.ArrayList; @@ -107,7 +108,7 @@ } /** - * @see org.chromium.chrome.browser.bookmarks.BookmarkBridge.BookmarkItem#getTitle() + * @see org.chromium.chrome.browser.bookmarks.BookmarkItem#getTitle() */ public String getBookmarkTitle(BookmarkId bookmarkId) { BookmarkItem bookmarkItem = getBookmarkById(bookmarkId);
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkRow.java b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkRow.java index 9bb3bfe..f25c425 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkRow.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkRow.java
@@ -21,8 +21,8 @@ import org.chromium.chrome.R; import org.chromium.chrome.browser.app.bookmarks.BookmarkAddEditFolderActivity; import org.chromium.chrome.browser.app.bookmarks.BookmarkFolderSelectActivity; -import org.chromium.chrome.browser.bookmarks.BookmarkBridge.BookmarkItem; import org.chromium.components.bookmarks.BookmarkId; +import org.chromium.components.bookmarks.BookmarkItem; import org.chromium.components.bookmarks.BookmarkType; import org.chromium.components.browser_ui.widget.listmenu.BasicListMenu; import org.chromium.components.browser_ui.widget.listmenu.ListMenu; @@ -170,7 +170,7 @@ if (bookmarkItem != null) { // Reading list items can sometimes be movable (for type swapping purposes), but for // UI purposes they shouldn't be movable. - canMove = bookmarkItem.isMovable(); + canMove = BookmarkUtils.isMovable(bookmarkItem); canReorder = bookmarkItem.isReorderable() && !mFromFilterView; } }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkSaveFlowMediator.java b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkSaveFlowMediator.java index 073fcef..f30cd65 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkSaveFlowMediator.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkSaveFlowMediator.java
@@ -14,7 +14,6 @@ import org.chromium.base.CallbackController; import org.chromium.base.metrics.RecordUserAction; import org.chromium.chrome.R; -import org.chromium.chrome.browser.bookmarks.BookmarkBridge.BookmarkItem; import org.chromium.chrome.browser.bookmarks.BookmarkBridge.BookmarkModelObserver; import org.chromium.chrome.browser.bookmarks.PowerBookmarkMetrics.PriceTrackingState; import org.chromium.chrome.browser.feature_engagement.TrackerFactory; @@ -22,6 +21,7 @@ import org.chromium.chrome.browser.subscriptions.CommerceSubscription; import org.chromium.chrome.browser.subscriptions.SubscriptionsManager; import org.chromium.components.bookmarks.BookmarkId; +import org.chromium.components.bookmarks.BookmarkItem; import org.chromium.components.feature_engagement.EventConstants; import org.chromium.components.power_bookmarks.PowerBookmarkMeta; import org.chromium.ui.modelutil.PropertyModel; @@ -118,7 +118,8 @@ : R.string.bookmark_save_flow_title)); mPropertyModel.set(BookmarkSaveFlowProperties.FOLDER_SELECT_ICON, BookmarkUtils.getFolderIcon(mContext, bookmarkId.getType())); - mPropertyModel.set(BookmarkSaveFlowProperties.FOLDER_SELECT_ICON_ENABLED, item.isMovable()); + mPropertyModel.set(BookmarkSaveFlowProperties.FOLDER_SELECT_ICON_ENABLED, + BookmarkUtils.isMovable(item)); mPropertyModel.set(BookmarkSaveFlowProperties.SUBTITLE_TEXT, mContext.getResources().getString(wasBookmarkMoved ? R.string.bookmark_page_moved_location
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkUndoController.java b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkUndoController.java index 2b4ebf4..0eeb9d17 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkUndoController.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkUndoController.java
@@ -9,11 +9,11 @@ import org.chromium.base.lifetime.DestroyChecker; import org.chromium.base.task.PostTask; import org.chromium.chrome.R; -import org.chromium.chrome.browser.bookmarks.BookmarkBridge.BookmarkItem; import org.chromium.chrome.browser.bookmarks.BookmarkBridge.BookmarkModelObserver; import org.chromium.chrome.browser.bookmarks.BookmarkModel.BookmarkDeleteObserver; import org.chromium.chrome.browser.ui.messages.snackbar.Snackbar; import org.chromium.chrome.browser.ui.messages.snackbar.SnackbarManager; +import org.chromium.components.bookmarks.BookmarkItem; import org.chromium.content_public.browser.UiThreadTaskTraits; import java.util.Locale;
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkUtils.java b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkUtils.java index 6327eca9..075de7c 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkUtils.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkUtils.java
@@ -37,7 +37,6 @@ import org.chromium.chrome.browser.app.bookmarks.BookmarkActivity; import org.chromium.chrome.browser.app.bookmarks.BookmarkEditActivity; import org.chromium.chrome.browser.app.bookmarks.BookmarkFolderSelectActivity; -import org.chromium.chrome.browser.bookmarks.BookmarkBridge.BookmarkItem; import org.chromium.chrome.browser.browserservices.intents.BrowserServicesIntentDataProvider.CustomTabsUiType; import org.chromium.chrome.browser.commerce.ShoppingFeatures; import org.chromium.chrome.browser.customtabs.CustomTabIntentDataProvider; @@ -47,6 +46,7 @@ import org.chromium.chrome.browser.preferences.ChromePreferenceKeys; import org.chromium.chrome.browser.preferences.SharedPreferencesManager; import org.chromium.chrome.browser.profiles.Profile; +import org.chromium.chrome.browser.read_later.ReadingListUtils; import org.chromium.chrome.browser.subscriptions.CommerceSubscriptionsServiceFactory; import org.chromium.chrome.browser.subscriptions.SubscriptionsManager; import org.chromium.chrome.browser.tab.Tab; @@ -56,6 +56,7 @@ import org.chromium.chrome.browser.ui.messages.snackbar.SnackbarManager.SnackbarController; import org.chromium.chrome.browser.user_education.UserEducationHelper; import org.chromium.components.bookmarks.BookmarkId; +import org.chromium.components.bookmarks.BookmarkItem; import org.chromium.components.bookmarks.BookmarkType; import org.chromium.components.browser_ui.bottomsheet.BottomSheetController; import org.chromium.components.embedder_support.util.UrlConstants; @@ -681,6 +682,11 @@ } } + /** Returns whether this bookmark can be moved */ + public static boolean isMovable(BookmarkItem node) { + return ReadingListUtils.isSwappableReadingListItem(node.getId()) || node.isReorderable(); + } + /** Allows strings to be landed for translation. */ private void fakeFunctiontoAllowStringMerge() { int id = R.string.price_tracking_save_flow_notification_switch_subtitle_error;
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/PowerBookmarkShoppingItemRow.java b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/PowerBookmarkShoppingItemRow.java index 7a907fc2..cf4d5ba 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/PowerBookmarkShoppingItemRow.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/PowerBookmarkShoppingItemRow.java
@@ -19,12 +19,12 @@ import org.chromium.base.ApiCompatibilityUtils; import org.chromium.base.Callback; import org.chromium.chrome.R; -import org.chromium.chrome.browser.bookmarks.BookmarkBridge.BookmarkItem; import org.chromium.chrome.browser.bookmarks.PowerBookmarkMetrics.PriceTrackingState; import org.chromium.chrome.browser.subscriptions.CommerceSubscription; import org.chromium.chrome.browser.subscriptions.SubscriptionsManager; import org.chromium.chrome.browser.ui.messages.snackbar.SnackbarManager; import org.chromium.components.bookmarks.BookmarkId; +import org.chromium.components.bookmarks.BookmarkItem; import org.chromium.components.browser_ui.widget.RoundedCornerOutlineProvider; import org.chromium.components.browser_ui.widget.chips.ChipView; import org.chromium.components.image_fetcher.ImageFetcher;
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/PowerBookmarkTagChipList.java b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/PowerBookmarkTagChipList.java index d134a66..73fb804 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/PowerBookmarkTagChipList.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/PowerBookmarkTagChipList.java
@@ -11,9 +11,9 @@ import androidx.annotation.VisibleForTesting; import org.chromium.chrome.R; -import org.chromium.chrome.browser.bookmarks.BookmarkBridge.BookmarkItem; import org.chromium.chrome.browser.bookmarks.BookmarkBridge.BookmarkModelObserver; import org.chromium.components.bookmarks.BookmarkId; +import org.chromium.components.bookmarks.BookmarkItem; import org.chromium.components.browser_ui.widget.chips.ChipProperties; import org.chromium.components.browser_ui.widget.chips.ChipsCoordinator; import org.chromium.components.power_bookmarks.PowerBookmarkMeta; @@ -134,4 +134,4 @@ chipModel.set(ChipProperties.SELECTED, !chipModel.get(ChipProperties.SELECTED)); } -} \ No newline at end of file +}
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/ReadingListSectionHeader.java b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/ReadingListSectionHeader.java index 20ae95e..9af47792 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/ReadingListSectionHeader.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/ReadingListSectionHeader.java
@@ -9,7 +9,7 @@ import org.chromium.base.metrics.RecordHistogram; import org.chromium.base.metrics.RecordUserAction; import org.chromium.chrome.R; -import org.chromium.chrome.browser.bookmarks.BookmarkBridge.BookmarkItem; +import org.chromium.components.bookmarks.BookmarkItem; import org.chromium.components.bookmarks.BookmarkType; import java.util.Collections;
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/TabBookmarker.java b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/TabBookmarker.java index e23689ee..61cf5a0 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/TabBookmarker.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/TabBookmarker.java
@@ -11,12 +11,12 @@ import org.chromium.base.supplier.ObservableSupplier; import org.chromium.base.supplier.Supplier; -import org.chromium.chrome.browser.bookmarks.BookmarkBridge.BookmarkItem; import org.chromium.chrome.browser.offlinepages.OfflinePageUtils; import org.chromium.chrome.browser.read_later.ReadingListUtils; import org.chromium.chrome.browser.tab.Tab; import org.chromium.chrome.browser.ui.messages.snackbar.SnackbarManager; import org.chromium.components.bookmarks.BookmarkId; +import org.chromium.components.bookmarks.BookmarkItem; import org.chromium.components.bookmarks.BookmarkType; import org.chromium.components.browser_ui.bottomsheet.BottomSheetController;
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarkswidget/BookmarkWidgetServiceImpl.java b/chrome/android/java/src/org/chromium/chrome/browser/bookmarkswidget/BookmarkWidgetServiceImpl.java index 781b5c9..b02a5e8 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/bookmarkswidget/BookmarkWidgetServiceImpl.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/bookmarkswidget/BookmarkWidgetServiceImpl.java
@@ -28,7 +28,6 @@ import org.chromium.base.task.PostTask; import org.chromium.chrome.R; import org.chromium.chrome.browser.IntentHandler; -import org.chromium.chrome.browser.bookmarks.BookmarkBridge.BookmarkItem; import org.chromium.chrome.browser.bookmarks.BookmarkBridge.BookmarkModelObserver; import org.chromium.chrome.browser.bookmarks.BookmarkModel; import org.chromium.chrome.browser.init.ChromeBrowserInitializer; @@ -36,6 +35,7 @@ import org.chromium.chrome.browser.profiles.Profile; import org.chromium.chrome.browser.ui.favicon.FaviconUtils; import org.chromium.components.bookmarks.BookmarkId; +import org.chromium.components.bookmarks.BookmarkItem; import org.chromium.components.browser_ui.widget.RoundedIconGenerator; import org.chromium.components.favicon.IconType; import org.chromium.components.favicon.LargeIconBridge;
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/PartialCustomTabHeightStrategy.java b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/PartialCustomTabHeightStrategy.java index 477320d..bd2d63f 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/PartialCustomTabHeightStrategy.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/PartialCustomTabHeightStrategy.java
@@ -440,6 +440,15 @@ View dragBar = mActivity.findViewById(R.id.drag_bar); GradientDrawable drawable = (GradientDrawable) dragBar.getBackground(); drawable.setColor(color); + + ImageView handle = (ImageView) mActivity.findViewById(R.id.drag_handlebar); + int handleColor = mActivity.getColor(R.color.drag_handlebar_color_baseline); + if (scrimFraction > 0.f) { + handle.setColorFilter(ColorUtils.getColorWithOverlay( + handleColor, scrimColorOpaque, scrimFraction * scrimColorAlpha, false)); + } else { + handle.clearColorFilter(); + } } private void initializeHeight() {
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/read_later/ReadingListUtils.java b/chrome/android/java/src/org/chromium/chrome/browser/read_later/ReadingListUtils.java index 2847c390..6bd24abe 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/read_later/ReadingListUtils.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/read_later/ReadingListUtils.java
@@ -11,7 +11,6 @@ import org.chromium.base.Log; import org.chromium.chrome.browser.bookmarks.BookmarkBridge; -import org.chromium.chrome.browser.bookmarks.BookmarkBridge.BookmarkItem; import org.chromium.chrome.browser.bookmarks.BookmarkModel; import org.chromium.chrome.browser.bookmarks.BookmarkUndoController; import org.chromium.chrome.browser.bookmarks.BookmarkUtils; @@ -19,6 +18,7 @@ import org.chromium.chrome.browser.tab.Tab; import org.chromium.chrome.browser.ui.messages.snackbar.SnackbarManager; import org.chromium.components.bookmarks.BookmarkId; +import org.chromium.components.bookmarks.BookmarkItem; import org.chromium.components.bookmarks.BookmarkType; import org.chromium.components.browser_ui.bottomsheet.BottomSheetController; import org.chromium.components.embedder_support.util.UrlUtilities; @@ -51,7 +51,7 @@ BookmarkUndoController.createOneshotBookmarkUndoController( activity, bookmarkModel, snackbarManager); bookmarkModel.finishLoadingBookmarkModel(() -> { - BookmarkBridge.BookmarkItem bookmarkItem = + BookmarkItem bookmarkItem = bookmarkModel.getReadingListItem(currentTab.getOriginalUrl()); bookmarkModel.deleteBookmarks(bookmarkItem.getId()); });
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/app/bookmarks/BookmarkEditTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/app/bookmarks/BookmarkEditTest.java index 1635df1..272dba14 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/app/bookmarks/BookmarkEditTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/app/bookmarks/BookmarkEditTest.java
@@ -28,7 +28,6 @@ import org.chromium.base.test.util.CallbackHelper; import org.chromium.base.test.util.CriteriaHelper; import org.chromium.base.test.util.Feature; -import org.chromium.chrome.browser.bookmarks.BookmarkBridge.BookmarkItem; import org.chromium.chrome.browser.bookmarks.BookmarkBridge.BookmarkModelObserver; import org.chromium.chrome.browser.bookmarks.BookmarkModel; import org.chromium.chrome.browser.bookmarks.BookmarkModelTest; @@ -36,6 +35,7 @@ import org.chromium.chrome.test.ChromeBrowserTestRule; import org.chromium.chrome.test.util.BookmarkTestUtil; import org.chromium.components.bookmarks.BookmarkId; +import org.chromium.components.bookmarks.BookmarkItem; import org.chromium.content_public.browser.test.util.TestThreadUtils; import org.chromium.url.GURL;
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/app/bookmarks/BookmarkTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/app/bookmarks/BookmarkTest.java index d825259..fcb0067 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/app/bookmarks/BookmarkTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/app/bookmarks/BookmarkTest.java
@@ -62,7 +62,6 @@ import org.chromium.chrome.browser.app.metrics.LaunchCauseMetrics; import org.chromium.chrome.browser.bookmarks.BookmarkActionBar; import org.chromium.chrome.browser.bookmarks.BookmarkBridge; -import org.chromium.chrome.browser.bookmarks.BookmarkBridge.BookmarkItem; import org.chromium.chrome.browser.bookmarks.BookmarkBridge.BookmarkModelObserver; import org.chromium.chrome.browser.bookmarks.BookmarkDelegate; import org.chromium.chrome.browser.bookmarks.BookmarkFolderRow; @@ -95,6 +94,7 @@ import org.chromium.chrome.test.util.MenuUtils; import org.chromium.chrome.test.util.browser.Features; import org.chromium.components.bookmarks.BookmarkId; +import org.chromium.components.bookmarks.BookmarkItem; import org.chromium.components.bookmarks.BookmarkType; import org.chromium.components.browser_ui.widget.RecyclerViewTestUtils; import org.chromium.components.browser_ui.widget.listmenu.ListMenuButton; @@ -1181,13 +1181,12 @@ // Verify that bookmark 1 is editable (so more button can be triggered) but not movable. BookmarkId partnerBookmarkId1 = getReorderAdapter().getIdByPosition(0); TestThreadUtils.runOnUiThreadBlocking(() -> { - BookmarkBridge.BookmarkItem partnerBookmarkItem1 = - mBookmarkModel.getBookmarkById(partnerBookmarkId1); + BookmarkItem partnerBookmarkItem1 = mBookmarkModel.getBookmarkById(partnerBookmarkId1); partnerBookmarkItem1.forceEditableForTesting(); Assert.assertEquals("Incorrect bookmark type for item 1", BookmarkType.PARTNER, partnerBookmarkId1.getType()); - Assert.assertFalse( - "Partner item 1 should not be movable", partnerBookmarkItem1.isMovable()); + Assert.assertFalse("Partner item 1 should not be movable", + BookmarkUtils.isMovable(partnerBookmarkItem1)); Assert.assertTrue( "Partner item 1 should be editable", partnerBookmarkItem1.isEditable()); }); @@ -1202,13 +1201,12 @@ // Verify that bookmark 2 is not movable. BookmarkId partnerBookmarkId2 = getReorderAdapter().getIdByPosition(1); TestThreadUtils.runOnUiThreadBlocking(() -> { - BookmarkBridge.BookmarkItem partnerBookmarkItem2 = - mBookmarkModel.getBookmarkById(partnerBookmarkId2); + BookmarkItem partnerBookmarkItem2 = mBookmarkModel.getBookmarkById(partnerBookmarkId2); partnerBookmarkItem2.forceEditableForTesting(); Assert.assertEquals("Incorrect bookmark type for item 2", BookmarkType.PARTNER, partnerBookmarkId2.getType()); - Assert.assertFalse( - "Partner item 2 should not be movable", partnerBookmarkItem2.isMovable()); + Assert.assertFalse("Partner item 2 should not be movable", + BookmarkUtils.isMovable(partnerBookmarkItem2)); Assert.assertTrue( "Partner item 2 should be editable", partnerBookmarkItem2.isEditable()); });
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/app/bookmarks/ReadingListTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/app/bookmarks/ReadingListTest.java index 835e4dc5..67a44f7 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/app/bookmarks/ReadingListTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/app/bookmarks/ReadingListTest.java
@@ -53,7 +53,6 @@ import org.chromium.chrome.browser.IntentHandler; import org.chromium.chrome.browser.bookmarks.BookmarkActionBar; import org.chromium.chrome.browser.bookmarks.BookmarkBridge; -import org.chromium.chrome.browser.bookmarks.BookmarkBridge.BookmarkItem; import org.chromium.chrome.browser.bookmarks.BookmarkDelegate; import org.chromium.chrome.browser.bookmarks.BookmarkItemsAdapter; import org.chromium.chrome.browser.bookmarks.BookmarkManager; @@ -79,6 +78,7 @@ import org.chromium.chrome.test.util.MenuUtils; import org.chromium.chrome.test.util.browser.Features; import org.chromium.components.bookmarks.BookmarkId; +import org.chromium.components.bookmarks.BookmarkItem; import org.chromium.components.bookmarks.BookmarkType; import org.chromium.components.browser_ui.widget.RecyclerViewTestUtils; import org.chromium.components.browser_ui.widget.selectable_list.SelectableListToolbar; @@ -559,4 +559,4 @@ Assert.assertTrue("Read later items should have delete option", toolbar.getMenu().findItem(R.id.selection_mode_delete_menu_id).isVisible()); } -} \ No newline at end of file +}
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/bookmarks/BookmarkBridgeTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/bookmarks/BookmarkBridgeTest.java index 555438a..d4fd847 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/bookmarks/BookmarkBridgeTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/bookmarks/BookmarkBridgeTest.java
@@ -20,7 +20,6 @@ import org.chromium.base.test.util.DisabledTest; import org.chromium.base.test.util.Feature; import org.chromium.base.test.util.RequiresRestart; -import org.chromium.chrome.browser.bookmarks.BookmarkBridge.BookmarkItem; import org.chromium.chrome.browser.flags.ChromeFeatureList; import org.chromium.chrome.browser.profiles.Profile; import org.chromium.chrome.browser.subscriptions.CommerceSubscription; @@ -29,6 +28,7 @@ import org.chromium.chrome.test.util.BookmarkTestUtil; import org.chromium.chrome.test.util.browser.Features; import org.chromium.components.bookmarks.BookmarkId; +import org.chromium.components.bookmarks.BookmarkItem; import org.chromium.components.bookmarks.BookmarkType; import org.chromium.components.power_bookmarks.PowerBookmarkMeta; import org.chromium.components.power_bookmarks.ShoppingSpecifics;
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/bookmarks/BookmarkItemRowTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/bookmarks/BookmarkItemRowTest.java index f42ea632..1140363 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/bookmarks/BookmarkItemRowTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/bookmarks/BookmarkItemRowTest.java
@@ -25,10 +25,10 @@ import org.mockito.MockitoAnnotations; import org.chromium.chrome.R; -import org.chromium.chrome.browser.bookmarks.BookmarkBridge.BookmarkItem; import org.chromium.chrome.browser.bookmarks.BookmarkRow.Location; import org.chromium.chrome.test.ChromeJUnit4ClassRunner; import org.chromium.components.bookmarks.BookmarkId; +import org.chromium.components.bookmarks.BookmarkItem; import org.chromium.components.bookmarks.BookmarkType; import org.chromium.components.browser_ui.widget.RoundedIconGenerator; import org.chromium.components.browser_ui.widget.dragreorder.DragStateDelegate; @@ -143,4 +143,4 @@ mBookmarkItemRow.onClick(); verify(mDelegate, Mockito.times(0)).openBookmark(mBookmarkId); } -} \ No newline at end of file +}
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/bookmarks/BookmarkModelTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/bookmarks/BookmarkModelTest.java index 4cc619e..62dc988b 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/bookmarks/BookmarkModelTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/bookmarks/BookmarkModelTest.java
@@ -17,11 +17,11 @@ import org.chromium.base.test.UiThreadTest; import org.chromium.base.test.util.Batch; import org.chromium.base.test.util.Feature; -import org.chromium.chrome.browser.bookmarks.BookmarkBridge.BookmarkItem; import org.chromium.chrome.browser.profiles.Profile; import org.chromium.chrome.test.ChromeBrowserTestRule; import org.chromium.chrome.test.util.BookmarkTestUtil; import org.chromium.components.bookmarks.BookmarkId; +import org.chromium.components.bookmarks.BookmarkItem; import org.chromium.content_public.browser.test.util.TestThreadUtils; import org.chromium.url.GURL;
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/identity_disc/IdentityDiscControllerTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/identity_disc/IdentityDiscControllerTest.java index c0674d7..386801c 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/identity_disc/IdentityDiscControllerTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/identity_disc/IdentityDiscControllerTest.java
@@ -30,7 +30,6 @@ import org.junit.runner.RunWith; import org.chromium.base.test.util.CommandLineFlags; -import org.chromium.base.test.util.DisabledTest; import org.chromium.chrome.R; import org.chromium.chrome.browser.flags.ChromeSwitches; import org.chromium.chrome.browser.tab.Tab; @@ -86,7 +85,6 @@ @Test @MediumTest - @DisabledTest(message = "crbug.com/1363220") public void testIdentityDiscWithSignin() { // When user is signed out, Identity Disc should not be visible on the NTP. onView(withId(R.id.optional_toolbar_button)).check((view, noViewException) -> { @@ -101,11 +99,8 @@ // TODO(https://crbug.com/1132291): Remove the reload once the sign-in without sync observer // is implemented. TestThreadUtils.runOnUiThreadBlocking(mTab::reload); - waitForView(allOf(withId(R.id.optional_toolbar_button), isDisplayed())); - - onView(withId(R.id.optional_toolbar_button)) - .check(matches( - withContentDescription(R.string.accessibility_toolbar_btn_identity_disc))); + waitForView(allOf(withId(R.id.optional_toolbar_button), isDisplayed(), + withContentDescription(R.string.accessibility_toolbar_btn_identity_disc))); mSigninTestRule.signOut(); waitForView(allOf(withId(R.id.optional_toolbar_button), @@ -114,7 +109,6 @@ @Test @MediumTest - @DisabledTest(message = "crbug.com/1363220") public void testIdentityDiscWithSigninAndEnableSync() { // When user is signed out, Identity Disc should not be visible on the NTP. onView(withId(R.id.optional_toolbar_button)).check((view, noViewException) -> { @@ -126,11 +120,9 @@ // Identity Disc should be shown on sign-in state change without NTP refresh. mSigninTestRule.addTestAccountThenSigninAndEnableSync(); - waitForView(allOf(withId(R.id.optional_toolbar_button), isDisplayed())); - - onView(withId(R.id.optional_toolbar_button)) - .check(matches( - withContentDescription(R.string.accessibility_toolbar_btn_identity_disc))); + waitForView(allOf(withId(R.id.optional_toolbar_button), + withContentDescription(R.string.accessibility_toolbar_btn_identity_disc), + isDisplayed())); mSigninTestRule.signOut(); waitForView(allOf(withId(R.id.optional_toolbar_button),
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/omnibox/LocationBarLayoutTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/omnibox/LocationBarLayoutTest.java index c794436..32358f3 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/omnibox/LocationBarLayoutTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/omnibox/LocationBarLayoutTest.java
@@ -293,9 +293,7 @@ urlLayoutParams = (MarginLayoutParams) urlContainer.getLayoutParams(); int endMarginWithIcon = MarginLayoutParamsCompat.getMarginEnd(urlLayoutParams); - Assert.assertEquals(endMarginNoIcon - + locationBar.getStatusCoordinatorForTesting() - .getEndPaddingPixelSizeOnFocusDelta(), + Assert.assertEquals(endMarginNoIcon + locationBar.getEndPaddingPixelSizeOnFocusDelta(), endMarginWithIcon); }); }
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/bookmarks/ReadingListSectionHeaderTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/bookmarks/ReadingListSectionHeaderTest.java index 833ca9e..f2df6c0 100644 --- a/chrome/android/junit/src/org/chromium/chrome/browser/bookmarks/ReadingListSectionHeaderTest.java +++ b/chrome/android/junit/src/org/chromium/chrome/browser/bookmarks/ReadingListSectionHeaderTest.java
@@ -21,9 +21,9 @@ import org.chromium.base.metrics.UmaRecorderHolder; import org.chromium.base.test.BaseRobolectricTestRunner; import org.chromium.chrome.R; -import org.chromium.chrome.browser.bookmarks.BookmarkBridge.BookmarkItem; import org.chromium.chrome.browser.bookmarks.BookmarkListEntry.ViewType; import org.chromium.components.bookmarks.BookmarkId; +import org.chromium.components.bookmarks.BookmarkItem; import org.chromium.components.bookmarks.BookmarkType; import java.util.ArrayList;
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/feed/FeedSurfaceMediatorTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/feed/FeedSurfaceMediatorTest.java index 18fa558..36b0ee96 100644 --- a/chrome/android/junit/src/org/chromium/chrome/browser/feed/FeedSurfaceMediatorTest.java +++ b/chrome/android/junit/src/org/chromium/chrome/browser/feed/FeedSurfaceMediatorTest.java
@@ -43,6 +43,7 @@ import org.chromium.chrome.browser.feed.sections.SectionHeaderProperties; import org.chromium.chrome.browser.feed.sections.ViewVisibility; import org.chromium.chrome.browser.feed.sort_ui.FeedOptionsCoordinator; +import org.chromium.chrome.browser.feed.v2.ContentOrder; import org.chromium.chrome.browser.feed.webfeed.WebFeedBridge; import org.chromium.chrome.browser.flags.ChromeFeatureList; import org.chromium.chrome.browser.ntp.cards.SignInPromo; @@ -55,6 +56,7 @@ import org.chromium.chrome.browser.xsurface.FeedLaunchReliabilityLogger; import org.chromium.chrome.browser.xsurface.FeedLaunchReliabilityLogger.StreamType; import org.chromium.chrome.browser.xsurface.HybridListRenderer; +import org.chromium.chrome.browser.xsurface.ListLayoutHelper; import org.chromium.chrome.test.util.browser.Features; import org.chromium.components.feed.proto.wire.ReliabilityLoggingEnums.DiscoverLaunchResult; import org.chromium.components.prefs.PrefService; @@ -72,7 +74,7 @@ // default or removed if the flag is removed. @Features.DisableFeatures(ChromeFeatureList.SYNC_ANDROID_LIMIT_NTP_PROMO_IMPRESSIONS) @Features.EnableFeatures({ChromeFeatureList.WEB_FEED, ChromeFeatureList.INTEREST_FEED_V2_HEARTS, - ChromeFeatureList.WEB_FEED_SORT}) + ChromeFeatureList.WEB_FEED_SORT, ChromeFeatureList.FEED_MULTI_COLUMN}) public class FeedSurfaceMediatorTest { static final @Px int TOOLBAR_HEIGHT = 10; @Rule @@ -113,6 +115,8 @@ @Mock private HybridListRenderer mHybridListRenderer; @Mock + private ListLayoutHelper mListLayoutHelper; + @Mock private FeedSurfaceLifecycleManager mFeedSurfaceLifecycleManager; @Mock private FeedOptionsCoordinator mOptionsCoordinator; @@ -147,6 +151,7 @@ when(mFeedSurfaceCoordinator.getReliabilityLogger()).thenReturn(mReliabilityLogger); when(mReliabilityLogger.getLaunchLogger()).thenReturn(mLaunchReliabilityLogger); when(mFeedSurfaceCoordinator.getHybridListRenderer()).thenReturn(mHybridListRenderer); + when(mHybridListRenderer.getListLayoutHelper()).thenReturn(mListLayoutHelper); when(mFeedSurfaceCoordinator.getSurfaceLifecycleManager()) .thenReturn(mFeedSurfaceLifecycleManager); ObservableSupplierImpl<Boolean> hasUnreadContent = new ObservableSupplierImpl<>(); @@ -487,22 +492,8 @@ public void testOnHeaderSelected_selectedWithOptions() { PropertyModel model = SectionHeaderListProperties.create(TOOLBAR_HEIGHT); PropertyModel forYou = SectionHeaderProperties.createSectionHeader("For you"); - model.get(SectionHeaderListProperties.SECTION_HEADERS_KEY).add(forYou); - forYou.set(SectionHeaderProperties.UNREAD_CONTENT_KEY, true); - forYou.set(SectionHeaderProperties.OPTIONS_INDICATOR_VISIBILITY_KEY, ViewVisibility.GONE); - - model.get(SectionHeaderListProperties.SECTION_HEADERS_KEY) - .add(SectionHeaderProperties.createSectionHeader("Following")); - mFeedSurfaceMediator = createMediator(FeedSurfaceCoordinator.StreamTabId.FOLLOWING, model); - - when(mForYouStream.supportsOptions()).thenReturn(true); - mFeedSurfaceMediator.setStreamForTesting( - FeedSurfaceCoordinator.StreamTabId.FOLLOWING, mForYouStream); - mFeedSurfaceMediator.setStreamForTesting( - FeedSurfaceCoordinator.StreamTabId.FOR_YOU, mForYouStream); - OnSectionHeaderSelectedListener listener = - mFeedSurfaceMediator.getOrCreateSectionHeaderListenerForTesting(); + getOnSectionHeaderSelectedListener(model, forYou, true); listener.onSectionHeaderSelected(0); assertEquals(0, model.get(SectionHeaderListProperties.CURRENT_TAB_INDEX_KEY)); @@ -511,10 +502,45 @@ forYou.get(SectionHeaderProperties.OPTIONS_INDICATOR_VISIBILITY_KEY)); } + @Config(qualifiers = "en-sw600dp") @Test - public void testOnHeaderSelected_selectedNoOptions() { + public void testOnHeaderSelected_selectedWithLatestOptionsOnTablet() { PropertyModel model = SectionHeaderListProperties.create(TOOLBAR_HEIGHT); PropertyModel forYou = SectionHeaderProperties.createSectionHeader("For you"); + OnSectionHeaderSelectedListener listener = + getOnSectionHeaderSelectedListener(model, forYou, true); + when(mOptionsCoordinator.getSelectedOptionId()).thenReturn(ContentOrder.REVERSE_CHRON); + listener.onSectionHeaderSelected(1); + + verify(mListLayoutHelper).setSpanCount(2); + } + + @Config(qualifiers = "en-sw600dp") + @Test + public void testOnHeaderSelected_selectedWithSortOptionsOnTablet() { + PropertyModel model = SectionHeaderListProperties.create(TOOLBAR_HEIGHT); + PropertyModel forYou = SectionHeaderProperties.createSectionHeader("For you"); + OnSectionHeaderSelectedListener listener = + getOnSectionHeaderSelectedListener(model, forYou, true); + when(mOptionsCoordinator.getSelectedOptionId()).thenReturn(ContentOrder.GROUPED); + listener.onSectionHeaderSelected(1); + + verify(mListLayoutHelper).setSpanCount(1); + } + + @Config(qualifiers = "en-sw600dp") + @Test + public void testOnOptionSelected() { + FeedSurfaceMediator mediator = createMediator(); + when(mOptionsCoordinator.getSelectedOptionId()).thenReturn(ContentOrder.GROUPED); + + mediator.onOptionChanged(); + + verify(mListLayoutHelper).setSpanCount(1); + } + + private OnSectionHeaderSelectedListener getOnSectionHeaderSelectedListener( + PropertyModel model, PropertyModel forYou, boolean value) { model.get(SectionHeaderListProperties.SECTION_HEADERS_KEY).add(forYou); forYou.set(SectionHeaderProperties.UNREAD_CONTENT_KEY, true); forYou.set(SectionHeaderProperties.OPTIONS_INDICATOR_VISIBILITY_KEY, ViewVisibility.GONE); @@ -523,7 +549,7 @@ .add(SectionHeaderProperties.createSectionHeader("Following")); mFeedSurfaceMediator = createMediator(FeedSurfaceCoordinator.StreamTabId.FOLLOWING, model); - when(mForYouStream.supportsOptions()).thenReturn(false); + when(mForYouStream.supportsOptions()).thenReturn(value); mFeedSurfaceMediator.setStreamForTesting( FeedSurfaceCoordinator.StreamTabId.FOLLOWING, mForYouStream); mFeedSurfaceMediator.setStreamForTesting( @@ -531,6 +557,15 @@ OnSectionHeaderSelectedListener listener = mFeedSurfaceMediator.getOrCreateSectionHeaderListenerForTesting(); + return listener; + } + + @Test + public void testOnHeaderSelected_selectedNoOptions() { + PropertyModel model = SectionHeaderListProperties.create(TOOLBAR_HEIGHT); + PropertyModel forYou = SectionHeaderProperties.createSectionHeader("For you"); + OnSectionHeaderSelectedListener listener = + getOnSectionHeaderSelectedListener(model, forYou, false); listener.onSectionHeaderSelected(0); assertEquals(0, model.get(SectionHeaderListProperties.CURRENT_TAB_INDEX_KEY));
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/read_later/ReadingListUtilsUnitTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/read_later/ReadingListUtilsUnitTest.java index a7cdd243..2df2da2 100644 --- a/chrome/android/junit/src/org/chromium/chrome/browser/read_later/ReadingListUtilsUnitTest.java +++ b/chrome/android/junit/src/org/chromium/chrome/browser/read_later/ReadingListUtilsUnitTest.java
@@ -26,12 +26,12 @@ import org.chromium.base.FeatureList.TestValues; import org.chromium.base.test.BaseRobolectricTestRunner; import org.chromium.chrome.browser.bookmarks.BookmarkBridge; -import org.chromium.chrome.browser.bookmarks.BookmarkBridge.BookmarkItem; import org.chromium.chrome.browser.bookmarks.BookmarkModel; import org.chromium.chrome.browser.flags.ChromeFeatureList; import org.chromium.chrome.browser.tab.Tab; import org.chromium.chrome.browser.ui.messages.snackbar.SnackbarManager; import org.chromium.components.bookmarks.BookmarkId; +import org.chromium.components.bookmarks.BookmarkItem; import org.chromium.components.bookmarks.BookmarkType; import org.chromium.components.browser_ui.bottomsheet.BottomSheetController; import org.chromium.url.GURL;
diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources.grd index 7562fa615..c7aa7fc 100644 --- a/chrome/app/generated_resources.grd +++ b/chrome/app/generated_resources.grd
@@ -5012,7 +5012,7 @@ Allow <ph name="EXTENSIONS_REQUESTING_ACCESS_COUNT">$1<ex>3</ex></ph>? </message> <message name="IDS_EXTENSIONS_REQUEST_ACCESS_BUTTON_TOOLTIP_SINGLE_EXTENSION" desc="The tooltip text of the request access button that appears on the toolbar when an extension requests access to the site"> - Click to allow "<ph name="EXTENSIONS_REQUESTING_ACCESS">$1<ex>Extension A</ex></ph>"" on <ph name="ORIGIN">$2<ex>google.com</ex></ph>: + Click to allow "<ph name="EXTENSIONS_REQUESTING_ACCESS">$1<ex>Extension A</ex></ph>" on <ph name="ORIGIN">$2<ex>google.com</ex></ph>: </message> <message name="IDS_EXTENSIONS_REQUEST_ACCESS_BUTTON_TOOLTIP_MULTIPLE_EXTENSIONS" desc="The tooltip text of the request access button that appears on the toolbar when an extension requests access to the site"> Click to allow on <ph name="ORIGIN">$1<ex>google.com</ex></ph>:
diff --git a/chrome/app/generated_resources_grd/IDS_EXTENSIONS_REQUEST_ACCESS_BUTTON_TOOLTIP_SINGLE_EXTENSION.png.sha1 b/chrome/app/generated_resources_grd/IDS_EXTENSIONS_REQUEST_ACCESS_BUTTON_TOOLTIP_SINGLE_EXTENSION.png.sha1 index 14acd9d..9411a23 100644 --- a/chrome/app/generated_resources_grd/IDS_EXTENSIONS_REQUEST_ACCESS_BUTTON_TOOLTIP_SINGLE_EXTENSION.png.sha1 +++ b/chrome/app/generated_resources_grd/IDS_EXTENSIONS_REQUEST_ACCESS_BUTTON_TOOLTIP_SINGLE_EXTENSION.png.sha1
@@ -1 +1 @@ -d0f16311fb34781b59844e1c74d1064f11bca361 \ No newline at end of file +2492098bd6bb7b77f4a4d6af1fb036b38ac99732 \ No newline at end of file
diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn index b0eb127..ae6a346c 100644 --- a/chrome/browser/BUILD.gn +++ b/chrome/browser/BUILD.gn
@@ -3985,6 +3985,8 @@ "metrics/first_web_contents_profiler_base.cc", "metrics/first_web_contents_profiler_base.h", "metrics/incognito_observer_desktop.cc", + "metrics/power/battery_discharge_reporter.cc", + "metrics/power/battery_discharge_reporter.h", "metrics/power/power_metrics.cc", "metrics/power/power_metrics.h", "metrics/power/power_metrics_constants.cc", @@ -7994,10 +7996,7 @@ } if (is_win || is_mac || is_linux || is_chromeos || is_fuchsia) { - deps += [ - "//chrome/browser/resources/inline_login:components", - "//services/resource_coordinator/public/mojom:mojom_js", - ] + deps += [ "//services/resource_coordinator/public/mojom:mojom_js" ] } if (is_android) {
diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc index fe08db9..33438488 100644 --- a/chrome/browser/about_flags.cc +++ b/chrome/browser/about_flags.cc
@@ -1190,7 +1190,7 @@ std::size(kSidePanelJourneysOpensFromOmniboxParams), nullptr}, }; const FeatureEntry::FeatureParam kJourneysContentClusteringParams[] = { - {"collections_blocklist", "/collections/software"}, + {"collections_blocklist", "/collection/software"}, {"exclude_entities_that_have_no_collections", "true"}, }; const FeatureEntry::FeatureVariation kJourneysContentClusteringVariations[] = { @@ -3273,6 +3273,14 @@ {"For All Users", kUpmAndroidEnableForAllUsers, std::size(kUpmAndroidEnableForAllUsers), nullptr}, }; + +constexpr FeatureEntry::FeatureParam kIgnoreUPMAuthErrorMessageTimeouts[] = { + {"ignore_auth_error_message_timeouts", "true"}}; +constexpr FeatureEntry::FeatureVariation + kUnifiedPasswordManagerErrorMessagesVariations[] = { + {"Ignore timeouts", kIgnoreUPMAuthErrorMessageTimeouts, + std::size(kIgnoreUPMAuthErrorMessageTimeouts), nullptr}}; + #endif // BUILDFLAG(IS_ANDROID) const FeatureEntry::FeatureParam kUnthrottledNestedTimeout_NestingLevel = { @@ -8489,8 +8497,10 @@ flag_descriptions::kUnifiedPasswordManagerErrorMessagesName, flag_descriptions::kUnifiedPasswordManagerErrorMessagesDescription, kOsAndroid, - FEATURE_VALUE_TYPE( - password_manager::features::kUnifiedPasswordManagerErrorMessages)}, + FEATURE_WITH_PARAMS_VALUE_TYPE( + password_manager::features::kUnifiedPasswordManagerErrorMessages, + kUnifiedPasswordManagerErrorMessagesVariations, + "UnifiedPasswordManagerErrorMessages")}, {"google-mobile-services-passwords-reenrollment", flag_descriptions::kUnifiedPasswordManagerAndroidReenrollmentName,
diff --git a/chrome/browser/accessibility/accessibility_extension_api_chromeos.cc b/chrome/browser/accessibility/accessibility_extension_api_chromeos.cc index f76f899..75dd955 100644 --- a/chrome/browser/accessibility/accessibility_extension_api_chromeos.cc +++ b/chrome/browser/accessibility/accessibility_extension_api_chromeos.cc
@@ -5,6 +5,7 @@ #include "chrome/browser/accessibility/accessibility_extension_api_chromeos.h" #include <stddef.h> + #include <memory> #include <set> #include <vector> @@ -15,6 +16,7 @@ #include "ash/public/cpp/event_rewriter_controller.h" #include "ash/public/cpp/window_tree_host_lookup.h" #include "base/bind.h" +#include "base/containers/contains.h" #include "base/json/json_writer.h" #include "base/strings/string_number_conversions.h" #include "base/strings/utf_string_conversions.h" @@ -178,10 +180,11 @@ ui::KeyboardCode key_code_to_compare = ui::VKEY_UNKNOWN; const ui::KeyboardLayoutEngine* layout_engine = ui::KeyboardLayoutEngineManager::GetKeyboardLayoutEngine(); - ui::DomCode dom_code = + ui::DomCode dom_code_for_key_code = ui::KeycodeConverter::MapUSPositionalShortcutKeyToDomCode(key_code); - if (dom_code != ui::DomCode::NONE) { - if (layout_engine->Lookup(dom_code, /*flags=*/ui::EF_NONE, &dom_key, + if (dom_code_for_key_code != ui::DomCode::NONE) { + if (layout_engine->Lookup(dom_code_for_key_code, + /*event_flags=*/ui::EF_NONE, &dom_key, &key_code_to_compare)) { if (dom_key.IsDeadKey() || !dom_key.IsValid()) { return RespondNow(Error("Invalid key code")); @@ -192,7 +195,7 @@ } for (const auto& dom_code : ui::kDomCodesArray) { - if (!layout_engine->Lookup(dom_code, /*flags=*/ui::EF_NONE, &dom_key, + if (!layout_engine->Lookup(dom_code, /*event_flags=*/ui::EF_NONE, &dom_key, &key_code_to_compare)) { continue; } @@ -902,8 +905,7 @@ *(params->actions)) { std::string action = accessibility_private::ToString(extension_action); // Check that this action is not already in our actions list. - if (std::find(actions_to_show.begin(), actions_to_show.end(), action) != - actions_to_show.end()) { + if (base::Contains(actions_to_show, action)) { continue; } actions_to_show.push_back(action);
diff --git a/chrome/browser/android/crypto/java/src/org/chromium/chrome/browser/crypto/CipherFactory.java b/chrome/browser/android/crypto/java/src/org/chromium/chrome/browser/crypto/CipherFactory.java index f4d49d3..b290709 100644 --- a/chrome/browser/android/crypto/java/src/org/chromium/chrome/browser/crypto/CipherFactory.java +++ b/chrome/browser/android/crypto/java/src/org/chromium/chrome/browser/crypto/CipherFactory.java
@@ -145,22 +145,22 @@ * @return Data to use for the Cipher, null if it couldn't be generated. */ CipherData getCipherData(boolean generateIfNeeded) { - if (mData == null && generateIfNeeded) { - // Ideally, this task should have been started way before this. - triggerKeyGeneration(); + synchronized (mDataLock) { + if (mData == null && generateIfNeeded) { + // Ideally, this task should have been started way before this. + triggerKeyGenerationLocked(); - // Grab the data from the task. - CipherData data; - try { - data = mDataGenerator.get(); - } catch (InterruptedException e) { - throw new RuntimeException(e); - } catch (ExecutionException e) { - throw new RuntimeException(e); - } + // Grab the data from the task. + CipherData data; + try { + data = mDataGenerator.get(); + } catch (InterruptedException e) { + throw new RuntimeException(e); + } catch (ExecutionException e) { + throw new RuntimeException(e); + } - // Only the first thread is allowed to save the data. - synchronized (mDataLock) { + // Only the first thread is allowed to save the data. if (mData == null) { mData = data; @@ -219,13 +219,16 @@ * than immediately calling {@link CipherFactory#getCipher(int)}. */ public void triggerKeyGeneration() { - if (mData != null) return; - synchronized (mDataLock) { - if (mDataGenerator == null) { - mDataGenerator = new FutureTask<CipherData>(createGeneratorCallable()); - AsyncTask.THREAD_POOL_EXECUTOR.execute(mDataGenerator); - } + triggerKeyGenerationLocked(); + } + } + + private void triggerKeyGenerationLocked() { + if (mData != null) return; + if (mDataGenerator == null) { + mDataGenerator = new FutureTask<CipherData>(createGeneratorCallable()); + AsyncTask.THREAD_POOL_EXECUTOR.execute(mDataGenerator); } }
diff --git a/chrome/browser/android/history/history_deletion_bridge_unittest.cc b/chrome/browser/android/history/history_deletion_bridge_unittest.cc index 822aeea..df49b398 100644 --- a/chrome/browser/android/history/history_deletion_bridge_unittest.cc +++ b/chrome/browser/android/history/history_deletion_bridge_unittest.cc
@@ -4,6 +4,7 @@ #include "chrome/browser/android/history/history_deletion_bridge.h" +#include "base/containers/contains.h" #include "base/time/time.h" #include "components/history/core/browser/history_types.h" #include "components/history/core/browser/url_row.h" @@ -25,6 +26,5 @@ EXPECT_EQ(expected.size(), actual.size()); for (auto row : actual) - EXPECT_NE(expected.end(), - std::find(expected.begin(), expected.end(), row.url())); + EXPECT_TRUE(base::Contains(expected, row.url())); }
diff --git a/chrome/browser/app_controller_mac.mm b/chrome/browser/app_controller_mac.mm index e4ae0ac..c2eab2b 100644 --- a/chrome/browser/app_controller_mac.mm +++ b/chrome/browser/app_controller_mac.mm
@@ -1106,7 +1106,16 @@ [self setLastProfile:last_used_profile]; } - _profileBookmarkMenuBridgeMap.erase(profilePath); + auto it = _profileBookmarkMenuBridgeMap.find(profilePath); + if (it != _profileBookmarkMenuBridgeMap.end() && + (!base::FeatureList::IsEnabled(features::kDestroyProfileOnBrowserClose) || + (it->second->GetProfile() && !isOffTheRecord))) { + // Clean up the dangling Profile* in |_profileBookmarkMenuBridgeMap|. + // + // No need to clean up when |isOffTheRecord|, because BookmarkMenuBridge + // always points to a non-OTR profile. + _profileBookmarkMenuBridgeMap.erase(it); + } } // Returns true if there is a modal window (either window- or application- @@ -1742,17 +1751,27 @@ _profilePrefRegistrar.reset(); - // Rebuild the menus with the new profile. The bookmarks submenu is cached to - // avoid slowdowns when switching between profiles with large numbers of - // bookmarks. Before caching, store whether it is hidden, make the menu item - // visible, and restore its original hidden state after resetting the submenu. - // This works around an apparent AppKit bug where setting a *different* NSMenu - // submenu on a *hidden* menu item forces the item to become visible. - // See https://crbug.com/497813 for more details. NSMenuItem* bookmarkItem = [[NSApp mainMenu] itemWithTag:IDC_BOOKMARKS_MENU]; BOOL hidden = [bookmarkItem isHidden]; - [bookmarkItem setHidden:NO]; - _bookmarkMenuBridge = nullptr; + if (profile != nullptr) { + // Rebuild the menus with the new profile. The bookmarks submenu is cached + // to avoid slowdowns when switching between profiles with large numbers of + // bookmarks. Before caching, store whether it is hidden, make the menu item + // visible, and restore its original hidden state after resetting the + // submenu. This works around an apparent AppKit bug where setting a + // *different* NSMenu submenu on a *hidden* menu item forces the item to + // become visible. See https://crbug.com/497813 for more details. + [bookmarkItem setHidden:NO]; + _bookmarkMenuBridge = nullptr; + } else if (_bookmarkMenuBridge && !_isShuttingDown) { + DCHECK_EQ(_bookmarkMenuBridge->GetProfile(), + _lastProfile->GetOriginalProfile()); + // |_bookmarkMenuBridge| always points to the original profile. So, no need + // to call OnProfileWillBeDestroyed() when the OTR profile is destroyed. + if (!_lastProfile->IsOffTheRecord()) { + _bookmarkMenuBridge->OnProfileWillBeDestroyed(); + } + } _lastProfile = profile; @@ -1760,14 +1779,17 @@ return; auto& entry = _profileBookmarkMenuBridgeMap[profile->GetPath()]; - if (!entry) { + if (!entry || !entry->GetProfile()) { // This creates a deep copy, but only the first 3 items in the root menu // are really wanted. This can probably be optimized, but lazy-loading of // the menu should reduce the impact in most flows. base::scoped_nsobject<NSMenu> submenu([[bookmarkItem submenu] copy]); [submenu setDelegate:nil]; // The delegate is also copied. Remove it. - entry = std::make_unique<BookmarkMenuBridge>(profile, submenu); + // The original profile outlives the OTR profile. Always create the bridge + // on the original profile, to prevent bugs WRT profile lifetime. + entry = std::make_unique<BookmarkMenuBridge>(profile->GetOriginalProfile(), + submenu); // Clear bookmarks from the old profile. entry->ClearBookmarkMenu();
diff --git a/chrome/browser/app_mode/app_mode_utils.cc b/chrome/browser/app_mode/app_mode_utils.cc index 45a33ef..37c2e76 100644 --- a/chrome/browser/app_mode/app_mode_utils.cc +++ b/chrome/browser/app_mode/app_mode_utils.cc
@@ -8,6 +8,7 @@ #include "base/check.h" #include "base/command_line.h" +#include "base/containers/contains.h" #include "chrome/app/chrome_command_ids.h" #include "chrome/common/chrome_switches.h" #include "third_party/abseil-cpp/absl/types/optional.h" @@ -51,15 +52,8 @@ constexpr int kAllowedPopup[] = {IDC_CLOSE_TAB}; - if (std::find(std::cbegin(kAllowed), std::cend(kAllowed), command_id) != - std::cend(kAllowed)) - return true; - if (is_popup && - std::find(std::cbegin(kAllowedPopup), std::cend(kAllowedPopup), - command_id) != std::cend(kAllowedPopup)) - return true; - - return false; + return base::Contains(kAllowed, command_id) || + (is_popup && base::Contains(kAllowedPopup, command_id)); } bool IsRunningInAppMode() {
diff --git a/chrome/browser/apps/guest_view/web_view_browsertest.cc b/chrome/browser/apps/guest_view/web_view_browsertest.cc index 7f8a5bd..ddd4840 100644 --- a/chrome/browser/apps/guest_view/web_view_browsertest.cc +++ b/chrome/browser/apps/guest_view/web_view_browsertest.cc
@@ -4241,7 +4241,9 @@ TestHelper("testScreenshotCapture", "web_view/shim", NO_TEST_SERVER); } -IN_PROC_BROWSER_TEST_P(WebViewTest, WebViewInBackgroundPage) { +// Test is disabled because it times out often. +// http://crbug.com/403325 +IN_PROC_BROWSER_TEST_P(WebViewTest, DISABLED_WebViewInBackgroundPage) { ASSERT_TRUE(StartEmbeddedTestServer()); ASSERT_TRUE(RunExtensionTest("platform_apps/web_view/background")) << message_; @@ -5796,6 +5798,49 @@ second_error_instance->GetStoragePartitionConfig()); } +// Ensure that the browser doesn't crash when a subframe in a <webview> is +// navigated to an unknown scheme. This used to be the case due to a mismatch +// between the error page's SiteInstance and the origin to commit as calculated +// in NavigationRequest. See https://crbug.com/1366450. +IN_PROC_BROWSER_TEST_F(SitePerProcessWebViewTest, ErrorPageInSubframe) { + ASSERT_TRUE(StartEmbeddedTestServer()); + + // Load an app with a <webview> guest that starts at a data: URL. + LoadAppWithGuest("web_view/simple"); + ASSERT_TRUE(GetGuestRenderFrameHost()); + + scoped_refptr<content::SiteInstance> first_instance = + GetGuestRenderFrameHost()->GetSiteInstance(); + EXPECT_TRUE(first_instance->IsGuest()); + + // Navigate <webview> to a page with an iframe. + const GURL first_url = + embedded_test_server()->GetURL("a.test", "/iframe.html"); + { + content::TestFrameNavigationObserver load_observer( + GetGuestRenderFrameHost()); + EXPECT_TRUE(ExecuteScript(GetGuestRenderFrameHost(), + "location.href = '" + first_url.spec() + "';")); + load_observer.Wait(); + EXPECT_TRUE(load_observer.last_navigation_succeeded()); + } + + // At this point, the guest's iframe should already be loaded. Navigate + // it to an unknown scheme, which will result in an error. This shouldn't + // crash the browser. + content::RenderFrameHost* guest_subframe = + ChildFrameAt(GetGuestRenderFrameHost(), 0); + const GURL error_url = GURL("unknownscheme:foo"); + { + content::TestFrameNavigationObserver load_observer(guest_subframe); + EXPECT_TRUE(ExecuteScript(guest_subframe, + "location.href = '" + error_url.spec() + "';")); + load_observer.Wait(); + EXPECT_FALSE(load_observer.last_navigation_succeeded()); + EXPECT_TRUE(ChildFrameAt(GetGuestRenderFrameHost(), 0)->IsErrorDocument()); + } +} + // Checks that a main frame navigation in a <webview> can swap // BrowsingInstances while staying in the same StoragePartition. IN_PROC_BROWSER_TEST_F(SitePerProcessWebViewTest, BrowsingInstanceSwap) {
diff --git a/chrome/browser/apps/guest_view/web_view_interactive_browsertest.cc b/chrome/browser/apps/guest_view/web_view_interactive_browsertest.cc index bc01e76f..eeec8cd 100644 --- a/chrome/browser/apps/guest_view/web_view_interactive_browsertest.cc +++ b/chrome/browser/apps/guest_view/web_view_interactive_browsertest.cc
@@ -1334,7 +1334,16 @@ EXPECT_TRUE(webview_button_not_focused_listener.WaitUntilSatisfied()); } -IN_PROC_BROWSER_TEST_F(WebViewInteractiveTest, KeyboardFocusSimple) { +// Flaky on MacOSX, crbug.com/817066. +// Flaky timeouts on Linux. https://crbug.com/709202 +// Flaky timeouts on Win. https://crbug.com/846695 +#if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_MAC) || \ + BUILDFLAG(IS_WIN) +#define MAYBE_KeyboardFocusSimple DISABLED_KeyboardFocusSimple +#else +#define MAYBE_KeyboardFocusSimple KeyboardFocusSimple +#endif +IN_PROC_BROWSER_TEST_F(WebViewInteractiveTest, MAYBE_KeyboardFocusSimple) { TestHelper("testKeyboardFocusSimple", "web_view/focus", NO_TEST_SERVER); EXPECT_EQ(embedder_web_contents()->GetFocusedFrame(),
diff --git a/chrome/browser/ash/accessibility/accessibility_manager.cc b/chrome/browser/ash/accessibility/accessibility_manager.cc index 19eee970..4a3e807 100644 --- a/chrome/browser/ash/accessibility/accessibility_manager.cc +++ b/chrome/browser/ash/accessibility/accessibility_manager.cc
@@ -32,6 +32,7 @@ #include "base/memory/singleton.h" #include "base/metrics/histogram_functions.h" #include "base/path_service.h" +#include "base/ranges/algorithm.h" #include "base/strings/string_number_conversions.h" #include "base/strings/string_piece.h" #include "base/strings/string_split.h" @@ -1254,9 +1255,8 @@ pref_service->GetString(::prefs::kLanguagePreloadEngines); std::vector<base::StringPiece> preload_engines = base::SplitStringPiece( preload_engines_str, ",", base::TRIM_WHITESPACE, base::SPLIT_WANT_ALL); - std::vector<base::StringPiece>::iterator it = - std::find(preload_engines.begin(), preload_engines.end(), - extension_ime_util::kBrailleImeEngineId); + std::vector<base::StringPiece>::iterator it = base::ranges::find( + preload_engines, extension_ime_util::kBrailleImeEngineId); bool is_enabled = (it != preload_engines.end()); bool should_be_enabled = (IsSpokenFeedbackEnabled() && braille_display_connected_);
diff --git a/chrome/browser/ash/accessibility/dictation_browsertest.cc b/chrome/browser/ash/accessibility/dictation_browsertest.cc index 486fc3a..4eec254 100644 --- a/chrome/browser/ash/accessibility/dictation_browsertest.cc +++ b/chrome/browser/ash/accessibility/dictation_browsertest.cc
@@ -1687,7 +1687,13 @@ DictationPumpkinInstallTest, ::testing::Values(speech::SpeechRecognitionType::kOnDevice)); -IN_PROC_BROWSER_TEST_P(DictationPumpkinInstallTest, WaitForInstall) { +// TODO(crbug.com/1368843): Test is flaky on MSAN builds. +#if defined(MEMORY_SANITIZER) +#define MAYBE_WaitForInstall DISABLED_WaitForInstall +#else +#define MAYBE_WaitForInstall WaitForInstall +#endif +IN_PROC_BROWSER_TEST_P(DictationPumpkinInstallTest, MAYBE_WaitForInstall) { // Dictation will request a Pumpkin install when it starts up. Wait for // the install to succeed. WaitForInstallToSucceed();
diff --git a/chrome/browser/ash/app_mode/kiosk_cryptohome_remover.cc b/chrome/browser/ash/app_mode/kiosk_cryptohome_remover.cc index 05e355c..ba18508 100644 --- a/chrome/browser/ash/app_mode/kiosk_cryptohome_remover.cc +++ b/chrome/browser/ash/app_mode/kiosk_cryptohome_remover.cc
@@ -10,6 +10,7 @@ #include "base/barrier_closure.h" #include "base/bind.h" #include "base/callback.h" +#include "base/containers/contains.h" #include "base/logging.h" #include "chrome/browser/ash/app_mode/pref_names.h" #include "chrome/browser/browser_process.h" @@ -115,8 +116,7 @@ AccountId active_account_id; if (active_user) active_account_id = active_user->GetAccountId(); - if (std::find(account_ids.begin(), account_ids.end(), active_account_id) != - account_ids.end()) { + if (base::Contains(account_ids, active_account_id)) { cryptohomes_barrier_closure = BarrierClosure( account_ids.size() - 1, base::BindOnce(&chrome::AttemptUserExit)); }
diff --git a/chrome/browser/ash/app_mode/web_app/web_kiosk_browser_controller_ash_browsertest.cc b/chrome/browser/ash/app_mode/web_app/web_kiosk_browser_controller_ash_browsertest.cc index e34d707..19830f84 100644 --- a/chrome/browser/ash/app_mode/web_app/web_kiosk_browser_controller_ash_browsertest.cc +++ b/chrome/browser/ash/app_mode/web_app/web_kiosk_browser_controller_ash_browsertest.cc
@@ -2,8 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include <algorithm> #include "base/callback_forward.h" +#include "base/containers/contains.h" #include "base/run_loop.h" #include "base/test/bind.h" #include "build/chromeos_buildflags.h" @@ -176,9 +176,7 @@ // The newly opened browser will be closed and removed from |BrowserList|. run_loop.Run(); - EXPECT_EQ( - std::find(browser_list->begin(), browser_list->end(), new_browser), - browser_list->end()); + EXPECT_FALSE(base::Contains(*browser_list, new_browser)); } // Verify that accessibility settings can be opened as popup. @@ -199,9 +197,7 @@ ->app_session() ->GetSettingsBrowserForTesting(); EXPECT_TRUE(settings_browser); - EXPECT_NE( - std::find(browser_list->begin(), browser_list->end(), settings_browser), - browser_list->end()); + EXPECT_TRUE(base::Contains(*browser_list, settings_browser)); } }
diff --git a/chrome/browser/ash/arc/adbd/arc_adbd_monitor_bridge_unittest.cc b/chrome/browser/ash/arc/adbd/arc_adbd_monitor_bridge_unittest.cc index 6ad9d89..dc135905 100644 --- a/chrome/browser/ash/arc/adbd/arc_adbd_monitor_bridge_unittest.cc +++ b/chrome/browser/ash/arc/adbd/arc_adbd_monitor_bridge_unittest.cc
@@ -13,6 +13,7 @@ #include "ash/components/arc/test/fake_adbd_monitor_instance.h" #include "ash/components/arc/test/fake_arc_session.h" #include "ash/components/arc/test/test_browser_context.h" +#include "base/ranges/algorithm.h" #include "base/run_loop.h" #include "base/test/bind.h" #include "chromeos/ash/components/dbus/upstart/fake_upstart_client.h" @@ -124,8 +125,8 @@ const auto& ops = upstart_operations(); // Find the STOP operation for the job. - auto it = std::find(ops.begin(), ops.end(), - std::make_pair(std::string(kArcVmAdbdJobName), false)); + auto it = base::ranges::find( + ops, std::make_pair(std::string(kArcVmAdbdJobName), false)); ASSERT_NE(ops.end(), it); ++it; ASSERT_NE(ops.end(), it); @@ -151,8 +152,8 @@ const auto& ops = upstart_operations(); // Find the STOP operation for the job. - auto it = std::find(ops.begin(), ops.end(), - std::make_pair(std::string(kArcVmAdbdJobName), false)); + auto it = base::ranges::find( + ops, std::make_pair(std::string(kArcVmAdbdJobName), false)); EXPECT_EQ(ops.size(), 2u); ASSERT_NE(ops.end(), it); ++it; @@ -177,8 +178,8 @@ const auto& ops = upstart_operations(); // Find the STOP operation for the job. - auto it = std::find(ops.begin(), ops.end(), - std::make_pair(std::string(kArcVmAdbdJobName), false)); + auto it = base::ranges::find( + ops, std::make_pair(std::string(kArcVmAdbdJobName), false)); EXPECT_EQ(ops.size(), 1u); // The next operation must be START for the job. EXPECT_EQ(it->first, kArcVmAdbdJobName);
diff --git a/chrome/browser/ash/arc/fileapi/arc_documents_provider_util.cc b/chrome/browser/ash/arc/fileapi/arc_documents_provider_util.cc index 3c76889..fc3afb7e 100644 --- a/chrome/browser/ash/arc/fileapi/arc_documents_provider_util.cc +++ b/chrome/browser/ash/arc/fileapi/arc_documents_provider_util.cc
@@ -9,6 +9,7 @@ #include "ash/components/arc/mojom/file_system.mojom.h" #include "base/containers/contains.h" +#include "base/ranges/algorithm.h" #include "base/strings/escape.h" #include "base/strings/string_split.h" #include "base/strings/string_util.h" @@ -212,8 +213,7 @@ base::FilePath::StringType preferred_extension; if (net::GetPreferredExtensionForMimeType(mime_type, &preferred_extension)) { - auto iter = std::find(extensions.begin(), extensions.end(), - preferred_extension); + auto iter = base::ranges::find(extensions, preferred_extension); if (iter == extensions.end()) { // This is unlikely to happen, but there is no guarantee. extensions.insert(extensions.begin(), preferred_extension);
diff --git a/chrome/browser/ash/arc/input_overlay/actions/action_move.cc b/chrome/browser/ash/arc/input_overlay/actions/action_move.cc index d1655be..3e20aee5 100644 --- a/chrome/browser/ash/arc/input_overlay/actions/action_move.cc +++ b/chrome/browser/ash/arc/input_overlay/actions/action_move.cc
@@ -5,7 +5,9 @@ #include "chrome/browser/ash/arc/input_overlay/actions/action_move.h" #include "base/check_op.h" +#include "base/containers/contains.h" #include "base/cxx17_backports.h" +#include "base/ranges/algorithm.h" #include "base/strings/utf_string_conversions.h" #include "chrome/browser/ash/arc/input_overlay/actions/action.h" #include "chrome/browser/ash/arc/input_overlay/touch_id_manager.h" @@ -153,7 +155,7 @@ DCHECK_EQ(labels_.size(), kActionMoveKeysSize); if (labels_.size() != kActionMoveKeysSize) return; - auto it = std::find(labels_.begin(), labels_.end(), action_label); + auto it = base::ranges::find(labels_, action_label); DCHECK(it != labels_.end()); if (it == labels_.end()) return; @@ -273,8 +275,7 @@ << "}."; return false; } - auto it = std::find(keycodes.begin(), keycodes.end(), key); - if (it != keycodes.end()) { + if (base::Contains(keycodes, key)) { LOG(ERROR) << "Duplicated key {" << val << "} for move key action: " << name_; return false; @@ -419,7 +420,7 @@ const gfx::Transform* rotation_transform, std::list<ui::TouchEvent>& rewritten_events) { auto keys = current_input_->keys(); - auto it = std::find(keys.begin(), keys.end(), key_event->code()); + auto it = base::ranges::find(keys, key_event->code()); if (it == keys.end()) return false;
diff --git a/chrome/browser/ash/arc/input_overlay/actions/input_element.cc b/chrome/browser/ash/arc/input_overlay/actions/input_element.cc index fac404f..3f1eda4 100644 --- a/chrome/browser/ash/arc/input_overlay/actions/input_element.cc +++ b/chrome/browser/ash/arc/input_overlay/actions/input_element.cc
@@ -4,10 +4,11 @@ #include "chrome/browser/ash/arc/input_overlay/actions/input_element.h" -#include <algorithm> #include <iterator> +#include "base/containers/contains.h" #include "base/notreached.h" +#include "base/ranges/algorithm.h" #include "ui/events/event_constants.h" #include "ui/events/keycodes/dom/keycode_converter.h" @@ -161,7 +162,7 @@ } if (input_sources_ == InputSource::IS_KEYBOARD) { for (auto key : input_element.keys()) { - if (std::find(keys_.begin(), keys_.end(), key) != keys_.end()) + if (base::Contains(keys_, key)) return true; } return false; @@ -182,7 +183,7 @@ } int InputElement::GetIndexOfKey(ui::DomCode key) const { - auto it = std::find(keys_.begin(), keys_.end(), key); + auto it = base::ranges::find(keys_, key); return it == keys_.end() ? -1 : it - keys_.begin(); }
diff --git a/chrome/browser/ash/arc/intent_helper/arc_settings_service.cc b/chrome/browser/ash/arc/intent_helper/arc_settings_service.cc index a913716b..58f48a8 100644 --- a/chrome/browser/ash/arc/intent_helper/arc_settings_service.cc +++ b/chrome/browser/ash/arc/intent_helper/arc_settings_service.cc
@@ -102,7 +102,7 @@ } bool IsProxyAutoDetectionConfigured(const base::Value& proxy_config_dict) { - ProxyConfigDictionary dict(proxy_config_dict.Clone()); + ProxyConfigDictionary dict(proxy_config_dict.GetDict().Clone()); ProxyPrefs::ProxyMode mode; dict.GetMode(&mode); return mode == ProxyPrefs::MODE_AUTO_DETECT;
diff --git a/chrome/browser/ash/arc/intent_helper/arc_settings_service_browsertest.cc b/chrome/browser/ash/arc/intent_helper/arc_settings_service_browsertest.cc index 3bef356..e9cb7b6 100644 --- a/chrome/browser/ash/arc/intent_helper/arc_settings_service_browsertest.cc +++ b/chrome/browser/ash/arc/intent_helper/arc_settings_service_browsertest.cc
@@ -192,7 +192,7 @@ // all their extras match with |extras|. int CountProxyBroadcasts( const std::vector<FakeIntentHelperInstance::Broadcast>& broadcasts, - const std::vector<base::Value*> extras) { + const std::vector<base::Value::Dict*>& extras) { unsigned long count = 0; for (const FakeIntentHelperInstance::Broadcast& broadcast : broadcasts) { if (broadcast.action == kSetProxyBroadcastAction) { @@ -300,7 +300,7 @@ } void SetProxyConfigForNetworkService(const std::string& service_path, - base::Value proxy_config) { + base::Value::Dict proxy_config) { ProxyConfigDictionary proxy_config_dict(std::move(proxy_config)); const ash::NetworkState* network = ash::NetworkHandler::Get()->network_state_handler()->GetNetworkState( @@ -484,10 +484,10 @@ base::Value(ProxyPrefs::kAutoDetectProxyModeName), nullptr); UpdatePolicy(policy); - base::Value expected_proxy_config(base::Value::Type::DICTIONARY); - expected_proxy_config.SetKey( - "mode", base::Value(ProxyPrefs::kAutoDetectProxyModeName)); - expected_proxy_config.SetKey("pacUrl", base::Value("http://wpad/wpad.dat")); + base::Value::Dict expected_proxy_config; + expected_proxy_config.Set("mode", + base::Value(ProxyPrefs::kAutoDetectProxyModeName)); + expected_proxy_config.Set("pacUrl", base::Value("http://wpad/wpad.dat")); EXPECT_EQ(CountProxyBroadcasts(fake_intent_helper_instance_->broadcasts(), {&expected_proxy_config}), 1); @@ -502,10 +502,10 @@ policy::POLICY_SOURCE_CLOUD, base::Value(kONCPolicy), nullptr); UpdatePolicy(policy); - base::Value expected_proxy_config(base::Value::Type::DICTIONARY); - expected_proxy_config.SetKey( - "mode", base::Value(ProxyPrefs::kPacScriptProxyModeName)); - expected_proxy_config.SetKey("pacUrl", base::Value(kONCPacUrl)); + base::Value::Dict expected_proxy_config; + expected_proxy_config.Set("mode", + base::Value(ProxyPrefs::kPacScriptProxyModeName)); + expected_proxy_config.Set("pacUrl", base::Value(kONCPacUrl)); EXPECT_EQ(CountProxyBroadcasts(fake_intent_helper_instance_->broadcasts(), {&expected_proxy_config}), @@ -524,10 +524,10 @@ policy::POLICY_SOURCE_CLOUD, base::Value(kONCPolicy), nullptr); UpdatePolicy(policy); - base::Value expected_proxy_config(base::Value::Type::DICTIONARY); - expected_proxy_config.SetKey( - "mode", base::Value(ProxyPrefs::kPacScriptProxyModeName)); - expected_proxy_config.SetKey("pacUrl", base::Value(kONCPacUrl)); + base::Value::Dict expected_proxy_config; + expected_proxy_config.Set("mode", + base::Value(ProxyPrefs::kPacScriptProxyModeName)); + expected_proxy_config.Set("pacUrl", base::Value(kONCPacUrl)); // Set the user preference to indicate that ARC should connect to // System-proxy. @@ -536,11 +536,11 @@ base::Value("local_proxy:3128")); RunUntilIdle(); - base::Value expected_proxy_config_system_proxy(base::Value::Type::DICTIONARY); - expected_proxy_config_system_proxy.SetKey( + base::Value::Dict expected_proxy_config_system_proxy; + expected_proxy_config_system_proxy.Set( "mode", base::Value(ProxyPrefs::kFixedServersProxyModeName)); - expected_proxy_config_system_proxy.SetKey("host", base::Value("local_proxy")); - expected_proxy_config_system_proxy.SetIntKey("port", 3128); + expected_proxy_config_system_proxy.Set("host", base::Value("local_proxy")); + expected_proxy_config_system_proxy.Set("port", 3128); // Unset the System-proxy preference to verify that ARC syncs proxy configs // correctly when System-proxy is disabled. @@ -576,9 +576,9 @@ base::Value("local_proxy:3128")); RunUntilIdle(); - base::Value expected_proxy_config(base::Value::Type::DICTIONARY); - expected_proxy_config.SetKey("mode", - base::Value(ProxyPrefs::kDirectProxyModeName)); + base::Value::Dict expected_proxy_config; + expected_proxy_config.Set("mode", + base::Value(ProxyPrefs::kDirectProxyModeName)); EXPECT_EQ(CountProxyBroadcasts(fake_intent_helper_instance_->broadcasts(), {&expected_proxy_config}), @@ -599,9 +599,8 @@ base::Value("proxy:8888"), nullptr); UpdatePolicy(policy); - base::Value proxy_config(base::Value::Type::DICTIONARY); - proxy_config.SetKey("mode", - base::Value(ProxyPrefs::kAutoDetectProxyModeName)); + base::Value::Dict proxy_config; + proxy_config.Set("mode", base::Value(ProxyPrefs::kAutoDetectProxyModeName)); ProxyConfigDictionary proxy_config_dict(std::move(proxy_config)); const ash::NetworkState* network = ash::NetworkHandler::Get()->network_state_handler()->DefaultNetwork(); @@ -609,11 +608,11 @@ ash::proxy_config::SetProxyConfigForNetwork(proxy_config_dict, *network); RunUntilIdle(); - base::Value expected_proxy_config(base::Value::Type::DICTIONARY); - expected_proxy_config.SetKey( + base::Value::Dict expected_proxy_config; + expected_proxy_config.Set( "mode", base::Value(ProxyPrefs::kFixedServersProxyModeName)); - expected_proxy_config.SetKey("host", base::Value("proxy")); - expected_proxy_config.SetKey("port", base::Value(8888)); + expected_proxy_config.Set("host", base::Value("proxy")); + expected_proxy_config.Set("port", base::Value(8888)); EXPECT_EQ(CountProxyBroadcasts(fake_intent_helper_instance_->broadcasts(), {&expected_proxy_config}), @@ -623,17 +622,17 @@ IN_PROC_BROWSER_TEST_F(ArcSettingsServiceTest, ProxyPrefTest) { fake_intent_helper_instance_->clear_broadcasts(); - base::Value proxy_config(base::Value::Type::DICTIONARY); - proxy_config.SetKey("mode", base::Value(ProxyPrefs::kPacScriptProxyModeName)); - proxy_config.SetKey("pac_url", base::Value("http://proxy")); - browser()->profile()->GetPrefs()->Set(proxy_config::prefs::kProxy, - proxy_config); + base::Value::Dict proxy_config; + proxy_config.Set("mode", base::Value(ProxyPrefs::kPacScriptProxyModeName)); + proxy_config.Set("pac_url", base::Value("http://proxy")); + browser()->profile()->GetPrefs()->SetDict(proxy_config::prefs::kProxy, + std::move(proxy_config)); RunUntilIdle(); - base::Value expected_proxy_config(base::Value::Type::DICTIONARY); - expected_proxy_config.SetKey( - "mode", base::Value(ProxyPrefs::kPacScriptProxyModeName)); - expected_proxy_config.SetKey("pacUrl", base::Value("http://proxy")); + base::Value::Dict expected_proxy_config; + expected_proxy_config.Set("mode", + base::Value(ProxyPrefs::kPacScriptProxyModeName)); + expected_proxy_config.Set("pacUrl", base::Value("http://proxy")); EXPECT_EQ(CountProxyBroadcasts(fake_intent_helper_instance_->broadcasts(), {&expected_proxy_config}), 1); @@ -642,18 +641,17 @@ IN_PROC_BROWSER_TEST_F(ArcSettingsServiceTest, DefaultNetworkProxyConfigTest) { fake_intent_helper_instance_->clear_broadcasts(); - base::Value proxy_config(base::Value::Type::DICTIONARY); - proxy_config.SetKey("mode", - base::Value(ProxyPrefs::kFixedServersProxyModeName)); - proxy_config.SetKey("server", base::Value("proxy:8080")); + base::Value::Dict proxy_config; + proxy_config.Set("mode", base::Value(ProxyPrefs::kFixedServersProxyModeName)); + proxy_config.Set("server", base::Value("proxy:8080")); SetProxyConfigForNetworkService(kDefaultServicePath, std::move(proxy_config)); RunUntilIdle(); - base::Value expected_proxy_config(base::Value::Type::DICTIONARY); - expected_proxy_config.SetKey( + base::Value::Dict expected_proxy_config; + expected_proxy_config.Set( "mode", base::Value(ProxyPrefs::kFixedServersProxyModeName)); - expected_proxy_config.SetKey("host", base::Value("proxy")); - expected_proxy_config.SetKey("port", base::Value(8080)); + expected_proxy_config.Set("host", base::Value("proxy")); + expected_proxy_config.Set("port", base::Value(8080)); EXPECT_EQ(CountProxyBroadcasts(fake_intent_helper_instance_->broadcasts(), {&expected_proxy_config}), 1); @@ -672,21 +670,20 @@ const char kArcProxyBypassList[] = "test1.org,test2.org"; - base::Value proxy_config(base::Value::Type::DICTIONARY); - proxy_config.SetKey("mode", - base::Value(ProxyPrefs::kFixedServersProxyModeName)); - proxy_config.SetKey("server", base::Value("proxy:8080")); - proxy_config.SetKey("bypass_list", - base::Value(chrome_proxy_bypass_rules.ToString())); + base::Value::Dict proxy_config; + proxy_config.Set("mode", base::Value(ProxyPrefs::kFixedServersProxyModeName)); + proxy_config.Set("server", base::Value("proxy:8080")); + proxy_config.Set("bypass_list", + base::Value(chrome_proxy_bypass_rules.ToString())); SetProxyConfigForNetworkService(kDefaultServicePath, std::move(proxy_config)); RunUntilIdle(); - base::Value expected_proxy_config(base::Value::Type::DICTIONARY); - expected_proxy_config.SetKey( + base::Value::Dict expected_proxy_config; + expected_proxy_config.Set( "mode", base::Value(ProxyPrefs::kFixedServersProxyModeName)); - expected_proxy_config.SetKey("host", base::Value("proxy")); - expected_proxy_config.SetKey("port", base::Value(8080)); - expected_proxy_config.SetKey("bypassList", base::Value(kArcProxyBypassList)); + expected_proxy_config.Set("host", base::Value("proxy")); + expected_proxy_config.Set("port", base::Value(8080)); + expected_proxy_config.Set("bypassList", base::Value(kArcProxyBypassList)); EXPECT_EQ(CountProxyBroadcasts(fake_intent_helper_instance_->broadcasts(), {&expected_proxy_config}), @@ -697,30 +694,29 @@ ConnectWifiNetworkService(kWifi0ServicePath, kWifi0Guid, kWifi0Ssid); fake_intent_helper_instance_->clear_broadcasts(); // Set proxy confog for default network. - base::Value default_proxy_config(base::Value::Type::DICTIONARY); - default_proxy_config.SetKey( - "mode", base::Value(ProxyPrefs::kFixedServersProxyModeName)); - default_proxy_config.SetKey("server", base::Value("default.proxy.test:8080")); + base::Value::Dict default_proxy_config; + default_proxy_config.Set("mode", + base::Value(ProxyPrefs::kFixedServersProxyModeName)); + default_proxy_config.Set("server", base::Value("default.proxy.test:8080")); SetProxyConfigForNetworkService(kDefaultServicePath, std::move(default_proxy_config)); RunUntilIdle(); // Set proxy confog for WI-FI network. - base::Value wifi_proxy_config(base::Value::Type::DICTIONARY); - wifi_proxy_config.SetKey("mode", - base::Value(ProxyPrefs::kFixedServersProxyModeName)); - wifi_proxy_config.SetKey("server", base::Value("wifi.proxy.test:8080")); + base::Value::Dict wifi_proxy_config; + wifi_proxy_config.Set("mode", + base::Value(ProxyPrefs::kFixedServersProxyModeName)); + wifi_proxy_config.Set("server", base::Value("wifi.proxy.test:8080")); SetProxyConfigForNetworkService(kWifi0ServicePath, std::move(wifi_proxy_config)); RunUntilIdle(); // Observe default network proxy config broadcast. - base::Value expected_default_proxy_config(base::Value::Type::DICTIONARY); - expected_default_proxy_config.SetKey( + base::Value::Dict expected_default_proxy_config; + expected_default_proxy_config.Set( "mode", base::Value(ProxyPrefs::kFixedServersProxyModeName)); - expected_default_proxy_config.SetKey("host", - base::Value("default.proxy.test")); - expected_default_proxy_config.SetKey("port", base::Value(8080)); + expected_default_proxy_config.Set("host", base::Value("default.proxy.test")); + expected_default_proxy_config.Set("port", base::Value(8080)); EXPECT_EQ(CountProxyBroadcasts(fake_intent_helper_instance_->broadcasts(), {&expected_default_proxy_config}), 1); @@ -730,11 +726,11 @@ DisconnectNetworkService(kDefaultServicePath); // Observe WI-FI network proxy config broadcast. - base::Value expected_wifi_proxy_config(base::Value::Type::DICTIONARY); - expected_wifi_proxy_config.SetKey( + base::Value::Dict expected_wifi_proxy_config; + expected_wifi_proxy_config.Set( "mode", base::Value(ProxyPrefs::kFixedServersProxyModeName)); - expected_wifi_proxy_config.SetKey("host", base::Value("wifi.proxy.test")); - expected_wifi_proxy_config.SetKey("port", base::Value(8080)); + expected_wifi_proxy_config.Set("host", base::Value("wifi.proxy.test")); + expected_wifi_proxy_config.Set("port", base::Value(8080)); EXPECT_EQ(CountProxyBroadcasts(fake_intent_helper_instance_->broadcasts(), {&expected_wifi_proxy_config}), @@ -769,14 +765,14 @@ nullptr); UpdatePolicy(policy); - base::Value expected_proxy_config(base::Value::Type::DICTIONARY); - expected_proxy_config.SetKey( + base::Value::Dict expected_proxy_config; + expected_proxy_config.Set( "mode", base::Value(ProxyPrefs::kFixedServersProxyModeName)); - expected_proxy_config.SetKey("host", base::Value("proxy")); - expected_proxy_config.SetKey("port", base::Value(5000)); + expected_proxy_config.Set("host", base::Value("proxy")); + expected_proxy_config.Set("port", base::Value(5000)); - base::Value expected_proxy_config_direct(base::Value::Type::DICTIONARY); - expected_proxy_config_direct.SetKey( + base::Value::Dict expected_proxy_config_direct; + expected_proxy_config_direct.Set( "mode", base::Value(ProxyPrefs::kDirectProxyModeName)); EXPECT_EQ(CountProxyBroadcasts( @@ -790,10 +786,10 @@ // Connect to wifi0 with appliead user ONC policy. ConnectWifiNetworkService(kWifi0ServicePath, kWifi0Guid, kWifi0Ssid); - expected_proxy_config.SetKey( + expected_proxy_config.Set( "mode", base::Value(ProxyPrefs::kFixedServersProxyModeName)); - expected_proxy_config.SetKey("host", base::Value("proxy-n300")); - expected_proxy_config.SetKey("port", base::Value(3000)); + expected_proxy_config.Set("host", base::Value("proxy-n300")); + expected_proxy_config.Set("port", base::Value(3000)); EXPECT_EQ(CountProxyBroadcasts(fake_intent_helper_instance_->broadcasts(), {&expected_proxy_config}), @@ -805,18 +801,18 @@ IN_PROC_BROWSER_TEST_F(ArcSettingsServiceTest, ProxySyncUnmanagedDevice) { fake_intent_helper_instance_->clear_broadcasts(); - std::vector<base::Value*> expected_proxy_configs; - base::Value expected_proxy_config1(base::Value::Type::DICTIONARY); - expected_proxy_config1.SetKey( + std::vector<base::Value::Dict*> expected_proxy_configs; + base::Value::Dict expected_proxy_config1; + expected_proxy_config1.Set( "mode", base::Value(ProxyPrefs::kFixedServersProxyModeName)); - expected_proxy_config1.SetKey("host", base::Value("proxy")); - expected_proxy_config1.SetKey("port", base::Value(1111)); + expected_proxy_config1.Set("host", base::Value("proxy")); + expected_proxy_config1.Set("port", base::Value(1111)); - base::Value expected_proxy_config2(base::Value::Type::DICTIONARY); - expected_proxy_config2.SetKey( + base::Value::Dict expected_proxy_config2; + expected_proxy_config2.Set( "mode", base::Value(ProxyPrefs::kFixedServersProxyModeName)); - expected_proxy_config2.SetKey("host", base::Value("proxy")); - expected_proxy_config2.SetKey("port", base::Value(2222)); + expected_proxy_config2.Set("host", base::Value("proxy")); + expected_proxy_config2.Set("port", base::Value(2222)); // The number of times to sync is randomly chosen. The only constraint is that // it has to be larger than two, as the proxy settings will be synced once at @@ -824,19 +820,19 @@ int proxy_sync_count = 10; for (int i = 0; i < proxy_sync_count; i += 2) { - base::Value proxy_config1(base::Value::Type::DICTIONARY); - proxy_config1.SetKey("mode", - base::Value(ProxyPrefs::kFixedServersProxyModeName)); - proxy_config1.SetKey("server", base::Value("proxy:1111")); + base::Value::Dict proxy_config1; + proxy_config1.Set("mode", + base::Value(ProxyPrefs::kFixedServersProxyModeName)); + proxy_config1.Set("server", base::Value("proxy:1111")); SetProxyConfigForNetworkService(kDefaultServicePath, std::move(proxy_config1)); expected_proxy_configs.push_back(&expected_proxy_config1); RunUntilIdle(); - base::Value proxy_config2(base::Value::Type::DICTIONARY); - proxy_config2.SetKey("mode", - base::Value(ProxyPrefs::kFixedServersProxyModeName)); - proxy_config2.SetKey("server", base::Value("proxy:2222")); + base::Value::Dict proxy_config2; + proxy_config2.Set("mode", + base::Value(ProxyPrefs::kFixedServersProxyModeName)); + proxy_config2.Set("server", base::Value("proxy:2222")); SetProxyConfigForNetworkService(kDefaultServicePath, std::move(proxy_config2)); expected_proxy_configs.push_back(&expected_proxy_config2); @@ -853,11 +849,11 @@ // Set the proxy config to use auto-discovery. There's no PAC URL set via DHCP // so the URL "http://wpad/wpad.dat" set via DNS will be propagated to ARC. - base::Value proxy_config_wpad(base::Value::Type::DICTIONARY); - proxy_config_wpad.SetKey("mode", - base::Value(ProxyPrefs::kAutoDetectProxyModeName)); - browser()->profile()->GetPrefs()->Set(proxy_config::prefs::kProxy, - proxy_config_wpad); + base::Value::Dict proxy_config_wpad; + proxy_config_wpad.Set("mode", + base::Value(ProxyPrefs::kAutoDetectProxyModeName)); + browser()->profile()->GetPrefs()->SetDict(proxy_config::prefs::kProxy, + std::move(proxy_config_wpad)); RunUntilIdle(); const char kWebProxyAutodetectionUrl[] = "www.proxyurl.com:443"; @@ -867,11 +863,12 @@ // Set the WPAD DHCP URL. This should now have precedence over the PAC URL set // via DNS. - base::Value wpad_config(base::Value::Type::DICTIONARY); - wpad_config.SetKey(shill::kWebProxyAutoDiscoveryUrlProperty, - base::Value(kWebProxyAutodetectionUrl)); + base::Value::Dict wpad_config; + wpad_config.Set(shill::kWebProxyAutoDiscoveryUrlProperty, + base::Value(kWebProxyAutodetectionUrl)); const std::string kIPConfigPath = "test_ip_config"; - ip_config_client->AddIPConfig(kIPConfigPath, wpad_config); + ip_config_client->AddIPConfig(kIPConfigPath, + base::Value(std::move(wpad_config))); ash::ShillServiceClient::TestInterface* service_test = ash::ShillServiceClient::Get()->GetTestInterface(); @@ -882,27 +879,27 @@ RunUntilIdle(); // Remove the proxy. - base::Value proxy_config_direct(base::Value::Type::DICTIONARY); - proxy_config_direct.SetKey("mode", - base::Value(ProxyPrefs::kDirectProxyModeName)); - browser()->profile()->GetPrefs()->Set(proxy_config::prefs::kProxy, - proxy_config_direct); + base::Value::Dict proxy_config_direct; + proxy_config_direct.Set("mode", + base::Value(ProxyPrefs::kDirectProxyModeName)); + browser()->profile()->GetPrefs()->SetDict(proxy_config::prefs::kProxy, + std::move(proxy_config_direct)); RunUntilIdle(); - base::Value expected_proxy_config_wpad_dns(base::Value::Type::DICTIONARY); - expected_proxy_config_wpad_dns.SetKey( + base::Value::Dict expected_proxy_config_wpad_dns; + expected_proxy_config_wpad_dns.Set( "mode", base::Value(ProxyPrefs::kAutoDetectProxyModeName)); - expected_proxy_config_wpad_dns.SetKey("pacUrl", - base::Value("http://wpad/wpad.dat")); + expected_proxy_config_wpad_dns.Set("pacUrl", + base::Value("http://wpad/wpad.dat")); - base::Value expected_proxy_config_wpad_dhcp(base::Value::Type::DICTIONARY); - expected_proxy_config_wpad_dhcp.SetKey( + base::Value::Dict expected_proxy_config_wpad_dhcp; + expected_proxy_config_wpad_dhcp.Set( "mode", base::Value(ProxyPrefs::kAutoDetectProxyModeName)); - expected_proxy_config_wpad_dhcp.SetKey( - "pacUrl", base::Value(kWebProxyAutodetectionUrl)); + expected_proxy_config_wpad_dhcp.Set("pacUrl", + base::Value(kWebProxyAutodetectionUrl)); - base::Value expected_proxy_config_direct(base::Value::Type::DICTIONARY); - expected_proxy_config_direct.SetKey( + base::Value::Dict expected_proxy_config_direct; + expected_proxy_config_direct.Set( "mode", base::Value(ProxyPrefs::kDirectProxyModeName)); EXPECT_EQ(CountProxyBroadcasts(fake_intent_helper_instance_->broadcasts(),
diff --git a/chrome/browser/ash/camera_mic/vm_camera_mic_manager_unittest.cc b/chrome/browser/ash/camera_mic/vm_camera_mic_manager_unittest.cc index 1cf6012a..336a12c 100644 --- a/chrome/browser/ash/camera_mic/vm_camera_mic_manager_unittest.cc +++ b/chrome/browser/ash/camera_mic/vm_camera_mic_manager_unittest.cc
@@ -4,7 +4,6 @@ #include "chrome/browser/ash/camera_mic/vm_camera_mic_manager.h" -#include <algorithm> #include <memory> #include <utility> @@ -19,6 +18,7 @@ #include "ash/system/unified/unified_system_tray.h" #include "ash/test/ash_test_helper.h" #include "base/bind.h" +#include "base/containers/contains.h" #include "base/containers/flat_map.h" #include "base/test/scoped_feature_list.h" #include "base/time/time.h" @@ -97,12 +97,6 @@ std::vector<NotificationType> notification_expectations; }; -template <typename T, typename V> -bool contains(const T& container, const V& value) { - return std::find(container.begin(), container.end(), value) != - container.end(); -} - // Check the visibility of privacy indicators in all displays. void ExpectPrivacyIndicatorsVisible(bool visible) { for (ash::RootWindowController* root_window_controller : @@ -327,13 +321,14 @@ for (auto device : {kCamera, kMic}) { EXPECT_EQ(vm_camera_mic_manager_->IsDeviceActive(device), - contains(GetParam().device_expectations, device)); + base::Contains(GetParam().device_expectations, device)); } for (auto notification : {kCameraNotification, kMicNotification, kCameraAndMicNotification}) { - EXPECT_EQ(vm_camera_mic_manager_->IsNotificationActive(notification), - contains(GetParam().notification_expectations, notification)); + EXPECT_EQ( + vm_camera_mic_manager_->IsNotificationActive(notification), + base::Contains(GetParam().notification_expectations, notification)); } }
diff --git a/chrome/browser/ash/child_accounts/edu_coexistence_tos_store_utils.cc b/chrome/browser/ash/child_accounts/edu_coexistence_tos_store_utils.cc index 940c2b3..d787f167 100644 --- a/chrome/browser/ash/child_accounts/edu_coexistence_tos_store_utils.cc +++ b/chrome/browser/ash/child_accounts/edu_coexistence_tos_store_utils.cc
@@ -43,12 +43,11 @@ void UpdateAcceptedToSVersionPref(Profile* profile, const UserConsentInfo& user_consent_info) { - DictionaryPrefUpdate update(profile->GetPrefs(), + ScopedDictPrefUpdate update(profile->GetPrefs(), prefs::kEduCoexistenceToSAcceptedVersion); - base::Value* dict = update.Get(); - dict->SetStringPath(user_consent_info.edu_account_gaia_id, - user_consent_info.edu_coexistence_tos_version); + update->SetByDottedPath(user_consent_info.edu_account_gaia_id, + user_consent_info.edu_coexistence_tos_version); } void SetUserConsentInfoListForProfile(
diff --git a/chrome/browser/ash/child_accounts/family_user_parental_control_metrics_unittest.cc b/chrome/browser/ash/child_accounts/family_user_parental_control_metrics_unittest.cc index 335c3fc..64924bc 100644 --- a/chrome/browser/ash/child_accounts/family_user_parental_control_metrics_unittest.cc +++ b/chrome/browser/ash/child_accounts/family_user_parental_control_metrics_unittest.cc
@@ -264,9 +264,8 @@ base::Hours(1), base::Time::Now())); builder.SetResetTime(6, 0); - DictionaryPrefUpdate update(GetPrefs(), prefs::kPerAppTimeLimitsPolicy); - base::Value* value = update.Get(); - *value = builder.value().Clone(); + GetPrefs()->SetDict(prefs::kPerAppTimeLimitsPolicy, + builder.value().GetDict().Clone()); } histogram_tester_.ExpectBucketCount(
diff --git a/chrome/browser/ash/child_accounts/time_limits/app_time_controller_unittest.cc b/chrome/browser/ash/child_accounts/time_limits/app_time_controller_unittest.cc index 18fd0f4..5e0ad4a 100644 --- a/chrome/browser/ash/child_accounts/time_limits/app_time_controller_unittest.cc +++ b/chrome/browser/ash/child_accounts/time_limits/app_time_controller_unittest.cc
@@ -449,10 +449,8 @@ builder.AddAppLimit(kApp2, AppLimit(AppRestriction::kTimeLimit, kOneHour / 2, base::Time::Now())); builder.SetResetTime(6, 0); - DictionaryPrefUpdate update(profile().GetPrefs(), - prefs::kPerAppTimeLimitsPolicy); - base::Value* value = update.Get(); - *value = builder.value().Clone(); + profile().GetPrefs()->SetDict(prefs::kPerAppTimeLimitsPolicy, + builder.value().GetDict().Clone()); } // If there was no valid last reset time stored in user pref, @@ -533,10 +531,8 @@ builder.AddAppLimit(absent_app, app_limit); builder.AddAppLimit(kApp2, blocked_app); builder.SetResetTime(6, 0); - DictionaryPrefUpdate update(profile().GetPrefs(), - prefs::kPerAppTimeLimitsPolicy); - base::Value* value = update.Get(); - *value = builder.value().Clone(); + profile().GetPrefs()->SetDict(prefs::kPerAppTimeLimitsPolicy, + builder.value().GetDict().Clone()); } // Enagagement is recorded at the beginning of the session when
diff --git a/chrome/browser/ash/crosapi/network_settings_service_ash.cc b/chrome/browser/ash/crosapi/network_settings_service_ash.cc index 03767366..389bbed 100644 --- a/chrome/browser/ash/crosapi/network_settings_service_ash.cc +++ b/chrome/browser/ash/crosapi/network_settings_service_ash.cc
@@ -126,9 +126,10 @@ pref_service->Set(ash::prefs::kLacrosProxyControllingExtension, std::move(proxy_extension)); - pref_service->Set( - proxy_config::prefs::kProxy, - CrosapiProxyToProxyConfig(std::move(proxy_config)).GetDictionary()); + pref_service->SetDict(proxy_config::prefs::kProxy, + CrosapiProxyToProxyConfig(std::move(proxy_config)) + .GetDictionary() + .Clone()); } void NetworkSettingsServiceAsh::ClearExtensionProxy() {
diff --git a/chrome/browser/ash/crosapi/network_settings_service_ash_browsertest.cc b/chrome/browser/ash/crosapi/network_settings_service_ash_browsertest.cc index 6be1bc0..89fc1a5f 100644 --- a/chrome/browser/ash/crosapi/network_settings_service_ash_browsertest.cc +++ b/chrome/browser/ash/crosapi/network_settings_service_ash_browsertest.cc
@@ -210,7 +210,8 @@ protected: // This method simulates sending an extension controlled proxy config from // Lacros to Ash. - void SendExtensionProxyConfig(base::Value proxy_dict, bool can_be_disabled) { + void SendExtensionProxyConfig(base::Value::Dict proxy_dict, + bool can_be_disabled) { ProxyConfigDictionary proxy_config_dict(std::move(proxy_dict)); auto proxy_config = crosapi::ProxyConfigToCrosapiProxy(&proxy_config_dict, @@ -248,8 +249,8 @@ ASSERT_TRUE(extension_proxy_pref); // Emulate receiving an initial proxy config from lacros-chrome. - base::Value proxy_config = ProxyConfigDictionary::CreatePacScript( - kPacUrl, /*is_pac_mandatory=*/true); + base::Value::Dict proxy_config = + ProxyConfigDictionary::CreatePacScript(kPacUrl, /*pac_mandatory=*/true); SendExtensionProxyConfig(proxy_config.Clone(), /*can_be_disabled=*/true); EXPECT_EQ(*(proxy_pref->GetValue()), proxy_config); @@ -286,8 +287,8 @@ // via policy and then verifies that the direct proxy is applied. IN_PROC_BROWSER_TEST_F(NetworkSettingsServiceAshExtensionTest, UserPolicyHasPrecedence) { - base::Value pac_proxy = ProxyConfigDictionary::CreatePacScript( - kPacUrl, /*is_pac_mandatory=*/true); + base::Value::Dict pac_proxy = + ProxyConfigDictionary::CreatePacScript(kPacUrl, /*pac_mandatory=*/true); SendExtensionProxyConfig(pac_proxy.Clone(), /*can_be_disabled=*/true); // Set proxy by policy. @@ -323,7 +324,7 @@ ProxyConfigDictionary proxy_config_dict( ProxyConfigDictionary::CreatePacScript(kPacUrl, - /*is_pac_mandatory=*/true)); + /*pac_mandatory=*/true)); auto proxy_config = crosapi::ProxyConfigToCrosapiProxy(&proxy_config_dict, /*wpad_url=*/GURL("")); proxy_config->extension = crosapi::mojom::ExtensionControllingProxy::New(); @@ -350,8 +351,8 @@ { base::RunLoop run_loop; observer_->SetQuitClosure(run_loop.QuitClosure()); - base::Value pac_proxy = ProxyConfigDictionary::CreatePacScript( - kPacUrl, /*is_pac_mandatory=*/true); + base::Value::Dict pac_proxy = + ProxyConfigDictionary::CreatePacScript(kPacUrl, /*pac_mandatory=*/true); SendExtensionProxyConfig(pac_proxy.Clone(), /*can_be_disabled=*/true); // Wait for the `observer` to get the proxy @@ -379,8 +380,8 @@ { base::RunLoop run_loop; observer_->SetQuitClosure(run_loop.QuitClosure()); - base::Value pac_proxy = ProxyConfigDictionary::CreatePacScript( - kPacUrl, /*is_pac_mandatory=*/true); + base::Value::Dict pac_proxy = + ProxyConfigDictionary::CreatePacScript(kPacUrl, /*pac_mandatory=*/true); SendExtensionProxyConfig(pac_proxy.Clone(), /*can_be_disabled=*/true); // Wait for the `observer` to get the proxy
diff --git a/chrome/browser/ash/crosapi/network_settings_translation_unittest.cc b/chrome/browser/ash/crosapi/network_settings_translation_unittest.cc index 0bac62d..5541b9d 100644 --- a/chrome/browser/ash/crosapi/network_settings_translation_unittest.cc +++ b/chrome/browser/ash/crosapi/network_settings_translation_unittest.cc
@@ -14,12 +14,13 @@ constexpr char kPacUrl[] = "http://pac.pac/"; -base::Value GetPacProxyConfig(const std::string& pac_url, bool pac_mandatory) { +base::Value::Dict GetPacProxyConfig(const std::string& pac_url, + bool pac_mandatory) { return ProxyConfigDictionary::CreatePacScript(pac_url, pac_mandatory); } -base::Value GetManualProxyConfig(const std::string& proxy_servers, - const std::string& bypass_list) { +base::Value::Dict GetManualProxyConfig(const std::string& proxy_servers, + const std::string& bypass_list) { return ProxyConfigDictionary::CreateFixedServers(proxy_servers, bypass_list); }
diff --git a/chrome/browser/ash/crosapi/translate_crosapi_to_proxy_config.cc b/chrome/browser/ash/crosapi/translate_crosapi_to_proxy_config.cc index e1aef10..5d69478 100644 --- a/chrome/browser/ash/crosapi/translate_crosapi_to_proxy_config.cc +++ b/chrome/browser/ash/crosapi/translate_crosapi_to_proxy_config.cc
@@ -68,7 +68,7 @@ // See //net/docs/proxy.md and net::ProxyConfig::ProxyRules::ParseFromString() // for translation rules. -base::Value TranslateManualProxySettings( +base::Value::Dict TranslateManualProxySettings( crosapi::mojom::ProxySettingsManualPtr proxy_settings) { std::vector<std::string> proxy_server_specs; for (auto const& proxy : proxy_settings->http_proxies) { @@ -89,7 +89,7 @@ base::JoinString(proxy_settings->exclude_domains, ";")); } -base::Value TranslatePacProxySettings( +base::Value::Dict TranslatePacProxySettings( crosapi::mojom::ProxySettingsPacPtr proxy_settings) { if (!proxy_settings->pac_url.is_valid()) return ProxyConfigDictionary::CreateDirect(); @@ -97,7 +97,7 @@ proxy_settings->pac_mandatory); } -base::Value TranslateWpadProxySettings( +base::Value::Dict TranslateWpadProxySettings( crosapi::mojom::ProxySettingsWpadPtr proxy_settings) { return ProxyConfigDictionary::CreateAutoDetect(); }
diff --git a/chrome/browser/ash/guest_os/guest_os_share_path.cc b/chrome/browser/ash/guest_os/guest_os_share_path.cc index f969e70..2771c30 100644 --- a/chrome/browser/ash/guest_os/guest_os_share_path.cc +++ b/chrome/browser/ash/guest_os/guest_os_share_path.cc
@@ -9,6 +9,7 @@ #include "base/bind.h" #include "base/containers/contains.h" #include "base/files/file_util.h" +#include "base/ranges/algorithm.h" #include "base/task/thread_pool.h" #include "chrome/browser/ash/arc/session/arc_session_manager.h" #include "chrome/browser/ash/crostini/crostini_util.h" @@ -142,7 +143,7 @@ << " for VM " << vm_name; return; } - auto it = std::find(found->begin(), found->end(), base::Value(vm_name)); + auto it = base::ranges::find(*found, base::Value(vm_name)); if (it == found->end()) { LOG(WARNING) << "VM not in prefs to unshare path " << path.value() << " for VM " << vm_name;
diff --git a/chrome/browser/ash/guest_os/public/guest_os_mount_provider_registry_unittest.cc b/chrome/browser/ash/guest_os/public/guest_os_mount_provider_registry_unittest.cc index 984d66b7..36308de 100644 --- a/chrome/browser/ash/guest_os/public/guest_os_mount_provider_registry_unittest.cc +++ b/chrome/browser/ash/guest_os/public/guest_os_mount_provider_registry_unittest.cc
@@ -4,9 +4,9 @@ #include "chrome/browser/ash/guest_os/public/guest_os_mount_provider_registry.h" -#include <algorithm> #include <vector> +#include "base/ranges/algorithm.h" #include "chrome/browser/ash/guest_os/guest_os_test_helpers.h" #include "chrome/browser/ash/guest_os/public/guest_os_mount_provider.h" #include "testing/gtest/include/gtest/gtest.h" @@ -24,7 +24,7 @@ ids_.push_back(id); } void OnUnregistered(Id id) override { - auto pos = std::find(ids_.begin(), ids_.end(), id); + auto pos = base::ranges::find(ids_, id); if (pos != ids_.end()) { ids_.erase(pos); }
diff --git a/chrome/browser/ash/login/demo_mode/demo_setup_controller.cc b/chrome/browser/ash/login/demo_mode/demo_setup_controller.cc index 2b10e67..016e1da9 100644 --- a/chrome/browser/ash/login/demo_mode/demo_setup_controller.cc +++ b/chrome/browser/ash/login/demo_mode/demo_setup_controller.cc
@@ -4,7 +4,6 @@ #include "chrome/browser/ash/login/demo_mode/demo_setup_controller.h" -#include <algorithm> #include <cctype> #include <utility> @@ -12,6 +11,7 @@ #include "base/bind.h" #include "base/callback.h" #include "base/command_line.h" +#include "base/containers/contains.h" #include "base/containers/flat_map.h" #include "base/logging.h" #include "base/metrics/histogram_functions.h" @@ -431,10 +431,7 @@ std::string country_lowercase = base::ToLowerASCII(country); // Exclude US as it is the default country. - if (std::find(std::begin(DemoSession::kSupportedCountries), - std::end(DemoSession::kSupportedCountries), - country_uppercase) != - std::end(DemoSession::kSupportedCountries)) { + if (base::Contains(DemoSession::kSupportedCountries, country_uppercase)) { if (chromeos::features::IsCloudGamingDeviceEnabled()) { return base::StringPrintf("admin-%s-blazey@%s", country_lowercase.c_str(), policy::kDemoModeDomain);
diff --git a/chrome/browser/ash/login/saml/saml_lockscreen_browsertest.cc b/chrome/browser/ash/login/saml/saml_lockscreen_browsertest.cc index 0b458ec..3f160bc 100644 --- a/chrome/browser/ash/login/saml/saml_lockscreen_browsertest.cc +++ b/chrome/browser/ash/login/saml/saml_lockscreen_browsertest.cc
@@ -684,10 +684,9 @@ // Configure settings which are neccesarry for `NetworkStateInformer` to // report `NetworkStateInformer::PROXY_AUTH_REQUIRED` in the tests. void ConfigureNetworkBehindProxy() { - base::Value proxy_config = ProxyConfigDictionary::CreateFixedServers( - proxy_server_.host_port_pair().ToString(), ""); - - ProxyConfigDictionary proxy_config_dict(std::move(proxy_config)); + ProxyConfigDictionary proxy_config_dict( + ProxyConfigDictionary::CreateFixedServers( + proxy_server_.host_port_pair().ToString(), "")); const NetworkState* network = network_state_test_helper_->network_state_handler()->DefaultNetwork(); ASSERT_TRUE(network);
diff --git a/chrome/browser/ash/login/users/chrome_user_manager_impl.cc b/chrome/browser/ash/login/users/chrome_user_manager_impl.cc index 46b235c..539b355 100644 --- a/chrome/browser/ash/login/users/chrome_user_manager_impl.cc +++ b/chrome/browser/ash/login/users/chrome_user_manager_impl.cc
@@ -1291,9 +1291,8 @@ void ChromeUserManagerImpl::RemoveReportingUser(const AccountId& account_id) { ScopedListPrefUpdate users_update(GetLocalState(), ::prefs::kReportingUsers); base::Value::List& update_list = users_update.Get(); - auto it = - std::find(update_list.begin(), update_list.end(), - base::Value(FullyCanonicalize(account_id.GetUserEmail()))); + auto it = base::ranges::find( + update_list, base::Value(FullyCanonicalize(account_id.GetUserEmail()))); if (it == update_list.end()) return; update_list.erase(it);
diff --git a/chrome/browser/ash/net/network_diagnostics/dns_resolution_routine.cc b/chrome/browser/ash/net/network_diagnostics/dns_resolution_routine.cc index 5658db0f..924b425 100644 --- a/chrome/browser/ash/net/network_diagnostics/dns_resolution_routine.cc +++ b/chrome/browser/ash/net/network_diagnostics/dns_resolution_routine.cc
@@ -8,6 +8,7 @@ #include <utility> #include "base/bind.h" +#include "base/containers/contains.h" #include "base/values.h" #include "chrome/browser/ash/profiles/profile_helper.h" #include "chrome/browser/profiles/profile_manager.h" @@ -123,18 +124,13 @@ endpoint_results_with_metadata) { receiver_.reset(); - bool success = result == net::OK && !resolved_addresses->empty() && - resolved_addresses.has_value(); - if (success) { + if (result == net::OK && !resolved_addresses->empty() && + resolved_addresses.has_value()) { resolved_address_received_ = true; AnalyzeResultsAndExecuteCallback(); return; } - bool retry = - std::find(std::begin(kRetryResponseCodes), std::end(kRetryResponseCodes), - result) != std::end(kRetryResponseCodes) && - num_retries_ > 0; - if (retry) { + if (base::Contains(kRetryResponseCodes, result) && num_retries_ > 0) { num_retries_--; AttemptResolution(); } else {
diff --git a/chrome/browser/ash/net/network_diagnostics/has_secure_wifi_connection_routine.cc b/chrome/browser/ash/net/network_diagnostics/has_secure_wifi_connection_routine.cc index df503e7..3c9680e 100644 --- a/chrome/browser/ash/net/network_diagnostics/has_secure_wifi_connection_routine.cc +++ b/chrome/browser/ash/net/network_diagnostics/has_secure_wifi_connection_routine.cc
@@ -4,11 +4,11 @@ #include "chrome/browser/ash/net/network_diagnostics/has_secure_wifi_connection_routine.h" -#include <algorithm> #include <iterator> #include <utility> #include "base/bind.h" +#include "base/containers/contains.h" #include "chromeos/services/network_config/in_process_instance.h" #include "chromeos/services/network_config/public/cpp/cros_network_config_util.h" #include "mojo/public/cpp/bindings/pending_receiver.h" @@ -40,18 +40,6 @@ constexpr SecurityType kInsecureWiFiEncryptions[] = { SecurityType::kNone, SecurityType::kWep8021x, SecurityType::kWepPsk}; -bool IsSecureWiFiSecurityType(SecurityType security_type) { - return std::find(std::begin(kSecureWiFiEncryptions), - std::end(kSecureWiFiEncryptions), - security_type) != std::end(kSecureWiFiEncryptions); -} - -bool IsInsecureSecurityType(SecurityType security_type) { - return std::find(std::begin(kInsecureWiFiEncryptions), - std::end(kInsecureWiFiEncryptions), - security_type) != std::end(kInsecureWiFiEncryptions); -} - } // namespace HasSecureWiFiConnectionRoutine::HasSecureWiFiConnectionRoutine() { @@ -78,7 +66,7 @@ void HasSecureWiFiConnectionRoutine::AnalyzeResultsAndExecuteCallback() { if (!wifi_connected_) { set_verdict(mojom::RoutineVerdict::kNotRun); - } else if (IsInsecureSecurityType(wifi_security_)) { + } else if (base::Contains(kInsecureWiFiEncryptions, wifi_security_)) { set_verdict(mojom::RoutineVerdict::kProblem); switch (wifi_security_) { case SecurityType::kNone: @@ -97,7 +85,7 @@ case SecurityType::kWpaPsk: break; } - } else if (IsSecureWiFiSecurityType(wifi_security_)) { + } else if (base::Contains(kSecureWiFiEncryptions, wifi_security_)) { set_verdict(mojom::RoutineVerdict::kNoProblem); } else { set_verdict(mojom::RoutineVerdict::kProblem);
diff --git a/chrome/browser/ash/net/network_diagnostics/network_diagnostics_util.cc b/chrome/browser/ash/net/network_diagnostics/network_diagnostics_util.cc index 5f78afa..b0cc6fc 100644 --- a/chrome/browser/ash/net/network_diagnostics/network_diagnostics_util.cc +++ b/chrome/browser/ash/net/network_diagnostics/network_diagnostics_util.cc
@@ -4,10 +4,10 @@ #include "chrome/browser/ash/net/network_diagnostics/network_diagnostics_util.h" -#include <algorithm> #include <string> #include <vector> +#include "base/containers/contains.h" #include "base/no_destructor.h" #include "base/rand_util.h" #include "base/strings/string_number_conversions.h" @@ -30,8 +30,7 @@ while (random_prefixes.size() != num_prefixes) { std::string prefix = GetRandomString(length); // Check that the prefix doesn't already exist. - if (std::find(std::begin(random_prefixes), std::end(random_prefixes), - prefix) == std::end(random_prefixes)) { + if (!base::Contains(random_prefixes, prefix)) { random_prefixes.push_back(prefix); } }
diff --git a/chrome/browser/ash/net/system_proxy_manager_browsertest.cc b/chrome/browser/ash/net/system_proxy_manager_browsertest.cc index a2869885..d506aef 100644 --- a/chrome/browser/ash/net/system_proxy_manager_browsertest.cc +++ b/chrome/browser/ash/net/system_proxy_manager_browsertest.cc
@@ -420,7 +420,7 @@ } void SetProxyConfigForNetworkService(const std::string& service_path, - base::Value proxy_config) { + base::Value::Dict proxy_config) { ProxyConfigDictionary proxy_config_dict(std::move(proxy_config)); DCHECK(NetworkHandler::IsInitialized()); const NetworkState* network = @@ -582,10 +582,9 @@ IN_PROC_BROWSER_TEST_F(SystemProxyManagerPolicyCredentialsBrowserTest, UserSetProxy) { SetPolicyCredentials(kUsername, kPassword); - base::Value proxy_config(base::Value::Type::DICTIONARY); - proxy_config.SetKey("mode", - base::Value(ProxyPrefs::kFixedServersProxyModeName)); - proxy_config.SetKey("server", base::Value("proxy:8080")); + base::Value::Dict proxy_config; + proxy_config.Set("mode", base::Value(ProxyPrefs::kFixedServersProxyModeName)); + proxy_config.Set("server", base::Value("proxy:8080")); SetProxyConfigForNetworkService(kDefaultServicePath, std::move(proxy_config)); RunUntilIdle(); int set_auth_details_call_count = 0;
diff --git a/chrome/browser/ash/platform_keys/key_permissions/key_permissions_manager_impl.cc b/chrome/browser/ash/platform_keys/key_permissions/key_permissions_manager_impl.cc index 2ed969f..55491e79 100644 --- a/chrome/browser/ash/platform_keys/key_permissions/key_permissions_manager_impl.cc +++ b/chrome/browser/ash/platform_keys/key_permissions/key_permissions_manager_impl.cc
@@ -4,12 +4,12 @@ #include "chrome/browser/ash/platform_keys/key_permissions/key_permissions_manager_impl.h" -#include <algorithm> #include <memory> #include <string> #include <vector> #include "base/bind.h" +#include "base/containers/contains.h" #include "base/containers/queue.h" #include "base/logging.h" #include "base/metrics/histogram_functions.h" @@ -337,8 +337,7 @@ return; } - if (std::find(token_ids->begin(), token_ids->end(), token_id_) == - token_ids->end()) { + if (!base::Contains(*token_ids, token_id_)) { LOG(ERROR) << "KeyPermissionsManager doesn't have access to token: " << static_cast<int>(token_id_); return;
diff --git a/chrome/browser/ash/policy/uploading/system_log_uploader_unittest.cc b/chrome/browser/ash/policy/uploading/system_log_uploader_unittest.cc index 01be4a24..bdadef2a 100644 --- a/chrome/browser/ash/policy/uploading/system_log_uploader_unittest.cc +++ b/chrome/browser/ash/policy/uploading/system_log_uploader_unittest.cc
@@ -6,6 +6,7 @@ #include <utility> +#include "base/containers/contains.h" #include "base/strings/stringprintf.h" #include "base/test/metrics/histogram_tester.h" #include "base/test/scoped_feature_list.h" @@ -203,8 +204,7 @@ ZippedLogUploadCallback upload_callback) override { EXPECT_TRUE(is_zipped_upload_); for (const auto& log : system_logs_) - EXPECT_NE(system_logs->end(), - std::find(system_logs->begin(), system_logs->end(), log)); + EXPECT_TRUE(base::Contains(*system_logs, log)); std::move(upload_callback).Run(std::string(kZippedData)); }
diff --git a/chrome/browser/ash/power/auto_screen_brightness/light_provider_mojo.cc b/chrome/browser/ash/power/auto_screen_brightness/light_provider_mojo.cc index cb586db2..f657d129 100644 --- a/chrome/browser/ash/power/auto_screen_brightness/light_provider_mojo.cc +++ b/chrome/browser/ash/power/auto_screen_brightness/light_provider_mojo.cc
@@ -4,12 +4,11 @@ #include "chrome/browser/ash/power/auto_screen_brightness/light_provider_mojo.h" -#include <algorithm> #include <iterator> #include <utility> #include "base/bind.h" -#include "base/ranges/algorithm.h" +#include "base/containers/contains.h" #include "base/threading/sequenced_task_runner_handle.h" #include "base/time/time.h" #include "chromeos/components/sensors/ash/sensor_hal_dispatcher.h" @@ -87,8 +86,7 @@ const std::vector<chromeos::sensors::mojom::DeviceType>& types) { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); - if (std::find(types.begin(), types.end(), - chromeos::sensors::mojom::DeviceType::LIGHT) == types.end()) { + if (!base::Contains(types, chromeos::sensors::mojom::DeviceType::LIGHT)) { // Not a light sensor. Ignoring this device. return; }
diff --git a/chrome/browser/ash/printing/history/print_job_database_impl_unittest.cc b/chrome/browser/ash/printing/history/print_job_database_impl_unittest.cc index 66d62650..21b0d18 100644 --- a/chrome/browser/ash/printing/history/print_job_database_impl_unittest.cc +++ b/chrome/browser/ash/printing/history/print_job_database_impl_unittest.cc
@@ -5,6 +5,7 @@ #include "chrome/browser/ash/printing/history/print_job_database_impl.h" #include "base/bind.h" +#include "base/containers/contains.h" #include "base/files/scoped_temp_dir.h" #include "base/run_loop.h" #include "base/test/metrics/histogram_tester.h" @@ -227,8 +228,8 @@ std::vector<PrintJobInfo> entries = GetPrintJobsFromProtoDatabase(); ASSERT_EQ(2u, entries.size()); std::vector<std::string> ids = {entries[0].id(), entries[1].id()}; - EXPECT_TRUE(std::find(ids.begin(), ids.end(), kId1) != ids.end()); - EXPECT_TRUE(std::find(ids.begin(), ids.end(), kId2) != ids.end()); + EXPECT_TRUE(base::Contains(ids, kId1)); + EXPECT_TRUE(base::Contains(ids, kId2)); } TEST_F(PrintJobDatabaseImplTest, RequestsBeforeInitialization) {
diff --git a/chrome/browser/ash/proxy_config_service_impl_unittest.cc b/chrome/browser/ash/proxy_config_service_impl_unittest.cc index a1643b8a..43c6a9e 100644 --- a/chrome/browser/ash/proxy_config_service_impl_unittest.cc +++ b/chrome/browser/ash/proxy_config_service_impl_unittest.cc
@@ -329,7 +329,7 @@ proxy_config_service_.reset(); } - base::Value InitConfigWithTestInput(const Input& input) { + base::Value::Dict InitConfigWithTestInput(const Input& input) { switch (input.mode) { case Mode::kDirect: return ProxyConfigDictionary::CreateDirect(); @@ -343,10 +343,10 @@ input.bypass_rules); } NOTREACHED(); - return base::Value(); + return base::Value::Dict(); } - void SetUserConfigInShill(const base::Value* pref_proxy_config_dict) { + void SetUserConfigInShill(const base::Value::Dict* pref_proxy_config_dict) { std::string proxy_config; if (pref_proxy_config_dict) base::JSONWriter::Write(*pref_proxy_config_dict, &proxy_config); @@ -392,7 +392,7 @@ SCOPED_TRACE(base::StringPrintf("Test[%" PRIuS "] %s", i, tests[i].description.c_str())); - base::Value test_config = InitConfigWithTestInput(tests[i].input); + base::Value::Dict test_config = InitConfigWithTestInput(tests[i].input); SetUserConfigInShill(&test_config); net::ProxyConfigWithAnnotation config; @@ -445,10 +445,9 @@ recommended_params.description.c_str(), network_params.description.c_str())); - base::Value managed_config = InitConfigWithTestInput(managed_params.input); - base::Value recommended_config = - InitConfigWithTestInput(recommended_params.input); - base::Value network_config = InitConfigWithTestInput(network_params.input); + base::Value managed_config(InitConfigWithTestInput(managed_params.input)); + base::Value recommended_config( + InitConfigWithTestInput(recommended_params.input)); // Managed proxy pref should take effect over recommended proxy and // non-existent network proxy. @@ -477,6 +476,8 @@ EXPECT_TRUE(recommended_params.proxy_rules.Matches( actual_config.value().proxy_rules())); + base::Value::Dict network_config = + InitConfigWithTestInput(network_params.input); // Network proxy should take take effect over recommended proxy pref. SetUserConfigInShill(&network_config); SyncGetLatestProxyConfig(&actual_config);
diff --git a/chrome/browser/ash/system_logs/debug_daemon_log_source.cc b/chrome/browser/ash/system_logs/debug_daemon_log_source.cc index a0ff79f..07617e8 100644 --- a/chrome/browser/ash/system_logs/debug_daemon_log_source.cc +++ b/chrome/browser/ash/system_logs/debug_daemon_log_source.cc
@@ -15,6 +15,7 @@ #include "base/files/file_util.h" #include "base/logging.h" #include "base/memory/weak_ptr.h" +#include "base/metrics/histogram_functions.h" #include "base/strings/string_number_conversions.h" #include "base/strings/string_util.h" #include "base/task/thread_pool.h" @@ -156,6 +157,7 @@ weak_ptr_factory_.GetWeakPtr(), true)); ++num_pending_requests_; + const auto start_time = base::TimeTicks::Now(); if (scrub_) { const user_manager::User* user = user_manager::UserManager::Get()->GetActiveUser(); @@ -163,10 +165,11 @@ cryptohome::CreateAccountIdentifierFromAccountId( user ? user->GetAccountId() : EmptyAccountId()), base::BindOnce(&DebugDaemonLogSource::OnGetLogs, - weak_ptr_factory_.GetWeakPtr())); + weak_ptr_factory_.GetWeakPtr(), start_time)); } else { client->GetAllLogs(base::BindOnce(&DebugDaemonLogSource::OnGetLogs, - weak_ptr_factory_.GetWeakPtr())); + weak_ptr_factory_.GetWeakPtr(), + start_time)); } ++num_pending_requests_; } @@ -190,10 +193,19 @@ RequestCompleted(); } -void DebugDaemonLogSource::OnGetLogs(bool /* succeeded */, +void DebugDaemonLogSource::OnGetLogs(const base::TimeTicks get_start_time, + bool /* succeeded */, const KeyValueMap& logs) { DCHECK_CURRENTLY_ON(content::BrowserThread::UI); + // We are interested in the performance of gathering the logs for feedback + // reports only where the logs will always be scrubbed. GetBigFeedbackLogs is + // the dbus method used. + if (scrub_) { + base::UmaHistogramMediumTimes( + "Feedback.ChromeOSApp.Duration.GetBigFeedbackLogs", + base::TimeTicks::Now() - get_start_time); + } // We ignore 'succeeded' for this callback - we want to display as much of the // debug info as we can even if we failed partway through parsing, and if we // couldn't fetch any of it, none of the fields will even appear.
diff --git a/chrome/browser/ash/system_logs/debug_daemon_log_source.h b/chrome/browser/ash/system_logs/debug_daemon_log_source.h index e2cafac..478ce93 100644 --- a/chrome/browser/ash/system_logs/debug_daemon_log_source.h +++ b/chrome/browser/ash/system_logs/debug_daemon_log_source.h
@@ -12,6 +12,7 @@ #include "base/files/file_path.h" #include "base/memory/weak_ptr.h" +#include "base/time/time.h" #include "components/feedback/system_logs/system_logs_source.h" #include "third_party/abseil-cpp/absl/types/optional.h" @@ -55,7 +56,8 @@ void OnGetRoutes(bool is_ipv6, absl::optional<std::vector<std::string>> routes); void OnGetOneLog(std::string key, absl::optional<std::string> status); - void OnGetLogs(bool succeeded, + void OnGetLogs(const base::TimeTicks get_start_time, + bool succeeded, const KeyValueMap& logs); // Reads the logged-in users' log files that have to be read by Chrome as
diff --git a/chrome/browser/browser_process_impl.cc b/chrome/browser/browser_process_impl.cc index 984c1d63..999c9ac 100644 --- a/chrome/browser/browser_process_impl.cc +++ b/chrome/browser/browser_process_impl.cc
@@ -252,6 +252,7 @@ // ensure the persistent storage of current max SessionId. sessions::SessionIdGenerator::GetInstance()->Init(local_state_.get()); + DCHECK(browser_policy_connector_); DCHECK(local_state_); DCHECK(startup_data); // Most work should be done in Init(). @@ -414,11 +415,10 @@ // Initial cleanup for ChromeBrowserCloudManagement, shutdown components that // depend on profile and notification system. For example, ProfileManager // observer and KeyServices observer need to be removed before profiles. - if (browser_policy_connector_ && - browser_policy_connector_->chrome_browser_cloud_management_controller()) { - browser_policy_connector_->chrome_browser_cloud_management_controller() - ->ShutDown(); - } + auto* cloud_management_controller = + browser_policy_connector_->chrome_browser_cloud_management_controller(); + if (cloud_management_controller) + cloud_management_controller->ShutDown(); #endif system_notification_helper_.reset(); @@ -470,8 +470,7 @@ // down while the IO and FILE threads are still alive. The monitoring // framework owned by |browser_policy_connector_| relies on |gcm_driver_|, so // this must be shutdown before |gcm_driver_| below. - if (browser_policy_connector_) - browser_policy_connector_->Shutdown(); + browser_policy_connector_->Shutdown(); // The |gcm_driver_| must shut down while the IO thread is still alive. if (gcm_driver_)
diff --git a/chrome/browser/browser_process_impl.h b/chrome/browser/browser_process_impl.h index 81c00ee7..f8a1250 100644 --- a/chrome/browser/browser_process_impl.h +++ b/chrome/browser/browser_process_impl.h
@@ -250,7 +250,7 @@ // Must be destroyed after |local_state_|. // Must be destroyed after |profile_manager_|. - std::unique_ptr<policy::ChromeBrowserPolicyConnector> + std::unique_ptr<policy::ChromeBrowserPolicyConnector> const browser_policy_connector_; // Must be destroyed before |browser_policy_connector_|.
diff --git a/chrome/browser/chromeos/extensions/autotest_private/autotest_private_api.cc b/chrome/browser/chromeos/extensions/autotest_private/autotest_private_api.cc index 3a12895..7c30d3fb 100644 --- a/chrome/browser/chromeos/extensions/autotest_private/autotest_private_api.cc +++ b/chrome/browser/chromeos/extensions/autotest_private/autotest_private_api.cc
@@ -4466,11 +4466,13 @@ window_info.caption_button_enabled_status = caption_button_enabled_status; window_info.caption_button_visible_status = caption_button_visible_status; } else { - auto* widget = views::Widget::GetWidgetForNativeWindow(window); + auto* no_frame_header_widget = + views::Widget::GetWidgetForNativeWindow(window); // All widgets for app windows in chromeos should have a frame. Non app // windows may not have a frame and frame mode will be NONE. - DCHECK(!widget || widget->GetNativeWindow()->GetType() != - aura::client::WINDOW_TYPE_NORMAL); + DCHECK(!no_frame_header_widget || + no_frame_header_widget->GetNativeWindow()->GetType() != + aura::client::WINDOW_TYPE_NORMAL); window_info.frame_mode = api::autotest_private::FrameMode::FRAME_MODE_NONE; window_info.is_frame_visible = false;
diff --git a/chrome/browser/chromeos/extensions/extensions_permissions_tracker.cc b/chrome/browser/chromeos/extensions/extensions_permissions_tracker.cc index 605df0d..0f7d56b 100644 --- a/chrome/browser/chromeos/extensions/extensions_permissions_tracker.cc +++ b/chrome/browser/chromeos/extensions/extensions_permissions_tracker.cc
@@ -4,9 +4,7 @@ #include "chrome/browser/chromeos/extensions/extensions_permissions_tracker.h" -#include <algorithm> - -#include "base/ranges/algorithm.h" +#include "base/containers/contains.h" #include "chrome/browser/browser_process.h" #include "chrome/browser/profiles/profile.h" #include "chrome/common/pref_names.h" @@ -173,9 +171,7 @@ } // namespace bool IsAllowlistedForManagedGuestSession(const std::string& extension_id) { - return std::find(std::begin(kManagedGuestSessionAllowlist), - std::end(kManagedGuestSessionAllowlist), - extension_id) != std::end(kManagedGuestSessionAllowlist); + return base::Contains(kManagedGuestSessionAllowlist, extension_id); } ExtensionsPermissionsTracker::ExtensionsPermissionsTracker( @@ -287,10 +283,9 @@ void ExtensionsPermissionsTracker::ParseExtensionPermissions( const Extension* extension) { - bool is_safe = IsAllowlistedForManagedGuestSession(extension->id()) || - IsSafePerms(extension->permissions_data()); - - extension_safety_ratings_[extension->id()] = is_safe; + extension_safety_ratings_[extension->id()] = + IsAllowlistedForManagedGuestSession(extension->id()) || + IsSafePerms(extension->permissions_data()); } } // namespace extensions
diff --git a/chrome/browser/chromeos/extensions/users_private/users_private_apitest.cc b/chrome/browser/chromeos/extensions/users_private/users_private_apitest.cc index 96fd6fc..80dc1119 100644 --- a/chrome/browser/chromeos/extensions/users_private/users_private_apitest.cc +++ b/chrome/browser/chromeos/extensions/users_private/users_private_apitest.cc
@@ -9,6 +9,7 @@ #include "base/bind.h" #include "base/command_line.h" #include "base/memory/ptr_util.h" +#include "base/ranges/algorithm.h" #include "base/values.h" #include "build/build_config.h" #include "chrome/browser/ash/login/lock/screen_locker.h" @@ -81,7 +82,7 @@ if (value.is_string()) email = value.GetString(); - auto iter = std::find(user_list_.begin(), user_list_.end(), email); + auto iter = base::ranges::find(user_list_, email); if (iter != user_list_.end()) user_list_.erase(iter);
diff --git a/chrome/browser/devtools/device/devtools_android_bridge.cc b/chrome/browser/devtools/device/devtools_android_bridge.cc index 6c137317..12ec7f44 100644 --- a/chrome/browser/devtools/device/devtools_android_bridge.cc +++ b/chrome/browser/devtools/device/devtools_android_bridge.cc
@@ -5,7 +5,7 @@ #include "chrome/browser/devtools/device/devtools_android_bridge.h" #include <stddef.h> -#include <algorithm> + #include <map> #include <memory> #include <set> @@ -20,6 +20,7 @@ #include "base/json/json_reader.h" #include "base/lazy_instance.h" #include "base/memory/singleton.h" +#include "base/ranges/algorithm.h" #include "base/strings/escape.h" #include "base/strings/string_number_conversions.h" #include "base/strings/string_split.h" @@ -184,8 +185,7 @@ void DevToolsAndroidBridge::RemoveDeviceListListener( DeviceListListener* listener) { DCHECK_CURRENTLY_ON(BrowserThread::UI); - auto it = std::find(device_list_listeners_.begin(), - device_list_listeners_.end(), listener); + auto it = base::ranges::find(device_list_listeners_, listener); DCHECK(it != device_list_listeners_.end()); device_list_listeners_.erase(it); if (!NeedsDeviceListPolling()) @@ -202,8 +202,7 @@ void DevToolsAndroidBridge::RemoveDeviceCountListener( DeviceCountListener* listener) { DCHECK_CURRENTLY_ON(BrowserThread::UI); - auto it = std::find(device_count_listeners_.begin(), - device_count_listeners_.end(), listener); + auto it = base::ranges::find(device_count_listeners_, listener); DCHECK(it != device_count_listeners_.end()); device_count_listeners_.erase(it); if (device_count_listeners_.empty()) @@ -220,8 +219,7 @@ void DevToolsAndroidBridge::RemovePortForwardingListener( PortForwardingListener* listener) { - auto it = std::find(port_forwarding_listeners_.begin(), - port_forwarding_listeners_.end(), listener); + auto it = base::ranges::find(port_forwarding_listeners_, listener); DCHECK(it != port_forwarding_listeners_.end()); port_forwarding_listeners_.erase(it); if (!NeedsDeviceListPolling())
diff --git a/chrome/browser/devtools/device/usb/android_usb_device.cc b/chrome/browser/devtools/device/usb/android_usb_device.cc index a47e05d..0df8fcf 100644 --- a/chrome/browser/devtools/device/usb/android_usb_device.cc +++ b/chrome/browser/devtools/device/usb/android_usb_device.cc
@@ -14,6 +14,7 @@ #include "base/containers/cxx20_erase.h" #include "base/lazy_instance.h" #include "base/memory/ref_counted_memory.h" +#include "base/ranges/algorithm.h" #include "base/strings/string_util.h" #include "base/strings/stringprintf.h" #include "base/task/single_thread_task_runner.h" @@ -477,7 +478,7 @@ DCHECK(task_runner_->BelongsToCurrentThread()); // Remove this AndroidUsbDevice from |g_devices|. - auto it = std::find(g_devices.Get().begin(), g_devices.Get().end(), this); + auto it = base::ranges::find(g_devices.Get(), this); if (it != g_devices.Get().end()) g_devices.Get().erase(it);
diff --git a/chrome/browser/devtools/devtools_file_watcher.cc b/chrome/browser/devtools/devtools_file_watcher.cc index 1584c16..46438749 100644 --- a/chrome/browser/devtools/devtools_file_watcher.cc +++ b/chrome/browser/devtools/devtools_file_watcher.cc
@@ -4,7 +4,6 @@ #include "chrome/browser/devtools/devtools_file_watcher.h" -#include <algorithm> #include <map> #include <memory> #include <set> @@ -16,6 +15,7 @@ #include "base/files/file_path_watcher.h" #include "base/files/file_util.h" #include "base/memory/ref_counted.h" +#include "base/ranges/algorithm.h" #include "base/strings/stringprintf.h" #include "base/task/lazy_thread_pool_task_runner.h" #include "base/task/sequenced_task_runner.h" @@ -114,7 +114,7 @@ void DevToolsFileWatcher::SharedFileWatcher::RemoveListener( DevToolsFileWatcher* watcher) { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); - auto it = std::find(listeners_.begin(), listeners_.end(), watcher); + auto it = base::ranges::find(listeners_, watcher); listeners_.erase(it); if (listeners_.empty()) { file_path_times_.clear();
diff --git a/chrome/browser/devtools/devtools_window.cc b/chrome/browser/devtools/devtools_window.cc index 50fbcf0..1a04cfd 100644 --- a/chrome/browser/devtools/devtools_window.cc +++ b/chrome/browser/devtools/devtools_window.cc
@@ -4,7 +4,6 @@ #include "chrome/browser/devtools/devtools_window.h" -#include <algorithm> #include <memory> #include <set> #include <utility> @@ -16,6 +15,7 @@ #include "base/metrics/histogram_functions.h" #include "base/metrics/histogram_macros.h" #include "base/metrics/user_metrics.h" +#include "base/ranges/algorithm.h" #include "base/strings/escape.h" #include "base/time/time.h" #include "base/values.h" @@ -453,7 +453,7 @@ owned_toolbox_web_contents_.reset(); DevToolsWindows* instances = g_devtools_window_instances.Pointer(); - auto it(std::find(instances->begin(), instances->end(), this)); + auto it = base::ranges::find(*instances, this); DCHECK(it != instances->end()); instances->erase(it);
diff --git a/chrome/browser/devtools/devtools_window_testing.cc b/chrome/browser/devtools/devtools_window_testing.cc index 440d16a..064405e6 100644 --- a/chrome/browser/devtools/devtools_window_testing.cc +++ b/chrome/browser/devtools/devtools_window_testing.cc
@@ -7,6 +7,7 @@ #include "base/bind.h" #include "base/callback_helpers.h" #include "base/lazy_instance.h" +#include "base/ranges/algorithm.h" #include "base/strings/utf_string_conversions.h" #include "chrome/browser/devtools/chrome_devtools_manager_delegate.h" #include "chrome/browser/devtools/devtools_window.h" @@ -38,7 +39,7 @@ DevToolsWindowTesting::~DevToolsWindowTesting() { DevToolsWindowTestings* instances = g_devtools_window_testing_instances.Pointer(); - auto it(std::find(instances->begin(), instances->end(), this)); + auto it = base::ranges::find(*instances, this); DCHECK(it != instances->end()); instances->erase(it); if (!close_callback_.is_null())
diff --git a/chrome/browser/devtools/protocol/devtools_protocol_browsertest.cc b/chrome/browser/devtools/protocol/devtools_protocol_browsertest.cc index bae43822..25b73b1 100644 --- a/chrome/browser/devtools/protocol/devtools_protocol_browsertest.cc +++ b/chrome/browser/devtools/protocol/devtools_protocol_browsertest.cc
@@ -6,6 +6,7 @@ #include "base/base64.h" #include "base/bind.h" +#include "base/containers/contains.h" #include "base/files/file_util.h" #include "base/path_service.h" #include "base/strings/string_split.h" @@ -78,10 +79,8 @@ params.FindStringByDottedPath("visibleSecurityState.safetyTipInfo")); const base::Value* security_state_issue_ids = params.FindByDottedPath("visibleSecurityState.securityStateIssueIds"); - EXPECT_TRUE(std::find(security_state_issue_ids->GetListDeprecated().begin(), - security_state_issue_ids->GetListDeprecated().end(), - base::Value("scheme-is-not-cryptographic")) != - security_state_issue_ids->GetListDeprecated().end()); + EXPECT_TRUE(base::Contains(security_state_issue_ids->GetListDeprecated(), + base::Value("scheme-is-not-cryptographic"))); } IN_PROC_BROWSER_TEST_F(DevToolsProtocolTest, CreateDeleteContext) {
diff --git a/chrome/browser/download/android/dangerous_download_dialog_bridge.cc b/chrome/browser/download/android/dangerous_download_dialog_bridge.cc index 0b1700fb..db268a4b 100644 --- a/chrome/browser/download/android/dangerous_download_dialog_bridge.cc +++ b/chrome/browser/download/android/dangerous_download_dialog_bridge.cc
@@ -8,7 +8,9 @@ #include "base/android/jni_android.h" #include "base/android/jni_string.h" +#include "base/containers/contains.h" #include "base/files/file_path.h" +#include "base/ranges/algorithm.h" #include "base/strings/utf_string_conversions.h" #include "chrome/browser/android/android_theme_resources.h" #include "chrome/browser/android/resource_mapper.h" @@ -36,9 +38,8 @@ void DangerousDownloadDialogBridge::Show(download::DownloadItem* download_item, ui::WindowAndroid* window_android) { - // Don't shown dangerous download again if it is already showing. - if (std::find(download_items_.begin(), download_items_.end(), - download_item) != download_items_.end()) { + // Don't show dangerous download again if it is already showing. + if (base::Contains(download_items_, download_item)) { return; } if (!window_android) { @@ -62,8 +63,7 @@ void DangerousDownloadDialogBridge::OnDownloadDestroyed( download::DownloadItem* download_item) { - auto iter = - std::find(download_items_.begin(), download_items_.end(), download_item); + auto iter = base::ranges::find(download_items_, download_item); if (iter != download_items_.end()) download_items_.erase(iter); }
diff --git a/chrome/browser/download/android/duplicate_download_dialog_bridge_delegate.cc b/chrome/browser/download/android/duplicate_download_dialog_bridge_delegate.cc index 58eac236..30047649 100644 --- a/chrome/browser/download/android/duplicate_download_dialog_bridge_delegate.cc +++ b/chrome/browser/download/android/duplicate_download_dialog_bridge_delegate.cc
@@ -7,8 +7,10 @@ #include <string> #include "base/android/path_utils.h" +#include "base/containers/contains.h" #include "base/files/file_path.h" #include "base/memory/singleton.h" +#include "base/ranges/algorithm.h" #include "base/strings/utf_string_conversions.h" #include "chrome/browser/android/android_theme_resources.h" #include "chrome/browser/download/android/download_dialog_utils.h" @@ -46,8 +48,7 @@ file_selected_callback) { DCHECK(web_contents); // Don't shown duplicate dialog again if it is already showing. - if (std::find(download_items_.begin(), download_items_.end(), - download_item) != download_items_.end()) { + if (base::Contains(download_items_, download_item)) { return; } download_item->AddObserver(this); @@ -91,8 +92,7 @@ void DuplicateDownloadDialogBridgeDelegate::OnDownloadDestroyed( download::DownloadItem* download_item) { - auto iter = - std::find(download_items_.begin(), download_items_.end(), download_item); + auto iter = base::ranges::find(download_items_, download_item); if (iter != download_items_.end()) download_items_.erase(iter); }
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 1a7cc2c..d128493 100644 --- a/chrome/browser/enterprise/connectors/analysis/content_analysis_delegate_browsertest.cc +++ b/chrome/browser/enterprise/connectors/analysis/content_analysis_delegate_browsertest.cc
@@ -2,10 +2,10 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include <algorithm> #include <memory> #include <set> +#include "base/containers/contains.h" #include "base/files/file.h" #include "base/files/file_util.h" #include "base/path_service.h" @@ -104,9 +104,7 @@ EXPECT_EQ(final_action_, ack->ack().final_action()); ++ack_count_; - ASSERT_NE(requests_tokens_.end(), - std::find(requests_tokens_.begin(), requests_tokens_.end(), - ack->ack().request_token())); + ASSERT_TRUE(base::Contains(requests_tokens_, ack->ack().request_token())); } void UploadForDeepScanning(std::unique_ptr<Request> request) override {
diff --git a/chrome/browser/enterprise/connectors/analysis/files_request_handler.cc b/chrome/browser/enterprise/connectors/analysis/files_request_handler.cc index c50e4a0..8ea6a19 100644 --- a/chrome/browser/enterprise/connectors/analysis/files_request_handler.cc +++ b/chrome/browser/enterprise/connectors/analysis/files_request_handler.cc
@@ -8,6 +8,7 @@ #include "base/files/file_path.h" #include "base/memory/ptr_util.h" #include "base/no_destructor.h" +#include "base/ranges/algorithm.h" #include "chrome/browser/enterprise/connectors/common.h" #include "chrome/browser/extensions/api/safe_browsing_private/safe_browsing_private_event_router.h" #include "chrome/browser/safe_browsing/cloud_content_scanning/binary_upload_service.h" @@ -145,7 +146,7 @@ base::FilePath path, safe_browsing::BinaryUploadService::Result result, enterprise_connectors::ContentAnalysisResponse response) { - auto it = std::find(paths_.begin(), paths_.end(), path); + auto it = base::ranges::find(paths_, path); DCHECK(it != paths_.end()); size_t index = std::distance(paths_.begin(), it); FileRequestCallback(index, result, response);
diff --git a/chrome/browser/enterprise/connectors/device_trust/key_management/core/mac/secure_enclave_client_impl.mm b/chrome/browser/enterprise/connectors/device_trust/key_management/core/mac/secure_enclave_client_impl.mm index 71abe8dd..6150cb00 100644 --- a/chrome/browser/enterprise/connectors/device_trust/key_management/core/mac/secure_enclave_client_impl.mm +++ b/chrome/browser/enterprise/connectors/device_trust/key_management/core/mac/secure_enclave_client_impl.mm
@@ -132,9 +132,6 @@ kCFAllocatorDefault, 0, &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks)); CFDictionarySetValue(query, kSecClass, kSecClassKey); - CFDictionarySetValue( - query, kSecAttrAccessGroup, - base::SysUTF8ToNSString(constants::kKeychainAccessGroup)); CFDictionarySetValue(query, kSecAttrKeyType, kSecAttrKeyTypeECSECPrimeRandom); CFDictionarySetValue(query, kSecAttrLabel, base::SysUTF8ToCFStringRef(GetLabelFromKeyType(type)));
diff --git a/chrome/browser/enterprise/connectors/file_system/service_settings.cc b/chrome/browser/enterprise/connectors/file_system/service_settings.cc index 47d8607..7e049bd 100644 --- a/chrome/browser/enterprise/connectors/file_system/service_settings.cc +++ b/chrome/browser/enterprise/connectors/file_system/service_settings.cc
@@ -4,6 +4,7 @@ #include "chrome/browser/enterprise/connectors/file_system/service_settings.h" +#include "base/containers/contains.h" #include "chrome/browser/enterprise/connectors/service_provider_config.h" #include "components/url_matcher/url_util.h" @@ -264,8 +265,7 @@ if (maybe_pattern_setting.has_value()) { const auto& mime_types = maybe_pattern_setting.value().mime_types; this_match_has_wildcard_enable = - (std::find(mime_types.begin(), mime_types.end(), kWildcardMimeType) != - mime_types.end()); + base::Contains(mime_types, kWildcardMimeType); enable_mime_types.insert(mime_types.begin(), mime_types.end()); }
diff --git a/chrome/browser/enterprise/reporting/extension_request/extension_request_observer_unittest.cc b/chrome/browser/enterprise/reporting/extension_request/extension_request_observer_unittest.cc index 8526d19..09845bb 100644 --- a/chrome/browser/enterprise/reporting/extension_request/extension_request_observer_unittest.cc +++ b/chrome/browser/enterprise/reporting/extension_request/extension_request_observer_unittest.cc
@@ -4,6 +4,7 @@ #include "chrome/browser/enterprise/reporting/extension_request/extension_request_observer.h" +#include "base/containers/contains.h" #include "base/json/json_reader.h" #include "base/json/values_util.h" #include "base/test/metrics/histogram_tester.h" @@ -148,9 +149,7 @@ EXPECT_EQ(number_of_existing_requests - expected_removed_requests.size(), actual_pending_requests.size()); for (auto it : actual_pending_requests) { - EXPECT_EQ(expected_removed_requests.end(), - std::find(expected_removed_requests.begin(), - expected_removed_requests.end(), it.first)); + EXPECT_FALSE(base::Contains(expected_removed_requests, it.first)); } closed_notification_count_ += 1; histogram_tester()->ExpectBucketCount(kPendingListUpdateMetricsName,
diff --git a/chrome/browser/extensions/api/declarative_net_request/declarative_net_request_browsertest.cc b/chrome/browser/extensions/api/declarative_net_request/declarative_net_request_browsertest.cc index 01d3952c..6321eb34 100644 --- a/chrome/browser/extensions/api/declarative_net_request/declarative_net_request_browsertest.cc +++ b/chrome/browser/extensions/api/declarative_net_request/declarative_net_request_browsertest.cc
@@ -2249,10 +2249,10 @@ // that the PAC isn't already loaded by the time the extension starts // affecting requests. PrefService* pref_service = browser()->profile()->GetPrefs(); - pref_service->Set(proxy_config::prefs::kProxy, - ProxyConfigDictionary::CreatePacScript( - embedded_test_server()->GetURL("/self.pac").spec(), - true /* pac_mandatory */)); + pref_service->SetDict(proxy_config::prefs::kProxy, + ProxyConfigDictionary::CreatePacScript( + embedded_test_server()->GetURL("/self.pac").spec(), + true /* pac_mandatory */)); // Flush the proxy configuration change over the Mojo pipe to avoid any races. ProfileNetworkContextServiceFactory::GetForContext(browser()->profile()) ->FlushProxyConfigMonitorForTesting();
diff --git a/chrome/browser/extensions/api/language_settings_private/language_settings_private_api.cc b/chrome/browser/extensions/api/language_settings_private/language_settings_private_api.cc index 47c7eff2..5bbd575 100644 --- a/chrome/browser/extensions/api/language_settings_private/language_settings_private_api.cc +++ b/chrome/browser/extensions/api/language_settings_private/language_settings_private_api.cc
@@ -4,7 +4,6 @@ #include "chrome/browser/extensions/api/language_settings_private/language_settings_private_api.h" -#include <algorithm> #include <map> #include <memory> #include <set> @@ -15,6 +14,7 @@ #include "base/containers/contains.h" #include "base/containers/flat_set.h" #include "base/feature_list.h" +#include "base/ranges/algorithm.h" #include "base/strings/string_piece.h" #include "base/strings/string_split.h" #include "base/strings/string_util.h" @@ -884,8 +884,7 @@ input_method_ids, ",", base::TRIM_WHITESPACE, base::SPLIT_WANT_NONEMPTY); // Find and remove the matching input method id. - const auto& pos = std::find(input_method_list.begin(), - input_method_list.end(), input_method_id); + const auto& pos = base::ranges::find(input_method_list, input_method_id); if (pos != input_method_list.end()) { input_method_list.erase(pos); prefs->SetString(pref_name, base::JoinString(input_method_list, ","));
diff --git a/chrome/browser/extensions/api/passwords_private/password_check_delegate.cc b/chrome/browser/extensions/api/passwords_private/password_check_delegate.cc index 24cbc04..4e6508bf 100644 --- a/chrome/browser/extensions/api/passwords_private/password_check_delegate.cc +++ b/chrome/browser/extensions/api/passwords_private/password_check_delegate.cc
@@ -47,6 +47,7 @@ #include "components/password_manager/core/browser/password_manager_metrics_util.h" #include "components/password_manager/core/browser/password_manager_util.h" #include "components/password_manager/core/browser/password_scripts_fetcher.h" +#include "components/password_manager/core/browser/ui/credential_ui_entry.h" #include "components/password_manager/core/browser/ui/credential_utils.h" #include "components/password_manager/core/browser/ui/insecure_credentials_manager.h" #include "components/password_manager/core/browser/ui/saved_passwords_presenter.h" @@ -284,27 +285,12 @@ std::vector<api::passwords_private::PasswordUiEntry> PasswordCheckDelegate::GetInsecureCredentials() { - std::vector<CredentialUIEntry> compromised_credentials = + std::vector<CredentialUIEntry> credentials = insecure_credentials_manager_.GetInsecureCredentialEntries(); - std::vector<CredentialUIEntry> weak_credentials = - insecure_credentials_manager_.GetWeakCredentialEntries(); std::vector<api::passwords_private::PasswordUiEntry> insecure_credentials; - insecure_credentials.reserve(compromised_credentials.size() + - weak_credentials.size()); - for (auto& credential : compromised_credentials) { - insecure_credentials.push_back( - ConstructInsecureCredentialUiEntry(credential)); - } - - for (auto& credential : weak_credentials) { - // TODO:(crbug.com/1350947) - Remove this after InsecureCredentialsManager - // sets Weak flag by itself. - credential.password_issues.clear(); - credential.password_issues.insert( - {password_manager::InsecureType::kWeak, - password_manager::InsecurityMetadata( - base::Time(), password_manager::IsMuted(false))}); + insecure_credentials.reserve(credentials.size()); + for (auto& credential : credentials) { insecure_credentials.push_back( ConstructInsecureCredentialUiEntry(credential)); } @@ -522,13 +508,6 @@ } } -void PasswordCheckDelegate::OnWeakCredentialsChanged() { - if (auto* event_router = - PasswordsPrivateEventRouterFactory::GetForProfile(profile_)) { - event_router->OnInsecureCredentialsChanged(GetInsecureCredentials()); - } -} - void PasswordCheckDelegate::OnStateChanged(State state) { if (state == State::kIdle && std::exchange(is_check_running_, false)) { // When the service transitions from running into idle it has finished a @@ -618,11 +597,19 @@ auto facet = password_manager::FacetURI::FromPotentiallyInvalidSpec( entry.GetFirstSignonRealm()); api_credential.is_android_credential = facet.IsValidAndroidFacetURI(); - api_credential.id = id_generator_->GenerateId(entry); api_credential.username = base::UTF16ToUTF8(entry.username); api_credential.urls = CreateUrlCollectionFromCredential(entry); api_credential.stored_in = StoreSetFromCredential(entry); api_credential.compromised_info = CreateCompromiseInfo(entry); + CredentialUIEntry copy = entry; + // Weak and reused flags should be cleaned before obtaining id. Otherwise + // weak or reused flag will be saved to the database whenever credential is + // modified. + // TODO(crbug.com/1369650): Update this once saving weak and reused issues is + // supported. + copy.password_issues.erase(InsecureType::kWeak); + copy.password_issues.erase(InsecureType::kReused); + api_credential.id = id_generator_->GenerateId(copy); GURL entry_url = entry.GetURL(); if (api_credential.is_android_credential) { // |change_password_url| need special handling for Android. Here we use
diff --git a/chrome/browser/extensions/api/passwords_private/password_check_delegate.h b/chrome/browser/extensions/api/passwords_private/password_check_delegate.h index e4f2d0e8..82976dd 100644 --- a/chrome/browser/extensions/api/passwords_private/password_check_delegate.h +++ b/chrome/browser/extensions/api/passwords_private/password_check_delegate.h
@@ -116,11 +116,6 @@ // a valid pointer can be obtained. void OnInsecureCredentialsChanged() override; - // password_manager::InsecureCredentialsManager::Observer: - // Invokes PasswordsPrivateEventRouter::OnWeakCredentialsChanged if a valid - // pointer can be obtained. - void OnWeakCredentialsChanged() override; - // password_manager::BulkLeakCheckService::Observer: void OnStateChanged( password_manager::BulkLeakCheckService::State state) override;
diff --git a/chrome/browser/extensions/api/passwords_private/password_check_delegate_unittest.cc b/chrome/browser/extensions/api/passwords_private/password_check_delegate_unittest.cc index e345a31..31f796d 100644 --- a/chrome/browser/extensions/api/passwords_private/password_check_delegate_unittest.cc +++ b/chrome/browser/extensions/api/passwords_private/password_check_delegate_unittest.cc
@@ -1283,8 +1283,6 @@ ElementsAre(ExpectCredentialWithScriptInfo( kUsername1, /*has_startable_script=*/true), ExpectCredentialWithScriptInfo( - kUsername1, /*has_startable_script=*/false), - ExpectCredentialWithScriptInfo( kUsername2, /*has_startable_script=*/false))); // After setin the feature parameter for weak credentials to `true` ... @@ -1298,8 +1296,6 @@ ElementsAre(ExpectCredentialWithScriptInfo( kUsername1, /*has_startable_script=*/true), ExpectCredentialWithScriptInfo( - kUsername1, /*has_startable_script=*/true), - ExpectCredentialWithScriptInfo( kUsername2, /*has_startable_script=*/true))); }
diff --git a/chrome/browser/extensions/api/processes/processes_api.cc b/chrome/browser/extensions/api/processes/processes_api.cc index b913bb54..475aaf0 100644 --- a/chrome/browser/extensions/api/processes/processes_api.cc +++ b/chrome/browser/extensions/api/processes/processes_api.cc
@@ -6,7 +6,6 @@ #include <stdint.h> -#include <algorithm> #include <memory> #include <set> #include <utility> @@ -15,6 +14,7 @@ #include "base/lazy_instance.h" #include "base/metrics/histogram_macros.h" #include "base/process/process.h" +#include "base/ranges/algorithm.h" #include "base/strings/string_number_conversions.h" #include "base/strings/utf_string_conversions.h" #include "chrome/browser/extensions/api/tabs/tabs_constants.h" @@ -648,9 +648,7 @@ if (specific_processes_requested) { // Note: we can't use |!process_host_ids_.empty()| directly in the above // condition as we will erase from |process_host_ids_| below. - auto itr = std::find(process_host_ids_.begin(), - process_host_ids_.end(), - child_process_host_id); + auto itr = base::ranges::find(process_host_ids_, child_process_host_id); if (itr == process_host_ids_.end()) continue;
diff --git a/chrome/browser/extensions/api/proxy/proxy_api.cc b/chrome/browser/extensions/api/proxy/proxy_api.cc index 0ef101a..2ef5740 100644 --- a/chrome/browser/extensions/api/proxy/proxy_api.cc +++ b/chrome/browser/extensions/api/proxy/proxy_api.cc
@@ -146,7 +146,7 @@ // This is a dictionary wrapper that exposes the proxy configuration stored in // the browser preferences. - ProxyConfigDictionary config(browser_pref->Clone()); + ProxyConfigDictionary config(browser_pref->GetDict().Clone()); ProxyPrefs::ProxyMode mode; if (!config.GetMode(&mode)) {
diff --git a/chrome/browser/extensions/api/proxy/proxy_api_helpers_unittest.cc b/chrome/browser/extensions/api/proxy/proxy_api_helpers_unittest.cc index e9d9ba0..0d4a00bf 100644 --- a/chrome/browser/extensions/api/proxy/proxy_api_helpers_unittest.cc +++ b/chrome/browser/extensions/api/proxy/proxy_api_helpers_unittest.cc
@@ -228,40 +228,40 @@ TEST(ExtensionProxyApiHelpers, CreateProxyConfigDict) { std::string error; - base::Value exp_direct = ProxyConfigDictionary::CreateDirect(); + base::Value::Dict exp_direct = ProxyConfigDictionary::CreateDirect(); std::unique_ptr<base::Value> out_direct(CreateProxyConfigDict( ProxyPrefs::MODE_DIRECT, false, std::string(), std::string(), std::string(), std::string(), &error)); EXPECT_EQ(exp_direct, *out_direct); - base::Value exp_auto = ProxyConfigDictionary::CreateAutoDetect(); + base::Value::Dict exp_auto = ProxyConfigDictionary::CreateAutoDetect(); std::unique_ptr<base::Value> out_auto(CreateProxyConfigDict( ProxyPrefs::MODE_AUTO_DETECT, false, std::string(), std::string(), std::string(), std::string(), &error)); EXPECT_EQ(exp_auto, *out_auto); - base::Value exp_pac_url = + base::Value::Dict exp_pac_url = ProxyConfigDictionary::CreatePacScript(kSamplePacScriptUrl, false); std::unique_ptr<base::Value> out_pac_url(CreateProxyConfigDict( ProxyPrefs::MODE_PAC_SCRIPT, false, kSamplePacScriptUrl, std::string(), std::string(), std::string(), &error)); EXPECT_EQ(exp_pac_url, *out_pac_url); - base::Value exp_pac_data = + base::Value::Dict exp_pac_data = ProxyConfigDictionary::CreatePacScript(kSamplePacScriptAsDataUrl, false); std::unique_ptr<base::Value> out_pac_data(CreateProxyConfigDict( ProxyPrefs::MODE_PAC_SCRIPT, false, std::string(), kSamplePacScript, std::string(), std::string(), &error)); EXPECT_EQ(exp_pac_data, *out_pac_data); - base::Value exp_fixed = + base::Value::Dict exp_fixed = ProxyConfigDictionary::CreateFixedServers("foo:80", "localhost"); std::unique_ptr<base::Value> out_fixed(CreateProxyConfigDict( ProxyPrefs::MODE_FIXED_SERVERS, false, std::string(), std::string(), "foo:80", "localhost", &error)); EXPECT_EQ(exp_fixed, *out_fixed); - base::Value exp_system = ProxyConfigDictionary::CreateSystem(); + base::Value::Dict exp_system = ProxyConfigDictionary::CreateSystem(); std::unique_ptr<base::Value> out_system(CreateProxyConfigDict( ProxyPrefs::MODE_SYSTEM, false, std::string(), std::string(), std::string(), std::string(), &error));
diff --git a/chrome/browser/extensions/api/proxy/proxy_apitest.cc b/chrome/browser/extensions/api/proxy/proxy_apitest.cc index d60d7229..e4f8b0e 100644 --- a/chrome/browser/extensions/api/proxy/proxy_apitest.cc +++ b/chrome/browser/extensions/api/proxy/proxy_apitest.cc
@@ -49,7 +49,7 @@ // TODO(https://crbug.com/1348219) This should call // `PrefService::GetDict`. ProxyConfigDictionary dict( - pref_service->GetValue(proxy_config::prefs::kProxy).Clone()); + pref_service->GetDict(proxy_config::prefs::kProxy).Clone()); ProxyPrefs::ProxyMode mode; ASSERT_TRUE(dict.GetMode(&mode));
diff --git a/chrome/browser/extensions/api/web_request/web_request_apitest.cc b/chrome/browser/extensions/api/web_request/web_request_apitest.cc index fdb49a13..71dd6aa 100644 --- a/chrome/browser/extensions/api/web_request/web_request_apitest.cc +++ b/chrome/browser/extensions/api/web_request/web_request_apitest.cc
@@ -1676,10 +1676,10 @@ // that the PAC isn't already loaded by the time the extension starts // affecting requests. PrefService* pref_service = browser()->profile()->GetPrefs(); - pref_service->Set(proxy_config::prefs::kProxy, - ProxyConfigDictionary::CreatePacScript( - embedded_test_server()->GetURL("/self.pac").spec(), - true /* pac_mandatory */)); + pref_service->SetDict(proxy_config::prefs::kProxy, + ProxyConfigDictionary::CreatePacScript( + embedded_test_server()->GetURL("/self.pac").spec(), + true /* pac_mandatory */)); // Flush the proxy configuration change over the Mojo pipe to avoid any races. ProfileNetworkContextServiceFactory::GetForContext(browser()->profile()) ->FlushProxyConfigMonitorForTesting(); @@ -5021,10 +5021,10 @@ ASSERT_TRUE(proxy_cors_server_.Start()); PrefService* pref_service = browser()->profile()->GetPrefs(); - pref_service->Set(proxy_config::prefs::kProxy, - ProxyConfigDictionary::CreateFixedServers( - proxy_cors_server_.host_port_pair().ToString(), - "accounts.google.com")); + pref_service->SetDict(proxy_config::prefs::kProxy, + ProxyConfigDictionary::CreateFixedServers( + proxy_cors_server_.host_port_pair().ToString(), + "accounts.google.com")); // Flush the proxy configuration change to avoid any races. ProfileNetworkContextServiceFactory::GetForContext(browser()->profile())
diff --git a/chrome/browser/extensions/extension_management.cc b/chrome/browser/extensions/extension_management.cc index 228a71a..c5031d62 100644 --- a/chrome/browser/extensions/extension_management.cc +++ b/chrome/browser/extensions/extension_management.cc
@@ -450,11 +450,7 @@ // Parse default settings. const base::Value wildcard("*"); if ((denied_list_pref && - // TODO(crbug.com/1187106): Use base::Contains once |denied_list_pref| is - // not a ListValue. - std::find(denied_list_pref->GetList().begin(), - denied_list_pref->GetList().end(), - wildcard) != denied_list_pref->GetList().end()) || + base::Contains(denied_list_pref->GetList(), wildcard)) || (extension_request_pref && extension_request_pref->GetBool())) { default_settings_->installation_mode = INSTALLATION_BLOCKED; }
diff --git a/chrome/browser/extensions/extension_service_test_with_install.cc b/chrome/browser/extensions/extension_service_test_with_install.cc index b23a9e1d..37638da 100644 --- a/chrome/browser/extensions/extension_service_test_with_install.cc +++ b/chrome/browser/extensions/extension_service_test_with_install.cc
@@ -6,6 +6,7 @@ #include "base/bind.h" #include "base/files/file_util.h" +#include "base/ranges/algorithm.h" #include "base/strings/utf_string_conversions.h" #include "base/test/task_environment.h" #include "chrome/browser/extensions/chrome_test_extension_loader.h" @@ -394,8 +395,7 @@ UnloadedExtensionReason reason) { unloaded_id_ = extension->id(); unloaded_reason_ = reason; - auto i = std::find(loaded_extensions_.begin(), loaded_extensions_.end(), - extension); + auto i = base::ranges::find(loaded_extensions_, extension); // TODO(erikkay) fix so this can be an assert. Right now the tests // are manually calling `ClearLoadedExtensions` since this method is not // called by reloads, so this isn't doable.
diff --git a/chrome/browser/extensions/window_controller_list.cc b/chrome/browser/extensions/window_controller_list.cc index 527364bc..cf354e08 100644 --- a/chrome/browser/extensions/window_controller_list.cc +++ b/chrome/browser/extensions/window_controller_list.cc
@@ -4,9 +4,9 @@ #include "chrome/browser/extensions/window_controller_list.h" -#include <algorithm> - +#include "base/containers/contains.h" #include "base/observer_list.h" +#include "base/ranges/algorithm.h" #include "chrome/browser/extensions/api/tabs/windows_util.h" #include "chrome/browser/extensions/chrome_extension_function_details.h" #include "chrome/browser/extensions/window_controller_list_observer.h" @@ -38,7 +38,7 @@ } void WindowControllerList::RemoveExtensionWindow(WindowController* window) { - auto iter = std::find(windows_.begin(), windows_.end(), window); + auto iter = base::ranges::find(windows_, window); if (iter != windows_.end()) { windows_.erase(iter); for (auto& observer : observers_) @@ -47,8 +47,7 @@ } void WindowControllerList::NotifyWindowBoundsChanged(WindowController* window) { - auto iter = std::find(windows_.begin(), windows_.end(), window); - if (iter != windows_.end()) { + if (base::Contains(windows_, window)) { for (auto& observer : observers_) observer.OnWindowBoundsChanged(window); }
diff --git a/chrome/browser/feed/android/java/src/org/chromium/chrome/browser/feed/NativeViewListRenderer.java b/chrome/browser/feed/android/java/src/org/chromium/chrome/browser/feed/NativeViewListRenderer.java index 0e63225..fd034ed 100644 --- a/chrome/browser/feed/android/java/src/org/chromium/chrome/browser/feed/NativeViewListRenderer.java +++ b/chrome/browser/feed/android/java/src/org/chromium/chrome/browser/feed/NativeViewListRenderer.java
@@ -169,5 +169,11 @@ public void scrollToPositionWithOffset(int position, int offset) { mLayoutManager.scrollToPositionWithOffset(position, offset); } + + @Override + public void setSpanCount(int spanCount) { + throw new UnsupportedOperationException( + "Cannot set span count when using linear layout."); + } } }
diff --git a/chrome/browser/feed/android/java/src/org/chromium/chrome/browser/feed/NativeViewListRendererTest.java b/chrome/browser/feed/android/java/src/org/chromium/chrome/browser/feed/NativeViewListRendererTest.java index c913559..1ec54d7 100644 --- a/chrome/browser/feed/android/java/src/org/chromium/chrome/browser/feed/NativeViewListRendererTest.java +++ b/chrome/browser/feed/android/java/src/org/chromium/chrome/browser/feed/NativeViewListRendererTest.java
@@ -203,4 +203,14 @@ assertEquals(expectedLayoutManager.findLastVisibleItemPosition(), helper.findLastVisibleItemPosition()); } + + @Test(expected = UnsupportedOperationException.class) + public void testLayoutHelperSetSpanCount() { + mManager.addContents(0, + Arrays.asList(new NtpListContentManager.FeedContent[] { + createContent("1"), createContent("2"), createContent("3")})); + mRenderer.bind(mManager); + + mRenderer.getListLayoutHelper().setSpanCount(3); + } }
diff --git a/chrome/browser/feed/android/java/src/org/chromium/chrome/browser/feed/sort_ui/FeedOptionsCoordinator.java b/chrome/browser/feed/android/java/src/org/chromium/chrome/browser/feed/sort_ui/FeedOptionsCoordinator.java index e91d8b24..09ce1ee 100644 --- a/chrome/browser/feed/android/java/src/org/chromium/chrome/browser/feed/sort_ui/FeedOptionsCoordinator.java +++ b/chrome/browser/feed/android/java/src/org/chromium/chrome/browser/feed/sort_ui/FeedOptionsCoordinator.java
@@ -8,6 +8,7 @@ import android.view.LayoutInflater; import android.view.View; +import androidx.annotation.Nullable; import androidx.annotation.StringRes; import androidx.annotation.VisibleForTesting; @@ -28,6 +29,12 @@ * A coordinator for the feed options panel. */ public class FeedOptionsCoordinator { + /** Listener for change in options selection. */ + public interface OptionChangedListener { + /** Listener for when a feed option selection changes. */ + void onOptionChanged(); + } + /** Method for translating between model changes and corresponding view updates. */ static void bind(PropertyModel model, FeedOptionsView view, PropertyKey key) { if (key == FeedOptionsProperties.VISIBILITY_KEY) { @@ -39,6 +46,8 @@ private final Context mContext; private List<PropertyModel> mChipModels; private PropertyModel mModel; + @Nullable + private OptionChangedListener mOptionsListener; public FeedOptionsCoordinator(Context context) { // We don't use ChipsCoordinator here because RecyclerView does not play @@ -60,6 +69,11 @@ PropertyModelChangeProcessor.create(mModel, mView, FeedOptionsCoordinator::bind); } + /** Sets listener for feed options. */ + public void setOptionsListener(OptionChangedListener mOptionsListener) { + this.mOptionsListener = mOptionsListener; + } + /** Returns the view that this coordinator manages. */ public View getView() { return mView; @@ -80,6 +94,11 @@ mModel.set(FeedOptionsProperties.VISIBILITY_KEY, false); } + /** Returns Id of selection option. */ + public @ContentOrder int getSelectedOptionId() { + return FeedServiceBridge.getContentOrderForWebFeed(); + } + @VisibleForTesting void onOptionSelected(PropertyModel selectedOption) { for (PropertyModel model : mChipModels) { @@ -87,9 +106,11 @@ model.set(ChipProperties.SELECTED, false); } } - selectedOption.set(ChipProperties.SELECTED, true); FeedServiceBridge.setContentOrderForWebFeed(selectedOption.get(ChipProperties.ID)); + if (mOptionsListener != null) { + mOptionsListener.onOptionChanged(); + } } private PropertyModel createChipModel(@ContentOrder int id, @StringRes int textId, @@ -106,7 +127,7 @@ private List<PropertyModel> createAndBindChips() { @ContentOrder - int currentSort = FeedServiceBridge.getContentOrderForWebFeed(); + int currentSort = getSelectedOptionId(); List<PropertyModel> chipModels = new ArrayList<>(); chipModels.add(createChipModel(ContentOrder.GROUPED, R.string.feed_sort_publisher, currentSort == ContentOrder.GROUPED, R.string.feed_options_sort_by_grouped));
diff --git a/chrome/browser/feed/android/java/src/org/chromium/chrome/browser/feed/sort_ui/FeedOptionsCoordinatorTest.java b/chrome/browser/feed/android/java/src/org/chromium/chrome/browser/feed/sort_ui/FeedOptionsCoordinatorTest.java index 24be010d..0f512d2 100644 --- a/chrome/browser/feed/android/java/src/org/chromium/chrome/browser/feed/sort_ui/FeedOptionsCoordinatorTest.java +++ b/chrome/browser/feed/android/java/src/org/chromium/chrome/browser/feed/sort_ui/FeedOptionsCoordinatorTest.java
@@ -30,6 +30,7 @@ import org.chromium.ui.modelutil.PropertyModel; import java.util.List; +import java.util.concurrent.atomic.AtomicBoolean; /** * Tests for {@link FeedOptionsCoordinator}. @@ -123,6 +124,8 @@ @Test public void testOptionsSelected() { + AtomicBoolean listenerCalled = new AtomicBoolean(false); + mCoordinator.setOptionsListener(() -> { listenerCalled.set(true); }); List<PropertyModel> chipModels = mCoordinator.getChipModelsForTest(); chipModels.get(0).set(ChipProperties.SELECTED, false); chipModels.get(1).set(ChipProperties.SELECTED, true); @@ -131,5 +134,6 @@ assertFalse(chipModels.get(1).get(ChipProperties.SELECTED)); assertTrue(chipModels.get(0).get(ChipProperties.SELECTED)); + assertTrue(listenerCalled.get()); } }
diff --git a/chrome/browser/flag-metadata.json b/chrome/browser/flag-metadata.json index 9f1c0a8b..211a077a8 100644 --- a/chrome/browser/flag-metadata.json +++ b/chrome/browser/flag-metadata.json
@@ -1407,6 +1407,11 @@ "expiry_milestone": -1 }, { + "name": "disable-feed-ios14", + "owners": [ "justincohen", "adamta" ], + "expiry_milestone": 108 + }, + { "name": "disable-idle-sockets-close-on-memory-pressure", "owners": [ "pmarko" ], "expiry_milestone": 112
diff --git a/chrome/browser/incognito/android/java/src/org/chromium/chrome/browser/incognito/reauth/IncognitoReauthController.java b/chrome/browser/incognito/android/java/src/org/chromium/chrome/browser/incognito/reauth/IncognitoReauthController.java index 82185e9..b1dc445 100644 --- a/chrome/browser/incognito/android/java/src/org/chromium/chrome/browser/incognito/reauth/IncognitoReauthController.java +++ b/chrome/browser/incognito/android/java/src/org/chromium/chrome/browser/incognito/reauth/IncognitoReauthController.java
@@ -4,6 +4,8 @@ package org.chromium.chrome.browser.incognito.reauth; +import androidx.annotation.NonNull; + /** * A public API which can be used by other non re-auth clients to get information about the * Incognito re-authentication. @@ -22,6 +24,24 @@ boolean isIncognitoReauthPending(); /** + * A method to add an {@link IncognitoReauthCallback}. + * + * @param incognitoReauthCallback {@link IncognitoReauthCallback} that the clients can add to be + * notified when the user attempts re-authentication in the Incognito page. + */ + void addIncognitoReauthCallback( + @NonNull IncognitoReauthManager.IncognitoReauthCallback incognitoReauthCallback); + + /** + * A method to remove the {@link IncognitoReauthCallback}. + * + * @param incognitoReauthCallback {@link IncognitoReauthCallback} that the clients added to be + * notified when the user attempts re-authentication in the Incognito page. + */ + void removeIncognitoReauthCallback( + @NonNull IncognitoReauthManager.IncognitoReauthCallback incognitoReauthCallback); + + /** * TODO(crbug.com/1227656): This method is ill-placed. Find a better design to restrict * non-intended clients to call this method. */
diff --git a/chrome/browser/incognito/android/java/src/org/chromium/chrome/browser/incognito/reauth/IncognitoReauthControllerImpl.java b/chrome/browser/incognito/android/java/src/org/chromium/chrome/browser/incognito/reauth/IncognitoReauthControllerImpl.java index dd89386..466ed26 100644 --- a/chrome/browser/incognito/android/java/src/org/chromium/chrome/browser/incognito/reauth/IncognitoReauthControllerImpl.java +++ b/chrome/browser/incognito/android/java/src/org/chromium/chrome/browser/incognito/reauth/IncognitoReauthControllerImpl.java
@@ -9,6 +9,7 @@ import androidx.activity.OnBackPressedCallback; import androidx.annotation.NonNull; import androidx.annotation.Nullable; +import androidx.annotation.VisibleForTesting; import org.chromium.base.Callback; import org.chromium.base.CallbackController; @@ -28,6 +29,9 @@ import org.chromium.chrome.browser.tabmodel.TabModelSelectorObserver; import org.chromium.ui.modaldialog.DialogDismissalCause; +import java.util.ArrayList; +import java.util.List; + /** * This is the access point for showing the Incognito re-auth dialog. It controls building the * {@link IncognitoReauthCoordinator} and showing/hiding the re-auth dialog. The {@link @@ -44,6 +48,13 @@ // incognito tabs present before Chrome went to background. public static final String KEY_IS_INCOGNITO_REAUTH_PENDING = "incognitoReauthPending"; + /** + * A list of all {@link IncognitoReauthCallback} that would be triggered from + * |mIncognitoReauthCallback|. + */ + private final List<IncognitoReauthManager.IncognitoReauthCallback> + mIncognitoReauthCallbackList = new ArrayList<>(); + // This callback is fired when the user clicks on "Unlock Incognito" option. // This contains the logic to not require further re-authentication if the last one was a // success. Please note, a re-authentication would be required again when Chrome is brought to @@ -53,16 +64,29 @@ @Override public void onIncognitoReauthNotPossible() { hideDialogIfShowing(DialogDismissalCause.ACTION_ON_DIALOG_NOT_POSSIBLE); + for (IncognitoReauthManager.IncognitoReauthCallback callback : + mIncognitoReauthCallbackList) { + callback.onIncognitoReauthNotPossible(); + } } @Override public void onIncognitoReauthSuccess() { mIncognitoReauthPending = false; hideDialogIfShowing(DialogDismissalCause.ACTION_ON_DIALOG_COMPLETED); + for (IncognitoReauthManager.IncognitoReauthCallback callback : + mIncognitoReauthCallbackList) { + callback.onIncognitoReauthSuccess(); + } } @Override - public void onIncognitoReauthFailure() {} + public void onIncognitoReauthFailure() { + for (IncognitoReauthManager.IncognitoReauthCallback callback : + mIncognitoReauthCallbackList) { + callback.onIncognitoReauthFailure(); + } + } }; // If the user has closed all Incognito tabs, then they don't need to go through re-auth to open @@ -218,6 +242,26 @@ } /** + * Override from {@link IncognitoReauthController}. + */ + @Override + public void addIncognitoReauthCallback( + @NonNull IncognitoReauthManager.IncognitoReauthCallback incognitoReauthCallback) { + if (!mIncognitoReauthCallbackList.contains(incognitoReauthCallback)) { + mIncognitoReauthCallbackList.add(incognitoReauthCallback); + } + } + + /** + * Override from {@link IncognitoReauthController}. + */ + @Override + public void removeIncognitoReauthCallback( + @NonNull IncognitoReauthManager.IncognitoReauthCallback incognitoReauthCallback) { + mIncognitoReauthCallbackList.remove(incognitoReauthCallback); + } + + /** * Override from {@link StartStopWithNativeObserver}. This relays the signal that Chrome was * brought to foreground. */ @@ -268,6 +312,11 @@ showDialogIfRequired(); } + @VisibleForTesting + IncognitoReauthManager.IncognitoReauthCallback getIncognitoReauthCallbackForTesting() { + return mIncognitoReauthCallback; + } + /** * TODO(crbug.com/1227656): Add an extra check on IncognitoReauthManager#canAuthenticate method * if needed here to tackle the case where a re-authentication might not be possible from the
diff --git a/chrome/browser/incognito/android/java/src/org/chromium/chrome/browser/incognito/reauth/IncognitoReauthControllerImplTest.java b/chrome/browser/incognito/android/java/src/org/chromium/chrome/browser/incognito/reauth/IncognitoReauthControllerImplTest.java index 06c45f9b..c9a2a38 100644 --- a/chrome/browser/incognito/android/java/src/org/chromium/chrome/browser/incognito/reauth/IncognitoReauthControllerImplTest.java +++ b/chrome/browser/incognito/android/java/src/org/chromium/chrome/browser/incognito/reauth/IncognitoReauthControllerImplTest.java
@@ -13,9 +13,11 @@ import static org.mockito.Mockito.mock; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.verifyNoMoreInteractions; import static org.mockito.Mockito.when; import androidx.test.filters.MediumTest; +import androidx.test.filters.SmallTest; import org.junit.After; import org.junit.Before; @@ -81,6 +83,8 @@ private PrefService mPrefServiceMock; @Mock private Runnable mBackPressInReauthFullScreenRunnableMock; + @Mock + private IncognitoReauthManager.IncognitoReauthCallback mIncognitoReauthCallbackMock; @Captor ArgumentCaptor<TabModelSelectorObserver> mTabModelSelectorObserverCaptor; @@ -330,4 +334,29 @@ + " fresh Incognito session.", mIncognitoReauthController.isReauthPageShowing()); } + + @Test + @SmallTest + public void testAddIncognitoReauthCallback_IsHookedWithMainCallback() { + doNothing().when(mIncognitoReauthCallbackMock).onIncognitoReauthSuccess(); + mIncognitoReauthController.addIncognitoReauthCallback(mIncognitoReauthCallbackMock); + mIncognitoReauthController.getIncognitoReauthCallbackForTesting() + .onIncognitoReauthSuccess(); + verify(mIncognitoReauthCallbackMock, times(1)).onIncognitoReauthSuccess(); + } + + @Test + @SmallTest + public void testRemoveIncognitoReauthCallback_IsUnHookedWithMainCallback() { + doNothing().when(mIncognitoReauthCallbackMock).onIncognitoReauthSuccess(); + mIncognitoReauthController.addIncognitoReauthCallback(mIncognitoReauthCallbackMock); + mIncognitoReauthController.getIncognitoReauthCallbackForTesting() + .onIncognitoReauthSuccess(); + verify(mIncognitoReauthCallbackMock, times(1)).onIncognitoReauthSuccess(); + + mIncognitoReauthController.removeIncognitoReauthCallback(mIncognitoReauthCallbackMock); + mIncognitoReauthController.getIncognitoReauthCallbackForTesting() + .onIncognitoReauthSuccess(); + verifyNoMoreInteractions(mIncognitoReauthCallbackMock); + } }
diff --git a/chrome/browser/media/router/BUILD.gn b/chrome/browser/media/router/BUILD.gn index 526ae99..8ab1205 100644 --- a/chrome/browser/media/router/BUILD.gn +++ b/chrome/browser/media/router/BUILD.gn
@@ -113,8 +113,6 @@ public_deps += [ "//components/media_router/common/mojom:logger" ] sources += [ - "logger_list.cc", - "logger_list.h", "mojo/media_router_desktop.cc", "mojo/media_router_desktop.h", "mojo/media_router_mojo_impl.cc", @@ -170,6 +168,8 @@ "providers/wired_display/wired_display_presentation_receiver_factory.h", ] + deps += [ ":logger_list" ] + if (is_win) { sources += [ "mojo/media_route_provider_util_win.cc", @@ -322,6 +322,7 @@ "providers/wired_display/wired_display_media_route_provider_unittest.cc", ] deps += [ + ":logger_list", ":test_support", "//chrome/browser/media/router/discovery:discovery", "//chrome/browser/media/router/discovery/access_code:access_code_cast_feature",
diff --git a/chrome/browser/metrics/chrome_browser_main_extra_parts_metrics.cc b/chrome/browser/metrics/chrome_browser_main_extra_parts_metrics.cc index edc7b63..16e7827c 100644 --- a/chrome/browser/metrics/chrome_browser_main_extra_parts_metrics.cc +++ b/chrome/browser/metrics/chrome_browser_main_extra_parts_metrics.cc
@@ -16,6 +16,7 @@ #include "base/feature_list.h" #include "base/metrics/histogram_functions.h" #include "base/metrics/sparse_histogram.h" +#include "base/power_monitor/power_monitor_buildflags.h" #include "base/rand_util.h" #include "base/system/sys_info.h" #include "base/task/task_traits.h" @@ -32,8 +33,6 @@ #include "chrome/browser/enterprise/browser_management/management_service_factory.h" #include "chrome/browser/google/google_brand.h" #include "chrome/browser/metrics/chrome_metrics_service_accessor.h" -#include "chrome/browser/metrics/power/power_metrics_reporter.h" -#include "chrome/browser/metrics/power/process_monitor.h" #include "chrome/browser/metrics/process_memory_metrics_emitter.h" #include "chrome/browser/shell_integration.h" #include "components/flags_ui/pref_service_flags_storage.h" @@ -48,7 +47,11 @@ #include "ui/display/screen.h" #if !BUILDFLAG(IS_ANDROID) +#include "base/power_monitor/battery_state_sampler.h" #include "chrome/browser/metrics/first_web_contents_profiler.h" +#include "chrome/browser/metrics/power/battery_discharge_reporter.h" +#include "chrome/browser/metrics/power/power_metrics_reporter.h" +#include "chrome/browser/metrics/power/process_monitor.h" #include "chrome/browser/metrics/tab_stats/tab_stats_tracker.h" #endif // !BUILDFLAG(IS_ANDROID) @@ -658,8 +661,23 @@ g_browser_process->local_state())); } - // Only instantiate the PowerMetricsReporter if |process_monitor_| exists. - // This is always the case for Chrome but not for the unit tests. + // Instantiate the power-related metrics reporters. + + // BatteryDischargeRateReporter reports the system-wide battery discharge + // rate. It depends on the TabStatsTracker to determine the usage scenario, + // and the BatteryStateSampler to determine the battery level. + // The TabStatsTracker always exists (except during unit tests), while the + // BatteryStateSampler only exists on platform where a BatteryLevelProvider + // implementation exists. + if (metrics::TabStatsTracker::GetInstance() && + base::BatteryStateSampler::Get()) { + battery_discharge_reporter_ = std::make_unique<BatteryDischargeReporter>( + base::BatteryStateSampler::Get()); + } + + // PowerMetricsReporter focus solely on Chrome-specific metrics that affect + // power (CPU time, wake ups, etc.). Only instantiate it if |process_monitor_| + // exists. This is always the case for Chrome but not for the unit tests. if (process_monitor_) { power_metrics_reporter_ = std::make_unique<PowerMetricsReporter>(process_monitor_.get());
diff --git a/chrome/browser/metrics/chrome_browser_main_extra_parts_metrics.h b/chrome/browser/metrics/chrome_browser_main_extra_parts_metrics.h index 8147459..2f8a19c 100644 --- a/chrome/browser/metrics/chrome_browser_main_extra_parts_metrics.h +++ b/chrome/browser/metrics/chrome_browser_main_extra_parts_metrics.h
@@ -15,8 +15,12 @@ #include "ui/display/display_observer.h" class ChromeBrowserMainParts; + +#if !BUILDFLAG(IS_ANDROID) +class BatteryDischargeReporter; class PowerMetricsReporter; class ProcessMonitor; +#endif namespace chrome { void AddMetricsExtraParts(ChromeBrowserMainParts* main_parts); @@ -76,6 +80,8 @@ // Reports power metrics. std::unique_ptr<PowerMetricsReporter> power_metrics_reporter_; + + std::unique_ptr<BatteryDischargeReporter> battery_discharge_reporter_; #endif // !BUILDFLAG(IS_ANDROID) };
diff --git a/chrome/browser/metrics/chrome_metrics_service_client.cc b/chrome/browser/metrics/chrome_metrics_service_client.cc index 7787209..d4106ac 100644 --- a/chrome/browser/metrics/chrome_metrics_service_client.cc +++ b/chrome/browser/metrics/chrome_metrics_service_client.cc
@@ -84,7 +84,6 @@ #include "components/metrics/demographics/demographic_metrics_provider.h" #include "components/metrics/drive_metrics_provider.h" #include "components/metrics/entropy_state_provider.h" -#include "components/metrics/form_factor_metrics_provider.h" #include "components/metrics/metrics_log_uploader.h" #include "components/metrics/metrics_pref_names.h" #include "components/metrics/metrics_reporting_default_state.h" @@ -98,6 +97,7 @@ #include "components/metrics/persistent_histograms.h" #include "components/metrics/sampling_metrics_provider.h" #include "components/metrics/stability_metrics_helper.h" +#include "components/metrics/ui/form_factor_metrics_provider.h" #include "components/metrics/ui/screen_info_metrics_provider.h" #include "components/metrics/url_constants.h" #include "components/metrics/version_utils.h"
diff --git a/chrome/browser/metrics/power/battery_discharge_reporter.cc b/chrome/browser/metrics/power/battery_discharge_reporter.cc new file mode 100644 index 0000000..3c6a40f --- /dev/null +++ b/chrome/browser/metrics/power/battery_discharge_reporter.cc
@@ -0,0 +1,109 @@ +// Copyright 2022 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "chrome/browser/metrics/power/battery_discharge_reporter.h" + +#include <utility> + +#include "base/bind.h" +#include "chrome/browser/metrics/power/power_metrics.h" +#include "chrome/browser/metrics/power/process_metrics_recorder_util.h" +#include "chrome/browser/metrics/power/usage_scenario.h" + +#if BUILDFLAG(IS_MAC) +#include "base/metrics/histogram_functions.h" +#endif // BUILDFLAG(IS_MAC) + +namespace { + +bool IsWithinTolerance(base::TimeDelta value, + base::TimeDelta expected, + base::TimeDelta tolerance) { + return (value - expected).magnitude() < tolerance; +} + +} // namespace + +BatteryDischargeReporter::BatteryDischargeReporter( + base::BatteryStateSampler* battery_state_sampler, + UsageScenarioDataStore* battery_usage_scenario_data_store) + : battery_usage_scenario_data_store_(battery_usage_scenario_data_store) { + if (!battery_usage_scenario_data_store_) { + battery_usage_scenario_tracker_ = std::make_unique<UsageScenarioTracker>(); + battery_usage_scenario_data_store_ = + battery_usage_scenario_tracker_->data_store(); + } + + scoped_battery_state_sampler_observation_.Observe(battery_state_sampler); +} + +BatteryDischargeReporter::~BatteryDischargeReporter() = default; + +void BatteryDischargeReporter::OnBatteryStateSampled( + const absl::optional<base::BatteryLevelProvider::BatteryState>& + battery_state) { + base::TimeTicks now_ticks = base::TimeTicks::Now(); + + // First sampling event. Remember the time and skip. + if (!last_event_time_ticks_) { + last_event_time_ticks_ = now_ticks; + last_battery_state_ = battery_state; + return; + } + + base::TimeDelta sampling_event_delta = now_ticks - *last_event_time_ticks_; + *last_event_time_ticks_ = now_ticks; + +#if BUILDFLAG(IS_MAC) + RecordIOPMPowerSourceSampleEventDelta(sampling_event_delta); +#endif + + // Evaluate battery discharge mode and rate. + auto battery_discharge = GetBatteryDischargeDuringInterval( + last_battery_state_, battery_state, sampling_event_delta); + last_battery_state_ = battery_state; + + // Intervals are expected to be approximately 1 minute long. Exclude samples + // where the interval length deviate significantly from that value. 1 second + // tolerance was chosen to include ~70% of all samples. + if (battery_discharge.mode == BatteryDischargeMode::kDischarging && + !IsWithinTolerance(sampling_event_delta, base::Minutes(1), + base::Seconds(1))) { + battery_discharge.mode = BatteryDischargeMode::kInvalidInterval; + } + + auto interval_data = battery_usage_scenario_data_store_->ResetIntervalData(); + + // Get scenario data. + const auto long_interval_scenario_params = + GetLongIntervalScenario(interval_data); + // Histograms are recorded without suffix and with a scenario-specific + // suffix. + const std::vector<const char*> long_interval_suffixes{ + "", long_interval_scenario_params.histogram_suffix}; + ReportAlignedBatteryHistograms(sampling_event_delta, battery_discharge, + is_initial_interval_, long_interval_suffixes); + is_initial_interval_ = false; +} + +#if BUILDFLAG(IS_MAC) +void BatteryDischargeReporter::RecordIOPMPowerSourceSampleEventDelta( + base::TimeDelta sampling_event_delta) { + // The delta is expected to be almost always 60 seconds. Split the buckets for + // 0.2s granularity (10s interval with 50 buckets + 1 underflow bucket + 1 + // overflow bucket) around that value. + base::HistogramBase* histogram = base::LinearHistogram::FactoryTimeGet( + "Power.IOPMPowerSource.SamplingEventDelta", + /*min=*/base::Seconds(55), /*max=*/base::Seconds(65), /*buckets=*/52, + base::HistogramBase::kUmaTargetedHistogramFlag); + histogram->AddTime(sampling_event_delta); + + // Same as the above but using a range that starts from zero and significantly + // goes beyond the expected mean time of |sampling_event_delta| (which is 60 + // seconds.). + base::UmaHistogramMediumTimes( + "Power.IOPMPowerSource.SamplingEventDelta.MediumTimes", + sampling_event_delta); +} +#endif // BUILDFLAG(IS_MAC)
diff --git a/chrome/browser/metrics/power/battery_discharge_reporter.h b/chrome/browser/metrics/power/battery_discharge_reporter.h new file mode 100644 index 0000000..611ea93 --- /dev/null +++ b/chrome/browser/metrics/power/battery_discharge_reporter.h
@@ -0,0 +1,65 @@ +// Copyright 2022 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef CHROME_BROWSER_METRICS_POWER_BATTERY_DISCHARGE_REPORTER_H_ +#define CHROME_BROWSER_METRICS_POWER_BATTERY_DISCHARGE_REPORTER_H_ + +#include <memory> + +#include "base/power_monitor/battery_state_sampler.h" +#include "base/power_monitor/power_monitor_buildflags.h" +#include "base/scoped_observation.h" +#include "base/time/time.h" +#include "build/build_config.h" +#include "chrome/browser/metrics/usage_scenario/usage_scenario_data_store.h" +#include "chrome/browser/metrics/usage_scenario/usage_scenario_tracker.h" +#include "third_party/abseil-cpp/absl/types/optional.h" + +class BatteryDischargeReporter : public base::BatteryStateSampler::Observer { + public: + explicit BatteryDischargeReporter( + base::BatteryStateSampler* battery_state_sampler, + UsageScenarioDataStore* battery_usage_scenario_data_store = nullptr); + + BatteryDischargeReporter(const BatteryDischargeReporter&) = delete; + BatteryDischargeReporter& operator=(const BatteryDischargeReporter&) = delete; + BatteryDischargeReporter(BatteryDischargeReporter&&) = delete; + BatteryDischargeReporter& operator=(BatteryDischargeReporter&&) = delete; + + ~BatteryDischargeReporter() override; + + // base::BatteryStateSampler::Observer: + void OnBatteryStateSampled( + const absl::optional<base::BatteryLevelProvider::BatteryState>& + battery_state) override; + + private: +#if BUILDFLAG(IS_MAC) + // Records the time delta between two events received from IOPMPowerSource. + void RecordIOPMPowerSourceSampleEventDelta( + base::TimeDelta sampling_event_delta); +#endif // BUILDFLAG(IS_MAC) + + base::ScopedObservation<base::BatteryStateSampler, + base::BatteryStateSampler::Observer> + scoped_battery_state_sampler_observation_{this}; + + // Track usage scenarios for the sampling interval. + std::unique_ptr<UsageScenarioTracker> battery_usage_scenario_tracker_; + raw_ptr<UsageScenarioDataStore> battery_usage_scenario_data_store_; + + // The time ticks from when the last event was received from + // |sampling_event_source_|. + absl::optional<base::TimeTicks> last_event_time_ticks_; + + absl::optional<base::BatteryLevelProvider::BatteryState> last_battery_state_; + + // The first battery sample is potentially outdated because it is not taken + // upon receiving a notification from the OS. This is used to differentiate + // the first battery discharge histogram sample from the rest as that initial + // one is potentially skewed. + bool is_initial_interval_ = true; +}; + +#endif // CHROME_BROWSER_METRICS_POWER_BATTERY_DISCHARGE_REPORTER_H_
diff --git a/chrome/browser/metrics/power/battery_discharge_reporter_unittest.cc b/chrome/browser/metrics/power/battery_discharge_reporter_unittest.cc new file mode 100644 index 0000000..b40702c3 --- /dev/null +++ b/chrome/browser/metrics/power/battery_discharge_reporter_unittest.cc
@@ -0,0 +1,235 @@ +// Copyright 2021 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/metrics/power/battery_discharge_reporter.h" + +#include <memory> + +#include "base/power_monitor/battery_level_provider.h" +#include "base/power_monitor/battery_state_sampler.h" +#include "base/power_monitor/sampling_event_source.h" +#include "base/strings/strcat.h" +#include "base/test/metrics/histogram_tester.h" +#include "chrome/browser/metrics/power/power_metrics.h" +#include "chrome/browser/metrics/usage_scenario/usage_scenario_data_store.h" +#include "content/public/test/browser_task_environment.h" +#include "testing/gtest/include/gtest/gtest.h" + +namespace { + +constexpr const char* kBatteryDischargeModeHistogramName = + "Power.BatteryDischargeMode3"; +constexpr const char* kBatteryDischargeRateHistogramName = + "Power.BatteryDischargeRate3"; + +constexpr base::TimeDelta kTolerableDrift = base::Seconds(1); +constexpr int kFullBatteryChargeLevel = 10000; +constexpr int kHalfBatteryChargeLevel = 5000; + +absl::optional<base::BatteryLevelProvider::BatteryState> MakeBatteryState( + int current_capacity) { + return base::BatteryLevelProvider::BatteryState{ + .battery_count = 1, + .is_external_power_connected = false, + .current_capacity = current_capacity, + .full_charged_capacity = kFullBatteryChargeLevel, + .charge_unit = base::BatteryLevelProvider::BatteryLevelUnit::kMAh}; +} + +struct HistogramSampleExpectation { + std::string histogram_name_prefix; + base::Histogram::Sample sample; +}; + +// For each histogram named after the combination of prefixes from +// `expectations` and suffixes from `suffixes`, verifies that there is a unique +// sample `expectation.sample`. +void ExpectHistogramSamples( + base::HistogramTester* histogram_tester, + const std::vector<const char*>& suffixes, + const std::vector<HistogramSampleExpectation>& expectations) { + for (const char* suffix : suffixes) { + for (const auto& expectation : expectations) { + std::string histogram_name = + base::StrCat({expectation.histogram_name_prefix, suffix}); + SCOPED_TRACE(histogram_name); + histogram_tester->ExpectUniqueSample(histogram_name, expectation.sample, + 1); + } + } +} + +class NoopSamplingEventSource : public base::SamplingEventSource { + public: + NoopSamplingEventSource() = default; + ~NoopSamplingEventSource() override = default; + + bool Start(SamplingEventCallback callback) override { return true; } +}; + +class NoopBatteryLevelProvider : public base::BatteryLevelProvider { + public: + NoopBatteryLevelProvider() = default; + ~NoopBatteryLevelProvider() override = default; + + void GetBatteryState( + base::OnceCallback<void(const absl::optional<BatteryState>&)> callback) + override {} +}; + +class TestUsageScenarioDataStoreImpl : public UsageScenarioDataStoreImpl { + public: + TestUsageScenarioDataStoreImpl() = default; + TestUsageScenarioDataStoreImpl(const TestUsageScenarioDataStoreImpl& rhs) = + delete; + TestUsageScenarioDataStoreImpl& operator=( + const TestUsageScenarioDataStoreImpl& rhs) = delete; + ~TestUsageScenarioDataStoreImpl() override = default; + + IntervalData ResetIntervalData() override { return fake_data_; } + + private: + IntervalData fake_data_; +}; + +class BatteryDischargeReporterTest : public testing::Test { + public: + BatteryDischargeReporterTest() = default; + BatteryDischargeReporterTest(const BatteryDischargeReporterTest& rhs) = + delete; + BatteryDischargeReporterTest& operator=( + const BatteryDischargeReporterTest& rhs) = delete; + ~BatteryDischargeReporterTest() override = default; + + protected: + content::BrowserTaskEnvironment task_environment_{ + base::test::TaskEnvironment::TimeSource::MOCK_TIME}; + + base::HistogramTester histogram_tester_; +}; + +} // namespace + +TEST_F(BatteryDischargeReporterTest, Simple) { + TestUsageScenarioDataStoreImpl usage_scenario_data_store; + + base::BatteryStateSampler battery_state_sampler( + std::make_unique<NoopSamplingEventSource>(), + std::make_unique<NoopBatteryLevelProvider>()); + BatteryDischargeReporter battery_discharge_reporter( + &battery_state_sampler, &usage_scenario_data_store); + + battery_discharge_reporter.OnBatteryStateSampled( + MakeBatteryState(kHalfBatteryChargeLevel)); + task_environment_.FastForwardBy(base::Minutes(1)); + battery_discharge_reporter.OnBatteryStateSampled( + MakeBatteryState(kHalfBatteryChargeLevel - 10)); + + const int64_t kExpectedDischargeRate = 10; + + const std::vector<const char*> suffixes( + {"", ".Initial", ".ZeroWindow.Initial"}); + ExpectHistogramSamples( + &histogram_tester_, suffixes, + {{kBatteryDischargeModeHistogramName, + static_cast<int64_t>(BatteryDischargeMode::kDischarging)}}); + ExpectHistogramSamples( + &histogram_tester_, suffixes, + {{kBatteryDischargeRateHistogramName, kExpectedDischargeRate}}); +} + +TEST_F(BatteryDischargeReporterTest, BatteryDischargeCaptureIsTooLate) { + TestUsageScenarioDataStoreImpl usage_scenario_data_store; + + base::BatteryStateSampler battery_state_sampler( + std::make_unique<NoopSamplingEventSource>(), + std::make_unique<NoopBatteryLevelProvider>()); + BatteryDischargeReporter battery_discharge_reporter( + &battery_state_sampler, &usage_scenario_data_store); + + battery_discharge_reporter.OnBatteryStateSampled(MakeBatteryState(5000)); + + const base::TimeDelta kTooLate = base::Minutes(1) + kTolerableDrift; + task_environment_.FastForwardBy(kTooLate); + battery_discharge_reporter.OnBatteryStateSampled( + MakeBatteryState(kHalfBatteryChargeLevel - 10)); + + // No rate because the interval is invalid. + histogram_tester_.ExpectUniqueSample(kBatteryDischargeModeHistogramName, + BatteryDischargeMode::kInvalidInterval, + 1); + histogram_tester_.ExpectTotalCount(kBatteryDischargeRateHistogramName, 0); +} + +TEST_F(BatteryDischargeReporterTest, BatteryDischargeCaptureIsLate) { + TestUsageScenarioDataStoreImpl usage_scenario_data_store; + + base::BatteryStateSampler battery_state_sampler( + std::make_unique<NoopSamplingEventSource>(), + std::make_unique<NoopBatteryLevelProvider>()); + BatteryDischargeReporter battery_discharge_reporter( + &battery_state_sampler, &usage_scenario_data_store); + + battery_discharge_reporter.OnBatteryStateSampled( + MakeBatteryState(kHalfBatteryChargeLevel)); + + const base::TimeDelta kLate = + base::Minutes(1) + kTolerableDrift - base::Microseconds(1); + task_environment_.FastForwardBy(kLate); + battery_discharge_reporter.OnBatteryStateSampled( + MakeBatteryState(kHalfBatteryChargeLevel - 10)); + + // No rate because the interval is invalid. + histogram_tester_.ExpectUniqueSample(kBatteryDischargeModeHistogramName, + BatteryDischargeMode::kDischarging, 1); + histogram_tester_.ExpectTotalCount(kBatteryDischargeRateHistogramName, 1); +} + +TEST_F(BatteryDischargeReporterTest, BatteryDischargeCaptureIsTooEarly) { + TestUsageScenarioDataStoreImpl usage_scenario_data_store; + + base::BatteryStateSampler battery_state_sampler( + std::make_unique<NoopSamplingEventSource>(), + std::make_unique<NoopBatteryLevelProvider>()); + BatteryDischargeReporter battery_discharge_reporter( + &battery_state_sampler, &usage_scenario_data_store); + + battery_discharge_reporter.OnBatteryStateSampled( + MakeBatteryState(kHalfBatteryChargeLevel)); + + const base::TimeDelta kTooEarly = base::Minutes(1) - kTolerableDrift; + task_environment_.FastForwardBy(kTooEarly); + battery_discharge_reporter.OnBatteryStateSampled( + MakeBatteryState(kHalfBatteryChargeLevel - 10)); + + // No rate because the interval is invalid. + histogram_tester_.ExpectUniqueSample(kBatteryDischargeModeHistogramName, + BatteryDischargeMode::kInvalidInterval, + 1); + histogram_tester_.ExpectTotalCount(kBatteryDischargeRateHistogramName, 0); +} + +TEST_F(BatteryDischargeReporterTest, BatteryDischargeCaptureIsEarly) { + TestUsageScenarioDataStoreImpl usage_scenario_data_store; + + base::BatteryStateSampler battery_state_sampler( + std::make_unique<NoopSamplingEventSource>(), + std::make_unique<NoopBatteryLevelProvider>()); + BatteryDischargeReporter battery_discharge_reporter( + &battery_state_sampler, &usage_scenario_data_store); + + battery_discharge_reporter.OnBatteryStateSampled( + MakeBatteryState(kHalfBatteryChargeLevel)); + + const base::TimeDelta kEarly = + base::Minutes(1) - kTolerableDrift + base::Microseconds(1); + task_environment_.FastForwardBy(kEarly); + battery_discharge_reporter.OnBatteryStateSampled( + MakeBatteryState(kHalfBatteryChargeLevel - 10)); + + // No rate because the interval is invalid. + histogram_tester_.ExpectUniqueSample(kBatteryDischargeModeHistogramName, + BatteryDischargeMode::kDischarging, 1); + histogram_tester_.ExpectTotalCount(kBatteryDischargeRateHistogramName, 1); +}
diff --git a/chrome/browser/metrics/power/power_metrics.cc b/chrome/browser/metrics/power/power_metrics.cc index a1724aa..701d257 100644 --- a/chrome/browser/metrics/power/power_metrics.cc +++ b/chrome/browser/metrics/power/power_metrics.cc
@@ -21,6 +21,11 @@ constexpr const char* kBatteryDischargeModeHistogramName = "Power.BatteryDischargeMode2"; +constexpr const char* kAlignedBatteryDischargeRateHistogramName = + "Power.BatteryDischargeRate3"; +constexpr const char* kAlignedBatteryDischargeModeHistogramName = + "Power.BatteryDischargeMode3"; + #if BUILDFLAG(IS_MAC) // Reports `proportion` of a time used to a histogram in permyriad (1/100 %). // `proportion` is 0.5 if half a CPU core or half total GPU time is used. It can @@ -134,23 +139,50 @@ return {BatteryDischargeMode::kDischarging, discharge_rate}; } -void ReportBatteryHistograms(base::TimeDelta interval_duration, - BatteryDischarge battery_discharge, - const std::vector<const char*>& suffixes) { - for (const char* suffix : suffixes) { +void ReportBatteryHistograms( + base::TimeDelta interval_duration, + BatteryDischarge battery_discharge, + const std::vector<const char*>& scenario_suffixes) { + for (const char* scenario_suffix : scenario_suffixes) { base::UmaHistogramEnumeration( - base::StrCat({kBatteryDischargeModeHistogramName, suffix}), + base::StrCat({kBatteryDischargeModeHistogramName, scenario_suffix}), battery_discharge.mode); if (battery_discharge.mode == BatteryDischargeMode::kDischarging) { DCHECK(battery_discharge.rate.has_value()); base::UmaHistogramCounts1000( - base::StrCat({kBatteryDischargeRateHistogramName, suffix}), + base::StrCat({kBatteryDischargeRateHistogramName, scenario_suffix}), *battery_discharge.rate); } } } +void ReportAlignedBatteryHistograms( + base::TimeDelta interval_duration, + BatteryDischarge battery_discharge, + bool is_initial_interval, + const std::vector<const char*>& scenario_suffixes) { + const char* interval_type_suffixes[] = { + "", is_initial_interval ? ".Initial" : ".Periodic"}; + + for (const char* scenario_suffix : scenario_suffixes) { + for (const char* interval_type_suffix : interval_type_suffixes) { + base::UmaHistogramEnumeration( + base::StrCat({kAlignedBatteryDischargeModeHistogramName, + scenario_suffix, interval_type_suffix}), + battery_discharge.mode); + + if (battery_discharge.mode == BatteryDischargeMode::kDischarging) { + DCHECK(battery_discharge.rate.has_value()); + base::UmaHistogramCounts1000( + base::StrCat({kAlignedBatteryDischargeRateHistogramName, + scenario_suffix, interval_type_suffix}), + *battery_discharge.rate); + } + } + } +} + #if BUILDFLAG(IS_MAC) void ReportShortIntervalHistograms( const char* scenario_suffix,
diff --git a/chrome/browser/metrics/power/power_metrics.h b/chrome/browser/metrics/power/power_metrics.h index 033d370..c9673630 100644 --- a/chrome/browser/metrics/power/power_metrics.h +++ b/chrome/browser/metrics/power/power_metrics.h
@@ -56,10 +56,19 @@ new_battery_state, base::TimeDelta interval_duration); -// Report battery metrics to histograms with |suffixes|. +// Report battery metrics to histograms with |scenario_suffixes|. void ReportBatteryHistograms(base::TimeDelta interval_duration, BatteryDischarge battery_discharge, - const std::vector<const char*>& suffixes); + const std::vector<const char*>& scenario_suffixes); + +// Report battery metrics to histograms with |scenario_suffixes|. The difference +// with the above version is that when possible, the intervals are aligned with +// battery discharge notifications from the OS (MacOS only for now). +void ReportAlignedBatteryHistograms( + base::TimeDelta interval_duration, + BatteryDischarge battery_discharge, + bool is_initial_interval, + const std::vector<const char*>& scenario_suffixes); #if BUILDFLAG(IS_MAC) void ReportShortIntervalHistograms(
diff --git a/chrome/browser/metrics/power/power_metrics_reporter.cc b/chrome/browser/metrics/power/power_metrics_reporter.cc index 9ecab446..51d2a31 100644 --- a/chrome/browser/metrics/power/power_metrics_reporter.cc +++ b/chrome/browser/metrics/power/power_metrics_reporter.cc
@@ -127,10 +127,6 @@ } #if BUILDFLAG(IS_MAC) - iopm_power_source_sampling_event_source_.Start( - base::BindRepeating(&PowerMetricsReporter::OnIOPMPowerSourceSamplingEvent, - base::Unretained(this))); - coalition_resource_usage_provider_->Init(); #endif @@ -443,31 +439,4 @@ } short_interval_begin_time_ = base::TimeTicks(); } - -void PowerMetricsReporter::OnIOPMPowerSourceSamplingEvent() { - base::TimeTicks now_ticks = base::TimeTicks::Now(); - - if (!last_event_time_ticks_) { - last_event_time_ticks_ = now_ticks; - return; - } - - // The delta is expected to be almost always 60 seconds. Split the buckets for - // 0.2s granularity (10s interval with 50 buckets + 1 underflow bucket + 1 - // overflow bucket) around that value. - base::TimeDelta sampling_event_delta = now_ticks - *last_event_time_ticks_; - base::HistogramBase* histogram = base::LinearHistogram::FactoryTimeGet( - "Power.IOPMPowerSource.SamplingEventDelta", - /*min=*/base::Seconds(55), /*max=*/base::Seconds(65), /*buckets=*/52, - base::HistogramBase::kUmaTargetedHistogramFlag); - histogram->AddTime(sampling_event_delta); - *last_event_time_ticks_ = now_ticks; - - // Same as the above but using a range that starts from zero and significantly - // goes beyond the expected mean time of |sampling_event_delta| (which is 60 - // seconds.). - base::UmaHistogramMediumTimes( - "Power.IOPMPowerSource.SamplingEventDelta.MediumTimes", - sampling_event_delta); -} #endif // BUILDFLAG(IS_MAC)
diff --git a/chrome/browser/metrics/power/power_metrics_reporter.h b/chrome/browser/metrics/power/power_metrics_reporter.h index 77c0813..16c242a 100644 --- a/chrome/browser/metrics/power/power_metrics_reporter.h +++ b/chrome/browser/metrics/power/power_metrics_reporter.h
@@ -20,7 +20,6 @@ #include "third_party/abseil-cpp/absl/types/optional.h" #if BUILDFLAG(IS_MAC) -#include "base/power_monitor/iopm_power_source_sampling_event_source.h" #include "chrome/browser/metrics/power/coalition_resource_usage_provider_mac.h" #endif // BUILDFLAG(IS_MAC) @@ -136,8 +135,6 @@ void MaybeEmitHighCPUTraceEvent( const ScenarioParams& short_interval_scenario_params, const CoalitionResourceUsageRate& coalition_resource_usage_rate); - - void OnIOPMPowerSourceSamplingEvent(); #endif // BUILDFLAG(IS_MAC) raw_ptr<ProcessMonitor> process_monitor_; @@ -164,12 +161,6 @@ // (MaybeEmitHighCPUTraceEvent()). base::TimeTicks short_interval_begin_time_; - base::IOPMPowerSourceSamplingEventSource - iopm_power_source_sampling_event_source_; - - // The time ticks from when the last IOPMPowerSource event was received. - absl::optional<base::TimeTicks> last_event_time_ticks_; - std::unique_ptr<CoalitionResourceUsageProvider> coalition_resource_usage_provider_; #endif // BUILDFLAG(IS_MAC)
diff --git a/chrome/browser/net/load_timing_browsertest.cc b/chrome/browser/net/load_timing_browsertest.cc index f2cff6d..7d65155 100644 --- a/chrome/browser/net/load_timing_browsertest.cc +++ b/chrome/browser/net/load_timing_browsertest.cc
@@ -155,7 +155,7 @@ IN_PROC_BROWSER_TEST_F(LoadTimingBrowserTest, Proxy) { ASSERT_TRUE(embedded_test_server()->Start()); - browser()->profile()->GetPrefs()->Set( + browser()->profile()->GetPrefs()->SetDict( proxy_config::prefs::kProxy, ProxyConfigDictionary::CreateFixedServers( embedded_test_server()->host_port_pair().ToString(), std::string()));
diff --git a/chrome/browser/net/network_context_configuration_browsertest.cc b/chrome/browser/net/network_context_configuration_browsertest.cc index 20e5b9c1f..a96caaae 100644 --- a/chrome/browser/net/network_context_configuration_browsertest.cc +++ b/chrome/browser/net/network_context_configuration_browsertest.cc
@@ -462,9 +462,9 @@ // Sets the proxy preference on a PrefService based on the NetworkContextType, // and waits for it to be applied. void SetProxyPref(const net::HostPortPair& host_port_pair) { - GetPrefService()->Set(proxy_config::prefs::kProxy, - ProxyConfigDictionary::CreateFixedServers( - host_port_pair.ToString(), std::string())); + GetPrefService()->SetDict(proxy_config::prefs::kProxy, + ProxyConfigDictionary::CreateFixedServers( + host_port_pair.ToString(), std::string())); // Wait for the new ProxyConfig to be passed over the pipe. Needed because // Mojo doesn't guarantee ordering of events on different Mojo pipes, and
diff --git a/chrome/browser/net/private_network_access_browsertest.cc b/chrome/browser/net/private_network_access_browsertest.cc index 1a5263da..f604abb 100644 --- a/chrome/browser/net/private_network_access_browsertest.cc +++ b/chrome/browser/net/private_network_access_browsertest.cc
@@ -727,7 +727,7 @@ EXPECT_TRUE( content::NavigateToURL(web_contents(), PublicNonSecureURL(*server))); - browser()->profile()->GetPrefs()->Set( + browser()->profile()->GetPrefs()->SetDict( proxy_config::prefs::kProxy, ProxyConfigDictionary::CreateFixedServers( server->host_port_pair().ToString(), ""));
diff --git a/chrome/browser/notifications/scheduler/internal/display_decider.cc b/chrome/browser/notifications/scheduler/internal/display_decider.cc index 7825272..86ad20d 100644 --- a/chrome/browser/notifications/scheduler/internal/display_decider.cc +++ b/chrome/browser/notifications/scheduler/internal/display_decider.cc
@@ -4,9 +4,8 @@ #include "chrome/browser/notifications/scheduler/internal/display_decider.h" -#include <algorithm> - #include "base/memory/raw_ptr.h" +#include "base/ranges/algorithm.h" #include "base/time/clock.h" #include "chrome/browser/notifications/scheduler/internal/impression_types.h" #include "chrome/browser/notifications/scheduler/internal/notification_entry.h" @@ -101,7 +100,7 @@ // No previous shown notification, move the iterator to last element. // We will iterate through all client types later. - auto it = std::find(clients_.begin(), clients_.end(), last_shown_type_); + auto it = base::ranges::find(clients_, last_shown_type_); if (it == clients_.end()) { DCHECK_EQ(last_shown_type_, SchedulerClientType::kUnknown); last_shown_type_ = clients_.back();
diff --git a/chrome/browser/notifications/scheduler/internal/impression_history_tracker.cc b/chrome/browser/notifications/scheduler/internal/impression_history_tracker.cc index b4d77904..24ebad65 100644 --- a/chrome/browser/notifications/scheduler/internal/impression_history_tracker.cc +++ b/chrome/browser/notifications/scheduler/internal/impression_history_tracker.cc
@@ -4,12 +4,12 @@ #include "chrome/browser/notifications/scheduler/internal/impression_history_tracker.h" -#include <algorithm> #include <utility> #include "base/bind.h" #include "base/callback_helpers.h" #include "base/check_op.h" +#include "base/containers/contains.h" #include "base/cxx17_backports.h" #include "base/notreached.h" #include "chrome/browser/notifications/scheduler/internal/scheduler_utils.h" @@ -211,10 +211,7 @@ // Remove deprecated clients. for (auto it = client_states_.begin(); it != client_states_.end();) { auto client_type = it->first; - bool deprecated = - std::find(registered_clients_.begin(), registered_clients_.end(), - client_type) == registered_clients_.end(); - if (deprecated) { + if (!base::Contains(registered_clients_, client_type)) { store_->Delete(ToDatabaseKey(client_type), base::BindOnce(&stats::LogDbOperation, stats::DatabaseType::kImpressionDb));
diff --git a/chrome/browser/offline_pages/android/auto_fetch_page_load_watcher.cc b/chrome/browser/offline_pages/android/auto_fetch_page_load_watcher.cc index 01a1729..931224f 100644 --- a/chrome/browser/offline_pages/android/auto_fetch_page_load_watcher.cc +++ b/chrome/browser/offline_pages/android/auto_fetch_page_load_watcher.cc
@@ -9,6 +9,7 @@ #include "base/bind.h" #include "base/callback_helpers.h" +#include "base/containers/contains.h" #include "base/memory/ptr_util.h" #include "base/memory/raw_ptr.h" #include "chrome/browser/android/tab_android.h" @@ -55,8 +56,7 @@ for (int index = 0; index < model->GetTabCount(); ++index) { TabAndroid* tab = model->GetTabAt(index); - if (std::find(android_tab_ids.begin(), android_tab_ids.end(), - tab->GetAndroidId()) != android_tab_ids.end()) { + if (base::Contains(android_tab_ids, tab->GetAndroidId())) { result[tab->GetAndroidId()] = AnroidTabInfo(*tab); } }
diff --git a/chrome/browser/password_manager/android/java/src/org/chromium/chrome/browser/password_manager/PasswordManagerErrorMessageHelperBridge.java b/chrome/browser/password_manager/android/java/src/org/chromium/chrome/browser/password_manager/PasswordManagerErrorMessageHelperBridge.java index 52009c4..d2cf6c9 100644 --- a/chrome/browser/password_manager/android/java/src/org/chromium/chrome/browser/password_manager/PasswordManagerErrorMessageHelperBridge.java +++ b/chrome/browser/password_manager/android/java/src/org/chromium/chrome/browser/password_manager/PasswordManagerErrorMessageHelperBridge.java
@@ -11,6 +11,7 @@ import org.chromium.base.TimeUtils; import org.chromium.base.annotations.CalledByNative; import org.chromium.base.metrics.RecordHistogram; +import org.chromium.chrome.browser.flags.ChromeFeatureList; import org.chromium.chrome.browser.preferences.ChromePreferenceKeys; import org.chromium.chrome.browser.preferences.Pref; import org.chromium.chrome.browser.preferences.SharedPreferencesManager; @@ -48,6 +49,11 @@ */ @CalledByNative static boolean shouldShowErrorUi() { + if (ChromeFeatureList.getFieldTrialParamByFeatureAsBoolean( + ChromeFeatureList.UNIFIED_PASSWORD_MANAGER_ERROR_MESSAGES, + "ignore_auth_error_message_timeouts", false)) { + return true; + } PrefService prefService = UserPrefs.get(Profile.getLastUsedRegularProfile()); long lastShownTimestamp = Long.valueOf(prefService.getString(Pref.UPM_ERROR_UI_SHOWN_TIMESTAMP));
diff --git a/chrome/browser/password_manager/android/junit/src/org/chromium/chrome/browser/password_manager/PasswordManagerErrorMessageHelperBridgeTest.java b/chrome/browser/password_manager/android/junit/src/org/chromium/chrome/browser/password_manager/PasswordManagerErrorMessageHelperBridgeTest.java index 3472801..c9a4d57a 100644 --- a/chrome/browser/password_manager/android/junit/src/org/chromium/chrome/browser/password_manager/PasswordManagerErrorMessageHelperBridgeTest.java +++ b/chrome/browser/password_manager/android/junit/src/org/chromium/chrome/browser/password_manager/PasswordManagerErrorMessageHelperBridgeTest.java
@@ -21,6 +21,7 @@ import org.junit.Before; import org.junit.Rule; import org.junit.Test; +import org.junit.rules.TestRule; import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.MockitoAnnotations; @@ -31,6 +32,7 @@ import org.chromium.base.TimeUtils; import org.chromium.base.metrics.RecordHistogram; import org.chromium.base.test.BaseRobolectricTestRunner; +import org.chromium.base.test.util.Features; import org.chromium.base.test.util.JniMocker; import org.chromium.chrome.browser.preferences.ChromePreferenceKeys; import org.chromium.chrome.browser.preferences.Pref; @@ -59,6 +61,9 @@ spy(new FakeAccountManagerFacade()); @Rule + public TestRule mFeaturesProcessorRule = new Features.JUnitProcessor(); + + @Rule public AccountManagerTestRule mAccountManagerTestRule = new AccountManagerTestRule(mFakeAccountManagerFacade);
diff --git a/chrome/browser/pdf/pdf_extension_test.cc b/chrome/browser/pdf/pdf_extension_test.cc index ecbd594..35e28885 100644 --- a/chrome/browser/pdf/pdf_extension_test.cc +++ b/chrome/browser/pdf/pdf_extension_test.cc
@@ -21,6 +21,7 @@ #include "base/memory/raw_ptr.h" #include "base/memory/ref_counted.h" #include "base/path_service.h" +#include "base/ranges/algorithm.h" #include "base/run_loop.h" #include "base/strings/string_piece.h" #include "base/strings/string_util.h" @@ -1587,7 +1588,7 @@ // picked up by the browser zoom, then zoom to the next zoom level. This // ensures the test passes regardless of the initial default zoom level. std::vector<double> preset_zoom_levels = zoom::PageZoom::PresetZoomLevels(0); - auto it = std::find(preset_zoom_levels.begin(), preset_zoom_levels.end(), 0); + auto it = base::ranges::find(preset_zoom_levels, 0); ASSERT_NE(it, preset_zoom_levels.end()); it++; ASSERT_NE(it, preset_zoom_levels.end());
diff --git a/chrome/browser/policy/test/proxy_policies_browsertest.cc b/chrome/browser/policy/test/proxy_policies_browsertest.cc index f806756..7966b7b0 100644 --- a/chrome/browser/policy/test/proxy_policies_browsertest.cc +++ b/chrome/browser/policy/test/proxy_policies_browsertest.cc
@@ -32,9 +32,9 @@ absl::optional<bool> expected_proxy_pac_mandatory, const std::string& expected_proxy_bypass_list, const ProxyPrefs::ProxyMode& expected_proxy_mode) { - const base::Value& value = prefs->GetValue(proxy_config::prefs::kProxy); - ASSERT_TRUE(value.is_dict()); - ProxyConfigDictionary dict(value.Clone()); + const base::Value::Dict& pref_dict = + prefs->GetDict(proxy_config::prefs::kProxy); + ProxyConfigDictionary dict(pref_dict.Clone()); std::string s; bool b; if (expected_proxy_server.empty()) {
diff --git a/chrome/browser/policy/test/web_rtc_local_ips_allowed_urls_policy_browsertest.cc b/chrome/browser/policy/test/web_rtc_local_ips_allowed_urls_policy_browsertest.cc index f44d893..368cca91 100644 --- a/chrome/browser/policy/test/web_rtc_local_ips_allowed_urls_policy_browsertest.cc +++ b/chrome/browser/policy/test/web_rtc_local_ips_allowed_urls_policy_browsertest.cc
@@ -4,6 +4,7 @@ #include "base/values.h" +#include "base/containers/contains.h" #include "chrome/browser/policy/policy_test_utils.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/ui/browser.h" @@ -52,9 +53,7 @@ const auto& expected_urls = GenerateUrlList(); EXPECT_EQ(expected_urls.size(), allowed_urls.size()); for (const auto& allowed_url : allowed_urls) { - auto it = - std::find(expected_urls.begin(), expected_urls.end(), allowed_url); - EXPECT_TRUE(it != expected_urls.end()); + EXPECT_TRUE(base::Contains(expected_urls, allowed_url)); } }
diff --git a/chrome/browser/predictors/autocomplete_action_predictor_unittest.cc b/chrome/browser/predictors/autocomplete_action_predictor_unittest.cc index c514873b7..21177e0c 100644 --- a/chrome/browser/predictors/autocomplete_action_predictor_unittest.cc +++ b/chrome/browser/predictors/autocomplete_action_predictor_unittest.cc
@@ -15,6 +15,7 @@ #include "base/guid.h" #include "base/memory/ref_counted.h" #include "base/no_destructor.h" +#include "base/ranges/algorithm.h" #include "base/run_loop.h" #include "base/strings/string_util.h" #include "base/strings/utf_string_conversions.h" @@ -628,8 +629,7 @@ result.AppendMatches(matches); std::u16string user_text = u"google"; predictor()->RegisterTransitionalMatches(user_text, result); - auto it = std::find(transitional_matches()->begin(), - transitional_matches()->end(), user_text); + auto it = base::ranges::find(*transitional_matches(), user_text); ASSERT_NE(it, transitional_matches()->end()); EXPECT_THAT(it->urls, ::testing::ElementsAre(urls[0], urls[1])); }
diff --git a/chrome/browser/predictors/preconnect_manager_unittest.cc b/chrome/browser/predictors/preconnect_manager_unittest.cc index 6f284ad..b45f918 100644 --- a/chrome/browser/predictors/preconnect_manager_unittest.cc +++ b/chrome/browser/predictors/preconnect_manager_unittest.cc
@@ -10,6 +10,7 @@ #include "base/format_macros.h" #include "base/memory/ref_counted.h" #include "base/memory/weak_ptr.h" +#include "base/ranges/algorithm.h" #include "base/run_loop.h" #include "base/strings/stringprintf.h" #include "base/test/metrics/histogram_tester.h" @@ -160,8 +161,7 @@ private: bool IsHangingHost(const GURL& url) const { - return std::find(hanging_hosts_.begin(), hanging_hosts_.end(), - url.host()) != hanging_hosts_.end(); + return base::Contains(hanging_hosts_, url.host()); } using ResolveHostClientKey = std::pair<std::string, net::NetworkIsolationKey>;
diff --git a/chrome/browser/prefs/chrome_command_line_pref_store.cc b/chrome/browser/prefs/chrome_command_line_pref_store.cc index 0877ad9..add36f4 100644 --- a/chrome/browser/prefs/chrome_command_line_pref_store.cc +++ b/chrome/browser/prefs/chrome_command_line_pref_store.cc
@@ -138,27 +138,29 @@ void ChromeCommandLinePrefStore::ApplyProxyMode() { if (command_line()->HasSwitch(switches::kNoProxyServer)) { - SetValue(proxy_config::prefs::kProxy, ProxyConfigDictionary::CreateDirect(), + SetValue(proxy_config::prefs::kProxy, + base::Value(ProxyConfigDictionary::CreateDirect()), WriteablePrefStore::DEFAULT_PREF_WRITE_FLAGS); } else if (command_line()->HasSwitch(switches::kProxyPacUrl)) { std::string pac_script_url = command_line()->GetSwitchValueASCII(switches::kProxyPacUrl); SetValue(proxy_config::prefs::kProxy, - ProxyConfigDictionary::CreatePacScript(pac_script_url, false), + base::Value( + ProxyConfigDictionary::CreatePacScript(pac_script_url, false)), WriteablePrefStore::DEFAULT_PREF_WRITE_FLAGS); } else if (command_line()->HasSwitch(switches::kProxyAutoDetect)) { SetValue(proxy_config::prefs::kProxy, - ProxyConfigDictionary::CreateAutoDetect(), + base::Value(ProxyConfigDictionary::CreateAutoDetect()), WriteablePrefStore::DEFAULT_PREF_WRITE_FLAGS); } else if (command_line()->HasSwitch(switches::kProxyServer)) { std::string proxy_server = command_line()->GetSwitchValueASCII(switches::kProxyServer); std::string bypass_list = command_line()->GetSwitchValueASCII(switches::kProxyBypassList); - SetValue( - proxy_config::prefs::kProxy, - ProxyConfigDictionary::CreateFixedServers(proxy_server, bypass_list), - WriteablePrefStore::DEFAULT_PREF_WRITE_FLAGS); + SetValue(proxy_config::prefs::kProxy, + base::Value(ProxyConfigDictionary::CreateFixedServers( + proxy_server, bypass_list)), + WriteablePrefStore::DEFAULT_PREF_WRITE_FLAGS); } }
diff --git a/chrome/browser/prefs/chrome_command_line_pref_store_unittest.cc b/chrome/browser/prefs/chrome_command_line_pref_store_unittest.cc index d3e9661..7dbbaf3a 100644 --- a/chrome/browser/prefs/chrome_command_line_pref_store_unittest.cc +++ b/chrome/browser/prefs/chrome_command_line_pref_store_unittest.cc
@@ -41,7 +41,7 @@ const base::Value* value = nullptr; ASSERT_TRUE(GetValue(proxy_config::prefs::kProxy, &value)); ASSERT_TRUE(value->is_dict()); - ProxyConfigDictionary dict(value->Clone()); + ProxyConfigDictionary dict(value->GetDict().Clone()); ProxyPrefs::ProxyMode actual_mode; ASSERT_TRUE(dict.GetMode(&actual_mode)); EXPECT_EQ(expected_mode, actual_mode); @@ -119,7 +119,7 @@ const base::Value* value = nullptr; ASSERT_TRUE(store->GetValue(proxy_config::prefs::kProxy, &value)); ASSERT_TRUE(value->is_dict()); - ProxyConfigDictionary dict(value->Clone()); + ProxyConfigDictionary dict(value->GetDict().Clone()); std::string string_result;
diff --git a/chrome/browser/prefs/proxy_policy_unittest.cc b/chrome/browser/prefs/proxy_policy_unittest.cc index 32e5a41..5791336 100644 --- a/chrome/browser/prefs/proxy_policy_unittest.cc +++ b/chrome/browser/prefs/proxy_policy_unittest.cc
@@ -152,7 +152,7 @@ // there is no policy in effect. std::unique_ptr<PrefService> prefs(CreatePrefService(false)); ProxyConfigDictionary dict( - base::Value(prefs->GetDict(proxy_config::prefs::kProxy).Clone())); + prefs->GetDict(proxy_config::prefs::kProxy).Clone()); assertProxyMode(dict, ProxyPrefs::MODE_FIXED_SERVERS); assertProxyServer(dict, "789"); assertPacUrl(dict, std::string()); @@ -163,7 +163,7 @@ // line and replaced them with the policy versions. prefs = CreatePrefService(true); ProxyConfigDictionary dict2( - base::Value(prefs->GetDict(proxy_config::prefs::kProxy).Clone())); + prefs->GetDict(proxy_config::prefs::kProxy).Clone()); assertProxyMode(dict2, ProxyPrefs::MODE_FIXED_SERVERS); assertProxyServer(dict2, "ghi"); assertPacUrl(dict2, std::string()); @@ -183,7 +183,7 @@ // there is no policy in effect. std::unique_ptr<PrefService> prefs = CreatePrefService(false); ProxyConfigDictionary dict( - base::Value(prefs->GetDict(proxy_config::prefs::kProxy).Clone())); + prefs->GetDict(proxy_config::prefs::kProxy).Clone()); assertProxyMode(dict, ProxyPrefs::MODE_FIXED_SERVERS); assertProxyServer(dict, "789"); assertPacUrl(dict, std::string()); @@ -195,7 +195,7 @@ // set in policy. prefs = CreatePrefService(true); ProxyConfigDictionary dict2( - base::Value(prefs->GetDict(proxy_config::prefs::kProxy).Clone())); + prefs->GetDict(proxy_config::prefs::kProxy).Clone()); assertProxyModeWithoutParams(dict2, ProxyPrefs::MODE_AUTO_DETECT); } @@ -211,7 +211,7 @@ // there is no policy in effect. std::unique_ptr<PrefService> prefs = CreatePrefService(false); ProxyConfigDictionary dict( - base::Value(prefs->GetDict(proxy_config::prefs::kProxy).Clone())); + prefs->GetDict(proxy_config::prefs::kProxy).Clone()); assertProxyModeWithoutParams(dict, ProxyPrefs::MODE_DIRECT); // Try a second time time with the managed PrefStore in place, the @@ -219,7 +219,7 @@ // in place with the appropriate default value for this to work. prefs = CreatePrefService(true); ProxyConfigDictionary dict2( - base::Value(prefs->GetDict(proxy_config::prefs::kProxy).Clone())); + prefs->GetDict(proxy_config::prefs::kProxy).Clone()); assertProxyModeWithoutParams(dict2, ProxyPrefs::MODE_AUTO_DETECT); } @@ -235,7 +235,7 @@ // PrefStore. std::unique_ptr<PrefService> prefs = CreatePrefService(false); ProxyConfigDictionary dict( - base::Value(prefs->GetDict(proxy_config::prefs::kProxy).Clone())); + prefs->GetDict(proxy_config::prefs::kProxy).Clone()); assertProxyModeWithoutParams(dict, ProxyPrefs::MODE_AUTO_DETECT); // Try a second time time with the managed PrefStore in place, the @@ -243,7 +243,7 @@ // in place with the appropriate default value for this to work. prefs = CreatePrefService(true); ProxyConfigDictionary dict2( - base::Value(prefs->GetDict(proxy_config::prefs::kProxy).Clone())); + prefs->GetDict(proxy_config::prefs::kProxy).Clone()); assertProxyModeWithoutParams(dict2, ProxyPrefs::MODE_DIRECT); }
diff --git a/chrome/browser/printing/pdf_to_emf_converter.cc b/chrome/browser/printing/pdf_to_emf_converter.cc index fda0e0a..2450219 100644 --- a/chrome/browser/printing/pdf_to_emf_converter.cc +++ b/chrome/browser/printing/pdf_to_emf_converter.cc
@@ -26,6 +26,7 @@ #include "chrome/browser/printing/printing_service.h" #include "chrome/services/printing/public/mojom/pdf_to_emf_converter.mojom.h" #include "chrome/services/printing/public/mojom/printing_service.mojom.h" +#include "components/device_event_log/device_event_log.h" #include "content/public/browser/browser_thread.h" #include "content/public/browser/child_process_data.h" #include "mojo/public/cpp/bindings/pending_remote.h" @@ -134,7 +135,7 @@ void RecordConversionMetrics(); - PdfRenderSettings settings_; + const PdfRenderSettings settings_; // Document loaded callback. PdfConverter::StartCallback start_callback_; @@ -225,6 +226,7 @@ return; } + PRINTER_LOG(EVENT) << "PdfConverter created. Mode: " << settings_.mode; memcpy(memory.mapping.memory(), data->front(), data->size()); GetPrintingService()->BindPdfToEmfConverterFactory(
diff --git a/chrome/browser/profiles/profile_manager.cc b/chrome/browser/profiles/profile_manager.cc index 5816e2a..9172ab3b 100644 --- a/chrome/browser/profiles/profile_manager.cc +++ b/chrome/browser/profiles/profile_manager.cc
@@ -28,6 +28,7 @@ #include "base/metrics/user_metrics.h" #include "base/no_destructor.h" #include "base/observer_list.h" +#include "base/ranges/algorithm.h" #include "base/strings/string_number_conversions.h" #include "base/strings/string_util.h" #include "base/strings/utf_string_conversions.h" @@ -2413,8 +2414,7 @@ DCHECK(profile); if (!profile->IsOffTheRecord() && !browser->is_type_app() && --browser_counts_[profile] == 0) { - active_profiles_.erase( - std::find(active_profiles_.begin(), active_profiles_.end(), profile)); + active_profiles_.erase(base::ranges::find(active_profiles_, profile)); if (!closing_all_browsers_) SaveActiveProfiles(); }
diff --git a/chrome/browser/renderer_context_menu/render_view_context_menu_unittest.cc b/chrome/browser/renderer_context_menu/render_view_context_menu_unittest.cc index 1097386..fff29c87 100644 --- a/chrome/browser/renderer_context_menu/render_view_context_menu_unittest.cc +++ b/chrome/browser/renderer_context_menu/render_view_context_menu_unittest.cc
@@ -527,6 +527,17 @@ return browser_.get(); } + Browser* GetPwaBrowser() { + if (!browser_) { + Browser::CreateParams create_params(Browser::Type::TYPE_APP, profile(), + true); + auto test_window = std::make_unique<TestBrowserWindow>(); + create_params.window = test_window.get(); + browser_.reset(Browser::Create(create_params)); + } + return browser_.get(); + } + private: std::unique_ptr<custom_handlers::ProtocolHandlerRegistry> registry_; std::unique_ptr<ScopedTestingLocalState> testing_local_state_; @@ -1047,6 +1058,93 @@ IDC_CONTENT_CONTEXT_AUTOFILL_CUSTOM_LAST)); } +// Verify that the Lens Image Search menu item is disabled on non-image content +TEST_F(RenderViewContextMenuPrefsTest, LensImageSearchNonImage) { + base::test::ScopedFeatureList features; + features.InitAndEnableFeature(lens::features::kLensStandalone); + SetUserSelectedDefaultSearchProvider("https://www.google.com", + /*supports_image_search=*/true); + content::ContextMenuParams params = CreateParams(MenuItem::PAGE); + TestRenderViewContextMenu menu(*web_contents()->GetPrimaryMainFrame(), + params); + menu.SetBrowser(GetBrowser()); + menu.Init(); + + EXPECT_FALSE(menu.IsItemPresent(IDC_CONTENT_CONTEXT_SEARCHWEBFORIMAGE)); + EXPECT_FALSE(menu.IsItemPresent(IDC_CONTENT_CONTEXT_SEARCHLENSFORIMAGE)); +} + +// Verify that the Lens Image Search menu item is enabled on image content +TEST_F(RenderViewContextMenuPrefsTest, LensImageSearchEnabled) { + base::test::ScopedFeatureList features; + features.InitAndEnableFeature(lens::features::kLensStandalone); + SetUserSelectedDefaultSearchProvider("https://www.google.com", + /*supports_image_search=*/true); + content::ContextMenuParams params = CreateParams(MenuItem::IMAGE); + params.has_image_contents = true; + TestRenderViewContextMenu menu(*web_contents()->GetPrimaryMainFrame(), + params); + menu.SetBrowser(GetBrowser()); + menu.Init(); + + EXPECT_FALSE(menu.IsItemPresent(IDC_CONTENT_CONTEXT_SEARCHWEBFORIMAGE)); + EXPECT_TRUE(menu.IsItemPresent(IDC_CONTENT_CONTEXT_SEARCHLENSFORIMAGE)); +} + +// Verify that the Lens Image Search menu item is enabled for Progressive Web +// Apps +TEST_F(RenderViewContextMenuPrefsTest, LensImageSearchForProgressiveWebApp) { + base::test::ScopedFeatureList features; + features.InitAndEnableFeature(lens::features::kLensStandalone); + SetUserSelectedDefaultSearchProvider("https://www.google.com", + /*supports_image_search=*/true); + content::ContextMenuParams params = CreateParams(MenuItem::IMAGE); + params.has_image_contents = true; + TestRenderViewContextMenu menu(*web_contents()->GetPrimaryMainFrame(), + params); + menu.SetBrowser(GetPwaBrowser()); + menu.Init(); + + EXPECT_FALSE(menu.IsItemPresent(IDC_CONTENT_CONTEXT_SEARCHWEBFORIMAGE)); + EXPECT_TRUE(menu.IsItemPresent(IDC_CONTENT_CONTEXT_SEARCHLENSFORIMAGE)); +} + +// Verify that the Lens Image Search menu item is enabled for third-party +// default search engines that support image search. +TEST_F(RenderViewContextMenuPrefsTest, LensImageSearchEnabledFor3pDse) { + base::test::ScopedFeatureList features; + features.InitAndEnableFeature(lens::features::kLensStandalone); + SetUserSelectedDefaultSearchProvider("https://www.bing.com", + /*supports_image_search=*/true); + content::ContextMenuParams params = CreateParams(MenuItem::IMAGE); + params.has_image_contents = true; + TestRenderViewContextMenu menu(*web_contents()->GetPrimaryMainFrame(), + params); + menu.SetBrowser(GetBrowser()); + menu.Init(); + + EXPECT_TRUE(menu.IsItemPresent(IDC_CONTENT_CONTEXT_SEARCHWEBFORIMAGE)); + EXPECT_FALSE(menu.IsItemPresent(IDC_CONTENT_CONTEXT_SEARCHLENSFORIMAGE)); +} + +// Verify that the Lens Image Search menu item is disabled for third-part +// default search engines that do not support image search. +TEST_F(RenderViewContextMenuPrefsTest, LensImageSearchDisabledFor3pDse) { + base::test::ScopedFeatureList features; + features.InitAndEnableFeature(lens::features::kLensStandalone); + SetUserSelectedDefaultSearchProvider("https://www.yahoo.com", + /*supports_image_search=*/false); + content::ContextMenuParams params = CreateParams(MenuItem::IMAGE); + params.has_image_contents = true; + TestRenderViewContextMenu menu(*web_contents()->GetPrimaryMainFrame(), + params); + menu.SetBrowser(GetBrowser()); + menu.Init(); + + EXPECT_FALSE(menu.IsItemPresent(IDC_CONTENT_CONTEXT_SEARCHWEBFORIMAGE)); + EXPECT_FALSE(menu.IsItemPresent(IDC_CONTENT_CONTEXT_SEARCHLENSFORIMAGE)); +} + #if BUILDFLAG(GOOGLE_CHROME_BRANDING) // Verify that the Lens Region Search menu item is displayed when the feature // is enabled. @@ -1234,6 +1332,22 @@ EXPECT_FALSE(menu.IsItemPresent(IDC_CONTENT_CONTEXT_LENS_REGION_SEARCH)); } +// Verify that the Lens Region Search menu item is enabled for Progressive Web +// Apps +TEST_F(RenderViewContextMenuPrefsTest, LensRegionSearchProgressiveWebApp) { + base::test::ScopedFeatureList features; + features.InitAndEnableFeature(lens::features::kLensStandalone); + SetUserSelectedDefaultSearchProvider("https://www.google.com", + /*supports_image_search=*/true); + content::ContextMenuParams params = CreateParams(MenuItem::PAGE); + TestRenderViewContextMenu menu(*web_contents()->GetPrimaryMainFrame(), + params); + menu.SetBrowser(GetPwaBrowser()); + menu.Init(); + + EXPECT_TRUE(menu.IsItemPresent(IDC_CONTENT_CONTEXT_LENS_REGION_SEARCH)); +} + #endif // Test FormatUrlForClipboard behavior
diff --git a/chrome/browser/resources/BUILD.gn b/chrome/browser/resources/BUILD.gn index a1ec5de..19d04538 100644 --- a/chrome/browser/resources/BUILD.gn +++ b/chrome/browser/resources/BUILD.gn
@@ -129,7 +129,6 @@ deps += [ "gaia_auth_host:closure_compile", "image_editor:closure_compile", - "inline_login:closure_compile", ] } if (is_chromeos_ash) {
diff --git a/chrome/browser/resources/chromeos/arc_account_picker/arc_account_picker_app.d.ts b/chrome/browser/resources/chromeos/arc_account_picker/arc_account_picker_app.d.ts new file mode 100644 index 0000000..c80deac --- /dev/null +++ b/chrome/browser/resources/chromeos/arc_account_picker/arc_account_picker_app.d.ts
@@ -0,0 +1,13 @@ +// 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. + +export interface ArcAccountPickerAppElement extends HTMLElement { + loadAccounts(): Promise<boolean>; +} + +declare global { + interface HTMLElementTagNameMap { + 'arc-account-picker-app': ArcAccountPickerAppElement; + } +}
diff --git a/chrome/browser/resources/chromeos/arc_account_picker/arc_util.d.ts b/chrome/browser/resources/chromeos/arc_account_picker/arc_util.d.ts new file mode 100644 index 0000000..d53241f --- /dev/null +++ b/chrome/browser/resources/chromeos/arc_account_picker/arc_util.d.ts
@@ -0,0 +1,11 @@ +// 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. + +interface AccountAdditionOptions { + isAvailableInArc: boolean; + showArcAvailabilityPicker: boolean; +} + +export function getAccountAdditionOptionsFromJSON(json: string|null): + AccountAdditionOptions|null;
diff --git a/chrome/browser/resources/gaia_auth_host/authenticator.d.ts b/chrome/browser/resources/gaia_auth_host/authenticator.d.ts new file mode 100644 index 0000000..995cb48 --- /dev/null +++ b/chrome/browser/resources/gaia_auth_host/authenticator.d.ts
@@ -0,0 +1,86 @@ +// 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. + +/** + * @fileoverview Minimal TypeScript definitions to satisfy cases where + * authenticator.js is used from TypeScript files. + */ + +import {PasswordAttributes} from './saml_password_attributes.js'; + +export interface SyncTrustedVaultKey { + keyMaterial: ArrayBuffer; + version: number; +} + +export interface SyncTrustedRecoveryMethod { + publicKey: ArrayBuffer; + type: number; +} + +export interface SyncTrustedVaultKeys { + obfuscatedGaiaId: string; + encryptionKeys: SyncTrustedVaultKey[]; + trustedRecoveryMethods: SyncTrustedRecoveryMethod[]; +} + +export interface AuthCompletedCredentials { + chooseWhatToSync: boolean; + email: string; + gaiaId: string; + passwordAttributes: PasswordAttributes; + password: string; + publicSAML: boolean; + services: any[]; + sessionIndex: string; + skipForNow: boolean; + syncTrustedVaultKeys: SyncTrustedVaultKeys; + trusted: boolean; + usingSAML: boolean; + isAvailableInArc?: boolean; +} + +export interface AuthParams { + authMode: AuthMode; + clientId: string; + constrained: string; + dontResizeNonEmbeddedPages: boolean; + emailDomain: string; + email: string; + enableGaiaActionButtons: boolean; + enterpriseEnrollmentDomain: string; + extractSamlPasswordAttributes: boolean; + flow: string; + gaiaPath: string; + gaiaUrl: string; + hl: string; + ignoreCrOSIdpSetting: boolean; + isDeviceOwner: boolean; + isLoginPrimaryAccount: boolean; + isSupervisedUser: boolean; + platformVersion: string; + readOnlyEmail: boolean; + samlAclUrl: string; + service: string; + showTos: string; + ssoProfile: string; + urlParameterToAutofillSAMLUsername: string; +} + +export enum AuthMode { + DEFAULT = 0, + OFFLINE = 1, + DESKTOP = 2, +} + +export enum AuthFlow { + DEFAULT = 0, + SAML = 0, +} + +export class Authenticator extends EventTarget { + constructor(webview: HTMLElement|string); + getAccountsResponse(accounts: string[]): void; + load(authMode: AuthMode, data: AuthParams): void; +}
diff --git a/chrome/browser/resources/gaia_auth_host/saml_password_attributes.d.ts b/chrome/browser/resources/gaia_auth_host/saml_password_attributes.d.ts new file mode 100644 index 0000000..fdcd8da --- /dev/null +++ b/chrome/browser/resources/gaia_auth_host/saml_password_attributes.d.ts
@@ -0,0 +1,9 @@ +// 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. + +export class PasswordAttributes { + modifiedTime: string; + expirationTime: string; + passwordChangeUrl: string; +}
diff --git a/chrome/browser/resources/inline_login/BUILD.gn b/chrome/browser/resources/inline_login/BUILD.gn index 7033c60d..2db4aa7 100644 --- a/chrome/browser/resources/inline_login/BUILD.gn +++ b/chrome/browser/resources/inline_login/BUILD.gn
@@ -3,183 +3,42 @@ # found in the LICENSE file. import("//chrome/browser/buildflags.gni") +import("//chrome/browser/resources/tools/build_webui.gni") import("//chrome/common/features.gni") -import("//third_party/closure_compiler/compile_js.gni") -import("//tools/grit/grit_rule.gni") -import("//tools/grit/preprocess_if_expr.gni") -import("//tools/polymer/html_to_wrapper.gni") -import("//ui/webui/resources/tools/generate_grd.gni") assert(!is_android) -preprocess_folder = "preprocessed" -preprocess_manifest = "${target_gen_dir}/preprocessed_manifest.json" -preprocess_gen_manifest = "${target_gen_dir}/preprocessed_gen_manifest.json" - -non_web_component_files = [ "inline_login_browser_proxy.js" ] - -web_component_files = [ "inline_login_app.js" ] - -if (is_chromeos_ash) { - web_component_files += [ - "signin_blocked_by_policy_page.js", - "signin_error_page.js", - "welcome_page_app.js", - ] -} - -# Files that are passed as input to html_to_wrapper(). -html_files = [] -foreach(f, web_component_files) { - html_files += [ string_replace(f, ".js", ".html") ] -} - -# Files that are generated by html_to_wrapper(). -html_wrapper_files = [] -foreach(f, html_files) { - html_wrapper_files += [ f + ".js" ] -} - -group("components") { - deps = [ - ":html_wrapper_files", - ":preprocess", - ":preprocess_generated", - ] -} - -preprocess_if_expr("preprocess") { - out_folder = "$target_gen_dir/$preprocess_folder" - out_manifest = preprocess_manifest - in_files = non_web_component_files + web_component_files -} - -preprocess_if_expr("preprocess_generated") { - deps = [ ":html_wrapper_files" ] - in_folder = target_gen_dir - out_folder = "$target_gen_dir/$preprocess_folder" - out_manifest = preprocess_gen_manifest - in_files = html_wrapper_files -} - -generate_grd("build_grd") { +build_webui("build") { grd_prefix = "inline_login" - out_grd = "$target_gen_dir/resources.grd" - deps = [ - ":preprocess", - ":preprocess_generated", - ] - manifest_files = [ - preprocess_manifest, - preprocess_gen_manifest, - ] - input_files = [ "inline_login.html" ] - input_files_base_dir = rebase_path(".", "//") -} + static_files = [ "inline_login.html" ] -grit("resources") { - defines = chrome_grit_defines + web_component_files = [ "inline_login_app.ts" ] - enable_input_discovery_for_gn_analyze = false - source = "$target_gen_dir/resources.grd" - deps = [ ":build_grd" ] - - outputs = [ - "grit/inline_login_resources.h", - "grit/inline_login_resources_map.cc", - "grit/inline_login_resources_map.h", - "inline_login_resources.pak", - ] - output_dir = "$root_gen_dir/chrome" -} - -js_type_check("closure_compile") { - is_polymer3 = true - closure_flags = default_closure_args + [ - "js_module_root=" + - rebase_path("//chrome/browser/resources/inline_login/", - root_build_dir), - "js_module_root=./gen/chrome/browser/resources/inline_login/", - "js_module_root=./gen/chrome/browser/resources/inline_login/preprocessed/", - "js_module_root=" + - rebase_path("//chrome/browser/resources/", - root_build_dir), - "js_module_root=./gen/chrome/browser/resources/", - ] - deps = [ - ":inline_login_app", - ":inline_login_browser_proxy", - ] if (is_chromeos_ash) { - deps += [ - ":signin_blocked_by_policy_page", - ":signin_error_page", - ":welcome_page_app", + web_component_files += [ + "signin_blocked_by_policy_page.ts", + "signin_error_page.ts", + "welcome_page_app.ts", ] } -} -js_library("inline_login_app") { - sources = [ "$target_gen_dir/$preprocess_folder/inline_login_app.js" ] - deps = [ - ":inline_login_browser_proxy", - "//chrome/browser/resources/gaia_auth_host:authenticator", - "//third_party/polymer/v3_0/components-chromium/paper-spinner:paper-spinner-lite", - "//third_party/polymer/v3_0/components-chromium/polymer:polymer_bundled", - "//ui/webui/resources/cr_elements:i18n_behavior", - "//ui/webui/resources/cr_elements:web_ui_listener_behavior", - "//ui/webui/resources/js:assert", - "//ui/webui/resources/js:load_time_data.m", + non_web_component_files = [ "inline_login_browser_proxy.ts" ] + + ts_definitions = [ "//tools/typescript/definitions/chrome_send.d.ts" ] + ts_deps = [ + "//third_party/polymer/v3_0:library", + "//ui/webui/resources:library", ] + + ts_path_mappings = + [ "chrome://chrome-signin/gaia_auth_host/*|" + + rebase_path("//chrome/browser/resources/gaia_auth_host/*", + target_gen_dir) ] if (is_chromeos_ash) { - deps += [ - ":signin_blocked_by_policy_page", - ":signin_error_page", - ":welcome_page_app", - "//chrome/browser/resources/chromeos/arc_account_picker:arc_account_picker_app", - "//chrome/browser/resources/chromeos/arc_account_picker:arc_util", - ] + ts_path_mappings += + [ "chrome://chrome-signin/arc_account_picker/*|" + + rebase_path( + "//chrome/browser/resources/chromeos/arc_account_picker/*", + target_gen_dir) ] } - externs_list = [ - "$externs_path/webview_tag.js", - "//ui/webui/resources/cr_elements/cr_view_manager/cr_view_manager_externs.js", - ] - extra_deps = [ ":preprocess" ] -} - -js_library("welcome_page_app") { - deps = [ - "//third_party/polymer/v3_0/components-chromium/polymer:polymer_bundled", - "//ui/webui/resources/cr_elements:i18n_behavior", - "//ui/webui/resources/js:load_time_data.m", - ] -} - -js_library("signin_blocked_by_policy_page") { - deps = [ - "//third_party/polymer/v3_0/components-chromium/polymer:polymer_bundled", - "//ui/webui/resources/js:load_time_data.m", - ] -} - -js_library("signin_error_page") { - deps = [ - "//third_party/polymer/v3_0/components-chromium/polymer:polymer_bundled", - ] -} - -js_library("inline_login_browser_proxy") { - sources = - [ "$target_gen_dir/$preprocess_folder/inline_login_browser_proxy.js" ] - deps = [ - "//chrome/browser/resources/gaia_auth_host:authenticator", - "//ui/webui/resources/js:cr.m", - ] - externs_list = [ "$externs_path/chrome_send.js" ] - extra_deps = [ ":preprocess" ] -} - -html_to_wrapper("html_wrapper_files") { - use_js = true - in_files = html_files }
diff --git a/chrome/browser/resources/inline_login/inline_login_app.html b/chrome/browser/resources/inline_login/inline_login_app.html index 6477876..8fd1098 100644 --- a/chrome/browser/resources/inline_login/inline_login_app.html +++ b/chrome/browser/resources/inline_login/inline_login_app.html
@@ -128,7 +128,7 @@ <cr-button class="next-button action-button" aria-label="[[getNextButtonLabel_(currentView_, isArcAccountRestrictionsEnabled_)]]" - on-tap="onOkButtonClick_" + on-click="onOkButtonClick_" hidden$="[[!shouldShowOkButton_(currentView_)]]"> [[getNextButtonLabel_(currentView_, isArcAccountRestrictionsEnabled_)]] </cr-button>
diff --git a/chrome/browser/resources/inline_login/inline_login_app.js b/chrome/browser/resources/inline_login/inline_login_app.ts similarity index 63% rename from chrome/browser/resources/inline_login/inline_login_app.js rename to chrome/browser/resources/inline_login/inline_login_app.ts index 1bb347c..070b44fc 100644 --- a/chrome/browser/resources/inline_login/inline_login_app.js +++ b/chrome/browser/resources/inline_login/inline_login_app.ts
@@ -8,24 +8,28 @@ import 'chrome://resources/polymer/v3_0/iron-icon/iron-icon.js'; import 'chrome://resources/cr_elements/cr_view_manager/cr_view_manager.js'; -import {I18nBehavior, I18nBehaviorInterface} from 'chrome://resources/cr_elements/i18n_behavior.js'; -import {loadTimeData} from 'chrome://resources/js/load_time_data.m.js'; -import {isRTL} from 'chrome://resources/js/util.js'; -import {WebUIListenerBehavior, WebUIListenerBehaviorInterface} from 'chrome://resources/cr_elements/web_ui_listener_behavior.js'; -import {mixinBehaviors, PolymerElement} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js'; - // <if expr="chromeos_ash"> -import './arc_account_picker/arc_account_picker_app.js'; +import 'chrome://chrome-signin/arc_account_picker/arc_account_picker_app.js'; import './gaia_action_buttons/gaia_action_buttons.js'; import './signin_blocked_by_policy_page.js'; import './signin_error_page.js'; import './welcome_page_app.js'; import './strings.m.js'; -import {getAccountAdditionOptionsFromJSON} from './arc_account_picker/arc_util.js'; -import {WelcomePageAppElement} from './welcome_page_app.js'; // </if> -import {AuthCompletedCredentials, Authenticator, AuthParams} from './gaia_auth_host/authenticator.js'; +import {CrViewManagerElement} from 'chrome://resources/cr_elements/cr_view_manager/cr_view_manager.js'; +import {I18nMixin} from 'chrome://resources/cr_elements/i18n_mixin.js'; +import {WebUIListenerMixin} from 'chrome://resources/cr_elements/web_ui_listener_mixin.js'; +import {isRTL} from 'chrome://resources/js/util.js'; +import {PolymerElement} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js'; +import {assert} from 'chrome://resources/js/assert_ts.js'; + +// <if expr="chromeos_ash"> +import {loadTimeData} from 'chrome://resources/js/load_time_data.m.js'; +import {getAccountAdditionOptionsFromJSON} from 'chrome://chrome-signin/arc_account_picker/arc_util.js'; +// </if> + +import {AuthCompletedCredentials, Authenticator, AuthParams} from 'chrome://chrome-signin/gaia_auth_host/authenticator.js'; import {getTemplate} from './inline_login_app.html.js'; import {InlineLoginBrowserProxy, InlineLoginBrowserProxyImpl} from './inline_login_browser_proxy.js'; @@ -34,26 +38,46 @@ * Chrome desktop (Windows only). */ -/** @enum {string} */ -export const View = { - ADD_ACCOUNT: 'addAccount', - SIGNIN_BLOCKED_BY_POLICY: 'signinBlockedByPolicy', - SIGNIN_ERROR: 'signinError', - WELCOME: 'welcome', - ARC_ACCOUNT_PICKER: 'arcAccountPicker', -}; +export enum View { + ADD_ACCOUNT = 'addAccount', + // <if expr="chromeos_ash"> + ARC_ACCOUNT_PICKER = 'arcAccountPicker', + SIGNIN_BLOCKED_BY_POLICY = 'signinBlockedByPolicy', + SIGNIN_ERROR = 'signinError', + WELCOME = 'welcome', + // </if> +} +interface NewWindowProperties { + targetUrl: string; + window: { + discard(): void, + }; +} -/** - * @constructor - * @extends {PolymerElement} - * @implements {WebUIListenerBehaviorInterface} - * @implements {I18nBehaviorInterface} - */ -const InlineLoginAppElementBase = - mixinBehaviors([WebUIListenerBehavior, I18nBehavior], PolymerElement); +interface WebViewElement extends HTMLElement { + canGoBack(): boolean; + back(): void; +} -/** @polymer */ +// <if expr="chromeos_ash"> +interface SigninErrorPageData { + email: string; + hostedDomain: string; + signinBlockedByPolicy: boolean; + deviceType: string; +} +// </if> + +export interface InlineLoginAppElement { + $: { + signinFrame: WebViewElement, + viewManager: CrViewManagerElement, + }; +} + +const InlineLoginAppElementBase = WebUIListenerMixin(I18nMixin(PolymerElement)); + export class InlineLoginAppElement extends InlineLoginAppElementBase { static get is() { return 'inline-login-app'; @@ -73,7 +97,6 @@ /** * Indicates whether the page is loading. - * @private {boolean} */ loading_: { type: Boolean, @@ -82,7 +105,6 @@ /** * Indicates whether the account is being verified. - * @private {boolean} */ verifyingAccount_: { type: Boolean, @@ -91,7 +113,6 @@ /** * The auth extension host instance. - * @private {?Authenticator} */ authExtHost_: { type: Object, @@ -101,7 +122,6 @@ // <if expr="chromeos_ash"> /* * True if welcome page should not be shown. - * @private */ shouldSkipWelcomePage_: { type: Boolean, @@ -113,7 +133,6 @@ /* * True if `kArcAccountRestrictions` feature is enabled. - * @private */ isArcAccountRestrictionsEnabled_: { type: Boolean, @@ -125,7 +144,6 @@ /* * True if the dialog is open for reauthentication. - * @private */ isReauthentication_: { type: Boolean, @@ -134,7 +152,6 @@ /* * True if the account should be available in ARC++ after addition. - * @private */ isAvailableInArc_: { type: Boolean, @@ -143,20 +160,16 @@ /** * User's email used in the sign-in flow. - * @private {string} */ email_: {type: String, value: ''}, /** * Hosted domain of the user's email used in the sign-in flow. - * @private {string} */ hostedDomain_: {type: String, value: ''}, /** - * @return {boolean} True if secondary account sign-ins are allowed, false - * otherwise. - * @private + * Whether secondary account sign-ins are allowed. */ isSecondaryGoogleAccountSigninAllowed_: { type: Boolean, @@ -168,7 +181,6 @@ /** * Id of the screen that is currently displayed. - * @private {View} */ currentView_: { type: String, @@ -177,23 +189,29 @@ }; } - /** @override */ - constructor() { - super(); + private loading_: boolean; + private verifyingAccount_: boolean; + private authExtHost_: Authenticator|null; - /** - * Whether the login UI is loaded for signing in primary account. - * @private {boolean} - */ - this.isLoginPrimaryAccount_ = false; + // <if expr="chromeos_ash"> + private shouldSkipWelcomePage_: boolean; + private isArcAccountRestrictionsEnabled_: boolean; + private isReauthentication_: boolean; + private isAvailableInArc_: boolean; + private email_: string; + private hostedDomain_: string; + private isSecondaryGoogleAccountSigninAllowed_: boolean; + // </if> + private currentView_: View; - /** @private {InlineLoginBrowserProxy} */ - this.browserProxy_ = InlineLoginBrowserProxyImpl.getInstance(); - } + /** Whether the login UI is loaded for signing in primary account. */ + private isLoginPrimaryAccount_: boolean = false; - /** @override */ - ready() { + private browserProxy_: InlineLoginBrowserProxy = + InlineLoginBrowserProxyImpl.getInstance(); + + override ready() { super.ready(); // <if expr="chromeos_ash"> @@ -207,66 +225,53 @@ } // </if> - this.authExtHost_ = new Authenticator( - /** @type {!WebView} */ (this.$.signinFrame)); + this.authExtHost_ = new Authenticator(this.$.signinFrame); this.addAuthExtHostListeners_(); this.browserProxy_.initialize(); } - /** @override */ - connectedCallback() { + override connectedCallback() { super.connectedCallback(); this.addWebUIListener( - 'load-auth-extension', data => this.loadAuthExtension_(data)); + 'load-auth-extension', + (data: AuthParams) => this.loadAuthExtension_(data)); this.addWebUIListener( - 'send-lst-fetch-results', arg => this.sendLSTFetchResults_(arg)); + 'send-lst-fetch-results', + (arg: string) => this.sendLSTFetchResults_(arg)); this.addWebUIListener('close-dialog', () => this.closeDialog_()); // <if expr="chromeos_ash"> this.addWebUIListener( - 'show-signin-error-page', data => this.signinErrorShowView_(data)); + 'show-signin-error-page', + (data: SigninErrorPageData) => this.signinErrorShowView_(data)); // </if> } - /** @private */ - addAuthExtHostListeners_() { + private addAuthExtHostListeners_() { + assert(this.authExtHost_); this.authExtHost_.addEventListener( - 'dropLink', - e => this.onDropLink_( - /** @type {!CustomEvent<string>} */ (e))); + 'dropLink', e => this.onDropLink_(e as CustomEvent<string>)); this.authExtHost_.addEventListener( 'newWindow', - e => this.onNewWindow_( - /** @type {!CustomEvent<NewWindowProperties>} */ (e))); + e => this.onNewWindow_(e as CustomEvent<NewWindowProperties>)); this.authExtHost_.addEventListener('ready', () => this.onAuthReady_()); this.authExtHost_.addEventListener( - 'resize', - e => this.onResize_( - /** @type {!CustomEvent<string>} */ (e))); + 'resize', e => this.onResize_(e as CustomEvent<string>)); this.authExtHost_.addEventListener( 'authCompleted', - e => this.onAuthCompleted_( - /** @type {!CustomEvent<!AuthCompletedCredentials>} */ (e))); + e => this.onAuthCompleted_(e as CustomEvent<AuthCompletedCredentials>)); this.authExtHost_.addEventListener( 'showIncognito', () => this.onShowIncognito_()); this.authExtHost_.addEventListener( 'getAccounts', () => this.onGetAccounts_()); } - /** - * @param {!CustomEvent<string>} e - * @private - */ - onDropLink_(e) { + private onDropLink_(e: CustomEvent<string>) { // Navigate to the dropped link. window.location.href = e.detail; } - /** - * @param {!CustomEvent<NewWindowProperties>} e - * @private - */ - onNewWindow_(e) { + private onNewWindow_(e: CustomEvent<NewWindowProperties>) { window.open(e.detail.targetUrl, '_blank'); e.detail.window.discard(); // <if expr="chromeos_ash"> @@ -276,8 +281,7 @@ // </if> } - /** @private */ - onAuthReady_() { + private onAuthReady_() { this.loading_ = false; if (this.isLoginPrimaryAccount_) { this.browserProxy_.recordAction('Signin_SigninPage_Shown'); @@ -285,21 +289,12 @@ this.browserProxy_.authExtensionReady(); } - /** - * @param {!CustomEvent<string>} e - * @private - */ - onResize_(e) { + private onResize_(e: CustomEvent<string>) { this.browserProxy_.switchToFullTab(e.detail); } - /** - * @param {!CustomEvent<!AuthCompletedCredentials>} e - * @private - */ - onAuthCompleted_(e) { + private onAuthCompleted_(e: CustomEvent<AuthCompletedCredentials>) { this.verifyingAccount_ = true; - /** @type {!AuthCompletedCredentials} */ const credentials = e.detail; // <if expr="chromeos_ash"> @@ -311,24 +306,23 @@ this.browserProxy_.completeLogin(credentials); } - /** @private */ - onShowIncognito_() { + private onShowIncognito_() { this.browserProxy_.showIncognito(); } - /** @private */ - onGetAccounts_() { + private onGetAccounts_() { this.browserProxy_.getAccounts().then(result => { + assert(this.authExtHost_); this.authExtHost_.getAccountsResponse(result); }); } /** * Loads auth extension. - * @param {!AuthParams} data Parameters for auth extension. - * @private + * @param data Parameters for auth extension. */ - loadAuthExtension_(data) { + private loadAuthExtension_(data: AuthParams) { + assert(this.authExtHost_); this.authExtHost_.load(data.authMode, data); this.loading_ = true; this.isLoginPrimaryAccount_ = data.isLoginPrimaryAccount; @@ -346,47 +340,42 @@ * the inline signin is loaded with reason kFetchLstOnly. Handlers of * this message would expect a single argument a base::Dictionary value that * contains the values fetched from the gaia sign in endpoint. - * @param {string} arg The string representation of the json data returned by + * @param arg The string representation of the json data returned by * the sign in dialog after it has finished the sign in process. - * @private */ - sendLSTFetchResults_(arg) { + private sendLSTFetchResults_(arg: string) { this.browserProxy_.lstFetchResults(arg); } /** - * @param {boolean} loading Indicates whether the page is loading. - * @param {boolean} verifyingAccount Indicates whether the user account is - * being verified. - * @return {boolean} - * @private + * @param loading Indicates whether the page is loading. + * @param verifyingAccount Indicates whether the user account is being + * verified. */ - isSpinnerActive_(loading, verifyingAccount) { + private isSpinnerActive_(loading: boolean, verifyingAccount: boolean): + boolean { return loading || verifyingAccount; } /** * Closes the login dialog. - * @private */ - closeDialog_() { + private closeDialog_() { this.browserProxy_.dialogClose(); } // <if expr="chromeos_ash"> /** * Navigates to the welcome screen. - * @private */ - goToWelcomeScreen_() { + private goToWelcomeScreen_() { this.switchView_(View.WELCOME); } /** * Navigates back in the web view if possible. Otherwise closes the dialog. - * @private */ - handleGoBack_() { + private handleGoBack_() { if (this.$.signinFrame.canGoBack()) { this.$.signinFrame.back(); this.$.signinFrame.focus(); @@ -398,19 +387,12 @@ } } - /** - * @return {string} - * @private - */ - getBackButtonIcon_() { + private getBackButtonIcon_(): string { return isRTL() ? 'cr:chevron-right' : 'cr:chevron-left'; } - /** - * @return {string} - * @private - */ - getNextButtonLabel_(currentView, isArcAccountRestrictionsEnabled) { + private getNextButtonLabel_( + currentView: View, isArcAccountRestrictionsEnabled: boolean): string { if (currentView === View.SIGNIN_BLOCKED_BY_POLICY || currentView === View.SIGNIN_ERROR) { return this.i18n('ok'); @@ -422,55 +404,46 @@ } /** - * @param {View} currentView Identifier of the view that is being shown. - * @param {boolean} verifyingAccount Indicates whether the user account is - * being verified. - * @return {boolean} - * @private + * @param currentView Identifier of the view that is being shown. + * @param verifyingAccount Indicates whether the user account is being + * verified. */ - shouldShowBackButton_(currentView, verifyingAccount) { + private shouldShowBackButton_(currentView: View, verifyingAccount: boolean): + boolean { return currentView === View.ADD_ACCOUNT && !verifyingAccount; } - /** - * @return {boolean} - * @private - */ - shouldShowOkButton_() { + private shouldShowOkButton_(): boolean { return this.currentView_ === View.WELCOME || this.currentView_ === View.SIGNIN_BLOCKED_BY_POLICY || this.currentView_ === View.SIGNIN_ERROR; } - /** - * @return {boolean} - * @private - */ - shouldShowGaiaButtons_() { + private shouldShowGaiaButtons_(): boolean { return this.currentView_ === View.ADD_ACCOUNT; } // </if> /** * Navigates to the default view. - * @private */ - switchToDefaultView_() { + private switchToDefaultView_() { const view = this.getDefaultView_(); // <if expr="chromeos_ash"> if (this.isArcAccountRestrictionsEnabled_ && view === View.ARC_ACCOUNT_PICKER) { - this.shadowRoot.querySelector('arc-account-picker-app') - .loadAccounts() - .then( - accountsFound => { - this.switchView_( - accountsFound ? View.ARC_ACCOUNT_PICKER : View.WELCOME); - }, - reject => { - this.switchView_(View.WELCOME); - }); + const arcAccountPickerApp = + this.shadowRoot!.querySelector('arc-account-picker-app'); + assert(arcAccountPickerApp); + arcAccountPickerApp.loadAccounts().then( + (accountsFound: boolean) => { + this.switchView_( + accountsFound ? View.ARC_ACCOUNT_PICKER : View.WELCOME); + }, + (_error: Error) => { + this.switchView_(View.WELCOME); + }); return; } // </if> @@ -478,11 +451,7 @@ this.switchView_(view); } - /** - * @return {View} - * @private - */ - getDefaultView_() { + private getDefaultView_(): View { // TODO(https://crbug.com/1155041): simplify this when the file will be // split into CrOS and non-CrOS parts. // <if expr="not chromeos_ash"> @@ -506,23 +475,19 @@ } /** - * @param {View} id identifier of the view that should be shown. - * @param {string} enterAnimation enter animation for the new view. - * @param {string} exitAnimation exit animation for the previous view. - * @private + * @param id identifier of the view that should be shown. + * @param enterAnimation enter animation for the new view. + * @param exitAnimation exit animation for the previous view. */ - switchView_(id, enterAnimation = 'fade-in', exitAnimation = 'fade-out') { + private switchView_( + id: View, enterAnimation: string = 'fade-in', + exitAnimation: string = 'fade-out') { this.currentView_ = id; - /** @type {CrViewManagerElement} */ (this.$.viewManager) - .switchView(id, enterAnimation, exitAnimation); + this.$.viewManager.switchView(id, enterAnimation, exitAnimation); this.dispatchEvent(new CustomEvent('switch-view-notify-for-testing')); } - /** - * @return {boolean} - * @private - */ - isWelcomePageEnabled_() { + private isWelcomePageEnabled_(): boolean { // <if expr="not chromeos_ash"> return false; // </if> @@ -537,12 +502,8 @@ * Shows the sign-in blocked by policy screen if the user account is not * allowed to sign-in. Or shows the sign-in error screen if any error occurred * during the sign-in flow. - * @param {{email:string, hostedDomain:string, signinBlockedByPolicy:boolean, - * deviceType:string}} - * data parameters. - * @private */ - signinErrorShowView_(data) { + private signinErrorShowView_(data: SigninErrorPageData) { this.verifyingAccount_ = false; if (data.signinBlockedByPolicy) { this.set('email_', data.email); @@ -557,15 +518,14 @@ this.setFocusToWebview_(); } - /** @private */ - onOkButtonClick_() { + private onOkButtonClick_() { switch (this.currentView_) { case View.WELCOME: this.switchView_(View.ADD_ACCOUNT); - const skipChecked = - /** @type {WelcomePageAppElement} */ ( - this.shadowRoot.querySelector('welcome-page-app')) - .isSkipCheckboxChecked(); + const welcomePageApp = + this.shadowRoot!.querySelector('welcome-page-app'); + assert(welcomePageApp); + const skipChecked = welcomePageApp.isSkipCheckboxChecked(); this.browserProxy_.skipWelcomePage(skipChecked); this.setFocusToWebview_(); break; @@ -576,17 +536,21 @@ } } - /** @private */ - setFocusToWebview_() { + private setFocusToWebview_() { this.$.signinFrame.focus(); } // </if> - /** @param {Object} authExtHost */ - setAuthExtHostForTest(authExtHost) { - this.authExtHost_ = /** @type {!Authenticator} */ (authExtHost); + private setAuthExtHostForTest(authExtHost: Authenticator) { + this.authExtHost_ = authExtHost; this.addAuthExtHostListeners_(); } } +declare global { + interface HTMLElementTagNameMap { + 'inline-login-app': InlineLoginAppElement; + } +} + customElements.define(InlineLoginAppElement.is, InlineLoginAppElement);
diff --git a/chrome/browser/resources/inline_login/inline_login_browser_proxy.js b/chrome/browser/resources/inline_login/inline_login_browser_proxy.js deleted file mode 100644 index fa09908..0000000 --- a/chrome/browser/resources/inline_login/inline_login_browser_proxy.js +++ /dev/null
@@ -1,142 +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. - -import {assert} from 'chrome://resources/js/assert.js'; -import {addSingletonGetter, sendWithPromise} from 'chrome://resources/js/cr.m.js'; - -import {AuthCompletedCredentials} from './gaia_auth_host/authenticator.js'; - -/** @interface */ -export class InlineLoginBrowserProxy { - /** Send 'initialize' message to prepare for starting auth. */ - initialize() {} - - /** - * Send 'authExtensionReady' message to handle tasks after auth extension - * loads. - */ - authExtensionReady() {} - - /** - * Send 'switchToFullTab' message to switch the UI from a constrained dialog - * to a full tab. - * @param {!string} url - */ - switchToFullTab(url) {} - - /** - * Send 'completeLogin' message to complete login. - * @param {!AuthCompletedCredentials} credentials - */ - completeLogin(credentials) {} - - /** - * Send 'lstFetchResults' message. - * @param {string} arg The string representation of the json data returned by - * the sign in dialog after it has finished the sign in process. - */ - lstFetchResults(arg) {} - - /** - * Send 'metricsHandler:recordAction' message. - * @param {string} metricsAction The action to be recorded. - */ - recordAction(metricsAction) {} - - /** Send 'showIncognito' message to the handler */ - showIncognito() {} - - /** - * Send 'getAccounts' message to the handler. The promise will be resolved - * with the list of emails of accounts in session. - * @return {Promise<Array<string>>} - */ - getAccounts() {} - - /** Send 'dialogClose' message to close the login dialog. */ - dialogClose() {} - - // <if expr="chromeos_ash"> - /** - * Send 'skipWelcomePage' message to the handler. - * @param {boolean} skip Whether the welcome page should be skipped. - */ - skipWelcomePage(skip) {} - - /** Send 'openGuestWindow' message to the handler */ - openGuestWindow() {} - - /** - * @return {?string} JSON-encoded dialog arguments. - */ - getDialogArguments() {} - // </if> -} - -/** @implements {InlineLoginBrowserProxy} */ -export class InlineLoginBrowserProxyImpl { - /** @override */ - initialize() { - chrome.send('initialize'); - } - - /** @override */ - authExtensionReady() { - chrome.send('authExtensionReady'); - } - - /** @override */ - switchToFullTab(url) { - chrome.send('switchToFullTab', [url]); - } - - /** @override */ - completeLogin(credentials) { - chrome.send('completeLogin', [credentials]); - } - - /** @override */ - lstFetchResults(arg) { - chrome.send('lstFetchResults', [arg]); - } - - /** @override */ - recordAction(metricsAction) { - chrome.send('metricsHandler:recordAction', [metricsAction]); - } - - /** @override */ - showIncognito() { - chrome.send('showIncognito'); - } - - /** @override */ - getAccounts() { - return sendWithPromise('getAccounts'); - } - - /** @override */ - dialogClose() { - chrome.send('dialogClose'); - } - - // <if expr="chromeos_ash"> - /** @override */ - skipWelcomePage(skip) { - chrome.send('skipWelcomePage', [skip]); - } - - /** @override */ - openGuestWindow() { - chrome.send('openGuestWindow'); - } - - /** @override */ - getDialogArguments() { - return chrome.getVariableValue('dialogArguments'); - } - // </if> -} - -addSingletonGetter(InlineLoginBrowserProxyImpl);
diff --git a/chrome/browser/resources/inline_login/inline_login_browser_proxy.ts b/chrome/browser/resources/inline_login/inline_login_browser_proxy.ts new file mode 100644 index 0000000..1d4d2699 --- /dev/null +++ b/chrome/browser/resources/inline_login/inline_login_browser_proxy.ts
@@ -0,0 +1,131 @@ +// 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. + +import {AuthCompletedCredentials} from 'chrome://chrome-signin/gaia_auth_host/authenticator.js'; +import {sendWithPromise} from 'chrome://resources/js/cr.m.js'; + +export interface InlineLoginBrowserProxy { + /** Send 'initialize' message to prepare for starting auth. */ + initialize(): void; + + /** + * Send 'authExtensionReady' message to handle tasks after auth extension + * loads. + */ + authExtensionReady(): void; + + /** + * Send 'switchToFullTab' message to switch the UI from a constrained dialog + * to a full tab. + */ + switchToFullTab(url: string): void; + + /** + * Send 'completeLogin' message to complete login. + */ + completeLogin(credentials: AuthCompletedCredentials): void; + + /** + * Send 'lstFetchResults' message. + * @param arg The string representation of the json data returned by + * the sign in dialog after it has finished the sign in process. + */ + lstFetchResults(arg: string): void; + + /** + * Send 'metricsHandler:recordAction' message. + * @param metricsAction The action to be recorded. + */ + recordAction(metricsAction: string): void; + + /** Send 'showIncognito' message to the handler */ + showIncognito(): void; + + /** + * Send 'getAccounts' message to the handler. The promise will be resolved + * with the list of emails of accounts in session. + */ + getAccounts(): Promise<string[]>; + + /** Send 'dialogClose' message to close the login dialog. */ + dialogClose(): void; + + // <if expr="chromeos_ash"> + /** + * Send 'skipWelcomePage' message to the handler. + * @param skip Whether the welcome page should be skipped. + */ + skipWelcomePage(skip: boolean): void; + + /** Send 'openGuestWindow' message to the handler */ + openGuestWindow(): void; + + /** + * @return JSON-encoded dialog arguments. + */ + getDialogArguments(): string|null; + // </if> +} + +export class InlineLoginBrowserProxyImpl implements InlineLoginBrowserProxy { + initialize() { + chrome.send('initialize'); + } + + authExtensionReady() { + chrome.send('authExtensionReady'); + } + + switchToFullTab(url: string) { + chrome.send('switchToFullTab', [url]); + } + + completeLogin(credentials: AuthCompletedCredentials) { + chrome.send('completeLogin', [credentials]); + } + + lstFetchResults(arg: string) { + chrome.send('lstFetchResults', [arg]); + } + + recordAction(metricsAction: string) { + chrome.send('metricsHandler:recordAction', [metricsAction]); + } + + showIncognito() { + chrome.send('showIncognito'); + } + + getAccounts() { + return sendWithPromise('getAccounts'); + } + + dialogClose() { + chrome.send('dialogClose'); + } + + // <if expr="chromeos_ash"> + skipWelcomePage(skip: boolean) { + chrome.send('skipWelcomePage', [skip]); + } + + openGuestWindow() { + chrome.send('openGuestWindow'); + } + + getDialogArguments() { + return chrome.getVariableValue('dialogArguments'); + } + // </if> + + static getInstance(): InlineLoginBrowserProxy { + return instance || (instance = new InlineLoginBrowserProxyImpl()); + } + + static setInstance(obj: InlineLoginBrowserProxy) { + instance = obj; + } +} + +let instance: InlineLoginBrowserProxy|null = null;
diff --git a/chrome/browser/resources/inline_login/signin_blocked_by_policy_page.js b/chrome/browser/resources/inline_login/signin_blocked_by_policy_page.ts similarity index 77% rename from chrome/browser/resources/inline_login/signin_blocked_by_policy_page.js rename to chrome/browser/resources/inline_login/signin_blocked_by_policy_page.ts index 8069525..1648cf4 100644 --- a/chrome/browser/resources/inline_login/signin_blocked_by_policy_page.js +++ b/chrome/browser/resources/inline_login/signin_blocked_by_policy_page.ts
@@ -15,7 +15,6 @@ import {getTemplate} from './signin_blocked_by_policy_page.html.js'; -/** @polymer */ export class SigninBlockedByPolicyPageElement extends PolymerElement { static get is() { return 'signin-blocked-by-policy-page'; @@ -28,15 +27,14 @@ /** * Gets body text with the respective user email and hosted domain for the * user that went through the sign-in flow. - * @param {string} email User's email used in the sign-in flow. - * @param {string} hostedDomain Hosted domain of the user's email used in the - * sign-in flow. - * @param {string} deviceType name of the Chrome device type (e.g. Chromebook, + * @param email User's email used in the sign-in flow. + * @param hostedDomain Hosted domain of the user's email used in the sign-in + * flow. + * @param deviceType name of the Chrome device type (e.g. Chromebook, * Chromebox). - * @return {string} - * @private */ - getBodyText_(email, hostedDomain, deviceType) { + private getBodyText_(email: string, hostedDomain: string, deviceType: string): + string { return loadTimeData.getStringF( 'accountManagerDialogSigninBlockedByPolicyBody', email, hostedDomain, deviceType);
diff --git a/chrome/browser/resources/inline_login/signin_error_page.js b/chrome/browser/resources/inline_login/signin_error_page.ts similarity index 97% rename from chrome/browser/resources/inline_login/signin_error_page.js rename to chrome/browser/resources/inline_login/signin_error_page.ts index 3918db5f..9e6299151 100644 --- a/chrome/browser/resources/inline_login/signin_error_page.js +++ b/chrome/browser/resources/inline_login/signin_error_page.ts
@@ -14,7 +14,6 @@ import {getTemplate} from './signin_error_page.html.js'; -/** @polymer */ export class SigninErrorPageElement extends PolymerElement { static get is() { return 'signin-error-page';
diff --git a/chrome/browser/resources/inline_login/tsconfig_base.json b/chrome/browser/resources/inline_login/tsconfig_base.json new file mode 100644 index 0000000..afa07315 --- /dev/null +++ b/chrome/browser/resources/inline_login/tsconfig_base.json
@@ -0,0 +1,8 @@ +{ + "extends": "../../../../tools/typescript/tsconfig_base.json", + "compilerOptions": { + "noUncheckedIndexedAccess": false, + "noUnusedLocals": false, + "strictPropertyInitialization": false + } +}
diff --git a/chrome/browser/resources/inline_login/welcome_page_app.js b/chrome/browser/resources/inline_login/welcome_page_app.ts similarity index 75% rename from chrome/browser/resources/inline_login/welcome_page_app.js rename to chrome/browser/resources/inline_login/welcome_page_app.ts index 760b67e..0a8621c 100644 --- a/chrome/browser/resources/inline_login/welcome_page_app.js +++ b/chrome/browser/resources/inline_login/welcome_page_app.ts
@@ -7,16 +7,22 @@ import 'chrome://resources/cr_elements/cr_toggle/cr_toggle.js'; import './account_manager_shared_css.js'; +import {getAccountAdditionOptionsFromJSON} from 'chrome://chrome-signin/arc_account_picker/arc_util.js'; +import {CrCheckboxElement} from 'chrome://resources/cr_elements/cr_checkbox/cr_checkbox.js'; import {assert} from 'chrome://resources/js/assert.js'; import {loadTimeData} from 'chrome://resources/js/load_time_data.m.js'; import {PolymerElement} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js'; -import {getAccountAdditionOptionsFromJSON} from './arc_account_picker/arc_util.js'; import {InlineLoginBrowserProxyImpl} from './inline_login_browser_proxy.js'; import {getTemplate} from './welcome_page_app.html.js'; -/** @polymer */ +export interface WelcomePageAppElement { + $: { + checkbox: CrCheckboxElement, + }; +} + export class WelcomePageAppElement extends PolymerElement { static get is() { return 'welcome-page-app'; @@ -59,8 +65,11 @@ }; } - /** @override */ - ready() { + private isAvailableInArc: boolean; + private isArcFlow_: boolean; + private isArcAccountRestrictionsEnabled_: boolean; + + override ready() { super.ready(); if (this.isArcAccountRestrictionsEnabled_) { @@ -82,30 +91,28 @@ this.setUpLinkCallbacks_(); } - /** @return {boolean} */ - isSkipCheckboxChecked() { + isSkipCheckboxChecked(): boolean { return !!this.$.checkbox && this.$.checkbox.checked; } - /** @private */ - setUpLinkCallbacks_() { - [this.shadowRoot.querySelector('#osSettingsLink'), - this.shadowRoot.querySelector('#appsSettingsLink'), - this.shadowRoot.querySelector('#newPersonLink')] + private setUpLinkCallbacks_() { + [this.shadowRoot!.querySelector('#osSettingsLink'), + this.shadowRoot!.querySelector('#appsSettingsLink'), + this.shadowRoot!.querySelector('#newPersonLink')] .filter(link => !!link) .forEach(link => { - link.addEventListener( + link!.addEventListener( 'click', () => this.dispatchEvent(new CustomEvent('opened-new-window'))); }); if (this.isArcAccountRestrictionsEnabled_) { - const guestModeLink = this.shadowRoot.querySelector('#guestModeLink'); + const guestModeLink = this.shadowRoot!.querySelector('#guestModeLink'); if (guestModeLink) { guestModeLink.addEventListener('click', () => this.openGuestLink_()); } } else { - const incognitoLink = this.shadowRoot.querySelector('#incognitoLink'); + const incognitoLink = this.shadowRoot!.querySelector('#incognitoLink'); if (incognitoLink) { incognitoLink.addEventListener( 'click', () => this.openIncognitoLink_()); @@ -113,28 +120,16 @@ } } - /** - * @return {boolean} - * @private - */ - isArcToggleVisible_() { + private isArcToggleVisible_(): boolean { return this.isArcAccountRestrictionsEnabled_ && !this.isArcFlow_; } - /** - * @return {string} - * @private - */ - getWelcomeTitle_() { + private getWelcomeTitle_(): string { return loadTimeData.getStringF( 'accountManagerDialogWelcomeTitle', loadTimeData.getString('userName')); } - /** - * @return {string} - * @private - */ - getWelcomeBody_() { + private getWelcomeBody_(): string { const welcomeBodyKey = (this.isArcAccountRestrictionsEnabled_ && this.isArcFlow_) ? 'accountManagerDialogWelcomeBodyArc' : @@ -142,17 +137,21 @@ return loadTimeData.getString(welcomeBodyKey); } - /** @private */ - openIncognitoLink_() { + private openIncognitoLink_() { InlineLoginBrowserProxyImpl.getInstance().showIncognito(); // `showIncognito` will close the dialog. } - /** @private */ - openGuestLink_() { + private openGuestLink_() { InlineLoginBrowserProxyImpl.getInstance().openGuestWindow(); // `openGuestWindow` will close the dialog. } } +declare global { + interface HTMLElementTagNameMap { + 'welcome-page-app': WelcomePageAppElement; + } +} + customElements.define(WelcomePageAppElement.is, WelcomePageAppElement);
diff --git a/chrome/browser/resources/new_tab_page/app.ts b/chrome/browser/resources/new_tab_page/app.ts index 1b277f3..5dd0ceb 100644 --- a/chrome/browser/resources/new_tab_page/app.ts +++ b/chrome/browser/resources/new_tab_page/app.ts
@@ -408,7 +408,8 @@ // Called to update the OGB of relevant NTP state changes. private udpateOneGoogleBarAppearance_() { if (this.oneGoogleBarLoaded_) { - const isNtpDarkTheme = this.theme_ && this.theme_.isDark; + const isNtpDarkTheme = + this.theme_ && (!!this.theme_.backgroundImage || this.theme_.isDark); $$<IframeElement>(this, '#oneGoogleBar')!.postMessage({ type: 'updateAppearance', // We should be using a light OGB for dark themes and vice versa.
diff --git a/chrome/browser/resources/settings/icons.html b/chrome/browser/resources/settings/icons.html index 0f5b8b57..fa7dc9c 100644 --- a/chrome/browser/resources/settings/icons.html +++ b/chrome/browser/resources/settings/icons.html
@@ -162,8 +162,8 @@ <if expr="not chromeos_ash"> <g id="web"><path d="M20 4H4c-1.1 0-1.99.9-1.99 2L2 18c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zm-5 14H4v-4h11v4zm0-5H4V9h11v4zm5 5h-4V9h4v9z"></path></g> </if> - <g id="window-placement"><path d="M18 15v5q0 .825-.5875 1.4125Q16.825 22 16 22H4q-.825 0-1.4125-.5875Q2 20.825 2 20v-9q0-.825.5875-1.4125Q3.175 9 4 9h2V4q0-.825.5875-1.4125Q7.175 2 8 2h12q.825 0 1.4125.5875Q22 3.175 22 4v9q0 .825-.5875 1.4125Q20.825 15 20 15ZM4 13v7h12v-7Zm14 0h2V6H8v3h8q.825 0 1.4125.5875Q18 10.175 18 11Z"></path></g> - <g id="window-placement-off"><path d="m20.475 23.3-2.6-2.6q-.2.575-.7125.9375Q16.65 22 16 22H4q-.825 0-1.4125-.5875Q2 20.825 2 20v-9q0-.825.5875-1.4125Q3.175 9 4 9h2v-.175L.675 3.5 2.1 2.075l19.8 19.8ZM4 20h12v-1.175L10.175 13H4v7Zm14-4.875L15.875 13l-4-4H16q.825 0 1.4125.5875Q18 10.175 18 11v2h2V6H8.875L6.15 3.275q.2-.575.7-.925Q7.35 2 8 2h12q.825 0 1.4125.5875Q22 3.175 22 4v9q0 .825-.5875 1.4125Q20.825 15 20 15h-2Z"></path></g> + <g id="window-management"><path d="M18 15v5q0 .825-.5875 1.4125Q16.825 22 16 22H4q-.825 0-1.4125-.5875Q2 20.825 2 20v-9q0-.825.5875-1.4125Q3.175 9 4 9h2V4q0-.825.5875-1.4125Q7.175 2 8 2h12q.825 0 1.4125.5875Q22 3.175 22 4v9q0 .825-.5875 1.4125Q20.825 15 20 15ZM4 13v7h12v-7Zm14 0h2V6H8v3h8q.825 0 1.4125.5875Q18 10.175 18 11Z"></path></g> + <g id="window-management-off"><path d="m20.475 23.3-2.6-2.6q-.2.575-.7125.9375Q16.65 22 16 22H4q-.825 0-1.4125-.5875Q2 20.825 2 20v-9q0-.825.5875-1.4125Q3.175 9 4 9h2v-.175L.675 3.5 2.1 2.075l19.8 19.8ZM4 20h12v-1.175L10.175 13H4v7Zm14-4.875L15.875 13l-4-4H16q.825 0 1.4125.5875Q18 10.175 18 11v2h2V6H8.875L6.15 3.275q.2-.575.7-.925Q7.35 2 8 2h12q.825 0 1.4125.5875Q22 3.175 22 4v9q0 .825-.5875 1.4125Q20.825 15 20 15h-2Z"></path></g> <g id="zoom-in"><path d="M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z"></path></g> <g id="local-fonts"><path d="M0 0h24v24H0V0z" fill="none"></path><path d="M20 2H4c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2zm0 18H4V4h16v16zM10.69 6h2.6l4.51 12h-2.5l-1.01-2.87H9.7L8.7 18H6.2l4.49-12zm2.87 7.06l-1.06-3.02-.43-1.44h-.13l-.44 1.44-1.07 3.02h3.13z"></path></g> <g id="local-fonts-off"><path d="M4.83,2H20c1.1,0,2,0.9,2,2v15.17l-2-2V4H6.83L4.83,2z M10.92,6l-0.57,1.52l1.36,1.36l0.23-0.66h0.1l0.54,1.52l3.04,3.04 L13.07,6H10.92z M20.49,23.31L19.17,22H4c-1.1,0-2-0.9-2-2V4.83L0.69,3.51L2.1,2.1l19.8,19.8L20.49,23.31z M17.17,20l-5.07-5.07 H9.58L8.49,18H6.41l2.39-6.37L4,6.83V20H17.17z"></path></g>
diff --git a/chrome/browser/resources/settings/privacy_page/privacy_page.html b/chrome/browser/resources/settings/privacy_page/privacy_page.html index f0192bb..02286f9 100644 --- a/chrome/browser/resources/settings/privacy_page/privacy_page.html +++ b/chrome/browser/resources/settings/privacy_page/privacy_page.html
@@ -966,23 +966,24 @@ </settings-subpage> </template> <template is="dom-if" route-path="/content/windowManagement" no-search> - <settings-subpage page-title="$i18n{siteSettingsWindowPlacement}" + <settings-subpage page-title="$i18n{siteSettingsWindowManagement}" search-label="$i18n{siteSettingsAllSitesSearch}" search-term="{{searchFilter_}}"> <div class="content-settings-header secondary"> - $i18n{siteSettingsWindowPlacementDescription} + $i18n{siteSettingsWindowManagementDescription} </div> <settings-category-default-radio-group - category="[[contentSettingsTypesEnum_.WINDOW_PLACEMENT]]" - allow-option-label="$i18n{siteSettingsWindowPlacementAsk}" - allow-option-icon="settings:window-placement" - block-option-label="$i18n{siteSettingsWindowPlacementBlocked}" - block-option-icon="settings:window-placement-off"> + category="[[contentSettingsTypesEnum_.WINDOW_MANAGEMENT]]" + allow-option-label="$i18n{siteSettingsWindowManagementAsk}" + allow-option-icon="settings:window-management" + block-option-label="$i18n{siteSettingsWindowManagementBlocked}" + block-option-icon="settings:window-management-off"> </settings-category-default-radio-group> <category-setting-exceptions - category="[[contentSettingsTypesEnum_.WINDOW_PLACEMENT]]" - allow-header="$i18n{siteSettingsWindowPlacementAskExceptions}" - block-header="$i18n{siteSettingsWindowPlacementBlockedExceptions}" + category="[[contentSettingsTypesEnum_.WINDOW_MANAGEMENT]]" + allow-header="$i18n{siteSettingsWindowManagementAskExceptions}" + block-header= + "$i18n{siteSettingsWindowManagementBlockedExceptions}" search-filter="[[searchFilter_]]"> </category-setting-exceptions> </settings-subpage>
diff --git a/chrome/browser/resources/settings/route.ts b/chrome/browser/resources/settings/route.ts index e637213c..762f5c9 100644 --- a/chrome/browser/resources/settings/route.ts +++ b/chrome/browser/resources/settings/route.ts
@@ -97,7 +97,8 @@ r.SITE_SETTINGS_BLUETOOTH_SCANNING = r.SITE_SETTINGS.createChild('bluetoothScanning'); } - r.SITE_SETTINGS_WINDOW_PLACEMENT = + + r.SITE_SETTINGS_WINDOW_MANAGEMENT = r.SITE_SETTINGS.createChild('windowManagement'); r.SITE_SETTINGS_FILE_SYSTEM_WRITE = r.SITE_SETTINGS.createChild('filesystem'); r.SITE_SETTINGS_LOCAL_FONTS = r.SITE_SETTINGS.createChild('localFonts');
diff --git a/chrome/browser/resources/settings/settings_routes.ts b/chrome/browser/resources/settings/settings_routes.ts index 300701d..964998b 100644 --- a/chrome/browser/resources/settings/settings_routes.ts +++ b/chrome/browser/resources/settings/settings_routes.ts
@@ -84,7 +84,7 @@ SITE_SETTINGS_USB_DEVICES: Route; SITE_SETTINGS_SERIAL_PORTS: Route; SITE_SETTINGS_VR: Route; - SITE_SETTINGS_WINDOW_PLACEMENT: Route; + SITE_SETTINGS_WINDOW_MANAGEMENT: Route; SITE_SETTINGS_ZOOM_LEVELS: Route; SPELL_CHECK: Route; SYNC: Route;
diff --git a/chrome/browser/resources/settings/site_settings/category_default_setting.ts b/chrome/browser/resources/settings/site_settings/category_default_setting.ts index a3af44a..52dffb56 100644 --- a/chrome/browser/resources/settings/site_settings/category_default_setting.ts +++ b/chrome/browser/resources/settings/site_settings/category_default_setting.ts
@@ -217,7 +217,7 @@ case ContentSettingsTypes.SERIAL_PORTS: case ContentSettingsTypes.USB_DEVICES: case ContentSettingsTypes.VR: - case ContentSettingsTypes.WINDOW_PLACEMENT: + case ContentSettingsTypes.WINDOW_MANAGEMENT: // "Ask" vs "Blocked". this.browserProxy.setDefaultValueForContentType( this.category,
diff --git a/chrome/browser/resources/settings/site_settings/constants.ts b/chrome/browser/resources/settings/site_settings/constants.ts index b51c1d2..566fb09 100644 --- a/chrome/browser/resources/settings/site_settings/constants.ts +++ b/chrome/browser/resources/settings/site_settings/constants.ts
@@ -40,7 +40,7 @@ SOUND = 'sound', USB_DEVICES = 'usb-devices', VR = 'vr', - WINDOW_PLACEMENT = 'window-placement', + WINDOW_MANAGEMENT = 'window-placement', ZOOM_LEVELS = 'zoom-levels', // The following item is not in the C++ kContentSettingsTypeGroupNames, but it
diff --git a/chrome/browser/resources/settings/site_settings/settings_category_default_radio_group.ts b/chrome/browser/resources/settings/site_settings/settings_category_default_radio_group.ts index 524c4f79..caefac3 100644 --- a/chrome/browser/resources/settings/site_settings/settings_category_default_radio_group.ts +++ b/chrome/browser/resources/settings/site_settings/settings_category_default_radio_group.ts
@@ -158,7 +158,7 @@ case ContentSettingsTypes.SERIAL_PORTS: case ContentSettingsTypes.USB_DEVICES: case ContentSettingsTypes.VR: - case ContentSettingsTypes.WINDOW_PLACEMENT: + case ContentSettingsTypes.WINDOW_MANAGEMENT: // "Ask" vs "Blocked". return ContentSetting.ASK; default:
diff --git a/chrome/browser/resources/settings/site_settings/site_details.html b/chrome/browser/resources/settings/site_settings/site_details.html index 119a7092..8c0959d 100644 --- a/chrome/browser/resources/settings/site_settings/site_details.html +++ b/chrome/browser/resources/settings/site_settings/site_details.html
@@ -104,7 +104,7 @@ [[numCookies_]] </div> </div> - <div id="fpsMembership" class="secondary" + <div id="fpsMembership" class="secondary" hidden$="[[!fpsMembership_]]"> [[fpsMembership_]] </div> @@ -245,9 +245,9 @@ label="$i18n{siteSettingsIdleDetection}"> </site-details-permission> <site-details-permission - category="[[contentSettingsTypesEnum_.WINDOW_PLACEMENT]]" - icon="settings:window-placement" - label="$i18n{siteSettingsWindowPlacement}"> + category="[[contentSettingsTypesEnum_.WINDOW_MANAGEMENT]]" + icon="settings:window-management" + label="$i18n{siteSettingsWindowManagement}"> </site-details-permission> <site-details-permission category="[[contentSettingsTypesEnum_.LOCAL_FONTS]]"
diff --git a/chrome/browser/resources/settings/site_settings_page/recent_site_permissions.ts b/chrome/browser/resources/settings/site_settings_page/recent_site_permissions.ts index 385ebd6..ab4bc8c2 100644 --- a/chrome/browser/resources/settings/site_settings_page/recent_site_permissions.ts +++ b/chrome/browser/resources/settings/site_settings_page/recent_site_permissions.ts
@@ -190,8 +190,8 @@ return this.i18n('siteSettingsArMidSentence'); case ContentSettingsTypes.VR: return this.i18n('siteSettingsVrMidSentence'); - case ContentSettingsTypes.WINDOW_PLACEMENT: - return this.i18n('siteSettingsWindowPlacementMidSentence'); + case ContentSettingsTypes.WINDOW_MANAGEMENT: + return this.i18n('siteSettingsWindowManagementMidSentence'); case ContentSettingsTypes.LOCAL_FONTS: return this.i18n('siteSettingsFontAccessMidSentence'); case ContentSettingsTypes.IDLE_DETECTION:
diff --git a/chrome/browser/resources/settings/site_settings_page/site_settings_page.ts b/chrome/browser/resources/settings/site_settings_page/site_settings_page.ts index 5ff4c011..fa983c96 100644 --- a/chrome/browser/resources/settings/site_settings_page/site_settings_page.ts +++ b/chrome/browser/resources/settings/site_settings_page/site_settings_page.ts
@@ -300,12 +300,12 @@ disabledLabel: 'siteSettingsVrBlocked', }, { - route: routes.SITE_SETTINGS_WINDOW_PLACEMENT, - id: Id.WINDOW_PLACEMENT, - label: 'siteSettingsWindowPlacement', - icon: 'settings:window-placement', - enabledLabel: 'siteSettingsWindowPlacementAsk', - disabledLabel: 'siteSettingsWindowPlacementBlocked', + route: routes.SITE_SETTINGS_WINDOW_MANAGEMENT, + id: Id.WINDOW_MANAGEMENT, + label: 'siteSettingsWindowManagement', + icon: 'settings:window-management', + enabledLabel: 'siteSettingsWindowManagementAsk', + disabledLabel: 'siteSettingsWindowManagementBlocked', }, { route: routes.SITE_SETTINGS_ZOOM_LEVELS, @@ -378,7 +378,7 @@ Id.AR, Id.VR, Id.IDLE_DETECTION, - Id.WINDOW_PLACEMENT, + Id.WINDOW_MANAGEMENT, Id.LOCAL_FONTS, ]), contentBasic: buildItemListFromIds([
diff --git a/chrome/browser/safe_browsing/cloud_content_scanning/binary_upload_service.cc b/chrome/browser/safe_browsing/cloud_content_scanning/binary_upload_service.cc index 18eb521..c8019f2 100644 --- a/chrome/browser/safe_browsing/cloud_content_scanning/binary_upload_service.cc +++ b/chrome/browser/safe_browsing/cloud_content_scanning/binary_upload_service.cc
@@ -6,6 +6,7 @@ #include "base/command_line.h" #include "base/rand_util.h" +#include "base/ranges/algorithm.h" #include "base/strings/string_number_conversions.h" #include "chrome/browser/browser_process.h" #include "chrome/browser/enterprise/connectors/analysis/analysis_settings.h" @@ -123,7 +124,7 @@ void BinaryUploadService::Request::clear_dlp_scan_request() { auto* tags = content_analysis_request_.mutable_tags(); - auto it = std::find(tags->begin(), tags->end(), "dlp"); + auto it = base::ranges::find(*tags, "dlp"); if (it != tags->end()) tags->erase(it); }
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 27bef15..2fd44e0b 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
@@ -9,6 +9,7 @@ #include "base/bind.h" #include "base/callback_forward.h" #include "base/callback_helpers.h" +#include "base/containers/contains.h" #include "base/containers/flat_map.h" #include "base/files/scoped_temp_dir.h" #include "base/memory/raw_ptr.h" @@ -140,9 +141,7 @@ void MaybeAcknowledge(std::unique_ptr<Ack> ack) override { EXPECT_EQ(final_action_, ack->ack().final_action()); ++num_acks_; - ASSERT_NE(requests_tokens_.end(), - std::find(requests_tokens_.begin(), requests_tokens_.end(), - ack->ack().request_token())); + ASSERT_TRUE(base::Contains(requests_tokens_, ack->ack().request_token())); } void SetResponse(const base::FilePath& path,
diff --git a/chrome/browser/safe_browsing/extension_telemetry/potential_password_theft_signal_processor.cc b/chrome/browser/safe_browsing/extension_telemetry/potential_password_theft_signal_processor.cc index ef5990d..35d35bf 100644 --- a/chrome/browser/safe_browsing/extension_telemetry/potential_password_theft_signal_processor.cc +++ b/chrome/browser/safe_browsing/extension_telemetry/potential_password_theft_signal_processor.cc
@@ -5,6 +5,7 @@ #include "chrome/browser/safe_browsing/extension_telemetry/potential_password_theft_signal_processor.h" #include "base/check_op.h" +#include "base/containers/contains.h" #include "chrome/browser/safe_browsing/extension_telemetry/password_reuse_signal.h" #include "chrome/browser/safe_browsing/extension_telemetry/remote_host_contacted_signal.h" #include "components/safe_browsing/core/common/proto/csd.pb.h" @@ -37,9 +38,8 @@ extension_id = rhc_signal.extension_id(); (remote_host_url_queue_[extension_id]) .emplace_back(std::make_pair(host_url, signal_creation_time)); - } - // Process password reuse signal. - else { + } else { + // Process password reuse signal. const auto& pw_reuse_signal = static_cast<const PasswordReuseSignal&>(signal); extension_id = pw_reuse_signal.extension_id(); @@ -109,8 +109,7 @@ // Each password reuse event has a reputable domain list, aka // matching_domains. Remote host urls that are in the reputable domain // lists associated with the password reuse events will not be added. - if (std::find(matching_domains.begin(), matching_domains.end(), - host_url) == matching_domains.end()) { + if (!base::Contains(matching_domains, host_url)) { temp_remote_host_url_queue.push_back(host_url); } } @@ -156,8 +155,7 @@ reuse_info.count += 1; for (auto& domain : incoming_reuse_info.matching_domains) { // Update the matching domain list once we find new domains. - if (std::find(matching_domains.begin(), matching_domains.end(), domain) == - matching_domains.end()) { + if (!base::Contains(matching_domains, domain)) { matching_domains.push_back(domain); } }
diff --git a/chrome/browser/share/share_ranking.cc b/chrome/browser/share/share_ranking.cc index e0848ac63..c4d1cac6 100644 --- a/chrome/browser/share/share_ranking.cc +++ b/chrome/browser/share/share_ranking.cc
@@ -4,6 +4,7 @@ #include "chrome/browser/share/share_ranking.h" +#include "base/ranges/algorithm.h" #include "base/strings/string_util.h" #include "base/task/task_traits.h" #include "base/task/thread_pool.h" @@ -92,8 +93,8 @@ DCHECK(RankingContains(ranking, from)); DCHECK(RankingContains(ranking, to)); - auto from_loc = std::find(ranking.begin(), ranking.end(), from); - auto to_loc = std::find(ranking.begin(), ranking.end(), to); + auto from_loc = base::ranges::find(ranking, from); + auto to_loc = base::ranges::find(ranking, to); *from_loc = to; *to_loc = from; }
diff --git a/chrome/browser/speech/extension_api/tts_extension_api.cc b/chrome/browser/speech/extension_api/tts_extension_api.cc index 9208732..45c7aed1 100644 --- a/chrome/browser/speech/extension_api/tts_extension_api.cc +++ b/chrome/browser/speech/extension_api/tts_extension_api.cc
@@ -300,12 +300,14 @@ std::unique_ptr<content::TtsUtterance> utterance; if (extension()) { - extensions::ExtensionHost* host = + extensions::ExtensionHost* extension_host = extensions::ProcessManager::Get(browser_context()) ->GetBackgroundHostForExtension(extension()->id()); - if (host && host->host_contents()) - utterance = content::TtsUtterance::Create(host->host_contents()); + if (extension_host && extension_host->host_contents()) { + utterance = + content::TtsUtterance::Create(extension_host->host_contents()); + } } if (!utterance)
diff --git a/chrome/browser/spellchecker/spellcheck_language_policy_handlers_unittest.cc b/chrome/browser/spellchecker/spellcheck_language_policy_handlers_unittest.cc index 2166b2b..e271190 100644 --- a/chrome/browser/spellchecker/spellcheck_language_policy_handlers_unittest.cc +++ b/chrome/browser/spellchecker/spellcheck_language_policy_handlers_unittest.cc
@@ -14,6 +14,7 @@ #include <string> #include <vector> +#include "base/containers/contains.h" #include "base/strings/string_util.h" #include "base/test/scoped_feature_list.h" #include "base/values.h" @@ -91,8 +92,7 @@ for (const auto& language : languages_list->GetListDeprecated()) { EXPECT_TRUE(language.is_string()); - EXPECT_TRUE(std::find(expected.begin(), expected.end(), - language.GetString()) != expected.end()); + EXPECT_TRUE(base::Contains(expected, language.GetString())); } } else { EXPECT_FALSE(is_spellcheck_enabled_pref_set);
diff --git a/chrome/browser/supervised_user/android/favicon_fetcher.cc b/chrome/browser/supervised_user/android/favicon_fetcher.cc index 0e42474..27366c8 100644 --- a/chrome/browser/supervised_user/android/favicon_fetcher.cc +++ b/chrome/browser/supervised_user/android/favicon_fetcher.cc
@@ -12,12 +12,9 @@ #include "base/callback.h" #include "base/logging.h" #include "base/task/cancelable_task_tracker.h" -#include "chrome/browser/favicon/large_icon_service_factory.h" -#include "chrome/browser/profiles/profile.h" #include "components/favicon/core/large_icon_service.h" #include "components/favicon_base/favicon_callback.h" #include "components/favicon_base/favicon_types.h" -#include "content/public/browser/browser_context.h" #include "net/traffic_annotation/network_traffic_annotation.h" #include "ui/gfx/android/java_bitmap.h" #include "ui/gfx/image/image.h" @@ -25,9 +22,15 @@ #include "ui/gfx/image/image_skia_rep.h" #include "url/gurl.h" -FaviconFetcher::FaviconFetcher(Profile* profile) - : large_icon_service_( - LargeIconServiceFactory::GetForBrowserContext(profile)) {} +FaviconFetcher::FaviconFetcher( + raw_ptr<favicon::LargeIconService> large_icon_service) + : large_icon_service_(large_icon_service) {} + +FaviconFetcher::~FaviconFetcher() {} + +void FaviconFetcher::Destroy() { + delete this; +} void FaviconFetcher::OnFaviconDownloaded( const GURL& url, @@ -41,10 +44,17 @@ LOG(WARNING) << "Unable to obtain a favicon image with the required specs for " << url.host(); - delete this; + Destroy(); } } +void FaviconFetcher::ExecuteFaviconCallback( + const base::android::ScopedJavaGlobalRef<jobject>& callback, + SkBitmap bitmap) { + base::android::RunObjectCallbackAndroid(callback, + gfx::ConvertToJavaBitmap(bitmap)); +} + void FaviconFetcher::OnGetFaviconFromCacheFinished( const GURL& url, bool continue_to_server, @@ -56,9 +66,8 @@ image_result.image.AsImageSkia().GetRepresentation(1.0f).GetBitmap(); // Return the image to the caller by executing the callback and destroy this // instance. - base::android::RunObjectCallbackAndroid( - callback, gfx::ConvertToJavaBitmap(faviconBitmap)); - delete this; + ExecuteFaviconCallback(callback, faviconBitmap); + Destroy(); return; } @@ -96,10 +105,14 @@ base::Unretained(this), url, std::move(callback), faviconDimensions)); } else { - delete this; + Destroy(); } } +base::WeakPtr<FaviconFetcher> FaviconFetcher::GetWeakPtr() { + return weak_factory_.GetWeakPtr(); +} + void FaviconFetcher::FetchFavicon( const GURL& url, bool continue_to_server,
diff --git a/chrome/browser/supervised_user/android/favicon_fetcher.h b/chrome/browser/supervised_user/android/favicon_fetcher.h index f1db14f..967af65 100644 --- a/chrome/browser/supervised_user/android/favicon_fetcher.h +++ b/chrome/browser/supervised_user/android/favicon_fetcher.h
@@ -6,23 +6,27 @@ #define CHROME_BROWSER_SUPERVISED_USER_ANDROID_FAVICON_FETCHER_H_ #include "base/memory/raw_ptr.h" +#include "base/memory/weak_ptr.h" #include "base/task/cancelable_task_tracker.h" -#include "chrome/browser/profiles/profile.h" #include "components/favicon/core/large_icon_service.h" #include "components/favicon_base/favicon_callback.h" #include "components/favicon_base/favicon_types.h" #include "ui/gfx/image/image.h" +#include "ui/gfx/image/image_skia.h" #include "url/gurl.h" class FaviconFetcher { public: - explicit FaviconFetcher(Profile* profile); + explicit FaviconFetcher( + raw_ptr<favicon::LargeIconService> large_icon_service); FaviconFetcher() = delete; FaviconFetcher(const FaviconFetcher&) = delete; - ~FaviconFetcher() = default; + FaviconFetcher& operator=(const FaviconFetcher&) = delete; + + virtual ~FaviconFetcher(); // Initiates a request to fetch a favicon for a specific url. // Wraps the calls to a service that obtains the favicon and returns @@ -35,6 +39,8 @@ int desired_side_size_in_pixel, const base::android::ScopedJavaGlobalRef<jobject>& callback); + base::WeakPtr<FaviconFetcher> GetWeakPtr(); + private: // Wrapper for favicon specs. struct FaviconDimensions { @@ -59,9 +65,18 @@ FaviconDimensions faviconDimensions, const favicon_base::LargeIconImageResult& image_result); + // Helper method for returning the favicon to the caller. + virtual void ExecuteFaviconCallback( + const base::android::ScopedJavaGlobalRef<jobject>& callback, + SkBitmap bitmap); + + // Helper destructor wrapper. + virtual void Destroy(); + // Required for execution of icon fetching. raw_ptr<favicon::LargeIconService> large_icon_service_; base::CancelableTaskTracker task_tracker_; + base::WeakPtrFactory<FaviconFetcher> weak_factory_{this}; }; #endif // CHROME_BROWSER_SUPERVISED_USER_ANDROID_FAVICON_CALLER_H_
diff --git a/chrome/browser/supervised_user/android/favicon_fetcher_unittest.cc b/chrome/browser/supervised_user/android/favicon_fetcher_unittest.cc new file mode 100644 index 0000000..6f033079 --- /dev/null +++ b/chrome/browser/supervised_user/android/favicon_fetcher_unittest.cc
@@ -0,0 +1,265 @@ +// 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. + +#include "chrome/browser/supervised_user/android/favicon_fetcher.h" +#include <cstddef> +#include <string> +#include <utility> + +#include "base/android/scoped_java_ref.h" +#include "base/memory/raw_ptr.h" +#include "base/no_destructor.h" +#include "base/task/cancelable_task_tracker.h" +#include "base/test/gmock_callback_support.h" +#include "components/favicon/core/large_icon_service.h" +#include "components/favicon_base/favicon_callback.h" +#include "components/favicon_base/favicon_types.h" +#include "favicon_fetcher.h" +#include "net/traffic_annotation/network_traffic_annotation.h" +#include "testing/gmock/include/gmock/gmock.h" +#include "testing/gtest/include/gtest/gtest.h" +#include "third_party/skia/include/core/SkBitmap.h" +#include "ui/gfx/image/image.h" +#include "ui/gfx/image/image_unittest_util.h" +#include "url/gurl.h" + +namespace { + +const GURL& StringToGURL(std::string uri) { + static const base::NoDestructor<GURL> url(uri); + return *url; +} +const base::CancelableTaskTracker::TaskId kTaskId = 1; + +favicon_base::LargeIconImageResult CreateEmptyTestImageResult() { + SkBitmap bitmap_result = SkBitmap(); + return favicon_base::LargeIconImageResult( + gfx::Image::CreateFrom1xBitmap(bitmap_result), StringToGURL("icon.com")); +} + +favicon_base::LargeIconImageResult CreateTestImageResult() { + return favicon_base::LargeIconImageResult( + gfx::Image::CreateFrom1xBitmap(gfx::test::CreateBitmap(10, 10)), + StringToGURL("icon.com")); +} + +class MockLargeIconService : public favicon::LargeIconService { + public: + MockLargeIconService() = default; + MockLargeIconService(const MockLargeIconService&) = delete; + MockLargeIconService& operator=(const MockLargeIconService&) = delete; + ~MockLargeIconService() override = default; + + // LargeIconService overrides. + MOCK_METHOD5(GetLargeIconOrFallbackStyleFromGoogleServerSkippingLocalCache, + void(const GURL& page_url, + bool may_page_url_be_private, + bool should_trim_page_url_path, + const net::NetworkTrafficAnnotationTag& traffic_annotation, + favicon_base::GoogleFaviconServerCallback callback)); + MOCK_METHOD5(GetLargeIconRawBitmapOrFallbackStyleForPageUrl, + base::CancelableTaskTracker::TaskId( + const GURL& page_url, + int min_source_size_in_pixel, + int desired_size_in_pixel, + favicon_base::LargeIconCallback callback, + base::CancelableTaskTracker* tracker)); + MOCK_METHOD5(GetLargeIconImageOrFallbackStyleForPageUrl, + base::CancelableTaskTracker::TaskId( + const GURL& page_url, + int min_source_size_in_pixel, + int desired_size_in_pixel, + favicon_base::LargeIconImageCallback callback, + base::CancelableTaskTracker* tracker)); + MOCK_METHOD5(GetLargeIconRawBitmapOrFallbackStyleForIconUrl, + base::CancelableTaskTracker::TaskId( + const GURL& icon_url, + int min_source_size_in_pixel, + int desired_size_in_pixel, + favicon_base::LargeIconCallback callback, + base::CancelableTaskTracker* tracker)); + MOCK_METHOD4(GetIconRawBitmapOrFallbackStyleForPageUrl, + base::CancelableTaskTracker::TaskId( + const GURL& page_url, + int desired_size_in_pixel, + favicon_base::LargeIconCallback callback, + base::CancelableTaskTracker* tracker)); + MOCK_METHOD1(TouchIconFromGoogleServer, void(const GURL& icon_url)); +}; + +// FaviconFetcher is the class under test, however we need to mock some of its +// methods. +class MockFaviconFetcher : public ::FaviconFetcher { + public: + explicit MockFaviconFetcher( + raw_ptr<favicon::LargeIconService> large_icon_service) + : FaviconFetcher(large_icon_service) {} + + MOCK_METHOD2(ExecuteFaviconCallback, + void(const base::android::ScopedJavaGlobalRef<jobject>& callback, + SkBitmap bitmap)); +}; + +class FaviconFetcherTest : public ::testing::Test { + public: + FaviconFetcherTest() = default; + FaviconFetcherTest(const FaviconFetcherTest&) = delete; + FaviconFetcherTest& operator=(const FaviconFetcherTest&) = delete; + + protected: + MockLargeIconService mock_large_icon_service_; + MockFaviconFetcher* favicon_fetcher_ = + new MockFaviconFetcher(&mock_large_icon_service_); +}; + +// Checks that an image was successfully returned from the server +// after an image fetch request. Checks that the image is returned to the +// caller and the fetcher object is successfully destroyed. +TEST_F(FaviconFetcherTest, SucessfullImageRequestSuccessfulImageFetch) { + // Successful image request from server. + EXPECT_CALL(mock_large_icon_service_, + GetLargeIconOrFallbackStyleFromGoogleServerSkippingLocalCache( + testing::_, testing::_, testing::_, testing::_, testing::_)) + .Times(1) + .WillOnce(base::test::RunOnceCallback<4>( + favicon_base::GoogleFaviconServerRequestStatus::SUCCESS)); + + // Returns an empty image at first, then a valid image (after requesting it + // from server). + EXPECT_CALL(mock_large_icon_service_, + GetLargeIconImageOrFallbackStyleForPageUrl( + testing::_, testing::_, testing::_, testing::_, testing::_)) + .Times(2) + .WillOnce([=](auto, auto, auto, + favicon_base::LargeIconImageCallback image_callback, auto) { + std::move(image_callback).Run(CreateEmptyTestImageResult()); + return kTaskId; + }) + .WillOnce([=](auto, auto, auto, + favicon_base::LargeIconImageCallback image_callback, auto) { + std::move(image_callback).Run(CreateTestImageResult()); + return kTaskId; + }); + + // Tests that favicon is returned to the caller (Android callback execution). + EXPECT_CALL(*favicon_fetcher_, ExecuteFaviconCallback(testing::_, testing::_)) + .Times(1); + + base::WeakPtr<FaviconFetcher> faviconFetcherWeakPtr = + favicon_fetcher_->GetWeakPtr(); + favicon_fetcher_->FetchFavicon(StringToGURL("page.com"), true, 16, 32, + base::android::ScopedJavaGlobalRef<jobject>()); + + // Tests that the favicon_fetcher_ instance test is destroyed. + EXPECT_TRUE(faviconFetcherWeakPtr.WasInvalidated()); +} + +// Checks that an image that does not meet our specs is returned from the server +// after an image fetch request. Checks that no image is returned to the +// caller and the fetcher object is successfully destroyed. +TEST_F(FaviconFetcherTest, SucessfullImageRequestUnsuccessfulImageFetch) { + // Successful image request from server. + EXPECT_CALL(mock_large_icon_service_, + GetLargeIconOrFallbackStyleFromGoogleServerSkippingLocalCache( + testing::_, testing::_, testing::_, testing::_, testing::_)) + .Times(1) + .WillOnce(base::test::RunOnceCallback<4>( + favicon_base::GoogleFaviconServerRequestStatus::SUCCESS)); + + // Returns an empty image twice (when image does not comply to our specs). + EXPECT_CALL(mock_large_icon_service_, + GetLargeIconImageOrFallbackStyleForPageUrl( + testing::_, testing::_, testing::_, testing::_, testing::_)) + .Times(2) + .WillRepeatedly([=](auto, auto, auto, + favicon_base::LargeIconImageCallback image_callback, + auto) { + std::move(image_callback).Run(CreateEmptyTestImageResult()); + return kTaskId; + }); + + // No favicon is returned to the caller. + EXPECT_CALL(*favicon_fetcher_, ExecuteFaviconCallback(testing::_, testing::_)) + .Times(0); + + base::WeakPtr<FaviconFetcher> faviconFetcherWeakPtr = + favicon_fetcher_->GetWeakPtr(); + favicon_fetcher_->FetchFavicon(StringToGURL("page.com"), true, 16, 32, + base::android::ScopedJavaGlobalRef<jobject>()); + + // Tests that the favicon_fetcher_ instance test is destroyed. + EXPECT_TRUE(faviconFetcherWeakPtr.WasInvalidated()); +} + +// Checks that an image is successfully returned from the cache without +// making a request to retrieve it from the server. Checks that the image is +// returned to the caller and the fetcher object is successfully destroyed. +TEST_F(FaviconFetcherTest, SuccessfullImageFetchFromCache) { + // Returns a valid image (already cached). + EXPECT_CALL(mock_large_icon_service_, + GetLargeIconImageOrFallbackStyleForPageUrl( + testing::_, testing::_, testing::_, testing::_, testing::_)) + .Times(1) + .WillOnce([=](auto, auto, auto, + favicon_base::LargeIconImageCallback image_callback, auto) { + std::move(image_callback).Run(CreateTestImageResult()); + return kTaskId; + }); + + // Tests that favicon is returned to the caller (Android callback execution). + EXPECT_CALL(*favicon_fetcher_, ExecuteFaviconCallback(testing::_, testing::_)) + .Times(1); + + // No server request is done when image exists in cache. + EXPECT_CALL(mock_large_icon_service_, + GetLargeIconOrFallbackStyleFromGoogleServerSkippingLocalCache( + testing::_, testing::_, testing::_, testing::_, testing::_)) + .Times(0); + + base::WeakPtr<FaviconFetcher> faviconFetcherWeakPtr = + favicon_fetcher_->GetWeakPtr(); + favicon_fetcher_->FetchFavicon(StringToGURL("page.com"), true, 16, 32, + base::android::ScopedJavaGlobalRef<jobject>()); + + // Tests that the favicon_fetcher_ instance test is destroyed. + EXPECT_TRUE(faviconFetcherWeakPtr.WasInvalidated()); +} + +// Checks that no image is successfuly returned from the server after requesting +// it. Checks that no image is returned to the caller and the fetcher object is +// successfully destroyed. +TEST_F(FaviconFetcherTest, UnuccessfullImageRequest) { + // Unsuccessful image request from server. + EXPECT_CALL(mock_large_icon_service_, + GetLargeIconOrFallbackStyleFromGoogleServerSkippingLocalCache( + testing::_, testing::_, testing::_, testing::_, testing::_)) + .Times(1) + .WillOnce(base::test::RunOnceCallback<4>( + favicon_base::GoogleFaviconServerRequestStatus::FAILURE_HTTP_ERROR)); + + // Returns an empty image. + EXPECT_CALL(mock_large_icon_service_, + GetLargeIconImageOrFallbackStyleForPageUrl( + testing::_, testing::_, testing::_, testing::_, testing::_)) + .Times(1) + .WillOnce([=](auto, auto, auto, + favicon_base::LargeIconImageCallback image_callback, auto) { + std::move(image_callback).Run(CreateEmptyTestImageResult()); + return kTaskId; + }); + + // Nothing is returned to the caller. + EXPECT_CALL(*favicon_fetcher_, ExecuteFaviconCallback(testing::_, testing::_)) + .Times(0); + + base::WeakPtr<FaviconFetcher> faviconFetcherWeakPtr = + favicon_fetcher_->GetWeakPtr(); + favicon_fetcher_->FetchFavicon(StringToGURL("page.com"), true, 16, 32, + base::android::ScopedJavaGlobalRef<jobject>()); + + // Tests that the favicon_fetcher_ instance test is destroyed. + EXPECT_TRUE(faviconFetcherWeakPtr.WasInvalidated()); +} + +} // namespace
diff --git a/chrome/browser/supervised_user/android/website_parent_approval.cc b/chrome/browser/supervised_user/android/website_parent_approval.cc index 5d4f6b7..8484b19 100644 --- a/chrome/browser/supervised_user/android/website_parent_approval.cc +++ b/chrome/browser/supervised_user/android/website_parent_approval.cc
@@ -13,6 +13,7 @@ #include "base/android/scoped_java_ref.h" #include "base/callback.h" #include "base/no_destructor.h" +#include "chrome/browser/favicon/large_icon_service_factory.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/profiles/profile_manager.h" #include "chrome/browser/supervised_user/android/favicon_fetcher.h" @@ -75,9 +76,10 @@ GURL url = *(url::GURLAndroid::ToNativeGURL(env, j_url)); FaviconFetcher* faviconFetcher = - new FaviconFetcher(ProfileManager::GetActiveUserProfile()); + new FaviconFetcher(LargeIconServiceFactory::GetForBrowserContext( + ProfileManager::GetActiveUserProfile())); faviconFetcher->FetchFavicon( url, true, min_source_size_in_pixel, desired_size_in_pixel, base::android::ScopedJavaGlobalRef(on_favicon_fetched_callback)); -} \ No newline at end of file +}
diff --git a/chrome/browser/sync/test/integration/single_client_nigori_sync_test.cc b/chrome/browser/sync/test/integration/single_client_nigori_sync_test.cc index a12ee1c..25ad5c7 100644 --- a/chrome/browser/sync/test/integration/single_client_nigori_sync_test.cc +++ b/chrome/browser/sync/test/integration/single_client_nigori_sync_test.cc
@@ -1443,8 +1443,9 @@ // server. } -IN_PROC_BROWSER_TEST_F(SingleClientNigoriWithWebApiTest, - ShouldDeferAddingTrustedVaultRecoverabilityMethod) { +IN_PROC_BROWSER_TEST_F( + SingleClientNigoriWithWebApiTest, + ShouldDeferAddingTrustedVaultRecoverabilityMethodUntilSignIn) { const int kTestMethodTypeHint = 8; // Mimic the account being already using a trusted vault passphrase. @@ -1486,6 +1487,55 @@ IN_PROC_BROWSER_TEST_F( SingleClientNigoriWithWebApiTest, + ShouldDeferAddingTrustedVaultRecoverabilityMethodUntilAuthErrorFixed) { + const int kTestMethodTypeHint = 8; + + // Mimic the account being already using a trusted vault passphrase. + const std::vector<uint8_t> trusted_vault_key = + GetSecurityDomainsServer()->RotateTrustedVaultKey( + /*last_trusted_vault_key=*/syncer::GetConstantTrustedVaultKey()); + SetNigoriInFakeServer(BuildTrustedVaultNigoriSpecifics( + /*trusted_vault_keys=*/{trusted_vault_key}), + GetFakeServer()); + ASSERT_TRUE(SetupClients()); + + // Mimic the key being available upon startup but recoverability degraded. + GetSecurityDomainsServer()->RequirePublicKeyToAvoidRecoverabilityDegraded( + kTestRecoveryMethodPublicKey); + GetSyncService(0)->AddTrustedVaultDecryptionKeysFromWeb( + kGaiaId, GetSecurityDomainsServer()->GetAllTrustedVaultKeys(), + /*last_key_version=*/GetSecurityDomainsServer()->GetCurrentEpoch()); + ASSERT_TRUE(GetSecurityDomainsServer()->IsRecoverabilityDegraded()); + + // Sign in now and wait until sync initializes. + ASSERT_TRUE(SetupSync()); + + // Enter a persistent auth error state. + GetClient(0)->EnterSyncPausedStateForPrimaryAccount(); + ASSERT_TRUE(GetSyncService(0)->GetAuthError().IsPersistentError()); + + // Mimic a recovery method being added during a persistent auth error, which + // should be deferred until the auth error is resolved. + base::RunLoop run_loop; + GetSyncService(0)->AddTrustedVaultRecoveryMethodFromWeb( + kGaiaId, kTestRecoveryMethodPublicKey, kTestMethodTypeHint, + run_loop.QuitClosure()); + + // Mimic the auth error state being resolved. + ASSERT_TRUE(GetSecurityDomainsServer()->IsRecoverabilityDegraded()); + GetClient(0)->ExitSyncPausedStateForPrimaryAccount(); + + // Wait until AddTrustedVaultRecoveryMethodFromWeb() completes. + run_loop.Run(); + + EXPECT_TRUE(TrustedVaultRecoverabilityDegradedStateChecker(GetSyncService(0), + /*degraded=*/false) + .Wait()); + EXPECT_FALSE(GetSecurityDomainsServer()->IsRecoverabilityDegraded()); +} + +IN_PROC_BROWSER_TEST_F( + SingleClientNigoriWithWebApiTest, ShouldReportDegradedTrustedVaultRecoverabilityUponResolvedAuthError) { // Mimic the key being available upon startup and recoverability good (not // degraded).
diff --git a/chrome/browser/sync/test/integration/two_client_sessions_sync_test.cc b/chrome/browser/sync/test/integration/two_client_sessions_sync_test.cc index c65e4b9..6f5aa49e 100644 --- a/chrome/browser/sync/test/integration/two_client_sessions_sync_test.cc +++ b/chrome/browser/sync/test/integration/two_client_sessions_sync_test.cc
@@ -266,63 +266,4 @@ WaitForForeignSessionsToSync(/*local_index=*/0, /*non_local_index=*/1)); } -#if !BUILDFLAG(IS_CHROMEOS) -class TwoClientSessionsWithDestroyProfileSyncTest - : public TwoClientSessionsSyncTest { - public: - TwoClientSessionsWithDestroyProfileSyncTest() { - features_.InitAndEnableFeature(features::kDestroyProfileOnBrowserClose); - } - - private: - base::test::ScopedFeatureList features_; -}; - -IN_PROC_BROWSER_TEST_F(TwoClientSessionsWithDestroyProfileSyncTest, - ShouldNotSyncLastClosedTab) { - ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; - - ASSERT_TRUE(CheckInitialState(0)); - ASSERT_TRUE(CheckInitialState(1)); - - ASSERT_TRUE(OpenMultipleTabs(0, {GURL(kURL1), GURL(kURL2)})); - - ASSERT_TRUE( - WaitForForeignSessionsToSync(/*local_index=*/0, /*non_local_index=*/1)); - - // Close all tabs and wait for syncing. - CloseTab(/*browser_index=*/0, /*tab_index=*/0); - ASSERT_TRUE( - WaitForForeignSessionsToSync(/*local_index=*/0, /*non_local_index=*/1)); - - ScopedWindowMap local_map_before_closing; - ASSERT_TRUE(GetLocalWindows(/*browser_index=*/0, &local_map_before_closing)); - - { - // Closing the last tab results in profile destruction and hence may require - // running blocking tasks which are normally disallowed during tests. - // TODO(crbug.com/1334091): remove once it's clear why it results in - // blocking tasks. - base::ScopedAllowUnresponsiveTasksForTesting scoped_allow_sync_primitives; - CloseTab(/*browser_index=*/0, /*tab_index=*/0); - - // TODO(crbug.com/1039234): When DestroyProfileOnBrowserClose is enabled, - // the last CloseTab() triggers Profile deletion (and SyncService deletion). - // This means the last tab close never gets synced. We should fix this - // regression eventually. Once that's done, merge this test with the - // WithoutDestroyProfile version. - base::RunLoop run_loop; - base::ThreadTaskRunnerHandle::Get()->PostDelayedTask( - FROM_HERE, run_loop.QuitClosure(), TestTimeouts::action_timeout()); - run_loop.Run(); - } - - SyncedSessionVector sessions; - ASSERT_TRUE(GetSessionData(/*browser_index=*/1, &sessions)); - ASSERT_EQ(1u, sessions.size()); - ASSERT_TRUE( - WindowsMatch(local_map_before_closing, sessions.front()->windows)); -} -#endif // !BUILDFLAG(IS_CHROMEOS) - } // namespace
diff --git a/chrome/browser/task_manager/mock_web_contents_task_manager.cc b/chrome/browser/task_manager/mock_web_contents_task_manager.cc index bfcc751..b537f6c 100644 --- a/chrome/browser/task_manager/mock_web_contents_task_manager.cc +++ b/chrome/browser/task_manager/mock_web_contents_task_manager.cc
@@ -5,6 +5,7 @@ #include "chrome/browser/task_manager/mock_web_contents_task_manager.h" #include "base/containers/contains.h" +#include "base/ranges/algorithm.h" #include "build/build_config.h" namespace task_manager { @@ -21,8 +22,9 @@ void MockWebContentsTaskManager::TaskRemoved(Task* task) { DCHECK(task); - DCHECK(base::Contains(tasks_, task)); - tasks_.erase(std::find(tasks_.begin(), tasks_.end(), task)); + const auto it = base::ranges::find(tasks_, task); + DCHECK(it != tasks_.end()); + tasks_.erase(it); } void MockWebContentsTaskManager::StartObserving() {
diff --git a/chrome/browser/task_manager/providers/crosapi/task_manager_controller_lacros.cc b/chrome/browser/task_manager/providers/crosapi/task_manager_controller_lacros.cc index 3a056d42..2e4cb90 100644 --- a/chrome/browser/task_manager/providers/crosapi/task_manager_controller_lacros.cc +++ b/chrome/browser/task_manager/providers/crosapi/task_manager_controller_lacros.cc
@@ -4,6 +4,7 @@ #include "chrome/browser/task_manager/providers/crosapi/task_manager_controller_lacros.h" +#include "base/containers/contains.h" #include "base/guid.h" #include "base/time/time.h" #include "chrome/browser/task_manager/task_manager_interface.h" @@ -145,9 +146,7 @@ // from ash to remove a task after the task has been removed from lacros // task manager but before the cached |id_to_tasks_| is refreshed in // GetTaskManagerTasks() call. - const auto& task_ids = observed_task_manager()->GetTaskIdsList(); - if (std::find(task_ids.begin(), task_ids.end(), task_id) != - task_ids.end()) { + if (base::Contains(observed_task_manager()->GetTaskIdsList(), task_id)) { observed_task_manager()->ActivateTask(task_id); } return;
diff --git a/chrome/browser/task_manager/providers/web_contents/web_contents_tags_manager.cc b/chrome/browser/task_manager/providers/web_contents/web_contents_tags_manager.cc index 360ba2b0..3b78411 100644 --- a/chrome/browser/task_manager/providers/web_contents/web_contents_tags_manager.cc +++ b/chrome/browser/task_manager/providers/web_contents/web_contents_tags_manager.cc
@@ -4,9 +4,8 @@ #include "chrome/browser/task_manager/providers/web_contents/web_contents_tags_manager.h" -#include <algorithm> - #include "base/memory/singleton.h" +#include "base/ranges/algorithm.h" #include "chrome/browser/task_manager/providers/web_contents/web_contents_task_provider.h" namespace task_manager { @@ -26,9 +25,7 @@ void WebContentsTagsManager::RemoveTag(WebContentsTag* tag) { DCHECK(tag); - tracked_tags_.erase(std::find(tracked_tags_.begin(), - tracked_tags_.end(), - tag)); + tracked_tags_.erase(base::ranges::find(tracked_tags_, tag)); // No need to inform the provider here. The provider will create an entry // for each WebContents it's tracking which is a WebContentsObserver and
diff --git a/chrome/browser/thumbnail/cc/thumbnail_cache.cc b/chrome/browser/thumbnail/cc/thumbnail_cache.cc index a94f933..8784b0c 100644 --- a/chrome/browser/thumbnail/cc/thumbnail_cache.cc +++ b/chrome/browser/thumbnail/cc/thumbnail_cache.cc
@@ -4,7 +4,6 @@ #include "chrome/browser/thumbnail/cc/thumbnail_cache.h" -#include <algorithm> #include <cmath> #include <utility> @@ -18,6 +17,7 @@ #include "base/files/file_path.h" #include "base/files/file_util.h" #include "base/metrics/field_trial_params.h" +#include "base/ranges/algorithm.h" #include "base/strings/string_number_conversions.h" #include "base/task/thread_pool.h" #include "base/time/time.h" @@ -534,7 +534,7 @@ } void ThumbnailCache::RemoveFromReadQueue(TabId tab_id) { - auto read_iter = std::find(read_queue_.begin(), read_queue_.end(), tab_id); + auto read_iter = base::ranges::find(read_queue_, tab_id); if (read_iter != read_queue_.end()) read_queue_.erase(read_iter); } @@ -922,7 +922,7 @@ const gfx::Size& content_size) { read_in_progress_ = false; - auto iter = std::find(read_queue_.begin(), read_queue_.end(), tab_id); + auto iter = base::ranges::find(read_queue_, tab_id); if (iter == read_queue_.end()) { ReadNextThumbnail(); return;
diff --git a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/LocationBarCoordinator.java b/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/LocationBarCoordinator.java index c23d1c7d..782e8b21 100644 --- a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/LocationBarCoordinator.java +++ b/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/LocationBarCoordinator.java
@@ -679,4 +679,18 @@ return isIncognito ? mSuggestionIncognitoBackgroundColor : mSuggestionStandardBackgroundColor; } + + /** + * Function used to position the url bar inside the location bar during omnibox animation. + * + * @param urlExpansionPercent The current expansion percent, 1 is fully focused and 0 is + * completely unfocused. + * @param isOnNtp True if tab mode is the NTP. + * @return The X translation for the URL bar, used in the toolbar animation. + */ + public float getUrlBarTranslationXForToolbarAnimation( + float urlExpansionPercent, boolean isOnNtp) { + return mLocationBarMediator.getUrlBarTranslationXForToolbarAnimation( + urlExpansionPercent, isOnNtp); + } }
diff --git a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/LocationBarLayout.java b/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/LocationBarLayout.java index 184f699..db394ed 100644 --- a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/LocationBarLayout.java +++ b/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/LocationBarLayout.java
@@ -187,7 +187,10 @@ MarginLayoutParamsCompat.getMarginStart(urlActionContainerLayoutParams) + MarginLayoutParamsCompat.getMarginEnd(urlActionContainerLayoutParams); } - urlContainerMarginEnd += mStatusCoordinator.getAdditionalUrlContainerMarginEnd(); + urlContainerMarginEnd += mStatusCoordinator.isSearchEngineStatusIconVisible() + && mStatusCoordinator.shouldDisplaySearchEngineIcon() + ? getEndPaddingPixelSizeOnFocusDelta() + : 0; // Account for the URL action container end padding on tablets. if (DeviceFormFactor.isNonMultiDisplayContextOnTablet(getContext())) { urlContainerMarginEnd += @@ -298,5 +301,11 @@ mUrlActionContainer.setVisibility(visibility); } + /** Returns the increase in StatusView end padding, when the Url bar is focused. */ + public int getEndPaddingPixelSizeOnFocusDelta() { + return getResources().getDimensionPixelSize(R.dimen.location_bar_icon_end_padding_focused) + - getResources().getDimensionPixelSize(R.dimen.location_bar_icon_end_padding); + } + public void notifyVoiceRecognitionCanceled() {} }
diff --git a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/LocationBarMediator.java b/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/LocationBarMediator.java index 8c37841..e3c79ff 100644 --- a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/LocationBarMediator.java +++ b/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/LocationBarMediator.java
@@ -1182,6 +1182,42 @@ } } + float getUrlBarTranslationXForToolbarAnimation(float urlExpansionPercent, boolean isOnNtp) { + // No offset is required if we are not showing the SE logo. + if (!mSearchEngineLogoUtils.shouldShowSearchEngineLogo( + mLocationBarDataProvider.isIncognito())) { + return 0; + } + + boolean isRtl = mLocationBarLayout.getLayoutDirection() == View.LAYOUT_DIRECTION_RTL; + // The calculation here is: the difference in padding between the focused vs unfocused + // states and also accounts for the translation that the status icon will do. In the end, + // this translation will be the distance that the url bar needs to travel to arrive at the + // desired padding when focused. + float translation = + urlExpansionPercent * mLocationBarLayout.getEndPaddingPixelSizeOnFocusDelta(); + + boolean scrollingOnNtp = + !mUrlHasFocus && mStatusCoordinator.isSearchEngineStatusIconVisible() && isOnNtp; + if (scrollingOnNtp) { + // When: + // 1. unfocusing the LocationBar on the NTP. + // 2. scrolling the fakebox to the LocationBar on the NTP. + // The status icon and the URL bar text overlap in the animation. + // + // This branch calculates the negative distance the URL bar needs to travel to + // completely overlap the status icon and end up in a state that matches the fakebox. + translation -= (1f - urlExpansionPercent) + * (mStatusCoordinator.getStatusIconWidth() + - mLocationBarLayout.getEndPaddingPixelSizeOnFocusDelta()); + } + // For LTR, the value is negative because the status icon is left of the url bar on the + // x/y plane. + // For RTL, the value is positive because the status icon is right of the url bar on the + // x/y plane. + return isRtl ? -translation : translation; + } + // LocationBarData.Observer implementation // Using the default empty onSecurityStateChanged. // Using the default empty onTitleChanged.
diff --git a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/status/StatusCoordinator.java b/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/status/StatusCoordinator.java index 96b7568..017982a 100644 --- a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/status/StatusCoordinator.java +++ b/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/status/StatusCoordinator.java
@@ -208,6 +208,11 @@ return mStatusView.isSearchEngineStatusIconVisible(); } + /** Returns {@code true} if the search engine icon is currently being displayed. */ + public boolean shouldDisplaySearchEngineIcon() { + return mMediator.shouldDisplaySearchEngineIcon(); + } + /** Returns the ID of the drawable currently shown in the security icon. */ @DrawableRes public int getSecurityIconResourceIdForTesting() { @@ -277,11 +282,6 @@ return mStatusView.getMeasuredWidth(); } - /** Returns the increase in StatusView end padding, when the Url bar is focused. */ - public int getEndPaddingPixelSizeOnFocusDelta() { - return mMediator.getEndPaddingPixelSizeOnFocusDelta(); - } - /** * Notifies StatusCoordinator that the default match for the currently entered autocomplete text * has been classified, indicating whether the default match is a search. @@ -292,13 +292,6 @@ mMediator.updateLocationBarIconForDefaultMatchCategory(defaultMatchIsSearch); } - /** Returns the additional end margin for the url container. */ - public int getAdditionalUrlContainerMarginEnd() { - return mMediator.shouldDisplaySearchEngineIcon() && isSearchEngineStatusIconVisible() - ? getEndPaddingPixelSizeOnFocusDelta() - : 0; - } - public void destroy() { mMediator.destroy(); mLocationBarDataProvider.removeObserver(this);
diff --git a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/status/StatusMediator.java b/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/status/StatusMediator.java index df25526..fb7db704 100644 --- a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/status/StatusMediator.java +++ b/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/status/StatusMediator.java
@@ -161,12 +161,13 @@ mWindowAndroid = windowAndroid; mMerchantTrustSignalsCoordinatorSupplier = merchantTrustSignalsCoordinatorSupplier; + // TODO(crbug.com/1369345): Figure out how to remove the usage of + // mEndPaddingPixelSizeOnFocusDelta. mEndPaddingPixelSizeOnFocusDelta = mResources.getDimensionPixelSize(R.dimen.location_bar_icon_end_padding_focused) - mResources.getDimensionPixelSize(R.dimen.location_bar_icon_end_padding); int iconWidth = resources.getDimensionPixelSize(R.dimen.location_bar_status_icon_width); - mTextOffsetThreshold = - (float) iconWidth / (iconWidth + getEndPaddingPixelSizeOnFocusDelta()); + mTextOffsetThreshold = (float) iconWidth / (iconWidth + mEndPaddingPixelSizeOnFocusDelta); mTextOffsetAdjustedScale = mTextOffsetThreshold == 1 ? 1 : (1 - mTextOffsetThreshold); mIsTablet = isTablet; @@ -255,13 +256,6 @@ } /** - * Returns the increase in StatusView end padding, when the Url bar is focused. - */ - int getEndPaddingPixelSizeOnFocusDelta() { - return mEndPaddingPixelSizeOnFocusDelta; - } - - /** * Specify whether status icon should be shown when URL is focused. */ @VisibleForTesting
diff --git a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/status/StatusView.java b/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/status/StatusView.java index 022fba86..e8f1bcd4 100644 --- a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/status/StatusView.java +++ b/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/status/StatusView.java
@@ -98,7 +98,7 @@ } /** - * @return Whether search engine status icon is visible. + * Return whether search engine status icon is visible. */ public boolean isSearchEngineStatusIconVisible() { return mIconView.getVisibility() == VISIBLE;
diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/ToolbarPhone.java b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/ToolbarPhone.java index 72a719b..4176e7a2 100644 --- a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/ToolbarPhone.java +++ b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/ToolbarPhone.java
@@ -1064,10 +1064,13 @@ // When the dse icon is enabled, the UrlBar needs additional translation to compensate for // the additional translation applied to the LocationBar. See comments in - // LocationBar#getUrlBarTranslationXForToolbarAnimation() for implementation details. + // LocationBarCoordinator#getUrlBarTranslationXForToolbarAnimation() and + // LocationBarMediator#getUrlBarTranslationXForToolbarAnimation() for implementation + // details. if (SearchEngineLogoUtils.getInstance().shouldShowSearchEngineLogo(isIncognito)) { - mUrlBar.setTranslationX( - getUrlBarTranslationXForToolbarAnimation(mUrlExpansionFraction, hasFocus())); + mUrlBar.setTranslationX(mLocationBar.getUrlBarTranslationXForToolbarAnimation( + mUrlExpansionFraction, + UrlUtilities.isCanonicalizedNTPUrl(getToolbarDataProvider().getCurrentUrl()))); } else { mUrlBar.setTranslationX(0); } @@ -2614,60 +2617,6 @@ return mLocationBar.isLayoutRtl() ? offset : -offset; } - /** - * Function used to position the url bar inside the location bar during omnibox animation. - * - * @param urlExpansionPercent The current expansion percent, 1 is fully focused and 0 is - * completely unfocused. - * @param hasFocus True if the LocationBar has focus, this will be true between the focus - * animation starting and the unfocus animation starting. - * @return The X translation for the URL bar, used in the toolbar animation. - */ - private float getUrlBarTranslationXForToolbarAnimation( - float urlExpansionPercent, boolean hasFocus) { - StatusCoordinator statusCoordinator = mLocationBar.getStatusCoordinator(); - if (statusCoordinator == null) return 0; - SearchEngineLogoUtils searchEngineLogoUtils = SearchEngineLogoUtils.getInstance(); - assert searchEngineLogoUtils != null; - - // No offset is required if the experiment is disabled. - if (!searchEngineLogoUtils.shouldShowSearchEngineLogo( - getToolbarDataProvider().isIncognito())) { - return 0; - } - - boolean isRtl = mLocationBar.isLayoutRtl(); - // The calculation here is: the difference in padding between the focused vs unfocused - // states and also accounts for the translation that the status icon will do. In the end, - // this translation will be the distance that the url bar needs to travel to arrive at the - // desired padding when focused. - float translation = - urlExpansionPercent * statusCoordinator.getEndPaddingPixelSizeOnFocusDelta(); - - boolean scrollingOnNtp = !hasFocus && statusCoordinator.isSearchEngineStatusIconVisible() - && UrlUtilities.isCanonicalizedNTPUrl(getToolbarDataProvider().getCurrentUrl()); - if (scrollingOnNtp) { - // When: - // 1. unfocusing the LocationBar on the NTP. - // 2. scrolling the fakebox to the LocationBar on the NTP. - // The status icon and the URL bar text overlap in the animation. - // - // This branch calculates the negative distance the URL bar needs to travel to - // completely overlap the status icon and end up in a state that matches the fakebox. - float overStatusIconTranslation = translation - - (1f - urlExpansionPercent) - * (statusCoordinator.getStatusIconWidth() - - getAdditionalOffsetForNTP()); - // For LTR, the value is negative because the status icon is left of the url bar on the - // x/y plane. - // For RTL, the value is positive because the status icon is right of the url bar on the - // x/y plane. - return isRtl ? -overStatusIconTranslation : overStatusIconTranslation; - } - - return isRtl ? -translation : translation; - } - private int getAdditionalOffsetForNTP() { return getResources().getDimensionPixelSize(R.dimen.location_bar_lateral_padding) - getResources().getDimensionPixelSize(R.dimen.fake_search_box_lateral_padding);
diff --git a/chrome/browser/ui/app_list/chrome_app_list_model_updater_browsertest.cc b/chrome/browser/ui/app_list/chrome_app_list_model_updater_browsertest.cc index 2503e394..c82c724 100644 --- a/chrome/browser/ui/app_list/chrome_app_list_model_updater_browsertest.cc +++ b/chrome/browser/ui/app_list/chrome_app_list_model_updater_browsertest.cc
@@ -8,15 +8,12 @@ #include "ash/app_list/model/app_list_item.h" #include "ash/app_list/model/app_list_model.h" -#include "ash/constants/ash_features.h" #include "ash/public/cpp/accelerators.h" -#include "ash/public/cpp/pagination/pagination_model.h" #include "ash/public/cpp/shelf_model.h" #include "ash/public/cpp/test/app_list_test_api.h" #include "base/files/file_util.h" #include "base/path_service.h" #include "base/run_loop.h" -#include "base/test/scoped_feature_list.h" #include "chrome/browser/apps/app_service/app_service_proxy.h" #include "chrome/browser/apps/app_service/app_service_proxy_factory.h" #include "chrome/browser/ash/login/login_manager_test.h" @@ -35,7 +32,6 @@ #include "chrome/browser/web_applications/web_app_install_info.h" #include "chrome/common/chrome_constants.h" #include "chrome/common/chrome_paths.h" -#include "chrome/common/chrome_switches.h" #include "chrome/test/base/interactive_test_utils.h" #include "components/account_id/account_id.h" #include "components/app_constants/constants.h" @@ -99,19 +95,14 @@ ash::LoginManagerMixin login_mixin_{&mixin_host_}; }; -class ChromeAppListModelUpdaterTestBase - : public extensions::ExtensionBrowserTest { +class ChromeAppListModelUpdaterTest : public extensions::ExtensionBrowserTest { public: - explicit ChromeAppListModelUpdaterTestBase( - bool enable_productivity_launcher) { - feature_list_.InitWithFeatureState(ash::features::kProductivityLauncher, - enable_productivity_launcher); - } - ~ChromeAppListModelUpdaterTestBase() override = default; - ChromeAppListModelUpdaterTestBase( - const ChromeAppListModelUpdaterTestBase& other) = delete; - ChromeAppListModelUpdaterTestBase& operator=( - const ChromeAppListModelUpdaterTestBase& other) = delete; + ChromeAppListModelUpdaterTest() = default; + ~ChromeAppListModelUpdaterTest() override = default; + ChromeAppListModelUpdaterTest(const ChromeAppListModelUpdaterTest& other) = + delete; + ChromeAppListModelUpdaterTest& operator=( + const ChromeAppListModelUpdaterTest& other) = delete; protected: void SetUpOnMainThread() override { @@ -127,39 +118,11 @@ void ShowAppList() { ash::AcceleratorController::Get()->PerformActionIfEnabled( ash::TOGGLE_APP_LIST, {}); - if (ash::features::IsProductivityLauncherEnabled()) { - app_list_test_api_.WaitForBubbleWindow( - /*wait_for_opening_animation=*/false); - } + app_list_test_api_.WaitForBubbleWindow( + /*wait_for_opening_animation=*/false); } ash::AppListTestApi app_list_test_api_; - - private: - base::test::ScopedFeatureList feature_list_; -}; - -// Parameterized by whether productivity launcher is enabled, -class ChromeAppListModelUpdaterTest - : public ChromeAppListModelUpdaterTestBase, - public ::testing::WithParamInterface<bool> { - public: - ChromeAppListModelUpdaterTest() - : ChromeAppListModelUpdaterTestBase( - /*enable_productivity_launcher=*/GetParam()) {} - ~ChromeAppListModelUpdaterTest() override = default; -}; - -INSTANTIATE_TEST_SUITE_P(ProductivityLauncher, - ChromeAppListModelUpdaterTest, - ::testing::Bool()); - -class ChromeAppListModelUpdaterProductivityLauncherTest - : public ChromeAppListModelUpdaterTestBase { - public: - ChromeAppListModelUpdaterProductivityLauncherTest() - : ChromeAppListModelUpdaterTestBase( - /*enable_productivity_launcher=*/true) {} }; // Tests that an Oem app and its folder are created with valid positions after @@ -185,7 +148,7 @@ EXPECT_TRUE(oem_folder->position().IsValid()); } -IN_PROC_BROWSER_TEST_P(ChromeAppListModelUpdaterTest, +IN_PROC_BROWSER_TEST_F(ChromeAppListModelUpdaterTest, GetPositionBeforeFirstItemTest) { AppListClientImpl* client = AppListClientImpl::GetInstance(); ASSERT_TRUE(client); @@ -226,7 +189,7 @@ } } -IN_PROC_BROWSER_TEST_P(ChromeAppListModelUpdaterTest, +IN_PROC_BROWSER_TEST_F(ChromeAppListModelUpdaterTest, PRE_ReorderAppPositionInTopLevelAppList) { const std::string app1_id = LoadExtension(test_data_dir_.AppendASCII("app1"))->id(); @@ -251,15 +214,9 @@ // |top_level_id_list| size here. ASSERT_GE(top_level_id_list_size, 3u); - if (ash::features::IsProductivityLauncherEnabled()) { - ASSERT_EQ(top_level_id_list[2], app1_id); - ASSERT_EQ(top_level_id_list[1], app2_id); - ASSERT_EQ(top_level_id_list[0], app3_id); - } else { - ASSERT_EQ(top_level_id_list[top_level_id_list_size - 3], app1_id); - ASSERT_EQ(top_level_id_list[top_level_id_list_size - 2], app2_id); - ASSERT_EQ(top_level_id_list[top_level_id_list_size - 1], app3_id); - } + ASSERT_EQ(top_level_id_list[2], app1_id); + ASSERT_EQ(top_level_id_list[1], app2_id); + ASSERT_EQ(top_level_id_list[0], app3_id); // After the move operation, app3 should be at index 0 and app1 should be at // index 1. App2 stays at the last position in the item list. @@ -272,16 +229,12 @@ EXPECT_EQ(top_level_id_list_size, reordered_top_level_id_list.size()); EXPECT_EQ(reordered_top_level_id_list[0], app3_id); EXPECT_EQ(reordered_top_level_id_list[1], app1_id); - if (ash::features::IsProductivityLauncherEnabled()) { - EXPECT_EQ(reordered_top_level_id_list[2], app2_id); - } else { - EXPECT_EQ(reordered_top_level_id_list.back(), app2_id); - } + EXPECT_EQ(reordered_top_level_id_list[2], app2_id); } // Tests if the app position changed in the top level persist after the system // restarts. -IN_PROC_BROWSER_TEST_P(ChromeAppListModelUpdaterTest, +IN_PROC_BROWSER_TEST_F(ChromeAppListModelUpdaterTest, ReorderAppPositionInTopLevelAppList) { // Create the app list view and show the apps grid. ShowAppList(); @@ -308,14 +261,10 @@ EXPECT_EQ(reordered_top_level_id_list[0], app3_id); EXPECT_EQ(reordered_top_level_id_list[1], app1_id); - if (ash::features::IsProductivityLauncherEnabled()) { - ASSERT_EQ(reordered_top_level_id_list[2], app2_id); - } else { - EXPECT_EQ(reordered_top_level_id_list.back(), app2_id); - } + EXPECT_EQ(reordered_top_level_id_list[2], app2_id); } -IN_PROC_BROWSER_TEST_P(ChromeAppListModelUpdaterTest, +IN_PROC_BROWSER_TEST_F(ChromeAppListModelUpdaterTest, PRE_ReorderAppPositionInFolder) { const std::string app1_id = LoadExtension(test_data_dir_.AppendASCII("app1"))->id(); @@ -348,7 +297,7 @@ // Tests if the app position changed in a folder persist after the system // restarts. -IN_PROC_BROWSER_TEST_P(ChromeAppListModelUpdaterTest, +IN_PROC_BROWSER_TEST_F(ChromeAppListModelUpdaterTest, ReorderAppPositionInFolder) { const std::string app1_id = GetExtensionByPath(extension_registry()->enabled_extensions(), @@ -373,7 +322,7 @@ EXPECT_EQ(app_list_test_api_.GetAppIdsInFolder(folder_id), reordered_id_list); } -IN_PROC_BROWSER_TEST_P(ChromeAppListModelUpdaterTest, +IN_PROC_BROWSER_TEST_F(ChromeAppListModelUpdaterTest, PRE_UnmergeTwoItemFolder) { const std::string app1_id = LoadExtension(test_data_dir_.AppendASCII("app1"))->id(); @@ -404,49 +353,30 @@ ash::AppListItem* app3_item = model->FindItem(app3_id); ASSERT_TRUE(app3_item); - if (ash::features::IsProductivityLauncherEnabled()) { - model->MoveItemToRootAt(app2_item, app3_item->position().CreateBefore()); - } else { - model->MoveItemToRootAt(app2_item, app3_item->position().CreateAfter()); - } + model->MoveItemToRootAt(app2_item, app3_item->position().CreateBefore()); // Get last 3 items (the grid may have default items, in addition to the ones // installed by the test). std::vector<std::string> top_level_id_list = app_list_test_api_.GetTopLevelViewIdList(); ASSERT_GT(top_level_id_list.size(), 2u); - if (ash::features::IsProductivityLauncherEnabled()) { - EXPECT_TRUE(base::Contains(top_level_id_list, folder_id)); - model->MoveItemToRootAt(app1_item, app2_item->position().CreateBefore()); + EXPECT_TRUE(base::Contains(top_level_id_list, folder_id)); + model->MoveItemToRootAt(app1_item, app2_item->position().CreateBefore()); - top_level_id_list = app_list_test_api_.GetTopLevelViewIdList(); - EXPECT_FALSE(base::Contains(top_level_id_list, folder_id)); - } else { - EXPECT_FALSE(base::Contains(top_level_id_list, folder_id)); - } + top_level_id_list = app_list_test_api_.GetTopLevelViewIdList(); + EXPECT_FALSE(base::Contains(top_level_id_list, folder_id)); - if (ash::features::IsProductivityLauncherEnabled()) { - std::vector<std::string> leading_items = { - top_level_id_list[0], - top_level_id_list[1], - top_level_id_list[2], - }; + std::vector<std::string> leading_items = { + top_level_id_list[0], + top_level_id_list[1], + top_level_id_list[2], + }; - EXPECT_EQ(std::vector<std::string>({app1_id, app2_id, app3_id}), - leading_items); - } else { - std::vector<std::string> trailing_items = { - top_level_id_list[top_level_id_list.size() - 3], - top_level_id_list[top_level_id_list.size() - 2], - top_level_id_list[top_level_id_list.size() - 1], - }; - - EXPECT_EQ(std::vector<std::string>({app1_id, app3_id, app2_id}), - trailing_items); - } + EXPECT_EQ(std::vector<std::string>({app1_id, app2_id, app3_id}), + leading_items); } -IN_PROC_BROWSER_TEST_P(ChromeAppListModelUpdaterTest, UnmergeTwoItemFolder) { +IN_PROC_BROWSER_TEST_F(ChromeAppListModelUpdaterTest, UnmergeTwoItemFolder) { const std::string app1_id = GetExtensionByPath(extension_registry()->enabled_extensions(), test_data_dir_.AppendASCII("app1")) @@ -469,31 +399,20 @@ app_list_test_api_.GetTopLevelViewIdList(); ASSERT_GT(top_level_id_list.size(), 2u); - if (ash::features::IsProductivityLauncherEnabled()) { - std::vector<std::string> leading_items = { - top_level_id_list[0], - top_level_id_list[1], - top_level_id_list[2], - }; + std::vector<std::string> leading_items = { + top_level_id_list[0], + top_level_id_list[1], + top_level_id_list[2], + }; - EXPECT_EQ(std::vector<std::string>({app1_id, app2_id, app3_id}), - leading_items); - } else { - std::vector<std::string> trailing_items = { - top_level_id_list[top_level_id_list.size() - 3], - top_level_id_list[top_level_id_list.size() - 2], - top_level_id_list[top_level_id_list.size() - 1], - }; - - EXPECT_EQ(std::vector<std::string>({app1_id, app3_id, app2_id}), - trailing_items); - } + EXPECT_EQ(std::vector<std::string>({app1_id, app2_id, app3_id}), + leading_items); } // Tests that session restart before a default pinned preinstalled app is // correctly positioned in the app list if the session restarts before the app // installation completes. -IN_PROC_BROWSER_TEST_P(ChromeAppListModelUpdaterTest, +IN_PROC_BROWSER_TEST_F(ChromeAppListModelUpdaterTest, PRE_SessionRestartDoesntOverrideDefaultAppListPosition) { // Simluate installation of an app pinned to shelf by default: // App with web_app::kGmailAppId ID. @@ -511,7 +430,7 @@ GetOrderedShelfItems(app_filter)); } -IN_PROC_BROWSER_TEST_P(ChromeAppListModelUpdaterTest, +IN_PROC_BROWSER_TEST_F(ChromeAppListModelUpdaterTest, SessionRestartDoesntOverrideDefaultAppListPosition) { app_list::AppListSyncableService* app_list_syncable_service = app_list::AppListSyncableServiceFactory::GetForProfile(profile()); @@ -556,7 +475,7 @@ filtered_top_level_id_list); } -IN_PROC_BROWSER_TEST_P(ChromeAppListModelUpdaterTest, +IN_PROC_BROWSER_TEST_F(ChromeAppListModelUpdaterTest, PRE_UserAppsInEphemeralFoldersMovedToRootAfterRestart) { // Install 2 apps. const std::string app1_id = @@ -613,7 +532,7 @@ EXPECT_EQ(app2_item->folder_id(), kEphemeralFolderId); } -IN_PROC_BROWSER_TEST_P(ChromeAppListModelUpdaterTest, +IN_PROC_BROWSER_TEST_F(ChromeAppListModelUpdaterTest, UserAppsInEphemeralFoldersMovedToRootAfterRestart) { // Create the app list view and show the apps grid. ShowAppList(); @@ -643,8 +562,7 @@ EXPECT_FALSE(app2_item->IsInFolder()); } -IN_PROC_BROWSER_TEST_F(ChromeAppListModelUpdaterProductivityLauncherTest, - IsNewInstall) { +IN_PROC_BROWSER_TEST_F(ChromeAppListModelUpdaterTest, IsNewInstall) { AppListClientImpl* client = AppListClientImpl::GetInstance(); ASSERT_TRUE(client); AppListModelUpdater* model_updater = test::GetModelUpdater(client); @@ -683,8 +601,7 @@ EXPECT_TRUE(item2->CloneMetadata()->is_new_install); } -IN_PROC_BROWSER_TEST_F(ChromeAppListModelUpdaterProductivityLauncherTest, - IsNewInstallInFolder) { +IN_PROC_BROWSER_TEST_F(ChromeAppListModelUpdaterTest, IsNewInstallInFolder) { AppListClientImpl* client = AppListClientImpl::GetInstance(); ASSERT_TRUE(client); AppListModelUpdater* model_updater = test::GetModelUpdater(client);
diff --git a/chrome/browser/ui/ash/projector/projector_navigation_throttle_browsertest.cc b/chrome/browser/ui/ash/projector/projector_navigation_throttle_browsertest.cc index e5d12dab..671df5d6 100644 --- a/chrome/browser/ui/ash/projector/projector_navigation_throttle_browsertest.cc +++ b/chrome/browser/ui/ash/projector/projector_navigation_throttle_browsertest.cc
@@ -20,6 +20,7 @@ #include "chrome/browser/ui/browser.h" #include "chrome/browser/ui/browser_list.h" #include "chrome/browser/ui/browser_list_observer.h" +#include "chrome/browser/ui/browser_navigator.h" #include "chrome/browser/ui/browser_navigator_params.h" #include "chrome/browser/ui/tabs/tab_strip_model.h" #include "chrome/browser/web_applications/web_app_provider.h" @@ -111,10 +112,8 @@ // https://screencast.apps.chrome/xyz?resourceKey=abc redirects to // chrome://projector/app/xyz?timestamp=[timestamp]&resourceKey=abc and launches // the SWA. -// TODO(crbug.com/1368850): Disabled due to constant failure with parameter 3, 4 -// and 5. IN_PROC_BROWSER_TEST_P(ProjectorNavigationThrottleTestParameterized, - DISABLED_PwaNavigationRedirects) { + PwaNavigationRedirects) { base::HistogramTester histogram_tester; std::string url = kChromeUIUntrustedProjectorPwaUrl; @@ -132,7 +131,7 @@ // Simulate the user clicking a link. NavigateParams params(browser(), gurl, ui::PageTransition::PAGE_TRANSITION_LINK); - ui_test_utils::NavigateToURL(¶ms); + Navigate(¶ms); } else { // Simulate the user typing the url into the omnibox. ui_test_utils::NavigateToURLWithDisposition(
diff --git a/chrome/browser/ui/cocoa/bookmarks/bookmark_menu_bridge.h b/chrome/browser/ui/cocoa/bookmarks/bookmark_menu_bridge.h index 7316a53..53d5cc069 100644 --- a/chrome/browser/ui/cocoa/bookmarks/bookmark_menu_bridge.h +++ b/chrome/browser/ui/cocoa/bookmarks/bookmark_menu_bridge.h
@@ -7,9 +7,11 @@ #include <map> -#include "base/memory/raw_ptr.h" - +#include "base/files/file_path.h" #import "base/mac/scoped_nsobject.h" +#include "base/memory/raw_ptr.h" +#include "base/scoped_observation.h" +#include "components/bookmarks/browser/bookmark_model.h" #include "components/bookmarks/browser/bookmark_model_observer.h" class Profile; @@ -78,12 +80,16 @@ const bookmarks::BookmarkNode* node) override; // Rebuilds the main bookmark menu, if it has been marked invalid. Or builds - // a bookmark folder submenu on demand. - void UpdateMenu(NSMenu* menu, const bookmarks::BookmarkNode* node); + // a bookmark folder submenu on demand. If |recurse| is true, also fills all + // submenus recursively. + void UpdateMenu(NSMenu* menu, + const bookmarks::BookmarkNode* node, + bool recurse); // I wish I had a "friend @class" construct. bookmarks::BookmarkModel* GetBookmarkModel(); Profile* GetProfile(); + const base::FilePath& GetProfileDir() const; // Return the Bookmark menu. NSMenu* BookmarkMenu(); @@ -91,30 +97,44 @@ // Clear all bookmarks from |menu_root_|. void ClearBookmarkMenu(); + // Resets |profile_| to nullptr. Called before the Profile is destroyed, if + // this bridge is still needed. Rebuilds the entire menu recursively, so it + // remains functional after the Profile is destroyed. + // + // Also performs some internal cleanup, like resetting observers and pointers + // to the Profile and KeyedServices. + void OnProfileWillBeDestroyed(); + + // Returns the GUID of the BookmarkNode for |tag|. If |tag| is not the tag of + // an NSMenuItem in this menu, returns the invalid GUID. + base::GUID TagToGUID(int64_t tag) const; + private: friend class BookmarkMenuBridgeTest; friend class test::AppMenuControllerTest; - void BuildRootMenu(); + void BuildRootMenu(bool recurse); // Mark the bookmark menu as being invalid. void InvalidateMenu() { menuIsValid_ = false; } bool IsMenuValid() const { return menuIsValid_; } // Helper for adding the node as a submenu to the menu with the |node|'s title - // and the given |image| as its icon. - // If |add_extra_items| is true, also adds extra menu items at bottom of - // menu, such as "Open All Bookmarks". + // and the given |image| as its icon. If |recurse| is true, also fills all + // submenus recursively. void AddNodeAsSubmenu(NSMenu* menu, const bookmarks::BookmarkNode* node, - NSImage* image); + NSImage* image, + bool recurse); - // Helper for recursively adding items to our bookmark menu. - // All children of |node| will be added to |menu|. - // If |add_extra_items| is true, also adds extra menu items at bottom of - // menu, such as "Open All Bookmarks". + // Helper for adding items to our bookmark menu. All children of |node| will + // be added to |menu|. If |recurse| is true, also fills all submenus + // recursively. + // // TODO(jrg): add a counter to enforce maximum nodes added - void AddNodeToMenu(const bookmarks::BookmarkNode* node, NSMenu* menu); + void AddNodeToMenu(const bookmarks::BookmarkNode* node, + NSMenu* menu, + bool recurse); // Helper for adding an item to our bookmark menu. An item which has a // localized title specified by |message_id| will be added to |menu|. @@ -144,16 +164,26 @@ // True iff the menu is up to date with the actual BookmarkModel. bool menuIsValid_; - const raw_ptr<Profile> profile_; // weak + raw_ptr<Profile> profile_; // weak base::scoped_nsobject<BookmarkMenuCocoaController> controller_; base::scoped_nsobject<NSMenu> menu_root_; + base::FilePath profile_dir_; // Remembered after OnProfileWillBeDestroyed(). + // The folder image so we can use one copy for all. base::scoped_nsobject<NSImage> folder_image_; // In order to appropriately update items in the bookmark menu, without // forcing a rebuild, map the model's nodes to menu items. std::map<const bookmarks::BookmarkNode*, NSMenuItem*> bookmark_nodes_; + + // Tags are NSIntegers, so they're not necessarily large enough to hold a + // GUID. Instead, map the tags to the corresponding GUIDs. + std::map<int64_t, base::GUID> tag_to_guid_; + + base::ScopedObservation<bookmarks::BookmarkModel, + bookmarks::BookmarkModelObserver> + bookmark_model_observation_{this}; }; #endif // CHROME_BROWSER_UI_COCOA_BOOKMARKS_BOOKMARK_MENU_BRIDGE_H_
diff --git a/chrome/browser/ui/cocoa/bookmarks/bookmark_menu_bridge.mm b/chrome/browser/ui/cocoa/bookmarks/bookmark_menu_bridge.mm index d415f8c..9542eb6 100644 --- a/chrome/browser/ui/cocoa/bookmarks/bookmark_menu_bridge.mm +++ b/chrome/browser/ui/cocoa/bookmarks/bookmark_menu_bridge.mm
@@ -55,6 +55,7 @@ controller_([[BookmarkMenuCocoaController alloc] initWithBridge:this]), menu_root_([menu_root retain]) { DCHECK(profile_); + profile_dir_ = profile->GetPath(); DCHECK(menu_root_); DCHECK(![menu_root_ delegate]); [menu_root_ setDelegate:controller_]; @@ -65,9 +66,6 @@ BookmarkMenuBridge::~BookmarkMenuBridge() { ClearBookmarkMenu(); [menu_root_ setDelegate:nil]; - BookmarkModel* model = GetBookmarkModel(); - if (model) - model->RemoveObserver(this); } void BookmarkMenuBridge::BookmarkModelLoaded(BookmarkModel* model, @@ -75,23 +73,26 @@ InvalidateMenu(); } -void BookmarkMenuBridge::UpdateMenu(NSMenu* menu, const BookmarkNode* node) { +void BookmarkMenuBridge::UpdateMenu(NSMenu* menu, + const BookmarkNode* node, + bool recurse) { DCHECK(menu); DCHECK(controller_); DCHECK_EQ([menu delegate], controller_.get()); if (menu == menu_root_) { if (!IsMenuValid()) - BuildRootMenu(); + BuildRootMenu(recurse); return; } - AddNodeToMenu(node, menu); + DCHECK(node); + AddNodeToMenu(node, menu, recurse); // Clear the delegate to prevent further refreshes. [menu setDelegate:nil]; } -void BookmarkMenuBridge::BuildRootMenu() { +void BookmarkMenuBridge::BuildRootMenu(bool recurse) { BookmarkModel* model = GetBookmarkModel(); if (!model || !model->loaded()) return; @@ -118,16 +119,16 @@ ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance(); NSImage* image = rb.GetNativeImageNamed(IDR_BOOKMARK_BAR_FOLDER_MANAGED).ToNSImage(); - AddNodeAsSubmenu(menu_root_, managedNode, image); + AddNodeAsSubmenu(menu_root_, managedNode, image, recurse); } if (!barNode->children().empty()) - AddNodeToMenu(barNode, menu_root_); + AddNodeToMenu(barNode, menu_root_, recurse); // If the "Other Bookmarks" folder has any content, make a submenu for it and // fill it in. if (!model->other_node()->children().empty()) { [menu_root_ addItem:[NSMenuItem separatorItem]]; - AddNodeAsSubmenu(menu_root_, model->other_node(), folder_image_); + AddNodeAsSubmenu(menu_root_, model->other_node(), folder_image_, recurse); } // If the "Mobile Bookmarks" folder has any content, make a submenu for it and @@ -138,15 +139,13 @@ if (model->other_node()->children().empty()) [menu_root_ addItem:[NSMenuItem separatorItem]]; - AddNodeAsSubmenu(menu_root_, model->mobile_node(), folder_image_); + AddNodeAsSubmenu(menu_root_, model->mobile_node(), folder_image_, recurse); } menuIsValid_ = true; } -void BookmarkMenuBridge::BookmarkModelBeingDeleted(BookmarkModel* model) { - ClearBookmarkMenu(); -} +void BookmarkMenuBridge::BookmarkModelBeingDeleted(BookmarkModel* model) {} void BookmarkMenuBridge::BookmarkNodeMoved(BookmarkModel* model, const BookmarkNode* old_parent, @@ -205,7 +204,7 @@ if (!model) return; - model->AddObserver(this); + bookmark_model_observation_.Observe(model); if (model->loaded()) BookmarkModelLoaded(model, false); } @@ -219,6 +218,10 @@ return profile_; } +const base::FilePath& BookmarkMenuBridge::GetProfileDir() const { + return profile_dir_; +} + NSMenu* BookmarkMenuBridge::BookmarkMenu() { return menu_root_; } @@ -226,6 +229,7 @@ void BookmarkMenuBridge::ClearBookmarkMenu() { InvalidateMenu(); bookmark_nodes_.clear(); + tag_to_guid_.clear(); // Recursively delete all menus that look like a bookmark. Also delete all // separator items since we explicitly add them back in. This deletes @@ -253,7 +257,8 @@ void BookmarkMenuBridge::AddNodeAsSubmenu(NSMenu* menu, const BookmarkNode* node, - NSImage* image) { + NSImage* image, + bool recurse) { NSString* title = MenuTitleForNode(node); base::scoped_nsobject<NSMenuItem> items( [[NSMenuItem alloc] initWithTitle:title action:nil keyEquivalent:@""]); @@ -263,14 +268,21 @@ // Set a delegate and a tag on the item so that the submenu can be populated // when (and if) Cocoa asks for it. - [submenu setDelegate:controller_]; + if (!recurse) + [submenu setDelegate:controller_]; [items setTag:node->id()]; + tag_to_guid_[node->id()] = node->guid(); [menu addItem:items]; + + if (recurse) + AddNodeToMenu(node, submenu, recurse); } // TODO(jrg): limit the number of bookmarks in the menubar? -void BookmarkMenuBridge::AddNodeToMenu(const BookmarkNode* node, NSMenu* menu) { +void BookmarkMenuBridge::AddNodeToMenu(const BookmarkNode* node, + NSMenu* menu, + bool recurse) { if (node->children().empty()) { NSString* empty_string = l10n_util::GetNSString(IDS_MENU_EMPTY_SUBMENU); base::scoped_nsobject<NSMenuItem> item([[NSMenuItem alloc] @@ -283,13 +295,14 @@ for (const auto& child : node->children()) { if (child->is_folder()) { - AddNodeAsSubmenu(menu, child.get(), folder_image_); + AddNodeAsSubmenu(menu, child.get(), folder_image_, recurse); } else { base::scoped_nsobject<NSMenuItem> item([[NSMenuItem alloc] initWithTitle:MenuTitleForNode(child.get()) action:nil keyEquivalent:@""]); bookmark_nodes_[child.get()] = item; + tag_to_guid_[child->id()] = child->guid(); ConfigureMenuItem(child.get(), item, false); [menu addItem:item]; } @@ -304,6 +317,7 @@ [item setTarget:controller_]; [item setAction:@selector(openBookmarkMenuItem:)]; [item setTag:node->id()]; + tag_to_guid_[node->id()] = node->guid(); if (node->is_url()) [item setToolTip:[BookmarkMenuCocoaController tooltipForNode:node]]; // Check to see if we have a favicon. @@ -330,3 +344,17 @@ return nil; return it->second; } + +void BookmarkMenuBridge::OnProfileWillBeDestroyed() { + BuildRootMenu(/*recurse=*/true); + profile_ = nullptr; + bookmark_model_observation_.Reset(); + // |bookmark_nodes_| stores the nodes by pointer, so it would be unsafe to + // keep them. + bookmark_nodes_.clear(); +} + +base::GUID BookmarkMenuBridge::TagToGUID(int64_t tag) const { + const auto& it = tag_to_guid_.find(tag); + return it == tag_to_guid_.end() ? base::GUID() : it->second; +}
diff --git a/chrome/browser/ui/cocoa/bookmarks/bookmark_menu_bridge_unittest.mm b/chrome/browser/ui/cocoa/bookmarks/bookmark_menu_bridge_unittest.mm index 182251a..bca0bad 100644 --- a/chrome/browser/ui/cocoa/bookmarks/bookmark_menu_bridge_unittest.mm +++ b/chrome/browser/ui/cocoa/bookmarks/bookmark_menu_bridge_unittest.mm
@@ -57,7 +57,9 @@ ManagedBookmarkServiceFactory::GetDefaultFactory()}}; } - void UpdateRootMenu() { bridge_->UpdateMenu(menu_, nullptr); } + void UpdateRootMenu() { + bridge_->UpdateMenu(menu_, nullptr, /*recurse=*/false); + } // We are a friend of BookmarkMenuBridge (and have access to // protected methods), but none of the classes generated by TEST_F() @@ -71,7 +73,7 @@ void AddNodeToMenu(BookmarkMenuBridge* bridge, const BookmarkNode* root, NSMenu* menu) { - bridge->AddNodeToMenu(root, menu); + bridge->AddNodeToMenu(root, menu, /*recurse=*/false); } NSMenuItem* MenuItemForNode(BookmarkMenuBridge* bridge, @@ -261,7 +263,7 @@ EXPECT_TRUE([submenu delegate]); EXPECT_EQ(0u, [submenu numberOfItems]); - bridge_->UpdateMenu(submenu, folder); + bridge_->UpdateMenu(submenu, folder, /*recurse=*/false); // Updating the menu clears the delegate to prevent further updates. EXPECT_FALSE([submenu delegate]); @@ -271,7 +273,8 @@ model->AddURL(folder, 0, u"Test Item", GURL("http://test")); UpdateRootMenu(); // There will be a new submenu each time, Cocoa will update it if needed. - bridge_->UpdateMenu([[menu_ itemAtIndex:1] submenu], folder); + bridge_->UpdateMenu([[menu_ itemAtIndex:1] submenu], folder, + /*recurse=*/false); EXPECT_TRUE(MenuItemForNode(bridge_.get(), folder->children().front().get())); @@ -289,7 +292,8 @@ EXPECT_NE(old_menu.get(), [[menu_ itemAtIndex:1] submenu]); EXPECT_FALSE([old_menu delegate]); - bridge_->UpdateMenu([[menu_ itemAtIndex:1] submenu], folder); + bridge_->UpdateMenu([[menu_ itemAtIndex:1] submenu], folder, + /*recurse=*/false); EXPECT_TRUE(MenuItemForNode(bridge_.get(), folder->children()[0].get())); EXPECT_TRUE(MenuItemForNode(bridge_.get(), folder->children()[1].get())); @@ -307,7 +311,8 @@ EXPECT_FALSE(MenuItemForNode(bridge_.get(), folder->children()[0].get())); UpdateRootMenu(); - bridge_->UpdateMenu([[menu_ itemAtIndex:1] submenu], folder); + bridge_->UpdateMenu([[menu_ itemAtIndex:1] submenu], folder, + /*recurse=*/false); EXPECT_FALSE(MenuItemForNode(bridge_.get(), removed_node)); EXPECT_TRUE(MenuItemForNode(bridge_.get(), folder->children()[0].get())); @@ -336,7 +341,8 @@ // The "other" submenu is loaded lazily. EXPECT_EQ(0u, [[other submenu] numberOfItems]); - bridge_->UpdateMenu([other submenu], model->other_node()); + bridge_->UpdateMenu([other submenu], model -> other_node(), + /*recurse=*/false); ASSERT_GT([[other submenu] numberOfItems], 0); EXPECT_NSEQ(@"http://foo/", [[[other submenu] itemAtIndex:0] title]); @@ -377,3 +383,50 @@ EXPECT_TRUE(item); } +TEST_F(BookmarkMenuBridgeTest, BuildMenuRecursivelyBeforeProfileDestruction) { + BookmarkModel* model = bridge_->GetBookmarkModel(); + const BookmarkNode* root = model->bookmark_bar_node(); + EXPECT_TRUE(model && root); + + // root + // + Item 1 + // + Folder 1 + // + Folder 2 + // + Item 2 + const BookmarkNode* item1 = + model->AddURL(root, 0, u"Item 1", GURL("http://item-1/")); + base::GUID item1_guid = item1->guid(); + const BookmarkNode* folder1 = model->AddFolder(root, 1, u"Folder 1"); + base::GUID folder1_guid = folder1->guid(); + const BookmarkNode* folder2 = model->AddFolder(folder1, 0, u"Folder 2"); + base::GUID folder2_guid = folder2->guid(); + const BookmarkNode* item2 = + model->AddURL(folder2, 0, u"Item 2", GURL("http://item-2/")); + base::GUID item2_guid = item2->guid(); + + // We didn't show the menu or any submenus, so it shouldn't contain these + // items. + NSMenuItem* item = [menu_ itemWithTitle:@"Item 1"]; + EXPECT_FALSE(item); + item = [menu_ itemWithTitle:@"Folder 1"]; + EXPECT_FALSE(item); + + bridge_->OnProfileWillBeDestroyed(); + EXPECT_EQ(nullptr, bridge_->GetProfile()); + + // OnProfileWillBeDestroyed() should've recursively populated the menu. + item = [menu_ itemWithTitle:@"Item 1"]; + EXPECT_TRUE(item); + EXPECT_EQ(item1_guid, bridge_->TagToGUID([item tag])); + item = [menu_ itemWithTitle:@"Folder 1"]; + EXPECT_TRUE(item); + EXPECT_EQ(folder1_guid, bridge_->TagToGUID([item tag])); + EXPECT_TRUE([item hasSubmenu]); + item = [[item submenu] itemWithTitle:@"Folder 2"]; + EXPECT_TRUE(item); + EXPECT_EQ(folder2_guid, bridge_->TagToGUID([item tag])); + EXPECT_TRUE([item hasSubmenu]); + item = [[item submenu] itemWithTitle:@"Item 2"]; + EXPECT_TRUE(item); + EXPECT_EQ(item2_guid, bridge_->TagToGUID([item tag])); +}
diff --git a/chrome/browser/ui/cocoa/bookmarks/bookmark_menu_cocoa_controller.h b/chrome/browser/ui/cocoa/bookmarks/bookmark_menu_cocoa_controller.h index 9c61ea9..19846b2 100644 --- a/chrome/browser/ui/cocoa/bookmarks/bookmark_menu_cocoa_controller.h +++ b/chrome/browser/ui/cocoa/bookmarks/bookmark_menu_cocoa_controller.h
@@ -7,9 +7,11 @@ #import <Cocoa/Cocoa.h> +#include "base/guid.h" #include "ui/base/window_open_disposition.h" class BookmarkMenuBridge; +class Profile; namespace bookmarks { class BookmarkNode; @@ -33,10 +35,13 @@ @interface BookmarkMenuCocoaController (ExposedForUnitTests) -- (const bookmarks::BookmarkNode*)nodeForIdentifier:(int)identifier; -- (void)openURLForNode:(const bookmarks::BookmarkNode*)node; +- (const bookmarks::BookmarkNode*)nodeForGUID:(const base::GUID&)guid + inProfile:(Profile*)profile; +- (void)openURLForIdentifier:(base::GUID)guid inProfile:(Profile*)profile; +- (void)openURLForIdentifier:(base::GUID)guid; - (void)openAll:(NSInteger)tag withDisposition:(WindowOpenDisposition)disposition; +- (base::GUID)guidForIdentifier:(int)identifier; @end // BookmarkMenuCocoaController (ExposedForUnitTests) #endif // CHROME_BROWSER_UI_COCOA_BOOKMARKS_BOOKMARK_MENU_COCOA_CONTROLLER_H_
diff --git a/chrome/browser/ui/cocoa/bookmarks/bookmark_menu_cocoa_controller.mm b/chrome/browser/ui/cocoa/bookmarks/bookmark_menu_cocoa_controller.mm index 1880a00..c64675bf 100644 --- a/chrome/browser/ui/cocoa/bookmarks/bookmark_menu_cocoa_controller.mm +++ b/chrome/browser/ui/cocoa/bookmarks/bookmark_menu_cocoa_controller.mm
@@ -2,15 +2,15 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "base/memory/raw_ptr.h" - #import "chrome/browser/ui/cocoa/bookmarks/bookmark_menu_cocoa_controller.h" #import "base/mac/foundation_util.h" +#include "base/memory/raw_ptr.h" #include "base/metrics/user_metrics.h" #include "base/strings/sys_string_conversions.h" #include "chrome/app/chrome_command_ids.h" // IDC_BOOKMARK_MENU #import "chrome/browser/app_controller_mac.h" +#include "chrome/browser/bookmarks/bookmark_model_factory.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/ui/bookmarks/bookmark_stats.h" #include "chrome/browser/ui/bookmarks/bookmark_utils.h" @@ -23,8 +23,10 @@ #include "components/profile_metrics/browser_profile_type.h" #import "ui/base/cocoa/cocoa_base_utils.h" #import "ui/base/cocoa/menu_controller.h" +#include "ui/base/window_open_disposition.h" using base::UserMetricsAction; +using bookmarks::BookmarkModel; using bookmarks::BookmarkNode; using content::OpenURLParams; using content::Referrer; @@ -41,6 +43,109 @@ return nil; } +void DoOpenBookmark(Profile* profile, + WindowOpenDisposition disposition, + const BookmarkNode* node) { + DCHECK(profile); + Browser* browser = chrome::FindTabbedBrowser(profile, true); + if (!browser) + browser = Browser::Create(Browser::CreateParams(profile, true)); + OpenURLParams params(node->url(), Referrer(), disposition, + ui::PAGE_TRANSITION_AUTO_BOOKMARK, false); + browser->OpenURL(params); + RecordBookmarkLaunch(BookmarkLaunchLocation::kTopMenu, + profile_metrics::GetBrowserProfileType(profile)); +} + +// Waits for the BookmarkModelLoaded(), then calls DoOpenBookmark() on it. +// +// Owned by itself. Allocate with `new`. +class BookmarkRestorer : public bookmarks::BookmarkModelObserver { + public: + BookmarkRestorer(Profile* profile, + WindowOpenDisposition disposition, + base::GUID guid); + ~BookmarkRestorer() override = default; + + // bookmarks::BookmarkModelObserver: + void BookmarkModelBeingDeleted(BookmarkModel* model) override; + void BookmarkModelLoaded(BookmarkModel* model, bool ids_reassigned) override; + void BookmarkNodeMoved(BookmarkModel* model, + const BookmarkNode* old_parent, + size_t old_index, + const BookmarkNode* new_parent, + size_t new_index) override {} + void BookmarkNodeAdded(BookmarkModel* model, + const BookmarkNode* parent, + size_t index, + bool added_by_user) override {} + void BookmarkNodeRemoved(BookmarkModel* model, + const BookmarkNode* parent, + size_t old_index, + const BookmarkNode* node, + const std::set<GURL>& removed_urls) override {} + void BookmarkNodeChanged(BookmarkModel* model, + const BookmarkNode* node) override {} + void BookmarkNodeFaviconChanged(BookmarkModel* model, + const BookmarkNode* node) override {} + void BookmarkNodeChildrenReordered(BookmarkModel* model, + const BookmarkNode* node) override {} + void BookmarkAllUserNodesRemoved( + BookmarkModel* model, + const std::set<GURL>& removed_urls) override {} + + private: + base::ScopedObservation<BookmarkModel, BookmarkModelObserver> observation_{ + this}; + raw_ptr<Profile> profile_; + WindowOpenDisposition disposition_; + base::GUID guid_; +}; + +BookmarkRestorer::BookmarkRestorer(Profile* profile, + WindowOpenDisposition disposition, + base::GUID guid) + : profile_(profile), disposition_(disposition), guid_(guid) { + observation_.Observe(BookmarkModelFactory::GetForBrowserContext(profile)); +} + +void BookmarkRestorer::BookmarkModelBeingDeleted(BookmarkModel* model) { + model->RemoveObserver(this); + delete this; +} + +void BookmarkRestorer::BookmarkModelLoaded(BookmarkModel* model, + bool ids_reassigned) { + model->RemoveObserver(this); + if (const auto* node = bookmarks::GetBookmarkNodeByGUID(model, guid_)) + DoOpenBookmark(profile_, disposition_, node); + delete this; +} + +// Open the URL of the given BookmarkNode in the current tab. Waits for +// BookmarkModelLoaded() if needed (e.g. for a freshly-loaded profile). +void OpenBookmarkByGUID(WindowOpenDisposition disposition, + base::GUID guid, + Profile* profile) { + if (!profile) + return; // Failed to load profile, ignore. + + const auto* model = BookmarkModelFactory::GetForBrowserContext(profile); + DCHECK(model); + if (!model) + return; // Should never be reached. + + if (const auto* node = bookmarks::GetBookmarkNodeByGUID(model, guid)) { + // BookmarkModel already loaded this bookmark. Open it immediately. + DoOpenBookmark(profile, disposition, node); + } else { + // BookmarkModel hasn't loaded yet. Wait for BookmarkModelLoaded(), and + // *then* open it. + DCHECK(!model->loaded()); + std::ignore = new BookmarkRestorer(profile, disposition, std::move(guid)); + } +} + } // namespace @implementation BookmarkMenuCocoaController { @@ -74,8 +179,13 @@ // NSMenu delegate method: called just before menu is displayed. - (void)menuNeedsUpdate:(NSMenu*)menu { NSMenuItem* item = GetItemWithSubmenu(menu); - const BookmarkNode* node = [self nodeForIdentifier:[item tag]]; - _bridge->UpdateMenu(menu, node); + Profile* profile = _bridge->GetProfile(); + if (!profile) + return; // Unfortunately, we can't update a menu with a dead profile. + const auto* model = BookmarkModelFactory::GetForBrowserContext(profile); + base::GUID guid = _bridge->TagToGUID([item tag]); + const auto* node = bookmarks::GetBookmarkNodeByGUID(model, guid); + _bridge->UpdateMenu(menu, node, /*recurse=*/false); } - (BOOL)menuHasKeyEquivalent:(NSMenu*)menu @@ -87,40 +197,34 @@ return NO; } -// Return the a BookmarkNode that has the given id (called -// "identifier" here to avoid conflict with objc's concept of "id"). -- (const BookmarkNode*)nodeForIdentifier:(int)identifier { - return bookmarks::GetBookmarkNodeByID(_bridge->GetBookmarkModel(), - identifier); -} - -// Open the URL of the given BookmarkNode in the current tab. -- (void)openURLForNode:(const BookmarkNode*)node { - Browser* browser = chrome::FindTabbedBrowser(_bridge->GetProfile(), true); - if (!browser) { - browser = - Browser::Create(Browser::CreateParams(_bridge->GetProfile(), true)); - } +// Open the URL of the given BookmarkNode in the current tab. If the Profile +// is not loaded in memory, load it first. +- (void)openURLForGUID:(base::GUID)guid { WindowOpenDisposition disposition = ui::WindowOpenDispositionFromNSEvent([NSApp currentEvent]); - OpenURLParams params( - node->url(), Referrer(), disposition, - ui::PAGE_TRANSITION_AUTO_BOOKMARK, false); - browser->OpenURL(params); - RecordBookmarkLaunch( - BookmarkLaunchLocation::kTopMenu, - profile_metrics::GetBrowserProfileType(_bridge->GetProfile())); + if (Profile* profile = _bridge->GetProfile()) { + OpenBookmarkByGUID(disposition, std::move(guid), profile); + } else { + // Both BookmarkMenuBridge and BookmarkMenuCocoaController could get + // destroyed before RunInSafeProfileHelper finishes. The callback needs to + // be self-contained. + app_controller_mac::RunInProfileSafely( + _bridge->GetProfileDir(), + base::BindOnce(&OpenBookmarkByGUID, disposition, std::move(guid)), + app_controller_mac::kIgnoreOnFailure); + } +} + +// Return the GUID of the BookmarkNode that has the given id (called +// "identifier" here to avoid conflict with objc's concept of "id"). +- (base::GUID)guidForIdentifier:(int)identifier { + return _bridge->TagToGUID(identifier); } - (IBAction)openBookmarkMenuItem:(id)sender { NSInteger tag = [sender tag]; - int identifier = tag; - const BookmarkNode* node = [self nodeForIdentifier:identifier]; - DCHECK(node); - if (!node) - return; // shouldn't be reached - - [self openURLForNode:node]; + base::GUID guid = [self guidForIdentifier:tag]; + [self openURLForGUID:std::move(guid)]; } @end // BookmarkMenuCocoaController
diff --git a/chrome/browser/ui/cocoa/bookmarks/bookmark_menu_cocoa_controller_unittest.mm b/chrome/browser/ui/cocoa/bookmarks/bookmark_menu_cocoa_controller_unittest.mm index 77a0d62..af4592df 100644 --- a/chrome/browser/ui/cocoa/bookmarks/bookmark_menu_cocoa_controller_unittest.mm +++ b/chrome/browser/ui/cocoa/bookmarks/bookmark_menu_cocoa_controller_unittest.mm
@@ -3,10 +3,13 @@ // found in the LICENSE file. #import "chrome/browser/ui/cocoa/bookmarks/bookmark_menu_cocoa_controller.h" +#include "components/bookmarks/browser/bookmark_node.h" #include <string> +#include "base/containers/span.h" #import "base/mac/scoped_nsobject.h" +#include "base/ranges/algorithm.h" #include "chrome/browser/bookmarks/bookmark_model_factory.h" #include "chrome/browser/ui/browser.h" #include "chrome/browser/ui/cocoa/test/cocoa_test_helper.h" @@ -41,14 +44,21 @@ return self; } -- (const BookmarkNode*)nodeForIdentifier:(int)identifier { +- (base::GUID)guidForIdentifier:(int)identifier { if ((identifier < 0) || (identifier >= 2)) - return NULL; - return _nodes[identifier]; + return base::GUID(); + DCHECK(_nodes[identifier]); + return _nodes[identifier]->guid(); } -- (void)openURLForNode:(const BookmarkNode*)node { - std::string url = node->url().possibly_invalid_spec(); +- (void)openURLForGUID:(base::GUID)guid { + base::span<const BookmarkNode*> nodes = base::make_span(_nodes); + auto it = base::ranges::find_if(nodes, [&guid](const BookmarkNode* node) { + return node->guid() == guid; + }); + ASSERT_NE(it, nodes.end()); + + std::string url = (*it)->url().possibly_invalid_spec(); if (url.find("http://0.com") != std::string::npos) _opened[0] = YES; if (url.find("http://1.com") != std::string::npos)
diff --git a/chrome/browser/ui/thumbnails/thumbnail_image.h b/chrome/browser/ui/thumbnails/thumbnail_image.h index 9fedb389..62a550e 100644 --- a/chrome/browser/ui/thumbnails/thumbnail_image.h +++ b/chrome/browser/ui/thumbnails/thumbnail_image.h
@@ -26,7 +26,7 @@ // Stores compressed thumbnail data for a tab and can vend that data as an // uncompressed image to observers. -class ThumbnailImage : public base::RefCounted<ThumbnailImage> { +class ThumbnailImage : public base::RefCountedThreadSafe<ThumbnailImage> { public: // Describes the readiness of the source page for thumbnail capture. enum class CaptureReadiness : int { @@ -170,7 +170,7 @@ private: friend class Delegate; friend class ThumbnailImageTest; - friend class base::RefCounted<ThumbnailImage>; + friend class base::RefCountedThreadSafe<ThumbnailImage>; virtual ~ThumbnailImage();
diff --git a/chrome/browser/ui/translate/partial_translate_bubble_model_impl.cc b/chrome/browser/ui/translate/partial_translate_bubble_model_impl.cc index 5512b68..dd364429 100644 --- a/chrome/browser/ui/translate/partial_translate_bubble_model_impl.cc +++ b/chrome/browser/ui/translate/partial_translate_bubble_model_impl.cc
@@ -188,7 +188,10 @@ content::WebContents* web_contents) { translate::TranslateManager* translate_manager = ChromeTranslateClient::GetManagerFromWebContents(web_contents); - translate_manager->ShowTranslateUI(true); + translate_manager->translate_client() + ->GetTranslatePrefs() + ->SetRecentTargetLanguage(GetTargetLanguageCode()); + translate_manager->ShowTranslateUI(GetTargetLanguageCode(), true); } void PartialTranslateBubbleModelImpl::OnPartialTranslateResponse(
diff --git a/chrome/browser/ui/views/extensions/extensions_request_access_button_hover_card.cc b/chrome/browser/ui/views/extensions/extensions_request_access_button_hover_card.cc index c49a8f2..fcf378a 100644 --- a/chrome/browser/ui/views/extensions/extensions_request_access_button_hover_card.cc +++ b/chrome/browser/ui/views/extensions/extensions_request_access_button_hover_card.cc
@@ -10,8 +10,8 @@ #include "chrome/browser/ui/views/extensions/extensions_dialogs_utils.h" #include "chrome/grit/generated_resources.h" #include "content/public/browser/web_contents.h" -#include "ui/base/l10n/l10n_util.h" #include "ui/base/models/dialog_model.h" +#include "ui/base/models/dialog_model_field.h" #include "ui/views/bubble/bubble_dialog_delegate_view.h" #include "ui/views/bubble/bubble_dialog_model_host.h" #include "ui/views/view.h" @@ -44,13 +44,14 @@ const std::u16string url = GetCurrentHost(web_contents); if (actions.size() == 1) { dialog_builder.SetIcon(GetIcon(actions[0], web_contents)) - .AddParagraph(ui::DialogModelLabel(l10n_util::GetStringFUTF16( + .AddParagraph(ui::DialogModelLabel::CreateWithReplacements( IDS_EXTENSIONS_REQUEST_ACCESS_BUTTON_TOOLTIP_SINGLE_EXTENSION, - actions[0]->GetActionName(), url))); + {ui::DialogModelLabel::CreatePlainText(actions[0]->GetActionName()), + ui::DialogModelLabel::CreateEmphasizedText(url)})); } else { - dialog_builder.AddParagraph(ui::DialogModelLabel(l10n_util::GetStringFUTF16( + dialog_builder.AddParagraph(ui::DialogModelLabel::CreateWithReplacement( IDS_EXTENSIONS_REQUEST_ACCESS_BUTTON_TOOLTIP_MULTIPLE_EXTENSIONS, - url))); + ui::DialogModelLabel::CreateEmphasizedText(url))); for (auto* action : actions) { dialog_builder.AddMenuItem( GetIcon(action, web_contents), action->GetActionName(),
diff --git a/chrome/browser/ui/views/location_bar/icon_label_bubble_view.cc b/chrome/browser/ui/views/location_bar/icon_label_bubble_view.cc index 97ad400..0fe8528 100644 --- a/chrome/browser/ui/views/location_bar/icon_label_bubble_view.cc +++ b/chrome/browser/ui/views/location_bar/icon_label_bubble_view.cc
@@ -523,7 +523,7 @@ // virtual view. alert_virtual_view_->GetCustomData().role = ax::mojom::Role::kGenericContainer; - alert_virtual_view_->GetCustomData().SetName(label); + alert_virtual_view_->GetCustomData().SetNameChecked(label); alert_virtual_view_->NotifyAccessibilityEvent(ax::mojom::Event::kAlert); } label()->SetVisible(true);
diff --git a/chrome/browser/ui/views/location_bar/location_icon_view.cc b/chrome/browser/ui/views/location_bar/location_icon_view.cc index f221701..a679245 100644 --- a/chrome/browser/ui/views/location_bar/location_icon_view.cc +++ b/chrome/browser/ui/views/location_bar/location_icon_view.cc
@@ -92,7 +92,7 @@ void LocationIconView::GetAccessibleNodeData(ui::AXNodeData* node_data) { if (delegate_->IsEditingOrEmpty()) { node_data->role = ax::mojom::Role::kImage; - node_data->SetName(l10n_util::GetStringUTF8(IDS_ACC_SEARCH_ICON)); + node_data->SetNameChecked(l10n_util::GetStringUTF8(IDS_ACC_SEARCH_ICON)); return; }
diff --git a/chrome/browser/ui/views/omnibox/omnibox_result_view.cc b/chrome/browser/ui/views/omnibox/omnibox_result_view.cc index d7dd69c..c0e88a0 100644 --- a/chrome/browser/ui/views/omnibox/omnibox_result_view.cc +++ b/chrome/browser/ui/views/omnibox/omnibox_result_view.cc
@@ -79,7 +79,7 @@ // Although this appears visually as a button, expose as a list box option // so that it matches the other options within its list box container. node_data->role = ax::mojom::Role::kListBoxOption; - node_data->SetName( + node_data->SetNameChecked( l10n_util::GetStringUTF16(IDS_ACC_REMOVE_SUGGESTION_BUTTON)); } };
diff --git a/chrome/browser/ui/views/omnibox/omnibox_view_views.cc b/chrome/browser/ui/views/omnibox/omnibox_view_views.cc index 4abbc236..6fb676f6 100644 --- a/chrome/browser/ui/views/omnibox/omnibox_view_views.cc +++ b/chrome/browser/ui/views/omnibox/omnibox_view_views.cc
@@ -1240,7 +1240,7 @@ void OmniboxViewViews::GetAccessibleNodeData(ui::AXNodeData* node_data) { node_data->role = ax::mojom::Role::kTextField; - node_data->SetName(l10n_util::GetStringUTF8(IDS_ACCNAME_LOCATION)); + node_data->SetNameChecked(l10n_util::GetStringUTF8(IDS_ACCNAME_LOCATION)); node_data->AddStringAttribute(ax::mojom::StringAttribute::kAutoComplete, "both"); // Expose keyboard shortcut where it makes sense.
diff --git a/chrome/browser/ui/views/passwords/password_generation_popup_view_views.cc b/chrome/browser/ui/views/passwords/password_generation_popup_view_views.cc index 71cb795..15ddeb9 100644 --- a/chrome/browser/ui/views/passwords/password_generation_popup_view_views.cc +++ b/chrome/browser/ui/views/passwords/password_generation_popup_view_views.cc
@@ -318,7 +318,7 @@ return; } node_data->role = ax::mojom::Role::kMenuItem; - node_data->SetName(base::JoinString( + node_data->SetNameChecked(base::JoinString( {controller_->SuggestedText(), controller_->password()}, u" ")); node_data->SetDescription(controller_->HelpText()); }
diff --git a/chrome/browser/ui/views/performance_controls/high_efficiency_bubble_view.cc b/chrome/browser/ui/views/performance_controls/high_efficiency_bubble_view.cc index b0e5348..5346006 100644 --- a/chrome/browser/ui/views/performance_controls/high_efficiency_bubble_view.cc +++ b/chrome/browser/ui/views/performance_controls/high_efficiency_bubble_view.cc
@@ -37,14 +37,16 @@ .SetDialogDestroyingCallback( base::BindOnce(&HighEfficiencyBubbleDelegate::OnDialogDestroy, base::Unretained(bubble_delegate))) - .AddParagraph(ui::DialogModelLabel(IDS_HIGH_EFFICIENCY_DIALOG_BODY) - .set_is_secondary()) - .AddOkButton(base::OnceClosure(), l10n_util::GetStringUTF16(IDS_DONE)) - .AddExtraLink(ui::DialogModelLabel::CreateLink( - IDS_SETTINGS_TITLE, - base::BindRepeating( - &HighEfficiencyBubbleDelegate::OnSettingsClicked, - base::Unretained(bubble_delegate)))) + .AddParagraph( + ui::DialogModelLabel::CreateWithReplacement( + IDS_HIGH_EFFICIENCY_DIALOG_BODY, + ui::DialogModelLabel::CreateLink( + IDS_HIGH_EFFICIENCY_DIALOG_BODY_LINK_TEXT, + base::BindRepeating( + &HighEfficiencyBubbleDelegate::OnSettingsClicked, + base::Unretained(bubble_delegate)))) + .set_is_secondary()) + .AddOkButton(base::DoNothing()) .Build(); auto bubble_unique = std::make_unique<views::BubbleDialogModelHost>(
diff --git a/chrome/browser/ui/views/side_panel/side_panel_resize_area.cc b/chrome/browser/ui/views/side_panel/side_panel_resize_area.cc index 2339845..34365da 100644 --- a/chrome/browser/ui/views/side_panel/side_panel_resize_area.cc +++ b/chrome/browser/ui/views/side_panel/side_panel_resize_area.cc
@@ -31,7 +31,8 @@ void SidePanelResizeHandle::GetAccessibleNodeData(ui::AXNodeData* node_data) { node_data->role = ax::mojom::Role::kSlider; - node_data->SetName(l10n_util::GetStringUTF16(IDS_ACCNAME_SIDE_PANEL_RESIZE)); + node_data->SetNameChecked( + l10n_util::GetStringUTF16(IDS_ACCNAME_SIDE_PANEL_RESIZE)); } void SidePanelResizeHandle::OnThemeChanged() {
diff --git a/chrome/browser/ui/views/tabs/tab_group_header.cc b/chrome/browser/ui/views/tabs/tab_group_header.cc index a0c9775..e9e43b40 100644 --- a/chrome/browser/ui/views/tabs/tab_group_header.cc +++ b/chrome/browser/ui/views/tabs/tab_group_header.cc
@@ -276,10 +276,10 @@ : l10n_util::GetStringUTF16(IDS_GROUP_AX_LABEL_EXPANDED); #endif if (title.empty()) { - node_data->SetName(l10n_util::GetStringFUTF16( + node_data->SetNameChecked(l10n_util::GetStringFUTF16( IDS_GROUP_AX_LABEL_UNNAMED_GROUP_FORMAT, contents, collapsed_state)); } else { - node_data->SetName( + node_data->SetNameChecked( l10n_util::GetStringFUTF16(IDS_GROUP_AX_LABEL_NAMED_GROUP_FORMAT, title, contents, collapsed_state)); }
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 8d5a97d6..0905ca4 100644 --- a/chrome/browser/ui/webui/management/management_ui_handler_unittest.cc +++ b/chrome/browser/ui/webui/management/management_ui_handler_unittest.cc
@@ -1088,10 +1088,8 @@ PrefProxyConfigTrackerImpl::RegisterProfilePrefs(user_prefs_.registry()); ash::NetworkHandler::Get()->InitializePrefServices(&user_prefs_, &local_state_); - base::Value policy_prefs_config = ProxyConfigDictionary::CreateAutoDetect(); - user_prefs_.SetUserPref( - proxy_config::prefs::kProxy, - base::Value::ToUniquePtrValue(std::move(policy_prefs_config))); + user_prefs_.SetUserPref(proxy_config::prefs::kProxy, + ProxyConfigDictionary::CreateAutoDetect()); base::RunLoop().RunUntilIdle(); GetTestConfig().managed_device = true; @@ -1135,10 +1133,8 @@ PrefProxyConfigTrackerImpl::RegisterProfilePrefs(user_prefs_.registry()); ash::NetworkHandler::Get()->InitializePrefServices(&user_prefs_, &local_state_); - base::Value policy_prefs_config = ProxyConfigDictionary::CreateDirect(); - user_prefs_.SetUserPref( - proxy_config::prefs::kProxy, - base::Value::ToUniquePtrValue(std::move(policy_prefs_config))); + user_prefs_.SetUserPref(proxy_config::prefs::kProxy, + ProxyConfigDictionary::CreateDirect()); base::RunLoop().RunUntilIdle(); GetTestConfig().managed_device = true;
diff --git a/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc b/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc index 180a17b..3608c32 100644 --- a/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc +++ b/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc
@@ -2942,18 +2942,18 @@ {"siteSettingsVrMidSentence", IDS_SITE_SETTINGS_TYPE_VR_MID_SENTENCE}, {"siteSettingsVrAskRecommended", IDS_SETTINGS_SITE_SETTINGS_VR_ASK_RECOMMENDED}, - {"siteSettingsWindowPlacement", IDS_SITE_SETTINGS_TYPE_WINDOW_MANAGEMENT}, - {"siteSettingsWindowPlacementMidSentence", + {"siteSettingsWindowManagement", IDS_SITE_SETTINGS_TYPE_WINDOW_MANAGEMENT}, + {"siteSettingsWindowManagementMidSentence", IDS_SITE_SETTINGS_TYPE_WINDOW_MANAGEMENT_MID_SENTENCE}, - {"siteSettingsWindowPlacementDescription", + {"siteSettingsWindowManagementDescription", IDS_SETTINGS_SITE_SETTINGS_WINDOW_MANAGEMENT_DESCRIPTION}, - {"siteSettingsWindowPlacementAsk", + {"siteSettingsWindowManagementAsk", IDS_SETTINGS_SITE_SETTINGS_WINDOW_MANAGEMENT_ASK}, - {"siteSettingsWindowPlacementBlocked", + {"siteSettingsWindowManagementBlocked", IDS_SETTINGS_SITE_SETTINGS_WINDOW_MANAGEMENT_BLOCKED}, - {"siteSettingsWindowPlacementAskExceptions", + {"siteSettingsWindowManagementAskExceptions", IDS_SETTINGS_SITE_SETTINGS_WINDOW_MANAGEMENT_ASK_EXCEPTIONS}, - {"siteSettingsWindowPlacementBlockedExceptions", + {"siteSettingsWindowManagementBlockedExceptions", IDS_SETTINGS_SITE_SETTINGS_WINDOW_MANAGEMENT_BLOCKED_EXCEPTIONS}, {"siteSettingsFontAccessMidSentence", IDS_SITE_SETTINGS_TYPE_FONT_ACCESS_MID_SENTENCE},
diff --git a/chrome/browser/vr/test/constants.cc b/chrome/browser/vr/test/constants.cc index 4fa4b77f..952d377 100644 --- a/chrome/browser/vr/test/constants.cc +++ b/chrome/browser/vr/test/constants.cc
@@ -7,7 +7,7 @@ namespace vr { gfx::Transform GetPixelDaydreamProjMatrix() { - static const gfx::Transform pixel_daydream_proj_matrix( + static const auto pixel_daydream_proj_matrix = gfx::Transform::RowMajor( 1.03317f, 0.0f, 0.271253f, 0.0f, 0.0f, 0.862458f, -0.0314586f, 0.0f, 0.0f, 0.0f, -1.002f, -0.2002f, 0.0f, 0.0f, -1.0f, 0.0f); return pixel_daydream_proj_matrix;
diff --git a/chrome/browser/vr/ui_input_manager_unittest.cc b/chrome/browser/vr/ui_input_manager_unittest.cc index 11a9af51..75797d5 100644 --- a/chrome/browser/vr/ui_input_manager_unittest.cc +++ b/chrome/browser/vr/ui_input_manager_unittest.cc
@@ -161,8 +161,8 @@ protected: RenderInfo CreateRenderInfo() { RenderInfo render_info; - gfx::Transform projection_matrix(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, -1, 0, 0, 0, - -1, 0.5); + auto projection_matrix = gfx::Transform::RowMajor(1, 0, 0, 0, 0, 1, 0, 0, 0, + 0, -1, 0, 0, 0, -1, 0.5); projection_matrix.Scale( 1.0f, static_cast<float>(kWindowSize.width()) / kWindowSize.height());
diff --git a/chrome/browser/vr/webxr_vr_frame_pose_browser_test.cc b/chrome/browser/vr/webxr_vr_frame_pose_browser_test.cc index 1116c7b..8751a73 100644 --- a/chrome/browser/vr/webxr_vr_frame_pose_browser_test.cc +++ b/chrome/browser/vr/webxr_vr_frame_pose_browser_test.cc
@@ -122,7 +122,7 @@ // Almost identity matrix - enough different that we can identify if magic // window poses are used instead of presenting poses. pose->device_to_origin = - gfx::Transform(1, 0, 0, 0, 0, -1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); + gfx::Transform::RowMajor(1, 0, 0, 0, 0, -1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); std::move(callback).Run(std::move(pose)); }
diff --git a/chrome/browser/vr/win/graphics_delegate_win.cc b/chrome/browser/vr/win/graphics_delegate_win.cc index 8d0ed3d..f7a686b2 100644 --- a/chrome/browser/vr/win/graphics_delegate_win.cc +++ b/chrome/browser/vr/win/graphics_delegate_win.cc
@@ -263,12 +263,12 @@ float x_scale = 2.0f / (left_tan + right_tan); float y_scale = 2.0f / (up_tan + down_tan); // clang-format off - model.proj_matrix = - gfx::Transform(x_scale, 0, -((left_tan - right_tan) * x_scale * 0.5), 0, - 0, y_scale, ((up_tan - down_tan) * y_scale * 0.5), 0, - 0, 0, (kZFar + kZNear) / (kZNear - kZFar), - 2 * kZFar * kZNear / (kZNear - kZFar), - 0, 0, -1, 0); + model.proj_matrix = gfx::Transform::RowMajor( + x_scale, 0, -((left_tan - right_tan) * x_scale * 0.5), 0, + 0, y_scale, ((up_tan - down_tan) * y_scale * 0.5), 0, + 0, 0, (kZFar + kZNear) / (kZNear - kZFar), + 2 * kZFar * kZNear / (kZNear - kZFar), + 0, 0, -1, 0); // clang-format on model.view_proj_matrix = model.proj_matrix * model.view_matrix; return model;
diff --git a/chrome/browser/web_applications/os_integration/web_app_shortcut_win_unittest.cc b/chrome/browser/web_applications/os_integration/web_app_shortcut_win_unittest.cc index 3247366..f55dad1 100644 --- a/chrome/browser/web_applications/os_integration/web_app_shortcut_win_unittest.cc +++ b/chrome/browser/web_applications/os_integration/web_app_shortcut_win_unittest.cc
@@ -9,6 +9,7 @@ #include "base/base_paths_win.h" #include "base/command_line.h" +#include "base/containers/contains.h" #include "base/files/file_path.h" #include "base/files/file_util.h" #include "base/files/scoped_temp_dir.h" @@ -113,8 +114,7 @@ for (const auto& location : expected_locations) { ASSERT_TRUE(ShellUtil::GetShortcutPath(location, ShellUtil::CURRENT_USER, &expected_result)); - EXPECT_NE(result.end(), - std::find(result.begin(), result.end(), expected_result)); + EXPECT_TRUE(base::Contains(result, expected_result)); } } @@ -168,27 +168,19 @@ std::vector<base::FilePath> result = FindAppShortcutsByProfileAndTitle( shortcut_dir, profile_path, base::WideToUTF16(shortcut_name)); EXPECT_EQ(2u, result.size()); - EXPECT_NE(result.end(), - std::find(result.begin(), result.end(), shortcut_path)); - EXPECT_NE(result.end(), - std::find(result.begin(), result.end(), duplicate_shortcut_path)); - EXPECT_EQ(result.end(), - std::find(result.begin(), result.end(), other_shortcut_path)); - EXPECT_EQ(result.end(), std::find(result.begin(), result.end(), - other_profile_shortcut_path)); + EXPECT_TRUE(base::Contains(result, shortcut_path)); + EXPECT_TRUE(base::Contains(result, duplicate_shortcut_path)); + EXPECT_FALSE(base::Contains(result, other_shortcut_path)); + EXPECT_FALSE(base::Contains(result, other_profile_shortcut_path)); // Find all shortcuts for |profile_name|. The shortcuts matching that profile // should be found. result = FindAppShortcutsByProfileAndTitle(shortcut_dir, profile_path, u""); EXPECT_EQ(3u, result.size()); - EXPECT_NE(result.end(), - std::find(result.begin(), result.end(), shortcut_path)); - EXPECT_NE(result.end(), - std::find(result.begin(), result.end(), duplicate_shortcut_path)); - EXPECT_NE(result.end(), - std::find(result.begin(), result.end(), other_shortcut_path)); - EXPECT_EQ(result.end(), std::find(result.begin(), result.end(), - other_profile_shortcut_path)); + EXPECT_TRUE(base::Contains(result, shortcut_path)); + EXPECT_TRUE(base::Contains(result, duplicate_shortcut_path)); + EXPECT_TRUE(base::Contains(result, other_shortcut_path)); + EXPECT_FALSE(base::Contains(result, other_profile_shortcut_path)); } TEST_F(WebAppShortcutWinTest, @@ -213,8 +205,7 @@ std::vector<base::FilePath> result = FindAppShortcutsByProfileAndTitle( shortcut_dir, profile_path, base::WideToUTF16(shortcut_name)); EXPECT_EQ(1u, result.size()); - EXPECT_NE(result.end(), - std::find(result.begin(), result.end(), sanitized_shortcut_path)); + EXPECT_TRUE(base::Contains(result, sanitized_shortcut_path)); } TEST_F(WebAppShortcutWinTest, UpdatePlatformShortcuts) {
diff --git a/chrome/browser/web_applications/web_app_origin_association_manager_browsertest.cc b/chrome/browser/web_applications/web_app_origin_association_manager_browsertest.cc index fb448d5..96e8e3b6 100644 --- a/chrome/browser/web_applications/web_app_origin_association_manager_browsertest.cc +++ b/chrome/browser/web_applications/web_app_origin_association_manager_browsertest.cc
@@ -4,6 +4,7 @@ #include "chrome/browser/web_applications/web_app_origin_association_manager.h" +#include "base/containers/contains.h" #include "base/run_loop.h" #include "base/test/bind.h" #include "base/test/scoped_feature_list.h" @@ -154,12 +155,9 @@ valid_and_invalid_app_url_handler_.origin, valid_and_invalid_app_url_handler_.has_origin_wildcard, {}, {}); - auto search = std::find(result.begin(), result.end(), - std::move(valid_app_url_handler)); - EXPECT_NE(search, result.end()); - search = std::find(result.begin(), result.end(), - std::move(valid_and_invalid_app_url_handler)); - EXPECT_NE(search, result.end()); + EXPECT_TRUE(base::Contains(result, std::move(valid_app_url_handler))); + EXPECT_TRUE( + base::Contains(result, std::move(valid_and_invalid_app_url_handler))); if (callback_count_ == expected_callback_count) { callback_count_ = 0;
diff --git a/chrome/browser/xsurface/android/java/src/org/chromium/chrome/browser/xsurface/HybridListRenderer.java b/chrome/browser/xsurface/android/java/src/org/chromium/chrome/browser/xsurface/HybridListRenderer.java index 122e372..518cf00b 100644 --- a/chrome/browser/xsurface/android/java/src/org/chromium/chrome/browser/xsurface/HybridListRenderer.java +++ b/chrome/browser/xsurface/android/java/src/org/chromium/chrome/browser/xsurface/HybridListRenderer.java
@@ -31,28 +31,14 @@ * @param viewport the ViewGroup containing the content. Views within the * bounds of this ViewGroup will be considered for view actions. If null, * the returned View will be used as the viewport. - * @return - */ - @Nullable - @Deprecated - default View bind(ListContentManager manager, @Nullable ViewGroup viewport) { - return bind(manager); - } - - /** - * Binds a contentmanager with this renderer. - * - * @param manager the ListContentManager responsible for populating views - * @param viewport the ViewGroup containing the content. Views within the - * bounds of this ViewGroup will be considered for view actions. If null, - * the returned View will be used as the viewport. - * @param shouldUseStaggeredLayout whether to use Staggered layout for list. + * @param shouldUseStaggeredLayout whether to use Staggered layout for list. Column count should + * be set via ListLayoutHelper#setSpanCount() * @return */ @Nullable default View bind(ListContentManager manager, @Nullable ViewGroup viewport, boolean shouldUseStaggeredLayout) { - return bind(manager, viewport); + return bind(manager); } /**
diff --git a/chrome/browser/xsurface/android/java/src/org/chromium/chrome/browser/xsurface/ListLayoutHelper.java b/chrome/browser/xsurface/android/java/src/org/chromium/chrome/browser/xsurface/ListLayoutHelper.java index bbce9a8..772a17f 100644 --- a/chrome/browser/xsurface/android/java/src/org/chromium/chrome/browser/xsurface/ListLayoutHelper.java +++ b/chrome/browser/xsurface/android/java/src/org/chromium/chrome/browser/xsurface/ListLayoutHelper.java
@@ -33,4 +33,7 @@ * @param offset offset to scroll to. */ default void scrollToPositionWithOffset(int position, int offset) {} + + /** Sets column count for @{@link android.support.v7.widget.RecyclerView} */ + default void setSpanCount(int spanCount) {} }
diff --git a/chrome/build/mac-arm.pgo.txt b/chrome/build/mac-arm.pgo.txt index 2fbaf99..834a3d4 100644 --- a/chrome/build/mac-arm.pgo.txt +++ b/chrome/build/mac-arm.pgo.txt
@@ -1 +1 @@ -chrome-mac-arm-main-1664430926-7e44f606f9525df61b6d8fe5b8fc6241b8f661a0.profdata +chrome-mac-arm-main-1664449577-1803ff180e1f8698996559eb4158c2410e264b50.profdata
diff --git a/chrome/build/win32.pgo.txt b/chrome/build/win32.pgo.txt index 1caf52bf..92f5ca2 100644 --- a/chrome/build/win32.pgo.txt +++ b/chrome/build/win32.pgo.txt
@@ -1 +1 @@ -chrome-win32-main-1664436148-caf914cc6c476fe4590762381347404774d1cd45.profdata +chrome-win32-main-1664449577-4093277c63be38d510ae4afd4a154d6dafa782e7.profdata
diff --git a/chrome/build/win64.pgo.txt b/chrome/build/win64.pgo.txt index f1f7edf..d6458da 100644 --- a/chrome/build/win64.pgo.txt +++ b/chrome/build/win64.pgo.txt
@@ -1 +1 @@ -chrome-win64-main-1664449577-ba6e8c2c5fa9f65aff5ad47d0ad9649cd7052eb9.profdata +chrome-win64-main-1664463469-ca90e49fb32afa439b22d0bfbadae1d2d1a0211f.profdata
diff --git a/chrome/common/profiler/unwind_util.cc b/chrome/common/profiler/unwind_util.cc index e628cfe..1582b7a 100644 --- a/chrome/common/profiler/unwind_util.cc +++ b/chrome/common/profiler/unwind_util.cc
@@ -159,11 +159,16 @@ // unwinders to work -- are available in the current context. Unwinder assets // are only embedded into certain builds of Chrome. bool AreUnwinderAssetsAvailable(version_info::Channel channel) { +#if defined(OFFICIAL_BUILD) && BUILDFLAG(GOOGLE_CHROME_BRANDING) // CFI is currently only embedded into dev, canary, and beta builds of Chrome: // https://crsrc.org/c/chrome/android/chrome_public_apk_tmpl.gni;l=30-36;drc=32cca7e9d8c49d42e393c75ffb404a0f8899704d return channel == version_info::Channel::CANARY || channel == version_info::Channel::DEV || channel == version_info::Channel::BETA; +#else + // Local/CQ builds. + return true; +#endif } // Manages installation of the module prerequisite for unwinding. Android, in @@ -212,6 +217,16 @@ version_info::Channel channel, UnwindPrerequisitesDelegate* prerequites_delegate) { #if ANDROID_ARM32_UNWINDING_SUPPORTED +#if defined(OFFICIAL_BUILD) && BUILDFLAG(GOOGLE_CHROME_BRANDING) + // Sometimes, DFMs can be installed even if not requested by Chrome + // explicitly (for instance, in some app stores). Therefore, even if the + // unwinder module is installed, we only consider it to be available for + // specific channels. + if (!(channel == version_info::Channel::CANARY || + channel == version_info::Channel::DEV)) { + return false; + } +#endif // defined(OFFICIAL_BUILD) && BUILDFLAG(GOOGLE_CHROME_BRANDING) ModuleUnwindPrerequisitesDelegate default_delegate; if (prerequites_delegate == nullptr) { prerequites_delegate = &default_delegate;
diff --git a/chrome/common/profiler/unwind_util_unittest.cc b/chrome/common/profiler/unwind_util_unittest.cc index bcca4a4b..ede4cc4a 100644 --- a/chrome/common/profiler/unwind_util_unittest.cc +++ b/chrome/common/profiler/unwind_util_unittest.cc
@@ -98,25 +98,34 @@ } test_cases[] = { {version_info::Channel::CANARY, &true_mock_delegate, true}, {version_info::Channel::DEV, &true_mock_delegate, true}, - {version_info::Channel::BETA, &true_mock_delegate, true}, #if BUILDFLAG(IS_ANDROID) && defined(ARCH_CPU_ARMEL) && \ BUILDFLAG(ENABLE_ARM_CFI_TABLE) {version_info::Channel::CANARY, &false_mock_delegate, false}, {version_info::Channel::DEV, &false_mock_delegate, false}, {version_info::Channel::BETA, &false_mock_delegate, false}, - {version_info::Channel::STABLE, &true_mock_delegate, false}, {version_info::Channel::STABLE, &false_mock_delegate, false}, - {version_info::Channel::UNKNOWN, &true_mock_delegate, false}, {version_info::Channel::UNKNOWN, &false_mock_delegate, false}, -#else +#if defined(OFFICIAL_BUILD) && BUILDFLAG(GOOGLE_CHROME_BRANDING) + {version_info::Channel::BETA, &true_mock_delegate, false}, + {version_info::Channel::STABLE, &true_mock_delegate, false}, + {version_info::Channel::UNKNOWN, &true_mock_delegate, false}, +#else // defined(OFFICIAL_BUILD) && BUILDFLAG(GOOGLE_CHROME_BRANDING) + {version_info::Channel::BETA, &true_mock_delegate, true}, + {version_info::Channel::STABLE, &true_mock_delegate, true}, + {version_info::Channel::UNKNOWN, &true_mock_delegate, true}, +#endif // defined(OFFICIAL_BUILD) && BUILDFLAG(GOOGLE_CHROME_BRANDING) +#else // BUILDFLAG(IS_ANDROID) && defined(ARCH_CPU_ARMEL) && + // BUILDFLAG(ENABLE_ARM_CFI_TABLE) {version_info::Channel::CANARY, &false_mock_delegate, true}, {version_info::Channel::DEV, &false_mock_delegate, true}, + {version_info::Channel::BETA, &true_mock_delegate, true}, {version_info::Channel::BETA, &false_mock_delegate, true}, {version_info::Channel::STABLE, &true_mock_delegate, true}, {version_info::Channel::STABLE, &false_mock_delegate, true}, {version_info::Channel::UNKNOWN, &true_mock_delegate, true}, {version_info::Channel::UNKNOWN, &false_mock_delegate, true}, -#endif +#endif // BUILDFLAG(IS_ANDROID) && defined(ARCH_CPU_ARMEL) && + // BUILDFLAG(ENABLE_ARM_CFI_TABLE) }; for (const auto& test_case : test_cases) {
diff --git a/chrome/test/BUILD.gn b/chrome/test/BUILD.gn index 33499eb..e0fe5c2 100644 --- a/chrome/test/BUILD.gn +++ b/chrome/test/BUILD.gn
@@ -5592,6 +5592,7 @@ sources += [ # The test is disabled for Android. The respective functionality is currently not being used on # Android. We should enable this test when Android becomes supported. + "../browser/metrics/power/battery_discharge_reporter_unittest.cc", "../browser/performance_manager/metrics/metrics_provider_unittest.cc", "../browser/policy/messaging_layer/util/reporting_server_connector_unittest.cc", ] @@ -6421,6 +6422,7 @@ "../browser/sharing/click_to_call/click_to_call_message_handler_android_unittest.cc", "../browser/sharing/optimization_guide/optimization_guide_message_handler_unittest.cc", "../browser/sharing/sms/sms_fetch_request_handler_unittest.cc", + "../browser/supervised_user/android/favicon_fetcher_unittest.cc", "../browser/touch_to_fill/touch_to_fill_controller_unittest.cc", "../browser/translate/android/translate_bridge_unittest.cc", "../browser/translate/translate_manager_render_view_host_android_unittest.cc",
diff --git a/chrome/test/base/in_process_browser_test_browsertest.cc b/chrome/test/base/in_process_browser_test_browsertest.cc index c977d9f..cc751d43 100644 --- a/chrome/test/base/in_process_browser_test_browsertest.cc +++ b/chrome/test/base/in_process_browser_test_browsertest.cc
@@ -119,8 +119,8 @@ } }; -// TODO(https://crbug.com/1231009): Flaky / times out on windows and linux bots. -#if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_LINUX) +// TODO(https://crbug.com/1231009): Flaky / times out on many bots. +#if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS) #define MAYBE_Test DISABLED_Test #else #define MAYBE_Test Test
diff --git a/chrome/test/data/webui/BUILD.gn b/chrome/test/data/webui/BUILD.gn index d352e352..737241bd 100644 --- a/chrome/test/data/webui/BUILD.gn +++ b/chrome/test/data/webui/BUILD.gn
@@ -295,10 +295,7 @@ } group("closure_compile") { - deps = [ - ":closure_compile_local", - "inline_login:closure_compile", - ] + deps = [ ":closure_compile_local" ] if (is_chromeos_ash) { deps += [ "chromeos:closure_compile",
diff --git a/chrome/test/data/webui/cr_components/chromeos/cellular_setup/activation_code_page_test.js b/chrome/test/data/webui/cr_components/chromeos/cellular_setup/activation_code_page_test.js index 8aef5af7e..905bb9d 100644 --- a/chrome/test/data/webui/cr_components/chromeos/cellular_setup/activation_code_page_test.js +++ b/chrome/test/data/webui/cr_components/chromeos/cellular_setup/activation_code_page_test.js
@@ -53,14 +53,13 @@ FakeBarcodeDetector, FakeImageCapture, setIntervalFunction, playVideoFunction, stopStreamFunction); document.body.appendChild(activationCodePage); - flush(); + await flushAsync(); mediaDevices = new FakeMediaDevices(); - mediaDevices.addDevice(); activationCodePage.setMediaDevices(mediaDevices); - mediaDevices.resolveEnumerateDevices(); - await waitAfterNextRender(activationCodePage); - flush(); + await flushAsync(); + + await addMediaDevice(); }); teardown(function() { @@ -68,8 +67,25 @@ FakeBarcodeDetector.setShouldFail(false); }); - test('UI states', async function() { + async function addMediaDevice() { + mediaDevices.addDevice(); await flushAsync(); + + await resolveEnumeratedDevicesPromise(); + } + + async function resolveEnumeratedDevicesPromise() { + let resolver; + const enumerateDeviceResolvedPromise = new Promise((resolve, reject) => { + resolver = resolve; + }); + mediaDevices.resolveEnumerateDevices(function() { + resolver(); + }); + await enumerateDeviceResolvedPromise; + } + + test('UI states', async function() { let qrCodeDetectorContainer = activationCodePage.$$('#esimQrCodeDetection'); const activationCodeContainer = activationCodePage.$$('#activationCodeContainer'); @@ -108,7 +124,7 @@ // Click the start scanning button. startScanningButton.click(); mediaDevices.resolveGetUserMedia(); - await waitAfterNextRender(activationCodePage); + await flushAsync(); // The video should be visible and start scanning UI hidden. assertFalse(video.hidden); @@ -154,8 +170,7 @@ // Mock, no media devices present mediaDevices.removeDevice(); - mediaDevices.resolveEnumerateDevices(); - await waitAfterNextRender(activationCodePage); + await resolveEnumeratedDevicesPromise(); // When no camera device is present qrCodeDetector container should // not be shown @@ -164,9 +179,7 @@ assertFalse(!!qrCodeDetectorContainer); }); - // TODO(b/247881851) Disable flaky test. Renable when test is fixed. - test.skip('Switch camera button states', async function() { - await flushAsync(); + test('Switch camera button states', async function() { const video = activationCodePage.$$('#video'); const startScanningButton = activationCodePage.$$('#startScanningButton'); const switchCameraButton = activationCodePage.$$('#switchCameraButton'); @@ -182,7 +195,7 @@ // Click the start scanning button. startScanningButton.click(); mediaDevices.resolveGetUserMedia(); - await waitAfterNextRender(activationCodePage); + await flushAsync(); // The video should be visible and switch camera button hidden. assertFalse(video.hidden); @@ -190,9 +203,7 @@ assertTrue(mediaDevices.isStreamingUserFacingCamera); // Add a new video device. - mediaDevices.addDevice(); - mediaDevices.resolveEnumerateDevices(); - await waitAfterNextRender(activationCodePage); + await addMediaDevice(); // The switch camera button should now be visible. assertFalse(switchCameraButton.hidden); @@ -200,7 +211,7 @@ switchCameraButton.click(); mediaDevices.resolveGetUserMedia(); - await waitAfterNextRender(activationCodePage); + await flushAsync(); // The second device should now be streaming. assertFalse(mediaDevices.isStreamingUserFacingCamera); @@ -209,7 +220,7 @@ // Switch back. switchCameraButton.click(); mediaDevices.resolveGetUserMedia(); - await waitAfterNextRender(activationCodePage); + await flushAsync(); // The first device should be streaming again. assertTrue(mediaDevices.isStreamingUserFacingCamera); @@ -218,15 +229,14 @@ // Switch to the second device again. switchCameraButton.click(); mediaDevices.resolveGetUserMedia(); - await waitAfterNextRender(activationCodePage); + await flushAsync(); assertFalse(mediaDevices.isStreamingUserFacingCamera); assertFalse(switchCameraButton.hidden); // Disconnect the second device. mediaDevices.removeDevice(); - mediaDevices.resolveEnumerateDevices(); - await waitAfterNextRender(activationCodePage); + await resolveEnumeratedDevicesPromise(); // The first device should now be streaming and the switch camera button // hidden. @@ -241,7 +251,6 @@ }); test('UI is disabled when showBusy property is set', async function() { - await flushAsync(); const startScanningButton = activationCodePage.$$('#startScanningButton'); const switchCameraButton = activationCodePage.$$('#switchCameraButton'); const tryAgainButton = activationCodePage.$$('#tryAgainButton'); @@ -268,7 +277,6 @@ test( 'Do not show qrContainer when BarcodeDetector is not ready', async function() { - await flushAsync(); let qrCodeDetectorContainer = activationCodePage.$$('#esimQrCodeDetection'); @@ -291,7 +299,6 @@ }); test('Event is fired when enter is pressed on input', async function() { - await flushAsync(); let eventFired = false; activationCodePage.addEventListener('forward-navigation-requested', () => { eventFired = true; @@ -306,7 +313,6 @@ test( 'Install error after manual entry should show error on input', async function() { - await flushAsync(); const input = activationCodePage.$$('#activationCode'); const startScanningContainer = activationCodePage.$$('#startScanningContainer'); @@ -329,7 +335,6 @@ test( 'Install error after scanning should show error on camera', async function() { - await flushAsync(); const input = activationCodePage.$$('#activationCode'); const startScanningContainer = activationCodePage.$$('#startScanningContainer'); @@ -384,7 +389,6 @@ }); test('Tabbing does not close video stream', async function() { - await flushAsync(); const startScanningButton = activationCodePage.$$('#startScanningButton'); const getVideo = () => activationCodePage.$$('#video'); const input = activationCodePage.$$('#activationCode'); @@ -416,7 +420,6 @@ test( 'Clear qr code detection timeout when video is hidden', async function() { - await flushAsync(); const startScanningButton = activationCodePage.$$('#startScanningButton'); const getVideo = () => activationCodePage.$$('#video'); @@ -441,7 +444,6 @@ }); test('Input entered manually is validated', async function() { - await flushAsync(); const input = activationCodePage.$$('#activationCode'); assertTrue(!!input); assertFalse(input.invalid); @@ -496,7 +498,6 @@ }); test('Scanned code is validated', async function() { - await flushAsync(); const input = activationCodePage.$$('#activationCode'); const startScanningContainer = activationCodePage.$$('#startScanningContainer');
diff --git a/chrome/test/data/webui/cr_components/chromeos/cellular_setup/fake_media_devices.js b/chrome/test/data/webui/cr_components/chromeos/cellular_setup/fake_media_devices.js index e08e082..3f30167 100644 --- a/chrome/test/data/webui/cr_components/chromeos/cellular_setup/fake_media_devices.js +++ b/chrome/test/data/webui/cr_components/chromeos/cellular_setup/fake_media_devices.js
@@ -31,11 +31,13 @@ /** * Resolves promise returned from enumerateDevices(). + * @param {?function()} callback */ - resolveEnumerateDevices() { + resolveEnumerateDevices(callback) { assertTrue( !!this.enumerateDevicesResolver_, 'enumerateDevices was not called'); this.enumerateDevicesResolver_(this.devices_); + callback(); } /** @override */
diff --git a/chrome/test/data/webui/inline_login/BUILD.gn b/chrome/test/data/webui/inline_login/BUILD.gn index 04e610d..5caa9a4 100644 --- a/chrome/test/data/webui/inline_login/BUILD.gn +++ b/chrome/test/data/webui/inline_login/BUILD.gn
@@ -2,7 +2,6 @@ # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. -import("//third_party/closure_compiler/compile_js.gni") import("//tools/grit/preprocess_if_expr.gni") import("//ui/webui/resources/tools/generate_grd.gni") @@ -31,105 +30,3 @@ manifest_files = [ "$target_gen_dir/preprocessed_manifest.json" ] resource_path_prefix = "inline_login" } - -js_type_check("closure_compile") { - is_polymer3 = true - closure_flags = default_closure_args + [ - "browser_resolver_prefix_replacements=\"chrome://chrome-signin/gaia_auth_host/=" + rebase_path( - "//chrome/browser/resources/gaia_auth_host/", - root_build_dir) + "\"", - "browser_resolver_prefix_replacements=\"chrome://chrome-signin/arc_account_picker/=" + rebase_path( - "//chrome/browser/resources/chromeos/arc_account_picker/", - root_build_dir) + "\"", - "browser_resolver_prefix_replacements=\"chrome://chrome-signin/=" + rebase_path( - "//chrome/browser/resources/inline_login/", - root_build_dir) + "\"", - "browser_resolver_prefix_replacements=\"chrome://webui-test/=./gen/chrome/test/data/webui/tsc\"", - "js_module_root=" + rebase_path("//chrome/test/data/webui/", - root_build_dir), - "js_module_root=./gen/chrome/test/data/webui/", - "js_module_root=" + - rebase_path("//chrome/browser/resources/", - root_build_dir), - "js_module_root=./gen/chrome/browser/resources/", - "js_module_root=" + - rebase_path("//chrome/browser/resources/inline_login/", - root_build_dir), - "js_module_root=./gen/chrome/browser/resources/inline_login/", - "js_module_root=./gen/chrome/browser/resources/inline_login/preprocessed/", - ] - deps = [ - ":inline_login_test", - ":inline_login_test_util", - ] - if (is_chromeos_ash) { - deps += [ - ":arc_account_picker_page_test", - ":inline_login_signin_blocked_by_policy_page_test", - ":inline_login_welcome_page_test", - ] - } -} - -js_library("inline_login_test") { - deps = [ - ":inline_login_test_util", - "..:test_util", - "//chrome/browser/resources/inline_login:inline_login_app", - "//ui/webui/resources/js:assert", - "//ui/webui/resources/js:load_time_data.m", - ] - externs_list = [ "$externs_path/mocha-2.5.js" ] -} - -if (is_chromeos_ash) { - js_library("inline_login_welcome_page_test") { - deps = [ - ":inline_login_test_util", - "..:test_util", - "//chrome/browser/resources/inline_login:inline_login_app", - "//ui/webui/resources/js:assert", - "//ui/webui/resources/js:load_time_data.m", - ] - externs_list = [ "$externs_path/mocha-2.5.js" ] - } - - js_library("inline_login_signin_blocked_by_policy_page_test") { - deps = [ - ":inline_login_test_util", - "..:test_util", - "//chrome/browser/resources/inline_login:inline_login_app", - "//ui/webui/resources/js:assert", - "//ui/webui/resources/js:load_time_data.m", - ] - externs_list = [ "$externs_path/mocha-2.5.js" ] - } - - js_library("arc_account_picker_page_test") { - deps = [ - ":inline_login_test_util", - "..:test_util", - "../chromeos/arc_account_picker:test_util", - "//chrome/browser/resources/inline_login:inline_login_app", - "//ui/webui/resources/js:assert", - "//ui/webui/resources/js:load_time_data.m", - ] - externs_list = [ "$externs_path/mocha-2.5.js" ] - } -} - -js_library("inline_login_test_util") { - sources = [ "$target_gen_dir/inline_login_test_util.js" ] - deps = [ - "..:test_browser_proxy", - "//chrome/browser/resources/gaia_auth_host:authenticator", - "//chrome/browser/resources/inline_login:inline_login_browser_proxy", - "//ui/webui/resources/js/cr:event_target", - ] - if (is_chromeos_ash) { - deps += [ - "//chrome/browser/resources/chromeos/arc_account_picker:arc_util", - ] - } - extra_deps = [ ":preprocess" ] -}
diff --git a/chrome/test/data/webui/inline_login/arc_account_picker_page_test.js b/chrome/test/data/webui/inline_login/arc_account_picker_page_test.js index 3763393..d4f99de 100644 --- a/chrome/test/data/webui/inline_login/arc_account_picker_page_test.js +++ b/chrome/test/data/webui/inline_login/arc_account_picker_page_test.js
@@ -61,7 +61,7 @@ testBrowserProxy = new TestInlineLoginBrowserProxy(); testBrowserProxy.setDialogArguments(dialogArgs); - InlineLoginBrowserProxyImpl.instance_ = testBrowserProxy; + InlineLoginBrowserProxyImpl.setInstance(testBrowserProxy); testArcBrowserProxy = new TestArcAccountPickerBrowserProxy(); testArcBrowserProxy.setAccountsNotAvailableInArc(accountsNotAvailableInArc);
diff --git a/chrome/test/data/webui/inline_login/inline_login_signin_blocked_by_policy_page_test.js b/chrome/test/data/webui/inline_login/inline_login_signin_blocked_by_policy_page_test.js index ac7b734..5ab7ab39 100644 --- a/chrome/test/data/webui/inline_login/inline_login_signin_blocked_by_policy_page_test.js +++ b/chrome/test/data/webui/inline_login/inline_login_signin_blocked_by_policy_page_test.js
@@ -61,7 +61,7 @@ document.body.innerHTML = ''; testBrowserProxy = new TestInlineLoginBrowserProxy(); testBrowserProxy.setDialogArguments(dialogArgs); - InlineLoginBrowserProxyImpl.instance_ = testBrowserProxy; + InlineLoginBrowserProxyImpl.setInstance(testBrowserProxy); document.body.innerHTML = ''; inlineLoginComponent = /** @type {InlineLoginAppElement} */ ( document.createElement('inline-login-app'));
diff --git a/chrome/test/data/webui/inline_login/inline_login_test.js b/chrome/test/data/webui/inline_login/inline_login_test.js index afb504a..9eab4b4 100644 --- a/chrome/test/data/webui/inline_login/inline_login_test.js +++ b/chrome/test/data/webui/inline_login/inline_login_test.js
@@ -56,7 +56,7 @@ setup(() => { document.body.innerHTML = ''; testBrowserProxy = new TestInlineLoginBrowserProxy(); - InlineLoginBrowserProxyImpl.instance_ = testBrowserProxy; + InlineLoginBrowserProxyImpl.setInstance(testBrowserProxy); document.body.innerHTML = ''; inlineLoginComponent = /** @type {InlineLoginAppElement} */ ( document.createElement('inline-login-app'));
diff --git a/chrome/test/data/webui/inline_login/inline_login_test_util.js b/chrome/test/data/webui/inline_login/inline_login_test_util.js index c7c0d7b..c832fd09 100644 --- a/chrome/test/data/webui/inline_login/inline_login_test_util.js +++ b/chrome/test/data/webui/inline_login/inline_login_test_util.js
@@ -7,7 +7,6 @@ // </if> import {AuthMode, AuthParams} from 'chrome://chrome-signin/gaia_auth_host/authenticator.js'; -import {InlineLoginBrowserProxy} from 'chrome://chrome-signin/inline_login_browser_proxy.js'; import {NativeEventTarget as EventTarget} from 'chrome://resources/js/cr/event_target.js'; import {TestBrowserProxy} from '../test_browser_proxy.js';
diff --git a/chrome/test/data/webui/inline_login/inline_login_welcome_page_test.js b/chrome/test/data/webui/inline_login/inline_login_welcome_page_test.js index f8fa81b..0b48424 100644 --- a/chrome/test/data/webui/inline_login/inline_login_welcome_page_test.js +++ b/chrome/test/data/webui/inline_login/inline_login_welcome_page_test.js
@@ -4,11 +4,10 @@ import 'chrome://chrome-signin/inline_login_app.js'; -import {AccountAdditionOptions} from 'chrome://chrome-signin/arc_account_picker/arc_util.js'; import {InlineLoginAppElement, View} from 'chrome://chrome-signin/inline_login_app.js'; import {InlineLoginBrowserProxyImpl} from 'chrome://chrome-signin/inline_login_browser_proxy.js'; import {assert} from 'chrome://resources/js/assert.js'; -import {isChromeOS, webUIListenerCallback} from 'chrome://resources/js/cr.m.js'; +import {webUIListenerCallback} from 'chrome://resources/js/cr.m.js'; import {loadTimeData} from 'chrome://resources/js/load_time_data.m.js'; import {flush} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js'; import {waitAfterNextRender} from 'chrome://webui-test/polymer_test_util.js'; @@ -56,7 +55,7 @@ document.body.innerHTML = ''; testBrowserProxy = new TestInlineLoginBrowserProxy(); testBrowserProxy.setDialogArguments(dialogArgs); - InlineLoginBrowserProxyImpl.instance_ = testBrowserProxy; + InlineLoginBrowserProxyImpl.setInstance(testBrowserProxy); document.body.innerHTML = ''; inlineLoginComponent = /** @type {InlineLoginAppElement} */ ( document.createElement('inline-login-app'));
diff --git a/chrome/test/data/webui/new_tab_page/app_test.ts b/chrome/test/data/webui/new_tab_page/app_test.ts index 8531b62..d54d016 100644 --- a/chrome/test/data/webui/new_tab_page/app_test.ts +++ b/chrome/test/data/webui/new_tab_page/app_test.ts
@@ -380,6 +380,38 @@ await callbackRouterRemote.$.flushForTesting(); assertTrue(mostVisited.hasAttribute('is-dark_')); }); + + [true, false].forEach((isDark) => { + test( + `OGB light mode whenever background image + (ignoring dark mode) isDark: ${isDark}`, + async () => { + // Act. + + // Create a theme with a custom background. + const theme = createTheme(isDark); + theme.backgroundImage = createBackgroundImage('https://foo.com'); + callbackRouterRemote.setTheme(theme); + await callbackRouterRemote.$.flushForTesting(); + + // Notify the NTP that the ogb has loaded. + window.dispatchEvent(new MessageEvent('message', { + data: { + frameType: 'one-google-bar', + messageType: 'loaded', + }, + source: window, + origin: window.origin, + })); + + // Assert. + assertEquals(1, windowProxy.getCallCount('postMessage')); + const [_, {type, applyLightTheme}] = + windowProxy.getArgs('postMessage')[0]; + assertEquals('updateAppearance', type); + assertEquals(true, applyLightTheme); + }); + }); }); suite('promo', () => {
diff --git a/chrome/test/data/webui/settings/privacy_page_test.ts b/chrome/test/data/webui/settings/privacy_page_test.ts index c25e9a27..d01743d 100644 --- a/chrome/test/data/webui/settings/privacy_page_test.ts +++ b/chrome/test/data/webui/settings/privacy_page_test.ts
@@ -52,7 +52,7 @@ // routes which depend on flags being enabled. // routes.SITE_SETTINGS_BLUETOOTH_SCANNING, // routes.SITE_SETTINGS_BLUETOOTH_DEVICES, - // routes.SITE_SETTINGS_WINDOW_PLACEMENT, + // routes.SITE_SETTINGS_WINDOW_MANAGEMENT, // Doesn't contain toggle or radio buttons // routes.SITE_SETTINGS_INSECURE_CONTENT,
diff --git a/chrome/test/data/webui/settings/site_details_tests.ts b/chrome/test/data/webui/settings/site_details_tests.ts index dc20176..9a18e61 100644 --- a/chrome/test/data/webui/settings/site_details_tests.ts +++ b/chrome/test/data/webui/settings/site_details_tests.ts
@@ -150,7 +150,7 @@ ContentSettingsTypes.VR, [createRawSiteException('https://foo.com:443')]), createContentSettingTypeToValuePair( - ContentSettingsTypes.WINDOW_PLACEMENT, + ContentSettingsTypes.WINDOW_MANAGEMENT, [createRawSiteException('https://foo.com:443')]), createContentSettingTypeToValuePair( ContentSettingsTypes.LOCAL_FONTS,
diff --git a/chrome/test/data/webui/settings/test_site_settings_prefs_browser_proxy.ts b/chrome/test/data/webui/settings/test_site_settings_prefs_browser_proxy.ts index 9c34902..b2f37c3 100644 --- a/chrome/test/data/webui/settings/test_site_settings_prefs_browser_proxy.ts +++ b/chrome/test/data/webui/settings/test_site_settings_prefs_browser_proxy.ts
@@ -103,7 +103,7 @@ ContentSettingsTypes.SOUND, ContentSettingsTypes.USB_DEVICES, ContentSettingsTypes.VR, - ContentSettingsTypes.WINDOW_PLACEMENT, + ContentSettingsTypes.WINDOW_MANAGEMENT, ]; this.prefs_ = createSiteSettingsPrefs([], [], []);
diff --git a/chrome/updater/BUILD.gn b/chrome/updater/BUILD.gn index b3961e8..125dc5a 100644 --- a/chrome/updater/BUILD.gn +++ b/chrome/updater/BUILD.gn
@@ -422,6 +422,8 @@ "-e", "BROWSER_NAME=\"$browser_name\"", "-e", + "BROWSER_PRODUCT_NAME=\"$browser_product_name\"", + "-e", "COMPANY_FULLNAME=\"$updater_company_full_name\"", "-e", "COMPANY_SHORTNAME=\"$updater_company_short_name\"",
diff --git a/chrome/updater/mac/privileged_helper/Info.plist b/chrome/updater/mac/privileged_helper/Info.plist index 7584c7d..184d823 100644 --- a/chrome/updater/mac/privileged_helper/Info.plist +++ b/chrome/updater/mac/privileged_helper/Info.plist
@@ -17,6 +17,9 @@ <key>SMAuthorizedClients</key> <array> <string>identifier "${BROWSER_BUNDLE_IDENTIFIER}"</string> + <string>identifier "${BROWSER_BUNDLE_IDENTIFIER}.beta"</string> + <string>identifier "${BROWSER_BUNDLE_IDENTIFIER}.canary"</string> + <string>identifier "${BROWSER_BUNDLE_IDENTIFIER}.dev"</string> </array> </dict> </plist>
diff --git a/chrome/updater/mac/privileged_helper/service.mm b/chrome/updater/mac/privileged_helper/service.mm index 7fd1138b..ce492d3 100644 --- a/chrome/updater/mac/privileged_helper/service.mm +++ b/chrome/updater/mac/privileged_helper/service.mm
@@ -119,8 +119,9 @@ namespace updater { namespace { -constexpr base::FilePath::CharType kFrameworksPath[] = FILE_PATH_LITERAL( - "Contents/Frameworks/" BROWSER_NAME_STRING " Framework.framework/Helpers"); +constexpr base::FilePath::CharType kFrameworksPath[] = + FILE_PATH_LITERAL("Contents/Frameworks/" BROWSER_PRODUCT_NAME_STRING + " Framework.framework/Helpers"); constexpr base::FilePath::CharType kProductBundleName[] = FILE_PATH_LITERAL(PRODUCT_FULLNAME_STRING ".app"); constexpr int kPermissionsMask = base::FILE_PERMISSION_USER_MASK |
diff --git a/chrome/updater/updater_branding.h.in b/chrome/updater/updater_branding.h.in index 08f9afea..1553325 100644 --- a/chrome/updater/updater_branding.h.in +++ b/chrome/updater/updater_branding.h.in
@@ -4,6 +4,7 @@ // Branding Information #define BROWSER_NAME_STRING "@BROWSER_NAME@" +#define BROWSER_PRODUCT_NAME_STRING "@BROWSER_PRODUCT_NAME@" #define COMPANY_SHORTNAME_STRING "@COMPANY_SHORTNAME@" #define CRASH_UPLOAD_URL "@CRASH_UPLOAD_URL@" #define CRASH_PRODUCT_NAME "@CRASH_PRODUCT_NAME@"
diff --git a/chromeos/ash/components/device_activity/OWNERS b/chromeos/ash/components/device_activity/OWNERS index 9a6e935..107f230b 100644 --- a/chromeos/ash/components/device_activity/OWNERS +++ b/chromeos/ash/components/device_activity/OWNERS
@@ -1,3 +1,2 @@ hirthanan@google.com -karkhedkar@google.com qianwan@google.com
diff --git a/chromeos/ash/components/network/onc/network_onc_utils.cc b/chromeos/ash/components/network/onc/network_onc_utils.cc index 7249f0b..5ed9971 100644 --- a/chromeos/ash/components/network/onc/network_onc_utils.cc +++ b/chromeos/ash/components/network/onc/network_onc_utils.cc
@@ -369,7 +369,7 @@ return NetworkTypePattern::Default(); } -base::Value ConvertOncProxySettingsToProxyConfig( +base::Value::Dict ConvertOncProxySettingsToProxyConfig( const base::Value& onc_proxy_settings) { std::string type = GetString(onc_proxy_settings, ::onc::proxy::kType); @@ -390,7 +390,7 @@ onc_proxy_settings.FindKey(::onc::proxy::kManual); if (!manual_dict) { NET_LOG(ERROR) << "Manual proxy missing dictionary"; - return base::Value(); + return base::Value::Dict(); } std::string manual_spec; AppendProxyServerForScheme(*manual_dict, ::onc::proxy::kFtp, &manual_spec); @@ -409,7 +409,7 @@ bypass_rules.ToString()); } NOTREACHED(); - return base::Value(); + return base::Value::Dict(); } base::Value ConvertProxyConfigToOncProxySettings( @@ -417,7 +417,7 @@ DCHECK(proxy_config_value.is_dict()); // Create a ProxyConfigDictionary from the dictionary. - ProxyConfigDictionary proxy_config(proxy_config_value.Clone()); + ProxyConfigDictionary proxy_config(proxy_config_value.GetDict().Clone()); // Create the result Value and populate it. base::Value proxy_settings(base::Value::Type::DICTIONARY);
diff --git a/chromeos/ash/components/network/onc/network_onc_utils.h b/chromeos/ash/components/network/onc/network_onc_utils.h index 7a207ea7..c9599ab 100644 --- a/chromeos/ash/components/network/onc/network_onc_utils.h +++ b/chromeos/ash/components/network/onc/network_onc_utils.h
@@ -13,6 +13,7 @@ #include "base/component_export.h" #include "base/containers/flat_map.h" #include "base/memory/ref_counted.h" +#include "base/values.h" #include "chromeos/ash/components/network/network_type_pattern.h" #include "chromeos/components/onc/variable_expander.h" #include "components/onc/onc_constants.h" @@ -20,10 +21,6 @@ class PrefService; -namespace base { -class Value; -} - namespace chromeos::onc { struct OncValueSignature; } @@ -45,7 +42,7 @@ // Translates |onc_proxy_settings|, which must be a valid ONC ProxySettings // dictionary, to a ProxyConfig dictionary (see proxy_config_dictionary.h). COMPONENT_EXPORT(CHROMEOS_NETWORK) -base::Value ConvertOncProxySettingsToProxyConfig( +base::Value::Dict ConvertOncProxySettingsToProxyConfig( const base::Value& onc_proxy_settings); // Translates |proxy_config_value|, which must be a valid ProxyConfig dictionary
diff --git a/chromeos/ash/components/network/onc/network_onc_utils_unittest.cc b/chromeos/ash/components/network/onc/network_onc_utils_unittest.cc index 5f1bd2e..f5245a1 100644 --- a/chromeos/ash/components/network/onc/network_onc_utils_unittest.cc +++ b/chromeos/ash/components/network/onc/network_onc_utils_unittest.cc
@@ -46,10 +46,9 @@ test_case.FindKey("ONC_ProxySettings"); ASSERT_TRUE(onc_proxy_settings); - base::Value actual_proxy_config = + base::Value::Dict actual_proxy_config = ConvertOncProxySettingsToProxyConfig(*onc_proxy_settings); - EXPECT_TRUE( - test_utils::Equals(expected_proxy_config, &actual_proxy_config)); + EXPECT_EQ(*expected_proxy_config, actual_proxy_config); } }
diff --git a/chromeos/ash/components/network/onc/onc_translator_onc_to_shill.cc b/chromeos/ash/components/network/onc/onc_translator_onc_to_shill.cc index 41b17c4..5436d78 100644 --- a/chromeos/ash/components/network/onc/onc_translator_onc_to_shill.cc +++ b/chromeos/ash/components/network/onc/onc_translator_onc_to_shill.cc
@@ -468,7 +468,7 @@ const base::Value* proxy_settings = onc_object_->FindDictKey(::onc::network_config::kProxySettings); if (proxy_settings) { - base::Value proxy_config = + base::Value::Dict proxy_config = ConvertOncProxySettingsToProxyConfig(*proxy_settings); std::string proxy_config_str; base::JSONWriter::Write(proxy_config, &proxy_config_str);
diff --git a/chromeos/ash/components/network/proxy/proxy_config_handler.cc b/chromeos/ash/components/network/proxy/proxy_config_handler.cc index a36d335f..d3a661d7 100644 --- a/chromeos/ash/components/network/proxy/proxy_config_handler.cc +++ b/chromeos/ash/components/network/proxy/proxy_config_handler.cc
@@ -88,7 +88,7 @@ const base::Value& value = network.proxy_config(); if (value.is_none()) return nullptr; - return std::make_unique<ProxyConfigDictionary>(value.Clone()); + return std::make_unique<ProxyConfigDictionary>(value.GetDict().Clone()); } void SetProxyConfigForNetwork(const ProxyConfigDictionary& proxy_config,
diff --git a/chromeos/ash/components/network/proxy/proxy_config_service_impl.cc b/chromeos/ash/components/network/proxy/proxy_config_service_impl.cc index 60d3e96b..a72f0b77 100644 --- a/chromeos/ash/components/network/proxy/proxy_config_service_impl.cc +++ b/chromeos/ash/components/network/proxy/proxy_config_service_impl.cc
@@ -191,7 +191,8 @@ const PrefService::Preference* const pref = profile_prefs->FindPreference(::proxy_config::prefs::kProxy); DCHECK(pref->GetValue() && pref->GetValue()->is_dict()); - return std::make_unique<ProxyConfigDictionary>(pref->GetValue()->Clone()); + return std::make_unique<ProxyConfigDictionary>( + pref->GetValue()->GetDict().Clone()); } const NetworkState* network =
diff --git a/chromeos/ash/components/network/proxy/ui_proxy_config_service_unittest.cc b/chromeos/ash/components/network/proxy/ui_proxy_config_service_unittest.cc index d18c7712..29910ad 100644 --- a/chromeos/ash/components/network/proxy/ui_proxy_config_service_unittest.cc +++ b/chromeos/ash/components/network/proxy/ui_proxy_config_service_unittest.cc
@@ -211,11 +211,9 @@ TEST_F(UIProxyConfigServiceTest, ExtensionProxyNotMergedForUnconfiguredNetork) { std::unique_ptr<UIProxyConfigService> service = CreateServiceOffLocalState(); - base::Value extension_prefs_config = - ProxyConfigDictionary::CreatePacScript("http://pac/script.pac", true); user_prefs_.SetExtensionPref( proxy_config::prefs::kProxy, - base::Value::ToUniquePtrValue(std::move(extension_prefs_config))); + ProxyConfigDictionary::CreatePacScript("http://pac/script.pac", true)); base::Value::Dict config; EXPECT_FALSE( @@ -396,11 +394,9 @@ TEST_F(UIProxyConfigServiceTest, PacExtensionPref) { std::unique_ptr<UIProxyConfigService> service = CreateServiceForUser(); - base::Value extension_prefs_config = - ProxyConfigDictionary::CreatePacScript("http://pac/script.pac", true); user_prefs_.SetExtensionPref( proxy_config::prefs::kProxy, - base::Value::ToUniquePtrValue(std::move(extension_prefs_config))); + ProxyConfigDictionary::CreatePacScript("http://pac/script.pac", true)); base::Value::Dict config; EXPECT_TRUE(service->MergeEnforcedProxyConfig(kTestUserWifiGuid, &config)); @@ -419,11 +415,8 @@ TEST_F(UIProxyConfigServiceTest, AutoDetectExtensionPref) { std::unique_ptr<UIProxyConfigService> service = CreateServiceForUser(); - base::Value extension_prefs_config = - ProxyConfigDictionary::CreateAutoDetect(); - user_prefs_.SetExtensionPref( - proxy_config::prefs::kProxy, - base::Value::ToUniquePtrValue(std::move(extension_prefs_config))); + user_prefs_.SetExtensionPref(proxy_config::prefs::kProxy, + ProxyConfigDictionary::CreateAutoDetect()); base::Value::Dict config; EXPECT_TRUE(service->MergeEnforcedProxyConfig(kTestUserWifiGuid, &config)); @@ -439,10 +432,8 @@ TEST_F(UIProxyConfigServiceTest, DirectExtensionPref) { std::unique_ptr<UIProxyConfigService> service = CreateServiceForUser(); - base::Value extension_prefs_config = ProxyConfigDictionary::CreateDirect(); - user_prefs_.SetExtensionPref( - proxy_config::prefs::kProxy, - base::Value::ToUniquePtrValue(std::move(extension_prefs_config))); + user_prefs_.SetExtensionPref(proxy_config::prefs::kProxy, + ProxyConfigDictionary::CreateDirect()); base::Value::Dict config; EXPECT_TRUE(service->MergeEnforcedProxyConfig(kTestUserWifiGuid, &config)); @@ -458,12 +449,10 @@ TEST_F(UIProxyConfigServiceTest, ManualExtensionPref) { std::unique_ptr<UIProxyConfigService> service = CreateServiceForUser(); - base::Value extension_prefs_config = - ProxyConfigDictionary::CreateFixedServers( - "http=proxy1:81;https=proxy2:82;socks=proxy3:81", "localhost"); user_prefs_.SetExtensionPref( proxy_config::prefs::kProxy, - base::Value::ToUniquePtrValue(std::move(extension_prefs_config))); + ProxyConfigDictionary::CreateFixedServers( + "http=proxy1:81;https=proxy2:82;socks=proxy3:81", "localhost")); base::Value::Dict config; EXPECT_TRUE(service->MergeEnforcedProxyConfig(kTestUserWifiGuid, &config)); @@ -494,11 +483,9 @@ TEST_F(UIProxyConfigServiceTest, ExtensionProxyOverridesDefault) { std::unique_ptr<UIProxyConfigService> service = CreateServiceForUser(); - base::Value extension_prefs_config = ProxyConfigDictionary::CreatePacScript( - "http://extension/script.pac", true); - user_prefs_.SetExtensionPref( - proxy_config::prefs::kProxy, - base::Value::ToUniquePtrValue(std::move(extension_prefs_config))); + user_prefs_.SetExtensionPref(proxy_config::prefs::kProxy, + ProxyConfigDictionary::CreatePacScript( + "http://extension/script.pac", true)); std::string config_json = base::ReplaceStringPlaceholders( R"({"Type": $1, "PAC": $2})", @@ -532,11 +519,8 @@ ProxyConfigDictionary::CreatePacScript( "http://managed/script.pac", true)); - base::Value extension_prefs_config = - ProxyConfigDictionary::CreateAutoDetect(); - user_prefs_.SetExtensionPref( - proxy_config::prefs::kProxy, - base::Value::ToUniquePtrValue(std::move(extension_prefs_config))); + user_prefs_.SetExtensionPref(proxy_config::prefs::kProxy, + ProxyConfigDictionary::CreateAutoDetect()); base::Value::Dict config; EXPECT_TRUE(service->MergeEnforcedProxyConfig(kTestUserWifiGuid, &config)); @@ -572,11 +556,8 @@ TEST_F(UIProxyConfigServiceTest, ExtensionPrefForSharedNetwork) { std::unique_ptr<UIProxyConfigService> service = CreateServiceForUser(); - base::Value extension_prefs_config = - ProxyConfigDictionary::CreateAutoDetect(); - user_prefs_.SetExtensionPref( - proxy_config::prefs::kProxy, - base::Value::ToUniquePtrValue(std::move(extension_prefs_config))); + user_prefs_.SetExtensionPref(proxy_config::prefs::kProxy, + ProxyConfigDictionary::CreateAutoDetect()); base::Value::Dict config; EXPECT_TRUE(service->MergeEnforcedProxyConfig(kTestSharedWifiGuid, &config)); @@ -940,11 +921,9 @@ TEST_F(UIProxyConfigServiceTest, ExtensionPrefOverridesOncPolicy) { std::unique_ptr<UIProxyConfigService> service = CreateServiceForUser(); - base::Value extension_prefs_config = - ProxyConfigDictionary::CreatePacScript("http://pac/script.pac", true); user_prefs_.SetExtensionPref( proxy_config::prefs::kProxy, - base::Value::ToUniquePtrValue(std::move(extension_prefs_config))); + ProxyConfigDictionary::CreatePacScript("http://pac/script.pac", true)); const std::string user_onc_config = base::ReplaceStringPlaceholders( R"([{"GUID": "$1", "Type": "WiFi", "ProxySettings": {"Type": "WPAD"}}])",
diff --git a/chromeos/services/network_config/cros_network_config_unittest.cc b/chromeos/services/network_config/cros_network_config_unittest.cc index 045c0a3..64f2775 100644 --- a/chromeos/services/network_config/cros_network_config_unittest.cc +++ b/chromeos/services/network_config/cros_network_config_unittest.cc
@@ -2246,10 +2246,8 @@ TEST_F(CrosNetworkConfigTest, PolicyEnforcedProxyMode) { // Proxies enforced by policy and/or extension are set in the kProxy // preference. - base::Value policy_prefs_config = ProxyConfigDictionary::CreateAutoDetect(); - user_prefs_.SetUserPref( - proxy_config::prefs::kProxy, - base::Value::ToUniquePtrValue(std::move(policy_prefs_config))); + user_prefs_.SetUserPref(proxy_config::prefs::kProxy, + ProxyConfigDictionary::CreateAutoDetect()); mojom::NetworkStatePropertiesPtr network = GetNetworkState("wifi2_guid"); ASSERT_TRUE(network);
diff --git a/components/app_restore/BUILD.gn b/components/app_restore/BUILD.gn index 74c35f0..3c8d69b0 100644 --- a/components/app_restore/BUILD.gn +++ b/components/app_restore/BUILD.gn
@@ -31,8 +31,6 @@ "full_restore_save_handler.h", "full_restore_utils.cc", "full_restore_utils.h", - "lacros_read_handler.cc", - "lacros_read_handler.h", "lacros_save_handler.cc", "lacros_save_handler.h", "restore_data.cc",
diff --git a/components/app_restore/full_restore_read_handler.cc b/components/app_restore/full_restore_read_handler.cc index 740fd4f4..4d21cc4a 100644 --- a/components/app_restore/full_restore_read_handler.cc +++ b/components/app_restore/full_restore_read_handler.cc
@@ -20,7 +20,6 @@ #include "components/app_restore/features.h" #include "components/app_restore/full_restore_file_handler.h" #include "components/app_restore/full_restore_save_handler.h" -#include "components/app_restore/lacros_read_handler.h" #include "components/app_restore/restore_data.h" #include "components/app_restore/window_info.h" #include "components/app_restore/window_properties.h" @@ -71,16 +70,7 @@ } if (app_restore::IsLacrosWindow(window)) { - // If the Lacros `window` is added to the hidden container, observe `window` - // to restore and remove it from the hidden container in - // OnWindowAddedToRootWindow callback. - if (lacros_read_handler_ && - window_id == app_restore::kParentToHiddenContainer) { - observed_windows_.AddObservation(window); - } - - if (lacros_read_handler_) - lacros_read_handler_->OnWindowInitialized(window); + DCHECK(window_id > app_restore::kParentToHiddenContainer); return; } @@ -93,16 +83,6 @@ app_restore::AppRestoreInfo::GetInstance()->OnWindowInitialized(window); } -void FullRestoreReadHandler::OnWindowAddedToRootWindow(aura::Window* window) { - // If the Lacros `window` is added to the hidden container, call - // OnWindowAddedToRootWindow to restore and remove it from the hidden - // container. - if (app_restore::IsLacrosWindow(window) && lacros_read_handler_ && - window->GetProperty(app_restore::kParentToHiddenContainerKey)) { - lacros_read_handler_->OnWindowAddedToRootWindow(window); - } -} - void FullRestoreReadHandler::OnWindowDestroyed(aura::Window* window) { DCHECK(observed_windows_.IsObservingSource(window)); observed_windows_.RemoveObservation(window); @@ -113,9 +93,6 @@ return; } - if (app_restore::IsLacrosWindow(window) && lacros_read_handler_) - lacros_read_handler_->OnWindowDestroyed(window); - int32_t restore_window_id = window->GetProperty(app_restore::kRestoreWindowIdKey); DCHECK(SessionID::IsValidValue(restore_window_id)); @@ -168,27 +145,9 @@ arc_read_handler_->OnTaskDestroyed(task_id); } -void FullRestoreReadHandler::OnLacrosChromeAppWindowAdded( - const std::string& app_id, - const std::string& window_id) { - if (lacros_read_handler_) - lacros_read_handler_->OnAppWindowAdded(app_id, window_id); -} - -void FullRestoreReadHandler::OnLacrosChromeAppWindowRemoved( - const std::string& app_id, - const std::string& window_id) { - if (lacros_read_handler_) - lacros_read_handler_->OnAppWindowRemoved(app_id, window_id); -} - void FullRestoreReadHandler::SetPrimaryProfilePath( const base::FilePath& profile_path) { primary_profile_path_ = profile_path; - if (::full_restore::features::IsFullRestoreForLacrosEnabled()) { - lacros_read_handler_ = - std::make_unique<app_restore::LacrosReadHandler>(profile_path); - } } void FullRestoreReadHandler::SetActiveProfilePath( @@ -339,9 +298,8 @@ int32_t FullRestoreReadHandler::GetLacrosRestoreWindowId( const std::string& lacros_window_id) const { - return IsLacrosRestoreRunning() - ? lacros_read_handler_->GetLacrosRestoreWindowId(lacros_window_id) - : 0; + return full_restore::FullRestoreReadHandler::GetInstance() + ->FetchRestoreWindowId(lacros_window_id); } void FullRestoreReadHandler::SetArcSessionIdForWindowId(int32_t arc_session_id, @@ -416,7 +374,7 @@ } bool FullRestoreReadHandler::IsLacrosRestoreRunning() const { - if (!lacros_read_handler_ || active_profile_path_ != primary_profile_path_) + if (active_profile_path_ != primary_profile_path_) return false; auto it = profile_path_to_start_time_data_.find(primary_profile_path_); @@ -451,12 +409,6 @@ } else { window_id_to_app_restore_info_[window_id] = std::make_pair(profile_path, app_id); - // TODO(crbug.com/1239984): Remove restore data from - // `lacros_read_handler_` for ash browser apps. - if (lacros_read_handler_ && app_id != app_constants::kChromeAppId && - primary_profile_path_ == profile_path) { - lacros_read_handler_->AddRestoreData(app_id, window_id); - } } } }
diff --git a/components/app_restore/full_restore_read_handler.h b/components/app_restore/full_restore_read_handler.h index 3a8231d1..4b444970 100644 --- a/components/app_restore/full_restore_read_handler.h +++ b/components/app_restore/full_restore_read_handler.h
@@ -26,7 +26,6 @@ namespace app_restore { struct AppLaunchInfo; -class LacrosReadHandler; class RestoreData; struct WindowInfo; } // namespace app_restore @@ -73,7 +72,6 @@ void OnWindowInitialized(aura::Window* window) override; // aura::WindowObserver: - void OnWindowAddedToRootWindow(aura::Window* window) override; void OnWindowDestroyed(aura::Window* window) override; // app_restore::ArcReadHandler::Delegate: @@ -95,18 +93,6 @@ int32_t session_id) override; void OnTaskDestroyed(int32_t task_id) override; - // Invoked when an Chrome app Lacros window is created. `app_id` is the - // AppService id, and `window_id` is the wayland app_id property for the - // window. - void OnLacrosChromeAppWindowAdded(const std::string& app_id, - const std::string& window_id); - - // Invoked when an Chrome app Lacros window is removed. `app_id` is the - // AppService id, and `window_id` is the wayland app_id property for the - // window. - void OnLacrosChromeAppWindowRemoved(const std::string& app_id, - const std::string& window_id); - void SetPrimaryProfilePath(const base::FilePath& profile_path); void SetActiveProfilePath(const base::FilePath& profile_path); @@ -239,8 +225,6 @@ std::unique_ptr<app_restore::ArcReadHandler> arc_read_handler_; - std::unique_ptr<app_restore::LacrosReadHandler> lacros_read_handler_; - // Records whether we need to check the restore data for the profile path. If // the profile path is recorded, we should check the restore data. Otherwise, // we don't need to check the restore data, because the restore process hasn't
diff --git a/components/app_restore/full_restore_utils.cc b/components/app_restore/full_restore_utils.cc index bb4a81a..9b0cc55 100644 --- a/components/app_restore/full_restore_utils.cc +++ b/components/app_restore/full_restore_utils.cc
@@ -62,8 +62,6 @@ if (!full_restore::features::IsFullRestoreForLacrosEnabled()) return; - FullRestoreReadHandler::GetInstance()->OnLacrosChromeAppWindowAdded( - app_id, window_id); FullRestoreSaveHandler::GetInstance()->OnLacrosChromeAppWindowAdded( app_id, window_id); } @@ -73,8 +71,6 @@ if (!full_restore::features::IsFullRestoreForLacrosEnabled()) return; - FullRestoreReadHandler::GetInstance()->OnLacrosChromeAppWindowRemoved( - app_id, window_id); FullRestoreSaveHandler::GetInstance()->OnLacrosChromeAppWindowRemoved( app_id, window_id); }
diff --git a/components/app_restore/lacros_read_handler.cc b/components/app_restore/lacros_read_handler.cc deleted file mode 100644 index ba4391a..0000000 --- a/components/app_restore/lacros_read_handler.cc +++ /dev/null
@@ -1,161 +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. - -#include "components/app_restore/lacros_read_handler.h" - -#include "ash/constants/app_types.h" -#include "base/ranges/algorithm.h" -#include "components/app_restore/app_restore_info.h" -#include "components/app_restore/app_restore_utils.h" -#include "components/app_restore/full_restore_read_handler.h" -#include "components/app_restore/window_info.h" -#include "components/app_restore/window_properties.h" -#include "components/sessions/core/session_id.h" -#include "ui/aura/client/aura_constants.h" -#include "ui/aura/window.h" - -namespace app_restore { - -LacrosReadHandler::LacrosReadHandler(const base::FilePath& profile_path) - : profile_path_(profile_path) {} - -LacrosReadHandler::~LacrosReadHandler() = default; - -void LacrosReadHandler::OnWindowInitialized(aura::Window* window) { - // TODO(sophiewen): Test this in full_restore_read_and_save_unittest. - if (!IsLacrosWindow(window)) - return; - - int32_t restored_browser_session_id = - window->GetProperty(app_restore::kRestoreWindowIdKey); - - auto it = window_to_window_data_.find(window); - if (it != window_to_window_data_.end() && - it->second.restore_window_id == restored_browser_session_id) { - // `window` has been restored. - return; - } - - window_to_window_data_[window].restore_window_id = - restored_browser_session_id; - - // If there is a restore data, set the app id to restore `window`. - auto restore_it = - restore_window_id_to_app_id_.find(restored_browser_session_id); - if (restore_it != restore_window_id_to_app_id_.end()) - window_to_window_data_[window].app_id = restore_it->second; - - // If `window` is added to a hidden container, call UpdateWindow to restore - // and remove `window` from the hidden container. - if (base::Contains(window_candidates_, window)) - UpdateWindow(window); -} - -void LacrosReadHandler::AddRestoreData(const std::string& app_id, - int32_t window_id) { - restore_window_id_to_app_id_[window_id] = app_id; -} - -void LacrosReadHandler::OnAppWindowAdded(const std::string& app_id, - const std::string& lacros_window_id) { - lacros_window_id_to_app_id_[lacros_window_id] = app_id; - - auto window_it = base::ranges::find( - window_candidates_, lacros_window_id, - [](aura::Window* window) { return GetLacrosWindowId(window); }); - if (window_it == window_candidates_.end()) - return; - - SetWindowData( - *window_it, app_id, - full_restore::FullRestoreReadHandler::GetInstance()->FetchRestoreWindowId( - app_id)); - UpdateWindow(*window_it); -} - -void LacrosReadHandler::OnAppWindowRemoved( - const std::string& app_id, - const std::string& lacros_window_id) { - lacros_window_id_to_app_id_.erase(lacros_window_id); -} - -void LacrosReadHandler::OnWindowAddedToRootWindow(aura::Window* window) { - if (!window->GetProperty(app_restore::kParentToHiddenContainerKey)) { - // If `window` has been removed from the hidden container, we don't need to - // restore it, because it has been restored. - return; - } - - auto window_it = window_to_window_data_.find(window); - if (window_it != window_to_window_data_.end()) { - // We have received the restore window, so restore and remove `window` from - // the hidden container. - UpdateWindow(window); - return; - } - - const auto lacros_window_id = GetLacrosWindowId(window); - auto it = lacros_window_id_to_app_id_.find(lacros_window_id); - if (it != lacros_window_id_to_app_id_.end()) { - // We have received the app id for the Chrome app window, so restore and - // remove `window` from the hidden container. - SetWindowData(window, it->second, - full_restore::FullRestoreReadHandler::GetInstance() - ->FetchRestoreWindowId(it->second)); - UpdateWindow(window); - return; - } - - // We haven't received the restore window id, add `window` to - // `window_candidates_` to wait for the restore window id. - window_candidates_.insert(window); -} - -void LacrosReadHandler::OnWindowDestroyed(aura::Window* window) { - window_candidates_.erase(window); - window_to_window_data_.erase(window); -} - -int32_t LacrosReadHandler::GetLacrosRestoreWindowId( - const std::string& lacros_window_id) const { - auto it = lacros_window_id_to_app_id_.find(lacros_window_id); - // Set restore window id as 0 to prevent the window is added to the hidden - // container. Windows restoration will be done by exo with another method. - return it == lacros_window_id_to_app_id_.end() - ? 0 - : full_restore::FullRestoreReadHandler::GetInstance() - ->FetchRestoreWindowId(it->second); -} - -void LacrosReadHandler::SetWindowData(aura::Window* const window, - const std::string& app_id, - int32_t restore_window_id) { - if (base::Contains(restore_window_id_to_app_id_, restore_window_id)) - window_to_window_data_[window].app_id = app_id; - window_to_window_data_[window].restore_window_id = restore_window_id; -} - -void LacrosReadHandler::UpdateWindow(aura::Window* const window) { - auto it = window_to_window_data_.find(window); - if (it != window_to_window_data_.end() && !it->second.app_id.empty()) { - // `window` is restored, so set the window property `kRestoreWindowIdKey` - // and `kWindowInfoKey` to restore `window`. - window->SetProperty(kRestoreWindowIdKey, it->second.restore_window_id); - auto window_info = - full_restore::FullRestoreReadHandler::GetInstance()->GetWindowInfo( - profile_path_, it->second.app_id, it->second.restore_window_id); - if (window_info) - ApplyProperties(window_info.get(), window); - - restore_window_id_to_app_id_.erase(it->second.restore_window_id); - } - - // Remove the window from the hidden container. - app_restore::AppRestoreInfo::GetInstance()->OnParentWindowToValidContainer( - window); - - window_candidates_.erase(window); -} - -} // namespace app_restore
diff --git a/components/app_restore/lacros_read_handler.h b/components/app_restore/lacros_read_handler.h deleted file mode 100644 index dc728e0..0000000 --- a/components/app_restore/lacros_read_handler.h +++ /dev/null
@@ -1,120 +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 COMPONENTS_APP_RESTORE_LACROS_READ_HANDLER_H_ -#define COMPONENTS_APP_RESTORE_LACROS_READ_HANDLER_H_ - -#include <map> -#include <set> - -#include "base/component_export.h" -#include "base/files/file_path.h" - -namespace aura { -class Window; -} - -namespace app_restore { - -// LacrosSaveHandler is a helper class for FullRestoreReadHandler to restore -// Lacros windows. -// -// For Lacros browser window, the restored browser session id is used as the -// restore window id. So only when the restored browser session id is received -// via mojom calls, the window can be restored. OnLacrosBrowserWindowAdded is -// called when both `window` is initialized, and the restored browser session id -// is received. So there could be 2 scenarios: -// -// 1. `window` is initialized first, then `window` is added to the hidden -// container, and OnWindowAddedToRootWindow is called to save `window` in -// `window_candidates_` to wait for the restored browser session id. When -// OnLacrosBrowserWindowAdded is called, call UpdateWindow to apply the restore -// window properties, and remove `window` from the hidden container. -// -// 2. The restored browser session id is received first, then -// OnLacrosBrowserWindowAdded is called when `window` is initialized. We have to -// wait for the OnWindowAddedToRootWindow callback, because `window`'s root is -// not set yet in the OnWindowInitialized/OnLacrosBrowserWindowAdded callback, -// and we can't remove `window` from the hidden container. When -// OnWindowAddedToRootWindow is called, `window` can be restored and removed -// from the hidden container. -// -// TODO(crbug.com/1239984): Restore Lacros windows. -class COMPONENT_EXPORT(APP_RESTORE) LacrosReadHandler { - public: - LacrosReadHandler(const base::FilePath& profile_path); - LacrosReadHandler(const LacrosReadHandler&) = delete; - LacrosReadHandler& operator=(const LacrosReadHandler&) = delete; - ~LacrosReadHandler(); - - // Invoked when `window` is initialized. - void OnWindowInitialized(aura::Window* window); - - // Sets `app_id` and `window_id` to `restore_window_id_to_app_id_` to record - // that there is a restore data for `app_id` and `window_id`. - void AddRestoreData(const std::string& app_id, int32_t window_id); - - // Invoked when an Chrome app Lacros window is created. `app_id` is the - // AppService id, and `window_id` is the wayland app_id property for the - // window. - void OnAppWindowAdded(const std::string& app_id, - const std::string& lacros_window_id); - - // Invoked when an Chrome app Lacros window is removed. `app_id` is the - // AppService id, and `window_id` is the wayland app_id property for the - // window. - void OnAppWindowRemoved(const std::string& app_id, - const std::string& lacros_window_id); - - // Invoked when `window` is added to the root window. - void OnWindowAddedToRootWindow(aura::Window* window); - - // Invoked when `window` is destroyed. - void OnWindowDestroyed(aura::Window* window); - - // Returns the restore window id for the Lacros window with - // `lacros_window_id`. - int32_t GetLacrosRestoreWindowId(const std::string& lacros_window_id) const; - - private: - struct WindowData { - std::string app_id; - int32_t restore_window_id = -1; - }; - - // Sets `app_id` and `restore_window_id` for `window` in - // `window_to_window_data_`. If there is no restore data for - // `restore_window_id`, `app_id` won't be set to skip setting the restore data - // for `window`. - void SetWindowData(aura::Window* const window, - const std::string& app_id, - int32_t restore_window_id); - - // Sets `kRestoreWindowIdKey` and `kWindowInfoKey` to restore and remove - // `window from the hidden container`. - void UpdateWindow(aura::Window* const window); - - // The user profile path for Lacros windows. - base::FilePath profile_path_; - - // The map from the restore window id to the app id for Lacros windows. - std::map<int32_t, std::string> restore_window_id_to_app_id_; - - // The map from the window to the app id and the restore window id. - std::map<aura::Window*, WindowData> window_to_window_data_; - - // The mojom call to forward the restore window id could be received later - // than the OnWindowAddedToRootWindow callback. So add windows to - // `window_candidates_` to record window candidates. Once the restore window - // id is received, the window can be restored and removed from the hidden - // container. - std::set<aura::Window*> window_candidates_; - - // The map from the lacros window id to the app id for Chrome app windows. - std::map<std::string, std::string> lacros_window_id_to_app_id_; -}; - -} // namespace app_restore - -#endif // COMPONENTS_APP_RESTORE_LACROS_READ_HANDLER_H_
diff --git a/components/bookmarks/browser/bookmark_utils.cc b/components/bookmarks/browser/bookmark_utils.cc index dd1568a48..b08cbb0b 100644 --- a/components/bookmarks/browser/bookmark_utils.cc +++ b/components/bookmarks/browser/bookmark_utils.cc
@@ -116,12 +116,15 @@ return HasSelectedAncestor(model, selected_nodes, node->parent()); } -const BookmarkNode* GetNodeByID(const BookmarkNode* node, int64_t id) { - if (node->id() == id) +// Recursively searches for a node satisfying the functor |pred| . Returns +// nullptr if not found. +template <typename Predicate> +const BookmarkNode* FindNode(const BookmarkNode* node, Predicate pred) { + if (pred(node)) return node; for (const auto& child : node->children()) { - const BookmarkNode* result = GetNodeByID(child.get(), id); + const BookmarkNode* result = FindNode(child.get(), pred); if (result) return result; } @@ -558,8 +561,15 @@ const BookmarkNode* GetBookmarkNodeByID(const BookmarkModel* model, int64_t id) { - // TODO(sky): TreeNode needs a method that visits all nodes using a predicate. - return GetNodeByID(model->root_node(), id); + return FindNode(model->root_node(), + [id](const BookmarkNode* node) { return node->id() == id; }); +} + +const BookmarkNode* GetBookmarkNodeByGUID(const BookmarkModel* model, + const base::GUID& guid) { + return FindNode(model->root_node(), [&guid](const BookmarkNode* node) { + return node->guid() == guid; + }); } bool IsDescendantOf(const BookmarkNode* node, const BookmarkNode* root) {
diff --git a/components/bookmarks/browser/bookmark_utils.h b/components/bookmarks/browser/bookmark_utils.h index 0ef752f..39c3c24d 100644 --- a/components/bookmarks/browser/bookmark_utils.h +++ b/components/bookmarks/browser/bookmark_utils.h
@@ -179,6 +179,10 @@ // Returns the node with |id|, or NULL if there is no node with |id|. const BookmarkNode* GetBookmarkNodeByID(const BookmarkModel* model, int64_t id); +// Returns the node with |guid|, or NULL if there is no node with |guid|. +const BookmarkNode* GetBookmarkNodeByGUID(const BookmarkModel* model, + const base::GUID& guid); + // Returns true if |node| is a descendant of |root|. bool IsDescendantOf(const BookmarkNode* node, const BookmarkNode* root);
diff --git a/components/bookmarks/common/android/BUILD.gn b/components/bookmarks/common/android/BUILD.gn index 5220e08..3111146c 100644 --- a/components/bookmarks/common/android/BUILD.gn +++ b/components/bookmarks/common/android/BUILD.gn
@@ -19,10 +19,15 @@ android_library("bookmarks_java") { deps = [ "//base:jni_java", + "//components/url_formatter/android:url_formatter_java", "//third_party/androidx:androidx_annotation_annotation_java", + "//url:gurl_java", ] srcjar_deps = [ ":bookmark_type_javagen" ] - sources = [ "java/src/org/chromium/components/bookmarks/BookmarkId.java" ] + sources = [ + "java/src/org/chromium/components/bookmarks/BookmarkId.java", + "java/src/org/chromium/components/bookmarks/BookmarkItem.java", + ] } generate_jni("bookmarks_jni_headers") {
diff --git a/components/bookmarks/common/android/java/src/org/chromium/components/bookmarks/BookmarkItem.java b/components/bookmarks/common/android/java/src/org/chromium/components/bookmarks/BookmarkItem.java new file mode 100644 index 0000000..5ffe67b39 --- /dev/null +++ b/components/bookmarks/common/android/java/src/org/chromium/components/bookmarks/BookmarkItem.java
@@ -0,0 +1,111 @@ +// 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. + +package org.chromium.components.bookmarks; + +import androidx.annotation.VisibleForTesting; + +import org.chromium.components.url_formatter.SchemeDisplay; +import org.chromium.components.url_formatter.UrlFormatter; +import org.chromium.url.GURL; + +/** + * Contains data about a bookmark or bookmark folder. + */ +public class BookmarkItem { + private final String mTitle; + private final GURL mUrl; + private final BookmarkId mId; + private final boolean mIsFolder; + private final BookmarkId mParentId; + private final boolean mIsEditable; + private final boolean mIsManaged; + private final long mDateAdded; + private final boolean mRead; + private boolean mForceEditableForTesting; + + public BookmarkItem(BookmarkId id, String title, GURL url, boolean isFolder, + BookmarkId parentId, boolean isEditable, boolean isManaged, long dateAdded, + boolean read) { + mId = id; + mTitle = title; + mUrl = url; + mIsFolder = isFolder; + mParentId = parentId; + mIsEditable = isEditable; + mIsManaged = isManaged; + mDateAdded = dateAdded; + mRead = read; + } + + /** Returns the title of the bookmark item. */ + public String getTitle() { + return mTitle; + } + + /** Returns the url of the bookmark item. */ + public GURL getUrl() { + return mUrl; + } + + /** Returns the string to display for the item's url. */ + public String getUrlForDisplay() { + return UrlFormatter.formatUrlForSecurityDisplay( + getUrl(), SchemeDisplay.OMIT_HTTP_AND_HTTPS); + } + + /** Returns whether item is a folder or a bookmark. */ + public boolean isFolder() { + return mIsFolder; + } + + /** Returns the parent id of the bookmark item. */ + public BookmarkId getParentId() { + return mParentId; + } + + /** Returns whether this bookmark can be edited. */ + public boolean isEditable() { + return mForceEditableForTesting || mIsEditable; + } + + /** Returns whether this bookmark's URL can be edited */ + public boolean isUrlEditable() { + return isEditable() && mId.getType() == BookmarkType.NORMAL; + } + + /** Returns whether this bookmark can be moved */ + public boolean isReorderable() { + return isEditable() && mId.getType() == BookmarkType.NORMAL; + } + + /** Returns whether this is a managed bookmark. */ + public boolean isManaged() { + return mIsManaged; + } + + /** Returns the {@link BookmarkId}. */ + public BookmarkId getId() { + return mId; + } + + /** Returns the timestamp in milliseconds since epoch that the bookmark is added. */ + public long getDateAdded() { + return mDateAdded; + } + + /** + * Returns whether the bookmark is read. Only valid for {@link BookmarkType#READING_LIST}. + * Defaults to "false" for other types. + */ + public boolean isRead() { + return mRead; + } + + // TODO(https://crbug.com/1019217): Remove when BookmarkModel is stubbed in tests instead. + @VisibleForTesting + public void forceEditableForTesting() { + mForceEditableForTesting = true; + } +}
diff --git a/components/commerce/core/subscriptions/subscriptions_manager.cc b/components/commerce/core/subscriptions/subscriptions_manager.cc index 30b3ed1..3afd701a 100644 --- a/components/commerce/core/subscriptions/subscriptions_manager.cc +++ b/components/commerce/core/subscriptions/subscriptions_manager.cc
@@ -3,6 +3,7 @@ // found in the LICENSE file. #include "components/commerce/core/subscriptions/subscriptions_manager.h" +#include "base/metrics/histogram_functions.h" #include "components/commerce/core/commerce_feature_list.h" #include "components/commerce/core/subscriptions/commerce_subscription.h" #include "components/commerce/core/subscriptions/subscriptions_server_proxy.h" @@ -51,7 +52,7 @@ SubscriptionsManager::Request::Request(SubscriptionType type, AsyncOperation operation, - base::OnceCallback<void(bool)> callback) + SubscriptionsRequestCallback callback) : type(type), operation(operation), callback(std::move(callback)) { CHECK(operation == AsyncOperation::kInit); } @@ -59,7 +60,7 @@ SubscriptionType type, AsyncOperation operation, std::unique_ptr<std::vector<CommerceSubscription>> subscriptions, - base::OnceCallback<void(bool)> callback) + SubscriptionsRequestCallback callback) : type(type), operation(operation), subscriptions(std::move(subscriptions)), @@ -74,15 +75,19 @@ std::unique_ptr<std::vector<CommerceSubscription>> subscriptions, base::OnceCallback<void(bool)> callback) { SubscriptionType type = (*subscriptions)[0].type; - pending_requests_.push( - Request(type, AsyncOperation::kSubscribe, std::move(subscriptions), - base::BindOnce( - [](base::WeakPtr<SubscriptionsManager> manager, - base::OnceCallback<void(bool)> callback, bool result) { - std::move(callback).Run(result); - manager->OnRequestCompletion(); - }, - weak_ptr_factory_.GetWeakPtr(), std::move(callback)))); + pending_requests_.emplace( + type, AsyncOperation::kSubscribe, std::move(subscriptions), + base::BindOnce( + [](base::WeakPtr<SubscriptionsManager> manager, + base::OnceCallback<void(bool)> callback, + SubscriptionsRequestStatus result) { + base::UmaHistogramEnumeration("Commerce.Subscriptions.TrackResult", + result); + std::move(callback).Run(result == + SubscriptionsRequestStatus::kSuccess); + manager->OnRequestCompletion(); + }, + weak_ptr_factory_.GetWeakPtr(), std::move(callback))); CheckAndProcessRequest(); } @@ -90,15 +95,19 @@ std::unique_ptr<std::vector<CommerceSubscription>> subscriptions, base::OnceCallback<void(bool)> callback) { SubscriptionType type = (*subscriptions)[0].type; - pending_requests_.push( - Request(type, AsyncOperation::kUnsubscribe, std::move(subscriptions), - base::BindOnce( - [](base::WeakPtr<SubscriptionsManager> manager, - base::OnceCallback<void(bool)> callback, bool result) { - std::move(callback).Run(result); - manager->OnRequestCompletion(); - }, - weak_ptr_factory_.GetWeakPtr(), std::move(callback)))); + pending_requests_.emplace( + type, AsyncOperation::kUnsubscribe, std::move(subscriptions), + base::BindOnce( + [](base::WeakPtr<SubscriptionsManager> manager, + base::OnceCallback<void(bool)> callback, + SubscriptionsRequestStatus result) { + base::UmaHistogramEnumeration( + "Commerce.Subscriptions.UntrackResult", result); + std::move(callback).Run(result == + SubscriptionsRequestStatus::kSuccess); + manager->OnRequestCompletion(); + }, + weak_ptr_factory_.GetWeakPtr(), std::move(callback))); CheckAndProcessRequest(); } @@ -108,14 +117,16 @@ if (base::FeatureList::IsEnabled(commerce::kShoppingList) && account_checker_ && account_checker_->IsSignedIn() && account_checker_->IsAnonymizedUrlDataCollectionEnabled()) { - pending_requests_.push(Request( + pending_requests_.emplace( SubscriptionType::kPriceTrack, AsyncOperation::kInit, base::BindOnce( - [](base::WeakPtr<SubscriptionsManager> manager, bool result) { - manager->init_succeeded_ = result; + [](base::WeakPtr<SubscriptionsManager> manager, + SubscriptionsRequestStatus result) { + manager->init_succeeded_ = + result == SubscriptionsRequestStatus::kSuccess; manager->OnRequestCompletion(); }, - weak_ptr_factory_.GetWeakPtr()))); + weak_ptr_factory_.GetWeakPtr())); } CheckAndProcessRequest(); } @@ -156,14 +167,15 @@ void SubscriptionsManager::ProcessSubscribeRequest(Request request) { if (!init_succeeded_) { - std::move(request.callback).Run(false); + std::move(request.callback) + .Run(SubscriptionsRequestStatus::kLastSyncFailed); return; } storage_->GetUniqueNonExistingSubscriptions( std::move(request.subscriptions), base::BindOnce( [](base::WeakPtr<SubscriptionsManager> manager, SubscriptionType type, - base::OnceCallback<void(bool)> callback, + SubscriptionsRequestCallback callback, std::unique_ptr<std::vector<CommerceSubscription>> unique_subscriptions) { manager->server_proxy_->Create( @@ -178,14 +190,15 @@ void SubscriptionsManager::ProcessUnsubscribeRequest(Request request) { if (!init_succeeded_) { - std::move(request.callback).Run(false); + std::move(request.callback) + .Run(SubscriptionsRequestStatus::kLastSyncFailed); return; } storage_->GetUniqueExistingSubscriptions( std::move(request.subscriptions), base::BindOnce( [](base::WeakPtr<SubscriptionsManager> manager, SubscriptionType type, - base::OnceCallback<void(bool)> callback, + SubscriptionsRequestCallback callback, std::unique_ptr<std::vector<CommerceSubscription>> unique_subscriptions) { manager->server_proxy_->Delete( @@ -200,7 +213,7 @@ void SubscriptionsManager::GetRemoteSubscriptionsAndUpdateStorage( SubscriptionType type, - base::OnceCallback<void(bool)> callback) { + SubscriptionsRequestCallback callback) { server_proxy_->Get( type, base::BindOnce( &SubscriptionsManager::HandleGetSubscriptionsResponse, @@ -209,11 +222,11 @@ void SubscriptionsManager::HandleGetSubscriptionsResponse( SubscriptionType type, - base::OnceCallback<void(bool)> callback, - bool succeeded, + SubscriptionsRequestCallback callback, + SubscriptionsRequestStatus status, std::unique_ptr<std::vector<CommerceSubscription>> remote_subscriptions) { - if (!succeeded) { - std::move(callback).Run(false); + if (status != SubscriptionsRequestStatus::kSuccess) { + std::move(callback).Run(status); } else { storage_->UpdateStorage(type, std::move(callback), std::move(remote_subscriptions)); @@ -222,11 +235,11 @@ void SubscriptionsManager::HandleManageSubscriptionsResponse( SubscriptionType type, - base::OnceCallback<void(bool)> callback, - bool succeeded) { - if (!succeeded) { + SubscriptionsRequestCallback callback, + SubscriptionsRequestStatus status) { + if (status != SubscriptionsRequestStatus::kSuccess) { VLOG(1) << "Fail to create or delete subscriptions on server"; - std::move(callback).Run(false); + std::move(callback).Run(status); } else { GetRemoteSubscriptionsAndUpdateStorage(type, std::move(callback)); }
diff --git a/components/commerce/core/subscriptions/subscriptions_manager.h b/components/commerce/core/subscriptions/subscriptions_manager.h index a94a519e5..f92ad65 100644 --- a/components/commerce/core/subscriptions/subscriptions_manager.h +++ b/components/commerce/core/subscriptions/subscriptions_manager.h
@@ -30,6 +30,28 @@ enum class SubscriptionType; struct CommerceSubscription; +// Possible result status of a product (un)tracking request. This enum needs to +// match the values in enums.xml. +enum class SubscriptionsRequestStatus { + kSuccess = 0, + // Server failed to parse the request. + kServerParseError = 1, + // Server successfully parsed the request, but failed afterwards. + kServerInternalError = 2, + // Local storage failed to load, create, or delete subscriptions. + kStorageError = 3, + // If the last sync with server failed, we just drop this request. + kLastSyncFailed = 4, + // The passed in argument is invalid. + kInvalidArgument = 5, + + // This enum must be last and is only used for histograms. + kMaxValue = kInvalidArgument +}; + +using SubscriptionsRequestCallback = + base::OnceCallback<void(SubscriptionsRequestStatus)>; + class SubscriptionsManager : public signin::IdentityManager::Observer { public: SubscriptionsManager( @@ -83,11 +105,11 @@ struct Request { Request(SubscriptionType type, AsyncOperation operation, - base::OnceCallback<void(bool)> callback); + SubscriptionsRequestCallback callback); Request(SubscriptionType type, AsyncOperation operation, std::unique_ptr<std::vector<CommerceSubscription>> subscriptions, - base::OnceCallback<void(bool)> callback); + SubscriptionsRequestCallback callback); Request(const Request&) = delete; Request& operator=(const Request&) = delete; Request(Request&&); @@ -97,7 +119,7 @@ SubscriptionType type; AsyncOperation operation; std::unique_ptr<std::vector<CommerceSubscription>> subscriptions; - base::OnceCallback<void(bool)> callback; + SubscriptionsRequestCallback callback; }; // Fetch all backend subscriptions and sync with local storage. This should @@ -121,18 +143,17 @@ void GetRemoteSubscriptionsAndUpdateStorage( SubscriptionType type, - base::OnceCallback<void(bool)> callback); + SubscriptionsRequestCallback callback); void HandleGetSubscriptionsResponse( SubscriptionType type, - base::OnceCallback<void(bool)> callback, - bool succeeded, + SubscriptionsRequestCallback callback, + SubscriptionsRequestStatus status, std::unique_ptr<std::vector<CommerceSubscription>> remote_subscriptions); - void HandleManageSubscriptionsResponse( - SubscriptionType type, - base::OnceCallback<void(bool)> callback, - bool succeeded); + void HandleManageSubscriptionsResponse(SubscriptionType type, + SubscriptionsRequestCallback callback, + SubscriptionsRequestStatus status); void HandleCheckLocalSubscriptionResponse(bool should_exisit, bool is_subscribed);
diff --git a/components/commerce/core/subscriptions/subscriptions_manager_unittest.cc b/components/commerce/core/subscriptions/subscriptions_manager_unittest.cc index 3fcb367..4a2dd2a5 100644 --- a/components/commerce/core/subscriptions/subscriptions_manager_unittest.cc +++ b/components/commerce/core/subscriptions/subscriptions_manager_unittest.cc
@@ -87,14 +87,18 @@ [succeeded](std::unique_ptr<std::vector<CommerceSubscription>> subscriptions, ManageSubscriptionsFetcherCallback callback) { - std::move(callback).Run(succeeded); + std::move(callback).Run( + succeeded ? SubscriptionsRequestStatus::kSuccess + : SubscriptionsRequestStatus::kServerParseError); }); ON_CALL(*this, Delete) .WillByDefault( [succeeded](std::unique_ptr<std::vector<CommerceSubscription>> subscriptions, ManageSubscriptionsFetcherCallback callback) { - std::move(callback).Run(succeeded); + std::move(callback).Run( + succeeded ? SubscriptionsRequestStatus::kSuccess + : SubscriptionsRequestStatus::kServerParseError); }); } @@ -105,8 +109,10 @@ .WillByDefault([subscription_id, succeeded]( SubscriptionType type, GetSubscriptionsFetcherCallback callback) { - std::move(callback).Run(succeeded, - BuildSubscriptions(subscription_id)); + std::move(callback).Run( + succeeded ? SubscriptionsRequestStatus::kSuccess + : SubscriptionsRequestStatus::kServerParseError, + BuildSubscriptions(subscription_id)); }); } }; @@ -132,7 +138,7 @@ void, UpdateStorage, (SubscriptionType type, - base::OnceCallback<void(bool)> callback, + StorageOperationCallback callback, std::unique_ptr<std::vector<CommerceSubscription>> remote_subscriptions), (override)); MOCK_METHOD(void, DeleteAll, (), (override)); @@ -166,10 +172,12 @@ ON_CALL(*this, UpdateStorage) .WillByDefault( [succeeded](SubscriptionType type, - base::OnceCallback<void(bool)> callback, + StorageOperationCallback callback, std::unique_ptr<std::vector<CommerceSubscription>> remote_subscriptions) { - std::move(callback).Run(succeeded); + std::move(callback).Run( + succeeded ? SubscriptionsRequestStatus::kSuccess + : SubscriptionsRequestStatus::kStorageError); }); }
diff --git a/components/commerce/core/subscriptions/subscriptions_server_proxy.cc b/components/commerce/core/subscriptions/subscriptions_server_proxy.cc index fe70cdb..6d770af1 100644 --- a/components/commerce/core/subscriptions/subscriptions_server_proxy.cc +++ b/components/commerce/core/subscriptions/subscriptions_server_proxy.cc
@@ -76,7 +76,7 @@ std::unique_ptr<std::vector<CommerceSubscription>> subscriptions, ManageSubscriptionsFetcherCallback callback) { if (subscriptions->size() == 0) { - std::move(callback).Run(true); + std::move(callback).Run(SubscriptionsRequestStatus::kSuccess); return; } @@ -142,7 +142,7 @@ std::unique_ptr<std::vector<CommerceSubscription>> subscriptions, ManageSubscriptionsFetcherCallback callback) { if (subscriptions->size() == 0) { - std::move(callback).Run(true); + std::move(callback).Run(SubscriptionsRequestStatus::kSuccess); return; } @@ -211,7 +211,8 @@ } else { VLOG(1) << "Unsupported type for Get query"; std::move(callback).Run( - false, std::make_unique<std::vector<CommerceSubscription>>()); + SubscriptionsRequestStatus::kInvalidArgument, + std::make_unique<std::vector<CommerceSubscription>>()); return; } @@ -273,6 +274,11 @@ ManageSubscriptionsFetcherCallback callback, std::unique_ptr<EndpointFetcher> endpoint_fetcher, std::unique_ptr<EndpointResponse> responses) { + if (responses->http_status_code != net::HTTP_OK || responses->error_type) { + VLOG(1) << "Server failed to parse manage-subscriptions request"; + std::move(callback).Run(SubscriptionsRequestStatus::kServerParseError); + return; + } data_decoder::DataDecoder::ParseJsonIsolated( responses->response, base::BindOnce(&SubscriptionsServerProxy::OnManageSubscriptionsJsonParsed, @@ -285,15 +291,17 @@ if (result.has_value() && result->is_dict()) { if (auto* status_value = result->FindKey(kStatusKey)) { if (auto status_code = status_value->FindIntKey(kStatusCodeKey)) { - std::move(callback).Run(*status_code == kBackendCanonicalCodeSuccess); + std::move(callback).Run( + *status_code == kBackendCanonicalCodeSuccess + ? SubscriptionsRequestStatus::kSuccess + : SubscriptionsRequestStatus::kServerInternalError); return; } } } - // TODO(crbug.com/1348024): Record metrics for failed parse. VLOG(1) << "Fail to get status code from response"; - std::move(callback).Run(false); + std::move(callback).Run(SubscriptionsRequestStatus::kServerInternalError); } void SubscriptionsServerProxy::HandleGetSubscriptionsResponses( @@ -301,9 +309,10 @@ std::unique_ptr<EndpointFetcher> endpoint_fetcher, std::unique_ptr<EndpointResponse> responses) { if (responses->http_status_code != net::HTTP_OK || responses->error_type) { - VLOG(1) << "Fail to get subscriptions from server"; + VLOG(1) << "Server failed to parse get-subscriptions request"; std::move(callback).Run( - false, std::make_unique<std::vector<CommerceSubscription>>()); + SubscriptionsRequestStatus::kServerParseError, + std::make_unique<std::vector<CommerceSubscription>>()); return; } data_decoder::DataDecoder::ParseJsonIsolated( @@ -324,13 +333,15 @@ if (auto subscription = Deserialize(subscription_json)) subscriptions->push_back(*subscription); } - std::move(callback).Run(true, std::move(subscriptions)); + std::move(callback).Run(SubscriptionsRequestStatus::kSuccess, + std::move(subscriptions)); return; } } VLOG(1) << "User has no subscriptions"; - std::move(callback).Run(true, std::move(subscriptions)); + std::move(callback).Run(SubscriptionsRequestStatus::kSuccess, + std::move(subscriptions)); } base::Value SubscriptionsServerProxy::Serialize(
diff --git a/components/commerce/core/subscriptions/subscriptions_server_proxy.h b/components/commerce/core/subscriptions/subscriptions_server_proxy.h index 56e8901..2681a9bd 100644 --- a/components/commerce/core/subscriptions/subscriptions_server_proxy.h +++ b/components/commerce/core/subscriptions/subscriptions_server_proxy.h
@@ -12,6 +12,7 @@ #include "base/callback.h" #include "base/check.h" #include "base/values.h" +#include "components/commerce/core/subscriptions/subscriptions_manager.h" #include "net/traffic_annotation/network_traffic_annotation.h" #include "services/data_decoder/public/cpp/data_decoder.h" @@ -31,9 +32,11 @@ enum class SubscriptionType; struct CommerceSubscription; -using ManageSubscriptionsFetcherCallback = base::OnceCallback<void(bool)>; -using GetSubscriptionsFetcherCallback = base::OnceCallback< - void(bool, std::unique_ptr<std::vector<CommerceSubscription>>)>; +using ManageSubscriptionsFetcherCallback = + base::OnceCallback<void(SubscriptionsRequestStatus)>; +using GetSubscriptionsFetcherCallback = base::OnceCallback<void( + SubscriptionsRequestStatus, + std::unique_ptr<std::vector<CommerceSubscription>>)>; class SubscriptionsServerProxy { public:
diff --git a/components/commerce/core/subscriptions/subscriptions_server_proxy_unittest.cc b/components/commerce/core/subscriptions/subscriptions_server_proxy_unittest.cc index 8c95cbf..1705674 100644 --- a/components/commerce/core/subscriptions/subscriptions_server_proxy_unittest.cc +++ b/components/commerce/core/subscriptions/subscriptions_server_proxy_unittest.cc
@@ -183,13 +183,14 @@ .Times(1); base::RunLoop run_loop; - server_proxy_->Create(BuildValidSubscriptions(), - base::BindOnce( - [](base::RunLoop* run_loop, bool succeeded) { - ASSERT_EQ(true, succeeded); - run_loop->Quit(); - }, - &run_loop)); + server_proxy_->Create( + BuildValidSubscriptions(), + base::BindOnce( + [](base::RunLoop* run_loop, SubscriptionsRequestStatus status) { + ASSERT_EQ(SubscriptionsRequestStatus::kSuccess, status); + run_loop->Quit(); + }, + &run_loop)); run_loop.Run(); } @@ -198,13 +199,14 @@ EXPECT_CALL(*server_proxy_, CreateEndpointFetcher).Times(0); base::RunLoop run_loop; - server_proxy_->Create(BuildEmptySubscriptions(), - base::BindOnce( - [](base::RunLoop* run_loop, bool succeeded) { - ASSERT_EQ(true, succeeded); - run_loop->Quit(); - }, - &run_loop)); + server_proxy_->Create( + BuildEmptySubscriptions(), + base::BindOnce( + [](base::RunLoop* run_loop, SubscriptionsRequestStatus status) { + ASSERT_EQ(SubscriptionsRequestStatus::kSuccess, status); + run_loop->Quit(); + }, + &run_loop)); run_loop.Run(); } @@ -216,13 +218,52 @@ .Times(1); base::RunLoop run_loop; - server_proxy_->Create(BuildValidSubscriptions(), - base::BindOnce( - [](base::RunLoop* run_loop, bool succeeded) { - ASSERT_EQ(false, succeeded); - run_loop->Quit(); - }, - &run_loop)); + server_proxy_->Create( + BuildValidSubscriptions(), + base::BindOnce( + [](base::RunLoop* run_loop, SubscriptionsRequestStatus status) { + ASSERT_EQ(SubscriptionsRequestStatus::kServerInternalError, status); + run_loop->Quit(); + }, + &run_loop)); + run_loop.Run(); +} + +TEST_F(SubscriptionsServerProxyTest, TestCreate_WrongHttpCode) { + fetcher_->MockFetchResponse(kResponseSucceeded, net::HTTP_NOT_FOUND); + EXPECT_CALL(*server_proxy_, + CreateEndpointFetcher(GURL(kServiceUrl), kPostHttpMethod, + kExpectedPostDataForCreate, _)) + .Times(1); + + base::RunLoop run_loop; + server_proxy_->Create( + BuildValidSubscriptions(), + base::BindOnce( + [](base::RunLoop* run_loop, SubscriptionsRequestStatus status) { + ASSERT_EQ(SubscriptionsRequestStatus::kServerParseError, status); + run_loop->Quit(); + }, + &run_loop)); + run_loop.Run(); +} + +TEST_F(SubscriptionsServerProxyTest, TestCreate_EmptyResponse) { + fetcher_->MockFetchResponse(""); + EXPECT_CALL(*server_proxy_, + CreateEndpointFetcher(GURL(kServiceUrl), kPostHttpMethod, + kExpectedPostDataForCreate, _)) + .Times(1); + + base::RunLoop run_loop; + server_proxy_->Create( + BuildValidSubscriptions(), + base::BindOnce( + [](base::RunLoop* run_loop, SubscriptionsRequestStatus status) { + ASSERT_EQ(SubscriptionsRequestStatus::kServerInternalError, status); + run_loop->Quit(); + }, + &run_loop)); run_loop.Run(); } @@ -234,13 +275,14 @@ .Times(1); base::RunLoop run_loop; - server_proxy_->Delete(BuildValidSubscriptions(), - base::BindOnce( - [](base::RunLoop* run_loop, bool succeeded) { - ASSERT_EQ(true, succeeded); - run_loop->Quit(); - }, - &run_loop)); + server_proxy_->Delete( + BuildValidSubscriptions(), + base::BindOnce( + [](base::RunLoop* run_loop, SubscriptionsRequestStatus status) { + ASSERT_EQ(SubscriptionsRequestStatus::kSuccess, status); + run_loop->Quit(); + }, + &run_loop)); run_loop.Run(); } @@ -249,13 +291,14 @@ EXPECT_CALL(*server_proxy_, CreateEndpointFetcher).Times(0); base::RunLoop run_loop; - server_proxy_->Delete(BuildEmptySubscriptions(), - base::BindOnce( - [](base::RunLoop* run_loop, bool succeeded) { - ASSERT_EQ(true, succeeded); - run_loop->Quit(); - }, - &run_loop)); + server_proxy_->Delete( + BuildEmptySubscriptions(), + base::BindOnce( + [](base::RunLoop* run_loop, SubscriptionsRequestStatus status) { + ASSERT_EQ(SubscriptionsRequestStatus::kSuccess, status); + run_loop->Quit(); + }, + &run_loop)); run_loop.Run(); } @@ -267,13 +310,14 @@ .Times(1); base::RunLoop run_loop; - server_proxy_->Delete(BuildValidSubscriptions(), - base::BindOnce( - [](base::RunLoop* run_loop, bool succeeded) { - ASSERT_EQ(false, succeeded); - run_loop->Quit(); - }, - &run_loop)); + server_proxy_->Delete( + BuildValidSubscriptions(), + base::BindOnce( + [](base::RunLoop* run_loop, SubscriptionsRequestStatus status) { + ASSERT_EQ(SubscriptionsRequestStatus::kServerInternalError, status); + run_loop->Quit(); + }, + &run_loop)); run_loop.Run(); } @@ -288,9 +332,9 @@ server_proxy_->Get( SubscriptionType::kPriceTrack, base::BindOnce( - [](base::RunLoop* run_loop, bool succeeded, + [](base::RunLoop* run_loop, SubscriptionsRequestStatus status, std::unique_ptr<std::vector<CommerceSubscription>> subscriptions) { - ASSERT_EQ(true, succeeded); + ASSERT_EQ(SubscriptionsRequestStatus::kSuccess, status); ASSERT_EQ(1, static_cast<int>(subscriptions->size())); auto subscription = (*subscriptions)[0]; ASSERT_EQ(SubscriptionType::kPriceTrack, subscription.type); @@ -314,9 +358,9 @@ server_proxy_->Get( SubscriptionType::kTypeUnspecified, base::BindOnce( - [](base::RunLoop* run_loop, bool succeeded, + [](base::RunLoop* run_loop, SubscriptionsRequestStatus status, std::unique_ptr<std::vector<CommerceSubscription>> subscriptions) { - ASSERT_EQ(false, succeeded); + ASSERT_EQ(SubscriptionsRequestStatus::kInvalidArgument, status); ASSERT_EQ(0, static_cast<int>(subscriptions->size())); run_loop->Quit(); }, @@ -335,9 +379,9 @@ server_proxy_->Get( SubscriptionType::kPriceTrack, base::BindOnce( - [](base::RunLoop* run_loop, bool succeeded, + [](base::RunLoop* run_loop, SubscriptionsRequestStatus status, std::unique_ptr<std::vector<CommerceSubscription>> subscriptions) { - ASSERT_EQ(false, succeeded); + ASSERT_EQ(SubscriptionsRequestStatus::kServerParseError, status); ASSERT_EQ(0, static_cast<int>(subscriptions->size())); run_loop->Quit(); }, @@ -358,9 +402,9 @@ server_proxy_->Get( SubscriptionType::kPriceTrack, base::BindOnce( - [](base::RunLoop* run_loop, bool succeeded, + [](base::RunLoop* run_loop, SubscriptionsRequestStatus status, std::unique_ptr<std::vector<CommerceSubscription>> subscriptions) { - ASSERT_EQ(false, succeeded); + ASSERT_EQ(SubscriptionsRequestStatus::kServerParseError, status); ASSERT_EQ(0, static_cast<int>(subscriptions->size())); run_loop->Quit(); }, @@ -379,9 +423,9 @@ server_proxy_->Get( SubscriptionType::kPriceTrack, base::BindOnce( - [](base::RunLoop* run_loop, bool succeeded, + [](base::RunLoop* run_loop, SubscriptionsRequestStatus status, std::unique_ptr<std::vector<CommerceSubscription>> subscriptions) { - ASSERT_EQ(true, succeeded); + ASSERT_EQ(SubscriptionsRequestStatus::kSuccess, status); ASSERT_EQ(0, static_cast<int>(subscriptions->size())); run_loop->Quit(); },
diff --git a/components/commerce/core/subscriptions/subscriptions_storage.cc b/components/commerce/core/subscriptions/subscriptions_storage.cc index 7fce960..d8517e47 100644 --- a/components/commerce/core/subscriptions/subscriptions_storage.cc +++ b/components/commerce/core/subscriptions/subscriptions_storage.cc
@@ -46,7 +46,7 @@ void SubscriptionsStorage::UpdateStorage( SubscriptionType type, - base::OnceCallback<void(bool)> callback, + StorageOperationCallback callback, std::unique_ptr<std::vector<CommerceSubscription>> remote_subscriptions) { LoadAllSubscriptionsForType( type, base::BindOnce(&SubscriptionsStorage::PerformUpdateStorage, @@ -68,8 +68,9 @@ subscription.id; } -void SubscriptionsStorage::SaveSubscription(CommerceSubscription subscription, - StorageOperationCallback callback) { +void SubscriptionsStorage::SaveSubscription( + CommerceSubscription subscription, + base::OnceCallback<void(bool)> callback) { // Get proto types from the object. SubscriptionTypeProto subscription_type = commerce_subscription_db:: CommerceSubscriptionContentProto_SubscriptionType_TYPE_UNSPECIFIED; @@ -112,7 +113,7 @@ void SubscriptionsStorage::DeleteSubscription( CommerceSubscription subscription, - StorageOperationCallback callback) { + base::OnceCallback<void(bool)> callback) { proto_db_->DeleteOneEntry(GetSubscriptionKey(subscription), std::move(callback)); } @@ -223,7 +224,9 @@ &all_succeeded)); } } - std::move(callback).Run(all_succeeded); + std::move(callback).Run(all_succeeded + ? SubscriptionsRequestStatus::kSuccess + : SubscriptionsRequestStatus::kStorageError); } void SubscriptionsStorage::IsSubscribed(
diff --git a/components/commerce/core/subscriptions/subscriptions_storage.h b/components/commerce/core/subscriptions/subscriptions_storage.h index 16b3c169..632b51f 100644 --- a/components/commerce/core/subscriptions/subscriptions_storage.h +++ b/components/commerce/core/subscriptions/subscriptions_storage.h
@@ -12,6 +12,7 @@ #include "base/callback.h" #include "base/check.h" #include "components/commerce/core/proto/commerce_subscription_db_content.pb.h" +#include "components/commerce/core/subscriptions/subscriptions_manager.h" #include "components/session_proto_db/session_proto_storage.h" namespace commerce { @@ -23,7 +24,8 @@ using GetLocalSubscriptionsCallback = base::OnceCallback<void( std::unique_ptr<std::vector<CommerceSubscription>>)>; // Used to handle if storage-related operation succeeds. -using StorageOperationCallback = base::OnceCallback<void(bool)>; +using StorageOperationCallback = + base::OnceCallback<void(SubscriptionsRequestStatus)>; using CommerceSubscriptionProto = commerce_subscription_db::CommerceSubscriptionContentProto; @@ -76,10 +78,10 @@ std::string GetSubscriptionKey(const CommerceSubscription& subscription); void SaveSubscription(CommerceSubscription subscription, - StorageOperationCallback callback); + base::OnceCallback<void(bool)> callback); void DeleteSubscription(CommerceSubscription subscription, - StorageOperationCallback callback); + base::OnceCallback<void(bool)> callback); void LoadAllSubscriptionsForType(SubscriptionType type, GetLocalSubscriptionsCallback callback);
diff --git a/components/commerce/core/subscriptions/subscriptions_storage_unittest.cc b/components/commerce/core/subscriptions/subscriptions_storage_unittest.cc index 01ec499..b0774323 100644 --- a/components/commerce/core/subscriptions/subscriptions_storage_unittest.cc +++ b/components/commerce/core/subscriptions/subscriptions_storage_unittest.cc
@@ -298,14 +298,15 @@ } base::RunLoop run_loop; - storage_->UpdateStorage(SubscriptionType::kPriceTrack, - base::BindOnce( - [](base::RunLoop* run_loop, bool succeeded) { - ASSERT_EQ(true, succeeded); - run_loop->Quit(); - }, - &run_loop), - MockRemoteSubscriptions()); + storage_->UpdateStorage( + SubscriptionType::kPriceTrack, + base::BindOnce( + [](base::RunLoop* run_loop, SubscriptionsRequestStatus status) { + ASSERT_EQ(SubscriptionsRequestStatus::kSuccess, status); + run_loop->Quit(); + }, + &run_loop), + MockRemoteSubscriptions()); run_loop.Run(); } @@ -322,14 +323,15 @@ } base::RunLoop run_loop; - storage_->UpdateStorage(SubscriptionType::kPriceTrack, - base::BindOnce( - [](base::RunLoop* run_loop, bool succeeded) { - ASSERT_EQ(true, succeeded); - run_loop->Quit(); - }, - &run_loop), - MockRemoteSubscriptions()); + storage_->UpdateStorage( + SubscriptionType::kPriceTrack, + base::BindOnce( + [](base::RunLoop* run_loop, SubscriptionsRequestStatus status) { + ASSERT_EQ(SubscriptionsRequestStatus::kSuccess, status); + run_loop->Quit(); + }, + &run_loop), + MockRemoteSubscriptions()); run_loop.Run(); } @@ -345,14 +347,15 @@ } base::RunLoop run_loop; - storage_->UpdateStorage(SubscriptionType::kPriceTrack, - base::BindOnce( - [](base::RunLoop* run_loop, bool succeeded) { - ASSERT_EQ(false, succeeded); - run_loop->Quit(); - }, - &run_loop), - MockRemoteSubscriptions()); + storage_->UpdateStorage( + SubscriptionType::kPriceTrack, + base::BindOnce( + [](base::RunLoop* run_loop, SubscriptionsRequestStatus status) { + ASSERT_EQ(SubscriptionsRequestStatus::kStorageError, status); + run_loop->Quit(); + }, + &run_loop), + MockRemoteSubscriptions()); run_loop.Run(); }
diff --git a/components/embedder_support/android/metrics/android_metrics_service_client.cc b/components/embedder_support/android/metrics/android_metrics_service_client.cc index fcef6f0b..3344e7d 100644 --- a/components/embedder_support/android/metrics/android_metrics_service_client.cc +++ b/components/embedder_support/android/metrics/android_metrics_service_client.cc
@@ -37,7 +37,6 @@ #include "components/metrics/drive_metrics_provider.h" #include "components/metrics/entropy_state_provider.h" #include "components/metrics/file_metrics_provider.h" -#include "components/metrics/form_factor_metrics_provider.h" #include "components/metrics/metrics_pref_names.h" #include "components/metrics/metrics_service.h" #include "components/metrics/metrics_state_manager.h" @@ -47,6 +46,7 @@ #include "components/metrics/persistent_histograms.h" #include "components/metrics/sampling_metrics_provider.h" #include "components/metrics/stability_metrics_helper.h" +#include "components/metrics/ui/form_factor_metrics_provider.h" #include "components/metrics/ui/screen_info_metrics_provider.h" #include "components/metrics/version_utils.h" #include "components/prefs/pref_service.h"
diff --git a/components/exo/surface_unittest.cc b/components/exo/surface_unittest.cc index 084aa267..a63e9b6c 100644 --- a/components/exo/surface_unittest.cc +++ b/components/exo/surface_unittest.cc
@@ -1248,7 +1248,7 @@ // To get 32,32 -> 160,160 into the correct position it must be translated // backwards and scaled 0.5x in Y, then everything is scaled by the scale // factor. - auto expected_transform = gfx::Transform( + auto expected_transform = gfx::Transform::Affine( 1.0f * device_scale_factor(), 0.0f, 0.0f, 0.5f * device_scale_factor(), -32.0f * device_scale_factor(), -32.0f * device_scale_factor() * 0.5f);
diff --git a/components/gwp_asan/BUILD.gn b/components/gwp_asan/BUILD.gn index c5540da..86778dfb 100644 --- a/components/gwp_asan/BUILD.gn +++ b/components/gwp_asan/BUILD.gn
@@ -13,6 +13,7 @@ "//base/test:run_all_unittests", "//components/gwp_asan/common:unit_tests", "//testing/gtest", + "//third_party/boringssl", ] if (is_win || is_mac || is_linux || is_chromeos || is_android) { deps += [
diff --git a/components/gwp_asan/DEPS b/components/gwp_asan/DEPS new file mode 100644 index 0000000..859cc4e7e --- /dev/null +++ b/components/gwp_asan/DEPS
@@ -0,0 +1,3 @@ +include_rules = [ + "+third_party/boringssl/src/include", +]
diff --git a/components/gwp_asan/client/sampling_state.h b/components/gwp_asan/client/sampling_state.h index ceb6f19..53ab6f3d 100644 --- a/components/gwp_asan/client/sampling_state.h +++ b/components/gwp_asan/client/sampling_state.h
@@ -10,8 +10,8 @@ #include <random> #include "base/compiler_specific.h" -#include "base/rand_util.h" #include "build/build_config.h" +#include "third_party/boringssl/src/include/openssl/rand.h" #if BUILDFLAG(IS_APPLE) || BUILDFLAG(IS_ANDROID) #define USE_PTHREAD_TLS @@ -26,6 +26,23 @@ PARTITIONALLOC = 1, }; +class RandomBitGenerator { + public: + using result_type = uint64_t; + static constexpr result_type min() { return 0; } + static constexpr result_type max() { return UINT64_MAX; } + result_type operator()() const { + uint64_t result; + // To avoid infinite recursion use non-allocating RNG from BoringSSL. + RAND_get_system_entropy_for_custom_prng(reinterpret_cast<uint8_t*>(&result), + sizeof(result)); + return result; + } + + RandomBitGenerator() = default; + ~RandomBitGenerator() = default; +}; + // Class that encapsulates the current sampling state. Sampling is performed // using a counter stored in thread-local storage. // @@ -65,7 +82,7 @@ // Sample an allocation on every average one out of every // |sampling_frequency_| allocations. size_t NextSample() { - base::RandomBitGenerator generator; + RandomBitGenerator generator; std::geometric_distribution<size_t> distribution(sampling_probability_); return distribution(generator) + 1; }
diff --git a/components/history/core/browser/BUILD.gn b/components/history/core/browser/BUILD.gn index 741f5dd..b0a995a4 100644 --- a/components/history/core/browser/BUILD.gn +++ b/components/history/core/browser/BUILD.gn
@@ -174,6 +174,7 @@ "//components/test/data/history/TopSites.v2.sql", "//components/test/data/history/TopSites.v3.sql", "//components/test/data/history/TopSites.v4.sql", + "//components/test/data/history/TopSites.v5.sql", "//components/test/data/history/history.22.sql", "//components/test/data/history/history.26.sql", "//components/test/data/history/history.27.sql",
diff --git a/components/history/core/browser/top_sites_database.cc b/components/history/core/browser/top_sites_database.cc index 9a17280..ea3a4f0 100644 --- a/components/history/core/browser/top_sites_database.cc +++ b/components/history/core/browser/top_sites_database.cc
@@ -34,9 +34,6 @@ // url_rank Index of the site, 0-based. The site with the highest rank // will be the next one evicted. // title The title to display under that site. -// redirects A space separated list of URLs that are known to redirect -// to this url. As of 9/2019 this column is not used. It will -// be removed shortly. namespace { @@ -48,6 +45,7 @@ // fatal (in fact, very old data may be expired immediately at startup // anyhow). +// Version 5: TODO apaseltiner@chromium.org on 2022-09-21 // Version 4: 95af34ec/r618360 kristipark@chromium.org on 2018-12-20 // Version 3: b6d6a783/r231648 by beaudoin@chromium.org on 2013-10-29 // Version 2: eb0b24e6/r87284 by satorux@chromium.org on 2011-05-31 (deprecated) @@ -55,7 +53,7 @@ // NOTE(shess): When changing the version, add a new golden file for // the new version and a test to verify that Init() works with it. -static const int kVersionNumber = 4; +static const int kVersionNumber = 5; static const int kDeprecatedVersionNumber = 3; // and earlier. // Rank used to indicate that this is a newly added URL. @@ -64,10 +62,9 @@ bool InitTables(sql::Database* db) { static constexpr char kTopSitesSql[] = "CREATE TABLE IF NOT EXISTS top_sites(" - "url LONGVARCHAR PRIMARY KEY," - "url_rank INTEGER," - "title LONGVARCHAR," - "redirects LONGVARCHAR)"; + "url TEXT NOT NULL PRIMARY KEY," + "url_rank INTEGER NOT NULL," + "title TEXT NOT NULL)"; return db->Execute(kTopSitesSql); } @@ -159,7 +156,7 @@ // constraints. void RecoverAndFixup(sql::Database* db, const base::FilePath& db_path) { // NOTE(shess): If the version changes, review this code. - DCHECK_EQ(4, kVersionNumber); + DCHECK_EQ(5, kVersionNumber); std::unique_ptr<sql::Recovery> recovery = sql::Recovery::BeginRecoverDatabase(db, db_path); @@ -284,6 +281,40 @@ return false; } +bool TopSitesDatabase::UpgradeToVersion5(sql::MetaTable& meta_table) { + DCHECK(db_); + DCHECK(db_->HasActiveTransactions()); + DCHECK_EQ(4, meta_table.GetVersionNumber()); + + static constexpr char kCreateSql[] = + "CREATE TABLE new_top_sites(" + "url TEXT NOT NULL PRIMARY KEY," + "url_rank INTEGER NOT NULL," + "title TEXT NOT NULL)"; + if (!db_->Execute(kCreateSql)) + return false; + + static constexpr char kMigrateSql[] = + "INSERT INTO new_top_sites(url,url_rank,title)" + "SELECT url,url_rank,title FROM top_sites " + "WHERE url IS NOT NULL AND url_rank IS NOT NULL AND title IS NOT NULL"; + if (!db_->Execute(kMigrateSql)) + return false; + + static constexpr char kDropSql[] = "DROP TABLE top_sites"; + if (!db_->Execute(kDropSql)) + return false; + + static constexpr char kRenameSql[] = + "ALTER TABLE new_top_sites " + "RENAME TO top_sites"; + if (!db_->Execute(kRenameSql)) + return false; + + meta_table.SetVersionNumber(5); + return true; +} + bool TopSitesDatabase::InitImpl(const base::FilePath& db_name) { const bool file_existed = base::PathExists(db_name); @@ -327,6 +358,11 @@ if (!InitTables(db_.get())) return false; + if (meta_table.GetVersionNumber() == 4) { + if (!UpgradeToVersion5(meta_table)) + return false; + } + // Version check. if (meta_table.GetVersionNumber() != kVersionNumber) return false;
diff --git a/components/history/core/browser/top_sites_database.h b/components/history/core/browser/top_sites_database.h index 5bb66a1..c685aaa 100644 --- a/components/history/core/browser/top_sites_database.h +++ b/components/history/core/browser/top_sites_database.h
@@ -17,6 +17,7 @@ namespace sql { class Database; +class MetaTable; class Statement; } // namespace sql @@ -88,6 +89,9 @@ bool InitImpl(const base::FilePath& db_name) VALID_CONTEXT_REQUIRED(sequence_checker_); + [[nodiscard]] bool UpgradeToVersion5(sql::MetaTable&) + VALID_CONTEXT_REQUIRED(sequence_checker_); + void DatabaseErrorCallback(const base::FilePath& db_path, int extended_error, sql::Statement* stmt);
diff --git a/components/history/core/browser/top_sites_database_unittest.cc b/components/history/core/browser/top_sites_database_unittest.cc index 79842e6..b8c68de 100644 --- a/components/history/core/browser/top_sites_database_unittest.cc +++ b/components/history/core/browser/top_sites_database_unittest.cc
@@ -37,8 +37,8 @@ // [key] and [value]. EXPECT_EQ(2u, sql::test::CountTableColumns(db, "meta")); - // [url], [url_rank], [title], [redirects] - EXPECT_EQ(4u, sql::test::CountTableColumns(db, "top_sites")); + // [url], [url_rank], [title] + EXPECT_EQ(3u, sql::test::CountTableColumns(db, "top_sites")); } void VerifyDatabaseEmpty(sql::Database* db) { @@ -130,6 +130,28 @@ ASSERT_EQ(2u, urls.size()); } +TEST_F(TopSitesDatabaseTest, Version5) { + ASSERT_TRUE(CreateDatabaseFromSQL(file_name_, "TopSites.v5.sql")); + + TopSitesDatabase db; + ASSERT_TRUE(db.Init(file_name_)); + + VerifyTablesAndColumns(db.db_for_testing()); + + // Basic operational check. + MostVisitedURLList urls = db.GetSites(); + ASSERT_EQ(3u, urls.size()); + EXPECT_EQ(kUrl0, urls[0].url); // [0] because of url_rank. + + sql::Transaction transaction(db.db_for_testing()); + ASSERT_TRUE(transaction.Begin()); + ASSERT_TRUE(db.RemoveURLNoTransactionForTesting(urls[1])); + ASSERT_TRUE(transaction.Commit()); + + urls = db.GetSites(); + ASSERT_EQ(2u, urls.size()); +} + // Version 1 is deprecated, the resulting schema should be current, with no // data. TEST_F(TopSitesDatabaseTest, Recovery1) { @@ -242,11 +264,11 @@ } } -TEST_F(TopSitesDatabaseTest, Recovery4_CorruptIndex) { +TEST_F(TopSitesDatabaseTest, Recovery5_CorruptIndex) { // Create an example database. - ASSERT_TRUE(CreateDatabaseFromSQL(file_name_, "TopSites.v4.sql")); + ASSERT_TRUE(CreateDatabaseFromSQL(file_name_, "TopSites.v5.sql")); - // Corrupt the thumnails.url auto-index. + // Corrupt the top_sites.url auto-index. static const char kIndexName[] = "sqlite_autoindex_top_sites_1"; EXPECT_TRUE(sql::test::CorruptIndexRootPage(file_name_, kIndexName)); @@ -307,9 +329,9 @@ } } -TEST_F(TopSitesDatabaseTest, Recovery4_CorruptIndexAndLostRow) { +TEST_F(TopSitesDatabaseTest, Recovery5_CorruptIndexAndLostRow) { // Create an example database. - ASSERT_TRUE(CreateDatabaseFromSQL(file_name_, "TopSites.v4.sql")); + ASSERT_TRUE(CreateDatabaseFromSQL(file_name_, "TopSites.v5.sql")); // Delete a row. { @@ -319,7 +341,7 @@ raw_db.Execute("DELETE FROM top_sites WHERE url = " "'http://www.google.com/chrome/intl/en/welcome.html'")); } - // Corrupt the thumnails.url auto-index. + // Corrupt the top_sites.url auto-index. static const char kIndexName[] = "sqlite_autoindex_top_sites_1"; EXPECT_TRUE(sql::test::CorruptIndexRootPage(file_name_, kIndexName));
diff --git a/components/lens/lens_features.cc b/components/lens/lens_features.cc index c308ed2b..761f16c 100644 --- a/components/lens/lens_features.cc +++ b/components/lens/lens_features.cc
@@ -10,32 +10,41 @@ namespace lens { namespace features { -const base::Feature kLensStandalone{"LensStandalone", - base::FEATURE_ENABLED_BY_DEFAULT}; +BASE_FEATURE(kLensStandalone, + "LensStandalone", + base::FEATURE_ENABLED_BY_DEFAULT); -const base::Feature kLensImageCompression{"LensImageCompression", - base::FEATURE_ENABLED_BY_DEFAULT}; +BASE_FEATURE(kLensImageCompression, + "LensImageCompression", + base::FEATURE_ENABLED_BY_DEFAULT); -const base::Feature kLensSearchOptimizations{"LensSearchOptimizations", - base::FEATURE_DISABLED_BY_DEFAULT}; +BASE_FEATURE(kLensSearchOptimizations, + "LensSearchOptimizations", + base::FEATURE_DISABLED_BY_DEFAULT); -const base::Feature kLensTransparentImagesFix{ - "LensTransparentImagesFix", base::FEATURE_DISABLED_BY_DEFAULT}; +BASE_FEATURE(kLensTransparentImagesFix, + "LensTransparentImagesFix", + base::FEATURE_DISABLED_BY_DEFAULT); -const base::Feature kLensSearchImageInScreenshotSharing{ - "LensSearchImageInScreenshotSharing", base::FEATURE_DISABLED_BY_DEFAULT}; +BASE_FEATURE(kLensSearchImageInScreenshotSharing, + "LensSearchImageInScreenshotSharing", + base::FEATURE_DISABLED_BY_DEFAULT); -const base::Feature kLensUnifiedSidePanelFooter{ - "LensUnifiedSidePanelFooter", base::FEATURE_ENABLED_BY_DEFAULT}; +BASE_FEATURE(kLensUnifiedSidePanelFooter, + "LensUnifiedSidePanelFooter", + base::FEATURE_ENABLED_BY_DEFAULT); -const base::Feature kEnableLatencyLogging{"LensImageLatencyLogging", - base::FEATURE_ENABLED_BY_DEFAULT}; +BASE_FEATURE(kEnableLatencyLogging, + "LensImageLatencyLogging", + base::FEATURE_ENABLED_BY_DEFAULT); -const base::Feature kEnableRegionSearchOnPdfViewer{ - "LensEnableRegionSearchOnPdfViewer", base::FEATURE_DISABLED_BY_DEFAULT}; +BASE_FEATURE(kEnableRegionSearchOnPdfViewer, + "LensEnableRegionSearchOnPdfViewer", + base::FEATURE_DISABLED_BY_DEFAULT); -const base::Feature kLensInstructionChipImprovements{ - "LensInstructionChipImprovements", base::FEATURE_DISABLED_BY_DEFAULT}; +BASE_FEATURE(kLensInstructionChipImprovements, + "LensInstructionChipImprovements", + base::FEATURE_DISABLED_BY_DEFAULT); const base::FeatureParam<bool> kEnableUKMLoggingForRegionSearch{ &kLensStandalone, "region-search-enable-ukm-logging", true};
diff --git a/components/lens/lens_features.h b/components/lens/lens_features.h index 91424f1..d2ebb12 100644 --- a/components/lens/lens_features.h +++ b/components/lens/lens_features.h
@@ -14,31 +14,31 @@ namespace features { // Enables context menu search by image sending to the Lens homepage. -extern const base::Feature kLensStandalone; +BASE_DECLARE_FEATURE(kLensStandalone); // Feature that controls the compression of images before they are sent to Lens. -extern const base::Feature kLensImageCompression; +BASE_DECLARE_FEATURE(kLensImageCompression); // Enables a variety of changes aimed to improve user's engagement with current // Lens features. -extern const base::Feature kLensSearchOptimizations; +BASE_DECLARE_FEATURE(kLensSearchOptimizations); // Enables a fix to properly handle transparent images in Lens Image Search -extern const base::Feature kLensTransparentImagesFix; +BASE_DECLARE_FEATURE(kLensTransparentImagesFix); // Enables Lens integration into the Chrome screenshot sharing feature by adding // a "Search Image" button. -extern const base::Feature kLensSearchImageInScreenshotSharing; +BASE_DECLARE_FEATURE(kLensSearchImageInScreenshotSharing); // Enables Latency logging for the LensStandalone feature. -extern const base::Feature kEnableLatencyLogging; +BASE_DECLARE_FEATURE(kEnableLatencyLogging); // Enable the Lens Region Search feature on the PDF viewer. -extern const base::Feature kEnableRegionSearchOnPdfViewer; +BASE_DECLARE_FEATURE(kEnableRegionSearchOnPdfViewer); // Enables the modification of the instruction chip UI that is presented when // region search is opened. -extern const base::Feature kLensInstructionChipImprovements; +BASE_DECLARE_FEATURE(kLensInstructionChipImprovements); // Enables using `Google` as the visual search provider instead of `Google // Lens`. @@ -69,7 +69,7 @@ extern const base::FeatureParam<bool> kEnableLensHtmlRedirectFix; // Enables footer for the unified side panel -extern const base::Feature kLensUnifiedSidePanelFooter; +BASE_DECLARE_FEATURE(kLensUnifiedSidePanelFooter); // Enables Lens fullscreen search on Desktop platforms. extern const base::FeatureParam<bool> kEnableFullscreenSearch;
diff --git a/components/live_caption/live_caption_controller.cc b/components/live_caption/live_caption_controller.cc index 4be5927..a41b22d 100644 --- a/components/live_caption/live_caption_controller.cc +++ b/components/live_caption/live_caption_controller.cc
@@ -74,6 +74,16 @@ registry->RegisterListPref( prefs::kLiveCaptionMediaFoundationRendererErrorSilenced, user_prefs::PrefRegistrySyncable::SYNCABLE_PREF); + + if (base::FeatureList::IsEnabled(media::kLiveTranslate)) { + registry->RegisterBooleanPref( + prefs::kLiveTranslateEnabled, false, + user_prefs::PrefRegistrySyncable::SYNCABLE_PREF); + + registry->RegisterStringPref( + prefs::kLiveTranslateTargetLanguageCode, speech::kUsEnglishLocale, + user_prefs::PrefRegistrySyncable::SYNCABLE_PREF); + } } void LiveCaptionController::Init() {
diff --git a/components/live_caption/pref_names.cc b/components/live_caption/pref_names.cc index 2a5b7ddc..f5c11404 100644 --- a/components/live_caption/pref_names.cc +++ b/components/live_caption/pref_names.cc
@@ -84,4 +84,12 @@ const char kAccessibilityCaptionsBackgroundOpacity[] = "accessibility.captions.background_opacity"; +// Whether the Live Translate feature is enabled. +const char kLiveTranslateEnabled[] = + "accessibility.captions.live_translate_enabled"; + +// The target language to translate the captions to. +const char kLiveTranslateTargetLanguageCode[] = + "accessibility.captions.live_translate_target_language"; + } // namespace prefs
diff --git a/components/live_caption/pref_names.h b/components/live_caption/pref_names.h index 83428cf..688df18 100644 --- a/components/live_caption/pref_names.h +++ b/components/live_caption/pref_names.h
@@ -43,6 +43,10 @@ extern const char kAccessibilityCaptionsTextShadow[]; extern const char kAccessibilityCaptionsBackgroundOpacity[]; +// Live Translate prefs. +extern const char kLiveTranslateEnabled[]; +extern const char kLiveTranslateTargetLanguageCode[]; + } // namespace prefs #endif // COMPONENTS_LIVE_CAPTION_PREF_NAMES_H_
diff --git a/components/live_caption/views/caption_bubble.cc b/components/live_caption/views/caption_bubble.cc index 12d7101..4f8d527 100644 --- a/components/live_caption/views/caption_bubble.cc +++ b/components/live_caption/views/caption_bubble.cc
@@ -356,7 +356,7 @@ ui::AXNodeData& ax_node_data = ax_lines[line_index]->GetCustomData(); if (base::UTF8ToUTF16(ax_node_data.GetStringAttribute( ax::mojom::StringAttribute::kName)) != line_text) { - ax_node_data.SetName(line_text); + ax_node_data.SetNameChecked(line_text); std::vector<gfx::Rect> bounds = GetSubstringBounds(text_range); ax_node_data.relative_bounds.bounds = gfx::RectF(bounds[0]); ax_lines[line_index]->NotifyAccessibilityEvent( @@ -671,7 +671,7 @@ void CaptionBubble::GetAccessibleNodeData(ui::AXNodeData* node_data) { node_data->role = ax::mojom::Role::kDialog; - node_data->SetName(title_->GetText()); + node_data->SetNameChecked(title_->GetText()); } std::u16string CaptionBubble::GetAccessibleWindowTitle() const {
diff --git a/components/metrics/BUILD.gn b/components/metrics/BUILD.gn index ccc7abb..0fedd11d 100644 --- a/components/metrics/BUILD.gn +++ b/components/metrics/BUILD.gn
@@ -49,8 +49,6 @@ "field_trials_provider.h", "file_metrics_provider.cc", "file_metrics_provider.h", - "form_factor_metrics_provider.cc", - "form_factor_metrics_provider.h", "log_decoder.cc", "log_decoder.h", "log_store.h", @@ -137,7 +135,6 @@ "//crypto", "//extensions/buildflags", "//third_party/icu", - "//ui/base", "//url", ] @@ -335,6 +332,8 @@ static_library("ui") { sources = [ + "ui/form_factor_metrics_provider.cc", + "ui/form_factor_metrics_provider.h", "ui/screen_info_metrics_provider.cc", "ui/screen_info_metrics_provider.h", ] @@ -342,6 +341,7 @@ public_deps = [ ":metrics" ] deps = [ "//base", + "//ui/base", "//ui/display", "//ui/gfx", "//ui/gfx/geometry", @@ -474,7 +474,6 @@ "expired_histograms_checker_unittest.cc", "field_trials_provider_unittest.cc", "file_metrics_provider_unittest.cc", - "form_factor_metrics_provider_unittest.cc", "histogram_encoder_unittest.cc", "library_support/histogram_manager_unittest.cc", "log_decoder_unittest.cc", @@ -492,6 +491,7 @@ "single_sample_metrics_factory_impl_unittest.cc", "stability_metrics_helper_unittest.cc", "stability_metrics_provider_unittest.cc", + "ui/form_factor_metrics_provider_unittest.cc", "ui/screen_info_metrics_provider_unittest.cc", "unsent_log_store_metrics_impl_unittest.cc", "unsent_log_store_unittest.cc",
diff --git a/components/metrics/DEPS b/components/metrics/DEPS index bf72c0c4..053c69b 100644 --- a/components/metrics/DEPS +++ b/components/metrics/DEPS
@@ -19,7 +19,6 @@ "+third_party/metrics_proto", "+third_party/zlib/google", "-net", - "+ui/base", "+url", ]
diff --git a/components/metrics/ui/DEPS b/components/metrics/ui/DEPS index e141313..f28912e 100644 --- a/components/metrics/ui/DEPS +++ b/components/metrics/ui/DEPS
@@ -1,4 +1,5 @@ include_rules = [ + "+ui/base", "+ui/display", "+ui/gfx", ]
diff --git a/components/metrics/form_factor_metrics_provider.cc b/components/metrics/ui/form_factor_metrics_provider.cc similarity index 95% rename from components/metrics/form_factor_metrics_provider.cc rename to components/metrics/ui/form_factor_metrics_provider.cc index afcc191..2086265 100644 --- a/components/metrics/form_factor_metrics_provider.cc +++ b/components/metrics/ui/form_factor_metrics_provider.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 "components/metrics/form_factor_metrics_provider.h" +#include "components/metrics/ui/form_factor_metrics_provider.h" #include "build/build_config.h" #include "ui/base/device_form_factor.h"
diff --git a/components/metrics/form_factor_metrics_provider.h b/components/metrics/ui/form_factor_metrics_provider.h similarity index 83% rename from components/metrics/form_factor_metrics_provider.h rename to components/metrics/ui/form_factor_metrics_provider.h index 82fc90a..7e93eb1 100644 --- a/components/metrics/form_factor_metrics_provider.h +++ b/components/metrics/ui/form_factor_metrics_provider.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 COMPONENTS_METRICS_FORM_FACTOR_METRICS_PROVIDER_H_ -#define COMPONENTS_METRICS_FORM_FACTOR_METRICS_PROVIDER_H_ +#ifndef COMPONENTS_METRICS_UI_FORM_FACTOR_METRICS_PROVIDER_H_ +#define COMPONENTS_METRICS_UI_FORM_FACTOR_METRICS_PROVIDER_H_ #include "components/metrics/metrics_provider.h" #include "third_party/metrics_proto/system_profile.pb.h" @@ -32,4 +32,4 @@ } // namespace metrics -#endif // COMPONENTS_METRICS_FORM_FACTOR_METRICS_PROVIDER_H_ +#endif // COMPONENTS_METRICS_UI_FORM_FACTOR_METRICS_PROVIDER_H_
diff --git a/components/metrics/form_factor_metrics_provider_unittest.cc b/components/metrics/ui/form_factor_metrics_provider_unittest.cc similarity index 95% rename from components/metrics/form_factor_metrics_provider_unittest.cc rename to components/metrics/ui/form_factor_metrics_provider_unittest.cc index ea32a4b..f3aae5ba 100644 --- a/components/metrics/form_factor_metrics_provider_unittest.cc +++ b/components/metrics/ui/form_factor_metrics_provider_unittest.cc
@@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "components/metrics/form_factor_metrics_provider.h" +#include "components/metrics/ui/form_factor_metrics_provider.h" #include "testing/gtest/include/gtest/gtest.h" #include "third_party/metrics_proto/system_profile.pb.h"
diff --git a/components/mirroring/service/remoting_sender.cc b/components/mirroring/service/remoting_sender.cc index e04eac0..56ca9cc7 100644 --- a/components/mirroring/service/remoting_sender.cc +++ b/components/mirroring/service/remoting_sender.cc
@@ -18,8 +18,11 @@ #include "media/cast/constants.h" #include "media/cast/sender/openscreen_frame_sender.h" #include "media/mojo/common/mojo_data_pipe_read_write.h" +#include "third_party/openscreen/src/cast/streaming/encoded_frame.h" #include "third_party/openscreen/src/cast/streaming/sender.h" +using Dependency = openscreen::cast::EncodedFrame::Dependency; + namespace mirroring { RemotingSender::RemotingSender( @@ -167,16 +170,15 @@ auto remoting_frame = std::make_unique<media::cast::SenderEncodedFrame>(); remoting_frame->frame_id = next_frame_id_; if (flow_restart_pending_) { - remoting_frame->dependency = media::cast::EncodedFrame::KEY; + remoting_frame->dependency = Dependency::kKeyFrame; flow_restart_pending_ = false; } else { DCHECK(!is_first_frame); - remoting_frame->dependency = media::cast::EncodedFrame::DEPENDENT; + remoting_frame->dependency = Dependency::kDependent; } remoting_frame->referenced_frame_id = - remoting_frame->dependency == media::cast::EncodedFrame::KEY - ? next_frame_id_ - : next_frame_id_ - 1; + remoting_frame->dependency == Dependency::kKeyFrame ? next_frame_id_ + : next_frame_id_ - 1; remoting_frame->reference_time = clock_->NowTicks(); remoting_frame->encode_completion_time = remoting_frame->reference_time;
diff --git a/components/mirroring/service/remoting_sender_unittest.cc b/components/mirroring/service/remoting_sender_unittest.cc index b5a826b1..ec63c76c 100644 --- a/components/mirroring/service/remoting_sender_unittest.cc +++ b/components/mirroring/service/remoting_sender_unittest.cc
@@ -20,6 +20,8 @@ #include "mojo/public/cpp/system/data_pipe.h" #include "testing/gtest/include/gtest/gtest.h" +using Dependency = openscreen::cast::EncodedFrame::Dependency; + namespace mirroring { namespace { @@ -412,9 +414,9 @@ const media::cast::EncodedFrame& frame = frames[i]; EXPECT_EQ(media::cast::FrameId::first() + i, frame.frame_id); if (i == 0 || i == 10) - EXPECT_EQ(media::cast::EncodedFrame::KEY, frame.dependency); + EXPECT_EQ(Dependency::kKeyFrame, frame.dependency); else - EXPECT_EQ(media::cast::EncodedFrame::DEPENDENT, frame.dependency); + EXPECT_EQ(Dependency::kDependent, frame.dependency); } } @@ -587,10 +589,10 @@ const media::cast::EncodedFrame& frame = frames[i]; EXPECT_EQ(media::cast::FrameId::first() + i, frame.frame_id); if (i == 0) { - EXPECT_EQ(media::cast::EncodedFrame::KEY, frame.dependency); + EXPECT_EQ(Dependency::kKeyFrame, frame.dependency); EXPECT_EQ(media::cast::FrameId::first() + i, frame.referenced_frame_id); } else { - EXPECT_EQ(media::cast::EncodedFrame::DEPENDENT, frame.dependency); + EXPECT_EQ(Dependency::kDependent, frame.dependency); EXPECT_EQ(media::cast::FrameId::first() + i - 1, frame.referenced_frame_id); }
diff --git a/components/optimization_guide/core/BUILD.gn b/components/optimization_guide/core/BUILD.gn index cf40be9f..cd6f46f 100644 --- a/components/optimization_guide/core/BUILD.gn +++ b/components/optimization_guide/core/BUILD.gn
@@ -9,6 +9,7 @@ } import("//build/buildflag_header.gni") import("//components/optimization_guide/features.gni") +import("//testing/libfuzzer/fuzzer_test.gni") import("//third_party/tflite/features.gni") static_library("bloomfilter") { @@ -475,3 +476,32 @@ ] } } + +if (build_with_tflite_lib) { + # TODO(b/249585782): Extend this to support NL models as well. + template("bert_model_fuzzer") { + forward_variables_from(invoker, "*") + + fuzzer_test("optimization_guide_${target_name}_fuzzer") { + sources = [ "bert_model_fuzzer.cc" ] + defines = [ + "OPTIMIZATION_TARGET=${optimization_target}", + "MODEL_FILE_BASENAME=\"${model_file_basename}\"", + ] + deps = [ + ":core", + ":features", + ":machine_learning", + ":model_executor", + "//base:base", + "//base/test:test_support", + "//components/optimization_guide/proto:optimization_guide_proto", + ] + } + } + + bert_model_fuzzer("page_topics") { + optimization_target = "OPTIMIZATION_TARGET_PAGE_TOPICS_V2" + model_file_basename = "bert_page_topics_model.tflite" + } +}
diff --git a/components/optimization_guide/core/bert_model_fuzzer.cc b/components/optimization_guide/core/bert_model_fuzzer.cc new file mode 100644 index 0000000..7aa32ef --- /dev/null +++ b/components/optimization_guide/core/bert_model_fuzzer.cc
@@ -0,0 +1,81 @@ +// 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. + +#include <string> + +#include <fuzzer/FuzzedDataProvider.h> + +#include "base/path_service.h" +#include "base/test/task_environment.h" +#include "components/optimization_guide/core/bert_model_executor.h" + +// This fuzzer relies on two macros so that the test code can be easily reused +// across multiple model inputs. Make sure these are defined by the build rule. +// +// OPTIMIZATION_TARGET should be something like +// OPTIMIZATION_TARGET_PAINFUL_PAGE_LOAD. +// +// MODEL_FILE_BASENAME should be something like "model.tflite", quotes included! +// Given model file base names use the OptGuide test data dir in //components. +class BertModelExecutorFuzzer { + public: + BertModelExecutorFuzzer() + : model_executor_(optimization_guide::BertModelExecutor( + optimization_guide::proto::OPTIMIZATION_TARGET)) { + model_executor_.InitializeAndMoveToExecutionThread( + // This is an arbitrarily long time since we don't need to test the + // timeout behavior here, libfuzzer will take care of hangs. + /*model_inference_timeout=*/base::Minutes(60), + optimization_guide::proto::OPTIMIZATION_TARGET, + /*execution_task_runner=*/task_environment_.GetMainThreadTaskRunner(), + /*reply_task_runner=*/task_environment_.GetMainThreadTaskRunner()); + + base::FilePath source_root_dir; + base::PathService::Get(base::DIR_SOURCE_ROOT, &source_root_dir); + base::FilePath model_file_path = source_root_dir.AppendASCII("components") + .AppendASCII("test") + .AppendASCII("data") + .AppendASCII("optimization_guide") + .AppendASCII(MODEL_FILE_BASENAME); + + model_executor_.UpdateModelFile(model_file_path); + model_executor_.SetShouldUnloadModelOnComplete(false); + } + ~BertModelExecutorFuzzer() { task_environment_.RunUntilIdle(); } + + optimization_guide::BertModelExecutor* executor() { return &model_executor_; } + + void RunUntilIdle() { task_environment_.RunUntilIdle(); } + + private: + base::test::TaskEnvironment task_environment_; + optimization_guide::BertModelExecutor model_executor_; +}; + +extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) { + static BertModelExecutorFuzzer test; + static bool had_successful_run = false; + + std::string input(reinterpret_cast<const char*>(data), size); + test.executor()->SendForExecution( + base::BindOnce( + [](const absl::optional<std::vector<tflite::task::core::Category>>& + output) { + if (output && !had_successful_run) { + had_successful_run = true; + // Print a single debug message so that its obvious things are + // working (or able to at least once) when running locally. + LOG(INFO) << "Congrats! Got a successful model execution. This " + "message will not be printed again."; + } + }), + base::TimeTicks(), input); + + // The model executor does some PostTask'ing to manage its state. While these + // tasks are not important for fuzzing, we don't want to queue up a ton of + // them. + test.RunUntilIdle(); + + return 0; +} \ No newline at end of file
diff --git a/components/password_manager/core/browser/password_store_proxy_backend.cc b/components/password_manager/core/browser/password_store_proxy_backend.cc index b6d01d1..022280ab 100644 --- a/components/password_manager/core/browser/password_store_proxy_backend.cc +++ b/components/password_manager/core/browser/password_store_proxy_backend.cc
@@ -11,12 +11,15 @@ #include "base/barrier_closure.h" #include "base/callback.h" #include "base/callback_helpers.h" +#include "base/functional/callback_forward.h" #include "base/functional/identity.h" #include "base/memory/scoped_refptr.h" #include "base/metrics/histogram_functions.h" #include "base/ranges/algorithm.h" #include "base/strings/strcat.h" #include "components/password_manager/core/browser/field_info_table.h" +#include "components/password_manager/core/browser/password_store_backend.h" +#include "components/password_manager/core/browser/password_store_backend_error.h" #include "components/password_manager/core/browser/password_sync_util.h" #include "components/password_manager/core/common/password_manager_features.h" #include "components/password_manager/core/common/password_manager_pref_names.h" @@ -94,6 +97,37 @@ return false; } +bool ShouldErrorResultInFallback(PasswordStoreBackendError error) { + switch (error.recovery_type) { + case PasswordStoreBackendErrorRecoveryType::kUnrecoverable: + case PasswordStoreBackendErrorRecoveryType::kUnspecified: + // TODO(http://crbug.com/1362464): Do not fallback on retriable errors + // once retrying is implemented. + case PasswordStoreBackendErrorRecoveryType::kRetriable: + return true; + case PasswordStoreBackendErrorRecoveryType::kRecoverable: + return false; + } +} + +bool ShouldFallbackOnUserAffectingOperations() { + return password_manager::features::kFallbackOnUserAffectingReadOperations + .Get(); +} + +bool ShouldFallbackOnNonUserAffectingOperations() { + return password_manager::features::kFallbackOnNonUserAffectingReadOperations + .Get(); +} + +bool ShouldFallbackOnModifyingOperations() { + return password_manager::features::kFallbackOnModifyingOperations.Get(); +} + +bool ShouldFallbackOnRemoveOperations() { + return password_manager::features::kFallbackOnRemoveOperations.Get(); +} + bool IsBuiltInBackendSyncEnabled() { DCHECK( base::FeatureList::IsEnabled(features::kUnifiedPasswordManagerAndroid)); @@ -401,11 +435,26 @@ auto handler = base::MakeRefCounted< ShadowTrafficMetricsRecorder<LoginsResultOrErrorImpl>>( MethodName("GetAllLoginsAsync")); + + LoginsOrErrorReply result_callback; + if (UsesAndroidBackendAsMainBackend() && + ShouldFallbackOnNonUserAffectingOperations()) { + auto execute_on_built_in_backend = + base::BindOnce(&PasswordStoreBackend::GetAllLoginsAsync, + base::Unretained(built_in_backend_)); + result_callback = base::BindOnce( + &PasswordStoreProxyBackend::MaybeRetryOperation<LoginsResultOrError>, + weak_ptr_factory_.GetWeakPtr(), std::move(execute_on_built_in_backend), + std::move(callback)); + } else { + result_callback = std::move(callback); + } + main_backend()->GetAllLoginsAsync( base::BindOnce(&ShadowTrafficMetricsRecorder< LoginsResultOrErrorImpl>::RecordMainResult, handler) - .Then(std::move(callback))); + .Then(std::move(result_callback))); if (ShouldExecuteReadOperationsOnShadowBackend( prefs_, IsPasswordSyncEnabled(sync_service_))) { @@ -421,11 +470,26 @@ auto handler = base::MakeRefCounted< ShadowTrafficMetricsRecorder<LoginsResultOrErrorImpl>>( MethodName("GetAutofillableLoginsAsync")); + + LoginsOrErrorReply result_callback; + if (UsesAndroidBackendAsMainBackend() && + ShouldFallbackOnNonUserAffectingOperations()) { + auto execute_on_built_in_backend = + base::BindOnce(&PasswordStoreBackend::GetAutofillableLoginsAsync, + base::Unretained(built_in_backend_)); + result_callback = base::BindOnce( + &PasswordStoreProxyBackend::MaybeRetryOperation<LoginsResultOrError>, + weak_ptr_factory_.GetWeakPtr(), std::move(execute_on_built_in_backend), + std::move(callback)); + } else { + result_callback = std::move(callback); + } + main_backend()->GetAutofillableLoginsAsync( base::BindOnce(&ShadowTrafficMetricsRecorder< LoginsResultOrErrorImpl>::RecordMainResult, handler) - .Then(std::move(callback))); + .Then(std::move(result_callback))); if (ShouldExecuteReadOperationsOnShadowBackend( prefs_, IsPasswordSyncEnabled(sync_service_))) { @@ -449,11 +513,34 @@ auto handler = base::MakeRefCounted< ShadowTrafficMetricsRecorder<LoginsResultOrErrorImpl>>( MethodName("FillMatchingLoginsAsync")); + + LoginsOrErrorReply result_callback; + if (UsesAndroidBackendAsMainBackend() && + ShouldFallbackOnUserAffectingOperations()) { + // Lambda is used to reorder |FillMatchingLoginsAsync| arguments so all but + // the |reply_callback| could be binded. + auto execute_on_built_in_backend = base::BindOnce( + [](PasswordStoreBackend* backend, bool include_psl, + const std::vector<PasswordFormDigest>& forms, + LoginsOrErrorReply reply_callback) { + backend->FillMatchingLoginsAsync(std::move(reply_callback), + include_psl, forms); + }, + base::Unretained(built_in_backend_), include_psl, forms); + + result_callback = base::BindOnce( + &PasswordStoreProxyBackend::MaybeRetryOperation<LoginsResultOrError>, + weak_ptr_factory_.GetWeakPtr(), std::move(execute_on_built_in_backend), + std::move(callback)); + } else { + result_callback = std::move(callback); + } + main_backend()->FillMatchingLoginsAsync( base::BindOnce(&ShadowTrafficMetricsRecorder< LoginsResultOrErrorImpl>::RecordMainResult, handler) - .Then(std::move(callback)), + .Then(std::move(result_callback)), include_psl, forms); if (ShouldExecuteReadOperationsOnShadowBackend( @@ -473,16 +560,25 @@ ShadowTrafficMetricsRecorder<PasswordChangesOrErrorImpl>>( MethodName("AddLoginAsync")); - auto maybe_retry_callback = - base::BindOnce(&PasswordStoreProxyBackend::MaybeRetryToAddLoginOnFail, - weak_ptr_factory_.GetWeakPtr(), form, std::move(callback), - UsesAndroidBackendAsMainBackend()); + PasswordChangesOrErrorReply result_callback; + if (UsesAndroidBackendAsMainBackend() && + ShouldFallbackOnModifyingOperations()) { + auto execute_on_built_in_backend = + base::BindOnce(&PasswordStoreBackend::AddLoginAsync, + base::Unretained(built_in_backend_), form); + result_callback = base::BindOnce( + &PasswordStoreProxyBackend::MaybeRetryOperation<PasswordChangesOrError>, + weak_ptr_factory_.GetWeakPtr(), std::move(execute_on_built_in_backend), + std::move(callback)); + } else { + result_callback = std::move(callback); + } main_backend()->AddLoginAsync( form, base::BindOnce(&ShadowTrafficMetricsRecorder< PasswordChangesOrErrorImpl>::RecordMainResult, handler) - .Then(std::move(maybe_retry_callback))); + .Then(std::move(result_callback))); if (ShouldExecuteModifyOperationsOnShadowBackend( prefs_, IsPasswordSyncEnabled(sync_service_))) { shadow_backend()->AddLoginAsync( @@ -500,16 +596,25 @@ ShadowTrafficMetricsRecorder<PasswordChangesOrErrorImpl>>( MethodName("UpdateLoginAsync")); - auto maybe_retry_callback = - base::BindOnce(&PasswordStoreProxyBackend::MaybeRetryToUpdateLoginOnFail, - weak_ptr_factory_.GetWeakPtr(), form, std::move(callback), - UsesAndroidBackendAsMainBackend()); + PasswordChangesOrErrorReply result_callback; + if (UsesAndroidBackendAsMainBackend() && + ShouldFallbackOnModifyingOperations()) { + auto execute_on_built_in_backend = + base::BindOnce(&PasswordStoreBackend::UpdateLoginAsync, + base::Unretained(built_in_backend_), form); + result_callback = base::BindOnce( + &PasswordStoreProxyBackend::MaybeRetryOperation<PasswordChangesOrError>, + weak_ptr_factory_.GetWeakPtr(), std::move(execute_on_built_in_backend), + std::move(callback)); + } else { + result_callback = std::move(callback); + } main_backend()->UpdateLoginAsync( form, base::BindOnce(&ShadowTrafficMetricsRecorder< PasswordChangesOrErrorImpl>::RecordMainResult, handler) - .Then(std::move(maybe_retry_callback))); + .Then(std::move(result_callback))); if (ShouldExecuteModifyOperationsOnShadowBackend( prefs_, IsPasswordSyncEnabled(sync_service_))) { shadow_backend()->UpdateLoginAsync( @@ -527,11 +632,24 @@ ShadowTrafficMetricsRecorder<PasswordChangesOrErrorImpl>>( MethodName("RemoveLoginAsync")); + PasswordChangesOrErrorReply result_callback; + if (UsesAndroidBackendAsMainBackend() && ShouldFallbackOnRemoveOperations()) { + auto execute_on_built_in_backend = + base::BindOnce(&PasswordStoreBackend::RemoveLoginAsync, + base::Unretained(built_in_backend_), form); + result_callback = base::BindOnce( + &PasswordStoreProxyBackend::MaybeRetryOperation<PasswordChangesOrError>, + weak_ptr_factory_.GetWeakPtr(), std::move(execute_on_built_in_backend), + std::move(callback)); + } else { + result_callback = std::move(callback); + } + main_backend()->RemoveLoginAsync( form, base::BindOnce(&ShadowTrafficMetricsRecorder< PasswordChangesOrErrorImpl>::RecordMainResult, handler) - .Then(std::move(callback))); + .Then(std::move(result_callback))); if (ShouldExecuteDeletionsOnShadowBackend( prefs_, IsPasswordSyncEnabled(sync_service_))) { shadow_backend()->RemoveLoginAsync( @@ -552,12 +670,31 @@ ShadowTrafficMetricsRecorder<PasswordChangesOrErrorImpl>>( MethodName("RemoveLoginsByURLAndTimeAsync")); + // Sync completion callback is only used by the LocalDatabase backend and is + // ignored by the Android backend. + base::OnceCallback<void(bool)> sync_completion_callback; + PasswordChangesOrErrorReply result_callback; + if (UsesAndroidBackendAsMainBackend() && ShouldFallbackOnRemoveOperations()) { + sync_completion_callback = base::DoNothing(); + auto execute_on_built_in_backend = + base::BindOnce(&PasswordStoreBackend::RemoveLoginsByURLAndTimeAsync, + base::Unretained(built_in_backend_), url_filter, + delete_begin, delete_end, std::move(sync_completion)); + result_callback = base::BindOnce( + &PasswordStoreProxyBackend::MaybeRetryOperation<PasswordChangesOrError>, + weak_ptr_factory_.GetWeakPtr(), std::move(execute_on_built_in_backend), + std::move(callback)); + } else { + sync_completion_callback = std::move(sync_completion); + result_callback = std::move(callback); + } + main_backend()->RemoveLoginsByURLAndTimeAsync( - url_filter, delete_begin, delete_end, std::move(sync_completion), + url_filter, delete_begin, delete_end, std::move(sync_completion_callback), base::BindOnce(&ShadowTrafficMetricsRecorder< PasswordChangesOrErrorImpl>::RecordMainResult, handler) - .Then(std::move(callback))); + .Then(std::move(result_callback))); if (ShouldExecuteDeletionsOnShadowBackend( prefs_, IsPasswordSyncEnabled(sync_service_))) { shadow_backend()->RemoveLoginsByURLAndTimeAsync( @@ -577,12 +714,25 @@ ShadowTrafficMetricsRecorder<PasswordChangesOrErrorImpl>>( MethodName("RemoveLoginsCreatedBetweenAsync")); + PasswordChangesOrErrorReply result_callback; + if (UsesAndroidBackendAsMainBackend() && ShouldFallbackOnRemoveOperations()) { + auto execute_on_built_in_backend = base::BindOnce( + &PasswordStoreBackend::RemoveLoginsCreatedBetweenAsync, + base::Unretained(built_in_backend_), delete_begin, delete_end); + result_callback = base::BindOnce( + &PasswordStoreProxyBackend::MaybeRetryOperation<PasswordChangesOrError>, + weak_ptr_factory_.GetWeakPtr(), std::move(execute_on_built_in_backend), + std::move(callback)); + } else { + result_callback = std::move(callback); + } + main_backend()->RemoveLoginsCreatedBetweenAsync( delete_begin, delete_end, base::BindOnce(&ShadowTrafficMetricsRecorder< PasswordChangesOrErrorImpl>::RecordMainResult, handler) - .Then(std::move(callback))); + .Then(std::move(result_callback))); if (ShouldExecuteDeletionsOnShadowBackend( prefs_, IsPasswordSyncEnabled(sync_service_))) { shadow_backend()->RemoveLoginsCreatedBetweenAsync( @@ -596,6 +746,9 @@ void PasswordStoreProxyBackend::DisableAutoSignInForOriginsAsync( const base::RepeatingCallback<bool(const GURL&)>& origin_filter, base::OnceClosure completion) { + // TODO(https://crbug.com/1278807): Implement error handling, when actual + // store changes will be received from the store. + main_backend()->DisableAutoSignInForOriginsAsync(origin_filter, std::move(completion)); if (ShouldExecuteModifyOperationsOnShadowBackend( @@ -644,33 +797,18 @@ android_backend_->OnSyncServiceInitialized(sync_service); } -void PasswordStoreProxyBackend::MaybeRetryToAddLoginOnFail( - const PasswordForm& form, - PasswordChangesOrErrorReply callback, - bool was_using_android_backend, - PasswordChangesOrError result) { - if (was_using_android_backend && - absl::holds_alternative<PasswordStoreBackendError>(result) && - absl::get<PasswordStoreBackendError>(result).recovery_type == - PasswordStoreBackendErrorRecoveryType::kUnrecoverable) { - built_in_backend_->AddLoginAsync(form, std::move(callback)); +template <typename ResultT> +void PasswordStoreProxyBackend::MaybeRetryOperation( + base::OnceCallback<void(base::OnceCallback<void(ResultT)> callback)> + retry_callback, + base::OnceCallback<void(ResultT)> result_callback, + ResultT result) { + if (absl::holds_alternative<PasswordStoreBackendError>(result) && + ShouldErrorResultInFallback( + absl::get<PasswordStoreBackendError>(result))) { + std::move(retry_callback).Run(std::move(result_callback)); } else { - std::move(callback).Run(result); - } -} - -void PasswordStoreProxyBackend::MaybeRetryToUpdateLoginOnFail( - const PasswordForm& form, - PasswordChangesOrErrorReply callback, - bool was_using_android_backend, - const PasswordChangesOrError& result) { - if (was_using_android_backend && - absl::holds_alternative<PasswordStoreBackendError>(result) && - absl::get<PasswordStoreBackendError>(result).recovery_type == - PasswordStoreBackendErrorRecoveryType::kUnrecoverable) { - built_in_backend_->UpdateLoginAsync(form, std::move(callback)); - } else { - std::move(callback).Run(result); + std::move(result_callback).Run(std::move(result)); } }
diff --git a/components/password_manager/core/browser/password_store_proxy_backend.h b/components/password_manager/core/browser/password_store_proxy_backend.h index 64c62f8e..382bab9e 100644 --- a/components/password_manager/core/browser/password_store_proxy_backend.h +++ b/components/password_manager/core/browser/password_store_proxy_backend.h
@@ -97,19 +97,19 @@ // data. bool UsesAndroidBackendAsMainBackend(); - // Retries to add/update login into |built_in_backend| in case of an - // unrecoverable error inside |android_backend|. |form| and - // |original_callback| are the original parameters passed to - // Add/UpdateLoginAsync. - void MaybeRetryToAddLoginOnFail(const PasswordForm& form, - PasswordChangesOrErrorReply original_callback, - bool was_using_android_backend, - PasswordChangesOrError result); - void MaybeRetryToUpdateLoginOnFail( - const PasswordForm& form, - PasswordChangesOrErrorReply original_callback, - bool was_using_android_backend, - const PasswordChangesOrError& result); + // Retries to execute operation on |built_in_backend| in case of an + // unrecoverable error inside |android_backend|. |retry_callback| is the + // pending operation with binded parameters, |result_callback| is the original + // operation callback. + // |ResultT| is the resulting type of the backend operation that will be + // passed to the result callback. Could be either |LoginsResultOrError| or + // |PasswordChangesOrError|. + template <typename ResultT> + void MaybeRetryOperation( + base::OnceCallback<void(base::OnceCallback<void(ResultT)> callback)> + retry_callback, + base::OnceCallback<void(ResultT)> result_callback, + ResultT result); PasswordStoreBackend* main_backend(); PasswordStoreBackend* shadow_backend();
diff --git a/components/password_manager/core/browser/password_store_proxy_backend_unittest.cc b/components/password_manager/core/browser/password_store_proxy_backend_unittest.cc index 352e33d..4bf6ce61 100644 --- a/components/password_manager/core/browser/password_store_proxy_backend_unittest.cc +++ b/components/password_manager/core/browser/password_store_proxy_backend_unittest.cc
@@ -16,6 +16,8 @@ #include "components/password_manager/core/browser/mock_password_store_backend.h" #include "components/password_manager/core/browser/password_form_digest.h" #include "components/password_manager/core/browser/password_manager_test_utils.h" +#include "components/password_manager/core/browser/password_store_backend.h" +#include "components/password_manager/core/browser/password_store_backend_error.h" #include "components/password_manager/core/browser/password_store_change.h" #include "components/password_manager/core/common/password_manager_features.h" #include "components/password_manager/core/common/password_manager_pref_names.h" @@ -843,6 +845,324 @@ proxy_backend().UpdateLoginAsync(CreateTestForm(), mock_reply.Get()); } +struct FallbackParam { + PasswordStoreBackendError error; + bool should_fallback; +}; + +class PasswordStoreProxyBackendTestWithFallbackParam + : public PasswordStoreProxyBackendTest, + public testing::WithParamInterface<FallbackParam> { + protected: + constexpr bool ShouldFallbackOnParam(const FallbackParam& p) { + return p.should_fallback && p.error == kUnrecoverableError; + } + + void InitFeatureListWithFallbackEnableFeatureParam( + base::test::ScopedFeatureList& feature_list, + base::FeatureParam<bool> fallback_param) { + feature_list.InitAndEnableFeatureWithParameters( + password_manager::features::kUnifiedPasswordManagerAndroid, + {{"stage", "3"}, + {fallback_param.name, GetParam().should_fallback ? "true" : "false"}}); + } +}; + +TEST_P(PasswordStoreProxyBackendTestWithFallbackParam, + RetriesAddLoginOnBuiltInBackend) { + const FallbackParam& p = GetParam(); + + base::test::ScopedFeatureList feature_list; + InitFeatureListWithFallbackEnableFeatureParam( + feature_list, password_manager::features::kFallbackOnModifyingOperations); + EnablePasswordSync(); + + base::MockCallback<PasswordChangesOrErrorReply> mock_reply; + + EXPECT_CALL(android_backend(), AddLoginAsync) + .WillOnce(WithArg<1>( + Invoke([&p](auto reply) -> void { std::move(reply).Run(p.error); }))); + const PasswordStoreChangeList changes = { + PasswordStoreChange(PasswordStoreChange::Type::ADD, CreateTestForm())}; + if (ShouldFallbackOnParam(p)) { + EXPECT_CALL(built_in_backend(), AddLoginAsync) + .WillOnce(WithArg<1>(Invoke([&changes](auto reply) -> void { + std::move(reply).Run(changes); + }))); + // Check that caller doesn't receive an error from android backend. + EXPECT_CALL(mock_reply, Run(PasswordChangesAre(changes))); + } else { + EXPECT_CALL(built_in_backend(), AddLoginAsync).Times(0); + // Check that caller gets an error from android backend. + EXPECT_CALL(mock_reply, Run(PasswordChangesOrError(p.error))); + } + proxy_backend().AddLoginAsync(CreateTestForm(), mock_reply.Get()); +} + +TEST_P(PasswordStoreProxyBackendTestWithFallbackParam, + RetriesUpdateLoginOnBuiltInBackend) { + const FallbackParam& p = GetParam(); + + base::test::ScopedFeatureList feature_list; + InitFeatureListWithFallbackEnableFeatureParam( + feature_list, password_manager::features::kFallbackOnModifyingOperations); + EnablePasswordSync(); + + base::MockCallback<PasswordChangesOrErrorReply> mock_reply; + + EXPECT_CALL(android_backend(), UpdateLoginAsync) + .WillOnce(WithArg<1>( + Invoke([&p](auto reply) -> void { std::move(reply).Run(p.error); }))); + const PasswordStoreChangeList changes = { + PasswordStoreChange(PasswordStoreChange::Type::ADD, CreateTestForm())}; + if (ShouldFallbackOnParam(p)) { + EXPECT_CALL(built_in_backend(), UpdateLoginAsync) + .WillOnce(WithArg<1>(Invoke([&changes](auto reply) -> void { + std::move(reply).Run(changes); + }))); + // Check that caller doesn't receive an error from android backend. + EXPECT_CALL(mock_reply, Run(PasswordChangesAre(changes))); + } else { + EXPECT_CALL(built_in_backend(), UpdateLoginAsync).Times(0); + // Check that caller gets an error from android backend. + EXPECT_CALL(mock_reply, Run(PasswordChangesOrError(p.error))); + } + proxy_backend().UpdateLoginAsync(CreateTestForm(), mock_reply.Get()); +} + +TEST_P(PasswordStoreProxyBackendTestWithFallbackParam, + RetriesGetAllLoginsOnBuiltInBackend) { + const FallbackParam& p = GetParam(); + + base::test::ScopedFeatureList feature_list; + InitFeatureListWithFallbackEnableFeatureParam( + feature_list, + password_manager::features::kFallbackOnNonUserAffectingReadOperations); + EnablePasswordSync(); + + base::MockCallback<LoginsOrErrorReply> mock_reply; + std::vector<std::unique_ptr<PasswordForm>> expected_logins = + CreateTestLogins(); + + EXPECT_CALL(android_backend(), GetAllLoginsAsync) + .WillOnce(WithArg<0>(Invoke([&p](LoginsOrErrorReply reply) -> void { + std::move(reply).Run(p.error); + }))); + if (ShouldFallbackOnParam(p)) { + EXPECT_CALL(built_in_backend(), GetAllLoginsAsync) + .WillOnce(WithArg<0>(Invoke([](LoginsOrErrorReply reply) -> void { + std::move(reply).Run(CreateTestLogins()); + }))); + // Check that caller doesn't receive an error from android backend. + EXPECT_CALL(mock_reply, Run(LoginsResultsOrErrorAre(&expected_logins))); + } else { + EXPECT_CALL(built_in_backend(), GetAllLoginsAsync).Times(0); + // Check that caller gets an error from android backend. + EXPECT_CALL(mock_reply, + Run(VariantWith<PasswordStoreBackendError>(p.error))); + } + proxy_backend().GetAllLoginsAsync(mock_reply.Get()); +} + +TEST_P(PasswordStoreProxyBackendTestWithFallbackParam, + RetriesGetAutofillableLoginsOnBuiltInBackend) { + const FallbackParam& p = GetParam(); + + base::test::ScopedFeatureList feature_list; + InitFeatureListWithFallbackEnableFeatureParam( + feature_list, + password_manager::features::kFallbackOnNonUserAffectingReadOperations); + EnablePasswordSync(); + + base::MockCallback<LoginsOrErrorReply> mock_reply; + std::vector<std::unique_ptr<PasswordForm>> expected_logins = + CreateTestLogins(); + + EXPECT_CALL(android_backend(), GetAutofillableLoginsAsync) + .WillOnce(WithArg<0>(Invoke([&p](LoginsOrErrorReply reply) -> void { + std::move(reply).Run(p.error); + }))); + if (ShouldFallbackOnParam(p)) { + EXPECT_CALL(built_in_backend(), GetAutofillableLoginsAsync) + .WillOnce(WithArg<0>(Invoke([](LoginsOrErrorReply reply) -> void { + std::move(reply).Run(CreateTestLogins()); + }))); + // Check that caller doesn't receive an error from android backend. + EXPECT_CALL(mock_reply, Run(LoginsResultsOrErrorAre(&expected_logins))); + } else { + EXPECT_CALL(built_in_backend(), GetAutofillableLoginsAsync).Times(0); + // Check that caller gets an error from android backend. + EXPECT_CALL(mock_reply, + Run(VariantWith<PasswordStoreBackendError>(p.error))); + } + proxy_backend().GetAutofillableLoginsAsync(mock_reply.Get()); +} + +TEST_P(PasswordStoreProxyBackendTestWithFallbackParam, + RetriesFillMatchingLoginsOnBuiltInBackend) { + const FallbackParam& p = GetParam(); + + base::test::ScopedFeatureList feature_list; + InitFeatureListWithFallbackEnableFeatureParam( + feature_list, + password_manager::features::kFallbackOnUserAffectingReadOperations); + EnablePasswordSync(); + + base::MockCallback<LoginsOrErrorReply> mock_reply; + std::vector<std::unique_ptr<PasswordForm>> expected_logins = + CreateTestLogins(); + + EXPECT_CALL(android_backend(), FillMatchingLoginsAsync) + .WillOnce(WithArg<0>(Invoke([&p](LoginsOrErrorReply reply) -> void { + std::move(reply).Run(p.error); + }))); + if (ShouldFallbackOnParam(p)) { + EXPECT_CALL(built_in_backend(), FillMatchingLoginsAsync) + .WillOnce(WithArg<0>(Invoke([](LoginsOrErrorReply reply) -> void { + std::move(reply).Run(CreateTestLogins()); + }))); + // Check that caller doesn't receive an error from android backend. + EXPECT_CALL(mock_reply, Run(LoginsResultsOrErrorAre(&expected_logins))); + } else { + EXPECT_CALL(built_in_backend(), FillMatchingLoginsAsync).Times(0); + // Check that caller gets an error from android backend. + EXPECT_CALL(mock_reply, + Run(VariantWith<PasswordStoreBackendError>(p.error))); + } + proxy_backend().FillMatchingLoginsAsync(mock_reply.Get(), + /*include_psl=*/false, + std::vector<PasswordFormDigest>()); +} + +TEST_P(PasswordStoreProxyBackendTestWithFallbackParam, + RetriesRemoveLoginOnBuiltInBackend) { + const FallbackParam& p = GetParam(); + + base::test::ScopedFeatureList feature_list; + InitFeatureListWithFallbackEnableFeatureParam( + feature_list, password_manager::features::kFallbackOnRemoveOperations); + + EnablePasswordSync(); + + base::MockCallback<PasswordChangesOrErrorReply> mock_reply; + PasswordForm form = CreateTestForm(); + PasswordStoreChangeList change_list; + change_list.emplace_back(Type::REMOVE, form); + + EXPECT_CALL(android_backend(), RemoveLoginAsync) + .WillOnce( + WithArg<1>(Invoke([&p](PasswordChangesOrErrorReply reply) -> void { + std::move(reply).Run(p.error); + }))); + + if (ShouldFallbackOnParam(p)) { + EXPECT_CALL(built_in_backend(), RemoveLoginAsync) + .WillOnce(WithArg<1>(Invoke([&change_list](auto reply) -> void { + std::move(reply).Run(change_list); + }))); + // Check that caller doesn't receive an error from android backend. + EXPECT_CALL(mock_reply, + Run(VariantWith<PasswordChanges>(Optional(change_list)))); + } else { + EXPECT_CALL(built_in_backend(), RemoveLoginAsync).Times(0); + // Check that caller gets an error from android backend. + EXPECT_CALL(mock_reply, Run(PasswordChangesOrError(p.error))); + } + proxy_backend().RemoveLoginAsync(form, mock_reply.Get()); +} + +TEST_P(PasswordStoreProxyBackendTestWithFallbackParam, + RetriesRemoveLoginByURLAndTimeOnBuiltInBackend) { + const FallbackParam& p = GetParam(); + + base::test::ScopedFeatureList feature_list; + InitFeatureListWithFallbackEnableFeatureParam( + feature_list, password_manager::features::kFallbackOnRemoveOperations); + + EnablePasswordSync(); + + base::MockCallback<PasswordChangesOrErrorReply> mock_reply; + PasswordForm form = CreateTestForm(); + PasswordStoreChangeList change_list; + change_list.emplace_back(Type::REMOVE, form); + + base::Time kStart = base::Time::FromTimeT(111111); + base::Time kEnd = base::Time::FromTimeT(22222222); + + EXPECT_CALL(android_backend(), RemoveLoginsByURLAndTimeAsync) + .WillOnce( + WithArg<4>(Invoke([&p](PasswordChangesOrErrorReply reply) -> void { + std::move(reply).Run(p.error); + }))); + + if (ShouldFallbackOnParam(p)) { + EXPECT_CALL(built_in_backend(), RemoveLoginsByURLAndTimeAsync) + .WillOnce(WithArg<4>(Invoke([&change_list](auto reply) -> void { + std::move(reply).Run(change_list); + }))); + // Check that caller doesn't receive an error from android backend. + EXPECT_CALL(mock_reply, + Run(VariantWith<PasswordChanges>(Optional(change_list)))); + } else { + EXPECT_CALL(built_in_backend(), RemoveLoginsByURLAndTimeAsync).Times(0); + // Check that caller gets an error from android backend. + EXPECT_CALL(mock_reply, Run(PasswordChangesOrError(p.error))); + } + proxy_backend().RemoveLoginsByURLAndTimeAsync( + base::BindRepeating(&FilterNoUrl), kStart, kEnd, base::DoNothing(), + mock_reply.Get()); +} + +TEST_P(PasswordStoreProxyBackendTestWithFallbackParam, + RetriesRemoveLoginCreatedBetweenOnBuiltInBackend) { + const FallbackParam& p = GetParam(); + + base::test::ScopedFeatureList feature_list; + InitFeatureListWithFallbackEnableFeatureParam( + feature_list, password_manager::features::kFallbackOnRemoveOperations); + + EnablePasswordSync(); + + base::MockCallback<PasswordChangesOrErrorReply> mock_reply; + PasswordForm form = CreateTestForm(); + PasswordStoreChangeList change_list; + change_list.emplace_back(Type::REMOVE, form); + + base::Time kStart = base::Time::FromTimeT(111111); + base::Time kEnd = base::Time::FromTimeT(22222222); + + EXPECT_CALL(android_backend(), RemoveLoginsCreatedBetweenAsync) + .WillOnce( + WithArg<2>(Invoke([&p](PasswordChangesOrErrorReply reply) -> void { + std::move(reply).Run(p.error); + }))); + + if (ShouldFallbackOnParam(p)) { + EXPECT_CALL(built_in_backend(), RemoveLoginsCreatedBetweenAsync) + .WillOnce(WithArg<2>(Invoke([&change_list](auto reply) -> void { + std::move(reply).Run(change_list); + }))); + // Check that caller doesn't receive an error from android backend. + EXPECT_CALL(mock_reply, + Run(VariantWith<PasswordChanges>(Optional(change_list)))); + } else { + EXPECT_CALL(built_in_backend(), RemoveLoginsCreatedBetweenAsync).Times(0); + // Check that caller gets an error from android backend. + EXPECT_CALL(mock_reply, Run(PasswordChangesOrError(p.error))); + } + proxy_backend().RemoveLoginsCreatedBetweenAsync(kStart, kEnd, + mock_reply.Get()); +} + +INSTANTIATE_TEST_SUITE_P( + PasswordStoreProxyBackendTest, + PasswordStoreProxyBackendTestWithFallbackParam, + testing::Values( + FallbackParam{.error = kUnrecoverableError, .should_fallback = true}, + FallbackParam{.error = kRecoverableError, .should_fallback = true}, + FallbackParam{.error = kRecoverableError, .should_fallback = false}, + FallbackParam{.error = kUnrecoverableError, .should_fallback = false})); + // Holds the main and shadow backend's logins and the expected number of common // and different logins. struct LoginsMetricsParam {
diff --git a/components/password_manager/core/browser/ui/insecure_credentials_manager.cc b/components/password_manager/core/browser/ui/insecure_credentials_manager.cc index be438da..4ae69ac5 100644 --- a/components/password_manager/core/browser/ui/insecure_credentials_manager.cc +++ b/components/password_manager/core/browser/ui/insecure_credentials_manager.cc
@@ -141,25 +141,28 @@ InsecurityMetadata(); } } - } else { - // Otherwise erase entries which aren't leaked and phished. - base::EraseIf(credentials, [](const auto& credential) { - return !credential.IsLeaked() && !credential.IsPhished(); - }); + return credentials; } - - return credentials; -} - -std::vector<CredentialUIEntry> -InsecureCredentialsManager::GetWeakCredentialEntries() const { - DCHECK(presenter_); - std::vector<CredentialUIEntry> credentials = - presenter_->GetSavedCredentials(); - base::EraseIf(credentials, [this](const auto& credential) { - return !weak_passwords_.contains(credential.password); +#if BUILDFLAG(IS_ANDROID) || BUILDFLAG(IS_IOS) + // Otherwise erase entries which aren't leaked and phished. + base::EraseIf(credentials, [](const auto& credential) { + return !credential.IsLeaked() && !credential.IsPhished(); }); return credentials; +#else + for (auto& credential : credentials) { + if (weak_passwords_.contains(credential.password)) { + credential.password_issues.insert( + {password_manager::InsecureType::kWeak, + password_manager::InsecurityMetadata( + base::Time(), password_manager::IsMuted(false))}); + } + } + base::EraseIf(credentials, [](const auto& credential) { + return credential.password_issues.empty(); + }); + return credentials; +#endif } void InsecureCredentialsManager::AddObserver(Observer* observer) { @@ -176,12 +179,12 @@ base::UmaHistogramTimes("PasswordManager.WeakCheck.Time", timer_since_weak_check_start.Elapsed()); weak_passwords_ = std::move(weak_passwords); - NotifyWeakCredentialsChanged(); + NotifyInsecureCredentialsChanged(); } void InsecureCredentialsManager::OnEdited(const PasswordForm& form) { - // The WeakCheck is a Desktop only feature for now. Disable on Mobile to avoid - // pulling in a big dependency on zxcvbn. + // The WeakCheck is a Desktop only feature for now. Disable on Mobile to + // avoid pulling in a big dependency on zxcvbn. #if !BUILDFLAG(IS_ANDROID) && !BUILDFLAG(IS_IOS) const std::u16string& password = form.password_value; if (weak_passwords_.contains(password) || !IsWeak(password)) { @@ -191,7 +194,7 @@ } weak_passwords_.insert(password); - NotifyWeakCredentialsChanged(); + NotifyInsecureCredentialsChanged(); #endif } @@ -200,7 +203,6 @@ void InsecureCredentialsManager::OnSavedPasswordsChanged( SavedPasswordsPresenter::SavedPasswordsView saved_passwords) { NotifyInsecureCredentialsChanged(); - NotifyWeakCredentialsChanged(); } void InsecureCredentialsManager::NotifyInsecureCredentialsChanged() { @@ -209,12 +211,6 @@ } } -void InsecureCredentialsManager::NotifyWeakCredentialsChanged() { - for (auto& observer : observers_) { - observer.OnWeakCredentialsChanged(); - } -} - PasswordStoreInterface& InsecureCredentialsManager::GetStoreFor( const PasswordForm& form) { return form.IsUsingAccountStore() ? *account_store_ : *profile_store_;
diff --git a/components/password_manager/core/browser/ui/insecure_credentials_manager.h b/components/password_manager/core/browser/ui/insecure_credentials_manager.h index df4b4f3..9c731a5 100644 --- a/components/password_manager/core/browser/ui/insecure_credentials_manager.h +++ b/components/password_manager/core/browser/ui/insecure_credentials_manager.h
@@ -47,7 +47,6 @@ class Observer : public base::CheckedObserver { public: virtual void OnInsecureCredentialsChanged() = 0; - virtual void OnWeakCredentialsChanged() {} }; InsecureCredentialsManager( @@ -77,9 +76,6 @@ // Returns a vector of currently insecure credentials. std::vector<CredentialUIEntry> GetInsecureCredentialEntries() const; - // Returns a vector of currently weak credentials. - std::vector<CredentialUIEntry> GetWeakCredentialEntries() const; - // Allows clients and register and de-register themselves. void AddObserver(Observer* observer); void RemoveObserver(Observer* observer); @@ -98,9 +94,6 @@ // Notifies observers when insecure credentials have changed. void NotifyInsecureCredentialsChanged(); - // Notifies observers when weak credentials have changed. - void NotifyWeakCredentialsChanged(); - // Returns the `profile_store_` or `account_store_` if `form` is stored in the // profile store of the account store accordingly. PasswordStoreInterface& GetStoreFor(const PasswordForm& form);
diff --git a/components/password_manager/core/browser/ui/insecure_credentials_manager_unittest.cc b/components/password_manager/core/browser/ui/insecure_credentials_manager_unittest.cc index 3fe3dd1..d3d6d01 100644 --- a/components/password_manager/core/browser/ui/insecure_credentials_manager_unittest.cc +++ b/components/password_manager/core/browser/ui/insecure_credentials_manager_unittest.cc
@@ -32,16 +32,14 @@ constexpr char16_t kUsername1[] = u"alice"; constexpr char16_t kUsername2[] = u"bob"; -constexpr char16_t kPassword1[] = u"f00b4r"; -constexpr char16_t kPassword216[] = u"s3cr3t"; +constexpr char16_t kPassword1[] = u"fnlsr4@cm^mdls@fkspnsg3d"; +constexpr char16_t kPassword216[] = + u"pmsFlsnoab4nsl#losb@skpfnsbkjb^klsnbs!cns"; #if !BUILDFLAG(IS_ANDROID) && !BUILDFLAG(IS_IOS) constexpr char16_t kWeakPassword1[] = u"123456"; constexpr char16_t kWeakPassword216[] = u"abcdabcdabcdabcdabcdabcdabcdabcdabcdabcda"; -constexpr char16_t kStrongPassword116[] = u"fnlsr4@cm^mdls@fkspnsg3d"; -constexpr char16_t kStrongPassword2[] = - u"pmsFlsnoab4nsl#losb@skpfnsbkjb^klsnbs!cns"; // Delay in milliseconds. constexpr int kDelay = 2; #endif // !BUILDFLAG(IS_ANDROID) && !BUILDFLAG(IS_IOS) @@ -54,7 +52,6 @@ struct MockInsecureCredentialsManagerObserver : InsecureCredentialsManager::Observer { MOCK_METHOD(void, OnInsecureCredentialsChanged, (), (override)); - MOCK_METHOD(void, OnWeakCredentialsChanged, (), (override)); }; using StrictMockInsecureCredentialsManagerObserver = @@ -145,14 +142,12 @@ {InsecureType::kLeaked, InsecurityMetadata()}); EXPECT_CALL(observer, OnInsecureCredentialsChanged); - EXPECT_CALL(observer, OnWeakCredentialsChanged); store().UpdateLogin(password_form); RunUntilIdle(); // Remove should notify, and observers should be passed an empty list. password_form.password_issues.clear(); EXPECT_CALL(observer, OnInsecureCredentialsChanged); - EXPECT_CALL(observer, OnWeakCredentialsChanged); store().UpdateLogin(password_form); RunUntilIdle(); @@ -180,27 +175,23 @@ // Adding a saved password should notify observers. EXPECT_CALL(observer, OnInsecureCredentialsChanged); - EXPECT_CALL(observer, OnWeakCredentialsChanged); store().AddLogin(saved_password); RunUntilIdle(); // Updating a saved password should notify observers. saved_password.password_value = kPassword216; EXPECT_CALL(observer, OnInsecureCredentialsChanged); - EXPECT_CALL(observer, OnWeakCredentialsChanged); store().UpdateLogin(saved_password); RunUntilIdle(); // Removing a saved password should notify observers. EXPECT_CALL(observer, OnInsecureCredentialsChanged); - EXPECT_CALL(observer, OnWeakCredentialsChanged); store().RemoveLogin(saved_password); RunUntilIdle(); // After an observer is removed it should no longer receive notifications. provider().RemoveObserver(&observer); EXPECT_CALL(observer, OnInsecureCredentialsChanged).Times(0); - EXPECT_CALL(observer, OnWeakCredentialsChanged).Times(0); store().AddLogin(saved_password); RunUntilIdle(); } @@ -340,7 +331,7 @@ AdvanceClock(base::Milliseconds(kDelay)); RunUntilIdle(); - EXPECT_THAT(provider().GetWeakCredentialEntries(), IsEmpty()); + EXPECT_THAT(provider().GetInsecureCredentialEntries(), IsEmpty()); histogram_tester().ExpectUniqueSample( "PasswordManager.WeakCheck.CheckedPasswords", 0, 1); @@ -352,8 +343,8 @@ TEST_F(InsecureCredentialsManagerTest, WeakCredentialsNotFound) { std::vector<PasswordForm> passwords = { - MakeSavedPassword(kExampleCom, kUsername1, kStrongPassword116), - MakeSavedPassword(kExampleCom, kUsername2, kStrongPassword2)}; + MakeSavedPassword(kExampleCom, kUsername1, kPassword1), + MakeSavedPassword(kExampleCom, kUsername2, kPassword216)}; store().AddLogin(passwords[0]); store().AddLogin(passwords[1]); @@ -366,7 +357,7 @@ AdvanceClock(base::Milliseconds(2 * kDelay)); RunUntilIdle(); - EXPECT_THAT(provider().GetWeakCredentialEntries(), IsEmpty()); + EXPECT_THAT(provider().GetInsecureCredentialEntries(), IsEmpty()); histogram_tester().ExpectUniqueSample( "PasswordManager.WeakCheck.CheckedPasswords", 2, 1); @@ -381,7 +372,7 @@ TEST_F(InsecureCredentialsManagerTest, DetectedWeakCredential) { std::vector<PasswordForm> passwords = { MakeSavedPassword(kExampleCom, kUsername1, kWeakPassword1), - MakeSavedPassword(kExampleCom, kUsername2, kStrongPassword116)}; + MakeSavedPassword(kExampleCom, kUsername2, kPassword216)}; store().AddLogin(passwords[0]); store().AddLogin(passwords[1]); @@ -394,7 +385,7 @@ AdvanceClock(base::Milliseconds(kDelay)); RunUntilIdle(); - EXPECT_THAT(provider().GetWeakCredentialEntries(), + EXPECT_THAT(provider().GetInsecureCredentialEntries(), ElementsAre(CredentialUIEntry(passwords[0]))); histogram_tester().ExpectUniqueSample( @@ -408,7 +399,7 @@ } // Tests that credentials with the same signon_realm and username, but different -// passwords will be both returned by GetWeakCredentialEntries(). +// passwords will be both returned by GetInsecureCredentialEntries(). TEST_F(InsecureCredentialsManagerTest, FindBothWeakCredentialsWithDifferentPasswords) { std::vector<PasswordForm> passwords = { @@ -424,7 +415,7 @@ AdvanceClock(base::Milliseconds(kDelay)); RunUntilIdle(); - EXPECT_THAT(provider().GetWeakCredentialEntries(), + EXPECT_THAT(provider().GetInsecureCredentialEntries(), ElementsAre(CredentialUIEntry(passwords[0]), CredentialUIEntry(passwords[1]))); @@ -439,7 +430,7 @@ } // Tests that credentials with the same signon_realm, username and passwords -// will be joind and GetWeakCredentialEntries() will return one credential. +// will be joind and GetInsecureCredentialEntries() will return one credential. TEST_F(InsecureCredentialsManagerTest, JoinWeakCredentialsWithTheSamePasswords) { std::vector<PasswordForm> passwords = { @@ -454,7 +445,7 @@ AdvanceClock(base::Milliseconds(kDelay)); RunUntilIdle(); - EXPECT_THAT(provider().GetWeakCredentialEntries(), + EXPECT_THAT(provider().GetInsecureCredentialEntries(), ElementsAre(CredentialUIEntry(passwords[0]))); histogram_tester().ExpectUniqueSample( @@ -470,7 +461,7 @@ TEST_F(InsecureCredentialsManagerTest, BothWeakAndCompromisedCredentialsExist) { std::vector<PasswordForm> passwords = { MakeSavedPassword(kExampleCom, kUsername1, kWeakPassword1), - MakeSavedPassword(kExampleCom, kUsername2, kStrongPassword116)}; + MakeSavedPassword(kExampleCom, kUsername2, kPassword216)}; passwords.at(0).password_issues.insert( {InsecureType::kLeaked, InsecurityMetadata()}); passwords.at(1).password_issues.insert( @@ -484,11 +475,17 @@ AdvanceClock(base::Milliseconds(kDelay)); RunUntilIdle(); - EXPECT_THAT(provider().GetWeakCredentialEntries(), - ElementsAre(CredentialUIEntry(passwords[0]))); + std::vector<CredentialUIEntry> credentials; + credentials.emplace_back(passwords[0]); + credentials.emplace_back(passwords[1]); + + credentials[0].password_issues.insert( + {password_manager::InsecureType::kWeak, + password_manager::InsecurityMetadata(base::Time(), + password_manager::IsMuted(false))}); + EXPECT_THAT(provider().GetInsecureCredentialEntries(), - ElementsAre(CredentialUIEntry(passwords[0]), - CredentialUIEntry(passwords[1]))); + ElementsAreArray(credentials)); histogram_tester().ExpectUniqueSample( "PasswordManager.WeakCheck.CheckedPasswords", 2, 1); @@ -501,7 +498,7 @@ } // Checks that for a credential that is both weak and compromised, -// GetWeakCredentialEntries and GetInsecureCredentials will return this +// GetInsecureCredentialEntries and GetInsecureCredentials will return this // credential in one instance. TEST_F(InsecureCredentialsManagerTest, SingleCredentialIsWeakAndCompromised) { std::vector<PasswordForm> passwords = { @@ -517,7 +514,7 @@ AdvanceClock(base::Milliseconds(kDelay)); RunUntilIdle(); - EXPECT_THAT(provider().GetWeakCredentialEntries(), + EXPECT_THAT(provider().GetInsecureCredentialEntries(), ElementsAre(CredentialUIEntry(passwords[0]))); EXPECT_THAT(provider().GetInsecureCredentialEntries(), ElementsAre(CredentialUIEntry(passwords[0]))); @@ -882,13 +879,23 @@ store().AddLogin(password); RunUntilIdle(); +#if BUILDFLAG(IS_ANDROID) || BUILDFLAG(IS_IOS) + // Weak passwords are filtered on Android and iOS. ASSERT_THAT(provider().GetInsecureCredentialEntries(), IsEmpty()); +#else + ASSERT_THAT(provider().GetInsecureCredentialEntries(), SizeIs(1)); +#endif EXPECT_FALSE(provider().MuteCredential(CredentialUIEntry(password))); RunUntilIdle(); +#if BUILDFLAG(IS_ANDROID) || BUILDFLAG(IS_IOS) + // Weak passwords are filtered on Android and iOS. EXPECT_THAT(provider().GetInsecureCredentialEntries(), IsEmpty()); +#else + EXPECT_THAT(provider().GetInsecureCredentialEntries(), SizeIs(1)); +#endif EXPECT_FALSE(store() .stored_passwords() .at(kExampleCom) @@ -907,13 +914,23 @@ store().AddLogin(password); RunUntilIdle(); +#if BUILDFLAG(IS_ANDROID) || BUILDFLAG(IS_IOS) + // Weak passwords are filtered on Android and iOS. ASSERT_THAT(provider().GetInsecureCredentialEntries(), IsEmpty()); +#else + ASSERT_THAT(provider().GetInsecureCredentialEntries(), SizeIs(1)); +#endif EXPECT_FALSE(provider().UnmuteCredential(CredentialUIEntry(password))); RunUntilIdle(); +#if BUILDFLAG(IS_ANDROID) || BUILDFLAG(IS_IOS) + // Weak passwords are filtered on Android and iOS. EXPECT_THAT(provider().GetInsecureCredentialEntries(), IsEmpty()); +#else + EXPECT_THAT(provider().GetInsecureCredentialEntries(), SizeIs(1)); +#endif EXPECT_TRUE(store() .stored_passwords() @@ -934,13 +951,23 @@ store().AddLogin(password); RunUntilIdle(); +#if BUILDFLAG(IS_ANDROID) || BUILDFLAG(IS_IOS) + // Reused passwords are filtered on Android and iOS. ASSERT_THAT(provider().GetInsecureCredentialEntries(), IsEmpty()); +#else + ASSERT_THAT(provider().GetInsecureCredentialEntries(), SizeIs(1)); +#endif EXPECT_FALSE(provider().MuteCredential(CredentialUIEntry(password))); RunUntilIdle(); +#if BUILDFLAG(IS_ANDROID) || BUILDFLAG(IS_IOS) + // Reused passwords are filtered on Android and iOS. EXPECT_THAT(provider().GetInsecureCredentialEntries(), IsEmpty()); +#else + EXPECT_THAT(provider().GetInsecureCredentialEntries(), SizeIs(1)); +#endif EXPECT_FALSE(store() .stored_passwords() .at(kExampleCom) @@ -959,13 +986,23 @@ store().AddLogin(password); RunUntilIdle(); +#if BUILDFLAG(IS_ANDROID) || BUILDFLAG(IS_IOS) + // Reused passwords are filtered on Android and iOS. ASSERT_THAT(provider().GetInsecureCredentialEntries(), IsEmpty()); +#else + ASSERT_THAT(provider().GetInsecureCredentialEntries(), SizeIs(1)); +#endif EXPECT_FALSE(provider().UnmuteCredential(CredentialUIEntry(password))); RunUntilIdle(); +#if BUILDFLAG(IS_ANDROID) || BUILDFLAG(IS_IOS) + // Reused passwords are filtered on Android and iOS. EXPECT_THAT(provider().GetInsecureCredentialEntries(), IsEmpty()); +#else + EXPECT_THAT(provider().GetInsecureCredentialEntries(), SizeIs(1)); +#endif EXPECT_TRUE(store() .stored_passwords() .at(kExampleCom) @@ -1027,16 +1064,16 @@ provider().StartWeakCheck(); RunUntilIdle(); - EXPECT_THAT(provider().GetWeakCredentialEntries(), + EXPECT_THAT(provider().GetInsecureCredentialEntries(), ElementsAre(CredentialUIEntry(password_form))); CredentialUIEntry original_credential(password_form), updated_credential = original_credential; - updated_credential.password = kStrongPassword116; + updated_credential.password = kPassword216; presenter().EditSavedCredentials(original_credential, updated_credential); RunUntilIdle(); - EXPECT_THAT(provider().GetWeakCredentialEntries(), IsEmpty()); + EXPECT_THAT(provider().GetInsecureCredentialEntries(), IsEmpty()); } // Test verifies that editing a weak credential to another weak credential @@ -1050,7 +1087,7 @@ provider().StartWeakCheck(); RunUntilIdle(); - EXPECT_THAT(provider().GetWeakCredentialEntries(), + EXPECT_THAT(provider().GetInsecureCredentialEntries(), ElementsAre(CredentialUIEntry(password_form))); CredentialUIEntry original_credential(password_form), @@ -1059,12 +1096,12 @@ presenter().EditSavedCredentials(original_credential, updated_credential); RunUntilIdle(); - EXPECT_THAT(provider().GetWeakCredentialEntries(), + EXPECT_THAT(provider().GetInsecureCredentialEntries(), ElementsAre(updated_credential)); } -// Verifues that GetWeakCredentialEntries() returns sorted weak credentials by -// using CreateSortKey. +// Verifues that GetInsecureCredentialEntries() returns sorted weak credentials +// by using CreateSortKey. TEST_F(InsecureCredentialsManagerTest, GetWeakCredentialsReturnsSortedData) { const std::vector<PasswordForm> password_forms = { MakeSavedPassword("http://example-a.com", u"user_a1", u"pwd"), @@ -1080,16 +1117,16 @@ provider().StartWeakCheck(); RunUntilIdle(); - EXPECT_THAT(provider().GetWeakCredentialEntries(), + EXPECT_THAT(provider().GetInsecureCredentialEntries(), ElementsAre(CredentialUIEntry(password_forms[0]), CredentialUIEntry(password_forms[1]), CredentialUIEntry(password_forms[2]), CredentialUIEntry(password_forms[3]))); } -// Verifues that GetWeakCredentialEntries() returns sorted weak credentials by -// using CreateSortKey. -TEST_F(InsecureCredentialsManagerTest, GetWeakCredentialEntries) { +// Verifues that GetInsecureCredentialEntries() returns sorted weak credentials +// by using CreateSortKey. +TEST_F(InsecureCredentialsManagerTest, GetInsecureCredentialEntries) { const std::vector<PasswordForm> password_forms = { MakeSavedPassword("http://example-a.com", u"user_a1", u"pwd"), MakeSavedPassword("http://example-a.com", u"user_a2", u"pwd")}; @@ -1100,11 +1137,12 @@ provider().StartWeakCheck(); RunUntilIdle(); - EXPECT_THAT(provider().GetWeakCredentialEntries(), + EXPECT_THAT(provider().GetInsecureCredentialEntries(), ElementsAre(CredentialUIEntry(password_forms[0]), CredentialUIEntry(password_forms[1]))); } -#endif // !BUILDFLAG(IS_ANDROID) && !BUILDFLAG(IS_IOS) + +#else TEST_F(InsecureCredentialsManagerTest, GetInsecureCredentialsFiltersWeak) { PasswordForm password1 = @@ -1125,6 +1163,8 @@ ElementsAre(CredentialUIEntry(password1))); } +#endif // !BUILDFLAG(IS_ANDROID) && !BUILDFLAG(IS_IOS) + TEST_F(InsecureCredentialsManagerTest, GetInsecureCredentialsFiltersDuplicates) { PasswordForm password1 = @@ -1259,7 +1299,7 @@ expected_form.in_store = PasswordForm::Store::kProfileStore | PasswordForm::Store::kAccountStore; - EXPECT_THAT(provider().GetWeakCredentialEntries(), + EXPECT_THAT(provider().GetInsecureCredentialEntries(), ElementsAre(CredentialUIEntry(expected_form))); }
diff --git a/components/password_manager/core/common/password_manager_features.cc b/components/password_manager/core/common/password_manager_features.cc index 20e067a0..94e573b 100644 --- a/components/password_manager/core/common/password_manager_features.cc +++ b/components/password_manager/core/common/password_manager_features.cc
@@ -326,6 +326,31 @@ extern const base::FeatureParam<std::string> kRetriableGmsApiErrors = { &kUnifiedPasswordManagerAndroid, "retriable_api_errors", ""}; +// Enables fallback to the Chrome built-in backend if the operation executed on +// the GMS Core backend returns with error. Errors listed in the +// |kIgnoredGmsApiErrors| will not fallback and will be directly returned to the +// caller to be addressed in a specific way. + +// Fallback on AddLogin and UpdateLogin operations. This is default behaviour +// since M103. +extern const base::FeatureParam<bool> kFallbackOnModifyingOperations = { + &kUnifiedPasswordManagerAndroid, "fallback_on_modifying_operations", true}; +// Fallback on RemoveLogin* operations. +extern const base::FeatureParam<bool> kFallbackOnRemoveOperations = { + &kUnifiedPasswordManagerAndroid, "fallback_on_remove_operations", false}; +// Fallback on FillMatchingLogins which is needed to perform autofill and could +// affect user experience. +extern const base::FeatureParam<bool> kFallbackOnUserAffectingReadOperations = { + &kUnifiedPasswordManagerAndroid, + "fallback_on_user_affecting_read_operations", false}; +// Fallback on GetAllLogins* and GetAutofillableLogins operations which are +// needed for certain features (e.g. PhishGuard) but do not affect the core +// experience. +extern const base::FeatureParam<bool> + kFallbackOnNonUserAffectingReadOperations = { + &kUnifiedPasswordManagerAndroid, + "fallback_on_non_user_affecting_read_operations", false}; + // The maximum possible number of reenrollments into the UPM. Needed to avoid a // patchy experience for users who experience errors in communication with // Google Mobile Services on a regular basis. @@ -336,6 +361,12 @@ // avoid wasting resources of users who have persistent errors. extern const base::FeatureParam<int> kMaxUPMReenrollmentAttempts = { &kUnifiedPasswordManagerReenrollment, "max_reenrollment_attempts", 0}; + +// Whether to ignore the 24h timeout in between auth error messages as +// well as the 30 mins distance to sync error messages. +extern const base::FeatureParam<bool> kIgnoreAuthErrorMessageTimeouts = { + &kUnifiedPasswordManagerErrorMessages, "ignore_auth_error_message_timeouts", + false}; #endif // Field trial identifier for password generation requirements.
diff --git a/components/password_manager/core/common/password_manager_features.h b/components/password_manager/core/common/password_manager_features.h index e3a7281..ccb5bfac 100644 --- a/components/password_manager/core/common/password_manager_features.h +++ b/components/password_manager/core/common/password_manager_features.h
@@ -105,6 +105,10 @@ extern const base::FeatureParam<int> kGmsApiErrorListVersion; extern const base::FeatureParam<std::string> kIgnoredGmsApiErrors; extern const base::FeatureParam<std::string> kRetriableGmsApiErrors; +extern const base::FeatureParam<bool> kFallbackOnModifyingOperations; +extern const base::FeatureParam<bool> kFallbackOnRemoveOperations; +extern const base::FeatureParam<bool> kFallbackOnUserAffectingReadOperations; +extern const base::FeatureParam<bool> kFallbackOnNonUserAffectingReadOperations; constexpr base::FeatureParam<UpmExperimentVariation>::Option kUpmExperimentVariationOption[] = { {UpmExperimentVariation::kEnableForSyncingUsers, "0"}, @@ -120,6 +124,8 @@ extern const base::FeatureParam<int> kMaxUPMReenrollments; extern const base::FeatureParam<int> kMaxUPMReenrollmentAttempts; + +extern const base::FeatureParam<bool> kIgnoreAuthErrorMessageTimeouts; #endif // Field trial and corresponding parameters.
diff --git a/components/policy/resources/policy_templates.json b/components/policy/resources/policy_templates.json index 62fac53..891c76e 100644 --- a/components/policy/resources/policy_templates.json +++ b/components/policy/resources/policy_templates.json
@@ -8060,7 +8060,7 @@ 'caption': 'Re-enable the deprecated async interface for <ph name="FILE_SYSTEM_SYNC_ACCESS_HANDLE">FileSystemSyncAccessHandle</ph> in File System Access API', 'type': 'main', 'schema': { 'type': 'boolean' }, - 'supported_on': ['chrome.*:107-110', 'chrome_os:107-110', 'android:107-110'], + 'supported_on': ['chrome.*:108-110', 'chrome_os:108-110', 'android:108-110'], 'future_on': ['fuchsia'], 'features': { 'dynamic_refresh': True, @@ -8080,7 +8080,7 @@ 'example_value': False, 'id': 1020, 'tags': [], - 'desc': '''Starting in M107, all of <ph name="FILE_SYSTEM_SYNC_ACCESS_HANDLE">FileSystemSyncAccessHandle</ph> methods will be invoked synchronously. + 'desc': '''Starting in M108, all of <ph name="FILE_SYSTEM_SYNC_ACCESS_HANDLE">FileSystemSyncAccessHandle</ph> methods will be invoked synchronously. Until M110, this policy re-enables asynchronous invocation of <ph name="FILE_SYSTEM_SYNC_ACCESS_HANDLE">FileSystemSyncAccessHandle</ph> methods. If this policy is set to Enabled, <ph name="FILE_SYSTEM_SYNC_ACCESS_HANDLE">FileSystemSyncAccessHandle</ph> methods are invoked asynchronously. If this policy is set to Disabled or not set, all of <ph name="FILE_SYSTEM_SYNC_ACCESS_HANDLE">FileSystemSyncAccessHandle</ph> methods are invoked synchronously.''', @@ -15406,6 +15406,16 @@ 'dynamic_refresh': True, 'per_profile': False, }, + 'items': [ + { + 'value': True, + 'caption': 'Do not consider the user as idle while video plays', + }, + { + 'value': False, + 'caption': 'Consider the user as idle while video plays', + }, + ], 'example_value': True, 'id': 183, 'caption': '''Specify whether video activity affects power management''', @@ -15540,6 +15550,16 @@ 'dynamic_refresh': True, 'per_profile': False, }, + 'items': [ + { + 'value': True, + 'caption': 'Start power management delays and session length limits after initial user activity', + }, + { + 'value': False, + 'caption': 'Start power management delays and session length limits at session start', + }, + ], 'example_value': True, 'id': 247, 'caption': '''Wait for initial user activity''', @@ -15837,7 +15857,22 @@ 'dynamic_refresh': True, 'per_profile': True, }, + 'items': [ + { + 'value': True, + 'caption': 'Show accessibility options in the system tray menu', + }, + { + 'value': False, + 'caption': 'Hide accessibility options in the system tray menu', + }, + { + 'value': None, + 'caption': 'Allow the user to decide', + }, + ], 'example_value': True, + 'default': None, 'id': 188, 'caption': '''Show accessibility options in system tray menu''', 'tags': [], @@ -15857,8 +15892,23 @@ 'can_be_recommended': True, 'dynamic_refresh': True, }, + 'items': [ + { + 'value': True, + 'caption': 'Show accessibility options in the login screen system tray menu', + }, + { + 'value': False, + 'caption': 'Hide accessibility options in the login screen system tray menu', + }, + { + 'value': None, + 'caption': 'Allow the user to decide', + }, + ], 'device_only': True, 'example_value': True, + 'default': None, 'id': 646, 'caption': '''Show accessibility options in system tray menu in the login screen''', 'tags': [], @@ -15879,7 +15929,22 @@ 'dynamic_refresh': True, 'per_profile': True, }, + 'items': [ + { + 'value': True, + 'caption': 'Enable large cursor', + }, + { + 'value': False, + 'caption': 'Disable large cursor', + }, + { + 'value': None, + 'caption': 'Allow the user to decide', + }, + ], 'example_value': True, + 'default': None, 'id': 211, 'caption': '''Enable large cursor''', 'tags': [], @@ -15898,7 +15963,22 @@ 'dynamic_refresh': True, 'per_profile': True, }, + 'items': [ + { + 'value': True, + 'caption': 'Enable spoken feedback', + }, + { + 'value': False, + 'caption': 'Disable spoken feedback', + }, + { + 'value': None, + 'caption': 'Allow the user to decide', + }, + ], 'example_value': True, + 'default': None, 'id': 212, 'caption': '''Enable spoken feedback''', 'tags': [], @@ -15917,7 +15997,22 @@ 'dynamic_refresh': True, 'per_profile': True, }, + 'items': [ + { + 'value': True, + 'caption': 'Enable high contrast', + }, + { + 'value': False, + 'caption': 'Disable high contrast', + }, + { + 'value': None, + 'caption': 'Allow the user to decide', + }, + ], 'example_value': True, + 'default': None, 'id': 213, 'caption': '''Enable high contrast mode''', 'tags': [], @@ -15937,7 +16032,22 @@ 'dynamic_refresh': True, 'per_profile': False, }, + 'items': [ + { + 'value': True, + 'caption': 'Enable accessibility shortcuts on the sign-in screen', + }, + { + 'value': False, + 'caption': 'Disable accessibility shortcuts on the sign-in screen', + }, + { + 'value': None, + 'caption': 'Allow the user to decide', + }, + ], 'example_value': True, + 'default': None, 'id': 661, 'caption': '''Enable accessibility features shortcuts on the login screen''', 'tags': [], @@ -15962,7 +16072,22 @@ 'dynamic_refresh': True, 'per_profile': True, }, + 'items': [ + { + 'value': True, + 'caption': 'Enable accessibility shortcuts', + }, + { + 'value': False, + 'caption': 'Disable accessibility shortcuts', + }, + { + 'value': None, + 'caption': 'Allow the user to decide', + }, + ], 'example_value': True, + 'default': None, 'id': 659, 'caption': '''Enable accessibility features shortcuts''', 'tags': [], @@ -15987,7 +16112,22 @@ 'dynamic_refresh': True, 'per_profile': True, }, + 'items': [ + { + 'value': True, + 'caption': 'Enable on-screen keyboard', + }, + { + 'value': False, + 'caption': 'Disable on-screen keyboard', + }, + { + 'value': None, + 'caption': 'Allow the user to decide', + }, + ], 'example_value': True, + 'default': None, 'id': 255, 'caption': '''Enable on-screen keyboard''', 'tags': [],
diff --git a/components/policy/test_support/fake_dmserver.cc b/components/policy/test_support/fake_dmserver.cc index 6d1e90ce..a85c38203 100644 --- a/components/policy/test_support/fake_dmserver.cc +++ b/components/policy/test_support/fake_dmserver.cc
@@ -33,6 +33,16 @@ constexpr char kPoliciesKey[] = "policies"; constexpr char kExternalPoliciesKey[] = "external_policies"; constexpr char kManagedUsersKey[] = "managed_users"; +constexpr char kDeviceAffiliationIdsKey[] = "device_affiliation_ids"; +constexpr char kUserAffiliationIdsKey[] = "user_affiliation_ids"; +constexpr char kDirectoryApiIdKey[] = "directory_api_id"; +constexpr char kRequestErrorsKey[] = "request_errors"; +constexpr char kRobotApiAuthCodeKey[] = "robot_api_auth_code"; +constexpr char kAllowSetDeviceAttributesKey[] = "allow_set_device_attributes"; +constexpr char kInitialEnrollmentStateKey[] = "initial_enrollment_state"; +constexpr char kManagementDomainKey[] = "management_domain"; +constexpr char kInitialEnrollmentModeKey[] = "initial_enrollment_mode"; +constexpr char kCurrentKeyIndexKey[] = "current_key_index"; constexpr char kPolicyUserKey[] = "policy_user"; constexpr char kDefaultPolicyBlobFilename[] = "policy.json"; @@ -239,11 +249,126 @@ } } + base::Value::List* device_affiliation_ids = + dict.FindList(kDeviceAffiliationIdsKey); + if (device_affiliation_ids) { + for (const base::Value& device_affiliation_id : *device_affiliation_ids) { + const std::string* device_affiliation_id_val = + device_affiliation_id.GetIfString(); + if (device_affiliation_id_val) { + LOG(INFO) << "Adding " << *device_affiliation_id_val + << " as a device affiliation id"; + policy_storage()->add_device_affiliation_id(*device_affiliation_id_val); + } + } + } + + base::Value::List* user_affiliation_ids = + dict.FindList(kUserAffiliationIdsKey); + if (user_affiliation_ids) { + for (const base::Value& user_affiliation_id : *user_affiliation_ids) { + const std::string* user_affiliation_id_val = + user_affiliation_id.GetIfString(); + if (user_affiliation_id_val) { + LOG(INFO) << "Adding " << *user_affiliation_id_val + << " as a user affiliation id"; + policy_storage()->add_user_affiliation_id(*user_affiliation_id_val); + } + } + } + + std::string* directory_api_id = dict.FindString(kDirectoryApiIdKey); + if (directory_api_id) { + LOG(INFO) << "Adding " << *directory_api_id << " as a directory API ID"; + policy_storage()->set_directory_api_id(*directory_api_id); + } + + if (dict.contains(kAllowSetDeviceAttributesKey)) { + absl::optional<bool> allow_set_device_attributes = + dict.FindBool(kAllowSetDeviceAttributesKey); + if (!allow_set_device_attributes.has_value()) { + base::Value* v = dict.Find(kAllowSetDeviceAttributesKey); + LOG(ERROR) + << "The allow_set_device_attributes key isn't a bool, found type " + << v->type() << ", found value " << *v; + return false; + } + policy_storage()->set_allow_set_device_attributes( + allow_set_device_attributes.value()); + } + + std::string* robot_api_auth_code = dict.FindString(kRobotApiAuthCodeKey); + if (robot_api_auth_code) { + LOG(INFO) << "Adding " << *robot_api_auth_code + << " as a robot api auth code"; + policy_storage()->set_robot_api_auth_code(*robot_api_auth_code); + } + + base::Value::Dict* request_errors = dict.FindDict(kRequestErrorsKey); + if (request_errors) { + for (auto request_error : *request_errors) { + absl::optional<int> net_error_code = request_error.second.GetIfInt(); + if (!net_error_code.has_value()) { + LOG(ERROR) << "The error code isn't an int"; + return false; + } + LOG(INFO) << "Configuring request " << request_error.first << " to error " + << net_error_code.value(); + EmbeddedPolicyTestServer::ConfigureRequestError( + request_error.first, + static_cast<net::HttpStatusCode>(net_error_code.value())); + } + } + + base::Value::Dict* initial_enrollment_state = + dict.FindDict(kInitialEnrollmentStateKey); + if (initial_enrollment_state) { + for (base::detail::dict_iterator::reference state : + *initial_enrollment_state) { + if (!state.second.is_dict()) { + LOG(ERROR) << "The current state value for key " << state.first + << " isn't a dict"; + return false; + } + base::Value::Dict& state_val = state.second.GetDict(); + std::string* management_domain = + state_val.FindString(kManagementDomainKey); + if (!management_domain) { + LOG(ERROR) << "The management_domain key isn't a string"; + return false; + } + absl::optional<int> initial_enrollment_mode = + state_val.FindInt(kInitialEnrollmentModeKey); + if (!initial_enrollment_mode.has_value()) { + LOG(ERROR) << "The initial_enrollment_mode key isn't an int"; + return false; + } + policy::PolicyStorage::InitialEnrollmentState initial_value; + initial_value.management_domain = *management_domain; + initial_value.initial_enrollment_mode = static_cast< + enterprise_management::DeviceInitialEnrollmentStateResponse:: + InitialEnrollmentMode>(initial_enrollment_mode.value()); + policy_storage()->SetInitialEnrollmentState(state.first, initial_value); + } + } + + if (dict.contains(kCurrentKeyIndexKey)) { + absl::optional<int> current_key_index = dict.FindInt(kCurrentKeyIndexKey); + if (!current_key_index.has_value()) { + base::Value* v = dict.Find(kCurrentKeyIndexKey); + LOG(ERROR) << "The current_key_index key isn't an int, found type " + << v->type() << ", found value " << *v; + return false; + } + policy_storage()->signature_provider()->set_current_key_version( + current_key_index.value()); + } + base::Value::List* policies = dict.FindList(kPoliciesKey); if (policies) { for (const base::Value& policy : *policies) { if (!policy.is_dict()) { - LOG(ERROR) << "The current policy isn't dict"; + LOG(ERROR) << "The current policy isn't a dict"; return false; } if (!SetPolicyPayload(policy.GetDict().FindString(kPolicyTypeKey), @@ -259,7 +384,7 @@ if (external_policies) { for (const base::Value& policy : *external_policies) { if (!policy.is_dict()) { - LOG(ERROR) << "The current external policy isn't dict"; + LOG(ERROR) << "The current external policy isn't a dict"; return false; } if (!SetExternalPolicyPayload( @@ -392,7 +517,7 @@ return false; } if (!value->is_dict()) { - LOG(ERROR) << "The client state file isn't dict."; + LOG(ERROR) << "The client state file isn't a dict."; return false; } base::Value::Dict& dict = value->GetDict();
diff --git a/components/policy/test_support/fake_dmserver.h b/components/policy/test_support/fake_dmserver.h index 3903010..c670d08 100644 --- a/components/policy/test_support/fake_dmserver.h +++ b/components/policy/test_support/fake_dmserver.h
@@ -21,6 +21,8 @@ message of the policies value encoded in base64. The root dictionary also contains a "policy_user" key which indicates the current user. +All the fields are described in the device_management_backend.proto +(https://source.chromium.org/chromium/chromium/src/+/main:components/policy/proto/device_management_backend.proto;l=516?q=PolicyData) Example: { @@ -50,6 +52,25 @@ "secret123456" ], "policy_user" : "tast-user@managedchrome.com", + "current_key_index": 0, + "robot_api_auth_code": "code", + "directory_api_id": "id", + "request_errors": { + "register": 500, + } + "device_affiliation_ids" : [ + "device_id" + ], + "user_affiliation_ids" : [ + "user_id" + ], + "allow_set_device_attributes" : false, + "initial_enrollment_state": { + "TEST_serial": { + "initial_enrollment_mode": 2, + "management_domain": "test-domain.com" + } + } } */
diff --git a/components/policy/test_support/fake_dmserver_unittest.cc b/components/policy/test_support/fake_dmserver_unittest.cc index b5255082..fb5ae1e9 100644 --- a/components/policy/test_support/fake_dmserver_unittest.cc +++ b/components/policy/test_support/fake_dmserver_unittest.cc
@@ -395,7 +395,23 @@ R"(ovL3N0b3JhZ2UuZ29vZ2xlYXBpcy5jb20vY2hyb21pdW1vcy10ZXN0LWFzc2V0cy1wdWJ)" R"(saWMvZW50ZXJwcmlzZS9wcmludGVycy5qc29uIn0=" } - ] + ], + "current_key_index": 1, + "robot_api_auth_code": "code", + "directory_api_id": "id", + "device_affiliation_ids" : [ + "device_id" + ], + "user_affiliation_ids" : [ + "user_id" + ], + "allow_set_device_attributes" : false, + "initial_enrollment_state": { + "TEST_serial": { + "initial_enrollment_mode": 2, + "management_domain": "test-domain.com" + } + } } )")); ASSERT_TRUE(base::WriteFile(client_state_path_, R"( @@ -442,6 +458,81 @@ "Q0ZDY1NzQ5Y2FiNWVjZDBmYTdkYjIxMWMxMmEzYjgiLCJ1cmwiOiJodHRwczovL3N0" "b3JhZ2UuZ29vZ2xlYXBpcy5jb20vY2hyb21pdW1vcy10ZXN0LWFzc2V0cy1wdWJsaW" "MvZW50ZXJwcmlzZS9wcmludGVycy5qc29uIn0="); + + int current_key_index = fake_dmserver.policy_storage() + ->signature_provider() + ->current_key_version(); + EXPECT_EQ(current_key_index, 1); + + std::string robot_api_auth_code = + fake_dmserver.policy_storage()->robot_api_auth_code(); + EXPECT_EQ(robot_api_auth_code, "code"); + + std::string directory_api_id = + fake_dmserver.policy_storage()->directory_api_id(); + EXPECT_EQ(directory_api_id, "id"); + + bool allow_set_device_attributes = + fake_dmserver.policy_storage()->allow_set_device_attributes(); + EXPECT_FALSE(allow_set_device_attributes); + + std::vector<std::string> device_affiliation_ids = + fake_dmserver.policy_storage()->device_affiliation_ids(); + EXPECT_EQ(device_affiliation_ids.size(), 1u); + EXPECT_EQ(device_affiliation_ids[0], "device_id"); + + std::vector<std::string> user_affiliation_ids = + fake_dmserver.policy_storage()->user_affiliation_ids(); + EXPECT_EQ(user_affiliation_ids.size(), 1u); + EXPECT_EQ(user_affiliation_ids[0], "user_id"); + + const policy::PolicyStorage::InitialEnrollmentState* + initial_enrollment_state = + fake_dmserver.policy_storage()->GetInitialEnrollmentState( + "TEST_serial"); + EXPECT_TRUE(initial_enrollment_state); + EXPECT_EQ(initial_enrollment_state->management_domain, "test-domain.com"); + EXPECT_EQ( + initial_enrollment_state->initial_enrollment_mode, + static_cast<enterprise_management::DeviceInitialEnrollmentStateResponse:: + InitialEnrollmentMode>(2)); +} + +TEST_F(FakeDMServerTest, HandlePolicyRequestWithCustomError_Succeeds) { + FakeDMServer fake_dmserver(policy_blob_path_.MaybeAsASCII(), + client_state_path_.MaybeAsASCII()); + EXPECT_TRUE(fake_dmserver.Start()); + + ASSERT_TRUE(base::WriteFile(policy_blob_path_, + R"( + { + "managed_users" : [ "*" ], + "policy_user" : "tast-user@managedchrome.com", + "request_errors": { "policy": 500 }, + "policies" : [ + { + "policy_type" : "google/chromeos/user", "value" : "uhMCEAE=" + } + ] + } + )")); + ASSERT_TRUE(base::WriteFile(client_state_path_, R"( + { + "fake_device_id" : { + "device_id" : "fake_device_id", + "device_token" : "fake_device_token", + "machine_name" : "fake_machine_name", + "username" : "tast-user@managedchrome.com", + "state_keys" : [ "fake_state_key" ], + "allowed_policy_types" : [ "google/chrome/extension", + "google/chromeos/user" ] + } + } + )")); + EXPECT_EQ(SendRequest(fake_dmserver.GetServiceURL(), + "/?apptype=Chrome&deviceid=fake_device_id&devicetype=2&" + "oauth_token=fake_policy_token&request=policy"), + net::HTTP_INTERNAL_SERVER_ERROR); } TEST_F(FakeDMServerTest, HandleExternalPolicyRequest_Succeeds) { @@ -542,6 +633,132 @@ net::HTTP_INTERNAL_SERVER_ERROR); } +TEST_F(FakeDMServerTest, ReadPolicyBlobFile_WithNonIntRequestError_Fails) { + FakeDMServer fake_dmserver(policy_blob_path_.MaybeAsASCII(), + client_state_path_.MaybeAsASCII()); + EXPECT_TRUE(fake_dmserver.Start()); + + ASSERT_TRUE(base::WriteFile(policy_blob_path_, R"( + { + "managed_users" : [ "*" ], + "policy_user" : "tast-user@managedchrome.com", + "request_errors": { "policy": "non int value" }, + "policies" : [ + { + "policy_type" : "google/chromeos/user", "value" : "uhMCEAE=" + } + ] + } + )")); + EXPECT_EQ(SendRequest(fake_dmserver.GetServiceURL(), + "/?apptype=Chrome&deviceid=fake_device_id&devicetype=2&" + "oauth_token=fake_policy_token&request=policy"), + net::HTTP_INTERNAL_SERVER_ERROR); +} + +TEST_F(FakeDMServerTest, + ReadPolicyBlobFile_WithNonBoolAllowSetDeviceAttributes_Fails) { + FakeDMServer fake_dmserver(policy_blob_path_.MaybeAsASCII(), + client_state_path_.MaybeAsASCII()); + EXPECT_TRUE(fake_dmserver.Start()); + + ASSERT_TRUE(base::WriteFile(policy_blob_path_, R"( + { + "managed_users" : [ "*" ], + "policy_user" : "tast-user@managedchrome.com", + "allow_set_device_attributes": { "key": "non int value" }, + "policies" : [ + { + "policy_type" : "google/chromeos/user", "value" : "uhMCEAE=" + } + ] + } + )")); + EXPECT_EQ(SendRequest(fake_dmserver.GetServiceURL(), + "/?apptype=Chrome&deviceid=fake_device_id&devicetype=2&" + "oauth_token=fake_policy_token&request=policy"), + net::HTTP_INTERNAL_SERVER_ERROR); +} + +TEST_F(FakeDMServerTest, + ReadPolicyBlobFile_WithNonStringManagementDomain_Fails) { + FakeDMServer fake_dmserver(policy_blob_path_.MaybeAsASCII(), + client_state_path_.MaybeAsASCII()); + EXPECT_TRUE(fake_dmserver.Start()); + + ASSERT_TRUE(base::WriteFile(policy_blob_path_, R"( + { + "managed_users" : [ "*" ], + "policy_user" : "tast-user@managedchrome.com", + "initial_enrollment_state": + { + "management_domain": 3, + "initial_enrollment_mode": 1 + }, + "policies" : [ + { + "policy_type" : "google/chromeos/user", "value" : "uhMCEAE=" + } + ] + } + )")); + EXPECT_EQ(SendRequest(fake_dmserver.GetServiceURL(), + "/?apptype=Chrome&deviceid=fake_device_id&devicetype=2&" + "oauth_token=fake_policy_token&request=policy"), + net::HTTP_INTERNAL_SERVER_ERROR); +} + +TEST_F(FakeDMServerTest, + ReadPolicyBlobFile_WithNonIntInitialEnrollmentMode_Fails) { + FakeDMServer fake_dmserver(policy_blob_path_.MaybeAsASCII(), + client_state_path_.MaybeAsASCII()); + EXPECT_TRUE(fake_dmserver.Start()); + + ASSERT_TRUE(base::WriteFile(policy_blob_path_, R"( + { + "managed_users" : [ "*" ], + "policy_user" : "tast-user@managedchrome.com", + "initial_enrollment_state": + { + "management_domain": "domain", + "initial_enrollment_mode": "non int value" + }, + "policies" : [ + { + "policy_type" : "google/chromeos/user", "value" : "uhMCEAE=" + } + ] + } + )")); + EXPECT_EQ(SendRequest(fake_dmserver.GetServiceURL(), + "/?apptype=Chrome&deviceid=fake_device_id&devicetype=2&" + "oauth_token=fake_policy_token&request=policy"), + net::HTTP_INTERNAL_SERVER_ERROR); +} + +TEST_F(FakeDMServerTest, ReadPolicyBlobFile_WithNonIntCurrentKeyIndex_Fails) { + FakeDMServer fake_dmserver(policy_blob_path_.MaybeAsASCII(), + client_state_path_.MaybeAsASCII()); + EXPECT_TRUE(fake_dmserver.Start()); + + ASSERT_TRUE(base::WriteFile(policy_blob_path_, R"( + { + "managed_users" : [ "*" ], + "policy_user" : "tast-user@managedchrome.com", + "current_key_index": "non int value", + "policies" : [ + { + "policy_type" : "google/chromeos/user", "value" : "uhMCEAE=" + } + ] + } + )")); + EXPECT_EQ(SendRequest(fake_dmserver.GetServiceURL(), + "/?apptype=Chrome&deviceid=fake_device_id&devicetype=2&" + "oauth_token=fake_policy_token&request=policy"), + net::HTTP_INTERNAL_SERVER_ERROR); +} + TEST_F(FakeDMServerTest, SetPolicyPayload_WithoutValueOrTypeField_Fails) { FakeDMServer fake_dmserver(policy_blob_path_.MaybeAsASCII(), client_state_path_.MaybeAsASCII());
diff --git a/components/policy/test_support/policy_storage.h b/components/policy/test_support/policy_storage.h index 56d578e..4dcb521 100644 --- a/components/policy/test_support/policy_storage.h +++ b/components/policy/test_support/policy_storage.h
@@ -10,6 +10,7 @@ #include <memory> #include <string> #include <utility> +#include <vector> #include "base/containers/flat_map.h" #include "base/containers/flat_set.h" @@ -96,6 +97,25 @@ managed_users_.insert(managed_user); } + const std::vector<std::string>& device_affiliation_ids() const { + return device_affiliation_ids_; + } + void add_device_affiliation_id(const std::string& device_affiliation_id) { + device_affiliation_ids_.emplace_back(device_affiliation_id); + } + + const std::vector<std::string>& user_affiliation_ids() const { + return user_affiliation_ids_; + } + void add_user_affiliation_id(const std::string& user_affiliation_id) { + user_affiliation_ids_.emplace_back(user_affiliation_id); + } + + const std::string& directory_api_id() const { return directory_api_id_; } + void set_directory_api_id(const std::string& directory_api_id) { + directory_api_id_ = directory_api_id; + } + std::string policy_user() const { return policy_user_; } void set_policy_user(const std::string& policy_user) { policy_user_ = policy_user; @@ -182,6 +202,12 @@ base::flat_set<std::string> managed_users_; + std::vector<std::string> device_affiliation_ids_; + + std::vector<std::string> user_affiliation_ids_; + + std::string directory_api_id_; + std::string policy_user_; std::string policy_invalidation_topic_;
diff --git a/components/policy/test_support/request_handler_for_policy.cc b/components/policy/test_support/request_handler_for_policy.cc index f41263a..dae29798 100644 --- a/components/policy/test_support/request_handler_for_policy.cc +++ b/components/policy/test_support/request_handler_for_policy.cc
@@ -187,6 +187,30 @@ if (fetch_request.signature_type() != em::PolicyFetchRequest::NONE) policy_data.set_public_key_version(signing_key_version); + if (policy_type == dm_protocol::kChromeUserPolicyType || + policy_type == dm_protocol::kChromePublicAccountPolicyType) { + std::vector<std::string> user_affiliation_ids = + policy_storage()->user_affiliation_ids(); + if (!user_affiliation_ids.empty()) { + for (const std::string& user_affiliation_id : user_affiliation_ids) { + policy_data.add_user_affiliation_ids(user_affiliation_id); + } + } + } else if (policy_type == dm_protocol::kChromeDevicePolicyType) { + std::vector<std::string> device_affiliation_ids = + policy_storage()->device_affiliation_ids(); + if (!device_affiliation_ids.empty()) { + for (const std::string& device_affiliation_id : device_affiliation_ids) { + policy_data.add_device_affiliation_ids(device_affiliation_id); + } + } + } + + std::string directory_api_id = policy_storage()->directory_api_id(); + if (!directory_api_id.empty()) { + policy_data.set_directory_api_id(directory_api_id); + } + policy_data.SerializeToString(fetch_response->mutable_policy_data()); if (fetch_request.signature_type() == em::PolicyFetchRequest::SHA1_RSA) {
diff --git a/components/prefs/testing_pref_service.h b/components/prefs/testing_pref_service.h index 81a68ea..f1628c57 100644 --- a/components/prefs/testing_pref_service.h +++ b/components/prefs/testing_pref_service.h
@@ -39,6 +39,8 @@ void SetManagedPref(const std::string& path, std::unique_ptr<base::Value> value); void SetManagedPref(const std::string& path, base::Value value); + void SetManagedPref(const std::string& path, base::Value::Dict dict); + void SetManagedPref(const std::string& path, base::Value::List list); // Clears the preference on the managed layer and fire observers if the // preference has been defined previously. @@ -48,6 +50,9 @@ const base::Value* GetSupervisedUserPref(const std::string& path) const; void SetSupervisedUserPref(const std::string& path, std::unique_ptr<base::Value> value); + void SetSupervisedUserPref(const std::string& path, base::Value value); + void SetSupervisedUserPref(const std::string& path, base::Value::Dict dict); + void SetSupervisedUserPref(const std::string& path, base::Value::List list); void RemoveSupervisedUserPref(const std::string& path); // Similar to the above, but for extension preferences. @@ -57,12 +62,17 @@ const base::Value* GetExtensionPref(const std::string& path) const; void SetExtensionPref(const std::string& path, std::unique_ptr<base::Value> value); + void SetExtensionPref(const std::string& path, base::Value value); + void SetExtensionPref(const std::string& path, base::Value::Dict dict); + void SetExtensionPref(const std::string& path, base::Value::List list); void RemoveExtensionPref(const std::string& path); // Similar to the above, but for user preferences. const base::Value* GetUserPref(const std::string& path) const; void SetUserPref(const std::string& path, std::unique_ptr<base::Value> value); void SetUserPref(const std::string& path, base::Value value); + void SetUserPref(const std::string& path, base::Value::Dict dict); + void SetUserPref(const std::string& path, base::Value::List list); void RemoveUserPref(const std::string& path); // Similar to the above, but for recommended policy preferences. @@ -70,6 +80,8 @@ void SetRecommendedPref(const std::string& path, std::unique_ptr<base::Value> value); void SetRecommendedPref(const std::string& path, base::Value value); + void SetRecommendedPref(const std::string& path, base::Value::Dict dict); + void SetRecommendedPref(const std::string& path, base::Value::List list); void RemoveRecommendedPref(const std::string& path); // Do-nothing implementation for TestingPrefService. @@ -170,6 +182,18 @@ template <class SuperPrefService, class ConstructionPrefRegistry> void TestingPrefServiceBase<SuperPrefService, ConstructionPrefRegistry>:: + SetManagedPref(const std::string& path, base::Value::Dict dict) { + SetManagedPref(path, std::make_unique<base::Value>(std::move(dict))); +} + +template <class SuperPrefService, class ConstructionPrefRegistry> +void TestingPrefServiceBase<SuperPrefService, ConstructionPrefRegistry>:: + SetManagedPref(const std::string& path, base::Value::List list) { + SetManagedPref(path, std::make_unique<base::Value>(std::move(list))); +} + +template <class SuperPrefService, class ConstructionPrefRegistry> +void TestingPrefServiceBase<SuperPrefService, ConstructionPrefRegistry>:: RemoveManagedPref(const std::string& path) { RemovePref(managed_prefs_.get(), path); } @@ -190,6 +214,24 @@ template <class SuperPrefService, class ConstructionPrefRegistry> void TestingPrefServiceBase<SuperPrefService, ConstructionPrefRegistry>:: + SetSupervisedUserPref(const std::string& path, base::Value value) { + SetSupervisedUserPref(path, base::Value::ToUniquePtrValue(std::move(value))); +} + +template <class SuperPrefService, class ConstructionPrefRegistry> +void TestingPrefServiceBase<SuperPrefService, ConstructionPrefRegistry>:: + SetSupervisedUserPref(const std::string& path, base::Value::Dict dict) { + SetSupervisedUserPref(path, std::make_unique<base::Value>(std::move(dict))); +} + +template <class SuperPrefService, class ConstructionPrefRegistry> +void TestingPrefServiceBase<SuperPrefService, ConstructionPrefRegistry>:: + SetSupervisedUserPref(const std::string& path, base::Value::List list) { + SetSupervisedUserPref(path, std::make_unique<base::Value>(std::move(list))); +} + +template <class SuperPrefService, class ConstructionPrefRegistry> +void TestingPrefServiceBase<SuperPrefService, ConstructionPrefRegistry>:: RemoveSupervisedUserPref(const std::string& path) { RemovePref(supervised_user_prefs_.get(), path); } @@ -210,6 +252,24 @@ template <class SuperPrefService, class ConstructionPrefRegistry> void TestingPrefServiceBase<SuperPrefService, ConstructionPrefRegistry>:: + SetExtensionPref(const std::string& path, base::Value value) { + SetExtensionPref(path, base::Value::ToUniquePtrValue(std::move(value))); +} + +template <class SuperPrefService, class ConstructionPrefRegistry> +void TestingPrefServiceBase<SuperPrefService, ConstructionPrefRegistry>:: + SetExtensionPref(const std::string& path, base::Value::Dict dict) { + SetExtensionPref(path, std::make_unique<base::Value>(std::move(dict))); +} + +template <class SuperPrefService, class ConstructionPrefRegistry> +void TestingPrefServiceBase<SuperPrefService, ConstructionPrefRegistry>:: + SetExtensionPref(const std::string& path, base::Value::List list) { + SetExtensionPref(path, std::make_unique<base::Value>(std::move(list))); +} + +template <class SuperPrefService, class ConstructionPrefRegistry> +void TestingPrefServiceBase<SuperPrefService, ConstructionPrefRegistry>:: RemoveExtensionPref(const std::string& path) { RemovePref(extension_prefs_.get(), path); } @@ -235,6 +295,18 @@ template <class SuperPrefService, class ConstructionPrefRegistry> void TestingPrefServiceBase<SuperPrefService, ConstructionPrefRegistry>:: + SetUserPref(const std::string& path, base::Value::Dict dict) { + SetUserPref(path, std::make_unique<base::Value>(std::move(dict))); +} + +template <class SuperPrefService, class ConstructionPrefRegistry> +void TestingPrefServiceBase<SuperPrefService, ConstructionPrefRegistry>:: + SetUserPref(const std::string& path, base::Value::List list) { + SetUserPref(path, std::make_unique<base::Value>(std::move(list))); +} + +template <class SuperPrefService, class ConstructionPrefRegistry> +void TestingPrefServiceBase<SuperPrefService, ConstructionPrefRegistry>:: RemoveUserPref(const std::string& path) { RemovePref(user_prefs_.get(), path); } @@ -262,6 +334,18 @@ template <class SuperPrefService, class ConstructionPrefRegistry> void TestingPrefServiceBase<SuperPrefService, ConstructionPrefRegistry>:: + SetRecommendedPref(const std::string& path, base::Value::Dict dict) { + SetRecommendedPref(path, std::make_unique<base::Value>(std::move(dict))); +} + +template <class SuperPrefService, class ConstructionPrefRegistry> +void TestingPrefServiceBase<SuperPrefService, ConstructionPrefRegistry>:: + SetRecommendedPref(const std::string& path, base::Value::List list) { + SetRecommendedPref(path, std::make_unique<base::Value>(std::move(list))); +} + +template <class SuperPrefService, class ConstructionPrefRegistry> +void TestingPrefServiceBase<SuperPrefService, ConstructionPrefRegistry>:: RemoveRecommendedPref(const std::string& path) { RemovePref(recommended_prefs_.get(), path); }
diff --git a/components/proxy_config/pref_proxy_config_tracker_impl.cc b/components/proxy_config/pref_proxy_config_tracker_impl.cc index f65ad6a..61f524e0 100644 --- a/components/proxy_config/pref_proxy_config_tracker_impl.cc +++ b/components/proxy_config/pref_proxy_config_tracker_impl.cc
@@ -265,7 +265,7 @@ const base::Value::Dict& dict = pref_service->GetDict(proxy_config::prefs::kProxy); - ProxyConfigDictionary proxy_dict(base::Value(dict.Clone())); + ProxyConfigDictionary proxy_dict(dict.Clone()); if (PrefConfigToNetConfig(proxy_dict, config)) { if (!pref->IsUserModifiable() || pref->HasUserSetting()) {
diff --git a/components/proxy_config/proxy_config_dictionary.cc b/components/proxy_config/proxy_config_dictionary.cc index 102fc93..e2c6ce3 100644 --- a/components/proxy_config/proxy_config_dictionary.cc +++ b/components/proxy_config/proxy_config_dictionary.cc
@@ -33,10 +33,8 @@ } // namespace -ProxyConfigDictionary::ProxyConfigDictionary(base::Value dict) - : dict_(std::move(dict)) { - DCHECK(dict_.is_dict()); -} +ProxyConfigDictionary::ProxyConfigDictionary(base::Value::Dict dict) + : dict_(std::move(dict)) {} ProxyConfigDictionary::ProxyConfigDictionary(ProxyConfigDictionary&& other) { dict_ = std::move(other.dict_); @@ -45,7 +43,7 @@ ProxyConfigDictionary::~ProxyConfigDictionary() = default; bool ProxyConfigDictionary::GetMode(ProxyPrefs::ProxyMode* out) const { - const base::Value* mode_value = dict_.FindKey(kProxyMode); + const base::Value* mode_value = dict_.Find(kProxyMode); if (!mode_value || !mode_value->is_string()) return false; std::string mode_str = mode_value->GetString(); @@ -57,7 +55,7 @@ } bool ProxyConfigDictionary::GetPacMandatory(bool* out) const { - const base::Value* value = dict_.FindKey(kProxyPacMandatory); + const base::Value* value = dict_.Find(kProxyPacMandatory); if (!value || !value->is_bool()) { *out = false; return false; @@ -75,34 +73,35 @@ } bool ProxyConfigDictionary::HasBypassList() const { - return dict_.FindKey(kProxyBypassList); + return dict_.Find(kProxyBypassList); } -const base::Value& ProxyConfigDictionary::GetDictionary() const { +const base::Value::Dict& ProxyConfigDictionary::GetDictionary() const { return dict_; } // static -base::Value ProxyConfigDictionary::CreateDirect() { +base::Value::Dict ProxyConfigDictionary::CreateDirect() { return CreateDictionary(ProxyPrefs::MODE_DIRECT, std::string(), false, std::string(), std::string()); } // static -base::Value ProxyConfigDictionary::CreateAutoDetect() { +base::Value::Dict ProxyConfigDictionary::CreateAutoDetect() { return CreateDictionary(ProxyPrefs::MODE_AUTO_DETECT, std::string(), false, std::string(), std::string()); } // static -base::Value ProxyConfigDictionary::CreatePacScript(const std::string& pac_url, - bool pac_mandatory) { +base::Value::Dict ProxyConfigDictionary::CreatePacScript( + const std::string& pac_url, + bool pac_mandatory) { return CreateDictionary(ProxyPrefs::MODE_PAC_SCRIPT, pac_url, pac_mandatory, std::string(), std::string()); } // static -base::Value ProxyConfigDictionary::CreateFixedServers( +base::Value::Dict ProxyConfigDictionary::CreateFixedServers( const std::string& proxy_server, const std::string& bypass_list) { if (!proxy_server.empty()) { @@ -114,28 +113,28 @@ } // static -base::Value ProxyConfigDictionary::CreateSystem() { +base::Value::Dict ProxyConfigDictionary::CreateSystem() { return CreateDictionary(ProxyPrefs::MODE_SYSTEM, std::string(), false, std::string(), std::string()); } // static -base::Value ProxyConfigDictionary::CreateDictionary( +base::Value::Dict ProxyConfigDictionary::CreateDictionary( ProxyPrefs::ProxyMode mode, const std::string& pac_url, bool pac_mandatory, const std::string& proxy_server, const std::string& bypass_list) { - base::Value dict(base::Value::Type::DICTIONARY); - dict.SetKey(kProxyMode, base::Value(ProxyModeToString(mode))); + base::Value::Dict dict; + dict.Set(kProxyMode, base::Value(ProxyModeToString(mode))); if (!pac_url.empty()) { - dict.SetKey(kProxyPacUrl, base::Value(pac_url)); - dict.SetKey(kProxyPacMandatory, base::Value(pac_mandatory)); + dict.Set(kProxyPacUrl, base::Value(pac_url)); + dict.Set(kProxyPacMandatory, base::Value(pac_mandatory)); } if (!proxy_server.empty()) - dict.SetKey(kProxyServer, base::Value(proxy_server)); + dict.Set(kProxyServer, base::Value(proxy_server)); if (!bypass_list.empty()) - dict.SetKey(kProxyBypassList, base::Value(bypass_list)); + dict.Set(kProxyBypassList, base::Value(bypass_list)); return dict; } @@ -158,7 +157,7 @@ } bool ProxyConfigDictionary::GetString(const char* key, std::string* out) const { - const base::Value* value = dict_.FindKey(key); + const base::Value* value = dict_.Find(key); if (!value || !value->is_string()) { *out = ""; return false;
diff --git a/components/proxy_config/proxy_config_dictionary.h b/components/proxy_config/proxy_config_dictionary.h index 79243c3..6f65a50 100644 --- a/components/proxy_config/proxy_config_dictionary.h +++ b/components/proxy_config/proxy_config_dictionary.h
@@ -28,7 +28,7 @@ class PROXY_CONFIG_EXPORT ProxyConfigDictionary { public: // Takes ownership of |dict| (|dict| will be moved to |dict_|). - explicit ProxyConfigDictionary(base::Value dict); + explicit ProxyConfigDictionary(base::Value::Dict dict); ProxyConfigDictionary(ProxyConfigDictionary&& other); ProxyConfigDictionary(const ProxyConfigDictionary&) = delete; @@ -43,15 +43,15 @@ bool GetBypassList(std::string* out) const; bool HasBypassList() const; - const base::Value& GetDictionary() const; + const base::Value::Dict& GetDictionary() const; - static base::Value CreateDirect(); - static base::Value CreateAutoDetect(); - static base::Value CreatePacScript(const std::string& pac_url, - bool pac_mandatory); - static base::Value CreateFixedServers(const std::string& proxy_server, - const std::string& bypass_list); - static base::Value CreateSystem(); + static base::Value::Dict CreateDirect(); + static base::Value::Dict CreateAutoDetect(); + static base::Value::Dict CreatePacScript(const std::string& pac_url, + bool pac_mandatory); + static base::Value::Dict CreateFixedServers(const std::string& proxy_server, + const std::string& bypass_list); + static base::Value::Dict CreateSystem(); // Encodes the proxy server as "<url-scheme>=<proxy-scheme>://<proxy>". // Used to generate the |proxy_server| arg for CreateFixedServers(). @@ -62,13 +62,13 @@ private: bool GetString(const char* key, std::string* out) const; - static base::Value CreateDictionary(ProxyPrefs::ProxyMode mode, - const std::string& pac_url, - bool pac_mandatory, - const std::string& proxy_server, - const std::string& bypass_list); + static base::Value::Dict CreateDictionary(ProxyPrefs::ProxyMode mode, + const std::string& pac_url, + bool pac_mandatory, + const std::string& proxy_server, + const std::string& bypass_list); - base::Value dict_; + base::Value::Dict dict_; }; #endif // COMPONENTS_PROXY_CONFIG_PROXY_CONFIG_DICTIONARY_H_
diff --git a/components/proxy_config/proxy_policy_handler.cc b/components/proxy_config/proxy_policy_handler.cc index f7d23a5..0aeff68 100644 --- a/components/proxy_config/proxy_policy_handler.cc +++ b/components/proxy_config/proxy_policy_handler.cc
@@ -236,22 +236,23 @@ return; } + auto set_proxy_pref_value = [&prefs](base::Value::Dict dict) { + prefs->SetValue(proxy_config::prefs::kProxy, base::Value(std::move(dict))); + }; + switch (proxy_mode) { case ProxyPrefs::MODE_DIRECT: - prefs->SetValue(proxy_config::prefs::kProxy, - ProxyConfigDictionary::CreateDirect()); + set_proxy_pref_value(ProxyConfigDictionary::CreateDirect()); break; case ProxyPrefs::MODE_AUTO_DETECT: - prefs->SetValue(proxy_config::prefs::kProxy, - ProxyConfigDictionary::CreateAutoDetect()); + set_proxy_pref_value(ProxyConfigDictionary::CreateAutoDetect()); break; case ProxyPrefs::MODE_PAC_SCRIPT: { if (pac_url && pac_url->is_string()) { bool mandatory = pac_mandatory && pac_mandatory->GetIfBool().value_or(false); - prefs->SetValue(proxy_config::prefs::kProxy, - ProxyConfigDictionary::CreatePacScript( - pac_url->GetString(), mandatory)); + set_proxy_pref_value(ProxyConfigDictionary::CreatePacScript( + pac_url->GetString(), mandatory)); } else { NOTREACHED(); } @@ -259,18 +260,15 @@ } case ProxyPrefs::MODE_FIXED_SERVERS: { if (server->is_string()) { - prefs->SetValue( - proxy_config::prefs::kProxy, - ProxyConfigDictionary::CreateFixedServers( - server->GetString(), bypass_list && bypass_list->is_string() - ? bypass_list->GetString() - : std::string())); + set_proxy_pref_value(ProxyConfigDictionary::CreateFixedServers( + server->GetString(), bypass_list && bypass_list->is_string() + ? bypass_list->GetString() + : std::string())); } break; } case ProxyPrefs::MODE_SYSTEM: - prefs->SetValue(proxy_config::prefs::kProxy, - ProxyConfigDictionary::CreateSystem()); + set_proxy_pref_value(ProxyConfigDictionary::CreateSystem()); break; case ProxyPrefs::kModeCount: NOTREACHED();
diff --git a/components/proxy_config/proxy_policy_handler_unittest.cc b/components/proxy_config/proxy_policy_handler_unittest.cc index 80562fd..882903c 100644 --- a/components/proxy_config/proxy_policy_handler_unittest.cc +++ b/components/proxy_config/proxy_policy_handler_unittest.cc
@@ -65,7 +65,7 @@ const base::Value* value = nullptr; ASSERT_TRUE(store_->GetValue(proxy_config::prefs::kProxy, &value)); ASSERT_TRUE(value->is_dict()); - ProxyConfigDictionary dict(value->Clone()); + ProxyConfigDictionary dict(value->GetDict().Clone()); std::string s; bool b; if (expected_proxy_server.empty()) {
diff --git a/components/services/print_compositor/public/mojom/print_compositor.mojom b/components/services/print_compositor/public/mojom/print_compositor.mojom index 24f85945..fa8f7887 100644 --- a/components/services/print_compositor/public/mojom/print_compositor.mojom +++ b/components/services/print_compositor/public/mojom/print_compositor.mojom
@@ -15,8 +15,6 @@ [ServiceSandbox=sandbox.mojom.Sandbox.kPrintCompositor] interface PrintCompositor { // The status of composition and conversion execution. - // These values are persisted to logs. Entries should not be renumbered and - // numeric values should never be reused. enum Status { kSuccess = 0, kHandleMapError = 1,
diff --git a/components/services/screen_ai/proto/proto_convertor.cc b/components/services/screen_ai/proto/proto_convertor.cc index a99c5791..e29a5b38 100644 --- a/components/services/screen_ai/proto/proto_convertor.cc +++ b/components/services/screen_ai/proto/proto_convertor.cc
@@ -223,7 +223,7 @@ inner_text += " "; ++word_length; } - inline_text_box.SetName(inner_text); + inline_text_box.SetNameChecked(inner_text); std::vector<int32_t> word_starts = inline_text_box.GetIntListAttribute( ax::mojom::IntListAttribute::kWordStarts); @@ -370,7 +370,7 @@ SerializeBoundingBox(line_box.bounding_box(), parent_node.id, line_box_node); // `ax::mojom::NameFrom` should be set to the correct value based on the // role. - line_box_node.SetName(line_box.utf8_string()); + line_box_node.SetNameChecked(line_box.utf8_string()); if (!line_box.language().empty()) { // TODO(nektar): Only set language if different from parent node (i.e. the // page node), in order to minimize memory usage.
diff --git a/components/sync/trusted_vault/standalone_trusted_vault_backend.cc b/components/sync/trusted_vault/standalone_trusted_vault_backend.cc index 99e45e9b..681d7e12 100644 --- a/components/sync/trusted_vault/standalone_trusted_vault_backend.cc +++ b/components/sync/trusted_vault/standalone_trusted_vault_backend.cc
@@ -391,8 +391,8 @@ // A persistent auth error could have just been resolved. if (had_persistent_auth_error_before && !has_persistent_auth_error) { - // TODO(crbug.com/1368591): Pending recovery methods may need to be - // processed here. + MaybeProcessPendingTrustedRecoveryMethod(); + MaybeRegisterDevice(); // |degraded_recoverability_handler_| is null unless // |kSyncTrustedVaultPeriodicDegradedRecoverabilityPolling| is set. @@ -413,7 +413,6 @@ RemoveNonPrimaryAccountKeysIfMarkedForDeletion(); if (!primary_account_.has_value()) { - DCHECK(!pending_trusted_recovery_method_.has_value()); return; } @@ -549,7 +548,7 @@ return; } - if (!primary_account_.has_value()) { + if (!primary_account_.has_value() || has_persistent_auth_error_) { // Defer until SetPrimaryAccount() gets called. pending_trusted_recovery_method_ = PendingTrustedRecoveryMethod(); pending_trusted_recovery_method_->gaia_id = gaia_id; @@ -771,9 +770,9 @@ } void StandaloneTrustedVaultBackend::MaybeProcessPendingTrustedRecoveryMethod() { - DCHECK(primary_account_.has_value()); - - if (!pending_trusted_recovery_method_.has_value()) { + if (!primary_account_.has_value() || has_persistent_auth_error_ || + !pending_trusted_recovery_method_.has_value() || + pending_trusted_recovery_method_->gaia_id != primary_account_->gaia) { return; } @@ -784,6 +783,8 @@ AddTrustedRecoveryMethod(recovery_method.gaia_id, recovery_method.public_key, recovery_method.method_type_hint, std::move(recovery_method.completion_callback)); + + DCHECK(!pending_trusted_recovery_method_.has_value()); } void StandaloneTrustedVaultBackend::OnDeviceRegistered(
diff --git a/components/sync/trusted_vault/standalone_trusted_vault_backend_unittest.cc b/components/sync/trusted_vault/standalone_trusted_vault_backend_unittest.cc index 80100b3..0373f6b0 100644 --- a/components/sync/trusted_vault/standalone_trusted_vault_backend_unittest.cc +++ b/components/sync/trusted_vault/standalone_trusted_vault_backend_unittest.cc
@@ -770,6 +770,24 @@ TrustedVaultDeviceRegistrationStateForUMA:: kAttemptingRegistrationWithPersistentAuthError, /*expected_bucket_count=*/1); + + Mock::VerifyAndClearExpectations(connection()); + + // When the auth error is resolved, the registration should be retried. + EXPECT_CALL(*connection(), + RegisterAuthenticationFactor( + Eq(account_info), ElementsAre(kVaultKey), kLastKeyVersion, _, + AuthenticationFactorType::kPhysicalDevice, + /*authentication_factor_type_hint=*/Eq(absl::nullopt), _)); + + base::HistogramTester histogram_tester2; + backend()->SetPrimaryAccount(account_info, + /*has_persistent_auth_error=*/false); + + // The second attempt should NOT have logged the histogram, following the + // histogram's definition that it should be logged once. + histogram_tester2.ExpectTotalCount("Sync.TrustedVaultDeviceRegistrationState", + /*count=*/0); } TEST_F(StandaloneTrustedVaultBackendTest, @@ -1552,6 +1570,67 @@ .Run(TrustedVaultRegistrationStatus::kSuccess); } +TEST_F(StandaloneTrustedVaultBackendTest, + ShouldDeferTrustedRecoveryMethodUntilPersistentAuthErrorFixed) { + const std::vector<std::vector<uint8_t>> kVaultKeys = {{1, 2, 3}}; + const int kLastKeyVersion = 1; + const std::vector<uint8_t> kPublicKey = + SecureBoxKeyPair::GenerateRandom()->public_key().ExportToBytes(); + const CoreAccountInfo account_info = MakeAccountInfoWithGaiaId("user"); + const int kMethodTypeHint = 7; + + // Mimic device previously registered with some keys. + StoreKeysAndMimicDeviceRegistration(kVaultKeys, kLastKeyVersion, + account_info); + + // Mimic entering a persistent auth error. + backend()->SetPrimaryAccount(account_info, + /*has_persistent_auth_error=*/true); + + // No request should be issued while there is a persistent auth error. + base::MockCallback<base::OnceClosure> completion_callback; + EXPECT_CALL(*connection(), RegisterAuthenticationFactor).Times(0); + backend()->AddTrustedRecoveryMethod(account_info.gaia, kPublicKey, + kMethodTypeHint, + completion_callback.Get()); + + EXPECT_TRUE(backend()->HasPendingTrustedRecoveryMethodForTesting()); + + // Upon resolving the auth error, the request should be issued. + TrustedVaultConnection::RegisterAuthenticationFactorCallback + registration_callback; + EXPECT_CALL( + *connection(), + RegisterAuthenticationFactor( + Eq(account_info), Eq(kVaultKeys), kLastKeyVersion, + PublicKeyWhenExportedEq(kPublicKey), + AuthenticationFactorType::kUnspecified, Eq(kMethodTypeHint), _)) + .WillOnce([&](const CoreAccountInfo&, + const std::vector<std::vector<uint8_t>>&, int, + const SecureBoxPublicKey& device_public_key, + AuthenticationFactorType, absl::optional<int>, + TrustedVaultConnection::RegisterAuthenticationFactorCallback + callback) { + registration_callback = std::move(callback); + // Note: TrustedVaultConnection::Request doesn't support + // cancellation, so these tests don't cover the contract that + // caller should store Request object until it's completed or need + // to be cancelled. + return std::make_unique<TrustedVaultConnection::Request>(); + }); + backend()->SetPrimaryAccount(account_info, + /*has_persistent_auth_error=*/false); + + // The operation should be in flight. + EXPECT_FALSE(backend()->HasPendingTrustedRecoveryMethodForTesting()); + ASSERT_FALSE(registration_callback.is_null()); + + // Mimic successful completion of the request. + EXPECT_CALL(completion_callback, Run()); + std::move(registration_callback) + .Run(TrustedVaultRegistrationStatus::kSuccess); +} + TEST_F(StandaloneTrustedVaultBackendTest, ShouldVerifyRegistration) { base::test::ScopedFeatureList scoped_feature_list; scoped_feature_list.InitAndEnableFeature(
diff --git a/components/test/data/history/TopSites.v5.sql b/components/test/data/history/TopSites.v5.sql new file mode 100644 index 0000000..b38a963 --- /dev/null +++ b/components/test/data/history/TopSites.v5.sql
@@ -0,0 +1,12 @@ +-- components_unittests --gtest_filter=TopSitesDatabaseTest.Version5 +-- +-- .dump of a version 5 "Top Sites" database. +BEGIN TRANSACTION; +CREATE TABLE meta(key LONGVARCHAR NOT NULL UNIQUE PRIMARY KEY, value LONGVARCHAR); +INSERT INTO "meta" VALUES('version','5'); +INSERT INTO "meta" VALUES('last_compatible_version','5'); +CREATE TABLE top_sites (url TEXT NOT NULL PRIMARY KEY,url_rank INTEGER NOT NULL,title TEXT NOT NULL); +INSERT INTO "top_sites" VALUES('http://www.google.com/chrome/intl/en/welcome.html',1,'Welcome to Chromium'); +INSERT INTO "top_sites" VALUES('https://chrome.google.com/webstore?hl=en',2,'Chrome Web Store'); +INSERT INTO "top_sites" VALUES('http://www.google.com/',0,'Google'); +COMMIT;
diff --git a/components/translate/core/browser/translate_infobar_delegate_unittest.cc b/components/translate/core/browser/translate_infobar_delegate_unittest.cc index d1df515b..d612a5fc 100644 --- a/components/translate/core/browser/translate_infobar_delegate_unittest.cc +++ b/components/translate/core/browser/translate_infobar_delegate_unittest.cc
@@ -21,7 +21,6 @@ #include "components/translate/core/browser/mock_translate_driver.h" #include "components/translate/core/browser/mock_translate_ranker.h" #include "components/translate/core/browser/translate_client.h" -#include "components/translate/core/browser/translate_infobar_delegate.h" #include "components/translate/core/browser/translate_manager.h" #include "components/translate/core/browser/translate_pref_names.h" #include "components/translate/core/browser/translate_prefs.h"
diff --git a/components/translate/core/browser/translate_manager.cc b/components/translate/core/browser/translate_manager.cc index 7a7e438..827ad4b 100644 --- a/components/translate/core/browser/translate_manager.cc +++ b/components/translate/core/browser/translate_manager.cc
@@ -324,13 +324,39 @@ return true; } -void TranslateManager::ShowTranslateUI(bool auto_translate, +void TranslateManager::ShowTranslateUI(const std::string& target_lang, + bool auto_translate, bool triggered_from_menu) { // If a translation is in progress, do nothing. if (language_state_.translation_pending()) { return; } + std::unique_ptr<TranslatePrefs> translate_prefs( + translate_client_->GetTranslatePrefs()); + const std::string source_code = TranslateDownloadManager::GetLanguageCode( + language_state_.source_language()); + bool is_translated = language_state_.IsPageTranslated() && + target_lang == language_state_.current_language(); + language_state_.SetTranslateEnabled(true); + const TranslateStep step = is_translated ? TRANSLATE_STEP_AFTER_TRANSLATE + : TRANSLATE_STEP_BEFORE_TRANSLATE; + // Translate the page if it has not been translated and manual translate + // should trigger translation automatically. Otherwise, only show the infobar. + if (auto_translate && !is_translated) { + TranslatePage( + source_code, target_lang, triggered_from_menu, + GetActiveTranslateMetricsLogger()->GetNextManualTranslationType( + triggered_from_menu)); + return; + } + translate_client_->ShowTranslateUI(step, source_code, target_lang, + TranslateErrors::NONE, + triggered_from_menu); +} + +void TranslateManager::ShowTranslateUI(bool auto_translate, + bool triggered_from_menu) { std::unique_ptr<TranslatePrefs> translate_prefs( translate_client_->GetTranslatePrefs()); const std::string source_code = TranslateDownloadManager::GetLanguageCode( @@ -338,24 +364,7 @@ const std::string target_lang = GetManualTargetLanguage( source_code, language_state_, translate_prefs.get(), language_model_); - language_state_.SetTranslateEnabled(true); - - const TranslateStep step = language_state_.IsPageTranslated() - ? TRANSLATE_STEP_AFTER_TRANSLATE - : TRANSLATE_STEP_BEFORE_TRANSLATE; - // Translate the page if it has not been translated and manual translate - // should trigger translation automatically. Otherwise, only show the infobar. - if (auto_translate && !language_state_.IsPageTranslated()) { - TranslatePage( - source_code, target_lang, triggered_from_menu, - GetActiveTranslateMetricsLogger()->GetNextManualTranslationType( - triggered_from_menu)); - return; - } - - translate_client_->ShowTranslateUI(step, source_code, target_lang, - TranslateErrors::NONE, - triggered_from_menu); + ShowTranslateUI(target_lang, auto_translate, triggered_from_menu); } void TranslateManager::TranslatePage(const std::string& original_source_lang,
diff --git a/components/translate/core/browser/translate_manager.h b/components/translate/core/browser/translate_manager.h index 320c7c0..4b8e3e2 100644 --- a/components/translate/core/browser/translate_manager.h +++ b/components/translate/core/browser/translate_manager.h
@@ -135,6 +135,13 @@ void ShowTranslateUI(bool auto_translate = false, bool triggered_from_menu = false); + // Show the translation UI with the target language enforced to |target_lang|. + // If |auto_translate| is true the page gets translated to the target + // language. + void ShowTranslateUI(const std::string& target_lang, + bool auto_translate = false, + bool triggered_from_menu = false); + // Returns true iff the current page could be manually translated. // Logging should only be performed when this method is called to show the // translate menu item.
diff --git a/components/translate/core/browser/translate_manager_unittest.cc b/components/translate/core/browser/translate_manager_unittest.cc index 3b587c3..9f24c92 100644 --- a/components/translate/core/browser/translate_manager_unittest.cc +++ b/components/translate/core/browser/translate_manager_unittest.cc
@@ -9,6 +9,7 @@ #include "base/containers/contains.h" #include "base/json/json_reader.h" #include "base/memory/raw_ptr.h" +#include "base/metrics/metrics_hashes.h" #include "base/run_loop.h" #include "base/test/metrics/histogram_tester.h" #include "base/test/scoped_feature_list.h" @@ -52,6 +53,8 @@ const char kInitiationStatusName[] = "Translate.InitiationStatus.v2"; const char kMenuTranslationIsAvailableName[] = "Translate.MenuTranslation.IsAvailable"; +const char kTranslateSourceLanguageName[] = "Translate.SourceLanguage"; +const char kTranslateTargetLanguageName[] = "Translate.TargetLanguage"; // Overrides NetworkChangeNotifier, simulating connection type changes // for tests. @@ -1427,7 +1430,7 @@ // update the TranslateManager after a translation is performed. } -TEST_F(TranslateManagerTest, ShowTranslateUI) { +TEST_F(TranslateManagerTest, ShowTranslateUI_NoTranslation) { manager_->set_application_locale("en"); mock_language_model_.details = { MockLanguageModel::LanguageDetails("de", 1.0), @@ -1457,6 +1460,115 @@ histogram_tester.ExpectTotalCount(kInitiationStatusName, 0); } +TEST_F(TranslateManagerTest, ShowTranslateUI_Translation) { + manager_->set_application_locale("en"); + mock_language_model_.details = { + MockLanguageModel::LanguageDetails("de", 1.0), + }; + language::AcceptLanguagesService accept_languages(&prefs_, + accept_languages_prefs); + ON_CALL(mock_translate_client_, IsTranslatableURL(GURL::EmptyGURL())) + .WillByDefault(Return(true)); + ON_CALL(mock_translate_client_, GetAcceptLanguagesService()) + .WillByDefault(Return(&accept_languages)); + EXPECT_CALL( + mock_translate_client_, + ShowTranslateUI(translate::TRANSLATE_STEP_TRANSLATING, "en", "de", + TranslateErrors::NONE, false /* triggered_from_menu */)) + .WillOnce(Return(true)); + translate_manager_ = std::make_unique<TranslateManager>( + &mock_translate_client_, &mock_translate_ranker_, &mock_language_model_); + + base::HistogramTester histogram_tester; + prefs_.SetBoolean(prefs::kOfferTranslateEnabled, true); + translate_manager_->GetLanguageState()->LanguageDetermined("en", true); + network_notifier_.SimulateOnline(); + + translate_manager_->ShowTranslateUI(/* auto_translate= */ true); + + // TranslateManager::ShowTranslateUI should call translation. + histogram_tester.ExpectTotalCount(kTranslateSourceLanguageName, 1); + histogram_tester.ExpectBucketCount(kTranslateSourceLanguageName, + base::HashMetricName("en"), 1); + histogram_tester.ExpectTotalCount(kTranslateTargetLanguageName, 1); + histogram_tester.ExpectBucketCount(kTranslateTargetLanguageName, + base::HashMetricName("de"), 1); +} + +TEST_F(TranslateManagerTest, + ShowTranslateUI_ExplicitTargetLanguageTranslation) { + manager_->set_application_locale("en"); + mock_language_model_.details = { + MockLanguageModel::LanguageDetails("de", 1.0), + }; + ON_CALL(mock_translate_client_, IsTranslatableURL(GURL::EmptyGURL())) + .WillByDefault(Return(true)); + language::AcceptLanguagesService accept_languages(&prefs_, + accept_languages_prefs); + ON_CALL(mock_translate_client_, GetAcceptLanguagesService()) + .WillByDefault(Return(&accept_languages)); + EXPECT_CALL( + mock_translate_client_, + ShowTranslateUI(translate::TRANSLATE_STEP_TRANSLATING, "en", "pl", + TranslateErrors::NONE, false /* triggered_from_menu */)) + .WillOnce(Return(true)); + + translate_manager_ = std::make_unique<TranslateManager>( + &mock_translate_client_, &mock_translate_ranker_, &mock_language_model_); + + base::HistogramTester histogram_tester; + prefs_.SetBoolean(prefs::kOfferTranslateEnabled, true); + translate_manager_->GetLanguageState()->LanguageDetermined("en", true); + network_notifier_.SimulateOnline(); + + translate_manager_->ShowTranslateUI("pl", /* auto_translate */ true, + /* triggered_from_menu= */ false); + + // TranslateManager::ShowTranslateUI should call translation for the + // explicit target language. + histogram_tester.ExpectTotalCount(kTranslateSourceLanguageName, 1); + histogram_tester.ExpectBucketCount(kTranslateSourceLanguageName, + base::HashMetricName("en"), 1); + histogram_tester.ExpectTotalCount(kTranslateTargetLanguageName, 1); + histogram_tester.ExpectBucketCount(kTranslateTargetLanguageName, + base::HashMetricName("pl"), 1); +} + +TEST_F(TranslateManagerTest, ShowTranslateUI_ExplicitTargetSameAsTarget) { + manager_->set_application_locale("en"); + mock_language_model_.details = { + MockLanguageModel::LanguageDetails("pl", 1.0), + }; + ON_CALL(mock_translate_client_, IsTranslatableURL(GURL::EmptyGURL())) + .WillByDefault(Return(true)); + language::AcceptLanguagesService accept_languages(&prefs_, + accept_languages_prefs); + ON_CALL(mock_translate_client_, GetAcceptLanguagesService()) + .WillByDefault(Return(&accept_languages)); + EXPECT_CALL(mock_translate_client_, + ShowTranslateUI(_, _, _, _, false /* triggered_from_menu */)) + .WillOnce(Return(true)); + + translate_manager_ = std::make_unique<TranslateManager>( + &mock_translate_client_, &mock_translate_ranker_, &mock_language_model_); + + base::HistogramTester histogram_tester; + prefs_.SetBoolean(prefs::kOfferTranslateEnabled, true); + translate_manager_->GetLanguageState()->LanguageDetermined("de", true); + network_notifier_.SimulateOnline(); + + translate_manager_->ShowTranslateUI("pl", /* auto_translate */ true, + /* triggered_from_menu= */ false); + + // TranslateManager::ShowTranslateUI should call translation. + histogram_tester.ExpectTotalCount(kTranslateSourceLanguageName, 1); + histogram_tester.ExpectBucketCount(kTranslateSourceLanguageName, + base::HashMetricName("de"), 1); + histogram_tester.ExpectTotalCount(kTranslateTargetLanguageName, 1); + histogram_tester.ExpectBucketCount(kTranslateTargetLanguageName, + base::HashMetricName("pl"), 1); +} + TEST_F(TranslateManagerTest, GetActiveTranslateMetricsLogger) { PrepareTranslateManager(); std::unique_ptr<TranslateMetricsLogger> translate_metrics_logger_a =
diff --git a/components/translate/core/browser/translate_ui_delegate_unittest.cc b/components/translate/core/browser/translate_ui_delegate_unittest.cc index 7ce40d7..38d5270c 100644 --- a/components/translate/core/browser/translate_ui_delegate_unittest.cc +++ b/components/translate/core/browser/translate_ui_delegate_unittest.cc
@@ -10,7 +10,6 @@ #include "base/test/scoped_feature_list.h" #include "build/build_config.h" #include "build/chromeos_buildflags.h" -#include "components/language/core/browser/language_prefs.h" #include "components/infobars/core/infobar.h" #include "components/language/core/browser/language_model.h"
diff --git a/components/ukm/ukm_service_unittest.cc b/components/ukm/ukm_service_unittest.cc index c432858..8ca8072 100644 --- a/components/ukm/ukm_service_unittest.cc +++ b/components/ukm/ukm_service_unittest.cc
@@ -34,7 +34,6 @@ #include "components/ukm/ukm_entry_filter.h" #include "components/ukm/ukm_pref_names.h" #include "components/ukm/ukm_recorder_impl.h" -#include "components/ukm/ukm_service.h" #include "components/ukm/unsent_log_store_metrics_impl.h" #include "services/metrics/public/cpp/ukm_builders.h" #include "services/metrics/public/cpp/ukm_entry_builder.h"
diff --git a/components/user_education/common/feature_promo_snooze_service_unittest.cc b/components/user_education/common/feature_promo_snooze_service_unittest.cc index 2b464c9..b4197a9 100644 --- a/components/user_education/common/feature_promo_snooze_service_unittest.cc +++ b/components/user_education/common/feature_promo_snooze_service_unittest.cc
@@ -12,7 +12,6 @@ #include "base/test/task_environment.h" #include "base/time/time.h" #include "components/feature_engagement/public/feature_constants.h" -#include "components/user_education/common/feature_promo_snooze_service.h" #include "testing/gtest/include/gtest/gtest.h" namespace user_education {
diff --git a/components/user_notes/browser/user_note_service_unittest.cc b/components/user_notes/browser/user_note_service_unittest.cc index 108ae5c2..b96dc47 100644 --- a/components/user_notes/browser/user_note_service_unittest.cc +++ b/components/user_notes/browser/user_note_service_unittest.cc
@@ -13,7 +13,6 @@ #include "components/user_notes/browser/frame_user_note_changes.h" #include "components/user_notes/browser/user_note_base_test.h" #include "components/user_notes/browser/user_note_manager.h" -#include "components/user_notes/browser/user_note_service.h" #include "components/user_notes/interfaces/user_note_service_delegate.h" #include "components/user_notes/interfaces/user_notes_ui.h" #include "components/user_notes/model/user_note_metadata.h"
diff --git a/components/viz/common/quads/compositor_render_pass_unittest.cc b/components/viz/common/quads/compositor_render_pass_unittest.cc index aa3af39..685331a 100644 --- a/components/viz/common/quads/compositor_render_pass_unittest.cc +++ b/components/viz/common/quads/compositor_render_pass_unittest.cc
@@ -61,7 +61,7 @@ AggregatedRenderPassId render_pass_id{3u}; gfx::Rect output_rect(45, 22, 120, 13); gfx::Transform transform_to_root = - gfx::Transform(1.0, 0.5, 0.5, -0.5, -1.0, 0.0); + gfx::Transform::Affine(1.0, 0.5, 0.5, -0.5, -1.0, 0.0); gfx::Rect damage_rect(56, 123, 19, 43); cc::FilterOperations filters; filters.Append(cc::FilterOperation::CreateOpacityFilter(0.5)); @@ -123,7 +123,7 @@ CompositorRenderPassId id{3}; gfx::Rect output_rect(45, 22, 120, 13); gfx::Transform transform_to_root = - gfx::Transform(1.0, 0.5, 0.5, -0.5, -1.0, 0.0); + gfx::Transform::Affine(1.0, 0.5, 0.5, -0.5, -1.0, 0.0); gfx::Rect damage_rect(56, 123, 19, 43); cc::FilterOperations filters; filters.Append(cc::FilterOperation::CreateOpacityFilter(0.5)); @@ -181,7 +181,7 @@ CompositorRenderPassId contrib_id{4}; gfx::Rect contrib_output_rect(10, 15, 12, 17); gfx::Transform contrib_transform_to_root = - gfx::Transform(1.0, 0.5, 0.5, -0.5, -1.0, 0.0); + gfx::Transform::Affine(1.0, 0.5, 0.5, -0.5, -1.0, 0.0); gfx::Rect contrib_damage_rect(11, 16, 10, 15); cc::FilterOperations contrib_filters; contrib_filters.Append(cc::FilterOperation::CreateSepiaFilter(0.5)); @@ -239,7 +239,7 @@ CompositorRenderPassId id{3}; gfx::Rect output_rect(45, 22, 120, 13); gfx::Transform transform_to_root = - gfx::Transform(1.0, 0.5, 0.5, -0.5, -1.0, 0.0); + gfx::Transform::Affine(1.0, 0.5, 0.5, -0.5, -1.0, 0.0); gfx::Rect damage_rect(56, 123, 19, 43); cc::FilterOperations filters; filters.Append(cc::FilterOperation::CreateOpacityFilter(0.5));
diff --git a/components/viz/common/quads/draw_quad_perftest.cc b/components/viz/common/quads/draw_quad_perftest.cc index 8a83f70..5f468ee 100644 --- a/components/viz/common/quads/draw_quad_perftest.cc +++ b/components/viz/common/quads/draw_quad_perftest.cc
@@ -36,7 +36,8 @@ } SharedQuadState* CreateSharedQuadState(CompositorRenderPass* render_pass) { - gfx::Transform quad_transform = gfx::Transform(1.0, 0.0, 0.5, 1.0, 0.5, 0.0); + gfx::Transform quad_transform = + gfx::Transform::Affine(1.0, 0.0, 0.5, 1.0, 0.5, 0.0); gfx::Rect content_rect(26, 28); gfx::Rect visible_layer_rect(10, 12, 14, 16); bool are_contents_opaque = false;
diff --git a/components/viz/common/quads/draw_quad_unittest.cc b/components/viz/common/quads/draw_quad_unittest.cc index b01e226..cabbdd5 100644 --- a/components/viz/common/quads/draw_quad_unittest.cc +++ b/components/viz/common/quads/draw_quad_unittest.cc
@@ -47,7 +47,8 @@ } TEST(DrawQuadTest, CopySharedQuadState) { - gfx::Transform quad_transform = gfx::Transform(1.0, 0.0, 0.5, 1.0, 0.5, 0.0); + gfx::Transform quad_transform = + gfx::Transform::Affine(1.0, 0.0, 0.5, 1.0, 0.5, 0.0); gfx::Rect layer_rect(26, 28); gfx::Rect visible_layer_rect(10, 12, 14, 16); gfx::Rect clip_rect(19, 21, 23, 25); @@ -71,7 +72,8 @@ } SharedQuadState* CreateSharedQuadState(CompositorRenderPass* render_pass) { - gfx::Transform quad_transform = gfx::Transform(1.0, 0.0, 0.5, 1.0, 0.5, 0.0); + gfx::Transform quad_transform = + gfx::Transform::Affine(1.0, 0.0, 0.5, 1.0, 0.5, 0.0); gfx::Rect layer_rect(26, 28); gfx::Rect visible_layer_rect(10, 12, 14, 16); bool are_contents_opaque = true;
diff --git a/components/viz/service/compositor_frame_fuzzer/fuzzer_browser_process.cc b/components/viz/service/compositor_frame_fuzzer/fuzzer_browser_process.cc index 8b824eff3..e41e36f 100644 --- a/components/viz/service/compositor_frame_fuzzer/fuzzer_browser_process.cc +++ b/components/viz/service/compositor_frame_fuzzer/fuzzer_browser_process.cc
@@ -131,7 +131,7 @@ gfx::Rect(kBrowserSize), gfx::Transform()); auto* renderer_sqs = pass->CreateAndAppendSharedQuadState(); - renderer_sqs->SetAll(gfx::Transform(1.0, 0.0, 0.0, 1.0, 0, 80), + renderer_sqs->SetAll(gfx::Transform::MakeTranslation(0, 80), gfx::Rect(kRendererFrameSize), gfx::Rect(kRendererFrameSize), /*mask_filter_info=*/gfx::MaskFilterInfo(),
diff --git a/components/viz/service/display/display_unittest.cc b/components/viz/service/display/display_unittest.cc index 639894b..b10314d 100644 --- a/components/viz/service/display/display_unittest.cc +++ b/components/viz/service/display/display_unittest.cc
@@ -3296,10 +3296,10 @@ gfx::Rect rect3(0, 0, 10, 10); gfx::Transform invertible; - gfx::Transform non_invertible(10, 10, 0, 0, // row 1 - 10, 10, 0, 0, // row 2 - 0, 0, 1, 0, // row 3 - 0, 0, 0, 1); // row 4 + auto non_invertible = gfx::Transform::RowMajor(10, 10, 0, 0, // row 1 + 10, 10, 0, 0, // row 2 + 0, 0, 1, 0, // row 3 + 0, 0, 0, 1); // row 4 gfx::Transform non_invertible_miss_z; non_invertible_miss_z.Scale3d(1, 1, 0); bool opaque_content = true;
diff --git a/components/viz/service/display/draw_polygon_unittest.cc b/components/viz/service/display/draw_polygon_unittest.cc index 4a4f955..9c32973 100644 --- a/components/viz/service/display/draw_polygon_unittest.cc +++ b/components/viz/service/display/draw_polygon_unittest.cc
@@ -175,7 +175,7 @@ TEST(DrawPolygonConstructionTest, SimpleNormal) { gfx::RectF src(-0.1f, -10.0f, 0.2f, 20.0f); - gfx::Transform transform_i(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); + gfx::Transform transform_i; DrawPolygon polygon_i(nullptr, src, transform_i, 1); EXPECT_NORMAL(polygon_i, 0.0f, 0.0f, 1.0f); @@ -184,7 +184,8 @@ TEST(DrawPolygonConstructionTest, DISABLED_NormalInvertXY) { gfx::RectF src(-0.1f, -10.0f, 0.2f, 20.0f); - gfx::Transform transform(0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); + auto transform = + gfx::Transform::RowMajor(0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); DrawPolygon polygon_a(nullptr, src, transform, 2); EXPECT_NORMAL(polygon_a, 0.0f, 0.0f, 1.0f); @@ -193,7 +194,8 @@ TEST(DrawPolygonConstructionTest, DISABLED_NormalInvertXZ) { gfx::RectF src(-0.1f, -10.0f, 0.2f, 20.0f); - gfx::Transform transform(0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1); + auto transform = + gfx::Transform::RowMajor(0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1); DrawPolygon polygon_b(nullptr, src, transform, 3); EXPECT_NORMAL(polygon_b, 1.0f, 0.0f, 0.0f); @@ -202,7 +204,8 @@ TEST(DrawPolygonConstructionTest, DISABLED_NormalInvertYZ) { gfx::RectF src(-0.1f, -10.0f, 0.2f, 20.0f); - gfx::Transform transform(1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1); + auto transform = + gfx::Transform::RowMajor(1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1); DrawPolygon polygon_c(nullptr, src, transform, 4); EXPECT_NORMAL(polygon_c, 0.0f, 1.0f, 0.0f); @@ -211,7 +214,8 @@ TEST(DrawPolygonConstructionTest, NormalRotate90) { gfx::RectF src(-0.1f, -10.0f, 0.2f, 20.0f); - gfx::Transform transform(0, -1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1); + auto transform = + gfx::Transform::RowMajor(0, -1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1); DrawPolygon polygon_b(nullptr, src, transform, 3); EXPECT_NORMAL(polygon_b, 0.0f, 0.0f, 1.0f); @@ -220,7 +224,8 @@ TEST(DrawPolygonConstructionTest, InvertXNormal) { gfx::RectF src(-0.1f, -10.0f, 0.2f, 20.0f); - gfx::Transform transform(-1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); + auto transform = + gfx::Transform::RowMajor(-1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); DrawPolygon polygon_d(nullptr, src, transform, 5); EXPECT_NORMAL(polygon_d, 0.0f, 0.0f, 1.0f); @@ -229,7 +234,8 @@ TEST(DrawPolygonConstructionTest, InvertYNormal) { gfx::RectF src(-0.1f, -10.0f, 0.2f, 20.0f); - gfx::Transform transform(1, 0, 0, 0, 0, -1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); + auto transform = + gfx::Transform::RowMajor(1, 0, 0, 0, 0, -1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); DrawPolygon polygon_d(nullptr, src, transform, 5); EXPECT_NORMAL(polygon_d, 0.0f, 0.0f, 1.0f); @@ -238,7 +244,8 @@ TEST(DrawPolygonConstructionTest, InvertZNormal) { gfx::RectF src(-0.1f, -10.0f, 0.2f, 20.0f); - gfx::Transform transform(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, -1, 0, 0, 0, 0, 1); + auto transform = + gfx::Transform::RowMajor(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, -1, 0, 0, 0, 0, 1); DrawPolygon polygon_d(nullptr, src, transform, 5); EXPECT_NORMAL(polygon_d, 0.0f, 0.0f, -1.0f); @@ -651,13 +658,13 @@ TEST(DrawPolygonSplitTest, SplitNoInfs) { // clang-format off gfx::RectF rect_a(0, 0, 1140, 418); - gfx::Transform transform_a( + auto transform_a = gfx::Transform::RowMajor( 1.39069271, -0.131110176, 0.5, -503.545319, 1.00984585, -0.273445308, -0.866025388, -828.169128, -0.722961724, 0.690888107, 4.23046966e-17, 570.098511, 0.00144592347, -0.0013817763, -8.46093968e-20, -0.140197217); gfx::RectF rect_b(430, 0, 560, 454); - gfx::Transform transform_b( + auto transform_b = gfx::Transform::RowMajor( 0.131110176, -0.5, 1.39069271, 952.04541, 0.273445308, 0.866025388, 1.00984585, 52.3442955, -0.690888107, 0, -0.722961724, 429.901398,
diff --git a/components/viz/service/display/overlay_unittest.cc b/components/viz/service/display/overlay_unittest.cc index eed47e43..fa9010d 100644 --- a/components/viz/service/display/overlay_unittest.cc +++ b/components/viz/service/display/overlay_unittest.cc
@@ -81,15 +81,15 @@ const gfx::PointF kUVTopLeft(0.1f, 0.2f); const gfx::PointF kUVBottomRight(1.0f, 1.0f); const gfx::Transform kNormalTransform = - gfx::Transform(0.9f, 0, 0, 0.8f, 0.1f, 0.2f); // x,y -> x,y. + gfx::Transform::Affine(0.9f, 0, 0, 0.8f, 0.1f, 0.2f); // x,y -> x,y. const gfx::Transform kXMirrorTransform = - gfx::Transform(-0.9f, 0, 0, 0.8f, 1.0f, 0.2f); // x,y -> 1-x,y. + gfx::Transform::Affine(-0.9f, 0, 0, 0.8f, 1.0f, 0.2f); // x,y -> 1-x,y. const gfx::Transform kYMirrorTransform = - gfx::Transform(0.9f, 0, 0, -0.8f, 0.1f, 1.0f); // x,y -> x,1-y. + gfx::Transform::Affine(0.9f, 0, 0, -0.8f, 0.1f, 1.0f); // x,y -> x,1-y. const gfx::Transform kBothMirrorTransform = - gfx::Transform(-0.9f, 0, 0, -0.8f, 1.0f, 1.0f); // x,y -> 1-x,1-y. + gfx::Transform::Affine(-0.9f, 0, 0, -0.8f, 1.0f, 1.0f); // x,y -> 1-x,1-y. const gfx::Transform kSwapTransform = - gfx::Transform(0, 1, 1, 0, 0, 0); // x,y -> y,x. + gfx::Transform::Affine(0, 1, 1, 0, 0, 0); // x,y -> y,x. const gfx::BufferFormat kDefaultBufferFormat = gfx::BufferFormat::RGBA_8888; class TimeTicksOverride {
diff --git a/components/viz/service/display/renderer_pixeltest.cc b/components/viz/service/display/renderer_pixeltest.cc index d99e911..6eb1ead 100644 --- a/components/viz/service/display/renderer_pixeltest.cc +++ b/components/viz/service/display/renderer_pixeltest.cc
@@ -3143,7 +3143,7 @@ auto pass = CreateTestRootRenderPass(AggregatedRenderPassId{1}, rect); gfx::Rect red_rect(0, 0, 180, 500); - gfx::Transform red_quad_to_target_transform( + auto red_quad_to_target_transform = gfx::Transform::RowMajor( 1.0f, 2.4520f, 10.6206f, 19.0f, 0.0f, 0.3528f, 5.9737f, 9.5f, 0.0f, -0.2250f, -0.9744f, 0.0f, 0.0f, 0.0225f, 0.0974f, 1.0f); SharedQuadState* red_shared_state = CreateTestSharedQuadState(
diff --git a/components/viz/service/display/skia_renderer.cc b/components/viz/service/display/skia_renderer.cc index 22758869..153bc1e 100644 --- a/components/viz/service/display/skia_renderer.cc +++ b/components/viz/service/display/skia_renderer.cc
@@ -3573,15 +3573,19 @@ overlay->display_rect = gfx::RectF(filter_bounds); quad->shared_quad_state->quad_to_target_transform.TransformRect( &overlay->display_rect); + // TODO(petermcneeley): This clipping is only correct for translation and + // scale. For other transforms we will need to send the rect over as a + // separate parameter. + auto unclipped_display_rect = overlay->display_rect; overlay->display_rect.Intersect( gfx::RectF(gfx::SizeF(current_frame()->device_viewport_size))); - auto buffer_rect = - gfx::RectF(overlay->display_rect.origin(), gfx::SizeF(buffer_size)); - // Set |uv_rect| to reflect clipping from |buffer_size| to |filter_bounds|. - overlay->uv_rect = gfx::RectF{1.f, 1.f}; - if (buffer_rect != overlay->display_rect) { + // Set |uv_rect| to reflect rounding from |filter_bounds| to |buffer_size|. + overlay->uv_rect = gfx::RectF{ + static_cast<float>(filter_bounds.width()) / buffer_size.width(), + static_cast<float>(filter_bounds.height()) / buffer_size.height()}; + if (unclipped_display_rect != overlay->display_rect) { overlay->uv_rect = cc::MathUtil::ScaleRectProportional( - overlay->uv_rect, buffer_rect, overlay->display_rect); + overlay->uv_rect, unclipped_display_rect, overlay->display_rect); } #endif // BUILDFLAG(IS_APPLE) }
diff --git a/components/viz/service/display/surface_aggregator.cc b/components/viz/service/display/surface_aggregator.cc index b0e8d78..5c2e883 100644 --- a/components/viz/service/display/surface_aggregator.cc +++ b/components/viz/service/display/surface_aggregator.cc
@@ -116,8 +116,8 @@ const gfx::Transform& target_to_root_transform, const gfx::Rect& root_damage_rect, gfx::Rect* quad_space_damage_rect) { - gfx::Transform quad_to_root_transform(target_to_root_transform, - quad_to_target_transform); + gfx::Transform quad_to_root_transform = + target_to_root_transform * quad_to_target_transform; gfx::Transform inverse_transform(gfx::Transform::kSkipInitialization); bool inverse_valid = quad_to_root_transform.GetInverse(&inverse_transform); if (!inverse_valid) @@ -252,7 +252,7 @@ const gfx::Transform& dest_to_root_target_transform, const absl::optional<gfx::Rect>& dest_root_target_clip_rect) { gfx::Transform target_to_dest_root_target_transform = - gfx::Transform(dest_to_root_target_transform, target_to_dest_transform); + dest_to_root_target_transform * target_to_dest_transform; gfx::Rect rect_in_root_target_space = cc::MathUtil::MapEnclosingClippedRect( target_to_dest_root_target_transform, rect_in_target_space); @@ -713,8 +713,8 @@ const gfx::Rect& surface_quad_visible_rect = surface_quad->visible_rect; if (ignore_undamaged) { - gfx::Transform quad_to_target_transform( - target_transform, surface_quad_sqs->quad_to_target_transform); + gfx::Transform quad_to_target_transform = + target_transform * surface_quad_sqs->quad_to_target_transform; *damage_rect_in_quad_space_valid = CalculateQuadSpaceDamageRect( quad_to_target_transform, dest_pass->transform_to_root_target, root_damage_rect_, damage_rect_in_quad_space); @@ -780,7 +780,7 @@ // prevents the delegated ink trail from flickering if a compositor frame // is not generated due to a delayed main frame. TransformAndStoreDelegatedInkMetadata( - gfx::Transform(dest_pass->transform_to_root_target, combined_transform), + dest_pass->transform_to_root_target * combined_transform, frame.metadata.delegated_ink_metadata.get()); } @@ -1378,8 +1378,7 @@ // prevents the delegated ink trail from flickering if a compositor frame // is not generated due to a delayed main frame. TransformAndStoreDelegatedInkMetadata( - gfx::Transform(source_pass_list.back()->transform_to_root_target, - surface_transform), + source_pass_list.back()->transform_to_root_target * surface_transform, frame.metadata.delegated_ink_metadata.get()); } @@ -1412,7 +1411,7 @@ // we will be adding another render pass for the surface transform, in // which this will no longer be the root. transform_to_root_target = - gfx::Transform(surface_transform, source.transform_to_root_target); + surface_transform * source.transform_to_root_target; } copy_pass->SetAll( @@ -1686,9 +1685,9 @@ resolved_pass.aggregation().embedded_passes.insert(&child_resolved_pass); - const gfx::Transform child_to_root_transform( - target_to_root_transform, - quad->shared_quad_state->quad_to_target_transform); + const gfx::Transform child_to_root_transform = + target_to_root_transform * + quad->shared_quad_state->quad_to_target_transform; quad_damage_rect = PrewalkRenderPass(resolved_frame, child_resolved_pass, gfx::Rect(), child_to_root_transform, &resolved_pass, result);
diff --git a/components/viz/service/display/surface_aggregator_unittest.cc b/components/viz/service/display/surface_aggregator_unittest.cc index f57d7ed0..982ab92f 100644 --- a/components/viz/service/display/surface_aggregator_unittest.cc +++ b/components/viz/service/display/surface_aggregator_unittest.cc
@@ -6877,7 +6877,7 @@ { auto aggregated_frame = AggregateFrame(root_surface_id_); } // Parameters used for damage rect testing - gfx::Transform transform(0.5, 0, 0, 0.5, 20, 0); + auto transform = gfx::Transform::Affine(0.5, 0, 0, 0.5, 20, 0); gfx::Rect clip_rect = gfx::Rect(30, 30, 40, 40); // Clipping is off @@ -7069,7 +7069,7 @@ // Original video quad (0, 0, 100, 100) x this video_transform matrix == // (10, 0, 80, 80). - gfx::Transform video_transform(0.8f, 0, 0, 0.8f, 10.0f, 0); + auto video_transform = gfx::Transform::Affine(0.8f, 0, 0, 0.8f, 10.0f, 0); // root surface quads std::vector<Quad> root_surface_quads = { @@ -7434,8 +7434,8 @@ std::move(child_surface_frame)); } gfx::PointF child_surface_offset(10.0f, 5.0f); - gfx::Transform child_surface_transform( - 1.f, 0, 0, 1.f, child_surface_offset.x(), child_surface_offset.y()); + gfx::Transform child_surface_transform = gfx::Transform::MakeTranslation( + child_surface_offset.x(), child_surface_offset.y()); auto apply_transform = [child_surface_offset](const gfx::Rect orig_rect) { auto rtn_rect = orig_rect;
diff --git a/components/viz/service/display_embedder/skia_output_surface_impl_on_gpu.cc b/components/viz/service/display_embedder/skia_output_surface_impl_on_gpu.cc index df82b4e..bf56237 100644 --- a/components/viz/service/display_embedder/skia_output_surface_impl_on_gpu.cc +++ b/components/viz/service/display_embedder/skia_output_surface_impl_on_gpu.cc
@@ -2302,8 +2302,11 @@ void SkiaOutputSurfaceImplOnGpu::DestroySharedImage(gpu::Mailbox mailbox) { shared_image_factory_->DestroySharedImage(mailbox); - // The write access should be destroyed already. - DCHECK(!overlay_pass_accesses_.contains(mailbox)); + // Under normal circumstances the write access should be destroyed already in + // PostSubmit(), but if context was lost then SwapBuffersInternal will no-op + // and PostSubmit() will not be called. + DCHECK(!overlay_pass_accesses_.contains(mailbox) || context_is_lost_); + overlay_pass_accesses_.erase(mailbox); skia_representations_.erase(mailbox); solid_color_images_.erase(mailbox); }
diff --git a/content/browser/accessibility/browser_accessibility_fuchsia_unittest.cc b/content/browser/accessibility/browser_accessibility_fuchsia_unittest.cc index d0115dc..f28c123a 100644 --- a/content/browser/accessibility/browser_accessibility_fuchsia_unittest.cc +++ b/content/browser/accessibility/browser_accessibility_fuchsia_unittest.cc
@@ -552,10 +552,10 @@ ui::AXNodeData node; node.id = kRootId; - // gfx::Transform constructor takes arguments in row-major order. - node.relative_bounds.transform = std::make_unique<gfx::Transform>( - x_scale, 0, 0, x_translation, 0, y_scale, 0, y_translation, 0, 0, z_scale, - z_translation, 0, 0, 0, 1); + node.relative_bounds.transform = + std::make_unique<gfx::Transform>(gfx::Transform::RowMajor( + x_scale, 0, 0, x_translation, 0, y_scale, 0, y_translation, 0, 0, + z_scale, z_translation, 0, 0, 0, 1)); node.relative_bounds.bounds = gfx::RectF( x_min, y_min, /* width = */ x_max - x_min, /* height = */ y_max - y_min);
diff --git a/content/browser/bluetooth/web_bluetooth_service_impl.cc b/content/browser/bluetooth/web_bluetooth_service_impl.cc index 129aa3c..b26cdf38 100644 --- a/content/browser/bluetooth/web_bluetooth_service_impl.cc +++ b/content/browser/bluetooth/web_bluetooth_service_impl.cc
@@ -589,9 +589,6 @@ const url::Origin& embedding_origin = render_frame_host().GetMainFrame()->GetLastCommittedOrigin(); - // IsSameOriginWith() no longer excludes opaque origins. - // TODO(https://crbug.com/994454): Exclude opaque origins explicitly. - // Some embedders that don't support Web Bluetooth indicate this by not // returning a chooser. // TODO(https://crbug.com/993829): Perform this check once there is a way to
diff --git a/content/browser/cache_storage/cache_storage_context_impl.h b/content/browser/cache_storage/cache_storage_context_impl.h index 7b4cf9f..19e6fbf 100644 --- a/content/browser/cache_storage/cache_storage_context_impl.h +++ b/content/browser/cache_storage/cache_storage_context_impl.h
@@ -88,11 +88,6 @@ return cache_manager_; } - const scoped_refptr<storage::QuotaManagerProxy> quota_manager_proxy() { - DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); - return quota_manager_proxy_; - } - bool is_incognito() const { return is_incognito_; } private:
diff --git a/content/browser/cache_storage/cache_storage_manager.cc b/content/browser/cache_storage/cache_storage_manager.cc index b34d64b..a80e3fc 100644 --- a/content/browser/cache_storage/cache_storage_manager.cc +++ b/content/browser/cache_storage/cache_storage_manager.cc
@@ -721,7 +721,7 @@ if (!bucket_locator.is_default) continue; - storage_keys.push_back(key_value.first.first.storage_key); + storage_keys.push_back(bucket_locator.storage_key); } scheduler_task_runner_->PostTask(
diff --git a/content/browser/cache_storage/cache_storage_manager.h b/content/browser/cache_storage/cache_storage_manager.h index 8518984..ccf90de 100644 --- a/content/browser/cache_storage/cache_storage_manager.h +++ b/content/browser/cache_storage/cache_storage_manager.h
@@ -74,12 +74,9 @@ static bool IsValidQuotaStorageKey(const blink::StorageKey& storage_key); - // Open the CacheStorage for the given storage_key and owner. A reference + // Open the CacheStorage for the given bucket_locator and owner. A reference // counting handle is returned which can be stored and used similar to a weak // pointer. - CacheStorageHandle OpenCacheStorage(const blink::StorageKey& storage_key, - storage::mojom::CacheStorageOwner owner); - CacheStorageHandle OpenCacheStorage( const storage::BucketLocator& bucket_locator, storage::mojom::CacheStorageOwner owner);
diff --git a/content/browser/cache_storage/cache_storage_manager_unittest.cc b/content/browser/cache_storage/cache_storage_manager_unittest.cc index d87f25b..bef93dd 100644 --- a/content/browser/cache_storage/cache_storage_manager_unittest.cc +++ b/content/browser/cache_storage/cache_storage_manager_unittest.cc
@@ -264,12 +264,6 @@ ASSERT_TRUE(temp_dir_.CreateUniqueTempDir()); CreateStorageManager(); - - // Instantiate these after `quota_manager_proxy_` has been initialized. - bucket_locator1_ = - GetOrCreateBucket(storage_key1_, storage::kDefaultBucketName); - bucket_locator2_ = - GetOrCreateBucket(storage_key2_, storage::kDefaultBucketName); } void TearDown() override { @@ -383,6 +377,13 @@ mock_quota_manager_.get(), base::ThreadTaskRunnerHandle::Get().get()); + // These must be instantiated after `quota_manager_proxy_` has been + // initialized. + bucket_locator1_ = + GetOrCreateBucket(storage_key1_, storage::kDefaultBucketName); + bucket_locator2_ = + GetOrCreateBucket(storage_key2_, storage::kDefaultBucketName); + cache_manager_ = CacheStorageManager::Create( temp_dir_path, base::ThreadTaskRunnerHandle::Get(), base::ThreadTaskRunnerHandle::Get(), quota_manager_proxy_, @@ -421,6 +422,10 @@ quota_policy_ = nullptr; mock_quota_manager_ = nullptr; + // Note: After the MockQuotaManager goes away, the buckets get destroyed as + // well. We won't clear `bucket_locator1_` or `bucket_locator2_`, though, + // for cases where it's useful to compare the bucket locator values to + // values written to the Cache Storage index files. cache_manager_ = nullptr; } @@ -897,6 +902,27 @@ net::features::kThirdPartyStoragePartitioning); } + ReinitializeStorageKeysAndBucketLocators(); + } + + void CreateStorageManager() { + // Always reset `storage_key1_` and `storage_key2_` to what they + // are expected to be in CacheStorageManagerTest so that when we + // reinitialize below the bucket IDs of the new `bucket_locator1_` + // and `bucket_locator2_` will be the same regardless of how many + // times `DestroyStorageManager()` and then `CreateStorageManager()` + // are called. + storage_key1_ = + blink::StorageKey(url::Origin::Create(GURL("http://example1.com"))); + storage_key2_ = + blink::StorageKey(url::Origin::Create(GURL("http://example2.com"))); + + CacheStorageManagerTest::CreateStorageManager(); + + ReinitializeStorageKeysAndBucketLocators(); + } + + void ReinitializeStorageKeysAndBucketLocators() { std::string bucket_name; switch (test_case_) { case (StorageKeyAndBucketTestCase::kFirstPartyDefault): @@ -916,13 +942,23 @@ case (StorageKeyAndBucketTestCase::kFirstPartyDefaultPartitionEnabled): // For this case, the storage keys and bucket locators are already // initialized correctly. + ASSERT_TRUE(storage_key1_.IsFirstPartyContext()); + ASSERT_TRUE(storage_key2_.IsFirstPartyContext()); + + ASSERT_EQ(bucket_locator1_.id, storage::BucketId::FromUnsafeValue(1)); + ASSERT_EQ(bucket_locator2_.id, storage::BucketId::FromUnsafeValue(2)); break; case (StorageKeyAndBucketTestCase::kFirstPartyNamed): case (StorageKeyAndBucketTestCase::kFirstPartyNamedPartitionEnabled): // For this case, the storage keys are initialized correctly but we // need to create new named buckets. + ASSERT_TRUE(storage_key1_.IsFirstPartyContext()); + ASSERT_TRUE(storage_key2_.IsFirstPartyContext()); + bucket_locator1_ = GetOrCreateBucket(storage_key1_, bucket_name); bucket_locator2_ = GetOrCreateBucket(storage_key2_, bucket_name); + ASSERT_EQ(bucket_locator1_.id, storage::BucketId::FromUnsafeValue(3)); + ASSERT_EQ(bucket_locator2_.id, storage::BucketId::FromUnsafeValue(4)); break; case (StorageKeyAndBucketTestCase::kThirdPartyDefault): @@ -937,9 +973,12 @@ bucket_locator1_ = GetOrCreateBucket(storage_key1_, bucket_name); bucket_locator2_ = GetOrCreateBucket(storage_key2_, bucket_name); + ASSERT_EQ(bucket_locator1_.id, storage::BucketId::FromUnsafeValue(3)); + ASSERT_EQ(bucket_locator2_.id, storage::BucketId::FromUnsafeValue(4)); break; } } + bool ThirdPartyStoragePartitioningEnabled() { return test_case_ == StorageKeyAndBucketTestCase:: kFirstPartyDefaultPartitionEnabled || @@ -1827,9 +1866,8 @@ EXPECT_FALSE(usage[storage_key2_index]->last_modified.is_null()); } -// TODO(crbug.com/1369300): Re-enable this test. TEST_P(CacheStorageManagerStorageKeyAndBucketTestP, - DISABLED_GetAllStorageKeysUsageWithPadding) { + GetAllStorageKeysUsageWithPadding) { EXPECT_EQ(0ULL, GetAllStorageKeysUsage().size()); EXPECT_TRUE(Open(bucket_locator1_, "foo")); @@ -1840,6 +1878,11 @@ EXPECT_TRUE( CachePut(callback_cache_handle_.value(), GURL("http://example.com/foo"))); + // Ensure that the index file has been written to disk before calling + // `GetAllStorageKeysUsage()`. + disk_cache::FlushCacheThreadForTesting(); + content::RunAllTasksUntilIdle(); + auto usage = GetAllStorageKeysUsage(); ASSERT_EQ(1ULL, usage.size()); int64_t unpadded_size = usage[0]->total_size_bytes; @@ -3127,11 +3170,8 @@ } // Double-check that total_usage is comparable with what's returned by - // `GetBucketUsage()`. Note that in my testing the value returned by - // `GetBucketUsage()` here is larger than total_usage by 256, possibly - // because the migration increases the calculated size depending on how - // and/or when the calculation is done. - EXPECT_LE(total_usage, GetBucketUsage(bucket_locator1_)); + // `GetBucketUsage()`. + EXPECT_EQ(total_usage, GetBucketUsage(bucket_locator1_)); // Destroy the manager and then ensure that all tasks have completed before // continuing. We can't rely on `FlushCacheStorageIndex()` here because it
diff --git a/content/browser/media/capture/frame_test_util.cc b/content/browser/media/capture/frame_test_util.cc index 7bc6b14..47078563 100644 --- a/content/browser/media/capture/frame_test_util.cc +++ b/content/browser/media/capture/frame_test_util.cc
@@ -262,10 +262,10 @@ transformed.y() - original.y(), 0.0f, 0.0f); } // The following is the scale-then-translate 2D matrix. - const gfx::Transform transform(transformed.width() / original.width(), 0.0f, - 0.0f, transformed.height() / original.height(), - transformed.x() - original.x(), - transformed.y() - original.y()); + const auto transform = gfx::Transform::Affine( + transformed.width() / original.width(), 0.0f, 0.0f, + transformed.height() / original.height(), transformed.x() - original.x(), + transformed.y() - original.y()); gfx::RectF result(rect); transform.TransformRect(&result); return result;
diff --git a/content/browser/media/media_browsertest.cc b/content/browser/media/media_browsertest.cc index 76c29ed..1ebd251 100644 --- a/content/browser/media/media_browsertest.cc +++ b/content/browser/media/media_browsertest.cc
@@ -27,6 +27,15 @@ #include "net/test/embedded_test_server/embedded_test_server.h" #include "url/url_util.h" +// Proprietary codecs require acceleration on Android. +#if BUILDFLAG(IS_ANDROID) +#define REQUIRE_ACCELERATION_ON_ANDROID() \ + if (!is_accelerated()) \ + return +#else +#define REQUIRE_ACCELERATION_ON_ANDROID() +#endif // BUILDFLAG(IS_ANDROID) + namespace content { #if BUILDFLAG(IS_ANDROID) @@ -127,20 +136,28 @@ title_watcher->AlsoWaitForTitle(base::ASCIIToUTF16(media::kFailedTitle)); } -// Tests playback and seeking of an audio or video file over file or http based -// on a test parameter. Test starts with playback, then, after X seconds or the -// ended event fires, seeks near end of file; see player.html for details. The -// test completes when either the last 'ended' or an 'error' event fires. +// Tests playback and seeking of an audio or video file. Test starts with +// playback then, after X seconds or the ended event fires, seeks near end of +// file; see player.html for details. The test completes when either the last +// 'ended' or an 'error' event fires. class MediaTest : public testing::WithParamInterface<bool>, public MediaBrowserTest { public: + bool is_accelerated() { return GetParam(); } + + void SetUpCommandLine(base::CommandLine* command_line) override { + if (!is_accelerated()) + command_line->AppendSwitch(switches::kDisableAcceleratedVideoDecode); + MediaBrowserTest::SetUpCommandLine(command_line); + } + // Play specified audio over http:// or file:// depending on |http| setting. - void PlayAudio(const std::string& media_file, bool http) { + void PlayAudio(const std::string& media_file, bool http = true) { PlayMedia("audio", media_file, http); } // Play specified video over http:// or file:// depending on |http| setting. - void PlayVideo(const std::string& media_file, bool http) { + void PlayVideo(const std::string& media_file, bool http = true) { PlayMedia("video", media_file, http); } @@ -154,14 +171,13 @@ void RunErrorMessageTest(const std::string& tag, const std::string& media_file, - const std::string& expected_error_substring, - bool http) { + const std::string& expected_error_substring) { base::StringPairs query_params; query_params.emplace_back(tag, media_file); query_params.emplace_back("error_substr", EncodeErrorMessage(expected_error_substring)); RunMediaTestPage("player.html", query_params, media::kErrorEventTitle, - http); + true); } void RunVideoSizeTest(const char* media_file, int width, int height) { @@ -171,133 +187,118 @@ base::StringPairs query_params; query_params.emplace_back("video", media_file); query_params.emplace_back("sizetest", "true"); - RunMediaTestPage("player.html", query_params, expected_title, false); + RunMediaTestPage("player.html", query_params, expected_title, true); } }; -#if BUILDFLAG(IS_ANDROID) -class AndroidPlayerMediaTest : public MediaTest { - private: - void SetUpCommandLine(base::CommandLine* command_line) override { - MediaTest::SetUpCommandLine(command_line); - command_line->AppendSwitch(switches::kDisableAcceleratedVideoDecode); - } -}; - -// TODO(crbug.com/1094571): Flaky. -IN_PROC_BROWSER_TEST_P(AndroidPlayerMediaTest, DISABLED_VideoBearMp4) { - PlayVideo("bear.mp4", GetParam()); -} - -INSTANTIATE_TEST_SUITE_P(File, - AndroidPlayerMediaTest, - ::testing::Values(false)); -INSTANTIATE_TEST_SUITE_P(Http, AndroidPlayerMediaTest, ::testing::Values(true)); -#endif // BUILDFLAG(IS_ANDROID) - // Android doesn't support Theora. #if !BUILDFLAG(IS_ANDROID) IN_PROC_BROWSER_TEST_P(MediaTest, VideoBearTheora) { - PlayVideo("bear.ogv", GetParam()); + PlayVideo("bear.ogv"); } IN_PROC_BROWSER_TEST_P(MediaTest, VideoBearSilentTheora) { - PlayVideo("bear_silent.ogv", GetParam()); + PlayVideo("bear_silent.ogv"); } #endif // !BUILDFLAG(IS_ANDROID) IN_PROC_BROWSER_TEST_P(MediaTest, VideoBearWebm) { - PlayVideo("bear.webm", GetParam()); + PlayVideo("bear.webm"); +} + +IN_PROC_BROWSER_TEST_P(MediaTest, VideoBearWebm_FileProtocol) { + PlayVideo("bear.webm", false); } IN_PROC_BROWSER_TEST_P(MediaTest, AudioBearOpusWebm) { - PlayAudio("bear-opus.webm", GetParam()); + PlayAudio("bear-opus.webm"); } IN_PROC_BROWSER_TEST_P(MediaTest, AudioBearOpusMp4) { - PlayAudio("bear-opus.mp4", GetParam()); + PlayAudio("bear-opus.mp4"); } IN_PROC_BROWSER_TEST_P(MediaTest, AudioBearOpusOgg) { - PlayAudio("bear-opus.ogg", GetParam()); + PlayAudio("bear-opus.ogg"); +} + +IN_PROC_BROWSER_TEST_P(MediaTest, AudioBearOpusOgg_FileProtocol) { + PlayAudio("bear-opus.ogg", false); } IN_PROC_BROWSER_TEST_P(MediaTest, VideoBearSilentWebm) { - PlayVideo("bear_silent.webm", GetParam()); + PlayVideo("bear_silent.webm"); } // We don't expect android devices to support highbit yet. -#if defined(ARCH_CPU_X86_FAMILY) && !BUILDFLAG(IS_ANDROID) -// TODO(crbug.com/1270792): Flaky on Mac. -#if BUILDFLAG(IS_MAC) -#define MAYBE_VideoBearHighBitDepthVP9 DISABLED_VideoBearHighBitDepthVP9 -#else -#define MAYBE_VideoBearHighBitDepthVP9 VideoBearHighBitDepthVP9 -#endif -IN_PROC_BROWSER_TEST_P(MediaTest, MAYBE_VideoBearHighBitDepthVP9) { - PlayVideo("bear-320x180-hi10p-vp9.webm", GetParam()); +#if !BUILDFLAG(IS_ANDROID) +IN_PROC_BROWSER_TEST_P(MediaTest, VideoBearHighBitDepthVP9) { + PlayVideo("bear-320x180-hi10p-vp9.webm"); } -// TODO(crbug.com/1222748): Flaky on Mac. -#if BUILDFLAG(IS_MAC) -#define MAYBE_VideoBear12DepthVP9 DISABLED_VideoBear12DepthVP9 -#else -#define MAYBE_VideoBear12DepthVP9 VideoBear12DepthVP9 -#endif -IN_PROC_BROWSER_TEST_P(MediaTest, MAYBE_VideoBear12DepthVP9) { - PlayVideo("bear-320x180-hi12p-vp9.webm", GetParam()); +IN_PROC_BROWSER_TEST_P(MediaTest, VideoBear12DepthVP9) { + // Hardware decode on does not reliably support 12-bit. + if (is_accelerated()) + return; + PlayVideo("bear-320x180-hi12p-vp9.webm"); } -#endif +#endif // !BUILDFLAG(IS_ANDROID) IN_PROC_BROWSER_TEST_P(MediaTest, VideoBearMp4Vp9) { - PlayVideo("bear-320x240-v_frag-vp9.mp4", GetParam()); + PlayVideo("bear-320x240-v_frag-vp9.mp4"); } IN_PROC_BROWSER_TEST_P(MediaTest, AudioBearFlacMp4) { - PlayAudio("bear-flac.mp4", GetParam()); + PlayAudio("bear-flac.mp4"); } IN_PROC_BROWSER_TEST_P(MediaTest, AudioBearFlac192kHzMp4) { - PlayAudio("bear-flac-192kHz.mp4", GetParam()); + PlayAudio("bear-flac-192kHz.mp4"); } IN_PROC_BROWSER_TEST_P(MediaTest, VideoBearMovPcmS16be) { - PlayAudio("bear_pcm_s16be.mov", GetParam()); + PlayAudio("bear_pcm_s16be.mov"); } IN_PROC_BROWSER_TEST_P(MediaTest, VideoBearMovPcmS24be) { - PlayAudio("bear_pcm_s24be.mov", GetParam()); + PlayAudio("bear_pcm_s24be.mov"); } #if BUILDFLAG(USE_PROPRIETARY_CODECS) IN_PROC_BROWSER_TEST_P(MediaTest, VideoBearMp4) { - PlayVideo("bear.mp4", GetParam()); + REQUIRE_ACCELERATION_ON_ANDROID(); + PlayVideo("bear.mp4"); } IN_PROC_BROWSER_TEST_P(MediaTest, VideoBearSilentMp4) { - PlayVideo("bear_silent.mp4", GetParam()); + REQUIRE_ACCELERATION_ON_ANDROID(); + PlayVideo("bear_silent.mp4"); } -IN_PROC_BROWSER_TEST_F(MediaTest, VideoBearRotated0) { +IN_PROC_BROWSER_TEST_P(MediaTest, VideoBearRotated0) { + REQUIRE_ACCELERATION_ON_ANDROID(); RunVideoSizeTest("bear_rotate_0.mp4", 1280, 720); } -IN_PROC_BROWSER_TEST_F(MediaTest, VideoBearRotated90) { +IN_PROC_BROWSER_TEST_P(MediaTest, VideoBearRotated90) { + REQUIRE_ACCELERATION_ON_ANDROID(); RunVideoSizeTest("bear_rotate_90.mp4", 720, 1280); } -IN_PROC_BROWSER_TEST_F(MediaTest, VideoBearRotated180) { +IN_PROC_BROWSER_TEST_P(MediaTest, VideoBearRotated180) { + REQUIRE_ACCELERATION_ON_ANDROID(); RunVideoSizeTest("bear_rotate_180.mp4", 1280, 720); } -IN_PROC_BROWSER_TEST_F(MediaTest, VideoBearRotated270) { +IN_PROC_BROWSER_TEST_P(MediaTest, VideoBearRotated270) { + REQUIRE_ACCELERATION_ON_ANDROID(); RunVideoSizeTest("bear_rotate_270.mp4", 720, 1280); } #if !BUILDFLAG(IS_ANDROID) // Android devices usually only support baseline, main and high. IN_PROC_BROWSER_TEST_P(MediaTest, VideoBearHighBitDepthMp4) { - PlayVideo("bear-320x180-hi10p.mp4", GetParam()); + PlayVideo("bear-320x180-hi10p.mp4"); } // Android can't reliably load lots of videos on a page. @@ -308,7 +309,10 @@ #else #define MAYBE_LoadManyVideos LoadManyVideos #endif -IN_PROC_BROWSER_TEST_F(MediaTest, MAYBE_LoadManyVideos) { +IN_PROC_BROWSER_TEST_P(MediaTest, MAYBE_LoadManyVideos) { + // Only run this test in one configuration. + if (is_accelerated()) + return; base::StringPairs query_params; RunMediaTestPage("load_many_videos.html", query_params, media::kEndedTitle, true); @@ -317,89 +321,81 @@ #if BUILDFLAG(IS_CHROMEOS_ASH) IN_PROC_BROWSER_TEST_P(MediaTest, VideoBearAviMp3Mpeg4) { - PlayVideo("bear_mpeg4_mp3.avi", GetParam()); + PlayVideo("bear_mpeg4_mp3.avi"); } IN_PROC_BROWSER_TEST_P(MediaTest, VideoBearAviMp3Mpeg4Asp) { - PlayVideo("bear_mpeg4asp_mp3.avi", GetParam()); + PlayVideo("bear_mpeg4asp_mp3.avi"); } IN_PROC_BROWSER_TEST_P(MediaTest, VideoBearAviMp3Divx) { - PlayVideo("bear_divx_mp3.avi", GetParam()); + PlayVideo("bear_divx_mp3.avi"); } IN_PROC_BROWSER_TEST_P(MediaTest, VideoBear3gpAacH264) { - PlayVideo("bear_h264_aac.3gp", GetParam()); + PlayVideo("bear_h264_aac.3gp"); } IN_PROC_BROWSER_TEST_P(MediaTest, VideoBear3gpAmrnbMpeg4) { - PlayVideo("bear_mpeg4_amrnb.3gp", GetParam()); + PlayVideo("bear_mpeg4_amrnb.3gp"); } IN_PROC_BROWSER_TEST_P(MediaTest, VideoBearWavGsmms) { - PlayAudio("bear_gsm_ms.wav", GetParam()); + PlayAudio("bear_gsm_ms.wav"); } #endif // BUILDFLAG(IS_CHROMEOS_ASH) #endif // BUILDFLAG(USE_PROPRIETARY_CODECS) IN_PROC_BROWSER_TEST_P(MediaTest, AudioBearFlac) { - PlayAudio("bear.flac", GetParam()); + PlayAudio("bear.flac"); } IN_PROC_BROWSER_TEST_P(MediaTest, AudioBearFlacOgg) { - PlayAudio("bear-flac.ogg", GetParam()); + PlayAudio("bear-flac.ogg"); } IN_PROC_BROWSER_TEST_P(MediaTest, VideoBearWavAlaw) { - PlayAudio("bear_alaw.wav", GetParam()); + PlayAudio("bear_alaw.wav"); } IN_PROC_BROWSER_TEST_P(MediaTest, VideoBearWavMulaw) { - PlayAudio("bear_mulaw.wav", GetParam()); + PlayAudio("bear_mulaw.wav"); } IN_PROC_BROWSER_TEST_P(MediaTest, VideoBearWavPcm) { - PlayAudio("bear_pcm.wav", GetParam()); + PlayAudio("bear_pcm.wav"); } IN_PROC_BROWSER_TEST_P(MediaTest, VideoBearWavPcm3kHz) { - PlayAudio("bear_3kHz.wav", GetParam()); + PlayAudio("bear_3kHz.wav"); } IN_PROC_BROWSER_TEST_P(MediaTest, VideoBearWavPcm192kHz) { - PlayAudio("bear_192kHz.wav", GetParam()); + PlayAudio("bear_192kHz.wav"); } IN_PROC_BROWSER_TEST_P(MediaTest, VideoTulipWebm) { - PlayVideo("tulip2.webm", GetParam()); + PlayVideo("tulip2.webm"); } IN_PROC_BROWSER_TEST_P(MediaTest, VideoErrorMissingResource) { RunErrorMessageTest("video", "nonexistent_file.webm", - "MEDIA_ELEMENT_ERROR: Format error", GetParam()); + "MEDIA_ELEMENT_ERROR: Format error"); } IN_PROC_BROWSER_TEST_P(MediaTest, VideoErrorEmptySrcAttribute) { - RunErrorMessageTest("video", "", "MEDIA_ELEMENT_ERROR: Empty src attribute", - GetParam()); + RunErrorMessageTest("video", "", "MEDIA_ELEMENT_ERROR: Empty src attribute"); } IN_PROC_BROWSER_TEST_P(MediaTest, VideoErrorNoSupportedStreams) { - // The test doesn't work from file: scheme without AllowFileAccessFromFiles. - // TODO(wolenetz): https://crbug.com/1071473: Investigate and reenable the - // test. - if (!GetParam()) - return; - RunErrorMessageTest("video", "no_streams.webm", "DEMUXER_ERROR_NO_SUPPORTED_STREAMS: FFmpegDemuxer: no " - "supported streams", - GetParam()); + "supported streams"); } // Covers tear-down when navigating away as opposed to browser exiting. -IN_PROC_BROWSER_TEST_F(MediaTest, Navigate) { - PlayVideo("bear.webm", false); +IN_PROC_BROWSER_TEST_P(MediaTest, Navigate) { + PlayVideo("bear.webm"); EXPECT_TRUE(NavigateToURL(shell(), GURL(url::kAboutBlankURL))); EXPECT_FALSE(shell()->web_contents()->IsCrashed()); } @@ -407,11 +403,10 @@ IN_PROC_BROWSER_TEST_P(MediaTest, AudioOnly_XHE_AAC_MP4) { if (media::IsSupportedAudioType( {media::AudioCodec::kAAC, media::AudioCodecProfile::kXHE_AAC})) { - PlayAudio("noise-xhe-aac.mp4", GetParam()); + PlayAudio("noise-xhe-aac.mp4"); } } -INSTANTIATE_TEST_SUITE_P(File, MediaTest, ::testing::Values(false)); -INSTANTIATE_TEST_SUITE_P(Http, MediaTest, ::testing::Values(true)); +INSTANTIATE_TEST_SUITE_P(Default, MediaTest, ::testing::Bool()); } // namespace content
diff --git a/content/browser/permissions/permission_service_impl.cc b/content/browser/permissions/permission_service_impl.cc index 921703b..37b5482e 100644 --- a/content/browser/permissions/permission_service_impl.cc +++ b/content/browser/permissions/permission_service_impl.cc
@@ -14,6 +14,7 @@ #include "base/memory/ptr_util.h" #include "content/browser/bad_message.h" #include "content/browser/permissions/permission_controller_impl.h" +#include "content/browser/permissions/permission_util.h" #include "content/public/browser/browser_context.h" #include "content/public/browser/permission_result.h" #include "content/public/browser/render_frame_host.h" @@ -39,23 +40,6 @@ std::move(callback).Run(vector[0]); } -bool IsDomainOverride(const PermissionDescriptorPtr& descriptor) { - return descriptor->extension && descriptor->extension->is_storage_access(); -} - -url::Origin ExtractDomainOverride(const PermissionDescriptorPtr& descriptor) { - const blink::mojom::StorageAccessPermissionDescriptorPtr& - override_descriptor = descriptor->extension->get_storage_access(); - return override_descriptor->siteOverride; -} - -bool IsDomainOverrideEnabled() { - // This code path is currently available only when - // requestStorageAccessForOrigin is enabled. - return base::FeatureList::IsEnabled( - blink::features::kStorageAccessAPIForOriginExtension); -} - } // anonymous namespace class PermissionServiceImpl::PendingRequest { @@ -145,17 +129,15 @@ int pending_request_id = pending_requests_.Add(std::move(pending_request)); - if (!permissions.empty() && IsDomainOverride(permissions[0])) { - if (!IsDomainOverrideEnabled()) { + if (!permissions.empty() && + PermissionUtil::IsDomainOverride(permissions[0])) { + if (!PermissionUtil::ValidateDomainOverride( + types, context_->render_frame_host())) { ReceivedBadMessage(); return; } - if (types.size() > 1) { - // Requests with domain overrides must be requested individually. - ReceivedBadMessage(); - return; - } - url::Origin requested_origin = ExtractDomainOverride(permissions[0]); + url::Origin requested_origin = + PermissionUtil::ExtractDomainOverride(permissions[0]); PermissionControllerImpl::FromBrowserContext(browser_context) ->RequestPermissions( types, context_->render_frame_host(), requested_origin,
diff --git a/content/browser/permissions/permission_util.cc b/content/browser/permissions/permission_util.cc index 009e6353..c090867 100644 --- a/content/browser/permissions/permission_util.cc +++ b/content/browser/permissions/permission_util.cc
@@ -8,10 +8,13 @@ #include "build/build_config.h" #include "content/public/browser/render_frame_host.h" #include "content/public/browser/web_contents.h" +#include "third_party/blink/public/common/features.h" #include "third_party/blink/public/common/web_preferences/web_preferences.h" #include "url/gurl.h" #include "url/origin.h" +using blink::mojom::PermissionDescriptorPtr; + namespace content { // Due to dependency issues, this method is duplicated from @@ -37,4 +40,35 @@ return render_frame_host->GetLastCommittedOrigin().GetURL(); } +bool PermissionUtil::IsDomainOverride( + const PermissionDescriptorPtr& descriptor) { + return descriptor->extension && descriptor->extension->is_storage_access(); +} + +url::Origin PermissionUtil::ExtractDomainOverride( + const PermissionDescriptorPtr& descriptor) { + const blink::mojom::StorageAccessPermissionDescriptorPtr& + override_descriptor = descriptor->extension->get_storage_access(); + return override_descriptor->siteOverride; +} + +bool PermissionUtil::ValidateDomainOverride( + const std::vector<blink::PermissionType>& types, + RenderFrameHost* rfh) { + if (!base::FeatureList::IsEnabled( + blink::features::kStorageAccessAPIForOriginExtension)) { + return false; + } + if (types.size() > 1) { + // Requests with domain overrides must be requested individually. + return false; + } + if (!rfh || !rfh->IsInPrimaryMainFrame()) { + // Requests with domain overrides must be requested from a top-level + // browsing context. + return false; + } + return true; +} + } // namespace content
diff --git a/content/browser/permissions/permission_util.h b/content/browser/permissions/permission_util.h index 8780c2c..a045402 100644 --- a/content/browser/permissions/permission_util.h +++ b/content/browser/permissions/permission_util.h
@@ -6,6 +6,9 @@ #define CONTENT_BROWSER_PERMISSIONS_PERMISSION_UTIL_H_ #include "content/common/content_export.h" +#include "third_party/blink/public/common/permissions/permission_utils.h" +#include "third_party/blink/public/mojom/permissions/permission.mojom.h" +#include "url/origin.h" class GURL; @@ -19,6 +22,30 @@ // TODO(crbug.com/1327384): Remove this method when possible. CONTENT_EXPORT static GURL GetLastCommittedOriginAsURL( content::RenderFrameHost* render_frame_host); + + // Determines whether the passed-in descriptor indicates a domain override is + // being used. The override mechanism is currently only used by one permission + // type, specifically storage access requests on behalf of another domain. + CONTENT_EXPORT static bool IsDomainOverride( + const blink::mojom::PermissionDescriptorPtr& descriptor); + + // For a descriptor that indicates a domain override is used, retrieve it as + // an origin. The override mechanism is currently only used by one permission + // type, specifically storage access requests on behalf of another domain. + CONTENT_EXPORT static url::Origin ExtractDomainOverride( + const blink::mojom::PermissionDescriptorPtr& descriptor); + + // Determine whether the domain override mechanism is enabled by features. The + // override mechanism is currently only used by one permission type, + // specifically storage access requests on behalf of another domain. + CONTENT_EXPORT static bool IsDomainOverrideEnabled(); + + // For a domain override, determines whether it is valid. The override + // mechanism is currently only used by one permission type, specifically + // storage access requests on behalf of another domain. + CONTENT_EXPORT static bool ValidateDomainOverride( + const std::vector<blink::PermissionType>& types, + RenderFrameHost* rfh); }; } // namespace content
diff --git a/content/browser/permissions/permission_util_unittest.cc b/content/browser/permissions/permission_util_unittest.cc new file mode 100644 index 0000000..9a892be --- /dev/null +++ b/content/browser/permissions/permission_util_unittest.cc
@@ -0,0 +1,107 @@ +// 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. + +#include "content/browser/permissions/permission_util.h" +#include "base/test/scoped_feature_list.h" +#include "content/public/test/test_browser_context.h" +#include "content/public/test/test_renderer_host.h" +#include "content/public/test/web_contents_tester.h" +#include "testing/gtest/include/gtest/gtest.h" +#include "third_party/blink/public/common/features.h" +#include "third_party/blink/public/mojom/permissions/permission.mojom-forward.h" +#include "url/gurl.h" +#include "url/origin.h" + +namespace content { + +class PermissionUtilTest : public ::testing::Test {}; + +TEST_F(PermissionUtilTest, TestIsDomainOverrideNoExtension) { + blink::mojom::PermissionDescriptorPtr ptr = + blink::mojom::PermissionDescriptor::New(); + EXPECT_FALSE(PermissionUtil::IsDomainOverride(ptr)); +} + +TEST_F(PermissionUtilTest, TestIsDomainOverrideWrongExtension) { + blink::mojom::PermissionDescriptorPtr ptr = + blink::mojom::PermissionDescriptor::New(); + ptr->extension = + blink::mojom::PermissionDescriptorExtension::NewMidi(nullptr); + EXPECT_FALSE(PermissionUtil::IsDomainOverride(ptr)); +} + +TEST_F(PermissionUtilTest, TestIsDomainOverride) { + blink::mojom::PermissionDescriptorPtr ptr = + blink::mojom::PermissionDescriptor::New(); + ptr->extension = + blink::mojom::PermissionDescriptorExtension::NewStorageAccess(nullptr); + EXPECT_TRUE(PermissionUtil::IsDomainOverride(ptr)); +} + +TEST_F(PermissionUtilTest, TestExtractDomainOverride) { + url::Origin expected = url::Origin::Create(GURL("https://example.xyz")); + blink::mojom::PermissionDescriptorPtr ptr = + blink::mojom::PermissionDescriptor::New(); + auto storage_access_extension = + blink::mojom::StorageAccessPermissionDescriptor::New(); + storage_access_extension->siteOverride = expected; + ptr->extension = + blink::mojom::PermissionDescriptorExtension::NewStorageAccess( + std::move(storage_access_extension)); + EXPECT_EQ(PermissionUtil::ExtractDomainOverride(ptr), expected); +} + +TEST_F(PermissionUtilTest, TestInvalidDomainOverrideFeatureDisabled) { + EXPECT_FALSE(PermissionUtil::ValidateDomainOverride({}, nullptr)); +} +TEST_F(PermissionUtilTest, TestInvalidDomainOverrideMultiRequest) { + base::test::ScopedFeatureList scoped_feature_list; + scoped_feature_list.InitAndEnableFeature( + blink::features::kStorageAccessAPIForOriginExtension); + + EXPECT_FALSE(PermissionUtil::ValidateDomainOverride( + {blink::PermissionType::STORAGE_ACCESS_GRANT, + blink::PermissionType::STORAGE_ACCESS_GRANT}, + nullptr)); +} +TEST_F(PermissionUtilTest, TestInvalidDomainOverrideNullRfh) { + content::BrowserTaskEnvironment task_environment; + base::test::ScopedFeatureList scoped_feature_list; + scoped_feature_list.InitAndEnableFeature( + blink::features::kStorageAccessAPIForOriginExtension); + + TestBrowserContext browser_context; + RenderViewHostTestEnabler enabler; + std::unique_ptr<WebContents> web_contents( + WebContentsTester::CreateTestWebContents( + WebContents::CreateParams(&browser_context))); + + WebContentsTester* web_contents_tester = + WebContentsTester::For(web_contents.get()); + web_contents_tester->NavigateAndCommit(GURL("https://example.xyz")); + + EXPECT_FALSE(PermissionUtil::ValidateDomainOverride( + {blink::PermissionType::STORAGE_ACCESS_GRANT}, nullptr)); +} +TEST_F(PermissionUtilTest, TestValidDomainOverride) { + content::BrowserTaskEnvironment task_environment; + base::test::ScopedFeatureList scoped_feature_list; + scoped_feature_list.InitAndEnableFeature( + blink::features::kStorageAccessAPIForOriginExtension); + + TestBrowserContext browser_context; + RenderViewHostTestEnabler enabler; + std::unique_ptr<WebContents> web_contents( + WebContentsTester::CreateTestWebContents( + WebContents::CreateParams(&browser_context))); + + WebContentsTester* web_contents_tester = + WebContentsTester::For(web_contents.get()); + web_contents_tester->NavigateAndCommit(GURL("https://example.xyz")); + + EXPECT_TRUE(PermissionUtil::ValidateDomainOverride( + {blink::PermissionType::STORAGE_ACCESS_GRANT}, + web_contents->GetPrimaryMainFrame())); +} +} // namespace content
diff --git a/content/browser/preloading/prefetch/prefetch_service.cc b/content/browser/preloading/prefetch/prefetch_service.cc index 3ddc091..d1ac012e 100644 --- a/content/browser/preloading/prefetch/prefetch_service.cc +++ b/content/browser/preloading/prefetch/prefetch_service.cc
@@ -1029,6 +1029,7 @@ base::WeakPtr<PrefetchContainer> prefetch_container, const net::CookieAccessResultList& cookie_list, const net::CookieAccessResultList& excluded_cookies) { + prefetch_container->OnIsolatedCookiesReadCompleteAndWriteStart(); RecordPrefetchProxyPrefetchMainframeCookiesToCopy(cookie_list.size()); if (cookie_list.empty()) {
diff --git a/content/browser/renderer_host/navigation_request.cc b/content/browser/renderer_host/navigation_request.cc index c672ad55..b91cbd2 100644 --- a/content/browser/renderer_host/navigation_request.cc +++ b/content/browser/renderer_host/navigation_request.cc
@@ -4201,6 +4201,17 @@ if (frame_tree_node_->IsErrorPageIsolationEnabled()) return ErrorPageProcess::kIsolatedProcess; + // Site-isolated <webview> guests do not currently support committing + // error pages with an unknown URL scheme (such as when navigating a guest to + // an external protocol) in the process computed for the destination URL. + // Therefore, leave such cases in the original process. See + // https://crbug.com/1366450. + if (net_error == net::ERR_UNKNOWN_URL_SCHEME && + frame_tree_node_->current_frame_host()->GetSiteInstance()->IsGuest() && + SiteIsolationPolicy::IsSiteIsolationForGuestsEnabled()) { + return ErrorPageProcess::kCurrentProcess; + } + // Decide whether to leave the error page in the original process. // * If this was a renderer-initiated navigation, and the request is blocked // because the initiating document wasn't allowed to make the request,
diff --git a/content/test/BUILD.gn b/content/test/BUILD.gn index c53db0d..2b33375e 100644 --- a/content/test/BUILD.gn +++ b/content/test/BUILD.gn
@@ -2315,6 +2315,7 @@ "../browser/payments/payment_app_provider_impl_unittest.cc", "../browser/payments/payment_manager_unittest.cc", "../browser/permissions/permission_controller_impl_unittest.cc", + "../browser/permissions/permission_util_unittest.cc", "../browser/picture_in_picture/picture_in_picture_service_impl_unittest.cc", "../browser/preloading/prefetch/prefetch_canary_checker_unittest.cc", "../browser/preloading/prefetch/prefetch_container_unittest.cc",
diff --git a/content/test/attribution_simulator_input_parser.cc b/content/test/attribution_simulator_input_parser.cc index 99fe544..8283cfd4 100644 --- a/content/test/attribution_simulator_input_parser.cc +++ b/content/test/attribution_simulator_input_parser.cc
@@ -252,7 +252,7 @@ url::Origin destination_origin; absl::optional<uint64_t> debug_key; int64_t priority = 0; - base::TimeDelta expiry; + absl::optional<base::TimeDelta> expiry; AttributionFilterData filter_data; AttributionAggregationKeys aggregation_keys; @@ -264,7 +264,7 @@ destination_origin = ParseOrigin(dict, "destination"); debug_key = ParseOptionalUint64(dict, "debug_key"); priority = ParseOptionalInt64(dict, "priority").value_or(0); - expiry = ParseSourceExpiry(dict).value_or(base::Days(30)); + expiry = ParseSourceExpiry(dict); filter_data = ParseFilterData( dict, "filter_data", &AttributionFilterData::FromSourceFilterValues);
diff --git a/content/test/gpu/fuchsia_util.py b/content/test/gpu/fuchsia_util.py index cfb37b81..c43f807 100644 --- a/content/test/gpu/fuchsia_util.py +++ b/content/test/gpu/fuchsia_util.py
@@ -16,7 +16,7 @@ def RunTestOnFuchsiaDevice(script_type): """Helper method that runs Telemetry based tests on Fuchsia.""" - parser = argparse.ArgumentParser() + parser = argparse.ArgumentParser(add_help=False) register_common_args(parser) script_args, rest_args = parser.parse_known_args()
diff --git a/content/test/gpu/gpu_tests/test_expectations/webgl_conformance_expectations.txt b/content/test/gpu/gpu_tests/test_expectations/webgl_conformance_expectations.txt index 0a37bb7..60939fd3 100644 --- a/content/test/gpu/gpu_tests/test_expectations/webgl_conformance_expectations.txt +++ b/content/test/gpu/gpu_tests/test_expectations/webgl_conformance_expectations.txt
@@ -336,26 +336,6 @@ #################### # Fuchsia failures # #################### - -# Astro specific issues -crbug.com/1145861 [ fuchsia fuchsia-board-astro ] conformance/extensions/oes-texture-float-with-video.html [ Failure ] -crbug.com/1145861 [ fuchsia fuchsia-board-astro ] conformance/extensions/oes-texture-half-float-with-video.html [ Failure ] -crbug.com/1145861 [ fuchsia fuchsia-board-astro ] conformance/textures/image_bitmap_from_video/tex-2d-luminance_alpha-luminance_alpha-unsigned_byte.html [ Failure ] -crbug.com/1145861 [ fuchsia fuchsia-board-astro ] conformance/textures/image_bitmap_from_video/tex-2d-luminance-luminance-unsigned_byte.html [ Failure ] -crbug.com/1145861 [ fuchsia fuchsia-board-astro ] conformance/textures/image_bitmap_from_video/tex-2d-rgb-rgb-unsigned_byte.html [ Failure ] -crbug.com/1145861 [ fuchsia fuchsia-board-astro ] conformance/textures/image_bitmap_from_video/tex-2d-rgb-rgb-unsigned_short_5_6_5.html [ Failure ] -crbug.com/1145861 [ fuchsia fuchsia-board-astro ] conformance/textures/image_bitmap_from_video/tex-2d-rgba-rgba-unsigned_byte.html [ Failure ] -crbug.com/1145861 [ fuchsia fuchsia-board-astro ] conformance/textures/image_bitmap_from_video/tex-2d-rgba-rgba-unsigned_short_4_4_4_4.html [ Failure ] -crbug.com/1145861 [ fuchsia fuchsia-board-astro ] conformance/textures/image_bitmap_from_video/tex-2d-rgba-rgba-unsigned_short_5_5_5_1.html [ Failure ] -crbug.com/1355935 [ fuchsia fuchsia-board-astro ] conformance/textures/video/tex-2d-alpha-alpha-unsigned_byte.html [ Failure ] -crbug.com/1145861 [ fuchsia fuchsia-board-astro ] conformance/textures/video/tex-2d-luminance_alpha-luminance_alpha-unsigned_byte.html [ Failure ] -crbug.com/1145861 [ fuchsia fuchsia-board-astro ] conformance/textures/video/tex-2d-luminance-luminance-unsigned_byte.html [ Failure ] -crbug.com/1145861 [ fuchsia fuchsia-board-astro ] conformance/textures/video/tex-2d-rgb-rgb-unsigned_byte.html [ Failure ] -crbug.com/1145861 [ fuchsia fuchsia-board-astro ] conformance/textures/video/tex-2d-rgb-rgb-unsigned_short_5_6_5.html [ Failure ] -crbug.com/1145861 [ fuchsia fuchsia-board-astro ] conformance/textures/video/tex-2d-rgba-rgba-unsigned_byte.html [ Failure ] -crbug.com/1145861 [ fuchsia fuchsia-board-astro ] conformance/textures/video/tex-2d-rgba-rgba-unsigned_short_4_4_4_4.html [ Failure ] -crbug.com/1145861 [ fuchsia fuchsia-board-astro ] conformance/textures/video/tex-2d-rgba-rgba-unsigned_short_5_5_5_1.html [ Failure ] - # OOM on hardware devices crbug.com/1146483 [ fuchsia fuchsia-board-astro ] conformance/textures/misc/texture-video-transparent.html [ Failure ] @@ -387,26 +367,7 @@ # [ fuchsia ] conformance/context/context-attributes-alpha-depth-stencil-antialias.html [ Failure ] # Sherlock failures -crbug.com/1145861 [ fuchsia fuchsia-board-sherlock renderer-skia-vulkan ] conformance/extensions/oes-texture-float-with-video.html [ Failure ] -crbug.com/1145861 [ fuchsia fuchsia-board-sherlock renderer-skia-vulkan ] conformance/extensions/oes-texture-half-float-with-video.html [ Failure ] -crbug.com/1145861 [ fuchsia fuchsia-board-sherlock renderer-skia-vulkan ] conformance/textures/image_bitmap_from_video/tex-2d-luminance_alpha-luminance_alpha-unsigned_byte.html [ Failure ] -crbug.com/1268138 [ fuchsia fuchsia-board-sherlock renderer-skia-vulkan ] conformance/textures/image_bitmap_from_video/tex-2d-luminance-luminance-unsigned_byte.html [ Failure ] -crbug.com/1268138 [ fuchsia fuchsia-board-sherlock renderer-skia-vulkan ] conformance/textures/image_bitmap_from_video/tex-2d-rgba-rgba-unsigned_byte.html [ Failure ] -crbug.com/1268138 [ fuchsia fuchsia-board-sherlock renderer-skia-vulkan ] conformance/textures/image_bitmap_from_video/tex-2d-rgba-rgba-unsigned_short_5_5_5_1.html [ Failure ] -crbug.com/1145861 [ fuchsia fuchsia-board-sherlock renderer-skia-vulkan ] conformance/textures/image_bitmap_from_video/tex-2d-rgb-rgb-unsigned_byte.html [ Failure ] -crbug.com/1145861 [ fuchsia fuchsia-board-sherlock renderer-skia-vulkan ] conformance/textures/image_bitmap_from_video/tex-2d-rgb-rgb-unsigned_short_5_6_5.html [ Failure ] -crbug.com/1145861 [ fuchsia fuchsia-board-sherlock renderer-skia-vulkan ] conformance/textures/image_bitmap_from_video/tex-2d-rgba-rgba-unsigned_short_4_4_4_4.html [ Failure ] -crbug.com/1268138 [ fuchsia fuchsia-board-sherlock renderer-skia-vulkan ] conformance/textures/misc/texture-npot-video.html [ Failure ] crbug.com/1261867 [ fuchsia fuchsia-board-sherlock renderer-skia-vulkan ] conformance/textures/misc/texture-video-transparent.html [ Failure ] -crbug.com/1355935 [ fuchsia fuchsia-board-sherlock renderer-skia-vulkan ] conformance/textures/video/tex-2d-alpha-alpha-unsigned_byte.html [ Failure ] -crbug.com/1268138 [ fuchsia fuchsia-board-sherlock renderer-skia-vulkan ] conformance/textures/video/tex-2d-luminance-luminance-unsigned_byte.html [ Failure ] -crbug.com/1268138 [ fuchsia fuchsia-board-sherlock renderer-skia-vulkan ] conformance/textures/video/tex-2d-rgba-rgba-unsigned_byte.html [ Failure ] -crbug.com/1268138 [ fuchsia fuchsia-board-sherlock renderer-skia-vulkan ] conformance/textures/video/tex-2d-rgba-rgba-unsigned_short_5_5_5_1.html [ Failure ] -crbug.com/1268138 [ fuchsia fuchsia-board-sherlock renderer-skia-vulkan ] conformance/textures/video/tex-2d-rgb-rgb-unsigned_byte.html [ Failure ] -crbug.com/1145861 [ fuchsia fuchsia-board-sherlock renderer-skia-vulkan ] conformance/textures/misc/texture-corner-case-videos.html [ Failure ] -crbug.com/1145861 [ fuchsia fuchsia-board-sherlock renderer-skia-vulkan ] conformance/textures/video/tex-2d-luminance_alpha-luminance_alpha-unsigned_byte.html [ Failure ] -crbug.com/1145861 [ fuchsia fuchsia-board-sherlock renderer-skia-vulkan ] conformance/textures/video/tex-2d-rgb-rgb-unsigned_short_5_6_5.html [ Failure ] -crbug.com/1145861 [ fuchsia fuchsia-board-sherlock renderer-skia-vulkan ] conformance/textures/video/tex-2d-rgba-rgba-unsigned_short_4_4_4_4.html [ Failure ] # Failing on emulator seemingly due to network issues. crbug.com/1359408 [ fuchsia fuchsia-board-qemu-x64 ] conformance/attribs/gl-vertexattribpointer-offsets.html [ Failure ]
diff --git a/device/bluetooth/floss/bluetooth_adapter_floss.cc b/device/bluetooth/floss/bluetooth_adapter_floss.cc index 13a624d..01b090f 100644 --- a/device/bluetooth/floss/bluetooth_adapter_floss.cc +++ b/device/bluetooth/floss/bluetooth_adapter_floss.cc
@@ -890,26 +890,22 @@ << ", scanner id = " << static_cast<int>(scanner_id) << ", status = " << static_cast<int>(status); - if (status != GattStatus::kSuccess) { - BLUETOOTH_LOG(ERROR) << "Error registering scanner " << uuid - << ", status: " << static_cast<int>(status); - scanners_.erase(uuid); - return; - } - if (!base::Contains(scanners_, uuid)) { VLOG(1) << "ScannerRegistered but no longer exists " << uuid; return; } - scanners_[uuid]->OnActivate(scanner_id); + if (status != GattStatus::kSuccess) { + BLUETOOTH_LOG(ERROR) << "Error registering scanner " << uuid + << ", status: " << static_cast<int>(status); + scanners_[uuid]->OnActivate(scanner_id, /*success=*/false); + return; + } FlossDBusManager::Get()->GetLEScanClient()->StartScan( base::BindOnce(&BluetoothAdapterFloss::OnStartScan, - weak_ptr_factory_.GetWeakPtr()), + weak_ptr_factory_.GetWeakPtr(), uuid, scanner_id), scanner_id, ScanSettings{}, ScanFilter{}); - - return; } void BluetoothAdapterFloss::ScanResultReceived(ScanResult scan_result) { @@ -1021,11 +1017,25 @@ BLUETOOTH_LOG(EVENT) << "Registering scanner " << ret.value(); } -void BluetoothAdapterFloss::OnStartScan(DBusResult<Void> ret) { - BLUETOOTH_LOG(EVENT) << "OnStartScan success = " << ret.has_value(); - if (!ret.has_value()) { - BLUETOOTH_LOG(ERROR) << "Failed StartScan: " << ret.error(); +void BluetoothAdapterFloss::OnStartScan( + device::BluetoothUUID uuid, + uint8_t scanner_id, + DBusResult<FlossDBusClient::BtifStatus> ret) { + if (!base::Contains(scanners_, uuid)) { + VLOG(1) << "Started scanning but scanner no longer exists " << uuid; + return; } + + if (!ret.has_value() || + ret.value() != FlossDBusClient::BtifStatus::kSuccess) { + BLUETOOTH_LOG(ERROR) << "Failed StartScan: " << ret.error() + << ", status: " << static_cast<uint32_t>(ret.value()); + scanners_[uuid]->OnActivate(scanner_id, /*success=*/false); + return; + } + + BLUETOOTH_LOG(EVENT) << "OnStartScan succeeded"; + scanners_[uuid]->OnActivate(scanner_id, /*success=*/true); } void BluetoothAdapterFloss::OnLowEnergyScanSessionDestroyed(
diff --git a/device/bluetooth/floss/bluetooth_adapter_floss.h b/device/bluetooth/floss/bluetooth_adapter_floss.h index 834d998..4210265 100644 --- a/device/bluetooth/floss/bluetooth_adapter_floss.h +++ b/device/bluetooth/floss/bluetooth_adapter_floss.h
@@ -224,7 +224,9 @@ void OnRegisterScanner( base::WeakPtr<BluetoothLowEnergyScanSessionFloss> scan_session, DBusResult<device::BluetoothUUID> ret); - void OnStartScan(DBusResult<Void> ret); + void OnStartScan(device::BluetoothUUID uuid, + uint8_t scanner_id, + DBusResult<FlossDBusClient::BtifStatus> ret); void OnLowEnergyScanSessionDestroyed(const std::string& uuid_str); void OnUnregisterScanner(uint8_t scanner_id, DBusResult<bool> ret);
diff --git a/device/bluetooth/floss/bluetooth_floss_unittest.cc b/device/bluetooth/floss/bluetooth_floss_unittest.cc index 99be970..c0271c2 100644 --- a/device/bluetooth/floss/bluetooth_floss_unittest.cc +++ b/device/bluetooth/floss/bluetooth_floss_unittest.cc
@@ -148,12 +148,13 @@ floss_adapter->ScannerRegistered(device::BluetoothUUID(kTestUuidStr), kTestScannerId, GattStatus::kSuccess); + + base::RunLoop().RunUntilIdle(); + ScanResult scan_result; scan_result.address = kTestDeviceAddr; scan_result.name = kTestDeviceName; floss_adapter->ScanResultReceived(scan_result); - - base::RunLoop().RunUntilIdle(); } protected:
diff --git a/device/bluetooth/floss/bluetooth_low_energy_scan_session_floss.cc b/device/bluetooth/floss/bluetooth_low_energy_scan_session_floss.cc index d5a6736..e761bca 100644 --- a/device/bluetooth/floss/bluetooth_low_energy_scan_session_floss.cc +++ b/device/bluetooth/floss/bluetooth_low_energy_scan_session_floss.cc
@@ -20,13 +20,20 @@ std::move(destructor_callback_).Run(uuid_.value()); } -void BluetoothLowEnergyScanSessionFloss::OnActivate(uint8_t scanner_id) { - has_activated_ = true; +void BluetoothLowEnergyScanSessionFloss::OnActivate(uint8_t scanner_id, + bool success) { scanner_id_ = scanner_id; if (!delegate_) { return; } + if (!success) { + delegate_->OnSessionStarted( + this, BluetoothLowEnergyScanSession::ErrorCode::kFailed); + return; + } + + has_activated_ = true; delegate_->OnSessionStarted(this, /*error_code=*/absl::nullopt); }
diff --git a/device/bluetooth/floss/bluetooth_low_energy_scan_session_floss.h b/device/bluetooth/floss/bluetooth_low_energy_scan_session_floss.h index 0db7400e..00cb1f0 100644 --- a/device/bluetooth/floss/bluetooth_low_energy_scan_session_floss.h +++ b/device/bluetooth/floss/bluetooth_low_energy_scan_session_floss.h
@@ -21,7 +21,7 @@ base::OnceCallback<void(const std::string&)> destructor_callback); ~BluetoothLowEnergyScanSessionFloss() override; - void OnActivate(uint8_t scanner_id); + void OnActivate(uint8_t scanner_id, bool success); void OnRelease(); void OnDeviceFound(device::BluetoothDevice* device); void OnDeviceLost(device::BluetoothDevice* device);
diff --git a/device/bluetooth/floss/fake_floss_lescan_client.cc b/device/bluetooth/floss/fake_floss_lescan_client.cc index c60a40d..e9d69300 100644 --- a/device/bluetooth/floss/fake_floss_lescan_client.cc +++ b/device/bluetooth/floss/fake_floss_lescan_client.cc
@@ -37,12 +37,14 @@ FROM_HERE, base::BindOnce(std::move(callback), true)); } -void FakeFlossLEScanClient::StartScan(ResponseCallback<Void> callback, +void FakeFlossLEScanClient::StartScan(ResponseCallback<BtifStatus> callback, uint8_t scanner_id, const ScanSettings& scan_settings, const ScanFilter& filters) { // TODO (b/217274013): filters are currently being ignored scanner_ids_.insert(scanner_id); + base::ThreadTaskRunnerHandle::Get()->PostTask( + FROM_HERE, base::BindOnce(std::move(callback), BtifStatus::kSuccess)); } } // namespace floss
diff --git a/device/bluetooth/floss/fake_floss_lescan_client.h b/device/bluetooth/floss/fake_floss_lescan_client.h index 074a23d..0e055f7 100644 --- a/device/bluetooth/floss/fake_floss_lescan_client.h +++ b/device/bluetooth/floss/fake_floss_lescan_client.h
@@ -26,7 +26,7 @@ ResponseCallback<device::BluetoothUUID> callback) override; void UnregisterScanner(ResponseCallback<bool> callback, uint8_t scanner_id) override; - void StartScan(ResponseCallback<Void> callback, + void StartScan(ResponseCallback<BtifStatus> callback, uint8_t scanner_id, const ScanSettings& scan_settings, const ScanFilter& filters) override;
diff --git a/device/bluetooth/floss/floss_lescan_client.cc b/device/bluetooth/floss/floss_lescan_client.cc index 4415d2e..8a1a57f 100644 --- a/device/bluetooth/floss/floss_lescan_client.cc +++ b/device/bluetooth/floss/floss_lescan_client.cc
@@ -130,7 +130,7 @@ scanner_id); } -void FlossLEScanClient::StartScan(ResponseCallback<Void> callback, +void FlossLEScanClient::StartScan(ResponseCallback<BtifStatus> callback, uint8_t scanner_id, const ScanSettings& scan_settings, const ScanFilter& filter) { @@ -138,7 +138,7 @@ scan_settings, filter); } -void FlossLEScanClient::StopScan(ResponseCallback<Void> callback, +void FlossLEScanClient::StopScan(ResponseCallback<BtifStatus> callback, uint8_t scanner_id) { CallLEScanMethod<>(std::move(callback), adapter::kStopScan, scanner_id); }
diff --git a/device/bluetooth/floss/floss_lescan_client.h b/device/bluetooth/floss/floss_lescan_client.h index 1fc95f4..5d85703 100644 --- a/device/bluetooth/floss/floss_lescan_client.h +++ b/device/bluetooth/floss/floss_lescan_client.h
@@ -104,11 +104,12 @@ ResponseCallback<device::BluetoothUUID> callback); virtual void UnregisterScanner(ResponseCallback<bool> callback, uint8_t scanner_id); - virtual void StartScan(ResponseCallback<Void> callback, + virtual void StartScan(ResponseCallback<BtifStatus> callback, uint8_t scanner_id, const ScanSettings& scan_settings, const ScanFilter& filter); - virtual void StopScan(ResponseCallback<Void> callback, uint8_t scanner_id); + virtual void StopScan(ResponseCallback<BtifStatus> callback, + uint8_t scanner_id); protected: // ScannerClientObserver overrides
diff --git a/device/bluetooth/floss/floss_lescan_client_unittest.cc b/device/bluetooth/floss/floss_lescan_client_unittest.cc index de068bd..8385161 100644 --- a/device/bluetooth/floss/floss_lescan_client_unittest.cc +++ b/device/bluetooth/floss/floss_lescan_client_unittest.cc
@@ -375,14 +375,21 @@ uint8_t param1; ASSERT_TRUE(FlossDBusClient::ReadDBusParam(&msg, ¶m1)); EXPECT_EQ(kTestScannerId, param1); - // Create a fake response with no return value. + // Create a fake response with BtifStatus return value. auto response = ::dbus::Response::CreateEmpty(); + dbus::MessageWriter writer(response.get()); + writer.AppendUint32( + static_cast<uint32_t>(FlossDBusClient::BtifStatus::kSuccess)); std::move(*cb).Run(response.get(), /*err=*/nullptr); }); - client_->StartScan(base::BindLambdaForTesting([](DBusResult<Void> ret) { - // Check that there is no error - EXPECT_TRUE(ret.has_value()); - }), + client_->StartScan(base::BindLambdaForTesting( + [](DBusResult<FlossDBusClient::BtifStatus> ret) { + // Check that there is no error and return is parsed + // correctly + EXPECT_TRUE(ret.has_value()); + EXPECT_EQ(ret.value(), + FlossDBusClient::BtifStatus::kSuccess); + }), kTestScannerId, ScanSettings{}, ScanFilter{}); // Method of 1 parameter with no return. @@ -396,14 +403,21 @@ ASSERT_TRUE(FlossDBusClient::ReadAllDBusParams(&msg, ¶m1)); EXPECT_EQ(kTestScannerId, param1); EXPECT_FALSE(msg.HasMoreData()); - // Create a fake response with no return value. + // Create a fake response with BtifStatus return value. auto response = ::dbus::Response::CreateEmpty(); + dbus::MessageWriter writer(response.get()); + writer.AppendUint32( + static_cast<uint32_t>(FlossDBusClient::BtifStatus::kSuccess)); std::move(*cb).Run(response.get(), /*err=*/nullptr); }); - client_->StopScan(base::BindLambdaForTesting([](DBusResult<Void> ret) { - // Check that there is no error - EXPECT_TRUE(ret.has_value()); - }), + client_->StopScan(base::BindLambdaForTesting( + [](DBusResult<FlossDBusClient::BtifStatus> ret) { + // Check that there is no error and return is parsed + // correctly + EXPECT_TRUE(ret.has_value()); + EXPECT_EQ(ret.value(), + FlossDBusClient::BtifStatus::kSuccess); + }), kTestScannerId); }
diff --git a/device/vr/android/arcore/arcore.cc b/device/vr/android/arcore/arcore.cc index c3988832..7faa13f0 100644 --- a/device/vr/android/arcore/arcore.cc +++ b/device/vr/android/arcore/arcore.cc
@@ -22,7 +22,7 @@ // return MatrixFromTransformedPoints( TransformDisplayUvCoords(kInputCoordinatesForTransform)) * - gfx::Transform(1, 0, 0, -1, 0, 1); + gfx::Transform::Affine(1, 0, 0, -1, 0, 1); } gfx::Transform ArCore::GetDepthUvFromScreenUvTransform() const {
diff --git a/device/vr/android/arcore/arcore_gl.cc b/device/vr/android/arcore/arcore_gl.cc index bd2009f..aa49005 100644 --- a/device/vr/android/arcore/arcore_gl.cc +++ b/device/vr/android/arcore/arcore_gl.cc
@@ -1732,7 +1732,7 @@ // Fill in the transform matrix in row-major order. The first three columns // contain the basis vectors, the fourth column the position offset. - gfx::Transform viewer_from_pointer( + auto viewer_from_pointer = gfx::Transform::RowMajor( new_x.x(), new_y.x(), new_z.x(), touch_point.x(), // row 1 new_x.y(), new_y.y(), new_z.y(), touch_point.y(), // row 2 new_x.z(), new_y.z(), new_z.z(), touch_point.z(), // row 3
diff --git a/device/vr/android/gvr/gvr_utils.cc b/device/vr/android/gvr/gvr_utils.cc index 07a09115..8da5ac3 100644 --- a/device/vr/android/gvr/gvr_utils.cc +++ b/device/vr/android/gvr/gvr_utils.cc
@@ -89,10 +89,10 @@ namespace gvr_utils { void GvrMatToTransform(const gvr::Mat4f& in, gfx::Transform* out) { - *out = gfx::Transform(in.m[0][0], in.m[0][1], in.m[0][2], in.m[0][3], - in.m[1][0], in.m[1][1], in.m[1][2], in.m[1][3], - in.m[2][0], in.m[2][1], in.m[2][2], in.m[2][3], - in.m[3][0], in.m[3][1], in.m[3][2], in.m[3][3]); + *out = gfx::Transform::RowMajor( + in.m[0][0], in.m[0][1], in.m[0][2], in.m[0][3], in.m[1][0], in.m[1][1], + in.m[1][2], in.m[1][3], in.m[2][0], in.m[2][1], in.m[2][2], in.m[2][3], + in.m[3][0], in.m[3][1], in.m[3][2], in.m[3][3]); } std::vector<device::mojom::XRViewPtr> CreateViews(
diff --git a/device/vr/test/test_hook.h b/device/vr/test/test_hook.h index c995739b..185487f1 100644 --- a/device/vr/test/test_hook.h +++ b/device/vr/test/test_hook.h
@@ -131,10 +131,9 @@ // transpose since it looks cleaner than manually transposing the arguments // passed to the constructor. float* t = data.device_to_origin; - gfx::Transform transform(t[0], t[1], t[2], t[3], t[4], t[5], t[6], t[7], t[8], - t[9], t[10], t[11], t[12], t[13], t[14], t[15]); - transform.Transpose(); - return transform; + return gfx::Transform::ColMajor(t[0], t[1], t[2], t[3], t[4], t[5], t[6], + t[7], t[8], t[9], t[10], t[11], t[12], t[13], + t[14], t[15]); } // Tests may implement this, and register it to control behavior of VR runtime.
diff --git a/docs/fuchsia/gpu_testing.md b/docs/fuchsia/gpu_testing.md index 5701ff5..bed87355 100644 --- a/docs/fuchsia/gpu_testing.md +++ b/docs/fuchsia/gpu_testing.md
@@ -28,24 +28,22 @@ --browser=web-engine-shell --out-dir=/path/to/outdir -d ``` -## Run on a device paved with Fuchsia built from source +## Run on a device that needs packages built from Fuchsia source ```bash $ content/test/gpu/run_gpu_integration_test_fuchsia.py gpu_process --browser=web-engine-shell --out-dir=/path/to/outdir -d ---fuchsia-out-dir=/path/to/fuchsia/outdir +--repo=/path/to/fuchsia/outdir --no-repo-init ``` -Note that `fx serve` must be running for communication with the device to -succeed. +Note that `fx serve` should not be running, since the script +handles launching the package server from the Fuchsia output directory. ## Run on a device the host is connected to remotely via ssh -Note the `--ssh-config` flag, which should point to the config file used to set -up the connection between the host and the remote device. - ```bash $ content/test/gpu/run_gpu_integration_test_fuchsia.py gpu_process ---browser=web-engine-shell --out-dir=/path/to/outdir -d --host=localhost ---ssh-config=/path/to/ssh/config +--browser=web-engine-shell --out-dir=/path/to/outdir -d --target-id=[::1]:8022 ``` + +Note the this requires a remote tunnel to have been set up first.
diff --git a/docs/fuchsia/telemetry.md b/docs/fuchsia/telemetry.md index d4380b3..49019e2 100644 --- a/docs/fuchsia/telemetry.md +++ b/docs/fuchsia/telemetry.md
@@ -27,15 +27,15 @@ --- -After building chromium, be sure to have a paved device that has gone through -OOBEattached to the host. Run the following from the chromium build +After building chromium, be sure to have a device that has gone through +OOBE attached to the host. Run the following from the chromium build directory if you want to run a specific benchmark: ```shell $ ../../content/test/gpu/run_telemetry_benchmark_fuchsia.py \ --browser=web-engine-shell --output-format=histograms \ ---experimental-tbmv3-metrics -d --host=localhost \ -[--fuchsia-out-dir=/path/to/fuchsia/out/dir] \ # Deploy custom fuchsia. +--experimental-tbmv3-metrics -d +[--repo=/path/to/fuchsia/out/dir --no-repo-init] \ # Deploy custom fuchsia. [benchmark] [--story-filter=<story name>] ``` @@ -45,13 +45,13 @@ ```shell $ ../../content/test/gpu/run_telemetry_benchmark_fuchsia.py \ --browser=web-engine-shell --output-format=histograms \ ---experimental-tbmv3-metrics -d --host=localhost system_health.memory_desktop \ +--experimental-tbmv3-metrics -d system_health.memory_desktop \ --story-filter=load:chrome:blank ``` If no benchmark or filter is specified, all supported benchmarks will run. -## Run on an emulator +## Run on an ephemeral emulator If you wish to run the tests on an emulator, simply drop the `-d` flag. This will start an emulator and run through the supported tests, like so. @@ -69,15 +69,12 @@ As connecting to a device that is not connected to a workstation is more common, this flow is what is recommended and tested. -Be sure to first open a tunnel to your device and have a `pm` server running and -serving to your device: +Be sure to first open a tunnel to your device: ```shell $ ../../content/test/gpu/run_telemetry_benchmark_fuchsia.py \ --browser=web-engine-shell --output-format=histograms \ ---experimental-tbmv3-metrics -d --host=localhost \ ---ssh-config=<sshconfig file> [benchmark] [--story-filter=<story name>] +--experimental-tbmv3-metrics -d --target-id=[::1]:8022 \ +[benchmark] [--story-filter=<story name>] ``` -The SSH config path is typically `$HOME/.fuchsia/sshconfig`. - See the above section on how to use the `benchmark` and `--story-filter`.
diff --git a/docs/security/clusterfuzz-for-sheriffs.md b/docs/security/clusterfuzz-for-sheriffs.md index 961ce23..ec0ba53 100644 --- a/docs/security/clusterfuzz-for-sheriffs.md +++ b/docs/security/clusterfuzz-for-sheriffs.md
@@ -11,7 +11,8 @@ allows you to upload files to reproduce crashes on various platforms and will identify revision ranges when the regression was introduced. If a test case requires multiple files, they can be uploaded together in a zip or tar -archive: the main file needs to contain the words `index`, `crash` or `test`. +archive: the main file needs to contain the words `run`, `fuzz-` `index.` or +`crash.`. Please *do* specify the crbug number when uploading the test case. This will allow ClusterFuzz to keep the crbug updated with progress.
diff --git a/extensions/browser/api/socket/udp_socket.cc b/extensions/browser/api/socket/udp_socket.cc index 2c78847..96d055962 100644 --- a/extensions/browser/api/socket/udp_socket.cc +++ b/extensions/browser/api/socket/udp_socket.cc
@@ -4,12 +4,12 @@ #include "extensions/browser/api/socket/udp_socket.h" -#include <algorithm> #include <utility> #include "base/bind.h" #include "base/containers/contains.h" #include "base/lazy_instance.h" +#include "base/ranges/algorithm.h" #include "extensions/browser/api/api_resource.h" #include "net/base/ip_address.h" #include "net/base/ip_endpoint.h" @@ -306,8 +306,8 @@ const std::string& normalized_address, int result) { if (result == net::OK) { - auto find_result = std::find(multicast_groups_.begin(), - multicast_groups_.end(), normalized_address); + auto find_result = + base::ranges::find(multicast_groups_, normalized_address); multicast_groups_.erase(find_result); } @@ -343,9 +343,7 @@ } std::string normalized_address = ip.ToString(); - auto find_result = std::find(multicast_groups_.begin(), - multicast_groups_.end(), normalized_address); - if (find_result == multicast_groups_.end()) { + if (!base::Contains(multicast_groups_, normalized_address)) { std::move(callback).Run(net::ERR_ADDRESS_INVALID); return; }
diff --git a/extensions/browser/app_window/app_window_registry.cc b/extensions/browser/app_window/app_window_registry.cc index 26858cf..8d46da1c 100644 --- a/extensions/browser/app_window/app_window_registry.cc +++ b/extensions/browser/app_window/app_window_registry.cc
@@ -9,6 +9,7 @@ #include "base/containers/contains.h" #include "base/observer_list.h" +#include "base/ranges/algorithm.h" #include "base/strings/stringprintf.h" #include "components/keyed_service/content/browser_context_dependency_manager.h" #include "content/public/browser/browser_context.h" @@ -79,7 +80,7 @@ void AppWindowRegistry::RemoveAppWindow(AppWindow* app_window) { const AppWindowList::iterator it = - std::find(app_windows_.begin(), app_windows_.end(), app_window); + base::ranges::find(app_windows_, app_window); if (it != app_windows_.end()) app_windows_.erase(it); for (auto& observer : observers_) @@ -183,7 +184,7 @@ void AppWindowRegistry::BringToFront(AppWindow* app_window) { const AppWindowList::iterator it = - std::find(app_windows_.begin(), app_windows_.end(), app_window); + base::ranges::find(app_windows_, app_window); if (it != app_windows_.end()) app_windows_.erase(it); app_windows_.push_front(app_window);
diff --git a/extensions/browser/extension_host_queue.cc b/extensions/browser/extension_host_queue.cc index 53339dfb..f8f3f064 100644 --- a/extensions/browser/extension_host_queue.cc +++ b/extensions/browser/extension_host_queue.cc
@@ -4,11 +4,10 @@ #include "extensions/browser/extension_host_queue.h" -#include <algorithm> - #include "base/bind.h" #include "base/location.h" #include "base/no_destructor.h" +#include "base/ranges/algorithm.h" #include "base/strings/string_number_conversions.h" #include "base/task/single_thread_task_runner.h" #include "base/threading/thread_task_runner_handle.h" @@ -32,7 +31,7 @@ } void ExtensionHostQueue::Remove(DeferredStartRenderHost* host) { - auto it = std::find(queue_.begin(), queue_.end(), host); + auto it = base::ranges::find(queue_, host); if (it != queue_.end()) queue_.erase(it); }
diff --git a/extensions/browser/install/crx_install_error.cc b/extensions/browser/install/crx_install_error.cc index 5c6dd06..7c658f28 100644 --- a/extensions/browser/install/crx_install_error.cc +++ b/extensions/browser/install/crx_install_error.cc
@@ -4,9 +4,8 @@ #include "extensions/browser/install/crx_install_error.h" -#include <algorithm> - #include "base/check_op.h" +#include "base/containers/contains.h" #include "extensions/browser/install/sandboxed_unpacker_failure_reason.h" namespace extensions { @@ -78,10 +77,7 @@ return false; const SandboxedUnpackerFailureReason unpacker_failure_reason = sandbox_failure_detail(); - return std::find(std::begin(kVerificationFailureReasons), - std::end(kVerificationFailureReasons), - unpacker_failure_reason) != - std::end(kVerificationFailureReasons); + return base::Contains(kVerificationFailureReasons, unpacker_failure_reason); } // Returns true if the error occurred during crx installation due to mismatch in
diff --git a/extensions/browser/service_worker/worker_id_set_unittest.cc b/extensions/browser/service_worker/worker_id_set_unittest.cc index 1688b51..aef3b13 100644 --- a/extensions/browser/service_worker/worker_id_set_unittest.cc +++ b/extensions/browser/service_worker/worker_id_set_unittest.cc
@@ -2,10 +2,10 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include <algorithm> #include <memory> #include <string> +#include "base/containers/contains.h" #include "extensions/browser/service_worker/worker_id_set.h" #include "extensions/common/extension_id.h" #include "testing/gtest/include/gtest/gtest.h" @@ -48,8 +48,7 @@ } bool Contains(const WorkerId& worker_id) const { - return std::find(workers_.begin(), workers_.end(), worker_id) != - workers_.end(); + return base::Contains(workers_, worker_id); } private:
diff --git a/extensions/common/manifest_handlers/mime_types_handler.cc b/extensions/common/manifest_handlers/mime_types_handler.cc index 47003e2b..b351db89 100644 --- a/extensions/common/manifest_handlers/mime_types_handler.cc +++ b/extensions/common/manifest_handlers/mime_types_handler.cc
@@ -8,6 +8,7 @@ #include "base/metrics/histogram_functions.h" #include "base/no_destructor.h" +#include "base/ranges/algorithm.h" #include "base/strings/string_util.h" #include "base/strings/utf_string_conversions.h" #include "base/values.h" @@ -78,8 +79,7 @@ // static void MimeTypesHandler::ReportUsedHandler(const std::string& extension_id) { auto* const* it = - std::find(std::begin(kMIMETypeHandlersAllowlist), - std::end(kMIMETypeHandlersAllowlist), extension_id); + base::ranges::find(kMIMETypeHandlersAllowlist, extension_id); if (it != std::end(kMIMETypeHandlersAllowlist)) { MimeHandlerType type = static_cast<MimeHandlerType>( it - std::begin(kMIMETypeHandlersAllowlist));
diff --git a/extensions/renderer/api/automation/automation_internal_custom_bindings.cc b/extensions/renderer/api/automation/automation_internal_custom_bindings.cc index 7b75fd414..bffb7c7b 100644 --- a/extensions/renderer/api/automation/automation_internal_custom_bindings.cc +++ b/extensions/renderer/api/automation/automation_internal_custom_bindings.cc
@@ -551,14 +551,14 @@ void AutomationInternalCustomBindings::RouteHandlerFunction( const std::string& name, - HandlerFunction handler_function) { + AutomationV8Router::HandlerFunction handler_function) { ObjectBackedNativeHandler::RouteHandlerFunction(name, handler_function); } void AutomationInternalCustomBindings::RouteHandlerFunction( const std::string& name, const std::string& api_name, - HandlerFunction handler_function) { + AutomationV8Router::HandlerFunction handler_function) { ObjectBackedNativeHandler::RouteHandlerFunction(name, api_name, handler_function); }
diff --git a/extensions/renderer/api/automation/automation_internal_custom_bindings.h b/extensions/renderer/api/automation/automation_internal_custom_bindings.h index a317de7..ce4a432 100644 --- a/extensions/renderer/api/automation/automation_internal_custom_bindings.h +++ b/extensions/renderer/api/automation/automation_internal_custom_bindings.h
@@ -76,11 +76,13 @@ void ThrowInvalidArgumentsException(bool is_fatal = true) const override; v8::Isolate* GetIsolate() const override; v8::Local<v8::Context> GetContext() const override; - void RouteHandlerFunction(const std::string& name, - HandlerFunction handler_function) override; - void RouteHandlerFunction(const std::string& name, - const std::string& api_name, - HandlerFunction handler_function) override; + void RouteHandlerFunction( + const std::string& name, + AutomationV8Router::HandlerFunction handler_function) override; + void RouteHandlerFunction( + const std::string& name, + const std::string& api_name, + AutomationV8Router::HandlerFunction handler_function) override; std::tuple<ax::mojom::Event, ui::AXEventGenerator::Event> ParseEventType( const std::string& event_type) const override; ui::TreeChangeObserverFilter ParseTreeChangeObserverFilter(
diff --git a/extensions/renderer/bindings/api_event_handler.cc b/extensions/renderer/bindings/api_event_handler.cc index 6bd1b7b..7beaab4 100644 --- a/extensions/renderer/bindings/api_event_handler.cc +++ b/extensions/renderer/bindings/api_event_handler.cc
@@ -4,7 +4,6 @@ #include "extensions/renderer/bindings/api_event_handler.h" -#include <algorithm> #include <map> #include <memory> #include <utility> @@ -14,6 +13,7 @@ #include "base/callback_helpers.h" #include "base/check.h" #include "base/notreached.h" +#include "base/ranges/algorithm.h" #include "base/supports_user_data.h" #include "base/values.h" #include "content/public/renderer/v8_value_converter.h" @@ -206,8 +206,7 @@ } emitter->Invalidate(context); - auto emitter_entry = std::find(data->anonymous_emitters.begin(), - data->anonymous_emitters.end(), event); + auto emitter_entry = base::ranges::find(data->anonymous_emitters, event); if (emitter_entry == data->anonymous_emitters.end()) { NOTREACHED(); return;
diff --git a/extensions/renderer/bindings/api_event_listeners.cc b/extensions/renderer/bindings/api_event_listeners.cc index 2007700..bc51084 100644 --- a/extensions/renderer/bindings/api_event_listeners.cc +++ b/extensions/renderer/bindings/api_event_listeners.cc
@@ -4,9 +4,10 @@ #include "extensions/renderer/bindings/api_event_listeners.h" -#include <algorithm> #include <memory> +#include "base/containers/contains.h" +#include "base/ranges/algorithm.h" #include "content/public/renderer/v8_value_converter.h" #include "extensions/common/event_matcher.h" #include "extensions/common/mojom/event_dispatcher.mojom.h" @@ -139,7 +140,7 @@ void UnfilteredEventListeners::RemoveListener(v8::Local<v8::Function> listener, v8::Local<v8::Context> context) { - auto iter = std::find(listeners_.begin(), listeners_.end(), listener); + auto iter = base::ranges::find(listeners_, listener); if (iter == listeners_.end()) return; @@ -151,8 +152,7 @@ } bool UnfilteredEventListeners::HasListener(v8::Local<v8::Function> listener) { - return std::find(listeners_.begin(), listeners_.end(), listener) != - listeners_.end(); + return base::Contains(listeners_, listener); } size_t UnfilteredEventListeners::GetNumListeners() { @@ -290,7 +290,7 @@ void FilteredEventListeners::RemoveListener(v8::Local<v8::Function> listener, v8::Local<v8::Context> context) { - auto iter = std::find(listeners_.begin(), listeners_.end(), listener); + auto iter = base::ranges::find(listeners_, listener); if (iter == listeners_.end()) return; @@ -301,8 +301,7 @@ } bool FilteredEventListeners::HasListener(v8::Local<v8::Function> listener) { - return std::find(listeners_.begin(), listeners_.end(), listener) != - listeners_.end(); + return base::Contains(listeners_, listener); } size_t FilteredEventListeners::GetNumListeners() {
diff --git a/fuchsia_web/runners/cast/cast_runner.cmx b/fuchsia_web/runners/cast/cast_runner.cmx index 5a5c7848..1ae0802 100644 --- a/fuchsia_web/runners/cast/cast_runner.cmx +++ b/fuchsia_web/runners/cast/cast_runner.cmx
@@ -3,45 +3,8 @@ "binary": "cast_runner_exe" }, "sandbox": { - "features": [ - "config-data", - "isolated-cache-storage" - ], "services": [ - "chromium.cast.ApplicationConfigManager", - "fuchsia.accessibility.semantics.SemanticsManager", - "fuchsia.buildinfo.Provider", - "fuchsia.device.NameProvider", - "fuchsia.feedback.ComponentDataRegister", - "fuchsia.feedback.CrashReportingProductRegister", - "fuchsia.fonts.Provider", - "fuchsia.hwinfo.Product", - "fuchsia.input.virtualkeyboard.ControllerCreator", - "fuchsia.intl.PropertyProvider", - "fuchsia.kernel.VmexResource", - "fuchsia.logger.LogSink", - "fuchsia.media.Audio", - "fuchsia.media.AudioDeviceEnumerator", - "fuchsia.media.ProfileProvider", - "fuchsia.media.SessionAudioConsumerFactory", - "fuchsia.media.drm.PlayReady", - "fuchsia.media.drm.Widevine", - "fuchsia.mediacodec.CodecFactory", - "fuchsia.memorypressure.Provider", - "fuchsia.net.interfaces.State", - "fuchsia.net.name.Lookup", - "fuchsia.posix.socket.Provider", - "fuchsia.process.Launcher", - "fuchsia.settings.Display", - "fuchsia.sys.Environment", - "fuchsia.sys.Loader", - "fuchsia.sys.Runner-cast", - "fuchsia.sysmem.Allocator", - "fuchsia.ui.composition.Allocator", - "fuchsia.ui.composition.Flatland", - "fuchsia.ui.input3.Keyboard", - "fuchsia.ui.scenic.Scenic", - "fuchsia.vulkan.loader.Loader" + "fuchsia.sys.Runner-cast" ] } }
diff --git a/fuchsia_web/webengine/browser/accessibility_bridge_browsertest.cc b/fuchsia_web/webengine/browser/accessibility_bridge_browsertest.cc index 7a97b3a..40925de 100644 --- a/fuchsia_web/webengine/browser/accessibility_bridge_browsertest.cc +++ b/fuchsia_web/webengine/browser/accessibility_bridge_browsertest.cc
@@ -882,8 +882,9 @@ // accessibility bridge correctly composes node 2's transform and the // translation for node 1's bounds. update.nodes[1].relative_bounds.bounds = gfx::RectF(10, 11, 10, 11); - update.nodes[1].relative_bounds.transform = std::make_unique<gfx::Transform>( - 5, 0, 0, 100, 0, 5, 0, 200, 0, 0, 5, 0, 0, 0, 0, 1); + update.nodes[1].relative_bounds.transform = + std::make_unique<gfx::Transform>(gfx::Transform::RowMajor( + 5, 0, 0, 100, 0, 5, 0, 200, 0, 0, 5, 0, 0, 0, 0, 1)); bridge->AccessibilityEventReceived( CreateAccessibilityEventWithUpdate(std::move(update), tree_id)); semantics_manager_.semantic_tree()->RunUntilNodeWithLabelIsInTree(
diff --git a/fuchsia_web/webengine/browser/ax_tree_converter_unittest.cc b/fuchsia_web/webengine/browser/ax_tree_converter_unittest.cc index fd99c39..6f23d1e 100644 --- a/fuchsia_web/webengine/browser/ax_tree_converter_unittest.cc +++ b/fuchsia_web/webengine/browser/ax_tree_converter_unittest.cc
@@ -278,7 +278,7 @@ ui::AXNodeData child_node_data; child_node_data.id = 1; child_node_data.relative_bounds.transform = std::make_unique<gfx::Transform>( - 2, 0, 0, 0, 0, 3, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); + gfx::Transform::RowMajor(2, 0, 0, 0, 0, 3, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1)); auto& child_node = AddChildNode(child_node_data); root_node().SetLocation( kRootId,
diff --git a/gpu/command_buffer/service/shared_image/external_vk_image_backing.cc b/gpu/command_buffer/service/shared_image/external_vk_image_backing.cc index ffb1513..2bf9d99 100644 --- a/gpu/command_buffer/service/shared_image/external_vk_image_backing.cc +++ b/gpu/command_buffer/service/shared_image/external_vk_image_backing.cc
@@ -224,10 +224,12 @@ if (!pixel_data.empty()) { size_t stride = BitsPerPixel(format) / 8 * size.width(); - backing->WritePixelsWithData(pixel_data, stride); + SkPixmap pixmap(backing->AsSkImageInfo(), pixel_data.data(), stride); + backing->UploadToVkImage(pixmap); // Mark the backing as cleared. backing->SetCleared(); + backing->latest_content_ = kInVkImage; } return backing; @@ -255,46 +257,24 @@ context_state->vk_context_provider()->GetVulkanImplementation(); auto resource_format = viz::GetResourceFormat(buffer_format); auto* device_queue = context_state->vk_context_provider()->GetDeviceQueue(); - if (vulkan_implementation->CanImportGpuMemoryBuffer(device_queue, - handle.type)) { - VkFormat vk_format = ToVkFormat(resource_format); - auto image = vulkan_implementation->CreateImageFromGpuMemoryHandle( - device_queue, std::move(handle), size, vk_format, color_space); - if (!image) { - DLOG(ERROR) << "Failed to create VkImage from GpuMemoryHandle."; - return nullptr; - } + DCHECK(vulkan_implementation->CanImportGpuMemoryBuffer(device_queue, + handle.type)); - bool use_separate_gl_texture = - UseSeparateGLTexture(context_state.get(), resource_format); - auto backing = std::make_unique<ExternalVkImageBacking>( - base::PassKey<ExternalVkImageBacking>(), mailbox, resource_format, size, - color_space, surface_origin, alpha_type, usage, - std::move(context_state), std::move(image), command_pool, - use_separate_gl_texture); - backing->SetCleared(); - return backing; - } - - if (gfx::NumberOfPlanesForLinearBufferFormat(buffer_format) != 1) { - DLOG(ERROR) << "Invalid image format."; + VkFormat vk_format = ToVkFormat(resource_format); + auto image = vulkan_implementation->CreateImageFromGpuMemoryHandle( + device_queue, std::move(handle), size, vk_format, color_space); + if (!image) { + DLOG(ERROR) << "Failed to create VkImage from GpuMemoryHandle."; return nullptr; } - DCHECK_EQ(handle.type, gfx::SHARED_MEMORY_BUFFER); - - SharedMemoryRegionWrapper shared_memory_wrapper; - if (!shared_memory_wrapper.Initialize(handle, size, resource_format)) - return nullptr; - - auto backing = Create(std::move(context_state), command_pool, mailbox, - resource_format, size, color_space, surface_origin, - alpha_type, usage, image_usage_cache, - base::span<const uint8_t>(), true /* using_gmb */); - if (!backing) - return nullptr; - - backing->InstallSharedMemory(std::move(shared_memory_wrapper)); + bool use_separate_gl_texture = + UseSeparateGLTexture(context_state.get(), resource_format); + auto backing = std::make_unique<ExternalVkImageBacking>( + base::PassKey<ExternalVkImageBacking>(), mailbox, resource_format, size, + color_space, surface_origin, alpha_type, usage, std::move(context_state), + std::move(image), command_pool, use_separate_gl_texture); + backing->SetCleared(); return backing; } @@ -471,7 +451,7 @@ if (use_separate_gl_texture()) { latest_content_ = is_gl ? kInGLTexture : kInVkImage; } else { - latest_content_ = kInVkImage | kInGLTexture; + latest_content_ = kInVkImage; } } @@ -514,8 +494,22 @@ void ExternalVkImageBacking::Update(std::unique_ptr<gfx::GpuFence> in_fence) { DCHECK(!in_fence); - latest_content_ = kInSharedMemory; +} + +bool ExternalVkImageBacking::UploadFromMemory(const SkPixmap& pixmap) { + if (!UploadToVkImage(pixmap)) + return false; + SetCleared(); + latest_content_ = kInVkImage; + + // Also upload to GL texture if there is a separate one. + if (use_separate_gl_texture() && (texture_ || texture_passthrough_)) { + UploadToGLTexture(pixmap); + latest_content_ |= kInGLTexture; + } + + return true; } void ExternalVkImageBacking::AddSemaphoresToPendingListOrRelease( @@ -773,51 +767,27 @@ manager, this, tracker); } -void ExternalVkImageBacking::InstallSharedMemory( - SharedMemoryRegionWrapper shared_memory_wrapper) { - DCHECK(!shared_memory_wrapper_.IsValid()); - DCHECK(shared_memory_wrapper.IsValid()); - shared_memory_wrapper_ = std::move(shared_memory_wrapper); - Update(nullptr); -} - void ExternalVkImageBacking::UpdateContent(uint32_t content_flags) { // Only support one backing for now. - DCHECK(content_flags == kInVkImage || content_flags == kInGLTexture || - content_flags == kInSharedMemory); + DCHECK(content_flags == kInVkImage || content_flags == kInGLTexture); + + // There is no need to update content when there is only one texture. + if (!use_separate_gl_texture()) + return; if ((latest_content_ & content_flags) == content_flags) return; - if (content_flags == kInGLTexture && !use_separate_gl_texture()) - content_flags = kInVkImage; - if (content_flags == kInVkImage) { - if (latest_content_ & kInSharedMemory) { - if (!shared_memory_wrapper_.IsValid()) - return; - if (!WritePixels()) - return; - latest_content_ |= - use_separate_gl_texture() ? kInVkImage : kInVkImage | kInGLTexture; - return; - } - if ((latest_content_ & kInGLTexture) && use_separate_gl_texture()) { + if ((latest_content_ & kInGLTexture)) { CopyPixelsFromGLTextureToVkImage(); latest_content_ |= kInVkImage; - return; } } else if (content_flags == kInGLTexture) { - DCHECK(use_separate_gl_texture()); - if (latest_content_ & kInSharedMemory) { - CopyPixelsFromShmToGLTexture(); - } else if (latest_content_ & kInVkImage) { + if (latest_content_ & kInVkImage) { CopyPixelsFromVkImageToGLTexture(); + latest_content_ |= kInGLTexture; } - } else if (content_flags == kInSharedMemory) { - // TODO(penghuang): read pixels back from VkImage to shared memory GMB, if - // this feature is needed. - NOTIMPLEMENTED_LOG_ONCE(); } } @@ -1000,9 +970,7 @@ return true; } -bool ExternalVkImageBacking::WritePixelsWithData( - base::span<const uint8_t> pixel_data, - size_t stride) { +bool ExternalVkImageBacking::UploadToVkImage(const SkPixmap& pixmap) { std::vector<ExternalSemaphore> external_semaphores; if (!BeginAccessInternal(false /* readonly */, &external_semaphores)) { DLOG(ERROR) << "BeginAccess() failed."; @@ -1011,7 +979,6 @@ auto* gr_context = context_state_->gr_context(); WaitSemaphoresOnGrContext(gr_context, &external_semaphores); - SkPixmap pixmap(AsSkImageInfo(), pixel_data.data(), stride); if (!gr_context->updateBackendTexture(backend_texture_, &pixmap, /*numLevels=*/1, nullptr, nullptr)) { DLOG(ERROR) << "updateBackendTexture() failed."; @@ -1049,11 +1016,6 @@ return true; } -bool ExternalVkImageBacking::WritePixels() { - return WritePixelsWithData(shared_memory_wrapper_.GetMemoryAsSpan(), - shared_memory_wrapper_.GetStride()); -} - void ExternalVkImageBacking::CopyPixelsFromGLTextureToVkImage() { DCHECK(use_separate_gl_texture()); DCHECK_NE(!!texture_, !!texture_passthrough_); @@ -1167,7 +1129,7 @@ api, size(), gl_format, gl_type)); } -void ExternalVkImageBacking::CopyPixelsFromShmToGLTexture() { +void ExternalVkImageBacking::UploadToGLTexture(const SkPixmap& pixmap) { DCHECK(use_separate_gl_texture()); DCHECK_NE(!!texture_, !!texture_passthrough_); const GLuint texture_service_id = @@ -1208,10 +1170,8 @@ checked_size *= size().height(); DCHECK(checked_size.IsValid()); - auto pixel_data = shared_memory_wrapper_.GetMemoryAsSpan(); api->glTexSubImage2DFn(GL_TEXTURE_2D, 0, 0, 0, size().width(), - size().height(), gl_format, gl_type, - pixel_data.data()); + size().height(), gl_format, gl_type, pixmap.addr()); DCHECK_EQ(api->glGetErrorFn(), static_cast<GLenum>(GL_NO_ERROR)); }
diff --git a/gpu/command_buffer/service/shared_image/external_vk_image_backing.h b/gpu/command_buffer/service/shared_image/external_vk_image_backing.h index 38837f6..be2b0da 100644 --- a/gpu/command_buffer/service/shared_image/external_vk_image_backing.h +++ b/gpu/command_buffer/service/shared_image/external_vk_image_backing.h
@@ -135,6 +135,7 @@ // SharedImageBacking implementation. SharedImageBackingType GetType() const override; void Update(std::unique_ptr<gfx::GpuFence> in_fence) override; + bool UploadFromMemory(const SkPixmap& pixmap) override; scoped_refptr<gfx::NativePixmap> GetNativePixmap() override; // Add semaphores to a pending list for reusing or being released immediately. @@ -172,8 +173,6 @@ MemoryTypeTracker* tracker) override; private: - // Install a shared memory GMB to the backing. - void InstallSharedMemory(SharedMemoryRegionWrapper shared_memory_wrapper); // Returns texture_service_id for ProduceGLTexture and GLTexturePassthrough. GLuint ProduceGLTextureInternal(); @@ -187,10 +186,9 @@ bool ReadPixelsWithCallback(size_t data_size, size_t stride, ReadBufferCallback callback); - bool WritePixelsWithData(base::span<const uint8_t> pixel_data, size_t stride); - bool WritePixels(); + bool UploadToVkImage(const SkPixmap& pixmap); + void UploadToGLTexture(const SkPixmap& pixmap); void CopyPixelsFromGLTextureToVkImage(); - void CopyPixelsFromShmToGLTexture(); void CopyPixelsFromVkImageToGLTexture(); scoped_refptr<SharedContextState> context_state_; @@ -208,13 +206,9 @@ raw_ptr<gles2::Texture> texture_ = nullptr; scoped_refptr<gles2::TexturePassthrough> texture_passthrough_; - // GMB related stuff. - SharedMemoryRegionWrapper shared_memory_wrapper_; - enum LatestContent { kInVkImage = 1 << 0, - kInSharedMemory = 1 << 1, - kInGLTexture = 1 << 2, + kInGLTexture = 1 << 1, }; uint32_t latest_content_ = 0;
diff --git a/gpu/command_buffer/service/shared_image/external_vk_image_backing_factory.cc b/gpu/command_buffer/service/shared_image/external_vk_image_backing_factory.cc index 7ec2e5d..49b60a9 100644 --- a/gpu/command_buffer/service/shared_image/external_vk_image_backing_factory.cc +++ b/gpu/command_buffer/service/shared_image/external_vk_image_backing_factory.cc
@@ -155,9 +155,8 @@ gfx::GpuMemoryBufferType memory_buffer_type) { auto* device_queue = context_state_->vk_context_provider()->GetDeviceQueue(); return context_state_->vk_context_provider() - ->GetVulkanImplementation() - ->CanImportGpuMemoryBuffer(device_queue, memory_buffer_type) || - memory_buffer_type == gfx::SHARED_MEMORY_BUFFER; + ->GetVulkanImplementation() + ->CanImportGpuMemoryBuffer(device_queue, memory_buffer_type); } bool ExternalVkImageBackingFactory::IsSupported( @@ -174,8 +173,7 @@ // TODO(crbug.com/969114): Not all shared image factory implementations // support concurrent read/write usage. - constexpr uint32_t kInvalidUsages = - SHARED_IMAGE_USAGE_CONCURRENT_READ_WRITE | SHARED_IMAGE_USAGE_CPU_UPLOAD; + constexpr uint32_t kInvalidUsages = SHARED_IMAGE_USAGE_CONCURRENT_READ_WRITE; if (usage & kInvalidUsages) { return false; }
diff --git a/gpu/command_buffer/service/shared_image/shared_image_factory.cc b/gpu/command_buffer/service/shared_image/shared_image_factory.cc index cee3cab..ea91d0cf 100644 --- a/gpu/command_buffer/service/shared_image/shared_image_factory.cc +++ b/gpu/command_buffer/service/shared_image/shared_image_factory.cc
@@ -359,7 +359,17 @@ bool use_compound = false; auto* factory = GetFactoryByUsage(usage, resource_format, size, - /*pixel_data=*/{}, gmb_type, &use_compound); + /*pixel_data=*/{}, gmb_type); + + if (!factory && gmb_type == gfx::SHARED_MEMORY_BUFFER) { + // Check if CompoundImageBacking can hold shared memory buffer plus + // another GPU backing type to satisfy requirements. + use_compound = true; + factory = GetFactoryByUsage(usage | SHARED_IMAGE_USAGE_CPU_UPLOAD, + resource_format, size, + /*pixel_data=*/{}, gfx::EMPTY_BUFFER); + } + if (!factory) return false; @@ -564,8 +574,7 @@ viz::ResourceFormat format, const gfx::Size& size, base::span<const uint8_t> pixel_data, - gfx::GpuMemoryBufferType gmb_type, - bool* use_compound_backing) { + gfx::GpuMemoryBufferType gmb_type) { if (backing_factory_for_testing_) return backing_factory_for_testing_; @@ -574,15 +583,6 @@ if (factory->IsSupported(usage, format, size, share_between_threads, gmb_type, gr_context_type_, pixel_data)) { return factory.get(); - } else if (use_compound_backing && gmb_type == gfx::SHARED_MEMORY_BUFFER) { - // Check if backing type supports CPU upload with no buffer handle so it - // can be used with a compound backing instead. - if (factory->IsSupported(usage | SHARED_IMAGE_USAGE_CPU_UPLOAD, format, - size, share_between_threads, gfx::EMPTY_BUFFER, - gr_context_type_, pixel_data)) { - *use_compound_backing = true; - return factory.get(); - } } }
diff --git a/gpu/command_buffer/service/shared_image/shared_image_factory.h b/gpu/command_buffer/service/shared_image/shared_image_factory.h index b8e9cd9..73d0df0 100644 --- a/gpu/command_buffer/service/shared_image/shared_image_factory.h +++ b/gpu/command_buffer/service/shared_image/shared_image_factory.h
@@ -132,17 +132,12 @@ private: bool IsSharedBetweenThreads(uint32_t usage); - // If `use_compound_backing` is not null and `gmb_type` is - // gfx::SHARED_MEMORY_BUFFER then we'll see if factory can be used with a - // compound backing. This is temporary until all backing types support - // compound backings. SharedImageBackingFactory* GetFactoryByUsage( uint32_t usage, viz::ResourceFormat format, const gfx::Size& size, base::span<const uint8_t> pixel_data, - gfx::GpuMemoryBufferType gmb_type, - bool* use_compound_backing = nullptr); + gfx::GpuMemoryBufferType gmb_type); raw_ptr<SharedImageManager> shared_image_manager_; raw_ptr<SharedContextState> shared_context_state_;
diff --git a/infra/config/generated/builders/ci/android-weblayer-10-x86-rel-tests/properties.json b/infra/config/generated/builders/ci/android-weblayer-10-x86-rel-tests/properties.json deleted file mode 100644 index c24952c..0000000 --- a/infra/config/generated/builders/ci/android-weblayer-10-x86-rel-tests/properties.json +++ /dev/null
@@ -1,101 +0,0 @@ -{ - "$build/chromium_tests_builder_config": { - "builder_config": { - "builder_db": { - "entries": [ - { - "builder_id": { - "bucket": "ci", - "builder": "android-weblayer-10-x86-rel-tests", - "project": "chromium" - }, - "builder_spec": { - "build_gs_bucket": "chromium-android-archive", - "builder_group": "chromium.android", - "execution_mode": "TEST", - "legacy_android_config": { - "config": "x86_builder" - }, - "legacy_chromium_config": { - "apply_configs": [ - "mb" - ], - "build_config": "Release", - "config": "android", - "target_bits": 32, - "target_platform": "android" - }, - "legacy_gclient_config": { - "apply_configs": [ - "android" - ], - "config": "chromium" - }, - "parent": { - "bucket": "ci", - "builder": "android-weblayer-with-aosp-webview-x86-rel", - "project": "chromium" - } - } - }, - { - "builder_id": { - "bucket": "ci", - "builder": "android-weblayer-with-aosp-webview-x86-rel", - "project": "chromium" - }, - "builder_spec": { - "build_gs_bucket": "chromium-android-archive", - "builder_group": "chromium.android", - "execution_mode": "COMPILE_AND_TEST", - "legacy_android_config": { - "config": "x86_builder" - }, - "legacy_chromium_config": { - "apply_configs": [ - "mb" - ], - "build_config": "Release", - "config": "android", - "target_bits": 32, - "target_platform": "android" - }, - "legacy_gclient_config": { - "apply_configs": [ - "android", - "enable_reclient" - ], - "config": "chromium" - } - } - } - ] - }, - "builder_ids": [ - { - "bucket": "ci", - "builder": "android-weblayer-10-x86-rel-tests", - "project": "chromium" - } - ], - "mirroring_builder_group_and_names": [ - { - "builder": "android-weblayer-10-x86-rel-tests", - "group": "tryserver.chromium.android" - } - ] - } - }, - "$recipe_engine/resultdb/test_presentation": { - "column_keys": [], - "grouping_keys": [ - "status", - "v.test_suite" - ] - }, - "builder_group": "chromium.android", - "recipe": "chromium", - "sheriff_rotations": [ - "android" - ] -} \ No newline at end of file
diff --git a/infra/config/generated/builders/ci/android-weblayer-11-x86-rel-tests/properties.json b/infra/config/generated/builders/ci/android-weblayer-11-x86-rel-tests/properties.json deleted file mode 100644 index 34103b81..0000000 --- a/infra/config/generated/builders/ci/android-weblayer-11-x86-rel-tests/properties.json +++ /dev/null
@@ -1,11 +0,0 @@ -{ - "$recipe_engine/resultdb/test_presentation": { - "column_keys": [], - "grouping_keys": [ - "status", - "v.test_suite" - ] - }, - "builder_group": "chromium.android.fyi", - "recipe": "chromium" -} \ No newline at end of file
diff --git a/infra/config/generated/builders/ci/android-weblayer-marshmallow-x86-rel-tests/properties.json b/infra/config/generated/builders/ci/android-weblayer-marshmallow-x86-rel-tests/properties.json deleted file mode 100644 index c2fab322..0000000 --- a/infra/config/generated/builders/ci/android-weblayer-marshmallow-x86-rel-tests/properties.json +++ /dev/null
@@ -1,101 +0,0 @@ -{ - "$build/chromium_tests_builder_config": { - "builder_config": { - "builder_db": { - "entries": [ - { - "builder_id": { - "bucket": "ci", - "builder": "android-weblayer-marshmallow-x86-rel-tests", - "project": "chromium" - }, - "builder_spec": { - "build_gs_bucket": "chromium-android-archive", - "builder_group": "chromium.android", - "execution_mode": "TEST", - "legacy_android_config": { - "config": "x86_builder" - }, - "legacy_chromium_config": { - "apply_configs": [ - "mb" - ], - "build_config": "Release", - "config": "android", - "target_bits": 32, - "target_platform": "android" - }, - "legacy_gclient_config": { - "apply_configs": [ - "android" - ], - "config": "chromium" - }, - "parent": { - "bucket": "ci", - "builder": "android-weblayer-with-aosp-webview-x86-rel", - "project": "chromium" - } - } - }, - { - "builder_id": { - "bucket": "ci", - "builder": "android-weblayer-with-aosp-webview-x86-rel", - "project": "chromium" - }, - "builder_spec": { - "build_gs_bucket": "chromium-android-archive", - "builder_group": "chromium.android", - "execution_mode": "COMPILE_AND_TEST", - "legacy_android_config": { - "config": "x86_builder" - }, - "legacy_chromium_config": { - "apply_configs": [ - "mb" - ], - "build_config": "Release", - "config": "android", - "target_bits": 32, - "target_platform": "android" - }, - "legacy_gclient_config": { - "apply_configs": [ - "android", - "enable_reclient" - ], - "config": "chromium" - } - } - } - ] - }, - "builder_ids": [ - { - "bucket": "ci", - "builder": "android-weblayer-marshmallow-x86-rel-tests", - "project": "chromium" - } - ], - "mirroring_builder_group_and_names": [ - { - "builder": "android-weblayer-marshmallow-x86-rel-tests", - "group": "tryserver.chromium.android" - } - ] - } - }, - "$recipe_engine/resultdb/test_presentation": { - "column_keys": [], - "grouping_keys": [ - "status", - "v.test_suite" - ] - }, - "builder_group": "chromium.android", - "recipe": "chromium", - "sheriff_rotations": [ - "android" - ] -} \ No newline at end of file
diff --git a/infra/config/generated/builders/ci/android-weblayer-oreo-x86-rel-tests/properties.json b/infra/config/generated/builders/ci/android-weblayer-oreo-x86-rel-tests/properties.json deleted file mode 100644 index e84d34e..0000000 --- a/infra/config/generated/builders/ci/android-weblayer-oreo-x86-rel-tests/properties.json +++ /dev/null
@@ -1,95 +0,0 @@ -{ - "$build/chromium_tests_builder_config": { - "builder_config": { - "builder_db": { - "entries": [ - { - "builder_id": { - "bucket": "ci", - "builder": "android-weblayer-oreo-x86-rel-tests", - "project": "chromium" - }, - "builder_spec": { - "build_gs_bucket": "chromium-android-archive", - "builder_group": "chromium.android", - "execution_mode": "TEST", - "legacy_android_config": { - "config": "x86_builder" - }, - "legacy_chromium_config": { - "apply_configs": [ - "mb" - ], - "build_config": "Release", - "config": "android", - "target_bits": 32, - "target_platform": "android" - }, - "legacy_gclient_config": { - "apply_configs": [ - "android" - ], - "config": "chromium" - }, - "parent": { - "bucket": "ci", - "builder": "android-weblayer-x86-rel", - "project": "chromium" - } - } - }, - { - "builder_id": { - "bucket": "ci", - "builder": "android-weblayer-x86-rel", - "project": "chromium" - }, - "builder_spec": { - "build_gs_bucket": "chromium-android-archive", - "builder_group": "chromium.android", - "execution_mode": "COMPILE_AND_TEST", - "legacy_android_config": { - "config": "x86_builder" - }, - "legacy_chromium_config": { - "apply_configs": [ - "mb" - ], - "build_config": "Release", - "config": "android", - "target_bits": 32, - "target_platform": "android" - }, - "legacy_gclient_config": { - "apply_configs": [ - "android", - "enable_reclient" - ], - "config": "chromium" - } - } - } - ] - }, - "builder_ids": [ - { - "bucket": "ci", - "builder": "android-weblayer-oreo-x86-rel-tests", - "project": "chromium" - } - ] - } - }, - "$recipe_engine/resultdb/test_presentation": { - "column_keys": [], - "grouping_keys": [ - "status", - "v.test_suite" - ] - }, - "builder_group": "chromium.android", - "recipe": "chromium", - "sheriff_rotations": [ - "android" - ] -} \ No newline at end of file
diff --git a/infra/config/generated/builders/ci/android-weblayer-pie-x86-rel-tests/properties.json b/infra/config/generated/builders/ci/android-weblayer-pie-x86-rel-tests/properties.json deleted file mode 100644 index 5ee35103..0000000 --- a/infra/config/generated/builders/ci/android-weblayer-pie-x86-rel-tests/properties.json +++ /dev/null
@@ -1,101 +0,0 @@ -{ - "$build/chromium_tests_builder_config": { - "builder_config": { - "builder_db": { - "entries": [ - { - "builder_id": { - "bucket": "ci", - "builder": "android-weblayer-pie-x86-rel-tests", - "project": "chromium" - }, - "builder_spec": { - "build_gs_bucket": "chromium-android-archive", - "builder_group": "chromium.android", - "execution_mode": "TEST", - "legacy_android_config": { - "config": "x86_builder" - }, - "legacy_chromium_config": { - "apply_configs": [ - "mb" - ], - "build_config": "Release", - "config": "android", - "target_bits": 32, - "target_platform": "android" - }, - "legacy_gclient_config": { - "apply_configs": [ - "android" - ], - "config": "chromium" - }, - "parent": { - "bucket": "ci", - "builder": "android-weblayer-x86-rel", - "project": "chromium" - } - } - }, - { - "builder_id": { - "bucket": "ci", - "builder": "android-weblayer-x86-rel", - "project": "chromium" - }, - "builder_spec": { - "build_gs_bucket": "chromium-android-archive", - "builder_group": "chromium.android", - "execution_mode": "COMPILE_AND_TEST", - "legacy_android_config": { - "config": "x86_builder" - }, - "legacy_chromium_config": { - "apply_configs": [ - "mb" - ], - "build_config": "Release", - "config": "android", - "target_bits": 32, - "target_platform": "android" - }, - "legacy_gclient_config": { - "apply_configs": [ - "android", - "enable_reclient" - ], - "config": "chromium" - } - } - } - ] - }, - "builder_ids": [ - { - "bucket": "ci", - "builder": "android-weblayer-pie-x86-rel-tests", - "project": "chromium" - } - ], - "mirroring_builder_group_and_names": [ - { - "builder": "android-weblayer-pie-x86-rel-tests", - "group": "tryserver.chromium.android" - } - ] - } - }, - "$recipe_engine/resultdb/test_presentation": { - "column_keys": [], - "grouping_keys": [ - "status", - "v.test_suite" - ] - }, - "builder_group": "chromium.android", - "recipe": "chromium", - "sheriff_rotations": [ - "android" - ] -} \ No newline at end of file
diff --git a/infra/config/generated/builders/ci/android-weblayer-with-aosp-webview-x86-fyi-rel/properties.json b/infra/config/generated/builders/ci/android-weblayer-with-aosp-webview-x86-fyi-rel/properties.json deleted file mode 100644 index b6e2921..0000000 --- a/infra/config/generated/builders/ci/android-weblayer-with-aosp-webview-x86-fyi-rel/properties.json +++ /dev/null
@@ -1,16 +0,0 @@ -{ - "$build/reclient": { - "instance": "rbe-chromium-trusted", - "jobs": 250, - "metrics_project": "chromium-reclient-metrics" - }, - "$recipe_engine/resultdb/test_presentation": { - "column_keys": [], - "grouping_keys": [ - "status", - "v.test_suite" - ] - }, - "builder_group": "chromium.android.fyi", - "recipe": "chromium" -} \ No newline at end of file
diff --git a/infra/config/generated/builders/ci/android-weblayer-with-aosp-webview-x86-rel/properties.json b/infra/config/generated/builders/ci/android-weblayer-with-aosp-webview-x86-rel/properties.json deleted file mode 100644 index b5ec3f7..0000000 --- a/infra/config/generated/builders/ci/android-weblayer-with-aosp-webview-x86-rel/properties.json +++ /dev/null
@@ -1,159 +0,0 @@ -{ - "$build/chromium_tests_builder_config": { - "builder_config": { - "builder_db": { - "entries": [ - { - "builder_id": { - "bucket": "ci", - "builder": "android-weblayer-10-x86-rel-tests", - "project": "chromium" - }, - "builder_spec": { - "build_gs_bucket": "chromium-android-archive", - "builder_group": "chromium.android", - "execution_mode": "TEST", - "legacy_android_config": { - "config": "x86_builder" - }, - "legacy_chromium_config": { - "apply_configs": [ - "mb" - ], - "build_config": "Release", - "config": "android", - "target_bits": 32, - "target_platform": "android" - }, - "legacy_gclient_config": { - "apply_configs": [ - "android" - ], - "config": "chromium" - }, - "parent": { - "bucket": "ci", - "builder": "android-weblayer-with-aosp-webview-x86-rel", - "project": "chromium" - } - } - }, - { - "builder_id": { - "bucket": "ci", - "builder": "android-weblayer-marshmallow-x86-rel-tests", - "project": "chromium" - }, - "builder_spec": { - "build_gs_bucket": "chromium-android-archive", - "builder_group": "chromium.android", - "execution_mode": "TEST", - "legacy_android_config": { - "config": "x86_builder" - }, - "legacy_chromium_config": { - "apply_configs": [ - "mb" - ], - "build_config": "Release", - "config": "android", - "target_bits": 32, - "target_platform": "android" - }, - "legacy_gclient_config": { - "apply_configs": [ - "android" - ], - "config": "chromium" - }, - "parent": { - "bucket": "ci", - "builder": "android-weblayer-with-aosp-webview-x86-rel", - "project": "chromium" - } - } - }, - { - "builder_id": { - "bucket": "ci", - "builder": "android-weblayer-with-aosp-webview-x86-rel", - "project": "chromium" - }, - "builder_spec": { - "build_gs_bucket": "chromium-android-archive", - "builder_group": "chromium.android", - "execution_mode": "COMPILE_AND_TEST", - "legacy_android_config": { - "config": "x86_builder" - }, - "legacy_chromium_config": { - "apply_configs": [ - "mb" - ], - "build_config": "Release", - "config": "android", - "target_bits": 32, - "target_platform": "android" - }, - "legacy_gclient_config": { - "apply_configs": [ - "android", - "enable_reclient" - ], - "config": "chromium" - } - } - } - ] - }, - "builder_ids": [ - { - "bucket": "ci", - "builder": "android-weblayer-with-aosp-webview-x86-rel", - "project": "chromium" - } - ], - "builder_ids_in_scope_for_testing": [ - { - "bucket": "ci", - "builder": "android-weblayer-10-x86-rel-tests", - "project": "chromium" - }, - { - "bucket": "ci", - "builder": "android-weblayer-marshmallow-x86-rel-tests", - "project": "chromium" - } - ], - "mirroring_builder_group_and_names": [ - { - "builder": "android-weblayer-10-x86-rel-tests", - "group": "tryserver.chromium.android" - }, - { - "builder": "android-weblayer-marshmallow-x86-rel-tests", - "group": "tryserver.chromium.android" - } - ] - } - }, - "$build/goma": { - "enable_ats": true, - "jobs": 150, - "rpc_extra_params": "?prod", - "server_host": "goma.chromium.org", - "use_luci_auth": true - }, - "$recipe_engine/resultdb/test_presentation": { - "column_keys": [], - "grouping_keys": [ - "status", - "v.test_suite" - ] - }, - "builder_group": "chromium.android", - "recipe": "chromium", - "sheriff_rotations": [ - "android" - ] -} \ No newline at end of file
diff --git a/infra/config/generated/builders/ci/android-weblayer-x86-rel/properties.json b/infra/config/generated/builders/ci/android-weblayer-x86-rel/properties.json deleted file mode 100644 index ddd172c..0000000 --- a/infra/config/generated/builders/ci/android-weblayer-x86-rel/properties.json +++ /dev/null
@@ -1,155 +0,0 @@ -{ - "$build/chromium_tests_builder_config": { - "builder_config": { - "builder_db": { - "entries": [ - { - "builder_id": { - "bucket": "ci", - "builder": "android-weblayer-oreo-x86-rel-tests", - "project": "chromium" - }, - "builder_spec": { - "build_gs_bucket": "chromium-android-archive", - "builder_group": "chromium.android", - "execution_mode": "TEST", - "legacy_android_config": { - "config": "x86_builder" - }, - "legacy_chromium_config": { - "apply_configs": [ - "mb" - ], - "build_config": "Release", - "config": "android", - "target_bits": 32, - "target_platform": "android" - }, - "legacy_gclient_config": { - "apply_configs": [ - "android" - ], - "config": "chromium" - }, - "parent": { - "bucket": "ci", - "builder": "android-weblayer-x86-rel", - "project": "chromium" - } - } - }, - { - "builder_id": { - "bucket": "ci", - "builder": "android-weblayer-pie-x86-rel-tests", - "project": "chromium" - }, - "builder_spec": { - "build_gs_bucket": "chromium-android-archive", - "builder_group": "chromium.android", - "execution_mode": "TEST", - "legacy_android_config": { - "config": "x86_builder" - }, - "legacy_chromium_config": { - "apply_configs": [ - "mb" - ], - "build_config": "Release", - "config": "android", - "target_bits": 32, - "target_platform": "android" - }, - "legacy_gclient_config": { - "apply_configs": [ - "android" - ], - "config": "chromium" - }, - "parent": { - "bucket": "ci", - "builder": "android-weblayer-x86-rel", - "project": "chromium" - } - } - }, - { - "builder_id": { - "bucket": "ci", - "builder": "android-weblayer-x86-rel", - "project": "chromium" - }, - "builder_spec": { - "build_gs_bucket": "chromium-android-archive", - "builder_group": "chromium.android", - "execution_mode": "COMPILE_AND_TEST", - "legacy_android_config": { - "config": "x86_builder" - }, - "legacy_chromium_config": { - "apply_configs": [ - "mb" - ], - "build_config": "Release", - "config": "android", - "target_bits": 32, - "target_platform": "android" - }, - "legacy_gclient_config": { - "apply_configs": [ - "android", - "enable_reclient" - ], - "config": "chromium" - } - } - } - ] - }, - "builder_ids": [ - { - "bucket": "ci", - "builder": "android-weblayer-x86-rel", - "project": "chromium" - } - ], - "builder_ids_in_scope_for_testing": [ - { - "bucket": "ci", - "builder": "android-weblayer-oreo-x86-rel-tests", - "project": "chromium" - }, - { - "bucket": "ci", - "builder": "android-weblayer-pie-x86-rel-tests", - "project": "chromium" - } - ], - "mirroring_builder_group_and_names": [ - { - "builder": "android-weblayer-pie-x86-rel-tests", - "group": "tryserver.chromium.android" - } - ] - } - }, - "$build/goma": { - "enable_ats": true, - "jobs": 150, - "rpc_extra_params": "?prod", - "server_host": "goma.chromium.org", - "use_luci_auth": true - }, - "$recipe_engine/resultdb/test_presentation": { - "column_keys": [], - "grouping_keys": [ - "status", - "v.test_suite" - ] - }, - "builder_group": "chromium.android", - "recipe": "chromium", - "sheriff_rotations": [ - "android" - ] -} \ No newline at end of file
diff --git a/infra/config/generated/builders/try/android-opus-arm-rel/properties.json b/infra/config/generated/builders/try/android-opus-arm-rel/properties.json deleted file mode 100644 index d90599c..0000000 --- a/infra/config/generated/builders/try/android-opus-arm-rel/properties.json +++ /dev/null
@@ -1,17 +0,0 @@ -{ - "$build/goma": { - "enable_ats": true, - "rpc_extra_params": "?prod", - "server_host": "goma.chromium.org", - "use_luci_auth": true - }, - "$recipe_engine/resultdb/test_presentation": { - "column_keys": [], - "grouping_keys": [ - "status", - "v.test_suite" - ] - }, - "builder_group": "tryserver.chromium.android", - "recipe": "chromium_trybot" -} \ No newline at end of file
diff --git a/infra/config/generated/builders/try/android-weblayer-10-x86-rel-tests/properties.json b/infra/config/generated/builders/try/android-weblayer-10-x86-rel-tests/properties.json deleted file mode 100644 index d59dbf39..0000000 --- a/infra/config/generated/builders/try/android-weblayer-10-x86-rel-tests/properties.json +++ /dev/null
@@ -1,105 +0,0 @@ -{ - "$build/chromium_tests_builder_config": { - "builder_config": { - "builder_db": { - "entries": [ - { - "builder_id": { - "bucket": "ci", - "builder": "android-weblayer-10-x86-rel-tests", - "project": "chromium" - }, - "builder_spec": { - "build_gs_bucket": "chromium-android-archive", - "builder_group": "chromium.android", - "execution_mode": "TEST", - "legacy_android_config": { - "config": "x86_builder" - }, - "legacy_chromium_config": { - "apply_configs": [ - "mb" - ], - "build_config": "Release", - "config": "android", - "target_bits": 32, - "target_platform": "android" - }, - "legacy_gclient_config": { - "apply_configs": [ - "android" - ], - "config": "chromium" - }, - "parent": { - "bucket": "ci", - "builder": "android-weblayer-with-aosp-webview-x86-rel", - "project": "chromium" - } - } - }, - { - "builder_id": { - "bucket": "ci", - "builder": "android-weblayer-with-aosp-webview-x86-rel", - "project": "chromium" - }, - "builder_spec": { - "build_gs_bucket": "chromium-android-archive", - "builder_group": "chromium.android", - "execution_mode": "COMPILE_AND_TEST", - "legacy_android_config": { - "config": "x86_builder" - }, - "legacy_chromium_config": { - "apply_configs": [ - "mb" - ], - "build_config": "Release", - "config": "android", - "target_bits": 32, - "target_platform": "android" - }, - "legacy_gclient_config": { - "apply_configs": [ - "android", - "enable_reclient" - ], - "config": "chromium" - } - } - } - ] - }, - "builder_ids": [ - { - "bucket": "ci", - "builder": "android-weblayer-with-aosp-webview-x86-rel", - "project": "chromium" - } - ], - "builder_ids_in_scope_for_testing": [ - { - "bucket": "ci", - "builder": "android-weblayer-10-x86-rel-tests", - "project": "chromium" - } - ] - } - }, - "$build/goma": { - "enable_ats": true, - "rpc_extra_params": "?prod", - "server_host": "goma.chromium.org", - "use_luci_auth": true - }, - "$recipe_engine/resultdb/test_presentation": { - "column_keys": [], - "grouping_keys": [ - "status", - "v.test_suite" - ] - }, - "builder_group": "tryserver.chromium.android", - "recipe": "chromium_trybot" -} \ No newline at end of file
diff --git a/infra/config/generated/builders/try/android-weblayer-marshmallow-x86-rel-tests/properties.json b/infra/config/generated/builders/try/android-weblayer-marshmallow-x86-rel-tests/properties.json deleted file mode 100644 index e2db95c0..0000000 --- a/infra/config/generated/builders/try/android-weblayer-marshmallow-x86-rel-tests/properties.json +++ /dev/null
@@ -1,105 +0,0 @@ -{ - "$build/chromium_tests_builder_config": { - "builder_config": { - "builder_db": { - "entries": [ - { - "builder_id": { - "bucket": "ci", - "builder": "android-weblayer-marshmallow-x86-rel-tests", - "project": "chromium" - }, - "builder_spec": { - "build_gs_bucket": "chromium-android-archive", - "builder_group": "chromium.android", - "execution_mode": "TEST", - "legacy_android_config": { - "config": "x86_builder" - }, - "legacy_chromium_config": { - "apply_configs": [ - "mb" - ], - "build_config": "Release", - "config": "android", - "target_bits": 32, - "target_platform": "android" - }, - "legacy_gclient_config": { - "apply_configs": [ - "android" - ], - "config": "chromium" - }, - "parent": { - "bucket": "ci", - "builder": "android-weblayer-with-aosp-webview-x86-rel", - "project": "chromium" - } - } - }, - { - "builder_id": { - "bucket": "ci", - "builder": "android-weblayer-with-aosp-webview-x86-rel", - "project": "chromium" - }, - "builder_spec": { - "build_gs_bucket": "chromium-android-archive", - "builder_group": "chromium.android", - "execution_mode": "COMPILE_AND_TEST", - "legacy_android_config": { - "config": "x86_builder" - }, - "legacy_chromium_config": { - "apply_configs": [ - "mb" - ], - "build_config": "Release", - "config": "android", - "target_bits": 32, - "target_platform": "android" - }, - "legacy_gclient_config": { - "apply_configs": [ - "android", - "enable_reclient" - ], - "config": "chromium" - } - } - } - ] - }, - "builder_ids": [ - { - "bucket": "ci", - "builder": "android-weblayer-with-aosp-webview-x86-rel", - "project": "chromium" - } - ], - "builder_ids_in_scope_for_testing": [ - { - "bucket": "ci", - "builder": "android-weblayer-marshmallow-x86-rel-tests", - "project": "chromium" - } - ] - } - }, - "$build/goma": { - "enable_ats": true, - "rpc_extra_params": "?prod", - "server_host": "goma.chromium.org", - "use_luci_auth": true - }, - "$recipe_engine/resultdb/test_presentation": { - "column_keys": [], - "grouping_keys": [ - "status", - "v.test_suite" - ] - }, - "builder_group": "tryserver.chromium.android", - "recipe": "chromium_trybot" -} \ No newline at end of file
diff --git a/infra/config/generated/builders/try/android-weblayer-pie-x86-rel-tests/properties.json b/infra/config/generated/builders/try/android-weblayer-pie-x86-rel-tests/properties.json deleted file mode 100644 index 0e3b1450..0000000 --- a/infra/config/generated/builders/try/android-weblayer-pie-x86-rel-tests/properties.json +++ /dev/null
@@ -1,105 +0,0 @@ -{ - "$build/chromium_tests_builder_config": { - "builder_config": { - "builder_db": { - "entries": [ - { - "builder_id": { - "bucket": "ci", - "builder": "android-weblayer-pie-x86-rel-tests", - "project": "chromium" - }, - "builder_spec": { - "build_gs_bucket": "chromium-android-archive", - "builder_group": "chromium.android", - "execution_mode": "TEST", - "legacy_android_config": { - "config": "x86_builder" - }, - "legacy_chromium_config": { - "apply_configs": [ - "mb" - ], - "build_config": "Release", - "config": "android", - "target_bits": 32, - "target_platform": "android" - }, - "legacy_gclient_config": { - "apply_configs": [ - "android" - ], - "config": "chromium" - }, - "parent": { - "bucket": "ci", - "builder": "android-weblayer-x86-rel", - "project": "chromium" - } - } - }, - { - "builder_id": { - "bucket": "ci", - "builder": "android-weblayer-x86-rel", - "project": "chromium" - }, - "builder_spec": { - "build_gs_bucket": "chromium-android-archive", - "builder_group": "chromium.android", - "execution_mode": "COMPILE_AND_TEST", - "legacy_android_config": { - "config": "x86_builder" - }, - "legacy_chromium_config": { - "apply_configs": [ - "mb" - ], - "build_config": "Release", - "config": "android", - "target_bits": 32, - "target_platform": "android" - }, - "legacy_gclient_config": { - "apply_configs": [ - "android", - "enable_reclient" - ], - "config": "chromium" - } - } - } - ] - }, - "builder_ids": [ - { - "bucket": "ci", - "builder": "android-weblayer-x86-rel", - "project": "chromium" - } - ], - "builder_ids_in_scope_for_testing": [ - { - "bucket": "ci", - "builder": "android-weblayer-pie-x86-rel-tests", - "project": "chromium" - } - ] - } - }, - "$build/goma": { - "enable_ats": true, - "rpc_extra_params": "?prod", - "server_host": "goma.chromium.org", - "use_luci_auth": true - }, - "$recipe_engine/resultdb/test_presentation": { - "column_keys": [], - "grouping_keys": [ - "status", - "v.test_suite" - ] - }, - "builder_group": "tryserver.chromium.android", - "recipe": "chromium_trybot" -} \ No newline at end of file
diff --git a/infra/config/generated/luci/commit-queue.cfg b/infra/config/generated/luci/commit-queue.cfg index 596280ea..3c3fd75 100644 --- a/infra/config/generated/luci/commit-queue.cfg +++ b/infra/config/generated/luci/commit-queue.cfg
@@ -672,10 +672,6 @@ includable_only: true } builders { - name: "chromium/try/android-opus-arm-rel" - includable_only: true - } - builders { name: "chromium/try/android-oreo-arm64-cts-networkservice-dbg" includable_only: true } @@ -840,18 +836,6 @@ includable_only: true } builders { - name: "chromium/try/android-weblayer-10-x86-rel-tests" - includable_only: true - } - builders { - name: "chromium/try/android-weblayer-marshmallow-x86-rel-tests" - includable_only: true - } - builders { - name: "chromium/try/android-weblayer-pie-x86-rel-tests" - includable_only: true - } - builders { name: "chromium/try/android-weblayer-pie-x86-wpt-fyi-rel" includable_only: true }
diff --git a/infra/config/generated/luci/cr-buildbucket.cfg b/infra/config/generated/luci/cr-buildbucket.cfg index f124428..19a449e 100644 --- a/infra/config/generated/luci/cr-buildbucket.cfg +++ b/infra/config/generated/luci/cr-buildbucket.cfg
@@ -28660,419 +28660,6 @@ } } builders { - name: "android-weblayer-10-x86-rel-tests" - swarming_host: "chromium-swarm.appspot.com" - dimensions: "builderless:1" - dimensions: "cores:8" - dimensions: "cpu:x86-64" - dimensions: "free_space:standard" - dimensions: "os:Ubuntu-18.04" - dimensions: "pool:luci.chromium.ci" - 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/ci/android-weblayer-10-x86-rel-tests/properties.json",' - ' "top_level_project": {' - ' "ref": "refs/heads/main",' - ' "repo": {' - ' "host": "chromium.googlesource.com",' - ' "project": "chromium/src"' - ' }' - ' }' - ' },' - ' "builder_group": "chromium.android",' - ' "led_builder_is_bootstrapped": true,' - ' "recipe": "chromium",' - ' "sheriff_rotations": [' - ' "android"' - ' ]' - '}' - execution_timeout_secs: 10800 - build_numbers: YES - service_account: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com" - experiments { - key: "luci.recipes.use_python3" - value: 100 - } - resultdb { - enable: true - bq_exports { - project: "chrome-luci-data" - dataset: "chromium" - table: "ci_test_results" - test_results {} - } - bq_exports { - project: "chrome-luci-data" - dataset: "chromium" - table: "gpu_ci_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_ci_test_results" - test_results { - predicate { - test_id_regexp: "(ninja://[^/]*blink_web_tests/.+)|(ninja://[^/]*blink_wpt_tests/.+)" - } - } - } - history_options { - use_invocation_timestamp: true - } - } - } - builders { - name: "android-weblayer-11-x86-rel-tests" - swarming_host: "chromium-swarm.appspot.com" - dimensions: "builderless:1" - dimensions: "cores:8" - dimensions: "cpu:x86-64" - dimensions: "free_space:standard" - dimensions: "os:Ubuntu-18.04" - dimensions: "pool:luci.chromium.ci" - 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/ci/android-weblayer-11-x86-rel-tests/properties.json",' - ' "top_level_project": {' - ' "ref": "refs/heads/main",' - ' "repo": {' - ' "host": "chromium.googlesource.com",' - ' "project": "chromium/src"' - ' }' - ' }' - ' },' - ' "builder_group": "chromium.android.fyi",' - ' "led_builder_is_bootstrapped": true,' - ' "recipe": "chromium"' - '}' - priority: 35 - execution_timeout_secs: 10800 - build_numbers: YES - service_account: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com" - experiments { - key: "luci.recipes.use_python3" - value: 100 - } - resultdb { - enable: true - bq_exports { - project: "chrome-luci-data" - dataset: "chromium" - table: "ci_test_results" - test_results {} - } - bq_exports { - project: "chrome-luci-data" - dataset: "chromium" - table: "gpu_ci_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_ci_test_results" - test_results { - predicate { - test_id_regexp: "(ninja://[^/]*blink_web_tests/.+)|(ninja://[^/]*blink_wpt_tests/.+)" - } - } - } - history_options { - use_invocation_timestamp: true - } - } - } - builders { - name: "android-weblayer-marshmallow-x86-rel-tests" - swarming_host: "chromium-swarm.appspot.com" - dimensions: "builderless:1" - dimensions: "cores:8" - dimensions: "cpu:x86-64" - dimensions: "free_space:standard" - dimensions: "os:Ubuntu-18.04" - dimensions: "pool:luci.chromium.ci" - 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/ci/android-weblayer-marshmallow-x86-rel-tests/properties.json",' - ' "top_level_project": {' - ' "ref": "refs/heads/main",' - ' "repo": {' - ' "host": "chromium.googlesource.com",' - ' "project": "chromium/src"' - ' }' - ' }' - ' },' - ' "builder_group": "chromium.android",' - ' "led_builder_is_bootstrapped": true,' - ' "recipe": "chromium",' - ' "sheriff_rotations": [' - ' "android"' - ' ]' - '}' - execution_timeout_secs: 10800 - build_numbers: YES - service_account: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com" - experiments { - key: "luci.recipes.use_python3" - value: 100 - } - resultdb { - enable: true - bq_exports { - project: "chrome-luci-data" - dataset: "chromium" - table: "ci_test_results" - test_results {} - } - bq_exports { - project: "chrome-luci-data" - dataset: "chromium" - table: "gpu_ci_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_ci_test_results" - test_results { - predicate { - test_id_regexp: "(ninja://[^/]*blink_web_tests/.+)|(ninja://[^/]*blink_wpt_tests/.+)" - } - } - } - history_options { - use_invocation_timestamp: true - } - } - } - builders { - name: "android-weblayer-oreo-x86-rel-tests" - swarming_host: "chromium-swarm.appspot.com" - dimensions: "builderless:1" - dimensions: "cores:8" - dimensions: "cpu:x86-64" - dimensions: "free_space:standard" - dimensions: "os:Ubuntu-18.04" - dimensions: "pool:luci.chromium.ci" - 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/ci/android-weblayer-oreo-x86-rel-tests/properties.json",' - ' "top_level_project": {' - ' "ref": "refs/heads/main",' - ' "repo": {' - ' "host": "chromium.googlesource.com",' - ' "project": "chromium/src"' - ' }' - ' }' - ' },' - ' "builder_group": "chromium.android",' - ' "led_builder_is_bootstrapped": true,' - ' "recipe": "chromium",' - ' "sheriff_rotations": [' - ' "android"' - ' ]' - '}' - execution_timeout_secs: 10800 - build_numbers: YES - service_account: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com" - experiments { - key: "luci.recipes.use_python3" - value: 100 - } - resultdb { - enable: true - bq_exports { - project: "chrome-luci-data" - dataset: "chromium" - table: "ci_test_results" - test_results {} - } - bq_exports { - project: "chrome-luci-data" - dataset: "chromium" - table: "gpu_ci_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_ci_test_results" - test_results { - predicate { - test_id_regexp: "(ninja://[^/]*blink_web_tests/.+)|(ninja://[^/]*blink_wpt_tests/.+)" - } - } - } - history_options { - use_invocation_timestamp: true - } - } - } - builders { - name: "android-weblayer-pie-x86-rel-tests" - swarming_host: "chromium-swarm.appspot.com" - dimensions: "builderless:1" - dimensions: "cores:8" - dimensions: "cpu:x86-64" - dimensions: "free_space:standard" - dimensions: "os:Ubuntu-18.04" - dimensions: "pool:luci.chromium.ci" - 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/ci/android-weblayer-pie-x86-rel-tests/properties.json",' - ' "top_level_project": {' - ' "ref": "refs/heads/main",' - ' "repo": {' - ' "host": "chromium.googlesource.com",' - ' "project": "chromium/src"' - ' }' - ' }' - ' },' - ' "builder_group": "chromium.android",' - ' "led_builder_is_bootstrapped": true,' - ' "recipe": "chromium",' - ' "sheriff_rotations": [' - ' "android"' - ' ]' - '}' - execution_timeout_secs: 10800 - build_numbers: YES - service_account: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com" - experiments { - key: "luci.recipes.use_python3" - value: 100 - } - resultdb { - enable: true - bq_exports { - project: "chrome-luci-data" - dataset: "chromium" - table: "ci_test_results" - test_results {} - } - bq_exports { - project: "chrome-luci-data" - dataset: "chromium" - table: "gpu_ci_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_ci_test_results" - test_results { - predicate { - test_id_regexp: "(ninja://[^/]*blink_web_tests/.+)|(ninja://[^/]*blink_wpt_tests/.+)" - } - } - } - history_options { - use_invocation_timestamp: true - } - } - } - builders { name: "android-weblayer-pie-x86-wpt-fyi-rel" swarming_host: "chromium-swarm.appspot.com" dimensions: "builderless:1" @@ -29235,253 +28822,6 @@ } } builders { - name: "android-weblayer-with-aosp-webview-x86-fyi-rel" - swarming_host: "chromium-swarm.appspot.com" - dimensions: "builderless:1" - dimensions: "cores:8" - dimensions: "cpu:x86-64" - dimensions: "free_space:standard" - dimensions: "os:Ubuntu-18.04" - dimensions: "pool:luci.chromium.ci" - 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/ci/android-weblayer-with-aosp-webview-x86-fyi-rel/properties.json",' - ' "top_level_project": {' - ' "ref": "refs/heads/main",' - ' "repo": {' - ' "host": "chromium.googlesource.com",' - ' "project": "chromium/src"' - ' }' - ' }' - ' },' - ' "builder_group": "chromium.android.fyi",' - ' "led_builder_is_bootstrapped": true,' - ' "recipe": "chromium"' - '}' - priority: 35 - execution_timeout_secs: 10800 - build_numbers: YES - service_account: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com" - experiments { - key: "luci.recipes.use_python3" - value: 100 - } - resultdb { - enable: true - bq_exports { - project: "chrome-luci-data" - dataset: "chromium" - table: "ci_test_results" - test_results {} - } - bq_exports { - project: "chrome-luci-data" - dataset: "chromium" - table: "gpu_ci_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_ci_test_results" - test_results { - predicate { - test_id_regexp: "(ninja://[^/]*blink_web_tests/.+)|(ninja://[^/]*blink_wpt_tests/.+)" - } - } - } - history_options { - use_invocation_timestamp: true - } - } - } - builders { - name: "android-weblayer-with-aosp-webview-x86-rel" - swarming_host: "chromium-swarm.appspot.com" - dimensions: "builderless:1" - dimensions: "cores:8" - dimensions: "cpu:x86-64" - dimensions: "free_space:standard" - dimensions: "os:Ubuntu-18.04" - dimensions: "pool:luci.chromium.ci" - 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/ci/android-weblayer-with-aosp-webview-x86-rel/properties.json",' - ' "top_level_project": {' - ' "ref": "refs/heads/main",' - ' "repo": {' - ' "host": "chromium.googlesource.com",' - ' "project": "chromium/src"' - ' }' - ' }' - ' },' - ' "builder_group": "chromium.android",' - ' "led_builder_is_bootstrapped": true,' - ' "recipe": "chromium",' - ' "sheriff_rotations": [' - ' "android"' - ' ]' - '}' - execution_timeout_secs: 10800 - build_numbers: YES - service_account: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com" - experiments { - key: "luci.recipes.use_python3" - value: 100 - } - resultdb { - enable: true - bq_exports { - project: "chrome-luci-data" - dataset: "chromium" - table: "ci_test_results" - test_results {} - } - bq_exports { - project: "chrome-luci-data" - dataset: "chromium" - table: "gpu_ci_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_ci_test_results" - test_results { - predicate { - test_id_regexp: "(ninja://[^/]*blink_web_tests/.+)|(ninja://[^/]*blink_wpt_tests/.+)" - } - } - } - history_options { - use_invocation_timestamp: true - } - } - } - builders { - name: "android-weblayer-x86-rel" - swarming_host: "chromium-swarm.appspot.com" - dimensions: "builderless:1" - dimensions: "cores:8" - dimensions: "cpu:x86-64" - dimensions: "free_space:standard" - dimensions: "os:Ubuntu-18.04" - dimensions: "pool:luci.chromium.ci" - 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/ci/android-weblayer-x86-rel/properties.json",' - ' "top_level_project": {' - ' "ref": "refs/heads/main",' - ' "repo": {' - ' "host": "chromium.googlesource.com",' - ' "project": "chromium/src"' - ' }' - ' }' - ' },' - ' "builder_group": "chromium.android",' - ' "led_builder_is_bootstrapped": true,' - ' "recipe": "chromium",' - ' "sheriff_rotations": [' - ' "android"' - ' ]' - '}' - execution_timeout_secs: 10800 - build_numbers: YES - service_account: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com" - experiments { - key: "luci.recipes.use_python3" - value: 100 - } - resultdb { - enable: true - bq_exports { - project: "chrome-luci-data" - dataset: "chromium" - table: "ci_test_results" - test_results {} - } - bq_exports { - project: "chrome-luci-data" - dataset: "chromium" - table: "gpu_ci_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_ci_test_results" - test_results { - predicate { - test_id_regexp: "(ninja://[^/]*blink_web_tests/.+)|(ninja://[^/]*blink_wpt_tests/.+)" - } - } - } - history_options { - use_invocation_timestamp: true - } - } - } - builders { name: "android-webview-10-x86-rel-tests" swarming_host: "chromium-swarm.appspot.com" dimensions: "builderless:1" @@ -56489,100 +55829,6 @@ } } builders { - name: "android-opus-arm-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/android-opus-arm-rel/properties.json",' - ' "top_level_project": {' - ' "ref": "refs/heads/main",' - ' "repo": {' - ' "host": "chromium.googlesource.com",' - ' "project": "chromium/src"' - ' }' - ' }' - ' },' - ' "builder_group": "tryserver.chromium.android",' - ' "led_builder_is_bootstrapped": true,' - ' "recipe": "chromium_trybot"' - '}' - execution_timeout_secs: 14400 - expiration_secs: 7200 - grace_period { - seconds: 120 - } - caches { - name: "win_toolchain" - path: "win_toolchain" - } - 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: 10 - } - 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: "android-oreo-arm64-cts-networkservice-dbg" swarming_host: "chromium-swarm.appspot.com" dimensions: "builderless:1" @@ -57822,288 +57068,6 @@ } } builders { - name: "android-weblayer-10-x86-rel-tests" - 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/android-weblayer-10-x86-rel-tests/properties.json",' - ' "top_level_project": {' - ' "ref": "refs/heads/main",' - ' "repo": {' - ' "host": "chromium.googlesource.com",' - ' "project": "chromium/src"' - ' }' - ' }' - ' },' - ' "builder_group": "tryserver.chromium.android",' - ' "led_builder_is_bootstrapped": true,' - ' "recipe": "chromium_trybot"' - '}' - execution_timeout_secs: 14400 - expiration_secs: 7200 - grace_period { - seconds: 120 - } - caches { - name: "win_toolchain" - path: "win_toolchain" - } - 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: 10 - } - 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: "android-weblayer-marshmallow-x86-rel-tests" - 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/android-weblayer-marshmallow-x86-rel-tests/properties.json",' - ' "top_level_project": {' - ' "ref": "refs/heads/main",' - ' "repo": {' - ' "host": "chromium.googlesource.com",' - ' "project": "chromium/src"' - ' }' - ' }' - ' },' - ' "builder_group": "tryserver.chromium.android",' - ' "led_builder_is_bootstrapped": true,' - ' "recipe": "chromium_trybot"' - '}' - execution_timeout_secs: 14400 - expiration_secs: 7200 - grace_period { - seconds: 120 - } - caches { - name: "win_toolchain" - path: "win_toolchain" - } - 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: 10 - } - 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: "android-weblayer-pie-x86-rel-tests" - 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/android-weblayer-pie-x86-rel-tests/properties.json",' - ' "top_level_project": {' - ' "ref": "refs/heads/main",' - ' "repo": {' - ' "host": "chromium.googlesource.com",' - ' "project": "chromium/src"' - ' }' - ' }' - ' },' - ' "builder_group": "tryserver.chromium.android",' - ' "led_builder_is_bootstrapped": true,' - ' "recipe": "chromium_trybot"' - '}' - execution_timeout_secs: 14400 - expiration_secs: 7200 - grace_period { - seconds: 120 - } - caches { - name: "win_toolchain" - path: "win_toolchain" - } - 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: 10 - } - 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: "android-weblayer-pie-x86-wpt-fyi-rel" swarming_host: "chromium-swarm.appspot.com" dimensions: "builderless:1"
diff --git a/infra/config/generated/luci/luci-milo.cfg b/infra/config/generated/luci/luci-milo.cfg index 84fe3bb..c702120 100644 --- a/infra/config/generated/luci/luci-milo.cfg +++ b/infra/config/generated/luci/luci-milo.cfg
@@ -4130,16 +4130,6 @@ short_name: "size" } builders { - name: "buildbucket/luci.chromium.ci/android-weblayer-x86-rel" - category: "builder|weblayer" - short_name: "x86" - } - builders { - name: "buildbucket/luci.chromium.ci/android-weblayer-with-aosp-webview-x86-rel" - category: "builder|weblayer_with_aosp_webview" - short_name: "x86" - } - builders { name: "buildbucket/luci.chromium.ci/Marshmallow 64 bit Tester" category: "tester|phone" short_name: "M" @@ -4170,26 +4160,6 @@ short_name: "M" } builders { - name: "buildbucket/luci.chromium.ci/android-weblayer-10-x86-rel-tests" - category: "tester|weblayer" - short_name: "10" - } - builders { - name: "buildbucket/luci.chromium.ci/android-weblayer-marshmallow-x86-rel-tests" - category: "tester|weblayer" - short_name: "M" - } - builders { - name: "buildbucket/luci.chromium.ci/android-weblayer-oreo-x86-rel-tests" - category: "tester|weblayer" - short_name: "O" - } - builders { - name: "buildbucket/luci.chromium.ci/android-weblayer-pie-x86-rel-tests" - category: "tester|weblayer" - short_name: "P" - } - builders { name: "buildbucket/luci.chromium.ci/Android WebView M (dbg)" category: "tester|webview" short_name: "M" @@ -4615,11 +4585,6 @@ short_name: "san" } builders { - name: "buildbucket/luci.chromium.ci/android-weblayer-with-aosp-webview-x86-fyi-rel" - category: "builder|weblayer_with_aosp_webview" - short_name: "x86" - } - builders { name: "buildbucket/luci.chromium.ci/android-cronet-asan-x86-rel" category: "cronet|asan" } @@ -4659,11 +4624,6 @@ short_name: "12" } builders { - name: "buildbucket/luci.chromium.ci/android-weblayer-11-x86-rel-tests" - category: "tester|weblayer" - short_name: "11" - } - builders { name: "buildbucket/luci.chromium.ci/android-webview-12-x64-dbg-tests" category: "tester|webview" short_name: "12" @@ -16642,9 +16602,6 @@ name: "buildbucket/luci.chromium.try/android-official" } builders { - name: "buildbucket/luci.chromium.try/android-opus-arm-rel" - } - builders { name: "buildbucket/luci.chromium.try/android-oreo-arm64-cts-networkservice-dbg" } builders { @@ -16684,15 +16641,6 @@ name: "buildbucket/luci.chromium.try/android-rust-arm-rel" } builders { - name: "buildbucket/luci.chromium.try/android-weblayer-10-x86-rel-tests" - } - builders { - name: "buildbucket/luci.chromium.try/android-weblayer-marshmallow-x86-rel-tests" - } - builders { - name: "buildbucket/luci.chromium.try/android-weblayer-pie-x86-rel-tests" - } - builders { name: "buildbucket/luci.chromium.try/android-weblayer-pie-x86-wpt-fyi-rel" } builders { @@ -17829,9 +17777,6 @@ name: "buildbucket/luci.chromium.try/android-nougat-x86-rel-compilator" } builders { - name: "buildbucket/luci.chromium.try/android-opus-arm-rel" - } - builders { name: "buildbucket/luci.chromium.try/android-oreo-arm64-cts-networkservice-dbg" } builders { @@ -17865,15 +17810,6 @@ name: "buildbucket/luci.chromium.try/android-pie-x86-rel" } builders { - name: "buildbucket/luci.chromium.try/android-weblayer-10-x86-rel-tests" - } - builders { - name: "buildbucket/luci.chromium.try/android-weblayer-marshmallow-x86-rel-tests" - } - builders { - name: "buildbucket/luci.chromium.try/android-weblayer-pie-x86-rel-tests" - } - builders { name: "buildbucket/luci.chromium.try/android-weblayer-pie-x86-wpt-fyi-rel" } builders {
diff --git a/infra/config/generated/luci/luci-notify.cfg b/infra/config/generated/luci/luci-notify.cfg index cd6df5aac..1bd65317 100644 --- a/infra/config/generated/luci/luci-notify.cfg +++ b/infra/config/generated/luci/luci-notify.cfg
@@ -2533,66 +2533,6 @@ } notifiers { notifications { - on_new_status: FAILURE - email { - recipients: "weblayer-sheriff@grotations.appspotmail.com" - } - } - builders { - bucket: "ci" - name: "android-weblayer-10-x86-rel-tests" - } -} -notifiers { - notifications { - on_new_status: FAILURE - email { - recipients: "weblayer-sheriff@grotations.appspotmail.com" - } - } - builders { - bucket: "ci" - name: "android-weblayer-11-x86-rel-tests" - } -} -notifiers { - notifications { - on_new_status: FAILURE - email { - recipients: "weblayer-sheriff@grotations.appspotmail.com" - } - } - builders { - bucket: "ci" - name: "android-weblayer-marshmallow-x86-rel-tests" - } -} -notifiers { - notifications { - on_new_status: FAILURE - email { - recipients: "weblayer-sheriff@grotations.appspotmail.com" - } - } - builders { - bucket: "ci" - name: "android-weblayer-oreo-x86-rel-tests" - } -} -notifiers { - notifications { - on_new_status: FAILURE - email { - recipients: "weblayer-sheriff@grotations.appspotmail.com" - } - } - builders { - bucket: "ci" - name: "android-weblayer-pie-x86-rel-tests" - } -} -notifiers { - notifications { on_occurrence: FAILURE failed_step_regexp: "\\b(bot_update|compile|gclient runhooks|runhooks|update|\\w*nocompile_test)\\b" email {
diff --git a/infra/config/generated/luci/luci-scheduler.cfg b/infra/config/generated/luci/luci-scheduler.cfg index 3c11517a..9983e9d 100644 --- a/infra/config/generated/luci/luci-scheduler.cfg +++ b/infra/config/generated/luci/luci-scheduler.cfg
@@ -4911,76 +4911,6 @@ } } job { - id: "android-weblayer-10-x86-rel-tests" - realm: "ci" - acls { - role: TRIGGERER - granted_to: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com" - } - acl_sets: "ci" - buildbucket { - server: "cr-buildbucket.appspot.com" - bucket: "ci" - builder: "android-weblayer-10-x86-rel-tests" - } -} -job { - id: "android-weblayer-11-x86-rel-tests" - realm: "ci" - acls { - role: TRIGGERER - granted_to: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com" - } - acl_sets: "ci" - buildbucket { - server: "cr-buildbucket.appspot.com" - bucket: "ci" - builder: "android-weblayer-11-x86-rel-tests" - } -} -job { - id: "android-weblayer-marshmallow-x86-rel-tests" - realm: "ci" - acls { - role: TRIGGERER - granted_to: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com" - } - acl_sets: "ci" - buildbucket { - server: "cr-buildbucket.appspot.com" - bucket: "ci" - builder: "android-weblayer-marshmallow-x86-rel-tests" - } -} -job { - id: "android-weblayer-oreo-x86-rel-tests" - realm: "ci" - acls { - role: TRIGGERER - granted_to: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com" - } - acl_sets: "ci" - buildbucket { - server: "cr-buildbucket.appspot.com" - bucket: "ci" - builder: "android-weblayer-oreo-x86-rel-tests" - } -} -job { - id: "android-weblayer-pie-x86-rel-tests" - realm: "ci" - acls { - role: TRIGGERER - granted_to: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com" - } - acl_sets: "ci" - buildbucket { - server: "cr-buildbucket.appspot.com" - bucket: "ci" - builder: "android-weblayer-pie-x86-rel-tests" - } -} -job { id: "android-weblayer-pie-x86-wpt-fyi-rel" realm: "ci" acl_sets: "ci" @@ -5001,36 +4931,6 @@ } } job { - id: "android-weblayer-with-aosp-webview-x86-fyi-rel" - realm: "ci" - acl_sets: "ci" - buildbucket { - server: "cr-buildbucket.appspot.com" - bucket: "ci" - builder: "android-weblayer-with-aosp-webview-x86-fyi-rel" - } -} -job { - id: "android-weblayer-with-aosp-webview-x86-rel" - realm: "ci" - acl_sets: "ci" - buildbucket { - server: "cr-buildbucket.appspot.com" - bucket: "ci" - builder: "android-weblayer-with-aosp-webview-x86-rel" - } -} -job { - id: "android-weblayer-x86-rel" - realm: "ci" - acl_sets: "ci" - buildbucket { - server: "cr-buildbucket.appspot.com" - bucket: "ci" - builder: "android-weblayer-x86-rel" - } -} -job { id: "android-webview-10-x86-rel-tests" realm: "ci" acls { @@ -7714,9 +7614,6 @@ triggers: "android-rust-arm-rel" triggers: "android-weblayer-pie-x86-wpt-fyi-rel" triggers: "android-weblayer-pie-x86-wpt-smoketest" - triggers: "android-weblayer-with-aosp-webview-x86-fyi-rel" - triggers: "android-weblayer-with-aosp-webview-x86-rel" - triggers: "android-weblayer-x86-rel" triggers: "android-webview-pie-x86-wpt-fyi-rel" triggers: "android-x86-rel" triggers: "build-perf-android"
diff --git a/infra/config/generated/luci/realms.cfg b/infra/config/generated/luci/realms.cfg index f3e81ab..24bb89a 100644 --- a/infra/config/generated/luci/realms.cfg +++ b/infra/config/generated/luci/realms.cfg
@@ -175,11 +175,6 @@ values: "android-cronet-x86-dbg-pie-tests" values: "android-cronet-x86-rel-kitkat-tests" values: "android-pie-arm64-dbg" - values: "android-weblayer-10-x86-rel-tests" - values: "android-weblayer-11-x86-rel-tests" - values: "android-weblayer-marshmallow-x86-rel-tests" - values: "android-weblayer-oreo-x86-rel-tests" - values: "android-weblayer-pie-x86-rel-tests" values: "android-webview-10-x86-rel-tests" values: "android-webview-12-x64-dbg-tests" values: "linux-lacros-dbg-tests-fyi"
diff --git a/infra/config/generated/sheriff-rotations/android.txt b/infra/config/generated/sheriff-rotations/android.txt index 6663d420..fb6df596 100644 --- a/infra/config/generated/sheriff-rotations/android.txt +++ b/infra/config/generated/sheriff-rotations/android.txt
@@ -26,11 +26,5 @@ ci/android-pie-arm64-dbg ci/android-pie-arm64-rel ci/android-pie-x86-rel -ci/android-weblayer-10-x86-rel-tests -ci/android-weblayer-marshmallow-x86-rel-tests -ci/android-weblayer-oreo-x86-rel-tests -ci/android-weblayer-pie-x86-rel-tests -ci/android-weblayer-with-aosp-webview-x86-rel -ci/android-weblayer-x86-rel ci/android-webview-10-x86-rel-tests ci/android-x86-rel
diff --git a/infra/config/subprojects/chromium/ci/chromium.android.fyi.star b/infra/config/subprojects/chromium/ci/chromium.android.fyi.star index 6dbcedb..00b2b58 100644 --- a/infra/config/subprojects/chromium/ci/chromium.android.fyi.star +++ b/infra/config/subprojects/chromium/ci/chromium.android.fyi.star
@@ -59,16 +59,6 @@ ), ) -ci.thin_tester( - name = "android-weblayer-11-x86-rel-tests", - console_view_entry = consoles.console_view_entry( - category = "tester|weblayer", - short_name = "11", - ), - triggered_by = ["android-weblayer-with-aosp-webview-x86-fyi-rel"], - notifies = ["weblayer-sheriff"], -) - ci.builder( name = "android-weblayer-pie-x86-wpt-fyi-rel", console_view_entry = consoles.console_view_entry( @@ -94,14 +84,6 @@ ) ci.builder( - name = "android-weblayer-with-aosp-webview-x86-fyi-rel", - console_view_entry = consoles.console_view_entry( - category = "builder|weblayer_with_aosp_webview", - short_name = "x86", - ), -) - -ci.builder( name = "android-marshmallow-x86-fyi-rel-reviver", console_view_entry = consoles.console_view_entry( category = "reviver",
diff --git a/infra/config/subprojects/chromium/ci/chromium.android.star b/infra/config/subprojects/chromium/ci/chromium.android.star index e355086b..bc041ca 100644 --- a/infra/config/subprojects/chromium/ci/chromium.android.star +++ b/infra/config/subprojects/chromium/ci/chromium.android.star
@@ -1510,197 +1510,3 @@ # stable. sheriff_rotations = args.ignore_default(None), ) - -ci.thin_tester( - name = "android-weblayer-10-x86-rel-tests", - builder_spec = builder_config.builder_spec( - execution_mode = builder_config.execution_mode.TEST, - gclient_config = builder_config.gclient_config( - config = "chromium", - apply_configs = [ - "android", - ], - ), - chromium_config = builder_config.chromium_config( - config = "android", - apply_configs = [ - "mb", - ], - build_config = builder_config.build_config.RELEASE, - target_bits = 32, - target_platform = builder_config.target_platform.ANDROID, - ), - android_config = builder_config.android_config( - config = "x86_builder", - ), - build_gs_bucket = "chromium-android-archive", - ), - console_view_entry = consoles.console_view_entry( - category = "tester|weblayer", - short_name = "10", - ), - triggered_by = ["android-weblayer-with-aosp-webview-x86-rel"], - notifies = ["weblayer-sheriff"], -) - -ci.thin_tester( - name = "android-weblayer-marshmallow-x86-rel-tests", - builder_spec = builder_config.builder_spec( - execution_mode = builder_config.execution_mode.TEST, - gclient_config = builder_config.gclient_config( - config = "chromium", - apply_configs = [ - "android", - ], - ), - chromium_config = builder_config.chromium_config( - config = "android", - apply_configs = [ - "mb", - ], - build_config = builder_config.build_config.RELEASE, - target_bits = 32, - target_platform = builder_config.target_platform.ANDROID, - ), - android_config = builder_config.android_config( - config = "x86_builder", - ), - build_gs_bucket = "chromium-android-archive", - ), - console_view_entry = consoles.console_view_entry( - category = "tester|weblayer", - short_name = "M", - ), - triggered_by = ["android-weblayer-with-aosp-webview-x86-rel"], - notifies = ["weblayer-sheriff"], -) - -ci.thin_tester( - name = "android-weblayer-oreo-x86-rel-tests", - builder_spec = builder_config.builder_spec( - execution_mode = builder_config.execution_mode.TEST, - gclient_config = builder_config.gclient_config( - config = "chromium", - apply_configs = [ - "android", - ], - ), - chromium_config = builder_config.chromium_config( - config = "android", - apply_configs = [ - "mb", - ], - build_config = builder_config.build_config.RELEASE, - target_bits = 32, - target_platform = builder_config.target_platform.ANDROID, - ), - android_config = builder_config.android_config( - config = "x86_builder", - ), - build_gs_bucket = "chromium-android-archive", - ), - console_view_entry = consoles.console_view_entry( - category = "tester|weblayer", - short_name = "O", - ), - triggered_by = ["android-weblayer-x86-rel"], - notifies = ["weblayer-sheriff"], -) - -ci.thin_tester( - name = "android-weblayer-pie-x86-rel-tests", - builder_spec = builder_config.builder_spec( - execution_mode = builder_config.execution_mode.TEST, - gclient_config = builder_config.gclient_config( - config = "chromium", - apply_configs = [ - "android", - ], - ), - chromium_config = builder_config.chromium_config( - config = "android", - apply_configs = [ - "mb", - ], - build_config = builder_config.build_config.RELEASE, - target_bits = 32, - target_platform = builder_config.target_platform.ANDROID, - ), - android_config = builder_config.android_config( - config = "x86_builder", - ), - build_gs_bucket = "chromium-android-archive", - ), - console_view_entry = consoles.console_view_entry( - category = "tester|weblayer", - short_name = "P", - ), - triggered_by = ["android-weblayer-x86-rel"], - notifies = ["weblayer-sheriff"], -) - -ci.builder( - name = "android-weblayer-with-aosp-webview-x86-rel", - builder_spec = builder_config.builder_spec( - gclient_config = builder_config.gclient_config( - config = "chromium", - apply_configs = [ - "android", - "enable_reclient", - ], - ), - chromium_config = builder_config.chromium_config( - config = "android", - apply_configs = [ - "mb", - ], - build_config = builder_config.build_config.RELEASE, - target_bits = 32, - target_platform = builder_config.target_platform.ANDROID, - ), - android_config = builder_config.android_config( - config = "x86_builder", - ), - build_gs_bucket = "chromium-android-archive", - ), - console_view_entry = consoles.console_view_entry( - category = "builder|weblayer_with_aosp_webview", - short_name = "x86", - ), - goma_backend = goma.backend.RBE_PROD, - goma_jobs = goma.jobs.J150, - reclient_instance = None, -) - -ci.builder( - name = "android-weblayer-x86-rel", - builder_spec = builder_config.builder_spec( - gclient_config = builder_config.gclient_config( - config = "chromium", - apply_configs = [ - "android", - "enable_reclient", - ], - ), - chromium_config = builder_config.chromium_config( - config = "android", - apply_configs = [ - "mb", - ], - build_config = builder_config.build_config.RELEASE, - target_bits = 32, - target_platform = builder_config.target_platform.ANDROID, - ), - android_config = builder_config.android_config( - config = "x86_builder", - ), - build_gs_bucket = "chromium-android-archive", - ), - console_view_entry = consoles.console_view_entry( - category = "builder|weblayer", - short_name = "x86", - ), - goma_backend = goma.backend.RBE_PROD, - goma_jobs = goma.jobs.J150, - reclient_instance = None, -)
diff --git a/infra/config/subprojects/chromium/try/tryserver.chromium.android.star b/infra/config/subprojects/chromium/try/tryserver.chromium.android.star index 25ee931..0c2507a 100644 --- a/infra/config/subprojects/chromium/try/tryserver.chromium.android.star +++ b/infra/config/subprojects/chromium/try/tryserver.chromium.android.star
@@ -396,10 +396,6 @@ ) try_.builder( - name = "android-opus-arm-rel", -) - -try_.builder( name = "android-oreo-arm64-cts-networkservice-dbg", ) @@ -536,30 +532,6 @@ ) try_.builder( - name = "android-weblayer-10-x86-rel-tests", - mirrors = [ - "ci/android-weblayer-with-aosp-webview-x86-rel", - "ci/android-weblayer-10-x86-rel-tests", - ], -) - -try_.builder( - name = "android-weblayer-marshmallow-x86-rel-tests", - mirrors = [ - "ci/android-weblayer-with-aosp-webview-x86-rel", - "ci/android-weblayer-marshmallow-x86-rel-tests", - ], -) - -try_.builder( - name = "android-weblayer-pie-x86-rel-tests", - mirrors = [ - "ci/android-weblayer-x86-rel", - "ci/android-weblayer-pie-x86-rel-tests", - ], -) - -try_.builder( name = "android-weblayer-pie-x86-wpt-fyi-rel", )
diff --git a/ios/chrome/browser/first_run/first_run_metrics.h b/ios/chrome/browser/first_run/first_run_metrics.h index e132ab0..30d8fdb 100644 --- a/ios/chrome/browser/first_run/first_run_metrics.h +++ b/ios/chrome/browser/first_run/first_run_metrics.h
@@ -110,9 +110,15 @@ kWelcomeAndSigninScreenCompletionWithSignIn = 13, // Welcome+SignIn screen is closed without sign in. kWelcomeAndSigninScreenCompletionWithoutSignIn = 14, + // Sync screen is shown. + kTangibleSyncScreenStart = 15, + // Sync screen is closed with sync. + kTangibleSyncScreenCompletionWithSync = 16, + // Sync screen is closed without sync. + kTangibleSyncScreenCompletionWithoutSync = 17, // Max value of the first run experience stages. // kMaxValue should share the value of the highest enumerator. - kMaxValue = kWelcomeAndSigninScreenCompletionWithoutSignIn, + kMaxValue = kTangibleSyncScreenCompletionWithoutSync, }; // The different type of screens of the first run experience. This is mapped to @@ -149,6 +155,8 @@ kWelcomeScreenWithoutUMACheckbox, // Welcome screen with UMA checkbox. Displayed when MICe is disabled. kWelcomeScreenWithUMACheckbox, + // The tangible sync screen that asks the user to turn on sync. + kTangibleSyncScreen, }; } // namespace first_run
diff --git a/ios/chrome/browser/flags/about_flags.mm b/ios/chrome/browser/flags/about_flags.mm index b8165d3..c24ead98 100644 --- a/ios/chrome/browser/flags/about_flags.mm +++ b/ios/chrome/browser/flags/about_flags.mm
@@ -1253,6 +1253,9 @@ flag_descriptions::kTFLiteLanguageDetectionIgnoreDescription, flags_ui::kOsIos, FEATURE_VALUE_TYPE(translate::kTFLiteLanguageDetectionIgnoreEnabled)}, + {"disable-feed-ios14", flag_descriptions::kDisableFeediOS14Name, + flag_descriptions::kDisableFeediOS14Description, flags_ui::kOsIos, + FEATURE_VALUE_TYPE(kDisableFeediOS14)}, }; bool SkipConditionalFeatureEntry(const flags_ui::FeatureEntry& entry) {
diff --git a/ios/chrome/browser/flags/ios_chrome_flag_descriptions.cc b/ios/chrome/browser/flags/ios_chrome_flag_descriptions.cc index 935b59a..f9e4d91 100644 --- a/ios/chrome/browser/flags/ios_chrome_flag_descriptions.cc +++ b/ios/chrome/browser/flags/ios_chrome_flag_descriptions.cc
@@ -286,6 +286,10 @@ const char kEnableFeedAblationDescription[] = "If Enabled the Feed will be removed from the NTP"; +const char kDisableFeediOS14Name[] = "Disable the feed on iOS14 devices"; +const char kDisableFeediOS14Description[] = + "If disabled the feed will be removed from the iOS14 devices."; + const char kEnableFREUIModuleIOSName[] = "Enable FRE UI module"; const char kEnableFREUIModuleIOSDescription[] = "Use the new FRE UI module for first run.";
diff --git a/ios/chrome/browser/flags/ios_chrome_flag_descriptions.h b/ios/chrome/browser/flags/ios_chrome_flag_descriptions.h index c518aee3..996d4f3 100644 --- a/ios/chrome/browser/flags/ios_chrome_flag_descriptions.h +++ b/ios/chrome/browser/flags/ios_chrome_flag_descriptions.h
@@ -262,6 +262,10 @@ extern const char kEnableFeedAblationName[]; extern const char kEnableFeedAblationDescription[]; +// Title and description for the flag to remove the Feed from iOS14 devices. +extern const char kDisableFeediOS14Name[]; +extern const char kDisableFeediOS14Description[]; + // Title and description for the flag to test the FRE default browser promo // experiment. extern const char kEnableFREDefaultBrowserPromoScreenName[];
diff --git a/ios/chrome/browser/metrics/ios_chrome_metrics_service_client.mm b/ios/chrome/browser/metrics/ios_chrome_metrics_service_client.mm index bda7f2a..4dac6d1 100644 --- a/ios/chrome/browser/metrics/ios_chrome_metrics_service_client.mm +++ b/ios/chrome/browser/metrics/ios_chrome_metrics_service_client.mm
@@ -38,7 +38,6 @@ #import "components/metrics/drive_metrics_provider.h" #import "components/metrics/entropy_state_provider.h" #import "components/metrics/field_trials_provider.h" -#import "components/metrics/form_factor_metrics_provider.h" #import "components/metrics/metrics_data_validation.h" #import "components/metrics/metrics_log_uploader.h" #import "components/metrics/metrics_pref_names.h" @@ -50,6 +49,7 @@ #import "components/metrics/net/network_metrics_provider.h" #import "components/metrics/persistent_histograms.h" #import "components/metrics/stability_metrics_helper.h" +#import "components/metrics/ui/form_factor_metrics_provider.h" #import "components/metrics/ui/screen_info_metrics_provider.h" #import "components/metrics/url_constants.h" #import "components/metrics/version_utils.h"
diff --git a/ios/chrome/browser/providers/lens/chromium_lens.mm b/ios/chrome/browser/providers/lens/chromium_lens.mm index ed285cf..c95bb15 100644 --- a/ios/chrome/browser/providers/lens/chromium_lens.mm +++ b/ios/chrome/browser/providers/lens/chromium_lens.mm
@@ -41,6 +41,11 @@ return false; } +bool IsLensWebResultsURL(const GURL& url) { + // Lens is not supported in Chromium. + return false; +} + web::NavigationManager::WebLoadParams GenerateLensLoadParamsForImage( UIImage* image, LensEntrypoint entry_point,
diff --git a/ios/chrome/browser/ui/authentication/tangible_sync/BUILD.gn b/ios/chrome/browser/ui/authentication/tangible_sync/BUILD.gn index c20f2f2..81151fd 100644 --- a/ios/chrome/browser/ui/authentication/tangible_sync/BUILD.gn +++ b/ios/chrome/browser/ui/authentication/tangible_sync/BUILD.gn
@@ -11,14 +11,28 @@ "tangible_sync_coordinator.mm", "tangible_sync_mediator.h", "tangible_sync_mediator.mm", + "tangible_sync_mediator_delegate.h", ] deps = [ ":signin_ui", "//base", + "//components/consent_auditor", + "//components/sync/driver", + "//components/unified_consent", + "//ios/chrome/app/application_delegate:app_state_header", "//ios/chrome/browser/browser_state", + "//ios/chrome/browser/consent_auditor", + "//ios/chrome/browser/first_run", "//ios/chrome/browser/main:public", "//ios/chrome/browser/signin", "//ios/chrome/browser/signin:constants", + "//ios/chrome/browser/sync", + "//ios/chrome/browser/ui/authentication", + "//ios/chrome/browser/ui/authentication/signin", + "//ios/chrome/browser/ui/commands", + "//ios/chrome/browser/ui/first_run:utils", + "//ios/chrome/browser/ui/main:scene_state_header", + "//ios/chrome/browser/unified_consent", ] public_deps = [ "//ios/chrome/browser/ui/first_run:interruptible_chrome_coordinator" ] @@ -30,14 +44,18 @@ "tangible_sync_consumer.h", "tangible_sync_view_controller.h", "tangible_sync_view_controller.mm", + "tangible_sync_view_controller_delegate.h", ] deps = [ "//ios/chrome/app/strings", + "//ios/chrome/browser/ui/authentication", "//ios/chrome/browser/ui/authentication/tangible_sync/resources:tangible_sync_autofill", "//ios/chrome/browser/ui/authentication/tangible_sync/resources:tangible_sync_bookmarks", "//ios/chrome/browser/ui/authentication/tangible_sync/resources:tangible_sync_history", "//ios/chrome/browser/ui/elements", + "//ios/chrome/browser/ui/elements:elements_internal", "//ios/chrome/common/ui/promo_style", + "//ios/chrome/common/ui/util", "//net", "//ui/base", "//url",
diff --git a/ios/chrome/browser/ui/authentication/tangible_sync/tangible_sync_consumer.h b/ios/chrome/browser/ui/authentication/tangible_sync/tangible_sync_consumer.h index 280e151..a2cce0c33 100644 --- a/ios/chrome/browser/ui/authentication/tangible_sync/tangible_sync_consumer.h +++ b/ios/chrome/browser/ui/authentication/tangible_sync/tangible_sync_consumer.h
@@ -13,6 +13,9 @@ // Avatar image for the primary identity. @property(nonatomic, strong) UIImage* primaryIdentityAvatarImage; +// Sets the UI as interactable or not. +- (void)setUIEnabled:(BOOL)UIEnabled; + @end #endif // IOS_CHROME_BROWSER_UI_AUTHENTICATION_TANGIBLE_SYNC_TANGIBLE_SYNC_CONSUMER_H_
diff --git a/ios/chrome/browser/ui/authentication/tangible_sync/tangible_sync_coordinator.mm b/ios/chrome/browser/ui/authentication/tangible_sync/tangible_sync_coordinator.mm index 04dd966a..ca672b38 100644 --- a/ios/chrome/browser/ui/authentication/tangible_sync/tangible_sync_coordinator.mm +++ b/ios/chrome/browser/ui/authentication/tangible_sync/tangible_sync_coordinator.mm
@@ -4,22 +4,53 @@ #import "ios/chrome/browser/ui/authentication/tangible_sync/tangible_sync_coordinator.h" +#import "base/metrics/histogram_functions.h" +#import "components/sync/driver/sync_service.h" +#import "ios/chrome/app/application_delegate/app_state.h" #import "ios/chrome/browser/browser_state/chrome_browser_state.h" +#import "ios/chrome/browser/consent_auditor/consent_auditor_factory.h" +#import "ios/chrome/browser/first_run/first_run_metrics.h" #import "ios/chrome/browser/main/browser.h" +#import "ios/chrome/browser/signin/authentication_service.h" #import "ios/chrome/browser/signin/authentication_service_factory.h" #import "ios/chrome/browser/signin/chrome_account_manager_service_factory.h" +#import "ios/chrome/browser/signin/identity_manager_factory.h" +#import "ios/chrome/browser/sync/sync_service_factory.h" +#import "ios/chrome/browser/sync/sync_setup_service_factory.h" +#import "ios/chrome/browser/ui/authentication/authentication_flow.h" +#import "ios/chrome/browser/ui/authentication/signin/signin_coordinator.h" #import "ios/chrome/browser/ui/authentication/tangible_sync/tangible_sync_mediator.h" +#import "ios/chrome/browser/ui/authentication/tangible_sync/tangible_sync_mediator_delegate.h" #import "ios/chrome/browser/ui/authentication/tangible_sync/tangible_sync_view_controller.h" +#import "ios/chrome/browser/ui/authentication/tangible_sync/tangible_sync_view_controller_delegate.h" +#import "ios/chrome/browser/ui/commands/browsing_data_commands.h" +#import "ios/chrome/browser/ui/commands/command_dispatcher.h" +#import "ios/chrome/browser/ui/first_run/first_run_util.h" +#import "ios/chrome/browser/ui/main/scene_state.h" +#import "ios/chrome/browser/ui/main/scene_state_browser_agent.h" +#import "ios/chrome/browser/unified_consent/unified_consent_service_factory.h" #if !defined(__has_feature) || !__has_feature(objc_arc) #error "This file requires ARC support." #endif +@interface TangibleSyncCoordinator () <TangibleSyncMediatorDelegate, + TangibleSyncViewControllerDelegate> +@end + @implementation TangibleSyncCoordinator { // Tangible mediator. TangibleSyncMediator* _mediator; // Tangible view controller. TangibleSyncViewController* _viewController; + // Whether the user requested the advanced settings when starting the sync. + BOOL _advancedSettingsRequested; + // Coordinator that handles the advanced settings sign-in UI. + SigninCoordinator* _advancedSettingsSigninCoordinator; + // The consent string ids of texts on the sync screen. + NSMutableArray* _consentStringIDs; + // `YES` if coordinator used during the first run. + BOOL _firstRun; } @synthesize baseNavigationController = _baseNavigationController; @@ -32,23 +63,44 @@ if (self) { DCHECK(!browser->GetBrowserState()->IsOffTheRecord()); _baseNavigationController = navigationController; + _consentStringIDs = [NSMutableArray array]; } return self; } - (void)start { [super start]; + // Determine if it is currently in the First Run context. + SceneState* sceneState = + SceneStateBrowserAgent::FromBrowser(self.browser)->GetSceneState(); + AppState* appState = sceneState.appState; + _firstRun = appState.initStage == InitStageFirstRun; _viewController = [[TangibleSyncViewController alloc] init]; + _viewController.delegate = self; ChromeBrowserState* browserState = self.browser->GetBrowserState(); AuthenticationService* authenticationService = AuthenticationServiceFactory::GetForBrowserState(browserState); ChromeAccountManagerService* chromeAccountManagerService = - ChromeAccountManagerServiceFactory::GetForBrowserState( - self.browser->GetBrowserState()); + ChromeAccountManagerServiceFactory::GetForBrowserState(browserState); _mediator = [[TangibleSyncMediator alloc] initWithAuthenticationService:authenticationService - chromeAccountManagerService:chromeAccountManagerService]; + chromeAccountManagerService:chromeAccountManagerService + consentAuditor:ConsentAuditorFactory::GetForBrowserState( + browserState) + identityManager:IdentityManagerFactory::GetForBrowserState( + browserState) + syncService:SyncServiceFactory::GetForBrowserState( + browserState) + syncSetupService:SyncSetupServiceFactory::GetForBrowserState( + browserState) + unifiedConsentService:UnifiedConsentServiceFactory:: + GetForBrowserState(browserState)]; _mediator.consumer = _viewController; + _mediator.delegate = self; + if (_firstRun) { + base::UmaHistogramEnumeration("FirstRun.Stage", + first_run::kTangibleSyncScreenStart); + } BOOL animated = self.baseNavigationController.topViewController != nil; [self.baseNavigationController setViewControllers:@[ _viewController ] animated:animated]; @@ -61,4 +113,126 @@ _viewController = nil; } +#pragma mark - TangibleSyncMediatorDelegate + +- (void)tangibleSyncMediatorDidSuccessfulyFinishSignin: + (TangibleSyncMediator*)mediator { + if (_advancedSettingsRequested) { + // TODO(crbug.com/1256784): Log a UserActions histogram to track the touch + // interactions on the advanced settings button. + [self showAdvancedSettings]; + } else { + if (_firstRun) { + base::UmaHistogramEnumeration( + "FirstRun.Stage", first_run::kTangibleSyncScreenCompletionWithSync); + } + DCHECK(self.coordinatorCompleted); + self.coordinatorCompleted(YES); + self.coordinatorCompleted = nil; + } +} + +- (void)tangibleSyncMediatorUserRemoved:(TangibleSyncMediator*)mediator { + DCHECK(self.coordinatorCompleted); + self.coordinatorCompleted(NO); + self.coordinatorCompleted = nil; +} + +#pragma mark - TangibleSyncViewControllerDelegate + +- (void)didTapPrimaryActionButton { + [self startSyncOrAdvancedSettings:NO]; +} + +- (void)didTapSecondaryActionButton { + if (_firstRun) { + base::UmaHistogramEnumeration( + "FirstRun.Stage", first_run::kTangibleSyncScreenCompletionWithoutSync); + } + syncer::SyncService* syncService = + SyncServiceFactory::GetForBrowserState(self.browser->GetBrowserState()); + // Call StopAndClear() to clear the encryption passphrase, in case the + // user entered it before canceling the sync opt-in flow, and also to set + // sync as requested. + syncService->StopAndClear(); + DCHECK(self.coordinatorCompleted); + self.coordinatorCompleted(NO); + self.coordinatorCompleted = nil; +} + +- (void)didTapURLInDisclaimer:(NSURL*)URL { + // Currently there is only one link to show sync settings in the disclaimer. + [self startSyncOrAdvancedSettings:YES]; +} + +// Adds consent string ID. +- (void)addConsentStringID:(const int)stringID { + [_consentStringIDs addObject:[NSNumber numberWithInt:stringID]]; +} + +// Logs scrollability metric on view appears. +- (void)logScrollButtonVisible:(BOOL)scrollButtonVisible { + if (!_firstRun) { + return; + } + RecordFirstRunScrollButtonVisibilityMetrics( + first_run::FirstRunScreenType::kTangibleSyncScreen, scrollButtonVisible); +} + +#pragma mark - Private + +// Starts syncing or opens `advancedSettings`. +- (void)startSyncOrAdvancedSettings:(BOOL)advancedSettings { + _advancedSettingsRequested = advancedSettings; + + ChromeIdentity* identity = + AuthenticationServiceFactory::GetForBrowserState( + self.browser->GetBrowserState()) + ->GetPrimaryIdentity(signin::ConsentLevel::kSignin); + + PostSignInAction postSignInAction = advancedSettings + ? POST_SIGNIN_ACTION_NONE + : POST_SIGNIN_ACTION_COMMIT_SYNC; + AuthenticationFlow* authenticationFlow = + [[AuthenticationFlow alloc] initWithBrowser:self.browser + identity:identity + postSignInAction:postSignInAction + presentingViewController:_viewController]; + authenticationFlow.dispatcher = HandlerForProtocol( + self.browser->GetCommandDispatcher(), BrowsingDataCommands); + authenticationFlow.delegate = _viewController; + + [_mediator startSyncWithConfirmationID:_viewController.activateSyncButtonID + consentIDs:_consentStringIDs + authenticationFlow:authenticationFlow + advancedSyncSettingsLinkWasTapped:advancedSettings]; +} + +// Shows the advanced sync settings. +- (void)showAdvancedSettings { + DCHECK(!_advancedSettingsSigninCoordinator); + + const IdentitySigninState signinState = + IdentitySigninStateSignedInWithSyncDisabled; + + _advancedSettingsSigninCoordinator = [SigninCoordinator + advancedSettingsSigninCoordinatorWithBaseViewController:_viewController + browser:self.browser + signinState:signinState]; + __weak __typeof(self) weakSelf = self; + _advancedSettingsSigninCoordinator.signinCompletion = + ^(SigninCoordinatorResult advancedSigninResult, + SigninCompletionInfo* signinCompletionInfo) { + [weakSelf onAdvancedSettingsFinished]; + }; + [_advancedSettingsSigninCoordinator start]; +} + +// Stops `_advancedSettingsSigninCoordinator`. +- (void)onAdvancedSettingsFinished { + DCHECK(_advancedSettingsSigninCoordinator); + [_advancedSettingsSigninCoordinator stop]; + _advancedSettingsSigninCoordinator = nil; +} + @end
diff --git a/ios/chrome/browser/ui/authentication/tangible_sync/tangible_sync_mediator.h b/ios/chrome/browser/ui/authentication/tangible_sync/tangible_sync_mediator.h index 2bda129..a1efc759 100644 --- a/ios/chrome/browser/ui/authentication/tangible_sync/tangible_sync_mediator.h +++ b/ios/chrome/browser/ui/authentication/tangible_sync/tangible_sync_mediator.h
@@ -7,9 +7,28 @@ #import <UIKit/UIKit.h> +@class AuthenticationFlow; class AuthenticationService; class ChromeAccountManagerService; +class SyncSetupService; @protocol TangibleSyncConsumer; +@protocol TangibleSyncMediatorDelegate; + +namespace consent_auditor { +class ConsentAuditor; +} // namespace consent_auditor + +namespace signin { +class IdentityManager; +} // namespace signin + +namespace syncer { +class SyncService; +} // namespace syncer + +namespace unified_consent { +class UnifiedConsentService; +} // namespace unified_consent // Mediator that handles the sync operations. @interface TangibleSyncMediator : NSObject @@ -17,17 +36,38 @@ // Consumer for this mediator. @property(nonatomic, weak) id<TangibleSyncConsumer> consumer; +// Delegate. +@property(nonatomic, weak) id<TangibleSyncMediatorDelegate> delegate; + - (instancetype)init NS_UNAVAILABLE; -- (instancetype)initWithAuthenticationService: - (AuthenticationService*)authenticationService - chromeAccountManagerService: - (ChromeAccountManagerService*)chromeAccountManagerService +- (instancetype) + initWithAuthenticationService:(AuthenticationService*)authenticationService + chromeAccountManagerService: + (ChromeAccountManagerService*)chromeAccountManagerService + consentAuditor: + (consent_auditor::ConsentAuditor*)consentAuditor + identityManager:(signin::IdentityManager*)identityManager + syncService:(syncer::SyncService*)syncService + syncSetupService:(SyncSetupService*)syncSetupService + unifiedConsentService: + (unified_consent::UnifiedConsentService*)unifiedConsentService NS_DESIGNATED_INITIALIZER; // Disconnect the mediator. - (void)disconnect; +// Starts the sync engine. +// `confirmationID` The confirmation string ID of sync. +// `consentIDs` The consent string IDs of sync screen. +// `authenticationFlow` the object used to manage the authentication flow. +// `advancedSyncSettingsLinkWasTapped` whether the link to show the +// advance settings was used to start the sync. +- (void)startSyncWithConfirmationID:(const int)confirmationID + consentIDs:(NSArray<NSNumber*>*)consentIDs + authenticationFlow:(AuthenticationFlow*)authenticationFlow + advancedSyncSettingsLinkWasTapped:(BOOL)advancedSyncSettingsLinkWasTapped; + @end #endif // IOS_CHROME_BROWSER_UI_AUTHENTICATION_TANGIBLE_SYNC_TANGIBLE_SYNC_MEDIATOR_H_
diff --git a/ios/chrome/browser/ui/authentication/tangible_sync/tangible_sync_mediator.mm b/ios/chrome/browser/ui/authentication/tangible_sync/tangible_sync_mediator.mm index c30ad52..2244330 100644 --- a/ios/chrome/browser/ui/authentication/tangible_sync/tangible_sync_mediator.mm +++ b/ios/chrome/browser/ui/authentication/tangible_sync/tangible_sync_mediator.mm
@@ -4,10 +4,19 @@ #import "ios/chrome/browser/ui/authentication/tangible_sync/tangible_sync_mediator.h" +#import "base/check_op.h" +#import "base/strings/sys_string_conversions.h" +#import "components/consent_auditor/consent_auditor.h" +#import "components/sync/driver/sync_service.h" +#import "components/sync/driver/sync_user_settings.h" +#import "components/unified_consent/unified_consent_service.h" #import "ios/chrome/browser/signin/authentication_service.h" #import "ios/chrome/browser/signin/chrome_account_manager_service.h" #import "ios/chrome/browser/signin/chrome_account_manager_service_observer_bridge.h" +#import "ios/chrome/browser/sync/sync_setup_service.h" +#import "ios/chrome/browser/ui/authentication/authentication_flow.h" #import "ios/chrome/browser/ui/authentication/tangible_sync/tangible_sync_consumer.h" +#import "ios/chrome/browser/ui/authentication/tangible_sync/tangible_sync_mediator_delegate.h" #if !defined(__has_feature) || !__has_feature(objc_arc) #error "This file requires ARC support." @@ -22,12 +31,31 @@ ChromeAccountManagerService* _accountManagerService; std::unique_ptr<ChromeAccountManagerServiceObserverBridge> _accountManagerServiceObserver; + // Auditor for user consent. + consent_auditor::ConsentAuditor* _consentAuditor; + // Manager for user's Google identities. + signin::IdentityManager* _identityManager; + // Manager for the authentication flow. + AuthenticationFlow* _authenticationFlow; + // Sync service. + syncer::SyncService* _syncService; + // Service that allows for configuring sync. + SyncSetupService* _syncSetupService; + // Manager for user consent. + unified_consent::UnifiedConsentService* _unifiedConsentService; } - (instancetype) initWithAuthenticationService:(AuthenticationService*)authenticationService chromeAccountManagerService: - (ChromeAccountManagerService*)chromeAccountManagerService { + (ChromeAccountManagerService*)chromeAccountManagerService + consentAuditor: + (consent_auditor::ConsentAuditor*)consentAuditor + identityManager:(signin::IdentityManager*)identityManager + syncService:(syncer::SyncService*)syncService + syncSetupService:(SyncSetupService*)syncSetupService + unifiedConsentService: + (unified_consent::UnifiedConsentService*)unifiedConsentService { self = [super init]; if (self) { _authenticationService = authenticationService; @@ -35,6 +63,11 @@ _accountManagerServiceObserver = std::make_unique<ChromeAccountManagerServiceObserverBridge>( self, _accountManagerService); + _consentAuditor = consentAuditor; + _identityManager = identityManager; + _syncService = syncService; + _syncSetupService = syncSetupService; + _unifiedConsentService = unifiedConsentService; } return self; } @@ -46,6 +79,27 @@ _accountManagerService = nil; } +- (void)startSyncWithConfirmationID:(const int)confirmationID + consentIDs:(NSArray<NSNumber*>*)consentIDs + authenticationFlow:(AuthenticationFlow*)authenticationFlow + advancedSyncSettingsLinkWasTapped:(BOOL)advancedSyncSettingsLinkWasTapped { + DCHECK(!_authenticationFlow); + + [self.consumer setUIEnabled:NO]; + + // Local copy to be captured. + NSArray<NSNumber*>* consentIDsCopy = [consentIDs copy]; + + _authenticationFlow = authenticationFlow; + __weak __typeof(self) weakSelf = self; + [_authenticationFlow startSignInWithCompletion:^(BOOL success) { + [weakSelf signinCompletedWithSuccess:success + confirmationID:confirmationID + consentIDs:consentIDsCopy + advancedSettingsRequested:advancedSyncSettingsLinkWasTapped]; + }]; +} + #pragma mark - Properties - (void)setConsumer:(id<TangibleSyncConsumer>)consumer { @@ -68,6 +122,14 @@ } } +- (void)identityListChanged { + ChromeIdentity* identity = + _authenticationService->GetPrimaryIdentity(signin::ConsentLevel::kSignin); + if (!identity) { + [self.delegate tangibleSyncMediatorUserRemoved:self]; + } +} + #pragma mark - Private // Updates the avatar image for the consumer from `identity`. @@ -77,4 +139,60 @@ self.consumer.primaryIdentityAvatarImage = image; } +// Callback used when the sign in flow is complete, with `success`. +- (void)signinCompletedWithSuccess:(BOOL)success + confirmationID:(const int)confirmationID + consentIDs:(NSArray<NSNumber*>*)consentIDs + advancedSettingsRequested:(BOOL)advancedSettingsRequested { + _authenticationFlow = nil; + [self.consumer setUIEnabled:YES]; + + if (!success) { + return; + } + + // The user does not give Sync Consent if the Advanced Settings link is + // tapped. + if (advancedSettingsRequested) { + // Sync has to be set as requested in order to display the preferences + // correctly and differentiate the special state where the user is signed + // in, but the sync feature can't start yet. + _syncService->GetUserSettings()->SetSyncRequested(true); + } else { + // TODO(crbug.com/1254359): Dedupe duplicated code, here and in + // user_signin_mediator. + ChromeIdentity* identity = _authenticationService->GetPrimaryIdentity( + signin::ConsentLevel::kSignin); + DCHECK(identity); + + sync_pb::UserConsentTypes::SyncConsent syncConsent; + syncConsent.set_status(sync_pb::UserConsentTypes::ConsentStatus:: + UserConsentTypes_ConsentStatus_GIVEN); + + DCHECK_NE(confirmationID, 0); + syncConsent.set_confirmation_grd_id(confirmationID); + DCHECK_NE(consentIDs.count, 0ul); + for (NSNumber* consentID in consentIDs) { + syncConsent.add_description_grd_ids([consentID intValue]); + } + + CoreAccountId coreAccountId = _identityManager->PickAccountIdForAccount( + base::SysNSStringToUTF8([identity gaiaID]), + base::SysNSStringToUTF8([identity userEmail])); + _consentAuditor->RecordSyncConsent(coreAccountId, syncConsent); + _authenticationService->GrantSyncConsent(identity); + + _unifiedConsentService->SetUrlKeyedAnonymizedDataCollectionEnabled(true); + + // Turn on FirstSetupComplete flag after the authentication service has + // granted user consent to start Sync. + _syncSetupService->SetFirstSetupComplete( + syncer::SyncFirstSetupCompleteSource::BASIC_FLOW); + + _syncSetupService->CommitSyncChanges(); + } + + [self.delegate tangibleSyncMediatorDidSuccessfulyFinishSignin:self]; +} + @end
diff --git a/ios/chrome/browser/ui/authentication/tangible_sync/tangible_sync_mediator_delegate.h b/ios/chrome/browser/ui/authentication/tangible_sync/tangible_sync_mediator_delegate.h new file mode 100644 index 0000000..1661a04 --- /dev/null +++ b/ios/chrome/browser/ui/authentication/tangible_sync/tangible_sync_mediator_delegate.h
@@ -0,0 +1,24 @@ +// 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 IOS_CHROME_BROWSER_UI_AUTHENTICATION_TANGIBLE_SYNC_TANGIBLE_SYNC_MEDIATOR_DELEGATE_H_ +#define IOS_CHROME_BROWSER_UI_AUTHENTICATION_TANGIBLE_SYNC_TANGIBLE_SYNC_MEDIATOR_DELEGATE_H_ + +#import <UIKit/UIKit.h> + +@class TangibleSyncMediator; + +// Delegate for the Sync mediator. +@protocol TangibleSyncMediatorDelegate + +// Notifies the delegate that `mediator` has finished sign in with success. +- (void)tangibleSyncMediatorDidSuccessfulyFinishSignin: + (TangibleSyncMediator*)mediator; + +// Notifies the delegate that the user has been removed. +- (void)tangibleSyncMediatorUserRemoved:(TangibleSyncMediator*)mediator; + +@end + +#endif // IOS_CHROME_BROWSER_UI_AUTHENTICATION_TANGIBLE_SYNC_TANGIBLE_SYNC_MEDIATOR_DELEGATE_H_
diff --git a/ios/chrome/browser/ui/authentication/tangible_sync/tangible_sync_view_controller.h b/ios/chrome/browser/ui/authentication/tangible_sync/tangible_sync_view_controller.h index f0eb42f2..2e869cf 100644 --- a/ios/chrome/browser/ui/authentication/tangible_sync/tangible_sync_view_controller.h +++ b/ios/chrome/browser/ui/authentication/tangible_sync/tangible_sync_view_controller.h
@@ -5,12 +5,22 @@ #ifndef IOS_CHROME_BROWSER_UI_AUTHENTICATION_TANGIBLE_SYNC_TANGIBLE_SYNC_VIEW_CONTROLLER_H_ #define IOS_CHROME_BROWSER_UI_AUTHENTICATION_TANGIBLE_SYNC_TANGIBLE_SYNC_VIEW_CONTROLLER_H_ +#import "ios/chrome/browser/ui/authentication/authentication_flow.h" #import "ios/chrome/browser/ui/authentication/tangible_sync/tangible_sync_consumer.h" +#import "ios/chrome/browser/ui/authentication/tangible_sync/tangible_sync_view_controller_delegate.h" #import "ios/chrome/common/ui/promo_style/promo_style_view_controller.h" +@protocol TangibleSyncViewControllerDelegate; + // View controller for tangible sync. @interface TangibleSyncViewController - : PromoStyleViewController <TangibleSyncConsumer> + : PromoStyleViewController <AuthenticationFlowDelegate, + TangibleSyncConsumer> + +@property(nonatomic, weak) id<TangibleSyncViewControllerDelegate> delegate; + +// The ID of the main button activating sync. +@property(nonatomic, readonly, assign) int activateSyncButtonID; @end
diff --git a/ios/chrome/browser/ui/authentication/tangible_sync/tangible_sync_view_controller.mm b/ios/chrome/browser/ui/authentication/tangible_sync/tangible_sync_view_controller.mm index 13e3b97c..fcbc8703 100644 --- a/ios/chrome/browser/ui/authentication/tangible_sync/tangible_sync_view_controller.mm +++ b/ios/chrome/browser/ui/authentication/tangible_sync/tangible_sync_view_controller.mm
@@ -4,7 +4,9 @@ #import "ios/chrome/browser/ui/authentication/tangible_sync/tangible_sync_view_controller.h" +#import "ios/chrome/browser/ui/elements/activity_overlay_view.h" #import "ios/chrome/browser/ui/elements/instruction_view.h" +#import "ios/chrome/common/ui/util/constraints_ui_util.h" #import "ios/chrome/grit/ios_strings.h" #import "net/base/mac/url_conversions.h" #import "ui/base/l10n/l10n_util.h" @@ -21,23 +23,41 @@ } // namespace -@implementation TangibleSyncViewController +@implementation TangibleSyncViewController { + // Scrim displayed above the view when the UI is disabled. + ActivityOverlayView* _overlay; +} +@dynamic delegate; @synthesize primaryIdentityAvatarImage = _primaryIdentityAvatarImage; +#pragma mark - UIViewController + - (void)viewDidLoad { self.shouldHideBanner = YES; self.hasAvatarImage = YES; + self.scrollToEndMandatory = YES; + self.readMoreString = + l10n_util::GetNSString(IDS_IOS_FIRST_RUN_SCREEN_READ_MORE); self.avatarImage = self.primaryIdentityAvatarImage; + [self.delegate addConsentStringID:IDS_IOS_TANGIBLE_SYNC_TITLE]; self.titleText = l10n_util::GetNSString(IDS_IOS_TANGIBLE_SYNC_TITLE); + [self.delegate addConsentStringID:IDS_IOS_TANGIBLE_SYNC_SUBTITLE]; self.subtitleText = l10n_util::GetNSString(IDS_IOS_TANGIBLE_SYNC_SUBTITLE); - self.primaryActionString = - l10n_util::GetNSString(IDS_IOS_ACCOUNT_UNIFIED_CONSENT_OK_BUTTON); + _activateSyncButtonID = IDS_IOS_ACCOUNT_UNIFIED_CONSENT_OK_BUTTON; + [self.delegate addConsentStringID:_activateSyncButtonID]; + self.primaryActionString = l10n_util::GetNSString(_activateSyncButtonID); + [self.delegate addConsentStringID: + IDS_IOS_FIRST_RUN_DEFAULT_BROWSER_SCREEN_SECONDARY_ACTION]; self.secondaryActionString = l10n_util::GetNSString( IDS_IOS_FIRST_RUN_DEFAULT_BROWSER_SCREEN_SECONDARY_ACTION); + [self.delegate addConsentStringID:IDS_IOS_TANGIBLE_SYNC_DISCLAIMER]; self.disclaimerText = l10n_util::GetNSString(IDS_IOS_TANGIBLE_SYNC_DISCLAIMER); self.disclaimerURLs = @[ net::NSURLWithGURL(GURL(kSettingsSyncURL)) ]; + [self.delegate addConsentStringID:IDS_IOS_TANGIBLE_SYNC_DATA_TYPE_BOOKMARKS]; + [self.delegate addConsentStringID:IDS_IOS_TANGIBLE_SYNC_DATA_TYPE_AUTOFILL]; + [self.delegate addConsentStringID:IDS_IOS_TANGIBLE_SYNC_DATA_TYPE_HISTORY]; NSArray<NSString*>* dataTypeNames = @[ l10n_util::GetNSString(IDS_IOS_TANGIBLE_SYNC_DATA_TYPE_BOOKMARKS), l10n_util::GetNSString(IDS_IOS_TANGIBLE_SYNC_DATA_TYPE_AUTOFILL), @@ -62,10 +82,29 @@ constraintEqualToAnchor:self.specificContentView.leadingAnchor], [instructionView.trailingAnchor constraintEqualToAnchor:self.specificContentView.trailingAnchor], + [self.specificContentView.bottomAnchor + constraintGreaterThanOrEqualToAnchor:instructionView.bottomAnchor], ]]; [super viewDidLoad]; } +- (void)viewDidAppear:(BOOL)animated { + [super viewDidAppear:animated]; + [self.delegate logScrollButtonVisible:!self.didReachBottom]; +} + +#pragma mark - AuthenticationFlowDelegate + +- (void)didPresentDialog { + DCHECK(_overlay); + [_overlay.indicator stopAnimating]; +} + +- (void)didDismissDialog { + DCHECK(_overlay); + [_overlay.indicator startAnimating]; +} + #pragma mark - TangibleSyncConsumer - (void)setPrimaryIdentityAvatarImage:(UIImage*)primaryIdentityAvatarImage { @@ -75,4 +114,17 @@ } } +- (void)setUIEnabled:(BOOL)UIEnabled { + if (UIEnabled) { + [_overlay removeFromSuperview]; + _overlay = nil; + } else { + _overlay = [[ActivityOverlayView alloc] init]; + _overlay.translatesAutoresizingMaskIntoConstraints = NO; + [self.view addSubview:_overlay]; + AddSameConstraints(self.view, _overlay); + [_overlay.indicator startAnimating]; + } +} + @end
diff --git a/ios/chrome/browser/ui/authentication/tangible_sync/tangible_sync_view_controller_delegate.h b/ios/chrome/browser/ui/authentication/tangible_sync/tangible_sync_view_controller_delegate.h new file mode 100644 index 0000000..a64d963 --- /dev/null +++ b/ios/chrome/browser/ui/authentication/tangible_sync/tangible_sync_view_controller_delegate.h
@@ -0,0 +1,21 @@ +// Copyright 2022 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef IOS_CHROME_BROWSER_UI_AUTHENTICATION_TANGIBLE_SYNC_TANGIBLE_SYNC_VIEW_CONTROLLER_DELEGATE_H_ +#define IOS_CHROME_BROWSER_UI_AUTHENTICATION_TANGIBLE_SYNC_TANGIBLE_SYNC_VIEW_CONTROLLER_DELEGATE_H_ + +#import "ios/chrome/common/ui/promo_style/promo_style_view_controller.h" + +// View controller for tangible sync. +@protocol TangibleSyncViewControllerDelegate <PromoStyleViewControllerDelegate> + +// Adds consent string ID. +- (void)addConsentStringID:(const int)stringID; + +// Logs scrollability metric on view appears. +- (void)logScrollButtonVisible:(BOOL)scrollButtonVisible; + +@end + +#endif // IOS_CHROME_BROWSER_UI_AUTHENTICATION_TANGIBLE_SYNC_TANGIBLE_SYNC_VIEW_CONTROLLER_DELEGATE_H_
diff --git a/ios/chrome/browser/ui/autofill/form_input_accessory/branding_view_controller.mm b/ios/chrome/browser/ui/autofill/form_input_accessory/branding_view_controller.mm index e6b760d..a0694e7 100644 --- a/ios/chrome/browser/ui/autofill/form_input_accessory/branding_view_controller.mm +++ b/ios/chrome/browser/ui/autofill/form_input_accessory/branding_view_controller.mm
@@ -18,8 +18,8 @@ // The left margin of the branding logo, if visible. constexpr CGFloat kLeadingInset = 10; // The scale used by the "pop" animation. -constexpr CGFloat kAnimationScale = 1.25; -// Wait time after the branding is shown to perform pop animation. +constexpr CGFloat kAnimationScale = ((CGFloat)4) / 3; +// Wait time after the keyboard settles into placetwit to perform pop animation. constexpr base::TimeDelta kAnimationWaitTime = base::Milliseconds(200); // Time it takes the "pop" animation to perform. constexpr base::TimeDelta kTimeToAnimate = base::Milliseconds(400); @@ -73,21 +73,14 @@ button.isAccessibilityElement = NO; // Prevents VoiceOver users from tap. button.translatesAutoresizingMaskIntoConstraints = NO; self.view = button; -} -- (void)viewDidAppear:(BOOL)animated { - [super viewDidAppear:animated]; - DCHECK(self.delegate); - if (!self.shouldAnimate) { - return; - } - // The "pop" animation should start after a slight timeout. - __weak BrandingViewController* weakSelf = self; - base::SequencedTaskRunnerHandle::Get()->PostDelayedTask( - FROM_HERE, base::BindOnce(^{ - [weakSelf performPopAnimation]; - }), - kAnimationWaitTime); + // Adds keyboard popup listener to show animation when keyboard is fully + // settled. + [[NSNotificationCenter defaultCenter] + addObserver:self + selector:@selector(onKeyboardAnimationComplete) + name:UIKeyboardDidShowNotification + object:nil]; } #pragma mark - Accessors @@ -113,6 +106,27 @@ #pragma mark - Private +// Check if the branding icon is visible and should perform an animation, and do +// so if it should. +- (void)onKeyboardAnimationComplete { + // Branding is invisible. + if (self.view.window == nil || self.view.hidden) { + return; + } + // Branding is visible; animate if it should. + DCHECK(self.delegate); + if (!self.shouldAnimate) { + return; + } + // The "pop" animation should start after a slight timeout. + __weak BrandingViewController* weakSelf = self; + base::SequencedTaskRunnerHandle::Get()->PostDelayedTask( + FROM_HERE, base::BindOnce(^{ + [weakSelf performPopAnimation]; + }), + kAnimationWaitTime); +} + // 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.
diff --git a/ios/chrome/browser/ui/content_suggestions/content_suggestions_feature.mm b/ios/chrome/browser/ui/content_suggestions/content_suggestions_feature.mm index db163929..78a27177 100644 --- a/ios/chrome/browser/ui/content_suggestions/content_suggestions_feature.mm +++ b/ios/chrome/browser/ui/content_suggestions/content_suggestions_feature.mm
@@ -147,7 +147,7 @@ kContentSuggestionsUIModuleRefreshFlagOverrideFieldTrialName)) { return base::GetFieldTrialParamByFeatureAsBool( kContentSuggestionsUIModuleRefresh, - kContentSuggestionsUIModuleRefreshMinimizeSpacingParam, false); + kContentSuggestionsUIModuleRefreshRemoveHeadersParam, false); } // If client is registered in the client-side FieldTrial, check its unique // base::Feature for enabled state.
diff --git a/ios/chrome/browser/ui/first_run/first_run_util.mm b/ios/chrome/browser/ui/first_run/first_run_util.mm index 7d490d3c..093984fd 100644 --- a/ios/chrome/browser/ui/first_run/first_run_util.mm +++ b/ios/chrome/browser/ui/first_run/first_run_util.mm
@@ -164,6 +164,11 @@ "IOS.FirstRun.ScrollButtonVisible.WelcomeScreenWithUMACheckbox", scroll_button_visible); break; + case first_run::FirstRunScreenType::kTangibleSyncScreen: + base::UmaHistogramBoolean( + "IOS.FirstRun.ScrollButtonVisible.TangibleSyncScreen", + scroll_button_visible); + break; } }
diff --git a/ios/chrome/browser/ui/first_run/tangible_sync/tangible_sync_screen_coordinator.mm b/ios/chrome/browser/ui/first_run/tangible_sync/tangible_sync_screen_coordinator.mm index 1562a48..cea2f94 100644 --- a/ios/chrome/browser/ui/first_run/tangible_sync/tangible_sync_screen_coordinator.mm +++ b/ios/chrome/browser/ui/first_run/tangible_sync/tangible_sync_screen_coordinator.mm
@@ -89,9 +89,9 @@ // Dismisses the current screen, and stops the FRE if `success` is `false`. - (void)tangibleSyncCoordinatorCompletedWithSuccess:(bool)success { if (success) { - [_delegate skipAllScreens]; - } else { [_delegate screenWillFinishPresenting]; + } else { + [_delegate skipAllScreens]; } }
diff --git a/ios/chrome/browser/ui/lens/BUILD.gn b/ios/chrome/browser/ui/lens/BUILD.gn index 011a04a..4d6b5f0d 100644 --- a/ios/chrome/browser/ui/lens/BUILD.gn +++ b/ios/chrome/browser/ui/lens/BUILD.gn
@@ -17,6 +17,8 @@ "//ios/chrome/browser/ui/commands", "//ios/chrome/browser/ui/coordinators:chrome_coordinators", "//ios/chrome/browser/url_loading", + "//ios/chrome/browser/web:web", + "//ios/chrome/browser/web_state_list", "//ios/public/provider/chrome/browser/lens:lens_api", "//ios/web/public/navigation", ]
diff --git a/ios/chrome/browser/ui/lens/lens_coordinator.mm b/ios/chrome/browser/ui/lens/lens_coordinator.mm index 32d85c5..e5142d9 100644 --- a/ios/chrome/browser/ui/lens/lens_coordinator.mm +++ b/ios/chrome/browser/ui/lens/lens_coordinator.mm
@@ -17,16 +17,25 @@ #import "ios/chrome/browser/ui/lens/lens_entrypoint.h" #import "ios/chrome/browser/url_loading/url_loading_browser_agent.h" #import "ios/chrome/browser/url_loading/url_loading_params.h" +#import "ios/chrome/browser/web/web_navigation_util.h" +#import "ios/chrome/browser/web_state_list/web_state_dependency_installer_bridge.h" +#import "ios/chrome/browser/web_state_list/web_state_list.h" +#import "ios/chrome/browser/web_state_list/web_state_list_observer_bridge.h" #import "ios/public/provider/chrome/browser/lens/lens_api.h" #import "ios/public/provider/chrome/browser/lens/lens_configuration.h" #import "ios/web/public/navigation/navigation_manager.h" +#import "ios/web/public/web_state.h" +#import "ios/web/public/web_state_observer_bridge.h" #import "net/base/mac/url_conversions.h" #if !defined(__has_feature) || !__has_feature(objc_arc) #error "This file requires ARC support." #endif -@interface LensCoordinator () <ChromeLensControllerDelegate, LensCommands> +@interface LensCoordinator () <ChromeLensControllerDelegate, + LensCommands, + CRWWebStateObserver, + WebStateListObserving> // A controller that can provide an entrypoint into Lens features. @property(nonatomic, strong) id<ChromeLensController> lensController; @@ -34,34 +43,82 @@ // The Lens viewController. @property(nonatomic, strong) UIViewController* viewController; +// Whether or not a Lens Web page load was triggered from the Lens UI. +@property(nonatomic, assign) BOOL lensWebPageLoadTriggeredFromInputSelection; + +// The WebState that is loading a Lens results page, if any. +@property(nonatomic, assign) web::WebState* loadingWebState; + @end -@implementation LensCoordinator +@implementation LensCoordinator { + // Used to observe the active WebState. + std::unique_ptr<web::WebStateObserverBridge> _webStateObserverBridge; + std::unique_ptr<base::ScopedObservation<web::WebState, web::WebStateObserver>> + _webStateObservation; + + // Used to observe the WebStateList. + std::unique_ptr<WebStateListObserverBridge> _webStateListObserverBridge; + std::unique_ptr<base::ScopedObservation<WebStateList, WebStateListObserver>> + _webStateListObservation; +} @synthesize baseViewController = _baseViewController; +// The timeout before the Lens UI is closed, if the Lens Web page +// fails to load. +const base::TimeDelta kCloseLensViewTimeout = base::Seconds(10); + #pragma mark - ChromeCoordinator - (instancetype)initWithBrowser:(Browser*)browser { DCHECK(browser); - return [super initWithBaseViewController:nil browser:browser]; + self = [super initWithBaseViewController:nil browser:browser]; + if (self) { + _webStateObserverBridge = + std::make_unique<web::WebStateObserverBridge>(self); + _webStateListObserverBridge = + std::make_unique<WebStateListObserverBridge>(self); + } + return self; } - (void)start { - DCHECK(self.browser); - [self.browser->GetCommandDispatcher() + [super start]; + + Browser* browser = self.browser; + DCHECK(browser); + + [browser->GetCommandDispatcher() startDispatchingToTarget:self forProtocol:@protocol(LensCommands)]; - [super start]; + _webStateListObservation = std::make_unique< + base::ScopedObservation<WebStateList, WebStateListObserver>>( + _webStateListObserverBridge.get()); + + _webStateObservation = std::make_unique< + base::ScopedObservation<web::WebState, web::WebStateObserver>>( + _webStateObserverBridge.get()); + + self.loadingWebState = nil; + self.lensWebPageLoadTriggeredFromInputSelection = NO; + _webStateListObservation->Observe(browser->GetWebStateList()); } - (void)stop { + Browser* browser = self.browser; + DCHECK(browser); + + [self dismissViewController]; + self.loadingWebState = nullptr; + self.lensWebPageLoadTriggeredFromInputSelection = NO; + + _webStateListObservation.reset(); + _webStateObservation.reset(); + + [browser->GetCommandDispatcher() stopDispatchingToTarget:self]; + [super stop]; - if (self.baseViewController.presentedViewController == self.viewController) { - [self.baseViewController dismissViewControllerAnimated:NO completion:nil]; - } - self.viewController = nil; - [self.browser->GetCommandDispatcher() stopDispatchingToTarget:self]; } #pragma mark - Commands @@ -141,16 +198,95 @@ #pragma mark - ChromeLensControllerDelegate - (void)lensControllerDidTapDismissButton { - if (self.baseViewController.presentedViewController == self.viewController) { - [self.baseViewController dismissViewControllerAnimated:YES completion:nil]; + self.lensWebPageLoadTriggeredFromInputSelection = NO; + web::WebState* loadingWebState = self.loadingWebState; + // If there is a webstate loading Lens results underneath the Lens UI, + // close it so we return the user to the initial state. + if (loadingWebState) { + const int index = + self.browser->GetWebStateList()->GetIndexOfWebState(loadingWebState); + self.loadingWebState = nil; + if (index != WebStateList::kInvalidIndex) { + self.browser->GetWebStateList()->CloseWebStateAt( + index, WebStateList::CLOSE_USER_ACTION); + } } - self.viewController = nil; + [self dismissViewController]; } - (void)lensControllerDidGenerateLoadParams: (const web::NavigationManager::WebLoadParams&)params { + const __weak UIViewController* lensViewController = self.viewController; + if (!lensViewController) { + // If the coordinator view controller is nil, simply open the params and + // return early. + [self openWebLoadParams:params]; + return; + } + + // Prepare the coordinator for dismissing the presented view controller. + // Since we are opening Lens Web, mark the page load as triggered. + self.lensWebPageLoadTriggeredFromInputSelection = YES; [self openWebLoadParams:params]; + + // This function will be called when the user selects an image in Lens. + // we should continue to display the Lens UI until the search results + // for that image have loaded, or a timeout occurs. + // Fallback to close the preview if the page never loads beneath. + __weak LensCoordinator* weakSelf = self; + base::SequencedTaskRunner::GetCurrentDefault()->PostDelayedTask( + FROM_HERE, base::BindOnce(^{ + // Only dismiss the Lens view if the displayed view controller is the + // same as the one that was displayed when the load params were + // initially generated. + if (weakSelf.viewController == lensViewController) { + weakSelf.lensWebPageLoadTriggeredFromInputSelection = NO; + [weakSelf dismissViewController]; + } + }), + kCloseLensViewTimeout); +} + +- (void)lensControllerDidSelectURL:(NSURL*)url { + // This method is called when the user selects a URL within the Lens UI + // and should be treated as a link press. + web::NavigationManager::WebLoadParams params = + web_navigation_util::CreateWebLoadParams( + net::GURLWithNSURL(url), ui::PAGE_TRANSITION_LINK, nullptr); + [self openWebLoadParams:params]; + [self dismissViewController]; +} + +#pragma mark - WebStateListObserving methods + +- (void)webStateList:(WebStateList*)webStateList + didChangeActiveWebState:(web::WebState*)newWebState + oldWebState:(web::WebState*)oldWebState + atIndex:(int)atIndex + reason:(ActiveWebStateChangeReason)reason { + if (self.lensWebPageLoadTriggeredFromInputSelection) { + self.loadingWebState = newWebState; + } +} + +#pragma mark - CRWWebStateObserver methods + +- (void)webState:(web::WebState*)webState didLoadPageWithSuccess:(BOOL)success { + DCHECK_EQ(webState, self.loadingWebState); + // If the loaded page is a Lens Web page and we are expecting a Lens Web page + // load, dismiss the Lens UI. + if (self.lensWebPageLoadTriggeredFromInputSelection && + ios::provider::IsLensWebResultsURL(webState->GetLastCommittedURL())) { + self.lensWebPageLoadTriggeredFromInputSelection = NO; + self.loadingWebState = nil; + [self dismissViewController]; + } +} + +- (void)webStateDestroyed:(web::WebState*)webState { + DCHECK_EQ(webState, self.loadingWebState); + self.loadingWebState = nil; } #pragma mark - Private @@ -165,4 +301,21 @@ UrlLoadingBrowserAgent::FromBrowser(self.browser)->Load(loadParams); } +- (void)dismissViewController { + if (self.baseViewController.presentedViewController == self.viewController) { + [self.baseViewController dismissViewControllerAnimated:YES completion:nil]; + } + + self.viewController = nil; +} + +- (void)setLoadingWebState:(web::WebState*)webState { + DCHECK(_webStateObservation); + _webStateObservation->Reset(); + _loadingWebState = webState; + if (_loadingWebState) { + _webStateObservation->Observe(_loadingWebState); + } +} + @end
diff --git a/ios/chrome/browser/ui/promos_manager/promos_manager_coordinator.mm b/ios/chrome/browser/ui/promos_manager/promos_manager_coordinator.mm index 7434a49..0699c750 100644 --- a/ios/chrome/browser/ui/promos_manager/promos_manager_coordinator.mm +++ b/ios/chrome/browser/ui/promos_manager/promos_manager_coordinator.mm
@@ -244,6 +244,7 @@ [alert addAction:defaultAction]; [alert addAction:cancelAction]; + alert.preferredAction = defaultAction; [self.baseViewController presentViewController:alert animated:YES
diff --git a/ios/chrome/test/providers/lens/test_lens.mm b/ios/chrome/test/providers/lens/test_lens.mm index 89ba7326..cce1f1ff 100644 --- a/ios/chrome/test/providers/lens/test_lens.mm +++ b/ios/chrome/test/providers/lens/test_lens.mm
@@ -41,6 +41,11 @@ return false; } +bool IsLensWebResultsURL(const GURL& url) { + // Lens is not supported for tests. + return false; +} + web::NavigationManager::WebLoadParams GenerateLensLoadParamsForImage( UIImage* image, LensEntrypoint entry_point,
diff --git a/ios/public/provider/chrome/browser/lens/lens_api.h b/ios/public/provider/chrome/browser/lens/lens_api.h index bfe5f97..793f86b0 100644 --- a/ios/public/provider/chrome/browser/lens/lens_api.h +++ b/ios/public/provider/chrome/browser/lens/lens_api.h
@@ -11,6 +11,7 @@ @class LensConfiguration; @class UIViewController; +class GURL; enum class LensEntrypoint; // A delegate that can receive Lens events forwarded by a ChromeLensController. @@ -19,6 +20,9 @@ // Called when the Lens view controller's dimiss button has been tapped. - (void)lensControllerDidTapDismissButton; +// Called when the user selects a URL in Lens. +- (void)lensControllerDidSelectURL:(NSURL*)url; + // Called when the user selects an image and the Lens controller has prepared // `params` for loading a Lens web page. - (void)lensControllerDidGenerateLoadParams: @@ -50,6 +54,9 @@ // Returns whether Lens is supported for the current build. bool IsLensSupported(); +// Returns whether or not the url represents a Lens Web results page. +bool IsLensWebResultsURL(const GURL& url); + // Generates web load params for a Lens image search for the given // 'image' and 'entry_point'. web::NavigationManager::WebLoadParams GenerateLensLoadParamsForImage(
diff --git a/media/audio/mac/audio_manager_mac.cc b/media/audio/mac/audio_manager_mac.cc index 7da5704..f2e38845 100644 --- a/media/audio/mac/audio_manager_mac.cc +++ b/media/audio/mac/audio_manager_mac.cc
@@ -4,7 +4,6 @@ #include "media/audio/mac/audio_manager_mac.h" -#include <algorithm> #include <limits> #include <memory> #include <utility> @@ -19,6 +18,7 @@ #include "base/memory/free_deleter.h" #include "base/power_monitor/power_monitor.h" #include "base/power_monitor/power_observer.h" +#include "base/ranges/algorithm.h" #include "base/strings/sys_string_conversions.h" #include "base/threading/thread_checker.h" #include "base/time/time.h" @@ -1229,9 +1229,7 @@ void AudioManagerMac::ReleaseInputStream(AudioInputStream* stream) { DCHECK(GetTaskRunner()->BelongsToCurrentThread()); - auto stream_it = std::find(basic_input_streams_.begin(), - basic_input_streams_.end(), - stream); + auto stream_it = base::ranges::find(basic_input_streams_, stream); if (stream_it == basic_input_streams_.end()) low_latency_input_streams_.remove(static_cast<AUAudioInputStream*>(stream)); else
diff --git a/media/base/android/media_codec_util.cc b/media/base/android/media_codec_util.cc index 49c00090..9c14831 100644 --- a/media/base/android/media_codec_util.cc +++ b/media/base/android/media_codec_util.cc
@@ -6,13 +6,13 @@ #include <stddef.h> -#include <algorithm> #include <vector> #include "base/android/build_info.h" #include "base/android/jni_android.h" #include "base/android/jni_array.h" #include "base/android/jni_string.h" +#include "base/containers/contains.h" #include "base/logging.h" #include "base/strings/string_piece.h" #include "base/strings/string_util.h" @@ -68,8 +68,7 @@ kMp3MimeType, kAacMimeType, kOpusMimeType, kVorbisMimeType, kAvcMimeType, kDolbyVisionMimeType, kHevcMimeType, kVp8MimeType, kVp9MimeType, kAv1MimeType}; - return std::find(supported.begin(), supported.end(), mime_type) != - supported.end(); + return base::Contains(supported, mime_type); } static bool IsDecoderSupportedByDevice(const std::string& android_mime_type) {
diff --git a/media/base/audio_converter.cc b/media/base/audio_converter.cc index eaa4b1f9..a9d261b 100644 --- a/media/base/audio_converter.cc +++ b/media/base/audio_converter.cc
@@ -10,11 +10,11 @@ #include "media/base/audio_converter.h" -#include <algorithm> #include <memory> #include "base/bind.h" #include "base/callback_helpers.h" +#include "base/containers/contains.h" #include "base/logging.h" #include "base/trace_event/trace_event.h" #include "media/base/audio_bus.h" @@ -88,14 +88,12 @@ AudioConverter::~AudioConverter() = default; void AudioConverter::AddInput(InputCallback* input) { - DCHECK(std::find(transform_inputs_.begin(), transform_inputs_.end(), input) == - transform_inputs_.end()); + DCHECK(!base::Contains(transform_inputs_, input)); transform_inputs_.push_back(input); } void AudioConverter::RemoveInput(InputCallback* input) { - DCHECK(std::find(transform_inputs_.begin(), transform_inputs_.end(), input) != - transform_inputs_.end()); + DCHECK(base::Contains(transform_inputs_, input)); transform_inputs_.remove(input); if (transform_inputs_.empty())
diff --git a/media/base/channel_mixing_matrix.cc b/media/base/channel_mixing_matrix.cc index 1c6fe33..1b0b3bd 100644 --- a/media/base/channel_mixing_matrix.cc +++ b/media/base/channel_mixing_matrix.cc
@@ -6,9 +6,9 @@ #include <stddef.h> -#include <algorithm> - #include "base/check_op.h" +#include "base/containers/contains.h" +#include "base/ranges/algorithm.h" #include "media/base/channel_mixer.h" namespace media { @@ -260,13 +260,11 @@ } void ChannelMixingMatrix::AccountFor(Channels ch) { - unaccounted_inputs_.erase(std::find( - unaccounted_inputs_.begin(), unaccounted_inputs_.end(), ch)); + unaccounted_inputs_.erase(base::ranges::find(unaccounted_inputs_, ch)); } bool ChannelMixingMatrix::IsUnaccounted(Channels ch) const { - return std::find(unaccounted_inputs_.begin(), unaccounted_inputs_.end(), - ch) != unaccounted_inputs_.end(); + return base::Contains(unaccounted_inputs_, ch); } bool ChannelMixingMatrix::HasInputChannel(Channels ch) const {
diff --git a/media/capture/video/chromeos/camera_3a_controller.cc b/media/capture/video/chromeos/camera_3a_controller.cc index 4b09b8f..3b807f3c 100644 --- a/media/capture/video/chromeos/camera_3a_controller.cc +++ b/media/capture/video/chromeos/camera_3a_controller.cc
@@ -108,11 +108,10 @@ if (available_modes.empty()) { return false; } - if (std::find( - available_modes.begin(), available_modes.end(), + if (!base::Contains( + available_modes, base::checked_cast<uint8_t>( - cros::mojom::AndroidControlMode::ANDROID_CONTROL_MODE_AUTO)) == - available_modes.end()) { + cros::mojom::AndroidControlMode::ANDROID_CONTROL_MODE_AUTO))) { return false; } if (!available_ae_modes_.count(
diff --git a/media/capture/video/chromeos/token_manager.cc b/media/capture/video/chromeos/token_manager.cc index d24775b..fcc2fce 100644 --- a/media/capture/video/chromeos/token_manager.cc +++ b/media/capture/video/chromeos/token_manager.cc
@@ -7,8 +7,10 @@ #include <grp.h> #include <sys/types.h> #include <unistd.h> + #include <string> +#include "base/containers/contains.h" #include "base/files/file_path.h" #include "base/files/file_util.h" #include "base/strings/string_number_conversions.h" @@ -99,8 +101,7 @@ base::UnguessableToken TokenManager::GetTokenForTrustedClient( cros::mojom::CameraClientType type) { base::AutoLock l(client_token_map_lock_); - if (std::find(kTrustedClientTypes.begin(), kTrustedClientTypes.end(), type) == - kTrustedClientTypes.end()) { + if (!base::Contains(kTrustedClientTypes, type)) { return base::UnguessableToken(); } auto& token_set = client_token_map_[type];
diff --git a/media/capture/video/linux/v4l2_capture_delegate.cc b/media/capture/video/linux/v4l2_capture_delegate.cc index d98e1484..8ee347e4 100644 --- a/media/capture/video/linux/v4l2_capture_delegate.cc +++ b/media/capture/video/linux/v4l2_capture_delegate.cc
@@ -11,6 +11,7 @@ #include <sys/ioctl.h> #include <sys/mman.h> +#include <algorithm> #include <utility> #include "base/bind.h"
diff --git a/media/capture/video/video_capture_device.cc b/media/capture/video/video_capture_device.cc index e00010c..b26304b0 100644 --- a/media/capture/video/video_capture_device.cc +++ b/media/capture/video/video_capture_device.cc
@@ -6,6 +6,7 @@ #include "base/callback.h" #include "base/command_line.h" +#include "base/containers/contains.h" #include "base/i18n/timezone.h" #include "base/strings/string_util.h" #include "base/token.h" @@ -88,10 +89,7 @@ "CR", "CU", "DO", "EC", "FM", "GT", "GU", "GY", "HN", "HT", "JP", "KN", "KR", "KY", "MS", "MX", "NI", "PA", "PE", "PF", "PH", "PR", "PW", "SA", "SR", "SV", "TT", "TW", "UM", "US", "VG", "VI", "VE"}; - const char** countries_using_60Hz_end = - countries_using_60Hz + std::size(countries_using_60Hz); - if (std::find(countries_using_60Hz, countries_using_60Hz_end, - current_country) == countries_using_60Hz_end) { + if (!base::Contains(countries_using_60Hz, current_country)) { return PowerLineFrequency::FREQUENCY_50HZ; } return PowerLineFrequency::FREQUENCY_60HZ;
diff --git a/media/capture/video/video_capture_device_client.cc b/media/capture/video/video_capture_device_client.cc index c109ecd0..efa17586 100644 --- a/media/capture/video/video_capture_device_client.cc +++ b/media/capture/video/video_capture_device_client.cc
@@ -4,7 +4,6 @@ #include "media/capture/video/video_capture_device_client.h" -#include <algorithm> #include <memory> #include <utility> @@ -12,6 +11,7 @@ #include "base/command_line.h" #include "base/containers/contains.h" #include "base/location.h" +#include "base/ranges/algorithm.h" #include "base/strings/stringprintf.h" #include "base/trace_event/trace_event.h" #include "build/build_config.h" @@ -494,8 +494,7 @@ // If a buffer to retire was specified, retire one. if (buffer_id_to_drop != VideoCaptureBufferPool::kInvalidId) { auto entry_iter = - std::find(buffer_ids_known_by_receiver_.begin(), - buffer_ids_known_by_receiver_.end(), buffer_id_to_drop); + base::ranges::find(buffer_ids_known_by_receiver_, buffer_id_to_drop); if (entry_iter != buffer_ids_known_by_receiver_.end()) { buffer_ids_known_by_receiver_.erase(entry_iter); receiver_->OnBufferRetired(buffer_id_to_drop); @@ -551,8 +550,7 @@ // |buffer_pool_| has decided to release a buffer. Notify receiver in case // the buffer has already been shared with it. auto entry_iter = - std::find(buffer_ids_known_by_receiver_.begin(), - buffer_ids_known_by_receiver_.end(), buffer_id_to_drop); + base::ranges::find(buffer_ids_known_by_receiver_, buffer_id_to_drop); if (entry_iter != buffer_ids_known_by_receiver_.end()) { buffer_ids_known_by_receiver_.erase(entry_iter); receiver_->OnBufferRetired(buffer_id_to_drop);
diff --git a/media/capture/video/video_capture_feedback.cc b/media/capture/video/video_capture_feedback.cc index 12f1ae56..aa41bd0 100644 --- a/media/capture/video/video_capture_feedback.cc +++ b/media/capture/video/video_capture_feedback.cc
@@ -4,9 +4,9 @@ #include "media/capture/video/video_capture_feedback.h" -#include <algorithm> #include <cmath> +#include "base/containers/contains.h" #include "base/logging.h" namespace media { @@ -63,8 +63,7 @@ // Merge mapped sizes for all consumers. for (const gfx::Size& mapped_size : other.mapped_sizes) { // Skip duplicates. - if (std::find(mapped_sizes.begin(), mapped_sizes.end(), mapped_size) != - mapped_sizes.end()) { + if (base::Contains(mapped_sizes, mapped_size)) { continue; } // As a safety measure, limit the number of sizes that can be asked for.
diff --git a/media/capture/video_capture_types.cc b/media/capture/video_capture_types.cc index 42d26df..2e6a85f3 100644 --- a/media/capture/video_capture_types.cc +++ b/media/capture/video_capture_types.cc
@@ -5,6 +5,7 @@ #include "media/capture/video_capture_types.h" #include "base/check.h" +#include "base/ranges/algorithm.h" #include "base/strings/stringprintf.h" #include "media/base/limits.h" @@ -51,14 +52,8 @@ bool VideoCaptureFormat::ComparePixelFormatPreference( const VideoPixelFormat& lhs, const VideoPixelFormat& rhs) { - auto* format_lhs = std::find( - kSupportedCapturePixelFormats, - kSupportedCapturePixelFormats + std::size(kSupportedCapturePixelFormats), - lhs); - auto* format_rhs = std::find( - kSupportedCapturePixelFormats, - kSupportedCapturePixelFormats + std::size(kSupportedCapturePixelFormats), - rhs); + auto* format_lhs = base::ranges::find(kSupportedCapturePixelFormats, lhs); + auto* format_rhs = base::ranges::find(kSupportedCapturePixelFormats, rhs); return format_lhs < format_rhs; }
diff --git a/media/cast/common/encoded_frame.cc b/media/cast/common/encoded_frame.cc index 132a91f..835688ce 100644 --- a/media/cast/common/encoded_frame.cc +++ b/media/cast/common/encoded_frame.cc
@@ -9,9 +9,7 @@ namespace media { namespace cast { -EncodedFrame::EncodedFrame() - : dependency(UNKNOWN_DEPENDENCY), new_playout_delay_ms(0) {} - +EncodedFrame::EncodedFrame() = default; EncodedFrame::~EncodedFrame() = default; void EncodedFrame::CopyMetadataTo(EncodedFrame* dest) const {
diff --git a/media/cast/common/encoded_frame.h b/media/cast/common/encoded_frame.h index 0504fdaf..fceb02e9 100644 --- a/media/cast/common/encoded_frame.h +++ b/media/cast/common/encoded_frame.h
@@ -12,6 +12,7 @@ #include "media/cast/cast_config.h" #include "media/cast/common/frame_id.h" #include "media/cast/common/rtp_time.h" +#include "third_party/openscreen/src/cast/streaming/encoded_frame.h" namespace media { namespace cast { @@ -19,24 +20,6 @@ // A combination of metadata and data for one encoded frame. This can contain // audio data or video data or other. struct EncodedFrame { - enum Dependency { - // "null" value, used to indicate whether |dependency| has been set. - UNKNOWN_DEPENDENCY, - - // Not decodable without the reference frame indicated by - // |referenced_frame_id|. - DEPENDENT, - - // Independently decodable. - INDEPENDENT, - - // Independently decodable, and no future frames will depend on any frames - // before this one. - KEY, - - DEPENDENCY_LAST = KEY - }; - EncodedFrame(); virtual ~EncodedFrame(); @@ -53,7 +36,8 @@ void CopyMetadataTo(EncodedFrame* dest) const; // This frame's dependency relationship with respect to other frames. - Dependency dependency; + openscreen::cast::EncodedFrame::Dependency dependency = + openscreen::cast::EncodedFrame::Dependency::kUnknown; // The label associated with this frame. Implies an ordering relative to // other frames in the same stream. @@ -82,7 +66,7 @@ // Playout delay for this and all future frames. Used by the Adaptive // Playout delay extension. Zero means no change. - uint16_t new_playout_delay_ms; + uint16_t new_playout_delay_ms = 0; // The encoded signal data. std::string data;
diff --git a/media/cast/common/openscreen_conversion_helpers.cc b/media/cast/common/openscreen_conversion_helpers.cc index e4abcee9..b2d720d 100644 --- a/media/cast/common/openscreen_conversion_helpers.cc +++ b/media/cast/common/openscreen_conversion_helpers.cc
@@ -49,24 +49,10 @@ std::chrono::duration_cast<std::chrono::microseconds>(tp).count()); } -openscreen::cast::EncodedFrame::Dependency ToOpenscreenDependency( - media::cast::EncodedFrame::Dependency dependency) { - switch (dependency) { - case media::cast::EncodedFrame::Dependency::UNKNOWN_DEPENDENCY: - return openscreen::cast::EncodedFrame::Dependency::kUnknown; - case media::cast::EncodedFrame::Dependency::DEPENDENT: - return openscreen::cast::EncodedFrame::Dependency::kDependent; - case media::cast::EncodedFrame::Dependency::INDEPENDENT: - return openscreen::cast::EncodedFrame::Dependency::kIndependent; - case media::cast::EncodedFrame::Dependency::KEY: - return openscreen::cast::EncodedFrame::Dependency::kKeyFrame; - } - NOTREACHED(); -} const openscreen::cast::EncodedFrame ToOpenscreenEncodedFrame( const SenderEncodedFrame& encoded_frame) { return openscreen::cast::EncodedFrame( - ToOpenscreenDependency(encoded_frame.dependency), encoded_frame.frame_id, + encoded_frame.dependency, encoded_frame.frame_id, encoded_frame.referenced_frame_id, encoded_frame.rtp_timestamp, ToOpenscreenTimePoint(encoded_frame.reference_time), std::chrono::milliseconds(encoded_frame.new_playout_delay_ms),
diff --git a/media/cast/common/openscreen_conversion_helpers.h b/media/cast/common/openscreen_conversion_helpers.h index 0c2f46a..cd14f24 100644 --- a/media/cast/common/openscreen_conversion_helpers.h +++ b/media/cast/common/openscreen_conversion_helpers.h
@@ -35,12 +35,6 @@ int timebase); base::TimeDelta ToTimeDelta(openscreen::Clock::duration tp); -// TODO(https://crbug.com/1343116): as part of libcast implementation, we -// should remove media::cast::EncodedFrame::Dependency in favor of using -// the openscreen type throughout. -openscreen::cast::EncodedFrame::Dependency ToOpenscreenDependency( - media::cast::EncodedFrame::Dependency dependency); - const openscreen::cast::EncodedFrame ToOpenscreenEncodedFrame( const SenderEncodedFrame& encoded_frame);
diff --git a/media/cast/common/openscreen_conversion_helpers_unittest.cc b/media/cast/common/openscreen_conversion_helpers_unittest.cc index 23d1c02..014051f 100644 --- a/media/cast/common/openscreen_conversion_helpers_unittest.cc +++ b/media/cast/common/openscreen_conversion_helpers_unittest.cc
@@ -22,7 +22,8 @@ original.lossiness = 0.5f; original.encode_completion_time = base::TimeTicks() + base::Milliseconds(1337); - original.dependency = EncodedFrame::Dependency::INDEPENDENT; + original.dependency = + openscreen::cast::EncodedFrame::Dependency::kIndependent; original.frame_id = FrameId::first(); original.rtp_timestamp = ToRtpTimeTicks(base::Seconds(3), 9000); original.reference_time = base::TimeTicks() + base::Milliseconds(1338);
diff --git a/media/cast/encoding/audio_encoder.cc b/media/cast/encoding/audio_encoder.cc index 17312aa..280f59a0 100644 --- a/media/cast/encoding/audio_encoder.cc +++ b/media/cast/encoding/audio_encoder.cc
@@ -24,6 +24,7 @@ #include "media/cast/common/rtp_time.h" #include "media/cast/common/sender_encoded_frame.h" #include "media/cast/constants.h" +#include "third_party/openscreen/src/cast/streaming/encoded_frame.h" #if !BUILDFLAG(IS_IOS) #include "third_party/opus/src/include/opus.h" @@ -147,7 +148,8 @@ break; std::unique_ptr<SenderEncodedFrame> audio_frame(new SenderEncodedFrame()); - audio_frame->dependency = EncodedFrame::KEY; + audio_frame->dependency = + openscreen::cast::EncodedFrame::Dependency::kKeyFrame; audio_frame->frame_id = frame_id_; audio_frame->referenced_frame_id = frame_id_; audio_frame->rtp_timestamp = frame_rtp_timestamp_;
diff --git a/media/cast/encoding/audio_encoder_unittest.cc b/media/cast/encoding/audio_encoder_unittest.cc index 433989e7..b36b4dd4 100644 --- a/media/cast/encoding/audio_encoder_unittest.cc +++ b/media/cast/encoding/audio_encoder_unittest.cc
@@ -25,6 +25,7 @@ #include "media/cast/common/sender_encoded_frame.h" #include "media/cast/test/utility/audio_utility.h" #include "testing/gtest/include/gtest/gtest.h" +#include "third_party/openscreen/src/cast/streaming/encoded_frame.h" namespace media { namespace cast { @@ -57,7 +58,8 @@ void FrameEncoded(std::unique_ptr<SenderEncodedFrame> encoded_frame, int samples_skipped) { - EXPECT_EQ(encoded_frame->dependency, EncodedFrame::KEY); + EXPECT_EQ(encoded_frame->dependency, + openscreen::cast::EncodedFrame::Dependency::kKeyFrame); EXPECT_EQ(frames_received_, encoded_frame->frame_id - FrameId::first()); EXPECT_EQ(encoded_frame->frame_id, encoded_frame->referenced_frame_id); // RTP timestamps should be monotonically increasing and integer multiples
diff --git a/media/cast/encoding/av1_encoder.cc b/media/cast/encoding/av1_encoder.cc index c6193854..9b82a3e 100644 --- a/media/cast/encoding/av1_encoder.cc +++ b/media/cast/encoding/av1_encoder.cc
@@ -10,6 +10,7 @@ #include "media/cast/common/sender_encoded_frame.h" #include "media/cast/constants.h" #include "third_party/libaom/source/libaom/aom/aomcx.h" +#include "third_party/openscreen/src/cast/streaming/encoded_frame.h" namespace media { namespace cast { @@ -245,10 +246,12 @@ continue; if (pkt->data.frame.flags & AOM_FRAME_IS_KEY) { // TODO(hubbe): Replace "dependency" with a "bool is_key_frame". - encoded_frame->dependency = EncodedFrame::KEY; + encoded_frame->dependency = + openscreen::cast::EncodedFrame::Dependency::kKeyFrame; encoded_frame->referenced_frame_id = encoded_frame->frame_id; } else { - encoded_frame->dependency = EncodedFrame::DEPENDENT; + encoded_frame->dependency = + openscreen::cast::EncodedFrame::Dependency::kDependent; // Frame dependencies could theoretically be relaxed by looking for the // AOM_FRAME_IS_DROPPABLE flag, but in recent testing (Oct 2014), this // flag never seems to be set. @@ -297,7 +300,8 @@ << ", lossiness: " << encoded_frame->lossiness << " (quantizer chosen by the encoder was " << quantizer << ')'; - if (encoded_frame->dependency == EncodedFrame::KEY) { + if (encoded_frame->dependency == + openscreen::cast::EncodedFrame::Dependency::kKeyFrame) { key_frame_requested_ = false; encoding_speed_acc_.Reset(kHighestEncodingSpeed, video_frame->timestamp()); } else {
diff --git a/media/cast/encoding/external_video_encoder.cc b/media/cast/encoding/external_video_encoder.cc index 5c1d971..9407afe 100644 --- a/media/cast/encoding/external_video_encoder.cc +++ b/media/cast/encoding/external_video_encoder.cc
@@ -423,7 +423,11 @@ auto encoded_frame = std::make_unique<SenderEncodedFrame>(); encoded_frame->dependency = - metadata.key_frame ? EncodedFrame::KEY : EncodedFrame::DEPENDENT; + metadata.key_frame + ? + + openscreen::cast::EncodedFrame::Dependency::kKeyFrame + : openscreen::cast::EncodedFrame::Dependency::kDependent; encoded_frame->frame_id = next_frame_id_++; if (metadata.key_frame) { encoded_frame->referenced_frame_id = encoded_frame->frame_id;
diff --git a/media/cast/encoding/fake_software_video_encoder.cc b/media/cast/encoding/fake_software_video_encoder.cc index 7566658..1b7de3c 100644 --- a/media/cast/encoding/fake_software_video_encoder.cc +++ b/media/cast/encoding/fake_software_video_encoder.cc
@@ -15,6 +15,9 @@ #include "media/cast/common/rtp_time.h" #include "media/cast/common/sender_encoded_frame.h" #include "media/cast/constants.h" +#include "third_party/openscreen/src/cast/streaming/encoded_frame.h" + +using Dependency = openscreen::cast::EncodedFrame::Dependency; namespace media { namespace cast { @@ -45,11 +48,11 @@ encoded_frame->frame_id = frame_id_++; if (next_frame_is_key_) { - encoded_frame->dependency = EncodedFrame::KEY; + encoded_frame->dependency = Dependency::kKeyFrame; encoded_frame->referenced_frame_id = encoded_frame->frame_id; next_frame_is_key_ = false; } else { - encoded_frame->dependency = EncodedFrame::DEPENDENT; + encoded_frame->dependency = Dependency::kDependent; encoded_frame->referenced_frame_id = encoded_frame->frame_id - 1; } encoded_frame->rtp_timestamp = @@ -57,7 +60,7 @@ encoded_frame->reference_time = reference_time; base::Value values(base::Value::Type::DICTIONARY); - values.SetBoolKey("key", encoded_frame->dependency == EncodedFrame::KEY); + values.SetBoolKey("key", encoded_frame->dependency == Dependency::kKeyFrame); values.SetIntKey("ref", encoded_frame->referenced_frame_id.lower_32_bits()); values.SetIntKey("id", encoded_frame->frame_id.lower_32_bits()); values.SetIntKey("size", frame_size_); @@ -65,7 +68,7 @@ encoded_frame->data.resize( std::max<size_t>(encoded_frame->data.size(), frame_size_), ' '); - if (encoded_frame->dependency == EncodedFrame::KEY) { + if (encoded_frame->dependency == Dependency::kKeyFrame) { encoded_frame->encoder_utilization = 1.0; encoded_frame->lossiness = 6.0; } else {
diff --git a/media/cast/encoding/h264_vt_encoder.cc b/media/cast/encoding/h264_vt_encoder.cc index e64f9c7..6d06215 100644 --- a/media/cast/encoding/h264_vt_encoder.cc +++ b/media/cast/encoding/h264_vt_encoder.cc
@@ -26,6 +26,9 @@ #include "media/cast/common/sender_encoded_frame.h" #include "media/cast/common/video_frame_factory.h" #include "media/cast/constants.h" +#include "third_party/openscreen/src/cast/streaming/encoded_frame.h" + +using Dependency = openscreen::cast::EncodedFrame::Dependency; namespace media { namespace cast { @@ -531,10 +534,10 @@ encoded_frame->reference_time = request->reference_time; encoded_frame->rtp_timestamp = request->rtp_timestamp; if (is_keyframe) { - encoded_frame->dependency = EncodedFrame::KEY; + encoded_frame->dependency = Dependency::kKeyFrame; encoded_frame->referenced_frame_id = frame_id; } else { - encoded_frame->dependency = EncodedFrame::DEPENDENT; + encoded_frame->dependency = Dependency::kDependent; // H.264 supports complex frame reference schemes (multiple reference // frames, slice references, backward and forward references, etc). Cast // doesn't support the concept of forward-referencing frame dependencies or
diff --git a/media/cast/encoding/h264_vt_encoder_unittest.cc b/media/cast/encoding/h264_vt_encoder_unittest.cc index 327dc1e..8e08af0 100644 --- a/media/cast/encoding/h264_vt_encoder_unittest.cc +++ b/media/cast/encoding/h264_vt_encoder_unittest.cc
@@ -36,6 +36,8 @@ #include "media/media_buildflags.h" #include "testing/gtest/include/gtest/gtest.h" +using Dependency = openscreen::cast::EncodedFrame::Dependency; + namespace { const int kVideoWidth = 1280; @@ -96,9 +98,9 @@ auto e = expectations_.front(); expectations_.pop(); if (e.expected_frame_id != e.expected_last_referenced_frame_id) { - EXPECT_EQ(EncodedFrame::DEPENDENT, encoded_frame->dependency); + EXPECT_EQ(Dependency::kDependent, encoded_frame->dependency); } else { - EXPECT_EQ(EncodedFrame::KEY, encoded_frame->dependency); + EXPECT_EQ(Dependency::kKeyFrame, encoded_frame->dependency); } EXPECT_EQ(e.expected_frame_id, encoded_frame->frame_id); EXPECT_EQ(e.expected_last_referenced_frame_id,
diff --git a/media/cast/encoding/video_encoder_unittest.cc b/media/cast/encoding/video_encoder_unittest.cc index 2ef2c5b1..3b5e983 100644 --- a/media/cast/encoding/video_encoder_unittest.cc +++ b/media/cast/encoding/video_encoder_unittest.cc
@@ -29,6 +29,7 @@ #include "media/cast/test/utility/default_config.h" #include "media/cast/test/utility/video_utility.h" #include "testing/gtest/include/gtest/gtest.h" +#include "third_party/openscreen/src/cast/streaming/encoded_frame.h" #if BUILDFLAG(IS_MAC) #include "base/threading/platform_thread.h" @@ -295,11 +296,13 @@ continue; } - if (encoded_frame->dependency == EncodedFrame::KEY) { + if (encoded_frame->dependency == + openscreen::cast::EncodedFrame::Dependency::kKeyFrame) { EXPECT_EQ(encoded_frame->frame_id, encoded_frame->referenced_frame_id); last_key_frame_id = encoded_frame->frame_id; } else { - EXPECT_EQ(EncodedFrame::DEPENDENT, encoded_frame->dependency); + EXPECT_EQ(openscreen::cast::EncodedFrame::Dependency::kDependent, + encoded_frame->dependency); EXPECT_GT(encoded_frame->frame_id, encoded_frame->referenced_frame_id); // There must always be a KEY frame before any DEPENDENT ones. ASSERT_FALSE(last_key_frame_id.is_null());
diff --git a/media/cast/encoding/vpx_encoder.cc b/media/cast/encoding/vpx_encoder.cc index f487b4a..2de5bd6 100644 --- a/media/cast/encoding/vpx_encoder.cc +++ b/media/cast/encoding/vpx_encoder.cc
@@ -10,6 +10,9 @@ #include "media/cast/common/sender_encoded_frame.h" #include "media/cast/constants.h" #include "third_party/libvpx/source/libvpx/vpx/vp8cx.h" +#include "third_party/openscreen/src/cast/streaming/encoded_frame.h" + +using Dependency = openscreen::cast::EncodedFrame::Dependency; namespace media { namespace cast { @@ -285,10 +288,10 @@ continue; if (pkt->data.frame.flags & VPX_FRAME_IS_KEY) { // TODO(hubbe): Replace "dependency" with a "bool is_key_frame". - encoded_frame->dependency = EncodedFrame::KEY; + encoded_frame->dependency = Dependency::kKeyFrame; encoded_frame->referenced_frame_id = encoded_frame->frame_id; } else { - encoded_frame->dependency = EncodedFrame::DEPENDENT; + encoded_frame->dependency = Dependency::kDependent; // Frame dependencies could theoretically be relaxed by looking for the // VPX_FRAME_IS_DROPPABLE flag, but in recent testing (Oct 2014), this // flag never seems to be set. @@ -338,10 +341,10 @@ << ", lossiness: " << encoded_frame->lossiness << " (quantizer chosen by the encoder was " << quantizer << ')'; - if (encoded_frame->dependency == EncodedFrame::KEY) { + if (encoded_frame->dependency == Dependency::kKeyFrame) { key_frame_requested_ = false; } - if (encoded_frame->dependency == EncodedFrame::KEY) { + if (encoded_frame->dependency == Dependency::kKeyFrame) { encoding_speed_acc_.Reset(kHighestEncodingSpeed, video_frame->timestamp()); } else { // Equivalent encoding speed considering both cpu_used setting and
diff --git a/media/cast/encoding/vpx_quantizer_parser_unittest.cc b/media/cast/encoding/vpx_quantizer_parser_unittest.cc index 61d8d32..e8accbb 100644 --- a/media/cast/encoding/vpx_quantizer_parser_unittest.cc +++ b/media/cast/encoding/vpx_quantizer_parser_unittest.cc
@@ -16,6 +16,7 @@ #include "media/cast/test/utility/default_config.h" #include "media/cast/test/utility/video_utility.h" #include "testing/gtest/include/gtest/gtest.h" +#include "third_party/openscreen/src/cast/streaming/encoded_frame.h" namespace media { namespace cast { @@ -104,7 +105,8 @@ unsigned int first_partition_size = (encoded_data[0] | (encoded_data[1] << 8) | (encoded_data[2] << 16)) >> 5; - if (encoded_frame->dependency == EncodedFrame::KEY) { + if (encoded_frame->dependency == + openscreen::cast::EncodedFrame::Dependency::kKeyFrame) { // Ten bytes should not be enough to decode the quanitizer value // for a Key frame. decoded_quantizer = ParseVpxHeaderQuantizer(encoded_data, 10);
diff --git a/media/cast/logging/log_event_dispatcher.cc b/media/cast/logging/log_event_dispatcher.cc index d199026..418b55f7 100644 --- a/media/cast/logging/log_event_dispatcher.cc +++ b/media/cast/logging/log_event_dispatcher.cc
@@ -4,12 +4,13 @@ #include "media/cast/logging/log_event_dispatcher.h" -#include <algorithm> #include <utility> #include "base/bind.h" #include "base/callback_helpers.h" +#include "base/containers/contains.h" #include "base/location.h" +#include "base/ranges/algorithm.h" #include "base/synchronization/waitable_event.h" #include "media/cast/cast_environment.h" @@ -125,14 +126,12 @@ } void LogEventDispatcher::Impl::Subscribe(RawEventSubscriber* subscriber) { - DCHECK(std::find(subscribers_.begin(), subscribers_.end(), subscriber) == - subscribers_.end()); + DCHECK(!base::Contains(subscribers_, subscriber)); subscribers_.push_back(subscriber); } void LogEventDispatcher::Impl::Unsubscribe(RawEventSubscriber* subscriber) { - const auto it = - std::find(subscribers_.begin(), subscribers_.end(), subscriber); + const auto it = base::ranges::find(subscribers_, subscriber); DCHECK(it != subscribers_.end()); subscribers_.erase(it); }
diff --git a/media/cast/net/cast_transport_impl_unittest.cc b/media/cast/net/cast_transport_impl_unittest.cc index dc79060..6e9df49 100644 --- a/media/cast/net/cast_transport_impl_unittest.cc +++ b/media/cast/net/cast_transport_impl_unittest.cc
@@ -22,6 +22,9 @@ #include "media/cast/net/cast_transport_config.h" #include "media/cast/net/rtcp/rtcp_defines.h" #include "testing/gtest/include/gtest/gtest.h" +#include "third_party/openscreen/src/cast/streaming/encoded_frame.h" + +using Dependency = openscreen::cast::EncodedFrame::Dependency; namespace media { namespace cast { @@ -211,7 +214,7 @@ fake_frame.frame_id = FrameId::first() + 1; fake_frame.referenced_frame_id = FrameId::first() + 1; fake_frame.rtp_timestamp = RtpTimeTicks().Expand(UINT32_C(1)); - fake_frame.dependency = EncodedFrame::KEY; + fake_frame.dependency = Dependency::kKeyFrame; fake_frame.data.resize(5000, ' '); transport_sender_->InsertFrame(kVideoSsrc, fake_frame); @@ -259,7 +262,7 @@ fake_frame.frame_id = FrameId::first() + 1; fake_frame.referenced_frame_id = FrameId::first() + 1; fake_frame.rtp_timestamp = RtpTimeTicks().Expand(UINT32_C(1)); - fake_frame.dependency = EncodedFrame::KEY; + fake_frame.dependency = Dependency::kKeyFrame; fake_frame.data.resize(5000, ' '); transport_sender_->InsertFrame(kVideoSsrc, fake_frame); @@ -302,7 +305,7 @@ fake_frame.frame_id = FrameId::first() + 1; fake_frame.referenced_frame_id = FrameId::first() + 1; fake_frame.rtp_timestamp = RtpTimeTicks().Expand(UINT32_C(1)); - fake_frame.dependency = EncodedFrame::KEY; + fake_frame.dependency = Dependency::kKeyFrame; fake_frame.data.resize(5000, ' '); transport_->SetPaused(true); @@ -345,7 +348,7 @@ fake_audio.frame_id = FrameId::first() + 1; fake_audio.referenced_frame_id = FrameId::first() + 1; fake_audio.reference_time = testing_clock_.NowTicks(); - fake_audio.dependency = EncodedFrame::KEY; + fake_audio.dependency = Dependency::kKeyFrame; fake_audio.data.resize(100, ' '); transport_sender_->InsertFrame(kAudioSsrc, fake_audio); task_runner_->Sleep(base::Milliseconds(2)); @@ -368,7 +371,7 @@ EncodedFrame fake_video; fake_video.frame_id = FrameId::first() + 1; fake_video.referenced_frame_id = FrameId::first() + 1; - fake_video.dependency = EncodedFrame::KEY; + fake_video.dependency = Dependency::kKeyFrame; fake_video.data.resize(5000, ' '); transport_sender_->InsertFrame(kVideoSsrc, fake_video); task_runner_->RunTasks();
diff --git a/media/cast/net/pacing/paced_sender.cc b/media/cast/net/pacing/paced_sender.cc index 6d8a1fb..63f6984 100644 --- a/media/cast/net/pacing/paced_sender.cc +++ b/media/cast/net/pacing/paced_sender.cc
@@ -6,6 +6,7 @@ #include "base/big_endian.h" #include "base/bind.h" +#include "base/containers/contains.h" #include "base/logging.h" #include "base/numerics/safe_conversions.h" @@ -299,8 +300,7 @@ } bool PacedSender::IsHighPriority(const PacketKey& packet_key) const { - return std::find(priority_ssrcs_.begin(), priority_ssrcs_.end(), - packet_key.ssrc) != priority_ssrcs_.end(); + return base::Contains(priority_ssrcs_, packet_key.ssrc); } bool PacedSender::empty() const {
diff --git a/media/cast/net/rtp/rtp_packetizer.cc b/media/cast/net/rtp/rtp_packetizer.cc index 24e3af22..9eb3f649 100644 --- a/media/cast/net/rtp/rtp_packetizer.cc +++ b/media/cast/net/rtp/rtp_packetizer.cc
@@ -12,6 +12,7 @@ #include "media/cast/common/encoded_frame.h" #include "media/cast/net/pacing/paced_sender.h" #include "media/cast/net/rtp/rtp_defines.h" +#include "third_party/openscreen/src/cast/streaming/encoded_frame.h" namespace media { namespace cast { @@ -99,14 +100,18 @@ frame.rtp_timestamp); // Build Cast header. - DCHECK_NE(frame.dependency, EncodedFrame::UNKNOWN_DEPENDENCY); + DCHECK_NE(frame.dependency, + openscreen::cast::EncodedFrame::Dependency::kUnknown); uint8_t byte0 = kCastReferenceFrameIdBitMask; - if (frame.dependency == EncodedFrame::KEY) + if (frame.dependency == + openscreen::cast::EncodedFrame::Dependency::kKeyFrame) byte0 |= kCastKeyFrameBitMask; + // Extensions only go on the first packet of the frame const uint16_t packet_id = static_cast<uint16_t>(packets.size()); if (packet_id == 0) byte0 |= num_extensions; + packet->data.push_back(byte0); packet->data.push_back(frame.frame_id.lower_8_bits()); size_t start_size = packet->data.size();
diff --git a/media/cast/net/rtp/rtp_packetizer_unittest.cc b/media/cast/net/rtp/rtp_packetizer_unittest.cc index b2c3191..f03aace 100644 --- a/media/cast/net/rtp/rtp_packetizer_unittest.cc +++ b/media/cast/net/rtp/rtp_packetizer_unittest.cc
@@ -16,6 +16,7 @@ #include "media/cast/net/rtp/packet_storage.h" #include "media/cast/net/rtp/rtp_parser.h" #include "testing/gmock/include/gmock/gmock.h" +#include "third_party/openscreen/src/cast/streaming/encoded_frame.h" namespace media { namespace cast { @@ -141,7 +142,8 @@ pacer_->RegisterSsrc(config_.ssrc, false); rtp_packetizer_ = std::make_unique<RtpPacketizer>( pacer_.get(), &packet_storage_, config_); - video_frame_.dependency = EncodedFrame::DEPENDENT; + video_frame_.dependency = + openscreen::cast::EncodedFrame::Dependency::kDependent; video_frame_.frame_id = FrameId::first() + 1; video_frame_.referenced_frame_id = video_frame_.frame_id - 1; video_frame_.data.assign(kFrameSize, 123);
diff --git a/media/cast/sender/frame_sender_impl.cc b/media/cast/sender/frame_sender_impl.cc index 24131db..5100402 100644 --- a/media/cast/sender/frame_sender_impl.cc +++ b/media/cast/sender/frame_sender_impl.cc
@@ -18,6 +18,7 @@ #include "media/cast/common/openscreen_conversion_helpers.h" #include "media/cast/common/sender_encoded_frame.h" #include "media/cast/constants.h" +#include "third_party/openscreen/src/cast/streaming/encoded_frame.h" namespace media::cast { namespace { @@ -315,7 +316,8 @@ const bool is_first_frame_to_be_sent = last_send_time_.is_null(); if (picture_lost_at_receiver_ && - (encoded_frame->dependency == EncodedFrame::KEY)) { + (encoded_frame->dependency == + openscreen::cast::EncodedFrame::Dependency::kKeyFrame)) { picture_lost_at_receiver_ = false; DCHECK(frame_id > latest_acked_frame_id_); // Cancel sending remaining frames. @@ -340,7 +342,9 @@ ScheduleNextResendCheck(); } - VLOG_IF(1, !is_audio_ && encoded_frame->dependency == EncodedFrame::KEY) + VLOG_IF(1, !is_audio_ && + encoded_frame->dependency == + openscreen::cast::EncodedFrame::Dependency::kKeyFrame) << SENDER_SSRC << "Sending encoded key frame, id=" << frame_id; std::unique_ptr<FrameEvent> encode_event(new FrameEvent()); @@ -350,7 +354,9 @@ encode_event->rtp_timestamp = encoded_frame->rtp_timestamp; encode_event->frame_id = frame_id; encode_event->size = base::checked_cast<uint32_t>(encoded_frame->data.size()); - encode_event->key_frame = encoded_frame->dependency == EncodedFrame::KEY; + encode_event->key_frame = + encoded_frame->dependency == + openscreen::cast::EncodedFrame::Dependency::kKeyFrame; encode_event->target_bitrate = encoded_frame->encoder_bitrate; encode_event->encoder_cpu_utilization = encoded_frame->encoder_utilization; encode_event->idealized_bitrate_utilization = encoded_frame->lossiness;
diff --git a/media/cast/sender/openscreen_frame_sender.cc b/media/cast/sender/openscreen_frame_sender.cc index 7d8f492..643c663b 100644 --- a/media/cast/sender/openscreen_frame_sender.cc +++ b/media/cast/sender/openscreen_frame_sender.cc
@@ -20,7 +20,7 @@ #include "media/cast/common/openscreen_conversion_helpers.h" #include "media/cast/common/sender_encoded_frame.h" #include "media/cast/constants.h" - +#include "third_party/openscreen/src/cast/streaming/encoded_frame.h" namespace media::cast { // The additional number of frames that can be in-flight when input exceeds the @@ -196,7 +196,8 @@ DCHECK(frame_id > last_sent_frame_id_) << "enqueued frames out of order."; last_sent_frame_id_ = frame_id; - if (!is_audio_ && encoded_frame->dependency == EncodedFrame::KEY) { + if (!is_audio_ && encoded_frame->dependency == + openscreen::cast::EncodedFrame::Dependency::kKeyFrame) { VLOG_WITH_SSRC(1) << "Sending encoded key frame, id=" << frame_id; } @@ -207,7 +208,9 @@ encode_event->rtp_timestamp = encoded_frame->rtp_timestamp; encode_event->frame_id = frame_id; encode_event->size = base::checked_cast<uint32_t>(encoded_frame->data.size()); - encode_event->key_frame = encoded_frame->dependency == EncodedFrame::KEY; + encode_event->key_frame = + encoded_frame->dependency == + openscreen::cast::EncodedFrame::Dependency::kKeyFrame; encode_event->target_bitrate = encoded_frame->encoder_bitrate; encode_event->encoder_cpu_utilization = encoded_frame->encoder_utilization; encode_event->idealized_bitrate_utilization = encoded_frame->lossiness;
diff --git a/media/cast/sender/video_sender.cc b/media/cast/sender/video_sender.cc index 4042c851..e7194b5 100644 --- a/media/cast/sender/video_sender.cc +++ b/media/cast/sender/video_sender.cc
@@ -20,6 +20,7 @@ #include "media/cast/net/cast_transport_config.h" #include "media/cast/sender/openscreen_frame_sender.h" #include "media/cast/sender/performance_metrics_overlay.h" +#include "third_party/openscreen/src/cast/streaming/encoded_frame.h" #include "third_party/openscreen/src/cast/streaming/sender.h" namespace media::cast { @@ -366,7 +367,8 @@ // this can misguide the producer of the input video frames. VideoCaptureFeedback feedback; feedback.resource_utilization = - encoded_frame->dependency == EncodedFrame::KEY + encoded_frame->dependency == + openscreen::cast::EncodedFrame::Dependency::kKeyFrame ? std::min(1.0, attenuated_utilization) : attenuated_utilization; if (feedback_cb_)
diff --git a/media/cast/test/receiver/audio_decoder_unittest.cc b/media/cast/test/receiver/audio_decoder_unittest.cc index 6a5a6a21..122a386d 100644 --- a/media/cast/test/receiver/audio_decoder_unittest.cc +++ b/media/cast/test/receiver/audio_decoder_unittest.cc
@@ -21,6 +21,7 @@ #include "media/cast/test/utility/audio_utility.h" #include "media/cast/test/utility/standalone_cast_environment.h" #include "testing/gtest/include/gtest/gtest.h" +#include "third_party/openscreen/src/cast/streaming/encoded_frame.h" #include "third_party/opus/src/include/opus.h" namespace media { @@ -84,7 +85,8 @@ void FeedMoreAudio(base::TimeDelta duration, int num_dropped_frames) { // Prepare a simulated EncodedFrame to feed into the AudioDecoder. std::unique_ptr<EncodedFrame> encoded_frame(new EncodedFrame()); - encoded_frame->dependency = EncodedFrame::KEY; + encoded_frame->dependency = + openscreen::cast::EncodedFrame::Dependency::kKeyFrame; encoded_frame->frame_id = last_frame_id_ + 1 + num_dropped_frames; encoded_frame->referenced_frame_id = encoded_frame->frame_id; last_frame_id_ = encoded_frame->frame_id;
diff --git a/media/cast/test/receiver/frame_buffer.cc b/media/cast/test/receiver/frame_buffer.cc index b9720e9e2..755ad54 100644 --- a/media/cast/test/receiver/frame_buffer.cc +++ b/media/cast/test/receiver/frame_buffer.cc
@@ -6,6 +6,9 @@ #include "base/check_op.h" #include "media/cast/common/encoded_frame.h" +#include "third_party/openscreen/src/cast/streaming/encoded_frame.h" + +using Dependency = openscreen::cast::EncodedFrame::Dependency; namespace media { namespace cast { @@ -68,12 +71,13 @@ return false; // Frame is complete -> construct. - if (is_key_frame_) - frame->dependency = EncodedFrame::KEY; - else if (frame_id_ == last_referenced_frame_id_) - frame->dependency = EncodedFrame::INDEPENDENT; - else - frame->dependency = EncodedFrame::DEPENDENT; + if (is_key_frame_) { + frame->dependency = Dependency::kKeyFrame; + } else if (frame_id_ == last_referenced_frame_id_) { + frame->dependency = Dependency::kIndependent; + } else { + frame->dependency = Dependency::kDependent; + } frame->frame_id = frame_id_; frame->referenced_frame_id = last_referenced_frame_id_; frame->rtp_timestamp = rtp_timestamp_;
diff --git a/media/cast/test/receiver/frame_buffer_unittest.cc b/media/cast/test/receiver/frame_buffer_unittest.cc index 5a15db7..2ab9be3a 100644 --- a/media/cast/test/receiver/frame_buffer_unittest.cc +++ b/media/cast/test/receiver/frame_buffer_unittest.cc
@@ -8,6 +8,7 @@ #include "media/cast/net/cast_transport_defines.h" #include "media/cast/test/receiver/frame_buffer.h" #include "testing/gtest/include/gtest/gtest.h" +#include "third_party/openscreen/src/cast/streaming/encoded_frame.h" namespace media { namespace cast { @@ -39,7 +40,8 @@ buffer_.InsertPacket(&payload_[0], payload_.size(), rtp_header_); EncodedFrame frame; EXPECT_TRUE(buffer_.AssembleEncodedFrame(&frame)); - EXPECT_EQ(EncodedFrame::KEY, frame.dependency); + EXPECT_EQ(openscreen::cast::EncodedFrame::Dependency::kKeyFrame, + frame.dependency); EXPECT_EQ(FrameId::first() + 5, frame.frame_id); EXPECT_EQ(FrameId::first() + 5, frame.referenced_frame_id); EXPECT_EQ(3000u, frame.rtp_timestamp.lower_32_bits());
diff --git a/media/cast/test/receiver/framer_unittest.cc b/media/cast/test/receiver/framer_unittest.cc index b76da684..a9bae37 100644 --- a/media/cast/test/receiver/framer_unittest.cc +++ b/media/cast/test/receiver/framer_unittest.cc
@@ -10,6 +10,9 @@ #include "media/cast/test/mock_rtp_payload_feedback.h" #include "media/cast/test/receiver/framer.h" #include "testing/gtest/include/gtest/gtest.h" +#include "third_party/openscreen/src/cast/streaming/encoded_frame.h" + +using Dependency = openscreen::cast::EncodedFrame::Dependency; namespace media { namespace cast { @@ -66,7 +69,7 @@ EXPECT_TRUE(framer_.GetEncodedFrame(&frame, &next_frame, &multiple)); EXPECT_TRUE(next_frame); EXPECT_TRUE(multiple); - EXPECT_EQ(EncodedFrame::KEY, frame.dependency); + EXPECT_EQ(Dependency::kKeyFrame, frame.dependency); EXPECT_EQ(FrameId::first() + 1, frame.frame_id); EXPECT_EQ(FrameId::first() + 1, frame.referenced_frame_id); framer_.ReleaseFrame(frame.frame_id); @@ -89,7 +92,7 @@ EXPECT_TRUE(framer_.GetEncodedFrame(&frame, &next_frame, &multiple)); EXPECT_TRUE(next_frame); EXPECT_FALSE(multiple); - EXPECT_EQ(EncodedFrame::KEY, frame.dependency); + EXPECT_EQ(Dependency::kKeyFrame, frame.dependency); EXPECT_EQ(FrameId::first(), frame.frame_id); EXPECT_EQ(FrameId::first(), frame.referenced_frame_id); framer_.ReleaseFrame(frame.frame_id); @@ -149,7 +152,7 @@ EXPECT_TRUE(complete); EXPECT_FALSE(duplicate); EXPECT_TRUE(framer_.GetEncodedFrame(&frame, &next_frame, &multiple)); - EXPECT_EQ(EncodedFrame::KEY, frame.dependency); + EXPECT_EQ(Dependency::kKeyFrame, frame.dependency); EXPECT_FALSE(multiple); EXPECT_EQ(FrameId::first(), frame.referenced_frame_id); @@ -160,7 +163,7 @@ EXPECT_FALSE(complete); EXPECT_TRUE(duplicate); EXPECT_TRUE(framer_.GetEncodedFrame(&frame, &next_frame, &multiple)); - EXPECT_EQ(EncodedFrame::KEY, frame.dependency); + EXPECT_EQ(Dependency::kKeyFrame, frame.dependency); EXPECT_EQ(FrameId::first(), frame.frame_id); EXPECT_FALSE(multiple); EXPECT_EQ(FrameId::first(), frame.referenced_frame_id); @@ -194,7 +197,7 @@ EXPECT_TRUE(complete); EXPECT_FALSE(duplicate); EXPECT_TRUE(framer_.GetEncodedFrame(&frame, &next_frame, &multiple)); - EXPECT_EQ(EncodedFrame::DEPENDENT, frame.dependency); + EXPECT_EQ(Dependency::kDependent, frame.dependency); EXPECT_EQ(FrameId::first() + 1, frame.frame_id); EXPECT_EQ(FrameId::first(), frame.referenced_frame_id); EXPECT_FALSE(multiple); @@ -206,7 +209,7 @@ EXPECT_FALSE(complete); EXPECT_TRUE(duplicate); EXPECT_TRUE(framer_.GetEncodedFrame(&frame, &next_frame, &multiple)); - EXPECT_EQ(EncodedFrame::DEPENDENT, frame.dependency); + EXPECT_EQ(Dependency::kDependent, frame.dependency); EXPECT_EQ(FrameId::first() + 1, frame.frame_id); EXPECT_EQ(FrameId::first(), frame.referenced_frame_id); EXPECT_FALSE(multiple); @@ -229,7 +232,7 @@ EXPECT_TRUE(framer_.GetEncodedFrame(&frame, &next_frame, &multiple)); EXPECT_TRUE(next_frame); EXPECT_FALSE(multiple); - EXPECT_EQ(EncodedFrame::KEY, frame.dependency); + EXPECT_EQ(Dependency::kKeyFrame, frame.dependency); EXPECT_EQ(FrameId::first(), frame.frame_id); EXPECT_EQ(FrameId::first(), frame.referenced_frame_id); framer_.ReleaseFrame(frame.frame_id); @@ -313,7 +316,7 @@ rtp_header_.reference_frame_id = FrameId::first(); framer_.InsertPacket(&payload_[0], payload_.size(), rtp_header_, &duplicate); EXPECT_TRUE(framer_.GetEncodedFrame(&frame, &next_frame, &multiple)); - EXPECT_EQ(EncodedFrame::KEY, frame.dependency); + EXPECT_EQ(Dependency::kKeyFrame, frame.dependency); EXPECT_EQ(FrameId::first(), frame.frame_id); EXPECT_EQ(FrameId::first(), frame.referenced_frame_id); EXPECT_FALSE(multiple); @@ -321,14 +324,14 @@ EXPECT_TRUE(framer_.GetEncodedFrame(&frame, &next_frame, &multiple)); EXPECT_TRUE(next_frame); EXPECT_TRUE(multiple); - EXPECT_EQ(EncodedFrame::DEPENDENT, frame.dependency); + EXPECT_EQ(Dependency::kDependent, frame.dependency); EXPECT_EQ(FrameId::first() + 1, frame.frame_id); EXPECT_EQ(FrameId::first(), frame.referenced_frame_id); framer_.ReleaseFrame(frame.frame_id); EXPECT_TRUE(framer_.GetEncodedFrame(&frame, &next_frame, &multiple)); EXPECT_FALSE(next_frame); EXPECT_FALSE(multiple); - EXPECT_EQ(EncodedFrame::DEPENDENT, frame.dependency); + EXPECT_EQ(Dependency::kDependent, frame.dependency); EXPECT_EQ(FrameId::first() + 4, frame.frame_id); EXPECT_EQ(FrameId::first(), frame.referenced_frame_id); framer_.ReleaseFrame(frame.frame_id); @@ -345,7 +348,7 @@ EXPECT_TRUE(framer_.GetEncodedFrame(&frame, &next_frame, &multiple)); EXPECT_TRUE(next_frame); EXPECT_FALSE(multiple); - EXPECT_EQ(EncodedFrame::DEPENDENT, frame.dependency); + EXPECT_EQ(Dependency::kDependent, frame.dependency); EXPECT_EQ(FrameId::first() + 5, frame.frame_id); EXPECT_EQ(FrameId::first() + 4, frame.referenced_frame_id); } @@ -364,7 +367,7 @@ EXPECT_TRUE(framer_.GetEncodedFrame(&frame, &next_frame, &multiple)); EXPECT_TRUE(next_frame); EXPECT_FALSE(multiple); - EXPECT_EQ(EncodedFrame::KEY, frame.dependency); + EXPECT_EQ(Dependency::kKeyFrame, frame.dependency); EXPECT_EQ(FrameId::first() + 254, frame.frame_id); EXPECT_EQ(FrameId::first() + 254, frame.referenced_frame_id); framer_.ReleaseFrame(frame.frame_id); @@ -381,7 +384,7 @@ EXPECT_TRUE(framer_.GetEncodedFrame(&frame, &next_frame, &multiple)); EXPECT_TRUE(next_frame); EXPECT_TRUE(multiple); - EXPECT_EQ(EncodedFrame::KEY, frame.dependency); + EXPECT_EQ(Dependency::kKeyFrame, frame.dependency); EXPECT_EQ(FrameId::first() + 255, frame.frame_id); EXPECT_EQ(FrameId::first() + 255, frame.referenced_frame_id); framer_.ReleaseFrame(frame.frame_id); @@ -389,7 +392,7 @@ EXPECT_TRUE(framer_.GetEncodedFrame(&frame, &next_frame, &multiple)); EXPECT_TRUE(next_frame); EXPECT_FALSE(multiple); - EXPECT_EQ(EncodedFrame::KEY, frame.dependency); + EXPECT_EQ(Dependency::kKeyFrame, frame.dependency); EXPECT_EQ(FrameId::first() + 256, frame.frame_id); EXPECT_EQ(FrameId::first() + 256, frame.referenced_frame_id); framer_.ReleaseFrame(frame.frame_id); @@ -409,7 +412,7 @@ EXPECT_TRUE(framer_.GetEncodedFrame(&frame, &next_frame, &multiple)); EXPECT_TRUE(next_frame); EXPECT_FALSE(multiple); - EXPECT_EQ(EncodedFrame::KEY, frame.dependency); + EXPECT_EQ(Dependency::kKeyFrame, frame.dependency); EXPECT_EQ(FrameId::first() + 253, frame.frame_id); EXPECT_EQ(FrameId::first() + 253, frame.referenced_frame_id); framer_.ReleaseFrame(frame.frame_id); @@ -426,14 +429,14 @@ EXPECT_TRUE(framer_.GetEncodedFrame(&frame, &next_frame, &multiple)); EXPECT_FALSE(next_frame); EXPECT_TRUE(multiple); - EXPECT_EQ(EncodedFrame::KEY, frame.dependency); + EXPECT_EQ(Dependency::kKeyFrame, frame.dependency); EXPECT_EQ(FrameId::first() + 255, frame.frame_id); EXPECT_EQ(FrameId::first() + 255, frame.referenced_frame_id); framer_.ReleaseFrame(frame.frame_id); EXPECT_TRUE(framer_.GetEncodedFrame(&frame, &next_frame, &multiple)); EXPECT_TRUE(next_frame); EXPECT_FALSE(multiple); - EXPECT_EQ(EncodedFrame::KEY, frame.dependency); + EXPECT_EQ(Dependency::kKeyFrame, frame.dependency); EXPECT_EQ(FrameId::first() + 256, frame.frame_id); EXPECT_EQ(FrameId::first() + 256, frame.referenced_frame_id); framer_.ReleaseFrame(frame.frame_id);
diff --git a/media/cast/test/receiver/video_decoder_unittest.cc b/media/cast/test/receiver/video_decoder_unittest.cc index aee935de..2502a69 100644 --- a/media/cast/test/receiver/video_decoder_unittest.cc +++ b/media/cast/test/receiver/video_decoder_unittest.cc
@@ -22,6 +22,7 @@ #include "media/cast/test/utility/standalone_cast_environment.h" #include "media/cast/test/utility/video_utility.h" #include "testing/gtest/include/gtest/gtest.h" +#include "third_party/openscreen/src/cast/streaming/encoded_frame.h" namespace media { namespace cast { @@ -95,7 +96,8 @@ vp8_encoder_.Encode(video_frame, reference_time, encoded_frame.get()); // Rewrite frame IDs for testing purposes. encoded_frame->frame_id = last_frame_id_ + 1 + num_dropped_frames; - if (encoded_frame->dependency == EncodedFrame::KEY) + if (encoded_frame->dependency == + openscreen::cast::EncodedFrame::Dependency::kKeyFrame) encoded_frame->referenced_frame_id = encoded_frame->frame_id; else encoded_frame->referenced_frame_id = encoded_frame->frame_id - 1;
diff --git a/media/device_monitors/device_monitor_mac.mm b/media/device_monitors/device_monitor_mac.mm index ca8ac08..d704965 100644 --- a/media/device_monitors/device_monitor_mac.mm +++ b/media/device_monitors/device_monitor_mac.mm
@@ -5,13 +5,16 @@ #include "media/device_monitors/device_monitor_mac.h" #include <AVFoundation/AVFoundation.h> + #include <set> #include "base/bind.h" #include "base/callback_helpers.h" +#include "base/containers/contains.h" #include "base/logging.h" #include "base/mac/scoped_nsobject.h" #include "base/memory/raw_ptr.h" +#include "base/ranges/algorithm.h" #include "base/task/task_runner_util.h" #include "base/threading/thread_checker.h" @@ -92,7 +95,7 @@ std::vector<DeviceInfo>::const_iterator it; for (it = snapshot_devices.begin(); it != snapshot_devices.end(); ++it) { std::vector<DeviceInfo>::iterator cached_devices_iterator = - std::find(cached_devices_.begin(), cached_devices_.end(), *it); + base::ranges::find(cached_devices_, *it); if (cached_devices_iterator == cached_devices_.end()) { video_device_added |= ((it->type() == DeviceInfo::kVideo) || (it->type() == DeviceInfo::kMuxed)); @@ -374,8 +377,7 @@ DCHECK(_mainThreadChecker.CalledOnValidThread()); DCHECK(device != nil); // Skip this device if there are already observers connected to it. - if (std::find(_monitoredDevices.begin(), _monitoredDevices.end(), device) != - _monitoredDevices.end()) { + if (base::Contains(_monitoredDevices, device)) { return; } [device addObserver:self @@ -394,7 +396,7 @@ DCHECK(device != nil); std::set<base::scoped_nsobject<AVCaptureDevice>>::iterator found = - std::find(_monitoredDevices.begin(), _monitoredDevices.end(), device); + base::ranges::find(_monitoredDevices, device); DCHECK(found != _monitoredDevices.end()); [self removeObservers:*found]; _monitoredDevices.erase(found);
diff --git a/media/filters/offloading_video_decoder.cc b/media/filters/offloading_video_decoder.cc index aebc0e4..609e9cb7 100644 --- a/media/filters/offloading_video_decoder.cc +++ b/media/filters/offloading_video_decoder.cc
@@ -8,6 +8,7 @@ #include "base/bind.h" #include "base/callback_helpers.h" +#include "base/containers/contains.h" #include "base/synchronization/atomic_flag.h" #include "base/task/sequenced_task_runner.h" #include "base/task/thread_pool.h" @@ -94,8 +95,7 @@ const bool disable_offloading = config.is_encrypted() || config.coded_size().width() < min_offloading_width_ || - std::find(supported_codecs_.begin(), supported_codecs_.end(), - config.codec()) == supported_codecs_.end(); + !base::Contains(supported_codecs_, config.codec()); if (initialized_) { initialized_ = false;
diff --git a/media/filters/source_buffer_state.cc b/media/filters/source_buffer_state.cc index d101d58..a3c279c 100644 --- a/media/filters/source_buffer_state.cc +++ b/media/filters/source_buffer_state.cc
@@ -8,6 +8,7 @@ #include "base/callback_helpers.h" #include "base/command_line.h" +#include "base/ranges/algorithm.h" #include "base/strings/string_number_conversions.h" #include "build/build_config.h" #include "build/chromeos_buildflags.h" @@ -662,8 +663,8 @@ << " config: " << audio_config.AsHumanReadableString(); DCHECK(audio_config.IsValidConfig()); - const auto& it = std::find(expected_acodecs.begin(), - expected_acodecs.end(), audio_config.codec()); + const auto& it = + base::ranges::find(expected_acodecs, audio_config.codec()); if (it == expected_acodecs.end()) { MEDIA_LOG(ERROR, media_log_) << "Audio stream codec " << GetCodecName(audio_config.codec()) @@ -730,8 +731,8 @@ } #endif // BUILDFLAG(ENABLE_PLATFORM_ENCRYPTED_DOLBY_VISION) - const auto& it = std::find(expected_vcodecs.begin(), - expected_vcodecs.end(), video_config.codec()); + const auto& it = + base::ranges::find(expected_vcodecs, video_config.codec()); if (it == expected_vcodecs.end()) { MEDIA_LOG(ERROR, media_log_) << "Video stream codec " << GetCodecName(video_config.codec())
diff --git a/media/fuchsia/audio/fake_audio_capturer.cc b/media/fuchsia/audio/fake_audio_capturer.cc index 46c6ce3d..b4fe16a 100644 --- a/media/fuchsia/audio/fake_audio_capturer.cc +++ b/media/fuchsia/audio/fake_audio_capturer.cc
@@ -10,6 +10,7 @@ #include "base/fuchsia/fuchsia_logging.h" #include "base/logging.h" #include "base/notreached.h" +#include "base/ranges/algorithm.h" #include "base/threading/thread_task_runner_handle.h" #include "testing/gtest/include/gtest/gtest.h" @@ -43,7 +44,7 @@ EXPECT_TRUE(is_active_); // Find unused packet. - auto it = std::find(packets_usage_.begin(), packets_usage_.end(), false); + auto it = base::ranges::find(packets_usage_, false); // Currently tests don't try to send more than 2 packets and the buffer // always will have space for at least 2 packets.
diff --git a/media/gpu/android/codec_allocator.cc b/media/gpu/android/codec_allocator.cc index d915a4a..07d4477 100644 --- a/media/gpu/android/codec_allocator.cc +++ b/media/gpu/android/codec_allocator.cc
@@ -6,12 +6,12 @@ #include <stddef.h> -#include <algorithm> #include <memory> #include "base/callback_helpers.h" #include "base/logging.h" #include "base/no_destructor.h" +#include "base/ranges/algorithm.h" #include "base/task/task_runner_util.h" #include "base/task/task_traits.h" #include "base/task/thread_pool.h" @@ -215,8 +215,8 @@ void CodecAllocator::CompletePendingOperation(base::TimeTicks start_time) { // Note: This intentionally only erases the first instance, since there may be // multiple instances of the same value. - pending_operations_.erase(std::find(pending_operations_.begin(), - pending_operations_.end(), start_time)); + pending_operations_.erase( + base::ranges::find(pending_operations_, start_time)); } } // namespace media
diff --git a/media/gpu/android/maybe_render_early_manager.cc b/media/gpu/android/maybe_render_early_manager.cc index c11593db..a5223254 100644 --- a/media/gpu/android/maybe_render_early_manager.cc +++ b/media/gpu/android/maybe_render_early_manager.cc
@@ -4,8 +4,7 @@ #include "media/gpu/android/maybe_render_early_manager.h" -#include <algorithm> - +#include "base/containers/contains.h" #include "base/containers/cxx20_erase.h" #include "base/memory/weak_ptr.h" #include "base/threading/sequence_bound.h" @@ -35,8 +34,7 @@ codec_image_holder->codec_image_raw()->AddUnusedCB(base::BindOnce( &GpuMaybeRenderEarlyImpl::OnImageUnused, weak_factory_.GetWeakPtr())); - DCHECK(std::find(images_.begin(), images_.end(), - codec_image_holder->codec_image_raw()) == images_.end()); + DCHECK(!base::Contains(images_, codec_image_holder->codec_image_raw())); images_.push_back(codec_image_holder->codec_image_raw()); // Add |image| to our current image group. This makes sure that any overlay @@ -53,7 +51,7 @@ private: void OnImageUnused(CodecImage* image) { // |image| is no longer used, so try to render a new image speculatively. - DCHECK(std::find(images_.begin(), images_.end(), image) != images_.end()); + DCHECK(base::Contains(images_, image)); // Remember that |image_group_| might not be the same one that |image| // belongs to. base::Erase(images_, image);
diff --git a/media/gpu/chromeos/generic_dmabuf_video_frame_mapper.cc b/media/gpu/chromeos/generic_dmabuf_video_frame_mapper.cc index 7448b286..1883444 100644 --- a/media/gpu/chromeos/generic_dmabuf_video_frame_mapper.cc +++ b/media/gpu/chromeos/generic_dmabuf_video_frame_mapper.cc
@@ -6,11 +6,11 @@ #include <sys/mman.h> -#include <algorithm> #include <utility> #include <vector> #include "base/bind.h" +#include "base/containers/contains.h" #include "base/memory/ptr_util.h" #include "media/gpu/macros.h" @@ -83,8 +83,7 @@ // Compressed format. PIXEL_FORMAT_MJPEG, }; - return std::find(std::cbegin(supported_formats), std::cend(supported_formats), - format) != std::cend(supported_formats); + return base::Contains(supported_formats, format); } } // namespace
diff --git a/media/gpu/mac/vt_video_encode_accelerator_mac.cc b/media/gpu/mac/vt_video_encode_accelerator_mac.cc index 678971b..1020df4 100644 --- a/media/gpu/mac/vt_video_encode_accelerator_mac.cc +++ b/media/gpu/mac/vt_video_encode_accelerator_mac.cc
@@ -6,11 +6,13 @@ #include <memory> +#include "base/containers/contains.h" #include "base/logging.h" #include "base/mac/foundation_util.h" #include "base/mac/mac_logging.h" #include "base/memory/shared_memory_mapping.h" #include "base/memory/unsafe_shared_memory_region.h" +#include "base/numerics/safe_conversions.h" #include "base/task/thread_pool.h" #include "base/threading/thread_task_runner_handle.h" #include "base/time/time.h" @@ -60,19 +62,60 @@ return kVTProfileLevel_H264_Baseline_AutoLevel; } +base::ScopedCFTypeRef<CFArrayRef> CreateRateLimitArray(const Bitrate& bitrate) { + std::vector<CFNumberRef> limits; + switch (bitrate.mode()) { + case Bitrate::Mode::kConstant: { + // CBR should be enforces with granularity of a second. + float target_interval = 1.0; + int32_t target_bitrate = bitrate.target_bps() / kBitsPerByte; + + limits.push_back( + CFNumberCreate(nullptr, kCFNumberSInt32Type, &target_bitrate)); + limits.push_back( + CFNumberCreate(nullptr, kCFNumberFloat32Type, &target_interval)); + break; + } + case Bitrate::Mode::kVariable: { + // 5 seconds should be an okay interval for VBR to enforce the long-term + // limit. + float avg_interval = 5.0; + int32_t avg_bitrate = base::saturated_cast<int32_t>( + bitrate.target_bps() / kBitsPerByte * avg_interval); + + // And the peak bitrate is measured per-second in a way similar to CBR. + float peak_interval = 1.0; + int32_t peak_bitrate = bitrate.peak_bps() / kBitsPerByte; + limits.push_back( + CFNumberCreate(nullptr, kCFNumberSInt32Type, &peak_bitrate)); + limits.push_back( + CFNumberCreate(nullptr, kCFNumberFloat32Type, &peak_interval)); + limits.push_back( + CFNumberCreate(nullptr, kCFNumberSInt32Type, &avg_bitrate)); + limits.push_back( + CFNumberCreate(nullptr, kCFNumberFloat32Type, &avg_interval)); + break; + } + + default: + NOTREACHED(); + } + + base::ScopedCFTypeRef<CFArrayRef> result(CFArrayCreate( + kCFAllocatorDefault, reinterpret_cast<const void**>(limits.data()), + limits.size(), &kCFTypeArrayCallBacks)); + for (auto* number : limits) + CFRelease(number); + return result; +} + } // namespace struct VTVideoEncodeAccelerator::InProgressFrameEncode { - InProgressFrameEncode() = delete; - - InProgressFrameEncode(base::TimeDelta rtp_timestamp, base::TimeTicks ref_time) - : timestamp(rtp_timestamp), reference_time(ref_time) {} - - InProgressFrameEncode(const InProgressFrameEncode&) = delete; - InProgressFrameEncode& operator=(const InProgressFrameEncode&) = delete; + InProgressFrameEncode(base::TimeDelta rtp_timestamp) + : timestamp(rtp_timestamp) {} const base::TimeDelta timestamp; - const base::TimeTicks reference_time; }; struct VTVideoEncodeAccelerator::EncodeOutput { @@ -179,8 +222,7 @@ << VideoPixelFormatToString(config.input_format); return false; } - if (std::find(std::begin(kSupportedProfiles), std::end(kSupportedProfiles), - config.output_profile) == std::end(kSupportedProfiles)) { + if (!base::Contains(kSupportedProfiles, config.output_profile)) { MEDIA_LOG(ERROR, media_log.get()) << "Output profile not supported= " << GetProfileName(config.output_profile); return false; @@ -318,14 +360,12 @@ kVTEncodeFrameOptionKey_ForceKeyFrame, force_keyframe ? kCFBooleanTrue : kCFBooleanFalse); - base::TimeTicks ref_time = - frame->metadata().reference_time.value_or(base::TimeTicks::Now()); auto timestamp_cm = CMTimeMake(frame->timestamp().InMicroseconds(), USEC_PER_SEC); // Wrap information we'll need after the frame is encoded in a heap object. // We'll get the pointer back from the VideoToolbox completion callback. std::unique_ptr<InProgressFrameEncode> request( - new InProgressFrameEncode(frame->timestamp(), ref_time)); + new InProgressFrameEncode(frame->timestamp())); if (bitrate_.mode() == Bitrate::Mode::kConstant) { // In CBR mode, we adjust bitrate before every encode based on past history @@ -396,7 +436,7 @@ bitrate_ = bitrate; } -void VTVideoEncodeAccelerator::SetAdjustedConstantBitrate(int32_t bitrate) { +void VTVideoEncodeAccelerator::SetAdjustedConstantBitrate(uint32_t bitrate) { DCHECK(encoder_thread_task_runner_->BelongsToCurrentThread()); if (bitrate == encoder_set_bitrate_) @@ -406,11 +446,11 @@ video_toolbox::SessionPropertySetter session_property_setter( compression_session_); [[maybe_unused]] bool rv = session_property_setter.Set( - kVTCompressionPropertyKey_AverageBitRate, encoder_set_bitrate_); + kVTCompressionPropertyKey_AverageBitRate, + base::saturated_cast<int32_t>(encoder_set_bitrate_)); rv &= session_property_setter.Set( kVTCompressionPropertyKey_DataRateLimits, - video_toolbox::ArrayWithIntegerAndFloat( - encoder_set_bitrate_ / kBitsPerByte, 1.0f)); + CreateRateLimitArray(Bitrate::ConstantBitrate(bitrate))); DLOG_IF(ERROR, !rv) << "Couldn't change bitrate parameters of encode session."; } @@ -424,10 +464,8 @@ [[maybe_unused]] bool rv = session_property_setter.Set(kVTCompressionPropertyKey_AverageBitRate, static_cast<int32_t>(bitrate.target_bps())); - rv &= - session_property_setter.Set(kVTCompressionPropertyKey_DataRateLimits, - video_toolbox::ArrayWithIntegerAndFloat( - bitrate.peak_bps() / kBitsPerByte, 1.0f)); + rv &= session_property_setter.Set(kVTCompressionPropertyKey_DataRateLimits, + CreateRateLimitArray(bitrate)); DLOG_IF(ERROR, !rv) << "Couldn't change bitrate parameters of encode session."; }
diff --git a/media/gpu/mac/vt_video_encode_accelerator_mac.h b/media/gpu/mac/vt_video_encode_accelerator_mac.h index 533b40d..b1fd86a 100644 --- a/media/gpu/mac/vt_video_encode_accelerator_mac.h +++ b/media/gpu/mac/vt_video_encode_accelerator_mac.h
@@ -70,7 +70,7 @@ void DestroyTask(); // Helper functions to set bitrate. - void SetAdjustedConstantBitrate(int32_t bitrate); + void SetAdjustedConstantBitrate(uint32_t bitrate); void SetVariableBitrate(const Bitrate& bitrate); // Helper function to notify the client of an error on |client_task_runner_|. @@ -125,8 +125,8 @@ // bitrate mode no adjustments are needed. // Bitrate adjuster used to fix VideoToolbox's inconsistent bitrate issues. webrtc::BitrateAdjuster bitrate_adjuster_; - int32_t target_bitrate_ = 0; // User for CBR only - int32_t encoder_set_bitrate_ = 0; // User for CBR only + uint32_t target_bitrate_ = 0; // User for CBR only + uint32_t encoder_set_bitrate_ = 0; // User for CBR only // If True, the encoder fails initialization if setting of session's property // kVTCompressionPropertyKey_MaxFrameDelayCount returns an error.
diff --git a/media/gpu/test/video_encoder/bitstream_file_writer.cc b/media/gpu/test/video_encoder/bitstream_file_writer.cc index c33e546e..dd61384 100644 --- a/media/gpu/test/video_encoder/bitstream_file_writer.cc +++ b/media/gpu/test/video_encoder/bitstream_file_writer.cc
@@ -8,6 +8,7 @@ #include "base/files/file_util.h" #include "base/logging.h" #include "base/memory/ptr_util.h" +#include "base/ranges/algorithm.h" #include "media/gpu/test/video_test_helpers.h" #include "testing/gtest/include/gtest/gtest.h" @@ -111,9 +112,8 @@ CHECK_LE(spatial_layer_resolutions.size(), spatial_layer_resolutions_.size()); original_spatial_indices_.resize(spatial_layer_resolutions.size()); - auto begin = std::find(spatial_layer_resolutions_.begin(), - spatial_layer_resolutions_.end(), - spatial_layer_resolutions.front()); + auto begin = base::ranges::find(spatial_layer_resolutions_, + spatial_layer_resolutions.front()); CHECK(begin != spatial_layer_resolutions_.end()); uint8_t sid_offset = begin - spatial_layer_resolutions_.begin(); for (size_t i = 0; i < spatial_layer_resolutions.size(); ++i) {
diff --git a/media/gpu/test/video_encoder/bitstream_validator.cc b/media/gpu/test/video_encoder/bitstream_validator.cc index e479bb2..6391053c 100644 --- a/media/gpu/test/video_encoder/bitstream_validator.cc +++ b/media/gpu/test/video_encoder/bitstream_validator.cc
@@ -10,6 +10,7 @@ #include "base/callback_helpers.h" #include "base/logging.h" #include "base/memory/ptr_util.h" +#include "base/ranges/algorithm.h" #include "base/synchronization/waitable_event.h" #include "media/base/decoder_buffer.h" #include "media/base/media_log.h" @@ -159,9 +160,8 @@ CHECK_LE(spatial_layer_resolutions.size(), spatial_layer_resolutions_.size()); original_spatial_indices_.resize(spatial_layer_resolutions.size()); - auto begin = std::find(spatial_layer_resolutions_.begin(), - spatial_layer_resolutions_.end(), - spatial_layer_resolutions.front()); + auto begin = base::ranges::find(spatial_layer_resolutions_, + spatial_layer_resolutions.front()); CHECK(begin != spatial_layer_resolutions_.end()); uint8_t sid_offset = begin - spatial_layer_resolutions_.begin(); for (size_t i = 0; i < spatial_layer_resolutions.size(); ++i) {
diff --git a/media/gpu/v4l2/generic_v4l2_device.cc b/media/gpu/v4l2/generic_v4l2_device.cc index b1c42a5..fa9a95b 100644 --- a/media/gpu/v4l2/generic_v4l2_device.cc +++ b/media/gpu/v4l2/generic_v4l2_device.cc
@@ -15,9 +15,9 @@ #include <sys/ioctl.h> #include <sys/mman.h> -#include <algorithm> #include <memory> +#include "base/containers/contains.h" #include "base/files/scoped_file.h" #include "base/posix/eintr_wrapper.h" #include "base/strings/stringprintf.h" @@ -226,11 +226,8 @@ #endif }; - return std::find( - kEGLImageDrmFmtsSupported, - kEGLImageDrmFmtsSupported + std::size(kEGLImageDrmFmtsSupported), - V4L2PixFmtToDrmFormat(fourcc.ToV4L2PixFmt())) != - kEGLImageDrmFmtsSupported + std::size(kEGLImageDrmFmtsSupported); + return base::Contains(kEGLImageDrmFmtsSupported, + V4L2PixFmtToDrmFormat(fourcc.ToV4L2PixFmt())); } EGLImageKHR GenericV4L2Device::CreateEGLImage( @@ -544,8 +541,7 @@ const Devices& devices = GetDevicesForType(type); for (const auto& device : devices) { - if (std::find(device.second.begin(), device.second.end(), pixfmt) != - device.second.end()) + if (base::Contains(device.second, pixfmt)) return device.first; }
diff --git a/media/gpu/v4l2/v4l2_vda_helpers.cc b/media/gpu/v4l2/v4l2_vda_helpers.cc index f8cbde5..baaca9c 100644 --- a/media/gpu/v4l2/v4l2_vda_helpers.cc +++ b/media/gpu/v4l2/v4l2_vda_helpers.cc
@@ -5,6 +5,8 @@ #include "media/gpu/v4l2/v4l2_vda_helpers.h" #include "base/bind.h" +#include "base/containers/contains.h" +#include "base/ranges/algorithm.h" #include "media/base/color_plane_layout.h" #include "media/base/video_codecs.h" #include "media/gpu/chromeos/fourcc.h" @@ -24,9 +26,7 @@ memset(&fmtdesc, 0, sizeof(fmtdesc)); fmtdesc.type = V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE; while (vda_device->Ioctl(VIDIOC_ENUM_FMT, &fmtdesc) == 0) { - if (std::find(processor_input_formats.begin(), - processor_input_formats.end(), - fmtdesc.pixelformat) != processor_input_formats.end()) { + if (base::Contains(processor_input_formats, fmtdesc.pixelformat)) { DVLOGF(3) << "Image processor input format=" << fmtdesc.description; return Fourcc::FromV4L2PixFmt(fmtdesc.pixelformat); } @@ -41,10 +41,8 @@ static constexpr uint32_t kPreferredFormats[] = {V4L2_PIX_FMT_NV12, V4L2_PIX_FMT_YVU420}; auto preferred_formats_first = [](uint32_t a, uint32_t b) -> bool { - auto* iter_a = std::find(std::begin(kPreferredFormats), - std::end(kPreferredFormats), a); - auto* iter_b = std::find(std::begin(kPreferredFormats), - std::end(kPreferredFormats), b); + auto* iter_a = base::ranges::find(kPreferredFormats, a); + auto* iter_b = base::ranges::find(kPreferredFormats, b); return iter_a < iter_b; };
diff --git a/media/gpu/v4l2/v4l2_video_decoder_backend_stateful.cc b/media/gpu/v4l2/v4l2_video_decoder_backend_stateful.cc index 127a78b3..b18d655 100644 --- a/media/gpu/v4l2/v4l2_video_decoder_backend_stateful.cc +++ b/media/gpu/v4l2/v4l2_video_decoder_backend_stateful.cc
@@ -3,8 +3,8 @@ // found in the LICENSE file. #include "media/gpu/v4l2/v4l2_video_decoder_backend_stateful.h" -#include <cstddef> +#include <cstddef> #include <memory> #include <tuple> #include <utility> @@ -743,8 +743,7 @@ for (const auto& entry : profiles) supported_profiles_.push_back(entry.profile); } - return std::find(supported_profiles_.begin(), supported_profiles_.end(), - profile) != supported_profiles_.end(); + return base::Contains(supported_profiles_, profile); } bool V4L2StatefulVideoDecoderBackend::StopInputQueueOnResChange() const {
diff --git a/media/gpu/windows/mf_audio_encoder.cc b/media/gpu/windows/mf_audio_encoder.cc index ad9dec3..049cef5 100644 --- a/media/gpu/windows/mf_audio_encoder.cc +++ b/media/gpu/windows/mf_audio_encoder.cc
@@ -12,9 +12,11 @@ #include <string.h> #include <wmcodecdsp.h> #include <wrl/client.h> + #include <utility> #include "base/bind.h" +#include "base/containers/contains.h" #include "base/logging.h" #include "base/memory/weak_ptr.h" #include "base/task/single_thread_task_runner.h" @@ -78,8 +80,7 @@ if (options.codec != AudioCodec::kAAC) return EncoderStatus::Codes::kEncoderUnsupportedCodec; - if (std::find(kSupportedSampleRates.begin(), kSupportedSampleRates.end(), - options.sample_rate) == kSupportedSampleRates.end()) { + if (!base::Contains(kSupportedSampleRates, options.sample_rate)) { return EncoderStatus::Codes::kEncoderUnsupportedConfig; } @@ -102,8 +103,7 @@ } *bitrate = options.bitrate.value_or(kDefaultBitrate); - if (std::find(kSupportedBitrates.begin(), kSupportedBitrates.end(), - *bitrate) == kSupportedBitrates.end()) { + if (!base::Contains(kSupportedBitrates, *bitrate)) { return EncoderStatus::Codes::kEncoderUnsupportedConfig; }
diff --git a/media/midi/midi_manager_mac.cc b/media/midi/midi_manager_mac.cc index 7077358..45c7893d 100644 --- a/media/midi/midi_manager_mac.cc +++ b/media/midi/midi_manager_mac.cc
@@ -13,6 +13,7 @@ #include <CoreAudio/HostTime.h> #include "base/bind.h" +#include "base/ranges/algorithm.h" #include "base/strings/string_number_conversions.h" #include "base/strings/sys_string_conversions.h" #include "base/task/single_thread_task_runner.h" @@ -234,7 +235,7 @@ static_cast<MIDIEndpointRef>(notification->child); if (notification->childType == kMIDIObjectType_Source) { // Attaching device is an input device. - auto it = std::find(sources_.begin(), sources_.end(), endpoint); + auto it = base::ranges::find(sources_, endpoint); if (it == sources_.end()) { mojom::PortInfo info = GetPortInfoFromEndpoint(endpoint); // If the device disappears before finishing queries, mojom::PortInfo @@ -252,7 +253,7 @@ } } else if (notification->childType == kMIDIObjectType_Destination) { // Attaching device is an output device. - auto it = std::find(destinations_.begin(), destinations_.end(), endpoint); + auto it = base::ranges::find(destinations_, endpoint); if (it == destinations_.end()) { mojom::PortInfo info = GetPortInfoFromEndpoint(endpoint); // Skip cases that queries are not finished correctly. @@ -272,12 +273,12 @@ static_cast<MIDIEndpointRef>(notification->child); if (notification->childType == kMIDIObjectType_Source) { // Detaching device is an input device. - auto it = std::find(sources_.begin(), sources_.end(), endpoint); + auto it = base::ranges::find(sources_, endpoint); if (it != sources_.end()) SetInputPortState(it - sources_.begin(), PortState::DISCONNECTED); } else if (notification->childType == kMIDIObjectType_Destination) { // Detaching device is an output device. - auto it = std::find(destinations_.begin(), destinations_.end(), endpoint); + auto it = base::ranges::find(destinations_, endpoint); if (it != destinations_.end()) SetOutputPortState(it - destinations_.begin(), PortState::DISCONNECTED); }
diff --git a/media/mojo/services/watch_time_recorder_unittest.cc b/media/mojo/services/watch_time_recorder_unittest.cc index 0186530..d0388c6e 100644 --- a/media/mojo/services/watch_time_recorder_unittest.cc +++ b/media/mojo/services/watch_time_recorder_unittest.cc
@@ -5,12 +5,14 @@ #include "media/mojo/services/watch_time_recorder.h" #include <stddef.h> + #include <memory> #include <utility> #include <vector> #include "base/bind.h" #include "base/callback_helpers.h" +#include "base/containers/contains.h" #include "base/hash/hash.h" #include "base/run_loop.h" #include "base/strings/string_number_conversions.h" @@ -110,12 +112,11 @@ ConvertWatchTimeKeyToStringForUma(static_cast<WatchTimeKey>(i)); if (test_key.empty()) continue; - auto it = std::find(keys.begin(), keys.end(), test_key); - if (it == keys.end()) { - histogram_tester_->ExpectTotalCount(test_key, 0); - } else { + if (base::Contains(keys, test_key)) { histogram_tester_->ExpectUniqueSample(test_key, value.InMilliseconds(), 1); + } else { + histogram_tester_->ExpectTotalCount(test_key, 0); } } } @@ -124,11 +125,10 @@ const std::vector<base::StringPiece>& keys, int64_t value) { for (auto key : full_key_list) { - auto it = std::find(keys.begin(), keys.end(), key); - if (it == keys.end()) - histogram_tester_->ExpectTotalCount(key, 0); - else + if (base::Contains(keys, key)) histogram_tester_->ExpectUniqueSample(key, value, 1); + else + histogram_tester_->ExpectTotalCount(key, 0); } }
diff --git a/media/remoting/renderer_controller.cc b/media/remoting/renderer_controller.cc index 375d967..5cd2df7 100644 --- a/media/remoting/renderer_controller.cc +++ b/media/remoting/renderer_controller.cc
@@ -5,6 +5,7 @@ #include "media/remoting/renderer_controller.h" #include "base/bind.h" +#include "base/containers/contains.h" #include "base/logging.h" #include "base/time/default_tick_clock.h" #include "base/time/tick_clock.h" @@ -616,23 +617,17 @@ bool RendererController::HasVideoCapability( mojom::RemotingSinkVideoCapability capability) const { - return std::find(std::begin(sink_metadata_.video_capabilities), - std::end(sink_metadata_.video_capabilities), - capability) != std::end(sink_metadata_.video_capabilities); + return base::Contains(sink_metadata_.video_capabilities, capability); } bool RendererController::HasAudioCapability( mojom::RemotingSinkAudioCapability capability) const { - return std::find(std::begin(sink_metadata_.audio_capabilities), - std::end(sink_metadata_.audio_capabilities), - capability) != std::end(sink_metadata_.audio_capabilities); + return base::Contains(sink_metadata_.audio_capabilities, capability); } bool RendererController::HasFeatureCapability( RemotingSinkFeature capability) const { - return std::find(std::begin(sink_metadata_.features), - std::end(sink_metadata_.features), - capability) != std::end(sink_metadata_.features); + return base::Contains(sink_metadata_.features, capability); } bool RendererController::SinkSupportsRemoting() const {
diff --git a/media/video/gpu_memory_buffer_video_frame_pool.cc b/media/video/gpu_memory_buffer_video_frame_pool.cc index 18fbfe1..40436e5 100644 --- a/media/video/gpu_memory_buffer_video_frame_pool.cc +++ b/media/video/gpu_memory_buffer_video_frame_pool.cc
@@ -9,7 +9,6 @@ #include <stddef.h> #include <stdint.h> -#include <algorithm> #include <list> #include <memory> #include <utility> @@ -26,6 +25,7 @@ #include "base/memory/raw_ptr.h" #include "base/metrics/histogram_functions.h" #include "base/metrics/histogram_macros.h" +#include "base/ranges/algorithm.h" #include "base/strings/stringprintf.h" #include "base/sys_byteorder.h" #include "base/time/default_tick_clock.h" @@ -1090,8 +1090,7 @@ // Drop the resources if there was an error with them. If we're not in // shutdown we also need to remove the pool entry for them. if (!in_shutdown_) { - auto it = std::find(resources_pool_.begin(), resources_pool_.end(), - frame_resources); + auto it = base::ranges::find(resources_pool_, frame_resources); DCHECK(it != resources_pool_.end()); resources_pool_.erase(it); }
diff --git a/net/third_party/quiche/BUILD.gn b/net/third_party/quiche/BUILD.gn index b0ff2d9..956a5e0 100644 --- a/net/third_party/quiche/BUILD.gn +++ b/net/third_party/quiche/BUILD.gn
@@ -783,15 +783,14 @@ "overrides/quiche_platform_impl/epoll_logging_impl.h", "overrides/quiche_platform_impl/epoll_thread_impl.h", "overrides/quiche_platform_impl/quiche_udp_socket_platform_impl.h", - "src/quiche/common/platform/api/quiche_stream_buffer_allocator.h", "src/quiche/common/platform/api/quiche_udp_socket_platform_api.h", "src/quiche/common/platform/default/quiche_platform_impl/quiche_stream_buffer_allocator_impl.h", "src/quiche/common/quiche_ip_address_family.cc", "src/quiche/common/quiche_ip_address_family.h", + "src/quiche/quic/core/io/event_loop_connecting_client_socket.cc", + "src/quiche/quic/core/io/event_loop_connecting_client_socket.h", "src/quiche/quic/core/io/event_loop_socket_factory.cc", "src/quiche/quic/core/io/event_loop_socket_factory.h", - "src/quiche/quic/core/io/event_loop_tcp_client_socket.cc", - "src/quiche/quic/core/io/event_loop_tcp_client_socket.h", "src/quiche/quic/core/io/quic_default_event_loop.cc", "src/quiche/quic/core/io/quic_default_event_loop.h", "src/quiche/quic/core/io/quic_poll_event_loop.cc",
diff --git a/sandbox/win/src/app_container.h b/sandbox/win/src/app_container.h index 1486027..962afbbc 100644 --- a/sandbox/win/src/app_container.h +++ b/sandbox/win/src/app_container.h
@@ -16,7 +16,7 @@ enum AppContainerType { kNone, kDerived, kProfile, kLowbox }; -class AppContainer { +class [[clang::lto_visibility_public]] AppContainer { public: // Increments the reference count of this object. The reference count must // be incremented if this interface is given to another component.
diff --git a/sandbox/win/src/crosscall_server.h b/sandbox/win/src/crosscall_server.h index e0821af..075f9c8 100644 --- a/sandbox/win/src/crosscall_server.h +++ b/sandbox/win/src/crosscall_server.h
@@ -137,7 +137,7 @@ // 2) When the IPC finally obtains a valid Dispatcher the IPC // implementation creates a CrossCallParamsEx from the raw IPC buffer. // 3) It calls the returned callback, with the IPC info and arguments. -class Dispatcher { +class [[clang::lto_visibility_public]] Dispatcher { public: // Called from the IPC implementation to handle a specific IPC message. typedef bool (Dispatcher::*CallbackGeneric)();
diff --git a/sandbox/win/src/resolver.h b/sandbox/win/src/resolver.h index 1485d56..53a744ad 100644 --- a/sandbox/win/src/resolver.h +++ b/sandbox/win/src/resolver.h
@@ -19,7 +19,7 @@ // A resolver is the object in charge of performing the actual interception of // a function. There should be a concrete implementation of a resolver roughly // per type of interception. -class ResolverThunk { +class [[clang::lto_visibility_public]] ResolverThunk { public: ResolverThunk() {}
diff --git a/sandbox/win/src/service_resolver.h b/sandbox/win/src/service_resolver.h index d1088223..d385810f 100644 --- a/sandbox/win/src/service_resolver.h +++ b/sandbox/win/src/service_resolver.h
@@ -14,7 +14,8 @@ // This is the concrete resolver used to perform service-call type functions // inside ntdll.dll. -class ServiceResolverThunk : public ResolverThunk { +class [[clang::lto_visibility_public]] ServiceResolverThunk + : public ResolverThunk { public: // The service resolver needs a child process to write to. ServiceResolverThunk(HANDLE process, bool relaxed)
diff --git a/services/network/udp_socket_unittest.cc b/services/network/udp_socket_unittest.cc index 89b0bb3..0e52a54 100644 --- a/services/network/udp_socket_unittest.cc +++ b/services/network/udp_socket_unittest.cc
@@ -673,18 +673,15 @@ EXPECT_EQ(std::vector<uint8_t>(), result.data.value()); } -#if BUILDFLAG(IS_ANDROID) || BUILDFLAG(IS_IOS) || BUILDFLAG(IS_MAC) || \ - BUILDFLAG(IS_FUCHSIA) +#if BUILDFLAG(IS_ANDROID) || BUILDFLAG(IS_FUCHSIA) // Some Android devices do not support multicast socket. // The ones supporting multicast need WifiManager.MulticastLock to enable it. // https://developer.android.com/reference/android/net/wifi/WifiManager.MulticastLock.html -// TODO(crbug.com/1215667): Fails on iOS running on Mac 11 machines. Flaky on -// Mac 11 machines. // TODO(crbug.com/1255191): Fails on Fuchsia running with run-test-component. #define MAYBE_JoinMulticastGroup DISABLED_JoinMulticastGroup #else #define MAYBE_JoinMulticastGroup JoinMulticastGroup -#endif // BUILDFLAG(IS_ANDROID) || BUILDFLAG(IS_IOS) || BUILDFLAG(IS_MAC) +#endif // BUILDFLAG(IS_ANDROID) || BUILDFLAG(IS_FUCHSIA) TEST_F(UDPSocketTest, MAYBE_JoinMulticastGroup) { const char kGroup[] = "237.132.100.17";
diff --git a/services/viz/public/cpp/compositing/mojom_traits_unittest.cc b/services/viz/public/cpp/compositing/mojom_traits_unittest.cc index faace0b..9e4467c 100644 --- a/services/viz/public/cpp/compositing/mojom_traits_unittest.cc +++ b/services/viz/public/cpp/compositing/mojom_traits_unittest.cc
@@ -440,9 +440,9 @@ } TEST_F(StructTraitsTest, SharedQuadState) { - const gfx::Transform quad_to_target_transform(1.f, 2.f, 3.f, 4.f, 5.f, 6.f, - 7.f, 8.f, 9.f, 10.f, 11.f, 12.f, - 13.f, 14.f, 15.f, 16.f); + const auto quad_to_target_transform = + gfx::Transform::RowMajor(1.f, 2.f, 3.f, 4.f, 5.f, 6.f, 7.f, 8.f, 9.f, + 10.f, 11.f, 12.f, 13.f, 14.f, 15.f, 16.f); const gfx::Rect layer_rect(1234, 5678); const gfx::Rect visible_layer_rect(12, 34, 56, 78); const gfx::MaskFilterInfo mask_filter_info( @@ -482,9 +482,9 @@ gfx::Rect(2, 3), gfx::Transform()); // SharedQuadState. - const gfx::Transform sqs_quad_to_target_transform( - 1.f, 2.f, 3.f, 4.f, 5.f, 6.f, 7.f, 8.f, 9.f, 10.f, 11.f, 12.f, 13.f, 14.f, - 15.f, 16.f); + const auto sqs_quad_to_target_transform = + gfx::Transform::RowMajor(1.f, 2.f, 3.f, 4.f, 5.f, 6.f, 7.f, 8.f, 9.f, + 10.f, 11.f, 12.f, 13.f, 14.f, 15.f, 16.f); const gfx::Rect sqs_layer_rect(1234, 5678); const gfx::Rect sqs_visible_layer_rect(12, 34, 56, 78); const gfx::MaskFilterInfo sqs_mask_filter_info( @@ -768,7 +768,7 @@ const CompositorRenderPassId render_pass_id{3u}; const gfx::Rect output_rect(45, 22, 120, 13); const gfx::Transform transform_to_root = - gfx::Transform(1.0, 0.5, 0.5, -0.5, -1.0, 0.0); + gfx::Transform::Affine(1.0, 0.5, 0.5, -0.5, -1.0, 0.0); const gfx::Rect damage_rect(56, 123, 19, 43); cc::FilterOperations filters; filters.Append(cc::FilterOperation::CreateBlurFilter(0.f)); @@ -798,16 +798,18 @@ SharedQuadState* shared_state_1 = input->CreateAndAppendSharedQuadState(); shared_state_1->SetAll( - gfx::Transform(16.1f, 15.3f, 14.3f, 13.7f, 12.2f, 11.4f, 10.4f, 9.8f, - 8.1f, 7.3f, 6.3f, 5.7f, 4.8f, 3.4f, 2.4f, 1.2f), + gfx::Transform::RowMajor(16.1f, 15.3f, 14.3f, 13.7f, 12.2f, 11.4f, 10.4f, + 9.8f, 8.1f, 7.3f, 6.3f, 5.7f, 4.8f, 3.4f, 2.4f, + 1.2f), gfx::Rect(1, 2), gfx::Rect(1337, 5679, 9101112, 131415), gfx::MaskFilterInfo(gfx::RRectF(gfx::RectF(5.f, 6.f, 70.f, 89.f), 10.f)), gfx::Rect(1357, 2468, 121314, 1337), true, 2, SkBlendMode::kSrcOver, 1); SharedQuadState* shared_state_2 = input->CreateAndAppendSharedQuadState(); shared_state_2->SetAll( - gfx::Transform(1.1f, 2.3f, 3.3f, 4.7f, 5.2f, 6.4f, 7.4f, 8.8f, 9.1f, - 10.3f, 11.3f, 12.7f, 13.8f, 14.4f, 15.4f, 16.2f), + gfx::Transform::RowMajor(1.1f, 2.3f, 3.3f, 4.7f, 5.2f, 6.4f, 7.4f, 8.8f, + 9.1f, 10.3f, 11.3f, 12.7f, 13.8f, 14.4f, 15.4f, + 16.2f), gfx::Rect(1337, 1234), gfx::Rect(1234, 5678, 9101112, 13141516), gfx::MaskFilterInfo(gfx::RRectF(gfx::RectF(23.f, 45.f, 60.f, 70.f), 8.f)), gfx::Rect(1357, 2468, 121314, 1337), true, 2, SkBlendMode::kSrcOver, 1); @@ -924,7 +926,7 @@ const gfx::Rect output_rect(45, 22, 120, 13); const gfx::Rect damage_rect(56, 123, 19, 43); const gfx::Transform transform_to_root = - gfx::Transform(1.0, 0.5, 0.5, -0.5, -1.0, 0.0); + gfx::Transform::Affine(1.0, 0.5, 0.5, -0.5, -1.0, 0.0); const absl::optional<gfx::RRectF> backdrop_filter_bounds; SubtreeCaptureId subtree_capture_id; const bool has_transparent_background = true;
diff --git a/services/viz/public/cpp/hit_test/mojom_traits_unittest.cc b/services/viz/public/cpp/hit_test/mojom_traits_unittest.cc index f8fd7f4..d71ee7a 100644 --- a/services/viz/public/cpp/hit_test/mojom_traits_unittest.cc +++ b/services/viz/public/cpp/hit_test/mojom_traits_unittest.cc
@@ -73,7 +73,8 @@ // Ensures gfx::Transform doesn't mutate itself when its const methods are // called, to ensure it won't change in the read-only shared memory segment. TEST(StructTraitsTest, TransformImmutable) { - gfx::Transform t1(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16); + auto t1 = gfx::Transform::RowMajor(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, + 14, 15, 16); gfx::Transform t2; std::memcpy(&t2, &t1, sizeof(t1)); EXPECT_FALSE(t2.IsIdentity());
diff --git a/testing/buildbot/chromium.android.fyi.json b/testing/buildbot/chromium.android.fyi.json index 653be00b..f429d7a8 100644 --- a/testing/buildbot/chromium.android.fyi.json +++ b/testing/buildbot/chromium.android.fyi.json
@@ -6539,871 +6539,6 @@ } ] }, - "android-weblayer-11-x86-rel-tests": { - "gtest_tests": [ - { - "args": [ - "--gs-results-bucket=chromium-result-details", - "--recover-devices", - "--avd-config=../../tools/android/avd/proto/generic_android30.textpb" - ], - "merge": { - "args": [ - "--bucket", - "chromium-result-details", - "--test-name", - "weblayer_instrumentation_test_apk ToT_Tests" - ], - "script": "//build/android/pylib/results/presentation/test_results_presentation.py" - }, - "name": "weblayer_instrumentation_test_apk ToT_Tests", - "resultdb": { - "enable": true, - "has_native_resultdb_integration": true - }, - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "cpu": "x86-64", - "device_os": null, - "device_type": null, - "machine_type": "n1-standard-4|e2-standard-4", - "os": "Ubuntu-18.04", - "pool": "chromium.tests.avd" - } - ], - "named_caches": [ - { - "name": "generic_android30", - "path": ".android_emulator/generic_android30" - } - ], - "optional_dimensions": { - "60": [ - { - "caches": "generic_android30" - } - ] - }, - "output_links": [ - { - "link": [ - "https://luci-logdog.appspot.com/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], - "name": "shard #${SHARD_INDEX} logcats" - } - ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" - }, - "test": "weblayer_instrumentation_test_apk", - "test_id_prefix": "ninja://weblayer/browser/android/javatests:weblayer_instrumentation_test_apk/", - "variant_id": "ToT_Tests" - }, - { - "args": [ - "--additional-apk=apks/WebLayerShellSystemWebView.apk", - "--test-runner-outdir", - ".", - "--implementation-outdir", - ".", - "--test-expectations", - "../../weblayer/browser/android/javatests/skew/expectations.txt", - "--webview-apk-path=apks/SystemWebView.apk", - "--client-outdir", - "../../weblayer_instrumentation_test_M100/out/Release", - "--client-version=100", - "--gs-results-bucket=chromium-result-details", - "--recover-devices", - "--avd-config=../../tools/android/avd/proto/generic_android30.textpb" - ], - "merge": { - "args": [ - "--bucket", - "chromium-result-details", - "--test-name", - "weblayer_skew_tests with_client_from_100" - ], - "script": "//build/android/pylib/results/presentation/test_results_presentation.py" - }, - "name": "weblayer_skew_tests with_client_from_100", - "resultdb": { - "enable": true, - "has_native_resultdb_integration": true - }, - "swarming": { - "can_use_on_swarming_builders": true, - "cipd_packages": [ - { - "cipd_package": "chromium/testing/weblayer-x86", - "location": "weblayer_instrumentation_test_M100", - "revision": "version:100.0.4896.134" - } - ], - "dimension_sets": [ - { - "cpu": "x86-64", - "device_os": null, - "device_type": null, - "machine_type": "n1-standard-4|e2-standard-4", - "os": "Ubuntu-18.04", - "pool": "chromium.tests.avd" - } - ], - "named_caches": [ - { - "name": "generic_android30", - "path": ".android_emulator/generic_android30" - } - ], - "optional_dimensions": { - "60": [ - { - "caches": "generic_android30" - } - ] - }, - "output_links": [ - { - "link": [ - "https://luci-logdog.appspot.com/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], - "name": "shard #${SHARD_INDEX} logcats" - } - ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", - "shards": 2 - }, - "test": "weblayer_skew_tests", - "test_id_prefix": "ninja://weblayer/browser/android/javatests:weblayer_skew_tests/", - "variant_id": "with_client_from_100" - }, - { - "args": [ - "--additional-apk=apks/WebLayerShellSystemWebView.apk", - "--test-runner-outdir", - ".", - "--implementation-outdir", - ".", - "--test-expectations", - "../../weblayer/browser/android/javatests/skew/expectations.txt", - "--webview-apk-path=apks/SystemWebView.apk", - "--client-outdir", - "../../weblayer_instrumentation_test_M101/out/Release", - "--client-version=101", - "--gs-results-bucket=chromium-result-details", - "--recover-devices", - "--avd-config=../../tools/android/avd/proto/generic_android30.textpb" - ], - "merge": { - "args": [ - "--bucket", - "chromium-result-details", - "--test-name", - "weblayer_skew_tests with_client_from_101" - ], - "script": "//build/android/pylib/results/presentation/test_results_presentation.py" - }, - "name": "weblayer_skew_tests with_client_from_101", - "resultdb": { - "enable": true, - "has_native_resultdb_integration": true - }, - "swarming": { - "can_use_on_swarming_builders": true, - "cipd_packages": [ - { - "cipd_package": "chromium/testing/weblayer-x86", - "location": "weblayer_instrumentation_test_M101", - "revision": "version:101.0.4951.74" - } - ], - "dimension_sets": [ - { - "cpu": "x86-64", - "device_os": null, - "device_type": null, - "machine_type": "n1-standard-4|e2-standard-4", - "os": "Ubuntu-18.04", - "pool": "chromium.tests.avd" - } - ], - "named_caches": [ - { - "name": "generic_android30", - "path": ".android_emulator/generic_android30" - } - ], - "optional_dimensions": { - "60": [ - { - "caches": "generic_android30" - } - ] - }, - "output_links": [ - { - "link": [ - "https://luci-logdog.appspot.com/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], - "name": "shard #${SHARD_INDEX} logcats" - } - ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", - "shards": 2 - }, - "test": "weblayer_skew_tests", - "test_id_prefix": "ninja://weblayer/browser/android/javatests:weblayer_skew_tests/", - "variant_id": "with_client_from_101" - }, - { - "args": [ - "--additional-apk=apks/WebLayerShellSystemWebView.apk", - "--test-runner-outdir", - ".", - "--implementation-outdir", - ".", - "--test-expectations", - "../../weblayer/browser/android/javatests/skew/expectations.txt", - "--webview-apk-path=apks/SystemWebView.apk", - "--client-outdir", - "../../weblayer_instrumentation_test_M102/out/Release", - "--client-version=102", - "--gs-results-bucket=chromium-result-details", - "--recover-devices", - "--avd-config=../../tools/android/avd/proto/generic_android30.textpb" - ], - "merge": { - "args": [ - "--bucket", - "chromium-result-details", - "--test-name", - "weblayer_skew_tests with_client_from_102" - ], - "script": "//build/android/pylib/results/presentation/test_results_presentation.py" - }, - "name": "weblayer_skew_tests with_client_from_102", - "resultdb": { - "enable": true, - "has_native_resultdb_integration": true - }, - "swarming": { - "can_use_on_swarming_builders": true, - "cipd_packages": [ - { - "cipd_package": "chromium/testing/weblayer-x86", - "location": "weblayer_instrumentation_test_M102", - "revision": "version:102.0.5005.125" - } - ], - "dimension_sets": [ - { - "cpu": "x86-64", - "device_os": null, - "device_type": null, - "machine_type": "n1-standard-4|e2-standard-4", - "os": "Ubuntu-18.04", - "pool": "chromium.tests.avd" - } - ], - "named_caches": [ - { - "name": "generic_android30", - "path": ".android_emulator/generic_android30" - } - ], - "optional_dimensions": { - "60": [ - { - "caches": "generic_android30" - } - ] - }, - "output_links": [ - { - "link": [ - "https://luci-logdog.appspot.com/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], - "name": "shard #${SHARD_INDEX} logcats" - } - ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", - "shards": 2 - }, - "test": "weblayer_skew_tests", - "test_id_prefix": "ninja://weblayer/browser/android/javatests:weblayer_skew_tests/", - "variant_id": "with_client_from_102" - }, - { - "args": [ - "--additional-apk=apks/WebLayerShellSystemWebView.apk", - "--webview-apk-path=apks/SystemWebView.apk", - "--test-runner-outdir", - ".", - "--client-outdir", - "../../weblayer_instrumentation_test_M104/out/Release", - "--implementation-outdir", - ".", - "--test-expectations", - "../../weblayer/browser/android/javatests/skew/expectations.txt", - "--client-version=104", - "--gs-results-bucket=chromium-result-details", - "--recover-devices", - "--avd-config=../../tools/android/avd/proto/generic_android30.textpb" - ], - "merge": { - "args": [ - "--bucket", - "chromium-result-details", - "--test-name", - "weblayer_skew_tests with_client_from_104" - ], - "script": "//build/android/pylib/results/presentation/test_results_presentation.py" - }, - "name": "weblayer_skew_tests with_client_from_104", - "resultdb": { - "enable": true, - "has_native_resultdb_integration": true - }, - "swarming": { - "can_use_on_swarming_builders": true, - "cipd_packages": [ - { - "cipd_package": "chromium/testing/weblayer-x86", - "location": "weblayer_instrumentation_test_M104", - "revision": "version:104.0.5112.59" - } - ], - "dimension_sets": [ - { - "cpu": "x86-64", - "device_os": null, - "device_type": null, - "machine_type": "n1-standard-4|e2-standard-4", - "os": "Ubuntu-18.04", - "pool": "chromium.tests.avd" - } - ], - "named_caches": [ - { - "name": "generic_android30", - "path": ".android_emulator/generic_android30" - } - ], - "optional_dimensions": { - "60": [ - { - "caches": "generic_android30" - } - ] - }, - "output_links": [ - { - "link": [ - "https://luci-logdog.appspot.com/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], - "name": "shard #${SHARD_INDEX} logcats" - } - ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", - "shards": 2 - }, - "test": "weblayer_skew_tests", - "test_id_prefix": "ninja://weblayer/browser/android/javatests:weblayer_skew_tests/", - "variant_id": "with_client_from_104" - }, - { - "args": [ - "--additional-apk=apks/WebLayerShellSystemWebView.apk", - "--webview-apk-path=apks/SystemWebView.apk", - "--test-runner-outdir", - ".", - "--client-outdir", - "../../weblayer_instrumentation_test_M105/out/Release", - "--implementation-outdir", - ".", - "--test-expectations", - "../../weblayer/browser/android/javatests/skew/expectations.txt", - "--client-version=105", - "--gs-results-bucket=chromium-result-details", - "--recover-devices", - "--avd-config=../../tools/android/avd/proto/generic_android30.textpb" - ], - "merge": { - "args": [ - "--bucket", - "chromium-result-details", - "--test-name", - "weblayer_skew_tests with_client_from_105" - ], - "script": "//build/android/pylib/results/presentation/test_results_presentation.py" - }, - "name": "weblayer_skew_tests with_client_from_105", - "resultdb": { - "enable": true, - "has_native_resultdb_integration": true - }, - "swarming": { - "can_use_on_swarming_builders": true, - "cipd_packages": [ - { - "cipd_package": "chromium/testing/weblayer-x86", - "location": "weblayer_instrumentation_test_M105", - "revision": "version:105.0.5195.145" - } - ], - "dimension_sets": [ - { - "cpu": "x86-64", - "device_os": null, - "device_type": null, - "machine_type": "n1-standard-4|e2-standard-4", - "os": "Ubuntu-18.04", - "pool": "chromium.tests.avd" - } - ], - "named_caches": [ - { - "name": "generic_android30", - "path": ".android_emulator/generic_android30" - } - ], - "optional_dimensions": { - "60": [ - { - "caches": "generic_android30" - } - ] - }, - "output_links": [ - { - "link": [ - "https://luci-logdog.appspot.com/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], - "name": "shard #${SHARD_INDEX} logcats" - } - ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", - "shards": 2 - }, - "test": "weblayer_skew_tests", - "test_id_prefix": "ninja://weblayer/browser/android/javatests:weblayer_skew_tests/", - "variant_id": "with_client_from_105" - }, - { - "args": [ - "--additional-apk=apks/WebLayerShellSystemWebView.apk", - "--test-runner-outdir", - ".", - "--client-outdir", - ".", - "--test-expectations", - "../../weblayer/browser/android/javatests/skew/expectations.txt", - "--webview-apk-path=apks/AOSP_SystemWebView.apk", - "--implementation-outdir", - "../../weblayer_instrumentation_test_M100/out/Release", - "--impl-version=100", - "--gs-results-bucket=chromium-result-details", - "--recover-devices", - "--avd-config=../../tools/android/avd/proto/generic_android30.textpb" - ], - "merge": { - "args": [ - "--bucket", - "chromium-result-details", - "--test-name", - "weblayer_skew_tests with_impl_from_100" - ], - "script": "//build/android/pylib/results/presentation/test_results_presentation.py" - }, - "name": "weblayer_skew_tests with_impl_from_100", - "resultdb": { - "enable": true, - "has_native_resultdb_integration": true - }, - "swarming": { - "can_use_on_swarming_builders": true, - "cipd_packages": [ - { - "cipd_package": "chromium/testing/weblayer-x86", - "location": "weblayer_instrumentation_test_M100", - "revision": "version:100.0.4896.134" - } - ], - "dimension_sets": [ - { - "cpu": "x86-64", - "device_os": null, - "device_type": null, - "machine_type": "n1-standard-4|e2-standard-4", - "os": "Ubuntu-18.04", - "pool": "chromium.tests.avd" - } - ], - "named_caches": [ - { - "name": "generic_android30", - "path": ".android_emulator/generic_android30" - } - ], - "optional_dimensions": { - "60": [ - { - "caches": "generic_android30" - } - ] - }, - "output_links": [ - { - "link": [ - "https://luci-logdog.appspot.com/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], - "name": "shard #${SHARD_INDEX} logcats" - } - ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", - "shards": 2 - }, - "test": "weblayer_skew_tests", - "test_id_prefix": "ninja://weblayer/browser/android/javatests:weblayer_skew_tests/", - "variant_id": "with_impl_from_100" - }, - { - "args": [ - "--additional-apk=apks/WebLayerShellSystemWebView.apk", - "--test-runner-outdir", - ".", - "--client-outdir", - ".", - "--test-expectations", - "../../weblayer/browser/android/javatests/skew/expectations.txt", - "--webview-apk-path=apks/AOSP_SystemWebView.apk", - "--implementation-outdir", - "../../weblayer_instrumentation_test_M101/out/Release", - "--impl-version=101", - "--gs-results-bucket=chromium-result-details", - "--recover-devices", - "--avd-config=../../tools/android/avd/proto/generic_android30.textpb" - ], - "merge": { - "args": [ - "--bucket", - "chromium-result-details", - "--test-name", - "weblayer_skew_tests with_impl_from_101" - ], - "script": "//build/android/pylib/results/presentation/test_results_presentation.py" - }, - "name": "weblayer_skew_tests with_impl_from_101", - "resultdb": { - "enable": true, - "has_native_resultdb_integration": true - }, - "swarming": { - "can_use_on_swarming_builders": true, - "cipd_packages": [ - { - "cipd_package": "chromium/testing/weblayer-x86", - "location": "weblayer_instrumentation_test_M101", - "revision": "version:101.0.4951.74" - } - ], - "dimension_sets": [ - { - "cpu": "x86-64", - "device_os": null, - "device_type": null, - "machine_type": "n1-standard-4|e2-standard-4", - "os": "Ubuntu-18.04", - "pool": "chromium.tests.avd" - } - ], - "named_caches": [ - { - "name": "generic_android30", - "path": ".android_emulator/generic_android30" - } - ], - "optional_dimensions": { - "60": [ - { - "caches": "generic_android30" - } - ] - }, - "output_links": [ - { - "link": [ - "https://luci-logdog.appspot.com/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], - "name": "shard #${SHARD_INDEX} logcats" - } - ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", - "shards": 2 - }, - "test": "weblayer_skew_tests", - "test_id_prefix": "ninja://weblayer/browser/android/javatests:weblayer_skew_tests/", - "variant_id": "with_impl_from_101" - }, - { - "args": [ - "--additional-apk=apks/WebLayerShellSystemWebView.apk", - "--test-runner-outdir", - ".", - "--client-outdir", - ".", - "--test-expectations", - "../../weblayer/browser/android/javatests/skew/expectations.txt", - "--webview-apk-path=apks/AOSP_SystemWebView.apk", - "--implementation-outdir", - "../../weblayer_instrumentation_test_M102/out/Release", - "--impl-version=102", - "--gs-results-bucket=chromium-result-details", - "--recover-devices", - "--avd-config=../../tools/android/avd/proto/generic_android30.textpb" - ], - "merge": { - "args": [ - "--bucket", - "chromium-result-details", - "--test-name", - "weblayer_skew_tests with_impl_from_102" - ], - "script": "//build/android/pylib/results/presentation/test_results_presentation.py" - }, - "name": "weblayer_skew_tests with_impl_from_102", - "resultdb": { - "enable": true, - "has_native_resultdb_integration": true - }, - "swarming": { - "can_use_on_swarming_builders": true, - "cipd_packages": [ - { - "cipd_package": "chromium/testing/weblayer-x86", - "location": "weblayer_instrumentation_test_M102", - "revision": "version:102.0.5005.125" - } - ], - "dimension_sets": [ - { - "cpu": "x86-64", - "device_os": null, - "device_type": null, - "machine_type": "n1-standard-4|e2-standard-4", - "os": "Ubuntu-18.04", - "pool": "chromium.tests.avd" - } - ], - "named_caches": [ - { - "name": "generic_android30", - "path": ".android_emulator/generic_android30" - } - ], - "optional_dimensions": { - "60": [ - { - "caches": "generic_android30" - } - ] - }, - "output_links": [ - { - "link": [ - "https://luci-logdog.appspot.com/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], - "name": "shard #${SHARD_INDEX} logcats" - } - ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", - "shards": 2 - }, - "test": "weblayer_skew_tests", - "test_id_prefix": "ninja://weblayer/browser/android/javatests:weblayer_skew_tests/", - "variant_id": "with_impl_from_102" - }, - { - "args": [ - "--additional-apk=apks/WebLayerShellSystemWebView.apk", - "--webview-apk-path=apks/AOSP_SystemWebView.apk", - "--test-runner-outdir", - ".", - "--client-outdir", - ".", - "--implementation-outdir", - "../../weblayer_instrumentation_test_M104/out/Release", - "--test-expectations", - "../../weblayer/browser/android/javatests/skew/expectations.txt", - "--impl-version=104", - "--gs-results-bucket=chromium-result-details", - "--recover-devices", - "--avd-config=../../tools/android/avd/proto/generic_android30.textpb" - ], - "merge": { - "args": [ - "--bucket", - "chromium-result-details", - "--test-name", - "weblayer_skew_tests with_impl_from_104" - ], - "script": "//build/android/pylib/results/presentation/test_results_presentation.py" - }, - "name": "weblayer_skew_tests with_impl_from_104", - "resultdb": { - "enable": true, - "has_native_resultdb_integration": true - }, - "swarming": { - "can_use_on_swarming_builders": true, - "cipd_packages": [ - { - "cipd_package": "chromium/testing/weblayer-x86", - "location": "weblayer_instrumentation_test_M104", - "revision": "version:104.0.5112.59" - } - ], - "dimension_sets": [ - { - "cpu": "x86-64", - "device_os": null, - "device_type": null, - "machine_type": "n1-standard-4|e2-standard-4", - "os": "Ubuntu-18.04", - "pool": "chromium.tests.avd" - } - ], - "named_caches": [ - { - "name": "generic_android30", - "path": ".android_emulator/generic_android30" - } - ], - "optional_dimensions": { - "60": [ - { - "caches": "generic_android30" - } - ] - }, - "output_links": [ - { - "link": [ - "https://luci-logdog.appspot.com/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], - "name": "shard #${SHARD_INDEX} logcats" - } - ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", - "shards": 2 - }, - "test": "weblayer_skew_tests", - "test_id_prefix": "ninja://weblayer/browser/android/javatests:weblayer_skew_tests/", - "variant_id": "with_impl_from_104" - }, - { - "args": [ - "--additional-apk=apks/WebLayerShellSystemWebView.apk", - "--webview-apk-path=apks/AOSP_SystemWebView.apk", - "--test-runner-outdir", - ".", - "--client-outdir", - ".", - "--implementation-outdir", - "../../weblayer_instrumentation_test_M105/out/Release", - "--test-expectations", - "../../weblayer/browser/android/javatests/skew/expectations.txt", - "--impl-version=105", - "--gs-results-bucket=chromium-result-details", - "--recover-devices", - "--avd-config=../../tools/android/avd/proto/generic_android30.textpb" - ], - "merge": { - "args": [ - "--bucket", - "chromium-result-details", - "--test-name", - "weblayer_skew_tests with_impl_from_105" - ], - "script": "//build/android/pylib/results/presentation/test_results_presentation.py" - }, - "name": "weblayer_skew_tests with_impl_from_105", - "resultdb": { - "enable": true, - "has_native_resultdb_integration": true - }, - "swarming": { - "can_use_on_swarming_builders": true, - "cipd_packages": [ - { - "cipd_package": "chromium/testing/weblayer-x86", - "location": "weblayer_instrumentation_test_M105", - "revision": "version:105.0.5195.145" - } - ], - "dimension_sets": [ - { - "cpu": "x86-64", - "device_os": null, - "device_type": null, - "machine_type": "n1-standard-4|e2-standard-4", - "os": "Ubuntu-18.04", - "pool": "chromium.tests.avd" - } - ], - "named_caches": [ - { - "name": "generic_android30", - "path": ".android_emulator/generic_android30" - } - ], - "optional_dimensions": { - "60": [ - { - "caches": "generic_android30" - } - ] - }, - "output_links": [ - { - "link": [ - "https://luci-logdog.appspot.com/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], - "name": "shard #${SHARD_INDEX} logcats" - } - ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", - "shards": 2 - }, - "test": "weblayer_skew_tests", - "test_id_prefix": "ninja://weblayer/browser/android/javatests:weblayer_skew_tests/", - "variant_id": "with_impl_from_105" - } - ] - }, "android-weblayer-pie-x86-wpt-fyi-rel": { "isolated_scripts": [ {
diff --git a/testing/buildbot/chromium.android.json b/testing/buildbot/chromium.android.json index 3fc9462..915ccc4b3c 100644 --- a/testing/buildbot/chromium.android.json +++ b/testing/buildbot/chromium.android.json
@@ -49290,3405 +49290,6 @@ } ] }, - "android-weblayer-10-x86-rel-tests": { - "gtest_tests": [ - { - "args": [ - "--gs-results-bucket=chromium-result-details", - "--recover-devices", - "--avd-config=../../tools/android/avd/proto/generic_android29.textpb" - ], - "merge": { - "args": [ - "--bucket", - "chromium-result-details", - "--test-name", - "weblayer_instrumentation_test_apk ToT_Tests" - ], - "script": "//build/android/pylib/results/presentation/test_results_presentation.py" - }, - "name": "weblayer_instrumentation_test_apk ToT_Tests", - "resultdb": { - "enable": true, - "has_native_resultdb_integration": true - }, - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "cpu": "x86-64", - "device_os": null, - "device_type": null, - "machine_type": "n1-standard-4|e2-standard-4", - "os": "Ubuntu-18.04", - "pool": "chromium.tests.avd" - } - ], - "named_caches": [ - { - "name": "generic_android29", - "path": ".android_emulator/generic_android29" - } - ], - "optional_dimensions": { - "60": [ - { - "caches": "generic_android29" - } - ] - }, - "output_links": [ - { - "link": [ - "https://luci-logdog.appspot.com/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], - "name": "shard #${SHARD_INDEX} logcats" - } - ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" - }, - "test": "weblayer_instrumentation_test_apk", - "test_id_prefix": "ninja://weblayer/browser/android/javatests:weblayer_instrumentation_test_apk/", - "variant_id": "ToT_Tests" - }, - { - "args": [ - "--additional-apk=apks/WebLayerShellSystemWebView.apk", - "--test-runner-outdir", - ".", - "--implementation-outdir", - ".", - "--test-expectations", - "../../weblayer/browser/android/javatests/skew/expectations.txt", - "--webview-apk-path=apks/SystemWebView.apk", - "--client-outdir", - "../../weblayer_instrumentation_test_M100/out/Release", - "--client-version=100", - "--gs-results-bucket=chromium-result-details", - "--recover-devices", - "--avd-config=../../tools/android/avd/proto/generic_android29.textpb" - ], - "merge": { - "args": [ - "--bucket", - "chromium-result-details", - "--test-name", - "weblayer_skew_tests with_client_from_100" - ], - "script": "//build/android/pylib/results/presentation/test_results_presentation.py" - }, - "name": "weblayer_skew_tests with_client_from_100", - "resultdb": { - "enable": true, - "has_native_resultdb_integration": true - }, - "swarming": { - "can_use_on_swarming_builders": true, - "cipd_packages": [ - { - "cipd_package": "chromium/testing/weblayer-x86", - "location": "weblayer_instrumentation_test_M100", - "revision": "version:100.0.4896.134" - } - ], - "dimension_sets": [ - { - "cpu": "x86-64", - "device_os": null, - "device_type": null, - "machine_type": "n1-standard-4|e2-standard-4", - "os": "Ubuntu-18.04", - "pool": "chromium.tests.avd" - } - ], - "named_caches": [ - { - "name": "generic_android29", - "path": ".android_emulator/generic_android29" - } - ], - "optional_dimensions": { - "60": [ - { - "caches": "generic_android29" - } - ] - }, - "output_links": [ - { - "link": [ - "https://luci-logdog.appspot.com/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], - "name": "shard #${SHARD_INDEX} logcats" - } - ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", - "shards": 2 - }, - "test": "weblayer_skew_tests", - "test_id_prefix": "ninja://weblayer/browser/android/javatests:weblayer_skew_tests/", - "variant_id": "with_client_from_100" - }, - { - "args": [ - "--additional-apk=apks/WebLayerShellSystemWebView.apk", - "--test-runner-outdir", - ".", - "--implementation-outdir", - ".", - "--test-expectations", - "../../weblayer/browser/android/javatests/skew/expectations.txt", - "--webview-apk-path=apks/SystemWebView.apk", - "--client-outdir", - "../../weblayer_instrumentation_test_M101/out/Release", - "--client-version=101", - "--gs-results-bucket=chromium-result-details", - "--recover-devices", - "--avd-config=../../tools/android/avd/proto/generic_android29.textpb" - ], - "merge": { - "args": [ - "--bucket", - "chromium-result-details", - "--test-name", - "weblayer_skew_tests with_client_from_101" - ], - "script": "//build/android/pylib/results/presentation/test_results_presentation.py" - }, - "name": "weblayer_skew_tests with_client_from_101", - "resultdb": { - "enable": true, - "has_native_resultdb_integration": true - }, - "swarming": { - "can_use_on_swarming_builders": true, - "cipd_packages": [ - { - "cipd_package": "chromium/testing/weblayer-x86", - "location": "weblayer_instrumentation_test_M101", - "revision": "version:101.0.4951.74" - } - ], - "dimension_sets": [ - { - "cpu": "x86-64", - "device_os": null, - "device_type": null, - "machine_type": "n1-standard-4|e2-standard-4", - "os": "Ubuntu-18.04", - "pool": "chromium.tests.avd" - } - ], - "named_caches": [ - { - "name": "generic_android29", - "path": ".android_emulator/generic_android29" - } - ], - "optional_dimensions": { - "60": [ - { - "caches": "generic_android29" - } - ] - }, - "output_links": [ - { - "link": [ - "https://luci-logdog.appspot.com/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], - "name": "shard #${SHARD_INDEX} logcats" - } - ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", - "shards": 2 - }, - "test": "weblayer_skew_tests", - "test_id_prefix": "ninja://weblayer/browser/android/javatests:weblayer_skew_tests/", - "variant_id": "with_client_from_101" - }, - { - "args": [ - "--additional-apk=apks/WebLayerShellSystemWebView.apk", - "--test-runner-outdir", - ".", - "--implementation-outdir", - ".", - "--test-expectations", - "../../weblayer/browser/android/javatests/skew/expectations.txt", - "--webview-apk-path=apks/SystemWebView.apk", - "--client-outdir", - "../../weblayer_instrumentation_test_M102/out/Release", - "--client-version=102", - "--gs-results-bucket=chromium-result-details", - "--recover-devices", - "--avd-config=../../tools/android/avd/proto/generic_android29.textpb" - ], - "merge": { - "args": [ - "--bucket", - "chromium-result-details", - "--test-name", - "weblayer_skew_tests with_client_from_102" - ], - "script": "//build/android/pylib/results/presentation/test_results_presentation.py" - }, - "name": "weblayer_skew_tests with_client_from_102", - "resultdb": { - "enable": true, - "has_native_resultdb_integration": true - }, - "swarming": { - "can_use_on_swarming_builders": true, - "cipd_packages": [ - { - "cipd_package": "chromium/testing/weblayer-x86", - "location": "weblayer_instrumentation_test_M102", - "revision": "version:102.0.5005.125" - } - ], - "dimension_sets": [ - { - "cpu": "x86-64", - "device_os": null, - "device_type": null, - "machine_type": "n1-standard-4|e2-standard-4", - "os": "Ubuntu-18.04", - "pool": "chromium.tests.avd" - } - ], - "named_caches": [ - { - "name": "generic_android29", - "path": ".android_emulator/generic_android29" - } - ], - "optional_dimensions": { - "60": [ - { - "caches": "generic_android29" - } - ] - }, - "output_links": [ - { - "link": [ - "https://luci-logdog.appspot.com/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], - "name": "shard #${SHARD_INDEX} logcats" - } - ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", - "shards": 2 - }, - "test": "weblayer_skew_tests", - "test_id_prefix": "ninja://weblayer/browser/android/javatests:weblayer_skew_tests/", - "variant_id": "with_client_from_102" - }, - { - "args": [ - "--additional-apk=apks/WebLayerShellSystemWebView.apk", - "--webview-apk-path=apks/SystemWebView.apk", - "--test-runner-outdir", - ".", - "--client-outdir", - "../../weblayer_instrumentation_test_M104/out/Release", - "--implementation-outdir", - ".", - "--test-expectations", - "../../weblayer/browser/android/javatests/skew/expectations.txt", - "--client-version=104", - "--gs-results-bucket=chromium-result-details", - "--recover-devices", - "--avd-config=../../tools/android/avd/proto/generic_android29.textpb" - ], - "merge": { - "args": [ - "--bucket", - "chromium-result-details", - "--test-name", - "weblayer_skew_tests with_client_from_104" - ], - "script": "//build/android/pylib/results/presentation/test_results_presentation.py" - }, - "name": "weblayer_skew_tests with_client_from_104", - "resultdb": { - "enable": true, - "has_native_resultdb_integration": true - }, - "swarming": { - "can_use_on_swarming_builders": true, - "cipd_packages": [ - { - "cipd_package": "chromium/testing/weblayer-x86", - "location": "weblayer_instrumentation_test_M104", - "revision": "version:104.0.5112.59" - } - ], - "dimension_sets": [ - { - "cpu": "x86-64", - "device_os": null, - "device_type": null, - "machine_type": "n1-standard-4|e2-standard-4", - "os": "Ubuntu-18.04", - "pool": "chromium.tests.avd" - } - ], - "named_caches": [ - { - "name": "generic_android29", - "path": ".android_emulator/generic_android29" - } - ], - "optional_dimensions": { - "60": [ - { - "caches": "generic_android29" - } - ] - }, - "output_links": [ - { - "link": [ - "https://luci-logdog.appspot.com/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], - "name": "shard #${SHARD_INDEX} logcats" - } - ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", - "shards": 2 - }, - "test": "weblayer_skew_tests", - "test_id_prefix": "ninja://weblayer/browser/android/javatests:weblayer_skew_tests/", - "variant_id": "with_client_from_104" - }, - { - "args": [ - "--additional-apk=apks/WebLayerShellSystemWebView.apk", - "--webview-apk-path=apks/SystemWebView.apk", - "--test-runner-outdir", - ".", - "--client-outdir", - "../../weblayer_instrumentation_test_M105/out/Release", - "--implementation-outdir", - ".", - "--test-expectations", - "../../weblayer/browser/android/javatests/skew/expectations.txt", - "--client-version=105", - "--gs-results-bucket=chromium-result-details", - "--recover-devices", - "--avd-config=../../tools/android/avd/proto/generic_android29.textpb" - ], - "merge": { - "args": [ - "--bucket", - "chromium-result-details", - "--test-name", - "weblayer_skew_tests with_client_from_105" - ], - "script": "//build/android/pylib/results/presentation/test_results_presentation.py" - }, - "name": "weblayer_skew_tests with_client_from_105", - "resultdb": { - "enable": true, - "has_native_resultdb_integration": true - }, - "swarming": { - "can_use_on_swarming_builders": true, - "cipd_packages": [ - { - "cipd_package": "chromium/testing/weblayer-x86", - "location": "weblayer_instrumentation_test_M105", - "revision": "version:105.0.5195.145" - } - ], - "dimension_sets": [ - { - "cpu": "x86-64", - "device_os": null, - "device_type": null, - "machine_type": "n1-standard-4|e2-standard-4", - "os": "Ubuntu-18.04", - "pool": "chromium.tests.avd" - } - ], - "named_caches": [ - { - "name": "generic_android29", - "path": ".android_emulator/generic_android29" - } - ], - "optional_dimensions": { - "60": [ - { - "caches": "generic_android29" - } - ] - }, - "output_links": [ - { - "link": [ - "https://luci-logdog.appspot.com/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], - "name": "shard #${SHARD_INDEX} logcats" - } - ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", - "shards": 2 - }, - "test": "weblayer_skew_tests", - "test_id_prefix": "ninja://weblayer/browser/android/javatests:weblayer_skew_tests/", - "variant_id": "with_client_from_105" - }, - { - "args": [ - "--additional-apk=apks/WebLayerShellSystemWebView.apk", - "--test-runner-outdir", - ".", - "--client-outdir", - ".", - "--test-expectations", - "../../weblayer/browser/android/javatests/skew/expectations.txt", - "--webview-apk-path=apks/AOSP_SystemWebView.apk", - "--implementation-outdir", - "../../weblayer_instrumentation_test_M100/out/Release", - "--impl-version=100", - "--gs-results-bucket=chromium-result-details", - "--recover-devices", - "--avd-config=../../tools/android/avd/proto/generic_android29.textpb" - ], - "merge": { - "args": [ - "--bucket", - "chromium-result-details", - "--test-name", - "weblayer_skew_tests with_impl_from_100" - ], - "script": "//build/android/pylib/results/presentation/test_results_presentation.py" - }, - "name": "weblayer_skew_tests with_impl_from_100", - "resultdb": { - "enable": true, - "has_native_resultdb_integration": true - }, - "swarming": { - "can_use_on_swarming_builders": true, - "cipd_packages": [ - { - "cipd_package": "chromium/testing/weblayer-x86", - "location": "weblayer_instrumentation_test_M100", - "revision": "version:100.0.4896.134" - } - ], - "dimension_sets": [ - { - "cpu": "x86-64", - "device_os": null, - "device_type": null, - "machine_type": "n1-standard-4|e2-standard-4", - "os": "Ubuntu-18.04", - "pool": "chromium.tests.avd" - } - ], - "named_caches": [ - { - "name": "generic_android29", - "path": ".android_emulator/generic_android29" - } - ], - "optional_dimensions": { - "60": [ - { - "caches": "generic_android29" - } - ] - }, - "output_links": [ - { - "link": [ - "https://luci-logdog.appspot.com/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], - "name": "shard #${SHARD_INDEX} logcats" - } - ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", - "shards": 2 - }, - "test": "weblayer_skew_tests", - "test_id_prefix": "ninja://weblayer/browser/android/javatests:weblayer_skew_tests/", - "variant_id": "with_impl_from_100" - }, - { - "args": [ - "--additional-apk=apks/WebLayerShellSystemWebView.apk", - "--test-runner-outdir", - ".", - "--client-outdir", - ".", - "--test-expectations", - "../../weblayer/browser/android/javatests/skew/expectations.txt", - "--webview-apk-path=apks/AOSP_SystemWebView.apk", - "--implementation-outdir", - "../../weblayer_instrumentation_test_M101/out/Release", - "--impl-version=101", - "--gs-results-bucket=chromium-result-details", - "--recover-devices", - "--avd-config=../../tools/android/avd/proto/generic_android29.textpb" - ], - "merge": { - "args": [ - "--bucket", - "chromium-result-details", - "--test-name", - "weblayer_skew_tests with_impl_from_101" - ], - "script": "//build/android/pylib/results/presentation/test_results_presentation.py" - }, - "name": "weblayer_skew_tests with_impl_from_101", - "resultdb": { - "enable": true, - "has_native_resultdb_integration": true - }, - "swarming": { - "can_use_on_swarming_builders": true, - "cipd_packages": [ - { - "cipd_package": "chromium/testing/weblayer-x86", - "location": "weblayer_instrumentation_test_M101", - "revision": "version:101.0.4951.74" - } - ], - "dimension_sets": [ - { - "cpu": "x86-64", - "device_os": null, - "device_type": null, - "machine_type": "n1-standard-4|e2-standard-4", - "os": "Ubuntu-18.04", - "pool": "chromium.tests.avd" - } - ], - "named_caches": [ - { - "name": "generic_android29", - "path": ".android_emulator/generic_android29" - } - ], - "optional_dimensions": { - "60": [ - { - "caches": "generic_android29" - } - ] - }, - "output_links": [ - { - "link": [ - "https://luci-logdog.appspot.com/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], - "name": "shard #${SHARD_INDEX} logcats" - } - ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", - "shards": 2 - }, - "test": "weblayer_skew_tests", - "test_id_prefix": "ninja://weblayer/browser/android/javatests:weblayer_skew_tests/", - "variant_id": "with_impl_from_101" - }, - { - "args": [ - "--additional-apk=apks/WebLayerShellSystemWebView.apk", - "--test-runner-outdir", - ".", - "--client-outdir", - ".", - "--test-expectations", - "../../weblayer/browser/android/javatests/skew/expectations.txt", - "--webview-apk-path=apks/AOSP_SystemWebView.apk", - "--implementation-outdir", - "../../weblayer_instrumentation_test_M102/out/Release", - "--impl-version=102", - "--gs-results-bucket=chromium-result-details", - "--recover-devices", - "--avd-config=../../tools/android/avd/proto/generic_android29.textpb" - ], - "merge": { - "args": [ - "--bucket", - "chromium-result-details", - "--test-name", - "weblayer_skew_tests with_impl_from_102" - ], - "script": "//build/android/pylib/results/presentation/test_results_presentation.py" - }, - "name": "weblayer_skew_tests with_impl_from_102", - "resultdb": { - "enable": true, - "has_native_resultdb_integration": true - }, - "swarming": { - "can_use_on_swarming_builders": true, - "cipd_packages": [ - { - "cipd_package": "chromium/testing/weblayer-x86", - "location": "weblayer_instrumentation_test_M102", - "revision": "version:102.0.5005.125" - } - ], - "dimension_sets": [ - { - "cpu": "x86-64", - "device_os": null, - "device_type": null, - "machine_type": "n1-standard-4|e2-standard-4", - "os": "Ubuntu-18.04", - "pool": "chromium.tests.avd" - } - ], - "named_caches": [ - { - "name": "generic_android29", - "path": ".android_emulator/generic_android29" - } - ], - "optional_dimensions": { - "60": [ - { - "caches": "generic_android29" - } - ] - }, - "output_links": [ - { - "link": [ - "https://luci-logdog.appspot.com/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], - "name": "shard #${SHARD_INDEX} logcats" - } - ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", - "shards": 2 - }, - "test": "weblayer_skew_tests", - "test_id_prefix": "ninja://weblayer/browser/android/javatests:weblayer_skew_tests/", - "variant_id": "with_impl_from_102" - }, - { - "args": [ - "--additional-apk=apks/WebLayerShellSystemWebView.apk", - "--webview-apk-path=apks/AOSP_SystemWebView.apk", - "--test-runner-outdir", - ".", - "--client-outdir", - ".", - "--implementation-outdir", - "../../weblayer_instrumentation_test_M104/out/Release", - "--test-expectations", - "../../weblayer/browser/android/javatests/skew/expectations.txt", - "--impl-version=104", - "--gs-results-bucket=chromium-result-details", - "--recover-devices", - "--avd-config=../../tools/android/avd/proto/generic_android29.textpb" - ], - "merge": { - "args": [ - "--bucket", - "chromium-result-details", - "--test-name", - "weblayer_skew_tests with_impl_from_104" - ], - "script": "//build/android/pylib/results/presentation/test_results_presentation.py" - }, - "name": "weblayer_skew_tests with_impl_from_104", - "resultdb": { - "enable": true, - "has_native_resultdb_integration": true - }, - "swarming": { - "can_use_on_swarming_builders": true, - "cipd_packages": [ - { - "cipd_package": "chromium/testing/weblayer-x86", - "location": "weblayer_instrumentation_test_M104", - "revision": "version:104.0.5112.59" - } - ], - "dimension_sets": [ - { - "cpu": "x86-64", - "device_os": null, - "device_type": null, - "machine_type": "n1-standard-4|e2-standard-4", - "os": "Ubuntu-18.04", - "pool": "chromium.tests.avd" - } - ], - "named_caches": [ - { - "name": "generic_android29", - "path": ".android_emulator/generic_android29" - } - ], - "optional_dimensions": { - "60": [ - { - "caches": "generic_android29" - } - ] - }, - "output_links": [ - { - "link": [ - "https://luci-logdog.appspot.com/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], - "name": "shard #${SHARD_INDEX} logcats" - } - ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", - "shards": 2 - }, - "test": "weblayer_skew_tests", - "test_id_prefix": "ninja://weblayer/browser/android/javatests:weblayer_skew_tests/", - "variant_id": "with_impl_from_104" - }, - { - "args": [ - "--additional-apk=apks/WebLayerShellSystemWebView.apk", - "--webview-apk-path=apks/AOSP_SystemWebView.apk", - "--test-runner-outdir", - ".", - "--client-outdir", - ".", - "--implementation-outdir", - "../../weblayer_instrumentation_test_M105/out/Release", - "--test-expectations", - "../../weblayer/browser/android/javatests/skew/expectations.txt", - "--impl-version=105", - "--gs-results-bucket=chromium-result-details", - "--recover-devices", - "--avd-config=../../tools/android/avd/proto/generic_android29.textpb" - ], - "merge": { - "args": [ - "--bucket", - "chromium-result-details", - "--test-name", - "weblayer_skew_tests with_impl_from_105" - ], - "script": "//build/android/pylib/results/presentation/test_results_presentation.py" - }, - "name": "weblayer_skew_tests with_impl_from_105", - "resultdb": { - "enable": true, - "has_native_resultdb_integration": true - }, - "swarming": { - "can_use_on_swarming_builders": true, - "cipd_packages": [ - { - "cipd_package": "chromium/testing/weblayer-x86", - "location": "weblayer_instrumentation_test_M105", - "revision": "version:105.0.5195.145" - } - ], - "dimension_sets": [ - { - "cpu": "x86-64", - "device_os": null, - "device_type": null, - "machine_type": "n1-standard-4|e2-standard-4", - "os": "Ubuntu-18.04", - "pool": "chromium.tests.avd" - } - ], - "named_caches": [ - { - "name": "generic_android29", - "path": ".android_emulator/generic_android29" - } - ], - "optional_dimensions": { - "60": [ - { - "caches": "generic_android29" - } - ] - }, - "output_links": [ - { - "link": [ - "https://luci-logdog.appspot.com/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], - "name": "shard #${SHARD_INDEX} logcats" - } - ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", - "shards": 2 - }, - "test": "weblayer_skew_tests", - "test_id_prefix": "ninja://weblayer/browser/android/javatests:weblayer_skew_tests/", - "variant_id": "with_impl_from_105" - } - ] - }, - "android-weblayer-marshmallow-x86-rel-tests": { - "gtest_tests": [ - { - "args": [ - "--additional-apk=apks/ChromePublic.apk", - "--test-runner-outdir", - ".", - "--implementation-outdir", - ".", - "--test-expectations", - "../../weblayer/browser/android/javatests/skew/expectations.txt", - "--webview-apk-path=apks/SystemWebView.apk", - "--client-outdir", - "../../weblayer_instrumentation_test_M100/out/Release", - "--client-version=100", - "--gs-results-bucket=chromium-result-details", - "--recover-devices", - "--avd-config=../../tools/android/avd/proto/generic_android23.textpb" - ], - "merge": { - "args": [ - "--bucket", - "chromium-result-details", - "--test-name", - "weblayer_skew_tests_with_chrome with_client_from_100" - ], - "script": "//build/android/pylib/results/presentation/test_results_presentation.py" - }, - "name": "weblayer_skew_tests_with_chrome with_client_from_100", - "resultdb": { - "enable": true, - "has_native_resultdb_integration": true - }, - "swarming": { - "can_use_on_swarming_builders": true, - "cipd_packages": [ - { - "cipd_package": "chromium/testing/weblayer-x86", - "location": "weblayer_instrumentation_test_M100", - "revision": "version:100.0.4896.134" - } - ], - "dimension_sets": [ - { - "cpu": "x86-64", - "device_os": null, - "device_type": null, - "machine_type": "n1-standard-4|e2-standard-4", - "os": "Ubuntu-18.04", - "pool": "chromium.tests.avd" - } - ], - "named_caches": [ - { - "name": "generic_android23", - "path": ".android_emulator/generic_android23" - } - ], - "optional_dimensions": { - "60": [ - { - "caches": "generic_android23" - } - ] - }, - "output_links": [ - { - "link": [ - "https://luci-logdog.appspot.com/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], - "name": "shard #${SHARD_INDEX} logcats" - } - ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", - "shards": 2 - }, - "test": "weblayer_skew_tests_with_chrome", - "test_id_prefix": "ninja://weblayer/browser/android/javatests:weblayer_skew_tests_with_chrome/", - "variant_id": "with_client_from_100" - }, - { - "args": [ - "--additional-apk=apks/ChromePublic.apk", - "--test-runner-outdir", - ".", - "--implementation-outdir", - ".", - "--test-expectations", - "../../weblayer/browser/android/javatests/skew/expectations.txt", - "--webview-apk-path=apks/SystemWebView.apk", - "--client-outdir", - "../../weblayer_instrumentation_test_M101/out/Release", - "--client-version=101", - "--gs-results-bucket=chromium-result-details", - "--recover-devices", - "--avd-config=../../tools/android/avd/proto/generic_android23.textpb" - ], - "merge": { - "args": [ - "--bucket", - "chromium-result-details", - "--test-name", - "weblayer_skew_tests_with_chrome with_client_from_101" - ], - "script": "//build/android/pylib/results/presentation/test_results_presentation.py" - }, - "name": "weblayer_skew_tests_with_chrome with_client_from_101", - "resultdb": { - "enable": true, - "has_native_resultdb_integration": true - }, - "swarming": { - "can_use_on_swarming_builders": true, - "cipd_packages": [ - { - "cipd_package": "chromium/testing/weblayer-x86", - "location": "weblayer_instrumentation_test_M101", - "revision": "version:101.0.4951.74" - } - ], - "dimension_sets": [ - { - "cpu": "x86-64", - "device_os": null, - "device_type": null, - "machine_type": "n1-standard-4|e2-standard-4", - "os": "Ubuntu-18.04", - "pool": "chromium.tests.avd" - } - ], - "named_caches": [ - { - "name": "generic_android23", - "path": ".android_emulator/generic_android23" - } - ], - "optional_dimensions": { - "60": [ - { - "caches": "generic_android23" - } - ] - }, - "output_links": [ - { - "link": [ - "https://luci-logdog.appspot.com/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], - "name": "shard #${SHARD_INDEX} logcats" - } - ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", - "shards": 2 - }, - "test": "weblayer_skew_tests_with_chrome", - "test_id_prefix": "ninja://weblayer/browser/android/javatests:weblayer_skew_tests_with_chrome/", - "variant_id": "with_client_from_101" - }, - { - "args": [ - "--additional-apk=apks/ChromePublic.apk", - "--test-runner-outdir", - ".", - "--implementation-outdir", - ".", - "--test-expectations", - "../../weblayer/browser/android/javatests/skew/expectations.txt", - "--webview-apk-path=apks/SystemWebView.apk", - "--client-outdir", - "../../weblayer_instrumentation_test_M102/out/Release", - "--client-version=102", - "--gs-results-bucket=chromium-result-details", - "--recover-devices", - "--avd-config=../../tools/android/avd/proto/generic_android23.textpb" - ], - "merge": { - "args": [ - "--bucket", - "chromium-result-details", - "--test-name", - "weblayer_skew_tests_with_chrome with_client_from_102" - ], - "script": "//build/android/pylib/results/presentation/test_results_presentation.py" - }, - "name": "weblayer_skew_tests_with_chrome with_client_from_102", - "resultdb": { - "enable": true, - "has_native_resultdb_integration": true - }, - "swarming": { - "can_use_on_swarming_builders": true, - "cipd_packages": [ - { - "cipd_package": "chromium/testing/weblayer-x86", - "location": "weblayer_instrumentation_test_M102", - "revision": "version:102.0.5005.125" - } - ], - "dimension_sets": [ - { - "cpu": "x86-64", - "device_os": null, - "device_type": null, - "machine_type": "n1-standard-4|e2-standard-4", - "os": "Ubuntu-18.04", - "pool": "chromium.tests.avd" - } - ], - "named_caches": [ - { - "name": "generic_android23", - "path": ".android_emulator/generic_android23" - } - ], - "optional_dimensions": { - "60": [ - { - "caches": "generic_android23" - } - ] - }, - "output_links": [ - { - "link": [ - "https://luci-logdog.appspot.com/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], - "name": "shard #${SHARD_INDEX} logcats" - } - ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", - "shards": 2 - }, - "test": "weblayer_skew_tests_with_chrome", - "test_id_prefix": "ninja://weblayer/browser/android/javatests:weblayer_skew_tests_with_chrome/", - "variant_id": "with_client_from_102" - }, - { - "args": [ - "--additional-apk=apks/ChromePublic.apk", - "--webview-apk-path=apks/SystemWebView.apk", - "--test-runner-outdir", - ".", - "--client-outdir", - "../../weblayer_instrumentation_test_M104/out/Release", - "--implementation-outdir", - ".", - "--test-expectations", - "../../weblayer/browser/android/javatests/skew/expectations.txt", - "--client-version=104", - "--gs-results-bucket=chromium-result-details", - "--recover-devices", - "--avd-config=../../tools/android/avd/proto/generic_android23.textpb" - ], - "merge": { - "args": [ - "--bucket", - "chromium-result-details", - "--test-name", - "weblayer_skew_tests_with_chrome with_client_from_104" - ], - "script": "//build/android/pylib/results/presentation/test_results_presentation.py" - }, - "name": "weblayer_skew_tests_with_chrome with_client_from_104", - "resultdb": { - "enable": true, - "has_native_resultdb_integration": true - }, - "swarming": { - "can_use_on_swarming_builders": true, - "cipd_packages": [ - { - "cipd_package": "chromium/testing/weblayer-x86", - "location": "weblayer_instrumentation_test_M104", - "revision": "version:104.0.5112.59" - } - ], - "dimension_sets": [ - { - "cpu": "x86-64", - "device_os": null, - "device_type": null, - "machine_type": "n1-standard-4|e2-standard-4", - "os": "Ubuntu-18.04", - "pool": "chromium.tests.avd" - } - ], - "named_caches": [ - { - "name": "generic_android23", - "path": ".android_emulator/generic_android23" - } - ], - "optional_dimensions": { - "60": [ - { - "caches": "generic_android23" - } - ] - }, - "output_links": [ - { - "link": [ - "https://luci-logdog.appspot.com/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], - "name": "shard #${SHARD_INDEX} logcats" - } - ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", - "shards": 2 - }, - "test": "weblayer_skew_tests_with_chrome", - "test_id_prefix": "ninja://weblayer/browser/android/javatests:weblayer_skew_tests_with_chrome/", - "variant_id": "with_client_from_104" - }, - { - "args": [ - "--additional-apk=apks/ChromePublic.apk", - "--webview-apk-path=apks/SystemWebView.apk", - "--test-runner-outdir", - ".", - "--client-outdir", - "../../weblayer_instrumentation_test_M105/out/Release", - "--implementation-outdir", - ".", - "--test-expectations", - "../../weblayer/browser/android/javatests/skew/expectations.txt", - "--client-version=105", - "--gs-results-bucket=chromium-result-details", - "--recover-devices", - "--avd-config=../../tools/android/avd/proto/generic_android23.textpb" - ], - "merge": { - "args": [ - "--bucket", - "chromium-result-details", - "--test-name", - "weblayer_skew_tests_with_chrome with_client_from_105" - ], - "script": "//build/android/pylib/results/presentation/test_results_presentation.py" - }, - "name": "weblayer_skew_tests_with_chrome with_client_from_105", - "resultdb": { - "enable": true, - "has_native_resultdb_integration": true - }, - "swarming": { - "can_use_on_swarming_builders": true, - "cipd_packages": [ - { - "cipd_package": "chromium/testing/weblayer-x86", - "location": "weblayer_instrumentation_test_M105", - "revision": "version:105.0.5195.145" - } - ], - "dimension_sets": [ - { - "cpu": "x86-64", - "device_os": null, - "device_type": null, - "machine_type": "n1-standard-4|e2-standard-4", - "os": "Ubuntu-18.04", - "pool": "chromium.tests.avd" - } - ], - "named_caches": [ - { - "name": "generic_android23", - "path": ".android_emulator/generic_android23" - } - ], - "optional_dimensions": { - "60": [ - { - "caches": "generic_android23" - } - ] - }, - "output_links": [ - { - "link": [ - "https://luci-logdog.appspot.com/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], - "name": "shard #${SHARD_INDEX} logcats" - } - ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", - "shards": 2 - }, - "test": "weblayer_skew_tests_with_chrome", - "test_id_prefix": "ninja://weblayer/browser/android/javatests:weblayer_skew_tests_with_chrome/", - "variant_id": "with_client_from_105" - }, - { - "args": [ - "--additional-apk=apks/ChromePublic.apk", - "--test-runner-outdir", - ".", - "--client-outdir", - ".", - "--test-expectations", - "../../weblayer/browser/android/javatests/skew/expectations.txt", - "--webview-apk-path=apks/AOSP_SystemWebView.apk", - "--implementation-outdir", - "../../weblayer_instrumentation_test_M100/out/Release", - "--impl-version=100", - "--gs-results-bucket=chromium-result-details", - "--recover-devices", - "--avd-config=../../tools/android/avd/proto/generic_android23.textpb" - ], - "merge": { - "args": [ - "--bucket", - "chromium-result-details", - "--test-name", - "weblayer_skew_tests_with_chrome with_impl_from_100" - ], - "script": "//build/android/pylib/results/presentation/test_results_presentation.py" - }, - "name": "weblayer_skew_tests_with_chrome with_impl_from_100", - "resultdb": { - "enable": true, - "has_native_resultdb_integration": true - }, - "swarming": { - "can_use_on_swarming_builders": true, - "cipd_packages": [ - { - "cipd_package": "chromium/testing/weblayer-x86", - "location": "weblayer_instrumentation_test_M100", - "revision": "version:100.0.4896.134" - } - ], - "dimension_sets": [ - { - "cpu": "x86-64", - "device_os": null, - "device_type": null, - "machine_type": "n1-standard-4|e2-standard-4", - "os": "Ubuntu-18.04", - "pool": "chromium.tests.avd" - } - ], - "named_caches": [ - { - "name": "generic_android23", - "path": ".android_emulator/generic_android23" - } - ], - "optional_dimensions": { - "60": [ - { - "caches": "generic_android23" - } - ] - }, - "output_links": [ - { - "link": [ - "https://luci-logdog.appspot.com/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], - "name": "shard #${SHARD_INDEX} logcats" - } - ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", - "shards": 2 - }, - "test": "weblayer_skew_tests_with_chrome", - "test_id_prefix": "ninja://weblayer/browser/android/javatests:weblayer_skew_tests_with_chrome/", - "variant_id": "with_impl_from_100" - }, - { - "args": [ - "--additional-apk=apks/ChromePublic.apk", - "--test-runner-outdir", - ".", - "--client-outdir", - ".", - "--test-expectations", - "../../weblayer/browser/android/javatests/skew/expectations.txt", - "--webview-apk-path=apks/AOSP_SystemWebView.apk", - "--implementation-outdir", - "../../weblayer_instrumentation_test_M101/out/Release", - "--impl-version=101", - "--gs-results-bucket=chromium-result-details", - "--recover-devices", - "--avd-config=../../tools/android/avd/proto/generic_android23.textpb" - ], - "merge": { - "args": [ - "--bucket", - "chromium-result-details", - "--test-name", - "weblayer_skew_tests_with_chrome with_impl_from_101" - ], - "script": "//build/android/pylib/results/presentation/test_results_presentation.py" - }, - "name": "weblayer_skew_tests_with_chrome with_impl_from_101", - "resultdb": { - "enable": true, - "has_native_resultdb_integration": true - }, - "swarming": { - "can_use_on_swarming_builders": true, - "cipd_packages": [ - { - "cipd_package": "chromium/testing/weblayer-x86", - "location": "weblayer_instrumentation_test_M101", - "revision": "version:101.0.4951.74" - } - ], - "dimension_sets": [ - { - "cpu": "x86-64", - "device_os": null, - "device_type": null, - "machine_type": "n1-standard-4|e2-standard-4", - "os": "Ubuntu-18.04", - "pool": "chromium.tests.avd" - } - ], - "named_caches": [ - { - "name": "generic_android23", - "path": ".android_emulator/generic_android23" - } - ], - "optional_dimensions": { - "60": [ - { - "caches": "generic_android23" - } - ] - }, - "output_links": [ - { - "link": [ - "https://luci-logdog.appspot.com/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], - "name": "shard #${SHARD_INDEX} logcats" - } - ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", - "shards": 2 - }, - "test": "weblayer_skew_tests_with_chrome", - "test_id_prefix": "ninja://weblayer/browser/android/javatests:weblayer_skew_tests_with_chrome/", - "variant_id": "with_impl_from_101" - }, - { - "args": [ - "--additional-apk=apks/ChromePublic.apk", - "--test-runner-outdir", - ".", - "--client-outdir", - ".", - "--test-expectations", - "../../weblayer/browser/android/javatests/skew/expectations.txt", - "--webview-apk-path=apks/AOSP_SystemWebView.apk", - "--implementation-outdir", - "../../weblayer_instrumentation_test_M102/out/Release", - "--impl-version=102", - "--gs-results-bucket=chromium-result-details", - "--recover-devices", - "--avd-config=../../tools/android/avd/proto/generic_android23.textpb" - ], - "merge": { - "args": [ - "--bucket", - "chromium-result-details", - "--test-name", - "weblayer_skew_tests_with_chrome with_impl_from_102" - ], - "script": "//build/android/pylib/results/presentation/test_results_presentation.py" - }, - "name": "weblayer_skew_tests_with_chrome with_impl_from_102", - "resultdb": { - "enable": true, - "has_native_resultdb_integration": true - }, - "swarming": { - "can_use_on_swarming_builders": true, - "cipd_packages": [ - { - "cipd_package": "chromium/testing/weblayer-x86", - "location": "weblayer_instrumentation_test_M102", - "revision": "version:102.0.5005.125" - } - ], - "dimension_sets": [ - { - "cpu": "x86-64", - "device_os": null, - "device_type": null, - "machine_type": "n1-standard-4|e2-standard-4", - "os": "Ubuntu-18.04", - "pool": "chromium.tests.avd" - } - ], - "named_caches": [ - { - "name": "generic_android23", - "path": ".android_emulator/generic_android23" - } - ], - "optional_dimensions": { - "60": [ - { - "caches": "generic_android23" - } - ] - }, - "output_links": [ - { - "link": [ - "https://luci-logdog.appspot.com/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], - "name": "shard #${SHARD_INDEX} logcats" - } - ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", - "shards": 2 - }, - "test": "weblayer_skew_tests_with_chrome", - "test_id_prefix": "ninja://weblayer/browser/android/javatests:weblayer_skew_tests_with_chrome/", - "variant_id": "with_impl_from_102" - }, - { - "args": [ - "--additional-apk=apks/ChromePublic.apk", - "--webview-apk-path=apks/AOSP_SystemWebView.apk", - "--test-runner-outdir", - ".", - "--client-outdir", - ".", - "--implementation-outdir", - "../../weblayer_instrumentation_test_M104/out/Release", - "--test-expectations", - "../../weblayer/browser/android/javatests/skew/expectations.txt", - "--impl-version=104", - "--gs-results-bucket=chromium-result-details", - "--recover-devices", - "--avd-config=../../tools/android/avd/proto/generic_android23.textpb" - ], - "merge": { - "args": [ - "--bucket", - "chromium-result-details", - "--test-name", - "weblayer_skew_tests_with_chrome with_impl_from_104" - ], - "script": "//build/android/pylib/results/presentation/test_results_presentation.py" - }, - "name": "weblayer_skew_tests_with_chrome with_impl_from_104", - "resultdb": { - "enable": true, - "has_native_resultdb_integration": true - }, - "swarming": { - "can_use_on_swarming_builders": true, - "cipd_packages": [ - { - "cipd_package": "chromium/testing/weblayer-x86", - "location": "weblayer_instrumentation_test_M104", - "revision": "version:104.0.5112.59" - } - ], - "dimension_sets": [ - { - "cpu": "x86-64", - "device_os": null, - "device_type": null, - "machine_type": "n1-standard-4|e2-standard-4", - "os": "Ubuntu-18.04", - "pool": "chromium.tests.avd" - } - ], - "named_caches": [ - { - "name": "generic_android23", - "path": ".android_emulator/generic_android23" - } - ], - "optional_dimensions": { - "60": [ - { - "caches": "generic_android23" - } - ] - }, - "output_links": [ - { - "link": [ - "https://luci-logdog.appspot.com/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], - "name": "shard #${SHARD_INDEX} logcats" - } - ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", - "shards": 2 - }, - "test": "weblayer_skew_tests_with_chrome", - "test_id_prefix": "ninja://weblayer/browser/android/javatests:weblayer_skew_tests_with_chrome/", - "variant_id": "with_impl_from_104" - }, - { - "args": [ - "--additional-apk=apks/ChromePublic.apk", - "--webview-apk-path=apks/AOSP_SystemWebView.apk", - "--test-runner-outdir", - ".", - "--client-outdir", - ".", - "--implementation-outdir", - "../../weblayer_instrumentation_test_M105/out/Release", - "--test-expectations", - "../../weblayer/browser/android/javatests/skew/expectations.txt", - "--impl-version=105", - "--gs-results-bucket=chromium-result-details", - "--recover-devices", - "--avd-config=../../tools/android/avd/proto/generic_android23.textpb" - ], - "merge": { - "args": [ - "--bucket", - "chromium-result-details", - "--test-name", - "weblayer_skew_tests_with_chrome with_impl_from_105" - ], - "script": "//build/android/pylib/results/presentation/test_results_presentation.py" - }, - "name": "weblayer_skew_tests_with_chrome with_impl_from_105", - "resultdb": { - "enable": true, - "has_native_resultdb_integration": true - }, - "swarming": { - "can_use_on_swarming_builders": true, - "cipd_packages": [ - { - "cipd_package": "chromium/testing/weblayer-x86", - "location": "weblayer_instrumentation_test_M105", - "revision": "version:105.0.5195.145" - } - ], - "dimension_sets": [ - { - "cpu": "x86-64", - "device_os": null, - "device_type": null, - "machine_type": "n1-standard-4|e2-standard-4", - "os": "Ubuntu-18.04", - "pool": "chromium.tests.avd" - } - ], - "named_caches": [ - { - "name": "generic_android23", - "path": ".android_emulator/generic_android23" - } - ], - "optional_dimensions": { - "60": [ - { - "caches": "generic_android23" - } - ] - }, - "output_links": [ - { - "link": [ - "https://luci-logdog.appspot.com/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], - "name": "shard #${SHARD_INDEX} logcats" - } - ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", - "shards": 2 - }, - "test": "weblayer_skew_tests_with_chrome", - "test_id_prefix": "ninja://weblayer/browser/android/javatests:weblayer_skew_tests_with_chrome/", - "variant_id": "with_impl_from_105" - } - ] - }, - "android-weblayer-oreo-x86-rel-tests": { - "gtest_tests": [ - { - "args": [ - "--gs-results-bucket=chromium-result-details", - "--recover-devices", - "--avd-config=../../tools/android/avd/proto/generic_android27.textpb" - ], - "merge": { - "args": [ - "--bucket", - "chromium-result-details", - "--test-name", - "weblayer_instrumentation_test_apk ToT_Tests" - ], - "script": "//build/android/pylib/results/presentation/test_results_presentation.py" - }, - "name": "weblayer_instrumentation_test_apk ToT_Tests", - "resultdb": { - "enable": true, - "has_native_resultdb_integration": true - }, - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "cpu": "x86-64", - "device_os": null, - "device_type": null, - "machine_type": "n1-standard-4|e2-standard-4", - "os": "Ubuntu-18.04", - "pool": "chromium.tests.avd" - } - ], - "named_caches": [ - { - "name": "generic_android27", - "path": ".android_emulator/generic_android27" - } - ], - "optional_dimensions": { - "60": [ - { - "caches": "generic_android27" - } - ] - }, - "output_links": [ - { - "link": [ - "https://luci-logdog.appspot.com/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], - "name": "shard #${SHARD_INDEX} logcats" - } - ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" - }, - "test": "weblayer_instrumentation_test_apk", - "test_id_prefix": "ninja://weblayer/browser/android/javatests:weblayer_instrumentation_test_apk/", - "variant_id": "ToT_Tests" - }, - { - "args": [ - "--additional-apk=apks/WebLayerShellSystemWebView.apk", - "--test-runner-outdir", - ".", - "--implementation-outdir", - ".", - "--test-expectations", - "../../weblayer/browser/android/javatests/skew/expectations.txt", - "--webview-apk-path=apks/SystemWebView.apk", - "--client-outdir", - "../../weblayer_instrumentation_test_M100/out/Release", - "--client-version=100", - "--gs-results-bucket=chromium-result-details", - "--recover-devices", - "--avd-config=../../tools/android/avd/proto/generic_android27.textpb" - ], - "merge": { - "args": [ - "--bucket", - "chromium-result-details", - "--test-name", - "weblayer_skew_tests with_client_from_100" - ], - "script": "//build/android/pylib/results/presentation/test_results_presentation.py" - }, - "name": "weblayer_skew_tests with_client_from_100", - "resultdb": { - "enable": true, - "has_native_resultdb_integration": true - }, - "swarming": { - "can_use_on_swarming_builders": true, - "cipd_packages": [ - { - "cipd_package": "chromium/testing/weblayer-x86", - "location": "weblayer_instrumentation_test_M100", - "revision": "version:100.0.4896.134" - } - ], - "dimension_sets": [ - { - "cpu": "x86-64", - "device_os": null, - "device_type": null, - "machine_type": "n1-standard-4|e2-standard-4", - "os": "Ubuntu-18.04", - "pool": "chromium.tests.avd" - } - ], - "named_caches": [ - { - "name": "generic_android27", - "path": ".android_emulator/generic_android27" - } - ], - "optional_dimensions": { - "60": [ - { - "caches": "generic_android27" - } - ] - }, - "output_links": [ - { - "link": [ - "https://luci-logdog.appspot.com/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], - "name": "shard #${SHARD_INDEX} logcats" - } - ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", - "shards": 2 - }, - "test": "weblayer_skew_tests", - "test_id_prefix": "ninja://weblayer/browser/android/javatests:weblayer_skew_tests/", - "variant_id": "with_client_from_100" - }, - { - "args": [ - "--additional-apk=apks/WebLayerShellSystemWebView.apk", - "--test-runner-outdir", - ".", - "--implementation-outdir", - ".", - "--test-expectations", - "../../weblayer/browser/android/javatests/skew/expectations.txt", - "--webview-apk-path=apks/SystemWebView.apk", - "--client-outdir", - "../../weblayer_instrumentation_test_M101/out/Release", - "--client-version=101", - "--gs-results-bucket=chromium-result-details", - "--recover-devices", - "--avd-config=../../tools/android/avd/proto/generic_android27.textpb" - ], - "merge": { - "args": [ - "--bucket", - "chromium-result-details", - "--test-name", - "weblayer_skew_tests with_client_from_101" - ], - "script": "//build/android/pylib/results/presentation/test_results_presentation.py" - }, - "name": "weblayer_skew_tests with_client_from_101", - "resultdb": { - "enable": true, - "has_native_resultdb_integration": true - }, - "swarming": { - "can_use_on_swarming_builders": true, - "cipd_packages": [ - { - "cipd_package": "chromium/testing/weblayer-x86", - "location": "weblayer_instrumentation_test_M101", - "revision": "version:101.0.4951.74" - } - ], - "dimension_sets": [ - { - "cpu": "x86-64", - "device_os": null, - "device_type": null, - "machine_type": "n1-standard-4|e2-standard-4", - "os": "Ubuntu-18.04", - "pool": "chromium.tests.avd" - } - ], - "named_caches": [ - { - "name": "generic_android27", - "path": ".android_emulator/generic_android27" - } - ], - "optional_dimensions": { - "60": [ - { - "caches": "generic_android27" - } - ] - }, - "output_links": [ - { - "link": [ - "https://luci-logdog.appspot.com/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], - "name": "shard #${SHARD_INDEX} logcats" - } - ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", - "shards": 2 - }, - "test": "weblayer_skew_tests", - "test_id_prefix": "ninja://weblayer/browser/android/javatests:weblayer_skew_tests/", - "variant_id": "with_client_from_101" - }, - { - "args": [ - "--additional-apk=apks/WebLayerShellSystemWebView.apk", - "--test-runner-outdir", - ".", - "--implementation-outdir", - ".", - "--test-expectations", - "../../weblayer/browser/android/javatests/skew/expectations.txt", - "--webview-apk-path=apks/SystemWebView.apk", - "--client-outdir", - "../../weblayer_instrumentation_test_M102/out/Release", - "--client-version=102", - "--gs-results-bucket=chromium-result-details", - "--recover-devices", - "--avd-config=../../tools/android/avd/proto/generic_android27.textpb" - ], - "merge": { - "args": [ - "--bucket", - "chromium-result-details", - "--test-name", - "weblayer_skew_tests with_client_from_102" - ], - "script": "//build/android/pylib/results/presentation/test_results_presentation.py" - }, - "name": "weblayer_skew_tests with_client_from_102", - "resultdb": { - "enable": true, - "has_native_resultdb_integration": true - }, - "swarming": { - "can_use_on_swarming_builders": true, - "cipd_packages": [ - { - "cipd_package": "chromium/testing/weblayer-x86", - "location": "weblayer_instrumentation_test_M102", - "revision": "version:102.0.5005.125" - } - ], - "dimension_sets": [ - { - "cpu": "x86-64", - "device_os": null, - "device_type": null, - "machine_type": "n1-standard-4|e2-standard-4", - "os": "Ubuntu-18.04", - "pool": "chromium.tests.avd" - } - ], - "named_caches": [ - { - "name": "generic_android27", - "path": ".android_emulator/generic_android27" - } - ], - "optional_dimensions": { - "60": [ - { - "caches": "generic_android27" - } - ] - }, - "output_links": [ - { - "link": [ - "https://luci-logdog.appspot.com/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], - "name": "shard #${SHARD_INDEX} logcats" - } - ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", - "shards": 2 - }, - "test": "weblayer_skew_tests", - "test_id_prefix": "ninja://weblayer/browser/android/javatests:weblayer_skew_tests/", - "variant_id": "with_client_from_102" - }, - { - "args": [ - "--additional-apk=apks/WebLayerShellSystemWebView.apk", - "--webview-apk-path=apks/SystemWebView.apk", - "--test-runner-outdir", - ".", - "--client-outdir", - "../../weblayer_instrumentation_test_M104/out/Release", - "--implementation-outdir", - ".", - "--test-expectations", - "../../weblayer/browser/android/javatests/skew/expectations.txt", - "--client-version=104", - "--gs-results-bucket=chromium-result-details", - "--recover-devices", - "--avd-config=../../tools/android/avd/proto/generic_android27.textpb" - ], - "merge": { - "args": [ - "--bucket", - "chromium-result-details", - "--test-name", - "weblayer_skew_tests with_client_from_104" - ], - "script": "//build/android/pylib/results/presentation/test_results_presentation.py" - }, - "name": "weblayer_skew_tests with_client_from_104", - "resultdb": { - "enable": true, - "has_native_resultdb_integration": true - }, - "swarming": { - "can_use_on_swarming_builders": true, - "cipd_packages": [ - { - "cipd_package": "chromium/testing/weblayer-x86", - "location": "weblayer_instrumentation_test_M104", - "revision": "version:104.0.5112.59" - } - ], - "dimension_sets": [ - { - "cpu": "x86-64", - "device_os": null, - "device_type": null, - "machine_type": "n1-standard-4|e2-standard-4", - "os": "Ubuntu-18.04", - "pool": "chromium.tests.avd" - } - ], - "named_caches": [ - { - "name": "generic_android27", - "path": ".android_emulator/generic_android27" - } - ], - "optional_dimensions": { - "60": [ - { - "caches": "generic_android27" - } - ] - }, - "output_links": [ - { - "link": [ - "https://luci-logdog.appspot.com/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], - "name": "shard #${SHARD_INDEX} logcats" - } - ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", - "shards": 2 - }, - "test": "weblayer_skew_tests", - "test_id_prefix": "ninja://weblayer/browser/android/javatests:weblayer_skew_tests/", - "variant_id": "with_client_from_104" - }, - { - "args": [ - "--additional-apk=apks/WebLayerShellSystemWebView.apk", - "--webview-apk-path=apks/SystemWebView.apk", - "--test-runner-outdir", - ".", - "--client-outdir", - "../../weblayer_instrumentation_test_M105/out/Release", - "--implementation-outdir", - ".", - "--test-expectations", - "../../weblayer/browser/android/javatests/skew/expectations.txt", - "--client-version=105", - "--gs-results-bucket=chromium-result-details", - "--recover-devices", - "--avd-config=../../tools/android/avd/proto/generic_android27.textpb" - ], - "merge": { - "args": [ - "--bucket", - "chromium-result-details", - "--test-name", - "weblayer_skew_tests with_client_from_105" - ], - "script": "//build/android/pylib/results/presentation/test_results_presentation.py" - }, - "name": "weblayer_skew_tests with_client_from_105", - "resultdb": { - "enable": true, - "has_native_resultdb_integration": true - }, - "swarming": { - "can_use_on_swarming_builders": true, - "cipd_packages": [ - { - "cipd_package": "chromium/testing/weblayer-x86", - "location": "weblayer_instrumentation_test_M105", - "revision": "version:105.0.5195.145" - } - ], - "dimension_sets": [ - { - "cpu": "x86-64", - "device_os": null, - "device_type": null, - "machine_type": "n1-standard-4|e2-standard-4", - "os": "Ubuntu-18.04", - "pool": "chromium.tests.avd" - } - ], - "named_caches": [ - { - "name": "generic_android27", - "path": ".android_emulator/generic_android27" - } - ], - "optional_dimensions": { - "60": [ - { - "caches": "generic_android27" - } - ] - }, - "output_links": [ - { - "link": [ - "https://luci-logdog.appspot.com/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], - "name": "shard #${SHARD_INDEX} logcats" - } - ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", - "shards": 2 - }, - "test": "weblayer_skew_tests", - "test_id_prefix": "ninja://weblayer/browser/android/javatests:weblayer_skew_tests/", - "variant_id": "with_client_from_105" - }, - { - "args": [ - "--additional-apk=apks/WebLayerShellSystemWebView.apk", - "--test-runner-outdir", - ".", - "--client-outdir", - ".", - "--test-expectations", - "../../weblayer/browser/android/javatests/skew/expectations.txt", - "--webview-apk-path=apks/SystemWebView.apk", - "--implementation-outdir", - "../../weblayer_instrumentation_test_M100/out/Release", - "--impl-version=100", - "--gs-results-bucket=chromium-result-details", - "--recover-devices", - "--avd-config=../../tools/android/avd/proto/generic_android27.textpb" - ], - "merge": { - "args": [ - "--bucket", - "chromium-result-details", - "--test-name", - "weblayer_skew_tests with_impl_from_100" - ], - "script": "//build/android/pylib/results/presentation/test_results_presentation.py" - }, - "name": "weblayer_skew_tests with_impl_from_100", - "resultdb": { - "enable": true, - "has_native_resultdb_integration": true - }, - "swarming": { - "can_use_on_swarming_builders": true, - "cipd_packages": [ - { - "cipd_package": "chromium/testing/weblayer-x86", - "location": "weblayer_instrumentation_test_M100", - "revision": "version:100.0.4896.134" - } - ], - "dimension_sets": [ - { - "cpu": "x86-64", - "device_os": null, - "device_type": null, - "machine_type": "n1-standard-4|e2-standard-4", - "os": "Ubuntu-18.04", - "pool": "chromium.tests.avd" - } - ], - "named_caches": [ - { - "name": "generic_android27", - "path": ".android_emulator/generic_android27" - } - ], - "optional_dimensions": { - "60": [ - { - "caches": "generic_android27" - } - ] - }, - "output_links": [ - { - "link": [ - "https://luci-logdog.appspot.com/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], - "name": "shard #${SHARD_INDEX} logcats" - } - ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", - "shards": 2 - }, - "test": "weblayer_skew_tests", - "test_id_prefix": "ninja://weblayer/browser/android/javatests:weblayer_skew_tests/", - "variant_id": "with_impl_from_100" - }, - { - "args": [ - "--additional-apk=apks/WebLayerShellSystemWebView.apk", - "--test-runner-outdir", - ".", - "--client-outdir", - ".", - "--test-expectations", - "../../weblayer/browser/android/javatests/skew/expectations.txt", - "--webview-apk-path=apks/SystemWebView.apk", - "--implementation-outdir", - "../../weblayer_instrumentation_test_M101/out/Release", - "--impl-version=101", - "--gs-results-bucket=chromium-result-details", - "--recover-devices", - "--avd-config=../../tools/android/avd/proto/generic_android27.textpb" - ], - "merge": { - "args": [ - "--bucket", - "chromium-result-details", - "--test-name", - "weblayer_skew_tests with_impl_from_101" - ], - "script": "//build/android/pylib/results/presentation/test_results_presentation.py" - }, - "name": "weblayer_skew_tests with_impl_from_101", - "resultdb": { - "enable": true, - "has_native_resultdb_integration": true - }, - "swarming": { - "can_use_on_swarming_builders": true, - "cipd_packages": [ - { - "cipd_package": "chromium/testing/weblayer-x86", - "location": "weblayer_instrumentation_test_M101", - "revision": "version:101.0.4951.74" - } - ], - "dimension_sets": [ - { - "cpu": "x86-64", - "device_os": null, - "device_type": null, - "machine_type": "n1-standard-4|e2-standard-4", - "os": "Ubuntu-18.04", - "pool": "chromium.tests.avd" - } - ], - "named_caches": [ - { - "name": "generic_android27", - "path": ".android_emulator/generic_android27" - } - ], - "optional_dimensions": { - "60": [ - { - "caches": "generic_android27" - } - ] - }, - "output_links": [ - { - "link": [ - "https://luci-logdog.appspot.com/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], - "name": "shard #${SHARD_INDEX} logcats" - } - ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", - "shards": 2 - }, - "test": "weblayer_skew_tests", - "test_id_prefix": "ninja://weblayer/browser/android/javatests:weblayer_skew_tests/", - "variant_id": "with_impl_from_101" - }, - { - "args": [ - "--additional-apk=apks/WebLayerShellSystemWebView.apk", - "--test-runner-outdir", - ".", - "--client-outdir", - ".", - "--test-expectations", - "../../weblayer/browser/android/javatests/skew/expectations.txt", - "--webview-apk-path=apks/SystemWebView.apk", - "--implementation-outdir", - "../../weblayer_instrumentation_test_M102/out/Release", - "--impl-version=102", - "--gs-results-bucket=chromium-result-details", - "--recover-devices", - "--avd-config=../../tools/android/avd/proto/generic_android27.textpb" - ], - "merge": { - "args": [ - "--bucket", - "chromium-result-details", - "--test-name", - "weblayer_skew_tests with_impl_from_102" - ], - "script": "//build/android/pylib/results/presentation/test_results_presentation.py" - }, - "name": "weblayer_skew_tests with_impl_from_102", - "resultdb": { - "enable": true, - "has_native_resultdb_integration": true - }, - "swarming": { - "can_use_on_swarming_builders": true, - "cipd_packages": [ - { - "cipd_package": "chromium/testing/weblayer-x86", - "location": "weblayer_instrumentation_test_M102", - "revision": "version:102.0.5005.125" - } - ], - "dimension_sets": [ - { - "cpu": "x86-64", - "device_os": null, - "device_type": null, - "machine_type": "n1-standard-4|e2-standard-4", - "os": "Ubuntu-18.04", - "pool": "chromium.tests.avd" - } - ], - "named_caches": [ - { - "name": "generic_android27", - "path": ".android_emulator/generic_android27" - } - ], - "optional_dimensions": { - "60": [ - { - "caches": "generic_android27" - } - ] - }, - "output_links": [ - { - "link": [ - "https://luci-logdog.appspot.com/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], - "name": "shard #${SHARD_INDEX} logcats" - } - ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", - "shards": 2 - }, - "test": "weblayer_skew_tests", - "test_id_prefix": "ninja://weblayer/browser/android/javatests:weblayer_skew_tests/", - "variant_id": "with_impl_from_102" - }, - { - "args": [ - "--additional-apk=apks/WebLayerShellSystemWebView.apk", - "--webview-apk-path=apks/SystemWebView.apk", - "--test-runner-outdir", - ".", - "--client-outdir", - ".", - "--implementation-outdir", - "../../weblayer_instrumentation_test_M104/out/Release", - "--test-expectations", - "../../weblayer/browser/android/javatests/skew/expectations.txt", - "--impl-version=104", - "--gs-results-bucket=chromium-result-details", - "--recover-devices", - "--avd-config=../../tools/android/avd/proto/generic_android27.textpb" - ], - "merge": { - "args": [ - "--bucket", - "chromium-result-details", - "--test-name", - "weblayer_skew_tests with_impl_from_104" - ], - "script": "//build/android/pylib/results/presentation/test_results_presentation.py" - }, - "name": "weblayer_skew_tests with_impl_from_104", - "resultdb": { - "enable": true, - "has_native_resultdb_integration": true - }, - "swarming": { - "can_use_on_swarming_builders": true, - "cipd_packages": [ - { - "cipd_package": "chromium/testing/weblayer-x86", - "location": "weblayer_instrumentation_test_M104", - "revision": "version:104.0.5112.59" - } - ], - "dimension_sets": [ - { - "cpu": "x86-64", - "device_os": null, - "device_type": null, - "machine_type": "n1-standard-4|e2-standard-4", - "os": "Ubuntu-18.04", - "pool": "chromium.tests.avd" - } - ], - "named_caches": [ - { - "name": "generic_android27", - "path": ".android_emulator/generic_android27" - } - ], - "optional_dimensions": { - "60": [ - { - "caches": "generic_android27" - } - ] - }, - "output_links": [ - { - "link": [ - "https://luci-logdog.appspot.com/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], - "name": "shard #${SHARD_INDEX} logcats" - } - ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", - "shards": 2 - }, - "test": "weblayer_skew_tests", - "test_id_prefix": "ninja://weblayer/browser/android/javatests:weblayer_skew_tests/", - "variant_id": "with_impl_from_104" - }, - { - "args": [ - "--additional-apk=apks/WebLayerShellSystemWebView.apk", - "--webview-apk-path=apks/SystemWebView.apk", - "--test-runner-outdir", - ".", - "--client-outdir", - ".", - "--implementation-outdir", - "../../weblayer_instrumentation_test_M105/out/Release", - "--test-expectations", - "../../weblayer/browser/android/javatests/skew/expectations.txt", - "--impl-version=105", - "--gs-results-bucket=chromium-result-details", - "--recover-devices", - "--avd-config=../../tools/android/avd/proto/generic_android27.textpb" - ], - "merge": { - "args": [ - "--bucket", - "chromium-result-details", - "--test-name", - "weblayer_skew_tests with_impl_from_105" - ], - "script": "//build/android/pylib/results/presentation/test_results_presentation.py" - }, - "name": "weblayer_skew_tests with_impl_from_105", - "resultdb": { - "enable": true, - "has_native_resultdb_integration": true - }, - "swarming": { - "can_use_on_swarming_builders": true, - "cipd_packages": [ - { - "cipd_package": "chromium/testing/weblayer-x86", - "location": "weblayer_instrumentation_test_M105", - "revision": "version:105.0.5195.145" - } - ], - "dimension_sets": [ - { - "cpu": "x86-64", - "device_os": null, - "device_type": null, - "machine_type": "n1-standard-4|e2-standard-4", - "os": "Ubuntu-18.04", - "pool": "chromium.tests.avd" - } - ], - "named_caches": [ - { - "name": "generic_android27", - "path": ".android_emulator/generic_android27" - } - ], - "optional_dimensions": { - "60": [ - { - "caches": "generic_android27" - } - ] - }, - "output_links": [ - { - "link": [ - "https://luci-logdog.appspot.com/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], - "name": "shard #${SHARD_INDEX} logcats" - } - ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", - "shards": 2 - }, - "test": "weblayer_skew_tests", - "test_id_prefix": "ninja://weblayer/browser/android/javatests:weblayer_skew_tests/", - "variant_id": "with_impl_from_105" - } - ] - }, - "android-weblayer-pie-x86-rel-tests": { - "gtest_tests": [ - { - "args": [ - "--gs-results-bucket=chromium-result-details", - "--recover-devices", - "--avd-config=../../tools/android/avd/proto/generic_android28.textpb" - ], - "merge": { - "args": [ - "--bucket", - "chromium-result-details", - "--test-name", - "weblayer_instrumentation_test_apk ToT_Tests" - ], - "script": "//build/android/pylib/results/presentation/test_results_presentation.py" - }, - "name": "weblayer_instrumentation_test_apk ToT_Tests", - "resultdb": { - "enable": true, - "has_native_resultdb_integration": true - }, - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "cpu": "x86-64", - "device_os": null, - "device_type": null, - "machine_type": "n1-standard-4|e2-standard-4", - "os": "Ubuntu-18.04", - "pool": "chromium.tests.avd" - } - ], - "named_caches": [ - { - "name": "generic_android28", - "path": ".android_emulator/generic_android28" - } - ], - "optional_dimensions": { - "60": [ - { - "caches": "generic_android28" - } - ] - }, - "output_links": [ - { - "link": [ - "https://luci-logdog.appspot.com/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], - "name": "shard #${SHARD_INDEX} logcats" - } - ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" - }, - "test": "weblayer_instrumentation_test_apk", - "test_id_prefix": "ninja://weblayer/browser/android/javatests:weblayer_instrumentation_test_apk/", - "variant_id": "ToT_Tests" - }, - { - "args": [ - "--additional-apk=apks/WebLayerShellSystemWebView.apk", - "--test-runner-outdir", - ".", - "--implementation-outdir", - ".", - "--test-expectations", - "../../weblayer/browser/android/javatests/skew/expectations.txt", - "--webview-apk-path=apks/SystemWebView.apk", - "--client-outdir", - "../../weblayer_instrumentation_test_M100/out/Release", - "--client-version=100", - "--gs-results-bucket=chromium-result-details", - "--recover-devices", - "--avd-config=../../tools/android/avd/proto/generic_android28.textpb" - ], - "merge": { - "args": [ - "--bucket", - "chromium-result-details", - "--test-name", - "weblayer_skew_tests with_client_from_100" - ], - "script": "//build/android/pylib/results/presentation/test_results_presentation.py" - }, - "name": "weblayer_skew_tests with_client_from_100", - "resultdb": { - "enable": true, - "has_native_resultdb_integration": true - }, - "swarming": { - "can_use_on_swarming_builders": true, - "cipd_packages": [ - { - "cipd_package": "chromium/testing/weblayer-x86", - "location": "weblayer_instrumentation_test_M100", - "revision": "version:100.0.4896.134" - } - ], - "dimension_sets": [ - { - "cpu": "x86-64", - "device_os": null, - "device_type": null, - "machine_type": "n1-standard-4|e2-standard-4", - "os": "Ubuntu-18.04", - "pool": "chromium.tests.avd" - } - ], - "named_caches": [ - { - "name": "generic_android28", - "path": ".android_emulator/generic_android28" - } - ], - "optional_dimensions": { - "60": [ - { - "caches": "generic_android28" - } - ] - }, - "output_links": [ - { - "link": [ - "https://luci-logdog.appspot.com/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], - "name": "shard #${SHARD_INDEX} logcats" - } - ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", - "shards": 2 - }, - "test": "weblayer_skew_tests", - "test_id_prefix": "ninja://weblayer/browser/android/javatests:weblayer_skew_tests/", - "variant_id": "with_client_from_100" - }, - { - "args": [ - "--additional-apk=apks/WebLayerShellSystemWebView.apk", - "--test-runner-outdir", - ".", - "--implementation-outdir", - ".", - "--test-expectations", - "../../weblayer/browser/android/javatests/skew/expectations.txt", - "--webview-apk-path=apks/SystemWebView.apk", - "--client-outdir", - "../../weblayer_instrumentation_test_M101/out/Release", - "--client-version=101", - "--gs-results-bucket=chromium-result-details", - "--recover-devices", - "--avd-config=../../tools/android/avd/proto/generic_android28.textpb" - ], - "merge": { - "args": [ - "--bucket", - "chromium-result-details", - "--test-name", - "weblayer_skew_tests with_client_from_101" - ], - "script": "//build/android/pylib/results/presentation/test_results_presentation.py" - }, - "name": "weblayer_skew_tests with_client_from_101", - "resultdb": { - "enable": true, - "has_native_resultdb_integration": true - }, - "swarming": { - "can_use_on_swarming_builders": true, - "cipd_packages": [ - { - "cipd_package": "chromium/testing/weblayer-x86", - "location": "weblayer_instrumentation_test_M101", - "revision": "version:101.0.4951.74" - } - ], - "dimension_sets": [ - { - "cpu": "x86-64", - "device_os": null, - "device_type": null, - "machine_type": "n1-standard-4|e2-standard-4", - "os": "Ubuntu-18.04", - "pool": "chromium.tests.avd" - } - ], - "named_caches": [ - { - "name": "generic_android28", - "path": ".android_emulator/generic_android28" - } - ], - "optional_dimensions": { - "60": [ - { - "caches": "generic_android28" - } - ] - }, - "output_links": [ - { - "link": [ - "https://luci-logdog.appspot.com/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], - "name": "shard #${SHARD_INDEX} logcats" - } - ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", - "shards": 2 - }, - "test": "weblayer_skew_tests", - "test_id_prefix": "ninja://weblayer/browser/android/javatests:weblayer_skew_tests/", - "variant_id": "with_client_from_101" - }, - { - "args": [ - "--additional-apk=apks/WebLayerShellSystemWebView.apk", - "--test-runner-outdir", - ".", - "--implementation-outdir", - ".", - "--test-expectations", - "../../weblayer/browser/android/javatests/skew/expectations.txt", - "--webview-apk-path=apks/SystemWebView.apk", - "--client-outdir", - "../../weblayer_instrumentation_test_M102/out/Release", - "--client-version=102", - "--gs-results-bucket=chromium-result-details", - "--recover-devices", - "--avd-config=../../tools/android/avd/proto/generic_android28.textpb" - ], - "merge": { - "args": [ - "--bucket", - "chromium-result-details", - "--test-name", - "weblayer_skew_tests with_client_from_102" - ], - "script": "//build/android/pylib/results/presentation/test_results_presentation.py" - }, - "name": "weblayer_skew_tests with_client_from_102", - "resultdb": { - "enable": true, - "has_native_resultdb_integration": true - }, - "swarming": { - "can_use_on_swarming_builders": true, - "cipd_packages": [ - { - "cipd_package": "chromium/testing/weblayer-x86", - "location": "weblayer_instrumentation_test_M102", - "revision": "version:102.0.5005.125" - } - ], - "dimension_sets": [ - { - "cpu": "x86-64", - "device_os": null, - "device_type": null, - "machine_type": "n1-standard-4|e2-standard-4", - "os": "Ubuntu-18.04", - "pool": "chromium.tests.avd" - } - ], - "named_caches": [ - { - "name": "generic_android28", - "path": ".android_emulator/generic_android28" - } - ], - "optional_dimensions": { - "60": [ - { - "caches": "generic_android28" - } - ] - }, - "output_links": [ - { - "link": [ - "https://luci-logdog.appspot.com/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], - "name": "shard #${SHARD_INDEX} logcats" - } - ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", - "shards": 2 - }, - "test": "weblayer_skew_tests", - "test_id_prefix": "ninja://weblayer/browser/android/javatests:weblayer_skew_tests/", - "variant_id": "with_client_from_102" - }, - { - "args": [ - "--additional-apk=apks/WebLayerShellSystemWebView.apk", - "--webview-apk-path=apks/SystemWebView.apk", - "--test-runner-outdir", - ".", - "--client-outdir", - "../../weblayer_instrumentation_test_M104/out/Release", - "--implementation-outdir", - ".", - "--test-expectations", - "../../weblayer/browser/android/javatests/skew/expectations.txt", - "--client-version=104", - "--gs-results-bucket=chromium-result-details", - "--recover-devices", - "--avd-config=../../tools/android/avd/proto/generic_android28.textpb" - ], - "merge": { - "args": [ - "--bucket", - "chromium-result-details", - "--test-name", - "weblayer_skew_tests with_client_from_104" - ], - "script": "//build/android/pylib/results/presentation/test_results_presentation.py" - }, - "name": "weblayer_skew_tests with_client_from_104", - "resultdb": { - "enable": true, - "has_native_resultdb_integration": true - }, - "swarming": { - "can_use_on_swarming_builders": true, - "cipd_packages": [ - { - "cipd_package": "chromium/testing/weblayer-x86", - "location": "weblayer_instrumentation_test_M104", - "revision": "version:104.0.5112.59" - } - ], - "dimension_sets": [ - { - "cpu": "x86-64", - "device_os": null, - "device_type": null, - "machine_type": "n1-standard-4|e2-standard-4", - "os": "Ubuntu-18.04", - "pool": "chromium.tests.avd" - } - ], - "named_caches": [ - { - "name": "generic_android28", - "path": ".android_emulator/generic_android28" - } - ], - "optional_dimensions": { - "60": [ - { - "caches": "generic_android28" - } - ] - }, - "output_links": [ - { - "link": [ - "https://luci-logdog.appspot.com/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], - "name": "shard #${SHARD_INDEX} logcats" - } - ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", - "shards": 2 - }, - "test": "weblayer_skew_tests", - "test_id_prefix": "ninja://weblayer/browser/android/javatests:weblayer_skew_tests/", - "variant_id": "with_client_from_104" - }, - { - "args": [ - "--additional-apk=apks/WebLayerShellSystemWebView.apk", - "--webview-apk-path=apks/SystemWebView.apk", - "--test-runner-outdir", - ".", - "--client-outdir", - "../../weblayer_instrumentation_test_M105/out/Release", - "--implementation-outdir", - ".", - "--test-expectations", - "../../weblayer/browser/android/javatests/skew/expectations.txt", - "--client-version=105", - "--gs-results-bucket=chromium-result-details", - "--recover-devices", - "--avd-config=../../tools/android/avd/proto/generic_android28.textpb" - ], - "merge": { - "args": [ - "--bucket", - "chromium-result-details", - "--test-name", - "weblayer_skew_tests with_client_from_105" - ], - "script": "//build/android/pylib/results/presentation/test_results_presentation.py" - }, - "name": "weblayer_skew_tests with_client_from_105", - "resultdb": { - "enable": true, - "has_native_resultdb_integration": true - }, - "swarming": { - "can_use_on_swarming_builders": true, - "cipd_packages": [ - { - "cipd_package": "chromium/testing/weblayer-x86", - "location": "weblayer_instrumentation_test_M105", - "revision": "version:105.0.5195.145" - } - ], - "dimension_sets": [ - { - "cpu": "x86-64", - "device_os": null, - "device_type": null, - "machine_type": "n1-standard-4|e2-standard-4", - "os": "Ubuntu-18.04", - "pool": "chromium.tests.avd" - } - ], - "named_caches": [ - { - "name": "generic_android28", - "path": ".android_emulator/generic_android28" - } - ], - "optional_dimensions": { - "60": [ - { - "caches": "generic_android28" - } - ] - }, - "output_links": [ - { - "link": [ - "https://luci-logdog.appspot.com/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], - "name": "shard #${SHARD_INDEX} logcats" - } - ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", - "shards": 2 - }, - "test": "weblayer_skew_tests", - "test_id_prefix": "ninja://weblayer/browser/android/javatests:weblayer_skew_tests/", - "variant_id": "with_client_from_105" - }, - { - "args": [ - "--additional-apk=apks/WebLayerShellSystemWebView.apk", - "--test-runner-outdir", - ".", - "--client-outdir", - ".", - "--test-expectations", - "../../weblayer/browser/android/javatests/skew/expectations.txt", - "--webview-apk-path=apks/SystemWebView.apk", - "--implementation-outdir", - "../../weblayer_instrumentation_test_M100/out/Release", - "--impl-version=100", - "--gs-results-bucket=chromium-result-details", - "--recover-devices", - "--avd-config=../../tools/android/avd/proto/generic_android28.textpb" - ], - "merge": { - "args": [ - "--bucket", - "chromium-result-details", - "--test-name", - "weblayer_skew_tests with_impl_from_100" - ], - "script": "//build/android/pylib/results/presentation/test_results_presentation.py" - }, - "name": "weblayer_skew_tests with_impl_from_100", - "resultdb": { - "enable": true, - "has_native_resultdb_integration": true - }, - "swarming": { - "can_use_on_swarming_builders": true, - "cipd_packages": [ - { - "cipd_package": "chromium/testing/weblayer-x86", - "location": "weblayer_instrumentation_test_M100", - "revision": "version:100.0.4896.134" - } - ], - "dimension_sets": [ - { - "cpu": "x86-64", - "device_os": null, - "device_type": null, - "machine_type": "n1-standard-4|e2-standard-4", - "os": "Ubuntu-18.04", - "pool": "chromium.tests.avd" - } - ], - "named_caches": [ - { - "name": "generic_android28", - "path": ".android_emulator/generic_android28" - } - ], - "optional_dimensions": { - "60": [ - { - "caches": "generic_android28" - } - ] - }, - "output_links": [ - { - "link": [ - "https://luci-logdog.appspot.com/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], - "name": "shard #${SHARD_INDEX} logcats" - } - ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", - "shards": 2 - }, - "test": "weblayer_skew_tests", - "test_id_prefix": "ninja://weblayer/browser/android/javatests:weblayer_skew_tests/", - "variant_id": "with_impl_from_100" - }, - { - "args": [ - "--additional-apk=apks/WebLayerShellSystemWebView.apk", - "--test-runner-outdir", - ".", - "--client-outdir", - ".", - "--test-expectations", - "../../weblayer/browser/android/javatests/skew/expectations.txt", - "--webview-apk-path=apks/SystemWebView.apk", - "--implementation-outdir", - "../../weblayer_instrumentation_test_M101/out/Release", - "--impl-version=101", - "--gs-results-bucket=chromium-result-details", - "--recover-devices", - "--avd-config=../../tools/android/avd/proto/generic_android28.textpb" - ], - "merge": { - "args": [ - "--bucket", - "chromium-result-details", - "--test-name", - "weblayer_skew_tests with_impl_from_101" - ], - "script": "//build/android/pylib/results/presentation/test_results_presentation.py" - }, - "name": "weblayer_skew_tests with_impl_from_101", - "resultdb": { - "enable": true, - "has_native_resultdb_integration": true - }, - "swarming": { - "can_use_on_swarming_builders": true, - "cipd_packages": [ - { - "cipd_package": "chromium/testing/weblayer-x86", - "location": "weblayer_instrumentation_test_M101", - "revision": "version:101.0.4951.74" - } - ], - "dimension_sets": [ - { - "cpu": "x86-64", - "device_os": null, - "device_type": null, - "machine_type": "n1-standard-4|e2-standard-4", - "os": "Ubuntu-18.04", - "pool": "chromium.tests.avd" - } - ], - "named_caches": [ - { - "name": "generic_android28", - "path": ".android_emulator/generic_android28" - } - ], - "optional_dimensions": { - "60": [ - { - "caches": "generic_android28" - } - ] - }, - "output_links": [ - { - "link": [ - "https://luci-logdog.appspot.com/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], - "name": "shard #${SHARD_INDEX} logcats" - } - ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", - "shards": 2 - }, - "test": "weblayer_skew_tests", - "test_id_prefix": "ninja://weblayer/browser/android/javatests:weblayer_skew_tests/", - "variant_id": "with_impl_from_101" - }, - { - "args": [ - "--additional-apk=apks/WebLayerShellSystemWebView.apk", - "--test-runner-outdir", - ".", - "--client-outdir", - ".", - "--test-expectations", - "../../weblayer/browser/android/javatests/skew/expectations.txt", - "--webview-apk-path=apks/SystemWebView.apk", - "--implementation-outdir", - "../../weblayer_instrumentation_test_M102/out/Release", - "--impl-version=102", - "--gs-results-bucket=chromium-result-details", - "--recover-devices", - "--avd-config=../../tools/android/avd/proto/generic_android28.textpb" - ], - "merge": { - "args": [ - "--bucket", - "chromium-result-details", - "--test-name", - "weblayer_skew_tests with_impl_from_102" - ], - "script": "//build/android/pylib/results/presentation/test_results_presentation.py" - }, - "name": "weblayer_skew_tests with_impl_from_102", - "resultdb": { - "enable": true, - "has_native_resultdb_integration": true - }, - "swarming": { - "can_use_on_swarming_builders": true, - "cipd_packages": [ - { - "cipd_package": "chromium/testing/weblayer-x86", - "location": "weblayer_instrumentation_test_M102", - "revision": "version:102.0.5005.125" - } - ], - "dimension_sets": [ - { - "cpu": "x86-64", - "device_os": null, - "device_type": null, - "machine_type": "n1-standard-4|e2-standard-4", - "os": "Ubuntu-18.04", - "pool": "chromium.tests.avd" - } - ], - "named_caches": [ - { - "name": "generic_android28", - "path": ".android_emulator/generic_android28" - } - ], - "optional_dimensions": { - "60": [ - { - "caches": "generic_android28" - } - ] - }, - "output_links": [ - { - "link": [ - "https://luci-logdog.appspot.com/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], - "name": "shard #${SHARD_INDEX} logcats" - } - ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", - "shards": 2 - }, - "test": "weblayer_skew_tests", - "test_id_prefix": "ninja://weblayer/browser/android/javatests:weblayer_skew_tests/", - "variant_id": "with_impl_from_102" - }, - { - "args": [ - "--additional-apk=apks/WebLayerShellSystemWebView.apk", - "--webview-apk-path=apks/SystemWebView.apk", - "--test-runner-outdir", - ".", - "--client-outdir", - ".", - "--implementation-outdir", - "../../weblayer_instrumentation_test_M104/out/Release", - "--test-expectations", - "../../weblayer/browser/android/javatests/skew/expectations.txt", - "--impl-version=104", - "--gs-results-bucket=chromium-result-details", - "--recover-devices", - "--avd-config=../../tools/android/avd/proto/generic_android28.textpb" - ], - "merge": { - "args": [ - "--bucket", - "chromium-result-details", - "--test-name", - "weblayer_skew_tests with_impl_from_104" - ], - "script": "//build/android/pylib/results/presentation/test_results_presentation.py" - }, - "name": "weblayer_skew_tests with_impl_from_104", - "resultdb": { - "enable": true, - "has_native_resultdb_integration": true - }, - "swarming": { - "can_use_on_swarming_builders": true, - "cipd_packages": [ - { - "cipd_package": "chromium/testing/weblayer-x86", - "location": "weblayer_instrumentation_test_M104", - "revision": "version:104.0.5112.59" - } - ], - "dimension_sets": [ - { - "cpu": "x86-64", - "device_os": null, - "device_type": null, - "machine_type": "n1-standard-4|e2-standard-4", - "os": "Ubuntu-18.04", - "pool": "chromium.tests.avd" - } - ], - "named_caches": [ - { - "name": "generic_android28", - "path": ".android_emulator/generic_android28" - } - ], - "optional_dimensions": { - "60": [ - { - "caches": "generic_android28" - } - ] - }, - "output_links": [ - { - "link": [ - "https://luci-logdog.appspot.com/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], - "name": "shard #${SHARD_INDEX} logcats" - } - ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", - "shards": 2 - }, - "test": "weblayer_skew_tests", - "test_id_prefix": "ninja://weblayer/browser/android/javatests:weblayer_skew_tests/", - "variant_id": "with_impl_from_104" - }, - { - "args": [ - "--additional-apk=apks/WebLayerShellSystemWebView.apk", - "--webview-apk-path=apks/SystemWebView.apk", - "--test-runner-outdir", - ".", - "--client-outdir", - ".", - "--implementation-outdir", - "../../weblayer_instrumentation_test_M105/out/Release", - "--test-expectations", - "../../weblayer/browser/android/javatests/skew/expectations.txt", - "--impl-version=105", - "--gs-results-bucket=chromium-result-details", - "--recover-devices", - "--avd-config=../../tools/android/avd/proto/generic_android28.textpb" - ], - "merge": { - "args": [ - "--bucket", - "chromium-result-details", - "--test-name", - "weblayer_skew_tests with_impl_from_105" - ], - "script": "//build/android/pylib/results/presentation/test_results_presentation.py" - }, - "name": "weblayer_skew_tests with_impl_from_105", - "resultdb": { - "enable": true, - "has_native_resultdb_integration": true - }, - "swarming": { - "can_use_on_swarming_builders": true, - "cipd_packages": [ - { - "cipd_package": "chromium/testing/weblayer-x86", - "location": "weblayer_instrumentation_test_M105", - "revision": "version:105.0.5195.145" - } - ], - "dimension_sets": [ - { - "cpu": "x86-64", - "device_os": null, - "device_type": null, - "machine_type": "n1-standard-4|e2-standard-4", - "os": "Ubuntu-18.04", - "pool": "chromium.tests.avd" - } - ], - "named_caches": [ - { - "name": "generic_android28", - "path": ".android_emulator/generic_android28" - } - ], - "optional_dimensions": { - "60": [ - { - "caches": "generic_android28" - } - ] - }, - "output_links": [ - { - "link": [ - "https://luci-logdog.appspot.com/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], - "name": "shard #${SHARD_INDEX} logcats" - } - ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", - "shards": 2 - }, - "test": "weblayer_skew_tests", - "test_id_prefix": "ninja://weblayer/browser/android/javatests:weblayer_skew_tests/", - "variant_id": "with_impl_from_105" - } - ] - }, "android-webview-10-x86-rel-tests": { "gtest_tests": [ {
diff --git a/testing/buildbot/gn_isolate_map.pyl b/testing/buildbot/gn_isolate_map.pyl index 7fb5918..dc918abd 100644 --- a/testing/buildbot/gn_isolate_map.pyl +++ b/testing/buildbot/gn_isolate_map.pyl
@@ -1385,10 +1385,6 @@ "label": "//chrome/notification_helper:notification_helper_unittests", "type": "windowed_test_launcher", }, - "opus_tests": { - "label": "//third_party/opus:opus_tests", - "type": "console_test_launcher", - }, "openscreen_unittests": { "label": "//chrome/browser/media/router:openscreen_unittests", "type": "console_test_launcher", @@ -2128,17 +2124,6 @@ "label": "//weblayer/browser/android/javatests:weblayer_instrumentation_test_apk", "type": "console_test_launcher", }, - "weblayer_skew_tests": { - "label": "//weblayer/browser/android/javatests:weblayer_skew_tests", - "type": "console_test_launcher", - }, - "weblayer_skew_tests_with_chrome": { - "args": [ - "--replace-system-package=apks/WebLayerShellSystemWebView.apk" - ], - "label": "//weblayer/browser/android/javatests:weblayer_skew_tests_with_chrome", - "type": "console_test_launcher", - }, "weblayer_junit_tests": { "label": "//weblayer/browser/java:weblayer_junit_tests", "type": "junit_test",
diff --git a/testing/buildbot/test_suites.pyl b/testing/buildbot/test_suites.pyl index b080789..6273499 100644 --- a/testing/buildbot/test_suites.pyl +++ b/testing/buildbot/test_suites.pyl
@@ -4251,15 +4251,6 @@ }, }, - 'opus_tests': { - 'opus_tests': { - 'args': [ - '--shard-timeout=3000' - ], - 'test': 'opus_tests', - }, - }, - # TODO(petermcneeley) : Remove once OverlayPrioritization has landed on # all ozone platforms. 'overlay_prioritization_gtests': { @@ -4873,7 +4864,6 @@ }, }, - 'weblayer_gtests': { 'weblayer_browsertests': { }, @@ -4881,11 +4871,6 @@ }, }, - 'weblayer_instrumentation_tests': { - 'weblayer_instrumentation_test_apk': { - } - }, - 'weblayer_shell_wpt': { 'weblayer_shell_wpt': { 'args': [ @@ -4907,28 +4892,6 @@ }, }, - 'weblayer_skew_tests': { - 'weblayer_skew_tests': { - 'swarming': { - 'shards': 2, - }, - 'args': [ - '--additional-apk=apks/WebLayerShellSystemWebView.apk', - ], - }, - }, - - 'weblayer_skew_tests_with_chrome': { - 'weblayer_skew_tests_with_chrome': { - 'swarming': { - 'shards': 2, - }, - 'args': [ - '--additional-apk=apks/ChromePublic.apk' - ], - }, - }, - 'webrtc_chromium_baremetal_gtests': { 'browser_tests': { 'args': [ @@ -6399,68 +6362,6 @@ 'webview_ui_instrumentation_tests': {}, }, - - 'android_weblayer_x86_10_gtests': { - 'weblayer_instrumentation_tests': { - 'variants': [ - {'identifier': 'ToT_Tests'} - ] - }, - 'weblayer_skew_tests': { - 'variants': [ - 'WEBLAYER_10_AND_M_IMPL_SKEW_TESTS_NTH_MILESTONE', - 'WEBLAYER_10_AND_M_IMPL_SKEW_TESTS_NTH_MINUS_ONE_MILESTONE', - 'WEBLAYER_10_AND_M_IMPL_SKEW_TESTS_NTH_MINUS_TWO_MILESTONE', - 'WEBLAYER_10_AND_M_IMPL_SKEW_TESTS_NTH_MINUS_THREE_MILESTONE', - 'WEBLAYER_10_AND_M_IMPL_SKEW_TESTS_NTH_MINUS_FOUR_MILESTONE', - 'WEBLAYER_CLIENT_SKEW_TESTS_NTH_MILESTONE', - 'WEBLAYER_CLIENT_SKEW_TESTS_NTH_MINUS_ONE_MILESTONE', - 'WEBLAYER_CLIENT_SKEW_TESTS_NTH_MINUS_TWO_MILESTONE', - 'WEBLAYER_CLIENT_SKEW_TESTS_NTH_MINUS_THREE_MILESTONE', - 'WEBLAYER_CLIENT_SKEW_TESTS_NTH_MINUS_FOUR_MILESTONE', - ] - } - }, - - 'android_weblayer_x86_marshmallow_gtests': { - 'weblayer_skew_tests_with_chrome': { - 'variants': [ - 'WEBLAYER_10_AND_M_IMPL_SKEW_TESTS_NTH_MILESTONE', - 'WEBLAYER_10_AND_M_IMPL_SKEW_TESTS_NTH_MINUS_ONE_MILESTONE', - 'WEBLAYER_10_AND_M_IMPL_SKEW_TESTS_NTH_MINUS_TWO_MILESTONE', - 'WEBLAYER_10_AND_M_IMPL_SKEW_TESTS_NTH_MINUS_THREE_MILESTONE', - 'WEBLAYER_10_AND_M_IMPL_SKEW_TESTS_NTH_MINUS_FOUR_MILESTONE', - 'WEBLAYER_CLIENT_SKEW_TESTS_NTH_MILESTONE', - 'WEBLAYER_CLIENT_SKEW_TESTS_NTH_MINUS_ONE_MILESTONE', - 'WEBLAYER_CLIENT_SKEW_TESTS_NTH_MINUS_TWO_MILESTONE', - 'WEBLAYER_CLIENT_SKEW_TESTS_NTH_MINUS_THREE_MILESTONE', - 'WEBLAYER_CLIENT_SKEW_TESTS_NTH_MINUS_FOUR_MILESTONE', - ] - } - }, - - 'android_weblayer_x86_pie_oreo_gtests': { - 'weblayer_instrumentation_tests': { - 'variants': [ - {'identifier': 'ToT_Tests'} - ] - }, - 'weblayer_skew_tests': { - 'variants': [ - 'WEBLAYER_IMPL_SKEW_TESTS_NTH_MILESTONE', - 'WEBLAYER_IMPL_SKEW_TESTS_NTH_MINUS_ONE_MILESTONE', - 'WEBLAYER_IMPL_SKEW_TESTS_NTH_MINUS_TWO_MILESTONE', - 'WEBLAYER_IMPL_SKEW_TESTS_NTH_MINUS_THREE_MILESTONE', - 'WEBLAYER_IMPL_SKEW_TESTS_NTH_MINUS_FOUR_MILESTONE', - 'WEBLAYER_CLIENT_SKEW_TESTS_NTH_MILESTONE', - 'WEBLAYER_CLIENT_SKEW_TESTS_NTH_MINUS_ONE_MILESTONE', - 'WEBLAYER_CLIENT_SKEW_TESTS_NTH_MINUS_TWO_MILESTONE', - 'WEBLAYER_CLIENT_SKEW_TESTS_NTH_MINUS_THREE_MILESTONE', - 'WEBLAYER_CLIENT_SKEW_TESTS_NTH_MINUS_FOUR_MILESTONE', - ] - } - }, - 'chromeos_trogdor64_skylab_tests': { 'chromeos_chrome_all_tast_tests': { 'variants': [
diff --git a/testing/buildbot/tryserver.chromium.android.json b/testing/buildbot/tryserver.chromium.android.json index e8d3883..4a86d30d 100644 --- a/testing/buildbot/tryserver.chromium.android.json +++ b/testing/buildbot/tryserver.chromium.android.json
@@ -1,51 +1,6 @@ { "AAAAA1 AUTOGENERATED FILE DO NOT EDIT": {}, "AAAAA2 See generate_buildbot_json.py to make changes": {}, - "android-opus-arm-rel": { - "gtest_tests": [ - { - "args": [ - "--shard-timeout=3000", - "--gs-results-bucket=chromium-result-details", - "--recover-devices" - ], - "merge": { - "args": [ - "--bucket", - "chromium-result-details", - "--test-name", - "opus_tests" - ], - "script": "//build/android/pylib/results/presentation/test_results_presentation.py" - }, - "name": "opus_tests", - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "device_os": "MMB29Q", - "device_os_type": "userdebug", - "device_type": "bullhead", - "os": "Android" - } - ], - "output_links": [ - { - "link": [ - "https://luci-logdog.appspot.com/v/?s", - "=android%2Fswarming%2Flogcats%2F", - "${TASK_ID}%2F%2B%2Funified_logcats" - ], - "name": "shard #${SHARD_INDEX} logcats" - } - ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" - }, - "test": "opus_tests", - "test_id_prefix": "ninja://third_party/opus:opus_tests/" - } - ] - }, "android_blink_rel": { "gtest_tests": [ {
diff --git a/testing/buildbot/variants.pyl b/testing/buildbot/variants.pyl index fc119f194..577550b 100644 --- a/testing/buildbot/variants.pyl +++ b/testing/buildbot/variants.pyl
@@ -535,366 +535,6 @@ '--test-apk-as-instant', ], }, - 'WEBLAYER_10_AND_M_IMPL_SKEW_TESTS_NTH_MILESTONE': { - 'args': [ - '--webview-apk-path=apks/AOSP_SystemWebView.apk', - '--test-runner-outdir', - '.', - '--client-outdir', - '.', - '--implementation-outdir', - '../../weblayer_instrumentation_test_M104/out/Release', - '--test-expectations', - '../../weblayer/browser/android/javatests/skew/expectations.txt', - '--impl-version=104', - ], - 'identifier': 'with_impl_from_104', - 'swarming': { - 'cipd_packages': [ - { - 'cipd_package': 'chromium/testing/weblayer-x86', - 'location': 'weblayer_instrumentation_test_M104', - 'revision': 'version:104.0.5112.59', - } - ], - }, - }, - 'WEBLAYER_10_AND_M_IMPL_SKEW_TESTS_NTH_MINUS_ONE_MILESTONE': { - 'args': [ - '--webview-apk-path=apks/AOSP_SystemWebView.apk', - '--test-runner-outdir', - '.', - '--client-outdir', - '.', - '--implementation-outdir', - '../../weblayer_instrumentation_test_M105/out/Release', - '--test-expectations', - '../../weblayer/browser/android/javatests/skew/expectations.txt', - '--impl-version=105', - ], - 'identifier': 'with_impl_from_105', - 'swarming': { - 'cipd_packages': [ - { - 'cipd_package': 'chromium/testing/weblayer-x86', - 'location': 'weblayer_instrumentation_test_M105', - 'revision': 'version:105.0.5195.145', - } - ], - }, - }, - 'WEBLAYER_10_AND_M_IMPL_SKEW_TESTS_NTH_MINUS_TWO_MILESTONE': { - 'args': [ - '--test-runner-outdir', - '.', - '--client-outdir', - '.', - '--test-expectations', - '../../weblayer/browser/android/javatests/skew/expectations.txt', - '--webview-apk-path=apks/AOSP_SystemWebView.apk', - '--implementation-outdir', - '../../weblayer_instrumentation_test_M102/out/Release', - '--impl-version=102' - ], - 'identifier': 'with_impl_from_102', - 'swarming': { - 'cipd_packages': [ - { - 'cipd_package': 'chromium/testing/weblayer-x86', - 'location': 'weblayer_instrumentation_test_M102', - 'revision': 'version:102.0.5005.125' - } - ] - } - }, - 'WEBLAYER_10_AND_M_IMPL_SKEW_TESTS_NTH_MINUS_THREE_MILESTONE': { - 'args': [ - '--test-runner-outdir', - '.', - '--client-outdir', - '.', - '--test-expectations', - '../../weblayer/browser/android/javatests/skew/expectations.txt', - '--webview-apk-path=apks/AOSP_SystemWebView.apk', - '--implementation-outdir', - '../../weblayer_instrumentation_test_M101/out/Release', - '--impl-version=101' - ], - 'identifier': 'with_impl_from_101', - 'swarming': { - 'cipd_packages': [ - { - 'cipd_package': 'chromium/testing/weblayer-x86', - 'location': 'weblayer_instrumentation_test_M101', - 'revision': 'version:101.0.4951.74' - } - ] - } - }, - 'WEBLAYER_10_AND_M_IMPL_SKEW_TESTS_NTH_MINUS_FOUR_MILESTONE': { - 'args': [ - '--test-runner-outdir', - '.', - '--client-outdir', - '.', - '--test-expectations', - '../../weblayer/browser/android/javatests/skew/expectations.txt', - '--webview-apk-path=apks/AOSP_SystemWebView.apk', - '--implementation-outdir', - '../../weblayer_instrumentation_test_M100/out/Release', - '--impl-version=100' - ], - 'identifier': 'with_impl_from_100', - 'swarming': { - 'cipd_packages': [ - { - 'cipd_package': 'chromium/testing/weblayer-x86', - 'location': 'weblayer_instrumentation_test_M100', - 'revision': 'version:100.0.4896.134' - } - ] - } - }, - 'WEBLAYER_IMPL_SKEW_TESTS_NTH_MILESTONE': { - 'args': [ - '--webview-apk-path=apks/SystemWebView.apk', - '--test-runner-outdir', - '.', - '--client-outdir', - '.', - '--implementation-outdir', - '../../weblayer_instrumentation_test_M104/out/Release', - '--test-expectations', - '../../weblayer/browser/android/javatests/skew/expectations.txt', - '--impl-version=104', - ], - 'identifier': 'with_impl_from_104', - 'swarming': { - 'cipd_packages': [ - { - 'cipd_package': 'chromium/testing/weblayer-x86', - 'location': 'weblayer_instrumentation_test_M104', - 'revision': 'version:104.0.5112.59', - } - ], - }, - }, - 'WEBLAYER_IMPL_SKEW_TESTS_NTH_MINUS_ONE_MILESTONE': { - 'args': [ - '--webview-apk-path=apks/SystemWebView.apk', - '--test-runner-outdir', - '.', - '--client-outdir', - '.', - '--implementation-outdir', - '../../weblayer_instrumentation_test_M105/out/Release', - '--test-expectations', - '../../weblayer/browser/android/javatests/skew/expectations.txt', - '--impl-version=105', - ], - 'identifier': 'with_impl_from_105', - 'swarming': { - 'cipd_packages': [ - { - 'cipd_package': 'chromium/testing/weblayer-x86', - 'location': 'weblayer_instrumentation_test_M105', - 'revision': 'version:105.0.5195.145', - } - ], - }, - }, - 'WEBLAYER_IMPL_SKEW_TESTS_NTH_MINUS_TWO_MILESTONE': { - 'args': [ - '--test-runner-outdir', - '.', - '--client-outdir', - '.', - '--test-expectations', - '../../weblayer/browser/android/javatests/skew/expectations.txt', - '--webview-apk-path=apks/SystemWebView.apk', - '--implementation-outdir', - '../../weblayer_instrumentation_test_M102/out/Release', - '--impl-version=102' - ], - 'identifier': 'with_impl_from_102', - 'swarming': { - 'cipd_packages': [ - { - 'cipd_package': 'chromium/testing/weblayer-x86', - 'location': 'weblayer_instrumentation_test_M102', - 'revision': 'version:102.0.5005.125' - } - ] - } - }, - 'WEBLAYER_IMPL_SKEW_TESTS_NTH_MINUS_THREE_MILESTONE': { - 'args': [ - '--test-runner-outdir', - '.', - '--client-outdir', - '.', - '--test-expectations', - '../../weblayer/browser/android/javatests/skew/expectations.txt', - '--webview-apk-path=apks/SystemWebView.apk', - '--implementation-outdir', - '../../weblayer_instrumentation_test_M101/out/Release', - '--impl-version=101' - ], - 'identifier': 'with_impl_from_101', - 'swarming': { - 'cipd_packages': [ - { - 'cipd_package': 'chromium/testing/weblayer-x86', - 'location': 'weblayer_instrumentation_test_M101', - 'revision': 'version:101.0.4951.74' - } - ] - } - }, - 'WEBLAYER_IMPL_SKEW_TESTS_NTH_MINUS_FOUR_MILESTONE': { - 'args': [ - '--test-runner-outdir', - '.', - '--client-outdir', - '.', - '--test-expectations', - '../../weblayer/browser/android/javatests/skew/expectations.txt', - '--webview-apk-path=apks/SystemWebView.apk', - '--implementation-outdir', - '../../weblayer_instrumentation_test_M100/out/Release', - '--impl-version=100' - ], - 'identifier': 'with_impl_from_100', - 'swarming': { - 'cipd_packages': [ - { - 'cipd_package': 'chromium/testing/weblayer-x86', - 'location': 'weblayer_instrumentation_test_M100', - 'revision': 'version:100.0.4896.134' - } - ] - } - }, - 'WEBLAYER_CLIENT_SKEW_TESTS_NTH_MILESTONE': { - 'args': [ - '--webview-apk-path=apks/SystemWebView.apk', - '--test-runner-outdir', - '.', - '--client-outdir', - '../../weblayer_instrumentation_test_M104/out/Release', - '--implementation-outdir', - '.', - '--test-expectations', - '../../weblayer/browser/android/javatests/skew/expectations.txt', - '--client-version=104', - ], - 'identifier': 'with_client_from_104', - 'swarming': { - 'cipd_packages': [ - { - 'cipd_package': 'chromium/testing/weblayer-x86', - 'location': 'weblayer_instrumentation_test_M104', - 'revision': 'version:104.0.5112.59', - } - ], - }, - }, - 'WEBLAYER_CLIENT_SKEW_TESTS_NTH_MINUS_ONE_MILESTONE': { - 'args': [ - '--webview-apk-path=apks/SystemWebView.apk', - '--test-runner-outdir', - '.', - '--client-outdir', - '../../weblayer_instrumentation_test_M105/out/Release', - '--implementation-outdir', - '.', - '--test-expectations', - '../../weblayer/browser/android/javatests/skew/expectations.txt', - '--client-version=105', - ], - 'identifier': 'with_client_from_105', - 'swarming': { - 'cipd_packages': [ - { - 'cipd_package': 'chromium/testing/weblayer-x86', - 'location': 'weblayer_instrumentation_test_M105', - 'revision': 'version:105.0.5195.145', - } - ], - }, - }, - 'WEBLAYER_CLIENT_SKEW_TESTS_NTH_MINUS_TWO_MILESTONE': { - 'args': [ - '--test-runner-outdir', - '.', - '--implementation-outdir', - '.', - '--test-expectations', - '../../weblayer/browser/android/javatests/skew/expectations.txt', - '--webview-apk-path=apks/SystemWebView.apk', - '--client-outdir', - '../../weblayer_instrumentation_test_M102/out/Release', - '--client-version=102' - ], - 'identifier': 'with_client_from_102', - 'swarming': { - 'cipd_packages': [ - { - 'cipd_package': 'chromium/testing/weblayer-x86', - 'location': 'weblayer_instrumentation_test_M102', - 'revision': 'version:102.0.5005.125' - } - ] - } - }, - 'WEBLAYER_CLIENT_SKEW_TESTS_NTH_MINUS_THREE_MILESTONE': { - 'args': [ - '--test-runner-outdir', - '.', - '--implementation-outdir', - '.', - '--test-expectations', - '../../weblayer/browser/android/javatests/skew/expectations.txt', - '--webview-apk-path=apks/SystemWebView.apk', - '--client-outdir', - '../../weblayer_instrumentation_test_M101/out/Release', - '--client-version=101' - ], - 'identifier': 'with_client_from_101', - 'swarming': { - 'cipd_packages': [ - { - 'cipd_package': 'chromium/testing/weblayer-x86', - 'location': 'weblayer_instrumentation_test_M101', - 'revision': 'version:101.0.4951.74' - } - ] - } - }, - 'WEBLAYER_CLIENT_SKEW_TESTS_NTH_MINUS_FOUR_MILESTONE': { - 'args': [ - '--test-runner-outdir', - '.', - '--implementation-outdir', - '.', - '--test-expectations', - '../../weblayer/browser/android/javatests/skew/expectations.txt', - '--webview-apk-path=apks/SystemWebView.apk', - '--client-outdir', - '../../weblayer_instrumentation_test_M100/out/Release', - '--client-version=100' - ], - 'identifier': 'with_client_from_100', - 'swarming': { - 'cipd_packages': [ - { - 'cipd_package': 'chromium/testing/weblayer-x86', - 'location': 'weblayer_instrumentation_test_M100', - 'revision': 'version:100.0.4896.134' - } - ] - } - }, 'CROS_ATLAS_RELEASE_LKGM': { 'skylab': { 'cros_board': 'atlas', @@ -1245,4 +885,4 @@ 'win10_nvidia_gtx_1660_stable', ], }, -} \ No newline at end of file +}
diff --git a/testing/buildbot/waterfalls.pyl b/testing/buildbot/waterfalls.pyl index 4e29f38e..740c8412 100644 --- a/testing/buildbot/waterfalls.pyl +++ b/testing/buildbot/waterfalls.pyl
@@ -1113,58 +1113,6 @@ 'scripts': 'chromium_android_scripts', } }, - 'android-weblayer-10-x86-rel-tests': { - 'mixins': [ - 'has_native_resultdb_integration', - '10-x86-emulator', - 'emulator-4-cores', - 'linux-bionic', - 'x86-64', - ], - 'os_type': 'android', - 'test_suites': { - 'gtest_tests': 'android_weblayer_x86_10_gtests', - } - }, - 'android-weblayer-marshmallow-x86-rel-tests': { - 'mixins': [ - 'has_native_resultdb_integration', - 'marshmallow-x86-emulator', - 'emulator-4-cores', - 'linux-bionic', - 'x86-64', - ], - 'os_type': 'android', - 'test_suites': { - 'gtest_tests': 'android_weblayer_x86_marshmallow_gtests', - } - }, - 'android-weblayer-oreo-x86-rel-tests': { - 'mixins': [ - 'has_native_resultdb_integration', - 'oreo-x86-emulator', - 'emulator-4-cores', - 'linux-bionic', - 'x86-64', - ], - 'os_type': 'android', - 'test_suites': { - 'gtest_tests': 'android_weblayer_x86_pie_oreo_gtests', - } - }, - 'android-weblayer-pie-x86-rel-tests': { - 'mixins': [ - 'has_native_resultdb_integration', - 'pie-x86-emulator', - 'emulator-4-cores', - 'linux-bionic', - 'x86-64', - ], - 'os_type': 'android', - 'test_suites': { - 'gtest_tests': 'android_weblayer_x86_pie_oreo_gtests', - } - }, 'android-webview-10-x86-rel-tests': { 'mixins': [ 'has_native_resultdb_integration', @@ -1303,19 +1251,6 @@ 'scripts': 'chromium_android_scripts', } }, - 'android-weblayer-11-x86-rel-tests': { - 'mixins': [ - 'has_native_resultdb_integration', - '11-x86-emulator', - 'emulator-4-cores', - 'linux-bionic', - 'x86-64', - ], - 'os_type': 'android', - 'test_suites': { - 'gtest_tests': 'android_weblayer_x86_10_gtests', - } - }, 'android-weblayer-pie-x86-wpt-fyi-rel': { 'mixins': [ 'has_native_resultdb_integration', @@ -6995,16 +6930,6 @@ 'name': 'tryserver.chromium.android', 'mixins': ['chromium-tester-service-account'], 'machines': { - 'android-opus-arm-rel': { - 'mixins': [ - 'marshmallow', - 'bullhead', - ], - 'test_suites': { - 'gtest_tests': 'opus_tests', - }, - 'os_type': 'android', - }, 'android_blink_rel': { 'mixins': [ 'marshmallow',
diff --git a/testing/scripts/run_finch_smoke_tests_android.py b/testing/scripts/run_finch_smoke_tests_android.py index a76d2e0..a796616c 100755 --- a/testing/scripts/run_finch_smoke_tests_android.py +++ b/testing/scripts/run_finch_smoke_tests_android.py
@@ -103,10 +103,9 @@ test_results_dict.setdefault(key, {})) -# pylint: disable=super-with-arguments +# pylint: disable=super-with-arguments, abstract-method class FinchTestCase(wpt_common.BaseWptScriptAdapter): - def __init__(self, device): super(FinchTestCase, self).__init__() self._device = device @@ -204,6 +203,9 @@ super(FinchTestCase, self).parse_args(args) if (not self.options.finch_seed_path or not os.path.exists(self.options.finch_seed_path)): + logger.warning('Could not find the finch seed passed ' + 'as the argument for --finch-seed-path. ' + 'Running tests on the default finch seed') self.options.finch_seed_path = self.default_finch_seed_path def __enter__(self): @@ -397,7 +399,7 @@ self.test_specific_browser_args) def run_tests(self, test_run_variation, all_test_results_dict, - extra_browser_args=None): + extra_browser_args=None, check_seed_loaded=False): """Run browser test on test device Args: @@ -405,9 +407,10 @@ all_test_results_dict: Main results dictionary containing results for all test variations. extra_browser_args: Extra browser arguments. + check_seed_loaded: Check if the finch seed was loaded. Returns: - True if browser did not crash or False if the browser crashed. + The return code of all tests. """ isolate_root_dir = os.path.dirname( self.options.isolated_script_test_output) @@ -438,21 +441,29 @@ shutil.move(os.path.join(isolate_root_dir, logcat_filename), final_logcat_path) + seed_loaded_result_dict = {'num_failures_by_type': {}, 'tests': {}} + if check_seed_loaded: + # Check in the logcat if the seed was loaded + ret |= self._finch_seed_loaded(final_logcat_path, seed_loaded_result_dict) + with open(self.wpt_output, 'r') as test_harness_results: test_harness_results_dict = json.load(test_harness_results) - all_test_results_dict['tests'][test_run_variation] = ( - test_harness_results_dict['tests']) - _merge_results_dicts(pixel_tests_results_dict['tests'], - all_test_results_dict['tests'][test_run_variation]) - for test_results_dict in (test_harness_results_dict, - pixel_tests_results_dict): + pixel_tests_results_dict, + seed_loaded_result_dict): + _merge_results_dicts( + test_results_dict['tests'], + all_test_results_dict['tests'].setdefault(test_run_variation, {})) + for result, count in test_results_dict['num_failures_by_type'].items(): all_test_results_dict['num_failures_by_type'].setdefault(result, 0) all_test_results_dict['num_failures_by_type'][result] += count return ret + def _finch_seed_loaded(self, logcat_path, all_results_dict): + raise NotImplementedError + def _run_pixel_tests(self): """Run pixel tests on device @@ -644,6 +655,68 @@ 'external/wpt/svg/pservers/reftests/radialgradient-basic-002.svg', ] + def _finch_seed_loaded(self, logcat_path, all_results_dict): + """Checks the logcat if the seed was loaded + + Args: + logcat_path: Path to the logcat. + all_results_dict: Dictionary containing test results + + Returns: + 0 if the seed was loaded and experiments were loaded for finch seeds + other than the default seed. Otherwise it returns 1. + """ + with open(logcat_path, 'r') as logcat: + logcat_content = logcat.read() + + seed_loaded = 'cr_VariationsUtils: Loaded seed with age' in logcat_content + logcat_relpath = os.path.relpath(logcat_path, + os.path.dirname(self.wpt_output)) + seed_loaded_results_dict = ( + all_results_dict['tests'].setdefault( + 'check_seed_loaded', + {'expected': 'PASS', + 'artifacts': {'logcat_path': [logcat_relpath]}})) + + if seed_loaded: + logger.info('The finch seed was loaded by WebView') + seed_loaded_results_dict['actual'] = 'PASS' + else: + logger.error('The finch seed was not loaded by WebView') + seed_loaded_results_dict['actual'] = 'FAIL' + all_results_dict['num_failures_by_type']['FAIL'] = 1 + + # If the value for the --finch-seed-path argument does not exist, then + # a default seed is consumed. The default seed may be too old to have it's + # experiments loaded. + if self.default_finch_seed_path != self.options.finch_seed_path: + # Check for a field trial that is guaranteed to be activated by + # the finch seed. + experiments_loaded = ('Active field trial ' + '"UMA-Uniformity-Trial-100-Percent" ' + 'in group "group_01"') in logcat_content + field_trials_loaded_results_dict = ( + all_results_dict['tests'].setdefault( + 'check_field_trials_loaded', + {'expected': 'PASS', + 'artifacts': {'logcat_path': [logcat_relpath]}})) + + if experiments_loaded: + logger.info('Experiments were loaded from the finch seed by WebView') + field_trials_loaded_results_dict['actual'] = 'PASS' + else: + logger.error('Experiments were not loaded from ' + 'the finch seed by WebView') + field_trials_loaded_results_dict['actual'] = 'FAIL' + all_results_dict['num_failures_by_type'].setdefault('FAIL', 0) + all_results_dict['num_failures_by_type']['FAIL'] += 1 + + return 0 if seed_loaded and experiments_loaded else 1 + + logger.warning('The default seed is being tested, ' + 'skipping checks for active field trials') + return 0 if seed_loaded else 1 + @classmethod def finch_seed_download_args(cls): return [ @@ -864,7 +937,7 @@ # their adb binary. platform_tools_path = os.path.dirname(devil_env.config.FetchPath('adb')) os.environ['PATH'] = os.pathsep.join([platform_tools_path] + - os.environ['PATH'].split(os.pathsep)) + os.environ['PATH'].split(os.pathsep)) test_results_dict = OrderedDict({'version': 3, 'interrupted': False, 'num_failures_by_type': {}, 'tests': {}}) @@ -872,18 +945,26 @@ if test_case.product_name() == 'webview': ret = test_case.run_tests('without_finch_seed', test_results_dict) test_case.install_seed() - ret |= test_case.run_tests('with_finch_seed', test_results_dict) - # WebView needs several restarts to fetch and load a new finch seed - # TODO(b/187185389): Figure out why the first restart is needed - ret |= test_case.run_tests('extra_restart', test_results_dict, - test_case.finch_seed_download_args()) + ret |= test_case.run_tests('with_finch_seed', test_results_dict, + check_seed_loaded=True) + # TODO(b/187185389): Figure out why WebView needs an extra restart + # to fetch and load a new finch seed. Also we should not check if + # the seed is loaded during the extra restart tests since the seed + # may not always be loaded after the restart. + ret |= test_case.run_tests( + 'extra_restart', test_results_dict, + extra_browser_args=test_case.finch_seed_download_args()) # Restart webview+shell to fetch new seed to variations_seed_new - ret |= test_case.run_tests('fetch_new_seed_restart', test_results_dict, - test_case.finch_seed_download_args()) + ret |= test_case.run_tests( + 'fetch_new_seed_restart', test_results_dict, + extra_browser_args=test_case.finch_seed_download_args(), + check_seed_loaded=True) # Restart webview+shell to copy from # variations_seed_new to variations_seed - ret |= test_case.run_tests('load_new_seed_restart', test_results_dict, - test_case.finch_seed_download_args()) + ret |= test_case.run_tests( + 'load_new_seed_restart', test_results_dict, + extra_browser_args=test_case.finch_seed_download_args(), + check_seed_loaded=True) else: test_case.install_seed() ret = test_case.run_tests('with_finch_seed', test_results_dict)
diff --git a/testing/scripts/wpt_common.py b/testing/scripts/wpt_common.py index a2e7ed0..3f00d97 100644 --- a/testing/scripts/wpt_common.py +++ b/testing/scripts/wpt_common.py
@@ -302,6 +302,7 @@ '--no-capture-stdio', '--no-manifest-download', '--tests=%s' % self.wpt_root_dir, + '--metadata=%s' % self.wpt_root_dir, '--mojojs-path=%s' % self.mojo_js_directory, ])
diff --git a/testing/variations/fieldtrial_testing_config.json b/testing/variations/fieldtrial_testing_config.json index 5934a07d..960a216 100644 --- a/testing/variations/fieldtrial_testing_config.json +++ b/testing/variations/fieldtrial_testing_config.json
@@ -2807,7 +2807,7 @@ ], "experiments": [ { - "name": "Enabled_20220922", + "name": "Enabled_20220926", "params": { "default-parser-budget": "10ms", "long-parser-budget": "50ms", @@ -2835,7 +2835,7 @@ ], "experiments": [ { - "name": "Enabled_20220922", + "name": "Enabled_20220926", "params": { "default-parser-budget": "10ms", "long-parser-budget": "500ms", @@ -2852,6 +2852,9 @@ "OptimizeDataUrls", "PrewarmDefaultFontFamilies", "TimedHTMLParserBudget" + ], + "disable_features": [ + "EstablishGpuChannelAsync" ] } ] @@ -2862,18 +2865,16 @@ ], "experiments": [ { - "name": "Enabled_20220922", + "name": "Enabled_20220929", "params": { "default-parser-budget": "10ms", "long-parser-budget": "50ms", - "max_input_stream_bytes_available_unknown": "2048", "num-yields-with-default-budget": "2" }, "enable_features": [ "DecodeScriptSourceOffThread", "EstablishGpuChannelAsync", "OptimizeDataUrls", - "OptimizeNetworkBuffers2", "PrefetchFontLookupTables", "TimedHTMLParserBudget" ] @@ -7373,6 +7374,24 @@ ] } ], + "OptimizeNetworkBuffers": [ + { + "platforms": [ + "android_webview" + ], + "experiments": [ + { + "name": "2KB_input_stream_20220929", + "params": { + "max_input_stream_bytes_available_unknown": "2048" + }, + "enable_features": [ + "OptimizeNetworkBuffers2" + ] + } + ] + } + ], "OptionalToolbarButton": [ { "platforms": [ @@ -8039,6 +8058,24 @@ ] } ], + "PrefetchUseContentRefactor": [ + { + "platforms": [ + "android" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "PrefetchUseContentRefactor" + ], + "disable_features": [ + "IsolatePrerenders" + ] + } + ] + } + ], "PreloadCookies": [ { "platforms": [ @@ -8233,33 +8270,6 @@ ] } ], - "PrivacyPreservingPrefetchProxy": [ - { - "platforms": [ - "android" - ], - "experiments": [ - { - "name": "Prefetch_2_20220214", - "params": { - "dns_canary_url": "http://dns-tunnel-check.googlezip.net/connect", - "do_no_state_prefetch": "false", - "ineligible_decoy_request_probability": "1", - "lite_mode_only": "false", - "max_srp_prefetches": "5", - "max_subresource_count_per_prerender": "0", - "start_spare_renderer": "true", - "tls_canary_url": "http://tls-tunnel-check.googlezip.net/connect", - "use_speculation_rules": "true" - }, - "enable_features": [ - "IsolatePrerenders", - "IsolatePrerendersMustProbeOrigin" - ] - } - ] - } - ], "PrivacySandboxV3": [ { "platforms": [
diff --git a/third_party/android_deps/additional_readme_paths.json b/third_party/android_deps/additional_readme_paths.json index cee53df..111815f 100644 --- a/third_party/android_deps/additional_readme_paths.json +++ b/third_party/android_deps/additional_readme_paths.json
@@ -121,6 +121,7 @@ "libs/org_ccil_cowan_tagsoup_tagsoup", "libs/org_checkerframework_checker_compat_qual", "libs/org_checkerframework_checker_qual", + "libs/org_checkerframework_checker_util", "libs/org_checkerframework_dataflow_errorprone", "libs/org_codehaus_mojo_animal_sniffer_annotations", "libs/org_eclipse_jgit_org_eclipse_jgit",
diff --git a/third_party/android_deps/build.gradle b/third_party/android_deps/build.gradle index e463902..ff01b481 100644 --- a/third_party/android_deps/build.gradle +++ b/third_party/android_deps/build.gradle
@@ -145,6 +145,7 @@ // Used by downstream targets. compile "com.google.errorprone:error_prone_annotations:${errorproneVersion}" compile 'org.checkerframework:checker-compat-qual:2.5.3' + compile 'org.checkerframework:checker-util:3.22.1' compile 'org.codehaus.mojo:animal-sniffer-annotations:1.17' // Dedicated configuration to avoid using higher version number. The 9999 version is empty. @@ -184,7 +185,7 @@ androidTestCompile 'org.ccil.cowan.tagsoup:tagsoup:1.2.1' androidTestCompile "org.mockito:mockito-core:4.7.0" - //Depended on by downstream guava_java rewrite. + // Depended on by downstream guava_java rewrite. androidTestCompile "org.checkerframework:checker-qual:3.22.1" String robolectricVersion = '4.8.1'
diff --git a/third_party/android_deps/buildSrc/src/main/groovy/ChromiumDepGraph.groovy b/third_party/android_deps/buildSrc/src/main/groovy/ChromiumDepGraph.groovy index e486f19c7..e6692b26 100644 --- a/third_party/android_deps/buildSrc/src/main/groovy/ChromiumDepGraph.groovy +++ b/third_party/android_deps/buildSrc/src/main/groovy/ChromiumDepGraph.groovy
@@ -170,6 +170,9 @@ org_checkerframework_checker_qual: new PropertyOverride( licenseUrl: 'https://raw.githubusercontent.com/typetools/checker-framework/master/LICENSE.txt', licenseName: 'GPL v2 with the classpath exception'), + org_checkerframework_checker_util: new PropertyOverride( + licenseUrl: 'https://raw.githubusercontent.com/typetools/checker-framework/master/checker-util/LICENSE.txt', + licenseName: 'MIT'), org_checkerframework_dataflow_errorprone: new PropertyOverride( licenseUrl: 'https://raw.githubusercontent.com/typetools/checker-framework/master/LICENSE.txt', licenseName: 'GPL v2 with the classpath exception'),
diff --git a/third_party/android_deps/libs/org_checkerframework_checker_util/3pp/3pp.pb b/third_party/android_deps/libs/org_checkerframework_checker_util/3pp/3pp.pb new file mode 100644 index 0000000..d743b51b --- /dev/null +++ b/third_party/android_deps/libs/org_checkerframework_checker_util/3pp/3pp.pb
@@ -0,0 +1,16 @@ +# Copyright 2021 The Chromium Authors +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +# This is generated, do not edit. Update BuildConfigGenerator.groovy instead. + +create { + source { + script { name: "fetch.py" } + } +} + +upload { + pkg_prefix: "chromium/third_party/android_deps/libs" + universal: true +}
diff --git a/third_party/android_deps/libs/org_checkerframework_checker_util/3pp/fetch.py b/third_party/android_deps/libs/org_checkerframework_checker_util/3pp/fetch.py new file mode 100755 index 0000000..ab65215 --- /dev/null +++ b/third_party/android_deps/libs/org_checkerframework_checker_util/3pp/fetch.py
@@ -0,0 +1,78 @@ +#!/usr/bin/env python3 +# Copyright 2021 The Chromium Authors +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +# This is generated, do not edit. Update BuildConfigGenerator.groovy and +# 3ppFetch.template instead. + +import argparse +import json +import os +import re +import urllib.request + +_REPO_URL = 'https://repo.maven.apache.org/maven2' +_GROUP_NAME = 'org/checkerframework' +_MODULE_NAME = 'checker-util' +_FILE_EXT = 'jar' +_OVERRIDE_LATEST = None +_PATCH_VERSION = 'cr1' + + +def do_latest(): + if _OVERRIDE_LATEST is not None: + print(_OVERRIDE_LATEST + f'.{_PATCH_VERSION}') + return + maven_metadata_url = '{}/{}/{}/maven-metadata.xml'.format( + _REPO_URL, _GROUP_NAME, _MODULE_NAME) + metadata = urllib.request.urlopen(maven_metadata_url).read().decode( + 'utf-8') + # Do not parse xml with the python included parser since it is susceptible + # to maliciously crafted xmls. Only use regular expression parsing to be + # safe. RE should be enough to handle what we need to extract. + match = re.search('<latest>([^<]+)</latest>', metadata) + if match: + latest = match.group(1) + else: + # if no latest info was found just hope the versions are sorted and the + # last one is the latest (as is commonly the case). + latest = re.findall('<version>([^<]+)</version>', metadata)[-1] + print(latest + f'.{_PATCH_VERSION}') + + +def get_download_url(version): + # Remove the patch version when getting the download url + version_no_patch, patch = version.rsplit('.', 1) + if patch.startswith('cr'): + version = version_no_patch + file_url = '{0}/{1}/{2}/{3}/{2}-{3}.{4}'.format(_REPO_URL, _GROUP_NAME, + _MODULE_NAME, version, + _FILE_EXT) + file_name = file_url.rsplit('/', 1)[-1] + + partial_manifest = { + 'url': [file_url], + 'name': [file_name], + 'ext': '.' + _FILE_EXT, + } + print(json.dumps(partial_manifest)) + + +def main(): + ap = argparse.ArgumentParser() + sub = ap.add_subparsers() + + latest = sub.add_parser('latest') + latest.set_defaults(func=lambda _opts: do_latest()) + + download = sub.add_parser('get_url') + download.set_defaults( + func=lambda _opts: get_download_url(os.environ['_3PP_VERSION'])) + + opts = ap.parse_args() + opts.func(opts) + + +if __name__ == '__main__': + main()
diff --git a/third_party/android_deps/libs/org_checkerframework_checker_util/LICENSE b/third_party/android_deps/libs/org_checkerframework_checker_util/LICENSE new file mode 100644 index 0000000..47fa7199 --- /dev/null +++ b/third_party/android_deps/libs/org_checkerframework_checker_util/LICENSE
@@ -0,0 +1,22 @@ +Checker Framework utilities +Copyright 2004-present by the Checker Framework developers + +MIT License: + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE.
diff --git a/third_party/android_deps/libs/org_checkerframework_checker_util/OWNERS b/third_party/android_deps/libs/org_checkerframework_checker_util/OWNERS new file mode 100644 index 0000000..aea47a05 --- /dev/null +++ b/third_party/android_deps/libs/org_checkerframework_checker_util/OWNERS
@@ -0,0 +1 @@ +file://third_party/android_deps/OWNERS
diff --git a/third_party/android_deps/libs/org_checkerframework_checker_util/README.chromium b/third_party/android_deps/libs/org_checkerframework_checker_util/README.chromium new file mode 100644 index 0000000..4246ebdd --- /dev/null +++ b/third_party/android_deps/libs/org_checkerframework_checker_util/README.chromium
@@ -0,0 +1,14 @@ +Name: Checker Util +Short Name: checker-util +URL: https://checkerframework.org +Version: 3.22.1 +License: MIT +License File: LICENSE +CPEPrefix: unknown +Security Critical: yes + +Description: +checker-util contains utility classes for programmers to use at run time. + +Local Modifications: +No modifications.
diff --git a/third_party/android_deps/libs/org_checkerframework_checker_util/cipd.yaml b/third_party/android_deps/libs/org_checkerframework_checker_util/cipd.yaml new file mode 100644 index 0000000..9fef30b --- /dev/null +++ b/third_party/android_deps/libs/org_checkerframework_checker_util/cipd.yaml
@@ -0,0 +1,10 @@ +# Copyright 2018 The Chromium Authors +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +# To create CIPD package run the following command. +# cipd create --pkg-def cipd.yaml -tag version:2@3.22.1.cr1 +package: chromium/third_party/android_deps/libs/org_checkerframework_checker_util +description: "Checker Util" +data: +- file: checker-util-3.22.1.jar
diff --git a/third_party/blink/renderer/core/animation/css/css_animation_update.h b/third_party/blink/renderer/core/animation/css/css_animation_update.h index 4abc9c1c..d50dbfb0 100644 --- a/third_party/blink/renderer/core/animation/css/css_animation_update.h +++ b/third_party/blink/renderer/core/animation/css/css_animation_update.h
@@ -76,10 +76,10 @@ StyleRuleKeyframes* style_rule, AnimationTimeline* timeline, const Vector<EAnimPlayState>& play_state_list) - : index(index), + : specified_timing(specified_timing), + index(index), animation(animation), effect(&effect), - specified_timing(specified_timing), style_rule(style_rule), style_rule_version(this->style_rule->Version()), timeline(timeline), @@ -92,10 +92,10 @@ visitor->Trace(timeline); } + Timing specified_timing; wtf_size_t index; Member<Animation> animation; Member<const InertEffect> effect; - Timing specified_timing; Member<StyleRuleKeyframes> style_rule; unsigned style_rule_version; Member<AnimationTimeline> timeline;
diff --git a/third_party/blink/renderer/core/animation/css/css_animations.h b/third_party/blink/renderer/core/animation/css/css_animations.h index 56dc5c94..e9a4d8f 100644 --- a/third_party/blink/renderer/core/animation/css/css_animations.h +++ b/third_party/blink/renderer/core/animation/css/css_animations.h
@@ -356,8 +356,8 @@ TransitionEventDelegate(Element* transition_target, const PropertyHandle& property, Timing::Phase previous_phase = Timing::kPhaseNone) - : transition_target_(transition_target), - property_(property), + : property_(property), + transition_target_(transition_target), previous_phase_(previous_phase) {} bool RequiresIterationEvents(const AnimationEffect&) override { return false; @@ -376,8 +376,8 @@ EventTarget* GetEventTarget() const; Document& GetDocument() const { return transition_target_->GetDocument(); } - Member<Element> transition_target_; PropertyHandle property_; + Member<Element> transition_target_; Timing::Phase previous_phase_; }; };
diff --git a/third_party/blink/renderer/core/animation/document_timeline.cc b/third_party/blink/renderer/core/animation/document_timeline.cc index c2de774..ebcf8e6 100644 --- a/third_party/blink/renderer/core/animation/document_timeline.cc +++ b/third_party/blink/renderer/core/animation/document_timeline.cc
@@ -81,8 +81,8 @@ : AnimationTimeline(document), origin_time_(origin_time), zero_time_(base::TimeTicks() + origin_time_), - zero_time_initialized_(false), - playback_rate_(1) { + playback_rate_(1), + zero_time_initialized_(false) { if (!timing) timing_ = MakeGarbageCollected<DocumentTimelineTiming>(this); else
diff --git a/third_party/blink/renderer/core/animation/document_timeline.h b/third_party/blink/renderer/core/animation/document_timeline.h index 8b59df6..8be743c1 100644 --- a/third_party/blink/renderer/core/animation/document_timeline.h +++ b/third_party/blink/renderer/core/animation/document_timeline.h
@@ -111,7 +111,6 @@ // TODO(crbug.com/1162960) Convert DocumentTimeline::zero_time_ from // base::TimeTicks to AnimationTimeDelta base::TimeTicks zero_time_; - bool zero_time_initialized_; double playback_rate_; @@ -120,6 +119,8 @@ Member<PlatformTiming> timing_; + bool zero_time_initialized_; + class DocumentTimelineTiming final : public PlatformTiming { public: explicit DocumentTimelineTiming(DocumentTimeline* timeline)
diff --git a/third_party/blink/renderer/core/css/css_computed_style_declaration.h b/third_party/blink/renderer/core/css/css_computed_style_declaration.h index d0f7585..96763549 100644 --- a/third_party/blink/renderer/core/css/css_computed_style_declaration.h +++ b/third_party/blink/renderer/core/css/css_computed_style_declaration.h
@@ -130,9 +130,9 @@ bool CssPropertyMatches(CSSPropertyID, const CSSValue&) const override; + AtomicString pseudo_argument_; Member<Node> node_; PseudoId pseudo_element_specifier_; - AtomicString pseudo_argument_; bool allow_visited_style_; };
diff --git a/third_party/blink/renderer/core/css/css_font_face_src_value.h b/third_party/blink/renderer/core/css/css_font_face_src_value.h index 19ce2f4..515e345 100644 --- a/third_party/blink/renderer/core/css/css_font_face_src_value.h +++ b/third_party/blink/renderer/core/css/css_font_face_src_value.h
@@ -75,8 +75,8 @@ absolute_resource_(absolute_resource), specified_resource_(specified_resource), referrer_(referrer), - is_local_(local), world_(std::move(world)), + is_local_(local), origin_clean_(origin_clean), is_ad_related_(is_ad_related) {} @@ -120,19 +120,6 @@ } private: - void RestoreCachedResourceIfNeeded(ExecutionContext*) const; - - const String absolute_resource_; - const String specified_resource_; - String format_; - const Referrer referrer_; - const bool is_local_; - const scoped_refptr<const DOMWrapperWorld> world_; - const OriginClean origin_clean_; - bool is_ad_related_; - - Vector<FontTechnology> technologies_; - class FontResourceHelper : public GarbageCollected<FontResourceHelper>, public FontResourceClient { public: @@ -150,7 +137,19 @@ return "CSSFontFaceSrcValue::FontResourceHelper"; } }; + + void RestoreCachedResourceIfNeeded(ExecutionContext*) const; + + Vector<FontTechnology> technologies_; + const String absolute_resource_; + const String specified_resource_; + String format_; + const Referrer referrer_; + const scoped_refptr<const DOMWrapperWorld> world_; mutable Member<FontResourceHelper> fetched_; + const bool is_local_; + const OriginClean origin_clean_; + bool is_ad_related_; }; template <>
diff --git a/third_party/blink/renderer/core/css/css_style_sheet.cc b/third_party/blink/renderer/core/css/css_style_sheet.cc index 9e7a4c1..6b94d36 100644 --- a/third_party/blink/renderer/core/css/css_style_sheet.cc +++ b/third_party/blink/renderer/core/css/css_style_sheet.cc
@@ -186,9 +186,9 @@ bool is_inline_stylesheet, const TextPosition& start_position) : contents_(contents), - is_inline_stylesheet_(is_inline_stylesheet), owner_node_(&owner_node), - start_position_(start_position) { + start_position_(start_position), + is_inline_stylesheet_(is_inline_stylesheet) { #if DCHECK_IS_ON() DCHECK(IsAcceptableCSSStyleSheetParent(owner_node)); #endif
diff --git a/third_party/blink/renderer/core/css/css_style_sheet.h b/third_party/blink/renderer/core/css/css_style_sheet.h index 59c09e22..6d5ad15a 100644 --- a/third_party/blink/renderer/core/css/css_style_sheet.h +++ b/third_party/blink/renderer/core/css/css_style_sheet.h
@@ -263,18 +263,9 @@ bool AlternateFromConstructor() const { return alternate_from_constructor_; } Member<StyleSheetContents> contents_; - bool is_inline_stylesheet_ = false; - bool is_for_css_module_script_ = false; - bool is_disabled_ = false; - bool load_completed_ = false; - // This alternate variable is only used for constructed CSSStyleSheet. - // For other CSSStyleSheet, consult the alternate attribute. - bool alternate_from_constructor_ = false; - bool enable_rule_access_for_inspector_ = false; - - String title_; Member<const MediaQuerySet> media_queries_; MediaQueryResultFlags media_query_result_flags_; + String title_; Member<Node> owner_node_; Member<CSSRule> owner_rule_; @@ -288,6 +279,15 @@ Member<MediaList> media_cssom_wrapper_; mutable HeapVector<Member<CSSRule>> child_rule_cssom_wrappers_; mutable Member<CSSRuleList> rule_list_cssom_wrapper_; + + bool is_inline_stylesheet_ = false; + bool is_for_css_module_script_ = false; + bool is_disabled_ = false; + bool load_completed_ = false; + // This alternate variable is only used for constructed CSSStyleSheet. + // For other CSSStyleSheet, consult the alternate attribute. + bool alternate_from_constructor_ = false; + bool enable_rule_access_for_inspector_ = false; }; inline CSSStyleSheet::RuleMutationScope::RuleMutationScope(CSSStyleSheet* sheet)
diff --git a/third_party/blink/renderer/core/css/font_display.h b/third_party/blink/renderer/core/css/font_display.h index 09a3c66..7ce0a6f 100644 --- a/third_party/blink/renderer/core/css/font_display.h +++ b/third_party/blink/renderer/core/css/font_display.h
@@ -5,13 +5,15 @@ #ifndef THIRD_PARTY_BLINK_RENDERER_CORE_CSS_FONT_DISPLAY_H_ #define THIRD_PARTY_BLINK_RENDERER_CORE_CSS_FONT_DISPLAY_H_ +#include <cstdint> + namespace blink { class CSSValue; // These values are persisted to logs. Entries should not be renumbered and // numeric values should never be reused. -enum class FontDisplay { +enum class FontDisplay : uint8_t { kAuto, kBlock, kSwap,
diff --git a/third_party/blink/renderer/core/css/font_face.cc b/third_party/blink/renderer/core/css/font_face.cc index d4851b1..003aca4 100644 --- a/third_party/blink/renderer/core/css/font_face.cc +++ b/third_party/blink/renderer/core/css/font_face.cc
@@ -243,8 +243,8 @@ const StyleRuleFontFace* style_rule, bool is_user_style) : ExecutionContextClient(context), - status_(kUnloaded), style_rule_(style_rule), + status_(kUnloaded), is_user_style_(is_user_style) {} FontFace::FontFace(ExecutionContext* context,
diff --git a/third_party/blink/renderer/core/css/font_face.h b/third_party/blink/renderer/core/css/font_face.h index 38dfca343..b6ba7eb 100644 --- a/third_party/blink/renderer/core/css/font_face.h +++ b/third_party/blink/renderer/core/css/font_face.h
@@ -65,7 +65,7 @@ DEFINE_WRAPPERTYPEINFO(); public: - enum LoadStatusType { kUnloaded, kLoading, kLoaded, kError }; + enum LoadStatusType : uint8_t { kUnloaded, kLoading, kLoaded, kError }; static FontFace* Create( ExecutionContext* execution_context, @@ -191,6 +191,7 @@ using LoadedProperty = ScriptPromiseProperty<Member<FontFace>, Member<DOMException>>; + HeapVector<Member<LoadFontCallback>> callbacks_; AtomicString family_; String ots_parse_message_; Member<const CSSValue> style_; @@ -205,14 +206,13 @@ Member<const CSSValue> line_gap_override_; Member<const CSSValue> advance_override_; Member<const CSSValue> size_adjust_; - LoadStatusType status_; Member<DOMException> error_; Member<LoadedProperty> loaded_property_; Member<CSSFontFace> css_font_face_; Member<const StyleRuleFontFace> style_rule_; - HeapVector<Member<LoadFontCallback>> callbacks_; + LoadStatusType status_; // Note that we will also need to distinguish font faces in different tree // scopes when we allow @font-face in shadow DOM. See crbug.com/336876. bool is_user_style_ = false;
diff --git a/third_party/blink/renderer/core/css/media_query.cc b/third_party/blink/renderer/core/css/media_query.cc index ff54d82..85e12f3 100644 --- a/third_party/blink/renderer/core/css/media_query.cc +++ b/third_party/blink/renderer/core/css/media_query.cc
@@ -79,16 +79,16 @@ MediaQuery::MediaQuery(RestrictorType restrictor, String media_type, const MediaQueryExpNode* exp_node) - : restrictor_(restrictor), - media_type_(AttemptStaticStringCreation(media_type.LowerASCII())), + : media_type_(AttemptStaticStringCreation(media_type.LowerASCII())), exp_node_(exp_node), + restrictor_(restrictor), has_unknown_(exp_node_ ? exp_node_->HasUnknown() : false) {} MediaQuery::MediaQuery(const MediaQuery& o) - : restrictor_(o.restrictor_), - media_type_(o.media_type_), - exp_node_(o.exp_node_), + : media_type_(o.media_type_), serialization_cache_(o.serialization_cache_), + exp_node_(o.exp_node_), + restrictor_(o.restrictor_), has_unknown_(o.has_unknown_) {} MediaQuery::~MediaQuery() = default;
diff --git a/third_party/blink/renderer/core/css/media_query.h b/third_party/blink/renderer/core/css/media_query.h index 777aa39..4597d01 100644 --- a/third_party/blink/renderer/core/css/media_query.h +++ b/third_party/blink/renderer/core/css/media_query.h
@@ -47,7 +47,7 @@ class CORE_EXPORT MediaQuery : public GarbageCollected<MediaQuery> { public: - enum class RestrictorType { kOnly, kNot, kNone }; + enum class RestrictorType : uint8_t { kOnly, kNot, kNone }; static MediaQuery* CreateNotAll(); @@ -67,11 +67,11 @@ MediaQuery& operator=(const MediaQuery&) = delete; bool BehaveAsNotAll() const; - RestrictorType restrictor_; String media_type_; - Member<const MediaQueryExpNode> exp_node_; String serialization_cache_; + Member<const MediaQueryExpNode> exp_node_; + RestrictorType restrictor_; // Set if |exp_node_| contains any MediaQueryUnknownExpNode instances. // // If the runtime flag CSSMediaQueries4 is *not* enabled, this will cause the
diff --git a/third_party/blink/renderer/core/css/media_query_exp.h b/third_party/blink/renderer/core/css/media_query_exp.h index 0f6b131..2df142a 100644 --- a/third_party/blink/renderer/core/css/media_query_exp.h +++ b/third_party/blink/renderer/core/css/media_query_exp.h
@@ -147,6 +147,10 @@ Type type_ = Type::kInvalid; + // Used when the value can't be represented by the union below (e.g. math + // functions). Also used for style features in style container queries. + Member<const CSSValue> css_value_; + union { CSSValueID id_; struct { @@ -158,10 +162,6 @@ unsigned denominator; } ratio_; }; - - // Used when the value can't be represented by the above union (e.g. math - // functions). Also used for style features in style container queries. - Member<const CSSValue> css_value_; }; // https://drafts.csswg.org/mediaqueries-4/#mq-syntax
diff --git a/third_party/blink/renderer/core/css/remote_font_face_source.h b/third_party/blink/renderer/core/css/remote_font_face_source.h index 9db74e2..0f55d1c 100644 --- a/third_party/blink/renderer/core/css/remote_font_face_source.h +++ b/third_party/blink/renderer/core/css/remote_font_face_source.h
@@ -21,7 +21,11 @@ class RemoteFontFaceSource final : public CSSFontFaceSource, public FontResourceClient { public: - enum Phase { kNoLimitExceeded, kShortLimitExceeded, kLongLimitExceeded }; + enum Phase : uint8_t { + kNoLimitExceeded, + kShortLimitExceeded, + kLongLimitExceeded + }; RemoteFontFaceSource(CSSFontFace*, FontSelector*, @@ -74,7 +78,7 @@ // the font is loaded from memory cache synchronously, and hence, made // immediately available. As we never need to use a fallback for it, using // other DisplayPeriod values seem artificial. So we use a special value. - enum DisplayPeriod { + enum DisplayPeriod : uint8_t { kBlockPeriod, kSwapPeriod, kFailurePeriod, @@ -161,10 +165,11 @@ // |nullptr| if font is not loaded or failed to decode. String url_; + FontLoadHistograms histograms_; + FontDisplay display_; Phase phase_; DisplayPeriod period_; - FontLoadHistograms histograms_; bool is_intervention_triggered_; bool finished_before_document_rendering_begin_;
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 f565b3a..29d9eca 100644 --- a/third_party/blink/renderer/core/css/resolver/style_resolver.cc +++ b/third_party/blink/renderer/core/css/resolver/style_resolver.cc
@@ -368,8 +368,8 @@ } StyleResolver::StyleResolver(Document& document) - : document_(document), - initial_style_(ComputedStyle::CreateInitialStyleSingleton()) { + : initial_style_(ComputedStyle::CreateInitialStyleSingleton()), + document_(document) { UpdateMediaType(); }
diff --git a/third_party/blink/renderer/core/css/resolver/style_resolver.h b/third_party/blink/renderer/core/css/resolver/style_resolver.h index 25b2091..7f75550 100644 --- a/third_party/blink/renderer/core/css/resolver/style_resolver.h +++ b/third_party/blink/renderer/core/css/resolver/style_resolver.h
@@ -305,10 +305,10 @@ Functor& func) const; MatchedPropertiesCache matched_properties_cache_; - Member<Document> document_; scoped_refptr<const ComputedStyle> initial_style_; SelectorFilter selector_filter_; + Member<Document> document_; Member<StyleRuleUsageTracker> tracker_; // This is a dummy/disconnected element that we use for FormattedText
diff --git a/third_party/blink/renderer/core/display_lock/display_lock_document_state.h b/third_party/blink/renderer/core/display_lock/display_lock_document_state.h index 0fdd6cd5..35449f30 100644 --- a/third_party/blink/renderer/core/display_lock/display_lock_document_state.h +++ b/third_party/blink/renderer/core/display_lock/display_lock_document_state.h
@@ -208,17 +208,17 @@ Member<IntersectionObserver> intersection_observer_ = nullptr; HeapHashSet<WeakMember<DisplayLockContext>> display_lock_contexts_; + // Contains all of the currently forced node infos, each of which represents + // the node that caused the scope to be created. + HeapVector<ForcedNodeInfo> forced_node_infos_; + HeapVector<ForcedRangeInfo> forced_range_infos_; + int locked_display_lock_count_ = 0; int display_lock_blocking_all_activation_count_ = 0; // If greater than 0, then the activatable locks are forced. int activatable_display_locks_forced_ = 0; - // Contains all of the currently forced node infos, each of which represents - // the node that caused the scope to be created. - HeapVector<ForcedNodeInfo> forced_node_infos_; - HeapVector<ForcedRangeInfo> forced_range_infos_; - bool printing_ = false; base::TimeTicks last_lock_update_timestamp_ = base::TimeTicks();
diff --git a/third_party/blink/renderer/core/dom/character_data.cc b/third_party/blink/renderer/core/dom/character_data.cc index a98e32d0..71e6e45 100644 --- a/third_party/blink/renderer/core/dom/character_data.cc +++ b/third_party/blink/renderer/core/dom/character_data.cc
@@ -39,12 +39,11 @@ namespace blink { void CharacterData::MakeParkable() { - if (is_parkable_) + if (absl::holds_alternative<ParkableString>(data_)) return; - parkable_data_ = ParkableString(data_.ReleaseImpl()); - data_ = String(); - is_parkable_ = true; + auto released = absl::get<String>(data_).ReleaseImpl(); + data_ = ParkableString(std::move(released)); } void CharacterData::setData(const String& data) { @@ -196,10 +195,6 @@ unsigned new_length, UpdateSource source) { String old_data = this->data(); - if (is_parkable_) { - is_parkable_ = false; - parkable_data_ = ParkableString(); - } data_ = new_data; DCHECK(!GetLayoutObject() || IsTextNode());
diff --git a/third_party/blink/renderer/core/dom/character_data.h b/third_party/blink/renderer/core/dom/character_data.h index 20e983a..ac0212c 100644 --- a/third_party/blink/renderer/core/dom/character_data.h +++ b/third_party/blink/renderer/core/dom/character_data.h
@@ -24,6 +24,7 @@ #ifndef THIRD_PARTY_BLINK_RENDERER_CORE_DOM_CHARACTER_DATA_H_ #define THIRD_PARTY_BLINK_RENDERER_CORE_DOM_CHARACTER_DATA_H_ +#include "third_party/abseil-cpp/absl/types/variant.h" #include "third_party/blink/renderer/core/core_export.h" #include "third_party/blink/renderer/core/dom/node.h" #include "third_party/blink/renderer/platform/bindings/parkable_string.h" @@ -41,11 +42,15 @@ // Makes the data Parkable. This enables de-duplication and compression. void MakeParkable(); const String& data() const { - return is_parkable_ ? parkable_data_.ToString() : data_; + if (auto* parked = absl::get_if<ParkableString>(&data_)) + return parked->ToString(); + return absl::get<String>(data_); } void setData(const String&); unsigned length() const { - return is_parkable_ ? parkable_data_.length() : data_.length(); + if (auto* parked = absl::get_if<ParkableString>(&data_)) + return parked->length(); + return absl::get<String>(data_).length(); } String substringData(unsigned offset, unsigned count, ExceptionState&); void appendData(const String&); @@ -67,9 +72,7 @@ CharacterData(TreeScope& tree_scope, const String& text, ConstructionType type) - : Node(&tree_scope, type), - is_parkable_(false), - data_(!text.IsNull() ? text : g_empty_string) { + : Node(&tree_scope, type), data_(!text.IsNull() ? text : g_empty_string) { DCHECK(type == kCreateComment || type == kCreateText || type == kCreateCdataSection || type == kCreateProcessingInstruction || type == kCreateEditingText); @@ -77,10 +80,6 @@ void SetDataWithoutUpdate(const String& data) { DCHECK(!data.IsNull()); - if (is_parkable_) { - is_parkable_ = false; - parkable_data_ = ParkableString(); - } data_ = data; } enum UpdateSource { @@ -89,9 +88,7 @@ }; void DidModifyData(const String& old_value, UpdateSource); - bool is_parkable_; - ParkableString parkable_data_; - String data_; + absl::variant<ParkableString, String> data_; private: String nodeValue() const final;
diff --git a/third_party/blink/renderer/core/dom/child_list_mutation_scope.h b/third_party/blink/renderer/core/dom/child_list_mutation_scope.h index 32806bc..62011e4 100644 --- a/third_party/blink/renderer/core/dom/child_list_mutation_scope.h +++ b/third_party/blink/renderer/core/dom/child_list_mutation_scope.h
@@ -73,10 +73,9 @@ bool IsAddedNodeInOrder(Node&); bool IsRemovedNodeInOrder(Node&); - Member<Node> target_; - HeapVector<Member<Node>> removed_nodes_; HeapVector<Member<Node>> added_nodes_; + Member<Node> target_; Member<Node> previous_sibling_; Member<Node> next_sibling_; Member<Node> last_added_;
diff --git a/third_party/blink/renderer/core/dom/document.cc b/third_party/blink/renderer/core/dom/document.cc index 49cc6fc..375cd097 100644 --- a/third_party/blink/renderer/core/dom/document.cc +++ b/third_party/blink/renderer/core/dom/document.cc
@@ -6066,7 +6066,7 @@ return ScriptPromise::RejectWithDOMException( script_state, MakeGarbageCollected<DOMException>( - DOMExceptionCode::kSecurityError, + DOMExceptionCode::kInvalidStateError, "requestStorageAccessForOrigin: Cannot be used unless " "the document is fully active.")); } @@ -6174,7 +6174,7 @@ // Note that in detached frames, resolvers are not able to return a promise. return ScriptPromise::RejectWithDOMException( script_state, MakeGarbageCollected<DOMException>( - DOMExceptionCode::kSecurityError, + DOMExceptionCode::kInvalidStateError, "requestStorageAccess: Cannot be used unless the " "document is fully active.")); }
diff --git a/third_party/blink/renderer/core/dom/dom_token_list.h b/third_party/blink/renderer/core/dom/dom_token_list.h index b7a4e65..9ebe5e2 100644 --- a/third_party/blink/renderer/core/dom/dom_token_list.h +++ b/third_party/blink/renderer/core/dom/dom_token_list.h
@@ -44,7 +44,7 @@ public: DOMTokenList(Element& element, const QualifiedName& attr) - : element_(element), attribute_name_(attr) {} + : attribute_name_(attr), element_(element) {} DOMTokenList(const DOMTokenList&) = delete; DOMTokenList& operator=(const DOMTokenList&) = delete; ~DOMTokenList() override = default; @@ -86,12 +86,12 @@ void UpdateWithTokenSet(const SpaceSplitString&); SpaceSplitString token_set_; - const Member<Element> element_; // Normal DOMTokenList instances is associated to an attribute name. // So |attribute_name_| is typically an html_names::kFooAttr. // CustomStateTokenList is associated to no attribute name. // |attribute_name_| is |g_null_name| in that case. const QualifiedName attribute_name_; + const Member<Element> element_; bool is_in_update_step_ = false; };
diff --git a/third_party/blink/renderer/core/dom/processing_instruction.cc b/third_party/blink/renderer/core/dom/processing_instruction.cc index 2c04183a..c290052 100644 --- a/third_party/blink/renderer/core/dom/processing_instruction.cc +++ b/third_party/blink/renderer/core/dom/processing_instruction.cc
@@ -74,9 +74,11 @@ } Node* ProcessingInstruction::Clone(Document& factory, CloneChildrenFlag) const { + DCHECK(absl::holds_alternative<String>(data_)); // FIXME: Is it a problem that this does not copy local_href_? // What about other data members? - return MakeGarbageCollected<ProcessingInstruction>(factory, target_, data_); + return MakeGarbageCollected<ProcessingInstruction>(factory, target_, + absl::get<String>(data_)); } void ProcessingInstruction::DidAttributeChanged() { @@ -98,11 +100,13 @@ parentNode() != GetDocument()) return false; + DCHECK(absl::holds_alternative<String>(data_)); // see http://www.w3.org/TR/xml-stylesheet/ // ### support stylesheet included in a fragment of this (or another) document // ### make sure this gets called when adding from javascript bool attrs_ok; - const HashMap<String, String> attrs = ParseAttributes(data_, attrs_ok); + const HashMap<String, String> attrs = + ParseAttributes(absl::get<String>(data_), attrs_ok); if (!attrs_ok) return false; HashMap<String, String>::const_iterator i = attrs.find("type");
diff --git a/third_party/blink/renderer/core/dom/scripted_idle_task_controller_test.cc b/third_party/blink/renderer/core/dom/scripted_idle_task_controller_test.cc index ecfd091..ad4d036c7 100644 --- a/third_party/blink/renderer/core/dom/scripted_idle_task_controller_test.cc +++ b/third_party/blink/renderer/core/dom/scripted_idle_task_controller_test.cc
@@ -11,6 +11,9 @@ #include "third_party/blink/renderer/bindings/core/v8/v8_idle_request_callback.h" #include "third_party/blink/renderer/bindings/core/v8/v8_idle_request_options.h" #include "third_party/blink/renderer/core/testing/null_execution_context.h" +#include "third_party/blink/renderer/platform/scheduler/public/dummy_schedulers.h" +#include "third_party/blink/renderer/platform/scheduler/public/frame_scheduler.h" +#include "third_party/blink/renderer/platform/scheduler/public/page_scheduler.h" #include "third_party/blink/renderer/platform/scheduler/public/thread_scheduler.h" #include "third_party/blink/renderer/platform/scheduler/test/fake_task_runner.h" #include "third_party/blink/renderer/platform/testing/scoped_scheduler_overrider.h" @@ -74,33 +77,127 @@ base::MakeRefCounted<scheduler::FakeTaskRunner>(); }; +class IdleTaskControllerFrameScheduler : public FrameScheduler { + public: + explicit IdleTaskControllerFrameScheduler( + MockScriptedIdleTaskControllerScheduler* scripted_idle_scheduler) + : scripted_idle_scheduler_(scripted_idle_scheduler), + page_scheduler_(scheduler::CreateDummyPageScheduler()) {} + ~IdleTaskControllerFrameScheduler() override = default; + + scoped_refptr<base::SingleThreadTaskRunner> GetTaskRunner(TaskType) override { + DCHECK(WTF::IsMainThread()); + return scripted_idle_scheduler_->TaskRunner(); + } + + PageScheduler* GetPageScheduler() const override { + return page_scheduler_.get(); + } + scheduler::WebAgentGroupScheduler* GetAgentGroupScheduler() override { + return &page_scheduler_->GetAgentGroupScheduler(); + } + + void SetPreemptedForCooperativeScheduling(Preempted) override {} + void SetFrameVisible(bool) override {} + bool IsFrameVisible() const override { return true; } + bool IsPageVisible() const override { return true; } + void SetPaused(bool) override {} + void SetShouldReportPostedTasksWhenDisabled(bool) override {} + void SetCrossOriginToNearestMainFrame(bool) override {} + bool IsCrossOriginToNearestMainFrame() const override { return false; } + void SetIsAdFrame(bool is_ad_frame) override {} + bool IsAdFrame() const override { return false; } + bool IsInEmbeddedFrameTree() const override { return false; } + void TraceUrlChange(const String&) override {} + void AddTaskTime(base::TimeDelta) override {} + FrameType GetFrameType() const override { return FrameType::kMainFrame; } + WebScopedVirtualTimePauser CreateWebScopedVirtualTimePauser( + const String& name, + WebScopedVirtualTimePauser::VirtualTaskDuration) override { + return WebScopedVirtualTimePauser(); + } + void DidStartProvisionalLoad() override {} + void DidCommitProvisionalLoad(bool, FrameScheduler::NavigationType) override { + } + void OnFirstContentfulPaintInMainFrame() override {} + void OnFirstMeaningfulPaint() override {} + void OnLoad() override {} + bool IsExemptFromBudgetBasedThrottling() const override { return false; } + std::unique_ptr<blink::mojom::blink::PauseSubresourceLoadingHandle> + GetPauseSubresourceLoadingHandle() override { + return nullptr; + } + std::unique_ptr<scheduler::WebResourceLoadingTaskRunnerHandle> + CreateResourceLoadingTaskRunnerHandle() override { + return scheduler::WebResourceLoadingTaskRunnerHandle::CreateUnprioritized( + scripted_idle_scheduler_->TaskRunner()); + } + std::unique_ptr<scheduler::WebResourceLoadingTaskRunnerHandle> + CreateResourceLoadingMaybeUnfreezableTaskRunnerHandle() override { + return scheduler::WebResourceLoadingTaskRunnerHandle::CreateUnprioritized( + scripted_idle_scheduler_->TaskRunner()); + } + std::unique_ptr<WebSchedulingTaskQueue> CreateWebSchedulingTaskQueue( + WebSchedulingPriority) override { + return nullptr; + } + ukm::SourceId GetUkmSourceId() override { return ukm::kInvalidSourceId; } + void OnStartedUsingFeature(SchedulingPolicy::Feature feature, + const SchedulingPolicy& policy) override {} + void OnStoppedUsingFeature(SchedulingPolicy::Feature feature, + const SchedulingPolicy& policy) override {} + base::WeakPtr<FrameOrWorkerScheduler> GetSchedulingAffectingFeatureWeakPtr() + override { + return weak_ptr_factory_.GetWeakPtr(); + } + WTF::HashSet<SchedulingPolicy::Feature> + GetActiveFeaturesTrackedForBackForwardCacheMetrics() override { + return WTF::HashSet<SchedulingPolicy::Feature>(); + } + base::WeakPtr<FrameScheduler> GetWeakPtr() override { + return weak_ptr_factory_.GetWeakPtr(); + } + void ReportActiveSchedulerTrackedFeatures() override {} + scoped_refptr<base::SingleThreadTaskRunner> CompositorTaskRunner() override { + return scripted_idle_scheduler_->TaskRunner(); + } + + private: + MockScriptedIdleTaskControllerScheduler* scripted_idle_scheduler_; + std::unique_ptr<PageScheduler> page_scheduler_; + base::WeakPtrFactory<FrameScheduler> weak_ptr_factory_{this}; +}; + class MockIdleTask : public IdleTask { public: MOCK_METHOD1(invoke, void(IdleDeadline*)); }; } // namespace -class ScriptedIdleTaskControllerTest : public testing::Test { +class ScopedNullExecutionContext { public: - ~ScriptedIdleTaskControllerTest() override { + explicit ScopedNullExecutionContext( + MockScriptedIdleTaskControllerScheduler* scheduler) + : execution_context_(MakeGarbageCollected<NullExecutionContext>( + std::make_unique<IdleTaskControllerFrameScheduler>(scheduler))) {} + + ~ScopedNullExecutionContext() { execution_context_->NotifyContextDestroyed(); } - void SetUp() override { - execution_context_ = MakeGarbageCollected<NullExecutionContext>(); - } + ExecutionContext* GetExecutionContext() { return execution_context_; } - protected: + private: Persistent<ExecutionContext> execution_context_; }; -TEST_F(ScriptedIdleTaskControllerTest, RunCallback) { +TEST(ScriptedIdleTaskControllerTest, RunCallback) { MockScriptedIdleTaskControllerScheduler scheduler(ShouldYield(false)); ScopedSchedulerOverrider scheduler_overrider(&scheduler, scheduler.TaskRunner()); - - ScriptedIdleTaskController* controller = - ScriptedIdleTaskController::Create(execution_context_); + ScopedNullExecutionContext execution_context(&scheduler); + ScriptedIdleTaskController* controller = ScriptedIdleTaskController::Create( + execution_context.GetExecutionContext()); Persistent<MockIdleTask> idle_task(MakeGarbageCollected<MockIdleTask>()); IdleRequestOptions* options = IdleRequestOptions::Create(); @@ -115,13 +212,13 @@ EXPECT_FALSE(scheduler.HasIdleTask()); } -TEST_F(ScriptedIdleTaskControllerTest, DontRunCallbackWhenAskedToYield) { +TEST(ScriptedIdleTaskControllerTest, DontRunCallbackWhenAskedToYield) { MockScriptedIdleTaskControllerScheduler scheduler(ShouldYield(true)); ScopedSchedulerOverrider scheduler_overrider(&scheduler, scheduler.TaskRunner()); - - ScriptedIdleTaskController* controller = - ScriptedIdleTaskController::Create(execution_context_); + ScopedNullExecutionContext execution_context(&scheduler); + ScriptedIdleTaskController* controller = ScriptedIdleTaskController::Create( + execution_context.GetExecutionContext()); Persistent<MockIdleTask> idle_task(MakeGarbageCollected<MockIdleTask>()); IdleRequestOptions* options = IdleRequestOptions::Create(); @@ -136,12 +233,13 @@ EXPECT_TRUE(scheduler.HasIdleTask()); } -TEST_F(ScriptedIdleTaskControllerTest, RunCallbacksAsyncWhenUnpaused) { +TEST(ScriptedIdleTaskControllerTest, RunCallbacksAsyncWhenUnpaused) { MockScriptedIdleTaskControllerScheduler scheduler(ShouldYield(true)); ScopedSchedulerOverrider scheduler_overrider(&scheduler, scheduler.TaskRunner()); - ScriptedIdleTaskController* controller = - ScriptedIdleTaskController::Create(execution_context_); + ScopedNullExecutionContext execution_context(&scheduler); + ScriptedIdleTaskController* controller = ScriptedIdleTaskController::Create( + execution_context.GetExecutionContext()); // Register an idle task with a deadline. Persistent<MockIdleTask> idle_task(MakeGarbageCollected<MockIdleTask>());
diff --git a/third_party/blink/renderer/core/html/parser/html_document_parser.h b/third_party/blink/renderer/core/html/parser/html_document_parser.h index 16c258b..3eb88c5e 100644 --- a/third_party/blink/renderer/core/html/parser/html_document_parser.h +++ b/third_party/blink/renderer/core/html/parser/html_document_parser.h
@@ -237,8 +237,8 @@ // called when data is available. bool ShouldPumpTokenizerNowForFinishAppend() const; - const HTMLParserOptions options_; HTMLInputStream input_; + const HTMLParserOptions options_; Member<HTMLParserReentryPermit> reentry_permit_ = MakeGarbageCollected<HTMLParserReentryPermit>();
diff --git a/third_party/blink/renderer/core/html/parser/html_tree_builder.cc b/third_party/blink/renderer/core/html/parser/html_tree_builder.cc index 86a4f4c..38a7316 100644 --- a/third_party/blink/renderer/core/html/parser/html_tree_builder.cc +++ b/third_party/blink/renderer/core/html/parser/html_tree_builder.cc
@@ -238,12 +238,12 @@ const HTMLParserOptions& options, bool include_shadow_roots, HTMLTokenProducer* token_producer) - : frameset_ok_(true), - tree_(parser->ReentryPermit(), document, parser_content_policy), + : tree_(parser->ReentryPermit(), document, parser_content_policy), insertion_mode_(kInitialMode), original_insertion_mode_(kInitialMode), should_skip_leading_newline_(false), include_shadow_roots_(include_shadow_roots), + frameset_ok_(true), parser_(parser), script_to_process_start_position_(UninitializedPositionValue1()), options_(options),
diff --git a/third_party/blink/renderer/core/html/parser/html_tree_builder.h b/third_party/blink/renderer/core/html/parser/html_tree_builder.h index 6a293ade..733612c 100644 --- a/third_party/blink/renderer/core/html/parser/html_tree_builder.h +++ b/third_party/blink/renderer/core/html/parser/html_tree_builder.h
@@ -233,10 +233,6 @@ }; // https://html.spec.whatwg.org/C/#frameset-ok-flag - bool frameset_ok_; -#if DCHECK_IS_ON() - bool is_attached_ = true; -#endif FragmentParsingContext fragment_context_; HTMLConstructionSite tree_; @@ -255,6 +251,11 @@ const bool include_shadow_roots_; + bool frameset_ok_; +#if DCHECK_IS_ON() + bool is_attached_ = true; +#endif + // We access parser because HTML5 spec requires that we be able to change the // state of the tokenizer from within parser actions. We also need it to track // the current position.
diff --git a/third_party/blink/renderer/core/layout/deferred_shaping_controller.h b/third_party/blink/renderer/core/layout/deferred_shaping_controller.h index 1550f6f..864386b 100644 --- a/third_party/blink/renderer/core/layout/deferred_shaping_controller.h +++ b/third_party/blink/renderer/core/layout/deferred_shaping_controller.h
@@ -114,9 +114,9 @@ private: size_t ReshapeAllDeferredInternal(); - Member<Document> document_; TaskHandle reshaping_task_handle_; HeapHashSet<Member<Element>> deferred_elements_; + Member<Document> document_; LayoutUnit current_viewport_bottom_ = kIndefiniteSize; LayoutUnit current_minimum_top_; bool allow_deferred_shaping_ = false;
diff --git a/third_party/blink/renderer/core/layout/flexible_box_algorithm.cc b/third_party/blink/renderer/core/layout/flexible_box_algorithm.cc index 6d322af6..44b6364 100644 --- a/third_party/blink/renderer/core/layout/flexible_box_algorithm.cc +++ b/third_party/blink/renderer/core/layout/flexible_box_algorithm.cc
@@ -942,13 +942,13 @@ line_context.cross_axis_offset_ - cross_axis_start_edge; LayoutUnit new_offset = cross_axis_content_size - original_offset - line_context.cross_axis_extent_; + LayoutUnit delta = new_offset - original_offset; if (flex_line_outputs) { - line_context.cross_axis_offset_ = new_offset; - (*flex_line_outputs)[i].cross_axis_offset = new_offset; + line_context.cross_axis_offset_ += delta; + (*flex_line_outputs)[i].cross_axis_offset += delta; } - LayoutUnit wrap_reverse_difference = new_offset - original_offset; for (FlexItem& flex_item : line_context.line_items_) - flex_item.offset_->cross_axis_offset += wrap_reverse_difference; + flex_item.offset_->cross_axis_offset += delta; } } @@ -1263,7 +1263,8 @@ line_index = flex_lines_.size() - line_index - 1; DCHECK_LT(item_index, flex_lines_[line_index].line_items_.size()); - if (Style()->ResolvedIsColumnReverseFlexDirection()) + if (Style()->ResolvedIsColumnReverseFlexDirection() || + Style()->ResolvedIsRowReverseFlexDirection()) item_index = flex_lines_[line_index].line_items_.size() - item_index - 1; return const_cast<FlexItem*>( &flex_lines_[line_index].line_items_[item_index]);
diff --git a/third_party/blink/renderer/core/layout/flexible_box_algorithm.h b/third_party/blink/renderer/core/layout/flexible_box_algorithm.h index fd12c1a7..3e9a170 100644 --- a/third_party/blink/renderer/core/layout/flexible_box_algorithm.h +++ b/third_party/blink/renderer/core/layout/flexible_box_algorithm.h
@@ -346,8 +346,8 @@ LayoutUnit cross_axis_offset_; LayoutUnit cross_axis_extent_; - LayoutUnit max_major_ascent_; - LayoutUnit max_minor_ascent_; + LayoutUnit max_major_ascent_ = LayoutUnit::Min(); + LayoutUnit max_minor_ascent_ = LayoutUnit::Min(); }; // This class implements the CSS Flexbox layout algorithm:
diff --git a/third_party/blink/renderer/core/layout/geometry/transform_state.cc b/third_party/blink/renderer/core/layout/geometry/transform_state.cc index 2f498016..6dbd142 100644 --- a/third_party/blink/renderer/core/layout/geometry/transform_state.cc +++ b/third_party/blink/renderer/core/layout/geometry/transform_state.cc
@@ -127,7 +127,7 @@ accumulated_transform_ = std::make_unique<TransformationMatrix>( transform_from_container * *accumulated_transform_); else - accumulated_transform_->Multiply(transform_from_container); + accumulated_transform_->PreConcat(transform_from_container); } else if (accumulate == kAccumulateTransform) { // Make one if we started to accumulate accumulated_transform_ =
diff --git a/third_party/blink/renderer/core/layout/layout_box.cc b/third_party/blink/renderer/core/layout/layout_box.cc index a8de2e7..27f1998 100644 --- a/third_party/blink/renderer/core/layout/layout_box.cc +++ b/third_party/blink/renderer/core/layout/layout_box.cc
@@ -2043,7 +2043,7 @@ // a) Transform. TransformationMatrix transform; if (Layer() && Layer()->Transform()) - transform.Multiply(Layer()->CurrentTransform()); + transform.PreConcat(Layer()->CurrentTransform()); // b) Container offset. transform.PostTranslate(container_offset.left.ToFloat(),
diff --git a/third_party/blink/renderer/core/layout/layout_image.h b/third_party/blink/renderer/core/layout/layout_image.h index 7193ab8..cc21951 100644 --- a/third_party/blink/renderer/core/layout/layout_image.h +++ b/third_party/blink/renderer/core/layout/layout_image.h
@@ -176,11 +176,11 @@ // and thus is stored in ComputedStyle (see ContentData::image) that gets // propagated to the anonymous LayoutImage in LayoutObject::createObject. Member<LayoutImageResource> image_resource_; + float image_device_pixel_ratio_ = 1.0f; bool did_increment_visually_non_empty_pixel_count_ = false; // This field stores whether this image is generated with 'content'. bool is_generated_content_ = false; - float image_device_pixel_ratio_ = 1.0f; bool image_ad_use_counter_recorded_ = false; };
diff --git a/third_party/blink/renderer/core/layout/layout_object.cc b/third_party/blink/renderer/core/layout/layout_object.cc index c5204f4..ace9bf4e 100644 --- a/third_party/blink/renderer/core/layout/layout_object.cc +++ b/third_party/blink/renderer/core/layout/layout_object.cc
@@ -3393,7 +3393,7 @@ PaintLayer* layer = HasLayer() ? To<LayoutBoxModelObject>(this)->Layer() : nullptr; if (layer && layer->Transform()) - transform.Multiply(layer->CurrentTransform()); + transform.PreConcat(layer->CurrentTransform()); transform.PostTranslate(offset_in_container.left.ToFloat(), offset_in_container.top.ToFloat());
diff --git a/third_party/blink/renderer/core/layout/ng/custom/ng_custom_layout_algorithm.cc b/third_party/blink/renderer/core/layout/ng/custom/ng_custom_layout_algorithm.cc index 8b2b76f..0ac6fe53 100644 --- a/third_party/blink/renderer/core/layout/ng/custom/ng_custom_layout_algorithm.cc +++ b/third_party/blink/renderer/core/layout/ng/custom/ng_custom_layout_algorithm.cc
@@ -87,6 +87,8 @@ ScriptForbiddenScope::AllowUserAgentScript allow_script; CustomLayoutScope scope; + // TODO(ikilpatrick): Scale inputs/outputs by effective-zoom. + const float effective_zoom = Style().EffectiveZoom(); const AtomicString& name = Style().DisplayLayoutCustomName(); const Document& document = Node().GetDocument(); LayoutWorklet* worklet = LayoutWorklet::From(*document.domWindow()); @@ -171,8 +173,8 @@ // TODO(ikilpatrick): Allow setting both the first/last baseline instead of a // general baseline. if (fragment_result_options->hasBaseline()) { - LayoutUnit baseline = - LayoutUnit::FromDoubleRound(fragment_result_options->baseline()); + LayoutUnit baseline = LayoutUnit::FromDoubleRound( + effective_zoom * fragment_result_options->baseline()); container_builder_.SetBaselines(baseline); }
diff --git a/third_party/blink/renderer/core/layout/ng/flex/ng_flex_layout_algorithm.cc b/third_party/blink/renderer/core/layout/ng/flex/ng_flex_layout_algorithm.cc index ee15609f..fc0d2fb 100644 --- a/third_party/blink/renderer/core/layout/ng/flex/ng_flex_layout_algorithm.cc +++ b/third_party/blink/renderer/core/layout/ng/flex/ng_flex_layout_algorithm.cc
@@ -45,6 +45,81 @@ namespace { +class BaselineAccumulator { + STACK_ALLOCATED(); + + public: + explicit BaselineAccumulator(const ComputedStyle& style) + : font_baseline_(style.GetFontBaseline()) {} + + void AccumulateItem(const NGBoxFragment& fragment, + const LayoutUnit block_offset, + bool is_first_line, + bool is_last_line) { + if (is_first_line) { + if (!first_fallback_baseline_) { + first_fallback_baseline_ = + block_offset + fragment.FirstBaselineOrSynthesize(font_baseline_); + } + } + + if (is_last_line) { + last_fallback_baseline_ = + block_offset + fragment.LastBaselineOrSynthesize(font_baseline_); + } + } + + void AccumulateLine(const NGFlexLine& line, + bool is_first_line, + bool is_last_line) { + if (is_first_line) { + if (line.major_baseline != LayoutUnit::Min()) { + first_major_baseline_ = line.cross_axis_offset + line.major_baseline; + } + if (line.minor_baseline != LayoutUnit::Min()) { + first_minor_baseline_ = + line.cross_axis_offset + line.line_cross_size - line.minor_baseline; + } + } + + if (is_last_line) { + if (line.major_baseline != LayoutUnit::Min()) { + last_major_baseline_ = line.cross_axis_offset + line.major_baseline; + } + if (line.minor_baseline != LayoutUnit::Min()) { + last_minor_baseline_ = + line.cross_axis_offset + line.line_cross_size - line.minor_baseline; + } + } + } + + absl::optional<LayoutUnit> FirstBaseline() const { + if (first_major_baseline_) + return *first_major_baseline_; + if (first_minor_baseline_) + return *first_minor_baseline_; + return first_fallback_baseline_; + } + absl::optional<LayoutUnit> LastBaseline() const { + if (last_minor_baseline_) + return *last_minor_baseline_; + if (last_major_baseline_) + return *last_major_baseline_; + return last_fallback_baseline_; + } + + private: + FontBaseline font_baseline_; + + absl::optional<LayoutUnit> first_major_baseline_; + absl::optional<LayoutUnit> first_minor_baseline_; + absl::optional<LayoutUnit> first_fallback_baseline_; + + absl::optional<LayoutUnit> last_major_baseline_; + absl::optional<LayoutUnit> last_minor_baseline_; + absl::optional<LayoutUnit> last_fallback_baseline_; +}; + bool ContainsNonWhitespace(const LayoutBox* box) { const LayoutObject* next = box; while ((next = next->NextInPreOrder(box))) { @@ -1169,6 +1244,8 @@ cross_axis_offset); flex_line_outputs->back().line_cross_size = line->cross_axis_extent_; flex_line_outputs->back().cross_axis_offset = line->cross_axis_offset_; + flex_line_outputs->back().major_baseline = line->max_major_ascent_; + flex_line_outputs->back().minor_baseline = line->max_minor_ascent_; } } @@ -1223,7 +1300,9 @@ if (Style().ResolvedIsColumnReverseFlexDirection()) { algorithm_.LayoutColumnReverse(final_content_main_size, BorderScrollbarPadding().block_start); - + } + if (Style().ResolvedIsColumnReverseFlexDirection() || + Style().ResolvedIsRowReverseFlexDirection()) { for (auto& flex_line : *flex_line_outputs) flex_line.line_items.Reverse(); } @@ -1262,12 +1341,20 @@ } } - absl::optional<LayoutUnit> fallback_baseline; + BaselineAccumulator baseline_accumulator(Style()); NGLayoutResult::EStatus status = NGLayoutResult::kSuccess; - bool is_wrap_reverse = Style().FlexWrap() == EFlexWrap::kWrapReverse; + for (wtf_size_t flex_line_idx = 0; flex_line_idx < flex_line_outputs->size(); ++flex_line_idx) { NGFlexLine& line_output = (*flex_line_outputs)[flex_line_idx]; + + bool is_first_line = flex_line_idx == 0; + bool is_last_line = flex_line_idx == flex_line_outputs->size() - 1; + if (!InvolvedInBlockFragmentation(container_builder_) && !is_column_) { + baseline_accumulator.AccumulateLine(line_output, is_first_line, + is_last_line); + } + for (wtf_size_t flex_item_idx = 0; flex_item_idx < line_output.line_items.size(); ++flex_item_idx) { NGFlexItem& flex_item = line_output.line_items[flex_item_idx]; @@ -1338,14 +1425,8 @@ physical_fragment); if (!InvolvedInBlockFragmentation(container_builder_)) { container_builder_.AddResult(*layout_result, offset); - - // Only propagate baselines from children on the first flex-line. - if ((!is_wrap_reverse && flex_line_idx == 0) || - (is_wrap_reverse && - flex_line_idx == flex_line_outputs->size() - 1)) { - PropagateBaselineFromChild(flex_item.Style(), fragment, - offset.block_offset, &fallback_baseline); - } + baseline_accumulator.AccumulateItem(fragment, offset.block_offset, + is_first_line, is_last_line); } else { flex_item.total_remaining_block_size = fragment.BlockSize(); } @@ -1358,11 +1439,10 @@ } } - // Set the baseline to the fallback, if we didn't find any children with - // baseline alignment. - if (!InvolvedInBlockFragmentation(container_builder_) && - !container_builder_.FirstBaseline() && fallback_baseline) - container_builder_.SetFirstBaseline(*fallback_baseline); + if (auto first_baseline = baseline_accumulator.FirstBaseline()) + container_builder_.SetFirstBaseline(*first_baseline); + if (auto last_baseline = baseline_accumulator.LastBaseline()) + container_builder_.SetLastBaseline(*last_baseline); // TODO(crbug.com/1131352): Avoid control-specific handling. if (Node().IsButton()) { @@ -1388,10 +1468,8 @@ DCHECK(row_break_between_outputs); DCHECK(broke_before_row); - absl::optional<LayoutUnit> fallback_baseline; NGFlexItemIterator item_iterator(*flex_line_outputs, BreakToken(), is_column_); - bool is_wrap_reverse = Style().FlexWrap() == EFlexWrap::kWrapReverse; Vector<bool> has_inflow_child_break_inside_line(flex_line_outputs->size(), false); @@ -1410,6 +1488,7 @@ if (BreakToken()) previously_consumed_block_size = BreakToken()->ConsumedBlockSize(); + BaselineAccumulator baseline_accumulator(Style()); for (auto entry = item_iterator.NextItem(*broke_before_row); NGFlexItem* flex_item = entry.flex_item; entry = item_iterator.NextItem(*broke_before_row)) { @@ -1418,6 +1497,8 @@ NGFlexLine& line_output = (*flex_line_outputs)[flex_line_idx]; const auto* item_break_token = To<NGBlockBreakToken>(entry.token); bool last_item_in_line = flex_item_idx == line_output.line_items.size() - 1; + + bool is_first_line = flex_line_idx == 0; bool is_last_line = flex_line_idx == flex_line_outputs->size() - 1; // A child break in a parallel flow doesn't affect whether we should @@ -1759,13 +1840,8 @@ current_column_break_info ? ¤t_column_break_info->break_after : nullptr); - - // Only propagate baselines from children on the first flex-line. - if ((!is_wrap_reverse && flex_line_idx == 0) || - (is_wrap_reverse && is_last_line)) { - PropagateBaselineFromChild(flex_item->Style(), fragment, - offset.block_offset, &fallback_baseline); - } + baseline_accumulator.AccumulateItem(fragment, offset.block_offset, + is_first_line, is_last_line); if (last_item_in_line) { if (!has_inflow_child_break_inside_line[flex_line_idx]) line_output.has_seen_all_children = true; @@ -1802,10 +1878,10 @@ container_builder_.SetHasSeenAllChildren(); } - // Set the baseline to the fallback, if we didn't find any children with - // baseline alignment. - if (!container_builder_.FirstBaseline() && fallback_baseline) - container_builder_.SetFirstBaseline(*fallback_baseline); + if (auto first_baseline = baseline_accumulator.FirstBaseline()) + container_builder_.SetFirstBaseline(*first_baseline); + if (auto last_baseline = baseline_accumulator.LastBaseline()) + container_builder_.SetLastBaseline(*last_baseline); // Update the |total_intrinsic_block_size_| in case things expanded. total_intrinsic_block_size_ = @@ -1928,36 +2004,6 @@ } } -void NGFlexLayoutAlgorithm::PropagateBaselineFromChild( - const ComputedStyle& flex_item_style, - const NGBoxFragment& fragment, - LayoutUnit block_offset, - absl::optional<LayoutUnit>* fallback_baseline) { - // Check if we've already found an appropriate baseline. - if (container_builder_.FirstBaseline()) - return; - - const auto baseline_type = Style().GetFontBaseline(); - const LayoutUnit baseline_offset = - block_offset + fragment.FirstBaselineOrSynthesize(baseline_type); - - // We prefer a baseline from a child with baseline alignment, and no - // auto-margins in the cross axis (even if we have to synthesize the - // baseline). - if (FlexLayoutAlgorithm::AlignmentForChild(Style(), flex_item_style) == - ItemPosition::kBaseline && - !is_column_) { - container_builder_.SetFirstBaseline(baseline_offset); - return; - } - - // Set the fallback baseline if it doesn't have a value yet. - if (Style().ResolvedIsColumnReverseFlexDirection()) - *fallback_baseline = baseline_offset; - else - *fallback_baseline = fallback_baseline->value_or(baseline_offset); -} - MinMaxSizesResult NGFlexLayoutAlgorithm::ComputeItemContributions( const NGConstraintSpace& space, const FlexItem& item) const { @@ -2629,7 +2675,8 @@ if (Style().FlexWrap() == EFlexWrap::kWrapReverse) flex_line_outputs.Reverse(); - if (Style().ResolvedIsColumnReverseFlexDirection()) { + if (Style().ResolvedIsColumnReverseFlexDirection() || + Style().ResolvedIsRowReverseFlexDirection()) { for (auto& flex_line : flex_line_outputs) flex_line.line_items.Reverse(); }
diff --git a/third_party/blink/renderer/core/layout/ng/flex/ng_flex_layout_algorithm.h b/third_party/blink/renderer/core/layout/ng/flex/ng_flex_layout_algorithm.h index af6f06d..cd5021e 100644 --- a/third_party/blink/renderer/core/layout/ng/flex/ng_flex_layout_algorithm.h +++ b/third_party/blink/renderer/core/layout/ng/flex/ng_flex_layout_algorithm.h
@@ -15,7 +15,6 @@ class NGBlockNode; class NGBlockBreakToken; -class NGBoxFragment; struct DevtoolsFlexInfo; struct NGFlexItem; @@ -106,13 +105,6 @@ void AdjustButtonBaseline(LayoutUnit final_content_cross_size); - // Propagates the baseline from the given flex-item if needed. - void PropagateBaselineFromChild( - const ComputedStyle&, - const NGBoxFragment&, - LayoutUnit block_offset, - absl::optional<LayoutUnit>* fallback_baseline); - MinMaxSizesResult ComputeMinMaxSizeOfRowContainer(); MinMaxSizesResult ComputeMinMaxSizeOfMultilineColumnContainer(); // This implements 9.9.3. Flex Item Intrinsic Size Contributions, from
diff --git a/third_party/blink/renderer/core/layout/ng/flex/ng_flex_line.h b/third_party/blink/renderer/core/layout/ng/flex/ng_flex_line.h index a663c48e..6e2034d 100644 --- a/third_party/blink/renderer/core/layout/ng/flex/ng_flex_line.h +++ b/third_party/blink/renderer/core/layout/ng/flex/ng_flex_line.h
@@ -47,6 +47,8 @@ LayoutUnit line_cross_size; LayoutUnit cross_axis_offset; + LayoutUnit major_baseline; + LayoutUnit minor_baseline; LayoutUnit item_offset_adjustment; bool has_seen_all_children = false; HeapVector<NGFlexItem> line_items;
diff --git a/third_party/blink/renderer/core/layout/ng/inline/ng_fragment_item.cc b/third_party/blink/renderer/core/layout/ng/inline/ng_fragment_item.cc index e243fc3..7770ba7 100644 --- a/third_party/blink/renderer/core/layout/ng/inline/ng_fragment_item.cc +++ b/third_party/blink/renderer/core/layout/ng/inline/ng_fragment_item.cc
@@ -23,7 +23,6 @@ namespace { struct SameSizeAsNGFragmentItem { - Member<void*> member; union { NGFragmentItem::TextItem text_; NGFragmentItem::SvgTextItem svg_text_; @@ -33,6 +32,7 @@ }; PhysicalRect rect; NGInkOverflow ink_overflow; + Member<void*> member; wtf_size_t sizes[2]; unsigned flags; }; @@ -47,9 +47,9 @@ const NGTextOffset& text_offset, const PhysicalSize& size, bool is_hidden_for_paint) - : layout_object_(inline_item.GetLayoutObject()), - text_({std::move(shape_result), text_offset}), + : text_({std::move(shape_result), text_offset}), rect_({PhysicalOffset(), size}), + layout_object_(inline_item.GetLayoutObject()), const_traced_type_(kNone), type_(kText), sub_type_(static_cast<unsigned>(inline_item.TextType())), @@ -78,9 +78,9 @@ const String& text_content, const PhysicalSize& size, bool is_hidden_for_paint) - : layout_object_(&layout_object), - generated_text_({std::move(shape_result), text_content}), + : generated_text_({std::move(shape_result), text_content}), rect_({PhysicalOffset(), size}), + layout_object_(&layout_object), const_traced_type_(kNone), type_(kGeneratedText), sub_type_(static_cast<unsigned>(text_type)), @@ -112,9 +112,9 @@ is_hidden_for_paint) {} NGFragmentItem::NGFragmentItem(const NGPhysicalLineBoxFragment& line) - : layout_object_(line.ContainerLayoutObject()), - line_({&line, /* descendants_count */ 1}), + : line_({&line, /* descendants_count */ 1}), rect_({PhysicalOffset(), line.Size()}), + layout_object_(line.ContainerLayoutObject()), const_traced_type_(kLineItem), type_(kLine), sub_type_(static_cast<unsigned>(line.LineBoxType())), @@ -129,9 +129,9 @@ NGFragmentItem::NGFragmentItem(const NGPhysicalBoxFragment& box, TextDirection resolved_direction) - : layout_object_(box.GetLayoutObject()), - box_(&box, /* descendants_count */ 1), + : box_(&box, /* descendants_count */ 1), rect_({PhysicalOffset(), box.Size()}), + layout_object_(box.GetLayoutObject()), const_traced_type_(kBoxItem), type_(kBox), style_variant_(static_cast<unsigned>(box.StyleVariant())), @@ -192,8 +192,8 @@ } NGFragmentItem::NGFragmentItem(const NGFragmentItem& source) - : layout_object_(source.layout_object_), - rect_(source.rect_), + : rect_(source.rect_), + layout_object_(source.layout_object_), fragment_id_(source.fragment_id_), delta_to_next_for_same_layout_object_( source.delta_to_next_for_same_layout_object_), @@ -234,9 +234,9 @@ } NGFragmentItem::NGFragmentItem(NGFragmentItem&& source) - : layout_object_(source.layout_object_), - rect_(source.rect_), + : rect_(source.rect_), ink_overflow_(source.InkOverflowType(), std::move(source.ink_overflow_)), + layout_object_(source.layout_object_), fragment_id_(source.fragment_id_), delta_to_next_for_same_layout_object_( source.delta_to_next_for_same_layout_object_), @@ -635,7 +635,7 @@ AffineTransform transform = BuildSvgTransformForBoundingBox(); AffineTransform length_adjust = BuildSvgTransformForLengthAdjust(); if (!length_adjust.IsIdentity()) - transform.PreMultiply(length_adjust); + transform.PostConcat(length_adjust); return transform; } @@ -691,7 +691,7 @@ x += font_data->GetFontMetrics().FixedDescent(font_baseline); transform.Translate(svg_data.baseline_shift, -svg_data.rect.height() / 2); } - transform.Multiply(length_adjust); + transform.PreConcat(length_adjust); transform.SetE(transform.E() + x); transform.SetF(transform.F() + y); transform.Translate(-x, -y);
diff --git a/third_party/blink/renderer/core/layout/ng/inline/ng_fragment_item.h b/third_party/blink/renderer/core/layout/ng/inline/ng_fragment_item.h index e83208c..4a84431 100644 --- a/third_party/blink/renderer/core/layout/ng/inline/ng_fragment_item.h +++ b/third_party/blink/renderer/core/layout/ng/inline/ng_fragment_item.h
@@ -582,8 +582,6 @@ const AffineTransform& length_adjust) const; AffineTransform BuildSvgTransformForLengthAdjust() const; - Member<const LayoutObject> layout_object_; - // TODO(kojii): We can make them sub-classes if we need to make the vector of // pointers. Sub-classing from DisplayItemClient prohibits copying and that we // cannot create a vector of this class. @@ -600,6 +598,8 @@ NGInkOverflow ink_overflow_; + Member<const LayoutObject> layout_object_; + mutable wtf_size_t fragment_id_ = 0; // Item index delta to the next item for the same |LayoutObject|.
diff --git a/third_party/blink/renderer/core/layout/ng/inline/ng_logical_line_item.h b/third_party/blink/renderer/core/layout/ng/inline/ng_logical_line_item.h index 8a71ffa..89e8598 100644 --- a/third_party/blink/renderer/core/layout/ng/inline/ng_logical_line_item.h +++ b/third_party/blink/renderer/core/layout/ng/inline/ng_logical_line_item.h
@@ -203,8 +203,6 @@ void Trace(Visitor*) const; - Member<const NGLayoutResult> layout_result; - // Data to create a text fragment from. // |inline_item| is null only for ellipsis items. const NGInlineItem* inline_item = nullptr; @@ -214,6 +212,8 @@ // Data to create a generated text fragment. String text_content; + Member<const NGLayoutResult> layout_result; + // Ellipsis does not have |NGInlineItem|, but built from |LayoutObject| and // |NGStyleVariant|. Member<const LayoutObject> layout_object;
diff --git a/third_party/blink/renderer/core/layout/ng/ng_layout_result.h b/third_party/blink/renderer/core/layout/ng/ng_layout_result.h index 5b88a08..117449b 100644 --- a/third_party/blink/renderer/core/layout/ng/ng_layout_result.h +++ b/third_party/blink/renderer/core/layout/ng/ng_layout_result.h
@@ -700,9 +700,9 @@ SetBfcBlockOffset(bfc_block_offset); } RareData(const RareData& rare_data) - : bfc_line_offset(rare_data.bfc_line_offset), - start_page_name(rare_data.start_page_name), + : start_page_name(rare_data.start_page_name), end_page_name(rare_data.end_page_name), + bfc_line_offset(rare_data.bfc_line_offset), early_break(rare_data.early_break), oof_positioned_offset(rare_data.oof_positioned_offset), end_margin_strut(rare_data.end_margin_strut), @@ -796,11 +796,11 @@ void Trace(Visitor* visitor) const; - LayoutUnit bfc_line_offset; - AtomicString start_page_name; AtomicString end_page_name; + LayoutUnit bfc_line_offset; + Member<const NGEarlyBreak> early_break; LogicalOffset oof_positioned_offset; NGMarginStrut end_margin_strut;
diff --git a/third_party/blink/renderer/core/layout/ng/ng_physical_fragment.h b/third_party/blink/renderer/core/layout/ng/ng_physical_fragment.h index 4ba0319c..608c4d9 100644 --- a/third_party/blink/renderer/core/layout/ng/ng_physical_fragment.h +++ b/third_party/blink/renderer/core/layout/ng/ng_physical_fragment.h
@@ -225,6 +225,13 @@ // inside the fieldset except the rendered legend). bool IsFieldsetContainer() const { return is_fieldset_container_; } + // Return true if this is the layout root fragment for pagination + // (aka. printing). + bool IsPaginatedRoot() const { + return layout_object_->IsLayoutView() && IsCSSBox() && + GetDocument().Printing(); + } + // Returns whether the fragment is legacy layout root. bool IsLegacyLayoutRoot() const { return is_legacy_layout_root_; }
diff --git a/third_party/blink/renderer/core/layout/ng/ng_simplified_layout_algorithm.cc b/third_party/blink/renderer/core/layout/ng/ng_simplified_layout_algorithm.cc index 5052161..8ab3179 100644 --- a/third_party/blink/renderer/core/layout/ng/ng_simplified_layout_algorithm.cc +++ b/third_party/blink/renderer/core/layout/ng/ng_simplified_layout_algorithm.cc
@@ -316,7 +316,7 @@ // baseline if it is from the logical bottom margin edge. DCHECK_EQ(previous_fragment.LastBaseline().has_value(), container_builder_.LastBaseline().has_value()); - if (container_builder_.LastBaseline()) + if (Node().IsBlockFlow() && container_builder_.LastBaseline()) container_builder_.SetLastBaselineToBlockEndMarginEdgeIfNeeded(); return container_builder_.ToBoxFragment();
diff --git a/third_party/blink/renderer/core/layout/scroll_anchor.h b/third_party/blink/renderer/core/layout/scroll_anchor.h index 62ce73e6..c394319 100644 --- a/third_party/blink/renderer/core/layout/scroll_anchor.h +++ b/third_party/blink/renderer/core/layout/scroll_anchor.h
@@ -154,6 +154,10 @@ gfx::Vector2d ComputeAdjustment() const; + // Previously calculated css selector that uniquely locates the current + // anchor_object_. Cleared when the anchor_object_ is cleared. + String saved_selector_; + // The scroller to be adjusted by this ScrollAnchor. This is also the scroller // that owns us, unless it is the RootFrameViewport in which case we are owned // by the layout viewport. @@ -171,10 +175,6 @@ // (vertical-rl). LayoutPoint saved_relative_offset_; - // Previously calculated css selector that uniquely locates the current - // anchor_object_. Cleared when the anchor_object_ is cleared. - String saved_selector_; - // We suppress scroll anchoring after a style change on the anchor node or // one of its ancestors, if that change might have caused the node to move. // This bit tracks whether we have had a scroll-anchor-disabling style
diff --git a/third_party/blink/renderer/core/layout/svg/layout_svg_resource_pattern.cc b/third_party/blink/renderer/core/layout/svg/layout_svg_resource_pattern.cc index 32f282d..3f2b68c 100644 --- a/third_party/blink/renderer/core/layout/svg/layout_svg_resource_pattern.cc +++ b/third_party/blink/renderer/core/layout/svg/layout_svg_resource_pattern.cc
@@ -170,7 +170,7 @@ // Compute pattern space transformation. pattern_data->transform.Translate(tile_bounds.x(), tile_bounds.y()); - pattern_data->transform.PreMultiply(attributes.PatternTransform()); + pattern_data->transform.PostConcat(attributes.PatternTransform()); return pattern_data; }
diff --git a/third_party/blink/renderer/core/layout/svg/layout_svg_root.cc b/third_party/blink/renderer/core/layout/svg/layout_svg_root.cc index c2c705e..f68751b 100644 --- a/third_party/blink/renderer/core/layout/svg/layout_svg_root.cc +++ b/third_party/blink/renderer/core/layout/svg/layout_svg_root.cc
@@ -501,7 +501,7 @@ scale, 0, 0, scale, border_and_padding.Width() + translate.x(), border_and_padding.Height() + translate.y()); view_to_border_box_transform.Scale(svg->currentScale()); - local_to_border_box_transform_.PreMultiply(view_to_border_box_transform); + local_to_border_box_transform_.PostConcat(view_to_border_box_transform); return change_detector.ComputeChange(local_to_border_box_transform_); }
diff --git a/third_party/blink/renderer/core/layout/svg/layout_svg_shape.cc b/third_party/blink/renderer/core/layout/svg/layout_svg_shape.cc index 27c0e5a..2b4457f1 100644 --- a/third_party/blink/renderer/core/layout/svg/layout_svg_shape.cc +++ b/third_party/blink/renderer/core/layout/svg/layout_svg_shape.cc
@@ -211,7 +211,7 @@ // Un-scale to get back to the root-transform (cheaper than re-computing // the root transform from scratch). root_transform.Scale(StyleRef().EffectiveZoom()) - .Multiply(NonScalingStrokeTransform()); + .PreConcat(NonScalingStrokeTransform()); path = &NonScalingStrokePath(); } else { @@ -359,7 +359,7 @@ // better to apply this effect during rasterization? AffineTransform host_transform; host_transform.Scale(1 / StyleRef().EffectiveZoom()) - .Multiply(ComputeRootTransform()); + .PreConcat(ComputeRootTransform()); // Width of non-scaling stroke is independent of translation, so zero it out // here.
diff --git a/third_party/blink/renderer/core/layout/svg/svg_layout_support.cc b/third_party/blink/renderer/core/layout/svg/svg_layout_support.cc index 7e42bd5..7ee8c4c 100644 --- a/third_party/blink/renderer/core/layout/svg/svg_layout_support.cc +++ b/third_party/blink/renderer/core/layout/svg/svg_layout_support.cc
@@ -114,11 +114,11 @@ for (; !parent->IsSVGRoot(); parent = parent->Parent()) { if (filter_skipped && parent->StyleRef().HasFilter()) *filter_skipped = true; - root_border_box_transform.PreMultiply(parent->LocalToSVGParentTransform()); + root_border_box_transform.PostConcat(parent->LocalToSVGParentTransform()); } const auto& svg_root = To<LayoutSVGRoot>(*parent); - root_border_box_transform.PreMultiply(svg_root.LocalToBorderBoxTransform()); + root_border_box_transform.PostConcat(svg_root.LocalToBorderBoxTransform()); return svg_root; } @@ -380,7 +380,7 @@ SubtreeContentTransformScope::SubtreeContentTransformScope( const AffineTransform& subtree_content_transformation) : saved_content_transformation_(current_content_transformation_) { - current_content_transformation_.PreMultiply(subtree_content_transformation); + current_content_transformation_.PostConcat(subtree_content_transformation); } SubtreeContentTransformScope::~SubtreeContentTransformScope() {
diff --git a/third_party/blink/renderer/core/layout/svg/svg_text_fragment.h b/third_party/blink/renderer/core/layout/svg/svg_text_fragment.h index b764c9b..5d6e19ac 100644 --- a/third_party/blink/renderer/core/layout/svg/svg_text_fragment.h +++ b/third_party/blink/renderer/core/layout/svg/svg_text_fragment.h
@@ -163,7 +163,7 @@ AffineTransform result = transform; TransformAroundOrigin(result); - result.PreMultiply(LengthAdjustTransform()); + result.PostConcat(LengthAdjustTransform()); return result; } };
diff --git a/third_party/blink/renderer/core/loader/document_load_timing.cc b/third_party/blink/renderer/core/loader/document_load_timing.cc index f69f1cc..930a0cc 100644 --- a/third_party/blink/renderer/core/loader/document_load_timing.cc +++ b/third_party/blink/renderer/core/loader/document_load_timing.cc
@@ -41,12 +41,12 @@ : user_timing_mark_fully_loaded_(absl::nullopt), user_timing_mark_fully_visible_(absl::nullopt), user_timing_mark_interactive_(absl::nullopt), - redirect_count_(0), - has_cross_origin_redirect_(false), - can_request_from_previous_document_(false), clock_(base::DefaultClock::GetInstance()), tick_clock_(base::DefaultTickClock::GetInstance()), - document_loader_(document_loader) {} + document_loader_(document_loader), + redirect_count_(0), + has_cross_origin_redirect_(false), + can_request_from_previous_document_(false) {} void DocumentLoadTiming::Trace(Visitor* visitor) const { visitor->Trace(document_loader_);
diff --git a/third_party/blink/renderer/core/loader/document_load_timing.h b/third_party/blink/renderer/core/loader/document_load_timing.h index 614891d..ae8dd35 100644 --- a/third_party/blink/renderer/core/loader/document_load_timing.h +++ b/third_party/blink/renderer/core/loader/document_load_timing.h
@@ -152,19 +152,20 @@ base::TimeTicks unload_event_end_; base::TimeTicks redirect_start_; base::TimeTicks redirect_end_; - uint16_t redirect_count_; base::TimeTicks fetch_start_; base::TimeTicks response_end_; base::TimeTicks load_event_start_; base::TimeTicks load_event_end_; base::TimeTicks activation_start_; - bool has_cross_origin_redirect_; - bool can_request_from_previous_document_; const base::Clock* clock_; const base::TickClock* tick_clock_; Member<DocumentLoader> document_loader_; + + uint16_t redirect_count_ = 0; + bool has_cross_origin_redirect_ = false; + bool can_request_from_previous_document_ = false; }; } // namespace blink
diff --git a/third_party/blink/renderer/core/loader/frame_loader.h b/third_party/blink/renderer/core/loader/frame_loader.h index 71d73b21..a97d6c4 100644 --- a/third_party/blink/renderer/core/loader/frame_loader.h +++ b/third_party/blink/renderer/core/loader/frame_loader.h
@@ -298,13 +298,6 @@ String ApplyUserAgentOverrideAndLog(const String& user_agent) const; - Member<LocalFrame> frame_; - - Member<ProgressTracker> progress_tracker_; - - // Document loader for frame loading. - Member<DocumentLoader> document_loader_; - // This struct holds information about a navigation, which is being // initiated by the client through the browser process, until the navigation // is either committed or cancelled. @@ -313,6 +306,13 @@ }; std::unique_ptr<ClientNavigationState> client_navigation_; + Member<LocalFrame> frame_; + + Member<ProgressTracker> progress_tracker_; + + // Document loader for frame loading. + Member<DocumentLoader> document_loader_; + // The state is set to kInitialized when Init() completes, and kDetached // during teardown in Detach(). enum class State { kUninitialized, kInitialized, kDetached };
diff --git a/third_party/blink/renderer/core/loader/render_blocking_resource_manager.h b/third_party/blink/renderer/core/loader/render_blocking_resource_manager.h index 0120c53..4c07ae9 100644 --- a/third_party/blink/renderer/core/loader/render_blocking_resource_manager.h +++ b/third_party/blink/renderer/core/loader/render_blocking_resource_manager.h
@@ -73,8 +73,6 @@ void DisableFontPreloadTimeoutForTest(); bool FontPreloadTimerIsActiveForTest() const; - Member<Document> document_; - // Tracks the currently loading top-level stylesheets which block // rendering from starting. Sheets loaded using the @import directive are not // directly included in this set. See: @@ -90,6 +88,8 @@ HeapHashMap<WeakMember<const PendingLinkPreload>, PreloadType> pending_preloads_; + Member<Document> document_; + unsigned imperative_font_loading_count_ = 0; HeapTaskRunnerTimer<RenderBlockingResourceManager> font_preload_timer_;
diff --git a/third_party/blink/renderer/core/loader/resource/image_resource.h b/third_party/blink/renderer/core/loader/resource/image_resource.h index 2ce39712..a76ef3e 100644 --- a/third_party/blink/renderer/core/loader/resource/image_resource.h +++ b/third_party/blink/renderer/core/loader/resource/image_resource.h
@@ -135,11 +135,11 @@ Member<ImageResourceContent> content_; Member<MultipartImageResourceParser> multipart_parser_; + base::TimeTicks last_flush_time_; + MultipartParsingState multipart_parsing_state_ = MultipartParsingState::kWaitingForFirstPart; - base::TimeTicks last_flush_time_; - bool is_during_finish_as_error_ = false; bool is_referenced_from_ua_stylesheet_ = false;
diff --git a/third_party/blink/renderer/core/loader/resource_load_observer_for_frame.cc b/third_party/blink/renderer/core/loader/resource_load_observer_for_frame.cc index 293e8da..ffe7363a 100644 --- a/third_party/blink/renderer/core/loader/resource_load_observer_for_frame.cc +++ b/third_party/blink/renderer/core/loader/resource_load_observer_for_frame.cc
@@ -106,12 +106,12 @@ DocumentLoader& loader, Document& document, const ResourceFetcherProperties& fetcher_properties) - : document_loader_(loader), - document_(document), - fetcher_properties_(fetcher_properties), - power_mode_voter_( + : power_mode_voter_( power_scheduler::PowerModeArbiter::GetInstance()->NewVoter( - "PowerModeVoter.ResourceLoads")) {} + "PowerModeVoter.ResourceLoads")), + document_loader_(loader), + document_(document), + fetcher_properties_(fetcher_properties) {} ResourceLoadObserverForFrame::~ResourceLoadObserverForFrame() = default; void ResourceLoadObserverForFrame::DidStartRequest(
diff --git a/third_party/blink/renderer/core/loader/resource_load_observer_for_frame.h b/third_party/blink/renderer/core/loader/resource_load_observer_for_frame.h index 7f1fd01..4bdee0b 100644 --- a/third_party/blink/renderer/core/loader/resource_load_observer_for_frame.h +++ b/third_party/blink/renderer/core/loader/resource_load_observer_for_frame.h
@@ -70,13 +70,14 @@ void UpdatePowerModeVote(); + std::unique_ptr<power_scheduler::PowerModeVoter> power_mode_voter_; + // There are some overlap between |document_loader_|, |document_| and // |fetcher_properties_|. Use |fetcher_properties_| whenever possible. const Member<DocumentLoader> document_loader_; const Member<Document> document_; const Member<const ResourceFetcherProperties> fetcher_properties_; - std::unique_ptr<power_scheduler::PowerModeVoter> power_mode_voter_; bool power_mode_vote_is_loading_ = false; };
diff --git a/third_party/blink/renderer/core/loader/threadable_loader.cc b/third_party/blink/renderer/core/loader/threadable_loader.cc index 6e8bb0ca..b0377b28 100644 --- a/third_party/blink/renderer/core/loader/threadable_loader.cc +++ b/third_party/blink/renderer/core/loader/threadable_loader.cc
@@ -97,10 +97,10 @@ ThreadableLoaderClient* client, const ResourceLoaderOptions& resource_loader_options, ResourceFetcher* resource_fetcher) - : client_(client), + : resource_loader_options_(resource_loader_options), + client_(client), execution_context_(execution_context), resource_fetcher_(resource_fetcher), - resource_loader_options_(resource_loader_options), request_mode_(network::mojom::RequestMode::kSameOrigin), timeout_timer_(execution_context_->GetTaskRunner(TaskType::kNetworking), this, @@ -166,7 +166,7 @@ } } -ThreadableLoader::~ThreadableLoader() {} +ThreadableLoader::~ThreadableLoader() = default; void ThreadableLoader::SetTimeout(const base::TimeDelta& timeout) { timeout_ = timeout;
diff --git a/third_party/blink/renderer/core/loader/threadable_loader.h b/third_party/blink/renderer/core/loader/threadable_loader.h index 5cb89abc..8c77ed2 100644 --- a/third_party/blink/renderer/core/loader/threadable_loader.h +++ b/third_party/blink/renderer/core/loader/threadable_loader.h
@@ -151,12 +151,12 @@ void DataDownloaded(Resource*, uint64_t) override; void DidDownloadToBlob(Resource*, scoped_refptr<BlobDataHandle>) override; + const ResourceLoaderOptions resource_loader_options_; + Member<ThreadableLoaderClient> client_; Member<ExecutionContext> execution_context_; Member<ResourceFetcher> resource_fetcher_; - const ResourceLoaderOptions resource_loader_options_; - // Saved so that we can use the original mode in ResponseReceived() where // |resource| might be a reused one (e.g. preloaded resource) which can have a // different mode.
diff --git a/third_party/blink/renderer/core/paint/clip_path_clipper.cc b/third_party/blink/renderer/core/paint/clip_path_clipper.cc index a01470ff..37b8108 100644 --- a/third_party/blink/renderer/core/paint/clip_path_clipper.cc +++ b/third_party/blink/renderer/core/paint/clip_path_clipper.cc
@@ -200,7 +200,7 @@ } } - mask_to_content.Multiply( + mask_to_content.PreConcat( resource_clipper.CalculateClipTransform(reference_box)); return mask_to_content; }
diff --git a/third_party/blink/renderer/core/paint/fragment_data.h b/third_party/blink/renderer/core/paint/fragment_data.h index f6a4dd5..8ee9aea25 100644 --- a/third_party/blink/renderer/core/paint/fragment_data.h +++ b/third_party/blink/renderer/core/paint/fragment_data.h
@@ -221,13 +221,13 @@ // Fragment specific data. PhysicalOffset legacy_pagination_offset; - wtf_size_t fragment_id = 0; std::unique_ptr<ObjectPaintProperties> paint_properties; std::unique_ptr<RefCountedPropertyTreeStateOrAlias> local_border_box_properties; CullRect cull_rect_; CullRect contents_cull_rect_; Member<FragmentData> next_fragment_; + wtf_size_t fragment_id = 0; #if DCHECK_IS_ON() // Legacy block fragmentation sets the flow thread offset for each
diff --git a/third_party/blink/renderer/core/paint/hit_testing_transform_state.cc b/third_party/blink/renderer/core/paint/hit_testing_transform_state.cc index 3f1cb03..03052b1 100644 --- a/third_party/blink/renderer/core/paint/hit_testing_transform_state.cc +++ b/third_party/blink/renderer/core/paint/hit_testing_transform_state.cc
@@ -39,7 +39,7 @@ if (transform.IsIdentityOr2DTranslation()) { Translate(transform.Translation2D()); } else { - accumulated_transform_.Multiply(transform.MatrixWithOriginApplied()); + accumulated_transform_.PreConcat(transform.MatrixWithOriginApplied()); } } @@ -48,7 +48,7 @@ if (transform.IsIdentityOr2DTranslation()) { Translate(transform.Translation2D()); } else { - accumulated_transform_.Multiply(transform.Matrix()); + accumulated_transform_.PreConcat(transform.Matrix()); } }
diff --git a/third_party/blink/renderer/core/paint/ng/ng_box_fragment_painter.cc b/third_party/blink/renderer/core/paint/ng/ng_box_fragment_painter.cc index 587636f..5b7cb089 100644 --- a/third_party/blink/renderer/core/paint/ng/ng_box_fragment_painter.cc +++ b/third_party/blink/renderer/core/paint/ng/ng_box_fragment_painter.cc
@@ -1726,15 +1726,15 @@ bool NGBoxFragmentPainter::ShouldPaint( const ScopedPaintState& paint_state) const { - // TODO(layout-dev): Add support for scrolling, see BlockPainter::ShouldPaint. - const NGPhysicalBoxFragment& fragment = PhysicalFragment(); - if (!fragment.IsInlineBox()) { - return paint_state.LocalRectIntersectsCullRect( - To<LayoutBox>(fragment.GetLayoutObject()) - ->PhysicalVisualOverflowRect()); - } - NOTREACHED(); - return false; + DCHECK(!box_fragment_.IsInlineBox()); + // When printing, the root fragment's background (i.e. the document's + // background) should extend onto every page, regardless of the overflow + // rectangle. + if (box_fragment_.IsPaginatedRoot()) + return true; + const auto& box = *To<LayoutBox>(box_fragment_.GetLayoutObject()); + return paint_state.LocalRectIntersectsCullRect( + box.PhysicalVisualOverflowRect()); } void NGBoxFragmentPainter::PaintTextClipMask(const PaintInfo& paint_info,
diff --git a/third_party/blink/renderer/core/paint/ng/ng_text_fragment_painter.cc b/third_party/blink/renderer/core/paint/ng/ng_text_fragment_painter.cc index da6ce02..403d518d 100644 --- a/third_party/blink/renderer/core/paint/ng/ng_text_fragment_painter.cc +++ b/third_party/blink/renderer/core/paint/ng/ng_text_fragment_painter.cc
@@ -364,7 +364,7 @@ const auto fragment_transform = text_item.BuildSvgTransformForPaint(); context.ConcatCTM(fragment_transform); DCHECK(fragment_transform.IsInvertible()); - svg_state.EnsureShaderTransform().PreMultiply( + svg_state.EnsureShaderTransform().PostConcat( fragment_transform.Inverse()); } } @@ -379,7 +379,7 @@ context.ConcatCTM(*rotation); if (NGTextPainter::SvgTextPaintState* state = text_painter.GetSvgState()) { DCHECK(rotation->IsInvertible()); - state->EnsureShaderTransform().PreMultiply(rotation->Inverse()); + state->EnsureShaderTransform().PostConcat(rotation->Inverse()); } }
diff --git a/third_party/blink/renderer/core/paint/paint_layer_stacking_node.h b/third_party/blink/renderer/core/paint/paint_layer_stacking_node.h index 4fd1a93..3cdf8c27 100644 --- a/third_party/blink/renderer/core/paint/paint_layer_stacking_node.h +++ b/third_party/blink/renderer/core/paint/paint_layer_stacking_node.h
@@ -137,14 +137,17 @@ struct HighestLayers; void CollectLayers(PaintLayer&, HighestLayers*); - Member<PaintLayer> layer_; - // Holds a sorted list of all the descendant nodes within that have z-indices // of 0 (or is treated as 0 for positioned objects) or greater. PaintLayers pos_z_order_list_; // Holds descendants within our stacking context with negative z-indices. PaintLayers neg_z_order_list_; + // All PaintLayers (just in current stacking context, child stacking contexts + // will have their own list) that have overlay overflow controls that should + // paint reordered. For the above example, this has one entry {target}. + PaintLayers overlay_overflow_controls_reordered_list_; + // Overlay overflow controls(scrollbar or resizer) need to be painted above // all child contents, even if the contents are stacked in a stacking context // which is an ancestor of the scrolling or resizing layer, for example: @@ -189,10 +192,7 @@ HeapHashMap<Member<const PaintLayer>, Member<PaintLayers>> layer_to_overlay_overflow_controls_painting_after_; - // All PaintLayers (just in current stacking context, child stacking contexts - // will have their own list) that have overlay overflow controls that should - // paint reordered. For the above example, this has one entry {target}. - PaintLayers overlay_overflow_controls_reordered_list_; + Member<PaintLayer> layer_; // Indicates whether the z-order lists above are dirty. bool z_order_lists_dirty_ = true;
diff --git a/third_party/blink/renderer/core/paint/svg_inline_text_box_painter.cc b/third_party/blink/renderer/core/paint/svg_inline_text_box_painter.cc index bffce4b..9ed46d85 100644 --- a/third_party/blink/renderer/core/paint/svg_inline_text_box_painter.cc +++ b/third_party/blink/renderer/core/paint/svg_inline_text_box_painter.cc
@@ -453,7 +453,7 @@ paint_server_transform->Scale(scaling_factor); if (shader_transform) - paint_server_transform->Multiply(*shader_transform); + paint_server_transform->PreConcat(*shader_transform); } if (!SVGObjectPainter(ParentInlineLayoutObject())
diff --git a/third_party/blink/renderer/core/paint/svg_root_painter.cc b/third_party/blink/renderer/core/paint/svg_root_painter.cc index 71d1cefa..83cc039 100644 --- a/third_party/blink/renderer/core/paint/svg_root_painter.cc +++ b/third_party/blink/renderer/core/paint/svg_root_painter.cc
@@ -32,7 +32,7 @@ snapped_size.width() / size.Width().ToFloat(), snapped_size.height() / size.Height().ToFloat()); } - paint_offset_to_border_box.Multiply( + paint_offset_to_border_box.PreConcat( layout_svg_root_.LocalToBorderBoxTransform()); return paint_offset_to_border_box; }
diff --git a/third_party/blink/renderer/core/paint/text_paint_timing_detector.h b/third_party/blink/renderer/core/paint/text_paint_timing_detector.h index 1e239e30..79c0f89 100644 --- a/third_party/blink/renderer/core/paint/text_paint_timing_detector.h +++ b/third_party/blink/renderer/core/paint/text_paint_timing_detector.h
@@ -33,8 +33,8 @@ const gfx::RectF& root_visual_rect, uint32_t frame_index) : node_(&node), - first_size(new_first_size), frame_index_(frame_index), + first_size(new_first_size), element_timing_rect_(element_timing_rect) { if (PaintTimingVisualizer::IsTracingEnabled()) { lcp_rect_info_ = std::make_unique<LCPRectInfo>( @@ -47,8 +47,8 @@ void Trace(Visitor*) const; WeakMember<Node> node_; - uint64_t first_size = 0; uint32_t frame_index_ = 0; + uint64_t first_size = 0; gfx::RectF element_timing_rect_; std::unique_ptr<LCPRectInfo> lcp_rect_info_; // The time of the first paint after fully loaded. @@ -165,12 +165,6 @@ added_entry_in_latest_frame_ = true; } - Member<PaintTimingCallbackManager> callback_manager_; - Member<const LocalFrameView> frame_view_; - // Set lazily because we may not have the correct Window when first - // initializing this class. - Member<TextElementTiming> text_element_timing_; - // LayoutObjects for which text has been aggregated. HeapHashSet<Member<const LayoutObject>> recorded_set_; @@ -179,6 +173,12 @@ HeapHashMap<Member<const LayoutObject>, Member<TextRecord>> texts_queued_for_paint_time_; + Member<PaintTimingCallbackManager> callback_manager_; + Member<const LocalFrameView> frame_view_; + // Set lazily because we may not have the correct Window when first + // initializing this class. + Member<TextElementTiming> text_element_timing_; + Member<LargestTextPaintManager> ltp_manager_; bool recording_largest_text_paint_ = true;
diff --git a/third_party/blink/renderer/core/script/classic_pending_script.h b/third_party/blink/renderer/core/script/classic_pending_script.h index 7f61abe4..b16c5f20 100644 --- a/third_party/blink/renderer/core/script/classic_pending_script.h +++ b/third_party/blink/renderer/core/script/classic_pending_script.h
@@ -83,7 +83,7 @@ private: // See AdvanceReadyState implementation for valid state transitions. - enum ReadyState { + enum ReadyState : uint8_t { // These states are considered "not ready". kWaitingForResource, kWaitingForCacheConsumer, @@ -124,14 +124,14 @@ // This is a null string for external scripts and is not used. const String source_text_for_inline_script_; + Member<ClassicScript> classic_script_; + const ScriptSourceLocationType source_location_type_; const bool is_external_; ReadyState ready_state_; // The request is intervened by document.write() intervention. bool intervened_ = false; - - Member<ClassicScript> classic_script_; }; } // namespace blink
diff --git a/third_party/blink/renderer/core/script/script_loader.h b/third_party/blink/renderer/core/script/script_loader.h index 98ecb67..9f4b640e 100644 --- a/third_party/blink/renderer/core/script/script_loader.h +++ b/third_party/blink/renderer/core/script/script_loader.h
@@ -56,7 +56,7 @@ // Script type at the time of #prepare-the-script-element. Import maps are // included here but not in `mojom::blink::ScriptType` because import maps are // handled differently from ordinal scripts after PrepareScript(). - enum class ScriptTypeAtPrepare { + enum class ScriptTypeAtPrepare : uint8_t { kClassic, kModule, kImportMap, @@ -130,13 +130,6 @@ Member<ScriptElementBase> element_; - // https://html.spec.whatwg.org/C/#script-processing-model - // "A script element has several associated pieces of state.": - - // <spec href="https://html.spec.whatwg.org/C/#already-started">... initially - // false.</spec> - bool already_started_ = false; - // <spec href="https://html.spec.whatwg.org/C/#parser-document">... initially // null. It is set by the HTML parser and the XML parser on script elements // they insert, ...</spec> @@ -146,6 +139,31 @@ // need to keep the parser document alive. WeakMember<Document> parser_document_; + // A PendingScript is first created in PrepareScript() and stored in + // |prepared_pending_script_|. + // Later, TakePendingScript() is called, and its caller holds a reference + // to the PendingScript instead and |prepared_pending_script_| is cleared. + Member<PendingScript> prepared_pending_script_; + + // This is used only to keep the ScriptResource of a classic script alive + // and thus to keep it on MemoryCache, even after script execution, as long + // as ScriptLoader is alive. crbug.com/778799 + Member<Resource> resource_keep_alive_; + + // This is created only for <script type=webbundle>, representing a webbundle + // mapping rule and its loader. + Member<ScriptWebBundle> script_web_bundle_; + + // Speculation rule set registered by this script, if applicable. + Member<SpeculationRuleSet> speculation_rule_set_; + + // https://html.spec.whatwg.org/C/#script-processing-model + // "A script element has several associated pieces of state.": + + // <spec href="https://html.spec.whatwg.org/C/#already-started">... initially + // false.</spec> + bool already_started_ = false; + // <spec href="https://html.spec.whatwg.org/C/#parser-inserted">... script // elements with non-null parser documents are known as // parser-inserted.</spec> @@ -174,24 +192,6 @@ // ... initially false. It is determined when the script is prepared, based on // the src attribute of the element at that time.</spec> bool is_external_script_ = false; - - // A PendingScript is first created in PrepareScript() and stored in - // |prepared_pending_script_|. - // Later, TakePendingScript() is called, and its caller holds a reference - // to the PendingScript instead and |prepared_pending_script_| is cleared. - Member<PendingScript> prepared_pending_script_; - - // This is used only to keep the ScriptResource of a classic script alive - // and thus to keep it on MemoryCache, even after script execution, as long - // as ScriptLoader is alive. crbug.com/778799 - Member<Resource> resource_keep_alive_; - - // This is created only for <script type=webbundle>, representing a webbundle - // mapping rule and its loader. - Member<ScriptWebBundle> script_web_bundle_; - - // Speculation rule set registered by this script, if applicable. - Member<SpeculationRuleSet> speculation_rule_set_; }; } // namespace blink
diff --git a/third_party/blink/renderer/core/script/script_runner.h b/third_party/blink/renderer/core/script/script_runner.h index d35ab71..ef80696 100644 --- a/third_party/blink/renderer/core/script/script_runner.h +++ b/third_party/blink/renderer/core/script/script_runner.h
@@ -119,14 +119,15 @@ void RemoveDelayReason(DelayReason); void RemoveDelayReasonFromScript(PendingScript*, DelayReason); - Member<Document> document_; - // https://html.spec.whatwg.org/C/#list-of-scripts-that-will-execute-in-order-as-soon-as-possible HeapDeque<Member<PendingScript>> pending_in_order_scripts_; // https://html.spec.whatwg.org/C/#set-of-scripts-that-will-execute-as-soon-as-possible // The value represents the `DelayReason`s that the script is waiting for // before its evaluation. HeapHashMap<Member<PendingScript>, DelayReasons> pending_async_scripts_; + + Member<Document> document_; + // The number of async scripts that aren't yet evaluated. This is different // from pending_async_scripts_.size() == the number of async scripts that // aren't yet scheduled to evaluate.
diff --git a/third_party/blink/renderer/core/style/computed_style.cc b/third_party/blink/renderer/core/style/computed_style.cc index 51bc37ed..7ded70e 100644 --- a/third_party/blink/renderer/core/style/computed_style.cc +++ b/third_party/blink/renderer/core/style/computed_style.cc
@@ -1530,9 +1530,10 @@ path_position.point.y() - anchor_point.y() + origin_shift_y); transform.Rotate(path_position.tangent_in_degrees + rotate.angle); - if (!position.X().IsAuto() || !anchor.X().IsAuto()) + if (!position.X().IsAuto() || !anchor.X().IsAuto()) { // Shift the origin back to transform-origin. transform.Translate(-origin_shift_x, -origin_shift_y); + } } bool ComputedStyle::TextShadowDataEquivalent(const ComputedStyle& other) const {
diff --git a/third_party/blink/renderer/core/svg/svg_element.cc b/third_party/blink/renderer/core/svg/svg_element.cc index 112d3de6..21c77a3 100644 --- a/third_party/blink/renderer/core/svg/svg_element.cc +++ b/third_party/blink/renderer/core/svg/svg_element.cc
@@ -322,7 +322,7 @@ // Apply any "motion transform" contribution if requested (and existing.) if (apply_motion_transform == kIncludeMotionTransform && HasSVGRareData()) - matrix.PreMultiply(*SvgRareData()->AnimateMotionTransform()); + matrix.PostConcat(*SvgRareData()->AnimateMotionTransform()); return matrix; }
diff --git a/third_party/blink/renderer/core/svg/svg_geometry_element.cc b/third_party/blink/renderer/core/svg/svg_geometry_element.cc index 08c731e0..efad06b 100644 --- a/third_party/blink/renderer/core/svg/svg_geometry_element.cc +++ b/third_party/blink/renderer/core/svg/svg_geometry_element.cc
@@ -122,7 +122,7 @@ // Un-scale to get back to the root-transform (cheaper than re-computing // the root transform from scratch). root_transform.Scale(layout_shape.StyleRef().EffectiveZoom()) - .Multiply(transform); + .PreConcat(transform); } else { root_transform = layout_shape.ComputeRootTransform(); }
diff --git a/third_party/blink/renderer/core/svg/svg_graphics_element.cc b/third_party/blink/renderer/core/svg/svg_graphics_element.cc index 53ce0dc1..f574df2 100644 --- a/third_party/blink/renderer/core/svg/svg_graphics_element.cc +++ b/third_party/blink/renderer/core/svg/svg_graphics_element.cc
@@ -73,7 +73,7 @@ if (!svg_element) break; - ctm = svg_element->LocalCoordinateSpaceTransform(mode).Multiply(ctm); + ctm = svg_element->LocalCoordinateSpaceTransform(mode).PreConcat(ctm); switch (mode) { case kNearestViewportScope:
diff --git a/third_party/blink/renderer/core/svg/svg_svg_element.cc b/third_party/blink/renderer/core/svg/svg_svg_element.cc index 2ed563cb4..c8860d6 100644 --- a/third_party/blink/renderer/core/svg/svg_svg_element.cc +++ b/third_party/blink/renderer/core/svg/svg_svg_element.cc
@@ -478,12 +478,12 @@ // Apply transforms from our ancestor coordinate space, including any // non-SVG ancestor transforms. - matrix.Multiply(layout_object->LocalToAbsoluteTransform()); + matrix.PreConcat(layout_object->LocalToAbsoluteTransform()); // At the SVG/HTML boundary (aka LayoutSVGRoot), we need to apply the // localToBorderBoxTransform to map an element from SVG viewport // coordinates to CSS box coordinates. - matrix.Multiply(TransformationMatrix( + matrix.PreConcat(TransformationMatrix( To<LayoutSVGRoot>(layout_object)->LocalToBorderBoxTransform())); // Drop any potential non-affine parts, because we're not able to convey // that information further anyway until getScreenCTM returns a DOMMatrix @@ -492,7 +492,7 @@ } } if (!HasEmptyViewBox()) - transform.Multiply(ViewBoxToViewTransform(CurrentViewportSize())); + transform.PreConcat(ViewBoxToViewTransform(CurrentViewportSize())); return transform; }
diff --git a/third_party/blink/renderer/core/testing/null_execution_context.cc b/third_party/blink/renderer/core/testing/null_execution_context.cc index 43e8c82..0ddd91de 100644 --- a/third_party/blink/renderer/core/testing/null_execution_context.cc +++ b/third_party/blink/renderer/core/testing/null_execution_context.cc
@@ -19,11 +19,15 @@ namespace blink { NullExecutionContext::NullExecutionContext() + : NullExecutionContext(scheduler::CreateDummyFrameScheduler()) {} + +NullExecutionContext::NullExecutionContext( + std::unique_ptr<FrameScheduler> scheduler) : ExecutionContext( v8::Isolate::GetCurrent(), MakeGarbageCollected<Agent>(v8::Isolate::GetCurrent(), base::UnguessableToken::Create())), - scheduler_(scheduler::CreateDummyFrameScheduler()) {} + scheduler_(std::move(scheduler)) {} NullExecutionContext::~NullExecutionContext() {} @@ -41,8 +45,8 @@ } scoped_refptr<base::SingleThreadTaskRunner> NullExecutionContext::GetTaskRunner( - TaskType) { - return Thread::Current()->GetDeprecatedTaskRunner(); + TaskType task_type) { + return scheduler_->GetTaskRunner(task_type); } const BrowserInterfaceBrokerProxy&
diff --git a/third_party/blink/renderer/core/testing/null_execution_context.h b/third_party/blink/renderer/core/testing/null_execution_context.h index 48f667cd..d7a3fcc 100644 --- a/third_party/blink/renderer/core/testing/null_execution_context.h +++ b/third_party/blink/renderer/core/testing/null_execution_context.h
@@ -18,10 +18,13 @@ namespace blink { +class FrameScheduler; + class NullExecutionContext : public GarbageCollected<NullExecutionContext>, public ExecutionContext { public: NullExecutionContext(); + explicit NullExecutionContext(std::unique_ptr<FrameScheduler> scheduler); ~NullExecutionContext() override; void SetURL(const KURL& url) { url_ = url; } @@ -71,7 +74,7 @@ // A dummy scheduler to ensure that the callers of // ExecutionContext::GetScheduler don't have to check for whether it's null or // not. - std::unique_ptr<FrameOrWorkerScheduler> scheduler_; + std::unique_ptr<FrameScheduler> scheduler_; // A fake token identifying this execution context. const LocalFrameToken token_;
diff --git a/third_party/blink/renderer/modules/accessibility/ax_object.cc b/third_party/blink/renderer/modules/accessibility/ax_object.cc index 7bb07d2..6495b27 100644 --- a/third_party/blink/renderer/modules/accessibility/ax_object.cc +++ b/third_party/blink/renderer/modules/accessibility/ax_object.cc
@@ -1311,9 +1311,6 @@ SerializeOtherScreenReaderAttributes(node_data); - if (accessibility_mode.has_mode(ui::AXMode::kPDF)) - return; - // Return early. The following attributes are unnecessary for ignored nodes. // Exception: focusable ignored nodes are fully serialized, so that reasonable // verbalizations can be made if they actually receive focus.
diff --git a/third_party/blink/renderer/modules/accessibility/inspector_accessibility_agent.h b/third_party/blink/renderer/modules/accessibility/inspector_accessibility_agent.h index 7b254f8d..634ad3b9 100644 --- a/third_party/blink/renderer/modules/accessibility/inspector_accessibility_agent.h +++ b/third_party/blink/renderer/modules/accessibility/inspector_accessibility_agent.h
@@ -123,8 +123,8 @@ TimerFiredFunction function) : TimerBase(document->GetTaskRunner(TaskType::kInternalInspector)), agent_(agent), - function_(function), - document_(document) {} + document_(document), + function_(function) {} void Trace(Visitor* visitor) const { visitor->Trace(document_); @@ -154,8 +154,8 @@ } WeakMember<InspectorAccessibilityAgent> agent_; - TimerFiredFunction function_; WeakMember<Document> document_; + TimerFiredFunction function_; }; void CompleteQuery(AXQuery&);
diff --git a/third_party/blink/renderer/modules/xr/xr_frame.cc b/third_party/blink/renderer/modules/xr/xr_frame.cc index b50ce7fd..99f79d1 100644 --- a/third_party/blink/renderer/modules/xr/xr_frame.cc +++ b/third_party/blink/renderer/modules/xr/xr_frame.cc
@@ -98,7 +98,7 @@ TransformationMatrix ref_space_from_mojo = reference_space->OffsetFromNativeMatrix(); - ref_space_from_mojo.Multiply(*native_from_mojo); + ref_space_from_mojo.PreConcat(*native_from_mojo); // Can only update an XRViewerPose's views with an invertible matrix. if (!ref_space_from_mojo.IsInvertible()) {
diff --git a/third_party/blink/renderer/modules/xr/xr_reference_space.cc b/third_party/blink/renderer/modules/xr/xr_reference_space.cc index efa5b6c..b608727 100644 --- a/third_party/blink/renderer/modules/xr/xr_reference_space.cc +++ b/third_party/blink/renderer/modules/xr/xr_reference_space.cc
@@ -155,7 +155,7 @@ auto native_from_viewer = NativeFromMojo(); if (!native_from_viewer) return absl::nullopt; - native_from_viewer->Multiply(*mojo_from_viewer); + native_from_viewer->PreConcat(*mojo_from_viewer); return native_from_viewer; }
diff --git a/third_party/blink/renderer/modules/xr/xr_space.cc b/third_party/blink/renderer/modules/xr/xr_space.cc index cbfde15..47b9aae 100644 --- a/third_party/blink/renderer/modules/xr/xr_space.cc +++ b/third_party/blink/renderer/modules/xr/xr_space.cc
@@ -25,7 +25,7 @@ if (!native_from_mojo) return absl::nullopt; - native_from_mojo->Multiply(*mojo_from_viewer); + native_from_mojo->PreConcat(*mojo_from_viewer); // This is now native_from_viewer return native_from_mojo; @@ -49,7 +49,7 @@ // Modifies maybe_mojo_from_native - it becomes mojo_from_offset_matrix. // Saves a heap allocation since there is no need to create a new unique_ptr. - maybe_mojo_from_native->Multiply(NativeFromOffsetMatrix()); + maybe_mojo_from_native->PreConcat(NativeFromOffsetMatrix()); return maybe_mojo_from_native; } @@ -79,7 +79,7 @@ } // Add any origin offset now. - mojo_from_offset->Multiply(NativeFromOffsetMatrix()); + mojo_from_offset->PreConcat(NativeFromOffsetMatrix()); absl::optional<TransformationMatrix> other_from_mojo = other_space->NativeFromMojo();
diff --git a/third_party/blink/renderer/platform/graphics/image.h b/third_party/blink/renderer/platform/graphics/image.h index 1253350..660a4ff 100644 --- a/third_party/blink/renderer/platform/graphics/image.h +++ b/third_party/blink/renderer/platform/graphics/image.h
@@ -182,7 +182,7 @@ virtual bool GetHotSpot(gfx::Point&) const { return false; } - enum SizeAvailability { + enum SizeAvailability : uint8_t { kSizeUnavailable, kSizeAvailableAndLoadingAsynchronously, kSizeAvailable,
diff --git a/third_party/blink/renderer/platform/graphics/paint/geometry_mapper_transform_cache.cc b/third_party/blink/renderer/platform/graphics/paint/geometry_mapper_transform_cache.cc index af9d3f3e..d82ad98 100644 --- a/third_party/blink/renderer/platform/graphics/paint/geometry_mapper_transform_cache.cc +++ b/third_party/blink/renderer/platform/graphics/paint/geometry_mapper_transform_cache.cc
@@ -103,7 +103,7 @@ plane_root_transform_->plane_root = parent.plane_root(); plane_root_transform_->to_plane_root.MakeIdentity(); parent.ApplyToPlaneRoot(plane_root_transform_->to_plane_root); - plane_root_transform_->to_plane_root.Multiply(local); + plane_root_transform_->to_plane_root.PreConcat(local); plane_root_transform_->from_plane_root = local.Inverse(); parent.ApplyFromPlaneRoot(plane_root_transform_->from_plane_root); plane_root_transform_->has_animation = @@ -154,7 +154,7 @@ const auto& translation = node.Translation2D(); screen_transform_->to_screen.Translate(translation.x(), translation.y()); } else { - screen_transform_->to_screen.Multiply(node.MatrixWithOriginApplied()); + screen_transform_->to_screen.PreConcat(node.MatrixWithOriginApplied()); } auto to_screen_flattened = screen_transform_->to_screen;
diff --git a/third_party/blink/renderer/platform/graphics/paint/geometry_mapper_transform_cache.h b/third_party/blink/renderer/platform/graphics/paint/geometry_mapper_transform_cache.h index 63cd1a5..28a716f 100644 --- a/third_party/blink/renderer/platform/graphics/paint/geometry_mapper_transform_cache.h +++ b/third_party/blink/renderer/platform/graphics/paint/geometry_mapper_transform_cache.h
@@ -65,14 +65,14 @@ void ApplyToScreen(TransformationMatrix& m) const { DCHECK(screen_transform_updated_); if (UNLIKELY(screen_transform_)) - m.Multiply(to_screen()); + m.PreConcat(to_screen()); else ApplyToPlaneRoot(m); } void ApplyProjectionFromScreen(TransformationMatrix& m) const { DCHECK(screen_transform_updated_); if (UNLIKELY(screen_transform_)) - m.Multiply(projection_from_screen()); + m.PreConcat(projection_from_screen()); else ApplyFromPlaneRoot(m); } @@ -92,14 +92,14 @@ } void ApplyToPlaneRoot(TransformationMatrix& m) const { if (UNLIKELY(plane_root_transform_)) { - m.Multiply(to_plane_root()); + m.PreConcat(to_plane_root()); } else { m.Translate(to_2d_translation_root_.x(), to_2d_translation_root_.y()); } } void ApplyFromPlaneRoot(TransformationMatrix& m) const { if (UNLIKELY(plane_root_transform_)) { - m.Multiply(from_plane_root()); + m.PreConcat(from_plane_root()); } else { m.Translate(-to_2d_translation_root_.x(), -to_2d_translation_root_.y()); }
diff --git a/third_party/blink/renderer/platform/image-decoders/avif/avif_image_decoder_test.cc b/third_party/blink/renderer/platform/image-decoders/avif/avif_image_decoder_test.cc index dffadc4..596a588 100644 --- a/third_party/blink/renderer/platform/image-decoders/avif/avif_image_decoder_test.cc +++ b/third_party/blink/renderer/platform/image-decoders/avif/avif_image_decoder_test.cc
@@ -317,7 +317,7 @@ ImageDecoder::kAlphaNotPremultiplied, ColorBehavior::Tag(), ImageOrientationEnum::kOriginTopLeft, - 1, + 0, { {gfx::Point(0, 0), SkColorSetARGB(255, 255, 0, 0)}, {gfx::Point(1, 1), SkColorSetARGB(255, 255, 0, 0)},
diff --git a/third_party/blink/renderer/platform/loader/fetch/response_body_loader.cc b/third_party/blink/renderer/platform/loader/fetch/response_body_loader.cc index 19d89e21..4397d63 100644 --- a/third_party/blink/renderer/platform/loader/fetch/response_body_loader.cc +++ b/third_party/blink/renderer/platform/loader/fetch/response_body_loader.cc
@@ -350,10 +350,10 @@ ResponseBodyLoaderClient& client, scoped_refptr<base::SingleThreadTaskRunner> task_runner, BackForwardCacheLoaderHelper* back_forward_cache_loader_helper) - : bytes_consumer_(bytes_consumer), + : task_runner_(std::move(task_runner)), + bytes_consumer_(bytes_consumer), client_(client), - back_forward_cache_loader_helper_(back_forward_cache_loader_helper), - task_runner_(std::move(task_runner)) { + back_forward_cache_loader_helper_(back_forward_cache_loader_helper) { bytes_consumer_->SetClient(this); body_buffer_ = MakeGarbageCollected<Buffer>(this); }
diff --git a/third_party/blink/renderer/platform/loader/fetch/response_body_loader.h b/third_party/blink/renderer/platform/loader/fetch/response_body_loader.h index 2bb3a6a..78c06fa 100644 --- a/third_party/blink/renderer/platform/loader/fetch/response_body_loader.h +++ b/third_party/blink/renderer/platform/loader/fetch/response_body_loader.h
@@ -141,12 +141,12 @@ void OnStateChange() override; String DebugName() const override { return "ResponseBodyLoader"; } + const scoped_refptr<base::SingleThreadTaskRunner> task_runner_; Member<Buffer> body_buffer_; Member<BytesConsumer> bytes_consumer_; Member<DelegatingBytesConsumer> delegating_bytes_consumer_; const Member<ResponseBodyLoaderClient> client_; WeakMember<BackForwardCacheLoaderHelper> back_forward_cache_loader_helper_; - const scoped_refptr<base::SingleThreadTaskRunner> task_runner_; LoaderFreezeMode suspended_state_ = LoaderFreezeMode::kNone; bool started_ = false; bool aborted_ = false;
diff --git a/third_party/blink/renderer/platform/transforms/affine_transform.cc b/third_party/blink/renderer/platform/transforms/affine_transform.cc index cdf1d91..972d5c3 100644 --- a/third_party/blink/renderer/platform/transforms/affine_transform.cc +++ b/third_party/blink/renderer/platform/transforms/affine_transform.cc
@@ -108,12 +108,12 @@ } // anonymous namespace -AffineTransform& AffineTransform::Multiply(const AffineTransform& other) { +AffineTransform& AffineTransform::PreConcat(const AffineTransform& other) { *this = DoMultiply(*this, other); return *this; } -AffineTransform& AffineTransform::PreMultiply(const AffineTransform& other) { +AffineTransform& AffineTransform::PostConcat(const AffineTransform& other) { *this = DoMultiply(other, *this); return *this; } @@ -128,7 +128,7 @@ double sin_angle = sin(a); AffineTransform rot(cos_angle, sin_angle, -sin_angle, cos_angle, 0, 0); - Multiply(rot); + PreConcat(rot); return *this; }
diff --git a/third_party/blink/renderer/platform/transforms/affine_transform.h b/third_party/blink/renderer/platform/transforms/affine_transform.h index 22e68837..2f1f9881c 100644 --- a/third_party/blink/renderer/platform/transforms/affine_transform.h +++ b/third_party/blink/renderer/platform/transforms/affine_transform.h
@@ -98,10 +98,12 @@ void MakeIdentity() { *this = AffineTransform(); } // this' = this * other - AffineTransform& Multiply(const AffineTransform& other); + AffineTransform& PreConcat(const AffineTransform& other); // this' = other * this - AffineTransform& PreMultiply(const AffineTransform& other); + AffineTransform& PostConcat(const AffineTransform& other); + // The semantics of the following methods are the same as PreConcat(), i.e. + // this' = this * operation. AffineTransform& Scale(double); AffineTransform& Scale(double sx, double sy); AffineTransform& ScaleNonUniform(double sx, double sy); @@ -139,7 +141,7 @@ } // *this = *this * t (i.e., a multRight) - AffineTransform& operator*=(const AffineTransform& t) { return Multiply(t); } + AffineTransform& operator*=(const AffineTransform& t) { return PreConcat(t); } // result = *this * t (i.e., a multRight) AffineTransform operator*(const AffineTransform& t) const {
diff --git a/third_party/blink/renderer/platform/transforms/affine_transform_test.cc b/third_party/blink/renderer/platform/transforms/affine_transform_test.cc index f3301e3..adf640f 100644 --- a/third_party/blink/renderer/platform/transforms/affine_transform_test.cc +++ b/third_party/blink/renderer/platform/transforms/affine_transform_test.cc
@@ -73,8 +73,8 @@ EXPECT_EQ(AffineTransform(70, 100, 150, 220, 235, 346), c); EXPECT_EQ(AffineTransform(70, 100, 150, 220, 280, 400), d); AffineTransform a1 = a; - a.Multiply(b); - b.Multiply(a1); + a.PreConcat(b); + b.PreConcat(a1); EXPECT_EQ(c, a); EXPECT_EQ(d, b); } @@ -83,8 +83,8 @@ AffineTransform a(1, 2, 3, 4, 5, 6); AffineTransform b(10, 20, 30, 40, 50, 60); AffineTransform a1 = a; - a.PreMultiply(b); - b.PreMultiply(a1); + a.PostConcat(b); + b.PostConcat(a1); EXPECT_EQ(AffineTransform(70, 100, 150, 220, 280, 400), a); EXPECT_EQ(AffineTransform(70, 100, 150, 220, 235, 346), b); } @@ -120,9 +120,9 @@ TEST(AffineTransformTest, MultiplySelf) { AffineTransform a(1, 2, 3, 4, 5, 6); auto b = a; - a.Multiply(a); + a.PreConcat(a); EXPECT_EQ(AffineTransform(7, 10, 15, 22, 28, 40), a); - b.PreMultiply(b); + b.PostConcat(b); EXPECT_EQ(a, b); }
diff --git a/third_party/blink/renderer/platform/transforms/interpolated_transform_operation.cc b/third_party/blink/renderer/platform/transforms/interpolated_transform_operation.cc index a6059a1..e8ccc47 100644 --- a/third_party/blink/renderer/platform/transforms/interpolated_transform_operation.cc +++ b/third_party/blink/renderer/platform/transforms/interpolated_transform_operation.cc
@@ -48,7 +48,7 @@ to_.ApplyRemaining(border_box_size, starting_index_, to_transform); to_transform.Blend(from_transform, progress_); - transform.Multiply(to_transform); + transform.PreConcat(to_transform); } scoped_refptr<TransformOperation> InterpolatedTransformOperation::Blend(
diff --git a/third_party/blink/renderer/platform/transforms/matrix_3d_transform_operation.h b/third_party/blink/renderer/platform/transforms/matrix_3d_transform_operation.h index 79a2313..45c02c63 100644 --- a/third_party/blink/renderer/platform/transforms/matrix_3d_transform_operation.h +++ b/third_party/blink/renderer/platform/transforms/matrix_3d_transform_operation.h
@@ -57,7 +57,7 @@ void Apply(TransformationMatrix& transform, const gfx::SizeF&) const override { - transform.Multiply(TransformationMatrix(matrix_)); + transform.PreConcat(TransformationMatrix(matrix_)); } scoped_refptr<TransformOperation> Accumulate(
diff --git a/third_party/blink/renderer/platform/transforms/matrix_transform_operation.h b/third_party/blink/renderer/platform/transforms/matrix_transform_operation.h index f1a53cd..b0925fd 100644 --- a/third_party/blink/renderer/platform/transforms/matrix_transform_operation.h +++ b/third_party/blink/renderer/platform/transforms/matrix_transform_operation.h
@@ -64,7 +64,7 @@ void Apply(TransformationMatrix& transform, const gfx::SizeF&) const override { - transform.Multiply(Matrix()); + transform.PreConcat(Matrix()); } scoped_refptr<TransformOperation> Accumulate(
diff --git a/third_party/blink/renderer/platform/transforms/transformation_matrix.cc b/third_party/blink/renderer/platform/transforms/transformation_matrix.cc index 88f1127..50306cd 100644 --- a/third_party/blink/renderer/platform/transforms/transformation_matrix.cc +++ b/third_party/blink/renderer/platform/transforms/transformation_matrix.cc
@@ -470,7 +470,7 @@ rotation_matrix.matrix_[2][1] = -sin_theta; rotation_matrix.matrix_[2][2] = cos_theta; - Multiply(rotation_matrix); + PreConcat(rotation_matrix); } void TransformationMatrix::RotateAboutYAxis(double angle) { @@ -484,7 +484,7 @@ rotation_matrix.matrix_[2][0] = sin_theta; rotation_matrix.matrix_[2][2] = cos_theta; - Multiply(rotation_matrix); + PreConcat(rotation_matrix); } void TransformationMatrix::RotateAboutZAxis(double angle) { @@ -498,7 +498,7 @@ rotation_matrix.matrix_[1][0] = -sin_theta; rotation_matrix.matrix_[1][1] = cos_theta; - Multiply(rotation_matrix); + PreConcat(rotation_matrix); } void TransformationMatrix::RotateAbout(double x, @@ -563,7 +563,7 @@ mat.matrix_[2][1] = y * z * one_minus_cos_theta - x * sin_theta; mat.matrix_[2][2] = cos_theta + z * z * one_minus_cos_theta; } - Multiply(mat); + PreConcat(mat); } void TransformationMatrix::Translate(double tx, double ty) { @@ -610,7 +610,7 @@ // And the x shear in the second column. mat.matrix_[1][0] = std::tan(rad_x); - Multiply(mat); + PreConcat(mat); } void TransformationMatrix::ApplyPerspectiveDepth(double p) { @@ -618,7 +618,7 @@ if (p != 0) mat.matrix_[2][3] = -1 / p; - Multiply(mat); + PreConcat(mat); } void TransformationMatrix::ApplyTransformOrigin(double x, double y, double z) { @@ -644,10 +644,10 @@ // TransformationMatrix lhs; lhs.Rotate(90.f); // TransformationMatrix rhs; rhs.Translate(12.f, 34.f); // TransformationMatrix prod = lhs; -// prod.Multiply(rhs); +// prod.PreConcat(rhs); // lhs.MapPoint(rhs.MapPoint(p)) == prod.MapPoint(p) // Also 'prod' corresponds to CSS transform:rotateZ(90deg)translate(12px,34px). -void TransformationMatrix::Multiply(const TransformationMatrix& mat) { +void TransformationMatrix::PreConcat(const TransformationMatrix& mat) { auto c0 = Col(0); auto c1 = Col(1); auto c2 = Col(2); @@ -1097,25 +1097,25 @@ 1 - 2 * (xx + yy), 0, // Q_zz 0, 0, 0, 1); - Multiply(rotation_matrix); + PreConcat(rotation_matrix); // now apply skew if (decomp.skew_yz) { TransformationMatrix tmp; tmp.matrix_[2][1] = decomp.skew_yz; - Multiply(tmp); + PreConcat(tmp); } if (decomp.skew_xz) { TransformationMatrix tmp; tmp.matrix_[2][0] = decomp.skew_xz; - Multiply(tmp); + PreConcat(tmp); } if (decomp.skew_xy) { TransformationMatrix tmp; tmp.matrix_[1][0] = decomp.skew_xy; - Multiply(tmp); + PreConcat(tmp); } // finally, apply scale @@ -1141,7 +1141,7 @@ if (decomp.skew_xy) { TransformationMatrix skew_transform; skew_transform.matrix_[1][0] = decomp.skew_xy; - Multiply(skew_transform); + PreConcat(skew_transform); } // Scale transform. @@ -1231,7 +1231,7 @@ } gfx::Transform TransformationMatrix::ToTransform() const { - return gfx::Transform( + return gfx::Transform::RowMajor( ClampToFloat(matrix_[0][0]), ClampToFloat(matrix_[1][0]), ClampToFloat(matrix_[2][0]), ClampToFloat(matrix_[3][0]), ClampToFloat(matrix_[0][1]), ClampToFloat(matrix_[1][1]),
diff --git a/third_party/blink/renderer/platform/transforms/transformation_matrix.h b/third_party/blink/renderer/platform/transforms/transformation_matrix.h index f0f5ba6..bea83f1 100644 --- a/third_party/blink/renderer/platform/transforms/transformation_matrix.h +++ b/third_party/blink/renderer/platform/transforms/transformation_matrix.h
@@ -216,8 +216,12 @@ void TransformBox(gfx::BoxF&) const; + // Corresponds to DOMMatrix.multiplySelf(). // *this = *this * mat. - void Multiply(const TransformationMatrix&); + void PreConcat(const TransformationMatrix& mat); + + // The following methods except PostTranslate() have the "Pre" semantics, + // i.e. *this = *this * operation. // Applies the current transformation on a scaling and assigns the result // to |this|, i.e *this = *this * scaling; @@ -336,14 +340,14 @@ // *this = *this * t TransformationMatrix& operator*=(const TransformationMatrix& t) { - Multiply(t); + PreConcat(t); return *this; } // result = *this * t TransformationMatrix operator*(const TransformationMatrix& t) const { TransformationMatrix result = *this; - result.Multiply(t); + result.PreConcat(t); return result; }
diff --git a/third_party/blink/renderer/platform/transforms/transformation_matrix_test.cc b/third_party/blink/renderer/platform/transforms/transformation_matrix_test.cc index 38008f04..48c98f0 100644 --- a/third_party/blink/renderer/platform/transforms/transformation_matrix_test.cc +++ b/third_party/blink/renderer/platform/transforms/transformation_matrix_test.cc
@@ -41,6 +41,31 @@ } // end namespace +// This test is to make it easier to understand the order of operations. +TEST(TransformationMatrixTest, PrePostOperations) { + auto m1 = TransformationMatrix::Affine(1, 2, 3, 4, 5, 6); + auto m2 = m1; + m1.Translate(10, 20); + m2.PreConcat(TransformationMatrix::MakeTranslation(10, 20)); + EXPECT_EQ(m1, m2); + + m1.PostTranslate(11, 22); + m2 = TransformationMatrix::MakeTranslation(11, 22) * m2; + EXPECT_EQ(m1, m2); + + m1.Scale(3, 4); + m2.PreConcat(TransformationMatrix::MakeScale(3, 4)); + EXPECT_EQ(m1, m2); + + // TODO(wangxianzhu): Add PostScale tests when moving this test into + // ui/gfx/geometry/transform_unittest.cc. +#if 0 + m1.PostScale(5, 6); + m2 = TransformationMatrix::MakeScale(3, 4) * m2; + EXPECT_EQ(m1, m2); +#endif +} + TEST(TransformationMatrixTest, NonInvertableBlendTest) { TransformationMatrix from; auto to = TransformationMatrix::ColMajor(2.7133590938, 0.0, 0.0, 0.0, 0.0, @@ -164,7 +189,7 @@ EXPECT_EQ(expected_a_times_b, a * b) << (a * b).ToString(true); - a.Multiply(b); + a.PreConcat(b); EXPECT_EQ(expected_a_times_b, a) << a.ToString(true); } @@ -180,7 +205,7 @@ 426, 484, 542, 600); // clang-format on - a.Multiply(a); + a.PreConcat(a); EXPECT_EQ(expected_a_times_a, a) << a.ToString(true); }
diff --git a/third_party/blink/tools/BUILD.gn b/third_party/blink/tools/BUILD.gn index 3d7c0da4..8847c58 100644 --- a/third_party/blink/tools/BUILD.gn +++ b/third_party/blink/tools/BUILD.gn
@@ -15,7 +15,6 @@ # Include blinkpy tools for setting up expectations and uploading results to # ResultDB. - "//third_party/blink/tools/build_wpt_metadata.py", "//third_party/blink/tools/wpt_process_results.py", "//third_party/blink/tools/blinkpy/", @@ -29,17 +28,6 @@ "//third_party/blink/web_tests/wpt_internal/", "//third_party/blink/web_tests/wptrunner.blink.ini", - # Include the various Test Expectations files. - "//third_party/blink/web_tests/ASANExpectations", - "//third_party/blink/web_tests/LeakExpectations", - "//third_party/blink/web_tests/MSANExpectations", - "//third_party/blink/web_tests/NeverFixTests", - "//third_party/blink/web_tests/SlowTests", - "//third_party/blink/web_tests/StaleTestExpectations", - "//third_party/blink/web_tests/TestExpectations", - "//third_party/blink/web_tests/VirtualTestSuites", - "//third_party/blink/web_tests/WPTOverrideExpectations", - # Include the root vpython spec. "//.vpython3", ] @@ -62,9 +50,6 @@ "//build/android/pylib/", # Android-specific expectations - "//third_party/blink/web_tests/android/WebLayerWPTOverrideExpectations", - "//third_party/blink/web_tests/android/ChromeWPTOverrideExpectations", - "//third_party/blink/web_tests/android/WebviewWPTExpectations", "//third_party/blink/web_tests/android/AndroidWPTNeverFixTests", "//third_party/blink/web_tests/android/WPTSmokeTestCases", ]
diff --git a/third_party/blink/tools/blinkpy/common/config/builders.json b/third_party/blink/tools/blinkpy/common/config/builders.json index 0e4e2be..e4102c2 100644 --- a/third_party/blink/tools/blinkpy/common/config/builders.json +++ b/third_party/blink/tools/blinkpy/common/config/builders.json
@@ -1,5 +1,5 @@ { - "Fuchsia x64": { + "fuchsia-x64-rel": { "main": "chromium.linux", "port_name": "fuchsia", "specifiers": ["Fuchsia", "Release"] @@ -64,26 +64,6 @@ }, "is_try_builder": true }, - "fuchsia-x64-cast-receiver-rel": { - "main": "tryserver.chromium.linux", - "port_name": "fuchsia", - "specifiers": ["Fuchsia", "Release"], - "steps": { - "blink_web_tests (with patch)": {}, - "blink_wpt_tests (with patch)": {} - }, - "is_try_builder": true - }, - "fuchsia-x64-rel": { - "main": "tryserver.chromium.linux", - "port_name": "fuchsia", - "specifiers": ["Fuchsia", "Release"], - "steps": { - "blink_web_tests (with patch)": {}, - "blink_wpt_tests (with patch)": {} - }, - "is_try_builder": true - }, "linux-wpt-fyi-rel": { "main": "chromium.fyi", "port_name": "linux-trusty",
diff --git a/third_party/blink/tools/blinkpy/w3c/test_importer_unittest.py b/third_party/blink/tools/blinkpy/w3c/test_importer_unittest.py index b4115d6..62da12eb 100644 --- a/third_party/blink/tools/blinkpy/w3c/test_importer_unittest.py +++ b/third_party/blink/tools/blinkpy/w3c/test_importer_unittest.py
@@ -24,7 +24,6 @@ from blinkpy.w3c.test_importer import TestImporter, ROTATIONS_URL, SHERIFF_EMAIL_FALLBACK, RUBBER_STAMPER_BOT from blinkpy.w3c.wpt_github_mock import MockWPTGitHub from blinkpy.w3c.wpt_manifest import BASE_MANIFEST_NAME -from blinkpy.web_tests.port.android import PRODUCTS_TO_EXPECTATION_FILE_PATHS from blinkpy.web_tests.port.android import ANDROID_DISABLED_TESTS from blinkpy.web_tests.builder_list import BuilderList @@ -62,8 +61,6 @@ }) port = host.port_factory.get() MANIFEST_INSTALL_CMD[0] = port.python3_command() - for path in PRODUCTS_TO_EXPECTATION_FILE_PATHS.values(): - host.filesystem.write_text_file(path, '') host.filesystem.write_text_file(ANDROID_DISABLED_TESTS, '') return host
diff --git a/third_party/blink/tools/blinkpy/w3c/wpt_expectations_updater.py b/third_party/blink/tools/blinkpy/w3c/wpt_expectations_updater.py index 47ee221..d698189 100644 --- a/third_party/blink/tools/blinkpy/w3c/wpt_expectations_updater.py +++ b/third_party/blink/tools/blinkpy/w3c/wpt_expectations_updater.py
@@ -23,7 +23,6 @@ from blinkpy.web_tests.models.test_expectations import ( ParseError, SystemConfigurationRemover, TestExpectations) from blinkpy.web_tests.models.typ_types import ResultType -from blinkpy.web_tests.port.android import PRODUCTS_TO_EXPECTATION_FILE_PATHS _log = logging.getLogger(__name__) @@ -79,8 +78,7 @@ for tests that were renamed. Also the files may have their expectations updated using builder results. """ - return (list(self.port.all_expectations_dict().keys()) + - list(PRODUCTS_TO_EXPECTATION_FILE_PATHS.values())) + return list(self.port.all_expectations_dict().keys()) def run(self): """Does required setup before calling update_expectations(). @@ -1036,16 +1034,8 @@ for path in self._test_expectations.expectations_dict: _log.info('Updating %s for any removed or renamed tests.', self.host.filesystem.basename(path)) - if path in PRODUCTS_TO_EXPECTATION_FILE_PATHS.values(): - # Also delete any expectations for modified test cases at - # android side to avoid any conflict - # TODO: consider keep the triaged expectations when results do - # not change - self._clean_single_test_expectations_file( - path, deleted_files + modified_files, renamed_files) - else: - self._clean_single_test_expectations_file( - path, deleted_files, renamed_files) + self._clean_single_test_expectations_file(path, deleted_files, + renamed_files) self._test_expectations.commit_changes() def _list_files(self, diff_filter):
diff --git a/third_party/blink/tools/blinkpy/w3c/wpt_expectations_updater_unittest.py b/third_party/blink/tools/blinkpy/w3c/wpt_expectations_updater_unittest.py index 97ab5d3..0927d99 100644 --- a/third_party/blink/tools/blinkpy/w3c/wpt_expectations_updater_unittest.py +++ b/third_party/blink/tools/blinkpy/w3c/wpt_expectations_updater_unittest.py
@@ -20,7 +20,6 @@ from blinkpy.web_tests.builder_list import BuilderList from blinkpy.web_tests.models.test_expectations import TestExpectations -from blinkpy.web_tests.port.android import PRODUCTS_TO_EXPECTATION_FILE_PATHS from blinkpy.web_tests.port.factory_mock import MockPortFactory from blinkpy.web_tests.port.test import MOCK_WEB_TESTS @@ -104,8 +103,6 @@ }, })) - for path in PRODUCTS_TO_EXPECTATION_FILE_PATHS.values(): - host.filesystem.write_text_file(path, '') return host def test_run_single_platform_failure(self): @@ -1320,10 +1317,6 @@ fs.write_text_file(fs.join(MOCK_WEB_TESTS, 'new', 'b.html'), '') fs.write_text_file( fs.join(port.web_tests_dir(), 'some', 'test', 'd.html'), '') - # TODO(rmhasan): Remove creation of Android files within - # tests. - for path in PRODUCTS_TO_EXPECTATION_FILE_PATHS.values(): - fs.write_text_file(path, '') updater = WPTExpectationsUpdater(host) @@ -1354,8 +1347,6 @@ 'foo/slow_timeout.html [ Slow ]\n' 'bar/slow.html [ Slow ]\n')) fs.write_text_file(expectations_path, data) - for path in PRODUCTS_TO_EXPECTATION_FILE_PATHS.values(): - fs.write_text_file(path, '') newdata = data.replace('foo/slow_timeout.html [ Timeout ]', 'foo/slow_timeout.html [ Skip Timeout ]') @@ -1395,11 +1386,6 @@ fs.write_text_file(fs.join(MOCK_WEB_TESTS, 'new', 'a.html'), '') fs.write_text_file(fs.join(MOCK_WEB_TESTS, 'new', 'b.html'), '') - # TODO(rmhasan): Remove creation of Android files within - # tests. - for path in PRODUCTS_TO_EXPECTATION_FILE_PATHS.values(): - fs.write_text_file(path, '') - updater = WPTExpectationsUpdater( host, ['--clean-up-test-expectations-only', '--clean-up-affected-tests-only'])
diff --git a/third_party/blink/tools/blinkpy/w3c/wpt_metadata_builder.py b/third_party/blink/tools/blinkpy/w3c/wpt_metadata_builder.py deleted file mode 100644 index e0e90dc..0000000 --- a/third_party/blink/tools/blinkpy/w3c/wpt_metadata_builder.py +++ /dev/null
@@ -1,488 +0,0 @@ -# Copyright 2019 The Chromium Authors -# Use of this source code is governed by a BSD-style license that can be -# found in the LICENSE file. -"""Converts Chromium Test Expectations into WPT Metadata ini files. - -This script loads TestExpectations for any WPT test and creates the metadata -files corresponding to the expectation. This script runs as a BUILD action rule. -The output is then bundled into the WPT isolate package to be shipped to bots -running the WPT test suite. -""" - -import argparse -import fnmatch -import logging -import os - -from blinkpy.common.system.filesystem import FileSystem -from blinkpy.common.system.log_utils import configure_logging -from blinkpy.web_tests.models.typ_types import ResultType -from collections import defaultdict - -_log = logging.getLogger(__name__) - -# Define some status bitmasks for combinations of statuses a test could exhibit. -# The test has a harness error in its baseline file. -HARNESS_ERROR = 1 -# The test has at least one failing subtest in its baseline file. -SUBTEST_FAIL = 1 << 1 # 2 -# The test should be skipped -SKIP_TEST = 1 << 2 # 4 -# The test passes - this typically appears alongside another status indicating -# a flaky test. -TEST_PASS = 1 << 3 # 8 -# The test fails -TEST_FAIL = 1 << 4 # 16 -# The test times out -TEST_TIMEOUT = 1 << 5 # 32 -# The test crashes -TEST_CRASH = 1 << 6 # 64 -# The test failed a precondition assertion -TEST_PRECONDITION_FAILED = 1 << 7 # 128 -# The test is annotated to use checked-in metadata, other statuses are ignored -USE_CHECKED_IN_METADATA = 1 << 8 # 256 - - -class WPTMetadataBuilder(object): - def __init__(self, expectations, port): - """ - Args: - expectations: a blinkpy.web_tests.models.test_expectations.TestExpectations object - port: a blinkpy.web_tests.port.Port object - """ - self.expectations = expectations - self.port = port - # TODO(lpz): Use self.fs everywhere in this class and add tests - self.fs = FileSystem() - self.wpt_manifest = self.port.wpt_manifest("external/wpt") - self.metadata_output_dir = "" - self.checked_in_metadata_dir = "" - self.process_baselines = True - self.handle_annotations = True - self.checked_in_metadata_copied = set() - self.use_subtest_results = False - - def run(self, args=None): - """Main entry point to parse flags and execute the script.""" - parser = argparse.ArgumentParser(description=__doc__) - parser.add_argument( - "--metadata-output-dir", - help="The directory to output the metadata files into.") - parser.add_argument( - "--checked-in-metadata-dir", - help="Root directory of any checked-in WPT metadata files to use. " - "If set, these files will take precedence over legacy expectations " - "and baselines when both exist for a test.") - parser.add_argument( - '-v', - '--verbose', - action='store_true', - help='More verbose logging.') - parser.add_argument( - "--process-baselines", - action="store_true", - default=True, - dest="process_baselines", - help="Whether to translate baseline (-expected.txt) files into WPT " - "metadata files. This translation is lossy and results in any " - "subtest being accepted by wptrunner.") - parser.add_argument("--no-process-baselines", - action="store_false", - dest="process_baselines") - parser.add_argument( - "--handle-annotations", - action="store_true", - default=True, - dest="handle_annotations", - help="Whether to handle annotations in expectations files. These " - "are trailing comments that give additional details for how " - "to translate an expectation into WPT metadata.") - parser.add_argument("--no-handle-annotations", - action="store_false", - dest="handle_annotations") - parser.add_argument( - "--use-subtest-results", - action="store_true", - help="Treat subtest failures as test-level failures") - args = parser.parse_args(args) - - log_level = logging.DEBUG if args.verbose else logging.INFO - configure_logging(logging_level=log_level, include_time=True) - - self.metadata_output_dir = args.metadata_output_dir - self.checked_in_metadata_dir = args.checked_in_metadata_dir - self.process_baselines = args.process_baselines - self.handle_annotations = args.handle_annotations - self.use_subtest_results = args.use_subtest_results - self._build_metadata_and_write() - - return 0 - - @staticmethod - def status_bitmap_to_string(test_status_bitmap, use_subtest_results): - # Nearly all statuses are the result of translating baselines or - # expectations. The exception is explicitly flagging the test to use - # checked-in metadata which must contain the correct subtest statuses. - # We ensure that translation and checked-in metadata aren't mixed. - assert not test_status_bitmap & USE_CHECKED_IN_METADATA, "illegal mix of translation and checked-in-metadata" - statuses = [] - - if test_status_bitmap & HARNESS_ERROR: - statuses.append("ERROR") - if test_status_bitmap & TEST_PASS: - # We need both PASS and OK. Reftests will PASS while testharness - # tests are OK. - statuses.append("PASS") - statuses.append("OK") - if (test_status_bitmap & TEST_FAIL or - use_subtest_results and test_status_bitmap & SUBTEST_FAIL): - # We need both FAIL and ERROR. Reftests will FAIL while testharness - # tests have ERRORs. - statuses.append("FAIL") - statuses.append("ERROR") - if test_status_bitmap & TEST_TIMEOUT: - statuses.append("TIMEOUT") - if test_status_bitmap & TEST_CRASH: - statuses.append("CRASH") - if test_status_bitmap & TEST_PRECONDITION_FAILED: - statuses.append("PRECONDITION_FAILED") - - result = "" - # Since status translation is lossy, we always instruct wptrunner to - # ignore subtest statuses unless --use-subtest-results is set. - if not use_subtest_results: - result += (" blink_expect_any_subtest_status: True" - " # wpt_metadata_builder.py\n") - if statuses: - result += " expected: [%s]\n" % ", ".join(statuses) - return result - - def _build_metadata_and_write(self): - """Build the metadata files and write them to disk.""" - if self.fs.exists(self.metadata_output_dir): - _log.debug("Output dir exists, deleting: %s", - self.metadata_output_dir) - self.fs.rmtree(self.metadata_output_dir) - - # Start by populating any metadata that is checked into the source tree. - # We will later determine, for each test, whether some other status - # should overwrite this. - if self.checked_in_metadata_dir and self.fs.exists( - self.checked_in_metadata_dir): - _log.info("Copying checked-in WPT metadata before translated " - "files.") - self._copy_checked_in_metadata() - else: - _log.warning("Not using checked-in WPT metadata, path is empty or " - "does not exist: %s" % self.checked_in_metadata_dir) - - tests_for_metadata = self.get_tests_needing_metadata() - _log.info("Found %d tests requiring metadata", len(tests_for_metadata)) - for test_name, test_status_bitmap in sorted(tests_for_metadata.items()): - filename, file_contents = self.get_metadata_filename_and_contents( - test_name, test_status_bitmap) - if not filename or not file_contents: - continue - self._write_translated_metadata_to_file(filename, file_contents) - - # Finally, output a stamp file with the same name as the output - # directory. The stamp file is empty, it's only used for its mtime. - # This makes the GN build system happy (see crbug.com/995112). - with self.fs.open_text_file_for_writing(self.metadata_output_dir + - ".stamp"): - pass - - def _copy_checked_in_metadata(self): - """Copies checked-in metadata files to the metadata output directory.""" - for filename in self.fs.files_under(self.checked_in_metadata_dir): - # We match any .ini files in the path. This will find .ini files - # other than just metadata (such as tox.ini), but that is ok - # since wptrunner will just ignore those. - if not fnmatch.fnmatch(filename, "*.ini"): - continue - - # Found a checked-in .ini file. Copy it to the metadata output - # directory in the same sub-path as where it is checked in. - # So /checked/in/a/b/c.ini goes to /metadata/out/a/b/c.ini - output_path = filename.replace(self.checked_in_metadata_dir, - self.metadata_output_dir) - if not self.fs.exists(self.fs.dirname(output_path)): - self.fs.maybe_make_directory(self.fs.dirname(output_path)) - _log.debug("Copying %s to %s" % (filename, output_path)) - # Keep track that we copied this file. We may need to purge it if - # another status overwrites it. - self.checked_in_metadata_copied.add(output_path) - self.fs.copyfile(filename, output_path) - - def _write_translated_metadata_to_file(self, filename, file_contents): - # It's possible that a metadata file was checked in and copied to this - # location. If that's the case, we want to delete the file to purge the - # checked-in contents before writing the translated contents. This must - # only happen the first time we write, since we may need to append more - # translated tests to this same file. - if filename in self.checked_in_metadata_copied: - _log.debug( - "Checked-in metadata exists, overwriting with translation: %s" - % filename) - self.fs.remove(filename) - # Remove the file from the copied list so we don't try deleting it - # again. - self.checked_in_metadata_copied.remove(filename) - - # Write the contents to the file name - if not self.fs.exists(os.path.dirname(filename)): - self.fs.maybe_make_directory(self.fs.dirname(filename)) - - # Note that we append to the metadata file in order to allow multiple - # tests to be present in the same .ini file (ie: for multi-global tests) - with self.fs.open_text_file_for_appending(filename) as metadata_file: - metadata_file.write(file_contents) - - def get_tests_needing_metadata(self): - """Determines which tests need metadata files. - - This function loops over the tests to be run and checks whether each test - has an expectation (eg: in TestExpectations) and/or a baseline (ie: - test-name-expected.txt). The existence of those things will determine - the information that will be emitted into the tests's metadata file. - - Returns: - A dict. The key is the string test name and the value is an integer - bitmap of statuses for the test. - """ - tests_needing_metadata = defaultdict(int) - for test_name in self.port.tests(paths=["external/wpt"]): - # First, check if the test has a baseline. Other forms of - # expectations may overwrite this. - if self.process_baselines: - test_baseline = self.port.expected_text(test_name) - if test_baseline: - self._handle_test_with_baseline(test_name, - tests_needing_metadata) - - # Next check for expectations, which could overwrite baselines - expectation_line = self.expectations.get_expectations(test_name) - self._handle_test_with_expectation(test_name, expectation_line, - tests_needing_metadata) - - return tests_needing_metadata - - def _handle_test_with_expectation(self, test_name, expectation_line, - status_dict): - """Handles a single test expectation and updates |status_dict|.""" - test_statuses = expectation_line.results - annotations = expectation_line.trailing_comments - - # If a test is annotated to use checked-in metadata then that overrides - # other statuses and we exit early. - if self.handle_annotations and annotations: - if "wpt_use_checked_in_metadata" in annotations: - status_dict[test_name] |= USE_CHECKED_IN_METADATA - return - - if ResultType.Skip in test_statuses: - # Skips are handled alone, so don't look at any other statuses - status_dict[test_name] |= SKIP_TEST - return - - # use expectation from WPT baselines if no other expectations - if expectation_line.is_default_pass: - return - - # Guard against the only test_status being Pass (without any - # annotations), we don't want to create metadata for such a test. - if (len(test_statuses) == 1 and ResultType.Pass in test_statuses - and not annotations): - # remove the entry possibly added when handle baseline - status_dict.pop(test_name, 0) - return - - # If an expectation exists for this test, clear the expectation - # derived from baseline. Several reasons here: - # 1. We need have a way to override derived expectations. - # 2. When the test is not expected to pass, derived expectations - # could be incorrect. - # 3. Conceptually it is easier to understand that we only use - # derived expectations when no test expectations exist. - status_dict[test_name] &= ~SUBTEST_FAIL - - status_bitmap = 0 - if ResultType.Pass in test_statuses: - status_bitmap |= TEST_PASS - if ResultType.Failure in test_statuses: - status_bitmap |= TEST_FAIL - if ResultType.Timeout in test_statuses: - status_bitmap |= TEST_TIMEOUT - if ResultType.Crash in test_statuses: - status_bitmap |= TEST_CRASH - if self.handle_annotations and annotations: - if "wpt_subtest_failure" in annotations: - status_bitmap |= SUBTEST_FAIL - if "wpt_precondition_failed" in annotations: - status_bitmap |= TEST_PRECONDITION_FAILED - # Update status bitmap for this test - status_dict[test_name] |= status_bitmap - - def _test_was_skipped(self, test_name, status_dict): - """Returns whether |test_name| is marked as skipped in |status_dict|.""" - return test_name in status_dict and ( - status_dict[test_name] & SKIP_TEST) - - def _handle_test_with_baseline(self, test_name, status_dict): - """Handles a single test baseline and updates |status_dict|.""" - status_bitmap = 0 - if self.port.expected_subtest_failure(test_name): - status_bitmap |= SUBTEST_FAIL - if self.port.expected_harness_error(test_name): - status_bitmap |= HARNESS_ERROR - if status_bitmap > 0: - status_dict[test_name] |= status_bitmap - else: - # Treat this as an error because we don't want it to happen. - # Either the non-FAIL statuses need to be handled here, or the - # baseline is all PASS which should just be deleted. - _log.error("Test %s has a non-FAIL baseline" % test_name) - - def _metadata_filename_from_test_file(self, wpt_test_file): - """Returns the filename of the metadata (.ini) file for the test. - - Args: - wpt_test_file: The file on disk that the specified test lives in. - For multi-global tests this is usually a ".js" file. - - Returns: - The fully-qualified string path of the metadata file for this test. - """ - assert "?" not in wpt_test_file - test_file_parts = wpt_test_file.split("/") - return os.path.join(self.metadata_output_dir, - *test_file_parts) + ".ini" - - def _metadata_inline_test_name_from_test_name(self, wpt_test_name): - """Returns the test name to use *inside* of a metadata file. - - The inline name inside the metadata file is the logical name of the - test without any subdirectories. - For multi-global tests this means that it must have the specific scope - of the test (eg: worker, window, etc). This name must also include any - variants that are set. - - Args: - wpt_test_name: The fully-qualified test name which contains all - subdirectories as well as scope (for multi-globals), and - variants. - - Returns: - The string test name inside of the metadata file. - """ - # To generate the inline test name we basically want to strip away the - # subdirectories from the test name, being careful not to accidentally - # clobber the variant. - variant_split = wpt_test_name.split("?") - test_path = variant_split[0] - test_name_part = test_path.split("/")[-1] - variant = "?" + variant_split[1] if len(variant_split) == 2 else "" - return test_name_part + variant - - def get_metadata_filename_and_contents(self, - chromium_test_name, - test_status_bitmap=0): - """Determines the metadata filename and contents for the specified test. - - The metadata filename is derived from the test name but will differ if - the expectation is for a single test or for a directory of tests. The - contents of the metadata file will also differ for those two cases. - - Args: - chromium_test_name: A Chromium test name from the expectation file, - which starts with `external/wpt`. - test_status_bitmap: An integer containing additional data about the - status, such as enumerating flaky statuses, or whether a test has - a combination of harness error and subtest failure. - - Returns: - A pair of strings, the first is the path to the metadata file and - the second is the contents to write to that file. Or None if the - test does not need a metadata file. - """ - # Ignore expectations for non-WPT tests - if (not chromium_test_name - or not chromium_test_name.startswith('external/wpt')): - return None, None - - # Also ignore any test annotated to use checked-in metadata. By - # definition, the metadata is already there, so there is no metadata to - # be built by this code. - if test_status_bitmap & USE_CHECKED_IN_METADATA: - _log.debug("Using checked-in metadata for test %s" % - chromium_test_name) - return None, None - - # Split the test name by directory. We omit the first 2 entries because - # they are 'external' and 'wpt' and these don't exist in the WPT's test - # names. - wpt_test_name_parts = chromium_test_name.split("/")[2:] - # The WPT test name differs from the Chromium test name in that the WPT - # name omits `external/wpt`. - wpt_test_name = "/".join(wpt_test_name_parts) - - # Check if this is a test file or a test directory - is_test_dir = chromium_test_name.endswith("/") - metadata_filename = None - metadata_file_contents = None - if is_test_dir: - # A test directory gets one metadata file called __dir__.ini and all - # tests in that dir are skipped. - metadata_filename = os.path.join(self.metadata_output_dir, - *wpt_test_name_parts) - metadata_filename = os.path.join(metadata_filename, "__dir__.ini") - _log.debug("Creating a dir-wide ini file %s", metadata_filename) - - metadata_file_contents = self._get_dir_disabled_string() - else: - # For individual tests, we create one file per test, with the name - # of the test in the file as well. - test_file_path = self.wpt_manifest.file_path_for_test_url( - wpt_test_name) - if not test_file_path: - _log.info("Could not find file for test %s, skipping" % - wpt_test_name) - return None, None - - metadata_filename = self._metadata_filename_from_test_file( - test_file_path) - _log.debug("Creating a test ini file %s with status_bitmap %s", - metadata_filename, test_status_bitmap) - inline_test_name = self._metadata_inline_test_name_from_test_name( - wpt_test_name) - metadata_file_contents = self._get_test_failed_string( - inline_test_name, test_status_bitmap) - - return metadata_filename, metadata_file_contents - - def _get_dir_disabled_string(self): - return "disabled: wpt_metadata_builder.py\n" - - def _get_test_disabled_string(self, test_name): - return "[%s]\n disabled: wpt_metadata_builder.py\n" % test_name - - def _get_test_failed_string(self, inline_test_name, test_status_bitmap): - # The contents of the metadata file is two lines: - # 1. the inline name of the WPT test pathinside square brackets. This - # name contains the test scope (for multi-globals) and variants. - # 2. an indented line with the test status and reason - result = "[%s]\n" % inline_test_name - - # A skipped test is a little special in that it doesn't happen along with - # any other status. So we compare directly against SKIP_TEST and also - # return right away. - if test_status_bitmap & SKIP_TEST: - result += " disabled: wpt_metadata_builder.py\n" - return result - - # Other test statuses can exist together. But ensure we have at least one. - expected_string = self.status_bitmap_to_string( - test_status_bitmap, self.use_subtest_results) - if expected_string: - result += expected_string - return result
diff --git a/third_party/blink/tools/blinkpy/w3c/wpt_metadata_builder_unittest.py b/third_party/blink/tools/blinkpy/w3c/wpt_metadata_builder_unittest.py deleted file mode 100644 index 6bb8525..0000000 --- a/third_party/blink/tools/blinkpy/w3c/wpt_metadata_builder_unittest.py +++ /dev/null
@@ -1,743 +0,0 @@ -# Copyright 2019 The Chromium Authors -# Use of this source code is governed by a BSD-style license that can be -# found in the LICENSE file. - -from collections import OrderedDict -import json -import os -import unittest - -from blinkpy.common.host_mock import MockHost -from blinkpy.common.system.filesystem_mock import MockFileSystem -from blinkpy.web_tests.models.test_expectations import TestExpectations -from blinkpy.web_tests.port.factory_mock import MockPortFactory -from blinkpy.w3c.wpt_manifest import BASE_MANIFEST_NAME -from blinkpy.w3c.wpt_metadata_builder import ( - WPTMetadataBuilder, - HARNESS_ERROR, - SKIP_TEST, - SUBTEST_FAIL, - TEST_FAIL, - TEST_PASS, - TEST_TIMEOUT, - TEST_PRECONDITION_FAILED, - USE_CHECKED_IN_METADATA, -) - - -def _append_to_expectation_dict(exp_dict, - exp_file, - test_path, - test_statuses, - is_default_pass=False, - trailing_comments=""): - """Appends expectation lines to an expectation dict. - - Allows creating multi-layered expectations spread across several files. - - Args: - ordered_dict: an OrderedDict to append to - exp_file: str, name of the expectation file (eg: NeverFixTests, FooTests) - test_path: str, the path to set expectations for - test_status: str, the statuses of the test - is_default_pass: bool, is_default_pass flag for the new expectation - trailing_comments: str, comments at the end of the expectation line. - """ - if exp_file not in exp_dict: - exp_dict[exp_file] = "# results: [ Pass Failure Timeout Crash Skip ]\n" - if is_default_pass: - return - exp_dict[exp_file] += ("%s [ %s ]%s\n" % - (test_path, test_statuses, trailing_comments)) - - -def _make_expectation_with_dict(port, expectation_dict): - """Creates an expectation object from an expectation dict. - - Args: - port: the port to run against - expectation_dict: an OrderedDict containing expectation files and their - contents - - Returns: - An expectation object with the contents of the dict. - """ - return TestExpectations(port, expectations_dict=expectation_dict) - - -def _make_expectation(port, - test_path, - test_statuses, - is_default_pass=False, - trailing_comments=""): - """Creates an expectation object for a single test or directory. - - Args: - port: the port to run against - test_path: str, the path to set expectations for - test_status: str, the statuses of the test - is_default_pass: bool, is_default_pass flag for the new expectation - trailing_comments: str, comments at the end of the expectation line. - - Returns: - An expectation object with the given test and statuses. - """ - expectation_dict = OrderedDict() - _append_to_expectation_dict(expectation_dict, "expectations", test_path, - test_statuses, is_default_pass, trailing_comments) - return _make_expectation_with_dict(port, expectation_dict) - - -class WPTMetadataBuilderTest(unittest.TestCase): - def setUp(self): - self.num = 2 - self.host = MockHost() - self.host.port_factory = MockPortFactory(self.host) - self.port = self.host.port_factory.get() - - # Write a dummy manifest file, describing what tests exist. - self.host.filesystem.write_text_file( - self.port.web_tests_dir() + 'external/' + BASE_MANIFEST_NAME, - json.dumps({ - 'items': { - 'reftest': { - 'reftest.html': [ - 'c3f2fb6f436da59d43aeda0a7e8a018084557033', - [None, [['reftest-ref.html', '==']], {}], - ] - }, - 'testharness': { - 'test.html': [ - 'd933fd981d4a33ba82fb2b000234859bdda1494e', - [None, {}] - ], - 'variant.html': [ - 'b8db5972284d1ac6bbda0da81621d9bca5d04ee7', - ['variant.html?foo=bar/abc', {}], - ['variant.html?foo=baz', {}], - ], - 'dir': { - 'zzzz.html': [ - '03ada7aa0d4d43811652fc679a00a41b9653013d', - [None, {}] - ], - 'multiglob.https.any.js': [ - 'd6498c3e388e0c637830fa080cca78b0ab0e5305', - ['dir/multiglob.https.any.window.html', {}], - ['dir/multiglob.https.any.worker.html', {}], - ], - }, - }, - 'manual': { - 'x-manual.html': [ - 'b8db5972284d1ac6bbda0da81621d9bca5d04ee7', - [None, {}] - ], - }, - }, - })) - - def test_non_wpt_test(self): - """A non-WPT test should not get any metadata.""" - test_name = "some/other/test.html" - expectations = _make_expectation(self.port, test_name, "Skip") - metadata_builder = WPTMetadataBuilder(expectations, self.port) - filename, contents = metadata_builder.get_metadata_filename_and_contents( - test_name, SKIP_TEST) - self.assertIsNone(filename) - self.assertIsNone(contents) - - def test_wpt_test_without_manifest_entry(self): - """A WPT test that is not in the manifest should not get a baseline.""" - test_name = "external/wpt/test-not-in-manifest.html" - expectations = _make_expectation(self.port, test_name, "Skip") - metadata_builder = WPTMetadataBuilder(expectations, self.port) - filename, contents = metadata_builder.get_metadata_filename_and_contents( - test_name, SKIP_TEST) - self.assertIsNone(filename) - self.assertIsNone(contents) - - def test_wpt_test_not_skipped(self): - """A WPT test that is not skipped should not get a SKIP metadata.""" - test_name = "external/wpt/test.html" - expectations = _make_expectation(self.port, test_name, "Timeout") - metadata_builder = WPTMetadataBuilder(expectations, self.port) - test_names = metadata_builder.get_tests_needing_metadata() - # The test will appear in the result but won't have a SKIP status - found = False - for name_item, status_item in test_names.items(): - if name_item == test_name: - found = True - self.assertNotEqual(SKIP_TEST, status_item) - self.assertTrue(found) - - def test_same_metadata_file_for_variants(self): - """Variants of a test all go in the same metadata file.""" - test_name1 = "external/wpt/variant.html?foo=bar/abc" - test_name2 = "external/wpt/variant.html?foo=baz" - expectation_dict = OrderedDict() - _append_to_expectation_dict(expectation_dict, "TestExpectations", - test_name1, "Failure") - _append_to_expectation_dict(expectation_dict, "TestExpectations", - test_name2, "Timeout") - expectations = _make_expectation_with_dict(self.port, expectation_dict) - metadata_builder = WPTMetadataBuilder(expectations, self.port) - metadata_builder.metadata_output_dir = "out" - metadata_builder.fs = MockFileSystem() - metadata_builder._build_metadata_and_write() - - # Both the tests go into the same metadata file, named without any - # variants. - metadata_file = os.path.join("out", "variant.html.ini") - with metadata_builder.fs.open_text_file_for_reading( - metadata_file) as f: - data = f.read() - # Inside the metadata file, we have separate entries for each variant - self.assertEqual( - "[variant.html?foo=bar/abc]\n blink_expect_any_subtest_status: True # wpt_metadata_builder.py\n" - " expected: [FAIL, ERROR]\n" - "[variant.html?foo=baz]\n blink_expect_any_subtest_status: True # wpt_metadata_builder.py\n" - " expected: [TIMEOUT]\n", - data) - - def test_parse_baseline_all_pass(self): - """A WPT test with an all-pass baseline doesn't get metadata.""" - # Here we use a test_name that is actually in the test manifest - test_name = "external/wpt/dir/zzzz.html" - # Manually initialize the baseline file and its contents - baseline_filename = self.port.expected_filename(test_name, '.txt') - self.host.filesystem.write_text_file( - baseline_filename, - "This is a test\nPASS some subtest\nPASS another subtest\n") - expectations = TestExpectations(self.port) - metadata_builder = WPTMetadataBuilder(expectations, self.port) - test_and_status_dict = metadata_builder.get_tests_needing_metadata() - self.assertFalse(test_and_status_dict) - - def test_parse_baseline_subtest_fail(self): - """Test parsing a baseline with a failing subtest.""" - # Here we use a test_name that is actually in the test manifest - test_name = "external/wpt/dir/zzzz.html" - # Manually initialize the baseline file and its contents - baseline_filename = self.port.expected_filename(test_name, '.txt') - self.host.filesystem.write_text_file( - baseline_filename, - "This is a test\nPASS some subtest\nFAIL another subtest\n") - expectations = TestExpectations(self.port) - metadata_builder = WPTMetadataBuilder(expectations, self.port) - test_and_status_dict = metadata_builder.get_tests_needing_metadata() - self.assertEqual(1, len(test_and_status_dict)) - self.assertTrue(test_name in test_and_status_dict) - self.assertEqual(SUBTEST_FAIL, test_and_status_dict[test_name]) - - def test_parse_baseline_subtest_notrun(self): - """Test parsing a baseline with a notrun subtest.""" - # Here we use a test_name that is actually in the test manifest - test_name = "external/wpt/dir/zzzz.html" - # Manually initialize the baseline file and its contents - baseline_filename = self.port.expected_filename(test_name, '.txt') - self.host.filesystem.write_text_file( - baseline_filename, - "This is a test\nPASS some subtest\nNOTRUN another subtest\n") - expectations = TestExpectations(self.port) - metadata_builder = WPTMetadataBuilder(expectations, self.port) - test_and_status_dict = metadata_builder.get_tests_needing_metadata() - self.assertEqual(1, len(test_and_status_dict)) - self.assertTrue(test_name in test_and_status_dict) - self.assertEqual(SUBTEST_FAIL, test_and_status_dict[test_name]) - - def test_parse_baseline_subtest_timeout(self): - """Test parsing a baseline with a timeout subtest.""" - # Here we use a test_name that is actually in the test manifest - test_name = "external/wpt/dir/zzzz.html" - # Manually initialize the baseline file and its contents - baseline_filename = self.port.expected_filename(test_name, '.txt') - self.host.filesystem.write_text_file( - baseline_filename, - "This is a test\nTIMEOUT some subtest\nPASS another subtest\n") - expectations = TestExpectations(self.port) - metadata_builder = WPTMetadataBuilder(expectations, self.port) - test_and_status_dict = metadata_builder.get_tests_needing_metadata() - self.assertEqual(1, len(test_and_status_dict)) - self.assertTrue(test_name in test_and_status_dict) - self.assertEqual(SUBTEST_FAIL, test_and_status_dict[test_name]) - - def test_parse_baseline_harness_error(self): - """Test parsing a baseline with a harness error.""" - # Here we use a test_name that is actually in the test manifest - test_name = "external/wpt/dir/zzzz.html" - # Manually initialize the baseline file and its contents - baseline_filename = self.port.expected_filename(test_name, '.txt') - self.host.filesystem.write_text_file( - baseline_filename, "This is a test\nHarness Error. some stuff\n") - expectations = TestExpectations(self.port) - metadata_builder = WPTMetadataBuilder(expectations, self.port) - test_and_status_dict = metadata_builder.get_tests_needing_metadata() - self.assertEqual(1, len(test_and_status_dict)) - self.assertTrue(test_name in test_and_status_dict) - self.assertEqual(HARNESS_ERROR, test_and_status_dict[test_name]) - - def test_parse_baseline_subtest_fail_and_harness_error(self): - """Test parsing a baseline with a harness error AND a subtest fail.""" - # Here we use a test_name that is actually in the test manifest - test_name = "external/wpt/dir/zzzz.html" - # Manually initialize the baseline file and its contents - baseline_filename = self.port.expected_filename(test_name, '.txt') - self.host.filesystem.write_text_file( - baseline_filename, - "This is a test\nHarness Error. some stuff\nPASS some subtest\nFAIL another subtest\n" - ) - expectations = TestExpectations(self.port) - metadata_builder = WPTMetadataBuilder(expectations, self.port) - test_and_status_dict = metadata_builder.get_tests_needing_metadata() - self.assertEqual(1, len(test_and_status_dict)) - self.assertTrue(test_name in test_and_status_dict) - self.assertEqual(SUBTEST_FAIL | HARNESS_ERROR, - test_and_status_dict[test_name]) - - def test_metadata_for_flaky_test(self): - """A WPT test that is flaky has multiple statuses in metadata.""" - test_name = "external/wpt/test.html" - expectations = _make_expectation(self.port, test_name, "Pass Failure") - metadata_builder = WPTMetadataBuilder(expectations, self.port) - filename, contents = metadata_builder.get_metadata_filename_and_contents( - test_name, TEST_PASS | TEST_FAIL) - self.assertEqual("test.html.ini", filename) - # The PASS and FAIL expectations fan out to also include OK and ERROR - # to support reftest/testharness test differences. - self.assertEqual( - "[test.html]\n blink_expect_any_subtest_status: True # wpt_metadata_builder.py\n expected: [PASS, OK, FAIL, ERROR]\n", - contents) - - def test_metadata_for_skipped_test(self): - """A skipped WPT test should get a test-specific metadata file.""" - test_name = "external/wpt/test.html" - expectations = _make_expectation(self.port, test_name, "Skip") - metadata_builder = WPTMetadataBuilder(expectations, self.port) - filename, contents = metadata_builder.get_metadata_filename_and_contents( - test_name, SKIP_TEST) - self.assertEqual("test.html.ini", filename) - self.assertEqual("[test.html]\n disabled: wpt_metadata_builder.py\n", - contents) - - def test_metadata_for_skipped_test_with_variants(self): - """A skipped WPT tests with variants should get a test-specific metadata file.""" - test_name = "external/wpt/variant.html?foo=bar/abc" - expectations = _make_expectation(self.port, test_name, "Skip") - metadata_builder = WPTMetadataBuilder(expectations, self.port) - filename, contents = metadata_builder.get_metadata_filename_and_contents( - test_name, SKIP_TEST) - # The metadata file name should not include variants - self.assertEqual("variant.html.ini", filename) - # ..but the contents of the file should include variants in the test name - self.assertEqual( - "[variant.html?foo=bar/abc]\n disabled: wpt_metadata_builder.py\n", - contents) - - def test_metadata_for_skipped_directory(self): - """A skipped WPT directory should get a dir-wide metadata file.""" - test_dir = "external/wpt/test_dir/" - expectations = _make_expectation(self.port, test_dir, "Skip") - metadata_builder = WPTMetadataBuilder(expectations, self.port) - filename, contents = metadata_builder.get_metadata_filename_and_contents( - test_dir, SKIP_TEST) - self.assertEqual(os.path.join("test_dir", "__dir__.ini"), filename) - self.assertEqual("disabled: wpt_metadata_builder.py\n", contents) - - def test_metadata_for_wpt_test_with_fail_baseline(self): - """A WPT test with a baseline file containing failures gets metadata.""" - test_name = "external/wpt/dir/zzzz.html" - expectations = TestExpectations(self.port) - metadata_builder = WPTMetadataBuilder(expectations, self.port) - filename, contents = metadata_builder.get_metadata_filename_and_contents( - test_name, SUBTEST_FAIL) - self.assertEqual(os.path.join("dir", "zzzz.html.ini"), filename) - self.assertEqual( - "[zzzz.html]\n blink_expect_any_subtest_status: True # wpt_metadata_builder.py\n", - contents) - - def test_metadata_for_wpt_test_with_harness_error_baseline(self): - """A WPT test with a baseline file containing a harness error gets metadata.""" - test_name = "external/wpt/dir/zzzz.html" - expectations = TestExpectations(self.port) - metadata_builder = WPTMetadataBuilder(expectations, self.port) - filename, contents = metadata_builder.get_metadata_filename_and_contents( - test_name, HARNESS_ERROR) - self.assertEqual(os.path.join("dir", "zzzz.html.ini"), filename) - self.assertEqual( - "[zzzz.html]\n blink_expect_any_subtest_status: True # wpt_metadata_builder.py\n expected: [ERROR]\n", - contents) - - def test_metadata_for_wpt_test_with_harness_error_and_subtest_fail_baseline( - self): - """A WPT test with a baseline file containing a harness error and subtest failure gets metadata.""" - test_name = "external/wpt/dir/zzzz.html" - expectations = TestExpectations(self.port) - metadata_builder = WPTMetadataBuilder(expectations, self.port) - filename, contents = metadata_builder.get_metadata_filename_and_contents( - test_name, SUBTEST_FAIL | HARNESS_ERROR) - self.assertEqual(os.path.join("dir", "zzzz.html.ini"), filename) - self.assertEqual( - "[zzzz.html]\n blink_expect_any_subtest_status: True # wpt_metadata_builder.py\n expected: [ERROR]\n", - contents) - - def test_metadata_for_wpt_multiglobal_test_with_baseline(self): - """A WPT test with a baseline file containing failures gets metadata.""" - test_name = "external/wpt/dir/multiglob.https.any.window.html" - expectations = TestExpectations(self.port) - metadata_builder = WPTMetadataBuilder(expectations, self.port) - filename, contents = metadata_builder.get_metadata_filename_and_contents( - test_name, SUBTEST_FAIL) - # The metadata filename matches the test *filename*, not the test name, - # which in this case is the js file from the manifest. - self.assertEqual( - os.path.join("dir", "multiglob.https.any.js.ini"), filename) - # The metadata contents contains the *test name* - self.assertEqual( - "[multiglob.https.any.window.html]\n blink_expect_any_subtest_status: True # wpt_metadata_builder.py\n", - contents) - - def test_metadata_for_precondition_failed(self): - """A WPT ttest hat fails a precondition.""" - test_name = "external/wpt/test.html" - expectations = TestExpectations(self.port) - metadata_builder = WPTMetadataBuilder(expectations, self.port) - filename, contents = metadata_builder.get_metadata_filename_and_contents( - test_name, TEST_PRECONDITION_FAILED) - self.assertEqual("test.html.ini", filename) - # The PASS and FAIL expectations fan out to also include OK and ERROR - # to support reftest/testharness test differences. - self.assertEqual( - "[test.html]\n blink_expect_any_subtest_status: True # wpt_metadata_builder.py\n expected: [PRECONDITION_FAILED]\n", - contents) - - def test_metadata_for_use_checked_in_metadata_annotation(self): - """A WPT test annotated to use checked-in metadata.""" - test_name = "external/wpt/test.html" - expectations = TestExpectations(self.port) - metadata_builder = WPTMetadataBuilder(expectations, self.port) - filename, contents = metadata_builder.get_metadata_filename_and_contents( - test_name, USE_CHECKED_IN_METADATA) - # If the test is using the metadata that is checked-in, then there is no - # work to be done by the metadata builder. - self.assertIsNone(filename) - self.assertIsNone(contents) - - def test_parse_subtest_failure_annotation(self): - """Check that we parse the wpt_subtest_failure annotation correctly.""" - test_name = "external/wpt/test.html" - expectations = _make_expectation( - self.port, - test_name, - "Pass", - trailing_comments=" # wpt_subtest_failure") - metadata_builder = WPTMetadataBuilder(expectations, self.port) - test_and_status_dict = metadata_builder.get_tests_needing_metadata() - self.assertEqual(1, len(test_and_status_dict)) - self.assertTrue(test_name in test_and_status_dict) - self.assertEqual(TEST_PASS | SUBTEST_FAIL, - test_and_status_dict[test_name]) - - def test_parse_precondition_failure_annotation(self): - """Check that we parse the wpt_precondition_failed annotation correctly.""" - test_name = "external/wpt/test.html" - expectations = _make_expectation( - self.port, - test_name, - "Pass", - trailing_comments=" # wpt_precondition_failed") - metadata_builder = WPTMetadataBuilder(expectations, self.port) - test_and_status_dict = metadata_builder.get_tests_needing_metadata() - self.assertEqual(1, len(test_and_status_dict)) - self.assertTrue(test_name in test_and_status_dict) - self.assertEqual(TEST_PASS | TEST_PRECONDITION_FAILED, - test_and_status_dict[test_name]) - - def test_metadata_filename_from_test_file(self): - """Check that we get the correct metadata filename in various cases.""" - expectations = TestExpectations(self.port) - mb = WPTMetadataBuilder(expectations, self.port) - self.assertEqual("test.html.ini", - mb._metadata_filename_from_test_file("test.html")) - test_file = os.path.join("dir", "multiglob.https.any.js") - self.assertEqual(test_file + ".ini", - mb._metadata_filename_from_test_file(test_file)) - with self.assertRaises(AssertionError): - mb._metadata_filename_from_test_file("test.html?variant=abc") - - def test_inline_test_name_from_test_name(self): - """Check that we get the correct inline test name in various cases.""" - expectations = TestExpectations(self.port) - mb = WPTMetadataBuilder(expectations, self.port) - self.assertEqual( - "test.html", - mb._metadata_inline_test_name_from_test_name("test.html")) - self.assertEqual( - "test.html", - mb._metadata_inline_test_name_from_test_name("dir/test.html")) - self.assertEqual( - "test.html?variant=abc", - mb._metadata_inline_test_name_from_test_name( - "dir/test.html?variant=abc")) - self.assertEqual( - "test.html?variant=abc/def", - mb._metadata_inline_test_name_from_test_name( - "dir/test.html?variant=abc/def")) - self.assertEqual( - "test.worker.html", - mb._metadata_inline_test_name_from_test_name("test.worker.html")) - self.assertEqual( - "test.worker.html?variant=abc", - mb._metadata_inline_test_name_from_test_name( - "dir/test.worker.html?variant=abc")) - - def test_copy_checked_in_metadata(self): - # Ensure that ini metadata files are copied from the checked-in dir to - # the output dir as expected. - expectations = TestExpectations(self.port) - mb = WPTMetadataBuilder(expectations, self.port) - # Set the metadata builder to use mock filesystem populated with some - # test data - mb.checked_in_metadata_dir = "src" - mb.metadata_output_dir = "out" - mock_checked_in_files = { - "src/a/b/c.html": b"", - "src/a/b/c.html.ini": b"", - "src/a/d/e.html": b"", - "src/a/d/e.html.ini": b"checked-in", - "src/a/tox.ini": b"", - - # Put one duplicate file in the output directory to simulate a test - # with both legacy expectations and checked-in metadata - "out/a/d/e.html.ini": b"legacy", - } - mb.fs = MockFileSystem(files=mock_checked_in_files) - - # Ensure that the duplicate file starts out with the legacy content. - duplicate_ini_file = "out/a/d/e.html.ini" - self.assertEqual("legacy", mb.fs.read_text_file(duplicate_ini_file)) - - mb._copy_checked_in_metadata() - - # Ensure only the ini files are copied, not the tests - self.assertEqual(3, len(mb.fs.written_files)) - self.assertTrue("out/a/b/c.html.ini" in mb.fs.written_files) - self.assertTrue("out/a/d/e.html.ini" in mb.fs.written_files) - self.assertTrue("out/a/tox.ini" in mb.fs.written_files) - - # Also ensure that the content of the duplicate file was overwritten - # with the checked-in contents. - self.assertEqual("checked-in", - mb.fs.read_text_file(duplicate_ini_file)) - - def test_baseline_and_expectation(self): - """A test has a failing baseline and a timeout expectation.""" - test_name = "external/wpt/test.html" - # Create a baseline with a failing subtest, and a TIMEOUT expectation - baseline_filename = self.port.expected_filename(test_name, '.txt') - self.host.filesystem.write_text_file( - baseline_filename, - "This is a test\nFAIL some subtest\nPASS another subtest\n") - expectations = _make_expectation(self.port, test_name, "Timeout") - metadata_builder = WPTMetadataBuilder(expectations, self.port) - test_and_status_dict = metadata_builder.get_tests_needing_metadata() - self.assertEqual(1, len(test_and_status_dict)) - self.assertTrue(test_name in test_and_status_dict) - self.assertEqual(TEST_TIMEOUT, test_and_status_dict[test_name]) - - def test_expectations_across_files(self): - """Check the inheritance order of expectations across several files.""" - test_name = "external/wpt/test.html" - expectation_dict = OrderedDict() - _append_to_expectation_dict(expectation_dict, "TestExpectations", - test_name, "Failure") - _append_to_expectation_dict(expectation_dict, - "WPTOverrideExpectations", test_name, - "Timeout") - expectations = _make_expectation_with_dict(self.port, expectation_dict) - metadata_builder = WPTMetadataBuilder(expectations, self.port) - test_and_status_dict = metadata_builder.get_tests_needing_metadata() - self.assertEqual(1, len(test_and_status_dict)) - self.assertTrue(test_name in test_and_status_dict) - # The test statuses from the two files are combined - self.assertEqual(TEST_FAIL | TEST_TIMEOUT, - test_and_status_dict[test_name]) - - def test_overriding_skip_expectation_no_annotation(self): - """Check how a skipped test (in NeverFix) interacts with an override. - - In this case, only the SKIP status is translated since skipped tests are - not combined with any other statuses. This is because wpt metadata - requires a special 'disabled' keyword to skip tests, it's not just - another status in the expected status list like in Chromium. - """ - test_name = "external/wpt/test.html" - expectation_dict = OrderedDict() - _append_to_expectation_dict(expectation_dict, "NeverFixTests", - test_name, "Skip") - _append_to_expectation_dict(expectation_dict, - "WPTOverrideExpectations", test_name, - "Failure") - expectations = _make_expectation_with_dict(self.port, expectation_dict) - metadata_builder = WPTMetadataBuilder(expectations, self.port) - test_and_status_dict = metadata_builder.get_tests_needing_metadata() - self.assertEqual(1, len(test_and_status_dict)) - self.assertTrue(test_name in test_and_status_dict) - # Skip statuses always live alone. The override status is ignored - # because it does not have an annotation to use checked-in metadata. - self.assertEqual(SKIP_TEST, test_and_status_dict[test_name]) - - def test_overriding_skip_expectation_with_annotation(self): - """A skipped tests is overridden by an annotation. - - In this case, the SKIP status gets ignored because the status line in - the override file has the 'wpt_use_checked_in_metadata' annotation. This - forces us to prioritize the checked-in metadata over whatever is in - any of the expectation files. - """ - test_name = "external/wpt/test.html" - expectation_dict = OrderedDict() - _append_to_expectation_dict(expectation_dict, "NeverFixTests", - test_name, "Skip") - _append_to_expectation_dict( - expectation_dict, - "WPTOverrideExpectations", - test_name, - "Pass", - trailing_comments=" # wpt_use_checked_in_metadata") - expectations = _make_expectation_with_dict(self.port, expectation_dict) - metadata_builder = WPTMetadataBuilder(expectations, self.port) - test_and_status_dict = metadata_builder.get_tests_needing_metadata() - self.assertEqual(1, len(test_and_status_dict)) - self.assertTrue(test_name in test_and_status_dict) - # Skip statuses always live alone. The override status is ignored - # because it does not have an annotation to use checked-in metadata. - self.assertEqual(USE_CHECKED_IN_METADATA, - test_and_status_dict[test_name]) - - def test_expectation_overwrites_checked_in_metadata(self): - """Test an entry in an expectation overwriting checked-in metadata. - - When an expectation has no annotation to use checked-in metadata then - the expectation will overwrite any checked-in metadata.""" - test_name = "external/wpt/test.html" - expectations = _make_expectation(self.port, test_name, "Timeout") - mb = WPTMetadataBuilder(expectations, self.port) - # Set the metadata builder to use mock filesystem populated with some - # test data - mb.checked_in_metadata_dir = "src" - mb.metadata_output_dir = "out" - mock_checked_in_files = { - "src/external/wpt/test.html": "", - "src/external/wpt/test.html.ini": "checked-in metadata", - } - mb.fs = MockFileSystem(files=mock_checked_in_files) - - mb._build_metadata_and_write() - # Ensure that the data written to the metadata file is the translated - # status, not the checked-in contents. - resulting_ini_file = os.path.join("out", "test.html.ini") - with mb.fs.open_text_file_for_reading(resulting_ini_file) as f: - data = f.read() - self.assertEqual( - "[test.html]\n blink_expect_any_subtest_status: True # wpt_metadata_builder.py\n expected: [TIMEOUT]\n", - data) - - def test_use_subtest_results_flag_with_expectation(self): - """Test that the --use-subtest-results flag updates metadata correctly. - - The --use-subtest-results flag should result in the - blink_expect_any_subtest_status tag not being applied to metadata for - any tests.""" - test_name = "external/wpt/test.html" - expectations = _make_expectation(self.port, test_name, "Failure") - metadata_builder = WPTMetadataBuilder(expectations, self.port) - metadata_builder.use_subtest_results = True - filename, contents = metadata_builder.get_metadata_filename_and_contents( - test_name, TEST_FAIL) - self.assertEqual("test.html.ini", filename) - self.assertEqual("[test.html]\n expected: [FAIL, ERROR]\n", contents) - - def test_use_subtest_results_flag_with_baseline_and_timeout(self): - """If a test has both baseline and a non-default-pass expectation, do not - derive expectation from the baseline""" - # Create a baseline with a failing subtest, and a TIMEOUT expectation - test_name = "external/wpt/test.html" - baseline_filename = self.port.expected_filename(test_name, '.txt') - self.host.filesystem.write_text_file( - baseline_filename, - "This is a test\nFAIL some subtest\nPASS another subtest\n") - - expectations = _make_expectation(self.port, test_name, "Timeout") - - metadata_builder = WPTMetadataBuilder(expectations, self.port) - metadata_builder.use_subtest_results = True - - test_and_status_dict = metadata_builder.get_tests_needing_metadata() - - self.assertEqual(1, len(test_and_status_dict)) - self.assertTrue(test_name in test_and_status_dict) - self.assertEqual(TEST_TIMEOUT, test_and_status_dict[test_name]) - - filename, contents = metadata_builder.get_metadata_filename_and_contents( - test_name, test_and_status_dict[test_name]) - self.assertEqual("test.html.ini", filename) - self.assertEqual("[test.html]\n expected: [TIMEOUT]\n", - contents) - - def test_use_subtest_results_flag_with_baseline_and_default_pass(self): - """A test may have a failing baseline because there are subtest failures. - When the wptrunner see's the failing subtest it will return failure - for the test since we are not setting expectations for the subtest in - the metadata. However the expected result will be set to FAIL in the - JSON results and the CI will stay green.""" - # Create a baseline with a failing subtest, and a default pass expectation - test_name = "external/wpt/test.html" - baseline_filename = self.port.expected_filename(test_name, '.txt') - self.host.filesystem.write_text_file( - baseline_filename, - "This is a test\nFAIL some subtest\nPASS another subtest\n") - expectations = _make_expectation(self.port, test_name, - "Pass", is_default_pass=True) - - metadata_builder = WPTMetadataBuilder(expectations, self.port) - metadata_builder.use_subtest_results = True - - test_and_status_dict = metadata_builder.get_tests_needing_metadata() - - self.assertEqual(1, len(test_and_status_dict)) - self.assertTrue(test_name in test_and_status_dict) - self.assertEqual(SUBTEST_FAIL, test_and_status_dict[test_name]) - - filename, contents = metadata_builder.get_metadata_filename_and_contents( - test_name, test_and_status_dict[test_name]) - self.assertEqual("test.html.ini", filename) - self.assertEqual("[test.html]\n expected: [FAIL, ERROR]\n", - contents) - - def test_without_use_subtest_results_flag_with_baseline(self): - """A test has a failing baseline.""" - test_name = "external/wpt/test.html" - # Create a baseline with a failing subtest, and a TIMEOUT expectation - baseline_filename = self.port.expected_filename(test_name, '.txt') - self.host.filesystem.write_text_file( - baseline_filename, - "This is a test\nFAIL some subtest\nPASS another subtest\n") - - expectations = _make_expectation(self.port, test_name, "Timeout") - - metadata_builder = WPTMetadataBuilder(expectations, self.port) - - test_and_status_dict = metadata_builder.get_tests_needing_metadata() - - self.assertEqual(1, len(test_and_status_dict)) - self.assertTrue(test_name in test_and_status_dict) - self.assertEqual(TEST_TIMEOUT, - test_and_status_dict[test_name]) - - filename, contents = metadata_builder.get_metadata_filename_and_contents( - test_name, test_and_status_dict[test_name]) - self.assertEqual("test.html.ini", filename) - self.assertEqual(("[test.html]\n blink_expect_any_subtest_status: " - "True # wpt_metadata_builder.py\n " - "expected: [TIMEOUT]\n"), contents)
diff --git a/third_party/blink/tools/blinkpy/web_tests/lint_test_expectations.py b/third_party/blink/tools/blinkpy/web_tests/lint_test_expectations.py index f5215554..6d901eb0 100644 --- a/third_party/blink/tools/blinkpy/web_tests/lint_test_expectations.py +++ b/third_party/blink/tools/blinkpy/web_tests/lint_test_expectations.py
@@ -39,9 +39,8 @@ from blinkpy.web_tests.models.test_expectations import (TestExpectations, ParseError) from blinkpy.web_tests.models.typ_types import ResultType -from blinkpy.web_tests.port.android import ( - PRODUCTS_TO_EXPECTATION_FILE_PATHS, ANDROID_DISABLED_TESTS, - ANDROID_WEBLAYER) +from blinkpy.web_tests.port.android import (ANDROID_DISABLED_TESTS, + ANDROID_WEBLAYER) from blinkpy.web_tests.port.factory import platform_options from blinkpy.web_tests.port.linux import LinuxPort from blinkpy.web_tests.port.mac import MacPort @@ -73,7 +72,6 @@ # Add all extra expectation files to be linted. options.additional_expectations.extend( - list(PRODUCTS_TO_EXPECTATION_FILE_PATHS.values()) + [ANDROID_DISABLED_TESTS] + [ host.filesystem.join(port.web_tests_dir(), 'WPTOverrideExpectations'), @@ -114,9 +112,6 @@ def _check_test_existence(host, port, path, expectations): failures = [] warnings = [] - if path in PRODUCTS_TO_EXPECTATION_FILE_PATHS.values(): - return [], [] - for exp in expectations: if not exp.test: continue
diff --git a/third_party/blink/tools/blinkpy/web_tests/lint_test_expectations_unittest.py b/third_party/blink/tools/blinkpy/web_tests/lint_test_expectations_unittest.py index e9b8862..b14fd6af 100644 --- a/third_party/blink/tools/blinkpy/web_tests/lint_test_expectations_unittest.py +++ b/third_party/blink/tools/blinkpy/web_tests/lint_test_expectations_unittest.py
@@ -35,7 +35,6 @@ from blinkpy.common.path_finder import PathFinder from blinkpy.common.system.log_testing import LoggingTestCase from blinkpy.web_tests import lint_test_expectations -from blinkpy.web_tests.port.android import PRODUCTS_TO_EXPECTATION_FILE_PATHS from blinkpy.web_tests.port.base import VirtualTestSuite from blinkpy.web_tests.port.test import MOCK_WEB_TESTS @@ -283,26 +282,6 @@ for pattern, failure in zip(expected_non_existence, failures): self.assertIn('Test does not exist: %s' % pattern, failure) - def test_only_wpt_in_android_override_files(self): - options = optparse.Values({ - 'additional_expectations': [], - 'platform': 'test', - 'debug_rwt_logging': False - }) - host = MockHost() - port = host.port_factory.get(options.platform, options=options) - raw_expectations = ('# results: [ Failure ]\n' - 'external/wpt/test.html [ Failure ]\n' - 'non-wpt/test.html [ Failure ]\n') - for path in PRODUCTS_TO_EXPECTATION_FILE_PATHS.values(): - host.filesystem.write_text_file(path, raw_expectations) - host.port_factory.get = lambda platform=None, options=None: port - host.port_factory.all_port_names = lambda platform=None: [port.name()] - port.test_exists = lambda _: True - port.tests = lambda _: {'external/wpt/test.html', 'non-wpt/test.html'} - failures, _ = lint_test_expectations.lint(host, options) - self.assertTrue(all('is for a non WPT test' in f for f in failures)) - def test_lint_globs(self): options = optparse.Values({ 'additional_expectations': [],
diff --git a/third_party/blink/tools/blinkpy/web_tests/port/android.py b/third_party/blink/tools/blinkpy/web_tests/port/android.py index b22d0ae..e2d998d 100644 --- a/third_party/blink/tools/blinkpy/web_tests/port/android.py +++ b/third_party/blink/tools/blinkpy/web_tests/port/android.py
@@ -86,15 +86,6 @@ # Android web tests directory, which contains override expectation files ANDROID_WEB_TESTS_DIR = os.path.join(get_blink_dir(), 'web_tests', 'android') -PRODUCTS_TO_EXPECTATION_FILE_PATHS = { - ANDROID_WEBLAYER: os.path.join( - ANDROID_WEB_TESTS_DIR, 'WebLayerWPTOverrideExpectations'), - ANDROID_WEBVIEW: os.path.join( - ANDROID_WEB_TESTS_DIR, 'WebviewWPTExpectations'), - CHROME_ANDROID: os.path.join( - ANDROID_WEB_TESTS_DIR, 'ChromeWPTOverrideExpectations'), -} - # Disabled WPT tests on Android ANDROID_DISABLED_TESTS = os.path.join( ANDROID_WEB_TESTS_DIR, 'AndroidWPTNeverFixTests')
diff --git a/third_party/blink/tools/build_wpt_metadata.py b/third_party/blink/tools/build_wpt_metadata.py deleted file mode 100755 index 67d0242e..0000000 --- a/third_party/blink/tools/build_wpt_metadata.py +++ /dev/null
@@ -1,50 +0,0 @@ -#!/usr/bin/env vpython3 -# Copyright 2019 The Chromium Authors -# Use of this source code is governed by a BSD-style license that can be -# found in the LICENSE file. - -import argparse -import optparse -import sys - -from blinkpy.common.host import Host -from blinkpy.web_tests.port.android import ( - AndroidPort, PRODUCTS) -from blinkpy.w3c.wpt_metadata_builder import WPTMetadataBuilder -from blinkpy.web_tests.models.test_expectations import TestExpectations - - -def main(args): - parser = argparse.ArgumentParser(description=__doc__) - parser.add_argument( - "--additional-expectations", - action="append", - help="Paths to additional expectations files for WPT.") - parser.add_argument( - "--android-product", - default=None, - choices=PRODUCTS, - help="Android product argument for wpt runner.") - parser.add_argument( - '--ignore-default-expectations', - action='store_true', - help='Do not use the default set of test expectations files.' - ' i.e TestExpectations, NeverFixTests, etc...') - - known_args, rest_args = parser.parse_known_args(args) - options = optparse.Values(vars(known_args)) - host = Host() - - if known_args.android_product: - port = AndroidPort( - host, product=known_args.android_product, options=options) - else: - port = host.port_factory.get(options=options) - - expectations = TestExpectations(port) - metadata_builder = WPTMetadataBuilder(expectations, port) - sys.exit(metadata_builder.run(rest_args)) - - -if __name__ == '__main__': - main(sys.argv[1:])
diff --git a/third_party/blink/tools/run_wpt_tests.py b/third_party/blink/tools/run_wpt_tests.py index 967f467..eb77a9f 100755 --- a/third_party/blink/tools/run_wpt_tests.py +++ b/third_party/blink/tools/run_wpt_tests.py
@@ -15,11 +15,9 @@ from blinkpy.common import path_finder from blinkpy.common.path_finder import PathFinder from blinkpy.web_tests.port.android import ( - PRODUCTS_TO_EXPECTATION_FILE_PATHS, ANDROID_WEBLAYER, ANDROID_WEBVIEW, CHROME_ANDROID, - ANDROID_DISABLED_TESTS, ) path_finder.add_testing_dir_to_sys_path() @@ -100,10 +98,6 @@ self._parser.error(str(exc)) @property - def _metadata_dir(self): - return self.fs.join(self._tmp_dir, 'metadata') - - @property def _upstream_dir(self): return self.fs.join(self._tmp_dir, 'upstream_wpt') @@ -164,11 +158,6 @@ self.path_finder.path_from_web_tests("wptrunner.blink.ini") ]) - # if metadata was created then add the metadata directory - # to the list of wpt arguments - if self._metadata_dir: - rest_args.extend(['--metadata', self._metadata_dir]) - if self.options.flag_specific: configs = self.port.flag_specific_configs() rest_args.extend('--binary-arg=%s' % arg @@ -184,17 +173,6 @@ rest_args.extend(self.options.wpt_args) return rest_args - def _maybe_build_metadata(self): - metadata_builder_cmd = [ - self.select_python_executable(), - self.path_finder.path_from_blink_tools('build_wpt_metadata.py'), - '--metadata-output-dir=%s' % self._metadata_dir, - ] - if self.options.ignore_default_expectations: - metadata_builder_cmd += ['--ignore-default-expectations'] - metadata_builder_cmd.extend(self.product.metadata_builder_args) - return common.run_command(metadata_builder_cmd) - @property def log_level(self): if self.options.verbose >= 2: @@ -210,14 +188,6 @@ # after the tests complete. Otherwise, `mkdtemp()` raise an error. stack.callback(self.fs.rmtree, self._tmp_dir) stack.enter_context(self.product.test_env()) - metadata_command_ret = self._maybe_build_metadata() - if metadata_command_ret != 0: - return metadata_command_ret - - # If there is no metadata then we need to create an - # empty directory to pass to wptrunner - if not os.path.exists(self._metadata_dir): - os.makedirs(self._metadata_dir) if self.options.use_upstream_wpt: logger.info("Using upstream wpt, cloning to %s ..." % self._upstream_dir) @@ -267,7 +237,6 @@ def add_extra_arguments(self, parser): super().add_extra_arguments(parser) parser.description = __doc__ - self.add_metadata_arguments(parser) self.add_binary_arguments(parser) self.add_test_arguments(parser) if _ANDROID_ENABLED: @@ -321,25 +290,6 @@ help=('Use this tag to not run wptrunner in' 'headless mode')) - def add_metadata_arguments(self, parser): - group = parser.add_argument_group( - 'Metadata Builder', - 'Options for building WPT metadata from web test expectations.') - group.add_argument('--additional-expectations', - metavar='EXPECTATIONS_FILE', - action='append', - default=[], - help='Paths to additional test expectations files.') - group.add_argument( - '--ignore-default-expectations', - action='store_true', - help='Do not use the default set of TestExpectations files.') - group.add_argument('--ignore-browser-specific-expectations', - action='store_true', - default=False, - help='Ignore browser-specific expectation files.') - return group - def add_binary_arguments(self, parser): group = parser.add_argument_group( 'Binary Configuration', @@ -509,19 +459,6 @@ args.append('--webdriver-binary=%s' % webdriver) return args - @property - def metadata_builder_args(self): - """list[str]: Arguments to add to the WPT metadata builder command.""" - return [ - '--additional-expectations=%s' % expectation - for expectation in self.expectations - ] - - @property - def expectations(self): - """list[str]: Paths to additional expectations to build metadata for.""" - return list(self._options.additional_expectations) - def get_version(self): """Get the product version, if available.""" return None @@ -546,27 +483,6 @@ ]) return wpt_args - @property - def metadata_builder_args(self): - args = list(super().metadata_builder_args) - # TODO(crbug/1299650): Strip trailing '/'. Otherwise, - # build_wpt_metadata.py will not build correctly filesystem paths - # correctly. - path_to_wpt_root = self._host.filesystem.normpath( - self._path_finder.path_from_wpt_tests()) - args.extend([ - '--no-process-baselines', - '--checked-in-metadata-dir=%s' % path_to_wpt_root, - ]) - return args - - @property - def expectations(self): - expectations = list(super().expectations) - expectations.append( - self._path_finder.path_from_web_tests('WPTOverrideExpectations')) - return expectations - class Chrome(ChromeBase): name = 'chrome' @@ -617,13 +533,6 @@ ]) return wpt_args - @property - def expectations(self): - expectations = list(super().expectations) - expectations.append( - self._path_finder.path_from_web_tests('WPTOverrideExpectations')) - return expectations - @contextlib.contextmanager def _install_apk(device, path): @@ -667,25 +576,6 @@ wpt_args.append('--adb-binary=%s' % self._options.adb_binary) return wpt_args - @property - def metadata_builder_args(self): - args = list(super().metadata_builder_args) - args.extend([ - '--android-product=%s' % self.name, - '--use-subtest-results', - ]) - return args - - @property - def expectations(self): - expectations = list(super().expectations) - expectations.append(ANDROID_DISABLED_TESTS) - maybe_path = PRODUCTS_TO_EXPECTATION_FILE_PATHS.get(self.name) - if (maybe_path - and not self._options.ignore_browser_specific_expectations): - expectations.append(maybe_path) - return expectations - def get_version(self): version_provider = self.get_version_provider_package_name() if self.devices and version_provider:
diff --git a/third_party/blink/web_tests/FlagExpectations/disable-layout-ng b/third_party/blink/web_tests/FlagExpectations/disable-layout-ng index 07c4a271..d043da8 100644 --- a/third_party/blink/web_tests/FlagExpectations/disable-layout-ng +++ b/third_party/blink/web_tests/FlagExpectations/disable-layout-ng
@@ -449,6 +449,10 @@ crbug.com/591099 external/wpt/css/css-flexbox/alignment/flex-align-baseline-fieldset-001.html [ Failure ] crbug.com/591099 external/wpt/css/css-flexbox/alignment/flex-align-baseline-fieldset-002.html [ Failure ] crbug.com/591099 external/wpt/css/css-flexbox/alignment/flex-align-baseline-fieldset-003.html [ Failure ] +crbug.com/591099 external/wpt/css/css-flexbox/alignment/flex-align-baseline-flex-001.html [ Failure ] +crbug.com/591099 external/wpt/css/css-flexbox/alignment/flex-align-baseline-flex-002.html [ Failure ] +crbug.com/591099 external/wpt/css/css-flexbox/alignment/flex-align-baseline-flex-003.html [ Failure ] +crbug.com/591099 external/wpt/css/css-flexbox/alignment/flex-align-baseline-flex-004.html [ Failure ] crbug.com/591099 external/wpt/css/css-flexbox/alignment/flex-align-baseline-grid-001.html [ Failure ] crbug.com/591099 external/wpt/css/css-flexbox/alignment/flex-align-baseline-grid-002.html [ Failure ] crbug.com/591099 external/wpt/css/css-flexbox/alignment/flex-align-baseline-grid-003.html [ Failure ] @@ -486,6 +490,8 @@ crbug.com/591099 external/wpt/css/css-flexbox/flexbox-align-self-vert-rtl-004.xhtml [ Failure ] crbug.com/591099 external/wpt/css/css-flexbox/flexbox-align-self-vert-rtl-005.xhtml [ Failure ] crbug.com/591099 external/wpt/css/css-flexbox/flexbox-baseline-align-self-baseline-vert-001.html [ Failure ] +crbug.com/591099 external/wpt/css/css-flexbox/flexbox-baseline-multi-line-horiz-002.html [ Failure ] +crbug.com/591099 external/wpt/css/css-flexbox/flexbox-baseline-multi-line-vert-002.html [ Failure ] crbug.com/553838 external/wpt/css/css-flexbox/flexbox-min-height-auto-002a.html [ Failure ] crbug.com/553838 external/wpt/css/css-flexbox/flexbox-min-height-auto-002c.html [ Failure ] crbug.com/1132627 external/wpt/css/css-flexbox/flexbox-min-width-auto-002a.html [ Failure ] @@ -595,6 +601,10 @@ crbug.com/1045599 external/wpt/css/css-grid/alignment/grid-align-baseline-fieldset-001.html [ Failure ] crbug.com/1045599 external/wpt/css/css-grid/alignment/grid-align-baseline-fieldset-002.html [ Failure ] crbug.com/1045599 external/wpt/css/css-grid/alignment/grid-align-baseline-fieldset-003.html [ Failure ] +crbug.com/1045599 external/wpt/css/css-grid/alignment/grid-align-baseline-flex-001.html [ Failure ] +crbug.com/1045599 external/wpt/css/css-grid/alignment/grid-align-baseline-flex-002.html [ Failure ] +crbug.com/1045599 external/wpt/css/css-grid/alignment/grid-align-baseline-flex-003.html [ Failure ] +crbug.com/1045599 external/wpt/css/css-grid/alignment/grid-align-baseline-flex-004.html [ Failure ] crbug.com/1045599 external/wpt/css/css-grid/alignment/grid-align-baseline-grid-001.html [ Failure ] crbug.com/1045599 external/wpt/css/css-grid/alignment/grid-align-baseline-grid-002.html [ Failure ] crbug.com/1045599 external/wpt/css/css-grid/alignment/grid-align-baseline-grid-003.html [ Failure ] @@ -2115,7 +2125,7 @@ crbug.com/1121942 printing/fixed-positioned-overflow-scroll.html [ Pass ] crbug.com/1121942 printing/fixedpos-in-multicol.html [ Failure ] crbug.com/1121942 printing/flexbox-with-overflow-in-bottom-aligned-fixedpos.html [ Pass ] -crbug.com/1121942 printing/multi-page-background.html [ Pass ] +crbug.com/1121942 printing/multi-page-background.html [ Failure ] crbug.com/1121942 printing/width-overflow.html [ Pass ] crbug.com/1147859 virtual/css-highlight-inheritance/external/wpt/css/css-highlight-api/painting/custom-highlight-painting-001.html [ Failure ] crbug.com/1147859 virtual/css-highlight-inheritance/external/wpt/css/css-highlight-api/painting/custom-highlight-painting-002.html [ Failure ]
diff --git a/third_party/blink/web_tests/SmokeTests/Mac.txt b/third_party/blink/web_tests/SmokeTests/Mac.txt index fdb9f4f..13177cb2 100644 --- a/third_party/blink/web_tests/SmokeTests/Mac.txt +++ b/third_party/blink/web_tests/SmokeTests/Mac.txt
@@ -49,7 +49,6 @@ css3/blending/svg-blend-multiply.html css3/filters/backdrop-filter-boundary.html css3/filters/composited-layer-bounds-after-sw-blur-animation.html -css3/flexbox/flexbox-baseline.html custom-elements/form-validation-bubble-appearance.html editing/caret/caret-color.html editing/caret/in-multicol-child.html
diff --git a/third_party/blink/web_tests/TestExpectations b/third_party/blink/web_tests/TestExpectations index c2fb7e7..5503be402 100644 --- a/third_party/blink/web_tests/TestExpectations +++ b/third_party/blink/web_tests/TestExpectations
@@ -2306,7 +2306,6 @@ crbug.com/1121942 printing/fixed-positioned-headers-and-footers-larger-than-page.html [ Crash Failure ] crbug.com/1121942 printing/fixed-positioned-overflow-scroll.html [ Crash Failure ] crbug.com/1121942 printing/flexbox-with-overflow-in-bottom-aligned-fixedpos.html [ Crash Failure ] -crbug.com/1121942 printing/multi-page-background.html [ Failure ] crbug.com/1121942 printing/page-break-avoid.html [ Failure ] crbug.com/377696 printing/setPrinting.html [ Failure ] crbug.com/1121942 printing/width-overflow.html [ Failure ] @@ -3223,8 +3222,6 @@ # ====== New tests from wpt-importer added here ====== crbug.com/626703 [ Linux ] external/wpt/encoding/unsupported-labels.window.html [ Failure Timeout ] -crbug.com/626703 [ Mac11 ] external/wpt/encoding/unsupported-labels.window.html [ Failure Timeout ] -crbug.com/626703 [ Mac12 ] external/wpt/encoding/unsupported-labels.window.html [ Failure Timeout ] crbug.com/626703 [ Win ] external/wpt/encoding/unsupported-labels.window.html [ Failure Timeout ] crbug.com/626703 external/wpt/resize-observer/notify.html [ Timeout ] crbug.com/626703 external/wpt/resize-observer/svg.html [ Timeout ] @@ -7084,3 +7081,4 @@ # Sheriff 2022-09-29 crbug.com/1368855 external/wpt/longtask-timing/containerNames.html [ Failure Pass ] +crbug.com/1369642 [ Mac ] external/wpt/encoding/unsupported-labels.window.html [ Failure Timeout ]
diff --git a/third_party/blink/web_tests/WPTOverrideExpectations b/third_party/blink/web_tests/WPTOverrideExpectations deleted file mode 100644 index 7bec3cf..0000000 --- a/third_party/blink/web_tests/WPTOverrideExpectations +++ /dev/null
@@ -1,234 +0,0 @@ -# results: [ Timeout Crash Pass Failure Slow Skip ] - -# This file lists test expectations for WPT tests running ONLY under the wptrunner code path in -# Chromium. This file is used in two ways: -# 1) To set failure expectations for wptrunner tests, exactly as TestExpectations are used but -# which affect wptrunner instead of run_web_tests -# 2) To explicitly state that TestExpectations entries for a wptrunner test should be ignored -# in favour of wptrunner-specific "metadata" files, which are checked-in to the source tree -# and named "<test>.ini". This is done by adding a line in this file with status set to [ Pass ] -# and with a trailing comment that says "# wpt_use_checked_in_metadata". - -# There may be duplicate entries between this file and other expectations, which is acceptable. -# See go/wpt-in-chromium-ci for more info on the overall project. - -# Bluetooth not supported in Chrome as per -# https://github.com/web-platform-tests/wpt/blob/master/bluetooth/README.md#web-bluetooth-testing -external/wpt/bluetooth/* [ Skip ] - -external/wpt/infrastructure/testdriver/actions/actionsWithKeyPressed.html [ Pass ] # wpt_use_checked_in_metadata -external/wpt/infrastructure/testdriver/actions/crossOrigin.sub.html [ Pass ] # wpt_use_checked_in_metadata -external/wpt/infrastructure/testdriver/actions/elementPosition.html [ Pass ] # wpt_use_checked_in_metadata -external/wpt/infrastructure/testdriver/actions/elementTiming.html [ Pass ] # wpt_use_checked_in_metadata -external/wpt/infrastructure/testdriver/actions/eventOrder.html [ Pass ] # wpt_use_checked_in_metadata -external/wpt/infrastructure/testdriver/actions/iframe.html [ Pass ] # wpt_use_checked_in_metadata -external/wpt/infrastructure/testdriver/actions/mouseClickCount.html [ Pass ] # wpt_use_checked_in_metadata -external/wpt/infrastructure/testdriver/actions/multiDevice.html [ Pass ] # wpt_use_checked_in_metadata -external/wpt/infrastructure/testdriver/actions/multiTouchPoints.html [ Pass ] # wpt_use_checked_in_metadata -external/wpt/infrastructure/testdriver/actions/multiTouchPointsReleaseFirstPoint.html [ Pass ] # wpt_use_checked_in_metadata -external/wpt/infrastructure/testdriver/actions/multiTouchPointsReleaseSecondPoint.html [ Pass ] # wpt_use_checked_in_metadata -external/wpt/infrastructure/testdriver/actions/multiTouchPointsTwoTouchStarts.html [ Pass ] # wpt_use_checked_in_metadata -external/wpt/infrastructure/testdriver/actions/multiTouchPointsWithPause.html [ Pass ] # wpt_use_checked_in_metadata -external/wpt/infrastructure/testdriver/actions/pause.html [ Pass ] # wpt_use_checked_in_metadata -external/wpt/infrastructure/testdriver/actions/penPointerEventProperties.html [ Pass ] # wpt_use_checked_in_metadata -external/wpt/infrastructure/testdriver/actions/penPointerEvents.html [ Pass ] # wpt_use_checked_in_metadata -external/wpt/infrastructure/testdriver/actions/textEditCommands.html [ Pass ] # wpt_use_checked_in_metadata -external/wpt/infrastructure/testdriver/actions/touchPointerEventProperties.html [ Pass ] # wpt_use_checked_in_metadata -external/wpt/infrastructure/testdriver/actions/wheelScroll.html [ Pass ] # wpt_use_checked_in_metadata -external/wpt/input-events/idlharness.window.html [ Pass ] # wpt_use_checked_in_metadata -external/wpt/input-events/input-events-cut-paste.html [ Pass ] # wpt_use_checked_in_metadata -external/wpt/input-events/input-events-exec-command.html [ Pass ] # wpt_use_checked_in_metadata -external/wpt/input-events/input-events-get-target-ranges-backspace.tentative.html [ Pass ] # wpt_use_checked_in_metadata -external/wpt/input-events/input-events-get-target-ranges-deleting-in-list-items.tentative.html?Backspace,ol [ Pass ] # wpt_use_checked_in_metadata -external/wpt/input-events/input-events-get-target-ranges-deleting-in-list-items.tentative.html?Backspace,ul [ Pass ] # wpt_use_checked_in_metadata -external/wpt/input-events/input-events-get-target-ranges-deleting-in-list-items.tentative.html?Delete,ol [ Pass ] # wpt_use_checked_in_metadata -external/wpt/input-events/input-events-get-target-ranges-deleting-in-list-items.tentative.html?Delete,ul [ Pass ] # wpt_use_checked_in_metadata -external/wpt/input-events/input-events-get-target-ranges-during-and-after-dispatch.tentative.html [ Pass ] # wpt_use_checked_in_metadata -external/wpt/input-events/input-events-get-target-ranges-forwarddelete.tentative.html [ Skip ] -external/wpt/input-events/input-events-get-target-ranges-joining-dl-element-and-another-list.tentative.html?Backspace [ Pass ] # wpt_use_checked_in_metadata -external/wpt/input-events/input-events-get-target-ranges-joining-dl-element-and-another-list.tentative.html?Delete [ Pass ] # wpt_use_checked_in_metadata -external/wpt/input-events/input-events-get-target-ranges-joining-dl-elements.tentative.html?Backspace [ Pass ] # wpt_use_checked_in_metadata -external/wpt/input-events/input-events-get-target-ranges-joining-dl-elements.tentative.html?Delete [ Pass ] # wpt_use_checked_in_metadata -external/wpt/input-events/input-events-get-target-ranges-non-collapsed-selection.tentative.html?Backspace [ Pass ] # wpt_use_checked_in_metadata -external/wpt/input-events/input-events-get-target-ranges-non-collapsed-selection.tentative.html?Delete [ Pass ] # wpt_use_checked_in_metadata -external/wpt/input-events/input-events-get-target-ranges-non-collapsed-selection.tentative.html?TypingA [ Pass ] # wpt_use_checked_in_metadata -external/wpt/input-events/input-events-get-target-ranges.html [ Pass ] # wpt_use_checked_in_metadata -external/wpt/input-events/input-events-typing.html [ Pass ] # wpt_use_checked_in_metadata -external/wpt/input-events/select-event-drag-remove.html [ Pass ] # wpt_use_checked_in_metadata -external/wpt/pointerevents/idlharness.window.html [ Pass ] # wpt_use_checked_in_metadata -external/wpt/pointerevents/inheritance.html [ Pass ] # wpt_use_checked_in_metadata -external/wpt/pointerevents/mouse-pointer-boundary-events-for-shadowdom.html [ Pass ] # wpt_use_checked_in_metadata -external/wpt/pointerevents/pointerevent_attributes_hoverable_pointers.html [ Pass ] # wpt_use_checked_in_metadata -external/wpt/pointerevents/pointerevent_auxclick_is_a_pointerevent.html [ Pass ] # wpt_use_checked_in_metadata -external/wpt/pointerevents/pointerevent_boundary_events_at_implicit_release_hoverable_pointers.html [ Pass ] # wpt_use_checked_in_metadata -external/wpt/pointerevents/pointerevent_boundary_events_in_capturing.html [ Pass ] # wpt_use_checked_in_metadata -external/wpt/pointerevents/pointerevent_capture_mouse.html [ Pass ] # wpt_use_checked_in_metadata -external/wpt/pointerevents/pointerevent_capture_suppressing_mouse.html [ Pass ] # wpt_use_checked_in_metadata -external/wpt/pointerevents/pointerevent_click_during_capture.html [ Pass ] # wpt_use_checked_in_metadata -external/wpt/pointerevents/pointerevent_click_is_a_pointerevent.html [ Pass ] # wpt_use_checked_in_metadata -external/wpt/pointerevents/pointerevent_coalesced_events_attributes.html [ Pass ] # wpt_use_checked_in_metadata -external/wpt/pointerevents/pointerevent_constructor.html [ Pass ] # wpt_use_checked_in_metadata -external/wpt/pointerevents/pointerevent_contextmenu_is_a_pointerevent.html [ Pass ] # wpt_use_checked_in_metadata -external/wpt/pointerevents/pointerevent_disabled_form_control.html [ Pass ] # wpt_use_checked_in_metadata -external/wpt/pointerevents/pointerevent_element_haspointercapture.html [ Pass ] # wpt_use_checked_in_metadata -external/wpt/pointerevents/pointerevent_element_haspointercapture_release_pending_capture.html [ Pass ] # wpt_use_checked_in_metadata -external/wpt/pointerevents/pointerevent_iframe-touch-action-none_touch.html [ Pass ] # wpt_use_checked_in_metadata -external/wpt/pointerevents/pointerevent_lostpointercapture_for_disconnected_node.html [ Pass ] # wpt_use_checked_in_metadata -external/wpt/pointerevents/pointerevent_lostpointercapture_for_disconnected_node_in_shadow_dom.html [ Pass ] # wpt_use_checked_in_metadata -external/wpt/pointerevents/pointerevent_lostpointercapture_for_disconnected_shadow_host.html [ Pass ] # wpt_use_checked_in_metadata -external/wpt/pointerevents/pointerevent_lostpointercapture_is_first.html [ Pass ] # wpt_use_checked_in_metadata -external/wpt/pointerevents/pointerevent_mouse_capture_change_hover.html [ Pass ] # wpt_use_checked_in_metadata -external/wpt/pointerevents/pointerevent_mouse_pointercapture_inactivate_pointer.html [ Pass ] # wpt_use_checked_in_metadata -external/wpt/pointerevents/pointerevent_on_event_handlers.html [ Pass ] # wpt_use_checked_in_metadata -external/wpt/pointerevents/pointerevent_pointercapture-in-custom-element.html [ Pass ] # wpt_use_checked_in_metadata -external/wpt/pointerevents/pointerevent_pointercapture-in-shadow-dom.html [ Pass ] # wpt_use_checked_in_metadata -external/wpt/pointerevents/pointerevent_pointercapture-not-lost-in-chorded-buttons.html [ Pass ] # wpt_use_checked_in_metadata -external/wpt/pointerevents/pointerevent_pointercapture_in_frame.html [ Pass ] # wpt_use_checked_in_metadata -external/wpt/pointerevents/pointerevent_pointerenter_does_not_bubble.html [ Pass ] # wpt_use_checked_in_metadata -external/wpt/pointerevents/pointerevent_pointerleave_descendant_over.html [ Pass ] # wpt_use_checked_in_metadata -external/wpt/pointerevents/pointerevent_pointerleave_descendants.html [ Pass ] # wpt_use_checked_in_metadata -external/wpt/pointerevents/pointerevent_pointerleave_does_not_bubble.html [ Pass ] # wpt_use_checked_in_metadata -external/wpt/pointerevents/pointerevent_pointermove.html [ Pass ] # wpt_use_checked_in_metadata -external/wpt/pointerevents/pointerevent_pointermove_isprimary_same_as_pointerdown.html [ Pass ] # wpt_use_checked_in_metadata -external/wpt/pointerevents/pointerevent_pointermove_on_chorded_mouse_button.html [ Pass ] # wpt_use_checked_in_metadata -external/wpt/pointerevents/pointerevent_pointerout_pen.html [ Pass ] # wpt_use_checked_in_metadata -external/wpt/pointerevents/pointerevent_pointerout_received_once.html [ Pass ] # wpt_use_checked_in_metadata -external/wpt/pointerevents/pointerevent_pointerrawupdate.html [ Pass ] # wpt_use_checked_in_metadata -external/wpt/pointerevents/pointerevent_releasepointercapture_events_to_original_target.html [ Pass ] # wpt_use_checked_in_metadata -external/wpt/pointerevents/pointerevent_releasepointercapture_invalid_pointerid.html [ Pass ] # wpt_use_checked_in_metadata -external/wpt/pointerevents/pointerevent_releasepointercapture_onpointerup_mouse.html [ Pass ] # wpt_use_checked_in_metadata -external/wpt/pointerevents/pointerevent_releasepointercapture_pointerup_mouse.html [ Pass ] # wpt_use_checked_in_metadata -external/wpt/pointerevents/pointerevent_releasepointercapture_pointerup_touch.html [ Pass ] # wpt_use_checked_in_metadata -external/wpt/pointerevents/pointerevent_releasepointercapture_release_right_after_capture.html [ Pass ] # wpt_use_checked_in_metadata -external/wpt/pointerevents/pointerevent_root_computed_style.html [ Pass ] # wpt_use_checked_in_metadata -external/wpt/pointerevents/pointerevent_root_hit_test.html [ Pass ] # wpt_use_checked_in_metadata -external/wpt/pointerevents/pointerevent_sequence_at_implicit_release_on_click.html [ Pass ] # wpt_use_checked_in_metadata -external/wpt/pointerevents/pointerevent_sequence_at_implicit_release_on_drag.html [ Pass ] # wpt_use_checked_in_metadata -external/wpt/pointerevents/pointerevent_setpointercapture_disconnected.html [ Pass ] # wpt_use_checked_in_metadata -external/wpt/pointerevents/pointerevent_setpointercapture_inactive_button_mouse.html [ Pass ] # wpt_use_checked_in_metadata -external/wpt/pointerevents/pointerevent_setpointercapture_invalid_pointerid.html [ Pass ] # wpt_use_checked_in_metadata -external/wpt/pointerevents/pointerevent_setpointercapture_override_pending_capture_element.html [ Pass ] # wpt_use_checked_in_metadata -external/wpt/pointerevents/pointerevent_setpointercapture_pointerup_mouse.html [ Pass ] # wpt_use_checked_in_metadata -external/wpt/pointerevents/pointerevent_setpointercapture_pointerup_touch.html [ Pass ] # wpt_use_checked_in_metadata -external/wpt/pointerevents/pointerevent_setpointercapture_relatedtarget.html [ Pass ] # wpt_use_checked_in_metadata -external/wpt/pointerevents/pointerevent_setpointercapture_to_same_element_twice.html [ Pass ] # wpt_use_checked_in_metadata -external/wpt/pointerevents/pointerevent_suppress_compat_events_on_click.html [ Pass ] # wpt_use_checked_in_metadata -external/wpt/pointerevents/pointerevent_suppress_compat_events_on_drag_mouse.html [ Pass ] # wpt_use_checked_in_metadata -external/wpt/pointerevents/pointerevent_tiltX_tiltY_to_azimuth_altitude.html [ Pass ] # wpt_use_checked_in_metadata -external/wpt/pointerevents/pointerevent_touch-action-button-none-test_touch.html [ Pass ] # wpt_use_checked_in_metadata -external/wpt/pointerevents/pointerevent_touch-action-illegal.html [ Pass ] # wpt_use_checked_in_metadata -external/wpt/pointerevents/pointerevent_touch-action-inherit_child-auto-child-none_touch.html [ Pass ] # wpt_use_checked_in_metadata -external/wpt/pointerevents/pointerevent_touch-action-inherit_child-none_touch.html [ Pass ] # wpt_use_checked_in_metadata -external/wpt/pointerevents/pointerevent_touch-action-inherit_child-pan-x-child-pan-y_touch.html [ Pass ] # wpt_use_checked_in_metadata -external/wpt/pointerevents/pointerevent_touch-action-inherit_parent-none_touch.html [ Pass ] # wpt_use_checked_in_metadata -external/wpt/pointerevents/pointerevent_touch-action-keyboard.html [ Pass ] # wpt_use_checked_in_metadata -external/wpt/pointerevents/pointerevent_touch-action-mouse.html [ Pass ] # wpt_use_checked_in_metadata -external/wpt/pointerevents/pointerevent_touch-action-none-css_touch.html [ Pass ] # wpt_use_checked_in_metadata -external/wpt/pointerevents/pointerevent_touch-action-none-on-body-when-style-propagates-to-viewport_touch.html [ Pass ] # wpt_use_checked_in_metadata -external/wpt/pointerevents/pointerevent_touch-action-svg-none-test_touch.html [ Pass ] # wpt_use_checked_in_metadata -external/wpt/pointerevents/pointerevent_touch-action-verification.html [ Pass ] # wpt_use_checked_in_metadata -external/wpt/pointerevents/pointerevent_touch-adjustment_click_target.html [ Pass ] # wpt_use_checked_in_metadata -external/wpt/pointerevents/compat/pointerevent_compat-mouse-events-when-removing-nodes.html [ Pass ] # wpt_use_checked_in_metadata -external/wpt/pointerevents/compat/pointerevent_mouse-on-object.html [ Pass ] # wpt_use_checked_in_metadata -external/wpt/pointerevents/compat/pointerevent_mouse-pointer-on-scrollbar.html [ Pass ] # wpt_use_checked_in_metadata -external/wpt/pointerevents/compat/pointerevent_mouse-pointer-preventdefault.html [ Pass ] # wpt_use_checked_in_metadata -external/wpt/pointerevents/compat/pointerevent_mouse-pointer-updown-events.html [ Pass ] # wpt_use_checked_in_metadata -external/wpt/pointerevents/compat/pointerevent_mouseevent_key_pressed.html [ Pass ] # wpt_use_checked_in_metadata -external/wpt/pointerevents/compat/pointerevent_touch-action-verification.html [ Pass ] # wpt_use_checked_in_metadata -external/wpt/pointerevents/parsing/touch-action-computed.html [ Pass ] # wpt_use_checked_in_metadata -external/wpt/pointerevents/parsing/touch-action-invalid.html [ Pass ] # wpt_use_checked_in_metadata -external/wpt/pointerevents/parsing/touch-action-valid.html [ Pass ] # wpt_use_checked_in_metadata -external/wpt/pointerevents/pointerlock/pointerevent_coordinates_when_locked.html [ Pass ] # wpt_use_checked_in_metadata -external/wpt/pointerevents/pointerlock/pointerevent_getCoalescedEvents_when_pointerlocked.html [ Pass ] # wpt_use_checked_in_metadata -external/wpt/pointerevents/pointerlock/pointerevent_movementxy.html [ Pass ] # wpt_use_checked_in_metadata -external/wpt/pointerevents/pointerlock/pointerevent_movementxy_with_pointerlock.html [ Pass ] # wpt_use_checked_in_metadata -external/wpt/pointerevents/pointerlock/pointerevent_pointerlock_after_pointercapture.html [ Pass ] # wpt_use_checked_in_metadata -external/wpt/pointerevents/pointerlock/pointerevent_pointerlock_supercedes_capture.html [ Pass ] # wpt_use_checked_in_metadata -external/wpt/pointerevents/pointerlock/pointerevent_pointermove_in_pointerlock.html [ Pass ] # wpt_use_checked_in_metadata -external/wpt/pointerevents/pointerlock/pointerevent_pointermove_on_chorded_mouse_button_when_locked.html [ Pass ] # wpt_use_checked_in_metadata -external/wpt/touch-events/historical.html [ Pass ] # wpt_use_checked_in_metadata -external/wpt/touch-events/idlharness.window.html [ Pass ] # wpt_use_checked_in_metadata -external/wpt/touch-events/multi-touch-interactions.html [ Pass ] # wpt_use_checked_in_metadata -external/wpt/touch-events/multi-touch-interfaces.html [ Pass ] # wpt_use_checked_in_metadata -external/wpt/touch-events/single-touch.html [ Pass ] # wpt_use_checked_in_metadata -external/wpt/touch-events/touch-globaleventhandler-interface.html [ Pass ] # wpt_use_checked_in_metadata -external/wpt/touch-events/touch-retargeting.html [ Pass ] # wpt_use_checked_in_metadata -external/wpt/touch-events/touch-touchevent-constructor.html [ Pass ] # wpt_use_checked_in_metadata -external/wpt/uievents/idlharness.window.html [ Pass ] # wpt_use_checked_in_metadata -external/wpt/uievents/click/auxclick_event.html [ Pass ] # wpt_use_checked_in_metadata -external/wpt/uievents/click/click_event_target_child_parent.html [ Pass ] # wpt_use_checked_in_metadata -external/wpt/uievents/click/click_event_target_siblings.html [ Pass ] # wpt_use_checked_in_metadata -external/wpt/uievents/click/click_events_on_input.html [ Pass ] # wpt_use_checked_in_metadata -external/wpt/uievents/click/dblclick_event_mouse.html [ Pass ] # wpt_use_checked_in_metadata -external/wpt/uievents/constructors/inputevent-constructor.html [ Pass ] # wpt_use_checked_in_metadata -external/wpt/uievents/interface/click-event.htm [ Pass ] # wpt_use_checked_in_metadata -external/wpt/uievents/keyboard/modifier-keys-combinations.html [ Pass ] # wpt_use_checked_in_metadata -external/wpt/uievents/keyboard/modifier-keys.html [ Pass ] # wpt_use_checked_in_metadata -external/wpt/uievents/legacy/Event-subclasses-init.html [ Pass ] # wpt_use_checked_in_metadata -external/wpt/uievents/legacy-domevents-tests/approved/ProcessingInstruction.DOMCharacterDataModified.html [ Pass ] # wpt_use_checked_in_metadata -external/wpt/uievents/legacy-domevents-tests/approved/dispatchEvent.click.checkbox.html [ Pass ] # wpt_use_checked_in_metadata -external/wpt/uievents/legacy-domevents-tests/approved/domnodeinserted.html [ Pass ] # wpt_use_checked_in_metadata -external/wpt/uievents/legacy-domevents-tests/approved/stopImmediatePropagation.effect.html [ Pass ] # wpt_use_checked_in_metadata -external/wpt/uievents/legacy-domevents-tests/approved/stopPropagation.deferred.effect.html [ Pass ] # wpt_use_checked_in_metadata -external/wpt/uievents/legacy-domevents-tests/submissions/Microsoft/converted/EventListener.dispatch.new.event.html [ Pass ] # wpt_use_checked_in_metadata -external/wpt/uievents/mouse/layout_change_should_fire_mouseover.html [ Pass ] # wpt_use_checked_in_metadata -external/wpt/uievents/mouse/mouse_buttons_back_forward.html [ Pass ] # wpt_use_checked_in_metadata -external/wpt/uievents/mouse/mouseevent_move_button.html [ Pass ] # wpt_use_checked_in_metadata -external/wpt/uievents/order-of-events/focus-events/focus-automated-blink-webkit.html [ Pass ] # wpt_use_checked_in_metadata -external/wpt/uievents/order-of-events/focus-events/focus-management-expectations.html [ Pass ] # wpt_use_checked_in_metadata -external/wpt/uievents/order-of-events/focus-events/focus.html [ Pass ] # wpt_use_checked_in_metadata -external/wpt/uievents/order-of-events/mouse-events/click-cancel.html [ Pass ] # wpt_use_checked_in_metadata -external/wpt/uievents/order-of-events/mouse-events/mouseover-out.html [ Pass ] # wpt_use_checked_in_metadata -external/wpt/uievents/order-of-events/mouse-events/wheel-basic.html [ Pass ] # wpt_use_checked_in_metadata -external/wpt/uievents/order-of-events/mouse-events/wheel-scrolling.html [ Pass ] # wpt_use_checked_in_metadata - -external/wpt/webauthn/createcredential-badargs-authnrselection.https.html [ Pass ] # wpt_use_checked_in_metadata -external/wpt/webauthn/createcredential-badargs-challenge.https.html [ Pass ] # wpt_use_checked_in_metadata -external/wpt/webauthn/createcredential-badargs-rp.https.html [ Pass ] # wpt_use_checked_in_metadata -external/wpt/webauthn/createcredential-badargs-user.https.html [ Pass ] # wpt_use_checked_in_metadata -external/wpt/webauthn/createcredential-excludecredentials.https.html [ Pass ] # wpt_use_checked_in_metadata -external/wpt/webauthn/createcredential-extensions.https.html [ Pass ] # wpt_use_checked_in_metadata -external/wpt/webauthn/createcredential-getpublickey.https.html [ Pass ] # wpt_use_checked_in_metadata -external/wpt/webauthn/createcredential-large-blob-not-supported.https.html [ Pass ] # wpt_use_checked_in_metadata -external/wpt/webauthn/createcredential-large-blob-supported.https.html [ Pass ] # wpt_use_checked_in_metadata -external/wpt/webauthn/createcredential-passing.https.html [ Pass ] # wpt_use_checked_in_metadata -external/wpt/webauthn/createcredential-pubkeycredparams.https.html [ Pass ] # wpt_use_checked_in_metadata -external/wpt/webauthn/createcredential-resident-key.https.html [ Pass ] # wpt_use_checked_in_metadata -external/wpt/webauthn/createcredential-timeout.https.html [ Pass ] # wpt_use_checked_in_metadata -external/wpt/webauthn/getcredential-badargs-rpid.https.html [ Pass ] # wpt_use_checked_in_metadata -external/wpt/webauthn/getcredential-badargs-userverification.https.html [ Pass ] # wpt_use_checked_in_metadata -external/wpt/webauthn/getcredential-extensions.https.html [ Pass ] # wpt_use_checked_in_metadata -external/wpt/webauthn/getcredential-large-blob-not-supported.https.html [ Pass ] # wpt_use_checked_in_metadata -external/wpt/webauthn/getcredential-large-blob-supported.https.html [ Pass ] # wpt_use_checked_in_metadata -external/wpt/webauthn/getcredential-passing.https.html [ Pass ] # wpt_use_checked_in_metadata -external/wpt/webauthn/getcredential-rk-passing.https.html [ Pass ] # wpt_use_checked_in_metadata -external/wpt/webauthn/getcredential-timeout.https.html [ Pass ] # wpt_use_checked_in_metadata -external/wpt/webauthn/idlharness-manual.https.window.js [ Pass ] # wpt_use_checked_in_metadata -external/wpt/webauthn/idlharness.https.window.html [ Pass ] # wpt_use_checked_in_metadata -external/wpt/webauthn/securecontext.http.html [ Pass ] # wpt_use_checked_in_metadata -external/wpt/webauthn/securecontext.https.html [ Pass ] # wpt_use_checked_in_metadata -external/wpt/webauthn/webauthn-testdriver-basic.https.html [ Pass ] # wpt_use_checked_in_metadata - -crbug.com/1208893 external/wpt/pointerevents/compat/pointerevent_touch-action_two-finger_interaction.html [ Failure ] -crbug.com/1208893 external/wpt/pointerevents/pointerevent_attributes_nohover_pointers.html [ Failure ] -crbug.com/1208893 external/wpt/pointerevents/pointerevent_change-touch-action-onpointerdown_touch.html [ Failure ] -crbug.com/1208893 external/wpt/pointerevents/pointerevent_click_is_a_pointerevent_multiple_clicks.html?touch [ Failure ] -crbug.com/1208893 external/wpt/pointerevents/pointerevent_fractional_coordinates.html?touch [ Failure ] -crbug.com/1208893 external/wpt/pointerevents/pointerevent_pointercancel_touch.html [ Failure ] -crbug.com/1208893 external/wpt/pointerevents/pointerevent_pointerleave_after_pointercancel_touch.html [ Failure ] -crbug.com/1208893 external/wpt/pointerevents/pointerevent_pointerout_after_pointercancel_touch.html [ Failure ] -crbug.com/1208893 external/wpt/pointerevents/pointerevent_releasepointercapture_onpointercancel_touch.html [ Failure ] -crbug.com/1208893 external/wpt/pointerevents/pointerevent_touch-action-auto-css_touch.html [ Failure ] -crbug.com/1208893 external/wpt/pointerevents/pointerevent_touch-action-inherit_child-pan-x-child-pan-x_touch.html [ Failure ] -crbug.com/1208893 external/wpt/pointerevents/pointerevent_touch-action-inherit_highest-parent-none_touch.html [ Failure ] -crbug.com/1208893 external/wpt/pointerevents/pointerevent_touch-action-pan-down-css_touch.html [ Failure ] -crbug.com/1208893 external/wpt/pointerevents/pointerevent_touch-action-pan-left-css_touch.html [ Failure ] -crbug.com/1208893 external/wpt/pointerevents/pointerevent_touch-action-pan-right-css_touch.html [ Failure ] -crbug.com/1208893 external/wpt/pointerevents/pointerevent_touch-action-pan-up-css_touch.html [ Failure ] -crbug.com/1208893 external/wpt/pointerevents/pointerevent_touch-action-pan-x-css_touch.html [ Failure ] -crbug.com/1208893 external/wpt/pointerevents/pointerevent_touch-action-pan-x-pan-y_touch.html [ Failure ] -crbug.com/1208893 external/wpt/pointerevents/pointerevent_touch-action-pan-y-css_touch.html [ Failure ] -crbug.com/1208893 external/wpt/pointerevents/pointerevent_touch-action-span-none-test_touch.html [ Failure ] -crbug.com/1208893 external/wpt/pointerevents/pointerevent_touch-action-table-none-test_touch.html [ Failure ] - -crbug.com/1208893 external/wpt/webauthn/createcredential-minpinlength.https.html [ Failure ]
diff --git a/third_party/blink/web_tests/android/ChromeWPTOverrideExpectations b/third_party/blink/web_tests/android/ChromeWPTOverrideExpectations deleted file mode 100644 index 8d8051e9..0000000 --- a/third_party/blink/web_tests/android/ChromeWPTOverrideExpectations +++ /dev/null
@@ -1,1904 +0,0 @@ -# results: [ Failure Crash Timeout Pass Skip ] -# conflict_resolution: Override - -# This file will be used to add override expectations for WPT tests when running on Clank. -# Expectations with bug crbug.com/1050754 were created as preliminary expectations in CL -# crrev.com/c/2070826. Several test expectations below will be moved to the AndroidWPTNeverFixTests -# file. When the test failures below are triaged, new bugs will be created and we will change the -# bug for the expectation to the new bug. - -# Test fails when run on Android. -crbug.com/1197454 external/wpt/document-policy/experimental-features/unsized-media.tentative.https.sub.html [ Failure ] - -# https://crbug.com/1126079 -crbug.com/1126079 external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/access-from-coop-page-to-openee_coop-ro.https.html [ Crash Pass ] - -# https://crbug.com/1145401 -crbug.com/1050754 external/wpt/presentation-api/controlling-ua/getAvailability.https.html [ Failure ] - -# Several scroll animations tests fail in WebLayer and Clank. -crbug.com/1198063 external/wpt/scroll-animations/css/at-scroll-timeline-start-end.html [ Failure ] -crbug.com/1198063 external/wpt/scroll-animations/current-time-root-scroller.html [ Failure ] -crbug.com/1198063 external/wpt/scroll-animations/idlharness.window.html [ Failure ] -crbug.com/1198063 external/wpt/scroll-animations/progress-based-current-time.tenative.html [ Failure ] -crbug.com/1198063 external/wpt/scroll-animations/scroll-timeline-snapshotting.html [ Timeout ] - -# https://crbug.com/154571: SharedWorker is not supported on Android. -crbug.com/1050754 external/wpt/background-fetch/idlharness.https.any.sharedworker.html [ Failure ] -crbug.com/1190392 external/wpt/trusted-types/WorkerGlobalScope-eval.html [ Failure ] -crbug.com/1190392 external/wpt/trusted-types/WorkerGlobalScope-importScripts.html [ Failure ] -crbug.com/1190392 external/wpt/trusted-types/worker-constructor.https.html [ Failure ] -crbug.com/1050754 external/wpt/content-index/idlharness.https.any.sharedworker.html [ Failure ] -crbug.com/1317977 external/wpt/content-security-policy/gen/top.http-rp/script-src-self/sharedworker-classic.http.html [ Failure ] -crbug.com/1317977 external/wpt/content-security-policy/gen/top.http-rp/script-src-self/sharedworker-classic.https.html [ Failure ] -crbug.com/1317977 external/wpt/content-security-policy/gen/top.http-rp/script-src-self/sharedworker-import-data.http.html [ Failure ] -crbug.com/1317977 external/wpt/content-security-policy/gen/top.http-rp/script-src-self/sharedworker-import-data.https.html [ Failure ] -crbug.com/1317977 external/wpt/content-security-policy/gen/top.http-rp/script-src-self/sharedworker-import.http.html [ Failure ] -crbug.com/1317977 external/wpt/content-security-policy/gen/top.http-rp/script-src-self/sharedworker-import.https.html [ Failure ] -crbug.com/1317977 external/wpt/content-security-policy/gen/top.http-rp/script-src-self/sharedworker-module.http.html [ Failure ] -crbug.com/1317977 external/wpt/content-security-policy/gen/top.http-rp/script-src-self/sharedworker-module.https.html [ Failure ] -crbug.com/1317977 external/wpt/content-security-policy/gen/top.http-rp/script-src-wildcard/sharedworker-classic.http.html [ Failure ] -crbug.com/1317977 external/wpt/content-security-policy/gen/top.http-rp/script-src-wildcard/sharedworker-classic.https.html [ Failure ] -crbug.com/1317977 external/wpt/content-security-policy/gen/top.http-rp/script-src-wildcard/sharedworker-import-data.http.html [ Failure ] -crbug.com/1317977 external/wpt/content-security-policy/gen/top.http-rp/script-src-wildcard/sharedworker-import-data.https.html [ Failure ] -crbug.com/1317977 external/wpt/content-security-policy/gen/top.http-rp/script-src-wildcard/sharedworker-import.http.html [ Failure ] -crbug.com/1317977 external/wpt/content-security-policy/gen/top.http-rp/script-src-wildcard/sharedworker-import.https.html [ Failure ] -crbug.com/1317977 external/wpt/content-security-policy/gen/top.http-rp/script-src-wildcard/sharedworker-module.http.html [ Failure ] -crbug.com/1317977 external/wpt/content-security-policy/gen/top.http-rp/script-src-wildcard/sharedworker-module.https.html [ Failure ] -crbug.com/1317977 external/wpt/content-security-policy/gen/top.http-rp/worker-src-none/sharedworker-classic.http.html [ Failure ] -crbug.com/1317977 external/wpt/content-security-policy/gen/top.http-rp/worker-src-none/sharedworker-classic.https.html [ Failure ] -crbug.com/1317977 external/wpt/content-security-policy/gen/top.http-rp/worker-src-none/sharedworker-import-data.http.html [ Failure ] -crbug.com/1317977 external/wpt/content-security-policy/gen/top.http-rp/worker-src-none/sharedworker-import-data.https.html [ Failure ] -crbug.com/1317977 external/wpt/content-security-policy/gen/top.http-rp/worker-src-none/sharedworker-import.http.html [ Failure ] -crbug.com/1317977 external/wpt/content-security-policy/gen/top.http-rp/worker-src-none/sharedworker-import.https.html [ Failure ] -crbug.com/1317977 external/wpt/content-security-policy/gen/top.http-rp/worker-src-none/sharedworker-module.http.html [ Failure ] -crbug.com/1317977 external/wpt/content-security-policy/gen/top.http-rp/worker-src-none/sharedworker-module.https.html [ Failure ] -crbug.com/1317977 external/wpt/content-security-policy/gen/top.http-rp/worker-src-self/sharedworker-classic.http.html [ Failure ] -crbug.com/1317977 external/wpt/content-security-policy/gen/top.http-rp/worker-src-self/sharedworker-classic.https.html [ Failure ] -crbug.com/1317977 external/wpt/content-security-policy/gen/top.http-rp/worker-src-self/sharedworker-import-data.http.html [ Failure ] -crbug.com/1317977 external/wpt/content-security-policy/gen/top.http-rp/worker-src-self/sharedworker-import-data.https.html [ Failure ] -crbug.com/1317977 external/wpt/content-security-policy/gen/top.http-rp/worker-src-self/sharedworker-import.http.html [ Failure ] -crbug.com/1317977 external/wpt/content-security-policy/gen/top.http-rp/worker-src-self/sharedworker-import.https.html [ Failure ] -crbug.com/1317977 external/wpt/content-security-policy/gen/top.http-rp/worker-src-self/sharedworker-module.http.html [ Failure ] -crbug.com/1317977 external/wpt/content-security-policy/gen/top.http-rp/worker-src-self/sharedworker-module.https.html [ Failure ] -crbug.com/1317977 external/wpt/content-security-policy/gen/top.http-rp/worker-src-wildcard/sharedworker-classic.http.html [ Failure ] -crbug.com/1317977 external/wpt/content-security-policy/gen/top.http-rp/worker-src-wildcard/sharedworker-classic.https.html [ Failure ] -crbug.com/1317977 external/wpt/content-security-policy/gen/top.http-rp/worker-src-wildcard/sharedworker-import-data.http.html [ Failure ] -crbug.com/1317977 external/wpt/content-security-policy/gen/top.http-rp/worker-src-wildcard/sharedworker-import-data.https.html [ Failure ] -crbug.com/1317977 external/wpt/content-security-policy/gen/top.http-rp/worker-src-wildcard/sharedworker-import.http.html [ Failure ] -crbug.com/1317977 external/wpt/content-security-policy/gen/top.http-rp/worker-src-wildcard/sharedworker-import.https.html [ Failure ] -crbug.com/1317977 external/wpt/content-security-policy/gen/top.http-rp/worker-src-wildcard/sharedworker-module.http.html [ Failure ] -crbug.com/1317977 external/wpt/content-security-policy/gen/top.http-rp/worker-src-wildcard/sharedworker-module.https.html [ Failure ] -crbug.com/1317977 external/wpt/content-security-policy/gen/top.meta/script-src-self/sharedworker-classic.http.html [ Failure ] -crbug.com/1317977 external/wpt/content-security-policy/gen/top.meta/script-src-self/sharedworker-classic.https.html [ Failure ] -crbug.com/1317977 external/wpt/content-security-policy/gen/top.meta/script-src-self/sharedworker-import-data.http.html [ Failure ] -crbug.com/1317977 external/wpt/content-security-policy/gen/top.meta/script-src-self/sharedworker-import-data.https.html [ Failure ] -crbug.com/1317977 external/wpt/content-security-policy/gen/top.meta/script-src-self/sharedworker-import.http.html [ Failure ] -crbug.com/1317977 external/wpt/content-security-policy/gen/top.meta/script-src-self/sharedworker-import.https.html [ Failure ] -crbug.com/1317977 external/wpt/content-security-policy/gen/top.meta/script-src-self/sharedworker-module.http.html [ Failure ] -crbug.com/1317977 external/wpt/content-security-policy/gen/top.meta/script-src-self/sharedworker-module.https.html [ Failure ] -crbug.com/1317977 external/wpt/content-security-policy/gen/top.meta/script-src-wildcard/sharedworker-classic.http.html [ Failure ] -crbug.com/1317977 external/wpt/content-security-policy/gen/top.meta/script-src-wildcard/sharedworker-classic.https.html [ Failure ] -crbug.com/1317977 external/wpt/content-security-policy/gen/top.meta/script-src-wildcard/sharedworker-import-data.http.html [ Failure ] -crbug.com/1317977 external/wpt/content-security-policy/gen/top.meta/script-src-wildcard/sharedworker-import-data.https.html [ Failure ] -crbug.com/1317977 external/wpt/content-security-policy/gen/top.meta/script-src-wildcard/sharedworker-import.http.html [ Failure ] -crbug.com/1317977 external/wpt/content-security-policy/gen/top.meta/script-src-wildcard/sharedworker-import.https.html [ Failure ] -crbug.com/1317977 external/wpt/content-security-policy/gen/top.meta/script-src-wildcard/sharedworker-module.http.html [ Failure ] -crbug.com/1317977 external/wpt/content-security-policy/gen/top.meta/script-src-wildcard/sharedworker-module.https.html [ Failure ] -crbug.com/1317977 external/wpt/content-security-policy/gen/top.meta/worker-src-none/sharedworker-classic.http.html [ Failure ] -crbug.com/1317977 external/wpt/content-security-policy/gen/top.meta/worker-src-none/sharedworker-classic.https.html [ Failure ] -crbug.com/1317977 external/wpt/content-security-policy/gen/top.meta/worker-src-none/sharedworker-import-data.http.html [ Failure ] -crbug.com/1317977 external/wpt/content-security-policy/gen/top.meta/worker-src-none/sharedworker-import-data.https.html [ Failure ] -crbug.com/1317977 external/wpt/content-security-policy/gen/top.meta/worker-src-none/sharedworker-import.http.html [ Failure ] -crbug.com/1317977 external/wpt/content-security-policy/gen/top.meta/worker-src-none/sharedworker-import.https.html [ Failure ] -crbug.com/1317977 external/wpt/content-security-policy/gen/top.meta/worker-src-none/sharedworker-module.http.html [ Failure ] -crbug.com/1317977 external/wpt/content-security-policy/gen/top.meta/worker-src-none/sharedworker-module.https.html [ Failure ] -crbug.com/1317977 external/wpt/content-security-policy/gen/top.meta/worker-src-self/sharedworker-classic.http.html [ Failure ] -crbug.com/1317977 external/wpt/content-security-policy/gen/top.meta/worker-src-self/sharedworker-classic.https.html [ Failure ] -crbug.com/1317977 external/wpt/content-security-policy/gen/top.meta/worker-src-self/sharedworker-import-data.http.html [ Failure ] -crbug.com/1317977 external/wpt/content-security-policy/gen/top.meta/worker-src-self/sharedworker-import-data.https.html [ Failure ] -crbug.com/1317977 external/wpt/content-security-policy/gen/top.meta/worker-src-self/sharedworker-import.http.html [ Failure ] -crbug.com/1317977 external/wpt/content-security-policy/gen/top.meta/worker-src-self/sharedworker-import.https.html [ Failure ] -crbug.com/1317977 external/wpt/content-security-policy/gen/top.meta/worker-src-self/sharedworker-module.http.html [ Failure ] -crbug.com/1317977 external/wpt/content-security-policy/gen/top.meta/worker-src-self/sharedworker-module.https.html [ Failure ] -crbug.com/1317977 external/wpt/content-security-policy/gen/top.meta/worker-src-wildcard/sharedworker-classic.http.html [ Failure ] -crbug.com/1317977 external/wpt/content-security-policy/gen/top.meta/worker-src-wildcard/sharedworker-classic.https.html [ Failure ] -crbug.com/1317977 external/wpt/content-security-policy/gen/top.meta/worker-src-wildcard/sharedworker-import-data.http.html [ Failure ] -crbug.com/1317977 external/wpt/content-security-policy/gen/top.meta/worker-src-wildcard/sharedworker-import-data.https.html [ Failure ] -crbug.com/1317977 external/wpt/content-security-policy/gen/top.meta/worker-src-wildcard/sharedworker-import.http.html [ Failure ] -crbug.com/1317977 external/wpt/content-security-policy/gen/top.meta/worker-src-wildcard/sharedworker-import.https.html [ Failure ] -crbug.com/1317977 external/wpt/content-security-policy/gen/top.meta/worker-src-wildcard/sharedworker-module.http.html [ Failure ] -crbug.com/1317977 external/wpt/content-security-policy/gen/top.meta/worker-src-wildcard/sharedworker-module.https.html [ Failure ] -crbug.com/1317977 external/wpt/content-security-policy/sandbox/shared-worker-sandbox.html [ Failure ] -crbug.com/1317977 external/wpt/content-security-policy/script-src/script-src-strict_dynamic_worker.https.html [ Failure ] -crbug.com/1317977 external/wpt/content-security-policy/script-src/worker-data-set-timeout.sub.html [ Failure ] -crbug.com/1317977 external/wpt/content-security-policy/script-src/worker-importscripts.sub.html [ Failure ] -crbug.com/1317977 external/wpt/content-security-policy/script-src/worker-set-timeout.sub.html [ Failure ] -crbug.com/1317977 external/wpt/content-security-policy/worker-src/shared-child.sub.html [ Failure ] -crbug.com/1317977 external/wpt/content-security-policy/worker-src/shared-fallback.sub.html [ Failure ] -crbug.com/1317977 external/wpt/content-security-policy/worker-src/shared-list.sub.html [ Failure ] -crbug.com/1317977 external/wpt/content-security-policy/worker-src/shared-none.sub.html [ Failure ] -crbug.com/1317977 external/wpt/content-security-policy/worker-src/shared-self.sub.html [ Failure ] -crbug.com/1317977 external/wpt/content-security-policy/worker-src/shared-worker-src-child-fallback-blocked.sub.html [ Failure ] -crbug.com/1317977 external/wpt/content-security-policy/worker-src/shared-worker-src-child-fallback.sub.html [ Failure ] -crbug.com/1317977 external/wpt/content-security-policy/worker-src/shared-worker-src-default-fallback.sub.html [ Failure ] -crbug.com/1317977 external/wpt/content-security-policy/worker-src/shared-worker-src-script-fallback.sub.html [ Failure ] -crbug.com/1317977 external/wpt/content-security-policy/worker-src/shared-worker-src-self-fallback.sub.html [ Failure ] -crbug.com/1317977 external/wpt/content-security-policy/connect-src/shared-worker-connect-src-allowed.sub.html [ Failure ] -crbug.com/1317977 external/wpt/content-security-policy/connect-src/shared-worker-connect-src-blocked.sub.html [ Failure ] -crbug.com/1198573 external/wpt/html/webappapis/microtask-queuing/queue-microtask-exceptions.any.sharedworker.html [ Failure ] -crbug.com/1198573 external/wpt/html/webappapis/microtask-queuing/queue-microtask.any.sharedworker.html [ Failure ] -crbug.com/1198573 external/wpt/html/webappapis/scripting/processing-model-2/integration-with-the-javascript-agent-formalism/requires-success.any.sharedworker.html [ Failure ] -crbug.com/1198573 external/wpt/html/webappapis/scripting/processing-model-2/unhandled-promise-rejections/promise-rejection-events.sharedworker.html [ Failure ] -crbug.com/1198573 external/wpt/html/webappapis/the-windoworworkerglobalscope-mixin/Worker_Self_Origin.html [ Failure ] - -# Failing background-fetch tests. -crbug.com/882282 external/wpt/background-fetch/fetch.https.window.html [ Failure Pass Timeout ] - -# crbug.com/178097: navigator.registerProtocolHandler is not available on Android. -crbug.com/1198573 external/wpt/html/webappapis/system-state-and-capabilities/the-navigator-object/historical.https.window.html [ Failure ] -crbug.com/1198573 external/wpt/html/webappapis/system-state-and-capabilities/the-navigator-object/protocol.https.html [ Failure ] -crbug.com/1198573 external/wpt/html/webappapis/system-state-and-capabilities/the-navigator-object/protocol.tentative.https.html [ Failure ] - -# Failing WebAppApi tests on Clank and WebLayer on Android -crbug.com/1198573 external/wpt/html/webappapis/dynamic-markup-insertion/document-write/047.html [ Crash Pass ] -crbug.com/1198573 external/wpt/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/history.window.html [ Crash Pass ] -crbug.com/1198573 external/wpt/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/reload.window.html [ Crash Pass ] -crbug.com/1198573 external/wpt/html/webappapis/scripting/processing-model-2/integration-with-the-javascript-agent-formalism/requires-success.any.worker.html [ Failure Pass ] -crbug.com/1198573 external/wpt/html/webappapis/scripting/processing-model-2/integration-with-the-javascript-job-queue/promise-job-entry-different-function-realm.html [ Crash Pass ] -crbug.com/1198573 external/wpt/html/webappapis/scripting/processing-model-2/integration-with-the-javascript-job-queue/promise-job-entry.html [ Crash Pass ] -crbug.com/1198573 external/wpt/html/webappapis/scripting/processing-model-2/runtime-error-in-setInterval.html [ Failure ] -crbug.com/1198573 external/wpt/html/webappapis/scripting/processing-model-2/runtime-error-in-setTimeout.html [ Failure ] -crbug.com/1198573 external/wpt/html/webappapis/user-prompts/cannot-show-simple-dialogs/confirm-different-origin-frame.sub.html [ Pass ] -crbug.com/1198573 external/wpt/html/webappapis/user-prompts/cannot-show-simple-dialogs/prompt-different-origin-frame.sub.html [ Pass ] - -# Failing CSP tests on Clank and WebLayer on Android -crbug.com/1198079 external/wpt/content-security-policy/embedded-enforcement/subsumption_algorithm-source_list-wildcards.html [ Failure ] -crbug.com/1198079 external/wpt/content-security-policy/gen/top.http-rp/script-src-self/worker-import.http.html [ Failure ] -crbug.com/1198079 external/wpt/content-security-policy/gen/top.http-rp/script-src-self/worker-import.https.html [ Failure ] -crbug.com/1198079 external/wpt/content-security-policy/gen/top.http-rp/script-src-self/worklet-animation-import-data.https.html [ Failure ] -crbug.com/1198079 external/wpt/content-security-policy/gen/top.http-rp/script-src-self/worklet-animation.https.html [ Failure ] -crbug.com/1198079 external/wpt/content-security-policy/gen/top.http-rp/script-src-self/worklet-audio-import-data.https.html [ Failure ] -crbug.com/1198079 external/wpt/content-security-policy/gen/top.http-rp/script-src-self/worklet-audio.https.html [ Failure ] -crbug.com/1198079 external/wpt/content-security-policy/gen/top.http-rp/script-src-self/worklet-layout-import-data.https.html [ Failure ] -crbug.com/1198079 external/wpt/content-security-policy/gen/top.http-rp/script-src-self/worklet-layout.https.html [ Failure ] -crbug.com/1198079 external/wpt/content-security-policy/gen/top.http-rp/script-src-self/worklet-paint-import-data.https.html [ Failure ] -crbug.com/1198079 external/wpt/content-security-policy/gen/top.http-rp/script-src-self/worklet-paint.https.html [ Failure ] -crbug.com/1198079 external/wpt/content-security-policy/gen/top.http-rp/script-src-wildcard/worklet-animation-import-data.https.html [ Failure ] -crbug.com/1198079 external/wpt/content-security-policy/gen/top.http-rp/script-src-wildcard/worklet-audio-import-data.https.html [ Failure ] -crbug.com/1198079 external/wpt/content-security-policy/gen/top.http-rp/script-src-wildcard/worklet-layout-import-data.https.html [ Failure ] -crbug.com/1198079 external/wpt/content-security-policy/gen/top.http-rp/script-src-wildcard/worklet-paint-import-data.https.html [ Failure ] -crbug.com/1198079 external/wpt/content-security-policy/gen/top.http-rp/worker-src-self/worker-import.http.html [ Failure ] -crbug.com/1198079 external/wpt/content-security-policy/gen/top.http-rp/worker-src-self/worker-import.https.html [ Failure ] -crbug.com/1198079 external/wpt/content-security-policy/gen/top.meta/script-src-self/worker-import.http.html [ Failure ] -crbug.com/1198079 external/wpt/content-security-policy/gen/top.meta/script-src-self/worker-import.https.html [ Failure ] -crbug.com/1198079 external/wpt/content-security-policy/gen/top.meta/script-src-self/worklet-animation-import-data.https.html [ Failure ] -crbug.com/1198079 external/wpt/content-security-policy/gen/top.meta/script-src-self/worklet-animation.https.html [ Failure ] -crbug.com/1198079 external/wpt/content-security-policy/gen/top.meta/script-src-self/worklet-audio-import-data.https.html [ Failure ] -crbug.com/1198079 external/wpt/content-security-policy/gen/top.meta/script-src-self/worklet-audio.https.html [ Failure ] -crbug.com/1198079 external/wpt/content-security-policy/gen/top.meta/script-src-self/worklet-layout-import-data.https.html [ Failure ] -crbug.com/1198079 external/wpt/content-security-policy/gen/top.meta/script-src-self/worklet-layout.https.html [ Failure ] -crbug.com/1198079 external/wpt/content-security-policy/gen/top.meta/script-src-self/worklet-paint-import-data.https.html [ Failure ] -crbug.com/1198079 external/wpt/content-security-policy/gen/top.meta/script-src-self/worklet-paint.https.html [ Failure ] -crbug.com/1198079 external/wpt/content-security-policy/gen/top.meta/script-src-wildcard/worklet-animation-import-data.https.html [ Failure ] -crbug.com/1198079 external/wpt/content-security-policy/gen/top.meta/script-src-wildcard/worklet-audio-import-data.https.html [ Failure ] -crbug.com/1198079 external/wpt/content-security-policy/gen/top.meta/script-src-wildcard/worklet-layout-import-data.https.html [ Failure ] -crbug.com/1198079 external/wpt/content-security-policy/gen/top.meta/script-src-wildcard/worklet-paint-import-data.https.html [ Failure ] -crbug.com/1198079 external/wpt/content-security-policy/gen/top.meta/worker-src-self/worker-import.http.html [ Failure ] -crbug.com/1198079 external/wpt/content-security-policy/gen/top.meta/worker-src-self/worker-import.https.html [ Failure ] -crbug.com/1198079 external/wpt/content-security-policy/navigate-to/spv-only-sent-to-initiator.sub.html [ Failure ] -crbug.com/1198079 external/wpt/content-security-policy/object-src/object-src-url-allowed.html [ Crash Failure ] -crbug.com/1198079 external/wpt/content-security-policy/object-src/object-src-url-embed-allowed.html [ Crash Failure ] -crbug.com/1198079 external/wpt/content-security-policy/object-src/object-src-url-redirect-allowed.html [ Crash Failure ] -crbug.com/1198079 external/wpt/content-security-policy/sandbox/service-worker-sandbox.https.html [ Failure ] -crbug.com/1198079 external/wpt/content-security-policy/script-src/hash-always-converted-to-utf-8/iso-8859-1.html [ Failure ] -crbug.com/1198079 external/wpt/content-security-policy/script-src/hash-always-converted-to-utf-8/iso-8859-3.html [ Failure ] -crbug.com/1198079 external/wpt/content-security-policy/script-src/hash-always-converted-to-utf-8/iso-8859-7.html [ Failure ] -crbug.com/1198079 external/wpt/content-security-policy/script-src/hash-always-converted-to-utf-8/iso-8859-9.html [ Failure ] -crbug.com/1198079 external/wpt/content-security-policy/securitypolicyviolation/blockeduri-eval.html [ Failure ] -crbug.com/1198079 external/wpt/content-security-policy/securitypolicyviolation/blockeduri-inline.html [ Failure ] -crbug.com/1198079 external/wpt/content-security-policy/securitypolicyviolation/idlharness.window.html [ Failure ] -crbug.com/1198079 external/wpt/content-security-policy/securitypolicyviolation/inside-shared-worker.html [ Failure ] -crbug.com/1198079 external/wpt/content-security-policy/securitypolicyviolation/securitypolicyviolation-block-cross-origin-image-from-script.sub.html [ Failure ] -crbug.com/1198079 external/wpt/content-security-policy/securitypolicyviolation/securitypolicyviolation-block-cross-origin-image.sub.html [ Failure ] -crbug.com/1198079 external/wpt/content-security-policy/securitypolicyviolation/securitypolicyviolation-block-image-from-script.sub.html [ Failure ] -crbug.com/1198079 external/wpt/content-security-policy/securitypolicyviolation/securitypolicyviolation-block-image.sub.html [ Failure ] -crbug.com/1198079 external/wpt/content-security-policy/style-src/inline-style-allowed-while-cloning-objects.sub.html [ Failure ] -crbug.com/1198079 external/wpt/content-security-policy/style-src/style-blocked.sub.html [ Failure ] - -# Reporting IDL failures on Android. -crbug.com/1198081 external/wpt/reporting/idlharness.any.html [ Failure ] -crbug.com/1198081 external/wpt/reporting/idlharness.any.worker.html [ Failure ] - -# Signed Exchange failures on Android. -crbug.com/1198085 external/wpt/signed-exchange/check-cert-request.tentative.html [ Failure ] -crbug.com/1198085 external/wpt/signed-exchange/fallback-to-another-sxg.tentative.html [ Failure ] -crbug.com/1198085 external/wpt/signed-exchange/reporting/sxg-reporting-navigation-cert_fetch_error-downgraded.tentative.html [ Failure ] -crbug.com/1198085 external/wpt/signed-exchange/reporting/sxg-reporting-navigation-cert_fetch_error.tentative.html [ Timeout ] -crbug.com/1198085 external/wpt/signed-exchange/reporting/sxg-reporting-navigation-cert_parse_error-downgraded.tentative.html [ Failure ] -crbug.com/1198085 external/wpt/signed-exchange/reporting/sxg-reporting-navigation-cert_parse_error.tentative.html [ Timeout ] -crbug.com/1198085 external/wpt/signed-exchange/reporting/sxg-reporting-navigation-cert_verification_error-downgraded.tentative.html [ Failure ] -crbug.com/1198085 external/wpt/signed-exchange/reporting/sxg-reporting-navigation-cert_verification_error.tentative.html [ Failure ] -crbug.com/1198085 external/wpt/signed-exchange/reporting/sxg-reporting-navigation-failed-zero-success-fraction.tentative.html [ Failure ] -crbug.com/1198085 external/wpt/signed-exchange/reporting/sxg-reporting-navigation-invalid_integrity_header.tentative.html [ Failure ] -crbug.com/1198085 external/wpt/signed-exchange/reporting/sxg-reporting-navigation-mi_error.tentative.html [ Failure ] -crbug.com/1198085 external/wpt/signed-exchange/reporting/sxg-reporting-navigation-ok-no-referrer.tentative.html [ Failure ] -crbug.com/1198085 external/wpt/signed-exchange/reporting/sxg-reporting-navigation-ok-origin-referrer.tentative.html [ Failure ] -crbug.com/1198085 external/wpt/signed-exchange/reporting/sxg-reporting-navigation-ok.tentative.html [ Failure ] -crbug.com/1198085 external/wpt/signed-exchange/reporting/sxg-reporting-navigation-signature_verification_error-downgraded.tentative.html [ Failure ] -crbug.com/1198085 external/wpt/signed-exchange/reporting/sxg-reporting-navigation-signature_verification_error.tentative.html [ Failure ] -crbug.com/1198085 external/wpt/signed-exchange/reporting/sxg-reporting-prefetch-cert_fetch_error-downgraded.tentative.html [ Failure ] -crbug.com/1198085 external/wpt/signed-exchange/reporting/sxg-reporting-prefetch-cert_fetch_error.tentative.html [ Timeout ] -crbug.com/1198085 external/wpt/signed-exchange/reporting/sxg-reporting-prefetch-cert_parse_error-downgraded.tentative.html [ Failure ] -crbug.com/1198085 external/wpt/signed-exchange/reporting/sxg-reporting-prefetch-cert_parse_error.tentative.html [ Timeout ] -crbug.com/1198085 external/wpt/signed-exchange/reporting/sxg-reporting-prefetch-cert_verification_error-downgraded.tentative.html [ Failure ] -crbug.com/1198085 external/wpt/signed-exchange/reporting/sxg-reporting-prefetch-cert_verification_error.tentative.html [ Failure ] -crbug.com/1198085 external/wpt/signed-exchange/reporting/sxg-reporting-prefetch-failed-zero-success-feaction.tentative.html [ Failure ] -crbug.com/1198085 external/wpt/signed-exchange/reporting/sxg-reporting-prefetch-invalid_integrity_header.tentative.html [ Failure ] -crbug.com/1198085 external/wpt/signed-exchange/reporting/sxg-reporting-prefetch-mi_error.tentative.html [ Failure ] -crbug.com/1198085 external/wpt/signed-exchange/reporting/sxg-reporting-prefetch-ok.tentative.html [ Failure ] -crbug.com/1198085 external/wpt/signed-exchange/reporting/sxg-reporting-prefetch-signature_verification_error-downgraded.tentative.html [ Failure ] -crbug.com/1198085 external/wpt/signed-exchange/reporting/sxg-reporting-prefetch-signature_verification_error.tentative.html [ Failure ] -crbug.com/1198085 external/wpt/signed-exchange/service-workers/sxg-sw-register-after-fallback.tentative.https.html [ Failure ] -crbug.com/1198085 external/wpt/signed-exchange/service-workers/sxg-sw-register.tentative.https.html [ Timeout ] -crbug.com/1198085 external/wpt/signed-exchange/subresource/sxg-subresource-header-integrity-mismatch.tentative.html [ Timeout ] -crbug.com/1198085 external/wpt/signed-exchange/subresource/sxg-subresource.tentative.sub.html [ Timeout ] -crbug.com/1198085 external/wpt/signed-exchange/sxg-data-cert-url.tentative.html [ Failure ] -crbug.com/1198085 external/wpt/signed-exchange/sxg-location-fragment.tentative.html [ Failure ] -crbug.com/1198085 external/wpt/signed-exchange/sxg-location.tentative.html [ Failure ] -crbug.com/1198085 external/wpt/signed-exchange/sxg-merkle-integrity-error.tentative.html [ Failure ] -crbug.com/1198085 external/wpt/signed-exchange/sxg-navigation-timing.tentative.html [ Failure ] -crbug.com/1198085 external/wpt/signed-exchange/sxg-prefetch.tentative.https.html [ Failure ] -crbug.com/1198085 external/wpt/signed-exchange/sxg-referrer-policy-header.tentative.https.html [ Failure ] -crbug.com/1198085 external/wpt/signed-exchange/sxg-referrer-remote-physical-remote-logical.tentative.https.html [ Failure ] -crbug.com/1198085 external/wpt/signed-exchange/sxg-referrer-remote-physical-same-logical.tentative.https.html [ Failure ] -crbug.com/1198085 external/wpt/signed-exchange/sxg-referrer-same-physical-remote-logical.tentative.https.html [ Failure ] -crbug.com/1198085 external/wpt/signed-exchange/sxg-referrer-same-physical-same-logical.tentative.https.html [ Failure ] -crbug.com/1198085 external/wpt/signed-exchange/sxg-utf8-inner-url.tentative.html [ Timeout ] -crbug.com/1198085 external/wpt/signed-exchange/sxg-variants-match.tentative.html [ Failure ] - -# WebCodecs failures on Android. -crbug.com/1198089 external/wpt/webcodecs/video-frame.any.html [ Failure ] -crbug.com/1198089 external/wpt/webcodecs/video-frame.any.worker.html [ Failure ] -crbug.com/1198089 external/wpt/webcodecs/videoFrame-canvasImageSource.html [ Failure ] -crbug.com/1198089 external/wpt/webcodecs/videoFrame-createImageBitmap.any.html [ Failure ] -crbug.com/1198089 external/wpt/webcodecs/videoFrame-createImageBitmap.any.worker.html [ Failure ] -crbug.com/1198089 external/wpt/webcodecs/videoFrame-texImage.any.html [ Failure ] -crbug.com/1198089 external/wpt/webcodecs/videoFrame-texImage.any.worker.html [ Failure ] - -# Test seems to be flaky on both Chrome and WebLayer. -crbug.com/1177918 external/wpt/input-events/input-events-get-target-ranges.html [ Failure Pass ] - -# Layout Instability tests are not calibrated for mobile screens. -crbug.com/1191142 external/wpt/layout-instability/absolute-child-shift-with-parent-contain.html [ Skip ] -crbug.com/1191142 external/wpt/layout-instability/absolute-child-shift-with-parent-negative-overflow.html [ Skip ] -crbug.com/1191142 external/wpt/layout-instability/absolute-child-shift-with-parent-overflow.html [ Skip ] -crbug.com/1191142 external/wpt/layout-instability/body-display-change.html [ Skip ] -crbug.com/1191142 external/wpt/layout-instability/buffer-layout-shift.html [ Skip ] -crbug.com/1191142 external/wpt/layout-instability/buffered-flag.html [ Skip ] -crbug.com/1191142 external/wpt/layout-instability/child-shift-with-parent-overflow-hidden.html [ Skip ] -crbug.com/1191142 external/wpt/layout-instability/child-shift-with-parent-overflow-x-clip.html [ Skip ] -crbug.com/1191142 external/wpt/layout-instability/child-shift-with-parent.html [ Skip ] -crbug.com/1191142 external/wpt/layout-instability/composited-element-movement.html [ Skip ] -crbug.com/1191142 external/wpt/layout-instability/content-visibility-auto-offscreen.html [ Skip ] -crbug.com/1191142 external/wpt/layout-instability/expand-above-viewport.html [ Skip ] -crbug.com/1191142 external/wpt/layout-instability/fixed-position-move.html [ Skip ] -crbug.com/1191142 external/wpt/layout-instability/input-timestamp.html [ Skip ] -crbug.com/1191142 external/wpt/layout-instability/move-distance-clamped.html [ Skip ] -crbug.com/1191142 external/wpt/layout-instability/move-transformed.html [ Skip ] -crbug.com/1191142 external/wpt/layout-instability/multi-clip-visual-rect.html [ Skip ] -crbug.com/1191142 external/wpt/layout-instability/opacity-zero-layout-and-visible.html [ Skip ] -crbug.com/1191142 external/wpt/layout-instability/partially-clipped-visual-rect.html [ Skip ] -crbug.com/1191142 external/wpt/layout-instability/pointerdown-becomes-scroll.html [ Skip ] -crbug.com/1191142 external/wpt/layout-instability/pointerdown-becomes-tap.html [ Skip ] -crbug.com/1191142 external/wpt/layout-instability/pointermove-becomes-drag.html [ Skip ] -crbug.com/1191142 external/wpt/layout-instability/recent-input.html [ Skip ] -crbug.com/1191142 external/wpt/layout-instability/rtl-distance.html [ Skip ] -crbug.com/1191142 external/wpt/layout-instability/shift-into-viewport.html [ Skip ] -crbug.com/1191142 external/wpt/layout-instability/shift-outside-viewport.html [ Skip ] -crbug.com/1191142 external/wpt/layout-instability/shift-while-scrolled.html [ Skip ] -crbug.com/1191142 external/wpt/layout-instability/shift-with-overflow-status-change.html [ Skip ] -crbug.com/1191142 external/wpt/layout-instability/simple-block-movement.html [ Skip ] -crbug.com/1191142 external/wpt/layout-instability/sources-enclosure.html [ Skip ] -crbug.com/1191142 external/wpt/layout-instability/sources-maximpact.html [ Skip ] -crbug.com/1191142 external/wpt/layout-instability/sources.html [ Skip ] -crbug.com/1191142 external/wpt/layout-instability/sticky-descendant-move.html [ Skip ] -crbug.com/1191142 external/wpt/layout-instability/transform.html [ Skip ] -crbug.com/1191142 external/wpt/layout-instability/visibility-hidden-layout-and-visible.html [ Skip ] - -# Add untriaged failures in this block -crbug.com/1050754 external/wpt/FileAPI/file/send-file-form-punctuation.html [ Pass Timeout ] -crbug.com/1050754 external/wpt/FileAPI/url/url-charset.window.html [ Crash Pass ] -crbug.com/1050754 external/wpt/FileAPI/url/url-in-tags-revoke.window.html [ Crash Pass ] -crbug.com/1050754 external/wpt/IndexedDB/bindings-inject-values-bypass-chain.html [ Failure Pass ] -crbug.com/1050754 external/wpt/IndexedDB/file_support.sub.html [ Failure ] -crbug.com/1050754 external/wpt/IndexedDB/idlharness.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/IndexedDB/key-generators/reading-autoincrement-indexes-cursors.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/IndexedDB/key-generators/reading-autoincrement-indexes.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/IndexedDB/key-generators/reading-autoincrement-store-cursors.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/IndexedDB/key-generators/reading-autoincrement-store.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/IndexedDB/transaction-abort-generator-revert.html [ Failure Pass ] -crbug.com/1050754 external/wpt/WebCryptoAPI/historical.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/accelerometer/Accelerometer.https.html [ Failure ] -crbug.com/1050754 external/wpt/animation-worklet/inactive-timeline.https.html [ Timeout ] -crbug.com/1050754 external/wpt/animation-worklet/scroll-timeline-writing-modes.https.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/adapter/adapter-absent-getAvailability.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/adapter/adapter-added-getAvailability.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/adapter/adapter-powered-off-getAvailability.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/adapter/adapter-powered-on-getAvailability.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/adapter/adapter-powered-on-off-on-getAvailability.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/adapter/adapter-removed-getAvailability.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/adapter/cross-origin-iframe-getAvailability.sub.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/characteristic/characteristicProperties.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/characteristic/getDescriptor/gen-characteristic-is-removed.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/characteristic/getDescriptor/gen-descriptor-get-same-object.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/characteristic/getDescriptor/gen-service-is-removed.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/characteristic/getDescriptors/gen-characteristic-is-removed-with-uuid.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/characteristic/getDescriptors/gen-characteristic-is-removed.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/characteristic/getDescriptors/gen-descriptor-get-same-object.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/characteristic/getDescriptors/gen-service-is-removed-with-uuid.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/characteristic/getDescriptors/gen-service-is-removed.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/characteristic/notifications/characteristic-is-removed.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/characteristic/notifications/service-is-removed.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/characteristic/readValue/add-multiple-event-listeners.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/characteristic/readValue/characteristic-is-removed.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/characteristic/readValue/event-is-fired.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/characteristic/readValue/gen-characteristic-is-removed.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/characteristic/readValue/read-succeeds.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/characteristic/readValue/read-updates-value.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/characteristic/readValue/service-is-removed.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/characteristic/service-same-from-2-characteristics.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/characteristic/service-same-object.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/characteristic/startNotifications/gen-characteristic-is-removed.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/characteristic/writeValue/buffer-is-detached.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/characteristic/writeValue/characteristic-is-removed.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/characteristic/writeValue/gen-characteristic-is-removed.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/characteristic/writeValue/service-is-removed.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/characteristic/writeValue/write-succeeds.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/characteristic/writeValueWithResponse/buffer-is-detached.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/characteristic/writeValueWithResponse/characteristic-is-removed.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/characteristic/writeValueWithResponse/gen-characteristic-is-removed.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/characteristic/writeValueWithResponse/service-is-removed.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/characteristic/writeValueWithResponse/write-succeeds.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/characteristic/writeValueWithoutResponse/buffer-is-detached.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/characteristic/writeValueWithoutResponse/characteristic-is-removed.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/characteristic/writeValueWithoutResponse/gen-characteristic-is-removed.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/characteristic/writeValueWithoutResponse/service-is-removed.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/characteristic/writeValueWithoutResponse/write-succeeds.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/descriptor/readValue/gen-service-is-removed.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/descriptor/readValue/read-succeeds.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/descriptor/writeValue/buffer-is-detached.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/descriptor/writeValue/gen-service-is-removed.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/device/gattserverdisconnected-event/disconnected.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/device/gattserverdisconnected-event/disconnected_gc.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/device/gattserverdisconnected-event/one-event-per-disconnection.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/device/gattserverdisconnected-event/reconnect-during-disconnected-event.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/device/watchAdvertisements/abort-before-watchAdvertisements.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/device/watchAdvertisements/abort-pending-operation.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/device/watchAdvertisements/abort-signal-stops-events.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/device/watchAdvertisements/abort-subsequent-watchAdvertisements-call-stops-events.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/device/watchAdvertisements/advertisementreceived-event-fired.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/device/watchAdvertisements/concurrent-watchAdvertisements-calls.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/device/watchAdvertisements/service-and-manufacturer-data-filtered-from-event.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/device/watchAdvertisements/subsequent-watchAdvertisements-call.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/device/watchAdvertisements/watching-two-devices-abort-one-watchAdvertisements.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/device/watchAdvertisements/watching-two-devices.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/getDevices/granted-devices-with-services.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/getDevices/no-granted-devices.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/getDevices/returns-same-bluetooth-device-object.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/server/getPrimaryService/gen-disconnect-called-before.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/server/getPrimaryService/gen-disconnect-called-during-error.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/server/getPrimaryService/gen-disconnect-called-during-success.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/server/getPrimaryService/gen-disconnect-invalidates-objects.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/server/getPrimaryService/gen-disconnected-device.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/server/getPrimaryService/gen-discovery-complete-no-permission-absent-service.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/server/getPrimaryService/gen-discovery-complete-service-not-found.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/server/getPrimaryService/gen-garbage-collection-ran-during-error.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/server/getPrimaryService/gen-garbage-collection-ran-during-success.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/server/getPrimaryService/gen-get-different-service-after-reconnection.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/server/getPrimaryService/gen-get-same-object.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/server/getPrimaryService/gen-invalid-service-name.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/server/getPrimaryService/gen-no-permission-absent-service.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/server/getPrimaryService/gen-no-permission-for-any-service.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/server/getPrimaryService/gen-no-permission-present-service.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/server/getPrimaryService/gen-service-not-found.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/server/getPrimaryServices/gen-disconnect-called-before-with-uuid.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/server/getPrimaryServices/gen-disconnect-called-before.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/server/getPrimaryServices/gen-disconnect-called-during-error-with-uuid.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/server/getPrimaryServices/gen-disconnect-called-during-error.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/server/getPrimaryServices/gen-disconnect-called-during-success-with-uuid.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/server/getPrimaryServices/gen-disconnect-called-during-success.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/server/getPrimaryServices/gen-disconnect-invalidates-objects-with-uuid.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/server/getPrimaryServices/gen-disconnect-invalidates-objects.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/server/getPrimaryServices/gen-disconnected-device-with-uuid.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/server/getPrimaryServices/gen-disconnected-device.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/server/getPrimaryServices/gen-discovery-complete-no-permission-absent-service-with-uuid.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/server/getPrimaryServices/gen-discovery-complete-service-not-found-with-uuid.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/server/getPrimaryServices/gen-garbage-collection-ran-during-error-with-uuid.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/server/getPrimaryServices/gen-garbage-collection-ran-during-error.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/server/getPrimaryServices/gen-garbage-collection-ran-during-success-with-uuid.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/server/getPrimaryServices/gen-garbage-collection-ran-during-success.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/server/getPrimaryServices/gen-get-different-service-after-reconnection-with-uuid.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/server/getPrimaryServices/gen-get-different-service-after-reconnection.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/server/getPrimaryServices/gen-get-same-object-with-uuid.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/server/getPrimaryServices/gen-get-same-object.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/server/getPrimaryServices/gen-invalid-service-name.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/server/getPrimaryServices/gen-no-permission-absent-service-with-uuid.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/server/getPrimaryServices/gen-no-permission-for-any-service-with-uuid.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/server/getPrimaryServices/gen-no-permission-for-any-service.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/server/getPrimaryServices/gen-no-permission-present-service-with-uuid.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/server/getPrimaryServices/gen-service-not-found-with-uuid.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/service/getCharacteristic/gen-blocklisted-characteristic.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/service/getCharacteristic/gen-characteristic-not-found.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/service/getCharacteristic/gen-garbage-collection-ran-during-error.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/service/getCharacteristic/gen-get-same-object.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/service/getCharacteristic/gen-invalid-characteristic-name.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/service/getCharacteristic/gen-reconnect-during.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/service/getCharacteristic/gen-service-is-removed.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/service/getCharacteristics/gen-blocklisted-characteristic-with-uuid.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/service/getCharacteristics/gen-characteristic-not-found-with-uuid.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/service/getCharacteristics/gen-garbage-collection-ran-during-error-with-uuid.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/service/getCharacteristics/gen-garbage-collection-ran-during-error.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/service/getCharacteristics/gen-get-same-object-with-uuid.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/service/getCharacteristics/gen-get-same-object.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/service/getCharacteristics/gen-invalid-characteristic-name.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/service/getCharacteristics/gen-reconnect-during-with-uuid.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/service/getCharacteristics/gen-reconnect-during.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/service/getCharacteristics/gen-service-is-removed-with-uuid.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/service/getCharacteristics/gen-service-is-removed.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/client-hints/accept-ch-answers.sub.https.html [ Failure ] -crbug.com/1050754 external/wpt/client-hints/accept-ch-cache-revalidation.https.html [ Failure ] -crbug.com/1050754 external/wpt/client-hints/accept-ch-feature-policy.sub.https.html [ Failure ] -crbug.com/1050754 external/wpt/client-hints/accept-ch-no-feature-policy.sub.https.html [ Failure ] -crbug.com/1050754 external/wpt/client-hints/accept-ch-stickiness/cross-origin-navigation.https.html [ Failure ] -crbug.com/1050754 external/wpt/client-hints/accept-ch-stickiness/cross-origin-subresource-redirect.https.html [ Failure ] -crbug.com/1050754 external/wpt/client-hints/accept-ch-stickiness/cross-origin-syncxhr-redirect.https.html [ Failure ] -crbug.com/1050754 external/wpt/client-hints/accept-ch-stickiness/http-equiv-cross-origin-subresource.https.html [ Failure ] -crbug.com/1050754 external/wpt/client-hints/accept-ch-stickiness/same-origin-navigation-no-accept-ch.https.html [ Crash Pass ] -crbug.com/1050754 external/wpt/client-hints/critical-ch/subresource.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/client-hints/sec-ch-ua.http.html [ Crash Pass ] -crbug.com/1050754 external/wpt/client-hints/sec-ch-ua.https.html [ Crash Pass ] -crbug.com/1050754 external/wpt/client-hints/service-workers/intercept-request.https.html [ Crash Pass ] -crbug.com/1050754 external/wpt/client-hints/service-workers/new-request.https.html [ Crash Pass ] -crbug.com/1050754 external/wpt/client-hints/service-workers/passthrough-request.https.html [ Crash Pass ] -crbug.com/1050754 external/wpt/clipboard-apis/async-html-script-removal.https.html [ Failure ] -crbug.com/1050754 external/wpt/clipboard-apis/async-svg-script-removal.https.html [ Failure ] -crbug.com/1050754 external/wpt/clipboard-apis/async-write-blobs-read-blobs.https.html [ Failure ] -crbug.com/1050754 external/wpt/clipboard-apis/async-write-html-read-html.https.html [ Failure ] -crbug.com/1050754 external/wpt/clipboard-apis/async-write-image-read-image.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/clipboard-apis/async-write-svg-read-svg.https.html [ Failure ] -crbug.com/1050754 external/wpt/clipboard-apis/feature-policy/clipboard-read/clipboard-read-enabled-by-feature-policy-attribute-tentative.https.sub.html [ Failure ] -crbug.com/1050754 external/wpt/clipboard-apis/feature-policy/clipboard-read/clipboard-read-enabled-by-feature-policy.tentative.https.sub.html [ Failure ] -crbug.com/1050754 external/wpt/clipboard-apis/feature-policy/clipboard-write/clipboard-write-enabled-by-feature-policy-attribute-tentative.https.sub.html [ Failure ] -crbug.com/1050754 external/wpt/clipboard-apis/feature-policy/clipboard-write/clipboard-write-enabled-by-feature-policy.tentative.https.sub.html [ Failure ] -crbug.com/1050754 external/wpt/compat/idlharness.window.html [ Pass ] -crbug.com/1050754 external/wpt/compression/compression-bad-chunks.tentative.any.html [ Failure Pass ] -crbug.com/1050754 external/wpt/compression/compression-bad-chunks.tentative.any.serviceworker.html [ Failure Pass ] -crbug.com/1050754 external/wpt/compression/compression-bad-chunks.tentative.any.worker.html [ Failure Pass ] -crbug.com/1050754 external/wpt/compression/compression-including-empty-chunk.tentative.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/compression/compression-multiple-chunks.tentative.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/compression/compression-output-length.tentative.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/compression/compression-stream.tentative.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/compression/decompression-buffersource.tentative.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/compression/decompression-constructor-error.tentative.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/compression/decompression-correct-input.tentative.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/compression/decompression-empty-input.tentative.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/compression/decompression-split-chunk.tentative.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/compression/decompression-uint8array-output.tentative.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/content-security-policy/form-action/form-action-src-allowed-target-blank.sub.html [ Crash Pass ] -crbug.com/1050754 external/wpt/content-security-policy/inheritance/blob-url-inherits-from-initiator.sub.html [ Crash Pass ] -crbug.com/1050754 external/wpt/content-security-policy/inheritance/history.sub.html [ Crash Pass ] -crbug.com/1050754 external/wpt/content-security-policy/inheritance/window-open-local-after-network-scheme.sub.html [ Crash Pass ] -crbug.com/1050754 external/wpt/content-security-policy/inheritance/window.html [ Crash Pass ] -crbug.com/1050754 external/wpt/content-security-policy/prefetch-src/prefetch-header-allowed.html [ Pass Timeout ] -crbug.com/1050754 external/wpt/cookie-store/cookieStore_subscribe_arguments.tentative.https.any.html [ Crash Failure Pass ] -crbug.com/1050754 external/wpt/cookie-store/idlharness.tentative.https.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/cookies/samesite/form-get-blank-reload.https.html [ Crash Failure ] -crbug.com/1050754 external/wpt/cookies/samesite/form-get-blank.https.html [ Crash Pass ] -crbug.com/1050754 external/wpt/cookies/samesite/form-post-blank-reload.https.html [ Crash Failure ] -crbug.com/1050754 external/wpt/cookies/samesite/form-post-blank.https.html [ Crash Failure ] -crbug.com/1050754 external/wpt/cookies/samesite/setcookie-lax.https.html [ Crash Pass ] -crbug.com/1050754 external/wpt/cookies/samesite/window-open-reload.https.html [ Crash Failure ] -crbug.com/1050754 external/wpt/cookies/samesite/window-open.https.html [ Crash Pass ] -crbug.com/1050754 external/wpt/cookies/schemeful-same-site/schemeful-navigation.tentative.html [ Crash Pass ] -crbug.com/1050754 external/wpt/cookies/value/value-ctl.html [ Failure ] -crbug.com/1050754 external/wpt/cookies/value/value.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-backgrounds/animations/border-image-slice-composition.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-backgrounds/animations/border-image-slice-interpolation-stability.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-backgrounds/animations/border-image-slice-interpolation.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-backgrounds/animations/border-width-interpolation.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-backgrounds/inheritance.sub.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-cascade/all-prop-initial-xml.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-color-adjust/rendering/dark-color-scheme/color-scheme-system-colors.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-contain/contain-size-grid-003.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-contain/contain-size-grid-004.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-contain/content-visibility/content-visibility-068.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-contain/content-visibility/content-visibility-070.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-flexbox/flex-aspect-ratio-img-column-017.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-fonts/fallback-url-to-local.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-fonts/font-face-range-order.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-grid/grid-definition/grid-percentage-rows-indefinite-height-001.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-grid/grid-items/grid-minimum-size-grid-items-021.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-layout-api/sync-layout-microtasks.https.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-logical/inheritance.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-multicol/getclientrects-000.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-multicol/getclientrects-001.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-multicol/inheritance.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-multicol/parsing/column-rule-computed.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-overflow/overflow-clip-margin-intersection-observer.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-overflow/overflow-codependent-scrollbars.html [ Pass ] -crbug.com/1050754 external/wpt/css/css-overflow/overflow-padding.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-overflow/scrollbar-gutter-001.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-overflow/scrollbar-gutter-propagation-001.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-overflow/scrollbar-gutter-propagation-002.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-overflow/scrollbar-gutter-propagation-003.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-overflow/scrollbar-gutter-propagation-007.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-overflow/scrollbar-gutter-rtl-001.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-overflow/scrollbar-gutter-vertical-lr-001.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-overflow/scrollbar-gutter-vertical-rl-001.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-position/position-absolute-replaced-minmax.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-position/sticky/position-sticky-nested-bottom.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-position/sticky/position-sticky-nested-right.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-properties-values-api/unit-cycles.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-ruby/line-spacing.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-scroll-anchoring/abspos-contributes-to-static-parent-bounds.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-scroll-anchoring/focus-prioritized.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-scroll-anchoring/fragment-scrolling-anchors.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-scroll-anchoring/history-restore-anchors.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-scroll-anchoring/negative-layout-overflow.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-scroll-anchoring/position-change-heuristic-in-nested-scroll-box.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-scroll-anchoring/position-change-heuristic.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-scroll-anchoring/reading-scroll-forces-anchoring.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-scroll-snap/scroll-snap-type-on-root-element.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-scroll-snap/snap-at-user-scroll-end.html [ Timeout ] -crbug.com/1050754 external/wpt/css/css-shapes/shape-outside/values/shape-margin-001.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-shapes/shape-outside/values/shape-outside-shape-arguments-000.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-sizing/aspect-ratio/quirks-mode-002.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-sizing/contain-intrinsic-size/parsing/contain-intrinsic-size-computed.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-text/parsing/tab-size-computed.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-text/parsing/word-boundary-detection-computed.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-text/parsing/word-boundary-detection-valid.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-text/parsing/word-boundary-expansion-computed.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-text/parsing/word-boundary-expansion-valid.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-text/tab-size/tab-size.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-text/white-space/trailing-space-position-001.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-transforms/transform-scale-hittest.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-transitions/CSSTransition-effect.tentative.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-transitions/properties-value-inherit-003.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-ui/animation/outline-width-interpolation.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-ui/text-overflow-023.html [ Pass ] -crbug.com/1050754 external/wpt/css/css-values/viewport-units-css2-001.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-writing-modes/wm-propagation-body-scroll-offset-vertical-rl.html [ Failure ] -crbug.com/1050754 external/wpt/css/cssom-view/CaretPosition-001.html [ Failure ] -crbug.com/1050754 external/wpt/css/cssom-view/cssom-getBoundingClientRect-003.html [ Failure ] -crbug.com/1050754 external/wpt/css/cssom-view/cssom-view-img-attributes-001.html [ Failure ] -crbug.com/1050754 external/wpt/css/cssom-view/scroll-behavior-smooth.html [ Failure ] -crbug.com/1050754 external/wpt/css/cssom-view/scrollIntoView-smooth.html [ Failure ] -crbug.com/1050754 external/wpt/css/cssom-view/scrollLeft-of-scroller-with-wider-scrollbar.html [ Failure ] -crbug.com/1050754 external/wpt/css/cssom-view/scrollintoview.html [ Failure ] -crbug.com/1050754 external/wpt/css/cssom/cssstyledeclaration-properties.html [ Pass ] -crbug.com/1050754 external/wpt/css/cssom/getComputedStyle-width-scroll.tentative.html [ Pass ] -crbug.com/1050754 external/wpt/css/geometry/DOMMatrix2DInit-validate-fixup.html [ Failure ] -crbug.com/1050754 external/wpt/custom-elements/reactions/HTMLInputElement.html [ Failure ] -crbug.com/1050754 external/wpt/custom-elements/reactions/HTMLParamElement.html [ Crash Pass ] -crbug.com/1050754 external/wpt/document-policy/experimental-features/sync-script.tentative.https.sub.html [ Failure Pass ] -crbug.com/1050754 external/wpt/document-policy/reporting/oversized-images-reporting-tentative.html [ Timeout ] -crbug.com/1050754 external/wpt/dom/events/document-level-touchmove-event-listener-passive-by-default.html [ Pass ] -crbug.com/1050754 external/wpt/dom/events/scrolling/input-text-scroll-event-when-using-arrow-keys.html [ Timeout ] -crbug.com/1050754 external/wpt/dom/events/scrolling/overscroll-event-fired-to-scrolled-element.html [ Failure ] -crbug.com/1050754 external/wpt/dom/events/scrolling/scrollend-event-fired-to-scrolled-element.html [ Failure ] -crbug.com/1050754 external/wpt/dom/events/scrolling/scrollend-event-for-user-scroll.html [ Timeout ] -crbug.com/1050754 external/wpt/dom/idlharness.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/domxpath/xml_xpath_runner.html [ Failure ] -crbug.com/1050754 external/wpt/editing/other/select-all-and-delete-in-html-element-having-contenteditable.html [ Pass ] -crbug.com/1050754 external/wpt/element-timing/image-carousel.html [ Failure Pass ] -crbug.com/1050754 external/wpt/element-timing/image-not-fully-visible.html [ Failure ] -crbug.com/1050754 external/wpt/encoding-detection/fa-windows-1256-late.tentative.html [ Crash Pass ] -crbug.com/1050754 external/wpt/encoding-detection/fi-windows-1252-late.tentative.html [ Crash Failure ] -crbug.com/1050754 external/wpt/encoding-detection/he-windows-1255-late.tentative.html [ Crash Pass ] -crbug.com/1050754 external/wpt/encoding-detection/is-windows-1252-late.tentative.html [ Crash Pass ] -crbug.com/1050754 external/wpt/encoding-detection/ja-EUC-JP-late.tentative.html [ Crash Failure ] -crbug.com/1050754 external/wpt/encoding-detection/ja-ISO-2022-JP-late.tentative.html [ Crash Pass ] -crbug.com/1050754 external/wpt/encoding-detection/ja-Shift_JIS-late.tentative.html [ Crash Pass ] -crbug.com/1050754 external/wpt/encoding-detection/lt-windows-1257-late.tentative.html [ Crash Pass ] -crbug.com/1050754 external/wpt/encoding-detection/lv-windows-1257-late.tentative.html [ Crash Pass ] -crbug.com/1050754 external/wpt/encoding-detection/pl-ISO-8859-2-late.tentative.html [ Crash Pass ] -crbug.com/1050754 external/wpt/encoding-detection/pl-windows-1250-late.tentative.html [ Crash Pass ] -crbug.com/1050754 external/wpt/encoding-detection/pt-windows-1252-late.tentative.html [ Crash Pass ] -crbug.com/1050754 external/wpt/encoding-detection/ru-ISO-8859-5-late.tentative.html [ Crash Pass ] -crbug.com/1050754 external/wpt/encoding-detection/th-windows-874-late.tentative.html [ Crash Pass ] -crbug.com/1050754 external/wpt/encoding-detection/uk-windows-1251-late.tentative.html [ Crash Pass ] -crbug.com/1050754 external/wpt/encoding-detection/zh-Big5-late.tentative.html [ Crash Pass ] -crbug.com/1050754 external/wpt/encoding-detection/zh-GBK-late.tentative.html [ Crash Pass ] -crbug.com/1050754 external/wpt/encoding/idlharness.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/encoding/streams/backpressure.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/encoding/streams/decode-attributes.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/encoding/streams/decode-bad-chunks.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/encoding/streams/decode-ignore-bom.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/encoding/streams/decode-incomplete-input.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/encoding/streams/decode-non-utf8.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/encoding/streams/decode-split-character.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/encoding/streams/encode-bad-chunks.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/encoding/streams/encode-utf8.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/encoding/streams/readable-writable-properties.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/event-timing/auxclick.html [ Timeout ] -crbug.com/1050754 external/wpt/event-timing/buffered-and-duration-threshold.html [ Failure Pass ] -crbug.com/1050754 external/wpt/event-timing/only-observe-firstInput.html [ Failure Pass ] -crbug.com/1050754 external/wpt/eventsource/shared-worker/eventsource-close.htm [ Failure ] -crbug.com/1050754 external/wpt/eventsource/shared-worker/eventsource-constructor-non-same-origin.htm [ Failure ] -crbug.com/1050754 external/wpt/eventsource/shared-worker/eventsource-eventtarget.htm [ Failure ] -crbug.com/1050754 external/wpt/eventsource/shared-worker/eventsource-onmessage.htm [ Failure ] -crbug.com/1050754 external/wpt/eventsource/shared-worker/eventsource-onopen.htm [ Failure ] -crbug.com/1050754 external/wpt/eventsource/shared-worker/eventsource-prototype.htm [ Failure ] -crbug.com/1050754 external/wpt/eventsource/shared-worker/eventsource-url.htm [ Failure ] -crbug.com/1050754 external/wpt/feature-policy/picture-in-picture-allowed-by-feature-policy-attribute-redirect-on-load.https.sub.html [ Failure ] -crbug.com/1050754 external/wpt/feature-policy/picture-in-picture-allowed-by-feature-policy-attribute.https.sub.html [ Failure ] -crbug.com/1050754 external/wpt/feature-policy/picture-in-picture-allowed-by-feature-policy.https.sub.html [ Failure ] -crbug.com/1050754 external/wpt/feature-policy/picture-in-picture-default-feature-policy.https.sub.html [ Failure ] -crbug.com/1050754 external/wpt/feature-policy/picture-in-picture-disabled-by-feature-policy.https.sub.html [ Failure ] -crbug.com/1050754 external/wpt/feature-policy/picture-in-picture-supported-by-feature-policy.html [ Failure ] -crbug.com/1050754 external/wpt/feature-policy/reporting/picture-in-picture-reporting.html [ Failure ] -crbug.com/1050754 external/wpt/feature-policy/reporting/serial-reporting.https.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/abort/cache.https.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/basic/accept-header.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/basic/conditional-get.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/basic/error-after-response.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/basic/header-value-combining.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/basic/header-value-null-byte.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/basic/historical.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/basic/integrity.sub.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/basic/request-forbidden-headers.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/basic/request-head.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/basic/request-headers-case.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/basic/request-headers-nonascii.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/basic/request-headers.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/basic/request-referrer.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/basic/scheme-about.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/basic/scheme-data.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/basic/scheme-others.sub.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/basic/stream-response.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/basic/stream-safe-creation.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/basic/text-utf8.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/cors/cors-multiple-origins.sub.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/cors/data-url-shared-worker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/credentials/authentication-basic.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/credentials/cookies.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/headers/header-values-normalize.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/headers/header-values.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/headers/headers-basic.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/headers/headers-casing.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/headers/headers-combine.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/headers/headers-errors.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/headers/headers-no-cors.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/headers/headers-normalize.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/headers/headers-record.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/headers/headers-structure.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/redirect/redirect-back-to-original-origin.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/redirect/redirect-count.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/redirect/redirect-location-escape.tentative.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/redirect/redirect-method.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/redirect/redirect-schemes.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/redirect/redirect-to-dataurl.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/request/destination/fetch-destination-worker.https.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/request/request-bad-port.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/request/request-cache-default-conditional.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/request/request-cache-default.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/request/request-cache-force-cache.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/request/request-cache-no-cache.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/request/request-cache-no-store.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/request/request-cache-only-if-cached.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/request/request-cache-reload.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/request/request-consume.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/request/request-init-002.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/request/request-keepalive.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/response/response-cancel-stream.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/response/response-consume-stream.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/response/response-error.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/response/response-from-stream.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/response/response-init-001.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/response/response-init-002.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/response/response-static-error.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/response/response-static-redirect.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/response/response-stream-disturbed-1.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/response/response-stream-disturbed-2.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/response/response-stream-disturbed-3.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/response/response-stream-disturbed-4.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/response/response-stream-disturbed-5.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/response/response-stream-disturbed-6.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/response/response-stream-with-broken-then.any.html [ Crash Pass ] -crbug.com/1050754 external/wpt/fetch/api/response/response-stream-with-broken-then.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/content-encoding/bad-gzip-body.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/cross-origin-resource-policy/fetch.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/cross-origin-resource-policy/fetch.https.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/data-urls/base64.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/http-cache/304-update.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/http-cache/freshness.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/http-cache/status.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/metadata/fetch-preflight.https.sub.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/metadata/fetch.https.sub.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/metadata/sharedworker.https.sub.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/metadata/trailing-dot.https.sub.any.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/metadata/trailing-dot.https.sub.any.serviceworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/metadata/trailing-dot.https.sub.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/metadata/trailing-dot.https.sub.any.worker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/metadata/window-open.https.sub.html [ Crash Pass ] -crbug.com/1050754 external/wpt/fetch/private-network-access/idlharness.tentative.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/security/embedded-credentials.tentative.sub.html [ Crash Pass ] -crbug.com/1050754 external/wpt/fetch/stale-while-revalidate/fetch-sw.https.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/stale-while-revalidate/fetch.any.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/stale-while-revalidate/fetch.any.serviceworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/stale-while-revalidate/fetch.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/stale-while-revalidate/fetch.any.worker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/stale-while-revalidate/stale-css.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/stale-while-revalidate/stale-image.html [ Failure ] -crbug.com/1050754 external/wpt/focus/activeelement-after-focusing-different-site-iframe-contentwindow.html [ Pass ] -crbug.com/1050754 external/wpt/focus/activeelement-after-focusing-different-site-iframe.html [ Pass ] -crbug.com/1050754 external/wpt/focus/activeelement-after-focusing-same-site-iframe-contentwindow.html [ Pass ] -crbug.com/1050754 external/wpt/focus/activeelement-after-focusing-same-site-iframe.html [ Pass ] -crbug.com/1050754 external/wpt/focus/focus-restoration-in-different-site-iframes-window.html [ Pass ] -crbug.com/1050754 external/wpt/focus/focus-restoration-in-different-site-iframes.html [ Failure Pass ] -crbug.com/1050754 external/wpt/focus/focus-restoration-in-same-site-iframes-window.html [ Failure Pass ] -crbug.com/1050754 external/wpt/focus/iframe-activeelement-after-focusing-out-iframes.html [ Crash Failure Pass ] -crbug.com/1050754 external/wpt/focus/iframe-contentwindow-focus-with-different-site-intermediate-frame.html [ Pass ] -crbug.com/1050754 external/wpt/focus/iframe-contentwindow-focus-with-same-as-top-intermediate-frame.html [ Failure Pass ] -crbug.com/1050754 external/wpt/focus/iframe-focus-with-different-site-intermediate-frame.html [ Pass ] -crbug.com/1050754 external/wpt/focus/iframe-focus-with-same-as-top-intermediate-frame.html [ Failure Pass ] -crbug.com/1050754 external/wpt/focus/iframe-focuses-parent-different-site.html [ Crash Pass ] -crbug.com/1050754 external/wpt/forced-colors-mode/forced-colors-mode-40.html [ Pass ] -crbug.com/1050754 external/wpt/fullscreen/api/element-request-fullscreen-options.tentative.html [ Failure ] -crbug.com/1050754 external/wpt/geolocation-API/getCurrentPosition_IDL.https.html [ Timeout ] -crbug.com/1050754 external/wpt/geolocation-API/getCurrentPosition_permission_deny.https.html [ Timeout ] -crbug.com/1050754 external/wpt/geolocation-API/watchPosition_permission_deny.https.html [ Timeout ] -crbug.com/1050754 external/wpt/gyroscope/Gyroscope.https.html [ Failure ] -crbug.com/1050754 external/wpt/hr-time/idlharness.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/html-media-capture/idlharness.window.html [ Pass ] -crbug.com/1050754 external/wpt/html/browsers/browsing-the-web/history-traversal/persisted-user-state-restoration/resume-timer-on-history-back.html [ Crash Pass ] -crbug.com/1050754 external/wpt/html/browsers/browsing-the-web/history-traversal/persisted-user-state-restoration/scroll-restoration-fragment-scrolling-samedoc.html [ Failure ] -crbug.com/1050754 external/wpt/html/browsers/browsing-the-web/history-traversal/scroll-restoration-order.html [ Failure ] -crbug.com/1050754 external/wpt/html/browsers/browsing-the-web/navigating-across-documents/failure-check-sequence.https.html [ Crash Pass ] -crbug.com/1050754 external/wpt/html/browsers/browsing-the-web/read-media/pageload-image-in-popup.html [ Crash Pass ] -crbug.com/1050754 external/wpt/html/browsers/browsing-the-web/scroll-to-fragid/scroll-position-vertical-rl.html [ Failure ] -crbug.com/1050754 external/wpt/html/browsers/browsing-the-web/unloading-documents/001.html [ Crash Failure ] -crbug.com/1050754 external/wpt/html/browsers/browsing-the-web/unloading-documents/prompt-and-unload-script-closeable.html [ Timeout ] -crbug.com/1050754 external/wpt/html/browsers/browsing-the-web/unloading-documents/prompt/004.html [ Failure ] -crbug.com/1050754 external/wpt/html/browsers/history/joint-session-history/joint-session-history-remove-iframe.html [ Failure ] -crbug.com/1050754 external/wpt/html/browsers/history/the-history-interface/002.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/browsers/history/the-history-interface/004.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/browsers/history/the-history-interface/005.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/browsers/history/the-location-interface/allow_prototype_cycle_through_location.sub.html [ Failure ] -crbug.com/1050754 external/wpt/html/browsers/history/the-location-interface/location-prototype-setting-same-origin-domain.sub.html [ Pass ] -crbug.com/1050754 external/wpt/html/browsers/history/the-location-interface/scripted_click_location_assign_during_load.html [ Crash Failure ] -crbug.com/1050754 external/wpt/html/browsers/offline/introduction-4/event_cached.https.html [ Failure ] -crbug.com/1050754 external/wpt/html/browsers/offline/introduction-4/event_checking.https.html [ Failure ] -crbug.com/1050754 external/wpt/html/browsers/offline/introduction-4/event_noupdate.https.html [ Failure ] -crbug.com/1050754 external/wpt/html/browsers/offline/introduction-4/event_progress.https.html [ Failure ] -crbug.com/1050754 external/wpt/html/browsers/offline/manifest_url_check.https.https.html [ Failure ] -crbug.com/1050754 external/wpt/html/browsers/the-window-object/accessing-other-browsing-contexts/window_length.html [ Crash Pass ] -crbug.com/1050754 external/wpt/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/close_beforeunload.html [ Crash Pass ] -crbug.com/1050754 external/wpt/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/creating_browsing_context_test_01.html [ Crash Pass ] -crbug.com/1050754 external/wpt/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-non-integer-height.html [ Failure Timeout ] -crbug.com/1050754 external/wpt/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-non-integer-innerheight.html [ Failure Timeout ] -crbug.com/1050754 external/wpt/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-non-integer-innerwidth.html [ Failure Timeout ] -crbug.com/1050754 external/wpt/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-non-integer-left.html [ Failure Timeout ] -crbug.com/1050754 external/wpt/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-non-integer-screenx.html [ Failure Timeout ] -crbug.com/1050754 external/wpt/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-non-integer-screeny.html [ Failure Timeout ] -crbug.com/1050754 external/wpt/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-non-integer-top.html [ Failure Timeout ] -crbug.com/1050754 external/wpt/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-non-integer-width.html [ Failure Timeout ] -crbug.com/1050754 external/wpt/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-tokenization-innerheight-innerwidth.html [ Failure Timeout ] -crbug.com/1050754 external/wpt/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-tokenization-noopener.html [ Failure ] -crbug.com/1050754 external/wpt/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-tokenization-noreferrer.html [ Failure ] -crbug.com/1050754 external/wpt/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-tokenization-screenx-screeny.html [ Failure Timeout ] -crbug.com/1050754 external/wpt/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-tokenization-top-left.html [ Failure Timeout ] -crbug.com/1050754 external/wpt/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-tokenization-width-height.html [ Failure Timeout ] -crbug.com/1050754 external/wpt/html/browsers/the-window-object/closed-attribute.window.html [ Crash Pass ] -crbug.com/1050754 external/wpt/html/browsers/the-window-object/navigate-to-about-blank-while-initial-load-pending.html [ Crash Pass ] -crbug.com/1050754 external/wpt/html/browsers/the-window-object/noopener-noreferrer-BarProp.window.html [ Crash Pass ] -crbug.com/1050754 external/wpt/html/browsers/the-window-object/noopener-noreferrer-sizing.window.html [ Crash Pass ] -crbug.com/1050754 external/wpt/html/browsers/the-window-object/window-open-noopener.html?_parent [ Crash Pass ] -crbug.com/1050754 external/wpt/html/browsers/the-window-object/window-open-noopener.html?_self [ Crash Pass ] -crbug.com/1050754 external/wpt/html/browsers/the-window-object/window-open-noopener.html?indexed [ Crash Pass ] -crbug.com/1050754 external/wpt/html/browsers/the-window-object/window-open-noreferrer.html [ Crash Pass ] -crbug.com/1050754 external/wpt/html/browsers/windows/auxiliary-browsing-contexts/opener-multiple.html [ Crash Pass ] -crbug.com/1050754 external/wpt/html/browsers/windows/auxiliary-browsing-contexts/opener.html [ Crash Pass ] -crbug.com/1050754 external/wpt/html/browsers/windows/browsing-context-names/choose-_blank-001.html [ Crash Pass ] -crbug.com/1050754 external/wpt/html/browsers/windows/browsing-context-names/choose-_blank-002.html [ Crash Pass ] -crbug.com/1050754 external/wpt/html/browsers/windows/browsing-context-names/choose-_parent-002.html [ Crash Pass ] -crbug.com/1050754 external/wpt/html/browsers/windows/browsing-context-names/choose-_top-001.html [ Crash Pass ] -crbug.com/1050754 external/wpt/html/browsers/windows/browsing-context-names/choose-default-001.html [ Crash Pass ] -crbug.com/1050754 external/wpt/html/browsers/windows/targeting-cross-origin-nested-browsing-contexts.html [ Crash Pass ] -crbug.com/1050754 external/wpt/html/canvas/element/drawing-text-to-the-canvas/2d.text.measure.advances.html [ Failure ] -crbug.com/1050754 external/wpt/html/canvas/element/drawing-text-to-the-canvas/2d.text.measure.baselines.html [ Failure ] -crbug.com/1050754 external/wpt/html/canvas/element/drawing-text-to-the-canvas/2d.text.measure.fontBoundingBox.html [ Failure ] -crbug.com/1050754 external/wpt/html/canvas/element/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.fillText.html [ Failure ] -crbug.com/1050754 external/wpt/html/canvas/element/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.strokeText.html [ Failure ] -crbug.com/1050754 external/wpt/html/canvas/element/manual/imagebitmap/canvas-createImageBitmap-video-resize.html [ Timeout ] -crbug.com/1050754 external/wpt/html/canvas/element/manual/imagebitmap/createImageBitmap-drawImage.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/canvas/element/manual/imagebitmap/createImageBitmap-flipY.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/canvas/element/manual/imagebitmap/createImageBitmap-origin.sub.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/canvas/element/manual/imagebitmap/createImageBitmap-serializable.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/canvas/element/manual/imagebitmap/createImageBitmap-transfer.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/canvas/element/manual/shadows/canvas_shadows_001.htm [ Failure ] -crbug.com/1050754 external/wpt/html/canvas/element/manual/wide-gamut-canvas/canvas-draw-high-bit-depth-images.html [ Failure ] -crbug.com/1050754 external/wpt/html/canvas/element/scroll/2d.scrollPathIntoView.verticalRL.html [ Failure ] -crbug.com/1050754 external/wpt/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.animated.poster.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/canvas/offscreen/manual/the-offscreen-canvas/offscreencanvas.getcontext.html [ Failure ] -crbug.com/1050754 external/wpt/html/canvas/offscreen/manual/the-offscreen-canvas/offscreencanvas.getcontext.worker.html [ Failure ] -crbug.com/1050754 external/wpt/html/canvas/offscreen/text/2d.text.measure.advances.html [ Failure ] -crbug.com/1050754 external/wpt/html/canvas/offscreen/text/2d.text.measure.advances.worker.html [ Failure ] -crbug.com/1050754 external/wpt/html/canvas/offscreen/text/2d.text.measure.baselines.html [ Failure ] -crbug.com/1050754 external/wpt/html/canvas/offscreen/text/2d.text.measure.baselines.worker.html [ Failure ] -crbug.com/1050754 external/wpt/html/canvas/offscreen/text/2d.text.measure.fontBoundingBox.html [ Failure ] -crbug.com/1050754 external/wpt/html/canvas/offscreen/text/2d.text.measure.fontBoundingBox.worker.html [ Failure ] -crbug.com/1050754 external/wpt/html/canvas/offscreen/the-offscreen-canvas/2d.getcontext.extraargs.worker.html [ Pass ] -crbug.com/1050754 external/wpt/html/cross-origin-embedder-policy/credentialless/fetch.https.window.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/cross-origin-embedder-policy/credentialless/iframe.window.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/cross-origin-embedder-policy/credentialless/image.https.window.html [ Crash Failure Pass ] -crbug.com/1050754 external/wpt/html/cross-origin-embedder-policy/credentialless/link.https.window.html [ Crash Failure Pass ] -crbug.com/1050754 external/wpt/html/cross-origin-embedder-policy/credentialless/redirect.window.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/cross-origin-embedder-policy/credentialless/video.https.window.html [ Crash Timeout ] -crbug.com/1050754 external/wpt/html/cross-origin-embedder-policy/reporting-navigation.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/cross-origin-embedder-policy/reporting-subresource-corp.https.html [ Crash Failure ] -crbug.com/1050754 external/wpt/html/cross-origin-opener-policy/coep-navigate-popup.https.html?0-1 [ Timeout ] -crbug.com/1050754 external/wpt/html/cross-origin-opener-policy/coep-navigate-popup.https.html?2-3 [ Timeout ] -crbug.com/1050754 external/wpt/html/cross-origin-opener-policy/coep-navigate-popup.https.html?4-last [ Timeout ] -crbug.com/1050754 external/wpt/html/cross-origin-opener-policy/coep-redirect.https.html [ Crash Pass ] -crbug.com/1050754 external/wpt/html/cross-origin-opener-policy/coep.https.html [ Crash Pass ] -crbug.com/1050754 external/wpt/html/cross-origin-opener-policy/header-parsing.https.html [ Crash Failure Pass Timeout ] -crbug.com/1050754 external/wpt/html/cross-origin-opener-policy/historical/coep-navigate-popup-unsafe-inherit.https.html [ Timeout ] -crbug.com/1050754 external/wpt/html/cross-origin-opener-policy/historical/popup-same-origin-unsafe-allow-outgoing-with-cross-origin.https.html [ Crash Pass ] -crbug.com/1050754 external/wpt/html/cross-origin-opener-policy/historical/popup-same-origin-unsafe-allow-outgoing-with-same-origin.https.html [ Crash Pass ] -crbug.com/1050754 external/wpt/html/cross-origin-opener-policy/historical/popup-same-origin-unsafe-allow-outgoing-with-same-site.https.html [ Crash Pass ] -crbug.com/1050754 external/wpt/html/cross-origin-opener-policy/historical/popup-same-site-unsafe-allow-outgoing-with-cross-origin.https.html [ Crash Pass ] -crbug.com/1050754 external/wpt/html/cross-origin-opener-policy/historical/popup-same-site-unsafe-allow-outgoing-with-same-origin.https.html [ Crash Pass ] -crbug.com/1050754 external/wpt/html/cross-origin-opener-policy/historical/popup-same-site-unsafe-allow-outgoing-with-same-site.https.html [ Crash Pass ] -crbug.com/1050754 external/wpt/html/cross-origin-opener-policy/historical/popup-same-site-with-cross-origin.https.html [ Crash Pass ] -crbug.com/1050754 external/wpt/html/cross-origin-opener-policy/historical/popup-same-site-with-same-origin.https.html [ Crash Pass ] -crbug.com/1050754 external/wpt/html/cross-origin-opener-policy/historical/popup-same-site-with-same-site.https.html [ Crash Pass ] -crbug.com/1050754 external/wpt/html/cross-origin-opener-policy/iframe-popup-same-origin-allow-popups-to-same-origin-allow-popups.https.html [ Crash Pass ] -crbug.com/1050754 external/wpt/html/cross-origin-opener-policy/iframe-popup-same-origin-allow-popups-to-same-origin.https.html [ Crash Pass ] -crbug.com/1050754 external/wpt/html/cross-origin-opener-policy/iframe-popup-same-origin-allow-popups-to-unsafe-none.https.html [ Crash Pass ] -crbug.com/1050754 external/wpt/html/cross-origin-opener-policy/iframe-popup-same-origin-to-same-origin.https.html [ Crash Pass ] -crbug.com/1050754 external/wpt/html/cross-origin-opener-policy/iframe-popup-same-origin-to-unsafe-none.https.html [ Crash Pass ] -crbug.com/1050754 external/wpt/html/cross-origin-opener-policy/iframe-popup-unsafe-none-to-same-origin.https.html [ Crash Pass ] -crbug.com/1050754 external/wpt/html/cross-origin-opener-policy/javascript-url.https.html [ Crash Failure Pass ] -crbug.com/1050754 external/wpt/html/cross-origin-opener-policy/navigate-to-aboutblank.https.html [ Crash Failure ] -crbug.com/1050754 external/wpt/html/cross-origin-opener-policy/no-https.html [ Crash Pass ] -crbug.com/1050754 external/wpt/html/cross-origin-opener-policy/popup-redirect-cache.https.html [ Crash Pass ] -crbug.com/1050754 external/wpt/html/cross-origin-opener-policy/popup-redirect-same-origin-allow-popups.https.html [ Crash Pass ] -crbug.com/1050754 external/wpt/html/cross-origin-opener-policy/popup-same-origin-allow-popups-with-cross-origin.https.html [ Crash Pass ] -crbug.com/1050754 external/wpt/html/cross-origin-opener-policy/popup-same-origin-allow-popups-with-same-origin.https.html [ Crash Pass ] -crbug.com/1050754 external/wpt/html/cross-origin-opener-policy/popup-same-origin-allow-popups-with-same-site.https.html [ Crash Pass ] -crbug.com/1050754 external/wpt/html/cross-origin-opener-policy/popup-same-origin-non-initial-about-blank.https.html [ Crash Pass ] -crbug.com/1050754 external/wpt/html/cross-origin-opener-policy/popup-same-origin-with-cross-origin.https.html [ Crash Pass ] -crbug.com/1050754 external/wpt/html/cross-origin-opener-policy/popup-same-origin-with-same-origin.https.html [ Crash Pass ] -crbug.com/1050754 external/wpt/html/cross-origin-opener-policy/popup-same-origin-with-same-site.https.html [ Crash Pass ] -crbug.com/1050754 external/wpt/html/cross-origin-opener-policy/popup-unsafe-none-with-cross-origin.https.html [ Crash Pass ] -crbug.com/1050754 external/wpt/html/cross-origin-opener-policy/popup-unsafe-none-with-same-origin.https.html [ Crash Pass ] -crbug.com/1050754 external/wpt/html/cross-origin-opener-policy/popup-unsafe-none-with-same-site.https.html [ Crash Pass ] -crbug.com/1050754 external/wpt/html/cross-origin-opener-policy/popup-unspecified-with-cross-origin.https.html [ Crash Pass ] -crbug.com/1050754 external/wpt/html/cross-origin-opener-policy/popup-unspecified-with-same-origin.https.html [ Crash Pass ] -crbug.com/1050754 external/wpt/html/cross-origin-opener-policy/popup-unspecified-with-same-site.https.html [ Crash Pass ] -crbug.com/1050754 external/wpt/html/cross-origin-opener-policy/popup-with-structured-header.https.html [ Crash Pass ] -crbug.com/1050754 external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/access-from-coop-page-to-openee_coop-ro_cross-origin.https.html [ Crash Pass ] -crbug.com/1050754 external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/access-from-coop-page-to-opener_coop-ro.https.html [ Crash Pass ] -crbug.com/1050754 external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/access-from-coop-page-to-opener_coop-ro_cross-origin.https.html [ Crash Pass ] -crbug.com/1050754 external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/access-from-coop-page-to-other_coop-ro.https.html [ Crash Pass ] -crbug.com/1050754 external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/access-from-coop-page-to-other_coop-ro_cross-origin.https.html [ Crash Pass ] -crbug.com/1050754 external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/access-to-coop-page-from-openee_coop-ro.https.html [ Crash Pass ] -crbug.com/1050754 external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/access-to-coop-page-from-openee_coop-ro_cross-origin.https.html [ Crash Pass ] -crbug.com/1050754 external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/access-to-coop-page-from-other_coop-ro.https.html [ Crash Pass ] -crbug.com/1050754 external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/access-to-coop-page-from-other_coop-ro_cross-origin.https.html [ Crash Pass ] -crbug.com/1050754 external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/property-blur.https.html [ Crash Pass ] -crbug.com/1050754 external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/property-closed.https.html [ Crash Pass ] -crbug.com/1050754 external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/property-focus.https.html [ Crash Pass ] -crbug.com/1050754 external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/property-frames.https.html [ Crash Pass ] -crbug.com/1050754 external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/property-location-get.https.html [ Crash Pass ] -crbug.com/1050754 external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/property-postmessage-2.https.html [ Crash Pass ] -crbug.com/1050754 external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/property-self.https.html [ Crash Pass ] -crbug.com/1050754 external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/property-top.https.html [ Crash Pass ] -crbug.com/1050754 external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/property-window.https.html [ Crash Pass ] -crbug.com/1050754 external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/report-to-both_coop-ro.https.html [ Crash Pass ] -crbug.com/1050754 external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/reporting-observer.html [ Pass Timeout ] -crbug.com/1050754 external/wpt/html/cross-origin-opener-policy/resource-popup.https.html [ Crash Failure Pass Timeout ] -crbug.com/1050754 external/wpt/html/editing/focus/sequential-focus-navigation-and-the-tabindex-attribute/focus-tabindex-event.html [ Failure ] -crbug.com/1050754 external/wpt/html/infrastructure/safe-passing-of-structured-data/messagechannel.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/no-coop-coep.https.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/serialization-via-notifications-api.any.html [ Failure ] -crbug.com/1050754 external/wpt/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/serialization-via-notifications-api.any.worker.html [ Failure ] -crbug.com/1050754 external/wpt/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/window-sharedworker-failure.https.html [ Failure ] -crbug.com/1050754 external/wpt/html/infrastructure/urls/resolving-urls/query-encoding/navigation.sub.html?encoding=utf8 [ Pass ] -crbug.com/1050754 external/wpt/html/infrastructure/urls/resolving-urls/query-encoding/navigation.sub.html?encoding=windows-1252 [ Pass ] -crbug.com/1050754 external/wpt/html/infrastructure/urls/resolving-urls/query-encoding/navigation.sub.html?encoding=x-cp1251 [ Pass ] -crbug.com/1050754 external/wpt/html/infrastructure/urls/resolving-urls/query-encoding/utf-16be.html?include=workers [ Failure ] -crbug.com/1050754 external/wpt/html/infrastructure/urls/resolving-urls/query-encoding/utf-16le.html?include=workers [ Failure ] -crbug.com/1050754 external/wpt/html/interaction/focus/document-level-focus-apis/document-has-system-focus.html [ Pass ] -crbug.com/1050754 external/wpt/html/interaction/focus/the-autofocus-attribute/document-with-fragment-empty.html [ Crash Pass ] -crbug.com/1050754 external/wpt/html/interaction/focus/the-autofocus-attribute/document-with-fragment-nonexistent.html [ Crash Pass ] -crbug.com/1050754 external/wpt/html/interaction/focus/the-autofocus-attribute/document-with-fragment-top.html [ Crash Pass ] -crbug.com/1050754 external/wpt/html/interaction/focus/the-autofocus-attribute/document-with-fragment-valid.html [ Crash Timeout ] -crbug.com/1050754 external/wpt/html/interaction/focus/the-autofocus-attribute/skip-another-top-level-browsing-context.html [ Crash Pass ] -crbug.com/1050754 external/wpt/html/interaction/focus/the-autofocus-attribute/supported-elements.html [ Crash Pass ] -crbug.com/1050754 external/wpt/html/interaction/focus/the-autofocus-attribute/update-the-rendering.html [ Crash Failure ] -crbug.com/1050754 external/wpt/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-percentage-block-size.html [ Crash Pass ] -crbug.com/1050754 external/wpt/html/semantics/embedded-content/media-elements/src_object_blob.html [ Failure ] -crbug.com/1050754 external/wpt/html/semantics/embedded-content/media-elements/track/track-element/track-cue-mutable-fragment.html [ Timeout ] -crbug.com/1050754 external/wpt/html/semantics/embedded-content/media-elements/track/track-element/track-mode-disabled.html [ Timeout ] -crbug.com/1050754 external/wpt/html/semantics/embedded-content/media-elements/track/track-element/track-remove-by-setting-innerHTML.html [ Timeout ] -crbug.com/1050754 external/wpt/html/semantics/embedded-content/the-embed-element/embed-dimension.html [ Crash Pass ] -crbug.com/1050754 external/wpt/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_anchor_download_allow_downloads.tentative.html [ Timeout ] -crbug.com/1050754 external/wpt/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_navigation_download_block_downloads.sub.tentative.html [ Failure ] -crbug.com/1050754 external/wpt/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-2.html [ Crash Pass ] -crbug.com/1050754 external/wpt/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-3.html [ Crash Pass ] -crbug.com/1050754 external/wpt/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-2.html [ Crash Pass ] -crbug.com/1050754 external/wpt/html/semantics/embedded-content/the-img-element/sizes/implicit-sizes-ignores-width.html [ Timeout ] -crbug.com/1050754 external/wpt/html/semantics/embedded-content/the-object-element/object-events.html [ Crash Timeout ] -crbug.com/1050754 external/wpt/html/semantics/embedded-content/the-object-element/usemap-casing.html [ Crash Pass ] -crbug.com/1050754 external/wpt/html/semantics/forms/form-submission-target/rel-base-target.html [ Crash Failure ] -crbug.com/1050754 external/wpt/html/semantics/forms/form-submission-target/rel-button-target.html [ Crash Failure ] -crbug.com/1050754 external/wpt/html/semantics/forms/form-submission-target/rel-form-target.html [ Crash Failure ] -crbug.com/1050754 external/wpt/html/semantics/forms/form-submission-target/rel-input-target.html [ Crash Failure ] -crbug.com/1050754 external/wpt/html/semantics/forms/input-change-event-properties.html [ Pass Timeout ] -crbug.com/1050754 external/wpt/html/semantics/forms/textfieldselection/selection-not-application-textarea.html [ Pass ] -crbug.com/1050754 external/wpt/html/semantics/forms/the-input-element/checkable-active-onblur.html [ Pass ] -crbug.com/1050754 external/wpt/html/semantics/forms/the-input-element/selection-pointer.html [ Pass ] -crbug.com/1050754 external/wpt/html/semantics/forms/the-label-element/proxy-modifier-click-to-associated-element.tentative.html [ Pass ] -crbug.com/1050754 external/wpt/html/semantics/forms/the-selectmenu-element/selectmenu-parts-structure.tentative.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/semantics/forms/the-selectmenu-element/selectmenu-popup-position.tentative.html [ Failure ] -crbug.com/1050754 external/wpt/html/semantics/forms/the-selectmenu-element/selectmenu-popup.tentative.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/semantics/links/links-created-by-a-and-area-elements/htmlanchorelement_noopener.html [ Crash Pass ] -crbug.com/1050754 external/wpt/html/semantics/links/links-created-by-a-and-area-elements/target_blank_implicit_noopener.html [ Crash Pass ] -crbug.com/1050754 external/wpt/html/semantics/links/links-created-by-a-and-area-elements/target_blank_implicit_noopener_base.html [ Crash Pass ] -crbug.com/1050754 external/wpt/html/semantics/scripting-1/the-script-element/evaluation-order-1-nothrow-sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/html/semantics/scripting-1/the-script-element/evaluation-order-1-sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/html/semantics/scripting-1/the-script-element/import-assertions/dynamic-import-with-assertion-argument.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/html/semantics/scripting-1/the-script-element/json-module/invalid-content-type.tentative.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/html/semantics/scripting-1/the-script-element/json-module/non-object.tentative.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/html/semantics/scripting-1/the-script-element/json-module/repeated-imports.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/html/semantics/scripting-1/the-script-element/microtasks/checkpoint-importScripts.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/html/semantics/scripting-1/the-script-element/module/evaluation-order-1-nothrow-sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/html/semantics/scripting-1/the-script-element/module/evaluation-order-1-sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/html/semantics/scripting-1/the-script-element/module/evaluation-order-2-import-sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/html/semantics/scripting-1/the-script-element/module/evaluation-order-3-dynamic-sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/html/semantics/tabular-data/processing-model-1/span-limits.html [ Failure ] -crbug.com/1050754 external/wpt/html/syntax/xmldecl/xmldecl-1.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/user-activation/consumption-crossorigin.sub.html [ Failure ] -crbug.com/1050754 external/wpt/html/user-activation/consumption-sameorigin.html [ Failure ] -crbug.com/1050754 external/wpt/html/user-activation/propagation-crossorigin.sub.html [ Failure ] -crbug.com/1050754 external/wpt/html/user-activation/propagation-sameorigin.html [ Failure ] -crbug.com/1050754 external/wpt/idle-detection/idle-detection-allowed-by-feature-policy-attribute-redirect-on-load.https.sub.html [ Failure ] -crbug.com/1050754 external/wpt/idle-detection/idle-detection-allowed-by-feature-policy-attribute.https.sub.html [ Failure ] -crbug.com/1050754 external/wpt/idle-detection/idle-detection-allowed-by-feature-policy.https.sub.html [ Failure ] -crbug.com/1050754 external/wpt/idle-detection/idle-detection-default-feature-policy.https.sub.html [ Failure ] -crbug.com/1050754 external/wpt/import-maps/data-driven/parsing-internal.https.html [ Failure ] -crbug.com/1050754 external/wpt/import-maps/data-driven/resolving-internal.https.html [ Failure ] -crbug.com/1050754 external/wpt/inert/inert-retargeting.tentative.html [ Failure ] -crbug.com/1050754 external/wpt/infrastructure/expected-fail/uncaught-exception-following-subtest.html [ Failure ] -crbug.com/1050754 external/wpt/infrastructure/expected-fail/uncaught-exception.html [ Failure ] -crbug.com/1050754 external/wpt/infrastructure/expected-fail/unhandled-rejection-following-subtest.html [ Failure ] -crbug.com/1050754 external/wpt/infrastructure/expected-fail/unhandled-rejection.html [ Failure ] -crbug.com/1050754 external/wpt/infrastructure/server/context.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/infrastructure/server/http2-context.sub.h2.any.html [ Failure ] -crbug.com/1050754 external/wpt/infrastructure/server/http2-context.sub.h2.any.serviceworker.html [ Failure ] -crbug.com/1050754 external/wpt/infrastructure/server/http2-context.sub.h2.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/infrastructure/server/http2-context.sub.h2.any.worker.html [ Failure ] -crbug.com/1050754 external/wpt/infrastructure/server/order-of-metas.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/infrastructure/server/secure-context.https.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/infrastructure/server/title.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/infrastructure/server/wpt-server-http.sub.html [ Failure ] -crbug.com/1050754 external/wpt/infrastructure/server/wpt-server-wpt-flags.sub.html?wpt_flags=https [ Pass ] -crbug.com/1050754 external/wpt/infrastructure/testdriver/actions/actionsWithKeyPressed.html [ Pass ] -crbug.com/1050754 external/wpt/infrastructure/testdriver/actions/crossOrigin.sub.html [ Pass ] -crbug.com/1050754 external/wpt/infrastructure/testdriver/actions/eventOrder.html [ Pass ] -crbug.com/1050754 external/wpt/infrastructure/testdriver/actions/iframe.html [ Pass ] -crbug.com/1050754 external/wpt/infrastructure/testdriver/actions/multiDevice.html [ Pass ] -crbug.com/1050754 external/wpt/infrastructure/testdriver/actions/textEditCommands.html [ Pass ] -crbug.com/1050754 external/wpt/infrastructure/testdriver/click_nested.html [ Pass ] -crbug.com/1050754 external/wpt/infrastructure/testdriver/click_window.html [ Pass ] -crbug.com/1050754 external/wpt/infrastructure/testdriver/delete_all_cookies.html [ Pass ] -crbug.com/1050754 external/wpt/infrastructure/testdriver/file_upload.sub.html [ Failure ] -crbug.com/1050754 external/wpt/infrastructure/testdriver/virtual_authenticator.html [ Crash ] -crbug.com/1050754 external/wpt/intersection-observer/iframe-no-root-with-wrapping-scroller.html [ Failure ] -crbug.com/1050754 external/wpt/intersection-observer/iframe-no-root.html [ Failure ] -crbug.com/1050754 external/wpt/intersection-observer/inline-client-rect.html [ Failure ] -crbug.com/1050754 external/wpt/intersection-observer/multiple-targets.html [ Failure ] -crbug.com/1050754 external/wpt/intersection-observer/multiple-thresholds.html [ Failure ] -crbug.com/1050754 external/wpt/intersection-observer/root-margin-root-element.html [ Failure ] -crbug.com/1050754 external/wpt/intersection-observer/root-margin.html [ Failure ] -crbug.com/1050754 external/wpt/intersection-observer/same-document-no-root.html [ Failure ] -crbug.com/1050754 external/wpt/intersection-observer/same-document-root.html [ Failure ] -crbug.com/1050754 external/wpt/intersection-observer/same-document-with-document-root.html [ Failure ] -crbug.com/1050754 external/wpt/intersection-observer/same-document-zero-size-target.html [ Failure ] -crbug.com/1050754 external/wpt/intersection-observer/target-in-different-window.html [ Crash Pass ] -crbug.com/1050754 external/wpt/intersection-observer/text-target.html [ Failure ] -crbug.com/1050754 external/wpt/intersection-observer/timestamp.html [ Failure ] -crbug.com/1050754 external/wpt/intersection-observer/v2/blur-filter.html [ Failure ] -crbug.com/1050754 external/wpt/intersection-observer/v2/drop-shadow-filter-vertical-rl.html [ Failure ] -crbug.com/1050754 external/wpt/intersection-observer/v2/iframe-target.html [ Failure ] -crbug.com/1050754 external/wpt/intersection-observer/v2/simple-effects.html [ Failure ] -crbug.com/1050754 external/wpt/intersection-observer/v2/simple-occlusion-svg-foreign-object.html [ Failure ] -crbug.com/1050754 external/wpt/intersection-observer/v2/simple-occlusion.html [ Failure ] -crbug.com/1050754 external/wpt/largest-contentful-paint/image-not-fully-visible.html [ Failure ] -crbug.com/1050754 external/wpt/longtask-timing/containerNames.html [ Failure Pass ] -crbug.com/1050754 external/wpt/longtask-timing/containerTypes.html [ Failure Pass ] -crbug.com/1050754 external/wpt/mathml/relations/css-styling/displaystyle-1.html [ Pass ] -crbug.com/1050754 external/wpt/mathml/relations/html5-tree/math-global-event-handlers.tentative.html [ Failure ] -crbug.com/1050754 external/wpt/mathml/relations/html5-tree/tabindex-002.html [ Timeout ] -crbug.com/1050754 external/wpt/media-source/dedicated-worker/mediasource-worker-play-terminate-worker.html [ Pass Timeout ] -crbug.com/1050754 external/wpt/media-source/mediasource-getvideoplaybackquality.html [ Pass ] -crbug.com/1050754 external/wpt/mediacapture-record/passthrough/MediaRecorder-passthrough.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/mediacapture-streams/MediaStream-MediaElement-firstframe.https.html [ Failure ] -crbug.com/1050754 external/wpt/mediacapture-streams/MediaStream-clone.https.html [ Pass ] -crbug.com/1050754 external/wpt/mixed-content/blob.https.sub.html [ Crash Pass ] -crbug.com/1050754 external/wpt/mixed-content/gen/sharedworker-classic-data.http-rp/opt-in/fetch.https.html [ Failure ] -crbug.com/1050754 external/wpt/mixed-content/gen/sharedworker-classic-data.http-rp/opt-in/websocket.https.html [ Failure ] -crbug.com/1050754 external/wpt/mixed-content/gen/sharedworker-classic-data.http-rp/opt-in/xhr.https.html [ Failure ] -crbug.com/1050754 external/wpt/mixed-content/gen/sharedworker-classic-data.meta/opt-in/fetch.https.html [ Failure ] -crbug.com/1050754 external/wpt/mixed-content/gen/sharedworker-classic-data.meta/opt-in/websocket.https.html [ Failure ] -crbug.com/1050754 external/wpt/mixed-content/gen/sharedworker-classic-data.meta/opt-in/xhr.https.html [ Failure ] -crbug.com/1050754 external/wpt/mixed-content/gen/sharedworker-classic.http-rp/opt-in/fetch.https.html [ Failure ] -crbug.com/1050754 external/wpt/mixed-content/gen/sharedworker-classic.http-rp/opt-in/websocket.https.html [ Failure ] -crbug.com/1050754 external/wpt/mixed-content/gen/sharedworker-classic.http-rp/opt-in/xhr.https.html [ Failure ] -crbug.com/1050754 external/wpt/mixed-content/gen/sharedworker-module-data.http-rp/opt-in/fetch.https.html [ Failure ] -crbug.com/1050754 external/wpt/mixed-content/gen/sharedworker-module-data.http-rp/opt-in/websocket.https.html [ Failure ] -crbug.com/1050754 external/wpt/mixed-content/gen/sharedworker-module-data.http-rp/opt-in/xhr.https.html [ Failure ] -crbug.com/1050754 external/wpt/mixed-content/gen/sharedworker-module-data.meta/opt-in/fetch.https.html [ Failure ] -crbug.com/1050754 external/wpt/mixed-content/gen/sharedworker-module-data.meta/opt-in/websocket.https.html [ Failure ] -crbug.com/1050754 external/wpt/mixed-content/gen/sharedworker-module-data.meta/opt-in/xhr.https.html [ Failure ] -crbug.com/1050754 external/wpt/mixed-content/gen/sharedworker-module.http-rp/opt-in/fetch.https.html [ Failure ] -crbug.com/1050754 external/wpt/mixed-content/gen/sharedworker-module.http-rp/opt-in/websocket.https.html [ Failure ] -crbug.com/1050754 external/wpt/mixed-content/gen/sharedworker-module.http-rp/opt-in/xhr.https.html [ Failure ] -crbug.com/1050754 external/wpt/mixed-content/gen/top.http-rp/opt-in/sharedworker-classic.https.html [ Failure ] -crbug.com/1050754 external/wpt/mixed-content/gen/top.http-rp/opt-in/sharedworker-import-data.https.html [ Failure ] -crbug.com/1050754 external/wpt/mixed-content/gen/top.http-rp/opt-in/sharedworker-import.https.html [ Failure ] -crbug.com/1050754 external/wpt/mixed-content/gen/top.http-rp/opt-in/sharedworker-module.https.html [ Failure ] -crbug.com/1050754 external/wpt/mixed-content/gen/top.http-rp/opt-in/video-tag.https.html [ Timeout ] -crbug.com/1050754 external/wpt/mixed-content/gen/top.meta/opt-in/sharedworker-classic.https.html [ Failure ] -crbug.com/1050754 external/wpt/mixed-content/gen/top.meta/opt-in/sharedworker-import-data.https.html [ Failure ] -crbug.com/1050754 external/wpt/mixed-content/gen/top.meta/opt-in/sharedworker-import.https.html [ Failure ] -crbug.com/1050754 external/wpt/mixed-content/gen/top.meta/opt-in/sharedworker-module.https.html [ Failure ] -crbug.com/1050754 external/wpt/mixed-content/gen/top.meta/opt-in/video-tag.https.html [ Timeout ] -crbug.com/1050754 external/wpt/mixed-content/gen/top.meta/unset/sharedworker-classic.https.html [ Failure ] -crbug.com/1050754 external/wpt/mixed-content/gen/top.meta/unset/sharedworker-import-data.https.html [ Failure ] -crbug.com/1050754 external/wpt/mixed-content/gen/top.meta/unset/sharedworker-import.https.html [ Failure ] -crbug.com/1050754 external/wpt/mixed-content/gen/top.meta/unset/sharedworker-module.https.html [ Failure ] -crbug.com/1050754 external/wpt/mixed-content/gen/top.meta/unset/video-tag.https.html [ Timeout ] -crbug.com/1050754 external/wpt/native-io/capacity_allocation_async_basic.tentative.https.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/native-io/close_async.tentative.https.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/native-io/concurrent_io/concurrent_io_flush_async.tentative.https.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/native-io/concurrent_io/concurrent_io_getLength_async.tentative.https.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/native-io/concurrent_io/concurrent_io_read_async.tentative.https.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/native-io/concurrent_io/concurrent_io_setLength_async.tentative.https.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/native-io/concurrent_io/concurrent_io_write_async.tentative.https.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/native-io/delete_async_basic.tentative.https.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/native-io/flush_async_basic.tentative.https.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/native-io/getLength_setLength_async_basic.tentative.https.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/native-io/open_async_failure_handling.tentative.https.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/native-io/open_getAll_async_basic.tentative.https.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/native-io/read_write_async_basic.tentative.https.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/native-io/read_write_correct_arraybufferview_async_basic.tentative.https.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/native-io/rename_async_basic.tentative.https.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/native-io/rename_async_failure_handling.tentative.https.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/native-io/setLength_bounds_async.tentative.https.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/native-io/setLength_capacity_allocation_async.tentative.https.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/native-io/write_capacity_allocation_async.tentative.https.any.html [ Failure ] -crbug.com/1050754 external/wpt/native-io/write_capacity_allocation_async.tentative.https.any.serviceworker.html [ Failure ] -crbug.com/1050754 external/wpt/native-io/write_capacity_allocation_async.tentative.https.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/native-io/write_capacity_allocation_async.tentative.https.any.worker.html [ Failure ] -crbug.com/1050754 external/wpt/native-io/write_getLength_async_basic.tentative.https.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/navigation-timing/test_performance_attributes.sub.html [ Failure Pass ] -crbug.com/1050754 external/wpt/notifications/idlharness.https.any.html [ Failure ] -crbug.com/1050754 external/wpt/notifications/idlharness.https.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/notifications/idlharness.https.any.worker.html [ Failure ] -crbug.com/1050754 external/wpt/paint-timing/fcp-only/fcp-gradient.html [ Pass ] -crbug.com/1050754 external/wpt/paint-timing/fcp-only/fcp-text-input.html [ Failure Pass ] -crbug.com/1050754 external/wpt/paint-timing/with-first-paint/border-image.html [ Pass ] -crbug.com/1050754 external/wpt/paint-timing/with-first-paint/child-painting-first-image.html [ Pass ] -crbug.com/1050754 external/wpt/paint-timing/with-first-paint/first-contentful-canvas-webgl2.html [ Failure ] -crbug.com/1050754 external/wpt/paint-timing/with-first-paint/first-contentful-image.html [ Pass ] -crbug.com/1050754 external/wpt/paint-timing/with-first-paint/first-contentful-paint.html [ Pass ] -crbug.com/1050754 external/wpt/paint-timing/with-first-paint/mask-image.html [ Pass ] -crbug.com/1050754 external/wpt/paint-timing/with-first-paint/sibling-painting-first-image.html [ Failure ] -crbug.com/1050754 external/wpt/payment-method-basic-card/payment-request-canmakepayment-method.https.html [ Failure Timeout ] -crbug.com/1050754 external/wpt/payment-request/constructor_convert_method_data.https.html [ Pass ] -crbug.com/1050754 external/wpt/payment-request/payment-is-showing.https.html [ Failure ] -crbug.com/1050754 external/wpt/payment-request/payment-request-abort-method.https.html [ Pass ] -crbug.com/1050754 external/wpt/payment-request/payment-request-canmakepayment-method.https.html [ Pass ] -crbug.com/1050754 external/wpt/payment-request/payment-request-hasenrolledinstrument-method-protection.tentative.https.html [ Pass ] -crbug.com/1050754 external/wpt/payment-request/payment-request-hasenrolledinstrument-method.tentative.https.html [ Pass ] -crbug.com/1050754 external/wpt/payment-request/payment-request-show-method.https.html [ Failure Timeout ] -crbug.com/1050754 external/wpt/payment-request/rejects_if_not_active.https.html [ Pass ] -crbug.com/1050754 external/wpt/payment-request/show-consume-activation.https.html [ Failure Timeout ] -crbug.com/1050754 external/wpt/payment-request/show-method-optional-promise-rejects.https.html [ Pass ] -crbug.com/1050754 external/wpt/performance-timeline/idlharness.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/permissions-policy/picture-in-picture-allowed-by-permissions-policy-attribute-redirect-on-load.https.sub.html [ Failure ] -crbug.com/1050754 external/wpt/permissions-policy/picture-in-picture-allowed-by-permissions-policy-attribute.https.sub.html [ Failure ] -crbug.com/1050754 external/wpt/permissions-policy/picture-in-picture-allowed-by-permissions-policy.https.sub.html [ Failure ] -crbug.com/1050754 external/wpt/permissions-policy/picture-in-picture-default-permissions-policy.https.sub.html [ Failure ] -crbug.com/1050754 external/wpt/permissions-policy/picture-in-picture-disabled-by-permissions-policy.https.sub.html [ Failure ] -crbug.com/1050754 external/wpt/permissions-policy/picture-in-picture-supported-by-permissions-policy.html [ Failure ] -crbug.com/1050754 external/wpt/permissions-policy/reporting/geolocation-report-only.https.html [ Timeout ] -crbug.com/1050754 external/wpt/permissions-policy/reporting/midi-report-only.https.html [ Pass ] -crbug.com/1050754 external/wpt/permissions-policy/reporting/payment-report-only.https.html [ Failure Timeout ] -crbug.com/1050754 external/wpt/permissions-policy/reporting/picture-in-picture-report-only.html [ Failure ] -crbug.com/1050754 external/wpt/permissions-policy/reporting/picture-in-picture-reporting.html [ Failure ] -crbug.com/1050754 external/wpt/permissions-policy/reporting/serial-report-only.https.html [ Failure ] -crbug.com/1050754 external/wpt/permissions-policy/reporting/serial-reporting.https.html [ Failure ] -crbug.com/1050754 external/wpt/permissions/permissions-query-feature-policy-attribute.https.sub.html [ Pass ] -crbug.com/1050754 external/wpt/picture-in-picture/css-selector.html [ Failure ] -crbug.com/1050754 external/wpt/picture-in-picture/disable-picture-in-picture.html [ Failure ] -crbug.com/1050754 external/wpt/picture-in-picture/enter-picture-in-picture.html [ Failure ] -crbug.com/1050754 external/wpt/picture-in-picture/exit-picture-in-picture.html [ Failure ] -crbug.com/1050754 external/wpt/picture-in-picture/idlharness.window.html [ Failure ] -crbug.com/1050754 external/wpt/picture-in-picture/leave-picture-in-picture.html [ Failure ] -crbug.com/1050754 external/wpt/picture-in-picture/mediastream.html [ Failure ] -crbug.com/1050754 external/wpt/picture-in-picture/picture-in-picture-element.html [ Failure ] -crbug.com/1050754 external/wpt/picture-in-picture/picture-in-picture-window.html [ Failure ] -crbug.com/1050754 external/wpt/picture-in-picture/removed-from-document.html [ Failure ] -crbug.com/1050754 external/wpt/picture-in-picture/request-picture-in-picture-twice.html [ Failure ] -crbug.com/1050754 external/wpt/picture-in-picture/request-picture-in-picture.html [ Failure ] -crbug.com/1050754 external/wpt/picture-in-picture/shadow-dom.html [ Failure ] -crbug.com/1050754 external/wpt/pointerevents/compat/pointerevent_mouse-on-object.html [ Failure ] -crbug.com/1050754 external/wpt/pointerevents/compat/pointerevent_mouse-pointer-on-scrollbar.html [ Failure ] -crbug.com/1050754 external/wpt/pointerevents/compat/pointerevent_mouseevent_key_pressed.html [ Pass ] -crbug.com/1050754 external/wpt/pointerevents/compat/pointerevent_touch-action_two-finger_interaction.html [ Failure ] -crbug.com/1050754 external/wpt/pointerevents/pointerevent_auxclick_is_a_pointerevent.html?mouse [ Timeout ] -crbug.com/1050754 external/wpt/pointerevents/pointerevent_auxclick_is_a_pointerevent.html?pen [ Timeout ] -crbug.com/1050754 external/wpt/pointerevents/pointerevent_movementxy.html?mouse [ Failure ] -crbug.com/1050754 external/wpt/pointerevents/pointerevent_movementxy.html?pen [ Failure ] -crbug.com/1050754 external/wpt/pointerevents/pointerevent_movementxy.html?touch [ Failure ] -crbug.com/1050754 external/wpt/pointerevents/pointerevent_pointerId_scope.html [ Failure ] -crbug.com/1050754 external/wpt/pointerevents/pointerevent_touch-adjustment_click_target.html [ Failure ] -crbug.com/1050754 external/wpt/pointerevents/pointerlock/pointerevent_coordinates_when_locked.html [ Failure ] -crbug.com/1050754 external/wpt/pointerevents/pointerlock/pointerevent_getCoalescedEvents_when_pointerlocked.html [ Failure ] -crbug.com/1050754 external/wpt/pointerevents/pointerlock/pointerevent_movementxy_with_pointerlock.html [ Failure ] -crbug.com/1050754 external/wpt/pointerevents/pointerlock/pointerevent_pointerlock_after_pointercapture.html [ Failure ] -crbug.com/1050754 external/wpt/pointerevents/pointerlock/pointerevent_pointermove_in_pointerlock.html [ Failure ] -crbug.com/1050754 external/wpt/pointerevents/pointerlock/pointerevent_pointermove_on_chorded_mouse_button_when_locked.html [ Failure ] -crbug.com/1050754 external/wpt/pointerevents/pointerlock/pointerevent_pointerrawupdate_in_pointerlock.html [ Failure ] -crbug.com/1050754 external/wpt/pointerlock/mouse_buttons_back_forward.html [ Failure ] -crbug.com/1050754 external/wpt/pointerlock/movementX_Y_basic.html [ Failure ] -crbug.com/1050754 external/wpt/pointerlock/pointerlock_remove_target.html [ Failure ] -crbug.com/1050754 external/wpt/pointerlock/pointerlock_remove_target_on_mouseup.html [ Failure ] -crbug.com/1050754 external/wpt/pointerlock/pointerlock_shadow.html [ Failure ] -crbug.com/1050754 external/wpt/preload/link-header-preload-imagesrcset.html [ Failure ] -crbug.com/1050754 external/wpt/push-api/idlharness.https.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/4K+1/gen/top.http-rp/no-referrer-when-downgrade/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/4K+1/gen/top.http-rp/origin-when-cross-origin/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/4K+1/gen/top.http-rp/same-origin/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/4K+1/gen/top.http-rp/strict-origin-when-cross-origin/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/4K+1/gen/top.http-rp/unsafe-url/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/4K+1/gen/top.http-rp/unset/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/4K+1/gen/top.meta/no-referrer-when-downgrade/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/4K+1/gen/top.meta/origin-when-cross-origin/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/4K+1/gen/top.meta/same-origin/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/4K+1/gen/top.meta/strict-origin-when-cross-origin/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/4K+1/gen/top.meta/unsafe-url/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/4K+1/gen/top.meta/unset/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/4K-1/gen/top.http-rp/no-referrer-when-downgrade/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/4K-1/gen/top.http-rp/origin-when-cross-origin/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/4K-1/gen/top.http-rp/same-origin/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/4K-1/gen/top.http-rp/strict-origin-when-cross-origin/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/4K-1/gen/top.http-rp/unsafe-url/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/4K-1/gen/top.http-rp/unset/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/4K-1/gen/top.meta/no-referrer-when-downgrade/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/4K-1/gen/top.meta/origin-when-cross-origin/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/4K-1/gen/top.meta/same-origin/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/4K-1/gen/top.meta/strict-origin-when-cross-origin/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/4K-1/gen/top.meta/unsafe-url/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/4K-1/gen/top.meta/unset/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/4K/gen/top.http-rp/no-referrer-when-downgrade/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/4K/gen/top.http-rp/origin-when-cross-origin/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/4K/gen/top.http-rp/same-origin/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/4K/gen/top.http-rp/strict-origin-when-cross-origin/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/4K/gen/top.http-rp/unsafe-url/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/4K/gen/top.http-rp/unset/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/4K/gen/top.meta/no-referrer-when-downgrade/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/4K/gen/top.meta/origin-when-cross-origin/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/4K/gen/top.meta/same-origin/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/4K/gen/top.meta/strict-origin-when-cross-origin/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/4K/gen/top.meta/unsafe-url/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/4K/gen/top.meta/unset/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/iframe.http-rp/no-referrer-when-downgrade/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/iframe.http-rp/no-referrer-when-downgrade/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/iframe.http-rp/no-referrer/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/iframe.http-rp/no-referrer/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/iframe.http-rp/origin-when-cross-origin/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/iframe.http-rp/origin-when-cross-origin/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/iframe.http-rp/origin/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/iframe.http-rp/origin/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/iframe.http-rp/same-origin/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/iframe.http-rp/same-origin/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/iframe.http-rp/strict-origin-when-cross-origin/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/iframe.http-rp/strict-origin-when-cross-origin/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/iframe.http-rp/strict-origin/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/iframe.http-rp/strict-origin/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/iframe.http-rp/unsafe-url/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/iframe.http-rp/unsafe-url/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/iframe.http-rp/unset/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/iframe.http-rp/unset/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/iframe.meta/always/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/iframe.meta/always/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/iframe.meta/default/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/iframe.meta/default/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/iframe.meta/never/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/iframe.meta/never/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/iframe.meta/no-referrer-when-downgrade/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/iframe.meta/no-referrer-when-downgrade/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/iframe.meta/no-referrer/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/iframe.meta/no-referrer/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/iframe.meta/origin-when-cross-origin/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/iframe.meta/origin-when-cross-origin/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/iframe.meta/origin-when-crossorigin/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/iframe.meta/origin-when-crossorigin/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/iframe.meta/origin/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/iframe.meta/origin/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/iframe.meta/same-origin/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/iframe.meta/same-origin/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/iframe.meta/strict-origin-when-cross-origin/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/iframe.meta/strict-origin-when-cross-origin/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/iframe.meta/strict-origin/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/iframe.meta/strict-origin/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/iframe.meta/unsafe-url/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/iframe.meta/unsafe-url/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/iframe.meta/unset/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/iframe.meta/unset/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc-inherit.http-rp/no-referrer-when-downgrade/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc-inherit.http-rp/no-referrer-when-downgrade/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc-inherit.http-rp/no-referrer/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc-inherit.http-rp/no-referrer/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc-inherit.http-rp/origin-when-cross-origin/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc-inherit.http-rp/origin-when-cross-origin/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc-inherit.http-rp/origin/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc-inherit.http-rp/origin/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc-inherit.http-rp/same-origin/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc-inherit.http-rp/same-origin/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc-inherit.http-rp/strict-origin-when-cross-origin/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc-inherit.http-rp/strict-origin-when-cross-origin/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc-inherit.http-rp/strict-origin/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc-inherit.http-rp/strict-origin/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc-inherit.http-rp/unsafe-url/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc-inherit.http-rp/unsafe-url/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc-inherit.http-rp/unset/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc-inherit.http-rp/unset/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc-inherit.meta/always/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc-inherit.meta/always/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc-inherit.meta/default/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc-inherit.meta/default/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc-inherit.meta/never/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc-inherit.meta/never/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc-inherit.meta/no-referrer-when-downgrade/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc-inherit.meta/no-referrer-when-downgrade/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc-inherit.meta/no-referrer/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc-inherit.meta/no-referrer/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc-inherit.meta/origin-when-cross-origin/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc-inherit.meta/origin-when-cross-origin/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc-inherit.meta/origin-when-crossorigin/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc-inherit.meta/origin-when-crossorigin/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc-inherit.meta/origin/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc-inherit.meta/origin/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc-inherit.meta/same-origin/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc-inherit.meta/same-origin/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc-inherit.meta/strict-origin-when-cross-origin/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc-inherit.meta/strict-origin-when-cross-origin/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc-inherit.meta/strict-origin/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc-inherit.meta/strict-origin/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc-inherit.meta/unsafe-url/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc-inherit.meta/unsafe-url/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc-inherit.meta/unset/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc-inherit.meta/unset/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc.meta/always/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc.meta/always/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc.meta/default/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc.meta/default/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc.meta/never/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc.meta/never/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc.meta/no-referrer-when-downgrade/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc.meta/no-referrer-when-downgrade/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc.meta/no-referrer/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc.meta/no-referrer/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc.meta/origin-when-cross-origin/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc.meta/origin-when-cross-origin/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc.meta/origin-when-crossorigin/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc.meta/origin-when-crossorigin/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc.meta/origin/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc.meta/origin/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc.meta/same-origin/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc.meta/same-origin/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc.meta/strict-origin-when-cross-origin/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc.meta/strict-origin-when-cross-origin/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc.meta/strict-origin/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc.meta/strict-origin/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc.meta/unsafe-url/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc.meta/unsafe-url/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/top.http-rp/no-referrer-when-downgrade/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/top.http-rp/no-referrer-when-downgrade/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/top.http-rp/no-referrer/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/top.http-rp/no-referrer/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/top.http-rp/origin-when-cross-origin/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/top.http-rp/origin-when-cross-origin/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/top.http-rp/origin/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/top.http-rp/origin/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/top.http-rp/same-origin/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/top.http-rp/same-origin/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/top.http-rp/strict-origin-when-cross-origin/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/top.http-rp/strict-origin-when-cross-origin/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/top.http-rp/strict-origin/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/top.http-rp/strict-origin/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/top.http-rp/unsafe-url/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/top.http-rp/unsafe-url/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/top.http-rp/unset/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/top.http-rp/unset/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/top.meta/always/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/top.meta/always/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/top.meta/default/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/top.meta/default/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/top.meta/never/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/top.meta/never/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/top.meta/no-referrer-when-downgrade/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/top.meta/no-referrer-when-downgrade/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/top.meta/no-referrer/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/top.meta/no-referrer/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/top.meta/origin-when-cross-origin/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/top.meta/origin-when-cross-origin/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/top.meta/origin-when-crossorigin/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/top.meta/origin-when-crossorigin/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/top.meta/origin/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/top.meta/origin/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/top.meta/same-origin/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/top.meta/same-origin/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/top.meta/strict-origin-when-cross-origin/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/top.meta/strict-origin-when-cross-origin/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/top.meta/strict-origin/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/top.meta/strict-origin/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/top.meta/unsafe-url/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/top.meta/unsafe-url/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/top.meta/unset/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/top.meta/unset/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/requestidlecallback/callback-suspended.html [ Crash Pass ] -crbug.com/1050754 external/wpt/requestidlecallback/callback-timeout-when-busy.html [ Pass ] -crbug.com/1050754 external/wpt/requestidlecallback/callback-timeout.html [ Pass ] -crbug.com/1050754 external/wpt/requestidlecallback/callback-xhr-sync.html [ Pass ] -crbug.com/1050754 external/wpt/resource-timing/nested-context-navigations-embed.html [ Crash Pass ] -crbug.com/1050754 external/wpt/resource-timing/nested-context-navigations-iframe.html [ Crash Pass ] -crbug.com/1050754 external/wpt/resource-timing/nested-context-navigations-object.html [ Crash Pass ] -crbug.com/1050754 external/wpt/resource-timing/object-not-found-adds-entry.html [ Crash Pass ] -crbug.com/1050754 external/wpt/resource-timing/resource_timing_buffer_full_eventually.html [ Timeout ] -crbug.com/1050754 external/wpt/screen-orientation/active-lock.html [ Failure ] -crbug.com/1050754 external/wpt/screen-orientation/lock-basic.html [ Timeout ] -crbug.com/1050754 external/wpt/screen-orientation/lock-sandboxed-iframe.html [ Failure ] -crbug.com/1050754 external/wpt/screen-orientation/onchange-event-subframe.html [ Failure ] -crbug.com/1050754 external/wpt/screen-orientation/onchange-event.html [ Failure ] -crbug.com/1050754 external/wpt/scroll-to-text-fragment/find-range-from-text-directive.html [ Crash Timeout ] -crbug.com/1050754 external/wpt/scroll-to-text-fragment/force-load-at-top.html [ Crash Timeout ] -crbug.com/1050754 external/wpt/scroll-to-text-fragment/redirects.html [ Timeout ] -crbug.com/1050754 external/wpt/scroll-to-text-fragment/scroll-to-text-fragment-security.sub.html [ Timeout ] -crbug.com/1050754 external/wpt/scroll-to-text-fragment/scroll-to-text-fragment.html [ Crash Timeout ] -crbug.com/1050754 external/wpt/selection/contenteditable/modifying-selection-with-primary-mouse-button.tentative.html [ Pass ] -crbug.com/1050754 external/wpt/serial/idlharness.https.any.html [ Failure ] -crbug.com/1050754 external/wpt/serial/idlharness.https.any.worker.html [ Failure ] -crbug.com/1050754 external/wpt/serial/serial-allowed-by-feature-policy-attribute-redirect-on-load.https.sub.html [ Timeout ] -crbug.com/1050754 external/wpt/serial/serial-allowed-by-feature-policy-attribute.https.sub.html [ Timeout ] -crbug.com/1050754 external/wpt/serial/serial-allowed-by-feature-policy.https.sub.html [ Timeout ] -crbug.com/1050754 external/wpt/serial/serial-default-feature-policy.https.sub.html [ Timeout ] -crbug.com/1050754 external/wpt/serial/serial-disabled-by-feature-policy.https.sub.html [ Timeout ] -crbug.com/1050754 external/wpt/serial/serialPort_close.https.any.html [ Failure ] -crbug.com/1050754 external/wpt/serial/serialPort_close.https.any.worker.html [ Failure ] -crbug.com/1050754 external/wpt/serial/serialPort_getInfo.https.any.html [ Failure ] -crbug.com/1050754 external/wpt/serial/serialPort_getInfo.https.any.worker.html [ Failure ] -crbug.com/1050754 external/wpt/serial/serialPort_getSignals.https.any.html [ Failure ] -crbug.com/1050754 external/wpt/serial/serialPort_getSignals.https.any.worker.html [ Failure ] -crbug.com/1050754 external/wpt/serial/serialPort_ondisconnect.https.any.html [ Failure ] -crbug.com/1050754 external/wpt/serial/serialPort_ondisconnect.https.any.worker.html [ Failure ] -crbug.com/1050754 external/wpt/serial/serialPort_open.https.any.html [ Failure ] -crbug.com/1050754 external/wpt/serial/serialPort_open.https.any.worker.html [ Failure ] -crbug.com/1050754 external/wpt/serial/serialPort_readable_cancel.https.any.html [ Failure ] -crbug.com/1050754 external/wpt/serial/serialPort_readable_cancel.https.any.worker.html [ Failure ] -crbug.com/1050754 external/wpt/serial/serialPort_readable_chain.https.any.html [ Failure ] -crbug.com/1050754 external/wpt/serial/serialPort_readable_chain.https.any.worker.html [ Failure ] -crbug.com/1050754 external/wpt/serial/serialPort_readable_closeLocked.https.any.html [ Failure ] -crbug.com/1050754 external/wpt/serial/serialPort_readable_closeLocked.https.any.worker.html [ Failure ] -crbug.com/1050754 external/wpt/serial/serialPort_readable_disconnect.https.any.html [ Failure ] -crbug.com/1050754 external/wpt/serial/serialPort_readable_disconnect.https.any.worker.html [ Failure ] -crbug.com/1050754 external/wpt/serial/serialPort_readable_largeRead.https.any.html [ Failure ] -crbug.com/1050754 external/wpt/serial/serialPort_readable_largeRead.https.any.worker.html [ Failure ] -crbug.com/1050754 external/wpt/serial/serialPort_readable_open.https.any.html [ Failure ] -crbug.com/1050754 external/wpt/serial/serialPort_readable_open.https.any.worker.html [ Failure ] -crbug.com/1050754 external/wpt/serial/serialPort_readable_parityError.https.any.html [ Failure ] -crbug.com/1050754 external/wpt/serial/serialPort_readable_parityError.https.any.worker.html [ Failure ] -crbug.com/1050754 external/wpt/serial/serialPort_readable_pipeThrough.https.any.html [ Failure ] -crbug.com/1050754 external/wpt/serial/serialPort_readable_pipeThrough.https.any.worker.html [ Failure ] -crbug.com/1050754 external/wpt/serial/serialPort_readable_smallRead.https.any.html [ Failure ] -crbug.com/1050754 external/wpt/serial/serialPort_readable_smallRead.https.any.worker.html [ Failure ] -crbug.com/1050754 external/wpt/serial/serialPort_setSignals.https.any.html [ Failure ] -crbug.com/1050754 external/wpt/serial/serialPort_setSignals.https.any.worker.html [ Failure ] -crbug.com/1050754 external/wpt/serial/serialPort_writable.https.any.html [ Failure ] -crbug.com/1050754 external/wpt/serial/serialPort_writable.https.any.worker.html [ Failure ] -crbug.com/1050754 external/wpt/serial/serial_getPorts.https.any.html [ Failure ] -crbug.com/1050754 external/wpt/serial/serial_getPorts.https.any.worker.html [ Failure ] -crbug.com/1050754 external/wpt/serial/serial_onconnect.https.any.html [ Failure ] -crbug.com/1050754 external/wpt/serial/serial_onconnect.https.any.worker.html [ Failure ] -crbug.com/1050754 external/wpt/serial/serial_ondisconnect.https.any.html [ Failure ] -crbug.com/1050754 external/wpt/serial/serial_ondisconnect.https.any.worker.html [ Failure ] -crbug.com/1050754 external/wpt/serial/serial_requestPort.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/service-workers/service-worker/ServiceWorkerGlobalScope/registration-attribute.https.html [ Crash Pass ] -crbug.com/1050754 external/wpt/service-workers/service-worker/claim-shared-worker-fetch.https.html [ Failure ] -crbug.com/1050754 external/wpt/service-workers/service-worker/claim-worker-fetch.https.html [ Crash Pass ] -crbug.com/1050754 external/wpt/service-workers/service-worker/client-navigate.https.html [ Crash Pass ] -crbug.com/1050754 external/wpt/service-workers/service-worker/clients-matchall-frozen.https.html [ Timeout ] -crbug.com/1050754 external/wpt/service-workers/service-worker/clients-matchall-include-uncontrolled.https.html [ Failure ] -crbug.com/1050754 external/wpt/service-workers/service-worker/credentials.https.html [ Crash Pass ] -crbug.com/1050754 external/wpt/service-workers/service-worker/fetch-canvas-tainting-video-cache.https.html [ Failure ] -crbug.com/1050754 external/wpt/service-workers/service-worker/fetch-canvas-tainting-video.https.html [ Failure ] -crbug.com/1050754 external/wpt/service-workers/service-worker/fetch-event-referrer-policy.https.html [ Failure ] -crbug.com/1050754 external/wpt/service-workers/service-worker/fetch-event-respond-with-custom-response.https.html [ Crash Pass ] -crbug.com/1050754 external/wpt/service-workers/service-worker/fetch-event-respond-with-readable-stream.https.html [ Crash Pass ] -crbug.com/1050754 external/wpt/service-workers/service-worker/import-scripts-redirect.https.html [ Crash Timeout ] -crbug.com/1050754 external/wpt/service-workers/service-worker/nested-blob-url-workers.https.html [ Crash Pass ] -crbug.com/1050754 external/wpt/service-workers/service-worker/postmessage.https.html [ Crash Pass ] -crbug.com/1050754 external/wpt/service-workers/service-worker/referrer-policy-header.https.html [ Crash Pass ] -crbug.com/1050754 external/wpt/service-workers/service-worker/register-closed-window.https.html [ Crash Pass ] -crbug.com/1050754 external/wpt/service-workers/service-worker/registration-updateviacache.https.html [ Crash Failure ] -crbug.com/1050754 external/wpt/service-workers/service-worker/update-after-oneday.https.html [ Timeout ] -crbug.com/1050754 external/wpt/service-workers/service-worker/update-bytecheck.https.html [ Crash Pass ] -crbug.com/1050754 external/wpt/service-workers/service-worker/update-import-scripts.https.html [ Crash Pass ] -crbug.com/1050754 external/wpt/service-workers/service-worker/update-not-allowed.https.html [ Crash Pass ] -crbug.com/1050754 external/wpt/service-workers/service-worker/update-registration-with-type.https.html [ Crash Pass ] -crbug.com/1050754 external/wpt/service-workers/service-worker/windowclient-navigate.https.html [ Crash Pass ] -crbug.com/1050754 external/wpt/shadow-dom/MouseEvent-prototype-offsetX-offsetY.html [ Failure ] -crbug.com/1050754 external/wpt/shadow-dom/untriaged/html-elements-in-shadow-trees/html-forms/test-003.html [ Crash ] -crbug.com/1050754 external/wpt/shape-detection/detection-HTMLVideoElement.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/shape-detection/idlharness.https.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/storage-access-api/hasStorageAccess.sub.window.html [ Timeout ] -crbug.com/1050754 external/wpt/storage-access-api/requestStorageAccess.sub.window.html [ Failure ] -crbug.com/1050754 external/wpt/storage-access-api/storageAccess.testdriver.sub.html [ Failure ] -crbug.com/1050754 external/wpt/streams/piping/abort.any.js [ Skip ] -crbug.com/1050754 external/wpt/streams/piping/close-propagation-backward.any.js [ Skip ] -crbug.com/1050754 external/wpt/streams/piping/close-propagation-forward.any.js [ Skip ] -crbug.com/1050754 external/wpt/streams/piping/error-propagation-backward.any.js [ Skip ] -crbug.com/1050754 external/wpt/streams/piping/error-propagation-forward.any.js [ Skip ] -crbug.com/1050754 external/wpt/streams/piping/flow-control.any.js [ Skip ] -crbug.com/1050754 external/wpt/streams/piping/general.any.js [ Skip ] -crbug.com/1050754 external/wpt/streams/piping/multiple-propagation.any.js [ Skip ] -crbug.com/1050754 external/wpt/streams/piping/pipe-through.any.js [ Skip ] -crbug.com/1050754 external/wpt/streams/piping/then-interception.any.js [ Skip ] -crbug.com/1050754 external/wpt/streams/piping/throwing-options.any.js [ Skip ] -crbug.com/1050754 external/wpt/streams/piping/transform-streams.any.js [ Skip ] -crbug.com/1050754 external/wpt/streams/queuing-strategies.any.js [ Skip ] -crbug.com/1050754 external/wpt/streams/readable-byte-streams/bad-buffers-and-views.any.js [ Skip ] -crbug.com/1050754 external/wpt/streams/readable-byte-streams/construct-byob-request.any.js [ Skip ] -crbug.com/1050754 external/wpt/streams/readable-byte-streams/general.any.js [ Skip ] -crbug.com/1050754 external/wpt/streams/readable-streams/async-iterator.any.js [ Skip ] -crbug.com/1050754 external/wpt/streams/readable-streams/bad-strategies.any.js [ Skip ] -crbug.com/1050754 external/wpt/streams/readable-streams/bad-underlying-sources.any.js [ Skip ] -crbug.com/1050754 external/wpt/streams/readable-streams/cancel.any.js [ Skip ] -crbug.com/1050754 external/wpt/streams/readable-streams/constructor.any.js [ Skip ] -crbug.com/1050754 external/wpt/streams/readable-streams/count-queuing-strategy-integration.any.js [ Skip ] -crbug.com/1050754 external/wpt/streams/readable-streams/default-reader.any.js [ Skip ] -crbug.com/1050754 external/wpt/streams/readable-streams/floating-point-total-queue-size.any.js [ Skip ] -crbug.com/1050754 external/wpt/streams/readable-streams/garbage-collection.any.js [ Skip ] -crbug.com/1050754 external/wpt/streams/readable-streams/general.any.js [ Skip ] -crbug.com/1050754 external/wpt/streams/readable-streams/patched-global.any.js [ Skip ] -crbug.com/1050754 external/wpt/streams/readable-streams/reentrant-strategies.any.js [ Skip ] -crbug.com/1050754 external/wpt/streams/readable-streams/tee.any.js [ Skip ] -crbug.com/1050754 external/wpt/streams/readable-streams/templated.any.js [ Skip ] -crbug.com/1050754 external/wpt/streams/transferable/shared-worker.html [ Failure ] -crbug.com/1050754 external/wpt/streams/transform-streams/backpressure.any.js [ Skip ] -crbug.com/1050754 external/wpt/streams/transform-streams/errors.any.js [ Skip ] -crbug.com/1050754 external/wpt/streams/transform-streams/flush.any.js [ Skip ] -crbug.com/1050754 external/wpt/streams/transform-streams/general.any.js [ Skip ] -crbug.com/1050754 external/wpt/streams/transform-streams/lipfuzz.any.js [ Skip ] -crbug.com/1050754 external/wpt/streams/transform-streams/patched-global.any.js [ Skip ] -crbug.com/1050754 external/wpt/streams/transform-streams/properties.any.js [ Skip ] -crbug.com/1050754 external/wpt/streams/transform-streams/reentrant-strategies.any.js [ Skip ] -crbug.com/1050754 external/wpt/streams/transform-streams/strategies.any.js [ Skip ] -crbug.com/1050754 external/wpt/streams/transform-streams/terminate.any.js [ Skip ] -crbug.com/1050754 external/wpt/streams/writable-streams/aborting.any.js [ Skip ] -crbug.com/1050754 external/wpt/streams/writable-streams/bad-strategies.any.js [ Skip ] -crbug.com/1050754 external/wpt/streams/writable-streams/bad-underlying-sinks.any.js [ Skip ] -crbug.com/1050754 external/wpt/streams/writable-streams/byte-length-queuing-strategy.any.js [ Skip ] -crbug.com/1050754 external/wpt/streams/writable-streams/close.any.js [ Skip ] -crbug.com/1050754 external/wpt/streams/writable-streams/constructor.any.js [ Skip ] -crbug.com/1050754 external/wpt/streams/writable-streams/count-queuing-strategy.any.js [ Skip ] -crbug.com/1050754 external/wpt/streams/writable-streams/error.any.js [ Skip ] -crbug.com/1050754 external/wpt/streams/writable-streams/floating-point-total-queue-size.any.js [ Skip ] -crbug.com/1050754 external/wpt/streams/writable-streams/general.any.js [ Skip ] -crbug.com/1050754 external/wpt/streams/writable-streams/properties.any.js [ Skip ] -crbug.com/1050754 external/wpt/streams/writable-streams/reentrant-strategy.any.js [ Skip ] -crbug.com/1050754 external/wpt/streams/writable-streams/start.any.js [ Skip ] -crbug.com/1050754 external/wpt/streams/writable-streams/write.any.js [ Skip ] -crbug.com/1050754 external/wpt/svg/animations/scripted/animatetransform-type-missing-value-default.html [ Failure ] -crbug.com/1050754 external/wpt/svg/painting/parsing/stroke-width-computed.svg [ Failure ] -crbug.com/1050754 external/wpt/svg/struct/scripted/autofocus-attribute.svg [ Crash Failure ] -crbug.com/1050754 external/wpt/svg/types/scripted/SVGGraphicsElement.getBBox-02.html [ Failure ] -crbug.com/1050754 external/wpt/trusted-types/trusted-types-navigation.tentative.html [ Crash Pass ] -crbug.com/1050754 external/wpt/uievents/click/auxclick_event.html [ Timeout ] -crbug.com/1050754 external/wpt/uievents/interface/keyboard-accesskey-click-event.html [ Pass ] -crbug.com/1050754 external/wpt/uievents/keyboard/modifier-keys-combinations.html [ Pass ] -crbug.com/1050754 external/wpt/uievents/keyboard/modifier-keys.html [ Pass ] -crbug.com/1050754 external/wpt/uievents/order-of-events/focus-events/focus-contained.html [ Pass Timeout ] -crbug.com/1050754 external/wpt/uievents/order-of-events/focus-events/focus-management-expectations.html [ Pass ] -crbug.com/1050754 external/wpt/uievents/order-of-events/focus-events/focus.html [ Pass Timeout ] -crbug.com/1050754 external/wpt/uievents/order-of-events/mouse-events/wheel-basic.html [ Pass ] -crbug.com/1050754 external/wpt/uievents/order-of-events/mouse-events/wheel-scrolling.html [ Pass ] -crbug.com/1050754 external/wpt/upgrade-insecure-requests/gen/iframe-blank-inherit.meta/upgrade/sharedworker-import-data.https.html [ Failure ] -crbug.com/1050754 external/wpt/upgrade-insecure-requests/gen/iframe-blank-inherit.meta/upgrade/sharedworker-import.https.html [ Failure ] -crbug.com/1050754 external/wpt/upgrade-insecure-requests/gen/sharedworker-classic-data.http-rp/upgrade/fetch.https.html [ Failure ] -crbug.com/1050754 external/wpt/upgrade-insecure-requests/gen/sharedworker-classic-data.http-rp/upgrade/websocket.https.html [ Failure ] -crbug.com/1050754 external/wpt/upgrade-insecure-requests/gen/sharedworker-classic-data.http-rp/upgrade/xhr.https.html [ Failure ] -crbug.com/1050754 external/wpt/upgrade-insecure-requests/gen/sharedworker-classic-data.meta/upgrade/fetch.https.html [ Failure ] -crbug.com/1050754 external/wpt/upgrade-insecure-requests/gen/sharedworker-classic-data.meta/upgrade/websocket.https.html [ Failure ] -crbug.com/1050754 external/wpt/upgrade-insecure-requests/gen/sharedworker-classic-data.meta/upgrade/xhr.https.html [ Failure ] -crbug.com/1050754 external/wpt/upgrade-insecure-requests/gen/sharedworker-classic.http-rp/upgrade/fetch.https.html [ Failure ] -crbug.com/1050754 external/wpt/upgrade-insecure-requests/gen/sharedworker-classic.http-rp/upgrade/websocket.https.html [ Failure ] -crbug.com/1050754 external/wpt/upgrade-insecure-requests/gen/sharedworker-classic.http-rp/upgrade/xhr.https.html [ Failure ] -crbug.com/1050754 external/wpt/upgrade-insecure-requests/gen/sharedworker-module-data.http-rp/upgrade/fetch.https.html [ Failure ] -crbug.com/1050754 external/wpt/upgrade-insecure-requests/gen/sharedworker-module-data.http-rp/upgrade/websocket.https.html [ Failure ] -crbug.com/1050754 external/wpt/upgrade-insecure-requests/gen/sharedworker-module-data.http-rp/upgrade/xhr.https.html [ Failure ] -crbug.com/1050754 external/wpt/upgrade-insecure-requests/gen/sharedworker-module-data.meta/upgrade/fetch.https.html [ Failure ] -crbug.com/1050754 external/wpt/upgrade-insecure-requests/gen/sharedworker-module-data.meta/upgrade/websocket.https.html [ Failure ] -crbug.com/1050754 external/wpt/upgrade-insecure-requests/gen/sharedworker-module-data.meta/upgrade/xhr.https.html [ Failure ] -crbug.com/1050754 external/wpt/upgrade-insecure-requests/gen/sharedworker-module.http-rp/upgrade/fetch.https.html [ Failure ] -crbug.com/1050754 external/wpt/upgrade-insecure-requests/gen/sharedworker-module.http-rp/upgrade/websocket.https.html [ Failure ] -crbug.com/1050754 external/wpt/upgrade-insecure-requests/gen/sharedworker-module.http-rp/upgrade/xhr.https.html [ Failure ] -crbug.com/1050754 external/wpt/upgrade-insecure-requests/gen/srcdoc-inherit.meta/upgrade/sharedworker-import-data.https.html [ Failure ] -crbug.com/1050754 external/wpt/upgrade-insecure-requests/gen/srcdoc-inherit.meta/upgrade/sharedworker-import.https.html [ Failure ] -crbug.com/1050754 external/wpt/upgrade-insecure-requests/gen/top.http-rp/upgrade/sharedworker-import-data.https.html [ Failure ] -crbug.com/1050754 external/wpt/upgrade-insecure-requests/gen/top.http-rp/upgrade/sharedworker-import.https.html [ Failure ] -crbug.com/1050754 external/wpt/upgrade-insecure-requests/gen/top.meta/upgrade/sharedworker-import-data.https.html [ Failure ] -crbug.com/1050754 external/wpt/upgrade-insecure-requests/gen/top.meta/upgrade/sharedworker-import.https.html [ Failure ] -crbug.com/1050754 external/wpt/upgrade-insecure-requests/link-upgrade.sub.https.html [ Crash Pass ] -crbug.com/1050754 external/wpt/url/failure.html [ Crash Failure ] -crbug.com/1050754 external/wpt/urlpattern/urlpattern.https.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/user-timing/idlharness.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/video-rvfc/request-video-frame-callback-before-xr-session.https.html [ Failure ] -crbug.com/1050754 external/wpt/video-rvfc/request-video-frame-callback-during-xr-session.https.html [ Failure ] -crbug.com/1050754 external/wpt/visual-viewport/viewport-resize-event-on-load-overflowing-page.html [ Crash Failure ] -crbug.com/1050754 external/wpt/visual-viewport/viewport-unscaled-scale.html [ Failure ] -crbug.com/1050754 external/wpt/wasm/jsapi/constructor/compile.any.js [ Skip ] -crbug.com/1050754 external/wpt/wasm/jsapi/constructor/instantiate-bad-imports.any.js [ Skip ] -crbug.com/1050754 external/wpt/wasm/jsapi/constructor/instantiate.any.js [ Skip ] -crbug.com/1050754 external/wpt/wasm/jsapi/constructor/multi-value.any.js [ Skip ] -crbug.com/1050754 external/wpt/wasm/jsapi/constructor/toStringTag.any.js [ Skip ] -crbug.com/1050754 external/wpt/wasm/jsapi/constructor/validate.any.js [ Skip ] -crbug.com/1050754 external/wpt/wasm/jsapi/functions/incumbent.html [ Pass ] -crbug.com/1050754 external/wpt/wasm/jsapi/global/constructor.any.js [ Skip ] -crbug.com/1050754 external/wpt/wasm/jsapi/global/toString.any.js [ Skip ] -crbug.com/1050754 external/wpt/wasm/jsapi/global/type.tentative.any.js [ Skip ] -crbug.com/1050754 external/wpt/wasm/jsapi/global/value-get-set.any.js [ Skip ] -crbug.com/1050754 external/wpt/wasm/jsapi/global/valueOf.any.js [ Skip ] -crbug.com/1050754 external/wpt/wasm/jsapi/instance/constructor-bad-imports.any.js [ Skip ] -crbug.com/1050754 external/wpt/wasm/jsapi/instance/constructor-caching.any.js [ Skip ] -crbug.com/1050754 external/wpt/wasm/jsapi/instance/constructor.any.js [ Skip ] -crbug.com/1050754 external/wpt/wasm/jsapi/instance/exports.any.js [ Skip ] -crbug.com/1050754 external/wpt/wasm/jsapi/instance/toString.any.js [ Skip ] -crbug.com/1050754 external/wpt/wasm/jsapi/interface.any.js [ Skip ] -crbug.com/1050754 external/wpt/wasm/jsapi/memory/buffer.any.js [ Skip ] -crbug.com/1050754 external/wpt/wasm/jsapi/memory/constructor-shared.tentative.any.html [ Failure Pass ] -crbug.com/1050754 external/wpt/wasm/jsapi/memory/constructor-shared.tentative.any.js [ Skip ] -crbug.com/1050754 external/wpt/wasm/jsapi/memory/constructor-shared.tentative.any.worker.html [ Failure Pass ] -crbug.com/1050754 external/wpt/wasm/jsapi/memory/constructor-types.tentative.any.js [ Skip ] -crbug.com/1050754 external/wpt/wasm/jsapi/memory/constructor.any.js [ Skip ] -crbug.com/1050754 external/wpt/wasm/jsapi/memory/grow.any.html [ Failure Pass ] -crbug.com/1050754 external/wpt/wasm/jsapi/memory/grow.any.js [ Skip ] -crbug.com/1050754 external/wpt/wasm/jsapi/memory/grow.any.worker.html [ Failure Pass ] -crbug.com/1050754 external/wpt/wasm/jsapi/memory/toString.any.js [ Skip ] -crbug.com/1050754 external/wpt/wasm/jsapi/memory/type.tentative.any.js [ Skip ] -crbug.com/1050754 external/wpt/wasm/jsapi/module/constructor.any.js [ Skip ] -crbug.com/1050754 external/wpt/wasm/jsapi/module/customSections.any.js [ Skip ] -crbug.com/1050754 external/wpt/wasm/jsapi/module/exports.any.js [ Skip ] -crbug.com/1050754 external/wpt/wasm/jsapi/module/imports.any.js [ Skip ] -crbug.com/1050754 external/wpt/wasm/jsapi/module/toString.any.js [ Skip ] -crbug.com/1050754 external/wpt/wasm/jsapi/prototypes.any.js [ Skip ] -crbug.com/1050754 external/wpt/wasm/jsapi/table/constructor-reftypes.tentative.any.js [ Skip ] -crbug.com/1050754 external/wpt/wasm/jsapi/table/constructor-types.tentative.any.js [ Skip ] -crbug.com/1050754 external/wpt/wasm/jsapi/table/constructor.any.js [ Skip ] -crbug.com/1050754 external/wpt/wasm/jsapi/table/get-set.any.js [ Skip ] -crbug.com/1050754 external/wpt/wasm/jsapi/table/grow-reftypes.tentative.any.js [ Skip ] -crbug.com/1050754 external/wpt/wasm/jsapi/table/grow-reftypes.tentative.any.worker.html [ Failure ] -crbug.com/1050754 external/wpt/wasm/jsapi/table/grow.any.js [ Skip ] -crbug.com/1050754 external/wpt/wasm/jsapi/table/length.any.js [ Skip ] -crbug.com/1050754 external/wpt/wasm/jsapi/table/set-reftypes.tentative.any.js [ Skip ] -crbug.com/1050754 external/wpt/wasm/jsapi/table/toString.any.js [ Skip ] -crbug.com/1050754 external/wpt/wasm/jsapi/table/type.tentative.any.js [ Skip ] -crbug.com/1050754 external/wpt/wasm/serialization/module/broadcastchannel-success-and-failure.html [ Failure ] -crbug.com/1050754 external/wpt/wasm/serialization/module/serialization-via-notifications-api.any.html [ Failure ] -crbug.com/1050754 external/wpt/wasm/serialization/module/serialization-via-notifications-api.any.worker.html [ Failure ] -crbug.com/1050754 external/wpt/wasm/serialization/module/window-sharedworker-failure.html [ Failure ] -crbug.com/1050754 external/wpt/wasm/serialization/module/window-simple-success.html [ Crash Pass ] -crbug.com/1050754 external/wpt/wasm/webapi/body.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/wasm/webapi/contenttype.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/wasm/webapi/empty-body.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/wasm/webapi/historical.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/wasm/webapi/instantiateStreaming-bad-imports.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/wasm/webapi/instantiateStreaming.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/wasm/webapi/invalid-args.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/wasm/webapi/invalid-code.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/wasm/webapi/modified-contenttype.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/wasm/webapi/origin.sub.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/wasm/webapi/rejected-arg.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/wasm/webapi/status.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/web-animations/timing-model/animations/finishing-an-animation.html [ Pass ] -crbug.com/1050754 external/wpt/web-animations/timing-model/animations/playing-an-animation.html [ Failure Pass ] -crbug.com/1050754 external/wpt/web-animations/timing-model/animations/setting-the-playback-rate-of-an-animation.html [ Failure Pass ] -crbug.com/1050754 external/wpt/web-animations/timing-model/timelines/document-timelines.html [ Failure Pass ] -crbug.com/1050754 external/wpt/web-bundle/subresource-loading/link-csp-allowed.https.tentative.html [ Failure ] -crbug.com/1050754 external/wpt/web-bundle/subresource-loading/link-subresource-load.https.tentative.html [ Failure ] -crbug.com/1050754 external/wpt/web-bundle/subresource-loading/link-nested-bundle.https.tentative.html [ Timeout ] -crbug.com/1050754 external/wpt/web-bundle/subresource-loading/link-path-restriction.https.tentative.html [ Failure ] -crbug.com/1050754 external/wpt/web-bundle/subresource-loading/link-static-element-with-base.https.tentative.html [ Failure ] -crbug.com/1050754 external/wpt/web-bundle/subresource-loading/link-static-element.https.tentative.html [ Failure ] -crbug.com/1050754 external/wpt/web-locks/acquire.tentative.https.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/web-locks/held.tentative.https.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/web-locks/idlharness.tentative.https.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/web-locks/ifAvailable.tentative.https.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/web-locks/lock-attributes.tentative.https.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/web-locks/mode-exclusive.tentative.https.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/web-locks/mode-mixed.tentative.https.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/web-locks/mode-shared.tentative.https.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/web-locks/non-secure-context.tentative.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/web-locks/query-empty.tentative.https.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/web-locks/resource-names.tentative.https.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/web-locks/secure-context.tentative.https.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/web-locks/signal.tentative.https.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/web-locks/steal.tentative.https.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/web-share/share-sharePromise-internal-slot.https.html [ Pass ] -crbug.com/1050754 external/wpt/webaudio/the-audio-api/the-audiobuffer-interface/audiobuffer-copy-channel.html [ Failure Pass ] -crbug.com/1050754 external/wpt/webaudio/the-audio-api/the-audiocontext-interface/processing-after-resume.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/webaudio/the-audio-api/the-audioworklet-interface/audioworklet-postmessage-sharedarraybuffer.https.html [ Timeout ] -crbug.com/1050754 external/wpt/webaudio/the-audio-api/the-audioworklet-interface/audioworkletnode-output-channel-count.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/webaudio/the-audio-api/the-audioworklet-interface/audioworkletprocessor-process-zero-outputs.https.html [ Crash Pass ] -crbug.com/1050754 external/wpt/webaudio/the-audio-api/the-audioworklet-interface/suspended-context-messageport.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/webmessaging/broadcastchannel/workers.html [ Failure Timeout ] -crbug.com/1050754 external/wpt/webmessaging/multi-globals/broadcastchannel-current.sub.html [ Pass ] -crbug.com/1050754 external/wpt/webmessaging/multi-globals/broadcastchannel-incumbent.sub.html [ Pass ] -crbug.com/1050754 external/wpt/webrtc-encoded-transform/RTCPeerConnection-insertable-streams-simulcast.https.html [ Timeout ] -crbug.com/1050754 external/wpt/webrtc/RTCDTMFSender-ontonechange.https.html [ Timeout ] -crbug.com/1050754 external/wpt/webrtc/RTCIceConnectionState-candidate-pair.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/webrtc/RTCPeerConnection-operations.https.html [ Failure ] -crbug.com/1050754 external/wpt/webrtc/RTCPeerConnection-setRemoteDescription-rollback.html [ Crash Pass ] -crbug.com/1050754 external/wpt/webrtc/RTCPeerConnection-videoDetectorTest.html [ Failure Pass ] -crbug.com/1050754 external/wpt/webrtc/protocol/rtp-clockrate.html [ Failure Pass ] -crbug.com/1050754 external/wpt/webrtc/protocol/rtp-demuxing.html [ Failure ] -crbug.com/1050754 external/wpt/webrtc/protocol/video-codecs.https.html [ Failure ] -crbug.com/1050754 external/wpt/webrtc/simulcast/basic.https.html [ Pass Timeout ] -crbug.com/1050754 external/wpt/webrtc/simulcast/getStats.https.html [ Timeout ] -crbug.com/1050754 external/wpt/webrtc/simulcast/setParameters-active.https.html [ Timeout ] -crbug.com/1050754 external/wpt/webrtc/simulcast/vp8.https.html [ Pass Timeout ] -crbug.com/1050754 external/wpt/websockets/basic-auth.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/websockets/binary/001.html?wpt_flags=h2 [ Failure ] -crbug.com/1050754 external/wpt/websockets/binary/002.html?wpt_flags=h2 [ Failure ] -crbug.com/1050754 external/wpt/websockets/binary/004.html?wpt_flags=h2 [ Failure ] -crbug.com/1050754 external/wpt/websockets/binary/005.html?wpt_flags=h2 [ Failure ] -crbug.com/1050754 external/wpt/websockets/bufferedAmount-unchanged-by-sync-xhr.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/websockets/constructor/001.html?wpt_flags=h2 [ Failure ] -crbug.com/1050754 external/wpt/websockets/constructor/004.html?wpt_flags=h2 [ Failure ] -crbug.com/1050754 external/wpt/websockets/constructor/005.html?wpt_flags=h2 [ Failure ] -crbug.com/1050754 external/wpt/websockets/constructor/007.html?wpt_flags=h2 [ Failure ] -crbug.com/1050754 external/wpt/websockets/constructor/010.html?wpt_flags=h2 [ Failure ] -crbug.com/1050754 external/wpt/websockets/constructor/011.html?wpt_flags=h2 [ Failure ] -crbug.com/1050754 external/wpt/websockets/constructor/012.html?wpt_flags=h2 [ Failure ] -crbug.com/1050754 external/wpt/websockets/constructor/017.html?wpt_flags=h2 [ Failure ] -crbug.com/1050754 external/wpt/websockets/constructor/021.html?wpt_flags=h2 [ Failure ] -crbug.com/1050754 external/wpt/websockets/cookies/001.html?wss&wpt_flags=https [ Pass ] -crbug.com/1050754 external/wpt/websockets/cookies/002.html?wss&wpt_flags=https [ Pass ] -crbug.com/1050754 external/wpt/websockets/cookies/005.html?wss&wpt_flags=https [ Pass ] -crbug.com/1050754 external/wpt/websockets/cookies/006.html?wss&wpt_flags=https [ Pass ] -crbug.com/1050754 external/wpt/websockets/extended-payload-length.html?wpt_flags=h2 [ Failure ] -crbug.com/1050754 external/wpt/websockets/interfaces/WebSocket/bufferedAmount/bufferedAmount-arraybuffer.html?wpt_flags=h2 [ Failure ] -crbug.com/1050754 external/wpt/websockets/interfaces/WebSocket/bufferedAmount/bufferedAmount-blob.html?wpt_flags=h2 [ Failure ] -crbug.com/1050754 external/wpt/websockets/interfaces/WebSocket/bufferedAmount/bufferedAmount-large.html?wpt_flags=h2 [ Failure ] -crbug.com/1050754 external/wpt/websockets/interfaces/WebSocket/bufferedAmount/bufferedAmount-unicode.html?wpt_flags=h2 [ Failure ] -crbug.com/1050754 external/wpt/websockets/interfaces/WebSocket/events/001.html?wpt_flags=h2 [ Failure ] -crbug.com/1050754 external/wpt/websockets/interfaces/WebSocket/events/002.html?wpt_flags=h2 [ Failure ] -crbug.com/1050754 external/wpt/websockets/interfaces/WebSocket/events/007.html?wpt_flags=h2 [ Failure ] -crbug.com/1050754 external/wpt/websockets/interfaces/WebSocket/events/015.html?wpt_flags=h2 [ Failure ] -crbug.com/1050754 external/wpt/websockets/interfaces/WebSocket/events/017.html?wpt_flags=h2 [ Failure ] -crbug.com/1050754 external/wpt/websockets/interfaces/WebSocket/events/018.html?wpt_flags=h2 [ Failure ] -crbug.com/1050754 external/wpt/websockets/interfaces/WebSocket/send/006.html?wpt_flags=h2 [ Failure ] -crbug.com/1050754 external/wpt/websockets/opening-handshake/001.html?wpt_flags=h2 [ Failure ] -crbug.com/1050754 external/wpt/websockets/stream/tentative/abort.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/websockets/stream/tentative/backpressure-receive.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/websockets/stream/tentative/backpressure-send.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/websockets/stream/tentative/close.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/websockets/stream/tentative/constructor.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/websockets/unload-a-document/002.html?wss [ Crash Failure ] -crbug.com/1050754 external/wpt/webstorage/storage_session_window_open.window.html [ Crash Pass ] -crbug.com/1050754 external/wpt/webtransport/quic/client-indication.sub.any.html [ Skip ] -crbug.com/1050754 external/wpt/webxr/anchors/ar_anchor_freefloating_create_move.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/anchors/ar_anchor_freefloating_delay_creation.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/anchors/ar_anchor_freefloating_failure.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/anchors/ar_anchor_freefloating_pause_resume_stop.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/anchors/ar_anchor_states.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/ar-module/xrDevice_requestSession_immersive-ar.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/ar-module/xrSession_environmentBlendMode.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/ar-module/xrSession_interactionMode.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/depth-sensing/cpu/depth_sensing_cpu_dataUnavailable.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/depth-sensing/cpu/depth_sensing_cpu_inactiveFrame.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/depth-sensing/cpu/depth_sensing_cpu_incorrectUsage.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/depth-sensing/cpu/depth_sensing_cpu_luminance_alpha_dataValid.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/depth-sensing/cpu/depth_sensing_cpu_staleView.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/depth-sensing/depth_sensing_notEnabled.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/dom-overlay/ar_dom_overlay.https.html [ Failure Timeout ] -crbug.com/1050754 external/wpt/webxr/dom-overlay/ar_dom_overlay_hit_test.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/dom-overlay/nested_fullscreen.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/events_input_source_recreation.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/events_input_sources_change.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/events_referenceSpace_reset_immersive.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/events_session_select.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/events_session_select_subframe.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/events_session_squeeze.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/exclusive_requestFrame_nolayer.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/gamepads-module/xrInputSource_gamepad_disconnect.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/gamepads-module/xrInputSource_gamepad_input_registered.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/getInputPose_handedness.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/getInputPose_pointer.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/getViewerPose_emulatedPosition.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/hit-test/ar_hittest_source_cancel.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/hit-test/ar_hittest_subscription_inputSources.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/hit-test/ar_hittest_subscription_refSpaces.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/hit-test/ar_hittest_subscription_states_regular.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/hit-test/ar_hittest_subscription_states_transient.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/hit-test/ar_hittest_subscription_transientInputSources.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/layers/xrWebGLBinding_constructor.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/light-estimation/xrFrame_getLightEstimate_oldSession.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/light-estimation/xrFrame_getLightEstimate_staleFrame.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/light-estimation/xrFrame_getLightEstimate_valid.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/light-estimation/xrSession_getLightProbe_ended.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/light-estimation/xrSession_getLightProbe_notEnabled.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/light-estimation/xrSession_getLightProbe_valid.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/light-estimation/xrWebGLBinding_getReflectionCubeMap.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/navigator_xr_sameObject.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/render_state_update.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/render_state_vertical_fov_immersive.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/render_state_vertical_fov_inline.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/webGLCanvasContext_create_xrcompatible.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/webGLCanvasContext_makecompatible_contextlost.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/webGLCanvasContext_makecompatible_reentrant.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/xrBoundedReferenceSpace_updates.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/xrDevice_disconnect_ends.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/xrDevice_requestSession_immersive.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/xrDevice_requestSession_optionalFeatures.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/xrFrame_getPose.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/xrFrame_getViewerPose_getPose.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/xrFrame_getViewerPose_getPose_identities.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/xrFrame_lifetime.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/xrFrame_session_sameObject.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/xrInputSource_add_remove.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/xrInputSource_emulatedPosition.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/xrInputSource_profiles.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/xrInputSource_sameObject.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/xrPose_transform_sameObject.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/xrReferenceSpace_originOffset.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/xrReferenceSpace_originOffsetBounded.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/xrReferenceSpace_originOffset_viewer.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/xrReferenceSpace_relationships.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/xrRigidTransform_constructor.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/xrRigidTransform_inverse.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/xrRigidTransform_sameObject.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/xrSession_cancelAnimationFrame.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/xrSession_cancelAnimationFrame_invalidhandle.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/xrSession_end.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/xrSession_input_events_end.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/xrSession_requestAnimationFrame_callback_calls.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/xrSession_requestAnimationFrame_data_valid.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/xrSession_requestAnimationFrame_getViewerPose.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/xrSession_requestAnimationFrame_timestamp.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/xrSession_requestReferenceSpace.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/xrSession_requestReferenceSpace_features.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/xrSession_requestSessionDuringEnd.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/xrSession_sameObject.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/xrSession_viewer_referenceSpace.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/xrSession_visibilityState.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/xrStationaryReferenceSpace_floorlevel_updates.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/xrView_eyes.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/xrView_match.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/xrView_oneframeupdate.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/xrView_sameObject.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/xrViewerPose_views_sameObject.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/xrViewport_valid.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/xrWebGLLayer_constructor.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/xrWebGLLayer_framebuffer_draw.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/xrWebGLLayer_framebuffer_sameObject.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/xrWebGLLayer_framebuffer_scale.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/xrWebGLLayer_opaque_framebuffer.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/xrWebGLLayer_opaque_framebuffer_stencil.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/xrWebGLLayer_viewports.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/xr_viewport_scale.https.html [ Failure Timeout ] -crbug.com/1050754 external/wpt/window-segments/getWindowSegments.https.tentative.html [ Failure ] -crbug.com/1050754 external/wpt/workers/SharedWorker-MessageEvent-source.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/workers/SharedWorker-constructor.html [ Failure ] -crbug.com/1050754 external/wpt/workers/SharedWorker-detach-frame-in-error-event.html [ Timeout ] -crbug.com/1050754 external/wpt/workers/SharedWorker-exception-propagation.html [ Failure ] -crbug.com/1050754 external/wpt/workers/SharedWorker-exception.html [ Failure ] -crbug.com/1050754 external/wpt/workers/SharedWorker-replace-EventHandler.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/workers/SharedWorker-script-error.html [ Failure ] -crbug.com/1050754 external/wpt/workers/SharedWorker-simple.html [ Failure ] -crbug.com/1050754 external/wpt/workers/SharedWorkerPerformanceNow.html [ Failure ] -crbug.com/1050754 external/wpt/workers/SharedWorker_blobUrl.html [ Failure ] -crbug.com/1050754 external/wpt/workers/SharedWorker_dataUrl.html [ Timeout ] -crbug.com/1050754 external/wpt/workers/Worker-base64.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/workers/Worker-constructor-proto.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/workers/Worker-custom-event.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/workers/Worker-location.sub.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/workers/Worker-replace-event-handler.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/workers/Worker-replace-global-constructor.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/workers/Worker-replace-self.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/workers/WorkerNavigator-hardware-concurrency.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/workers/WorkerNavigator.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/workers/abrupt-completion.html [ Failure ] -crbug.com/1050754 external/wpt/workers/baseurl/alpha/importScripts-in-sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/workers/baseurl/alpha/xhr-in-sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/workers/constructors/SharedWorker/Infinity-arguments.html [ Failure ] -crbug.com/1050754 external/wpt/workers/constructors/SharedWorker/NaN-arguments.html [ Failure ] -crbug.com/1050754 external/wpt/workers/constructors/SharedWorker/URLMismatchError.htm [ Failure ] -crbug.com/1050754 external/wpt/workers/constructors/SharedWorker/dummy-name.html [ Failure ] -crbug.com/1050754 external/wpt/workers/constructors/SharedWorker/dummy-shared-worker.html [ Failure ] -crbug.com/1050754 external/wpt/workers/constructors/SharedWorker/empty-name.html [ Failure ] -crbug.com/1050754 external/wpt/workers/constructors/SharedWorker/global-members.html [ Failure ] -crbug.com/1050754 external/wpt/workers/constructors/SharedWorker/name.html [ Failure ] -crbug.com/1050754 external/wpt/workers/constructors/SharedWorker/no-arguments-ctor.html [ Failure ] -crbug.com/1050754 external/wpt/workers/constructors/SharedWorker/null-arguments.html [ Failure ] -crbug.com/1050754 external/wpt/workers/constructors/SharedWorker/number-arguments.html [ Failure ] -crbug.com/1050754 external/wpt/workers/constructors/SharedWorker/port-onmessage.html [ Failure ] -crbug.com/1050754 external/wpt/workers/constructors/SharedWorker/port-properties.html [ Failure ] -crbug.com/1050754 external/wpt/workers/constructors/SharedWorker/port-readonly.html [ Failure ] -crbug.com/1050754 external/wpt/workers/constructors/SharedWorker/same-origin.html [ Failure ] -crbug.com/1050754 external/wpt/workers/constructors/SharedWorker/undefined-arguments.html [ Failure ] -crbug.com/1050754 external/wpt/workers/constructors/SharedWorker/unexpected-global-properties.html [ Failure ] -crbug.com/1050754 external/wpt/workers/data-url-shared.html [ Timeout ] -crbug.com/1050754 external/wpt/workers/examples/general.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/workers/examples/onconnect.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/workers/importscripts_mime.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/workers/interfaces/SharedWorkerGlobalScope/name/getting.html [ Failure ] -crbug.com/1050754 external/wpt/workers/interfaces/SharedWorkerGlobalScope/name/setting.html [ Failure ] -crbug.com/1050754 external/wpt/workers/interfaces/WorkerGlobalScope/location/redirect-sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/workers/interfaces/WorkerGlobalScope/location/returns-same-object.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/workers/interfaces/WorkerGlobalScope/self.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/workers/interfaces/WorkerUtils/importScripts/catch.sub.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/workers/interfaces/WorkerUtils/importScripts/report-error-cross-origin.sub.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/workers/interfaces/WorkerUtils/importScripts/report-error-redirect-to-cross-origin.sub.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/workers/interfaces/WorkerUtils/importScripts/report-error-same-origin.sub.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/workers/interfaces/WorkerUtils/importScripts/report-error-setTimeout-cross-origin.sub.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/workers/interfaces/WorkerUtils/importScripts/report-error-setTimeout-redirect-to-cross-origin.sub.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/workers/interfaces/WorkerUtils/importScripts/report-error-setTimeout-same-origin.sub.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/workers/modules/dedicated-worker-import-csp.html [ Crash Pass ] -crbug.com/1050754 external/wpt/workers/modules/dedicated-worker-import-referrer.html [ Crash Pass ] -crbug.com/1050754 external/wpt/workers/modules/shared-worker-import-blob-url.window.html [ Failure ] -crbug.com/1050754 external/wpt/workers/modules/shared-worker-import-csp.html [ Crash Failure ] -crbug.com/1050754 external/wpt/workers/modules/shared-worker-import-data-url-cross-origin.html [ Failure ] -crbug.com/1050754 external/wpt/workers/modules/shared-worker-import-data-url.window.html [ Failure ] -crbug.com/1050754 external/wpt/workers/modules/shared-worker-import-failure.html [ Failure ] -crbug.com/1050754 external/wpt/workers/modules/shared-worker-import-referrer.html [ Crash Failure ] -crbug.com/1050754 external/wpt/workers/modules/shared-worker-import.window.html [ Failure ] -crbug.com/1050754 external/wpt/workers/modules/shared-worker-options-credentials.html [ Failure ] -crbug.com/1050754 external/wpt/workers/modules/shared-worker-options-type.html [ Failure ] -crbug.com/1050754 external/wpt/workers/modules/shared-worker-parse-error-failure.html [ Failure ] -crbug.com/1050754 external/wpt/workers/name-property.html [ Failure ] -crbug.com/1050754 external/wpt/workers/semantics/encodings/004.html [ Failure ] -crbug.com/1050754 external/wpt/workers/semantics/interface-objects/004.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/workers/semantics/multiple-workers/001.html [ Failure ] -crbug.com/1050754 external/wpt/workers/semantics/multiple-workers/004.html [ Failure ] -crbug.com/1050754 external/wpt/workers/semantics/multiple-workers/exposure.any.html [ Failure ] -crbug.com/1050754 external/wpt/workers/semantics/reporting-errors/001.html [ Failure ] -crbug.com/1050754 external/wpt/workers/semantics/reporting-errors/002.html [ Failure ] -crbug.com/1050754 external/wpt/workers/semantics/reporting-errors/003.html [ Failure ] -crbug.com/1050754 external/wpt/workers/semantics/reporting-errors/004.html [ Failure ] -crbug.com/1050754 external/wpt/workers/semantics/run-a-worker/002.html [ Failure ] -crbug.com/1050754 external/wpt/workers/semantics/run-a-worker/003.html [ Failure ] -crbug.com/1050754 external/wpt/workers/semantics/structured-clone/shared.html [ Failure ] -crbug.com/1050754 external/wpt/workers/semantics/xhr/003.html [ Failure ] -crbug.com/1050754 external/wpt/workers/semantics/xhr/004.html [ Failure ] -crbug.com/1050754 external/wpt/workers/semantics/xhr/006.html [ Failure ] -crbug.com/1050754 external/wpt/workers/shared-worker-from-blob-url.window.html [ Failure ] -crbug.com/1050754 external/wpt/workers/shared-worker-name-via-options.html [ Failure ] -crbug.com/1050754 external/wpt/workers/shared-worker-options-mismatch.html [ Failure ] -crbug.com/1050754 external/wpt/workers/shared-worker-parse-error-failure.html [ Failure ] -crbug.com/1050754 external/wpt/worklets/animation-worklet-referrer.https.html [ Crash Pass ] -crbug.com/1050754 external/wpt/worklets/audio-worklet-csp.https.html [ Crash Pass ] -crbug.com/1050754 external/wpt/worklets/audio-worklet-referrer.https.html [ Crash Pass ] -crbug.com/1050754 external/wpt/worklets/layout-worklet-csp.https.html [ Crash Pass ] -crbug.com/1050754 external/wpt/worklets/layout-worklet-referrer.https.html [ Crash Pass ] -crbug.com/1050754 external/wpt/xhr/open-url-redirected-sharedworker-origin.htm [ Failure ] -crbug.com/1050754 external/wpt/xhr/over-1-meg.any.html [ Failure Pass ] -crbug.com/1050754 external/wpt/xhr/send-after-setting-document-domain.htm [ Crash Pass ] -crbug.com/1050754 external/wpt/xhr/sync-no-timeout.any.sharedworker.html [ Failure ]
diff --git a/third_party/blink/web_tests/android/WebLayerWPTOverrideExpectations b/third_party/blink/web_tests/android/WebLayerWPTOverrideExpectations deleted file mode 100644 index 744ab602..0000000 --- a/third_party/blink/web_tests/android/WebLayerWPTOverrideExpectations +++ /dev/null
@@ -1,2147 +0,0 @@ -# results: [ Failure Crash Timeout Pass Skip ] -# conflict_resolution: Override - -# This file will be used to add override expectations for WPT tests when running on Weblayer. -# Expectations with bug crbug.com/1050754 were created as preliminary expectations in CL -# crrev.com/c/2070826. Several test expectations below will be moved to the AndroidWPTNeverFixTests -# file. When the test failures below are triaged, new bugs will be created and we will change the -# bug for the expectation to the new bug. - -# Test fails when run on Android. -crbug.com/1197454 external/wpt/document-policy/experimental-features/unsized-media.tentative.https.sub.html [ Failure ] - -# Basic card is not supported in WebLayer. -crbug.com/1213456 external/wpt/payment-method-basic-card/payment-request-canmakepayment-method.https.html [ Skip ] -crbug.com/1213456 external/wpt/payment-request/payment-request-abort-method.https.html [ Skip ] -crbug.com/1213456 external/wpt/payment-request/payment-request-canmakepayment-method.https.html [ Skip ] -crbug.com/1213456 external/wpt/payment-request/payment-request-hasenrolledinstrument-method.tentative.https.html [ Skip ] -crbug.com/1213456 external/wpt/payment-request/rejects_if_not_active.https.html [ Skip ] - -# Periodic background sync is not supported in WebLayer. -crbug.com/1091211 external/wpt/periodic-background-sync/periodicsync.https.window.html [ Skip ] - -# This test is flaky. -crbug.com/1126079 external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/access-from-coop-page-to-openee_coop-ro.https.html [ Crash Pass Timeout ] - -# Web notifications are not supported in WebLayer. -crbug.com/1025610 external/wpt/notifications/idlharness.https.any.html [ Skip ] -crbug.com/1025610 external/wpt/notifications/idlharness.https.any.serviceworker.html [ Skip ] -crbug.com/1025610 external/wpt/notifications/idlharness.https.any.sharedworker.html [ Skip ] -crbug.com/1025610 external/wpt/notifications/idlharness.https.any.worker.html [ Skip ] -crbug.com/1025610 external/wpt/notifications/instance.html [ Skip ] -crbug.com/1025610 external/wpt/notifications/permission.html [ Skip ] - -# Portals are not yet supported in WebLayer. -crbug.com/1174856 external/wpt/portals/csp/frame-src.sub.html [ Skip ] -crbug.com/1174856 external/wpt/portals/history/history-manipulation-inside-portal-with-subframes.html [ Skip ] -crbug.com/1174856 external/wpt/portals/history/history-manipulation-inside-portal.html [ Skip ] -crbug.com/1174856 external/wpt/portals/portal-activate-data.html [ Skip ] -crbug.com/1174856 external/wpt/portals/portal-activate-default.html [ Skip ] -crbug.com/1174856 external/wpt/portals/portal-activate-event.html [ Skip ] -crbug.com/1174856 external/wpt/portals/portal-non-http-navigation.html [ Skip ] -crbug.com/1174856 external/wpt/portals/portal-onload-event.html [ Skip ] -crbug.com/1174856 external/wpt/portals/portals-activate-inside-portal.html [ Skip ] -crbug.com/1174856 external/wpt/portals/portals-activate-resolution.html [ Skip ] -crbug.com/1174856 external/wpt/portals/portals-activate-twice.html [ Skip ] -crbug.com/1174856 external/wpt/portals/portals-activate-while-unloading.html [ Skip ] -crbug.com/1174856 external/wpt/portals/portals-adopt-predecessor.html [ Skip ] -crbug.com/1174856 external/wpt/portals/portals-close-window.html [ Skip ] -crbug.com/1174856 external/wpt/portals/portals-focus.sub.html [ Skip ] -crbug.com/1174856 external/wpt/portals/portals-host-exposure.sub.html [ Skip ] -crbug.com/1174856 external/wpt/portals/portals-host-hidden-after-activation.html [ Skip ] -crbug.com/1174856 external/wpt/portals/portals-host-post-message.sub.html [ Skip ] -crbug.com/1174856 external/wpt/portals/portals-navigate-after-adoption.html [ Skip ] -crbug.com/1174856 external/wpt/portals/portals-nested.html [ Skip ] -crbug.com/1174856 external/wpt/portals/portals-post-message.sub.html [ Skip ] -crbug.com/1174856 external/wpt/portals/portals-referrer-inherit-header.html [ Skip ] -crbug.com/1174856 external/wpt/portals/portals-referrer-inherit-meta.html [ Skip ] -crbug.com/1174856 external/wpt/portals/portals-referrer.html [ Skip ] -crbug.com/1174856 external/wpt/portals/portals-repeated-activate.html [ Skip ] -crbug.com/1174856 external/wpt/portals/portals-set-src-after-activate.html [ Skip ] -crbug.com/1174856 external/wpt/portals/predecessor-fires-unload.html [ Skip ] -crbug.com/1174856 external/wpt/portals/xfo/portals-xfo-sameorigin.html [ Skip ] - -# This test fails in WebLayer and Clank. -crbug.com/1145401 external/wpt/presentation-api/controlling-ua/getAvailability.https.html [ Failure ] - -# Push API is not supported in WebLayer. -crbug.com/1025610 external/wpt/push-api/idlharness.https.any.html [ Skip ] -crbug.com/1025610 external/wpt/push-api/idlharness.https.any.serviceworker.html [ Skip ] -crbug.com/1025610 external/wpt/push-api/idlharness.https.any.sharedworker.html [ Skip ] -crbug.com/1025610 external/wpt/push-api/idlharness.https.any.worker.html [ Skip ] - -# Several scroll animations tests fail in WebLayer and Clank. -crbug.com/1198063 external/wpt/scroll-animations/css/at-scroll-timeline-start-end.html [ Failure ] -crbug.com/1198063 external/wpt/scroll-animations/current-time-root-scroller.html [ Failure ] -crbug.com/1198063 external/wpt/scroll-animations/idlharness.window.html [ Failure ] -crbug.com/1198063 external/wpt/scroll-animations/progress-based-current-time.tenative.html [ Failure ] -crbug.com/1198063 external/wpt/scroll-animations/scroll-timeline-snapshotting.html [ Timeout ] - -# SharedWorker is not supported on Android (https://crbug.com/154571). -crbug.com/1050754 external/wpt/background-fetch/idlharness.https.any.sharedworker.html [ Failure ] -crbug.com/1190392 external/wpt/trusted-types/WorkerGlobalScope-eval.html [ Failure ] -crbug.com/1190392 external/wpt/trusted-types/WorkerGlobalScope-importScripts.html [ Failure ] -crbug.com/1190392 external/wpt/trusted-types/worker-constructor.https.html [ Failure ] -crbug.com/1317977 external/wpt/content-security-policy/gen/top.http-rp/script-src-self/sharedworker-classic.http.html [ Failure ] -crbug.com/1317977 external/wpt/content-security-policy/gen/top.http-rp/script-src-self/sharedworker-classic.https.html [ Failure ] -crbug.com/1317977 external/wpt/content-security-policy/gen/top.http-rp/script-src-self/sharedworker-import-data.http.html [ Failure ] -crbug.com/1317977 external/wpt/content-security-policy/gen/top.http-rp/script-src-self/sharedworker-import-data.https.html [ Failure ] -crbug.com/1317977 external/wpt/content-security-policy/gen/top.http-rp/script-src-self/sharedworker-import.http.html [ Failure ] -crbug.com/1317977 external/wpt/content-security-policy/gen/top.http-rp/script-src-self/sharedworker-import.https.html [ Failure ] -crbug.com/1317977 external/wpt/content-security-policy/gen/top.http-rp/script-src-self/sharedworker-module.http.html [ Failure ] -crbug.com/1317977 external/wpt/content-security-policy/gen/top.http-rp/script-src-self/sharedworker-module.https.html [ Failure ] -crbug.com/1317977 external/wpt/content-security-policy/gen/top.http-rp/script-src-wildcard/sharedworker-classic.http.html [ Failure ] -crbug.com/1317977 external/wpt/content-security-policy/gen/top.http-rp/script-src-wildcard/sharedworker-classic.https.html [ Failure ] -crbug.com/1317977 external/wpt/content-security-policy/gen/top.http-rp/script-src-wildcard/sharedworker-import-data.http.html [ Failure ] -crbug.com/1317977 external/wpt/content-security-policy/gen/top.http-rp/script-src-wildcard/sharedworker-import-data.https.html [ Failure ] -crbug.com/1317977 external/wpt/content-security-policy/gen/top.http-rp/script-src-wildcard/sharedworker-import.http.html [ Failure ] -crbug.com/1317977 external/wpt/content-security-policy/gen/top.http-rp/script-src-wildcard/sharedworker-import.https.html [ Failure ] -crbug.com/1317977 external/wpt/content-security-policy/gen/top.http-rp/script-src-wildcard/sharedworker-module.http.html [ Failure ] -crbug.com/1317977 external/wpt/content-security-policy/gen/top.http-rp/script-src-wildcard/sharedworker-module.https.html [ Failure ] -crbug.com/1317977 external/wpt/content-security-policy/gen/top.http-rp/worker-src-none/sharedworker-classic.http.html [ Failure ] -crbug.com/1317977 external/wpt/content-security-policy/gen/top.http-rp/worker-src-none/sharedworker-classic.https.html [ Failure ] -crbug.com/1317977 external/wpt/content-security-policy/gen/top.http-rp/worker-src-none/sharedworker-import-data.http.html [ Failure ] -crbug.com/1317977 external/wpt/content-security-policy/gen/top.http-rp/worker-src-none/sharedworker-import-data.https.html [ Failure ] -crbug.com/1317977 external/wpt/content-security-policy/gen/top.http-rp/worker-src-none/sharedworker-import.http.html [ Failure ] -crbug.com/1317977 external/wpt/content-security-policy/gen/top.http-rp/worker-src-none/sharedworker-import.https.html [ Failure ] -crbug.com/1317977 external/wpt/content-security-policy/gen/top.http-rp/worker-src-none/sharedworker-module.http.html [ Failure ] -crbug.com/1317977 external/wpt/content-security-policy/gen/top.http-rp/worker-src-none/sharedworker-module.https.html [ Failure ] -crbug.com/1317977 external/wpt/content-security-policy/gen/top.http-rp/worker-src-self/sharedworker-classic.http.html [ Failure ] -crbug.com/1317977 external/wpt/content-security-policy/gen/top.http-rp/worker-src-self/sharedworker-classic.https.html [ Failure ] -crbug.com/1317977 external/wpt/content-security-policy/gen/top.http-rp/worker-src-self/sharedworker-import-data.http.html [ Failure ] -crbug.com/1317977 external/wpt/content-security-policy/gen/top.http-rp/worker-src-self/sharedworker-import-data.https.html [ Failure ] -crbug.com/1317977 external/wpt/content-security-policy/gen/top.http-rp/worker-src-self/sharedworker-import.http.html [ Failure ] -crbug.com/1317977 external/wpt/content-security-policy/gen/top.http-rp/worker-src-self/sharedworker-import.https.html [ Failure ] -crbug.com/1317977 external/wpt/content-security-policy/gen/top.http-rp/worker-src-self/sharedworker-module.http.html [ Failure ] -crbug.com/1317977 external/wpt/content-security-policy/gen/top.http-rp/worker-src-self/sharedworker-module.https.html [ Failure ] -crbug.com/1317977 external/wpt/content-security-policy/gen/top.http-rp/worker-src-wildcard/sharedworker-classic.http.html [ Failure ] -crbug.com/1317977 external/wpt/content-security-policy/gen/top.http-rp/worker-src-wildcard/sharedworker-classic.https.html [ Failure ] -crbug.com/1317977 external/wpt/content-security-policy/gen/top.http-rp/worker-src-wildcard/sharedworker-import-data.http.html [ Failure ] -crbug.com/1317977 external/wpt/content-security-policy/gen/top.http-rp/worker-src-wildcard/sharedworker-import-data.https.html [ Failure ] -crbug.com/1317977 external/wpt/content-security-policy/gen/top.http-rp/worker-src-wildcard/sharedworker-import.http.html [ Failure ] -crbug.com/1317977 external/wpt/content-security-policy/gen/top.http-rp/worker-src-wildcard/sharedworker-import.https.html [ Failure ] -crbug.com/1317977 external/wpt/content-security-policy/gen/top.http-rp/worker-src-wildcard/sharedworker-module.http.html [ Failure ] -crbug.com/1317977 external/wpt/content-security-policy/gen/top.http-rp/worker-src-wildcard/sharedworker-module.https.html [ Failure ] -crbug.com/1317977 external/wpt/content-security-policy/gen/top.meta/script-src-self/sharedworker-classic.http.html [ Failure ] -crbug.com/1317977 external/wpt/content-security-policy/gen/top.meta/script-src-self/sharedworker-classic.https.html [ Failure ] -crbug.com/1317977 external/wpt/content-security-policy/gen/top.meta/script-src-self/sharedworker-import-data.http.html [ Failure ] -crbug.com/1317977 external/wpt/content-security-policy/gen/top.meta/script-src-self/sharedworker-import-data.https.html [ Failure ] -crbug.com/1317977 external/wpt/content-security-policy/gen/top.meta/script-src-self/sharedworker-import.http.html [ Failure ] -crbug.com/1317977 external/wpt/content-security-policy/gen/top.meta/script-src-self/sharedworker-import.https.html [ Failure ] -crbug.com/1317977 external/wpt/content-security-policy/gen/top.meta/script-src-self/sharedworker-module.http.html [ Failure ] -crbug.com/1317977 external/wpt/content-security-policy/gen/top.meta/script-src-self/sharedworker-module.https.html [ Failure ] -crbug.com/1317977 external/wpt/content-security-policy/gen/top.meta/script-src-wildcard/sharedworker-classic.http.html [ Failure ] -crbug.com/1317977 external/wpt/content-security-policy/gen/top.meta/script-src-wildcard/sharedworker-classic.https.html [ Failure ] -crbug.com/1317977 external/wpt/content-security-policy/gen/top.meta/script-src-wildcard/sharedworker-import-data.http.html [ Failure ] -crbug.com/1317977 external/wpt/content-security-policy/gen/top.meta/script-src-wildcard/sharedworker-import-data.https.html [ Failure ] -crbug.com/1317977 external/wpt/content-security-policy/gen/top.meta/script-src-wildcard/sharedworker-import.http.html [ Failure ] -crbug.com/1317977 external/wpt/content-security-policy/gen/top.meta/script-src-wildcard/sharedworker-import.https.html [ Failure ] -crbug.com/1317977 external/wpt/content-security-policy/gen/top.meta/script-src-wildcard/sharedworker-module.http.html [ Failure ] -crbug.com/1317977 external/wpt/content-security-policy/gen/top.meta/script-src-wildcard/sharedworker-module.https.html [ Failure ] -crbug.com/1317977 external/wpt/content-security-policy/gen/top.meta/worker-src-none/sharedworker-classic.http.html [ Failure ] -crbug.com/1317977 external/wpt/content-security-policy/gen/top.meta/worker-src-none/sharedworker-classic.https.html [ Failure ] -crbug.com/1317977 external/wpt/content-security-policy/gen/top.meta/worker-src-none/sharedworker-import-data.http.html [ Failure ] -crbug.com/1317977 external/wpt/content-security-policy/gen/top.meta/worker-src-none/sharedworker-import-data.https.html [ Failure ] -crbug.com/1317977 external/wpt/content-security-policy/gen/top.meta/worker-src-none/sharedworker-import.http.html [ Failure ] -crbug.com/1317977 external/wpt/content-security-policy/gen/top.meta/worker-src-none/sharedworker-import.https.html [ Failure ] -crbug.com/1317977 external/wpt/content-security-policy/gen/top.meta/worker-src-none/sharedworker-module.http.html [ Failure ] -crbug.com/1317977 external/wpt/content-security-policy/gen/top.meta/worker-src-none/sharedworker-module.https.html [ Failure ] -crbug.com/1317977 external/wpt/content-security-policy/gen/top.meta/worker-src-self/sharedworker-classic.http.html [ Failure ] -crbug.com/1317977 external/wpt/content-security-policy/gen/top.meta/worker-src-self/sharedworker-classic.https.html [ Failure ] -crbug.com/1317977 external/wpt/content-security-policy/gen/top.meta/worker-src-self/sharedworker-import-data.http.html [ Failure ] -crbug.com/1317977 external/wpt/content-security-policy/gen/top.meta/worker-src-self/sharedworker-import-data.https.html [ Failure ] -crbug.com/1317977 external/wpt/content-security-policy/gen/top.meta/worker-src-self/sharedworker-import.http.html [ Failure ] -crbug.com/1317977 external/wpt/content-security-policy/gen/top.meta/worker-src-self/sharedworker-import.https.html [ Failure ] -crbug.com/1317977 external/wpt/content-security-policy/gen/top.meta/worker-src-self/sharedworker-module.http.html [ Failure ] -crbug.com/1317977 external/wpt/content-security-policy/gen/top.meta/worker-src-self/sharedworker-module.https.html [ Failure ] -crbug.com/1317977 external/wpt/content-security-policy/gen/top.meta/worker-src-wildcard/sharedworker-classic.http.html [ Failure ] -crbug.com/1317977 external/wpt/content-security-policy/gen/top.meta/worker-src-wildcard/sharedworker-classic.https.html [ Failure ] -crbug.com/1317977 external/wpt/content-security-policy/gen/top.meta/worker-src-wildcard/sharedworker-import-data.http.html [ Failure ] -crbug.com/1317977 external/wpt/content-security-policy/gen/top.meta/worker-src-wildcard/sharedworker-import-data.https.html [ Failure ] -crbug.com/1317977 external/wpt/content-security-policy/gen/top.meta/worker-src-wildcard/sharedworker-import.http.html [ Failure ] -crbug.com/1317977 external/wpt/content-security-policy/gen/top.meta/worker-src-wildcard/sharedworker-import.https.html [ Failure ] -crbug.com/1317977 external/wpt/content-security-policy/gen/top.meta/worker-src-wildcard/sharedworker-module.http.html [ Failure ] -crbug.com/1317977 external/wpt/content-security-policy/gen/top.meta/worker-src-wildcard/sharedworker-module.https.html [ Failure ] -crbug.com/1317977 external/wpt/content-security-policy/sandbox/shared-worker-sandbox.html [ Failure ] -crbug.com/1317977 external/wpt/content-security-policy/script-src/script-src-strict_dynamic_worker.https.html [ Failure ] -crbug.com/1317977 external/wpt/content-security-policy/script-src/worker-data-set-timeout.sub.html [ Failure ] -crbug.com/1317977 external/wpt/content-security-policy/script-src/worker-importscripts.sub.html [ Failure ] -crbug.com/1317977 external/wpt/content-security-policy/script-src/worker-set-timeout.sub.html [ Failure ] -crbug.com/1317977 external/wpt/content-security-policy/worker-src/shared-child.sub.html [ Failure ] -crbug.com/1317977 external/wpt/content-security-policy/worker-src/shared-fallback.sub.html [ Failure ] -crbug.com/1317977 external/wpt/content-security-policy/worker-src/shared-list.sub.html [ Failure ] -crbug.com/1317977 external/wpt/content-security-policy/worker-src/shared-none.sub.html [ Failure ] -crbug.com/1317977 external/wpt/content-security-policy/worker-src/shared-self.sub.html [ Failure ] -crbug.com/1317977 external/wpt/content-security-policy/worker-src/shared-worker-src-child-fallback-blocked.sub.html [ Failure ] -crbug.com/1317977 external/wpt/content-security-policy/worker-src/shared-worker-src-child-fallback.sub.html [ Failure ] -crbug.com/1317977 external/wpt/content-security-policy/worker-src/shared-worker-src-default-fallback.sub.html [ Failure ] -crbug.com/1317977 external/wpt/content-security-policy/worker-src/shared-worker-src-script-fallback.sub.html [ Failure ] -crbug.com/1317977 external/wpt/content-security-policy/worker-src/shared-worker-src-self-fallback.sub.html [ Failure ] -crbug.com/1317977 external/wpt/content-security-policy/connect-src/shared-worker-connect-src-allowed.sub.html [ Failure ] -crbug.com/1317977 external/wpt/content-security-policy/connect-src/shared-worker-connect-src-blocked.sub.html [ Failure ] -crbug.com/1198573 external/wpt/html/webappapis/microtask-queuing/queue-microtask-exceptions.any.sharedworker.html [ Failure ] -crbug.com/1198573 external/wpt/html/webappapis/microtask-queuing/queue-microtask.any.sharedworker.html [ Failure ] -crbug.com/1198573 external/wpt/html/webappapis/scripting/processing-model-2/integration-with-the-javascript-agent-formalism/requires-success.any.sharedworker.html [ Failure ] -crbug.com/1198573 external/wpt/html/webappapis/scripting/processing-model-2/unhandled-promise-rejections/promise-rejection-events.sharedworker.html [ Failure ] -crbug.com/1198573 external/wpt/html/webappapis/the-windoworworkerglobalscope-mixin/Worker_Self_Origin.html [ Failure ] - -# crbug.com/178097: navigator.registerProtocolHandler is not available on Android. -crbug.com/1198573 external/wpt/html/webappapis/system-state-and-capabilities/the-navigator-object/historical.https.window.html [ Failure ] -crbug.com/1198573 external/wpt/html/webappapis/system-state-and-capabilities/the-navigator-object/protocol.https.html [ Failure ] -crbug.com/1198573 external/wpt/html/webappapis/system-state-and-capabilities/the-navigator-object/protocol.tentative.https.html [ Failure ] - -# Failing WebAppApi tests on Clank and WebLayer on Android -crbug.com/1198573 external/wpt/html/webappapis/dynamic-markup-insertion/document-write/047.html [ Crash Pass ] -crbug.com/1198573 external/wpt/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/history.window.html [ Crash Pass ] -crbug.com/1198573 external/wpt/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/reload.window.html [ Crash Pass Timeout ] -crbug.com/1198573 external/wpt/html/webappapis/scripting/processing-model-2/integration-with-the-javascript-agent-formalism/requires-success.any.worker.html [ Failure Pass ] -crbug.com/1198573 external/wpt/html/webappapis/scripting/processing-model-2/integration-with-the-javascript-job-queue/promise-job-entry-different-function-realm.html [ Crash Pass ] -crbug.com/1198573 external/wpt/html/webappapis/scripting/processing-model-2/integration-with-the-javascript-job-queue/promise-job-entry.html [ Crash Pass ] -crbug.com/1198573 external/wpt/html/webappapis/scripting/processing-model-2/runtime-error-in-setInterval.html [ Failure ] -crbug.com/1198573 external/wpt/html/webappapis/scripting/processing-model-2/runtime-error-in-setTimeout.html [ Failure ] -crbug.com/1198573 external/wpt/html/webappapis/user-prompts/cannot-show-simple-dialogs/confirm-different-origin-frame.sub.html [ Pass ] -crbug.com/1198573 external/wpt/html/webappapis/user-prompts/cannot-show-simple-dialogs/prompt-different-origin-frame.sub.html [ Pass ] - -# Failing CSP tests on Clank and WebLayer on Android -crbug.com/1198079 external/wpt/content-security-policy/embedded-enforcement/subsumption_algorithm-source_list-wildcards.html [ Failure ] -crbug.com/1198079 external/wpt/content-security-policy/gen/top.http-rp/script-src-self/worker-import.http.html [ Failure ] -crbug.com/1198079 external/wpt/content-security-policy/gen/top.http-rp/script-src-self/worker-import.https.html [ Failure ] -crbug.com/1198079 external/wpt/content-security-policy/gen/top.http-rp/script-src-self/worklet-animation-import-data.https.html [ Failure ] -crbug.com/1198079 external/wpt/content-security-policy/gen/top.http-rp/script-src-self/worklet-animation.https.html [ Failure ] -crbug.com/1198079 external/wpt/content-security-policy/gen/top.http-rp/script-src-self/worklet-audio-import-data.https.html [ Failure ] -crbug.com/1198079 external/wpt/content-security-policy/gen/top.http-rp/script-src-self/worklet-audio.https.html [ Failure ] -crbug.com/1198079 external/wpt/content-security-policy/gen/top.http-rp/script-src-self/worklet-layout-import-data.https.html [ Failure ] -crbug.com/1198079 external/wpt/content-security-policy/gen/top.http-rp/script-src-self/worklet-layout.https.html [ Failure ] -crbug.com/1198079 external/wpt/content-security-policy/gen/top.http-rp/script-src-self/worklet-paint-import-data.https.html [ Failure ] -crbug.com/1198079 external/wpt/content-security-policy/gen/top.http-rp/script-src-self/worklet-paint.https.html [ Failure ] -crbug.com/1198079 external/wpt/content-security-policy/gen/top.http-rp/script-src-wildcard/worklet-animation-import-data.https.html [ Failure ] -crbug.com/1198079 external/wpt/content-security-policy/gen/top.http-rp/script-src-wildcard/worklet-audio-import-data.https.html [ Failure ] -crbug.com/1198079 external/wpt/content-security-policy/gen/top.http-rp/script-src-wildcard/worklet-layout-import-data.https.html [ Failure ] -crbug.com/1198079 external/wpt/content-security-policy/gen/top.http-rp/script-src-wildcard/worklet-paint-import-data.https.html [ Failure ] -crbug.com/1198079 external/wpt/content-security-policy/gen/top.http-rp/worker-src-self/worker-import.http.html [ Failure ] -crbug.com/1198079 external/wpt/content-security-policy/gen/top.http-rp/worker-src-self/worker-import.https.html [ Failure ] -crbug.com/1198079 external/wpt/content-security-policy/gen/top.meta/script-src-self/worker-import.http.html [ Failure ] -crbug.com/1198079 external/wpt/content-security-policy/gen/top.meta/script-src-self/worker-import.https.html [ Failure ] -crbug.com/1198079 external/wpt/content-security-policy/gen/top.meta/script-src-self/worklet-animation-import-data.https.html [ Failure ] -crbug.com/1198079 external/wpt/content-security-policy/gen/top.meta/script-src-self/worklet-animation.https.html [ Failure ] -crbug.com/1198079 external/wpt/content-security-policy/gen/top.meta/script-src-self/worklet-audio-import-data.https.html [ Failure ] -crbug.com/1198079 external/wpt/content-security-policy/gen/top.meta/script-src-self/worklet-audio.https.html [ Failure ] -crbug.com/1198079 external/wpt/content-security-policy/gen/top.meta/script-src-self/worklet-layout-import-data.https.html [ Failure ] -crbug.com/1198079 external/wpt/content-security-policy/gen/top.meta/script-src-self/worklet-layout.https.html [ Failure ] -crbug.com/1198079 external/wpt/content-security-policy/gen/top.meta/script-src-self/worklet-paint-import-data.https.html [ Failure ] -crbug.com/1198079 external/wpt/content-security-policy/gen/top.meta/script-src-self/worklet-paint.https.html [ Failure ] -crbug.com/1198079 external/wpt/content-security-policy/gen/top.meta/script-src-wildcard/worklet-animation-import-data.https.html [ Failure ] -crbug.com/1198079 external/wpt/content-security-policy/gen/top.meta/script-src-wildcard/worklet-audio-import-data.https.html [ Failure ] -crbug.com/1198079 external/wpt/content-security-policy/gen/top.meta/script-src-wildcard/worklet-layout-import-data.https.html [ Failure ] -crbug.com/1198079 external/wpt/content-security-policy/gen/top.meta/script-src-wildcard/worklet-paint-import-data.https.html [ Failure ] -crbug.com/1198079 external/wpt/content-security-policy/gen/top.meta/worker-src-self/worker-import.http.html [ Failure ] -crbug.com/1198079 external/wpt/content-security-policy/gen/top.meta/worker-src-self/worker-import.https.html [ Failure ] -crbug.com/1198079 external/wpt/content-security-policy/navigate-to/spv-only-sent-to-initiator.sub.html [ Failure Pass ] -crbug.com/1198079 external/wpt/content-security-policy/object-src/object-src-url-allowed.html [ Crash Failure Pass ] -crbug.com/1198079 external/wpt/content-security-policy/object-src/object-src-url-embed-allowed.html [ Crash Failure Pass ] -crbug.com/1198079 external/wpt/content-security-policy/object-src/object-src-url-redirect-allowed.html [ Crash Failure Pass ] -crbug.com/1198079 external/wpt/content-security-policy/sandbox/service-worker-sandbox.https.html [ Failure ] -crbug.com/1198079 external/wpt/content-security-policy/script-src/hash-always-converted-to-utf-8/iso-8859-1.html [ Failure ] -crbug.com/1198079 external/wpt/content-security-policy/script-src/hash-always-converted-to-utf-8/iso-8859-3.html [ Failure ] -crbug.com/1198079 external/wpt/content-security-policy/script-src/hash-always-converted-to-utf-8/iso-8859-7.html [ Failure ] -crbug.com/1198079 external/wpt/content-security-policy/script-src/hash-always-converted-to-utf-8/iso-8859-9.html [ Failure ] -crbug.com/1198079 external/wpt/content-security-policy/securitypolicyviolation/blockeduri-eval.html [ Failure ] -crbug.com/1198079 external/wpt/content-security-policy/securitypolicyviolation/blockeduri-inline.html [ Failure ] -crbug.com/1198079 external/wpt/content-security-policy/securitypolicyviolation/idlharness.window.html [ Failure ] -crbug.com/1198079 external/wpt/content-security-policy/securitypolicyviolation/inside-shared-worker.html [ Failure ] -crbug.com/1198079 external/wpt/content-security-policy/securitypolicyviolation/securitypolicyviolation-block-cross-origin-image-from-script.sub.html [ Failure ] -crbug.com/1198079 external/wpt/content-security-policy/securitypolicyviolation/securitypolicyviolation-block-cross-origin-image.sub.html [ Failure ] -crbug.com/1198079 external/wpt/content-security-policy/securitypolicyviolation/securitypolicyviolation-block-image-from-script.sub.html [ Failure ] -crbug.com/1198079 external/wpt/content-security-policy/securitypolicyviolation/securitypolicyviolation-block-image.sub.html [ Failure ] -crbug.com/1198079 external/wpt/content-security-policy/style-src/inline-style-allowed-while-cloning-objects.sub.html [ Failure ] -crbug.com/1198079 external/wpt/content-security-policy/style-src/style-blocked.sub.html [ Failure ] - -# Reporting IDL failures on Android. -crbug.com/1198081 external/wpt/reporting/idlharness.any.html [ Failure ] -crbug.com/1198081 external/wpt/reporting/idlharness.any.worker.html [ Failure ] - -# Signed Exchange failures on Android. -crbug.com/1198085 external/wpt/signed-exchange/check-cert-request.tentative.html [ Failure ] -crbug.com/1198085 external/wpt/signed-exchange/fallback-to-another-sxg.tentative.html [ Failure ] -crbug.com/1198085 external/wpt/signed-exchange/reporting/sxg-reporting-navigation-cert_fetch_error-downgraded.tentative.html [ Failure ] -crbug.com/1198085 external/wpt/signed-exchange/reporting/sxg-reporting-navigation-cert_fetch_error.tentative.html [ Timeout ] -crbug.com/1198085 external/wpt/signed-exchange/reporting/sxg-reporting-navigation-cert_parse_error-downgraded.tentative.html [ Failure ] -crbug.com/1198085 external/wpt/signed-exchange/reporting/sxg-reporting-navigation-cert_parse_error.tentative.html [ Timeout ] -crbug.com/1198085 external/wpt/signed-exchange/reporting/sxg-reporting-navigation-cert_verification_error-downgraded.tentative.html [ Failure ] -crbug.com/1198085 external/wpt/signed-exchange/reporting/sxg-reporting-navigation-cert_verification_error.tentative.html [ Failure ] -crbug.com/1198085 external/wpt/signed-exchange/reporting/sxg-reporting-navigation-failed-zero-success-fraction.tentative.html [ Failure ] -crbug.com/1198085 external/wpt/signed-exchange/reporting/sxg-reporting-navigation-invalid_integrity_header.tentative.html [ Failure ] -crbug.com/1198085 external/wpt/signed-exchange/reporting/sxg-reporting-navigation-mi_error.tentative.html [ Failure ] -crbug.com/1198085 external/wpt/signed-exchange/reporting/sxg-reporting-navigation-ok-no-referrer.tentative.html [ Failure ] -crbug.com/1198085 external/wpt/signed-exchange/reporting/sxg-reporting-navigation-ok-origin-referrer.tentative.html [ Failure ] -crbug.com/1198085 external/wpt/signed-exchange/reporting/sxg-reporting-navigation-ok.tentative.html [ Failure ] -crbug.com/1198085 external/wpt/signed-exchange/reporting/sxg-reporting-navigation-signature_verification_error-downgraded.tentative.html [ Failure ] -crbug.com/1198085 external/wpt/signed-exchange/reporting/sxg-reporting-navigation-signature_verification_error.tentative.html [ Failure ] -crbug.com/1198085 external/wpt/signed-exchange/reporting/sxg-reporting-prefetch-cert_fetch_error-downgraded.tentative.html [ Failure ] -crbug.com/1198085 external/wpt/signed-exchange/reporting/sxg-reporting-prefetch-cert_fetch_error.tentative.html [ Timeout ] -crbug.com/1198085 external/wpt/signed-exchange/reporting/sxg-reporting-prefetch-cert_parse_error-downgraded.tentative.html [ Failure ] -crbug.com/1198085 external/wpt/signed-exchange/reporting/sxg-reporting-prefetch-cert_parse_error.tentative.html [ Timeout ] -crbug.com/1198085 external/wpt/signed-exchange/reporting/sxg-reporting-prefetch-cert_verification_error-downgraded.tentative.html [ Failure ] -crbug.com/1198085 external/wpt/signed-exchange/reporting/sxg-reporting-prefetch-cert_verification_error.tentative.html [ Failure ] -crbug.com/1198085 external/wpt/signed-exchange/reporting/sxg-reporting-prefetch-failed-zero-success-feaction.tentative.html [ Failure ] -crbug.com/1198085 external/wpt/signed-exchange/reporting/sxg-reporting-prefetch-invalid_integrity_header.tentative.html [ Failure ] -crbug.com/1198085 external/wpt/signed-exchange/reporting/sxg-reporting-prefetch-mi_error.tentative.html [ Failure ] -crbug.com/1198085 external/wpt/signed-exchange/reporting/sxg-reporting-prefetch-ok.tentative.html [ Failure ] -crbug.com/1198085 external/wpt/signed-exchange/reporting/sxg-reporting-prefetch-signature_verification_error-downgraded.tentative.html [ Failure ] -crbug.com/1198085 external/wpt/signed-exchange/reporting/sxg-reporting-prefetch-signature_verification_error.tentative.html [ Failure ] -crbug.com/1198085 external/wpt/signed-exchange/service-workers/sxg-sw-register-after-fallback.tentative.https.html [ Failure ] -crbug.com/1198085 external/wpt/signed-exchange/service-workers/sxg-sw-register.tentative.https.html [ Timeout ] -crbug.com/1198085 external/wpt/signed-exchange/subresource/sxg-subresource-header-integrity-mismatch.tentative.html [ Timeout ] -crbug.com/1198085 external/wpt/signed-exchange/subresource/sxg-subresource.tentative.html [ Timeout ] -crbug.com/1198085 external/wpt/signed-exchange/sxg-data-cert-url.tentative.html [ Failure ] -crbug.com/1198085 external/wpt/signed-exchange/sxg-location-fragment.tentative.html [ Failure ] -crbug.com/1198085 external/wpt/signed-exchange/sxg-location.tentative.html [ Failure ] -crbug.com/1198085 external/wpt/signed-exchange/sxg-merkle-integrity-error.tentative.html [ Failure ] -crbug.com/1198085 external/wpt/signed-exchange/sxg-navigation-timing.tentative.html [ Failure ] -crbug.com/1198085 external/wpt/signed-exchange/sxg-prefetch.tentative.https.html [ Failure ] -crbug.com/1198085 external/wpt/signed-exchange/sxg-referrer-policy-header.tentative.https.html [ Failure ] -crbug.com/1198085 external/wpt/signed-exchange/sxg-referrer-remote-physical-remote-logical.tentative.https.html [ Failure ] -crbug.com/1198085 external/wpt/signed-exchange/sxg-referrer-remote-physical-same-logical.tentative.https.html [ Failure ] -crbug.com/1198085 external/wpt/signed-exchange/sxg-referrer-same-physical-remote-logical.tentative.https.html [ Failure ] -crbug.com/1198085 external/wpt/signed-exchange/sxg-referrer-same-physical-same-logical.tentative.https.html [ Failure ] -crbug.com/1198085 external/wpt/signed-exchange/sxg-utf8-inner-url.tentative.html [ Timeout ] -crbug.com/1198085 external/wpt/signed-exchange/sxg-variants-match.tentative.html [ Failure ] - -# WebCodecs failures on Android. -crbug.com/1198089 external/wpt/webcodecs/video-encoder-config.https.any.html [ Failure ] -crbug.com/1198089 external/wpt/webcodecs/video-encoder-config.https.any.worker.html [ Failure ] -crbug.com/1198089 external/wpt/webcodecs/video-frame.any.html [ Failure ] -crbug.com/1198089 external/wpt/webcodecs/video-frame.any.worker.html [ Failure ] -crbug.com/1198089 external/wpt/webcodecs/videoFrame-canvasImageSource.html [ Failure ] -crbug.com/1198089 external/wpt/webcodecs/videoFrame-createImageBitmap.any.html [ Failure ] -crbug.com/1198089 external/wpt/webcodecs/videoFrame-createImageBitmap.any.worker.html [ Failure ] -crbug.com/1198089 external/wpt/webcodecs/videoFrame-texImage.any.html [ Failure Pass ] -crbug.com/1198089 external/wpt/webcodecs/videoFrame-texImage.any.worker.html [ Failure Pass ] - -# Failing background-fetch tests. -crbug.com/882282 external/wpt/background-fetch/fetch.https.window.html [ Failure Pass Timeout ] - -# Test seems to be flaky on both Chrome and WebLayer. -crbug.com/1177918 external/wpt/input-events/input-events-get-target-ranges.html [ Failure Pass ] - -# Layout Instability tests are not calibrated for mobile screens. -crbug.com/1191142 external/wpt/layout-instability/absolute-child-shift-with-parent-contain.html [ Skip ] -crbug.com/1191142 external/wpt/layout-instability/absolute-child-shift-with-parent-negative-overflow.html [ Skip ] -crbug.com/1191142 external/wpt/layout-instability/absolute-child-shift-with-parent-overflow.html [ Skip ] -crbug.com/1191142 external/wpt/layout-instability/body-display-change.html [ Skip ] -crbug.com/1191142 external/wpt/layout-instability/buffer-layout-shift.html [ Skip ] -crbug.com/1191142 external/wpt/layout-instability/buffered-flag.html [ Skip ] -crbug.com/1191142 external/wpt/layout-instability/child-shift-with-parent-overflow-hidden.html [ Skip ] -crbug.com/1191142 external/wpt/layout-instability/child-shift-with-parent-overflow-x-clip.html [ Skip ] -crbug.com/1191142 external/wpt/layout-instability/child-shift-with-parent.html [ Skip ] -crbug.com/1191142 external/wpt/layout-instability/composited-element-movement.html [ Skip ] -crbug.com/1191142 external/wpt/layout-instability/content-visibility-auto-offscreen.html [ Skip ] -crbug.com/1191142 external/wpt/layout-instability/expand-above-viewport.html [ Skip ] -crbug.com/1191142 external/wpt/layout-instability/fixed-position-move.html [ Skip ] -crbug.com/1191142 external/wpt/layout-instability/input-timestamp.html [ Skip ] -crbug.com/1191142 external/wpt/layout-instability/move-distance-clamped.html [ Skip ] -crbug.com/1191142 external/wpt/layout-instability/move-transformed.html [ Skip ] -crbug.com/1191142 external/wpt/layout-instability/multi-clip-visual-rect.html [ Skip ] -crbug.com/1191142 external/wpt/layout-instability/opacity-zero-layout-and-visible.html [ Skip ] -crbug.com/1191142 external/wpt/layout-instability/partially-clipped-visual-rect.html [ Skip ] -crbug.com/1191142 external/wpt/layout-instability/pointerdown-becomes-scroll.html [ Skip ] -crbug.com/1191142 external/wpt/layout-instability/pointerdown-becomes-tap.html [ Skip ] -crbug.com/1191142 external/wpt/layout-instability/pointermove-becomes-drag.html [ Skip ] -crbug.com/1191142 external/wpt/layout-instability/recent-input.html [ Skip ] -crbug.com/1191142 external/wpt/layout-instability/rtl-distance.html [ Skip ] -crbug.com/1191142 external/wpt/layout-instability/shift-into-viewport.html [ Skip ] -crbug.com/1191142 external/wpt/layout-instability/shift-outside-viewport.html [ Skip ] -crbug.com/1191142 external/wpt/layout-instability/shift-while-scrolled.html [ Skip ] -crbug.com/1191142 external/wpt/layout-instability/shift-with-overflow-status-change.html [ Skip ] -crbug.com/1191142 external/wpt/layout-instability/simple-block-movement.html [ Skip ] -crbug.com/1191142 external/wpt/layout-instability/sources-enclosure.html [ Skip ] -crbug.com/1191142 external/wpt/layout-instability/sources-maximpact.html [ Skip ] -crbug.com/1191142 external/wpt/layout-instability/sources.html [ Skip ] -crbug.com/1191142 external/wpt/layout-instability/sticky-descendant-move.html [ Skip ] -crbug.com/1191142 external/wpt/layout-instability/transform.html [ Skip ] -crbug.com/1191142 external/wpt/layout-instability/visibility-hidden-layout-and-visible.html [ Skip ] - -# Add untriaged failures in this block -crbug.com/1050754 external/wpt/FileAPI/file/send-file-form-punctuation.html [ Pass Timeout ] -crbug.com/1050754 external/wpt/FileAPI/file/send-file-formdata-controls.html [ Failure ] -crbug.com/1050754 external/wpt/IndexedDB/bindings-inject-values-bypass-chain.html [ Failure Pass ] -crbug.com/1050754 external/wpt/IndexedDB/file_support.sub.html [ Failure ] -crbug.com/1050754 external/wpt/IndexedDB/idbindex-rename-abort.html [ Failure Pass ] -crbug.com/1050754 external/wpt/IndexedDB/idlharness.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/IndexedDB/key-generators/reading-autoincrement-indexes-cursors.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/IndexedDB/key-generators/reading-autoincrement-indexes.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/IndexedDB/key-generators/reading-autoincrement-store-cursors.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/IndexedDB/key-generators/reading-autoincrement-store.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/IndexedDB/transaction-abort-generator-revert.html [ Failure Pass ] -crbug.com/1050754 external/wpt/WebCryptoAPI/historical.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/accelerometer/Accelerometer.https.html [ Failure ] -crbug.com/1050754 external/wpt/animation-worklet/inactive-timeline.https.html [ Timeout ] -crbug.com/1050754 external/wpt/animation-worklet/scroll-timeline-writing-modes.https.html [ Failure ] -crbug.com/1050754 external/wpt/animation-worklet/worklet-animation-local-time-null-1.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/bluetooth/adapter/adapter-absent-getAvailability.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/adapter/adapter-added-getAvailability.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/adapter/adapter-powered-off-getAvailability.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/adapter/adapter-powered-on-getAvailability.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/adapter/adapter-powered-on-off-on-getAvailability.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/adapter/adapter-removed-getAvailability.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/adapter/cross-origin-iframe-getAvailability.sub.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/characteristic/characteristicProperties.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/characteristic/getDescriptor/gen-characteristic-is-removed.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/characteristic/getDescriptor/gen-descriptor-get-same-object.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/characteristic/getDescriptor/gen-service-is-removed.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/characteristic/getDescriptors/gen-characteristic-is-removed-with-uuid.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/characteristic/getDescriptors/gen-characteristic-is-removed.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/characteristic/getDescriptors/gen-descriptor-get-same-object.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/characteristic/getDescriptors/gen-service-is-removed-with-uuid.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/characteristic/getDescriptors/gen-service-is-removed.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/characteristic/notifications/characteristic-is-removed.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/characteristic/notifications/service-is-removed.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/characteristic/readValue/add-multiple-event-listeners.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/characteristic/readValue/characteristic-is-removed.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/characteristic/readValue/event-is-fired.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/characteristic/readValue/gen-characteristic-is-removed.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/characteristic/readValue/read-succeeds.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/characteristic/readValue/read-updates-value.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/characteristic/readValue/service-is-removed.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/characteristic/service-same-from-2-characteristics.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/characteristic/service-same-object.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/characteristic/startNotifications/gen-characteristic-is-removed.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/characteristic/writeValue/buffer-is-detached.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/characteristic/writeValue/characteristic-is-removed.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/characteristic/writeValue/gen-characteristic-is-removed.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/characteristic/writeValue/service-is-removed.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/characteristic/writeValue/write-succeeds.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/characteristic/writeValueWithResponse/buffer-is-detached.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/characteristic/writeValueWithResponse/characteristic-is-removed.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/characteristic/writeValueWithResponse/gen-characteristic-is-removed.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/characteristic/writeValueWithResponse/service-is-removed.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/characteristic/writeValueWithResponse/write-succeeds.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/characteristic/writeValueWithoutResponse/buffer-is-detached.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/characteristic/writeValueWithoutResponse/characteristic-is-removed.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/characteristic/writeValueWithoutResponse/gen-characteristic-is-removed.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/characteristic/writeValueWithoutResponse/service-is-removed.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/characteristic/writeValueWithoutResponse/write-succeeds.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/descriptor/readValue/gen-service-is-removed.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/descriptor/readValue/read-succeeds.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/descriptor/writeValue/buffer-is-detached.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/descriptor/writeValue/gen-service-is-removed.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/device/gattserverdisconnected-event/disconnected.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/device/gattserverdisconnected-event/disconnected_gc.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/device/gattserverdisconnected-event/one-event-per-disconnection.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/device/gattserverdisconnected-event/reconnect-during-disconnected-event.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/device/watchAdvertisements/abort-before-watchAdvertisements.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/device/watchAdvertisements/abort-pending-operation.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/device/watchAdvertisements/abort-signal-stops-events.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/device/watchAdvertisements/abort-subsequent-watchAdvertisements-call-stops-events.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/device/watchAdvertisements/advertisementreceived-event-fired.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/device/watchAdvertisements/concurrent-watchAdvertisements-calls.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/device/watchAdvertisements/service-and-manufacturer-data-filtered-from-event.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/device/watchAdvertisements/subsequent-watchAdvertisements-call.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/device/watchAdvertisements/watching-two-devices-abort-one-watchAdvertisements.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/device/watchAdvertisements/watching-two-devices.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/getDevices/granted-devices-with-services.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/getDevices/no-granted-devices.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/getDevices/returns-same-bluetooth-device-object.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/requestDevice/canonicalizeFilter/dataPrefix-buffer-is-detached.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/requestDevice/canonicalizeFilter/empty-dataPrefix.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/requestDevice/canonicalizeFilter/invalid-companyIdentifier.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/requestDevice/canonicalizeFilter/mask-buffer-is-detached.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/server/getPrimaryService/gen-disconnect-called-before.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/server/getPrimaryService/gen-disconnect-called-during-error.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/server/getPrimaryService/gen-disconnect-called-during-success.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/server/getPrimaryService/gen-disconnect-invalidates-objects.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/server/getPrimaryService/gen-disconnected-device.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/server/getPrimaryService/gen-discovery-complete-no-permission-absent-service.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/server/getPrimaryService/gen-discovery-complete-service-not-found.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/server/getPrimaryService/gen-garbage-collection-ran-during-error.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/server/getPrimaryService/gen-garbage-collection-ran-during-success.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/server/getPrimaryService/gen-get-different-service-after-reconnection.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/server/getPrimaryService/gen-get-same-object.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/server/getPrimaryService/gen-invalid-service-name.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/server/getPrimaryService/gen-no-permission-absent-service.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/server/getPrimaryService/gen-no-permission-for-any-service.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/server/getPrimaryService/gen-no-permission-present-service.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/server/getPrimaryService/gen-service-not-found.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/server/getPrimaryServices/gen-disconnect-called-before-with-uuid.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/server/getPrimaryServices/gen-disconnect-called-before.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/server/getPrimaryServices/gen-disconnect-called-during-error-with-uuid.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/server/getPrimaryServices/gen-disconnect-called-during-error.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/server/getPrimaryServices/gen-disconnect-called-during-success-with-uuid.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/server/getPrimaryServices/gen-disconnect-called-during-success.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/server/getPrimaryServices/gen-disconnect-invalidates-objects-with-uuid.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/server/getPrimaryServices/gen-disconnect-invalidates-objects.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/server/getPrimaryServices/gen-disconnected-device-with-uuid.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/server/getPrimaryServices/gen-disconnected-device.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/server/getPrimaryServices/gen-discovery-complete-no-permission-absent-service-with-uuid.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/server/getPrimaryServices/gen-discovery-complete-service-not-found-with-uuid.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/server/getPrimaryServices/gen-garbage-collection-ran-during-error-with-uuid.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/server/getPrimaryServices/gen-garbage-collection-ran-during-error.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/server/getPrimaryServices/gen-garbage-collection-ran-during-success-with-uuid.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/server/getPrimaryServices/gen-garbage-collection-ran-during-success.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/server/getPrimaryServices/gen-get-different-service-after-reconnection-with-uuid.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/server/getPrimaryServices/gen-get-different-service-after-reconnection.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/server/getPrimaryServices/gen-get-same-object-with-uuid.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/server/getPrimaryServices/gen-get-same-object.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/server/getPrimaryServices/gen-invalid-service-name.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/server/getPrimaryServices/gen-no-permission-absent-service-with-uuid.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/server/getPrimaryServices/gen-no-permission-for-any-service-with-uuid.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/server/getPrimaryServices/gen-no-permission-for-any-service.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/server/getPrimaryServices/gen-no-permission-present-service-with-uuid.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/server/getPrimaryServices/gen-service-not-found-with-uuid.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/service/getCharacteristic/gen-blocklisted-characteristic.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/service/getCharacteristic/gen-characteristic-not-found.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/service/getCharacteristic/gen-garbage-collection-ran-during-error.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/service/getCharacteristic/gen-get-same-object.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/service/getCharacteristic/gen-invalid-characteristic-name.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/service/getCharacteristic/gen-reconnect-during.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/service/getCharacteristic/gen-service-is-removed.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/service/getCharacteristics/gen-blocklisted-characteristic-with-uuid.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/service/getCharacteristics/gen-characteristic-not-found-with-uuid.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/service/getCharacteristics/gen-garbage-collection-ran-during-error-with-uuid.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/service/getCharacteristics/gen-garbage-collection-ran-during-error.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/service/getCharacteristics/gen-get-same-object-with-uuid.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/service/getCharacteristics/gen-get-same-object.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/service/getCharacteristics/gen-invalid-characteristic-name.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/service/getCharacteristics/gen-reconnect-during-with-uuid.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/service/getCharacteristics/gen-reconnect-during.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/service/getCharacteristics/gen-service-is-removed-with-uuid.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/service/getCharacteristics/gen-service-is-removed.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/clear-site-data/storage.https.html [ Pass Timeout ] -crbug.com/1050754 external/wpt/client-hints/accept-ch-answers.sub.https.html [ Failure ] -crbug.com/1050754 external/wpt/client-hints/accept-ch-cache-revalidation.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/client-hints/accept-ch-feature-policy.sub.https.html [ Failure ] -crbug.com/1050754 external/wpt/client-hints/accept-ch-no-feature-policy.sub.https.html [ Failure ] -crbug.com/1050754 external/wpt/client-hints/accept-ch-stickiness/cross-origin-navigation.https.html [ Failure ] -crbug.com/1050754 external/wpt/client-hints/accept-ch-stickiness/cross-origin-subresource-redirect.https.html [ Failure ] -crbug.com/1050754 external/wpt/client-hints/accept-ch-stickiness/cross-origin-syncxhr-redirect.https.html [ Failure ] -crbug.com/1050754 external/wpt/client-hints/accept-ch-stickiness/http-equiv-cross-origin-subresource.https.html [ Failure ] -crbug.com/1050754 external/wpt/client-hints/critical-ch/subresource.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/clipboard-apis/async-html-script-removal.https.html [ Failure ] -crbug.com/1050754 external/wpt/clipboard-apis/async-svg-script-removal.https.html [ Failure ] -crbug.com/1050754 external/wpt/clipboard-apis/async-write-blobs-read-blobs.https.html [ Failure ] -crbug.com/1050754 external/wpt/clipboard-apis/async-write-html-read-html.https.html [ Failure ] -crbug.com/1050754 external/wpt/clipboard-apis/async-write-image-read-image.https.html [ Failure ] -crbug.com/1050754 external/wpt/clipboard-apis/async-write-svg-read-svg.https.html [ Failure ] -crbug.com/1050754 external/wpt/clipboard-apis/feature-policy/clipboard-read/clipboard-read-enabled-by-feature-policy-attribute-tentative.https.sub.html [ Failure ] -crbug.com/1050754 external/wpt/clipboard-apis/feature-policy/clipboard-read/clipboard-read-enabled-by-feature-policy.tentative.https.sub.html [ Failure ] -crbug.com/1050754 external/wpt/clipboard-apis/feature-policy/clipboard-write/clipboard-write-enabled-by-feature-policy-attribute-tentative.https.sub.html [ Failure ] -crbug.com/1050754 external/wpt/clipboard-apis/feature-policy/clipboard-write/clipboard-write-enabled-by-feature-policy.tentative.https.sub.html [ Failure ] -crbug.com/1050754 external/wpt/compat/idlharness.window.html [ Pass ] -crbug.com/1050754 external/wpt/compression/compression-bad-chunks.tentative.any.html [ Failure Pass ] -crbug.com/1050754 external/wpt/compression/compression-bad-chunks.tentative.any.serviceworker.html [ Failure Pass ] -crbug.com/1050754 external/wpt/compression/compression-bad-chunks.tentative.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/compression/compression-bad-chunks.tentative.any.worker.html [ Failure Pass ] -crbug.com/1050754 external/wpt/compression/compression-including-empty-chunk.tentative.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/compression/compression-multiple-chunks.tentative.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/compression/compression-output-length.tentative.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/compression/compression-stream.tentative.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/compression/decompression-buffersource.tentative.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/compression/decompression-constructor-error.tentative.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/compression/decompression-correct-input.tentative.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/compression/decompression-empty-input.tentative.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/compression/decompression-split-chunk.tentative.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/compression/decompression-uint8array-output.tentative.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/content-index/idlharness.https.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/content-security-policy/prefetch-src/prefetch-header-allowed.html [ Pass Timeout ] -crbug.com/1050754 external/wpt/content-security-policy/reporting/report-same-origin-with-cookies.html [ Failure Pass ] -crbug.com/1050754 external/wpt/cookie-store/cookieStore_subscribe_arguments.tentative.https.any.html [ Failure Pass ] -crbug.com/1050754 external/wpt/cookie-store/idlharness.tentative.https.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/cookie-store/serviceworker_cookieStore_subscriptions_reset.tentative.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/cookies/samesite/form-post-blank-reload.https.html [ Crash Failure ] -crbug.com/1050754 external/wpt/cookies/value/value-ctl.html [ Failure ] -crbug.com/1050754 external/wpt/cookies/value/value.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-backgrounds/animations/border-image-slice-composition.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-backgrounds/animations/border-image-slice-interpolation-stability.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-backgrounds/animations/border-image-slice-interpolation.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-backgrounds/animations/border-width-interpolation.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-backgrounds/inheritance.sub.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-cascade/all-prop-initial-xml.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-color-adjust/print-color-adjust-parsing.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-color-adjust/rendering/dark-color-scheme/color-scheme-system-colors.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-contain/contain-size-grid-003.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-contain/contain-size-grid-004.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-contain/content-visibility/content-visibility-053.html [ Crash Failure Pass ] -crbug.com/1050754 external/wpt/css/css-contain/content-visibility/content-visibility-068.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-contain/content-visibility/content-visibility-070.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-flexbox/flex-aspect-ratio-img-column-017.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-flexbox/negative-overflow.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-fonts/animations/font-stretch-interpolation.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-fonts/fallback-url-to-local.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-fonts/font-face-range-order.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-fonts/generic-family-keywords-002.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-fonts/variations/at-font-face-font-matching.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-grid/grid-definition/grid-percentage-rows-indefinite-height-001.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-grid/grid-items/grid-minimum-size-grid-items-021.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-layout-api/sync-layout-microtasks.https.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-logical/inheritance.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-multicol/getclientrects-000.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-multicol/getclientrects-001.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-multicol/inheritance.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-multicol/parsing/column-rule-computed.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-overflow/overflow-clip-margin-intersection-observer.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-overflow/overflow-codependent-scrollbars.html [ Pass ] -crbug.com/1050754 external/wpt/css/css-overflow/overflow-padding.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-overflow/scrollbar-gutter-001.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-overflow/scrollbar-gutter-propagation-001.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-overflow/scrollbar-gutter-propagation-002.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-overflow/scrollbar-gutter-propagation-003.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-overflow/scrollbar-gutter-propagation-007.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-overflow/scrollbar-gutter-rtl-001.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-overflow/scrollbar-gutter-vertical-lr-001.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-overflow/scrollbar-gutter-vertical-rl-001.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-position/position-absolute-replaced-minmax.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-position/sticky/position-sticky-nested-bottom.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-position/sticky/position-sticky-nested-right.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-properties-values-api/unit-cycles.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-ruby/line-spacing.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-scroll-anchoring/abspos-contributes-to-static-parent-bounds.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-scroll-anchoring/focus-prioritized.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-scroll-anchoring/fragment-scrolling-anchors.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-scroll-anchoring/history-restore-anchors.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-scroll-anchoring/negative-layout-overflow.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-scroll-anchoring/position-change-heuristic-in-nested-scroll-box.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-scroll-anchoring/position-change-heuristic.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-scroll-anchoring/reading-scroll-forces-anchoring.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-scroll-snap/scroll-snap-type-on-root-element.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-scroll-snap/snap-at-user-scroll-end.html [ Timeout ] -crbug.com/1050754 external/wpt/css/css-scrollbars/scrollbar-width-001.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-scrollbars/scrollbar-width-002.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-scrollbars/scrollbar-width-003.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-scrollbars/scrollbar-width-004.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-scrollbars/scrollbar-width-005.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-scrollbars/scrollbar-width-006.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-scrollbars/scrollbar-width-008.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-shapes/shape-outside/values/shape-margin-001.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-shapes/shape-outside/values/shape-outside-shape-arguments-000.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-sizing/aspect-ratio/quirks-mode-002.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-sizing/contain-intrinsic-size/parsing/contain-intrinsic-size-computed.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-tables/tentative/baseline-table.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-tables/tentative/baseline-td.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-tables/tentative/colgroup-col.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-tables/tentative/table-quirks.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-text/i18n/other-lang/css-text-line-break-de-in-loose.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-text/i18n/zh/css-text-line-break-zh-pr-strict.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-text/parsing/tab-size-computed.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-text/parsing/word-boundary-detection-computed.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-text/parsing/word-boundary-detection-valid.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-text/parsing/word-boundary-expansion-computed.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-text/parsing/word-boundary-expansion-valid.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-text/tab-size/tab-size.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-text/text-justify/distribute-alias.tentative.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-text/white-space/seg-break-transformation-004.tentative.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-text/white-space/trailing-space-position-001.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-text/white-space/white-space-collapse-002.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-transforms/transform-scale-hittest.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-transitions/CSSTransition-effect.tentative.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-transitions/properties-value-inherit-003.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-ui/animation/outline-width-interpolation.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-ui/text-overflow-023.html [ Pass ] -crbug.com/1050754 external/wpt/css/css-values/lh-rlh-on-root-001.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-values/viewport-units-css2-001.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-variables/variable-presentation-attribute.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-writing-modes/wm-propagation-body-scroll-offset-vertical-rl.html [ Failure ] -crbug.com/1050754 external/wpt/css/cssom-view/CaretPosition-001.html [ Failure ] -crbug.com/1050754 external/wpt/css/cssom-view/cssom-getBoundingClientRect-003.html [ Failure ] -crbug.com/1050754 external/wpt/css/cssom-view/cssom-view-img-attributes-001.html [ Failure ] -crbug.com/1050754 external/wpt/css/cssom-view/getBoundingClientRect-shy.html [ Failure ] -crbug.com/1050754 external/wpt/css/cssom-view/scroll-behavior-smooth.html [ Failure ] -crbug.com/1050754 external/wpt/css/cssom-view/scrollIntoView-smooth.html [ Failure ] -crbug.com/1050754 external/wpt/css/cssom-view/scrollLeft-of-scroller-with-wider-scrollbar.html [ Failure ] -crbug.com/1050754 external/wpt/css/cssom-view/scrollintoview.html [ Failure ] -crbug.com/1050754 external/wpt/css/cssom/cssstyledeclaration-csstext.html [ Failure ] -crbug.com/1050754 external/wpt/css/cssom/cssstyledeclaration-properties.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/cssom/font-family-serialization-001.html [ Failure ] -crbug.com/1050754 external/wpt/css/cssom/getComputedStyle-width-scroll.tentative.html [ Pass ] -crbug.com/1050754 external/wpt/css/geometry/DOMMatrix2DInit-validate-fixup.html [ Failure ] -crbug.com/1050754 external/wpt/css/selectors/focus-visible-016.html [ Crash Failure Pass ] -crbug.com/1050754 external/wpt/css/selectors/i18n/css3-selectors-lang-010.html [ Crash Failure Pass ] -crbug.com/1050754 external/wpt/custom-elements/form-associated/ElementInternals-setFormValue.html [ Failure Timeout ] -crbug.com/1050754 external/wpt/custom-elements/reactions/DOMStringMap.html [ Failure Pass ] -crbug.com/1050754 external/wpt/custom-elements/reactions/HTMLInputElement.html [ Failure ] -crbug.com/1050754 external/wpt/custom-elements/reactions/HTMLOptGroupElement.html [ Failure Pass ] -crbug.com/1050754 external/wpt/custom-elements/reactions/HTMLParamElement.html [ Failure Pass ] -crbug.com/1050754 external/wpt/document-policy/experimental-features/sync-script.tentative.https.sub.html [ Failure Pass ] -crbug.com/1050754 external/wpt/document-policy/reporting/oversized-images-reporting-tentative.html [ Timeout ] -crbug.com/1050754 external/wpt/dom/events/document-level-touchmove-event-listener-passive-by-default.html [ Pass ] -crbug.com/1050754 external/wpt/dom/events/scrolling/input-text-scroll-event-when-using-arrow-keys.html [ Timeout ] -crbug.com/1050754 external/wpt/dom/events/scrolling/overscroll-event-fired-to-scrolled-element.html [ Failure ] -crbug.com/1050754 external/wpt/dom/events/scrolling/scrollend-event-fired-to-scrolled-element.html [ Failure ] -crbug.com/1050754 external/wpt/dom/events/scrolling/scrollend-event-for-user-scroll.html [ Timeout ] -crbug.com/1050754 external/wpt/dom/events/webkit-animation-iteration-event.html [ Pass Timeout ] -crbug.com/1050754 external/wpt/dom/idlharness.any.serviceworker.html [ Failure Pass ] -crbug.com/1050754 external/wpt/dom/idlharness.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/dom/idlharness.any.worker.html [ Failure Pass ] -crbug.com/1050754 external/wpt/domxpath/xml_xpath_runner.html [ Failure Pass ] -crbug.com/1050754 external/wpt/editing/other/select-all-and-delete-in-html-element-having-contenteditable.html [ Pass ] -crbug.com/1050754 external/wpt/editing/run/bold.html?1-1000 [ Failure ] -crbug.com/1050754 external/wpt/editing/run/bold.html?1001-2000 [ Failure ] -crbug.com/1050754 external/wpt/editing/run/bold.html?2001-3000 [ Failure ] -crbug.com/1050754 external/wpt/editing/run/delete.html?1001-2000 [ Failure ] -crbug.com/1050754 external/wpt/editing/run/italic.html?1-1000 [ Failure ] -crbug.com/1050754 external/wpt/editing/run/italic.html?1001-2000 [ Failure ] -crbug.com/1050754 external/wpt/editing/run/justifycenter.html?1001-2000 [ Failure ] -crbug.com/1050754 external/wpt/editing/run/justifycenter.html?2001-3000 [ Failure ] -crbug.com/1050754 external/wpt/editing/run/justifycenter.html?4001-5000 [ Failure ] -crbug.com/1050754 external/wpt/editing/run/justifycenter.html?5001-6000 [ Failure ] -crbug.com/1050754 external/wpt/editing/run/justifyfull.html?1001-2000 [ Failure ] -crbug.com/1050754 external/wpt/editing/run/justifyfull.html?2001-3000 [ Failure ] -crbug.com/1050754 external/wpt/editing/run/justifyfull.html?4001-last [ Failure ] -crbug.com/1050754 external/wpt/editing/run/justifyright.html?1001-2000 [ Failure ] -crbug.com/1050754 external/wpt/editing/run/justifyright.html?2001-3000 [ Failure ] -crbug.com/1050754 external/wpt/editing/run/justifyright.html?4001-last [ Failure ] -crbug.com/1050754 external/wpt/editing/run/strikethrough.html?1001-2000 [ Failure ] -crbug.com/1050754 external/wpt/editing/run/strikethrough.html?2001-last [ Failure ] -crbug.com/1050754 external/wpt/editing/run/subscript.html [ Failure ] -crbug.com/1050754 external/wpt/editing/run/superscript.html [ Failure ] -crbug.com/1050754 external/wpt/editing/run/underline.html?1001-2000 [ Failure ] -crbug.com/1050754 external/wpt/editing/run/underline.html?2001-last [ Failure ] -crbug.com/1050754 external/wpt/element-timing/image-carousel.html [ Failure Pass ] -crbug.com/1050754 external/wpt/element-timing/image-not-fully-visible.html [ Failure ] -crbug.com/1050754 external/wpt/element-timing/observe-multiple-images.html [ Failure Pass ] -crbug.com/1050754 external/wpt/element-timing/progressively-loaded-image.html [ Failure Pass ] -crbug.com/1050754 external/wpt/encoding-detection/fa-windows-1256-late.tentative.html [ Failure Pass ] -crbug.com/1050754 external/wpt/encoding-detection/he-ISO-8859-8-late.tentative.html [ Failure ] -crbug.com/1050754 external/wpt/encoding/idlharness.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/encoding/streams/backpressure.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/encoding/streams/decode-attributes.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/encoding/streams/decode-bad-chunks.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/encoding/streams/decode-ignore-bom.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/encoding/streams/decode-incomplete-input.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/encoding/streams/decode-non-utf8.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/encoding/streams/decode-split-character.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/encoding/streams/encode-bad-chunks.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/encoding/streams/encode-utf8.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/encoding/streams/readable-writable-properties.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/event-timing/auxclick.html [ Timeout ] -crbug.com/1050754 external/wpt/event-timing/only-observe-firstInput.html [ Failure Pass ] -crbug.com/1050754 external/wpt/eventsource/shared-worker/eventsource-close.htm [ Failure ] -crbug.com/1050754 external/wpt/eventsource/shared-worker/eventsource-constructor-non-same-origin.htm [ Failure ] -crbug.com/1050754 external/wpt/eventsource/shared-worker/eventsource-eventtarget.htm [ Failure ] -crbug.com/1050754 external/wpt/eventsource/shared-worker/eventsource-onmessage.htm [ Failure ] -crbug.com/1050754 external/wpt/eventsource/shared-worker/eventsource-onopen.htm [ Failure ] -crbug.com/1050754 external/wpt/eventsource/shared-worker/eventsource-prototype.htm [ Failure ] -crbug.com/1050754 external/wpt/eventsource/shared-worker/eventsource-url.htm [ Failure ] -crbug.com/1050754 external/wpt/external/wpt/css/css-shapes/shape-outside/values/shape-margin-001.html [ Failure ] -crbug.com/1050754 external/wpt/external/wpt/css/css-shapes/shape-outside/values/shape-outside-shape-arguments-000.html [ Failure ] -crbug.com/1050754 external/wpt/external/wpt/css/cssom-view/scrollintoview.html [ Failure ] -crbug.com/1050754 external/wpt/external/wpt/editing/other/editable-state-and-focus-in-shadow-dom-in-designMode.tentative.html [ Timeout ] -crbug.com/1050754 external/wpt/external/wpt/fetch/api/basic/status.h2.any.html [ Failure ] -crbug.com/1050754 external/wpt/external/wpt/fetch/api/basic/status.h2.any.worker.html [ Failure ] -crbug.com/1050754 external/wpt/external/wpt/fetch/api/headers/headers-normalize.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/external/wpt/fetch/api/headers/headers-record.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/external/wpt/fetch/api/response/response-stream-disturbed-1.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/external/wpt/fetch/api/response/response-stream-disturbed-2.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/external/wpt/fetch/api/response/response-stream-disturbed-3.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/external/wpt/fetch/api/response/response-stream-disturbed-4.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/external/wpt/fetch/api/response/response-stream-disturbed-5.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/external/wpt/html/semantics/embedded-content/the-embed-element/embed-dimension.html [ Failure ] -crbug.com/1050754 external/wpt/external/wpt/html/semantics/scripting-1/the-script-element/module/dynamic-import/blob-url.any.sharedworker-module.html [ Failure ] -crbug.com/1050754 external/wpt/external/wpt/html/semantics/scripting-1/the-script-element/module/dynamic-import/blob-url.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/external/wpt/html/semantics/scripting-1/the-script-element/module/dynamic-import/blob-url.any.worker-module.html [ Failure ] -crbug.com/1050754 external/wpt/external/wpt/payment-request/rejects_if_not_active.https.html [ Timeout ] -crbug.com/1050754 external/wpt/external/wpt/resize-observer/observe.html [ Failure ] -crbug.com/1050754 external/wpt/external/wpt/resize-observer/svg.html [ Failure ] -crbug.com/1050754 external/wpt/external/wpt/storage-access-api/requestStorageAccess.sub.window.html [ Failure ] -crbug.com/1050754 external/wpt/external/wpt/streams/piping/pipe-through.any.html [ Failure ] -crbug.com/1050754 external/wpt/external/wpt/streams/piping/pipe-through.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/external/wpt/streams/readable-byte-streams/general.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/external/wpt/webrtc/RTCPeerConnection-setRemoteDescription-rollback.html [ Timeout ] -crbug.com/1050754 external/wpt/external/wpt/webrtc/protocol/rtp-demuxing.html [ Failure ] -crbug.com/1050754 external/wpt/external/wpt/xhr/status.h2.window.html [ Failure ] -crbug.com/1050754 external/wpt/feature-policy/picture-in-picture-allowed-by-feature-policy-attribute-redirect-on-load.https.sub.html [ Failure ] -crbug.com/1050754 external/wpt/feature-policy/picture-in-picture-allowed-by-feature-policy-attribute.https.sub.html [ Failure ] -crbug.com/1050754 external/wpt/feature-policy/picture-in-picture-allowed-by-feature-policy.https.sub.html [ Failure ] -crbug.com/1050754 external/wpt/feature-policy/picture-in-picture-default-feature-policy.https.sub.html [ Failure ] -crbug.com/1050754 external/wpt/feature-policy/picture-in-picture-disabled-by-feature-policy.https.sub.html [ Failure ] -crbug.com/1050754 external/wpt/feature-policy/picture-in-picture-supported-by-feature-policy.html [ Failure ] -crbug.com/1050754 external/wpt/feature-policy/reporting/picture-in-picture-reporting.html [ Failure ] -crbug.com/1050754 external/wpt/feature-policy/reporting/serial-reporting.https.html [ Failure ] -crbug.com/1050754 external/wpt/feature-policy/reporting/xr-reporting.https.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/abort/cache.https.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/basic/accept-header.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/basic/conditional-get.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/basic/error-after-response.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/basic/header-value-combining.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/basic/header-value-null-byte.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/basic/historical.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/basic/http-response-code.any.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/basic/http-response-code.any.serviceworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/basic/http-response-code.any.worker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/basic/integrity.sub.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/basic/request-forbidden-headers.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/basic/request-head.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/basic/request-headers-case.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/basic/request-headers-nonascii.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/basic/request-headers.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/basic/request-referrer.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/basic/scheme-about.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/basic/scheme-data.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/basic/scheme-others.sub.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/basic/stream-response.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/basic/stream-safe-creation.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/basic/text-utf8.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/cors/cors-multiple-origins.sub.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/cors/data-url-shared-worker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/credentials/authentication-basic.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/credentials/cookies.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/headers/header-values-normalize.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/headers/header-values.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/headers/headers-basic.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/headers/headers-casing.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/headers/headers-combine.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/headers/headers-errors.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/headers/headers-no-cors.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/headers/headers-normalize.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/headers/headers-record.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/headers/headers-structure.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/redirect/redirect-back-to-original-origin.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/redirect/redirect-count.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/redirect/redirect-location-escape.tentative.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/redirect/redirect-method.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/redirect/redirect-schemes.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/redirect/redirect-to-dataurl.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/redirect/redirect-upload.h2.any.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/redirect/redirect-upload.h2.any.serviceworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/redirect/redirect-upload.h2.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/redirect/redirect-upload.h2.any.worker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/request/destination/fetch-destination-worker.https.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/request/request-bad-port.any.html [ Timeout ] -crbug.com/1050754 external/wpt/fetch/api/request/request-bad-port.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/request/request-bad-port.any.worker.html [ Timeout ] -crbug.com/1050754 external/wpt/fetch/api/request/request-cache-default-conditional.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/request/request-cache-default.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/request/request-cache-force-cache.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/request/request-cache-no-cache.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/request/request-cache-no-store.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/request/request-cache-only-if-cached.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/request/request-cache-reload.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/request/request-consume.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/request/request-init-002.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/request/request-keepalive.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/response/response-body-read-task-handling.html [ Failure Pass ] -crbug.com/1050754 external/wpt/fetch/api/response/response-cancel-stream.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/response/response-consume-stream.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/response/response-error.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/response/response-from-stream.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/response/response-init-001.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/response/response-init-002.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/response/response-static-error.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/response/response-static-redirect.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/response/response-stream-disturbed-1.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/response/response-stream-disturbed-2.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/response/response-stream-disturbed-3.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/response/response-stream-disturbed-4.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/response/response-stream-disturbed-5.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/response/response-stream-disturbed-6.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/response/response-stream-with-broken-then.any.html [ Crash Pass ] -crbug.com/1050754 external/wpt/fetch/api/response/response-stream-with-broken-then.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/content-encoding/bad-gzip-body.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/cross-origin-resource-policy/fetch.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/cross-origin-resource-policy/fetch.https.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/data-urls/base64.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/http-cache/304-update.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/http-cache/freshness.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/http-cache/status.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/metadata/fetch-preflight.https.sub.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/metadata/fetch.https.sub.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/metadata/sharedworker.https.sub.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/metadata/trailing-dot.https.sub.any.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/metadata/trailing-dot.https.sub.any.serviceworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/metadata/trailing-dot.https.sub.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/metadata/trailing-dot.https.sub.any.worker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/private-network-access/idlharness.tentative.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/stale-while-revalidate/fetch-sw.https.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/stale-while-revalidate/fetch.any.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/stale-while-revalidate/fetch.any.serviceworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/stale-while-revalidate/fetch.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/stale-while-revalidate/fetch.any.worker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/stale-while-revalidate/stale-css.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/stale-while-revalidate/stale-image.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/stale-while-revalidate/stale-script.html [ Failure Pass ] -crbug.com/1050754 external/wpt/focus/activeelement-after-focusing-different-site-iframe-contentwindow.html [ Pass ] -crbug.com/1050754 external/wpt/focus/activeelement-after-focusing-different-site-iframe.html [ Pass ] -crbug.com/1050754 external/wpt/focus/activeelement-after-focusing-same-site-iframe-contentwindow.html [ Pass ] -crbug.com/1050754 external/wpt/focus/activeelement-after-focusing-same-site-iframe.html [ Pass ] -crbug.com/1050754 external/wpt/focus/focus-already-focused-iframe-deep-different-site.html [ Pass ] -crbug.com/1050754 external/wpt/focus/focus-restoration-in-different-site-iframes-window.html [ Pass ] -crbug.com/1050754 external/wpt/focus/focus-restoration-in-different-site-iframes.html [ Pass ] -crbug.com/1050754 external/wpt/focus/focus-restoration-in-same-site-iframes-window.html [ Pass ] -crbug.com/1050754 external/wpt/focus/hasfocus-different-site.html [ Pass ] -crbug.com/1050754 external/wpt/focus/hasfocus-same-site.html [ Failure Pass ] -crbug.com/1050754 external/wpt/focus/iframe-contentwindow-focus-with-different-site-intermediate-frame.html [ Pass ] -crbug.com/1050754 external/wpt/focus/iframe-contentwindow-focus-with-same-as-top-intermediate-frame.html [ Failure Pass ] -crbug.com/1050754 external/wpt/focus/iframe-focus-with-different-site-intermediate-frame.html [ Pass ] -crbug.com/1050754 external/wpt/focus/iframe-focus-with-same-as-top-intermediate-frame.html [ Failure Pass ] -crbug.com/1050754 external/wpt/forced-colors-mode/forced-colors-mode-40.html [ Pass ] -crbug.com/1050754 external/wpt/fullscreen/api/element-request-fullscreen-options.tentative.html [ Failure ] -crbug.com/1050754 external/wpt/geolocation-API/getCurrentPosition_IDL.https.html [ Timeout ] -crbug.com/1050754 external/wpt/geolocation-API/getCurrentPosition_permission_deny.https.html [ Timeout ] -crbug.com/1050754 external/wpt/geolocation-API/non-fully-active.https.html [ Timeout ] -crbug.com/1050754 external/wpt/geolocation-API/watchPosition_permission_deny.https.html [ Timeout ] -crbug.com/1050754 external/wpt/gyroscope/Gyroscope.https.html [ Failure ] -crbug.com/1050754 external/wpt/hr-time/idlharness.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/html-media-capture/idlharness.window.html [ Pass ] -crbug.com/1050754 external/wpt/html/browsers/browsing-the-web/history-traversal/persisted-user-state-restoration/scroll-restoration-fragment-scrolling-samedoc.html [ Failure ] -crbug.com/1050754 external/wpt/html/browsers/browsing-the-web/history-traversal/scroll-restoration-order.html [ Failure ] -crbug.com/1050754 external/wpt/html/browsers/browsing-the-web/navigating-across-documents/javascript-url-abort/javascript-url-abort-return-value-string.tentative.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/browsers/browsing-the-web/scroll-to-fragid/scroll-position-vertical-rl.html [ Failure ] -crbug.com/1050754 external/wpt/html/browsers/browsing-the-web/unloading-documents/prompt-and-unload-script-closeable.html [ Timeout ] -crbug.com/1050754 external/wpt/html/browsers/browsing-the-web/unloading-documents/prompt/004.html [ Failure ] -crbug.com/1050754 external/wpt/html/browsers/history/joint-session-history/joint-session-history-remove-iframe.html [ Failure ] -crbug.com/1050754 external/wpt/html/browsers/history/the-history-interface/001.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/browsers/history/the-history-interface/002.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/browsers/history/the-history-interface/004.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/browsers/history/the-history-interface/005.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/browsers/history/the-location-interface/allow_prototype_cycle_through_location.sub.html [ Failure ] -crbug.com/1050754 external/wpt/html/browsers/history/the-location-interface/location-prototype-setting-same-origin-domain.sub.html [ Pass ] -crbug.com/1050754 external/wpt/html/browsers/offline/introduction-4/event_cached.https.html [ Failure ] -crbug.com/1050754 external/wpt/html/browsers/offline/introduction-4/event_checking.https.html [ Failure ] -crbug.com/1050754 external/wpt/html/browsers/offline/introduction-4/event_noupdate.https.html [ Failure ] -crbug.com/1050754 external/wpt/html/browsers/offline/introduction-4/event_progress.https.html [ Failure ] -crbug.com/1050754 external/wpt/html/browsers/offline/manifest_url_check.https.https.html [ Failure ] -crbug.com/1050754 external/wpt/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-tokenization-innerheight-innerwidth.html [ Timeout ] -crbug.com/1050754 external/wpt/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-tokenization-noopener.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-tokenization-noreferrer.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-tokenization-screenx-screeny.html [ Timeout ] -crbug.com/1050754 external/wpt/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-tokenization-top-left.html [ Timeout ] -crbug.com/1050754 external/wpt/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-tokenization-width-height.html [ Failure Timeout ] -crbug.com/1050754 external/wpt/html/canvas/element/drawing-text-to-the-canvas/2d.text.measure.advances.html [ Failure ] -crbug.com/1050754 external/wpt/html/canvas/element/drawing-text-to-the-canvas/2d.text.measure.baselines.html [ Failure ] -crbug.com/1050754 external/wpt/html/canvas/element/drawing-text-to-the-canvas/2d.text.measure.fontBoundingBox.html [ Failure ] -crbug.com/1050754 external/wpt/html/canvas/element/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.fillText.html [ Failure ] -crbug.com/1050754 external/wpt/html/canvas/element/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.strokeText.html [ Failure ] -crbug.com/1050754 external/wpt/html/canvas/element/manual/imagebitmap/canvas-createImageBitmap-video-resize.html [ Timeout ] -crbug.com/1050754 external/wpt/html/canvas/element/manual/imagebitmap/createImageBitmap-drawImage.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/canvas/element/manual/imagebitmap/createImageBitmap-flipY.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/canvas/element/manual/imagebitmap/createImageBitmap-origin.sub.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/canvas/element/manual/imagebitmap/createImageBitmap-serializable.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/canvas/element/manual/imagebitmap/createImageBitmap-transfer.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/canvas/element/manual/shadows/canvas_shadows_001.htm [ Failure ] -crbug.com/1050754 external/wpt/html/canvas/element/manual/wide-gamut-canvas/canvas-draw-high-bit-depth-images.html [ Failure ] -crbug.com/1050754 external/wpt/html/canvas/element/scroll/2d.scrollPathIntoView.verticalRL.html [ Failure ] -crbug.com/1050754 external/wpt/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.animated.poster.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeat.basic.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeat.outside.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/canvas/offscreen/manual/the-offscreen-canvas/offscreencanvas.getcontext.html [ Failure ] -crbug.com/1050754 external/wpt/html/canvas/offscreen/manual/the-offscreen-canvas/offscreencanvas.getcontext.worker.html [ Failure ] -crbug.com/1050754 external/wpt/html/canvas/offscreen/manual/the-offscreen-canvas/offscreencanvas.resize.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/canvas/offscreen/text/2d.text.measure.advances.html [ Failure ] -crbug.com/1050754 external/wpt/html/canvas/offscreen/text/2d.text.measure.advances.worker.html [ Failure ] -crbug.com/1050754 external/wpt/html/canvas/offscreen/text/2d.text.measure.baselines.html [ Failure ] -crbug.com/1050754 external/wpt/html/canvas/offscreen/text/2d.text.measure.baselines.worker.html [ Failure ] -crbug.com/1050754 external/wpt/html/canvas/offscreen/text/2d.text.measure.fontBoundingBox.html [ Failure ] -crbug.com/1050754 external/wpt/html/canvas/offscreen/text/2d.text.measure.fontBoundingBox.worker.html [ Failure ] -crbug.com/1050754 external/wpt/html/canvas/offscreen/the-offscreen-canvas/2d.getcontext.extraargs.worker.html [ Pass ] -crbug.com/1050754 external/wpt/html/canvas/offscreen/the-offscreen-canvas/size.attributes.idl.worker.html [ Pass ] -crbug.com/1050754 external/wpt/html/cross-origin-embedder-policy/credentialless/cache-storage.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/html/cross-origin-embedder-policy/credentialless/iframe-coep-credentialless.https.window.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/cross-origin-embedder-policy/credentialless/image.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/html/cross-origin-embedder-policy/credentialless/shared-worker.https.window.html [ Timeout ] -crbug.com/1050754 external/wpt/html/cross-origin-embedder-policy/credentialless/video.https.window.html [ Timeout ] -crbug.com/1050754 external/wpt/html/cross-origin-embedder-policy/multi-globals/workers-coep-report.https.html [ Failure ] -crbug.com/1050754 external/wpt/html/cross-origin-embedder-policy/none.https.html [ Pass Timeout ] -crbug.com/1050754 external/wpt/html/cross-origin-embedder-policy/reporting-navigation.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/cross-origin-embedder-policy/service-worker-cache-storage.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/cross-origin-embedder-policy/shared-workers.html [ Failure ] -crbug.com/1050754 external/wpt/html/cross-origin-opener-policy/header-parsing.https.html [ Failure Pass Timeout ] -crbug.com/1050754 external/wpt/html/cross-origin-opener-policy/historical/popup-same-origin-unsafe-allow-outgoing-with-cross-origin.https.html [ Crash Pass ] -crbug.com/1050754 external/wpt/html/cross-origin-opener-policy/historical/popup-same-site-unsafe-allow-outgoing-with-same-site.https.html [ Crash Pass ] -crbug.com/1050754 external/wpt/html/cross-origin-opener-policy/historical/popup-same-site-with-same-origin.https.html [ Crash Pass ] -crbug.com/1050754 external/wpt/html/cross-origin-opener-policy/iframe-popup-same-origin-allow-popups-to-same-origin-allow-popups.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/cross-origin-opener-policy/iframe-popup-same-origin-allow-popups-to-unsafe-none.https.html [ Crash Pass ] -crbug.com/1050754 external/wpt/html/cross-origin-opener-policy/iframe-popup-same-origin-to-same-origin.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/cross-origin-opener-policy/iframe-popup-same-origin-to-unsafe-none.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/cross-origin-opener-policy/iframe-popup-unsafe-none-to-unsafe-none.https.html [ Crash Pass ] -crbug.com/1050754 external/wpt/html/cross-origin-opener-policy/navigate-top-to-aboutblank.https.html [ Crash Failure ] -crbug.com/1050754 external/wpt/html/cross-origin-opener-policy/popup-coop-by-sw-from-coop.https.html [ Failure Pass Timeout ] -crbug.com/1050754 external/wpt/html/cross-origin-opener-policy/popup-coop-by-sw.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/cross-origin-opener-policy/popup-redirect-same-origin-allow-popups.https.html [ Crash Pass ] -crbug.com/1050754 external/wpt/html/cross-origin-opener-policy/popup-same-origin-allow-popups-with-cross-origin.https.html [ Crash Pass ] -crbug.com/1050754 external/wpt/html/cross-origin-opener-policy/popup-same-origin-allow-popups-with-same-origin.https.html [ Crash Pass ] -crbug.com/1050754 external/wpt/html/cross-origin-opener-policy/popup-same-origin-allow-popups-with-same-site.https.html [ Crash Pass ] -crbug.com/1050754 external/wpt/html/cross-origin-opener-policy/popup-unspecified-with-cross-origin.https.html [ Crash Pass ] -crbug.com/1050754 external/wpt/html/cross-origin-opener-policy/popup-unspecified-with-same-site.https.html [ Crash Pass ] -crbug.com/1050754 external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/access-from-coop-page-to-openee_coop-ro_cross-origin.https.html [ Crash Pass ] -crbug.com/1050754 external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/access-from-coop-page-to-opener_coop-ro.https.html [ Crash Pass ] -crbug.com/1050754 external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/access-from-coop-page-to-other_coop-ro.https.html [ Crash Pass ] -crbug.com/1050754 external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/access-from-coop-page-to-other_coop-ro_cross-origin.https.html [ Crash Pass ] -crbug.com/1050754 external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/access-to-coop-page-from-openee_coop-ro_cross-origin.https.html [ Crash Pass ] -crbug.com/1050754 external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/access-to-coop-page-from-other_coop-ro.https.html [ Crash Pass ] -crbug.com/1050754 external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/access-to-coop-page-from-other_coop-ro_cross-origin.https.html [ Crash Pass ] -crbug.com/1050754 external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/property-blur.https.html [ Crash Pass ] -crbug.com/1050754 external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/property-close.https.html [ Crash Pass ] -crbug.com/1050754 external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/property-closed.https.html [ Crash Pass ] -crbug.com/1050754 external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/property-focus.https.html [ Crash Pass ] -crbug.com/1050754 external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/property-frames.https.html [ Crash Pass ] -crbug.com/1050754 external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/property-length.https.html [ Crash Pass ] -crbug.com/1050754 external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/property-location-get.https.html [ Crash Pass ] -crbug.com/1050754 external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/property-location-set.https.html [ Crash Pass ] -crbug.com/1050754 external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/property-opener-get.https.html [ Crash Pass ] -crbug.com/1050754 external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/property-postmessage-1.https.html [ Crash Pass ] -crbug.com/1050754 external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/property-postmessage-2.https.html [ Crash Pass ] -crbug.com/1050754 external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/property-self.https.html [ Crash Pass ] -crbug.com/1050754 external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/property-top.https.html [ Crash Pass ] -crbug.com/1050754 external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/property-window.https.html [ Crash Pass ] -crbug.com/1050754 external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/report-to-both_coop-ro.https.html [ Crash Pass ] -crbug.com/1050754 external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/reporting-observer.html [ Crash Pass Timeout ] -crbug.com/1050754 external/wpt/html/cross-origin-opener-policy/resource-popup.https.html [ Crash Failure Pass Timeout ] -crbug.com/1050754 external/wpt/html/editing/focus/sequential-focus-navigation-and-the-tabindex-attribute/focus-tabindex-event.html [ Failure ] -crbug.com/1050754 external/wpt/html/infrastructure/safe-passing-of-structured-data/messagechannel.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/no-coop-coep.https.any.html [ Pass ] -crbug.com/1050754 external/wpt/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/no-coop-coep.https.any.serviceworker.html [ Pass ] -crbug.com/1050754 external/wpt/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/no-coop-coep.https.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/no-coop-coep.https.any.worker.html [ Pass ] -crbug.com/1050754 external/wpt/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/serialization-via-notifications-api.any.html [ Failure ] -crbug.com/1050754 external/wpt/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/serialization-via-notifications-api.any.worker.html [ Failure ] -crbug.com/1050754 external/wpt/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/window-sharedworker-failure.https.html [ Failure ] -crbug.com/1050754 external/wpt/html/infrastructure/urls/resolving-urls/query-encoding/navigation.sub.html?encoding=utf8 [ Pass ] -crbug.com/1050754 external/wpt/html/infrastructure/urls/resolving-urls/query-encoding/navigation.sub.html?encoding=windows-1252 [ Pass ] -crbug.com/1050754 external/wpt/html/infrastructure/urls/resolving-urls/query-encoding/navigation.sub.html?encoding=x-cp1251 [ Pass ] -crbug.com/1050754 external/wpt/html/infrastructure/urls/resolving-urls/query-encoding/utf-16be.html?include=workers [ Failure ] -crbug.com/1050754 external/wpt/html/infrastructure/urls/resolving-urls/query-encoding/utf-16le.html?include=workers [ Failure ] -crbug.com/1050754 external/wpt/html/interaction/focus/document-level-focus-apis/document-has-system-focus.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/interaction/focus/the-autofocus-attribute/document-with-fragment-valid.html [ Timeout ] -crbug.com/1050754 external/wpt/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-content-before-legend.html [ Failure ] -crbug.com/1050754 external/wpt/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-generated-content.html [ Failure ] -crbug.com/1050754 external/wpt/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-multicol.html [ Failure ] -crbug.com/1050754 external/wpt/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-percentage-block-size.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-align.html [ Failure ] -crbug.com/1050754 external/wpt/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-sans-fieldset-display.html [ Failure ] -crbug.com/1050754 external/wpt/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-currentSrc.html [ Pass ] -crbug.com/1050754 external/wpt/html/semantics/embedded-content/media-elements/src_object_blob.html [ Failure ] -crbug.com/1050754 external/wpt/html/semantics/embedded-content/media-elements/track/track-element/track-cue-mutable-fragment.html [ Timeout ] -crbug.com/1050754 external/wpt/html/semantics/embedded-content/media-elements/track/track-element/track-mode-disabled.html [ Timeout ] -crbug.com/1050754 external/wpt/html/semantics/embedded-content/media-elements/track/track-element/track-remove-by-setting-innerHTML.html [ Timeout ] -crbug.com/1050754 external/wpt/html/semantics/embedded-content/the-embed-element/embed-dimension.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_anchor_download_allow_downloads.tentative.html [ Timeout ] -crbug.com/1050754 external/wpt/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_navigation_download_block_downloads.sub.tentative.html [ Failure ] -crbug.com/1050754 external/wpt/html/semantics/embedded-content/the-img-element/sizes/implicit-sizes-ignores-width.html [ Timeout ] -crbug.com/1050754 external/wpt/html/semantics/embedded-content/the-object-element/object-events.html [ Failure Timeout ] -crbug.com/1050754 external/wpt/html/semantics/embedded-content/the-object-element/usemap-casing.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/semantics/forms/form-submission-0/multipart-formdata.window.html [ Timeout ] -crbug.com/1050754 external/wpt/html/semantics/forms/form-submission-0/text-plain.window.html [ Timeout ] -crbug.com/1050754 external/wpt/html/semantics/forms/form-submission-0/urlencoded2.window.html [ Timeout ] -crbug.com/1050754 external/wpt/html/semantics/forms/input-change-event-properties.html [ Pass Timeout ] -crbug.com/1050754 external/wpt/html/semantics/forms/textfieldselection/selection-not-application-textarea.html [ Pass ] -crbug.com/1050754 external/wpt/html/semantics/forms/the-input-element/checkable-active-onblur.html [ Pass ] -crbug.com/1050754 external/wpt/html/semantics/forms/the-input-element/selection-pointer.html [ Pass Timeout ] -crbug.com/1050754 external/wpt/html/semantics/forms/the-label-element/proxy-modifier-click-to-associated-element.tentative.html [ Pass ] -crbug.com/1050754 external/wpt/html/semantics/forms/the-selectmenu-element/selectmenu-parts-structure.tentative.html [ Failure ] -crbug.com/1050754 external/wpt/html/semantics/forms/the-selectmenu-element/selectmenu-popup-position.tentative.html [ Failure ] -crbug.com/1050754 external/wpt/html/semantics/forms/the-selectmenu-element/selectmenu-popup.tentative.html [ Failure ] -crbug.com/1050754 external/wpt/html/semantics/interactive-elements/the-popup-element/popup-light-dismiss.tentative.html [ Failure ] -crbug.com/1050754 external/wpt/html/semantics/links/links-created-by-a-and-area-elements/htmlanchorelement_noopener.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/semantics/links/links-created-by-a-and-area-elements/target_blank_implicit_noopener.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/semantics/scripting-1/the-script-element/evaluation-order-1-nothrow-sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/html/semantics/scripting-1/the-script-element/evaluation-order-1-sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/html/semantics/scripting-1/the-script-element/import-assertions/dynamic-import-with-assertion-argument.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/html/semantics/scripting-1/the-script-element/json-module/invalid-content-type.tentative.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/html/semantics/scripting-1/the-script-element/json-module/non-object.tentative.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/html/semantics/scripting-1/the-script-element/json-module/repeated-imports.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/html/semantics/scripting-1/the-script-element/microtasks/checkpoint-importScripts.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/html/semantics/scripting-1/the-script-element/module/evaluation-order-1-nothrow-sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/html/semantics/scripting-1/the-script-element/module/evaluation-order-1-sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/html/semantics/scripting-1/the-script-element/module/evaluation-order-2-import-sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/html/semantics/scripting-1/the-script-element/module/evaluation-order-3-dynamic-sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/html/semantics/tabular-data/processing-model-1/span-limits.html [ Failure ] -crbug.com/1050754 external/wpt/html/syntax/xmldecl/xmldecl-1.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/user-activation/consumption-crossorigin.sub.html [ Failure ] -crbug.com/1050754 external/wpt/html/user-activation/consumption-sameorigin.html [ Failure ] -crbug.com/1050754 external/wpt/html/user-activation/propagation-crossorigin.sub.html [ Failure ] -crbug.com/1050754 external/wpt/html/user-activation/propagation-sameorigin.html [ Failure ] -crbug.com/1050754 external/wpt/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/tasks.window.html [ Pass ] -crbug.com/1050754 external/wpt/html/webappapis/structured-clone/structured-clone.html [ Failure ] -crbug.com/1050754 external/wpt/idle-detection/idle-detection-allowed-by-feature-policy-attribute-redirect-on-load.https.sub.html [ Failure ] -crbug.com/1050754 external/wpt/idle-detection/idle-detection-allowed-by-feature-policy-attribute.https.sub.html [ Failure ] -crbug.com/1050754 external/wpt/idle-detection/idle-detection-allowed-by-feature-policy.https.sub.html [ Failure ] -crbug.com/1050754 external/wpt/idle-detection/idle-detection-default-feature-policy.https.sub.html [ Failure ] -crbug.com/1050754 external/wpt/import-maps/data-driven/parsing-internal.https.html [ Failure ] -crbug.com/1050754 external/wpt/import-maps/data-driven/resolving-internal.https.html [ Failure ] -crbug.com/1050754 external/wpt/inert/inert-retargeting.tentative.html [ Failure ] -crbug.com/1050754 external/wpt/infrastructure/assumptions/non-local-ports.sub.window.html [ Timeout ] -crbug.com/1050754 external/wpt/infrastructure/expected-fail/uncaught-exception-following-subtest.html [ Failure ] -crbug.com/1050754 external/wpt/infrastructure/expected-fail/uncaught-exception.html [ Failure ] -crbug.com/1050754 external/wpt/infrastructure/expected-fail/unhandled-rejection-following-subtest.html [ Failure ] -crbug.com/1050754 external/wpt/infrastructure/expected-fail/unhandled-rejection.html [ Failure ] -crbug.com/1050754 external/wpt/infrastructure/server/context.any.serviceworker-module.html [ Failure ] -crbug.com/1050754 external/wpt/infrastructure/server/context.any.sharedworker-module.html [ Failure ] -crbug.com/1050754 external/wpt/infrastructure/server/context.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/infrastructure/server/http2-context.sub.h2.any.html [ Failure ] -crbug.com/1050754 external/wpt/infrastructure/server/http2-context.sub.h2.any.serviceworker.html [ Failure ] -crbug.com/1050754 external/wpt/infrastructure/server/http2-context.sub.h2.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/infrastructure/server/http2-context.sub.h2.any.worker.html [ Failure ] -crbug.com/1050754 external/wpt/infrastructure/server/order-of-metas.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/infrastructure/server/secure-context.https.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/infrastructure/server/title.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/infrastructure/server/wpt-server-http.sub.html [ Failure ] -crbug.com/1050754 external/wpt/infrastructure/server/wpt-server-wpt-flags.sub.html?wpt_flags=https [ Pass ] -crbug.com/1050754 external/wpt/infrastructure/testdriver/actions/actionsWithKeyPressed.html [ Pass ] -crbug.com/1050754 external/wpt/infrastructure/testdriver/actions/crossOrigin.sub.html [ Pass ] -crbug.com/1050754 external/wpt/infrastructure/testdriver/actions/eventOrder.html [ Pass ] -crbug.com/1050754 external/wpt/infrastructure/testdriver/actions/iframe.html [ Pass ] -crbug.com/1050754 external/wpt/infrastructure/testdriver/actions/multiDevice.html [ Pass ] -crbug.com/1050754 external/wpt/infrastructure/testdriver/actions/textEditCommands.html [ Crash Failure Pass ] -crbug.com/1050754 external/wpt/infrastructure/testdriver/actions/touchPointerEventProperties.html [ Failure ] -crbug.com/1050754 external/wpt/infrastructure/testdriver/click_nested.html [ Crash Failure Pass ] -crbug.com/1050754 external/wpt/infrastructure/testdriver/click_window.html [ Pass ] -crbug.com/1050754 external/wpt/infrastructure/testdriver/delete_all_cookies.html [ Pass ] -crbug.com/1050754 external/wpt/infrastructure/testdriver/file_upload.sub.html [ Failure ] -crbug.com/1050754 external/wpt/infrastructure/testdriver/virtual_authenticator.html [ Crash ] -crbug.com/1050754 external/wpt/input-events/input-events-cut-paste.html [ Pass Timeout ] -crbug.com/1050754 external/wpt/intersection-observer/iframe-no-root-with-wrapping-scroller.html [ Failure ] -crbug.com/1050754 external/wpt/intersection-observer/iframe-no-root.html [ Failure ] -crbug.com/1050754 external/wpt/intersection-observer/inline-client-rect.html [ Failure ] -crbug.com/1050754 external/wpt/intersection-observer/multiple-targets.html [ Failure ] -crbug.com/1050754 external/wpt/intersection-observer/multiple-thresholds.html [ Failure ] -crbug.com/1050754 external/wpt/intersection-observer/root-margin-root-element.html [ Failure ] -crbug.com/1050754 external/wpt/intersection-observer/root-margin.html [ Failure ] -crbug.com/1050754 external/wpt/intersection-observer/same-document-no-root.html [ Failure ] -crbug.com/1050754 external/wpt/intersection-observer/same-document-root.html [ Failure ] -crbug.com/1050754 external/wpt/intersection-observer/same-document-with-document-root.html [ Failure ] -crbug.com/1050754 external/wpt/intersection-observer/same-document-zero-size-target.html [ Failure ] -crbug.com/1050754 external/wpt/intersection-observer/text-target.html [ Failure ] -crbug.com/1050754 external/wpt/intersection-observer/v2/blur-filter.html [ Failure ] -crbug.com/1050754 external/wpt/intersection-observer/v2/drop-shadow-filter-vertical-rl.html [ Failure ] -crbug.com/1050754 external/wpt/intersection-observer/v2/iframe-target.html [ Failure ] -crbug.com/1050754 external/wpt/intersection-observer/v2/simple-effects.html [ Failure ] -crbug.com/1050754 external/wpt/intersection-observer/v2/simple-occlusion-svg-foreign-object.html [ Failure ] -crbug.com/1050754 external/wpt/intersection-observer/v2/simple-occlusion.html [ Failure ] -crbug.com/1050754 external/wpt/largest-contentful-paint/idlharness.html [ Failure Pass ] -crbug.com/1050754 external/wpt/largest-contentful-paint/image-not-fully-visible.html [ Failure ] -crbug.com/1050754 external/wpt/longtask-timing/containerNames.html [ Failure Pass ] -crbug.com/1050754 external/wpt/longtask-timing/containerTypes.html [ Failure Pass ] -crbug.com/1050754 external/wpt/longtask-timing/longtask-before-observer.window.html [ Failure Pass ] -crbug.com/1050754 external/wpt/mathml/relations/css-styling/display-2.html [ Failure Pass ] -crbug.com/1050754 external/wpt/mathml/relations/css-styling/displaystyle-1.html [ Pass ] -crbug.com/1050754 external/wpt/mathml/relations/html5-tree/math-global-event-handlers.tentative.html [ Failure ] -crbug.com/1050754 external/wpt/mathml/relations/html5-tree/tabindex-002.html [ Timeout ] -crbug.com/1050754 external/wpt/media-source/dedicated-worker/mediasource-worker-play-terminate-worker.html [ Failure Pass Timeout ] -crbug.com/1050754 external/wpt/media-source/mediasource-changetype-play-negative.html [ Timeout ] -crbug.com/1050754 external/wpt/media-source/mediasource-getvideoplaybackquality.html [ Pass ] -crbug.com/1050754 external/wpt/mediacapture-record/passthrough/MediaRecorder-passthrough.https.html [ Failure Pass Timeout ] -crbug.com/1050754 external/wpt/mediacapture-streams/MediaStream-MediaElement-firstframe.https.html [ Failure ] -crbug.com/1050754 external/wpt/mediacapture-streams/MediaStream-clone.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/mixed-content/gen/sharedworker-classic-data.http-rp/opt-in/fetch.https.html [ Failure ] -crbug.com/1050754 external/wpt/mixed-content/gen/sharedworker-classic-data.http-rp/opt-in/websocket.https.html [ Failure ] -crbug.com/1050754 external/wpt/mixed-content/gen/sharedworker-classic-data.http-rp/opt-in/xhr.https.html [ Failure ] -crbug.com/1050754 external/wpt/mixed-content/gen/sharedworker-classic-data.meta/opt-in/fetch.https.html [ Failure ] -crbug.com/1050754 external/wpt/mixed-content/gen/sharedworker-classic-data.meta/opt-in/websocket.https.html [ Failure ] -crbug.com/1050754 external/wpt/mixed-content/gen/sharedworker-classic-data.meta/opt-in/xhr.https.html [ Failure ] -crbug.com/1050754 external/wpt/mixed-content/gen/sharedworker-classic.http-rp/opt-in/fetch.https.html [ Failure ] -crbug.com/1050754 external/wpt/mixed-content/gen/sharedworker-classic.http-rp/opt-in/websocket.https.html [ Failure ] -crbug.com/1050754 external/wpt/mixed-content/gen/sharedworker-classic.http-rp/opt-in/xhr.https.html [ Failure ] -crbug.com/1050754 external/wpt/mixed-content/gen/sharedworker-module-data.http-rp/opt-in/fetch.https.html [ Failure ] -crbug.com/1050754 external/wpt/mixed-content/gen/sharedworker-module-data.http-rp/opt-in/websocket.https.html [ Failure ] -crbug.com/1050754 external/wpt/mixed-content/gen/sharedworker-module-data.http-rp/opt-in/xhr.https.html [ Failure ] -crbug.com/1050754 external/wpt/mixed-content/gen/sharedworker-module-data.meta/opt-in/fetch.https.html [ Failure ] -crbug.com/1050754 external/wpt/mixed-content/gen/sharedworker-module-data.meta/opt-in/websocket.https.html [ Failure ] -crbug.com/1050754 external/wpt/mixed-content/gen/sharedworker-module-data.meta/opt-in/xhr.https.html [ Failure ] -crbug.com/1050754 external/wpt/mixed-content/gen/sharedworker-module.http-rp/opt-in/fetch.https.html [ Failure ] -crbug.com/1050754 external/wpt/mixed-content/gen/sharedworker-module.http-rp/opt-in/websocket.https.html [ Failure ] -crbug.com/1050754 external/wpt/mixed-content/gen/sharedworker-module.http-rp/opt-in/xhr.https.html [ Failure ] -crbug.com/1050754 external/wpt/mixed-content/gen/top.http-rp/opt-in/sharedworker-classic.https.html [ Failure ] -crbug.com/1050754 external/wpt/mixed-content/gen/top.http-rp/opt-in/sharedworker-import-data.https.html [ Failure ] -crbug.com/1050754 external/wpt/mixed-content/gen/top.http-rp/opt-in/sharedworker-import.https.html [ Failure ] -crbug.com/1050754 external/wpt/mixed-content/gen/top.http-rp/opt-in/sharedworker-module.https.html [ Failure ] -crbug.com/1050754 external/wpt/mixed-content/gen/top.http-rp/opt-in/video-tag.https.html [ Timeout ] -crbug.com/1050754 external/wpt/mixed-content/gen/top.meta/opt-in/sharedworker-classic.https.html [ Failure ] -crbug.com/1050754 external/wpt/mixed-content/gen/top.meta/opt-in/sharedworker-import-data.https.html [ Failure ] -crbug.com/1050754 external/wpt/mixed-content/gen/top.meta/opt-in/sharedworker-import.https.html [ Failure ] -crbug.com/1050754 external/wpt/mixed-content/gen/top.meta/opt-in/sharedworker-module.https.html [ Failure ] -crbug.com/1050754 external/wpt/mixed-content/gen/top.meta/opt-in/video-tag.https.html [ Timeout ] -crbug.com/1050754 external/wpt/mixed-content/gen/top.meta/unset/sharedworker-classic.https.html [ Failure ] -crbug.com/1050754 external/wpt/mixed-content/gen/top.meta/unset/sharedworker-import-data.https.html [ Failure ] -crbug.com/1050754 external/wpt/mixed-content/gen/top.meta/unset/sharedworker-import.https.html [ Failure ] -crbug.com/1050754 external/wpt/mixed-content/gen/top.meta/unset/sharedworker-module.https.html [ Failure ] -crbug.com/1050754 external/wpt/mixed-content/gen/top.meta/unset/video-tag.https.html [ Timeout ] -crbug.com/1050754 external/wpt/mst-content-hint/idlharness.window.html [ Pass ] -crbug.com/1050754 external/wpt/native-io/capacity_allocation_async_basic.tentative.https.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/native-io/capacity_allocation_async_failure_handling.tentative.https.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/native-io/close_async.tentative.https.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/native-io/concurrent_io/concurrent_io_flush_async.tentative.https.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/native-io/concurrent_io/concurrent_io_getLength_async.tentative.https.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/native-io/concurrent_io/concurrent_io_read_async.tentative.https.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/native-io/concurrent_io/concurrent_io_setLength_async.tentative.https.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/native-io/concurrent_io/concurrent_io_write_async.tentative.https.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/native-io/delete_async_basic.tentative.https.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/native-io/flush_async_basic.tentative.https.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/native-io/getLength_setLength_async_basic.tentative.https.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/native-io/open_async_failure_handling.tentative.https.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/native-io/open_getAll_async_basic.tentative.https.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/native-io/read_write_async_basic.tentative.https.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/native-io/read_write_correct_arraybufferview_async_basic.tentative.https.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/native-io/rename_async_basic.tentative.https.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/native-io/rename_async_failure_handling.tentative.https.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/native-io/setLength_bounds_async.tentative.https.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/native-io/setLength_capacity_allocation_async.tentative.https.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/native-io/write_capacity_allocation_async.tentative.https.any.html [ Failure Pass ] -crbug.com/1050754 external/wpt/native-io/write_capacity_allocation_async.tentative.https.any.serviceworker.html [ Failure Pass ] -crbug.com/1050754 external/wpt/native-io/write_capacity_allocation_async.tentative.https.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/native-io/write_capacity_allocation_async.tentative.https.any.worker.html [ Failure Pass ] -crbug.com/1050754 external/wpt/native-io/write_getLength_async_basic.tentative.https.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/navigation-timing/test_performance_attributes.sub.html [ Failure Pass ] -crbug.com/1050754 external/wpt/orientation-sensor/AbsoluteOrientationSensor.https.html [ Failure ] -crbug.com/1050754 external/wpt/orientation-sensor/RelativeOrientationSensor.https.html [ Failure ] -crbug.com/1050754 external/wpt/paint-timing/fcp-only/fcp-gradient.html [ Pass ] -crbug.com/1050754 external/wpt/paint-timing/fcp-only/fcp-text-input.html [ Failure Pass ] -crbug.com/1050754 external/wpt/paint-timing/with-first-paint/border-image.html [ Pass ] -crbug.com/1050754 external/wpt/paint-timing/with-first-paint/child-painting-first-image.html [ Pass ] -crbug.com/1050754 external/wpt/paint-timing/with-first-paint/first-contentful-canvas-webgl2.html [ Failure ] -crbug.com/1050754 external/wpt/paint-timing/with-first-paint/first-contentful-image.html [ Pass ] -crbug.com/1050754 external/wpt/paint-timing/with-first-paint/first-contentful-paint.html [ Pass ] -crbug.com/1050754 external/wpt/paint-timing/with-first-paint/mask-image.html [ Pass ] -crbug.com/1050754 external/wpt/paint-timing/with-first-paint/sibling-painting-first-image.html [ Failure ] -crbug.com/1050754 external/wpt/payment-handler/respond-with-minimal-ui.https.html [ Failure Timeout ] -crbug.com/1050754 external/wpt/payment-request/constructor_convert_method_data.https.html [ Pass Timeout ] -crbug.com/1050754 external/wpt/payment-request/payment-request-hasenrolledinstrument-method-protection.tentative.https.html [ Pass Timeout ] -crbug.com/1050754 external/wpt/payment-request/payment-request-show-method.https.html [ Failure Timeout ] -crbug.com/1050754 external/wpt/payment-request/show-consume-activation.https.html [ Failure Timeout ] -crbug.com/1050754 external/wpt/payment-request/show-method-optional-promise-rejects.https.html [ Pass ] -crbug.com/1050754 external/wpt/performance-timeline/idlharness.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/permissions-policy/picture-in-picture-allowed-by-permissions-policy-attribute-redirect-on-load.https.sub.html [ Failure ] -crbug.com/1050754 external/wpt/permissions-policy/picture-in-picture-allowed-by-permissions-policy-attribute.https.sub.html [ Failure ] -crbug.com/1050754 external/wpt/permissions-policy/picture-in-picture-allowed-by-permissions-policy.https.sub.html [ Failure ] -crbug.com/1050754 external/wpt/permissions-policy/picture-in-picture-default-permissions-policy.https.sub.html [ Failure ] -crbug.com/1050754 external/wpt/permissions-policy/picture-in-picture-disabled-by-permissions-policy.https.sub.html [ Failure ] -crbug.com/1050754 external/wpt/permissions-policy/picture-in-picture-supported-by-permissions-policy.html [ Failure ] -crbug.com/1050754 external/wpt/permissions-policy/reporting/geolocation-report-only.https.html [ Timeout ] -crbug.com/1050754 external/wpt/permissions-policy/reporting/midi-report-only.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/permissions-policy/reporting/payment-report-only.https.html [ Failure Timeout ] -crbug.com/1050754 external/wpt/permissions-policy/reporting/picture-in-picture-report-only.html [ Failure ] -crbug.com/1050754 external/wpt/permissions-policy/reporting/picture-in-picture-reporting.html [ Failure ] -crbug.com/1050754 external/wpt/permissions-policy/reporting/serial-report-only.https.html [ Failure ] -crbug.com/1050754 external/wpt/permissions-policy/reporting/serial-reporting.https.html [ Failure ] -crbug.com/1050754 external/wpt/permissions-policy/reporting/xr-report-only.https.html [ Failure ] -crbug.com/1050754 external/wpt/permissions-policy/reporting/xr-reporting.https.html [ Failure ] -crbug.com/1050754 external/wpt/permissions/permissions-query-feature-policy-attribute.https.sub.html [ Pass ] -crbug.com/1050754 external/wpt/picture-in-picture/css-selector.html [ Failure ] -crbug.com/1050754 external/wpt/picture-in-picture/disable-picture-in-picture.html [ Failure ] -crbug.com/1050754 external/wpt/picture-in-picture/enter-picture-in-picture.html [ Failure ] -crbug.com/1050754 external/wpt/picture-in-picture/exit-picture-in-picture.html [ Failure ] -crbug.com/1050754 external/wpt/picture-in-picture/idlharness.window.html [ Failure ] -crbug.com/1050754 external/wpt/picture-in-picture/leave-picture-in-picture.html [ Failure ] -crbug.com/1050754 external/wpt/picture-in-picture/mediastream.html [ Failure ] -crbug.com/1050754 external/wpt/picture-in-picture/picture-in-picture-element.html [ Failure ] -crbug.com/1050754 external/wpt/picture-in-picture/picture-in-picture-window.html [ Failure ] -crbug.com/1050754 external/wpt/picture-in-picture/removed-from-document.html [ Failure ] -crbug.com/1050754 external/wpt/picture-in-picture/request-picture-in-picture-twice.html [ Failure ] -crbug.com/1050754 external/wpt/picture-in-picture/request-picture-in-picture.html [ Failure ] -crbug.com/1050754 external/wpt/picture-in-picture/shadow-dom.html [ Failure ] -crbug.com/1050754 external/wpt/pointerevents/compat/pointerevent_mouse-on-object.html [ Failure ] -crbug.com/1050754 external/wpt/pointerevents/compat/pointerevent_mouse-pointer-on-scrollbar.html [ Failure ] -crbug.com/1050754 external/wpt/pointerevents/compat/pointerevent_mouseevent_key_pressed.html [ Pass ] -crbug.com/1050754 external/wpt/pointerevents/compat/pointerevent_touch-action_two-finger_interaction.html [ Failure ] -crbug.com/1050754 external/wpt/pointerevents/pointerevent_auxclick_is_a_pointerevent.html?mouse [ Timeout ] -crbug.com/1050754 external/wpt/pointerevents/pointerevent_auxclick_is_a_pointerevent.html?pen [ Timeout ] -crbug.com/1050754 external/wpt/pointerevents/pointerevent_click_is_a_pointerevent_multiple_clicks.html?mouse [ Failure Pass ] -crbug.com/1050754 external/wpt/pointerevents/pointerevent_click_is_a_pointerevent_multiple_clicks.html?touch [ Failure Pass Timeout ] -crbug.com/1050754 external/wpt/pointerevents/pointerevent_contextmenu_is_a_pointerevent.html?touch [ Timeout ] -crbug.com/1050754 external/wpt/pointerevents/pointerevent_movementxy.html?mouse [ Failure ] -crbug.com/1050754 external/wpt/pointerevents/pointerevent_movementxy.html?pen [ Failure ] -crbug.com/1050754 external/wpt/pointerevents/pointerevent_movementxy.html?touch [ Failure ] -crbug.com/1050754 external/wpt/pointerevents/pointerevent_pointerId_scope.html [ Failure ] -crbug.com/1050754 external/wpt/pointerevents/pointerevent_touch-adjustment_click_target.html [ Failure ] -crbug.com/1050754 external/wpt/pointerevents/pointerlock/pointerevent_coordinates_when_locked.html [ Failure ] -crbug.com/1050754 external/wpt/pointerevents/pointerlock/pointerevent_getCoalescedEvents_when_pointerlocked.html [ Failure ] -crbug.com/1050754 external/wpt/pointerevents/pointerlock/pointerevent_movementxy_with_pointerlock.html [ Failure ] -crbug.com/1050754 external/wpt/pointerevents/pointerlock/pointerevent_pointerlock_after_pointercapture.html [ Failure ] -crbug.com/1050754 external/wpt/pointerevents/pointerlock/pointerevent_pointermove_in_pointerlock.html [ Failure ] -crbug.com/1050754 external/wpt/pointerevents/pointerlock/pointerevent_pointermove_on_chorded_mouse_button_when_locked.html [ Failure ] -crbug.com/1050754 external/wpt/pointerevents/pointerlock/pointerevent_pointerrawupdate_in_pointerlock.html [ Failure ] -crbug.com/1050754 external/wpt/pointerlock/mouse_buttons_back_forward.html [ Failure ] -crbug.com/1050754 external/wpt/pointerlock/movementX_Y_basic.html [ Failure ] -crbug.com/1050754 external/wpt/pointerlock/pointerlock_remove_target.html [ Failure ] -crbug.com/1050754 external/wpt/pointerlock/pointerlock_remove_target_on_mouseup.html [ Failure ] -crbug.com/1050754 external/wpt/pointerlock/pointerlock_shadow.html [ Failure ] -crbug.com/1050754 external/wpt/preload/link-header-preload-imagesrcset.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/4K+1/gen/top.http-rp/no-referrer-when-downgrade/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/4K+1/gen/top.http-rp/origin-when-cross-origin/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/4K+1/gen/top.http-rp/same-origin/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/4K+1/gen/top.http-rp/strict-origin-when-cross-origin/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/4K+1/gen/top.http-rp/unsafe-url/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/4K+1/gen/top.http-rp/unset/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/4K+1/gen/top.meta/no-referrer-when-downgrade/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/4K+1/gen/top.meta/origin-when-cross-origin/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/4K+1/gen/top.meta/same-origin/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/4K+1/gen/top.meta/strict-origin-when-cross-origin/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/4K+1/gen/top.meta/unsafe-url/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/4K+1/gen/top.meta/unset/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/4K-1/gen/top.http-rp/no-referrer-when-downgrade/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/4K-1/gen/top.http-rp/origin-when-cross-origin/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/4K-1/gen/top.http-rp/same-origin/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/4K-1/gen/top.http-rp/strict-origin-when-cross-origin/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/4K-1/gen/top.http-rp/unsafe-url/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/4K-1/gen/top.http-rp/unset/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/4K-1/gen/top.meta/no-referrer-when-downgrade/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/4K-1/gen/top.meta/origin-when-cross-origin/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/4K-1/gen/top.meta/same-origin/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/4K-1/gen/top.meta/strict-origin-when-cross-origin/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/4K-1/gen/top.meta/unsafe-url/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/4K-1/gen/top.meta/unset/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/4K/gen/top.http-rp/no-referrer-when-downgrade/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/4K/gen/top.http-rp/origin-when-cross-origin/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/4K/gen/top.http-rp/same-origin/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/4K/gen/top.http-rp/strict-origin-when-cross-origin/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/4K/gen/top.http-rp/unsafe-url/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/4K/gen/top.http-rp/unset/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/4K/gen/top.meta/no-referrer-when-downgrade/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/4K/gen/top.meta/origin-when-cross-origin/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/4K/gen/top.meta/same-origin/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/4K/gen/top.meta/strict-origin-when-cross-origin/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/4K/gen/top.meta/unsafe-url/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/4K/gen/top.meta/unset/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/iframe.http-rp/no-referrer-when-downgrade/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/iframe.http-rp/no-referrer-when-downgrade/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/iframe.http-rp/no-referrer/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/iframe.http-rp/no-referrer/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/iframe.http-rp/origin-when-cross-origin/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/iframe.http-rp/origin-when-cross-origin/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/iframe.http-rp/origin/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/iframe.http-rp/origin/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/iframe.http-rp/same-origin/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/iframe.http-rp/same-origin/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/iframe.http-rp/strict-origin-when-cross-origin/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/iframe.http-rp/strict-origin-when-cross-origin/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/iframe.http-rp/strict-origin/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/iframe.http-rp/strict-origin/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/iframe.http-rp/unsafe-url/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/iframe.http-rp/unsafe-url/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/iframe.http-rp/unset/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/iframe.http-rp/unset/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/iframe.meta/always/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/iframe.meta/always/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/iframe.meta/default/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/iframe.meta/default/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/iframe.meta/never/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/iframe.meta/never/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/iframe.meta/no-referrer-when-downgrade/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/iframe.meta/no-referrer-when-downgrade/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/iframe.meta/no-referrer/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/iframe.meta/no-referrer/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/iframe.meta/origin-when-cross-origin/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/iframe.meta/origin-when-cross-origin/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/iframe.meta/origin-when-crossorigin/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/iframe.meta/origin-when-crossorigin/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/iframe.meta/origin/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/iframe.meta/origin/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/iframe.meta/same-origin/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/iframe.meta/same-origin/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/iframe.meta/strict-origin-when-cross-origin/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/iframe.meta/strict-origin-when-cross-origin/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/iframe.meta/strict-origin/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/iframe.meta/strict-origin/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/iframe.meta/unsafe-url/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/iframe.meta/unsafe-url/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/iframe.meta/unset/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/iframe.meta/unset/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc-inherit.http-rp/no-referrer-when-downgrade/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc-inherit.http-rp/no-referrer-when-downgrade/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc-inherit.http-rp/no-referrer/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc-inherit.http-rp/no-referrer/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc-inherit.http-rp/origin-when-cross-origin/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc-inherit.http-rp/origin-when-cross-origin/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc-inherit.http-rp/origin/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc-inherit.http-rp/origin/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc-inherit.http-rp/same-origin/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc-inherit.http-rp/same-origin/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc-inherit.http-rp/strict-origin-when-cross-origin/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc-inherit.http-rp/strict-origin-when-cross-origin/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc-inherit.http-rp/strict-origin/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc-inherit.http-rp/strict-origin/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc-inherit.http-rp/unsafe-url/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc-inherit.http-rp/unsafe-url/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc-inherit.http-rp/unset/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc-inherit.http-rp/unset/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc-inherit.meta/always/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc-inherit.meta/always/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc-inherit.meta/default/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc-inherit.meta/default/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc-inherit.meta/never/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc-inherit.meta/never/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc-inherit.meta/no-referrer-when-downgrade/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc-inherit.meta/no-referrer-when-downgrade/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc-inherit.meta/no-referrer/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc-inherit.meta/no-referrer/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc-inherit.meta/origin-when-cross-origin/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc-inherit.meta/origin-when-cross-origin/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc-inherit.meta/origin-when-crossorigin/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc-inherit.meta/origin-when-crossorigin/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc-inherit.meta/origin/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc-inherit.meta/origin/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc-inherit.meta/same-origin/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc-inherit.meta/same-origin/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc-inherit.meta/strict-origin-when-cross-origin/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc-inherit.meta/strict-origin-when-cross-origin/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc-inherit.meta/strict-origin/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc-inherit.meta/strict-origin/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc-inherit.meta/unsafe-url/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc-inherit.meta/unsafe-url/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc-inherit.meta/unset/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc-inherit.meta/unset/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc.meta/always/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc.meta/always/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc.meta/default/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc.meta/default/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc.meta/never/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc.meta/never/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc.meta/no-referrer-when-downgrade/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc.meta/no-referrer-when-downgrade/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc.meta/no-referrer/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc.meta/no-referrer/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc.meta/origin-when-cross-origin/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc.meta/origin-when-cross-origin/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc.meta/origin-when-crossorigin/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc.meta/origin-when-crossorigin/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc.meta/origin/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc.meta/origin/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc.meta/same-origin/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc.meta/same-origin/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc.meta/strict-origin-when-cross-origin/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc.meta/strict-origin-when-cross-origin/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc.meta/strict-origin/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc.meta/strict-origin/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc.meta/unsafe-url/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc.meta/unsafe-url/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/top.http-rp/no-referrer-when-downgrade/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/top.http-rp/no-referrer-when-downgrade/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/top.http-rp/no-referrer/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/top.http-rp/no-referrer/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/top.http-rp/origin-when-cross-origin/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/top.http-rp/origin-when-cross-origin/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/top.http-rp/origin/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/top.http-rp/origin/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/top.http-rp/same-origin/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/top.http-rp/same-origin/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/top.http-rp/strict-origin-when-cross-origin/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/top.http-rp/strict-origin-when-cross-origin/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/top.http-rp/strict-origin/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/top.http-rp/strict-origin/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/top.http-rp/unsafe-url/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/top.http-rp/unsafe-url/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/top.http-rp/unset/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/top.http-rp/unset/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/top.meta/always/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/top.meta/always/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/top.meta/default/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/top.meta/default/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/top.meta/never/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/top.meta/never/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/top.meta/no-referrer-when-downgrade/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/top.meta/no-referrer-when-downgrade/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/top.meta/no-referrer/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/top.meta/no-referrer/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/top.meta/origin-when-cross-origin/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/top.meta/origin-when-cross-origin/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/top.meta/origin-when-crossorigin/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/top.meta/origin-when-crossorigin/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/top.meta/origin/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/top.meta/origin/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/top.meta/same-origin/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/top.meta/same-origin/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/top.meta/strict-origin-when-cross-origin/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/top.meta/strict-origin-when-cross-origin/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/top.meta/strict-origin/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/top.meta/strict-origin/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/top.meta/unsafe-url/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/top.meta/unsafe-url/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/top.meta/unset/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/top.meta/unset/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/requestidlecallback/callback-timeout-when-busy.html [ Pass ] -crbug.com/1050754 external/wpt/requestidlecallback/callback-timeout.html [ Pass ] -crbug.com/1050754 external/wpt/requestidlecallback/callback-xhr-sync.html [ Pass ] -crbug.com/1050754 external/wpt/resource-timing/cross-origin-start-end-time-with-redirects.html [ Failure ] -crbug.com/1050754 external/wpt/resource-timing/document-domain-no-impact-opener.html [ Failure Pass ] -crbug.com/1050754 external/wpt/resource-timing/object-not-found-adds-entry.html [ Failure Pass ] -crbug.com/1050754 external/wpt/resource-timing/resource_timing_buffer_full_eventually.html [ Timeout ] -crbug.com/1050754 external/wpt/screen-orientation/active-lock.html [ Crash Failure Pass ] -crbug.com/1050754 external/wpt/screen-orientation/idlharness.window.html [ Crash Failure Pass ] -crbug.com/1050754 external/wpt/screen-orientation/lock-basic.html [ Timeout ] -crbug.com/1050754 external/wpt/screen-orientation/lock-sandboxed-iframe.html [ Failure ] -crbug.com/1050754 external/wpt/screen-orientation/lock-unlock-check.html [ Crash Failure Pass ] -crbug.com/1050754 external/wpt/screen-orientation/onchange-event-subframe.html [ Failure ] -crbug.com/1050754 external/wpt/screen-orientation/onchange-event.html [ Crash Failure ] -crbug.com/1050754 external/wpt/scroll-to-text-fragment/find-range-from-text-directive.html [ Crash Timeout ] -crbug.com/1050754 external/wpt/scroll-to-text-fragment/force-load-at-top.html [ Crash Timeout ] -crbug.com/1050754 external/wpt/scroll-to-text-fragment/redirects.html [ Crash Timeout ] -crbug.com/1050754 external/wpt/scroll-to-text-fragment/scroll-to-text-fragment-security.sub.html [ Failure Timeout ] -crbug.com/1050754 external/wpt/scroll-to-text-fragment/scroll-to-text-fragment.html [ Crash Timeout ] -crbug.com/1050754 external/wpt/selection/contenteditable/modifying-selection-with-primary-mouse-button.tentative.html [ Crash Pass ] -crbug.com/1050754 external/wpt/selection/textcontrols/focus.html [ Crash Failure Pass Timeout ] -crbug.com/1050754 external/wpt/selection/textcontrols/selectionchange-bubble.html [ Timeout ] -crbug.com/1050754 external/wpt/serial/idlharness.https.any.html [ Failure ] -crbug.com/1050754 external/wpt/serial/idlharness.https.any.worker.html [ Failure ] -crbug.com/1050754 external/wpt/serial/serial-allowed-by-feature-policy-attribute-redirect-on-load.https.sub.html [ Timeout ] -crbug.com/1050754 external/wpt/serial/serial-allowed-by-feature-policy-attribute.https.sub.html [ Timeout ] -crbug.com/1050754 external/wpt/serial/serial-allowed-by-feature-policy.https.sub.html [ Timeout ] -crbug.com/1050754 external/wpt/serial/serial-default-feature-policy.https.sub.html [ Timeout ] -crbug.com/1050754 external/wpt/serial/serial-disabled-by-feature-policy.https.sub.html [ Failure Timeout ] -crbug.com/1050754 external/wpt/serial/serialPort_close.https.any.html [ Failure ] -crbug.com/1050754 external/wpt/serial/serialPort_close.https.any.worker.html [ Failure ] -crbug.com/1050754 external/wpt/serial/serialPort_getInfo.https.any.html [ Failure ] -crbug.com/1050754 external/wpt/serial/serialPort_getInfo.https.any.worker.html [ Failure ] -crbug.com/1050754 external/wpt/serial/serialPort_getSignals.https.any.html [ Failure ] -crbug.com/1050754 external/wpt/serial/serialPort_getSignals.https.any.worker.html [ Failure ] -crbug.com/1050754 external/wpt/serial/serialPort_ondisconnect.https.any.html [ Failure ] -crbug.com/1050754 external/wpt/serial/serialPort_ondisconnect.https.any.worker.html [ Failure ] -crbug.com/1050754 external/wpt/serial/serialPort_open.https.any.html [ Failure ] -crbug.com/1050754 external/wpt/serial/serialPort_open.https.any.worker.html [ Failure ] -crbug.com/1050754 external/wpt/serial/serialPort_readable_cancel.https.any.html [ Failure ] -crbug.com/1050754 external/wpt/serial/serialPort_readable_cancel.https.any.worker.html [ Failure ] -crbug.com/1050754 external/wpt/serial/serialPort_readable_chain.https.any.html [ Failure ] -crbug.com/1050754 external/wpt/serial/serialPort_readable_chain.https.any.worker.html [ Failure ] -crbug.com/1050754 external/wpt/serial/serialPort_readable_closeLocked.https.any.html [ Failure ] -crbug.com/1050754 external/wpt/serial/serialPort_readable_closeLocked.https.any.worker.html [ Failure ] -crbug.com/1050754 external/wpt/serial/serialPort_readable_disconnect.https.any.html [ Failure ] -crbug.com/1050754 external/wpt/serial/serialPort_readable_disconnect.https.any.worker.html [ Failure ] -crbug.com/1050754 external/wpt/serial/serialPort_readable_largeRead.https.any.html [ Failure ] -crbug.com/1050754 external/wpt/serial/serialPort_readable_largeRead.https.any.worker.html [ Failure ] -crbug.com/1050754 external/wpt/serial/serialPort_readable_open.https.any.html [ Failure ] -crbug.com/1050754 external/wpt/serial/serialPort_readable_open.https.any.worker.html [ Failure ] -crbug.com/1050754 external/wpt/serial/serialPort_readable_parityError.https.any.html [ Failure ] -crbug.com/1050754 external/wpt/serial/serialPort_readable_parityError.https.any.worker.html [ Failure ] -crbug.com/1050754 external/wpt/serial/serialPort_readable_pipeThrough.https.any.html [ Failure ] -crbug.com/1050754 external/wpt/serial/serialPort_readable_pipeThrough.https.any.worker.html [ Failure ] -crbug.com/1050754 external/wpt/serial/serialPort_readable_smallRead.https.any.html [ Failure ] -crbug.com/1050754 external/wpt/serial/serialPort_readable_smallRead.https.any.worker.html [ Failure ] -crbug.com/1050754 external/wpt/serial/serialPort_setSignals.https.any.html [ Failure ] -crbug.com/1050754 external/wpt/serial/serialPort_setSignals.https.any.worker.html [ Failure ] -crbug.com/1050754 external/wpt/serial/serialPort_writable.https.any.html [ Failure ] -crbug.com/1050754 external/wpt/serial/serialPort_writable.https.any.worker.html [ Failure ] -crbug.com/1050754 external/wpt/serial/serial_getPorts.https.any.html [ Failure ] -crbug.com/1050754 external/wpt/serial/serial_getPorts.https.any.worker.html [ Failure ] -crbug.com/1050754 external/wpt/serial/serial_onconnect.https.any.html [ Failure ] -crbug.com/1050754 external/wpt/serial/serial_onconnect.https.any.worker.html [ Failure ] -crbug.com/1050754 external/wpt/serial/serial_ondisconnect.https.any.html [ Failure ] -crbug.com/1050754 external/wpt/serial/serial_ondisconnect.https.any.worker.html [ Failure ] -crbug.com/1050754 external/wpt/serial/serial_requestPort.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/service-workers/service-worker/Service-Worker-Allowed-header.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/service-workers/service-worker/ServiceWorkerGlobalScope/registration-attribute.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/service-workers/service-worker/about-blank-replacement.https.html [ Crash Failure ] -crbug.com/1050754 external/wpt/service-workers/service-worker/claim-shared-worker-fetch.https.html [ Failure ] -crbug.com/1050754 external/wpt/service-workers/service-worker/claim-worker-fetch.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/service-workers/service-worker/client-navigate.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/service-workers/service-worker/clients-matchall-frozen.https.html [ Timeout ] -crbug.com/1050754 external/wpt/service-workers/service-worker/clients-matchall-include-uncontrolled.https.html [ Failure ] -crbug.com/1050754 external/wpt/service-workers/service-worker/credentials.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/service-workers/service-worker/fetch-canvas-tainting-video-cache.https.html [ Failure ] -crbug.com/1050754 external/wpt/service-workers/service-worker/fetch-canvas-tainting-video.https.html [ Failure ] -crbug.com/1050754 external/wpt/service-workers/service-worker/fetch-event-referrer-policy.https.html [ Failure ] -crbug.com/1050754 external/wpt/service-workers/service-worker/fetch-event-respond-with-custom-response.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/service-workers/service-worker/fetch-event-respond-with-readable-stream.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/service-workers/service-worker/fetch-request-redirect.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/service-workers/service-worker/import-scripts-redirect.https.html [ Failure Timeout ] -crbug.com/1050754 external/wpt/service-workers/service-worker/nested-blob-url-workers.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/service-workers/service-worker/no-dynamic-import-in-module.any.serviceworker-module.html [ Failure ] -crbug.com/1050754 external/wpt/service-workers/service-worker/postmessage-to-client-message-queue.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/service-workers/service-worker/postmessage.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/service-workers/service-worker/referrer-policy-header.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/service-workers/service-worker/referrer-toplevel-script-fetch.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/service-workers/service-worker/register-default-scope.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/service-workers/service-worker/register-same-scope-different-script-url.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/service-workers/service-worker/registration-mime-types.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/service-workers/service-worker/registration-schedule-job.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/service-workers/service-worker/update-after-navigation-fetch-event.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/service-workers/service-worker/update-after-navigation-redirect.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/service-workers/service-worker/update-after-oneday.https.html [ Timeout ] -crbug.com/1050754 external/wpt/service-workers/service-worker/update-bytecheck-cors-import.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/service-workers/service-worker/update-bytecheck.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/service-workers/service-worker/update-import-scripts.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/service-workers/service-worker/update-not-allowed.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/service-workers/service-worker/update-registration-with-type.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/service-workers/service-worker/update.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/service-workers/service-worker/windowclient-navigate.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/service-workers/service-worker/xhr-content-length.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/shadow-dom/MouseEvent-prototype-offsetX-offsetY.html [ Failure ] -crbug.com/1050754 external/wpt/shadow-dom/accesskey.tentative.html [ Pass ] -crbug.com/1050754 external/wpt/shape-detection/detection-HTMLVideoElement.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/shape-detection/idlharness.https.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/storage-access-api/hasStorageAccess.sub.window.html [ Timeout ] -crbug.com/1050754 external/wpt/storage-access-api/requestStorageAccess.sub.window.html [ Failure ] -crbug.com/1050754 external/wpt/storage-access-api/storageAccess.testdriver.sub.html [ Failure ] -crbug.com/1050754 external/wpt/storage/estimate-indexeddb.https.any.html [ Failure Pass ] -crbug.com/1050754 external/wpt/streams/transferable/shared-worker.html [ Failure ] -crbug.com/1050754 external/wpt/svg/animations/beginelement-instance-time-1.html [ Failure Pass ] -crbug.com/1050754 external/wpt/svg/animations/scripted/animatetransform-type-missing-value-default.html [ Failure ] -crbug.com/1050754 external/wpt/svg/painting/parsing/stroke-width-computed.svg [ Failure ] -crbug.com/1050754 external/wpt/svg/types/scripted/SVGGraphicsElement.getBBox-02.html [ Failure ] -crbug.com/1050754 external/wpt/ua-client-hints/idlharness.https.any.worker.html [ Failure Pass ] -crbug.com/1050754 external/wpt/uievents/click/auxclick_event.html [ Timeout ] -crbug.com/1050754 external/wpt/uievents/click/click_events_on_input.html [ Crash Failure Pass ] -crbug.com/1050754 external/wpt/uievents/idlharness.window.html [ Failure Pass ] -crbug.com/1050754 external/wpt/uievents/keyboard/modifier-keys-combinations.html [ Pass ] -crbug.com/1050754 external/wpt/uievents/keyboard/modifier-keys.html [ Pass ] -crbug.com/1050754 external/wpt/uievents/order-of-events/focus-events/focus-contained.html [ Pass Timeout ] -crbug.com/1050754 external/wpt/uievents/order-of-events/focus-events/focus-management-expectations.html [ Pass ] -crbug.com/1050754 external/wpt/uievents/order-of-events/focus-events/focus.html [ Pass Timeout ] -crbug.com/1050754 external/wpt/uievents/order-of-events/mouse-events/click-on-body.html [ Failure Pass ] -crbug.com/1050754 external/wpt/uievents/order-of-events/mouse-events/wheel-basic.html [ Pass ] -crbug.com/1050754 external/wpt/uievents/order-of-events/mouse-events/wheel-scrolling.html [ Pass ] -crbug.com/1050754 external/wpt/upgrade-insecure-requests/gen/iframe-blank-inherit.meta/unset/sharedworker-import-data.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/upgrade-insecure-requests/gen/iframe-blank-inherit.meta/upgrade/sharedworker-import-data.https.html [ Failure ] -crbug.com/1050754 external/wpt/upgrade-insecure-requests/gen/iframe-blank-inherit.meta/upgrade/sharedworker-import.https.html [ Failure ] -crbug.com/1050754 external/wpt/upgrade-insecure-requests/gen/sharedworker-classic-data.http-rp/upgrade/fetch.https.html [ Failure ] -crbug.com/1050754 external/wpt/upgrade-insecure-requests/gen/sharedworker-classic-data.http-rp/upgrade/websocket.https.html [ Failure ] -crbug.com/1050754 external/wpt/upgrade-insecure-requests/gen/sharedworker-classic-data.http-rp/upgrade/xhr.https.html [ Failure ] -crbug.com/1050754 external/wpt/upgrade-insecure-requests/gen/sharedworker-classic-data.meta/upgrade/fetch.https.html [ Failure ] -crbug.com/1050754 external/wpt/upgrade-insecure-requests/gen/sharedworker-classic-data.meta/upgrade/websocket.https.html [ Failure ] -crbug.com/1050754 external/wpt/upgrade-insecure-requests/gen/sharedworker-classic-data.meta/upgrade/xhr.https.html [ Failure ] -crbug.com/1050754 external/wpt/upgrade-insecure-requests/gen/sharedworker-classic.http-rp/upgrade/fetch.https.html [ Failure ] -crbug.com/1050754 external/wpt/upgrade-insecure-requests/gen/sharedworker-classic.http-rp/upgrade/websocket.https.html [ Failure ] -crbug.com/1050754 external/wpt/upgrade-insecure-requests/gen/sharedworker-classic.http-rp/upgrade/xhr.https.html [ Failure ] -crbug.com/1050754 external/wpt/upgrade-insecure-requests/gen/sharedworker-module-data.http-rp/upgrade/fetch.https.html [ Failure ] -crbug.com/1050754 external/wpt/upgrade-insecure-requests/gen/sharedworker-module-data.http-rp/upgrade/websocket.https.html [ Failure ] -crbug.com/1050754 external/wpt/upgrade-insecure-requests/gen/sharedworker-module-data.http-rp/upgrade/xhr.https.html [ Failure ] -crbug.com/1050754 external/wpt/upgrade-insecure-requests/gen/sharedworker-module-data.meta/upgrade/fetch.https.html [ Failure ] -crbug.com/1050754 external/wpt/upgrade-insecure-requests/gen/sharedworker-module-data.meta/upgrade/websocket.https.html [ Failure ] -crbug.com/1050754 external/wpt/upgrade-insecure-requests/gen/sharedworker-module-data.meta/upgrade/xhr.https.html [ Failure ] -crbug.com/1050754 external/wpt/upgrade-insecure-requests/gen/sharedworker-module.http-rp/upgrade/fetch.https.html [ Failure ] -crbug.com/1050754 external/wpt/upgrade-insecure-requests/gen/sharedworker-module.http-rp/upgrade/websocket.https.html [ Failure ] -crbug.com/1050754 external/wpt/upgrade-insecure-requests/gen/sharedworker-module.http-rp/upgrade/xhr.https.html [ Failure ] -crbug.com/1050754 external/wpt/upgrade-insecure-requests/gen/srcdoc-inherit.meta/upgrade/sharedworker-import-data.https.html [ Failure ] -crbug.com/1050754 external/wpt/upgrade-insecure-requests/gen/srcdoc-inherit.meta/upgrade/sharedworker-import.https.html [ Failure ] -crbug.com/1050754 external/wpt/upgrade-insecure-requests/gen/top.http-rp/upgrade/sharedworker-import-data.https.html [ Failure ] -crbug.com/1050754 external/wpt/upgrade-insecure-requests/gen/top.http-rp/upgrade/sharedworker-import.https.html [ Failure ] -crbug.com/1050754 external/wpt/upgrade-insecure-requests/gen/top.meta/upgrade/sharedworker-import-data.https.html [ Failure ] -crbug.com/1050754 external/wpt/upgrade-insecure-requests/gen/top.meta/upgrade/sharedworker-import.https.html [ Failure ] -crbug.com/1050754 external/wpt/url/a-element-origin-xhtml.xhtml [ Failure ] -crbug.com/1050754 external/wpt/url/a-element-origin.html [ Failure ] -crbug.com/1050754 external/wpt/url/a-element-xhtml.xhtml [ Failure ] -crbug.com/1050754 external/wpt/url/a-element.html [ Failure ] -crbug.com/1050754 external/wpt/url/failure.html [ Failure ] -crbug.com/1050754 external/wpt/url/url-constructor.any.html [ Failure ] -crbug.com/1050754 external/wpt/url/url-constructor.any.worker.html [ Failure ] -crbug.com/1050754 external/wpt/url/url-origin.any.html [ Failure ] -crbug.com/1050754 external/wpt/url/url-origin.any.worker.html [ Failure ] -crbug.com/1050754 external/wpt/url/url-setters.html [ Failure ] -crbug.com/1050754 external/wpt/urlpattern/urlpattern.https.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/user-timing/idlharness.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/video-rvfc/request-video-frame-callback-before-xr-session.https.html [ Failure ] -crbug.com/1050754 external/wpt/video-rvfc/request-video-frame-callback-during-xr-session.https.html [ Failure ] -crbug.com/1050754 external/wpt/visual-viewport/viewport-resize-event-on-load-overflowing-page.html [ Failure ] -crbug.com/1050754 external/wpt/visual-viewport/viewport-unscaled-scale.html [ Failure ] -crbug.com/1050754 external/wpt/wasm/jsapi/functions/entry.html [ Failure Pass ] -crbug.com/1050754 external/wpt/wasm/jsapi/functions/incumbent.html [ Pass ] -crbug.com/1050754 external/wpt/wasm/jsapi/idlharness.any.html [ Failure Pass ] -crbug.com/1050754 external/wpt/wasm/jsapi/idlharness.any.worker.html [ Failure Pass ] -crbug.com/1050754 external/wpt/wasm/jsapi/memory/constructor-shared.tentative.any.html [ Failure Pass ] -crbug.com/1050754 external/wpt/wasm/jsapi/memory/constructor-shared.tentative.any.worker.html [ Failure Pass ] -crbug.com/1050754 external/wpt/wasm/jsapi/memory/grow.any.html [ Failure Pass ] -crbug.com/1050754 external/wpt/wasm/jsapi/memory/grow.any.worker.html [ Failure Pass ] -crbug.com/1050754 external/wpt/wasm/jsapi/table/grow-reftypes.tentative.any.worker.html [ Failure ] -crbug.com/1050754 external/wpt/wasm/serialization/module/broadcastchannel-success-and-failure.html [ Failure ] -crbug.com/1050754 external/wpt/wasm/serialization/module/serialization-via-notifications-api.any.html [ Failure ] -crbug.com/1050754 external/wpt/wasm/serialization/module/serialization-via-notifications-api.any.worker.html [ Failure ] -crbug.com/1050754 external/wpt/wasm/serialization/module/window-sharedworker-failure.html [ Failure ] -crbug.com/1050754 external/wpt/wasm/webapi/body.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/wasm/webapi/contenttype.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/wasm/webapi/empty-body.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/wasm/webapi/historical.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/wasm/webapi/instantiateStreaming-bad-imports.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/wasm/webapi/instantiateStreaming.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/wasm/webapi/invalid-args.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/wasm/webapi/invalid-code.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/wasm/webapi/modified-contenttype.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/wasm/webapi/origin.sub.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/wasm/webapi/rejected-arg.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/wasm/webapi/status.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/web-animations/interfaces/Animation/finished.html [ Failure Pass ] -crbug.com/1050754 external/wpt/web-animations/interfaces/Animation/onremove.html [ Failure Pass ] -crbug.com/1050754 external/wpt/web-animations/timing-model/animations/finishing-an-animation.html [ Pass ] -crbug.com/1050754 external/wpt/web-animations/timing-model/animations/playing-an-animation.html [ Failure Pass ] -crbug.com/1050754 external/wpt/web-animations/timing-model/animations/setting-the-current-time-of-an-animation.html [ Failure Pass ] -crbug.com/1050754 external/wpt/web-animations/timing-model/animations/setting-the-playback-rate-of-an-animation.html [ Failure Pass ] -crbug.com/1050754 external/wpt/web-animations/timing-model/timelines/document-timelines.html [ Failure Pass ] -crbug.com/1050754 external/wpt/web-bundle/subresource-loading/link-csp-allowed.https.tentative.html [ Failure ] -crbug.com/1050754 external/wpt/web-bundle/subresource-loading/link-nested-bundle.https.tentative.html [ Failure Timeout ] -crbug.com/1050754 external/wpt/web-bundle/subresource-loading/link-path-restriction.https.tentative.html [ Failure ] -crbug.com/1050754 external/wpt/web-bundle/subresource-loading/link-static-element-with-base.https.tentative.html [ Failure ] -crbug.com/1050754 external/wpt/web-bundle/subresource-loading/link-static-element.https.tentative.html [ Failure ] -crbug.com/1050754 external/wpt/web-bundle/subresource-loading/link-subresource-load.https.tentative.sub.html [ Failure ] -crbug.com/1050754 external/wpt/web-locks/acquire.tentative.https.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/web-locks/held.tentative.https.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/web-locks/idlharness.tentative.https.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/web-locks/ifAvailable.tentative.https.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/web-locks/lock-attributes.tentative.https.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/web-locks/mode-exclusive.tentative.https.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/web-locks/mode-mixed.tentative.https.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/web-locks/mode-shared.tentative.https.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/web-locks/non-secure-context.tentative.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/web-locks/query-empty.tentative.https.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/web-locks/query-ordering.tentative.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/web-locks/resource-names.tentative.https.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/web-locks/secure-context.tentative.https.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/web-locks/signal.tentative.https.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/web-locks/steal.tentative.https.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/webaudio/the-audio-api/the-audiobuffer-interface/audiobuffer-copy-channel.html [ Failure Pass ] -crbug.com/1050754 external/wpt/webaudio/the-audio-api/the-audiocontext-interface/processing-after-resume.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/webaudio/the-audio-api/the-audioworklet-interface/audioworklet-addmodule-resolution.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/webaudio/the-audio-api/the-audioworklet-interface/audioworklet-messageport.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/webaudio/the-audio-api/the-audioworklet-interface/audioworklet-postmessage-sharedarraybuffer.https.html [ Failure Pass Timeout ] -crbug.com/1050754 external/wpt/webaudio/the-audio-api/the-audioworklet-interface/audioworklet-throw-onmessage.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/webaudio/the-audio-api/the-audioworklet-interface/audioworkletnode-construction.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/webaudio/the-audio-api/the-audioworklet-interface/audioworkletnode-output-channel-count.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/webaudio/the-audio-api/the-audioworklet-interface/audioworkletprocessor-options.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/webaudio/the-audio-api/the-audioworklet-interface/audioworkletprocessor-process-frozen-array.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/webaudio/the-audio-api/the-audioworklet-interface/process-parameters.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/webaudio/the-audio-api/the-audioworklet-interface/suspended-context-messageport.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/webcodecs/image-decoder.https.any.worker.html [ Failure Pass ] -crbug.com/1050754 external/wpt/webcodecs/video-decoder.https.any.html [ Pass Timeout ] -crbug.com/1050754 external/wpt/webcodecs/video-decoder.https.any.worker.html [ Pass Timeout ] -crbug.com/1050754 external/wpt/webcodecs/videoDecoder-codec-specific.https.any.html?h264_annexb [ Timeout ] -crbug.com/1050754 external/wpt/webcodecs/videoDecoder-codec-specific.https.any.html?h264_avc [ Timeout ] -crbug.com/1050754 external/wpt/webcodecs/videoDecoder-codec-specific.https.any.worker.html?h264_annexb [ Timeout ] -crbug.com/1050754 external/wpt/webcodecs/videoDecoder-codec-specific.https.any.worker.html?h264_avc [ Timeout ] -crbug.com/1050754 external/wpt/webmessaging/broadcastchannel/workers.html [ Failure Timeout ] -crbug.com/1050754 external/wpt/webmessaging/multi-globals/broadcastchannel-current.sub.html [ Pass ] -crbug.com/1050754 external/wpt/webmessaging/multi-globals/broadcastchannel-incumbent.sub.html [ Pass ] -crbug.com/1050754 external/wpt/webrtc-encoded-transform/RTCPeerConnection-insertable-streams-simulcast.https.html [ Pass Timeout ] -crbug.com/1050754 external/wpt/webrtc-extensions/transfer-datachannel-service-worker.https.html [ Failure ] -crbug.com/1050754 external/wpt/webrtc-insertable-streams/RTCPeerConnection-insertable-streams-simulcast.https.html [ Pass Timeout ] -crbug.com/1050754 external/wpt/webrtc/RTCDTMFSender-ontonechange.https.html [ Failure Timeout ] -crbug.com/1050754 external/wpt/webrtc/RTCIceConnectionState-candidate-pair.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/webrtc/RTCPeerConnection-operations.https.html [ Failure ] -crbug.com/1050754 external/wpt/webrtc/RTCPeerConnection-setRemoteDescription-rollback.html [ Failure Pass ] -crbug.com/1050754 external/wpt/webrtc/RTCPeerConnection-videoDetectorTest.html [ Failure Pass ] -crbug.com/1050754 external/wpt/webrtc/protocol/rtp-clockrate.html [ Failure Pass ] -crbug.com/1050754 external/wpt/webrtc/protocol/rtp-demuxing.html [ Failure ] -crbug.com/1050754 external/wpt/webrtc/protocol/video-codecs.https.html [ Failure ] -crbug.com/1050754 external/wpt/webrtc/simulcast/basic.https.html [ Pass Timeout ] -crbug.com/1050754 external/wpt/webrtc/simulcast/getStats.https.html [ Pass Timeout ] -crbug.com/1050754 external/wpt/webrtc/simulcast/setParameters-active.https.html [ Failure Pass Timeout ] -crbug.com/1050754 external/wpt/webrtc/simulcast/vp8.https.html [ Pass Timeout ] -crbug.com/1050754 external/wpt/websockets/Close-1000-reason.any.html?wpt_flags=h2 [ Failure ] -crbug.com/1050754 external/wpt/websockets/Close-1000-reason.any.worker.html?wpt_flags=h2 [ Failure ] -crbug.com/1050754 external/wpt/websockets/Close-1000-verify-code.any.html?wpt_flags=h2 [ Failure ] -crbug.com/1050754 external/wpt/websockets/Close-1000-verify-code.any.worker.html?wpt_flags=h2 [ Failure ] -crbug.com/1050754 external/wpt/websockets/Close-1000.any.html?wpt_flags=h2 [ Failure ] -crbug.com/1050754 external/wpt/websockets/Close-1000.any.worker.html?wpt_flags=h2 [ Failure ] -crbug.com/1050754 external/wpt/websockets/Close-1005-verify-code.any.html?wpt_flags=h2 [ Failure ] -crbug.com/1050754 external/wpt/websockets/Close-1005-verify-code.any.worker.html?wpt_flags=h2 [ Failure ] -crbug.com/1050754 external/wpt/websockets/Close-1005.any.html?wpt_flags=h2 [ Failure ] -crbug.com/1050754 external/wpt/websockets/Close-1005.any.worker.html?wpt_flags=h2 [ Failure ] -crbug.com/1050754 external/wpt/websockets/Close-2999-reason.any.html?wpt_flags=h2 [ Failure ] -crbug.com/1050754 external/wpt/websockets/Close-2999-reason.any.worker.html?wpt_flags=h2 [ Failure ] -crbug.com/1050754 external/wpt/websockets/Close-3000-reason.any.html?wpt_flags=h2 [ Failure ] -crbug.com/1050754 external/wpt/websockets/Close-3000-reason.any.worker.html?wpt_flags=h2 [ Failure ] -crbug.com/1050754 external/wpt/websockets/Close-3000-verify-code.any.html?wpt_flags=h2 [ Failure ] -crbug.com/1050754 external/wpt/websockets/Close-3000-verify-code.any.worker.html?wpt_flags=h2 [ Failure ] -crbug.com/1050754 external/wpt/websockets/Close-4999-reason.any.html?wpt_flags=h2 [ Failure ] -crbug.com/1050754 external/wpt/websockets/Close-4999-reason.any.worker.html?wpt_flags=h2 [ Failure ] -crbug.com/1050754 external/wpt/websockets/Close-Reason-124Bytes.any.html?wpt_flags=h2 [ Failure ] -crbug.com/1050754 external/wpt/websockets/Close-Reason-124Bytes.any.worker.html?wpt_flags=h2 [ Failure ] -crbug.com/1050754 external/wpt/websockets/Close-onlyReason.any.html?wpt_flags=h2 [ Failure ] -crbug.com/1050754 external/wpt/websockets/Close-onlyReason.any.worker.html?wpt_flags=h2 [ Failure ] -crbug.com/1050754 external/wpt/websockets/Close-readyState-Closed.any.html?wpt_flags=h2 [ Failure ] -crbug.com/1050754 external/wpt/websockets/Close-readyState-Closed.any.worker.html?wpt_flags=h2 [ Failure ] -crbug.com/1050754 external/wpt/websockets/Close-readyState-Closing.any.html?wpt_flags=h2 [ Failure ] -crbug.com/1050754 external/wpt/websockets/Close-readyState-Closing.any.worker.html?wpt_flags=h2 [ Failure ] -crbug.com/1050754 external/wpt/websockets/Close-reason-unpaired-surrogates.any.html?wpt_flags=h2 [ Failure ] -crbug.com/1050754 external/wpt/websockets/Close-reason-unpaired-surrogates.any.worker.html?wpt_flags=h2 [ Failure ] -crbug.com/1050754 external/wpt/websockets/Close-server-initiated-close.any.html?wpt_flags=h2 [ Failure ] -crbug.com/1050754 external/wpt/websockets/Close-server-initiated-close.any.worker.html?wpt_flags=h2 [ Failure ] -crbug.com/1050754 external/wpt/websockets/Close-undefined.any.html?wpt_flags=h2 [ Failure ] -crbug.com/1050754 external/wpt/websockets/Close-undefined.any.worker.html?wpt_flags=h2 [ Failure ] -crbug.com/1050754 external/wpt/websockets/Create-asciiSep-protocol-string.any.html?wpt_flags=h2 [ Failure ] -crbug.com/1050754 external/wpt/websockets/Create-asciiSep-protocol-string.any.worker.html?wpt_flags=h2 [ Failure ] -crbug.com/1050754 external/wpt/websockets/Create-blocked-port.any.html?wpt_flags=h2 [ Failure ] -crbug.com/1050754 external/wpt/websockets/Create-blocked-port.any.worker.html?wpt_flags=h2 [ Failure ] -crbug.com/1050754 external/wpt/websockets/Create-extensions-empty.any.html?wpt_flags=h2 [ Failure ] -crbug.com/1050754 external/wpt/websockets/Create-extensions-empty.any.worker.html?wpt_flags=h2 [ Failure ] -crbug.com/1050754 external/wpt/websockets/Create-invalid-urls.any.html?wpt_flags=h2 [ Failure ] -crbug.com/1050754 external/wpt/websockets/Create-invalid-urls.any.worker.html?wpt_flags=h2 [ Failure ] -crbug.com/1050754 external/wpt/websockets/Create-non-absolute-url.any.html?wpt_flags=h2 [ Failure ] -crbug.com/1050754 external/wpt/websockets/Create-non-absolute-url.any.worker.html?wpt_flags=h2 [ Failure ] -crbug.com/1050754 external/wpt/websockets/Create-nonAscii-protocol-string.any.html?wpt_flags=h2 [ Failure ] -crbug.com/1050754 external/wpt/websockets/Create-nonAscii-protocol-string.any.worker.html?wpt_flags=h2 [ Failure ] -crbug.com/1050754 external/wpt/websockets/Create-protocol-with-space.any.html?wpt_flags=h2 [ Failure ] -crbug.com/1050754 external/wpt/websockets/Create-protocol-with-space.any.worker.html?wpt_flags=h2 [ Failure ] -crbug.com/1050754 external/wpt/websockets/Create-protocols-repeated-case-insensitive.any.html?wpt_flags=h2 [ Failure ] -crbug.com/1050754 external/wpt/websockets/Create-protocols-repeated-case-insensitive.any.html?wss [ Failure ] -crbug.com/1050754 external/wpt/websockets/Create-protocols-repeated-case-insensitive.any.worker.html?wpt_flags=h2 [ Failure ] -crbug.com/1050754 external/wpt/websockets/Create-protocols-repeated-case-insensitive.any.worker.html?wss [ Failure ] -crbug.com/1050754 external/wpt/websockets/Create-protocols-repeated.any.html?wpt_flags=h2 [ Failure ] -crbug.com/1050754 external/wpt/websockets/Create-protocols-repeated.any.worker.html?wpt_flags=h2 [ Failure ] -crbug.com/1050754 external/wpt/websockets/Create-url-with-space.any.html [ Failure ] -crbug.com/1050754 external/wpt/websockets/Create-url-with-space.any.html?wpt_flags=h2 [ Failure ] -crbug.com/1050754 external/wpt/websockets/Create-url-with-space.any.html?wss [ Failure ] -crbug.com/1050754 external/wpt/websockets/Create-url-with-space.any.worker.html [ Failure ] -crbug.com/1050754 external/wpt/websockets/Create-url-with-space.any.worker.html?wpt_flags=h2 [ Failure ] -crbug.com/1050754 external/wpt/websockets/Create-url-with-space.any.worker.html?wss [ Failure ] -crbug.com/1050754 external/wpt/websockets/Create-valid-url-array-protocols.any.html?wpt_flags=h2 [ Failure ] -crbug.com/1050754 external/wpt/websockets/Create-valid-url-array-protocols.any.worker.html?wpt_flags=h2 [ Failure ] -crbug.com/1050754 external/wpt/websockets/Create-valid-url-binaryType-blob.any.html?wpt_flags=h2 [ Failure ] -crbug.com/1050754 external/wpt/websockets/Create-valid-url-binaryType-blob.any.worker.html?wpt_flags=h2 [ Failure ] -crbug.com/1050754 external/wpt/websockets/Create-valid-url-protocol-empty.any.html?wpt_flags=h2 [ Failure ] -crbug.com/1050754 external/wpt/websockets/Create-valid-url-protocol-empty.any.worker.html?wpt_flags=h2 [ Failure ] -crbug.com/1050754 external/wpt/websockets/Create-valid-url-protocol-setCorrectly.any.html?wpt_flags=h2 [ Failure ] -crbug.com/1050754 external/wpt/websockets/Create-valid-url-protocol-setCorrectly.any.worker.html?wpt_flags=h2 [ Failure ] -crbug.com/1050754 external/wpt/websockets/Create-valid-url-protocol-string.any.html?wpt_flags=h2 [ Failure ] -crbug.com/1050754 external/wpt/websockets/Create-valid-url-protocol-string.any.worker.html?wpt_flags=h2 [ Failure ] -crbug.com/1050754 external/wpt/websockets/Create-valid-url-protocol.any.html?wpt_flags=h2 [ Failure ] -crbug.com/1050754 external/wpt/websockets/Create-valid-url-protocol.any.worker.html?wpt_flags=h2 [ Failure ] -crbug.com/1050754 external/wpt/websockets/Create-valid-url.any.html?wpt_flags=h2 [ Failure ] -crbug.com/1050754 external/wpt/websockets/Create-valid-url.any.worker.html?wpt_flags=h2 [ Failure ] -crbug.com/1050754 external/wpt/websockets/Create-wrong-scheme.any.html?wpt_flags=h2 [ Failure ] -crbug.com/1050754 external/wpt/websockets/Create-wrong-scheme.any.worker.html?wpt_flags=h2 [ Failure ] -crbug.com/1050754 external/wpt/websockets/Send-0byte-data.any.html?wpt_flags=h2 [ Failure ] -crbug.com/1050754 external/wpt/websockets/Send-0byte-data.any.worker.html?wpt_flags=h2 [ Failure ] -crbug.com/1050754 external/wpt/websockets/Send-65K-data.any.html?wpt_flags=h2 [ Failure ] -crbug.com/1050754 external/wpt/websockets/Send-65K-data.any.worker.html?wpt_flags=h2 [ Failure ] -crbug.com/1050754 external/wpt/websockets/Send-before-open.any.html?wpt_flags=h2 [ Failure ] -crbug.com/1050754 external/wpt/websockets/Send-before-open.any.worker.html?wpt_flags=h2 [ Failure ] -crbug.com/1050754 external/wpt/websockets/Send-binary-65K-arraybuffer.any.html?wpt_flags=h2 [ Failure ] -crbug.com/1050754 external/wpt/websockets/Send-binary-65K-arraybuffer.any.worker.html?wpt_flags=h2 [ Failure ] -crbug.com/1050754 external/wpt/websockets/Send-binary-arraybuffer.any.html?wpt_flags=h2 [ Failure ] -crbug.com/1050754 external/wpt/websockets/Send-binary-arraybuffer.any.worker.html?wpt_flags=h2 [ Failure ] -crbug.com/1050754 external/wpt/websockets/Send-binary-arraybufferview-float32.any.html?wpt_flags=h2 [ Failure ] -crbug.com/1050754 external/wpt/websockets/Send-binary-arraybufferview-float32.any.worker.html?wpt_flags=h2 [ Failure ] -crbug.com/1050754 external/wpt/websockets/Send-binary-arraybufferview-float64.any.html?wpt_flags=h2 [ Failure ] -crbug.com/1050754 external/wpt/websockets/Send-binary-arraybufferview-float64.any.worker.html?wpt_flags=h2 [ Failure ] -crbug.com/1050754 external/wpt/websockets/Send-binary-arraybufferview-int16-offset.any.html?wpt_flags=h2 [ Failure ] -crbug.com/1050754 external/wpt/websockets/Send-binary-arraybufferview-int16-offset.any.worker.html?wpt_flags=h2 [ Failure ] -crbug.com/1050754 external/wpt/websockets/Send-binary-arraybufferview-int32.any.html?wpt_flags=h2 [ Failure ] -crbug.com/1050754 external/wpt/websockets/Send-binary-arraybufferview-int32.any.worker.html?wpt_flags=h2 [ Failure ] -crbug.com/1050754 external/wpt/websockets/Send-binary-arraybufferview-int8.any.html?wpt_flags=h2 [ Failure ] -crbug.com/1050754 external/wpt/websockets/Send-binary-arraybufferview-int8.any.worker.html?wpt_flags=h2 [ Failure ] -crbug.com/1050754 external/wpt/websockets/Send-binary-arraybufferview-uint16-offset-length.any.html?wpt_flags=h2 [ Failure ] -crbug.com/1050754 external/wpt/websockets/Send-binary-arraybufferview-uint16-offset-length.any.worker.html?wpt_flags=h2 [ Failure ] -crbug.com/1050754 external/wpt/websockets/Send-binary-arraybufferview-uint32-offset.any.html?wpt_flags=h2 [ Failure ] -crbug.com/1050754 external/wpt/websockets/Send-binary-arraybufferview-uint32-offset.any.worker.html?wpt_flags=h2 [ Failure ] -crbug.com/1050754 external/wpt/websockets/Send-binary-arraybufferview-uint8-offset-length.any.html?wpt_flags=h2 [ Failure ] -crbug.com/1050754 external/wpt/websockets/Send-binary-arraybufferview-uint8-offset-length.any.worker.html?wpt_flags=h2 [ Failure ] -crbug.com/1050754 external/wpt/websockets/Send-binary-arraybufferview-uint8-offset.any.html?wpt_flags=h2 [ Failure ] -crbug.com/1050754 external/wpt/websockets/Send-binary-arraybufferview-uint8-offset.any.worker.html?wpt_flags=h2 [ Failure ] -crbug.com/1050754 external/wpt/websockets/Send-binary-blob.any.html?wpt_flags=h2 [ Failure ] -crbug.com/1050754 external/wpt/websockets/Send-binary-blob.any.worker.html?wpt_flags=h2 [ Failure ] -crbug.com/1050754 external/wpt/websockets/Send-data.any.html?wpt_flags=h2 [ Failure ] -crbug.com/1050754 external/wpt/websockets/Send-data.any.worker.html?wpt_flags=h2 [ Failure ] -crbug.com/1050754 external/wpt/websockets/Send-data.worker.html?wpt_flags=h2 [ Failure ] -crbug.com/1050754 external/wpt/websockets/Send-null.any.html?wpt_flags=h2 [ Failure ] -crbug.com/1050754 external/wpt/websockets/Send-null.any.worker.html?wpt_flags=h2 [ Failure ] -crbug.com/1050754 external/wpt/websockets/Send-paired-surrogates.any.html?wpt_flags=h2 [ Failure ] -crbug.com/1050754 external/wpt/websockets/Send-paired-surrogates.any.worker.html?wpt_flags=h2 [ Failure ] -crbug.com/1050754 external/wpt/websockets/Send-unicode-data.any.html?wpt_flags=h2 [ Failure ] -crbug.com/1050754 external/wpt/websockets/Send-unicode-data.any.worker.html?wpt_flags=h2 [ Failure ] -crbug.com/1050754 external/wpt/websockets/Send-unpaired-surrogates.any.html?wpt_flags=h2 [ Failure ] -crbug.com/1050754 external/wpt/websockets/Send-unpaired-surrogates.any.worker.html?wpt_flags=h2 [ Failure ] -crbug.com/1050754 external/wpt/websockets/basic-auth.any.html?wpt_flags=h2 [ Failure ] -crbug.com/1050754 external/wpt/websockets/basic-auth.any.serviceworker.html?wpt_flags=h2 [ Failure ] -crbug.com/1050754 external/wpt/websockets/basic-auth.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/websockets/basic-auth.any.sharedworker.html?wss [ Failure ] -crbug.com/1050754 external/wpt/websockets/basic-auth.any.worker.html?wpt_flags=h2 [ Failure ] -crbug.com/1050754 external/wpt/websockets/binary/001.html?wpt_flags=h2 [ Failure ] -crbug.com/1050754 external/wpt/websockets/binary/002.html?wpt_flags=h2 [ Failure ] -crbug.com/1050754 external/wpt/websockets/binary/004.html?wpt_flags=h2 [ Failure ] -crbug.com/1050754 external/wpt/websockets/binary/005.html?wpt_flags=h2 [ Failure ] -crbug.com/1050754 external/wpt/websockets/binaryType-wrong-value.any.html?wpt_flags=h2 [ Failure ] -crbug.com/1050754 external/wpt/websockets/binaryType-wrong-value.any.worker.html?wpt_flags=h2 [ Failure ] -crbug.com/1050754 external/wpt/websockets/bufferedAmount-unchanged-by-sync-xhr.any.html?wpt_flags=h2 [ Failure ] -crbug.com/1050754 external/wpt/websockets/bufferedAmount-unchanged-by-sync-xhr.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/websockets/bufferedAmount-unchanged-by-sync-xhr.any.sharedworker.html?wpt_flags=h2 [ Failure ] -crbug.com/1050754 external/wpt/websockets/bufferedAmount-unchanged-by-sync-xhr.any.sharedworker.html?wss [ Failure ] -crbug.com/1050754 external/wpt/websockets/bufferedAmount-unchanged-by-sync-xhr.any.worker.html?wpt_flags=h2 [ Failure ] -crbug.com/1050754 external/wpt/websockets/close-invalid.any.html?wpt_flags=h2 [ Failure ] -crbug.com/1050754 external/wpt/websockets/close-invalid.any.worker.html?wpt_flags=h2 [ Failure ] -crbug.com/1050754 external/wpt/websockets/constructor.any.html?wpt_flags=h2 [ Failure ] -crbug.com/1050754 external/wpt/websockets/constructor.any.worker.html?wpt_flags=h2 [ Failure ] -crbug.com/1050754 external/wpt/websockets/constructor/001.html?wpt_flags=h2 [ Failure ] -crbug.com/1050754 external/wpt/websockets/constructor/004.html?wpt_flags=h2 [ Failure ] -crbug.com/1050754 external/wpt/websockets/constructor/005.html?wpt_flags=h2 [ Failure ] -crbug.com/1050754 external/wpt/websockets/constructor/007.html?wpt_flags=h2 [ Failure ] -crbug.com/1050754 external/wpt/websockets/constructor/010.html?wpt_flags=h2 [ Failure ] -crbug.com/1050754 external/wpt/websockets/constructor/011.html?wpt_flags=h2 [ Failure ] -crbug.com/1050754 external/wpt/websockets/constructor/012.html?wpt_flags=h2 [ Failure ] -crbug.com/1050754 external/wpt/websockets/constructor/017.html?wpt_flags=h2 [ Failure ] -crbug.com/1050754 external/wpt/websockets/constructor/021.html?wpt_flags=h2 [ Failure ] -crbug.com/1050754 external/wpt/websockets/cookies/001.html?wss&wpt_flags=https [ Pass ] -crbug.com/1050754 external/wpt/websockets/cookies/002.html?wss&wpt_flags=https [ Pass ] -crbug.com/1050754 external/wpt/websockets/cookies/005.html?wss&wpt_flags=https [ Pass ] -crbug.com/1050754 external/wpt/websockets/cookies/006.html?wss&wpt_flags=https [ Pass ] -crbug.com/1050754 external/wpt/websockets/eventhandlers.any.html?wpt_flags=h2 [ Failure ] -crbug.com/1050754 external/wpt/websockets/eventhandlers.any.worker.html?wpt_flags=h2 [ Failure ] -crbug.com/1050754 external/wpt/websockets/extended-payload-length.html?wpt_flags=h2 [ Failure ] -crbug.com/1050754 external/wpt/websockets/interfaces/WebSocket/bufferedAmount/bufferedAmount-arraybuffer.html?wpt_flags=h2 [ Failure ] -crbug.com/1050754 external/wpt/websockets/interfaces/WebSocket/bufferedAmount/bufferedAmount-blob.html?wpt_flags=h2 [ Failure ] -crbug.com/1050754 external/wpt/websockets/interfaces/WebSocket/bufferedAmount/bufferedAmount-large.html?wpt_flags=h2 [ Failure ] -crbug.com/1050754 external/wpt/websockets/interfaces/WebSocket/bufferedAmount/bufferedAmount-unicode.html?wpt_flags=h2 [ Failure ] -crbug.com/1050754 external/wpt/websockets/interfaces/WebSocket/events/001.html?wpt_flags=h2 [ Failure ] -crbug.com/1050754 external/wpt/websockets/interfaces/WebSocket/events/002.html?wpt_flags=h2 [ Failure ] -crbug.com/1050754 external/wpt/websockets/interfaces/WebSocket/events/007.html?wpt_flags=h2 [ Failure ] -crbug.com/1050754 external/wpt/websockets/interfaces/WebSocket/events/015.html?wpt_flags=h2 [ Failure ] -crbug.com/1050754 external/wpt/websockets/interfaces/WebSocket/events/017.html?wpt_flags=h2 [ Failure ] -crbug.com/1050754 external/wpt/websockets/interfaces/WebSocket/events/018.html?wpt_flags=h2 [ Failure ] -crbug.com/1050754 external/wpt/websockets/interfaces/WebSocket/send/006.html?wpt_flags=h2 [ Failure ] -crbug.com/1050754 external/wpt/websockets/opening-handshake/001.html?wpt_flags=h2 [ Failure ] -crbug.com/1050754 external/wpt/websockets/remove-own-iframe-during-onerror.window.html?wpt_flags=h2 [ Failure ] -crbug.com/1050754 external/wpt/websockets/stream/tentative/abort.any.html?wpt_flags=h2 [ Failure ] -crbug.com/1050754 external/wpt/websockets/stream/tentative/abort.any.serviceworker.html?wpt_flags=h2 [ Failure ] -crbug.com/1050754 external/wpt/websockets/stream/tentative/abort.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/websockets/stream/tentative/abort.any.sharedworker.html?wpt_flags=h2 [ Failure ] -crbug.com/1050754 external/wpt/websockets/stream/tentative/abort.any.sharedworker.html?wss [ Failure ] -crbug.com/1050754 external/wpt/websockets/stream/tentative/abort.any.worker.html?wpt_flags=h2 [ Failure ] -crbug.com/1050754 external/wpt/websockets/stream/tentative/backpressure-receive.any.serviceworker.html?wpt_flags=h2 [ Failure ] -crbug.com/1050754 external/wpt/websockets/stream/tentative/backpressure-receive.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/websockets/stream/tentative/backpressure-receive.any.sharedworker.html?wpt_flags=h2 [ Failure ] -crbug.com/1050754 external/wpt/websockets/stream/tentative/backpressure-receive.any.sharedworker.html?wss [ Failure ] -crbug.com/1050754 external/wpt/websockets/stream/tentative/backpressure-receive.any.worker.html?wpt_flags=h2 [ Failure ] -crbug.com/1050754 external/wpt/websockets/stream/tentative/backpressure-send.any.html?wpt_flags=h2 [ Failure ] -crbug.com/1050754 external/wpt/websockets/stream/tentative/backpressure-send.any.serviceworker.html?wpt_flags=h2 [ Failure ] -crbug.com/1050754 external/wpt/websockets/stream/tentative/backpressure-send.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/websockets/stream/tentative/backpressure-send.any.sharedworker.html?wss [ Failure ] -crbug.com/1050754 external/wpt/websockets/stream/tentative/backpressure-send.any.worker.html?wpt_flags=h2 [ Failure ] -crbug.com/1050754 external/wpt/websockets/stream/tentative/close.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/websockets/stream/tentative/close.any.sharedworker.html?wss [ Failure ] -crbug.com/1050754 external/wpt/websockets/stream/tentative/constructor.any.html?wpt_flags=h2 [ Failure ] -crbug.com/1050754 external/wpt/websockets/stream/tentative/constructor.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/websockets/stream/tentative/constructor.any.sharedworker.html?wpt_flags=h2 [ Failure ] -crbug.com/1050754 external/wpt/websockets/stream/tentative/constructor.any.sharedworker.html?wss [ Failure ] -crbug.com/1050754 external/wpt/websockets/stream/tentative/constructor.any.worker.html?wpt_flags=h2 [ Failure ] -crbug.com/1050754 external/wpt/webtransport/constructor.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/webtransport/idlharness.any.html [ Failure ] -crbug.com/1050754 external/wpt/webtransport/idlharness.any.serviceworker.html [ Failure ] -crbug.com/1050754 external/wpt/webtransport/idlharness.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/webtransport/idlharness.any.worker.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/anchors/ar_anchor_freefloating_create_move.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/anchors/ar_anchor_freefloating_delay_creation.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/anchors/ar_anchor_freefloating_failure.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/anchors/ar_anchor_freefloating_pause_resume_stop.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/anchors/ar_anchor_states.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/anchors/idlharness.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/ar-module/idlharness.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/ar-module/xrDevice_isSessionSupported_immersive-ar.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/ar-module/xrDevice_requestSession_immersive-ar.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/ar-module/xrSession_environmentBlendMode.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/ar-module/xrSession_interactionMode.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/depth-sensing/cpu/depth_sensing_cpu_dataUnavailable.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/depth-sensing/cpu/depth_sensing_cpu_inactiveFrame.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/depth-sensing/cpu/depth_sensing_cpu_incorrectUsage.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/depth-sensing/cpu/depth_sensing_cpu_luminance_alpha_dataValid.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/depth-sensing/cpu/depth_sensing_cpu_staleView.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/depth-sensing/depth_sensing_notEnabled.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/dom-overlay/ar_dom_overlay.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/dom-overlay/ar_dom_overlay_hit_test.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/dom-overlay/idlharness.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/dom-overlay/nested_fullscreen.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/events_input_source_recreation.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/events_input_sources_change.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/events_referenceSpace_reset_immersive.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/events_session_select.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/events_session_select_subframe.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/events_session_squeeze.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/exclusive_requestFrame_nolayer.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/gamepads-module/idlharness.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/gamepads-module/xrInputSource_gamepad_disconnect.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/gamepads-module/xrInputSource_gamepad_input_registered.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/getInputPose_handedness.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/getInputPose_pointer.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/getViewerPose_emulatedPosition.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/hand-input/idlharness.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/hit-test/ar_hittest_source_cancel.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/hit-test/ar_hittest_subscription_inputSources.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/hit-test/ar_hittest_subscription_refSpaces.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/hit-test/ar_hittest_subscription_states_regular.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/hit-test/ar_hittest_subscription_states_transient.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/hit-test/ar_hittest_subscription_transientInputSources.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/hit-test/idlharness.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/hit-test/xrRay_constructor.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/hit-test/xrRay_matrix.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/layers/xrWebGLBinding_constructor.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/light-estimation/xrFrame_getLightEstimate_oldSession.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/light-estimation/xrFrame_getLightEstimate_staleFrame.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/light-estimation/xrFrame_getLightEstimate_valid.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/light-estimation/xrSession_getLightProbe_ended.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/light-estimation/xrSession_getLightProbe_notEnabled.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/light-estimation/xrSession_getLightProbe_valid.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/light-estimation/xrWebGLBinding_getReflectionCubeMap.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/navigator_xr_sameObject.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/render_state_update.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/render_state_vertical_fov_immersive.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/render_state_vertical_fov_inline.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/webGLCanvasContext_create_xrcompatible.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/webGLCanvasContext_makecompatible_contextlost.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/webGLCanvasContext_makecompatible_reentrant.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/webxr-supported-by-feature-policy.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/webxr_feature_policy.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/xrBoundedReferenceSpace_updates.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/xrDevice_disconnect_ends.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/xrDevice_isSessionSupported_immersive.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/xrDevice_isSessionSupported_immersive_unsupported.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/xrDevice_isSessionSupported_inline.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/xrDevice_requestSession_immersive.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/xrDevice_requestSession_immersive_no_gesture.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/xrDevice_requestSession_immersive_unsupported.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/xrDevice_requestSession_no_mode.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/xrDevice_requestSession_non_immersive_no_gesture.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/xrDevice_requestSession_optionalFeatures.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/xrDevice_requestSession_requiredFeatures_unknown.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/xrFrame_getPose.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/xrFrame_getViewerPose_getPose.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/xrFrame_getViewerPose_getPose_identities.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/xrFrame_lifetime.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/xrFrame_session_sameObject.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/xrInputSource_add_remove.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/xrInputSource_emulatedPosition.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/xrInputSource_profiles.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/xrInputSource_sameObject.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/xrPose_transform_sameObject.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/xrReferenceSpace_originOffset.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/xrReferenceSpace_originOffsetBounded.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/xrReferenceSpace_originOffset_viewer.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/xrReferenceSpace_relationships.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/xrRigidTransform_constructor.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/xrRigidTransform_inverse.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/xrRigidTransform_matrix.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/xrRigidTransform_sameObject.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/xrSession_cancelAnimationFrame.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/xrSession_cancelAnimationFrame_invalidhandle.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/xrSession_end.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/xrSession_features_deviceSupport.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/xrSession_input_events_end.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/xrSession_prevent_multiple_exclusive.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/xrSession_requestAnimationFrame_callback_calls.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/xrSession_requestAnimationFrame_data_valid.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/xrSession_requestAnimationFrame_getViewerPose.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/xrSession_requestAnimationFrame_timestamp.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/xrSession_requestReferenceSpace.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/xrSession_requestReferenceSpace_features.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/xrSession_requestSessionDuringEnd.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/xrSession_sameObject.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/xrSession_viewer_availability.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/xrSession_viewer_referenceSpace.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/xrSession_visibilityState.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/xrStationaryReferenceSpace_floorlevel_updates.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/xrView_eyes.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/xrView_match.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/xrView_oneframeupdate.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/xrView_sameObject.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/xrViewerPose_views_sameObject.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/xrViewport_valid.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/xrWebGLLayer_constructor.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/xrWebGLLayer_framebuffer_draw.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/xrWebGLLayer_framebuffer_sameObject.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/xrWebGLLayer_framebuffer_scale.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/xrWebGLLayer_opaque_framebuffer.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/xrWebGLLayer_opaque_framebuffer_stencil.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/xrWebGLLayer_viewports.https.html [ Failure ] -crbug.com/1050754 external/wpt/window-segments/getWindowSegments.https.tentative.html [ Failure ] -crbug.com/1050754 external/wpt/workers/SharedWorker-MessageEvent-source.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/workers/SharedWorker-constructor.html [ Failure ] -crbug.com/1050754 external/wpt/workers/SharedWorker-detach-frame-in-error-event.html [ Timeout ] -crbug.com/1050754 external/wpt/workers/SharedWorker-exception-propagation.html [ Failure ] -crbug.com/1050754 external/wpt/workers/SharedWorker-exception.html [ Failure ] -crbug.com/1050754 external/wpt/workers/SharedWorker-replace-EventHandler.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/workers/SharedWorker-script-error.html [ Failure ] -crbug.com/1050754 external/wpt/workers/SharedWorker-simple.html [ Failure ] -crbug.com/1050754 external/wpt/workers/SharedWorkerPerformanceNow.html [ Failure ] -crbug.com/1050754 external/wpt/workers/SharedWorker_blobUrl.html [ Failure ] -crbug.com/1050754 external/wpt/workers/SharedWorker_dataUrl.html [ Timeout ] -crbug.com/1050754 external/wpt/workers/Worker-base64.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/workers/Worker-constructor-proto.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/workers/Worker-custom-event.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/workers/Worker-location.sub.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/workers/Worker-replace-event-handler.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/workers/Worker-replace-global-constructor.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/workers/Worker-replace-self.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/workers/Worker-timeout-decreasing-order.html [ Failure Pass ] -crbug.com/1050754 external/wpt/workers/WorkerNavigator-hardware-concurrency.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/workers/WorkerNavigator.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/workers/abrupt-completion.html [ Failure ] -crbug.com/1050754 external/wpt/workers/baseurl/alpha/importScripts-in-sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/workers/baseurl/alpha/xhr-in-sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/workers/constructors/SharedWorker/Infinity-arguments.html [ Failure ] -crbug.com/1050754 external/wpt/workers/constructors/SharedWorker/NaN-arguments.html [ Failure ] -crbug.com/1050754 external/wpt/workers/constructors/SharedWorker/URLMismatchError.htm [ Failure ] -crbug.com/1050754 external/wpt/workers/constructors/SharedWorker/dummy-name.html [ Failure ] -crbug.com/1050754 external/wpt/workers/constructors/SharedWorker/dummy-shared-worker.html [ Failure ] -crbug.com/1050754 external/wpt/workers/constructors/SharedWorker/empty-name.html [ Failure ] -crbug.com/1050754 external/wpt/workers/constructors/SharedWorker/global-members.html [ Failure ] -crbug.com/1050754 external/wpt/workers/constructors/SharedWorker/name.html [ Failure ] -crbug.com/1050754 external/wpt/workers/constructors/SharedWorker/no-arguments-ctor.html [ Failure ] -crbug.com/1050754 external/wpt/workers/constructors/SharedWorker/null-arguments.html [ Failure ] -crbug.com/1050754 external/wpt/workers/constructors/SharedWorker/number-arguments.html [ Failure ] -crbug.com/1050754 external/wpt/workers/constructors/SharedWorker/port-onmessage.html [ Failure ] -crbug.com/1050754 external/wpt/workers/constructors/SharedWorker/port-properties.html [ Failure ] -crbug.com/1050754 external/wpt/workers/constructors/SharedWorker/port-readonly.html [ Failure ] -crbug.com/1050754 external/wpt/workers/constructors/SharedWorker/same-origin.html [ Failure ] -crbug.com/1050754 external/wpt/workers/constructors/SharedWorker/undefined-arguments.html [ Failure ] -crbug.com/1050754 external/wpt/workers/constructors/SharedWorker/unexpected-global-properties.html [ Failure ] -crbug.com/1050754 external/wpt/workers/data-url-shared.html [ Timeout ] -crbug.com/1050754 external/wpt/workers/examples/general.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/workers/examples/onconnect.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/workers/importscripts_mime.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/workers/interfaces/SharedWorkerGlobalScope/name/getting.html [ Failure ] -crbug.com/1050754 external/wpt/workers/interfaces/SharedWorkerGlobalScope/name/setting.html [ Failure ] -crbug.com/1050754 external/wpt/workers/interfaces/WorkerGlobalScope/location/redirect-sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/workers/interfaces/WorkerGlobalScope/location/returns-same-object.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/workers/interfaces/WorkerGlobalScope/self.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/workers/interfaces/WorkerUtils/importScripts/catch.sub.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/workers/interfaces/WorkerUtils/importScripts/report-error-cross-origin.sub.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/workers/interfaces/WorkerUtils/importScripts/report-error-redirect-to-cross-origin.sub.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/workers/interfaces/WorkerUtils/importScripts/report-error-same-origin.sub.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/workers/interfaces/WorkerUtils/importScripts/report-error-setTimeout-cross-origin.sub.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/workers/interfaces/WorkerUtils/importScripts/report-error-setTimeout-redirect-to-cross-origin.sub.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/workers/interfaces/WorkerUtils/importScripts/report-error-setTimeout-same-origin.sub.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/workers/modules/shared-worker-import-blob-url.window.html [ Failure ] -crbug.com/1050754 external/wpt/workers/modules/shared-worker-import-csp.html [ Failure ] -crbug.com/1050754 external/wpt/workers/modules/shared-worker-import-data-url-cross-origin.html [ Failure ] -crbug.com/1050754 external/wpt/workers/modules/shared-worker-import-data-url.window.html [ Failure ] -crbug.com/1050754 external/wpt/workers/modules/shared-worker-import-failure.html [ Failure ] -crbug.com/1050754 external/wpt/workers/modules/shared-worker-import-referrer.html [ Failure ] -crbug.com/1050754 external/wpt/workers/modules/shared-worker-import.window.html [ Failure ] -crbug.com/1050754 external/wpt/workers/modules/shared-worker-options-credentials.html [ Failure ] -crbug.com/1050754 external/wpt/workers/modules/shared-worker-options-type.html [ Failure ] -crbug.com/1050754 external/wpt/workers/modules/shared-worker-parse-error-failure.html [ Failure ] -crbug.com/1050754 external/wpt/workers/name-property.html [ Failure ] -crbug.com/1050754 external/wpt/workers/semantics/encodings/004.html [ Failure ] -crbug.com/1050754 external/wpt/workers/semantics/interface-objects/004.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/workers/semantics/multiple-workers/001.html [ Failure ] -crbug.com/1050754 external/wpt/workers/semantics/multiple-workers/004.html [ Failure ] -crbug.com/1050754 external/wpt/workers/semantics/multiple-workers/008.html [ Failure ] -crbug.com/1050754 external/wpt/workers/semantics/multiple-workers/exposure.any.html [ Failure ] -crbug.com/1050754 external/wpt/workers/semantics/reporting-errors/001.html [ Failure ] -crbug.com/1050754 external/wpt/workers/semantics/reporting-errors/002.html [ Failure ] -crbug.com/1050754 external/wpt/workers/semantics/reporting-errors/003.html [ Failure ] -crbug.com/1050754 external/wpt/workers/semantics/reporting-errors/004.html [ Failure ] -crbug.com/1050754 external/wpt/workers/semantics/run-a-worker/002.html [ Failure ] -crbug.com/1050754 external/wpt/workers/semantics/run-a-worker/003.html [ Failure ] -crbug.com/1050754 external/wpt/workers/semantics/structured-clone/shared.html [ Failure ] -crbug.com/1050754 external/wpt/workers/semantics/xhr/003.html [ Failure ] -crbug.com/1050754 external/wpt/workers/semantics/xhr/004.html [ Failure ] -crbug.com/1050754 external/wpt/workers/semantics/xhr/006.html [ Failure ] -crbug.com/1050754 external/wpt/workers/shared-worker-from-blob-url.window.html [ Failure ] -crbug.com/1050754 external/wpt/workers/shared-worker-in-data-url-context.window.html [ Failure Timeout ] -crbug.com/1050754 external/wpt/workers/shared-worker-name-via-options.html [ Failure ] -crbug.com/1050754 external/wpt/workers/shared-worker-options-mismatch.html [ Failure ] -crbug.com/1050754 external/wpt/workers/shared-worker-parse-error-failure.html [ Failure ] -crbug.com/1050754 external/wpt/worklets/paint-worklet-service-worker-interception.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/xhr/abort-after-send.any.html [ Failure Pass ] -crbug.com/1050754 external/wpt/xhr/abort-during-upload.any.worker.html [ Failure Pass ] -crbug.com/1050754 external/wpt/xhr/access-control-preflight-headers-sync.htm [ Failure Pass ] -crbug.com/1050754 external/wpt/xhr/event-timeout-order.any.worker.html [ Crash Failure Pass ] -crbug.com/1050754 external/wpt/xhr/formdata/constructor.any.html [ Failure Pass ] -crbug.com/1050754 external/wpt/xhr/formdata/constructor.any.worker.html [ Failure Pass ] -crbug.com/1050754 external/wpt/xhr/getresponseheader-unsent-opened-state.htm [ Failure Pass ] -crbug.com/1050754 external/wpt/xhr/open-url-redirected-sharedworker-origin.htm [ Failure ] -crbug.com/1050754 external/wpt/xhr/over-1-meg.any.html [ Failure Pass ] -crbug.com/1050754 external/wpt/xhr/over-1-meg.any.worker.html [ Failure Pass ] -crbug.com/1050754 external/wpt/xhr/sync-no-timeout.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/xhr/xhr-timeout-longtask.any.html [ Failure Pass ] - -# update on Jun 2nd -crbug.com/1050754 external/wpt/eventsource/eventsource-constructor-empty-url.any.sharedworker.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/canvas/element/fill-and-stroke-styles/2d.gradient.conic.negative.rotation.html [ Failure ] -crbug.com/1050754 external/wpt/html/canvas/element/fill-and-stroke-styles/2d.gradient.conic.positive.rotation.html [ Failure ] -crbug.com/1050754 external/wpt/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.conic.negative.rotation.html [ Failure ] -crbug.com/1050754 external/wpt/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.conic.negative.rotation.worker.html [ Failure ] -crbug.com/1050754 external/wpt/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.conic.positive.rotation.html [ Failure ] -crbug.com/1050754 external/wpt/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.conic.positive.rotation.worker.html [ Failure ] -crbug.com/1050754 external/wpt/resource-timing/sizes-cache.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/resource-timing/sizes-redirect.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/web-bundle/subresource-loading/csp-blocked.https.tentative.html [ Failure ] -crbug.com/1050754 external/wpt/video-rvfc/request-video-frame-callback.html [ Timeout ] - -# update on 06/03/2021 -crbug.com/1050754 external/wpt/html/cross-origin-embedder-policy/credentialless/reporting-subresource-corp.tentative.https.html [ Failure ] -crbug.com/1050754 external/wpt/html/cross-origin-embedder-policy/reporting-to-endpoint.https.html [ Failure ] -crbug.com/1050754 external/wpt/uievents/interface/keyboard-accesskey-click-event.html [ Failure Pass ] -crbug.com/1050754 external/wpt/webcodecs/image-decoder.https.any.html [ Failure ]
diff --git a/third_party/blink/web_tests/android/WebviewWPTExpectations b/third_party/blink/web_tests/android/WebviewWPTExpectations deleted file mode 100644 index 8566a2f..0000000 --- a/third_party/blink/web_tests/android/WebviewWPTExpectations +++ /dev/null
@@ -1,5280 +0,0 @@ -# results: [ Failure Crash Timeout Pass Skip ] - -# This file will be used to add override expectations for WPT tests when running on Webview. -# Expectations with bug crbug.com/1050754 were created as preliminary expectations in CL -# crrev.com/c/2070826. Several test expectations below will be moved to the AndroidWPTNeverFixTests -# file. When the test failures below are triaged, new bugs will be created and we will change the -# bug for the expectation to the new bug. - -# COEP used not to be enabled on Webview. -# TODO(arthursonzogni): COEP has now been enabled: -# https://chromium-review.googlesource.com/c/chromium/src/+/2485507 -# Check again those tests. They might pass. -crbug.com/1140432 external/wpt/html/cross-origin-embedder-policy/blob.https.html [ Failure Pass ] -crbug.com/1140432 external/wpt/html/cross-origin-embedder-policy/cache-storage-reporting-document.https.html [ Pass Timeout ] -crbug.com/1140432 external/wpt/html/cross-origin-embedder-policy/cache-storage-reporting-service-worker.https.html [ Failure Pass ] -crbug.com/1140432 external/wpt/html/cross-origin-embedder-policy/coep-frame-javascript.https.html [ Failure Pass ] -crbug.com/1140432 external/wpt/html/cross-origin-embedder-policy/coep-on-response-from-service-worker.https.html [ Failure Pass ] -crbug.com/1140432 external/wpt/html/cross-origin-embedder-policy/data.https.html [ Failure Pass ] -crbug.com/1140432 external/wpt/html/cross-origin-embedder-policy/dedicated-worker-cache-storage.https.html [ Failure Pass ] -crbug.com/1140432 external/wpt/html/cross-origin-embedder-policy/dedicated-worker.https.html [ Pass Timeout ] -crbug.com/1140432 external/wpt/html/cross-origin-embedder-policy/javascript.https.html [ Failure Pass ] -crbug.com/1140432 external/wpt/html/cross-origin-embedder-policy/none-sw-from-require-corp.https.html [ Failure Pass ] -crbug.com/1140432 external/wpt/html/cross-origin-embedder-policy/none.https.html [ Failure Timeout ] -crbug.com/1140432 external/wpt/html/cross-origin-embedder-policy/report-only-require-corp.https.html [ Timeout ] -crbug.com/1140432 external/wpt/html/cross-origin-embedder-policy/reporting-navigation.https.html [ Failure Pass ] -crbug.com/1140432 external/wpt/html/cross-origin-embedder-policy/reporting-to-endpoint.https.html [ Failure ] -crbug.com/1140432 external/wpt/html/cross-origin-embedder-policy/require-corp-about-blank.https.html [ Failure Pass ] -crbug.com/1140432 external/wpt/html/cross-origin-embedder-policy/require-corp-about-srcdoc.https.html [ Failure Pass ] -crbug.com/1140432 external/wpt/html/cross-origin-embedder-policy/require-corp-load-from-cache-storage.https.html [ Failure Pass ] -crbug.com/1140432 external/wpt/html/cross-origin-embedder-policy/require-corp-sw-from-none.https.html [ Failure Pass ] -crbug.com/1140432 external/wpt/html/cross-origin-embedder-policy/require-corp-sw-from-require-corp.https.html [ Failure Pass ] -crbug.com/1140432 external/wpt/html/cross-origin-embedder-policy/require-corp-sw.https.html [ Failure Pass ] -crbug.com/1140432 external/wpt/html/cross-origin-embedder-policy/require-corp.https.html [ Timeout ] -crbug.com/1140432 external/wpt/html/cross-origin-embedder-policy/sandbox.https.html [ Failure Pass ] -crbug.com/1140432 external/wpt/html/cross-origin-embedder-policy/service-worker-cache-storage.https.html [ Failure Pass ] -crbug.com/1140432 external/wpt/html/cross-origin-embedder-policy/srcdoc.https.html [ Failure Pass ] - -# COOP is not enabled on webview yet. See https://crbug.com/1179201 -crbug.com/1179201 external/wpt/html/cross-origin-opener-policy/blob-popup.https.html [ Failure Pass ] -crbug.com/1179201 external/wpt/html/cross-origin-opener-policy/coep-blob-popup.https.html [ Pass Timeout ] -crbug.com/1179201 external/wpt/html/cross-origin-opener-policy/coep-navigate-popup.https.html?0-1 [ Timeout ] -crbug.com/1179201 external/wpt/html/cross-origin-opener-policy/coep-navigate-popup.https.html?2-3 [ Failure Timeout ] -crbug.com/1179201 external/wpt/html/cross-origin-opener-policy/coep-navigate-popup.https.html?4-last [ Timeout ] -crbug.com/1179201 external/wpt/html/cross-origin-opener-policy/coep-redirect.https.html [ Timeout ] -crbug.com/1179201 external/wpt/html/cross-origin-opener-policy/coep.https.html [ Timeout ] -crbug.com/1179201 external/wpt/html/cross-origin-opener-policy/coop-csp-sandbox.https.html [ Failure ] -crbug.com/1179201 external/wpt/html/cross-origin-opener-policy/coop-navigated-history-popup.https.html [ Failure ] -crbug.com/1179201 external/wpt/html/cross-origin-opener-policy/coop-navigated-popup.https.html [ Failure ] -crbug.com/1179201 external/wpt/html/cross-origin-opener-policy/coop-sandbox.https.html [ Failure Timeout ] -crbug.com/1179201 external/wpt/html/cross-origin-opener-policy/header-parsing.https.html [ Timeout ] -crbug.com/1179201 external/wpt/html/cross-origin-opener-policy/historical/coep-navigate-popup-unsafe-inherit.https.html [ Timeout ] -crbug.com/1179201 external/wpt/html/cross-origin-opener-policy/historical/popup-same-origin-unsafe-allow-outgoing-with-cross-origin.https.html [ Timeout ] -crbug.com/1179201 external/wpt/html/cross-origin-opener-policy/historical/popup-same-origin-unsafe-allow-outgoing-with-same-origin.https.html [ Timeout ] -crbug.com/1179201 external/wpt/html/cross-origin-opener-policy/historical/popup-same-origin-unsafe-allow-outgoing-with-same-site.https.html [ Timeout ] -crbug.com/1179201 external/wpt/html/cross-origin-opener-policy/historical/popup-same-site-unsafe-allow-outgoing-with-cross-origin.https.html [ Timeout ] -crbug.com/1179201 external/wpt/html/cross-origin-opener-policy/historical/popup-same-site-unsafe-allow-outgoing-with-same-origin.https.html [ Timeout ] -crbug.com/1179201 external/wpt/html/cross-origin-opener-policy/historical/popup-same-site-unsafe-allow-outgoing-with-same-site.https.html [ Timeout ] -crbug.com/1179201 external/wpt/html/cross-origin-opener-policy/historical/popup-same-site-with-cross-origin.https.html [ Timeout ] -crbug.com/1179201 external/wpt/html/cross-origin-opener-policy/historical/popup-same-site-with-same-origin.https.html [ Timeout ] -crbug.com/1179201 external/wpt/html/cross-origin-opener-policy/historical/popup-same-site-with-same-site.https.html [ Timeout ] -crbug.com/1179201 external/wpt/html/cross-origin-opener-policy/iframe-popup-same-origin-allow-popups-to-same-origin-allow-popups.https.html [ Timeout ] -crbug.com/1179201 external/wpt/html/cross-origin-opener-policy/iframe-popup-same-origin-allow-popups-to-same-origin.https.html [ Timeout ] -crbug.com/1179201 external/wpt/html/cross-origin-opener-policy/iframe-popup-same-origin-allow-popups-to-unsafe-none.https.html [ Timeout ] -crbug.com/1179201 external/wpt/html/cross-origin-opener-policy/iframe-popup-same-origin-to-same-origin.https.html [ Timeout ] -crbug.com/1179201 external/wpt/html/cross-origin-opener-policy/iframe-popup-same-origin-to-unsafe-none.https.html [ Timeout ] -crbug.com/1179201 external/wpt/html/cross-origin-opener-policy/iframe-popup-unsafe-none-to-same-origin.https.html [ Timeout ] -crbug.com/1179201 external/wpt/html/cross-origin-opener-policy/iframe-popup-unsafe-none-to-unsafe-none.https.html [ Timeout ] -crbug.com/1179201 external/wpt/html/cross-origin-opener-policy/javascript-url.https.html [ Timeout ] -crbug.com/1179201 external/wpt/html/cross-origin-opener-policy/no-https.html [ Failure Pass ] -crbug.com/1179201 external/wpt/html/cross-origin-opener-policy/popup-coop-by-sw-from-coop.https.html [ Failure ] -crbug.com/1179201 external/wpt/html/cross-origin-opener-policy/popup-coop-by-sw.https.html [ Failure ] -crbug.com/1179201 external/wpt/html/cross-origin-opener-policy/popup-redirect-cache.https.html [ Timeout ] -crbug.com/1179201 external/wpt/html/cross-origin-opener-policy/popup-redirect-same-origin-allow-popups.https.html [ Failure ] -crbug.com/1179201 external/wpt/html/cross-origin-opener-policy/popup-same-origin-allow-popups-with-cross-origin.https.html [ Timeout ] -crbug.com/1179201 external/wpt/html/cross-origin-opener-policy/popup-same-origin-allow-popups-with-same-origin.https.html [ Timeout ] -crbug.com/1179201 external/wpt/html/cross-origin-opener-policy/popup-same-origin-allow-popups-with-same-site.https.html [ Timeout ] -crbug.com/1179201 external/wpt/html/cross-origin-opener-policy/popup-same-origin-with-cross-origin.https.html [ Timeout ] -crbug.com/1179201 external/wpt/html/cross-origin-opener-policy/popup-same-origin-with-same-origin.https.html [ Timeout ] -crbug.com/1179201 external/wpt/html/cross-origin-opener-policy/popup-same-origin-with-same-site.https.html [ Timeout ] -crbug.com/1179201 external/wpt/html/cross-origin-opener-policy/popup-unsafe-none-with-cross-origin.https.html [ Timeout ] -crbug.com/1179201 external/wpt/html/cross-origin-opener-policy/popup-unsafe-none-with-same-origin.https.html [ Timeout ] -crbug.com/1179201 external/wpt/html/cross-origin-opener-policy/popup-unsafe-none-with-same-site.https.html [ Timeout ] -crbug.com/1179201 external/wpt/html/cross-origin-opener-policy/popup-unspecified-with-cross-origin.https.html [ Timeout ] -crbug.com/1179201 external/wpt/html/cross-origin-opener-policy/popup-unspecified-with-same-origin.https.html [ Timeout ] -crbug.com/1179201 external/wpt/html/cross-origin-opener-policy/popup-unspecified-with-same-site.https.html [ Timeout ] -crbug.com/1179201 external/wpt/html/cross-origin-opener-policy/popup-with-structured-header.https.html [ Timeout ] -crbug.com/1179201 external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/access-from-coop-page-to-openee_coop-ro.https.html [ Crash Pass Timeout ] -crbug.com/1179201 external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/access-from-coop-page-to-openee_coop-ro_cross-origin.https.html [ Timeout ] -crbug.com/1179201 external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/access-from-coop-page-to-opener_coop-ro.https.html [ Timeout ] -crbug.com/1179201 external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/access-from-coop-page-to-opener_coop-ro_cross-origin.https.html [ Timeout ] -crbug.com/1179201 external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/access-from-coop-page-to-other_coop-ro.https.html [ Timeout ] -crbug.com/1179201 external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/access-from-coop-page-to-other_coop-ro_cross-origin.https.html [ Timeout ] -crbug.com/1179201 external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/access-to-coop-page-from-openee_coop-ro.https.html [ Timeout ] -crbug.com/1179201 external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/access-to-coop-page-from-openee_coop-ro_cross-origin.https.html [ Timeout ] -crbug.com/1179201 external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/access-to-coop-page-from-opener_coop-ro.https.html [ Timeout ] -crbug.com/1179201 external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/access-to-coop-page-from-opener_coop-ro_cross-origin.https.html [ Timeout ] -crbug.com/1179201 external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/access-to-coop-page-from-other_coop-ro.https.html [ Timeout ] -crbug.com/1179201 external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/access-to-coop-page-from-other_coop-ro_cross-origin.https.html [ Timeout ] -crbug.com/1179201 external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/property-blur.https.html [ Timeout ] -crbug.com/1179201 external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/property-close.https.html [ Timeout ] -crbug.com/1179201 external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/property-closed.https.html [ Timeout ] -crbug.com/1179201 external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/property-focus.https.html [ Timeout ] -crbug.com/1179201 external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/property-frames.https.html [ Timeout ] -crbug.com/1179201 external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/property-indexed-getter.https.html [ Failure ] -crbug.com/1179201 external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/property-length.https.html [ Timeout ] -crbug.com/1179201 external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/property-location-get.https.html [ Timeout ] -crbug.com/1179201 external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/property-location-set.https.html [ Timeout ] -crbug.com/1179201 external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/property-named-getter.https.html [ Failure ] -crbug.com/1179201 external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/property-opener-get.https.html [ Timeout ] -crbug.com/1179201 external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/property-opener-set.https.html [ Timeout ] -crbug.com/1179201 external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/property-postmessage-1.https.html [ Timeout ] -crbug.com/1179201 external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/property-postmessage-2.https.html [ Timeout ] -crbug.com/1179201 external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/property-self.https.html [ Timeout ] -crbug.com/1179201 external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/property-top.https.html [ Timeout ] -crbug.com/1179201 external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/property-window.https.html [ Timeout ] -crbug.com/1179201 external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/report-to-both_coop-ro.https.html [ Timeout ] -crbug.com/1179201 external/wpt/html/cross-origin-opener-policy/reporting/access-reporting/reporting-observer.html [ Failure Timeout ] -crbug.com/1179201 external/wpt/html/cross-origin-opener-policy/reporting/navigation-reporting/report-only-four-reports.https.html [ Failure ] -crbug.com/1179201 external/wpt/html/cross-origin-opener-policy/reporting/navigation-reporting/report-only-from-unsafe-none.https.html [ Failure ] -crbug.com/1179201 external/wpt/html/cross-origin-opener-policy/reporting/navigation-reporting/report-only-same-origin-report-to.https.html [ Failure ] -crbug.com/1179201 external/wpt/html/cross-origin-opener-policy/reporting/navigation-reporting/report-only-same-origin.https.html [ Failure ] -crbug.com/1179201 external/wpt/html/cross-origin-opener-policy/reporting/navigation-reporting/reporting-coop-navigated-popup.https.html [ Failure ] -crbug.com/1179201 external/wpt/html/cross-origin-opener-policy/reporting/navigation-reporting/reporting-popup-same-origin-allow-popups-report-to.https.html [ Failure ] -crbug.com/1179201 external/wpt/html/cross-origin-opener-policy/reporting/navigation-reporting/reporting-popup-same-origin-coep-report-to.https.html [ Failure ] -crbug.com/1179201 external/wpt/html/cross-origin-opener-policy/reporting/navigation-reporting/reporting-popup-same-origin-report-to.https.html [ Failure ] -crbug.com/1179201 external/wpt/html/cross-origin-opener-policy/reporting/navigation-reporting/reporting-popup-same-origin.https.html [ Failure ] -crbug.com/1179201 external/wpt/html/cross-origin-opener-policy/reporting/navigation-reporting/reporting-popup-unsafe-none-report-to.https.html [ Failure ] -crbug.com/1179201 external/wpt/html/cross-origin-opener-policy/resource-popup.https.html [ Timeout ] - -# https://crbug.com/154571: SharedWorker is not supported on Android. -crbug.com/1190392 external/wpt/trusted-types/WorkerGlobalScope-eval.html [ Failure ] -crbug.com/1190392 external/wpt/trusted-types/WorkerGlobalScope-importScripts.html [ Failure ] -crbug.com/1190392 external/wpt/trusted-types/worker-constructor.https.html [ Failure ] - -# Add untriaged failures in this block -crbug.com/1050754 external/wpt/FileAPI/file/File-constructor.html [ Failure Pass ] -crbug.com/1050754 external/wpt/FileAPI/historical.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/FileAPI/reading-data-section/filereader_events.any.html [ Failure Pass ] -crbug.com/1050754 external/wpt/FileAPI/reading-data-section/filereader_events.any.worker.html [ Failure Pass ] -crbug.com/1050754 external/wpt/FileAPI/reading-data-section/filereader_result.html [ Failure Pass ] -crbug.com/1050754 external/wpt/FileAPI/url/sandboxed-iframe.html [ Failure Pass ] -crbug.com/1050754 external/wpt/FileAPI/url/url-charset.window.html [ Pass Timeout ] -crbug.com/1050754 external/wpt/FileAPI/url/url-in-tags-revoke.window.html [ Timeout ] -crbug.com/1050754 external/wpt/FileAPI/url/url-reload.window.html [ Failure Pass ] -crbug.com/1050754 external/wpt/IndexedDB/file_support.sub.html [ Failure ] -crbug.com/1050754 external/wpt/IndexedDB/idbobjectstore-rename-abort.html [ Failure Pass ] -crbug.com/1050754 external/wpt/IndexedDB/idbobjectstore_putall.tentative.any.html [ Failure ] -crbug.com/1050754 external/wpt/IndexedDB/idbobjectstore_putall.tentative.any.worker.html [ Failure ] -crbug.com/1050754 external/wpt/IndexedDB/idlharness.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/IndexedDB/key-generators/reading-autoincrement-indexes-cursors.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/IndexedDB/key-generators/reading-autoincrement-indexes.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/IndexedDB/key-generators/reading-autoincrement-store-cursors.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/IndexedDB/key-generators/reading-autoincrement-store.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/IndexedDB/transaction-abort-generator-revert.html [ Failure Pass ] -crbug.com/1050754 external/wpt/WebCryptoAPI/derive_bits_keys/ecdh_bits.https.any.html [ Failure Pass ] -crbug.com/1050754 external/wpt/WebCryptoAPI/derive_bits_keys/ecdh_bits.https.any.worker.html [ Failure Pass ] -crbug.com/1050754 external/wpt/WebCryptoAPI/derive_bits_keys/hkdf.https.any.html?1-1000 [ Failure Pass ] -crbug.com/1050754 external/wpt/WebCryptoAPI/derive_bits_keys/hkdf.https.any.html?1001-2000 [ Failure Pass ] -crbug.com/1050754 external/wpt/WebCryptoAPI/derive_bits_keys/hkdf.https.any.html?2001-3000 [ Failure Pass ] -crbug.com/1050754 external/wpt/WebCryptoAPI/derive_bits_keys/hkdf.https.any.html?3001-last [ Failure Pass ] -crbug.com/1050754 external/wpt/WebCryptoAPI/derive_bits_keys/hkdf.https.any.worker.html?1-1000 [ Failure Pass ] -crbug.com/1050754 external/wpt/WebCryptoAPI/derive_bits_keys/hkdf.https.any.worker.html?1001-2000 [ Failure Pass ] -crbug.com/1050754 external/wpt/WebCryptoAPI/derive_bits_keys/hkdf.https.any.worker.html?2001-3000 [ Failure Pass ] -crbug.com/1050754 external/wpt/WebCryptoAPI/derive_bits_keys/hkdf.https.any.worker.html?3001-last [ Failure Pass ] -crbug.com/1050754 external/wpt/WebCryptoAPI/derive_bits_keys/pbkdf2.https.any.html?1-1000 [ Failure Pass ] -crbug.com/1050754 external/wpt/WebCryptoAPI/derive_bits_keys/pbkdf2.https.any.html?1001-2000 [ Failure Pass ] -crbug.com/1050754 external/wpt/WebCryptoAPI/derive_bits_keys/pbkdf2.https.any.html?2001-3000 [ Failure Pass ] -crbug.com/1050754 external/wpt/WebCryptoAPI/derive_bits_keys/pbkdf2.https.any.html?3001-4000 [ Failure Pass ] -crbug.com/1050754 external/wpt/WebCryptoAPI/derive_bits_keys/pbkdf2.https.any.html?4001-5000 [ Failure Pass ] -crbug.com/1050754 external/wpt/WebCryptoAPI/derive_bits_keys/pbkdf2.https.any.html?5001-6000 [ Failure Pass ] -crbug.com/1050754 external/wpt/WebCryptoAPI/derive_bits_keys/pbkdf2.https.any.html?6001-7000 [ Failure Pass ] -crbug.com/1050754 external/wpt/WebCryptoAPI/derive_bits_keys/pbkdf2.https.any.html?7001-8000 [ Failure Pass ] -crbug.com/1050754 external/wpt/WebCryptoAPI/derive_bits_keys/pbkdf2.https.any.html?8001-last [ Failure Pass ] -crbug.com/1050754 external/wpt/WebCryptoAPI/derive_bits_keys/pbkdf2.https.any.worker.html?1-1000 [ Failure Pass ] -crbug.com/1050754 external/wpt/WebCryptoAPI/derive_bits_keys/pbkdf2.https.any.worker.html?1001-2000 [ Failure Pass ] -crbug.com/1050754 external/wpt/WebCryptoAPI/derive_bits_keys/pbkdf2.https.any.worker.html?2001-3000 [ Failure Pass ] -crbug.com/1050754 external/wpt/WebCryptoAPI/derive_bits_keys/pbkdf2.https.any.worker.html?3001-4000 [ Failure Pass ] -crbug.com/1050754 external/wpt/WebCryptoAPI/derive_bits_keys/pbkdf2.https.any.worker.html?4001-5000 [ Failure Pass ] -crbug.com/1050754 external/wpt/WebCryptoAPI/derive_bits_keys/pbkdf2.https.any.worker.html?5001-6000 [ Failure Pass ] -crbug.com/1050754 external/wpt/WebCryptoAPI/derive_bits_keys/pbkdf2.https.any.worker.html?6001-7000 [ Failure Pass ] -crbug.com/1050754 external/wpt/WebCryptoAPI/derive_bits_keys/pbkdf2.https.any.worker.html?7001-8000 [ Failure Pass ] -crbug.com/1050754 external/wpt/WebCryptoAPI/derive_bits_keys/pbkdf2.https.any.worker.html?8001-last [ Failure Pass ] -crbug.com/1050754 external/wpt/WebCryptoAPI/encrypt_decrypt/aes_cbc.https.worker.html [ Failure Pass ] -crbug.com/1050754 external/wpt/WebCryptoAPI/encrypt_decrypt/aes_ctr.https.worker.html [ Failure Pass ] -crbug.com/1050754 external/wpt/WebCryptoAPI/encrypt_decrypt/aes_gcm.https.worker.html [ Failure Pass ] -crbug.com/1050754 external/wpt/WebCryptoAPI/encrypt_decrypt/test_aes_cbc.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/WebCryptoAPI/encrypt_decrypt/test_aes_ctr.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/WebCryptoAPI/encrypt_decrypt/test_aes_gcm.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/WebCryptoAPI/generateKey/failures_AES-CBC.https.any.html [ Failure Pass ] -crbug.com/1050754 external/wpt/WebCryptoAPI/generateKey/failures_AES-CBC.https.any.worker.html [ Failure Pass ] -crbug.com/1050754 external/wpt/WebCryptoAPI/generateKey/failures_AES-CTR.https.any.html [ Failure Pass ] -crbug.com/1050754 external/wpt/WebCryptoAPI/generateKey/failures_AES-CTR.https.any.worker.html [ Failure Pass ] -crbug.com/1050754 external/wpt/WebCryptoAPI/generateKey/failures_AES-GCM.https.any.html [ Failure Pass ] -crbug.com/1050754 external/wpt/WebCryptoAPI/generateKey/failures_AES-GCM.https.any.worker.html [ Failure Pass ] -crbug.com/1050754 external/wpt/WebCryptoAPI/generateKey/failures_AES-KW.https.any.html [ Failure Pass ] -crbug.com/1050754 external/wpt/WebCryptoAPI/generateKey/failures_AES-KW.https.any.worker.html [ Failure Pass ] -crbug.com/1050754 external/wpt/WebCryptoAPI/generateKey/successes_AES-CBC.https.any.html [ Failure Pass ] -crbug.com/1050754 external/wpt/WebCryptoAPI/generateKey/successes_AES-CBC.https.any.worker.html [ Failure Pass ] -crbug.com/1050754 external/wpt/WebCryptoAPI/generateKey/successes_AES-CTR.https.any.html [ Failure Pass ] -crbug.com/1050754 external/wpt/WebCryptoAPI/generateKey/successes_AES-CTR.https.any.worker.html [ Failure Pass ] -crbug.com/1050754 external/wpt/WebCryptoAPI/generateKey/successes_AES-GCM.https.any.html [ Failure Pass ] -crbug.com/1050754 external/wpt/WebCryptoAPI/generateKey/successes_AES-GCM.https.any.worker.html [ Failure Pass ] -crbug.com/1050754 external/wpt/WebCryptoAPI/generateKey/successes_AES-KW.https.any.html [ Failure Pass ] -crbug.com/1050754 external/wpt/WebCryptoAPI/generateKey/successes_AES-KW.https.any.worker.html [ Failure Pass ] -crbug.com/1050754 external/wpt/WebCryptoAPI/historical.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/WebCryptoAPI/import_export/rsa_importKey.https.worker.html [ Pass Timeout ] -crbug.com/1050754 external/wpt/WebCryptoAPI/import_export/symmetric_importKey.https.worker.html [ Failure Pass ] -crbug.com/1050754 external/wpt/WebCryptoAPI/import_export/test_rsa_importKey.https.html [ Pass Timeout ] -crbug.com/1050754 external/wpt/WebCryptoAPI/import_export/test_symmetric_importKey.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/accelerometer/Accelerometer-disabled-by-feature-policy.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/accelerometer/Accelerometer-enabled-by-feature-policy-attribute-redirect-on-load.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/accelerometer/Accelerometer-enabled-by-feature-policy-attribute.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/accelerometer/Accelerometer-enabled-by-feature-policy.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/accelerometer/Accelerometer-enabled-on-self-origin-by-feature-policy.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/accelerometer/Accelerometer-iframe-access.https.html [ Failure ] -crbug.com/1050754 external/wpt/accelerometer/Accelerometer.https.html [ Failure ] -crbug.com/1050754 external/wpt/accelerometer/idlharness.https.window.html [ Failure Pass ] -crbug.com/1050754 external/wpt/ambient-light/AmbientLightSensor-disabled-by-feature-policy.https.html [ Failure ] -crbug.com/1050754 external/wpt/ambient-light/AmbientLightSensor-enabled-by-feature-policy-attribute-redirect-on-load.https.html [ Failure ] -crbug.com/1050754 external/wpt/ambient-light/AmbientLightSensor-enabled-by-feature-policy-attribute.https.html [ Failure ] -crbug.com/1050754 external/wpt/ambient-light/AmbientLightSensor-enabled-by-feature-policy.https.html [ Failure ] -crbug.com/1050754 external/wpt/ambient-light/AmbientLightSensor-enabled-on-self-origin-by-feature-policy.https.html [ Failure ] -crbug.com/1050754 external/wpt/ambient-light/AmbientLightSensor-iframe-access.https.html [ Failure ] -crbug.com/1050754 external/wpt/ambient-light/AmbientLightSensor-supported-by-feature-policy.html [ Failure ] -crbug.com/1050754 external/wpt/ambient-light/AmbientLightSensor.https.html [ Failure ] -crbug.com/1050754 external/wpt/ambient-light/idlharness.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/animation-worklet/animate-multiple-effects-on-different-targets-via-main-thread.https.html [ Failure ] -crbug.com/1050754 external/wpt/animation-worklet/animate-non-accelerated-property.https.html [ Failure ] -crbug.com/1050754 external/wpt/animation-worklet/animation-worklet-inside-iframe.https.html [ Timeout ] -crbug.com/1050754 external/wpt/animation-worklet/animator-with-options.https.html [ Failure ] -crbug.com/1050754 external/wpt/animation-worklet/cancel-non-accelerated-property.https.html [ Failure ] -crbug.com/1050754 external/wpt/animation-worklet/current-time.https.html [ Failure ] -crbug.com/1050754 external/wpt/animation-worklet/idlharness.any.html [ Failure Pass ] -crbug.com/1050754 external/wpt/animation-worklet/idlharness.any.worker.html [ Failure Pass ] -crbug.com/1050754 external/wpt/animation-worklet/inactive-timeline.https.html [ Failure ] -crbug.com/1050754 external/wpt/animation-worklet/multiple-effects-on-same-target-driven-by-individual-local-time.https.html [ Failure ] -crbug.com/1050754 external/wpt/animation-worklet/playback-rate.https.html [ Failure ] -crbug.com/1050754 external/wpt/animation-worklet/scroll-timeline-writing-modes.https.html [ Failure ] -crbug.com/1050754 external/wpt/animation-worklet/stateful-animator.https.html [ Failure ] -crbug.com/1050754 external/wpt/animation-worklet/worklet-animation-animator-name.https.html [ Failure ] -crbug.com/1050754 external/wpt/animation-worklet/worklet-animation-creation.https.html [ Failure ] -crbug.com/1050754 external/wpt/animation-worklet/worklet-animation-duration.https.html [ Failure ] -crbug.com/1050754 external/wpt/animation-worklet/worklet-animation-get-computed-timing-progress-on-worklet-thread.https.html [ Failure ] -crbug.com/1050754 external/wpt/animation-worklet/worklet-animation-local-time-null-1.https.html [ Failure ] -crbug.com/1050754 external/wpt/animation-worklet/worklet-animation-pause.https.html [ Failure ] -crbug.com/1050754 external/wpt/animation-worklet/worklet-animation-play.https.html [ Failure ] -crbug.com/1050754 external/wpt/animation-worklet/worklet-animation-with-effects-from-different-frames.https.html [ Failure ] -crbug.com/1050754 external/wpt/animation-worklet/worklet-animation-with-fill-mode.https.html [ Failure ] -crbug.com/1050754 external/wpt/animation-worklet/worklet-animation-with-invalid-effect.https.html [ Failure ] -crbug.com/1050754 external/wpt/animation-worklet/worklet-animation-without-target.https.html [ Failure ] -crbug.com/1050754 external/wpt/audio-output/idlharness.https.window.html [ Failure Pass ] -crbug.com/1050754 external/wpt/audio-output/setSinkId.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/background-fetch/abort.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/background-fetch/content-security-policy.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/background-fetch/fetch-uploads.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/background-fetch/fetch.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/background-fetch/get-ids.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/background-fetch/get.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/background-fetch/idlharness.https.any.html [ Failure ] -crbug.com/1050754 external/wpt/background-fetch/idlharness.https.any.serviceworker.html [ Failure ] -crbug.com/1050754 external/wpt/background-fetch/idlharness.https.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/background-fetch/idlharness.https.any.worker.html [ Failure ] -crbug.com/1050754 external/wpt/background-fetch/match.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/background-fetch/mixed-content-and-allowed-schemes.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/background-fetch/port-blocking.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/background-fetch/update-ui.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/badging/idlharness.https.any.html [ Failure Pass ] -crbug.com/1050754 external/wpt/badging/idlharness.https.any.worker.html [ Failure Pass ] -crbug.com/1050754 external/wpt/battery-status/battery-allowed-by-feature-policy-attribute-redirect-on-load.https.sub.html [ Failure Pass ] -crbug.com/1050754 external/wpt/battery-status/battery-default-feature-policy.https.sub.html [ Failure Pass ] -crbug.com/1050754 external/wpt/battery-status/battery-disabled-by-feature-policy.https.sub.html [ Failure Pass ] -crbug.com/1050754 external/wpt/battery-status/battery-disallowed-in-cross-origin-iframe.https.sub.html [ Failure Pass ] -crbug.com/1050754 external/wpt/battery-status/battery-insecure-context.html [ Failure Pass ] -crbug.com/1050754 external/wpt/beacon/beacon-redirect.sub.window.html [ Failure Pass ] -crbug.com/1050754 external/wpt/bluetooth/adapter/adapter-absent-getAvailability.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/adapter/adapter-added-getAvailability.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/adapter/adapter-powered-off-getAvailability.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/adapter/adapter-powered-on-getAvailability.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/adapter/adapter-powered-on-off-on-getAvailability.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/adapter/adapter-removed-getAvailability.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/adapter/cross-origin-iframe-getAvailability.sub.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/characteristic/characteristicProperties.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/characteristic/getDescriptor/gen-characteristic-is-removed.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/characteristic/getDescriptor/gen-descriptor-get-same-object.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/characteristic/getDescriptor/gen-service-is-removed.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/characteristic/getDescriptors/gen-characteristic-is-removed-with-uuid.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/characteristic/getDescriptors/gen-characteristic-is-removed.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/characteristic/getDescriptors/gen-descriptor-get-same-object.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/characteristic/getDescriptors/gen-service-is-removed-with-uuid.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/characteristic/getDescriptors/gen-service-is-removed.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/characteristic/notifications/characteristic-is-removed.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/characteristic/notifications/service-is-removed.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/characteristic/readValue/add-multiple-event-listeners.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/characteristic/readValue/characteristic-is-removed.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/characteristic/readValue/event-is-fired.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/characteristic/readValue/gen-characteristic-is-removed.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/characteristic/readValue/read-succeeds.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/characteristic/readValue/read-updates-value.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/characteristic/readValue/service-is-removed.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/characteristic/service-same-from-2-characteristics.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/characteristic/service-same-object.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/characteristic/startNotifications/gen-characteristic-is-removed.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/characteristic/writeValue/buffer-is-detached.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/characteristic/writeValue/characteristic-is-removed.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/characteristic/writeValue/gen-characteristic-is-removed.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/characteristic/writeValue/service-is-removed.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/characteristic/writeValue/write-succeeds.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/characteristic/writeValueWithResponse/buffer-is-detached.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/characteristic/writeValueWithResponse/characteristic-is-removed.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/characteristic/writeValueWithResponse/gen-characteristic-is-removed.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/characteristic/writeValueWithResponse/service-is-removed.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/characteristic/writeValueWithResponse/write-succeeds.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/characteristic/writeValueWithoutResponse/buffer-is-detached.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/characteristic/writeValueWithoutResponse/characteristic-is-removed.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/characteristic/writeValueWithoutResponse/gen-characteristic-is-removed.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/characteristic/writeValueWithoutResponse/service-is-removed.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/characteristic/writeValueWithoutResponse/write-succeeds.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/descriptor/readValue/gen-service-is-removed.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/descriptor/readValue/read-succeeds.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/descriptor/writeValue/buffer-is-detached.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/descriptor/writeValue/gen-service-is-removed.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/device/gattserverdisconnected-event/disconnected.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/device/gattserverdisconnected-event/disconnected_gc.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/device/gattserverdisconnected-event/one-event-per-disconnection.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/device/gattserverdisconnected-event/reconnect-during-disconnected-event.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/device/watchAdvertisements/abort-before-watchAdvertisements.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/device/watchAdvertisements/abort-pending-operation.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/device/watchAdvertisements/abort-signal-stops-events.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/device/watchAdvertisements/abort-subsequent-watchAdvertisements-call-stops-events.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/device/watchAdvertisements/advertisementreceived-event-fired.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/device/watchAdvertisements/concurrent-watchAdvertisements-calls.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/device/watchAdvertisements/service-and-manufacturer-data-filtered-from-event.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/device/watchAdvertisements/subsequent-watchAdvertisements-call.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/device/watchAdvertisements/watching-two-devices-abort-one-watchAdvertisements.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/device/watchAdvertisements/watching-two-devices.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/getDevices/granted-devices-with-services.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/getDevices/no-granted-devices.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/getDevices/returns-same-bluetooth-device-object.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/idl/idlharness.tentative.https.window.html [ Failure Pass ] -crbug.com/1050754 external/wpt/bluetooth/server/getPrimaryService/gen-disconnect-called-before.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/server/getPrimaryService/gen-disconnect-called-during-error.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/server/getPrimaryService/gen-disconnect-called-during-success.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/server/getPrimaryService/gen-disconnect-invalidates-objects.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/server/getPrimaryService/gen-disconnected-device.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/server/getPrimaryService/gen-discovery-complete-no-permission-absent-service.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/server/getPrimaryService/gen-discovery-complete-service-not-found.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/server/getPrimaryService/gen-garbage-collection-ran-during-error.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/server/getPrimaryService/gen-garbage-collection-ran-during-success.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/server/getPrimaryService/gen-get-different-service-after-reconnection.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/server/getPrimaryService/gen-get-same-object.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/server/getPrimaryService/gen-invalid-service-name.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/server/getPrimaryService/gen-no-permission-absent-service.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/server/getPrimaryService/gen-no-permission-for-any-service.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/server/getPrimaryService/gen-no-permission-present-service.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/server/getPrimaryService/gen-service-not-found.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/server/getPrimaryServices/gen-disconnect-called-before-with-uuid.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/server/getPrimaryServices/gen-disconnect-called-before.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/server/getPrimaryServices/gen-disconnect-called-during-error-with-uuid.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/server/getPrimaryServices/gen-disconnect-called-during-error.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/server/getPrimaryServices/gen-disconnect-called-during-success-with-uuid.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/server/getPrimaryServices/gen-disconnect-called-during-success.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/server/getPrimaryServices/gen-disconnect-invalidates-objects-with-uuid.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/server/getPrimaryServices/gen-disconnect-invalidates-objects.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/server/getPrimaryServices/gen-disconnected-device-with-uuid.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/server/getPrimaryServices/gen-disconnected-device.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/server/getPrimaryServices/gen-discovery-complete-no-permission-absent-service-with-uuid.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/server/getPrimaryServices/gen-discovery-complete-service-not-found-with-uuid.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/server/getPrimaryServices/gen-garbage-collection-ran-during-error-with-uuid.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/server/getPrimaryServices/gen-garbage-collection-ran-during-error.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/server/getPrimaryServices/gen-garbage-collection-ran-during-success-with-uuid.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/server/getPrimaryServices/gen-garbage-collection-ran-during-success.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/server/getPrimaryServices/gen-get-different-service-after-reconnection-with-uuid.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/server/getPrimaryServices/gen-get-different-service-after-reconnection.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/server/getPrimaryServices/gen-get-same-object-with-uuid.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/server/getPrimaryServices/gen-get-same-object.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/server/getPrimaryServices/gen-invalid-service-name.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/server/getPrimaryServices/gen-no-permission-absent-service-with-uuid.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/server/getPrimaryServices/gen-no-permission-for-any-service-with-uuid.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/server/getPrimaryServices/gen-no-permission-for-any-service.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/server/getPrimaryServices/gen-no-permission-present-service-with-uuid.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/server/getPrimaryServices/gen-service-not-found-with-uuid.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/service/getCharacteristic/gen-blocklisted-characteristic.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/service/getCharacteristic/gen-characteristic-not-found.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/service/getCharacteristic/gen-garbage-collection-ran-during-error.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/service/getCharacteristic/gen-get-same-object.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/service/getCharacteristic/gen-invalid-characteristic-name.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/service/getCharacteristic/gen-reconnect-during.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/service/getCharacteristic/gen-service-is-removed.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/service/getCharacteristics/gen-blocklisted-characteristic-with-uuid.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/service/getCharacteristics/gen-characteristic-not-found-with-uuid.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/service/getCharacteristics/gen-garbage-collection-ran-during-error-with-uuid.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/service/getCharacteristics/gen-garbage-collection-ran-during-error.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/service/getCharacteristics/gen-get-same-object-with-uuid.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/service/getCharacteristics/gen-get-same-object.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/service/getCharacteristics/gen-invalid-characteristic-name.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/service/getCharacteristics/gen-reconnect-during-with-uuid.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/service/getCharacteristics/gen-reconnect-during.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/service/getCharacteristics/gen-service-is-removed-with-uuid.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/bluetooth/service/getCharacteristics/gen-service-is-removed.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/clear-site-data/executionContexts.sub.html [ Timeout ] -crbug.com/1050754 external/wpt/client-hints/accept-ch-answers.sub.https.html [ Failure ] -crbug.com/1050754 external/wpt/client-hints/accept-ch-cache-revalidation.https.html [ Failure ] -crbug.com/1050754 external/wpt/client-hints/accept-ch-feature-policy-navigation.https.html [ Failure ] -crbug.com/1050754 external/wpt/client-hints/accept-ch-feature-policy.sub.https.html [ Failure ] -crbug.com/1050754 external/wpt/client-hints/accept-ch-no-feature-policy-navigation.https.html [ Failure ] -crbug.com/1050754 external/wpt/client-hints/accept-ch-no-feature-policy.sub.https.html [ Failure ] -crbug.com/1050754 external/wpt/client-hints/accept-ch-stickiness/cross-origin-iframe-redirect-with-fp-delegation.https.html [ Failure ] -crbug.com/1050754 external/wpt/client-hints/accept-ch-stickiness/cross-origin-navigation.https.html [ Failure ] -crbug.com/1050754 external/wpt/client-hints/accept-ch-stickiness/cross-origin-subresource-redirect-with-fp-delegation.https.html [ Failure ] -crbug.com/1050754 external/wpt/client-hints/accept-ch-stickiness/cross-origin-subresource-redirect.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/client-hints/accept-ch-stickiness/cross-origin-subresource-with-feature-policy.https.html [ Failure ] -crbug.com/1050754 external/wpt/client-hints/accept-ch-stickiness/cross-origin-syncxhr-redirect.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/client-hints/accept-ch-stickiness/http-equiv-cross-origin-navigation.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/client-hints/accept-ch-stickiness/http-equiv-same-origin-iframe.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/client-hints/accept-ch-stickiness/http-equiv-same-origin-navigation.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/client-hints/accept-ch-stickiness/same-origin-iframe.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/client-hints/accept-ch-stickiness/same-origin-navigation-no-accept-ch.https.html [ Failure ] -crbug.com/1050754 external/wpt/client-hints/accept-ch-stickiness/same-origin-navigation-redirect.https.html [ Failure ] -crbug.com/1050754 external/wpt/client-hints/accept-ch-stickiness/same-origin-navigation.https.html [ Failure ] -crbug.com/1050754 external/wpt/client-hints/accept-ch-stickiness/same-origin-subresource-redirect-opted-in.https.html [ Failure ] -crbug.com/1050754 external/wpt/client-hints/critical-ch/navigation.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/client-hints/critical-ch/request-count.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/client-hints/http-equiv-accept-ch-merge.https.html [ Failure ] -crbug.com/1050754 external/wpt/client-hints/sec-ch-ua.https.html [ Failure ] -crbug.com/1050754 external/wpt/clipboard-apis/async-html-script-removal.https.html [ Crash ] -crbug.com/1050754 external/wpt/clipboard-apis/async-navigator-clipboard-basics.https.html [ Failure ] -crbug.com/1050754 external/wpt/clipboard-apis/async-svg-script-removal.https.html [ Crash ] -crbug.com/1050754 external/wpt/clipboard-apis/async-write-blobs-read-blobs.https.html [ Crash Failure ] -crbug.com/1050754 external/wpt/clipboard-apis/async-write-html-read-html.https.html [ Crash ] -crbug.com/1050754 external/wpt/clipboard-apis/async-write-image-read-image.https.html [ Crash Failure ] -crbug.com/1050754 external/wpt/clipboard-apis/async-write-svg-read-svg.https.html [ Crash ] -crbug.com/1050754 external/wpt/clipboard-apis/clipboard-item.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/clipboard-apis/detached-iframe/read-on-detaching-iframe.https.html [ Crash Failure ] -crbug.com/1050754 external/wpt/clipboard-apis/detached-iframe/write-on-detaching-iframe.https.html [ Crash Failure ] -crbug.com/1050754 external/wpt/clipboard-apis/detached-iframe/write-read-on-detached-iframe.https.html [ Crash Failure ] -crbug.com/1050754 external/wpt/clipboard-apis/detached-iframe/writeText-readText-on-detached-iframe.https.html [ Crash Failure ] -crbug.com/1050754 external/wpt/clipboard-apis/feature-policy/clipboard-read/clipboard-read-disabled-by-feature-policy.tentative.https.sub.html [ Crash ] -crbug.com/1050754 external/wpt/clipboard-apis/feature-policy/clipboard-read/clipboard-read-enabled-by-feature-policy-attribute-cross-origin-tentative.https.sub.html [ Failure ] -crbug.com/1050754 external/wpt/clipboard-apis/feature-policy/clipboard-read/clipboard-read-enabled-by-feature-policy-attribute-tentative.https.sub.html [ Failure ] -crbug.com/1050754 external/wpt/clipboard-apis/feature-policy/clipboard-read/clipboard-read-enabled-by-feature-policy-cross-origin-tentative.https.sub.html [ Failure ] -crbug.com/1050754 external/wpt/clipboard-apis/feature-policy/clipboard-read/clipboard-read-enabled-by-feature-policy.tentative.https.sub.html [ Crash ] -crbug.com/1050754 external/wpt/clipboard-apis/feature-policy/clipboard-read/clipboard-read-enabled-on-self-origin-by-feature-policy.tentative.https.sub.html [ Crash ] -crbug.com/1050754 external/wpt/clipboard-apis/feature-policy/clipboard-write/clipboard-write-disabled-by-feature-policy.tentative.https.sub.html [ Crash ] -crbug.com/1050754 external/wpt/clipboard-apis/feature-policy/clipboard-write/clipboard-write-enabled-by-feature-policy-attribute-cross-origin-tentative.https.sub.html [ Failure ] -crbug.com/1050754 external/wpt/clipboard-apis/feature-policy/clipboard-write/clipboard-write-enabled-by-feature-policy-attribute-tentative.https.sub.html [ Failure ] -crbug.com/1050754 external/wpt/clipboard-apis/feature-policy/clipboard-write/clipboard-write-enabled-by-feature-policy-cross-origin-tentative.https.sub.html [ Failure ] -crbug.com/1050754 external/wpt/clipboard-apis/feature-policy/clipboard-write/clipboard-write-enabled-by-feature-policy.tentative.https.sub.html [ Crash ] -crbug.com/1050754 external/wpt/clipboard-apis/feature-policy/clipboard-write/clipboard-write-enabled-on-self-origin-by-feature-policy.tentative.https.sub.html [ Crash ] -crbug.com/1050754 external/wpt/clipboard-apis/permissions/readText-denied.https.html [ Crash Failure ] -crbug.com/1050754 external/wpt/clipboard-apis/permissions/readText-granted.https.html [ Crash Failure ] -crbug.com/1050754 external/wpt/clipboard-apis/permissions/writeText-denied.https.html [ Crash Failure ] -crbug.com/1050754 external/wpt/clipboard-apis/permissions/writeText-granted.https.html [ Crash Failure ] -crbug.com/1050754 external/wpt/clipboard-apis/text-write-read/async-write-read.https.html [ Crash Failure ] -crbug.com/1050754 external/wpt/clipboard-apis/text-write-read/async-write-readText.https.html [ Crash Failure ] -crbug.com/1050754 external/wpt/clipboard-apis/text-write-read/async-writeText-read.https.html [ Crash Failure ] -crbug.com/1050754 external/wpt/clipboard-apis/text-write-read/async-writeText-readText.https.html [ Crash Failure ] -crbug.com/1050754 external/wpt/compat/webkit-gradient-comma.html [ Failure Pass ] -crbug.com/1050754 external/wpt/compression/compression-bad-chunks.tentative.any.html [ Failure ] -crbug.com/1050754 external/wpt/compression/compression-bad-chunks.tentative.any.serviceworker.html [ Failure ] -crbug.com/1050754 external/wpt/compression/compression-bad-chunks.tentative.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/compression/compression-bad-chunks.tentative.any.worker.html [ Failure ] -crbug.com/1050754 external/wpt/compression/compression-including-empty-chunk.tentative.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/compression/compression-multiple-chunks.tentative.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/compression/compression-output-length.tentative.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/compression/compression-stream.tentative.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/compression/decompression-buffersource.tentative.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/compression/decompression-constructor-error.tentative.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/compression/decompression-correct-input.tentative.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/compression/decompression-empty-input.tentative.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/compression/decompression-split-chunk.tentative.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/compression/decompression-uint8array-output.tentative.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/contacts/contacts-select.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/content-index/content-index.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/content-index/idlharness.https.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/content-security-policy/connect-src/connect-src-eventsource-blocked.sub.html [ Failure Pass ] -crbug.com/1050754 external/wpt/content-security-policy/connect-src/shared-worker-connect-src-allowed.sub.html [ Failure ] -crbug.com/1050754 external/wpt/content-security-policy/connect-src/shared-worker-connect-src-blocked.sub.html [ Failure ] -crbug.com/1050754 external/wpt/content-security-policy/connect-src/worker-connect-src-blocked.sub.html [ Failure ] -crbug.com/1050754 external/wpt/content-security-policy/connect-src/worker-from-guid.sub.html [ Failure ] -crbug.com/1050754 external/wpt/content-security-policy/form-action/form-action-src-default-ignored.sub.html [ Failure Pass ] -crbug.com/1050754 external/wpt/content-security-policy/form-action/form-action-src-redirect-blocked.sub.html [ Failure ] -crbug.com/1050754 external/wpt/content-security-policy/frame-src/frame-src-same-document.sub.html [ Timeout ] -crbug.com/1050754 external/wpt/content-security-policy/generic/filesystem-urls-do-not-match-self.sub.html [ Timeout ] -crbug.com/1050754 external/wpt/content-security-policy/generic/filesystem-urls-match-filesystem.sub.html [ Failure ] -crbug.com/1050754 external/wpt/content-security-policy/generic/no-default-src.sub.html [ Pass Timeout ] -crbug.com/1050754 external/wpt/content-security-policy/inheritance/window.html [ Timeout ] -crbug.com/1050754 external/wpt/content-security-policy/inside-worker/shared-inheritance.html [ Failure ] -crbug.com/1050754 external/wpt/content-security-policy/inside-worker/shared-script.html [ Failure ] -crbug.com/1050754 external/wpt/content-security-policy/media-src/media-src-7_1.html [ Pass Timeout ] -crbug.com/1050754 external/wpt/content-security-policy/media-src/media-src-redir-bug.sub.html [ Pass Timeout ] -crbug.com/1050754 external/wpt/content-security-policy/navigate-to/child-navigates-parent-blocked.sub.html [ Failure Timeout ] -crbug.com/1050754 external/wpt/content-security-policy/navigate-to/form-blocked.sub.html [ Failure Timeout ] -crbug.com/1050754 external/wpt/content-security-policy/navigate-to/form-cross-origin-blocked.sub.html [ Failure Timeout ] -crbug.com/1050754 external/wpt/content-security-policy/navigate-to/form-redirected-blocked.sub.html [ Failure Timeout ] -crbug.com/1050754 external/wpt/content-security-policy/navigate-to/href-location-blocked.sub.html [ Failure Timeout ] -crbug.com/1050754 external/wpt/content-security-policy/navigate-to/href-location-cross-origin-blocked.sub.html [ Failure Timeout ] -crbug.com/1050754 external/wpt/content-security-policy/navigate-to/href-location-redirected-blocked.sub.html [ Failure Timeout ] -crbug.com/1050754 external/wpt/content-security-policy/navigate-to/link-click-blocked.sub.html [ Failure Timeout ] -crbug.com/1050754 external/wpt/content-security-policy/navigate-to/link-click-cross-origin-blocked.sub.html [ Failure Timeout ] -crbug.com/1050754 external/wpt/content-security-policy/navigate-to/link-click-redirected-blocked.sub.html [ Failure Timeout ] -crbug.com/1050754 external/wpt/content-security-policy/navigate-to/meta-refresh-blocked.sub.html [ Failure Timeout ] -crbug.com/1050754 external/wpt/content-security-policy/navigate-to/meta-refresh-cross-origin-blocked.sub.html [ Failure Timeout ] -crbug.com/1050754 external/wpt/content-security-policy/navigate-to/meta-refresh-redirected-blocked.sub.html [ Failure Timeout ] -crbug.com/1050754 external/wpt/content-security-policy/navigate-to/parent-navigates-child-blocked.html [ Failure Timeout ] -crbug.com/1050754 external/wpt/content-security-policy/navigate-to/spv-only-sent-to-initiator.sub.html [ Timeout ] -crbug.com/1050754 external/wpt/content-security-policy/navigate-to/unsafe-allow-redirects/blocked-end-of-chain.sub.html [ Failure ] -crbug.com/1050754 external/wpt/content-security-policy/navigation/javascript-url-navigation-inherits-csp.html [ Pass Timeout ] -crbug.com/1050754 external/wpt/content-security-policy/object-src/object-src-no-url-allowed.html [ Pass Timeout ] -crbug.com/1050754 external/wpt/content-security-policy/object-src/object-src-url-allowed.html [ Pass Timeout ] -crbug.com/1050754 external/wpt/content-security-policy/object-src/object-src-url-embed-allowed.html [ Pass Timeout ] -crbug.com/1050754 external/wpt/content-security-policy/object-src/object-src-url-redirect-allowed.html [ Pass Timeout ] -crbug.com/1050754 external/wpt/content-security-policy/prefetch-src/prefetch-blocked.html [ Failure ] -crbug.com/1050754 external/wpt/content-security-policy/prefetch-src/prefetch-header-blocked.html [ Timeout ] -crbug.com/1050754 external/wpt/content-security-policy/reporting-api/reporting-api-doesnt-send-reports-without-violation.https.sub.html [ Pass Timeout ] -crbug.com/1050754 external/wpt/content-security-policy/reporting-api/reporting-api-report-only-sends-reports-on-violation.https.sub.html [ Failure Timeout ] -crbug.com/1050754 external/wpt/content-security-policy/reporting-api/reporting-api-sends-reports-on-violation.https.sub.html [ Failure Timeout ] -crbug.com/1050754 external/wpt/content-security-policy/reporting-api/reporting-api-works-on-frame-src.https.sub.html [ Failure Timeout ] -crbug.com/1050754 external/wpt/content-security-policy/reporting/report-cross-origin-no-cookies.sub.html [ Pass Timeout ] -crbug.com/1050754 external/wpt/content-security-policy/reporting/report-multiple-violations-01.html [ Failure Pass ] -crbug.com/1050754 external/wpt/content-security-policy/reporting/report-only-in-meta.sub.html [ Pass Timeout ] -crbug.com/1050754 external/wpt/content-security-policy/reporting/report-same-origin-with-cookies.html [ Failure ] -crbug.com/1050754 external/wpt/content-security-policy/script-src/hash-always-converted-to-utf-8/iso-8859-1.html [ Failure Pass ] -crbug.com/1050754 external/wpt/content-security-policy/script-src/hash-always-converted-to-utf-8/iso-8859-3.html [ Failure Pass ] -crbug.com/1050754 external/wpt/content-security-policy/script-src/hash-always-converted-to-utf-8/iso-8859-7.html [ Failure Pass ] -crbug.com/1050754 external/wpt/content-security-policy/script-src/hash-always-converted-to-utf-8/iso-8859-9.html [ Failure Pass ] -crbug.com/1050754 external/wpt/content-security-policy/script-src/script-src-1_10.html [ Failure ] -crbug.com/1050754 external/wpt/content-security-policy/script-src/script-src-strict_dynamic_double_policy_honor_source_expressions.html [ Timeout ] -crbug.com/1050754 external/wpt/content-security-policy/script-src/script-src-strict_dynamic_hashes.html [ Failure ] -crbug.com/1050754 external/wpt/content-security-policy/script-src/script-src-strict_dynamic_in_img-src.html [ Failure ] -crbug.com/1050754 external/wpt/content-security-policy/script-src/script-src-strict_dynamic_worker.https.html [ Failure ] -crbug.com/1050754 external/wpt/content-security-policy/script-src/scripthash-unicode-normalization.sub.html [ Failure ] -crbug.com/1050754 external/wpt/content-security-policy/script-src/worker-importscripts-blocked.sub.html [ Failure ] -crbug.com/1050754 external/wpt/content-security-policy/script-src/worker-set-timeout-blocked.sub.html [ Failure ] -crbug.com/1050754 external/wpt/content-security-policy/securitypolicyviolation/blockeduri-eval.html [ Failure Pass ] -crbug.com/1050754 external/wpt/content-security-policy/securitypolicyviolation/blockeduri-inline.html [ Failure Pass ] -crbug.com/1050754 external/wpt/content-security-policy/securitypolicyviolation/idlharness.window.html [ Failure Pass ] -crbug.com/1050754 external/wpt/content-security-policy/securitypolicyviolation/img-src-redirect-upgrade-reporting.https.html [ Timeout ] -crbug.com/1050754 external/wpt/content-security-policy/securitypolicyviolation/inside-dedicated-worker.html [ Pass Timeout ] -crbug.com/1050754 external/wpt/content-security-policy/securitypolicyviolation/inside-service-worker.https.html [ Pass Timeout ] -crbug.com/1050754 external/wpt/content-security-policy/securitypolicyviolation/inside-shared-worker.html [ Failure ] -crbug.com/1050754 external/wpt/content-security-policy/securitypolicyviolation/securitypolicyviolation-block-cross-origin-image-from-script.sub.html [ Failure Pass ] -crbug.com/1050754 external/wpt/content-security-policy/securitypolicyviolation/securitypolicyviolation-block-cross-origin-image.sub.html [ Failure ] -crbug.com/1050754 external/wpt/content-security-policy/securitypolicyviolation/securitypolicyviolation-block-image-from-script.sub.html [ Failure Pass ] -crbug.com/1050754 external/wpt/content-security-policy/securitypolicyviolation/securitypolicyviolation-block-image.sub.html [ Failure Pass ] -crbug.com/1050754 external/wpt/content-security-policy/securitypolicyviolation/targeting.html [ Timeout ] -crbug.com/1050754 external/wpt/content-security-policy/style-src/inline-style-allowed-while-cloning-objects.sub.html [ Failure ] -crbug.com/1050754 external/wpt/content-security-policy/style-src/style-blocked.sub.html [ Failure ] -crbug.com/1050754 external/wpt/content-security-policy/style-src/style-src-multiple-policies-multiple-hashing-algorithms.html [ Pass Timeout ] -crbug.com/1050754 external/wpt/content-security-policy/unsafe-eval/eval-blocked-in-about-blank-iframe.sub.html [ Failure ] -crbug.com/1050754 external/wpt/content-security-policy/worker-src/shared-child.sub.html [ Failure ] -crbug.com/1050754 external/wpt/content-security-policy/worker-src/shared-fallback.sub.html [ Failure ] -crbug.com/1050754 external/wpt/content-security-policy/worker-src/shared-list.sub.html [ Failure ] -crbug.com/1050754 external/wpt/content-security-policy/worker-src/shared-none.sub.html [ Failure ] -crbug.com/1050754 external/wpt/content-security-policy/worker-src/shared-self.sub.html [ Failure ] -crbug.com/1050754 external/wpt/content-security-policy/worker-src/shared-worker-src-child-fallback-blocked.sub.html [ Failure ] -crbug.com/1050754 external/wpt/content-security-policy/worker-src/shared-worker-src-child-fallback.sub.html [ Failure ] -crbug.com/1050754 external/wpt/content-security-policy/worker-src/shared-worker-src-default-fallback.sub.html [ Failure ] -crbug.com/1050754 external/wpt/content-security-policy/worker-src/shared-worker-src-script-fallback.sub.html [ Failure ] -crbug.com/1050754 external/wpt/content-security-policy/worker-src/shared-worker-src-self-fallback.sub.html [ Failure ] -crbug.com/1050754 external/wpt/cookie-store/change_eventhandler_for_document_cookie.tentative.https.window.html [ Failure Pass ] -crbug.com/1050754 external/wpt/cookie-store/change_eventhandler_for_http_cookie_and_set_cookie_headers.tentative.https.window.html [ Failure Pass ] -crbug.com/1050754 external/wpt/cookie-store/change_eventhandler_for_no_name_and_no_value.tentative.https.window.html [ Failure Pass ] -crbug.com/1050754 external/wpt/cookie-store/change_eventhandler_for_no_name_equals_in_value.tentative.https.window.html [ Failure Pass ] -crbug.com/1050754 external/wpt/cookie-store/change_eventhandler_for_no_name_multiple_values.tentative.https.window.html [ Failure Pass ] -crbug.com/1050754 external/wpt/cookie-store/cookieListItem_attributes.tentative.https.any.html [ Failure Pass ] -crbug.com/1050754 external/wpt/cookie-store/cookieListItem_attributes.tentative.https.any.serviceworker.html [ Failure Pass ] -crbug.com/1050754 external/wpt/cookie-store/cookieStoreManager_getSubscriptions_empty.tentative.https.any.html [ Failure Pass ] -crbug.com/1050754 external/wpt/cookie-store/cookieStoreManager_getSubscriptions_empty.tentative.https.any.serviceworker.html [ Failure Pass ] -crbug.com/1050754 external/wpt/cookie-store/cookieStoreManager_getSubscriptions_multiple.tentative.https.any.html [ Failure Pass ] -crbug.com/1050754 external/wpt/cookie-store/cookieStoreManager_getSubscriptions_multiple.tentative.https.any.serviceworker.html [ Failure Pass ] -crbug.com/1050754 external/wpt/cookie-store/cookieStoreManager_getSubscriptions_single.tentative.https.any.html [ Failure Pass ] -crbug.com/1050754 external/wpt/cookie-store/cookieStoreManager_getSubscriptions_single.tentative.https.any.serviceworker.html [ Failure Pass ] -crbug.com/1050754 external/wpt/cookie-store/cookieStore_delete_arguments.tentative.https.any.html [ Failure Pass ] -crbug.com/1050754 external/wpt/cookie-store/cookieStore_delete_arguments.tentative.https.any.serviceworker.html [ Failure Pass ] -crbug.com/1050754 external/wpt/cookie-store/cookieStore_delete_basic.tentative.https.any.html [ Failure Pass ] -crbug.com/1050754 external/wpt/cookie-store/cookieStore_delete_basic.tentative.https.any.serviceworker.html [ Failure Pass ] -crbug.com/1050754 external/wpt/cookie-store/cookieStore_event_arguments.tentative.https.window.html [ Failure Pass ] -crbug.com/1050754 external/wpt/cookie-store/cookieStore_event_basic.tentative.https.window.html [ Failure Pass ] -crbug.com/1050754 external/wpt/cookie-store/cookieStore_event_delete.tentative.https.window.html [ Failure Pass ] -crbug.com/1050754 external/wpt/cookie-store/cookieStore_event_overwrite.tentative.https.window.html [ Failure Pass ] -crbug.com/1050754 external/wpt/cookie-store/cookieStore_getAll_arguments.tentative.https.any.html [ Failure Pass ] -crbug.com/1050754 external/wpt/cookie-store/cookieStore_getAll_arguments.tentative.https.any.serviceworker.html [ Failure Pass ] -crbug.com/1050754 external/wpt/cookie-store/cookieStore_getAll_multiple.tentative.https.any.html [ Failure Pass ] -crbug.com/1050754 external/wpt/cookie-store/cookieStore_getAll_multiple.tentative.https.any.serviceworker.html [ Failure Pass ] -crbug.com/1050754 external/wpt/cookie-store/cookieStore_getAll_set_basic.tentative.https.any.html [ Failure Pass ] -crbug.com/1050754 external/wpt/cookie-store/cookieStore_getAll_set_basic.tentative.https.any.serviceworker.html [ Failure Pass ] -crbug.com/1050754 external/wpt/cookie-store/cookieStore_get_arguments.tentative.https.any.html [ Failure Pass ] -crbug.com/1050754 external/wpt/cookie-store/cookieStore_get_arguments.tentative.https.any.serviceworker.html [ Failure Pass ] -crbug.com/1050754 external/wpt/cookie-store/cookieStore_get_delete_basic.tentative.https.any.html [ Failure Pass ] -crbug.com/1050754 external/wpt/cookie-store/cookieStore_get_delete_basic.tentative.https.any.serviceworker.html [ Failure Pass ] -crbug.com/1050754 external/wpt/cookie-store/cookieStore_get_set_across_frames.tentative.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/cookie-store/cookieStore_get_set_across_origins.tentative.sub.https.html [ Pass Timeout ] -crbug.com/1050754 external/wpt/cookie-store/cookieStore_get_set_basic.tentative.https.any.html [ Failure Pass ] -crbug.com/1050754 external/wpt/cookie-store/cookieStore_get_set_basic.tentative.https.any.serviceworker.html [ Failure Pass ] -crbug.com/1050754 external/wpt/cookie-store/cookieStore_get_set_ordering.tentative.https.any.html [ Failure Pass ] -crbug.com/1050754 external/wpt/cookie-store/cookieStore_get_set_ordering.tentative.https.any.serviceworker.html [ Failure Pass ] -crbug.com/1050754 external/wpt/cookie-store/cookieStore_in_detached_frame.tentative.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/cookie-store/cookieStore_opaque_origin.tentative.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/cookie-store/cookieStore_set_arguments.tentative.https.any.html [ Failure Pass ] -crbug.com/1050754 external/wpt/cookie-store/cookieStore_set_arguments.tentative.https.any.serviceworker.html [ Failure Pass ] -crbug.com/1050754 external/wpt/cookie-store/cookieStore_special_names.tentative.https.any.html [ Failure Pass ] -crbug.com/1050754 external/wpt/cookie-store/cookieStore_special_names.tentative.https.any.serviceworker.html [ Failure Pass ] -crbug.com/1050754 external/wpt/cookie-store/cookieStore_subscribe_arguments.tentative.https.any.html [ Failure Pass ] -crbug.com/1050754 external/wpt/cookie-store/cookieStore_subscribe_arguments.tentative.https.any.serviceworker.html [ Failure Pass ] -crbug.com/1050754 external/wpt/cookie-store/cookieStore_subscriptions_empty.tentative.https.window.html [ Failure Pass ] -crbug.com/1050754 external/wpt/cookie-store/encoding.https.any.html [ Failure Pass ] -crbug.com/1050754 external/wpt/cookie-store/encoding.https.any.serviceworker.html [ Failure Pass ] -crbug.com/1050754 external/wpt/cookie-store/httponly_cookies.https.window.html [ Failure Pass ] -crbug.com/1050754 external/wpt/cookie-store/idlharness.tentative.https.any.html [ Failure Pass ] -crbug.com/1050754 external/wpt/cookie-store/idlharness.tentative.https.any.serviceworker.html [ Failure Pass ] -crbug.com/1050754 external/wpt/cookie-store/idlharness.tentative.https.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/cookie-store/serviceworker_cookieStore_cross_origin.tentative.https.sub.html [ Failure Pass Timeout ] -crbug.com/1050754 external/wpt/cookie-store/serviceworker_cookieStore_subscriptions_reset.tentative.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/cookie-store/serviceworker_cookiechange_eventhandler_mismatched_subscription.tentative.https.any.serviceworker.html [ Failure Pass ] -crbug.com/1050754 external/wpt/cookie-store/serviceworker_cookiechange_eventhandler_multiple_subscriptions.tentative.https.any.serviceworker.html [ Failure Pass ] -crbug.com/1050754 external/wpt/cookie-store/serviceworker_cookiechange_eventhandler_overlapping_subscriptions.tentative.https.any.serviceworker.html [ Failure Pass ] -crbug.com/1050754 external/wpt/cookie-store/serviceworker_cookiechange_eventhandler_single_subscription.tentative.https.any.serviceworker.html [ Failure Pass ] -crbug.com/1050754 external/wpt/cookie-store/serviceworker_oncookiechange_eventhandler_single_subscription.tentative.https.any.serviceworker.html [ Failure Pass ] -crbug.com/1050754 external/wpt/cookies/domain/domain-attribute-missing.sub.html [ Failure Pass ] -crbug.com/1050754 external/wpt/cookies/http-state/chromium-tests.html [ Failure Pass ] -crbug.com/1050754 external/wpt/cookies/http-state/domain-tests.html [ Failure Pass ] -crbug.com/1050754 external/wpt/cookies/http-state/mozilla-tests.html [ Failure Pass ] -crbug.com/1050754 external/wpt/cookies/http-state/name-tests.html [ Failure Pass ] -crbug.com/1050754 external/wpt/cookies/http-state/ordering-tests.html [ Failure Pass ] -crbug.com/1050754 external/wpt/cookies/http-state/path-tests.html [ Failure Pass ] -crbug.com/1050754 external/wpt/cookies/prefix/__host.header.html [ Pass Timeout ] -crbug.com/1050754 external/wpt/cookies/prefix/__secure.header.https.html [ Failure ] -crbug.com/1050754 external/wpt/cookies/samesite-none-secure/cookies-without-samesite-must-be-secure.https.tentative.html [ Failure ] -crbug.com/1050754 external/wpt/cookies/samesite/about-blank-subresource.https.html [ Failure Timeout ] -crbug.com/1050754 external/wpt/cookies/samesite/about-blank-toplevel.https.html [ Failure Pass Timeout ] -crbug.com/1050754 external/wpt/cookies/samesite/fetch.https.html [ Failure ] -crbug.com/1050754 external/wpt/cookies/samesite/form-get-blank-reload.https.html [ Failure ] -crbug.com/1050754 external/wpt/cookies/samesite/form-post-blank-reload.https.html [ Failure ] -crbug.com/1050754 external/wpt/cookies/samesite/form-post-blank.https.html [ Failure ] -crbug.com/1050754 external/wpt/cookies/samesite/iframe-reload.https.html [ Failure ] -crbug.com/1050754 external/wpt/cookies/samesite/iframe.document.https.html [ Failure ] -crbug.com/1050754 external/wpt/cookies/samesite/iframe.https.html [ Failure ] -crbug.com/1050754 external/wpt/cookies/samesite/img.https.html [ Failure ] -crbug.com/1050754 external/wpt/cookies/samesite/sandbox-iframe-nested.https.html [ Failure ] -crbug.com/1050754 external/wpt/cookies/samesite/sandbox-iframe-subresource.https.html [ Failure ] -crbug.com/1050754 external/wpt/cookies/samesite/setcookie-lax.https.html [ Failure ] -crbug.com/1050754 external/wpt/cookies/samesite/window-open-reload.https.html [ Failure ] -crbug.com/1050754 external/wpt/cookies/schemeful-same-site/schemeful-iframe-subresource.tentative.html [ Failure ] -crbug.com/1050754 external/wpt/cookies/schemeful-same-site/schemeful-navigation.tentative.html [ Failure ] -crbug.com/1050754 external/wpt/cookies/schemeful-same-site/schemeful-subresource.tentative.html [ Failure ] -crbug.com/1050754 external/wpt/cookies/schemeful-same-site/schemeful-websockets.sub.tentative.html [ Failure ] -crbug.com/1050754 external/wpt/cors-rfc1918/address-space.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/cors-rfc1918/address-space.window.html [ Failure ] -crbug.com/1050754 external/wpt/cors/304.htm [ Failure Pass ] -crbug.com/1050754 external/wpt/cors/access-control-expose-headers-parsing.window.html [ Failure Pass ] -crbug.com/1050754 external/wpt/cors/basic.htm [ Failure Pass ] -crbug.com/1050754 external/wpt/cors/preflight-cache.htm [ Failure Pass ] -crbug.com/1050754 external/wpt/cors/preflight-failure.htm [ Failure ] -crbug.com/1050754 external/wpt/cors/status-async.htm [ Failure ] -crbug.com/1050754 external/wpt/cors/status-preflight.htm [ Failure ] -crbug.com/1050754 external/wpt/credential-management/federatedcredential-framed-get.sub.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/credential-management/otpcredential-get-basics.https.html [ Failure ] -crbug.com/1050754 external/wpt/credential-management/otpcredential-iframe.https.html [ Failure ] -crbug.com/1050754 external/wpt/credential-management/passwordcredential-framed-get.sub.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/CSS2/linebox/animations/line-height-interpolation.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/CSS2/positioning/relpos-percentage-top-in-scrollable.html [ Failure ] -crbug.com/1050754 external/wpt/css/compositing/mix-blend-mode/mix-blend-mode-creates-stacking-context.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/compositing/parsing/background-blend-mode-computed.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-align/animation/column-gap-composition.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-align/animation/column-gap-interpolation.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-align/animation/row-gap-composition.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-align/animation/row-gap-interpolation.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-animations/AnimationEffect-getComputedTiming.tentative.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-animations/AnimationEffect-updateTiming.tentative.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-animations/CSSAnimation-animationName.tentative.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-animations/CSSAnimation-canceling.tentative.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-animations/CSSAnimation-compositeOrder.tentative.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-animations/CSSAnimation-effect.tentative.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-animations/CSSAnimation-finished.tentative.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-animations/CSSAnimation-getCurrentTime.tentative.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-animations/CSSAnimation-id.tentative.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-animations/CSSAnimation-pausing.tentative.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-animations/CSSAnimation-playState.tentative.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-animations/CSSAnimation-ready.tentative.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-animations/CSSAnimation-startTime.tentative.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-animations/Document-getAnimations.tentative.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-animations/Element-getAnimations-dynamic-changes.tentative.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-animations/Element-getAnimations.tentative.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-animations/KeyframeEffect-getKeyframes.tentative.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-animations/KeyframeEffect-setKeyframes.tentative.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-animations/KeyframeEffect-target.tentative.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-animations/animation-before-initial-box-construction-001.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-animations/animationevent-marker-pseudoelement.html [ Pass Timeout ] -crbug.com/1050754 external/wpt/css/css-animations/event-dispatch.tentative.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-animations/event-order.tentative.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-animations/idlharness.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-animations/parsing/animation-name-invalid.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-animations/parsing/animation-name-valid.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-animations/parsing/animation-shorthand.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-animations/pending-style-changes-001.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-backgrounds/animations/background-color-interpolation.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-backgrounds/animations/background-image-interpolation.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-backgrounds/animations/background-position-interpolation.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-backgrounds/animations/background-position-origin-interpolation.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-backgrounds/animations/background-position-x-interpolation.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-backgrounds/animations/background-position-y-interpolation.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-backgrounds/animations/background-size-interpolation.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-backgrounds/animations/border-bottom-left-radius-composition.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-backgrounds/animations/border-bottom-right-radius-composition.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-backgrounds/animations/border-color-interpolation.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-backgrounds/animations/border-image-outset-composition.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-backgrounds/animations/border-image-outset-interpolation.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-backgrounds/animations/border-image-slice-composition.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-backgrounds/animations/border-image-slice-interpolation-stability.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-backgrounds/animations/border-image-slice-interpolation.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-backgrounds/animations/border-image-source-interpolation.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-backgrounds/animations/border-image-width-composition.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-backgrounds/animations/border-image-width-interpolation.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-backgrounds/animations/border-radius-interpolation.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-backgrounds/animations/border-top-left-radius-composition.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-backgrounds/animations/border-top-right-radius-composition.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-backgrounds/animations/border-width-interpolation.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-backgrounds/animations/box-shadow-composition.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-backgrounds/animations/box-shadow-interpolation.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-backgrounds/background-332.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-backgrounds/inheritance.sub.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-backgrounds/parsing/background-image-computed.sub.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-backgrounds/parsing/background-position-computed.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-backgrounds/parsing/background-position-x-computed.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-backgrounds/parsing/background-position-x-valid.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-backgrounds/parsing/background-position-y-computed.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-backgrounds/parsing/border-shorthand.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-backgrounds/parsing/border-width-computed.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-box/animation/margin-bottom-composition.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-box/animation/margin-interpolation.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-box/animation/margin-left-composition.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-box/animation/margin-right-composition.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-box/animation/margin-top-composition.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-box/animation/padding-bottom-composition.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-box/animation/padding-interpolation.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-box/animation/padding-left-composition.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-box/animation/padding-right-composition.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-box/animation/padding-top-composition.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-box/inheritance.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-box/parsing/clear-computed.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-box/parsing/clear-valid.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-box/parsing/float-computed.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-box/parsing/float-valid.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-break/animation/orphans-interpolation.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-break/animation/widows-interpolation.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-break/inheritance.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-break/parsing/box-decoration-break-computed.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-break/parsing/box-decoration-break-valid.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-break/parsing/break-after-computed.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-break/parsing/break-after-valid.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-break/parsing/break-before-computed.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-break/parsing/break-before-valid.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-break/parsing/break-inside-computed.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-break/parsing/break-inside-valid.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-break/relpos-inline-hit-testing.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-cascade/all-prop-initial-xml.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-cascade/revert-val-003.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-color-adjust/parsing/color-scheme-computed.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-color-adjust/parsing/color-scheme-valid.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-color-adjust/rendering/dark-color-scheme/color-scheme-color-property.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-color-adjust/rendering/dark-color-scheme/color-scheme-root-background.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-color/animation/color-composition.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-color/animation/color-interpolation.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-color/animation/opacity-interpolation.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-conditional/idlharness.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-contain/contain-size-grid-003.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-content/inheritance.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-display/display-math-on-non-mathml-elements.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-display/display-math-on-pseudo-elements-001.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-display/parsing/display-valid.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-easing/step-timing-functions-syntax.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-flexbox/animation/flex-basis-composition.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-flexbox/animation/flex-basis-interpolation.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-flexbox/animation/flex-grow-interpolation.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-flexbox/animation/flex-shrink-interpolation.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-flexbox/animation/order-interpolation.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-flexbox/flex-aspect-ratio-img-column-017.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-flexbox/getcomputedstyle/flexbox_computedstyle_flex-basis-0percent.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-flexbox/getcomputedstyle/flexbox_computedstyle_flex-shorthand-number.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-flexbox/hittest-overlapping-order.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-flexbox/negative-overflow.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-flexbox/parsing/flex-basis-computed.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-font-loading/idlharness.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-fonts/animations/font-size-adjust-interpolation.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-fonts/animations/font-size-interpolation-001.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-fonts/animations/font-variation-settings-composition.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-fonts/animations/font-variation-settings-interpolation.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-fonts/fallback-url-to-local.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-fonts/font-face-range-order.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-fonts/font-variant-alternates-parsing.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-fonts/font-variation-settings-serialization-001.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-fonts/generic-family-keywords-002.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-fonts/idlharness.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-fonts/inheritance.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-fonts/math-script-level-and-math-style/math-script-level-001.tentative.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-fonts/math-script-level-and-math-style/math-script-level-002.tentative.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-fonts/math-script-level-and-math-style/math-script-level-004.tentative.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-fonts/math-script-level-and-math-style/math-style-001.tentative.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-fonts/parsing/font-family-computed.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-fonts/parsing/font-family-valid.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-fonts/parsing/font-language-override-computed.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-fonts/parsing/font-language-override-valid.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-fonts/parsing/font-size-adjust-computed.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-fonts/parsing/font-size-adjust-valid.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-fonts/parsing/font-style-computed.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-fonts/parsing/font-variant-position-computed.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-fonts/parsing/font-variant-position-valid.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-fonts/parsing/font-variant-valid.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-fonts/test_font_feature_values_parsing.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-fonts/variations/at-font-face-descriptors.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-fonts/variations/at-font-face-font-matching.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-fonts/variations/font-parse-numeric-stretch-style-weight.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-fonts/variations/font-shorthand.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-fonts/variations/font-stretch.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-fonts/variations/font-style-interpolation.html [ Timeout ] -crbug.com/1050754 external/wpt/css/css-fonts/variations/font-style-parsing.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-fonts/variations/font-weight-parsing.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-forced-color-adjust/inheritance.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-forced-color-adjust/parsing/forced-color-adjust-computed.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-forced-color-adjust/parsing/forced-color-adjust-valid.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-grid/abspos/grid-positioned-items-content-alignment-001.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-grid/abspos/grid-positioned-items-content-alignment-rtl-001.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-grid/abspos/grid-sizing-positioned-items-001.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-grid/alignment/grid-align-content-distribution-vertical-lr.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-grid/alignment/grid-align-content-distribution-vertical-rl.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-grid/alignment/grid-align-content-distribution.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-grid/alignment/grid-alignment-implies-size-change-001.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-grid/alignment/grid-alignment-implies-size-change-002.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-grid/alignment/grid-alignment-implies-size-change-005.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-grid/alignment/grid-alignment-implies-size-change-006.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-grid/alignment/grid-alignment-implies-size-change-007.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-grid/alignment/grid-alignment-implies-size-change-008.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-grid/alignment/grid-alignment-implies-size-change-009.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-grid/alignment/grid-alignment-implies-size-change-010.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-grid/alignment/grid-column-axis-alignment-positioned-items-001.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-grid/alignment/grid-column-axis-alignment-positioned-items-003.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-grid/alignment/grid-column-axis-alignment-positioned-items-004.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-grid/alignment/grid-column-axis-alignment-positioned-items-006.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-grid/alignment/grid-column-axis-alignment-positioned-items-008.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-grid/alignment/grid-column-axis-alignment-positioned-items-011.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-grid/alignment/grid-column-axis-alignment-positioned-items-017.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-grid/alignment/grid-column-axis-self-baseline-synthesized-003.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-grid/alignment/grid-content-alignment-and-self-alignment-001.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-grid/alignment/grid-content-alignment-second-pass-001.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-grid/alignment/grid-content-alignment-second-pass-002.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-grid/alignment/grid-fit-content-tracks-dont-stretch-001.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-grid/alignment/grid-gutters-and-alignment.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-grid/alignment/grid-row-axis-alignment-positioned-items-001.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-grid/alignment/grid-row-axis-alignment-positioned-items-002.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-grid/alignment/grid-row-axis-alignment-positioned-items-003.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-grid/alignment/grid-row-axis-alignment-positioned-items-004.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-grid/alignment/grid-row-axis-alignment-positioned-items-005.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-grid/alignment/grid-row-axis-alignment-positioned-items-006.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-grid/alignment/grid-row-axis-alignment-positioned-items-007.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-grid/alignment/grid-row-axis-alignment-positioned-items-008.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-grid/alignment/grid-row-axis-alignment-positioned-items-009.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-grid/alignment/grid-row-axis-alignment-positioned-items-010.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-grid/alignment/grid-row-axis-alignment-positioned-items-011.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-grid/alignment/grid-row-axis-alignment-positioned-items-012.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-grid/alignment/grid-row-axis-alignment-positioned-items-013.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-grid/alignment/grid-row-axis-alignment-positioned-items-014.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-grid/alignment/grid-row-axis-alignment-positioned-items-015.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-grid/alignment/grid-row-axis-alignment-positioned-items-016.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-grid/alignment/grid-row-axis-alignment-positioned-items-017.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-grid/alignment/grid-row-axis-self-baseline-synthesized-003.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-grid/alignment/grid-self-alignment-non-static-positioned-items-009.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-grid/alignment/grid-self-alignment-non-static-positioned-items-010.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-grid/alignment/grid-self-alignment-non-static-positioned-items-011.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-grid/alignment/grid-self-alignment-non-static-positioned-items-012.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-002.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-003.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-005.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-007.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-008.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-013.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-014.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-016.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-grid/alignment/grid-self-baseline-not-applied-if-sizing-cyclic-dependency-002.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-grid/animation/grid-template-columns-interpolation.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-grid/animation/grid-template-rows-interpolation.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-grid/grid-definition/flex-content-resolution-rows-001.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-grid/grid-definition/flex-content-resolution-rows-002.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-grid/grid-definition/grid-auto-repeat-max-size-001.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-grid/grid-definition/grid-change-fit-content-argument-001.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-grid/grid-definition/grid-inline-support-flexible-lengths-001.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-grid/grid-definition/grid-inline-support-grid-template-columns-rows-001.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-grid/grid-definition/grid-inline-support-named-grid-lines-001.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-grid/grid-definition/grid-inline-support-repeat-001.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-grid/grid-definition/grid-inline-template-columns-rows-resolved-values-001.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-grid/grid-definition/grid-limits-001.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-grid/grid-definition/grid-percentage-rows-indefinite-height-001.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-grid/grid-definition/grid-percentage-rows-indefinite-height-002.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-grid/grid-definition/grid-support-flexible-lengths-001.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-grid/grid-definition/grid-support-grid-template-columns-rows-001.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-grid/grid-definition/grid-support-named-grid-lines-001.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-grid/grid-definition/grid-support-repeat-001.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-grid/grid-definition/grid-template-columns-rows-resolved-values-001.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-grid/grid-items/grid-minimum-size-grid-items-021.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-grid/grid-model/grid-gutters-and-tracks-001.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-grid/layout-algorithm/grid-content-distribution-must-account-for-track-sizing-002.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-grid/layout-algorithm/grid-content-distribution-must-account-for-track-sizing-003.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-grid/layout-algorithm/grid-find-fr-size-gutters-001.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-grid/layout-algorithm/grid-flex-track-intrinsic-sizes-001.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-grid/layout-algorithm/grid-flex-track-intrinsic-sizes-002.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-grid/layout-algorithm/grid-intrinsic-size-with-orthogonal-items.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-grid/layout-algorithm/grid-intrinsic-track-sizes-001.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-grid/parsing/grid-area-valid.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-grid/parsing/grid-auto-flow-computed.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-grid/parsing/grid-auto-flow-valid.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-grid/parsing/grid-shorthand-valid.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-grid/parsing/grid-shorthand.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-grid/parsing/grid-template-columns-computed-nogrid.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-grid/parsing/grid-template-rows-computed-nogrid.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-grid/parsing/grid-template-shorthand-valid.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-grid/subgrid/grid-template-computed-nogrid.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-images/idlharness.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-images/image-set/image-set-parsing.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-images/parsing/image-rendering-computed.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-images/parsing/image-rendering-valid.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-images/parsing/image-resolution-valid.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-images/parsing/object-fit-computed.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-images/parsing/object-fit-valid.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-inline/inheritance.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-inline/parsing/alignment-baseline-computed.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-inline/parsing/alignment-baseline-invalid.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-inline/parsing/alignment-baseline-valid.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-inline/parsing/baseline-shift-invalid.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-inline/parsing/baseline-shift-valid.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-inline/parsing/dominant-baseline-computed.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-inline/parsing/dominant-baseline-valid.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-layout-api/at-supports-rule.https.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-layout-api/computed-style-layout-function.https.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-layout-api/crash-multicol.https.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-layout-api/inline-style-layout-function.https.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-layout-api/layout-child/inlines-dynamic.https.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-layout-api/supports.https.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-layout-api/sync-layout-microtasks.https.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-lists/animations/list-style-image-interpolation.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-lists/parsing/content-invalid.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-lists/parsing/counter-set-valid.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-lists/parsing/list-style-image-computed.sub.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-lists/parsing/list-style-type-computed.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-lists/parsing/list-style-type-valid.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-logical/animation-001.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-logical/animation-002.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-logical/animation-003.tentative.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-logical/getComputedStyle-listing.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-logical/inheritance.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-logical/logical-box-border-color.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-logical/logical-box-border-radius.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-logical/logical-box-border-shorthands.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-logical/logical-box-border-style.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-logical/logical-box-border-width.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-logical/logical-box-inset.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-logical/logical-box-margin.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-logical/logical-box-padding.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-logical/logical-box-size.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-logical/logical-values-float-clear.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-logical/logical-values-resize.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-logical/parsing/border-block-color-computed.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-logical/parsing/border-block-color-valid.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-logical/parsing/border-block-style-computed.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-logical/parsing/border-block-style-valid.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-logical/parsing/border-block-valid.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-logical/parsing/border-block-width-computed.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-logical/parsing/border-block-width-valid.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-logical/parsing/border-inline-color-computed.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-logical/parsing/border-inline-color-valid.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-logical/parsing/border-inline-style-computed.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-logical/parsing/border-inline-style-valid.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-logical/parsing/border-inline-valid.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-logical/parsing/border-inline-width-computed.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-logical/parsing/border-inline-width-valid.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-logical/parsing/inset-block-inline-computed.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-logical/parsing/inset-block-inline-shorthand.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-logical/parsing/inset-block-inline-valid.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-logical/parsing/inset-computed.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-logical/parsing/inset-shorthand.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-logical/parsing/inset-valid.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-logical/parsing/margin-block-inline-computed.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-logical/parsing/margin-block-inline-shorthand.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-logical/parsing/margin-block-inline-valid.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-logical/parsing/padding-block-inline-computed.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-logical/parsing/padding-block-inline-shorthand.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-logical/parsing/padding-block-inline-valid.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-masking/animations/clip-interpolation.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-masking/animations/clip-path-composition.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-masking/animations/clip-path-interpolation-001.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-masking/animations/clip-path-interpolation-002.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-masking/animations/mask-image-interpolation.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-masking/animations/mask-position-interpolation.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-masking/idlharness.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-masking/inheritance.sub.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-masking/parsing/clip-path-valid.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-masking/parsing/mask-position-valid.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-masking/parsing/mask-valid.sub.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-multicol/animation/column-count-interpolation.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-multicol/animation/column-rule-color-interpolation.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-multicol/animation/column-rule-width-interpolation.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-multicol/animation/column-width-interpolation.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-multicol/balance-table-with-fractional-height-row.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-multicol/getclientrects-000.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-multicol/getclientrects-001.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-multicol/inheritance.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-multicol/multicol-gap-percentage-001.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-multicol/parsing/column-fill-computed.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-multicol/parsing/column-fill-valid.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-multicol/parsing/column-rule-computed.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-multicol/parsing/column-rule-shorthand.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-multicol/parsing/column-rule-width-computed.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-overflow/inheritance.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-overflow/logical-overflow-001.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-overflow/overflow-padding.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-overflow/parsing/block-ellipsis-valid.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-overflow/parsing/continue-valid.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-overflow/parsing/line-clamp-valid.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-overflow/parsing/max-lines-valid.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-overflow/parsing/overflow-computed.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-overflow/parsing/overflow-valid.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-overflow/parsing/scrollbar-gutter-valid.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-overflow/parsing/webkit-line-clamp-valid.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-overflow/scrollable-overflow-self-collapsing.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-page/inheritance.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-page/page-rule-declarations-002.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-page/parsing/page-computed.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-page/parsing/page-orientation-computed.tentative.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-page/parsing/page-valid.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-paint-api/idlharness.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-parser-api/idlharness.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-position/animations/bottom-composition.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-position/animations/bottom-interpolation.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-position/animations/left-composition.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-position/animations/left-interpolation.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-position/animations/right-composition.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-position/animations/right-interpolation.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-position/animations/top-composition.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-position/animations/top-interpolation.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-position/inheritance.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-position/parsing/inset-after-computed.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-position/parsing/inset-after-valid.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-position/parsing/inset-before-computed.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-position/parsing/inset-before-valid.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-position/parsing/inset-end-computed.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-position/parsing/inset-end-valid.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-position/parsing/inset-start-computed.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-position/parsing/inset-start-valid.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-position/position-absolute-replaced-minmax.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-position/position-absolute-table-001.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-position/position-sticky-bottom.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-position/position-sticky-get-bounding-client-rect.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-position/position-sticky-input-box-gets-focused-after-scroll.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-position/position-sticky-nested-bottom.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-position/position-sticky-nested-right.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-position/position-sticky-offset-overflow.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-position/position-sticky-offset-top-left.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-position/position-sticky-parsing.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-position/position-sticky-right.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-position/position-sticky-transforms-translate.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-properties-values-api/at-property.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-properties-values-api/idlharness.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-properties-values-api/register-property-syntax-parsing.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-properties-values-api/registered-property-computation.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-properties-values-api/registered-property-initial.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-properties-values-api/self-utils.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-properties-values-api/typedom.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-properties-values-api/unit-cycles.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-pseudo/first-letter-allowed-properties.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-pseudo/idlharness.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-pseudo/marker-animate.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-pseudo/marker-computed-content.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-pseudo/marker-computed-size.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-pseudo/marker-default-styles.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-pseudo/marker-display-computed.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-pseudo/marker-hit-testing.html [ Pass Timeout ] -crbug.com/1050754 external/wpt/css/css-pseudo/marker-intrinsic-contribution-001.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-pseudo/parsing/marker-supported-properties-in-animation.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-pseudo/parsing/marker-supported-properties.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-pseudo/parsing/target-text.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-pseudo/parsing/tree-abiding-pseudo-elements.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-pseudo/target-text-computed.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-pseudo/text-selection.html [ Pass Timeout ] -crbug.com/1050754 external/wpt/css/css-ruby/line-break-around-ruby-001.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-ruby/line-spacing.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-scoping/keyframes-001.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-scoping/keyframes-002.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-scoping/slotted-parsing.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-scroll-anchoring/abspos-containing-block-outside-scroller.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-scroll-anchoring/abspos-contributes-to-static-parent-bounds.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-scroll-anchoring/ancestor-change-heuristic.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-scroll-anchoring/anchor-inside-iframe.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-scroll-anchoring/anchor-updates-after-explicit-scroll.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-scroll-anchoring/anchoring-with-bounds-clamping-div.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-scroll-anchoring/anchoring-with-bounds-clamping.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-scroll-anchoring/anonymous-block-box.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-scroll-anchoring/basic.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-scroll-anchoring/clamp-negative-overflow.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-scroll-anchoring/clipped-scrollers-skipped.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-scroll-anchoring/contain-paint-offscreen-container.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-scroll-anchoring/descend-into-container-with-float.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-scroll-anchoring/descend-into-container-with-overflow.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-scroll-anchoring/device-pixel-adjustment.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-scroll-anchoring/exclude-fixed-position.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-scroll-anchoring/exclude-inline.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-scroll-anchoring/exclude-sticky.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-scroll-anchoring/focus-prioritized.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-scroll-anchoring/fragment-scrolling-anchors.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-scroll-anchoring/history-restore-anchors.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-scroll-anchoring/image-001.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-scroll-anchoring/inline-block-002.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-scroll-anchoring/inline-block.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-scroll-anchoring/multicol-fragmented-anchor.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-scroll-anchoring/negative-layout-overflow.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-scroll-anchoring/opt-out-dynamic-scroller.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-scroll-anchoring/opt-out-dynamic.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-scroll-anchoring/opt-out-inner-table.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-scroll-anchoring/opt-out-table.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-scroll-anchoring/opt-out.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-scroll-anchoring/position-change-heuristic-display-none-change.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-scroll-anchoring/position-change-heuristic-display-none-to-abspos-change.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-scroll-anchoring/position-change-heuristic-in-nested-scroll-box.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-scroll-anchoring/position-change-heuristic.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-scroll-anchoring/reading-scroll-forces-anchoring.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-scroll-anchoring/scroll-padding-affects-anchoring.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-scroll-anchoring/start-edge-in-block-layout-direction.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-scroll-anchoring/subtree-exclusion.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-scroll-anchoring/text-anchor-in-vertical-rl.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-scroll-anchoring/wrapped-text.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-scroll-snap/input/keyboard.html [ Failure Timeout ] -crbug.com/1050754 external/wpt/css/css-scroll-snap/nested-scrollIntoView-snaps.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-scroll-snap/no-snap-position.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-scroll-snap/overflowing-snap-areas.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-scroll-snap/scroll-margin.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-scroll-snap/scroll-snap-stop.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-scroll-snap/scroll-snap-type-change.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-scroll-snap/scroll-snap-type-on-root-element.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-scroll-snap/scroll-snap-type.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-scroll-snap/snap-after-relayout/adding-only-snap-area.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-scroll-snap/snap-after-relayout/adding-snap-area-while-snapped.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-scroll-snap/snap-after-relayout/changing-scroll-snap-align.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-scroll-snap/snap-after-relayout/changing-scroll-snap-type.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-scroll-snap/snap-after-relayout/move-current-target.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-scroll-snap/snap-after-relayout/remove-current-target.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-scroll-snap/snap-area-capturing-add-scroll-container.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-scroll-snap/snap-area-capturing-remove-scroll-container.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-scroll-snap/snap-inline-block.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-scroll-snap/snap-to-transformed-target.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-scroll-snap/snap-to-visible-areas-margin-x-axis.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-scroll-snap/snap-to-visible-areas-margin-y-axis.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-scrollbars/inheritance.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-scrollbars/scrollbar-width-parsing.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-shadow-parts/interaction-with-pseudo-elements.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-shapes/animation/shape-image-threshold-interpolation.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-shapes/animation/shape-margin-composition.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-shapes/animation/shape-margin-interpolation.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-shapes/animation/shape-outside-composition.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-shapes/animation/shape-outside-interpolation.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-shapes/parsing/shape-outside-computed.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-shapes/parsing/shape-outside-valid.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-shapes/shape-outside/shape-image/gradients/shape-outside-radial-gradient-002.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-shapes/shape-outside/values/shape-margin-001.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-shapes/shape-outside/values/shape-margin-002.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-shapes/shape-outside/values/shape-margin-003.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-shapes/shape-outside/values/shape-margin-005.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-shapes/shape-outside/values/shape-outside-circle-004.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-shapes/shape-outside/values/shape-outside-circle-005.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-shapes/shape-outside/values/shape-outside-circle-010.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-shapes/shape-outside/values/shape-outside-circle-011.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-shapes/shape-outside/values/shape-outside-computed-shape-000.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-shapes/shape-outside/values/shape-outside-ellipse-004.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-shapes/shape-outside/values/shape-outside-ellipse-005.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-shapes/shape-outside/values/shape-outside-ellipse-010.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-shapes/shape-outside/values/shape-outside-ellipse-011.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-shapes/shape-outside/values/shape-outside-inset-001.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-shapes/shape-outside/values/shape-outside-inset-003.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-shapes/shape-outside/values/shape-outside-inset-008.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-shapes/shape-outside/values/shape-outside-inset-009.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-shapes/shape-outside/values/shape-outside-polygon-004.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-shapes/shape-outside/values/shape-outside-polygon-006.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-shapes/shape-outside/values/shape-outside-shape-arguments-000.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-shapes/shape-outside/values/shape-outside-shape-box-pair-000.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-size-adjust/animations/text-size-adjust-interpolation.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-sizing/animation/height-composition.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-sizing/animation/height-interpolation.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-sizing/animation/max-height-composition.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-sizing/animation/max-height-interpolation.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-sizing/animation/max-width-composition.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-sizing/animation/max-width-interpolation.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-sizing/animation/min-height-composition.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-sizing/animation/min-height-interpolation.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-sizing/animation/min-width-composition.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-sizing/animation/min-width-interpolation.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-sizing/animation/width-composition.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-sizing/animation/width-interpolation.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-sizing/aspect-ratio/quirks-mode-001.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-sizing/aspect-ratio/quirks-mode-002.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-sizing/contain-intrinsic-size/parsing/contain-intrinsic-size-computed.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-sizing/parsing/height-valid.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-sizing/parsing/max-height-valid.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-sizing/parsing/max-width-valid.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-sizing/parsing/min-height-invalid.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-sizing/parsing/min-height-valid.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-sizing/parsing/min-width-invalid.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-sizing/parsing/min-width-valid.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-sizing/parsing/width-valid.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-syntax/charset/page-windows-1251-charset-attribute-bogus.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-syntax/decimal-points-in-numbers.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-syntax/declarations-trim-whitespace.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-syntax/input-preprocessing.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-syntax/serialize-consecutive-tokens.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-syntax/unicode-range-selector.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-syntax/urange-parsing.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-tables/absolute-tables-002.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-tables/absolute-tables-003.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-tables/absolute-tables-004.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-tables/absolute-tables-005.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-tables/animations/border-spacing-interpolation.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-tables/border-spacing-included-in-sizes-001.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-tables/bounding-box-computation-1.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-tables/bounding-box-computation-2.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-tables/bounding-box-computation-3.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-tables/fixed-layout-2.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-tables/fixed-layout-excess-width-distribution-001.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-tables/height-distribution/computing-row-measure-0.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-tables/height-distribution/computing-row-measure-1.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-tables/height-distribution/extra-height-given-to-all-row-groups-003.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-tables/height-distribution/extra-height-given-to-all-row-groups-004.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-tables/height-distribution/percentage-sizing-of-table-cell-children.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-tables/html-to-css-mapping-1.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-tables/html-to-css-mapping-2.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-tables/html5-table-formatting-1.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-tables/html5-table-formatting-2.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-tables/html5-table-formatting-fixed-layout-1.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-tables/inheritance.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-tables/parsing/border-spacing-computed.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-tables/parsing/border-spacing-valid.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-tables/table-model-fixup-2.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-tables/table-model-fixup.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-tables/visibility-collapse-col-001.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-tables/visibility-collapse-col-002.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-tables/visibility-collapse-col-003.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-tables/visibility-collapse-col-004-dynamic.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-tables/visibility-collapse-col-005.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-tables/visibility-collapse-colspan-001.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-tables/visibility-collapse-colspan-002.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-tables/visibility-collapse-row-002-dynamic.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-tables/visibility-collapse-row-004.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-tables/visibility-collapse-rowcol-001.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-tables/visibility-collapse-rowcol-002.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-tables/visibility-collapse-rowspan-002-border-separate.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-tables/visibility-collapse-rowspan-002.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-tables/visibility-collapse-rowspan-004-dynamic.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-tables/visibility-hidden-row-001.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-tables/visibility-hidden-row-002.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-tables/width-distribution/computing-column-measure-1.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-text-decor/inheritance.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-text-decor/parsing/text-decoration-computed.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-text-decor/parsing/text-decoration-line-computed.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-text-decor/parsing/text-decoration-line-valid.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-text-decor/parsing/text-decoration-shorthand.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-text-decor/parsing/text-decoration-valid.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-text-decor/parsing/text-underline-position-computed.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-text-decor/parsing/text-underline-position-valid.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-text-decor/text-decoration-serialization.tentative.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-text-decor/text-decoration-skip-ink.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-text-decor/text-decoration-thickness-computed.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-text-decor/text-decoration-thickness-initial.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-text-decor/text-decoration-thickness-valid.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-text-decor/text-underline-offset-computed.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-text-decor/text-underline-offset-initial.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-text-decor/text-underline-offset-valid.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-text/animations/letter-spacing-composition.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-text/animations/letter-spacing-interpolation.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-text/animations/text-indent-composition.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-text/animations/text-indent-interpolation.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-text/animations/word-spacing-composition.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-text/animations/word-spacing-interpolation.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-text/i18n/css3-text-line-break-baspglwj-026.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-text/i18n/ja/css-text-line-break-ja-in-loose.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-text/i18n/ja/css-text-line-break-ja-pr-normal.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-text/i18n/ja/css-text-line-break-ja-pr-strict.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-text/i18n/other-lang/css-text-line-break-de-in-loose.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-text/i18n/other-lang/css-text-line-break-de-pr-loose.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-text/i18n/other-lang/css-text-line-break-de-pr-normal.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-text/i18n/other-lang/css-text-line-break-de-pr-strict.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-text/i18n/unknown-lang/css-text-line-break-cj-strict.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-text/i18n/unknown-lang/css-text-line-break-in-loose.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-text/i18n/unknown-lang/css-text-line-break-iteration-loose.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-text/i18n/unknown-lang/css-text-line-break-pr-loose.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-text/i18n/unknown-lang/css-text-line-break-pr-normal.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-text/i18n/unknown-lang/css-text-line-break-pr-strict.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-text/i18n/zh/css-text-line-break-zh-in-loose.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-text/i18n/zh/css-text-line-break-zh-pr-normal.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-text/i18n/zh/css-text-line-break-zh-pr-strict.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-text/inheritance.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-text/parsing/hanging-punctuation-valid.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-text/parsing/tab-size-computed.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-text/parsing/text-align-all-valid.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-text/parsing/text-align-computed.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-text/parsing/text-align-last-computed.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-text/parsing/text-align-last-valid.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-text/parsing/text-align-valid.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-text/parsing/text-indent-computed.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-text/parsing/text-indent-valid.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-text/parsing/text-justify-computed.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-text/parsing/text-justify-valid.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-text/parsing/text-transform-computed.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-text/parsing/text-transform-valid.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-text/parsing/word-boundary-detection-computed.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-text/parsing/word-boundary-detection-valid.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-text/parsing/word-boundary-expansion-computed.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-text/parsing/word-boundary-expansion-valid.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-text/tab-size/tab-size.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-text/text-align/text-align-last-empty-inline.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-text/white-space/seg-break-transformation-001.tentative.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-text/white-space/seg-break-transformation-002.tentative.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-text/white-space/seg-break-transformation-003.tentative.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-text/white-space/seg-break-transformation-004.tentative.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-text/white-space/seg-break-transformation-008.tentative.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-text/white-space/seg-break-transformation-009.tentative.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-text/white-space/trailing-space-position-001.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-text/white-space/white-space-collapse-002.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-transforms/3d-rendering-context-behavior.tentative.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-transforms/animation/composited-transform.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-transforms/animation/list-interpolation.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-transforms/animation/perspective-composition.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-transforms/animation/perspective-interpolation.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-transforms/animation/perspective-origin-interpolation.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-transforms/animation/rotate-composition.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-transforms/animation/rotate-interpolation.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-transforms/animation/scale-composition.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-transforms/animation/scale-interpolation.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-transforms/animation/transform-composition.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-transforms/animation/transform-interpolation-001.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-transforms/animation/transform-interpolation-003.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-transforms/animation/transform-interpolation-004.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-transforms/animation/transform-interpolation-006.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-transforms/animation/transform-matrix-composition.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-transforms/animation/transform-origin-interpolation.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-transforms/animation/transform-perspective-composition.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-transforms/animation/transform-rotate-composition.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-transforms/animation/transform-scale-composition.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-transforms/animation/transform-skew-composition.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-transforms/animation/transform-translate-composition.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-transforms/animation/translate-composition.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-transforms/inheritance.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-transforms/parsing/rotate-parsing-valid.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-transforms/parsing/scale-parsing-valid.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-transforms/parsing/transform-box-computed.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-transforms/parsing/transform-box-valid.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-transforms/preserve-3d-flat-grouping-properties.tentative.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-transforms/transform-origin-014.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-transforms/transform-percent-009.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-transforms/transform-scale-hittest.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-transforms/transforms-support-calc.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-transforms/translate-getComputedStyle.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-transitions/AnimationEffect-getComputedTiming.tentative.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-transitions/CSSTransition-canceling.tentative.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-transitions/CSSTransition-currentTime.tentative.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-transitions/CSSTransition-effect.tentative.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-transitions/CSSTransition-finished.tentative.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-transitions/CSSTransition-ready.tentative.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-transitions/CSSTransition-startTime.tentative.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-transitions/CSSTransition-transitionProperty.tentative.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-transitions/Document-getAnimations.tentative.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-transitions/Element-getAnimations.tentative.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-transitions/KeyframeEffect-getKeyframes.tentative.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-transitions/KeyframeEffect-setKeyframes.tentative.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-transitions/KeyframeEffect-target.tentative.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-transitions/animations/text-shadow-composition.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-transitions/animations/text-shadow-interpolation.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-transitions/animations/vertical-align-composition.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-transitions/animations/vertical-align-interpolation.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-transitions/animations/z-index-interpolation.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-transitions/event-dispatch.tentative.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-transitions/idlharness.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-transitions/non-rendered-element-004.tentative.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-transitions/parsing/transition-timing-function-valid.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-transitions/properties-value-001.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-transitions/properties-value-002.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-transitions/properties-value-003.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-transitions/properties-value-implicit-001.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-transitions/properties-value-inherit-001.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-transitions/properties-value-inherit-002.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-transitions/transition-property-002.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-transitions/transitioncancel-002.html [ Timeout ] -crbug.com/1050754 external/wpt/css/css-transitions/zero-duration-multiple-transition.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-typed-om/CSSMatrixComponent-DOMMatrix-mutable.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-typed-om/idlharness.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-typed-om/stylevalue-normalization/normalize-image.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-typed-om/stylevalue-subclasses/numeric-objects/cssUnitValue.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-typed-om/stylevalue-subclasses/numeric-objects/numeric-factory.tentative.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-typed-om/the-stylepropertymap/properties/alignment-baseline.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-typed-om/the-stylepropertymap/properties/all.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-typed-om/the-stylepropertymap/properties/animation-name.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-typed-om/the-stylepropertymap/properties/background-position.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-typed-om/the-stylepropertymap/properties/background-repeat.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-typed-om/the-stylepropertymap/properties/background.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-typed-om/the-stylepropertymap/properties/border-radius.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-typed-om/the-stylepropertymap/properties/break.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-typed-om/the-stylepropertymap/properties/clip-path.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-typed-om/the-stylepropertymap/properties/display.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-typed-om/the-stylepropertymap/properties/dominant-baseline.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-typed-om/the-stylepropertymap/properties/fill-color.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-typed-om/the-stylepropertymap/properties/fill.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-typed-om/the-stylepropertymap/properties/flex-basis.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-typed-om/the-stylepropertymap/properties/font-language-override.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-typed-om/the-stylepropertymap/properties/font-palette.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-typed-om/the-stylepropertymap/properties/font-presentation.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-typed-om/the-stylepropertymap/properties/font-size-adjust.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-typed-om/the-stylepropertymap/properties/font-size.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-typed-om/the-stylepropertymap/properties/font-stretch.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-typed-om/the-stylepropertymap/properties/font-style.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-typed-om/the-stylepropertymap/properties/font-variant-alternates.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-typed-om/the-stylepropertymap/properties/font-variant-emoji.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-typed-om/the-stylepropertymap/properties/font-weight.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-typed-om/the-stylepropertymap/properties/grid-gap.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-typed-om/the-stylepropertymap/properties/grid-template.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-typed-om/the-stylepropertymap/properties/grid.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-typed-om/the-stylepropertymap/properties/image-rendering.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-typed-om/the-stylepropertymap/properties/letter-spacing.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-typed-om/the-stylepropertymap/properties/line-height-step.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-typed-om/the-stylepropertymap/properties/line-height.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-typed-om/the-stylepropertymap/properties/list-style-type.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-typed-om/the-stylepropertymap/properties/logical.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-typed-om/the-stylepropertymap/properties/margin.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-typed-om/the-stylepropertymap/properties/mask-image.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-typed-om/the-stylepropertymap/properties/offset-anchor.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-typed-om/the-stylepropertymap/properties/offset-path.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-typed-om/the-stylepropertymap/properties/offset-position.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-typed-om/the-stylepropertymap/properties/offset-rotate.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-typed-om/the-stylepropertymap/properties/offset.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-typed-om/the-stylepropertymap/properties/outline-style.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-typed-om/the-stylepropertymap/properties/overflow-wrap.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-typed-om/the-stylepropertymap/properties/overflow.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-typed-om/the-stylepropertymap/properties/page.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-typed-om/the-stylepropertymap/properties/paint-order.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-typed-om/the-stylepropertymap/properties/perspective-origin.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-typed-om/the-stylepropertymap/properties/perspective.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-typed-om/the-stylepropertymap/properties/quotes.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-typed-om/the-stylepropertymap/properties/scroll-snap-align.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-typed-om/the-stylepropertymap/properties/scroll-snap-type.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-typed-om/the-stylepropertymap/properties/scrollbar-gutter.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-typed-om/the-stylepropertymap/properties/scrollbar-width.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-typed-om/the-stylepropertymap/properties/shape-outside.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-typed-om/the-stylepropertymap/properties/speak.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-typed-om/the-stylepropertymap/properties/stroke-linejoin.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-typed-om/the-stylepropertymap/properties/stroke.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-typed-om/the-stylepropertymap/properties/text-combine-upright.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-typed-om/the-stylepropertymap/properties/text-decoration-line.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-typed-om/the-stylepropertymap/properties/text-decoration-skip.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-typed-om/the-stylepropertymap/properties/text-decoration-thickness.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-typed-om/the-stylepropertymap/properties/text-emphasis-color.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-typed-om/the-stylepropertymap/properties/text-indent.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-typed-om/the-stylepropertymap/properties/text-justify.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-typed-om/the-stylepropertymap/properties/text-overflow.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-typed-om/the-stylepropertymap/properties/text-size-adjust.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-typed-om/the-stylepropertymap/properties/text-transform.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-typed-om/the-stylepropertymap/properties/text-underline-offset.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-typed-om/the-stylepropertymap/properties/transform-box.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-typed-om/the-stylepropertymap/properties/transform-style.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-typed-om/the-stylepropertymap/properties/transform.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-typed-om/the-stylepropertymap/properties/transition.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-typed-om/the-stylepropertymap/properties/user-select.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-typed-om/the-stylepropertymap/properties/word-spacing.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-typed-om/the-stylepropertymap/properties/word-wrap.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-typed-om/the-stylepropertymap/properties/writing-mode.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-typed-om/the-stylepropertymap/properties/z-index.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-ui/animation/caret-color-composition.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-ui/animation/caret-color-interpolation.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-ui/animation/outline-color-interpolation.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-ui/animation/outline-offset-interpolation.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-ui/animation/outline-width-composition.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-ui/animation/outline-width-interpolation.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-ui/appearance-cssom-001.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-ui/appearance-initial-value-001.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-ui/appearance-parsing.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-ui/appearance-property.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-ui/appearance-serialization.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-ui/inheritance.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-ui/outline-017.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-ui/parsing/outline-color-valid-optional.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-ui/parsing/outline-offset-computed.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-ui/parsing/outline-valid-optional.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-ui/parsing/outline-width-computed.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-ui/parsing/resize-invalid.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-ui/parsing/user-select-computed.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-ui/parsing/user-select-valid.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-ui/text-overflow-023.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-ui/webkit-appearance-parsing.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-ui/webkit-appearance-property.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-ui/webkit-appearance-serialization.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-values/calc-background-position-003.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-values/calc-integer.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-values/calc-nesting-002.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-values/calc-numbers.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-values/calc-serialization-002.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-values/calc-serialization.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-values/calc-z-index-fractions-001.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-values/ch-empty-pseudo-recalc-on-font-load.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-values/ch-pseudo-recalc-on-font-load.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-values/lh-rlh-on-root-001.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-values/minmax-angle-serialize.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-values/minmax-integer-computed.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-values/minmax-length-serialize.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-values/minmax-number-serialize.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-values/minmax-percentage-serialize.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-values/minmax-time-serialize.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-values/round-function.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-values/viewport-units-after-font-load.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-variables/variable-definition-keywords.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-variables/variable-definition.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-variables/variable-first-line.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-variables/variable-invalidation.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-variables/variable-presentation-attribute.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-variables/variable-substitution-basic.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-variables/variable-transitions-from-no-value.html [ Timeout ] -crbug.com/1050754 external/wpt/css/css-variables/variable-transitions-to-no-value.html [ Timeout ] -crbug.com/1050754 external/wpt/css/css-variables/variable-transitions-transition-property-variable-before-value.html [ Timeout ] -crbug.com/1050754 external/wpt/css/css-variables/variable-transitions-value-before-transition-property-variable.html [ Timeout ] -crbug.com/1050754 external/wpt/css/css-will-change/parsing/will-change-computed.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-will-change/parsing/will-change-invalid.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-writing-modes/orthogonal-parent-shrink-to-fit-001.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-writing-modes/orthogonal-parent-shrink-to-fit-001c.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-writing-modes/orthogonal-parent-shrink-to-fit-001d.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-writing-modes/orthogonal-parent-shrink-to-fit-001g.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-writing-modes/orthogonal-parent-shrink-to-fit-001h.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-writing-modes/orthogonal-parent-shrink-to-fit-001k.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-writing-modes/orthogonal-parent-shrink-to-fit-001l.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-writing-modes/orthogonal-parent-shrink-to-fit-001o.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-writing-modes/orthogonal-parent-shrink-to-fit-001p.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/css-writing-modes/orthogonal-parent-shrink-to-fit-001s.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-writing-modes/orthogonal-parent-shrink-to-fit-001t.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-writing-modes/orthogonal-parent-shrink-to-fit-001w.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-writing-modes/orthogonal-parent-shrink-to-fit-001x.html [ Failure ] -crbug.com/1050754 external/wpt/css/css-writing-modes/wm-propagation-body-scroll-offset-vertical-rl.html [ Failure ] -crbug.com/1050754 external/wpt/css/cssom-view/MediaQueryList-addListener-handleEvent.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/cssom-view/MediaQueryList-addListener-removeListener.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/cssom-view/MediaQueryList-extends-EventTarget-interop.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/cssom-view/MediaQueryList-extends-EventTarget.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/cssom-view/MediaQueryListEvent.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/cssom-view/client-props-root.html [ Failure ] -crbug.com/1050754 external/wpt/css/cssom-view/cssom-getBoundingClientRect-003.html [ Failure ] -crbug.com/1050754 external/wpt/css/cssom-view/cssom-getBoxQuads-001.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/cssom-view/cssom-view-img-attributes-001.html [ Failure ] -crbug.com/1050754 external/wpt/css/cssom-view/dom-element-scroll.html [ Failure ] -crbug.com/1050754 external/wpt/css/cssom-view/elementFromPoint.html [ Failure ] -crbug.com/1050754 external/wpt/css/cssom-view/elementFromPosition.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/cssom-view/elementScroll-002.html [ Failure ] -crbug.com/1050754 external/wpt/css/cssom-view/elementScroll.html [ Failure ] -crbug.com/1050754 external/wpt/css/cssom-view/elementsFromPoint-table.html [ Failure ] -crbug.com/1050754 external/wpt/css/cssom-view/elementsFromPoint.html [ Failure ] -crbug.com/1050754 external/wpt/css/cssom-view/getBoundingClientRect-empty-inline.html [ Failure ] -crbug.com/1050754 external/wpt/css/cssom-view/mouseEvent.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/cssom-view/offsetTopLeft-trailing-space-inline.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/cssom-view/scroll-behavior-default-css.html [ Failure ] -crbug.com/1050754 external/wpt/css/cssom-view/scroll-behavior-element.html [ Failure ] -crbug.com/1050754 external/wpt/css/cssom-view/scroll-behavior-main-frame-root.html [ Failure ] -crbug.com/1050754 external/wpt/css/cssom-view/scroll-behavior-main-frame-window.html [ Failure ] -crbug.com/1050754 external/wpt/css/cssom-view/scroll-behavior-scrollintoview-nested.html [ Failure ] -crbug.com/1050754 external/wpt/css/cssom-view/scroll-behavior-smooth-positions.html [ Failure ] -crbug.com/1050754 external/wpt/css/cssom-view/scroll-behavior-smooth.html [ Failure ] -crbug.com/1050754 external/wpt/css/cssom-view/scroll-behavior-subframe-root.html [ Failure ] -crbug.com/1050754 external/wpt/css/cssom-view/scroll-behavior-subframe-window.html [ Failure ] -crbug.com/1050754 external/wpt/css/cssom-view/scrollIntoView-shadow.html [ Failure ] -crbug.com/1050754 external/wpt/css/cssom-view/scrollIntoView-sideways-lr-writing-mode-and-rtl-direction.html [ Failure ] -crbug.com/1050754 external/wpt/css/cssom-view/scrollIntoView-sideways-lr-writing-mode.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/cssom-view/scrollIntoView-sideways-rl-writing-mode-and-rtl-direction.html [ Failure ] -crbug.com/1050754 external/wpt/css/cssom-view/scrollIntoView-sideways-rl-writing-mode.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/cssom-view/scrollIntoView-smooth.html [ Failure ] -crbug.com/1050754 external/wpt/css/cssom-view/scrollIntoView-svg-shape.html [ Failure ] -crbug.com/1050754 external/wpt/css/cssom-view/scrollLeft-of-scroller-with-wider-scrollbar.html [ Failure ] -crbug.com/1050754 external/wpt/css/cssom-view/scrollWidthHeight.xht [ Failure ] -crbug.com/1050754 external/wpt/css/cssom-view/scrollWidthHeightWhenNotScrollable.xht [ Failure ] -crbug.com/1050754 external/wpt/css/cssom-view/scrolling-quirks-vs-nonquirks.html [ Failure ] -crbug.com/1050754 external/wpt/css/cssom-view/scrollintoview.html [ Failure ] -crbug.com/1050754 external/wpt/css/cssom-view/table-client-props.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/cssom-view/table-offset-props.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/cssom-view/table-scroll-props.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/cssom/CSSGroupingRule-insertRule.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/cssom/CSSKeyframesRule.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/cssom/CSSStyleSheet-constructable-disallow-import.tentative.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/cssom/CSSStyleSheet-constructable-duplicate.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/cssom/CSSStyleSheet-constructable.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/cssom/computed-style-002.html [ Failure ] -crbug.com/1050754 external/wpt/css/cssom/computed-style-003.html [ Failure ] -crbug.com/1050754 external/wpt/css/cssom/computed-style-004.html [ Failure ] -crbug.com/1050754 external/wpt/css/cssom/cssstyledeclaration-csstext.html [ Failure ] -crbug.com/1050754 external/wpt/css/cssom/cssstyledeclaration-properties.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/cssom/cssstyledeclaration-setter-form-controls.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/cssom/cssstyledeclaration-setter-logical.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/cssom/font-family-serialization-001.html [ Failure ] -crbug.com/1050754 external/wpt/css/cssom/getComputedStyle-detached-subtree.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/cssom/getComputedStyle-insets-absolute.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/cssom/getComputedStyle-insets-fixed.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/cssom/getComputedStyle-pseudo.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/cssom/idlharness.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/cssom/serialize-values.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/cssom/serialize-variable-reference.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/cssom/shorthand-values.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/cssom/ttwf-cssom-doc-ext-load-count.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/filter-effects/animation/backdrop-filter-interpolation-001.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/filter-effects/animation/filter-interpolation-001.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/filter-effects/animation/filter-interpolation-002.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/filter-effects/animation/filter-interpolation-003.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/filter-effects/idlharness.any.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/geometry/DOMMatrix2DInit-validate-fixup.html [ Failure ] -crbug.com/1050754 external/wpt/css/mediaqueries/forced-colors.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/mediaqueries/navigation-controls.tentative.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/mediaqueries/prefers-contrast.html [ Failure ] -crbug.com/1050754 external/wpt/css/mediaqueries/prefers-reduced-data.html [ Failure ] -crbug.com/1050754 external/wpt/css/motion/animation/offset-anchor-composition.html [ Failure ] -crbug.com/1050754 external/wpt/css/motion/animation/offset-anchor-interpolation.html [ Failure ] -crbug.com/1050754 external/wpt/css/motion/animation/offset-distance-composition.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/motion/animation/offset-distance-interpolation.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/motion/animation/offset-path-composition.html [ Failure ] -crbug.com/1050754 external/wpt/css/motion/animation/offset-path-interpolation-005.html [ Failure ] -crbug.com/1050754 external/wpt/css/motion/animation/offset-position-composition.html [ Failure ] -crbug.com/1050754 external/wpt/css/motion/animation/offset-position-interpolation.html [ Failure ] -crbug.com/1050754 external/wpt/css/motion/animation/offset-rotate-composition.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/motion/animation/offset-rotate-interpolation.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/motion/inheritance.html [ Failure ] -crbug.com/1050754 external/wpt/css/motion/offset-supports-calc.html [ Failure ] -crbug.com/1050754 external/wpt/css/motion/parsing/offset-anchor-computed.html [ Failure ] -crbug.com/1050754 external/wpt/css/motion/parsing/offset-anchor-parsing-valid.html [ Failure ] -crbug.com/1050754 external/wpt/css/motion/parsing/offset-parsing-valid.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/motion/parsing/offset-path-computed.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/motion/parsing/offset-path-parsing-valid.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/motion/parsing/offset-position-computed.html [ Failure ] -crbug.com/1050754 external/wpt/css/motion/parsing/offset-position-parsing-valid.html [ Failure ] -crbug.com/1050754 external/wpt/css/motion/parsing/offset-shorthand.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/selectors/attribute-selectors/attribute-case/cssom.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/selectors/attribute-selectors/attribute-case/semantics.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/selectors/attribute-selectors/attribute-case/syntax.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/selectors/focus-display-none-001.html [ Failure ] -crbug.com/1050754 external/wpt/css/selectors/focus-visible-005.html [ Failure ] -crbug.com/1050754 external/wpt/css/selectors/focus-visible-007.html [ Failure ] -crbug.com/1050754 external/wpt/css/selectors/focus-visible-009.html [ Timeout ] -crbug.com/1050754 external/wpt/css/selectors/focus-visible-010.html [ Timeout ] -crbug.com/1050754 external/wpt/css/selectors/focus-visible-011.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/selectors/invalidation/is.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/selectors/invalidation/where.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/selectors/is-nested.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/selectors/is-specificity.html [ Failure Pass ] -crbug.com/1050754 external/wpt/css/selectors/user-invalid.html [ Failure Pass ] -crbug.com/1050754 external/wpt/custom-elements/HTMLElement-constructor.html [ Failure Pass ] -crbug.com/1050754 external/wpt/custom-elements/custom-element-registry/per-global.html [ Failure Pass ] -crbug.com/1050754 external/wpt/custom-elements/form-associated/ElementInternals-accessibility.html [ Failure ] -crbug.com/1050754 external/wpt/custom-elements/historical.html [ Failure Pass ] -crbug.com/1050754 external/wpt/custom-elements/htmlconstructor/newtarget.html [ Failure Pass ] -crbug.com/1050754 external/wpt/custom-elements/perform-microtask-checkpoint-before-construction.html [ Failure Pass ] -crbug.com/1050754 external/wpt/custom-elements/range-and-constructors.html [ Failure Pass ] -crbug.com/1050754 external/wpt/custom-elements/reactions/HTMLInputElement.html [ Failure ] -crbug.com/1050754 external/wpt/custom-elements/state/tentative/ElementInternals-states.html [ Failure ] -crbug.com/1050754 external/wpt/custom-elements/state/tentative/state-pseudo-class.html [ Failure ] -crbug.com/1050754 external/wpt/delegated-ink/exception-thrown-bad-color.tentative.html [ Failure ] -crbug.com/1050754 external/wpt/delegated-ink/exception-thrown-diameter-less-than-or-equal-to-0.tentative.html [ Failure ] -crbug.com/1050754 external/wpt/delegated-ink/exception-thrown-untrusted-event.tentative.window.html [ Failure ] -crbug.com/1050754 external/wpt/delegated-ink/requestPresenter-returns-valid-promise.tentative.window.html [ Failure ] -crbug.com/1050754 external/wpt/document-policy/experimental-features/document-write.tentative.html [ Failure ] -crbug.com/1050754 external/wpt/document-policy/experimental-features/layout-animations-disabled-tentative.html [ Failure ] -crbug.com/1050754 external/wpt/document-policy/experimental-features/layout-animations-disabled-violation-report-js-tentative.html [ Timeout ] -crbug.com/1050754 external/wpt/document-policy/experimental-features/layout-animations-disabled-violation-report-keyframes-tentative.html [ Timeout ] -crbug.com/1050754 external/wpt/document-policy/experimental-features/sync-script.tentative.https.sub.html [ Failure ] -crbug.com/1050754 external/wpt/document-policy/experimental-features/unsized-media.tentative.https.sub.html [ Failure ] -crbug.com/1050754 external/wpt/document-policy/font-display/report-only-auto.tentative.html [ Failure ] -crbug.com/1050754 external/wpt/document-policy/font-display/report-only-blank.tentative.html [ Failure ] -crbug.com/1050754 external/wpt/document-policy/font-display/report-only-block.tentative.html [ Failure ] -crbug.com/1050754 external/wpt/document-policy/font-display/report-only-swap.tentative.html [ Failure ] -crbug.com/1050754 external/wpt/document-policy/font-display/reporting-auto.tentative.html [ Failure ] -crbug.com/1050754 external/wpt/document-policy/font-display/reporting-blank.tentative.html [ Failure ] -crbug.com/1050754 external/wpt/document-policy/font-display/reporting-block.tentative.html [ Failure ] -crbug.com/1050754 external/wpt/document-policy/font-display/reporting-swap.tentative.html [ Failure ] -crbug.com/1050754 external/wpt/document-policy/reporting/document-write-report-only-tentative.html [ Timeout ] -crbug.com/1050754 external/wpt/document-policy/reporting/document-write-reporting-tentative.html [ Failure ] -crbug.com/1050754 external/wpt/document-policy/reporting/lossy-images-max-bpp-reporting-onload-tentative.html [ Timeout ] -crbug.com/1050754 external/wpt/document-policy/reporting/lossy-images-max-bpp-reporting-tentative.html [ Timeout ] -crbug.com/1050754 external/wpt/document-policy/reporting/oversized-images-reporting-tentative.html [ Timeout ] -crbug.com/1050754 external/wpt/document-policy/reporting/unsized-media-reporting-tentative.html [ Timeout ] -crbug.com/1050754 external/wpt/document-policy/required-policy/document-policy.html [ Failure ] -crbug.com/1050754 external/wpt/document-policy/required-policy/no-document-policy.html [ Failure ] -crbug.com/1050754 external/wpt/document-policy/required-policy/required-document-policy-nested.html [ Failure ] -crbug.com/1050754 external/wpt/document-policy/required-policy/required-document-policy.html [ Failure ] -crbug.com/1050754 external/wpt/document-policy/required-policy/separate-document-policies.html [ Failure ] -crbug.com/1050754 external/wpt/dom/collections/HTMLCollection-as-prototype.html [ Failure Pass ] -crbug.com/1050754 external/wpt/dom/collections/HTMLCollection-delete.html [ Failure Pass ] -crbug.com/1050754 external/wpt/dom/collections/HTMLCollection-own-props.html [ Failure Pass ] -crbug.com/1050754 external/wpt/dom/collections/HTMLCollection-supported-property-indices.html [ Failure Pass ] -crbug.com/1050754 external/wpt/dom/collections/HTMLCollection-supported-property-names.html [ Failure Pass ] -crbug.com/1050754 external/wpt/dom/events/Event-dispatch-click.html [ Timeout ] -crbug.com/1050754 external/wpt/dom/events/Event-dispatch-handlers-changed.html [ Failure Pass ] -crbug.com/1050754 external/wpt/dom/events/Event-dispatch-listener-order.window.html [ Failure Pass ] -crbug.com/1050754 external/wpt/dom/events/Event-dispatch-on-disabled-elements.html [ Pass Timeout ] -crbug.com/1050754 external/wpt/dom/events/Event-dispatch-order-at-target.html [ Failure Pass ] -crbug.com/1050754 external/wpt/dom/events/EventListener-handleEvent.html [ Failure Pass ] -crbug.com/1050754 external/wpt/dom/events/EventTarget-dispatchEvent.html [ Failure Pass ] -crbug.com/1050754 external/wpt/dom/events/document-level-touchmove-event-listener-passive-by-default.html [ Failure Timeout ] -crbug.com/1050754 external/wpt/dom/events/event-global-extra.window.html [ Failure Pass ] -crbug.com/1050754 external/wpt/dom/events/relatedTarget.window.html [ Failure Pass ] -crbug.com/1050754 external/wpt/dom/events/scrolling/input-text-scroll-event-when-using-arrow-keys.html [ Timeout ] -crbug.com/1050754 external/wpt/dom/events/scrolling/overscroll-deltas.html [ Failure Timeout ] -crbug.com/1050754 external/wpt/dom/events/scrolling/overscroll-event-fired-to-document.html [ Failure Timeout ] -crbug.com/1050754 external/wpt/dom/events/scrolling/overscroll-event-fired-to-element-with-overscroll-behavior.html [ Failure Timeout ] -crbug.com/1050754 external/wpt/dom/events/scrolling/overscroll-event-fired-to-scrolled-element.html [ Failure ] -crbug.com/1050754 external/wpt/dom/events/scrolling/overscroll-event-fired-to-window.html [ Failure Timeout ] -crbug.com/1050754 external/wpt/dom/events/scrolling/scrollend-event-fired-after-snap.html [ Failure Timeout ] -crbug.com/1050754 external/wpt/dom/events/scrolling/scrollend-event-fired-for-programmatic-scroll.html [ Failure ] -crbug.com/1050754 external/wpt/dom/events/scrolling/scrollend-event-fired-for-scrollIntoView.html [ Failure ] -crbug.com/1050754 external/wpt/dom/events/scrolling/scrollend-event-fired-to-document.html [ Failure Timeout ] -crbug.com/1050754 external/wpt/dom/events/scrolling/scrollend-event-fired-to-element-with-overscroll-behavior.html [ Failure Timeout ] -crbug.com/1050754 external/wpt/dom/events/scrolling/scrollend-event-fired-to-scrolled-element.html [ Failure ] -crbug.com/1050754 external/wpt/dom/events/scrolling/scrollend-event-fired-to-window.html [ Failure Timeout ] -crbug.com/1050754 external/wpt/dom/events/scrolling/scrollend-event-for-user-scroll.html [ Timeout ] -crbug.com/1050754 external/wpt/dom/events/shadow-relatedTarget.html [ Timeout ] -crbug.com/1050754 external/wpt/dom/historical.html [ Failure Pass ] -crbug.com/1050754 external/wpt/dom/idlharness.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/dom/idlharness.window.html?exclude=Node [ Failure Pass ] -crbug.com/1050754 external/wpt/dom/lists/DOMTokenList-coverage-for-attributes.html [ Failure Pass ] -crbug.com/1050754 external/wpt/dom/nodes/DOMImplementation-createDocument.html [ Failure Pass ] -crbug.com/1050754 external/wpt/dom/nodes/Document-createElementNS.html [ Failure Pass ] -crbug.com/1050754 external/wpt/dom/nodes/Document-createEvent.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/dom/nodes/Element-closest.html [ Failure Pass ] -crbug.com/1050754 external/wpt/dom/nodes/Element-matches.html [ Failure Pass ] -crbug.com/1050754 external/wpt/dom/nodes/Element-webkitMatchesSelector.html [ Failure Pass ] -crbug.com/1050754 external/wpt/dom/nodes/ParentNode-querySelector-All-xht.xht [ Failure Pass ] -crbug.com/1050754 external/wpt/dom/nodes/ParentNode-querySelector-All.html [ Failure Pass ] -crbug.com/1050754 external/wpt/dom/nodes/adoption.window.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/dom/aria-attribute-reflection.html [ Failure ] -crbug.com/1050754 external/wpt/html/dom/aria-element-reflection.html [ Failure ] -crbug.com/1050754 external/wpt/dom/nodes/remove-and-adopt-thcrash.html [ Failure ] -crbug.com/1050754 external/wpt/dom/nodes/remove-unscopable.html [ Failure Pass ] -crbug.com/1050754 external/wpt/dom/ranges/StaticRange-constructor.html [ Failure Pass ] -crbug.com/1050754 external/wpt/domparsing/DOMParser-parseFromString-xml.html [ Failure Pass ] -crbug.com/1050754 external/wpt/domparsing/XMLSerializer-serializeToString.html [ Failure Pass ] -crbug.com/1050754 external/wpt/domparsing/innerhtml-01.xhtml [ Failure Pass ] -crbug.com/1050754 external/wpt/domparsing/innerhtml-05.xhtml [ Failure Pass ] -crbug.com/1050754 external/wpt/editing/event.html [ Failure Pass ] -crbug.com/1050754 external/wpt/editing/other/delete.html [ Failure Pass ] -crbug.com/1050754 external/wpt/editing/other/exec-command-with-text-editor.tentative.html [ Failure Pass ] -crbug.com/1050754 external/wpt/editing/other/exec-command-without-editable-element.tentative.html [ Failure Pass ] -crbug.com/1050754 external/wpt/editing/other/extra-text-nodes.html [ Failure Pass ] -crbug.com/1050754 external/wpt/editing/other/restoration.html [ Failure Pass ] -crbug.com/1050754 external/wpt/editing/run/backcolor.html [ Failure Pass ] -crbug.com/1050754 external/wpt/editing/run/bold.html?1-1000 [ Failure ] -crbug.com/1050754 external/wpt/editing/run/bold.html?1001-2000 [ Failure ] -crbug.com/1050754 external/wpt/editing/run/bold.html?2001-3000 [ Failure ] -crbug.com/1050754 external/wpt/editing/run/bold.html?3001-last [ Failure Pass ] -crbug.com/1050754 external/wpt/editing/run/createlink.html [ Failure Pass ] -crbug.com/1050754 external/wpt/editing/run/delete.html?1-1000 [ Failure Pass ] -crbug.com/1050754 external/wpt/editing/run/delete.html?1001-2000 [ Failure ] -crbug.com/1050754 external/wpt/editing/run/delete.html?2001-3000 [ Failure Pass ] -crbug.com/1050754 external/wpt/editing/run/delete.html?3001-4000 [ Failure Pass ] -crbug.com/1050754 external/wpt/editing/run/delete.html?4001-5000 [ Failure Pass ] -crbug.com/1050754 external/wpt/editing/run/delete.html?5001-6000 [ Failure Pass ] -crbug.com/1050754 external/wpt/editing/run/delete.html?6001-last [ Failure Pass ] -crbug.com/1050754 external/wpt/editing/run/fontname.html?1-1000 [ Failure Pass ] -crbug.com/1050754 external/wpt/editing/run/fontname.html?1001-2000 [ Failure Pass ] -crbug.com/1050754 external/wpt/editing/run/fontname.html?2001-last [ Failure Pass ] -crbug.com/1050754 external/wpt/editing/run/fontsize.html?1-1000 [ Failure Pass ] -crbug.com/1050754 external/wpt/editing/run/fontsize.html?1001-2000 [ Failure Pass ] -crbug.com/1050754 external/wpt/editing/run/fontsize.html?2001-last [ Failure Pass ] -crbug.com/1050754 external/wpt/editing/run/forecolor.html?1-1000 [ Failure Pass ] -crbug.com/1050754 external/wpt/editing/run/forecolor.html?1001-2000 [ Failure Pass ] -crbug.com/1050754 external/wpt/editing/run/forecolor.html?2001-last [ Failure Pass ] -crbug.com/1050754 external/wpt/editing/run/formatblock.html?1-1000 [ Failure Pass ] -crbug.com/1050754 external/wpt/editing/run/formatblock.html?1001-2000 [ Failure Pass ] -crbug.com/1050754 external/wpt/editing/run/formatblock.html?2001-3000 [ Failure Pass ] -crbug.com/1050754 external/wpt/editing/run/formatblock.html?3001-4000 [ Failure Pass ] -crbug.com/1050754 external/wpt/editing/run/formatblock.html?4001-last [ Failure Pass ] -crbug.com/1050754 external/wpt/editing/run/forwarddelete.html?1-1000 [ Failure Pass ] -crbug.com/1050754 external/wpt/editing/run/forwarddelete.html?1001-2000 [ Failure Pass ] -crbug.com/1050754 external/wpt/editing/run/forwarddelete.html?2001-3000 [ Failure Pass ] -crbug.com/1050754 external/wpt/editing/run/forwarddelete.html?3001-4000 [ Failure Pass ] -crbug.com/1050754 external/wpt/editing/run/forwarddelete.html?4001-5000 [ Failure Pass ] -crbug.com/1050754 external/wpt/editing/run/forwarddelete.html?5001-6000 [ Failure Pass ] -crbug.com/1050754 external/wpt/editing/run/forwarddelete.html?6001-last [ Failure Pass ] -crbug.com/1050754 external/wpt/editing/run/hilitecolor.html [ Failure Pass ] -crbug.com/1050754 external/wpt/editing/run/indent.html [ Failure Pass ] -crbug.com/1050754 external/wpt/editing/run/insert-list-items-in-table-cell.html [ Failure Pass ] -crbug.com/1050754 external/wpt/editing/run/inserthorizontalrule.html [ Failure Pass ] -crbug.com/1050754 external/wpt/editing/run/inserthtml.html [ Failure Pass ] -crbug.com/1050754 external/wpt/editing/run/insertimage.html [ Failure Pass ] -crbug.com/1050754 external/wpt/editing/run/insertlinebreak.html [ Failure Pass ] -crbug.com/1050754 external/wpt/editing/run/insertorderedlist.html [ Failure Pass ] -crbug.com/1050754 external/wpt/editing/run/insertparagraph.html?1-1000 [ Failure Pass ] -crbug.com/1050754 external/wpt/editing/run/insertparagraph.html?1001-2000 [ Failure Pass ] -crbug.com/1050754 external/wpt/editing/run/insertparagraph.html?2001-3000 [ Failure Pass ] -crbug.com/1050754 external/wpt/editing/run/insertparagraph.html?3001-4000 [ Failure Pass ] -crbug.com/1050754 external/wpt/editing/run/insertparagraph.html?4001-5000 [ Failure Pass ] -crbug.com/1050754 external/wpt/editing/run/insertparagraph.html?5001-6000 [ Failure Pass ] -crbug.com/1050754 external/wpt/editing/run/insertparagraph.html?6001-last [ Failure Pass ] -crbug.com/1050754 external/wpt/editing/run/inserttext.html?1-1000 [ Failure Pass ] -crbug.com/1050754 external/wpt/editing/run/inserttext.html?1001-2000 [ Failure Pass ] -crbug.com/1050754 external/wpt/editing/run/inserttext.html?2001-last [ Failure Pass ] -crbug.com/1050754 external/wpt/editing/run/insertunorderedlist.html [ Failure Pass ] -crbug.com/1050754 external/wpt/editing/run/italic.html?1-1000 [ Failure ] -crbug.com/1050754 external/wpt/editing/run/italic.html?1001-2000 [ Failure ] -crbug.com/1050754 external/wpt/editing/run/italic.html?2001-last [ Failure Pass ] -crbug.com/1050754 external/wpt/editing/run/justifycenter.html?1-1000 [ Failure Pass ] -crbug.com/1050754 external/wpt/editing/run/justifycenter.html?1001-2000 [ Failure ] -crbug.com/1050754 external/wpt/editing/run/justifycenter.html?2001-3000 [ Failure ] -crbug.com/1050754 external/wpt/editing/run/justifycenter.html?3001-4000 [ Failure Pass ] -crbug.com/1050754 external/wpt/editing/run/justifycenter.html?4001-5000 [ Failure ] -crbug.com/1050754 external/wpt/editing/run/justifycenter.html?5001-6000 [ Failure ] -crbug.com/1050754 external/wpt/editing/run/justifycenter.html?6001-last [ Failure Pass ] -crbug.com/1050754 external/wpt/editing/run/justifyfull.html?1-1000 [ Failure Pass ] -crbug.com/1050754 external/wpt/editing/run/justifyfull.html?1001-2000 [ Failure ] -crbug.com/1050754 external/wpt/editing/run/justifyfull.html?2001-3000 [ Failure ] -crbug.com/1050754 external/wpt/editing/run/justifyfull.html?3001-4000 [ Failure Pass ] -crbug.com/1050754 external/wpt/editing/run/justifyfull.html?4001-last [ Failure ] -crbug.com/1050754 external/wpt/editing/run/justifyleft.html?1-1000 [ Failure Pass ] -crbug.com/1050754 external/wpt/editing/run/justifyleft.html?1001-2000 [ Failure Pass ] -crbug.com/1050754 external/wpt/editing/run/justifyleft.html?2001-last [ Failure Pass ] -crbug.com/1050754 external/wpt/editing/run/justifyright.html?1-1000 [ Failure Pass ] -crbug.com/1050754 external/wpt/editing/run/justifyright.html?1001-2000 [ Failure ] -crbug.com/1050754 external/wpt/editing/run/justifyright.html?2001-3000 [ Failure ] -crbug.com/1050754 external/wpt/editing/run/justifyright.html?3001-4000 [ Failure Pass ] -crbug.com/1050754 external/wpt/editing/run/justifyright.html?4001-last [ Failure ] -crbug.com/1050754 external/wpt/editing/run/misc.html [ Failure Pass ] -crbug.com/1050754 external/wpt/editing/run/multitest.html?1-1000 [ Failure Pass ] -crbug.com/1050754 external/wpt/editing/run/multitest.html?1001-2000 [ Failure Pass ] -crbug.com/1050754 external/wpt/editing/run/multitest.html?2001-3000 [ Failure Pass ] -crbug.com/1050754 external/wpt/editing/run/multitest.html?3001-4000 [ Failure Pass ] -crbug.com/1050754 external/wpt/editing/run/multitest.html?4001-5000 [ Failure Pass ] -crbug.com/1050754 external/wpt/editing/run/multitest.html?5001-6000 [ Failure Pass ] -crbug.com/1050754 external/wpt/editing/run/multitest.html?6001-7000 [ Failure Pass ] -crbug.com/1050754 external/wpt/editing/run/multitest.html?7001-8000 [ Failure Pass ] -crbug.com/1050754 external/wpt/editing/run/multitest.html?8001-9000 [ Failure Pass ] -crbug.com/1050754 external/wpt/editing/run/multitest.html?9001-last [ Failure Pass ] -crbug.com/1050754 external/wpt/editing/run/outdent.html?1-1000 [ Failure Pass ] -crbug.com/1050754 external/wpt/editing/run/outdent.html?1001-2000 [ Failure Pass ] -crbug.com/1050754 external/wpt/editing/run/outdent.html?2001-last [ Failure Pass ] -crbug.com/1050754 external/wpt/editing/run/removeformat.html [ Failure Pass ] -crbug.com/1050754 external/wpt/editing/run/strikethrough.html?1-1000 [ Failure Pass ] -crbug.com/1050754 external/wpt/editing/run/strikethrough.html?1001-2000 [ Failure ] -crbug.com/1050754 external/wpt/editing/run/strikethrough.html?2001-last [ Failure ] -crbug.com/1050754 external/wpt/editing/run/subscript.html [ Failure ] -crbug.com/1050754 external/wpt/editing/run/superscript.html [ Failure ] -crbug.com/1050754 external/wpt/editing/run/underline.html?1-1000 [ Failure Pass ] -crbug.com/1050754 external/wpt/editing/run/underline.html?1001-2000 [ Failure ] -crbug.com/1050754 external/wpt/editing/run/underline.html?2001-last [ Failure ] -crbug.com/1050754 external/wpt/editing/run/unlink.html [ Failure Pass ] -crbug.com/1050754 external/wpt/element-timing/background-image-data-uri.html [ Failure ] -crbug.com/1050754 external/wpt/element-timing/background-image-multiple-elements.html [ Failure ] -crbug.com/1050754 external/wpt/element-timing/background-image-stretched.html [ Failure ] -crbug.com/1050754 external/wpt/element-timing/buffered-flag.html [ Failure ] -crbug.com/1050754 external/wpt/element-timing/cross-origin-element.sub.html [ Failure ] -crbug.com/1050754 external/wpt/element-timing/css-generated-text.html [ Failure ] -crbug.com/1050754 external/wpt/element-timing/image-carousel.html [ Failure ] -crbug.com/1050754 external/wpt/element-timing/image-clipped-svg.html [ Failure ] -crbug.com/1050754 external/wpt/element-timing/image-data-uri.html [ Failure ] -crbug.com/1050754 external/wpt/element-timing/image-not-fully-visible.html [ Failure ] -crbug.com/1050754 external/wpt/element-timing/image-rect-iframe.html [ Failure ] -crbug.com/1050754 external/wpt/element-timing/image-src-change.html [ Failure ] -crbug.com/1050754 external/wpt/element-timing/image-with-css-scale.html [ Failure ] -crbug.com/1050754 external/wpt/element-timing/observe-background-image.html [ Failure ] -crbug.com/1050754 external/wpt/element-timing/observe-elementtiming.html [ Failure ] -crbug.com/1050754 external/wpt/element-timing/observe-multiple-images.html [ Failure ] -crbug.com/1050754 external/wpt/element-timing/observe-svg-image.html [ Failure ] -crbug.com/1050754 external/wpt/element-timing/observe-text.html [ Failure ] -crbug.com/1050754 external/wpt/element-timing/progressively-loaded-image.html [ Failure Pass ] -crbug.com/1050754 external/wpt/element-timing/rectangular-image.html [ Failure ] -crbug.com/1050754 external/wpt/encoding-detection/ar-ISO-8859-6-late.tentative.html [ Failure Pass ] -crbug.com/1050754 external/wpt/encoding-detection/ar-ISO-8859-6.tentative.html [ Failure Pass ] -crbug.com/1050754 external/wpt/encoding-detection/el-windows-1253-late.tentative.html [ Failure Pass ] -crbug.com/1050754 external/wpt/encoding-detection/el-windows-1253.tentative.html [ Failure Pass ] -crbug.com/1050754 external/wpt/encoding-detection/fi-windows-1252-late.tentative.html [ Failure Pass ] -crbug.com/1050754 external/wpt/encoding-detection/ja-EUC-JP-late.tentative.html [ Failure Pass ] -crbug.com/1050754 external/wpt/encoding-detection/ja-EUC-JP.tentative.html [ Failure Pass ] -crbug.com/1050754 external/wpt/encoding-detection/ru-IBM866-late.tentative.html [ Failure ] -crbug.com/1050754 external/wpt/encoding-detection/uk-KOI8-U-late.tentative.html [ Failure Pass ] -crbug.com/1050754 external/wpt/encoding-detection/uk-KOI8-U.tentative.html [ Failure Pass ] -crbug.com/1050754 external/wpt/encoding-detection/utf-8.html [ Failure ] -crbug.com/1050754 external/wpt/encoding-detection/vi-windows-1258-late.tentative.html [ Failure Pass ] -crbug.com/1050754 external/wpt/encoding-detection/vi-windows-1258.tentative.html [ Failure Pass ] -crbug.com/1050754 external/wpt/encoding/encodeInto.any.html [ Failure Pass ] -crbug.com/1050754 external/wpt/encoding/encodeInto.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/encoding/encodeInto.any.worker.html [ Failure Pass ] -crbug.com/1050754 external/wpt/encoding/idlharness.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/encoding/iso-2022-jp-decoder.any.html [ Failure Pass ] -crbug.com/1050754 external/wpt/encoding/iso-2022-jp-decoder.any.worker.html [ Failure Pass ] -crbug.com/1050754 external/wpt/encoding/sniffing.html [ Failure ] -crbug.com/1050754 external/wpt/encoding/streams/backpressure.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/encoding/streams/decode-attributes.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/encoding/streams/decode-bad-chunks.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/encoding/streams/decode-ignore-bom.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/encoding/streams/decode-incomplete-input.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/encoding/streams/decode-non-utf8.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/encoding/streams/decode-split-character.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/encoding/streams/decode-utf8.any.html [ Failure Pass ] -crbug.com/1050754 external/wpt/encoding/streams/decode-utf8.any.serviceworker.html [ Failure Pass ] -crbug.com/1050754 external/wpt/encoding/streams/decode-utf8.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/encoding/streams/decode-utf8.any.worker.html [ Failure Pass ] -crbug.com/1050754 external/wpt/encoding/streams/encode-bad-chunks.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/encoding/streams/encode-utf8.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/encoding/streams/readable-writable-properties.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/encoding/textdecoder-copy.any.html [ Failure Pass ] -crbug.com/1050754 external/wpt/encoding/textdecoder-copy.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/encoding/textdecoder-copy.any.worker.html [ Failure Pass ] -crbug.com/1050754 external/wpt/encoding/textdecoder-streaming.any.html [ Failure Pass ] -crbug.com/1050754 external/wpt/encoding/textdecoder-streaming.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/encoding/textdecoder-streaming.any.worker.html [ Failure Pass ] -crbug.com/1050754 external/wpt/encrypted-media/clearkey-check-status-for-hdcp.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/encrypted-media/clearkey-mp4-playback-destroy-persistent-license.https.html [ Failure ] -crbug.com/1050754 external/wpt/encrypted-media/clearkey-mp4-playback-persistent-license-events.https.html [ Failure ] -crbug.com/1050754 external/wpt/encrypted-media/clearkey-mp4-playback-persistent-license.https.html [ Failure ] -crbug.com/1050754 external/wpt/encrypted-media/clearkey-mp4-playback-persistent-usage-record-events.https.html [ Failure ] -crbug.com/1050754 external/wpt/encrypted-media/clearkey-mp4-playback-persistent-usage-record.https.html [ Failure ] -crbug.com/1050754 external/wpt/encrypted-media/clearkey-mp4-playback-retrieve-destroy-persistent-license.https.html [ Failure ] -crbug.com/1050754 external/wpt/encrypted-media/clearkey-mp4-playback-retrieve-persistent-license.https.html [ Failure ] -crbug.com/1050754 external/wpt/encrypted-media/clearkey-mp4-playback-retrieve-persistent-usage-record.https.html [ Failure ] -crbug.com/1050754 external/wpt/encrypted-media/clearkey-mp4-playback-temporary-clear-encrypted-segmented.https.html [ Failure ] -crbug.com/1050754 external/wpt/encrypted-media/clearkey-mp4-playback-temporary-clear-encrypted.https.html [ Failure ] -crbug.com/1050754 external/wpt/encrypted-media/clearkey-mp4-playback-temporary-encrypted-clear-sources.https.html [ Failure ] -crbug.com/1050754 external/wpt/encrypted-media/clearkey-mp4-playback-temporary-encrypted-clear.https.html [ Failure ] -crbug.com/1050754 external/wpt/encrypted-media/clearkey-mp4-playback-temporary-events.https.html [ Failure ] -crbug.com/1050754 external/wpt/encrypted-media/clearkey-mp4-playback-temporary-multikey-sequential-readyState.https.html [ Failure ] -crbug.com/1050754 external/wpt/encrypted-media/clearkey-mp4-playback-temporary-multikey-sequential.https.html [ Failure ] -crbug.com/1050754 external/wpt/encrypted-media/clearkey-mp4-playback-temporary-multikey.https.html [ Failure ] -crbug.com/1050754 external/wpt/encrypted-media/clearkey-mp4-playback-temporary-multisession.https.html [ Failure ] -crbug.com/1050754 external/wpt/encrypted-media/clearkey-mp4-playback-temporary-setMediaKeys-after-src.https.html [ Failure ] -crbug.com/1050754 external/wpt/encrypted-media/clearkey-mp4-playback-temporary-setMediaKeys-after-update.https.html [ Failure ] -crbug.com/1050754 external/wpt/encrypted-media/clearkey-mp4-playback-temporary-setMediaKeys-immediately.https.html [ Failure ] -crbug.com/1050754 external/wpt/encrypted-media/clearkey-mp4-playback-temporary-setMediaKeys-onencrypted.https.html [ Failure ] -crbug.com/1050754 external/wpt/encrypted-media/clearkey-mp4-playback-temporary-two-videos.https.html [ Failure ] -crbug.com/1050754 external/wpt/encrypted-media/clearkey-mp4-playback-temporary-waitingforkey.https.html [ Failure ] -crbug.com/1050754 external/wpt/encrypted-media/clearkey-mp4-playback-temporary.https.html [ Failure ] -crbug.com/1050754 external/wpt/encrypted-media/clearkey-mp4-setmediakeys-again-after-playback.https.html [ Failure ] -crbug.com/1050754 external/wpt/encrypted-media/clearkey-mp4-setmediakeys-again-after-resetting-src.https.html [ Failure ] -crbug.com/1050754 external/wpt/encrypted-media/clearkey-mp4-waiting-for-a-key.https.html [ Failure ] -crbug.com/1050754 external/wpt/encrypted-media/drm-check-status-for-hdcp.https.html [ Failure ] -crbug.com/1050754 external/wpt/encrypted-media/drm-events-session-closed-event.https.html [ Failure ] -crbug.com/1050754 external/wpt/encrypted-media/drm-events.https.html [ Failure ] -crbug.com/1050754 external/wpt/encrypted-media/drm-expiration.https.html [ Failure ] -crbug.com/1050754 external/wpt/encrypted-media/drm-generate-request-disallowed-input.https.html [ Timeout ] -crbug.com/1050754 external/wpt/encrypted-media/drm-invalid-license.https.html [ Failure ] -crbug.com/1050754 external/wpt/encrypted-media/drm-keystatuses-multiple-sessions.https.html [ Failure ] -crbug.com/1050754 external/wpt/encrypted-media/drm-keystatuses.https.html [ Failure ] -crbug.com/1050754 external/wpt/encrypted-media/drm-mp4-onencrypted.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/encrypted-media/drm-mp4-playback-destroy-persistent-license.https.html [ Failure ] -crbug.com/1050754 external/wpt/encrypted-media/drm-mp4-playback-persistent-license-events.https.html [ Failure ] -crbug.com/1050754 external/wpt/encrypted-media/drm-mp4-playback-persistent-license.https.html [ Failure ] -crbug.com/1050754 external/wpt/encrypted-media/drm-mp4-playback-persistent-usage-record-events.https.html [ Failure ] -crbug.com/1050754 external/wpt/encrypted-media/drm-mp4-playback-persistent-usage-record.https.html [ Failure ] -crbug.com/1050754 external/wpt/encrypted-media/drm-mp4-playback-retrieve-destroy-persistent-license.https.html [ Failure ] -crbug.com/1050754 external/wpt/encrypted-media/drm-mp4-playback-retrieve-persistent-license.https.html [ Failure ] -crbug.com/1050754 external/wpt/encrypted-media/drm-mp4-playback-retrieve-persistent-usage-record.https.html [ Failure ] -crbug.com/1050754 external/wpt/encrypted-media/drm-mp4-playback-temporary-clear-encrypted.https.html [ Failure ] -crbug.com/1050754 external/wpt/encrypted-media/drm-mp4-playback-temporary-encrypted-clear-sources.https.html [ Failure ] -crbug.com/1050754 external/wpt/encrypted-media/drm-mp4-playback-temporary-encrypted-clear.https.html [ Failure ] -crbug.com/1050754 external/wpt/encrypted-media/drm-mp4-playback-temporary-events.https.html [ Failure ] -crbug.com/1050754 external/wpt/encrypted-media/drm-mp4-playback-temporary-expired.https.html [ Failure ] -crbug.com/1050754 external/wpt/encrypted-media/drm-mp4-playback-temporary-multikey-sequential-readyState.https.html [ Failure ] -crbug.com/1050754 external/wpt/encrypted-media/drm-mp4-playback-temporary-multikey-sequential.https.html [ Failure ] -crbug.com/1050754 external/wpt/encrypted-media/drm-mp4-playback-temporary-multikey.https.html [ Failure ] -crbug.com/1050754 external/wpt/encrypted-media/drm-mp4-playback-temporary-multisession.https.html [ Failure ] -crbug.com/1050754 external/wpt/encrypted-media/drm-mp4-playback-temporary-playduration-keystatus.html [ Failure ] -crbug.com/1050754 external/wpt/encrypted-media/drm-mp4-playback-temporary-playduration.html [ Failure ] -crbug.com/1050754 external/wpt/encrypted-media/drm-mp4-playback-temporary-setMediaKeys-after-src.https.html [ Failure ] -crbug.com/1050754 external/wpt/encrypted-media/drm-mp4-playback-temporary-setMediaKeys-after-update.https.html [ Failure ] -crbug.com/1050754 external/wpt/encrypted-media/drm-mp4-playback-temporary-setMediaKeys-immediately.https.html [ Failure ] -crbug.com/1050754 external/wpt/encrypted-media/drm-mp4-playback-temporary-setMediaKeys-onencrypted.https.html [ Failure ] -crbug.com/1050754 external/wpt/encrypted-media/drm-mp4-playback-temporary-two-videos.https.html [ Failure ] -crbug.com/1050754 external/wpt/encrypted-media/drm-mp4-playback-temporary-waitingforkey.https.html [ Failure ] -crbug.com/1050754 external/wpt/encrypted-media/drm-mp4-playback-temporary.https.html [ Failure ] -crbug.com/1050754 external/wpt/encrypted-media/drm-mp4-requestmediakeysystemaccess.https.html [ Failure ] -crbug.com/1050754 external/wpt/encrypted-media/drm-mp4-reset-src-after-setmediakeys.https.html [ Failure ] -crbug.com/1050754 external/wpt/encrypted-media/drm-mp4-setmediakeys-again-after-resetting-src.https.html [ Failure ] -crbug.com/1050754 external/wpt/encrypted-media/drm-mp4-setmediakeys-at-same-time.https.html [ Failure ] -crbug.com/1050754 external/wpt/encrypted-media/drm-mp4-setmediakeys-multiple-times-with-different-mediakeys.https.html [ Failure ] -crbug.com/1050754 external/wpt/encrypted-media/drm-mp4-setmediakeys-multiple-times-with-the-same-mediakeys.https.html [ Failure ] -crbug.com/1050754 external/wpt/encrypted-media/drm-mp4-setmediakeys-to-multiple-video-elements.https.html [ Failure ] -crbug.com/1050754 external/wpt/encrypted-media/drm-mp4-setmediakeys.https.html [ Failure ] -crbug.com/1050754 external/wpt/encrypted-media/drm-mp4-syntax-mediakeys.https.html [ Failure ] -crbug.com/1050754 external/wpt/encrypted-media/drm-mp4-syntax-mediakeysession.https.html [ Failure ] -crbug.com/1050754 external/wpt/encrypted-media/drm-mp4-syntax-mediakeysystemaccess.https.html [ Failure ] -crbug.com/1050754 external/wpt/encrypted-media/drm-mp4-unique-origin.https.html [ Failure ] -crbug.com/1050754 external/wpt/encrypted-media/drm-mp4-waiting-for-a-key.https.html [ Failure ] -crbug.com/1050754 external/wpt/encrypted-media/drm-not-callable-after-createsession.https.html [ Failure ] -crbug.com/1050754 external/wpt/encrypted-media/drm-temporary-license-type.https.html [ Failure ] -crbug.com/1050754 external/wpt/event-timing/buffered-and-duration-threshold.html [ Failure ] -crbug.com/1050754 external/wpt/event-timing/buffered-flag.html [ Pass Timeout ] -crbug.com/1050754 external/wpt/event-timing/click-timing.html [ Failure Timeout ] -crbug.com/1050754 external/wpt/event-timing/crossiframe.html [ Failure Timeout ] -crbug.com/1050754 external/wpt/event-timing/mousedown.html [ Pass Timeout ] -crbug.com/1050754 external/wpt/event-timing/only-observe-firstInput.html [ Failure ] -crbug.com/1050754 external/wpt/event-timing/pointerdown.html [ Pass Timeout ] -crbug.com/1050754 external/wpt/event-timing/programmatic-click-not-observed.html [ Pass Timeout ] -crbug.com/1050754 external/wpt/event-timing/retrievability.html [ Pass Timeout ] -crbug.com/1050754 external/wpt/event-timing/retrieve-firstInput.html [ Failure Pass ] -crbug.com/1050754 external/wpt/event-timing/supported-types.window.html [ Failure Pass ] -crbug.com/1050754 external/wpt/event-timing/timingconditions.html [ Pass Timeout ] -crbug.com/1050754 external/wpt/event-timing/toJSON.html [ Pass Timeout ] -crbug.com/1050754 external/wpt/eventsource/dedicated-worker/eventsource-constructor-non-same-origin.htm [ Failure ] -crbug.com/1050754 external/wpt/eventsource/eventsource-constructor-non-same-origin.htm [ Failure ] -crbug.com/1050754 external/wpt/eventsource/eventsource-constructor-url-bogus.any.html [ Failure Pass ] -crbug.com/1050754 external/wpt/eventsource/eventsource-constructor-url-bogus.any.serviceworker.html [ Failure Pass ] -crbug.com/1050754 external/wpt/eventsource/eventsource-constructor-url-bogus.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/eventsource/eventsource-constructor-url-bogus.any.worker.html [ Failure Pass ] -crbug.com/1050754 external/wpt/eventsource/shared-worker/eventsource-close.htm [ Failure ] -crbug.com/1050754 external/wpt/eventsource/shared-worker/eventsource-constructor-non-same-origin.htm [ Failure ] -crbug.com/1050754 external/wpt/eventsource/shared-worker/eventsource-eventtarget.htm [ Failure ] -crbug.com/1050754 external/wpt/eventsource/shared-worker/eventsource-onmessage.htm [ Failure ] -crbug.com/1050754 external/wpt/eventsource/shared-worker/eventsource-onopen.htm [ Failure ] -crbug.com/1050754 external/wpt/eventsource/shared-worker/eventsource-prototype.htm [ Failure ] -crbug.com/1050754 external/wpt/eventsource/shared-worker/eventsource-url.htm [ Failure ] -crbug.com/1050754 external/wpt/feature-policy/experimental-features/focus-without-user-activation-disabled-tentative.html [ Failure Pass ] -crbug.com/1050754 external/wpt/feature-policy/experimental-features/focus-without-user-activation-enabled-tentative.sub.html [ Timeout ] -crbug.com/1050754 external/wpt/feature-policy/experimental-features/trust-token-redemption-default-feature-policy.tentative.https.sub.html [ Failure ] -crbug.com/1050754 external/wpt/feature-policy/experimental-features/trust-token-redemption-supported-by-feature-policy.tentative.html [ Failure ] -crbug.com/1050754 external/wpt/feature-policy/experimental-features/vertical-scroll-scrollintoview.tentative.html [ Failure ] -crbug.com/1050754 external/wpt/feature-policy/feature-policy-for-sandbox/feature-propagation-to-auxiliary-context.html [ Failure Pass ] -crbug.com/1050754 external/wpt/feature-policy/feature-policy-for-sandbox/sandbox-policies-in-allow-attribute.html [ Failure Timeout ] -crbug.com/1050754 external/wpt/feature-policy/feature-policy-frame-policy-allowed-for-self.https.sub.html [ Failure Pass ] -crbug.com/1050754 external/wpt/feature-policy/feature-policy-frame-policy-allowed-for-some.https.sub.html [ Failure Pass ] -crbug.com/1050754 external/wpt/feature-policy/payment-allowed-by-feature-policy-attribute-redirect-on-load.https.sub.html [ Failure ] -crbug.com/1050754 external/wpt/feature-policy/payment-allowed-by-feature-policy-attribute.https.sub.html [ Failure ] -crbug.com/1050754 external/wpt/feature-policy/payment-allowed-by-feature-policy.https.sub.html [ Failure ] -crbug.com/1050754 external/wpt/feature-policy/payment-default-feature-policy.https.sub.html [ Failure ] -crbug.com/1050754 external/wpt/feature-policy/payment-disabled-by-feature-policy.https.sub.html [ Failure ] -crbug.com/1050754 external/wpt/feature-policy/payment-supported-by-feature-policy.tentative.html [ Failure ] -crbug.com/1050754 external/wpt/feature-policy/permissions-policy-feature-policy-coexist.https.html [ Failure ] -crbug.com/1050754 external/wpt/feature-policy/picture-in-picture-allowed-by-feature-policy-attribute-redirect-on-load.https.sub.html [ Failure ] -crbug.com/1050754 external/wpt/feature-policy/picture-in-picture-allowed-by-feature-policy-attribute.https.sub.html [ Failure ] -crbug.com/1050754 external/wpt/feature-policy/picture-in-picture-allowed-by-feature-policy.https.sub.html [ Failure ] -crbug.com/1050754 external/wpt/feature-policy/picture-in-picture-default-feature-policy.https.sub.html [ Failure ] -crbug.com/1050754 external/wpt/feature-policy/picture-in-picture-disabled-by-feature-policy.https.sub.html [ Failure ] -crbug.com/1050754 external/wpt/feature-policy/picture-in-picture-supported-by-feature-policy.html [ Failure ] -crbug.com/1050754 external/wpt/feature-policy/reporting/camera-report-only.https.html [ Timeout ] -crbug.com/1050754 external/wpt/feature-policy/reporting/camera-reporting.https.html [ Timeout ] -crbug.com/1050754 external/wpt/feature-policy/reporting/encrypted-media-report-only.https.html [ Timeout ] -crbug.com/1050754 external/wpt/feature-policy/reporting/encrypted-media-reporting.https.html [ Timeout ] -crbug.com/1050754 external/wpt/feature-policy/reporting/fullscreen-report-only.html [ Failure ] -crbug.com/1050754 external/wpt/feature-policy/reporting/fullscreen-reporting.html [ Timeout ] -crbug.com/1050754 external/wpt/feature-policy/reporting/generic-sensor-report-only.https.html [ Failure ] -crbug.com/1050754 external/wpt/feature-policy/reporting/generic-sensor-reporting.https.html [ Failure ] -crbug.com/1050754 external/wpt/feature-policy/reporting/geolocation-report-only.https.html [ Timeout ] -crbug.com/1050754 external/wpt/feature-policy/reporting/geolocation-reporting.https.html [ Timeout ] -crbug.com/1050754 external/wpt/feature-policy/reporting/microphone-report-only.https.html [ Timeout ] -crbug.com/1050754 external/wpt/feature-policy/reporting/microphone-reporting.https.html [ Timeout ] -crbug.com/1050754 external/wpt/feature-policy/reporting/midi-report-only.https.html [ Timeout ] -crbug.com/1050754 external/wpt/feature-policy/reporting/midi-reporting.https.html [ Timeout ] -crbug.com/1050754 external/wpt/feature-policy/reporting/payment-report-only.https.html [ Timeout ] -crbug.com/1050754 external/wpt/feature-policy/reporting/payment-reporting.https.html [ Failure ] -crbug.com/1050754 external/wpt/feature-policy/reporting/picture-in-picture-report-only.html [ Failure ] -crbug.com/1050754 external/wpt/feature-policy/reporting/picture-in-picture-reporting.html [ Failure ] -crbug.com/1050754 external/wpt/feature-policy/reporting/screen-wake-lock-report-only.https.html [ Crash ] -crbug.com/1050754 external/wpt/feature-policy/reporting/screen-wake-lock-reporting.https.html [ Timeout ] -crbug.com/1050754 external/wpt/feature-policy/reporting/serial-report-only.https.html [ Failure ] -crbug.com/1050754 external/wpt/feature-policy/reporting/serial-reporting.https.html [ Failure ] -crbug.com/1050754 external/wpt/feature-policy/reporting/sync-xhr-report-only.html [ Timeout ] -crbug.com/1050754 external/wpt/feature-policy/reporting/sync-xhr-reporting.html [ Timeout ] -crbug.com/1050754 external/wpt/document-policy/reporting/sync-xhr-report-only.html [ Timeout ] -crbug.com/1050754 external/wpt/document-policy/reporting/sync-xhr-reporting.html [ Timeout ] -crbug.com/1050754 external/wpt/feature-policy/reporting/usb-report-only.https.html [ Timeout ] -crbug.com/1050754 external/wpt/feature-policy/reporting/usb-reporting.https.html [ Timeout ] -crbug.com/1050754 external/wpt/feature-policy/reporting/xr-report-only.https.html [ Failure ] -crbug.com/1050754 external/wpt/feature-policy/reporting/xr-reporting.https.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/abort/cache.https.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/abort/general.any.html [ Failure Pass ] -crbug.com/1050754 external/wpt/fetch/api/abort/general.any.serviceworker.html [ Failure Pass ] -crbug.com/1050754 external/wpt/fetch/api/abort/general.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/abort/general.any.worker.html [ Failure Pass ] -crbug.com/1050754 external/wpt/fetch/api/basic/accept-header.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/basic/conditional-get.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/basic/error-after-response.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/basic/header-value-combining.any.serviceworker.html [ Failure Pass ] -crbug.com/1050754 external/wpt/fetch/api/basic/header-value-combining.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/basic/header-value-null-byte.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/basic/historical.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/basic/integrity.sub.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/basic/keepalive.html [ Failure Pass ] -crbug.com/1050754 external/wpt/fetch/api/basic/request-forbidden-headers.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/basic/request-head.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/basic/request-headers-case.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/basic/request-headers-nonascii.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/basic/request-headers.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/basic/request-referrer.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/basic/scheme-about.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/basic/scheme-data.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/basic/scheme-others.sub.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/basic/stream-response.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/basic/stream-safe-creation.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/basic/text-utf8.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/cors/cors-multiple-origins.sub.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/cors/cors-preflight-redirect.any.html [ Failure Pass ] -crbug.com/1050754 external/wpt/fetch/api/cors/cors-preflight-redirect.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/cors/cors-preflight-redirect.any.worker.html [ Failure Pass ] -crbug.com/1050754 external/wpt/fetch/api/cors/cors-preflight-referrer.any.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/cors/cors-preflight-referrer.any.worker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/cors/data-url-shared-worker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/credentials/authentication-basic.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/credentials/cookies.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/headers/header-values-normalize.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/headers/header-values.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/headers/headers-basic.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/headers/headers-casing.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/headers/headers-combine.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/headers/headers-errors.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/headers/headers-no-cors.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/headers/headers-normalize.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/headers/headers-record.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/headers/headers-structure.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/idlharness.any.html [ Failure Pass ] -crbug.com/1050754 external/wpt/fetch/api/idlharness.any.serviceworker.html [ Failure Pass ] -crbug.com/1050754 external/wpt/fetch/api/idlharness.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/idlharness.any.worker.html [ Failure Pass ] -crbug.com/1050754 external/wpt/fetch/api/policies/csp-blocked-worker.html [ Failure Pass ] -crbug.com/1050754 external/wpt/fetch/api/policies/referrer-origin-when-cross-origin-service-worker.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/fetch/api/redirect/redirect-back-to-original-origin.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/redirect/redirect-count.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/redirect/redirect-empty-location.any.html [ Failure Pass ] -crbug.com/1050754 external/wpt/fetch/api/redirect/redirect-empty-location.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/redirect/redirect-empty-location.any.worker.html [ Failure Pass ] -crbug.com/1050754 external/wpt/fetch/api/redirect/redirect-location-escape.tentative.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/redirect/redirect-location.any.html [ Failure Pass ] -crbug.com/1050754 external/wpt/fetch/api/redirect/redirect-location.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/redirect/redirect-location.any.worker.html [ Failure Pass ] -crbug.com/1050754 external/wpt/fetch/api/redirect/redirect-method.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/redirect/redirect-mode.any.html [ Pass Timeout ] -crbug.com/1050754 external/wpt/fetch/api/redirect/redirect-mode.any.worker.html [ Pass Timeout ] -crbug.com/1050754 external/wpt/fetch/api/redirect/redirect-origin.any.html [ Pass Timeout ] -crbug.com/1050754 external/wpt/fetch/api/redirect/redirect-origin.any.worker.html [ Pass Timeout ] -crbug.com/1050754 external/wpt/fetch/api/redirect/redirect-schemes.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/redirect/redirect-to-dataurl.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/request/destination/fetch-destination-worker.https.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/request/request-bad-port.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/request/request-cache-default-conditional.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/request/request-cache-default.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/request/request-cache-force-cache.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/request/request-cache-no-cache.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/request/request-cache-no-store.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/request/request-cache-only-if-cached.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/request/request-cache-reload.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/request/request-consume-empty.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/request/request-consume.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/request/request-disturbed.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/request/request-init-002.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/request/request-keepalive.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/request/request-reset-attributes.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/fetch/api/response/response-cancel-stream.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/response/response-clone.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/response/response-consume-empty.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/response/response-consume-stream.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/response/response-error-from-stream.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/response/response-error.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/response/response-from-stream.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/response/response-init-001.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/response/response-init-002.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/response/response-static-error.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/response/response-static-redirect.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/response/response-stream-disturbed-1.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/response/response-stream-disturbed-2.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/response/response-stream-disturbed-3.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/response/response-stream-disturbed-4.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/response/response-stream-disturbed-5.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/response/response-stream-disturbed-6.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/response/response-stream-disturbed-by-pipe.any.html [ Failure Pass ] -crbug.com/1050754 external/wpt/fetch/api/response/response-stream-disturbed-by-pipe.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/api/response/response-stream-disturbed-by-pipe.any.worker.html [ Failure Pass ] -crbug.com/1050754 external/wpt/fetch/api/response/response-stream-with-broken-then.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/connection-pool/network-partition-key.html [ Timeout ] -crbug.com/1050754 external/wpt/fetch/content-encoding/bad-gzip-body.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/content-type/response.window.html [ Timeout ] -crbug.com/1050754 external/wpt/fetch/content-type/script.window.html [ Failure Pass ] -crbug.com/1050754 external/wpt/fetch/corb/script-resource-with-nonsniffable-types.tentative.sub.html [ Timeout ] -crbug.com/1050754 external/wpt/fetch/cors-rfc1918/idlharness.tentative.any.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/cors-rfc1918/idlharness.tentative.any.serviceworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/cors-rfc1918/idlharness.tentative.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/cors-rfc1918/idlharness.tentative.any.worker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/cross-origin-resource-policy/fetch.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/cross-origin-resource-policy/fetch.https.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/cross-origin-resource-policy/scheme-restriction.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/data-urls/base64.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/data-urls/processing.any.html [ Failure Pass ] -crbug.com/1050754 external/wpt/fetch/data-urls/processing.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/data-urls/processing.any.worker.html [ Failure Pass ] -crbug.com/1050754 external/wpt/fetch/http-cache/304-update.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/http-cache/cache-mode.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/http-cache/cc-request.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/http-cache/freshness.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/http-cache/heuristic.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/http-cache/invalidate.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/http-cache/partial.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/http-cache/post-patch.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/http-cache/status.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/http-cache/vary.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/metadata/download.https.sub.html [ Failure Pass ] -crbug.com/1050754 external/wpt/fetch/metadata/fetch-preflight.https.sub.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/metadata/fetch.https.sub.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/metadata/form.https.sub.html [ Failure Timeout ] -crbug.com/1050754 external/wpt/fetch/metadata/history.https.sub.html [ Timeout ] -crbug.com/1050754 external/wpt/fetch/metadata/iframe.https.sub.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/metadata/portal.https.sub.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/metadata/sharedworker.https.sub.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/metadata/trailing-dot.https.sub.any.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/metadata/trailing-dot.https.sub.any.serviceworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/metadata/trailing-dot.https.sub.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/metadata/trailing-dot.https.sub.any.worker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/metadata/window-open.https.sub.html [ Failure Timeout ] -crbug.com/1050754 external/wpt/fetch/nosniff/parsing-nosniff.window.html [ Failure Pass ] -crbug.com/1050754 external/wpt/fetch/origin/assorted.window.html [ Pass Timeout ] -crbug.com/1050754 external/wpt/fetch/range/general.window.html [ Failure Pass ] -crbug.com/1050754 external/wpt/fetch/range/sw.https.window.html [ Failure Pass ] -crbug.com/1050754 external/wpt/fetch/security/embedded-credentials.tentative.sub.html [ Timeout ] -crbug.com/1050754 external/wpt/fetch/security/redirect-to-url-with-credentials.https.html [ Timeout ] -crbug.com/1050754 external/wpt/fetch/stale-while-revalidate/fetch-sw.https.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/stale-while-revalidate/fetch.any.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/stale-while-revalidate/fetch.any.serviceworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/stale-while-revalidate/fetch.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/stale-while-revalidate/fetch.any.worker.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/stale-while-revalidate/revalidate-not-blocked-by-csp.html [ Failure Timeout ] -crbug.com/1050754 external/wpt/fetch/stale-while-revalidate/stale-css.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/stale-while-revalidate/stale-image.html [ Failure ] -crbug.com/1050754 external/wpt/fetch/stale-while-revalidate/stale-script.html [ Failure ] -crbug.com/1050754 external/wpt/forced-colors-mode/forced-colors-mode-03.html [ Failure ] -crbug.com/1050754 external/wpt/forced-colors-mode/forced-colors-mode-04.html [ Failure ] -crbug.com/1050754 external/wpt/forced-colors-mode/forced-colors-mode-09.html [ Failure ] -crbug.com/1050754 external/wpt/forced-colors-mode/forced-colors-mode-10.html [ Failure ] -crbug.com/1050754 external/wpt/forced-colors-mode/forced-colors-mode-11.html [ Failure ] -crbug.com/1050754 external/wpt/forced-colors-mode/forced-colors-mode-20.html [ Failure ] -crbug.com/1050754 external/wpt/forced-colors-mode/forced-colors-mode-21.html [ Failure ] -crbug.com/1050754 external/wpt/forced-colors-mode/forced-colors-mode-27.html [ Failure ] -crbug.com/1050754 external/wpt/fullscreen/api/document-exit-fullscreen-nested-shadow-dom.html [ Failure ] -crbug.com/1050754 external/wpt/fullscreen/api/document-fullscreen-enabled-cross-origin.sub.html [ Failure ] -crbug.com/1050754 external/wpt/fullscreen/api/document-fullscreen-enabled.html [ Failure ] -crbug.com/1050754 external/wpt/fullscreen/api/element-request-fullscreen-options.tentative.html [ Failure ] -crbug.com/1050754 external/wpt/fullscreen/api/element-request-fullscreen.html [ Failure ] -crbug.com/1050754 external/wpt/fullscreen/api/historical.html [ Failure Pass ] -crbug.com/1050754 external/wpt/fullscreen/rendering/fullscreen-css-invalidation.html [ Failure ] -crbug.com/1050754 external/wpt/fullscreen/rendering/fullscreen-css-transition.html [ Failure ] -crbug.com/1050754 external/wpt/gamepad/gamepad-supported-by-feature-policy.html [ Failure ] -crbug.com/1050754 external/wpt/gamepad/idlharness.https.window.html [ Failure Pass ] -crbug.com/1050754 external/wpt/generic-sensor/generic-sensor-permission.https.html [ Crash Failure ] -crbug.com/1050754 external/wpt/geolocation-API/PositionOptions.https.html [ Failure ] -crbug.com/1050754 external/wpt/geolocation-API/getCurrentPosition_IDL.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/geolocation-sensor/GeolocationSensor-disabled-by-feature-policy.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/geolocation-sensor/GeolocationSensor-enabled-by-feature-policy-attribute-redirect-on-load.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/geolocation-sensor/GeolocationSensor-enabled-by-feature-policy-attribute.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/geolocation-sensor/GeolocationSensor-enabled-by-feature-policy.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/geolocation-sensor/GeolocationSensor-enabled-on-self-origin-by-feature-policy.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/geolocation-sensor/GeolocationSensor-iframe-access.https.html [ Failure ] -crbug.com/1050754 external/wpt/geolocation-sensor/GeolocationSensor.https.html [ Failure ] -crbug.com/1050754 external/wpt/geolocation-sensor/GeolocationSensor_read.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/geolocation-sensor/idlharness.https.window.html [ Failure Pass ] -crbug.com/1050754 external/wpt/gyroscope/Gyroscope-iframe-access.https.html [ Failure ] -crbug.com/1050754 external/wpt/gyroscope/Gyroscope.https.html [ Failure ] -crbug.com/1050754 external/wpt/hr-time/idlharness.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/hr-time/test_cross_frame_start.html [ Failure Pass ] -crbug.com/1050754 external/wpt/hr-time/timeOrigin.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html-media-capture/capture_reflect.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/browsers/browsing-the-web/history-traversal/api-availability.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/browsers/browsing-the-web/history-traversal/browsing_context_name.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/browsers/browsing-the-web/history-traversal/browsing_context_name_cross_origin.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/browsers/browsing-the-web/history-traversal/browsing_context_name_cross_origin_2.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/browsers/browsing-the-web/history-traversal/browsing_context_name_cross_origin_3.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/browsers/browsing-the-web/history-traversal/persisted-user-state-restoration/scroll-restoration-fragment-scrolling-samedoc.html [ Failure ] -crbug.com/1050754 external/wpt/html/browsers/browsing-the-web/history-traversal/persisted-user-state-restoration/scroll-restoration-navigation-cross-origin.html [ Failure ] -crbug.com/1050754 external/wpt/html/browsers/browsing-the-web/history-traversal/persisted-user-state-restoration/scroll-restoration-navigation-samedoc.html [ Failure ] -crbug.com/1050754 external/wpt/html/browsers/browsing-the-web/history-traversal/same-url.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/browsers/browsing-the-web/history-traversal/scroll-restoration-order.html [ Failure ] -crbug.com/1050754 external/wpt/html/browsers/browsing-the-web/history-traversal/window-name-after-cross-origin-main-frame-navigation.sub.html [ Failure ] -crbug.com/1050754 external/wpt/html/browsers/browsing-the-web/navigating-across-documents/009.html [ Timeout ] -crbug.com/1050754 external/wpt/html/browsers/browsing-the-web/navigating-across-documents/012.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/browsers/browsing-the-web/navigating-across-documents/source/navigate-child-src-about-blank.html [ Failure ] -crbug.com/1050754 external/wpt/html/browsers/browsing-the-web/navigating-across-documents/top-level-data-url.window.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/browsers/browsing-the-web/scroll-to-fragid/scroll-frag-percent-encoded.html [ Failure ] -crbug.com/1050754 external/wpt/html/browsers/browsing-the-web/scroll-to-fragid/scroll-position-vertical-lr.html [ Failure ] -crbug.com/1050754 external/wpt/html/browsers/browsing-the-web/scroll-to-fragid/scroll-position-vertical-rl.html [ Failure ] -crbug.com/1050754 external/wpt/html/browsers/browsing-the-web/scroll-to-fragid/scroll-position.html [ Failure ] -crbug.com/1050754 external/wpt/html/browsers/browsing-the-web/scroll-to-fragid/scroll-to-anchor-name.html [ Failure ] -crbug.com/1050754 external/wpt/html/browsers/browsing-the-web/unloading-documents/001.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/browsers/browsing-the-web/unloading-documents/002.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/browsers/browsing-the-web/unloading-documents/004.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/browsers/browsing-the-web/unloading-documents/prompt-and-unload-script-closeable.html [ Timeout ] -crbug.com/1050754 external/wpt/html/browsers/browsing-the-web/unloading-documents/prompt/001.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/browsers/browsing-the-web/unloading-documents/prompt/004.html [ Failure ] -crbug.com/1050754 external/wpt/html/browsers/history/joint-session-history/joint-session-history-remove-iframe.html [ Failure ] -crbug.com/1050754 external/wpt/html/browsers/history/the-history-interface/001.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/browsers/history/the-history-interface/007.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/browsers/history/the-history-interface/history_go_undefined.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/browsers/history/the-location-interface/allow_prototype_cycle_through_location.sub.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/browsers/history/the-location-interface/assign_after_load.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/browsers/history/the-location-interface/assign_before_load.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/browsers/history/the-location-interface/location-protocol-setter-non-broken-weird.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/browsers/history/the-location-interface/location-protocol-setter-non-broken.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/browsers/history/the-location-interface/location-prototype-setting-cross-origin-domain.sub.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/browsers/history/the-location-interface/location-prototype-setting-cross-origin.sub.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/browsers/history/the-location-interface/location-prototype-setting-goes-cross-origin-domain.sub.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/browsers/history/the-location-interface/location-prototype-setting-same-origin-domain.sub.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/browsers/history/the-location-interface/location-prototype-setting-same-origin.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/browsers/history/the-location-interface/location-stringifier.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/browsers/history/the-location-interface/location-valueof.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/browsers/history/the-location-interface/no-browsing-context.window.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/browsers/history/the-location-interface/per-global.window.html [ Failure ] -crbug.com/1050754 external/wpt/html/browsers/history/the-location-interface/reload_document_write_onload.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/browsers/history/the-location-interface/scripted_click_location_assign_during_load.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/browsers/offline/browser-state/navigator_online_online.https.html [ Failure ] -crbug.com/1050754 external/wpt/html/browsers/offline/introduction-4/event_cached.https.html [ Pass ] -crbug.com/1050754 external/wpt/html/browsers/offline/introduction-4/event_checking.https.html [ Pass ] -crbug.com/1050754 external/wpt/html/browsers/offline/introduction-4/event_noupdate.https.html [ Pass ] -crbug.com/1050754 external/wpt/html/browsers/offline/introduction-4/event_progress.https.html [ Pass ] -crbug.com/1050754 external/wpt/html/browsers/offline/manifest_url_check.https.https.html [ Pass ] -crbug.com/1050754 external/wpt/html/browsers/origin/cross-origin-objects/cross-origin-objects.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/browsers/sandboxing/sandbox-disallow-scripts-via-unsandboxed-popup.tentative.html [ Timeout ] -crbug.com/1050754 external/wpt/html/browsers/the-window-object/accessing-other-browsing-contexts/indexed-browsing-contexts-02.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/browsers/the-window-object/accessing-other-browsing-contexts/indexed-browsing-contexts-03.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/browsers/the-window-object/accessing-other-browsing-contexts/window_length.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/close_script_defer.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/no_window_open_when_term_nesting_level_nonzero.window.html [ Failure Timeout ] -crbug.com/1050754 external/wpt/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-negative-innerwidth-innerheight.html [ Timeout ] -crbug.com/1050754 external/wpt/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-negative-screenx-screeny.html [ Timeout ] -crbug.com/1050754 external/wpt/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-negative-top-left.html [ Timeout ] -crbug.com/1050754 external/wpt/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-negative-width-height.html [ Timeout ] -crbug.com/1050754 external/wpt/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-non-integer-height.html [ Timeout ] -crbug.com/1050754 external/wpt/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-non-integer-innerheight.html [ Timeout ] -crbug.com/1050754 external/wpt/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-non-integer-innerwidth.html [ Timeout ] -crbug.com/1050754 external/wpt/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-non-integer-left.html [ Timeout ] -crbug.com/1050754 external/wpt/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-non-integer-screenx.html [ Timeout ] -crbug.com/1050754 external/wpt/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-non-integer-screeny.html [ Timeout ] -crbug.com/1050754 external/wpt/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-non-integer-top.html [ Timeout ] -crbug.com/1050754 external/wpt/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-non-integer-width.html [ Timeout ] -crbug.com/1050754 external/wpt/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-tokenization-innerheight-innerwidth.html [ Timeout ] -crbug.com/1050754 external/wpt/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-tokenization-screenx-screeny.html [ Timeout ] -crbug.com/1050754 external/wpt/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-tokenization-top-left.html [ Timeout ] -crbug.com/1050754 external/wpt/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-tokenization-width-height.html [ Timeout ] -crbug.com/1050754 external/wpt/html/browsers/the-window-object/close-method.window.html [ Failure Timeout ] -crbug.com/1050754 external/wpt/html/browsers/the-window-object/closed-attribute.window.html [ Timeout ] -crbug.com/1050754 external/wpt/html/browsers/the-window-object/focus.window.html [ Timeout ] -crbug.com/1050754 external/wpt/html/browsers/the-window-object/garbage-collection-and-browsing-contexts/discard_iframe_history_1.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/browsers/the-window-object/garbage-collection-and-browsing-contexts/discard_iframe_history_2.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/browsers/the-window-object/garbage-collection-and-browsing-contexts/discard_iframe_history_3.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/browsers/the-window-object/garbage-collection-and-browsing-contexts/discard_iframe_history_4.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/browsers/the-window-object/named-access-on-the-window-object/navigated-named-objects.window.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/browsers/the-window-object/named-access-on-the-window-object/prototype.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/browsers/the-window-object/named-access-on-the-window-object/window-named-properties.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/browsers/the-window-object/noopener-noreferrer-BarProp.window.html [ Timeout ] -crbug.com/1050754 external/wpt/html/browsers/the-window-object/noopener-noreferrer-sizing.window.html [ Timeout ] -crbug.com/1050754 external/wpt/html/browsers/the-window-object/self-et-al.window.html [ Pass Timeout ] -crbug.com/1050754 external/wpt/html/browsers/the-window-object/window-indexed-properties-strict.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/browsers/the-window-object/window-indexed-properties.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/browsers/the-window-object/window-open-noopener.html?indexed [ Timeout ] -crbug.com/1050754 external/wpt/html/browsers/the-window-object/window-prototype-chain.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/browsers/the-windowproxy-exotic-object/windowproxy-prototype-setting-cross-origin-domain.sub.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/browsers/the-windowproxy-exotic-object/windowproxy-prototype-setting-cross-origin.sub.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/browsers/the-windowproxy-exotic-object/windowproxy-prototype-setting-goes-cross-origin-domain.sub.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/browsers/windows/auxiliary-browsing-contexts/opener-setter.html [ Timeout ] -crbug.com/1050754 external/wpt/html/browsers/windows/auxiliary-browsing-contexts/opener-setter.window.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/browsers/windows/auxiliary-browsing-contexts/opener.html [ Timeout ] -crbug.com/1050754 external/wpt/html/browsers/windows/browsing-context.html [ Failure ] -crbug.com/1050754 external/wpt/html/browsers/windows/document-access/cross_origin_intermediate_access.sub.tentative.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/browsers/windows/document-access/cross_origin_intermediate_access_remote.sub.tentative.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/browsers/windows/document-access/document_access_parent_access.tentative.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/browsers/windows/embedded-opener-remove-frame.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/browsers/windows/embedded-opener.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/browsers/windows/noreferrer-window-name.html [ Timeout ] -crbug.com/1050754 external/wpt/html/canvas/element/drawing-images-to-the-canvas/2d.drawImage.animated.poster.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/canvas/element/drawing-images-to-the-canvas/2d.drawImage.zerosource.image.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/canvas/element/drawing-text-to-the-canvas/2d.text.drawing.style.fontKerning.with.uppercase.html [ Failure ] -crbug.com/1050754 external/wpt/html/canvas/element/drawing-text-to-the-canvas/2d.text.drawing.style.fontVariant.settings.html [ Failure ] -crbug.com/1050754 external/wpt/html/canvas/element/drawing-text-to-the-canvas/2d.text.drawing.style.spacing.html [ Failure ] -crbug.com/1050754 external/wpt/html/canvas/element/drawing-text-to-the-canvas/2d.text.drawing.style.spacing.measure.html [ Failure ] -crbug.com/1050754 external/wpt/html/canvas/element/drawing-text-to-the-canvas/2d.text.measure.advances.html [ Failure ] -crbug.com/1050754 external/wpt/html/canvas/element/drawing-text-to-the-canvas/2d.text.measure.baselines.html [ Failure ] -crbug.com/1050754 external/wpt/html/canvas/element/drawing-text-to-the-canvas/2d.text.measure.emHeights.html [ Failure ] -crbug.com/1050754 external/wpt/html/canvas/element/drawing-text-to-the-canvas/2d.text.measure.fontBoundingBox.html [ Failure ] -crbug.com/1050754 external/wpt/html/canvas/element/fill-and-stroke-styles/2d.gradient.conic.html [ Failure ] -crbug.com/1050754 external/wpt/html/canvas/element/fill-and-stroke-styles/2d.pattern.image.broken.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/canvas/element/fill-and-stroke-styles/2d.pattern.image.zeroheight.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/canvas/element/fill-and-stroke-styles/2d.pattern.image.zerowidth.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/canvas/element/fill-and-stroke-styles/2d.pattern.svgimage.zeroheight.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/canvas/element/fill-and-stroke-styles/2d.pattern.svgimage.zerowidth.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/canvas/element/manual/hit-regions/addHitRegions-NotSupportedError-01.html [ Failure ] -crbug.com/1050754 external/wpt/html/canvas/element/manual/hit-regions/hitregions-members-exist.html [ Failure ] -crbug.com/1050754 external/wpt/html/canvas/element/manual/imagebitmap/canvas-createImageBitmap-video-resize.html [ Timeout ] -crbug.com/1050754 external/wpt/html/canvas/element/manual/imagebitmap/createImageBitmap-origin.sub.html [ Pass Timeout ] -crbug.com/1050754 external/wpt/html/canvas/element/manual/shadows/canvas_shadows_001.htm [ Failure ] -crbug.com/1050754 external/wpt/html/canvas/element/manual/wide-gamut-canvas/canvas-drawImage-offscreenCanvas.html [ Failure ] -crbug.com/1050754 external/wpt/html/canvas/element/manual/wide-gamut-canvas/transferFromImageBitmap.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/canvas/element/path-objects/2d.path.stroke.prune.arc.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/canvas/element/path-objects/2d.path.stroke.prune.closed.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/canvas/element/path-objects/2d.path.stroke.prune.curve.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/canvas/element/path-objects/2d.path.stroke.prune.line.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/canvas/element/path-objects/2d.path.stroke.prune.rect.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/canvas/element/scroll/2d.scrollPathIntoView.basic.html [ Failure ] -crbug.com/1050754 external/wpt/html/canvas/element/scroll/2d.scrollPathIntoView.path.html [ Failure ] -crbug.com/1050754 external/wpt/html/canvas/element/scroll/2d.scrollPathIntoView.verticalLR.html [ Failure ] -crbug.com/1050754 external/wpt/html/canvas/element/scroll/2d.scrollPathIntoView.verticalRL.html [ Failure ] -crbug.com/1050754 external/wpt/html/canvas/element/text-styles/2d.text.draw.baseline.hanging.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/canvas/element/text-styles/2d.text.draw.baseline.ideographic.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/canvas/element/text-styles/2d.text.draw.space.collapse.end.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/canvas/element/text-styles/2d.text.draw.space.collapse.other.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/canvas/element/text-styles/2d.text.draw.space.collapse.space.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/canvas/element/text-styles/2d.text.draw.space.collapse.start.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/canvas/element/text-styles/2d.text.measure.width.space.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/canvas/element/video/2d.video.invalid.html [ Failure ] -crbug.com/1050754 external/wpt/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.animated.poster.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/canvas/offscreen/drawing-images-to-the-canvas/2d.drawImage.zerosource.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.conic.html [ Failure ] -crbug.com/1050754 external/wpt/html/canvas/offscreen/fill-and-stroke-styles/2d.gradient.conic.worker.html [ Failure ] -crbug.com/1050754 external/wpt/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeat.basic.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeat.outside.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/canvas/offscreen/line-styles/2d.line.cap.open.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/canvas/offscreen/line-styles/2d.line.cap.open.worker.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/canvas/offscreen/line-styles/2d.line.join.open.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/canvas/offscreen/line-styles/2d.line.join.open.worker.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/canvas/offscreen/manual/filter/offscreencanvas.filter.html [ Failure ] -crbug.com/1050754 external/wpt/html/canvas/offscreen/manual/filter/offscreencanvas.filter.w.html [ Failure ] -crbug.com/1050754 external/wpt/html/canvas/offscreen/manual/the-offscreen-canvas/offscreencanvas.commit.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/canvas/offscreen/manual/the-offscreen-canvas/offscreencanvas.commit.w.html [ Failure ] -crbug.com/1050754 external/wpt/html/canvas/offscreen/manual/the-offscreen-canvas/offscreencanvas.resize.html [ Failure ] -crbug.com/1050754 external/wpt/html/canvas/offscreen/path-objects/2d.path.stroke.prune.arc.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/canvas/offscreen/path-objects/2d.path.stroke.prune.arc.worker.html [ Failure ] -crbug.com/1050754 external/wpt/html/canvas/offscreen/path-objects/2d.path.stroke.prune.closed.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/canvas/offscreen/path-objects/2d.path.stroke.prune.closed.worker.html [ Failure ] -crbug.com/1050754 external/wpt/html/canvas/offscreen/path-objects/2d.path.stroke.prune.curve.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/canvas/offscreen/path-objects/2d.path.stroke.prune.curve.worker.html [ Failure ] -crbug.com/1050754 external/wpt/html/canvas/offscreen/path-objects/2d.path.stroke.prune.line.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/canvas/offscreen/path-objects/2d.path.stroke.prune.line.worker.html [ Failure ] -crbug.com/1050754 external/wpt/html/canvas/offscreen/path-objects/2d.path.stroke.prune.rect.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/canvas/offscreen/path-objects/2d.path.stroke.prune.rect.worker.html [ Failure ] -crbug.com/1050754 external/wpt/html/canvas/offscreen/pixel-manipulation/2d.imageData.create2.nonfinite.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/canvas/offscreen/pixel-manipulation/2d.imageData.create2.nonfinite.worker.html [ Failure ] -crbug.com/1050754 external/wpt/html/canvas/offscreen/pixel-manipulation/2d.imageData.get.nonfinite.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/canvas/offscreen/pixel-manipulation/2d.imageData.get.nonfinite.worker.html [ Failure ] -crbug.com/1050754 external/wpt/html/canvas/offscreen/pixel-manipulation/2d.imageData.put.nonfinite.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/canvas/offscreen/pixel-manipulation/2d.imageData.put.nonfinite.worker.html [ Failure ] -crbug.com/1050754 external/wpt/html/canvas/offscreen/text/2d.text.draw.align.center.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/canvas/offscreen/text/2d.text.draw.align.center.worker.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/canvas/offscreen/text/2d.text.draw.align.end.ltr.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/canvas/offscreen/text/2d.text.draw.align.end.ltr.worker.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/canvas/offscreen/text/2d.text.draw.align.end.rtl.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/canvas/offscreen/text/2d.text.draw.align.end.rtl.worker.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/canvas/offscreen/text/2d.text.draw.align.left.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/canvas/offscreen/text/2d.text.draw.align.left.worker.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/canvas/offscreen/text/2d.text.draw.align.right.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/canvas/offscreen/text/2d.text.draw.align.right.worker.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/canvas/offscreen/text/2d.text.draw.align.start.ltr.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/canvas/offscreen/text/2d.text.draw.align.start.ltr.worker.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/canvas/offscreen/text/2d.text.draw.align.start.rtl.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/canvas/offscreen/text/2d.text.draw.align.start.rtl.worker.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/canvas/offscreen/text/2d.text.draw.baseline.alphabetic.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/canvas/offscreen/text/2d.text.draw.baseline.alphabetic.worker.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/canvas/offscreen/text/2d.text.draw.baseline.bottom.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/canvas/offscreen/text/2d.text.draw.baseline.bottom.worker.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/canvas/offscreen/text/2d.text.draw.baseline.hanging.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/canvas/offscreen/text/2d.text.draw.baseline.hanging.worker.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/canvas/offscreen/text/2d.text.draw.baseline.ideographic.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/canvas/offscreen/text/2d.text.draw.baseline.ideographic.worker.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/canvas/offscreen/text/2d.text.draw.baseline.middle.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/canvas/offscreen/text/2d.text.draw.baseline.middle.worker.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/canvas/offscreen/text/2d.text.draw.baseline.top.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/canvas/offscreen/text/2d.text.draw.baseline.top.worker.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/canvas/offscreen/text/2d.text.draw.fill.maxWidth.bound.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/canvas/offscreen/text/2d.text.draw.fill.maxWidth.bound.worker.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/canvas/offscreen/text/2d.text.draw.fontface.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/canvas/offscreen/text/2d.text.draw.fontface.notinpage.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/canvas/offscreen/text/2d.text.draw.fontface.notinpage.worker.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/canvas/offscreen/text/2d.text.draw.fontface.repeat.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/canvas/offscreen/text/2d.text.draw.fontface.repeat.worker.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/canvas/offscreen/text/2d.text.draw.fontface.worker.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/canvas/offscreen/text/2d.text.draw.space.basic.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/canvas/offscreen/text/2d.text.draw.space.basic.worker.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/canvas/offscreen/text/2d.text.draw.space.collapse.end.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/canvas/offscreen/text/2d.text.draw.space.collapse.end.worker.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/canvas/offscreen/text/2d.text.draw.space.collapse.nonspace.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/canvas/offscreen/text/2d.text.draw.space.collapse.nonspace.worker.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/canvas/offscreen/text/2d.text.draw.space.collapse.other.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/canvas/offscreen/text/2d.text.draw.space.collapse.other.worker.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/canvas/offscreen/text/2d.text.draw.space.collapse.space.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/canvas/offscreen/text/2d.text.draw.space.collapse.space.worker.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/canvas/offscreen/text/2d.text.draw.space.collapse.start.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/canvas/offscreen/text/2d.text.draw.space.collapse.start.worker.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/canvas/offscreen/text/2d.text.drawing.style.fontKerning.html [ Failure ] -crbug.com/1050754 external/wpt/html/canvas/offscreen/text/2d.text.drawing.style.fontKerning.with.uppercase.html [ Failure ] -crbug.com/1050754 external/wpt/html/canvas/offscreen/text/2d.text.drawing.style.fontKerning.with.uppercase.worker.html [ Failure ] -crbug.com/1050754 external/wpt/html/canvas/offscreen/text/2d.text.drawing.style.fontKerning.worker.html [ Failure ] -crbug.com/1050754 external/wpt/html/canvas/offscreen/text/2d.text.drawing.style.fontVariant.settings.html [ Failure ] -crbug.com/1050754 external/wpt/html/canvas/offscreen/text/2d.text.drawing.style.fontVariant.settings.worker.html [ Failure ] -crbug.com/1050754 external/wpt/html/canvas/offscreen/text/2d.text.drawing.style.spacing.html [ Failure ] -crbug.com/1050754 external/wpt/html/canvas/offscreen/text/2d.text.drawing.style.spacing.measure.html [ Failure ] -crbug.com/1050754 external/wpt/html/canvas/offscreen/text/2d.text.drawing.style.spacing.measure.worker.html [ Failure ] -crbug.com/1050754 external/wpt/html/canvas/offscreen/text/2d.text.drawing.style.spacing.worker.html [ Failure ] -crbug.com/1050754 external/wpt/html/canvas/offscreen/text/2d.text.measure.actualBoundingBox.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/canvas/offscreen/text/2d.text.measure.actualBoundingBox.worker.html [ Pass Timeout ] -crbug.com/1050754 external/wpt/html/canvas/offscreen/text/2d.text.measure.advances.html [ Failure ] -crbug.com/1050754 external/wpt/html/canvas/offscreen/text/2d.text.measure.advances.worker.html [ Failure Timeout ] -crbug.com/1050754 external/wpt/html/canvas/offscreen/text/2d.text.measure.baselines.html [ Failure ] -crbug.com/1050754 external/wpt/html/canvas/offscreen/text/2d.text.measure.baselines.worker.html [ Failure Timeout ] -crbug.com/1050754 external/wpt/html/canvas/offscreen/text/2d.text.measure.emHeights.html [ Failure ] -crbug.com/1050754 external/wpt/html/canvas/offscreen/text/2d.text.measure.emHeights.worker.html [ Failure Timeout ] -crbug.com/1050754 external/wpt/html/canvas/offscreen/text/2d.text.measure.fontBoundingBox.html [ Failure ] -crbug.com/1050754 external/wpt/html/canvas/offscreen/text/2d.text.measure.fontBoundingBox.worker.html [ Failure Timeout ] -crbug.com/1050754 external/wpt/html/canvas/offscreen/text/2d.text.measure.width.basic.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/canvas/offscreen/text/2d.text.measure.width.basic.worker.html [ Pass Timeout ] -crbug.com/1050754 external/wpt/html/canvas/offscreen/text/2d.text.measure.width.empty.worker.html [ Pass Timeout ] -crbug.com/1050754 external/wpt/html/canvas/offscreen/text/2d.text.measure.width.space.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/canvas/offscreen/text/2d.text.measure.width.space.worker.html [ Pass Timeout ] -crbug.com/1050754 external/wpt/html/canvas/offscreen/the-offscreen-canvas/2d.getcontext.extraargs.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/canvas/offscreen/the-offscreen-canvas/2d.getcontext.extraargs.worker.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/canvas/offscreen/the-offscreen-canvas/size.attributes.idl.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/canvas/offscreen/the-offscreen-canvas/size.attributes.idl.worker.html [ Failure ] -crbug.com/1050754 external/wpt/html/canvas/offscreen/the-offscreen-canvas/size.attributes.parse.em.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/canvas/offscreen/the-offscreen-canvas/size.attributes.parse.em.worker.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/canvas/offscreen/the-offscreen-canvas/size.attributes.parse.empty.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/canvas/offscreen/the-offscreen-canvas/size.attributes.parse.junk.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/canvas/offscreen/the-offscreen-canvas/size.attributes.parse.junk.worker.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/canvas/offscreen/the-offscreen-canvas/size.attributes.parse.minus.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/canvas/offscreen/the-offscreen-canvas/size.attributes.parse.minus.worker.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/canvas/offscreen/the-offscreen-canvas/size.attributes.parse.onlyspace.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/canvas/offscreen/the-offscreen-canvas/size.attributes.parse.percent.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/canvas/offscreen/the-offscreen-canvas/size.attributes.parse.percent.worker.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/canvas/offscreen/the-offscreen-canvas/size.attributes.parse.trailingjunk.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/canvas/offscreen/the-offscreen-canvas/size.attributes.parse.trailingjunk.worker.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/dom/documents/dom-tree-accessors/document.getElementsByName/document.getElementsByName-namespace-xhtml.xhtml [ Failure Pass ] -crbug.com/1050754 external/wpt/html/dom/documents/dom-tree-accessors/document.getElementsByName/document.getElementsByName-namespace.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/dom/documents/dom-tree-accessors/nameditem-names.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/dom/elements/global-attributes/custom-attrs.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/dom/elements/global-attributes/dataset-binding.window.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/dom/elements/the-innertext-idl-attribute/getter.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/dom/idlharness.https.html?exclude=(Document|Window|HTML.\*) [ Failure Pass ] -crbug.com/1050754 external/wpt/html/dom/idlharness.https.html?include=(Document|Window) [ Failure Pass ] -crbug.com/1050754 external/wpt/html/dom/idlharness.https.html?include=HTML.\* [ Failure Pass ] -crbug.com/1050754 external/wpt/html/dom/idlharness.worker.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/dom/reflection-embedded.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/dom/reflection-forms.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/dom/reflection-metadata.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/dom/reflection-misc.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/dom/reflection-text.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/dom/usvstring-reflection.https.html [ Pass Timeout ] -crbug.com/1050754 external/wpt/html/editing/dnd/synthetic/001.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/editing/dnd/target-origin/202.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/editing/dnd/the-dropzone-attribute/dropzone_attribute.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/editing/editing-0/making-entire-documents-editable-the-designmode-idl-attribute/user-interaction-editing-designMode.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/infrastructure/common-dom-interfaces/collections/htmlallcollection.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/infrastructure/safe-passing-of-structured-data/messagechannel.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/blob-data.https.html [ Failure ] -crbug.com/1050754 external/wpt/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/broadcastchannel-success-and-failure.https.html [ Failure ] -crbug.com/1050754 external/wpt/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/broadcastchannel-success.https.html [ Failure ] -crbug.com/1050754 external/wpt/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/identity-not-preserved.https.html [ Failure ] -crbug.com/1050754 external/wpt/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/nested-sharedworker-success.https.html [ Failure ] -crbug.com/1050754 external/wpt/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/nested-worker-success.https.html [ Failure ] -crbug.com/1050754 external/wpt/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/no-coop-coep.https.any.html [ Failure ] -crbug.com/1050754 external/wpt/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/no-coop-coep.https.any.serviceworker.html [ Failure ] -crbug.com/1050754 external/wpt/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/no-coop-coep.https.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/no-coop-coep.https.any.worker.html [ Failure ] -crbug.com/1050754 external/wpt/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/no-transferring.https.html [ Failure ] -crbug.com/1050754 external/wpt/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/serialization-via-history.https.html [ Failure ] -crbug.com/1050754 external/wpt/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/serialization-via-idb.any.html [ Failure ] -crbug.com/1050754 external/wpt/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/serialization-via-idb.any.worker.html [ Failure ] -crbug.com/1050754 external/wpt/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/serialization-via-notifications-api.any.html [ Failure ] -crbug.com/1050754 external/wpt/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/serialization-via-notifications-api.any.worker.html [ Failure ] -crbug.com/1050754 external/wpt/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/window-failure.https.html [ Timeout ] -crbug.com/1050754 external/wpt/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/window-messagechannel-success.https.html [ Failure ] -crbug.com/1050754 external/wpt/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/window-serviceworker-failure.https.html [ Failure ] -crbug.com/1050754 external/wpt/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/window-sharedworker-failure.https.html [ Failure ] -crbug.com/1050754 external/wpt/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/window-simple-success.https.html [ Failure ] -crbug.com/1050754 external/wpt/html/infrastructure/safe-passing-of-structured-data/transfer-errors.window.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/infrastructure/urls/resolving-urls/query-encoding/attributes.sub.html?encoding=windows-1252 [ Failure Pass ] -crbug.com/1050754 external/wpt/html/infrastructure/urls/resolving-urls/query-encoding/attributes.sub.html?encoding=x-cp1251 [ Failure Pass ] - -# navigation.sub.html fails or times out when run with run_web_tests.py but passes with run_wpt_tests.py -crbug.com/1050754 external/wpt/html/infrastructure/urls/resolving-urls/query-encoding/navigation.sub.html?encoding=utf8 [ Failure Timeout ] -crbug.com/1050754 external/wpt/html/infrastructure/urls/resolving-urls/query-encoding/navigation.sub.html?encoding=windows-1252 [ Failure Timeout ] -crbug.com/1050754 external/wpt/html/infrastructure/urls/resolving-urls/query-encoding/navigation.sub.html?encoding=x-cp1251 [ Failure Timeout ] - -crbug.com/1050754 external/wpt/html/infrastructure/urls/resolving-urls/query-encoding/utf-16be.html?include=history [ Failure Pass ] -crbug.com/1050754 external/wpt/html/infrastructure/urls/resolving-urls/query-encoding/utf-16be.html?include=loading [ Failure Pass ] -crbug.com/1050754 external/wpt/html/infrastructure/urls/resolving-urls/query-encoding/utf-16be.html?include=workers [ Failure ] -crbug.com/1050754 external/wpt/html/infrastructure/urls/resolving-urls/query-encoding/utf-16le.html?include=history [ Failure Pass ] -crbug.com/1050754 external/wpt/html/infrastructure/urls/resolving-urls/query-encoding/utf-16le.html?include=loading [ Failure Pass ] -crbug.com/1050754 external/wpt/html/infrastructure/urls/resolving-urls/query-encoding/utf-16le.html?include=workers [ Failure ] -crbug.com/1050754 external/wpt/html/infrastructure/urls/resolving-urls/query-encoding/utf-8.html?include=css [ Failure Pass ] -crbug.com/1050754 external/wpt/html/infrastructure/urls/resolving-urls/query-encoding/utf-8.html?include=history [ Failure Pass ] -crbug.com/1050754 external/wpt/html/infrastructure/urls/resolving-urls/query-encoding/utf-8.html?include=loading [ Failure Pass ] -crbug.com/1050754 external/wpt/html/infrastructure/urls/resolving-urls/query-encoding/utf-8.html?include=workers [ Failure Pass ] -crbug.com/1050754 external/wpt/html/infrastructure/urls/resolving-urls/query-encoding/windows-1251.html?include=base-href [ Failure Pass ] -crbug.com/1050754 external/wpt/html/infrastructure/urls/resolving-urls/query-encoding/windows-1251.html?include=css [ Failure Pass ] -crbug.com/1050754 external/wpt/html/infrastructure/urls/resolving-urls/query-encoding/windows-1251.html?include=history [ Failure Pass ] -crbug.com/1050754 external/wpt/html/infrastructure/urls/resolving-urls/query-encoding/windows-1251.html?include=hyperlink-search [ Failure Pass ] -crbug.com/1050754 external/wpt/html/infrastructure/urls/resolving-urls/query-encoding/windows-1251.html?include=loading [ Failure Pass ] -crbug.com/1050754 external/wpt/html/infrastructure/urls/resolving-urls/query-encoding/windows-1251.html?include=scheme [ Failure Pass ] -crbug.com/1050754 external/wpt/html/infrastructure/urls/resolving-urls/query-encoding/windows-1251.html?include=workers [ Failure Pass ] -crbug.com/1050754 external/wpt/html/infrastructure/urls/resolving-urls/query-encoding/windows-1251.html?include=xhr [ Failure Pass ] -crbug.com/1050754 external/wpt/html/infrastructure/urls/resolving-urls/query-encoding/windows-1251.html?include=xml [ Failure Pass ] -crbug.com/1050754 external/wpt/html/infrastructure/urls/resolving-urls/query-encoding/windows-1252.html?include=base-href [ Failure Pass ] -crbug.com/1050754 external/wpt/html/infrastructure/urls/resolving-urls/query-encoding/windows-1252.html?include=css [ Failure Pass ] -crbug.com/1050754 external/wpt/html/infrastructure/urls/resolving-urls/query-encoding/windows-1252.html?include=history [ Failure Pass ] -crbug.com/1050754 external/wpt/html/infrastructure/urls/resolving-urls/query-encoding/windows-1252.html?include=hyperlink-search [ Failure Pass ] -crbug.com/1050754 external/wpt/html/infrastructure/urls/resolving-urls/query-encoding/windows-1252.html?include=loading [ Failure Pass ] -crbug.com/1050754 external/wpt/html/infrastructure/urls/resolving-urls/query-encoding/windows-1252.html?include=scheme [ Failure Pass ] -crbug.com/1050754 external/wpt/html/infrastructure/urls/resolving-urls/query-encoding/windows-1252.html?include=workers [ Failure Pass ] -crbug.com/1050754 external/wpt/html/infrastructure/urls/resolving-urls/query-encoding/windows-1252.html?include=xhr [ Failure Pass ] -crbug.com/1050754 external/wpt/html/infrastructure/urls/resolving-urls/query-encoding/windows-1252.html?include=xml [ Failure Pass ] -crbug.com/1050754 external/wpt/html/interaction/focus/composed.window.html [ Timeout ] -crbug.com/1050754 external/wpt/html/interaction/focus/focus-02.html [ Failure ] -crbug.com/1050754 external/wpt/html/interaction/focus/focus-management/focus-event-targets-simple.html [ Failure ] -crbug.com/1050754 external/wpt/html/interaction/focus/focus-management/focus-events.html [ Timeout ] -crbug.com/1050754 external/wpt/html/interaction/focus/processing-model/legend-focusable.html [ Timeout ] -crbug.com/1050754 external/wpt/html/interaction/focus/sequential-focus-navigation-and-the-tabindex-attribute/focus-tabindex-order.html [ Failure ] -crbug.com/1050754 external/wpt/html/interaction/focus/the-autofocus-attribute/same-origin-autofocus.html [ Failure ] -crbug.com/1050754 external/wpt/html/interaction/focus/the-autofocus-attribute/spin-by-blocking-style-sheet.html [ Timeout ] -crbug.com/1050754 external/wpt/html/interaction/focus/the-autofocus-attribute/update-the-rendering.html [ Failure ] -crbug.com/1050754 external/wpt/html/rendering/non-replaced-elements/flow-content-0/dialog.html [ Failure ] -crbug.com/1050754 external/wpt/html/rendering/non-replaced-elements/form-controls/button-style.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/rendering/non-replaced-elements/form-controls/resets.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/rendering/non-replaced-elements/tables/hidden-attr.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/rendering/non-replaced-elements/tables/table-attribute.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/rendering/non-replaced-elements/tables/table-ua-stylesheet.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-content-before-legend.html [ Failure ] -crbug.com/1050754 external/wpt/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-display.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-flexbox.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-generated-content.html [ Failure ] -crbug.com/1050754 external/wpt/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-grid.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-multicol.html [ Failure ] -crbug.com/1050754 external/wpt/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-percentage-block-size.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-align-justify-self.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-align-text-align.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-align.html [ Failure ] -crbug.com/1050754 external/wpt/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-display.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-grid-flex-multicol.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-sans-fieldset-display.html [ Failure ] -crbug.com/1050754 external/wpt/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/rendering/non-replaced-elements/the-hr-element-0/hr.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/rendering/non-replaced-elements/the-page/iframe-body-margin-attributes.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/rendering/non-replaced-elements/the-page/iframe-marginwidth-marginheight.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/rendering/pixel-length-attributes.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/rendering/replaced-elements/attributes-for-embedded-content-and-images/align.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/rendering/replaced-elements/attributes-for-embedded-content-and-images/embedded-and-images-presentational-hints-ascii-case-insensitive.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/rendering/replaced-elements/svg-inline-sizing/svg-inline.html [ Failure ] -crbug.com/1050754 external/wpt/html/rendering/unmapped-attributes.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/rendering/widgets/appearance/default-styles.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/rendering/widgets/baseline-alignment-and-overflow.tentative.html [ Failure ] -crbug.com/1050754 external/wpt/html/rendering/widgets/button-layout/abspos.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/rendering/widgets/button-layout/computed-style.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/rendering/widgets/button-layout/display-other.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/rendering/widgets/button-layout/grid.html [ Failure ] -crbug.com/1050754 external/wpt/html/semantics/document-metadata/interactions-of-styling-and-scripting/conditionally-block-rendering-on-link-media-attr.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/semantics/document-metadata/styling/LinkStyle.html [ Failure ] -crbug.com/1050754 external/wpt/html/semantics/document-metadata/the-base-element/base_href_invalid.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/semantics/document-metadata/the-link-element/link-error-fired-before-scripting-unblocked.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/semantics/document-metadata/the-link-element/link-load-error-events.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/semantics/document-metadata/the-link-element/link-load-error-events.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/semantics/document-metadata/the-link-element/link-load-event.html [ Pass Timeout ] -crbug.com/1050754 external/wpt/html/semantics/document-metadata/the-link-element/link-load-fired-before-scripting-unblocked.html [ Pass Timeout ] -crbug.com/1050754 external/wpt/html/semantics/document-metadata/the-link-element/link-multiple-error-events.html [ Timeout ] -crbug.com/1050754 external/wpt/html/semantics/document-metadata/the-link-element/link-multiple-load-events.html [ Timeout ] -crbug.com/1050754 external/wpt/html/semantics/document-metadata/the-link-element/link-style-error-01.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/semantics/document-metadata/the-link-element/link-style-error-limited-quirks.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/semantics/document-metadata/the-link-element/link-style-error-quirks.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/semantics/document-metadata/the-style-element/style_type_svg.svg [ Failure Pass ] -crbug.com/1050754 external/wpt/html/semantics/embedded-content/image-maps/image-map-processing-model/hash-name-reference.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/semantics/embedded-content/media-elements/audio_loop_base.html [ Failure ] -crbug.com/1050754 external/wpt/html/semantics/embedded-content/media-elements/autoplay-allowed-by-feature-policy-attribute-redirect-on-load.https.sub.html [ Failure Timeout ] -crbug.com/1050754 external/wpt/html/semantics/embedded-content/media-elements/autoplay-allowed-by-feature-policy-attribute.https.sub.html [ Failure Timeout ] -crbug.com/1050754 external/wpt/html/semantics/embedded-content/media-elements/autoplay-allowed-by-feature-policy.https.sub.html [ Failure Timeout ] -crbug.com/1050754 external/wpt/html/semantics/embedded-content/media-elements/autoplay-default-feature-policy.https.sub.html [ Failure Timeout ] -crbug.com/1050754 external/wpt/html/semantics/embedded-content/media-elements/autoplay-disabled-by-feature-policy.https.sub.html [ Failure Timeout ] -crbug.com/1050754 external/wpt/html/semantics/embedded-content/media-elements/autoplay-with-broken-track.html [ Timeout ] -crbug.com/1050754 external/wpt/html/semantics/embedded-content/media-elements/event_order_canplay_playing.html [ Timeout ] -crbug.com/1050754 external/wpt/html/semantics/embedded-content/media-elements/event_order_loadstart_progress.html [ Failure ] -crbug.com/1050754 external/wpt/html/semantics/embedded-content/media-elements/event_pause.html [ Timeout ] -crbug.com/1050754 external/wpt/html/semantics/embedded-content/media-elements/event_pause_noautoplay.html [ Timeout ] -crbug.com/1050754 external/wpt/html/semantics/embedded-content/media-elements/event_play.html [ Timeout ] -crbug.com/1050754 external/wpt/html/semantics/embedded-content/media-elements/event_play_noautoplay.html [ Timeout ] -crbug.com/1050754 external/wpt/html/semantics/embedded-content/media-elements/event_playing.html [ Timeout ] -crbug.com/1050754 external/wpt/html/semantics/embedded-content/media-elements/event_playing_noautoplay.html [ Failure ] -crbug.com/1050754 external/wpt/html/semantics/embedded-content/media-elements/event_timeupdate.html [ Timeout ] -crbug.com/1050754 external/wpt/html/semantics/embedded-content/media-elements/event_timeupdate_noautoplay.html [ Failure ] -crbug.com/1050754 external/wpt/html/semantics/embedded-content/media-elements/interfaces/HTMLElement/HTMLTrackElement/src.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/semantics/embedded-content/media-elements/interfaces/TextTrack/activeCues.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/semantics/embedded-content/media-elements/interfaces/TextTrack/cues.html [ Failure ] -crbug.com/1050754 external/wpt/html/semantics/embedded-content/media-elements/interfaces/TextTrackCue/onenter.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/semantics/embedded-content/media-elements/interfaces/TextTrackCue/onexit.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/semantics/embedded-content/media-elements/interfaces/TrackEvent/createEvent.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/semantics/embedded-content/media-elements/loading-the-media-resource/autoplay-overrides-preload.html [ Timeout ] -crbug.com/1050754 external/wpt/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-candidate-insert-before.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-candidate-moved.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-audio-constructor.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-in-sync-event.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-insert-into-iframe.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-insert-source-networkState.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-insert-source-not-in-document.html [ Failure ] -crbug.com/1050754 external/wpt/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-load.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-pause.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-play.html [ Failure ] -crbug.com/1050754 external/wpt/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-set-src-networkState.html [ Failure ] -crbug.com/1050754 external/wpt/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-pointer-control.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-pointer-insert-br.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-pointer-insert-source.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-pointer-insert-text.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-pointer-remove-source-after.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-pointer-remove-source.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-pointer-remove-text.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-remove-source.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-remove-src.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-source-media.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/semantics/embedded-content/media-elements/location-of-the-media-resource/currentSrc.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/semantics/embedded-content/media-elements/mime-types/canPlayType.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/semantics/embedded-content/media-elements/networkState_during_progress.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/semantics/embedded-content/media-elements/paused_false_during_play.html [ Timeout ] -crbug.com/1050754 external/wpt/html/semantics/embedded-content/media-elements/paused_true_during_pause.html [ Timeout ] -crbug.com/1050754 external/wpt/html/semantics/embedded-content/media-elements/playing-the-media-resource/loop-from-ended.tentative.html [ Failure ] -crbug.com/1050754 external/wpt/html/semantics/embedded-content/media-elements/playing-the-media-resource/pause-move-to-other-document.html [ Failure ] -crbug.com/1050754 external/wpt/html/semantics/embedded-content/media-elements/playing-the-media-resource/pause-move-within-document.html [ Failure ] -crbug.com/1050754 external/wpt/html/semantics/embedded-content/media-elements/playing-the-media-resource/pause-remove-from-document-different-load.html [ Failure ] -crbug.com/1050754 external/wpt/html/semantics/embedded-content/media-elements/playing-the-media-resource/pause-remove-from-document-networkState.html [ Failure ] -crbug.com/1050754 external/wpt/html/semantics/embedded-content/media-elements/playing-the-media-resource/pause-remove-from-document.html [ Failure ] -crbug.com/1050754 external/wpt/html/semantics/embedded-content/media-elements/playing-the-media-resource/play-in-detached-document.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/semantics/embedded-content/media-elements/ready-states/autoplay-with-slow-text-tracks.html [ Timeout ] -crbug.com/1050754 external/wpt/html/semantics/embedded-content/media-elements/ready-states/autoplay.html [ Failure ] -crbug.com/1050754 external/wpt/html/semantics/embedded-content/media-elements/readyState_during_playing.html [ Timeout ] -crbug.com/1050754 external/wpt/html/semantics/embedded-content/media-elements/src_object_blob.html [ Failure ] -crbug.com/1050754 external/wpt/html/semantics/embedded-content/media-elements/track/track-element/src-clear-cues.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/semantics/embedded-content/media-elements/track/track-element/track-active-cues.html [ Failure ] -crbug.com/1050754 external/wpt/html/semantics/embedded-content/media-elements/track/track-element/track-cue-mutable-fragment.html [ Timeout ] -crbug.com/1050754 external/wpt/html/semantics/embedded-content/media-elements/track/track-element/track-cue-negative-duration.html [ Failure ] -crbug.com/1050754 external/wpt/html/semantics/embedded-content/media-elements/track/track-element/track-cue-negative-timestamp-events.html [ Failure ] -crbug.com/1050754 external/wpt/html/semantics/embedded-content/media-elements/track/track-element/track-cue-order.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/semantics/embedded-content/media-elements/track/track-element/track-cue-rendering-empty-cue.html [ Failure ] -crbug.com/1050754 external/wpt/html/semantics/embedded-content/media-elements/track/track-element/track-cues-cuechange-dynamically-created-track-element.html [ Failure ] -crbug.com/1050754 external/wpt/html/semantics/embedded-content/media-elements/track/track-element/track-cues-cuechange.html [ Failure ] -crbug.com/1050754 external/wpt/html/semantics/embedded-content/media-elements/track/track-element/track-cues-enter-exit.html [ Failure ] -crbug.com/1050754 external/wpt/html/semantics/embedded-content/media-elements/track/track-element/track-cues-missed.html [ Failure ] -crbug.com/1050754 external/wpt/html/semantics/embedded-content/media-elements/track/track-element/track-cues-pause-on-exit.html [ Failure ] -crbug.com/1050754 external/wpt/html/semantics/embedded-content/media-elements/track/track-element/track-cues-sorted-before-dispatch.html [ Failure ] -crbug.com/1050754 external/wpt/html/semantics/embedded-content/media-elements/track/track-element/track-disabled-addcue.html [ Failure ] -crbug.com/1050754 external/wpt/html/semantics/embedded-content/media-elements/track/track-element/track-disabled.html [ Failure ] -crbug.com/1050754 external/wpt/html/semantics/embedded-content/media-elements/track/track-element/track-element-src-change-error.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/semantics/embedded-content/media-elements/track/track-element/track-element-src-change.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/semantics/embedded-content/media-elements/track/track-element/track-mode-disabled.html [ Timeout ] -crbug.com/1050754 external/wpt/html/semantics/embedded-content/media-elements/track/track-element/track-mode.html [ Failure ] -crbug.com/1050754 external/wpt/html/semantics/embedded-content/media-elements/track/track-element/track-remove-active-cue.html [ Failure ] -crbug.com/1050754 external/wpt/html/semantics/embedded-content/media-elements/track/track-element/track-remove-by-setting-innerHTML.html [ Timeout ] -crbug.com/1050754 external/wpt/html/semantics/embedded-content/media-elements/track/track-element/track-remove-insert-ready-state.html [ Failure ] -crbug.com/1050754 external/wpt/html/semantics/embedded-content/media-elements/track/track-element/track-remove-track-inband.html [ Timeout ] -crbug.com/1050754 external/wpt/html/semantics/embedded-content/media-elements/track/track-element/track-selection-task-order.html [ Failure ] -crbug.com/1050754 external/wpt/html/semantics/embedded-content/media-elements/video_008.htm [ Timeout ] -crbug.com/1050754 external/wpt/html/semantics/embedded-content/media-elements/video_loop_base.html [ Failure ] -crbug.com/1050754 external/wpt/html/semantics/embedded-content/the-canvas-element/imagedata.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/semantics/embedded-content/the-embed-element/embed-in-object-fallback-2.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/semantics/embedded-content/the-iframe-element/cross-origin-to-whom-part-2.window.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/semantics/embedded-content/the-iframe-element/cross-origin-to-whom.window.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/semantics/embedded-content/the-iframe-element/iframe-allow.html [ Failure ] -crbug.com/1050754 external/wpt/html/semantics/embedded-content/the-iframe-element/iframe-allowfullscreen.html [ Failure ] -crbug.com/1050754 external/wpt/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_allow_top_navigation-1.html [ Failure Timeout ] -crbug.com/1050754 external/wpt/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_allow_top_navigation-3.html [ Failure Timeout ] -crbug.com/1050754 external/wpt/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_navigation_download_block_downloads.sub.tentative.html [ Failure ] -crbug.com/1050754 external/wpt/html/semantics/embedded-content/the-iframe-element/sandbox_002.htm [ Timeout ] -crbug.com/1050754 external/wpt/html/semantics/embedded-content/the-img-element/decode/image-decode-iframe.html [ Timeout ] -crbug.com/1050754 external/wpt/html/semantics/embedded-content/the-img-element/decode/image-decode-path-changes.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/semantics/embedded-content/the-img-element/decode/image-decode-svg.tentative.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/semantics/embedded-content/the-img-element/decode/image-decode.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/semantics/embedded-content/the-img-element/environment-changes/viewport-change.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/semantics/embedded-content/the-img-element/image-loading-lazy-base-url-2.html [ Failure ] -crbug.com/1050754 external/wpt/html/semantics/embedded-content/the-img-element/image-loading-lazy-base-url.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/semantics/embedded-content/the-img-element/image-loading-lazy-below-viewport-dynamic.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/semantics/embedded-content/the-img-element/image-loading-lazy-in-script-disabled-iframe.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/semantics/embedded-content/the-img-element/image-loading-lazy-in-viewport-dynamic.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/semantics/embedded-content/the-img-element/image-loading-lazy-move-document.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/semantics/embedded-content/the-img-element/image-loading-lazy-to-eager.html [ Pass Timeout ] -crbug.com/1050754 external/wpt/html/semantics/embedded-content/the-img-element/img.complete.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/semantics/embedded-content/the-img-element/move-element-and-scroll.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/semantics/embedded-content/the-img-element/sizes/implicit-sizes-ignores-width.html [ Timeout ] -crbug.com/1050754 external/wpt/html/semantics/embedded-content/the-img-element/sizes/parse-a-sizes-attribute-display-none.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/semantics/embedded-content/the-img-element/sizes/parse-a-sizes-attribute-quirks-mode.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/semantics/embedded-content/the-img-element/sizes/parse-a-sizes-attribute-standards-mode.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/semantics/embedded-content/the-img-element/sizes/parse-a-sizes-attribute-width-1000px.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/semantics/embedded-content/the-object-element/object-attributes.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/semantics/embedded-content/the-object-element/object-events.html [ Timeout ] -crbug.com/1050754 external/wpt/html/semantics/embedded-content/the-object-element/object-in-object-fallback-2.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/semantics/embedded-content/the-object-element/object-setcustomvalidity.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/semantics/embedded-content/the-object-element/usemap-casing.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/semantics/embedded-content/the-video-element/intrinsic_sizes.htm [ Failure Pass ] -crbug.com/1050754 external/wpt/html/semantics/forms/constraints/form-validation-validity-patternMismatch.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/semantics/forms/constraints/form-validation-validity-valueMissing.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/semantics/forms/form-submission-0/form-double-submit-3.html [ Failure ] -crbug.com/1050754 external/wpt/html/semantics/forms/form-submission-0/form-double-submit.html [ Failure ] -crbug.com/1050754 external/wpt/html/semantics/forms/form-submission-0/getactionurl.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/semantics/forms/form-submission-target/rel-base-target.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/semantics/forms/form-submission-target/rel-button-target.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/semantics/forms/form-submission-target/rel-form-target.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/semantics/forms/form-submission-target/rel-input-target.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/semantics/forms/historical.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/semantics/forms/resetting-a-form/reset-form-event-realm.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/semantics/forms/textfieldselection/selection-not-application-textarea.html [ Failure ] -crbug.com/1050754 external/wpt/html/semantics/forms/the-button-element/button-click-submits.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/semantics/forms/the-fieldset-element/disabled-001.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/semantics/forms/the-form-element/form-autocomplete.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/semantics/forms/the-form-element/form-indexed-element.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/semantics/forms/the-form-element/form-nameditem.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/semantics/forms/the-input-element/datetime-local.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/semantics/forms/the-input-element/hidden-charset-case-sensitive.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/semantics/forms/the-input-element/time-focus-dynamic-value-change.html [ Failure ] -crbug.com/1050754 external/wpt/html/semantics/forms/the-input-element/type-change-state.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/semantics/forms/the-label-element/forward-focus-to-associated-element.html [ Timeout ] -crbug.com/1050754 external/wpt/html/semantics/forms/the-label-element/label-attributes.sub.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/semantics/forms/the-output-element/mutations.window.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/semantics/interactive-elements/the-details-element/toggleEvent.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/semantics/interactive-elements/the-dialog-element/abspos-dialog-layout.html [ Failure ] -crbug.com/1050754 external/wpt/html/semantics/interactive-elements/the-dialog-element/centering.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/semantics/interactive-elements/the-dialog-element/dialog-autofocus-multiple-times.html [ Timeout ] -crbug.com/1050754 external/wpt/html/semantics/interactive-elements/the-dialog-element/dialog-autofocus.html [ Timeout ] -crbug.com/1050754 external/wpt/html/semantics/interactive-elements/the-dialog-element/dialog-showModal.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/semantics/interactive-elements/the-dialog-element/inert-node-is-unfocusable.html [ Failure ] -crbug.com/1050754 external/wpt/html/semantics/interactive-elements/the-dialog-element/remove-dialog-should-unblock-document.html [ Failure ] -crbug.com/1050754 external/wpt/html/semantics/interactive-elements/the-dialog-element/show-modal-focusing-steps.html [ Timeout ] -crbug.com/1050754 external/wpt/html/semantics/links/downloading-resources/header-origin-no-referrer.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/semantics/links/following-hyperlinks/activation-behavior.window.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/semantics/links/links-created-by-a-and-area-elements/htmlanchorelement_noopener.html [ Timeout ] -crbug.com/1050754 external/wpt/html/semantics/links/links-created-by-a-and-area-elements/target_blank_implicit_noopener.html [ Timeout ] -crbug.com/1050754 external/wpt/html/semantics/links/links-created-by-a-and-area-elements/target_blank_implicit_noopener_base.html [ Timeout ] -crbug.com/1050754 external/wpt/html/semantics/rellist-feature-detection.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/semantics/scripting-1/the-script-element/css-module/import-css-module-basic.html [ Failure ] -crbug.com/1050754 external/wpt/html/semantics/scripting-1/the-script-element/css-module/utf8.tentative.html [ Failure ] -crbug.com/1050754 external/wpt/html/semantics/scripting-1/the-script-element/evaluation-order-1-nothrow-sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/html/semantics/scripting-1/the-script-element/evaluation-order-1-sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/html/semantics/scripting-1/the-script-element/execution-timing/029.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/semantics/scripting-1/the-script-element/execution-timing/031.html [ Failure ] -crbug.com/1050754 external/wpt/html/semantics/scripting-1/the-script-element/execution-timing/083.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/semantics/scripting-1/the-script-element/execution-timing/106-defer-import.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/semantics/scripting-1/the-script-element/execution-timing/106-defer-noimport.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/semantics/scripting-1/the-script-element/execution-timing/106-external-module-import.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/semantics/scripting-1/the-script-element/execution-timing/106-external-module-noimport.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/semantics/scripting-1/the-script-element/execution-timing/106-import-xhtml.xhtml [ Failure Pass ] -crbug.com/1050754 external/wpt/html/semantics/scripting-1/the-script-element/execution-timing/106-module-import.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/semantics/scripting-1/the-script-element/execution-timing/106-module-noimport.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/semantics/scripting-1/the-script-element/execution-timing/106-noimport-xhtml.xhtml [ Failure Pass ] -crbug.com/1050754 external/wpt/html/semantics/scripting-1/the-script-element/execution-timing/116.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/semantics/scripting-1/the-script-element/execution-timing/128.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/semantics/scripting-1/the-script-element/execution-timing/146.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/semantics/scripting-1/the-script-element/execution-timing/148.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/semantics/scripting-1/the-script-element/json-module/json-module-service-worker-test.https.tentative.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/semantics/scripting-1/the-script-element/json-module/module.tentative.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/semantics/scripting-1/the-script-element/json-module/non-object.tentative.any.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/semantics/scripting-1/the-script-element/json-module/non-object.tentative.any.serviceworker.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/semantics/scripting-1/the-script-element/json-module/non-object.tentative.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/html/semantics/scripting-1/the-script-element/json-module/non-object.tentative.any.worker.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/semantics/scripting-1/the-script-element/json-module/parse-error.tentative.html [ Timeout ] -crbug.com/1050754 external/wpt/html/semantics/scripting-1/the-script-element/json-module/utf8.tentative.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/semantics/scripting-1/the-script-element/json-module/valid-content-type.tentative.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/semantics/scripting-1/the-script-element/microtasks/checkpoint-importScripts.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/html/semantics/scripting-1/the-script-element/module/dynamic-import/dynamic-imports-credentials.sub.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/semantics/scripting-1/the-script-element/module/dynamic-import/no-active-script-classic-manual.html [ Timeout ] -crbug.com/1050754 external/wpt/html/semantics/scripting-1/the-script-element/module/dynamic-import/no-active-script-module-manual.html [ Timeout ] -crbug.com/1050754 external/wpt/html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-base-url-external-classic.html [ Failure ] -crbug.com/1050754 external/wpt/html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-base-url-external-module.html [ Failure ] -crbug.com/1050754 external/wpt/html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-base-url-inline-classic.html [ Failure ] -crbug.com/1050754 external/wpt/html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-base-url-inline-module.html [ Failure ] -crbug.com/1050754 external/wpt/html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-nonce-classic.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-nonce-module.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-other-document.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/semantics/scripting-1/the-script-element/module/evaluation-order-1-nothrow-sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/html/semantics/scripting-1/the-script-element/module/evaluation-order-1-sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/html/semantics/scripting-1/the-script-element/module/evaluation-order-2-import-sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/html/semantics/scripting-1/the-script-element/module/evaluation-order-3-dynamic-sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/html/semantics/scripting-1/the-script-element/module/evaluation-order-4-tla.html [ Failure ] -crbug.com/1050754 external/wpt/html/semantics/scripting-1/the-script-element/module/import-meta/import-meta-url.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/semantics/scripting-1/the-script-element/module/instantiation-error-3.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/semantics/scripting-1/the-script-element/module/instantiation-error-4.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/semantics/scripting-1/the-script-element/module/instantiation-error-5.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/semantics/scripting-1/the-script-element/module/module-in-xhtml.xhtml [ Failure ] -crbug.com/1050754 external/wpt/html/semantics/scripting-1/the-script-element/script-charset-01.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/semantics/scripting-1/the-script-element/script-onerror-insertion-point-2.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/semantics/scripting-1/the-script-element/script-type-and-language-empty.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/semantics/scripting-1/the-template-element/definitions/template-contents-owner-document-type.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/semantics/scripting-1/the-template-element/template-element/template-content-hierarcy.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/semantics/selectors/pseudo-classes/default.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/semantics/selectors/pseudo-classes/dir-html-input-dynamic-text.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/semantics/selectors/pseudo-classes/dir.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/semantics/selectors/pseudo-classes/dir01.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/semantics/selectors/pseudo-classes/enabled.html [ Failure ] -crbug.com/1050754 external/wpt/html/semantics/selectors/pseudo-classes/focus-autofocus.html [ Timeout ] -crbug.com/1050754 external/wpt/html/semantics/selectors/pseudo-classes/focus.html [ Timeout ] -crbug.com/1050754 external/wpt/html/semantics/selectors/pseudo-classes/link.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/semantics/selectors/pseudo-classes/readwrite-readonly.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/semantics/tabular-data/processing-model-1/span-limits.html [ Failure ] -crbug.com/1050754 external/wpt/html/syntax/parsing/DOMContentLoaded-defer.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/syntax/parsing/Document.getElementsByTagName-foreign-01.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/syntax/parsing/html5lib_innerHTML_adoption01.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/syntax/parsing/html5lib_innerHTML_foreign-fragment.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/syntax/parsing/html5lib_innerHTML_webkit02.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/syntax/parsing/html5lib_menuitem-element.html?run_type=uri [ Failure Pass ] -crbug.com/1050754 external/wpt/html/syntax/parsing/html5lib_menuitem-element.html?run_type=write [ Failure Pass ] -crbug.com/1050754 external/wpt/html/syntax/parsing/html5lib_menuitem-element.html?run_type=write_single [ Failure Pass ] -crbug.com/1050754 external/wpt/html/syntax/parsing/html5lib_tests11.html?run_type=uri [ Failure Pass ] -crbug.com/1050754 external/wpt/html/syntax/parsing/html5lib_tests11.html?run_type=write [ Failure Pass ] -crbug.com/1050754 external/wpt/html/syntax/parsing/html5lib_tests11.html?run_type=write_single [ Failure Pass ] -crbug.com/1050754 external/wpt/html/syntax/parsing/html5lib_tests25.html?run_type=uri [ Failure Pass ] -crbug.com/1050754 external/wpt/html/syntax/parsing/html5lib_tests25.html?run_type=write [ Failure Pass ] -crbug.com/1050754 external/wpt/html/syntax/parsing/html5lib_tests25.html?run_type=write_single [ Failure Pass ] -crbug.com/1050754 external/wpt/html/syntax/parsing/html5lib_webkit02.html?run_type=uri [ Failure Pass ] -crbug.com/1050754 external/wpt/html/syntax/parsing/html5lib_webkit02.html?run_type=write [ Failure Pass ] -crbug.com/1050754 external/wpt/html/syntax/parsing/html5lib_webkit02.html?run_type=write_single [ Failure Pass ] -crbug.com/1050754 external/wpt/html/syntax/parsing/the-end.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/user-activation/consumption-crossorigin.sub.html [ Failure ] -crbug.com/1050754 external/wpt/html/user-activation/consumption-sameorigin.html [ Failure ] -crbug.com/1050754 external/wpt/html/user-activation/navigation-state-reset-crossorigin.sub.html [ Failure ] -crbug.com/1050754 external/wpt/html/user-activation/navigation-state-reset-sameorigin.html [ Failure ] -crbug.com/1050754 external/wpt/html/user-activation/propagation-crossorigin.sub.html [ Failure ] -crbug.com/1050754 external/wpt/html/user-activation/propagation-sameorigin.html [ Failure ] -crbug.com/1050754 external/wpt/html/webappapis/dynamic-markup-insertion/document-write/contentType.window.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/webappapis/dynamic-markup-insertion/document-write/module-tla-delayed.html [ Timeout ] -crbug.com/1050754 external/wpt/html/webappapis/dynamic-markup-insertion/document-write/module-tla-immediate-promise.html [ Timeout ] -crbug.com/1050754 external/wpt/html/webappapis/dynamic-markup-insertion/document-write/module-tla-import.html [ Failure Timeout ] -crbug.com/1050754 external/wpt/html/webappapis/dynamic-markup-insertion/document-write/module-tla-promise.html [ Pass Timeout ] -crbug.com/1050754 external/wpt/html/webappapis/dynamic-markup-insertion/document-write/write-active-document.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/bailout-side-effects-ignore-opens-during-unload.window.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/location-set-and-document-open.html [ Timeout ] -crbug.com/1050754 external/wpt/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/reload.window.html [ Timeout ] -crbug.com/1050754 external/wpt/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/tasks.window.html [ Timeout ] -crbug.com/1050754 external/wpt/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/url.window.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/webappapis/microtask-queuing/queue-microtask-exceptions.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/html/webappapis/microtask-queuing/queue-microtask-exceptions.any.worker.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/webappapis/microtask-queuing/queue-microtask.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/html/webappapis/scripting/event-loops/fully_active_document.window.html [ Failure ] -crbug.com/1050754 external/wpt/html/webappapis/scripting/events/event-handler-all-global-events.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/webappapis/scripting/events/event-handler-attributes-body-window.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/webappapis/scripting/events/event-handler-attributes-frameset-window.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/webappapis/scripting/events/event-handler-attributes-windowless-body.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/webappapis/scripting/processing-model-2/compile-error-in-setInterval.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/webappapis/scripting/processing-model-2/compile-error-same-origin-with-hash.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/webappapis/scripting/processing-model-2/integration-with-the-javascript-agent-formalism/requires-failure.https.any.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/webappapis/scripting/processing-model-2/integration-with-the-javascript-agent-formalism/requires-failure.https.any.serviceworker.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/webappapis/scripting/processing-model-2/integration-with-the-javascript-agent-formalism/requires-success.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/html/webappapis/scripting/processing-model-2/integration-with-the-javascript-agent-formalism/requires-success.any.worker.html [ Failure ] -crbug.com/1050754 external/wpt/html/webappapis/scripting/processing-model-2/integration-with-the-javascript-job-queue/promise-job-entry-different-function-realm.html [ Timeout ] -crbug.com/1050754 external/wpt/html/webappapis/scripting/processing-model-2/integration-with-the-javascript-job-queue/promise-job-entry.html [ Timeout ] -crbug.com/1050754 external/wpt/html/webappapis/scripting/processing-model-2/integration-with-the-javascript-job-queue/promise-job-incumbent.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/webappapis/scripting/processing-model-2/runtime-error-in-setInterval.html [ Failure ] -crbug.com/1050754 external/wpt/html/webappapis/scripting/processing-model-2/runtime-error-in-setTimeout.html [ Failure ] -crbug.com/1050754 external/wpt/html/webappapis/scripting/processing-model-2/runtime-error-same-origin-with-hash.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/webappapis/scripting/processing-model-2/unhandled-promise-rejections/promise-rejection-events.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/html/webappapis/system-state-and-capabilities/the-navigator-object/navigator_user_agent.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/html/webappapis/system-state-and-capabilities/the-navigator-object/protocol.https.html [ Failure ] -crbug.com/1050754 external/wpt/html/webappapis/system-state-and-capabilities/the-navigator-object/protocol.tentative.https.html [ Failure ] -crbug.com/1050754 external/wpt/html/webappapis/the-windoworworkerglobalscope-mixin/Worker_Self_Origin.html [ Failure ] -crbug.com/1050754 external/wpt/html/webappapis/update-rendering/child-document-raf-order.html [ Failure Pass ] -crbug.com/1050754 external/wpt/idle-detection/basics.tentative.https.window.html [ Crash Failure ] -crbug.com/1050754 external/wpt/idle-detection/idle-detection-allowed-by-feature-policy-attribute-redirect-on-load.https.sub.html [ Failure Timeout ] -crbug.com/1050754 external/wpt/idle-detection/idle-detection-allowed-by-feature-policy-attribute.https.sub.html [ Failure Timeout ] -crbug.com/1050754 external/wpt/idle-detection/idle-detection-allowed-by-feature-policy.https.sub.html [ Failure Timeout ] -crbug.com/1050754 external/wpt/idle-detection/idle-detection-default-feature-policy.https.sub.html [ Failure Timeout ] -crbug.com/1050754 external/wpt/idle-detection/idle-detection-disabled-by-feature-policy.https.sub.html [ Timeout ] -crbug.com/1050754 external/wpt/idle-detection/idle-permission.tentative.https.window.html [ Crash Failure ] -crbug.com/1050754 external/wpt/idle-detection/idlharness-worker.https.window.html [ Crash Failure ] -crbug.com/1050754 external/wpt/idle-detection/idlharness.https.window.html [ Crash Failure ] -crbug.com/1050754 external/wpt/idle-detection/interceptor.https.html [ Crash Failure ] -crbug.com/1050754 external/wpt/import-maps/acquire-import-maps-flag/dynamic-import/success.tentative.html [ Timeout ] -crbug.com/1050754 external/wpt/import-maps/acquire-import-maps-flag/script-tag/success.tentative.html [ Timeout ] -crbug.com/1050754 external/wpt/import-maps/acquire-import-maps-flag/worker-request/success.tentative.html [ Timeout ] -crbug.com/1050754 external/wpt/import-maps/common/parsing.tentative.https.html [ Failure ] -crbug.com/1050754 external/wpt/import-maps/common/resolving-internal.tentative.https.html [ Failure ] -crbug.com/1050754 external/wpt/import-maps/common/resolving.tentative.https.html [ Failure ] -crbug.com/1050754 external/wpt/import-maps/core/bare.sub.tentative.html [ Failure ] -crbug.com/1050754 external/wpt/import-maps/core/data.sub.tentative.html [ Failure ] -crbug.com/1050754 external/wpt/import-maps/core/http.sub.tentative.html [ Failure ] -crbug.com/1050754 external/wpt/import-maps/core/module-map-key.tentative.html [ Failure ] -crbug.com/1050754 external/wpt/import-maps/csp/applied-to-target-dynamic.sub.tentative.html [ Failure ] -crbug.com/1050754 external/wpt/import-maps/csp/applied-to-target.sub.tentative.html [ Failure ] -crbug.com/1050754 external/wpt/import-maps/csp/hash.tentative.html [ Failure ] -crbug.com/1050754 external/wpt/import-maps/csp/nonce.tentative.html [ Failure ] -crbug.com/1050754 external/wpt/import-maps/csp/unsafe-inline.tentative.html [ Failure ] -crbug.com/1050754 external/wpt/inert/inert-inlines.html [ Failure ] -crbug.com/1050754 external/wpt/inert/inert-label-focus.html [ Failure ] -crbug.com/1050754 external/wpt/inert/inert-node-is-uneditable.html [ Failure Pass ] -crbug.com/1050754 external/wpt/inert/inert-node-is-unfocusable.html [ Failure ] -crbug.com/1050754 external/wpt/inert/inert-node-is-unselectable.html [ Failure ] -crbug.com/1050754 external/wpt/inert/inert-on-slots.html [ Failure ] -crbug.com/1050754 external/wpt/inert/inert-retargeting.tentative.html [ Failure ] -crbug.com/1050754 external/wpt/infrastructure/assumptions/allowed-to-play.html [ Failure ] -crbug.com/1050754 external/wpt/infrastructure/expected-fail/failing-test.html [ Failure Pass ] -crbug.com/1050754 external/wpt/infrastructure/expected-fail/timeout.html [ Timeout ] -crbug.com/1050754 external/wpt/infrastructure/expected-fail/uncaught-exception-following-subtest.html [ Failure ] -crbug.com/1050754 external/wpt/infrastructure/expected-fail/uncaught-exception-single-test.html [ Failure Pass ] -crbug.com/1050754 external/wpt/infrastructure/expected-fail/uncaught-exception.html [ Failure ] -crbug.com/1050754 external/wpt/infrastructure/expected-fail/unhandled-rejection-following-subtest.html [ Failure ] -crbug.com/1050754 external/wpt/infrastructure/expected-fail/unhandled-rejection-single-test.html [ Failure Pass ] -crbug.com/1050754 external/wpt/infrastructure/expected-fail/unhandled-rejection.html [ Failure ] -crbug.com/1050754 external/wpt/infrastructure/server/context.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/infrastructure/server/http2-context.sub.h2.any.html [ Failure ] -crbug.com/1050754 external/wpt/infrastructure/server/http2-context.sub.h2.any.serviceworker.html [ Failure ] -crbug.com/1050754 external/wpt/infrastructure/server/http2-context.sub.h2.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/infrastructure/server/http2-context.sub.h2.any.worker.html [ Failure ] -crbug.com/1050754 external/wpt/infrastructure/server/order-of-metas.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/infrastructure/server/secure-context.https.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/infrastructure/server/title.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/infrastructure/server/wpt-server-http.sub.html [ Failure ] -crbug.com/1050754 external/wpt/infrastructure/testdriver/click_nested.html [ Pass Timeout ] -crbug.com/1050754 external/wpt/infrastructure/testdriver/click_nested_crossorigin.sub.html [ Timeout ] -crbug.com/1050754 external/wpt/infrastructure/testdriver/file_upload.sub.html [ Failure ] -crbug.com/1050754 external/wpt/infrastructure/testdriver/set_permission.https.html [ Crash Failure ] -crbug.com/1050754 external/wpt/infrastructure/testdriver/virtual_authenticator.html [ Crash Failure ] -crbug.com/1050754 external/wpt/input-device-capabilities/idlharness.window.html [ Failure Pass ] -crbug.com/1050754 external/wpt/input-events/input-events-exec-command.html [ Failure Pass ] -crbug.com/1050754 external/wpt/input-events/input-events-get-target-ranges-backspace.tentative.html [ Failure ] -crbug.com/1050754 external/wpt/input-events/input-events-get-target-ranges-during-and-after-dispatch.tentative.html [ Failure ] -crbug.com/1050754 external/wpt/input-events/input-events-get-target-ranges-forwarddelete.tentative.html [ Failure ] -crbug.com/1050754 external/wpt/input-events/input-events-get-target-ranges-non-collapsed-selection.tentative.html?Backspace [ Failure ] -crbug.com/1050754 external/wpt/input-events/input-events-get-target-ranges-non-collapsed-selection.tentative.html?Delete [ Failure ] -crbug.com/1050754 external/wpt/input-events/input-events-get-target-ranges-non-collapsed-selection.tentative.html?TypingA [ Failure ] -crbug.com/1050754 external/wpt/input-events/input-events-typing.html [ Failure ] -crbug.com/1050754 external/wpt/input-events/select-event-drag-remove.html [ Failure ] -crbug.com/1050754 external/wpt/installedapp/idlharness.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/installedapp/installedapp.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/intersection-observer/cross-origin-iframe.sub.html [ Failure ] -crbug.com/1050754 external/wpt/intersection-observer/document-scrolling-element-root.html [ Failure ] -crbug.com/1050754 external/wpt/intersection-observer/empty-root-margin.html [ Failure ] -crbug.com/1050754 external/wpt/intersection-observer/idlharness.window.html [ Failure Pass ] -crbug.com/1050754 external/wpt/intersection-observer/iframe-no-root-with-wrapping-scroller.html [ Failure ] -crbug.com/1050754 external/wpt/intersection-observer/iframe-no-root.html [ Failure ] -crbug.com/1050754 external/wpt/intersection-observer/initial-observation-with-threshold.html [ Failure ] -crbug.com/1050754 external/wpt/intersection-observer/inline-client-rect.html [ Failure ] -crbug.com/1050754 external/wpt/intersection-observer/intersection-ratio-ib-split.html [ Failure ] -crbug.com/1050754 external/wpt/intersection-observer/isIntersecting-change-events.html [ Failure ] -crbug.com/1050754 external/wpt/intersection-observer/isIntersecting-threshold.html [ Failure ] -crbug.com/1050754 external/wpt/intersection-observer/multiple-thresholds.html [ Failure ] -crbug.com/1050754 external/wpt/intersection-observer/remove-element.html [ Failure ] -crbug.com/1050754 external/wpt/intersection-observer/root-margin-root-element.html [ Failure ] -crbug.com/1050754 external/wpt/intersection-observer/root-margin.html [ Failure ] -crbug.com/1050754 external/wpt/intersection-observer/same-document-root.html [ Failure ] -crbug.com/1050754 external/wpt/intersection-observer/same-origin-grand-child-iframe.sub.html [ Failure ] -crbug.com/1050754 external/wpt/intersection-observer/text-target.html [ Failure ] -crbug.com/1050754 external/wpt/intersection-observer/v2/blur-filter.html [ Failure ] -crbug.com/1050754 external/wpt/intersection-observer/v2/box-shadow.html [ Failure Pass ] -crbug.com/1050754 external/wpt/intersection-observer/v2/delay-test.html [ Failure ] -crbug.com/1050754 external/wpt/intersection-observer/v2/drop-shadow-filter-vertical-rl.html [ Failure ] -crbug.com/1050754 external/wpt/intersection-observer/v2/iframe-target.html [ Failure ] -crbug.com/1050754 external/wpt/intersection-observer/v2/inline-occlusion.html [ Failure Pass ] -crbug.com/1050754 external/wpt/intersection-observer/v2/simple-effects.html [ Failure ] -crbug.com/1050754 external/wpt/intersection-observer/v2/simple-occlusion-svg-foreign-object.html [ Failure ] -crbug.com/1050754 external/wpt/intersection-observer/v2/simple-occlusion.html [ Failure ] -crbug.com/1050754 external/wpt/intersection-observer/v2/text-editor-occlusion.html [ Failure ] -crbug.com/1050754 external/wpt/intersection-observer/v2/text-shadow.html [ Failure ] -crbug.com/1050754 external/wpt/is-input-pending/idlharness.window.html [ Failure Pass ] -crbug.com/1050754 external/wpt/is-input-pending/security/cross-origin-subframe-complex-clip.sub.html [ Failure ] -crbug.com/1050754 external/wpt/is-input-pending/security/cross-origin-subframe-masked-complex-clip.sub.html [ Failure ] -crbug.com/1050754 external/wpt/is-input-pending/security/cross-origin-subframe-masked-pointer-events-mixed-2.sub.html [ Failure ] -crbug.com/1050754 external/wpt/is-input-pending/security/cross-origin-subframe-masked-pointer-events-mixed.sub.html [ Failure ] -crbug.com/1050754 external/wpt/is-input-pending/security/cross-origin-subframe-masked-pointer-events-none.sub.html [ Failure ] -crbug.com/1050754 external/wpt/is-input-pending/security/cross-origin-subframe-overlap.sub.html [ Failure ] -crbug.com/1050754 external/wpt/is-input-pending/security/cross-origin-subframe-pointer-events-none.sub.html [ Failure ] -crbug.com/1050754 external/wpt/is-input-pending/security/cross-origin-subframe-transformed.sub.html [ Failure ] -crbug.com/1050754 external/wpt/is-input-pending/security/cross-origin-subframe.sub.html [ Failure ] -crbug.com/1050754 external/wpt/is-input-pending/tentative/same-origin-subframe.sub.html [ Failure ] -crbug.com/1050754 external/wpt/is-input-pending/tentative/toplevel.html [ Failure ] -crbug.com/1050754 external/wpt/js-self-profiling/idlharness.https.html [ Failure ] -crbug.com/1050754 external/wpt/largest-contentful-paint/contracted-image.html [ Failure ] -crbug.com/1050754 external/wpt/largest-contentful-paint/cross-origin-image.sub.html [ Failure ] -crbug.com/1050754 external/wpt/largest-contentful-paint/first-paint-equals-lcp-text.html [ Failure ] -crbug.com/1050754 external/wpt/largest-contentful-paint/image-TAO.sub.html [ Failure ] -crbug.com/1050754 external/wpt/largest-contentful-paint/image-inside-svg.html [ Failure ] -crbug.com/1050754 external/wpt/largest-contentful-paint/image-not-fully-visible.html [ Failure ] -crbug.com/1050754 external/wpt/largest-contentful-paint/image-src-change.html [ Failure ] -crbug.com/1050754 external/wpt/largest-contentful-paint/invisible-images-composited-2.html [ Failure Pass ] -crbug.com/1050754 external/wpt/largest-contentful-paint/larger-image.html [ Failure ] -crbug.com/1050754 external/wpt/largest-contentful-paint/loadTime-after-appendChild.html [ Failure ] -crbug.com/1050754 external/wpt/largest-contentful-paint/multiple-redirects-TAO.html [ Failure ] -crbug.com/1050754 external/wpt/largest-contentful-paint/observe-after-untrusted-scroll.html [ Failure ] -crbug.com/1050754 external/wpt/largest-contentful-paint/observe-image.html [ Failure ] -crbug.com/1050754 external/wpt/largest-contentful-paint/redirects-tao-star.html [ Failure ] -crbug.com/1050754 external/wpt/largest-contentful-paint/repeated-image.html [ Failure ] -crbug.com/1050754 external/wpt/largest-contentful-paint/video-poster.html [ Failure ] -crbug.com/1050754 external/wpt/layout-instability/absolute-child-shift-with-parent-contain.html [ Failure ] -crbug.com/1050754 external/wpt/layout-instability/absolute-child-shift-with-parent-negative-overflow.html [ Failure ] -crbug.com/1050754 external/wpt/layout-instability/absolute-child-shift-with-parent-overflow.html [ Failure ] -crbug.com/1050754 external/wpt/layout-instability/absolute-child-shift-with-parent-will-change.html [ Failure ] -crbug.com/1050754 external/wpt/layout-instability/body-display-change.html [ Failure ] -crbug.com/1050754 external/wpt/layout-instability/buffer-layout-shift.html [ Failure ] -crbug.com/1050754 external/wpt/layout-instability/buffered-flag.html [ Failure ] -crbug.com/1050754 external/wpt/layout-instability/child-shift-with-parent-overflow-hidden.html [ Failure ] -crbug.com/1050754 external/wpt/layout-instability/child-shift-with-parent-overflow-x-clip.html [ Failure ] -crbug.com/1050754 external/wpt/layout-instability/child-shift-with-parent.html [ Failure ] -crbug.com/1050754 external/wpt/layout-instability/clip-negative-bottom-margin.html [ Failure Pass ] -crbug.com/1050754 external/wpt/layout-instability/composited-element-movement.html [ Failure ] -crbug.com/1050754 external/wpt/layout-instability/input-timestamp.html [ Failure ] -crbug.com/1050754 external/wpt/layout-instability/move-transformed.html [ Failure ] -crbug.com/1050754 external/wpt/layout-instability/multi-clip-visual-rect.html [ Failure ] -crbug.com/1050754 external/wpt/layout-instability/partially-clipped-visual-rect.html [ Failure ] -crbug.com/1050754 external/wpt/layout-instability/pointerdown-becomes-scroll.html [ Failure ] -crbug.com/1050754 external/wpt/layout-instability/pointerdown-becomes-tap.html [ Failure Timeout ] -crbug.com/1050754 external/wpt/layout-instability/recent-input.html [ Failure ] -crbug.com/1050754 external/wpt/layout-instability/rtl-distance.html [ Failure ] -crbug.com/1050754 external/wpt/layout-instability/shift-into-viewport.html [ Failure ] -crbug.com/1050754 external/wpt/layout-instability/shift-while-scrolled.html [ Failure ] -crbug.com/1050754 external/wpt/layout-instability/simple-block-movement.html [ Failure ] -crbug.com/1050754 external/wpt/layout-instability/sources-enclosure.html [ Failure ] -crbug.com/1050754 external/wpt/layout-instability/sources-maximpact.html [ Failure ] -crbug.com/1050754 external/wpt/layout-instability/sources.html [ Failure ] -crbug.com/1050754 external/wpt/layout-instability/transform.html [ Failure ] -crbug.com/1050754 external/wpt/layout-instability/video.html [ Failure ] -crbug.com/1050754 external/wpt/lifecycle/child-display-none.tentative.html [ Timeout ] -crbug.com/1050754 external/wpt/lifecycle/child-out-of-viewport.tentative.html [ Timeout ] -crbug.com/1050754 external/wpt/lifecycle/freeze.html [ Failure ] -crbug.com/1050754 external/wpt/lifecycle/worker-dispay-none.tentative.html [ Timeout ] -crbug.com/1050754 external/wpt/longtask-timing/longtask-attributes.html [ Failure ] -crbug.com/1050754 external/wpt/longtask-timing/longtask-in-externalscript.html [ Failure ] -crbug.com/1050754 external/wpt/magnetometer/Magnetometer-disabled-by-feature-policy.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/magnetometer/Magnetometer-enabled-by-feature-policy-attribute-redirect-on-load.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/magnetometer/Magnetometer-enabled-by-feature-policy-attribute.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/magnetometer/Magnetometer-enabled-by-feature-policy.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/magnetometer/Magnetometer-enabled-on-self-origin-by-feature-policy.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/magnetometer/Magnetometer-iframe-access.https.html [ Failure ] -crbug.com/1050754 external/wpt/magnetometer/Magnetometer.https.html [ Failure ] -crbug.com/1050754 external/wpt/magnetometer/idlharness.https.window.html [ Failure Pass ] -crbug.com/1050754 external/wpt/mathml/presentation-markup/direction/direction.html [ Failure ] -crbug.com/1050754 external/wpt/mathml/presentation-markup/fractions/frac-1.html [ Failure ] -crbug.com/1050754 external/wpt/mathml/presentation-markup/fractions/frac-linethickness-002.html [ Failure Pass ] -crbug.com/1050754 external/wpt/mathml/presentation-markup/fractions/frac-parameters-1.html [ Failure ] -crbug.com/1050754 external/wpt/mathml/presentation-markup/fractions/frac-parameters-2.html [ Failure ] -crbug.com/1050754 external/wpt/mathml/presentation-markup/fractions/frac-parameters-3.html [ Failure ] -crbug.com/1050754 external/wpt/mathml/presentation-markup/mpadded/legacy-orthogonal-pseudo-units.html [ Failure ] -crbug.com/1050754 external/wpt/mathml/presentation-markup/mpadded/mpadded-001.html [ Failure ] -crbug.com/1050754 external/wpt/mathml/presentation-markup/mpadded/mpadded-002.html [ Failure ] -crbug.com/1050754 external/wpt/mathml/presentation-markup/mpadded/mpadded-003.html [ Failure ] -crbug.com/1050754 external/wpt/mathml/presentation-markup/mrow/inferred-mrow-baseline.html [ Failure ] -crbug.com/1050754 external/wpt/mathml/presentation-markup/mrow/inferred-mrow-stretchy.html [ Failure ] -crbug.com/1050754 external/wpt/mathml/presentation-markup/mrow/legacy-mrow-like-elements-001.html [ Failure ] -crbug.com/1050754 external/wpt/mathml/presentation-markup/mrow/legacy-mstyle-attributes.html [ Failure ] -crbug.com/1050754 external/wpt/mathml/presentation-markup/mrow/mrow-preferred-width.html [ Failure ] -crbug.com/1050754 external/wpt/mathml/presentation-markup/mrow/spacing.html [ Failure ] -crbug.com/1050754 external/wpt/mathml/presentation-markup/operators/embellished-operator-001.html [ Failure ] -crbug.com/1050754 external/wpt/mathml/presentation-markup/operators/embellished-operator-002.html [ Failure ] -crbug.com/1050754 external/wpt/mathml/presentation-markup/operators/largeop-hit-testing.html [ Failure ] -crbug.com/1050754 external/wpt/mathml/presentation-markup/operators/mo-axis-height-1.html [ Failure ] -crbug.com/1050754 external/wpt/mathml/presentation-markup/operators/operator-dictionary-largeop-001.html [ Failure ] -crbug.com/1050754 external/wpt/mathml/presentation-markup/operators/operator-dictionary-largeop-002.html [ Failure ] -crbug.com/1050754 external/wpt/mathml/presentation-markup/operators/operator-dictionary-largeop-003.html [ Failure ] -crbug.com/1050754 external/wpt/mathml/presentation-markup/operators/operator-dictionary-largeop-004.html [ Failure ] -crbug.com/1050754 external/wpt/mathml/presentation-markup/operators/operator-dictionary-largeop-005.html [ Failure ] -crbug.com/1050754 external/wpt/mathml/presentation-markup/operators/operator-dictionary-largeop-006.html [ Failure ] -crbug.com/1050754 external/wpt/mathml/presentation-markup/operators/operator-dictionary-movablelimits-001.html [ Failure ] -crbug.com/1050754 external/wpt/mathml/presentation-markup/operators/operator-dictionary-movablelimits-002.html [ Failure ] -crbug.com/1050754 external/wpt/mathml/presentation-markup/operators/operator-dictionary-movablelimits-003.html [ Failure ] -crbug.com/1050754 external/wpt/mathml/presentation-markup/operators/operator-dictionary-movablelimits-004.html [ Failure ] -crbug.com/1050754 external/wpt/mathml/presentation-markup/operators/operator-dictionary-movablelimits-005.html [ Failure ] -crbug.com/1050754 external/wpt/mathml/presentation-markup/operators/operator-dictionary-movablelimits-006.html [ Failure ] -crbug.com/1050754 external/wpt/mathml/presentation-markup/operators/operator-dictionary-spacing-001.html [ Failure ] -crbug.com/1050754 external/wpt/mathml/presentation-markup/operators/operator-dictionary-spacing-002.html [ Failure ] -crbug.com/1050754 external/wpt/mathml/presentation-markup/operators/operator-dictionary-spacing-003.html [ Failure ] -crbug.com/1050754 external/wpt/mathml/presentation-markup/operators/operator-dictionary-spacing-004.html [ Failure ] -crbug.com/1050754 external/wpt/mathml/presentation-markup/operators/operator-dictionary-spacing-005.html [ Failure ] -crbug.com/1050754 external/wpt/mathml/presentation-markup/operators/operator-dictionary-spacing-006.html [ Failure ] -crbug.com/1050754 external/wpt/mathml/presentation-markup/operators/operator-dictionary-stretchy-001.html [ Failure Pass ] -crbug.com/1050754 external/wpt/mathml/presentation-markup/operators/operator-dictionary-stretchy-002.html [ Failure Pass ] -crbug.com/1050754 external/wpt/mathml/presentation-markup/operators/operator-dictionary-stretchy-003.html [ Failure Pass ] -crbug.com/1050754 external/wpt/mathml/presentation-markup/operators/operator-dictionary-stretchy-004.html [ Failure Pass ] -crbug.com/1050754 external/wpt/mathml/presentation-markup/operators/operator-dictionary-stretchy-005.html [ Failure Pass ] -crbug.com/1050754 external/wpt/mathml/presentation-markup/operators/operator-dictionary-stretchy-006.html [ Failure Pass ] -crbug.com/1050754 external/wpt/mathml/presentation-markup/operators/operator-dictionary-symmetric-001.html [ Failure Pass ] -crbug.com/1050754 external/wpt/mathml/presentation-markup/operators/operator-dictionary-symmetric-002.html [ Failure Pass ] -crbug.com/1050754 external/wpt/mathml/presentation-markup/operators/operator-dictionary-symmetric-003.html [ Failure Pass ] -crbug.com/1050754 external/wpt/mathml/presentation-markup/operators/operator-dictionary-symmetric-004.html [ Failure Pass ] -crbug.com/1050754 external/wpt/mathml/presentation-markup/operators/operator-dictionary-symmetric-005.html [ Failure Pass ] -crbug.com/1050754 external/wpt/mathml/presentation-markup/operators/operator-dictionary-symmetric-006.html [ Failure Pass ] -crbug.com/1050754 external/wpt/mathml/presentation-markup/radicals/root-parameters-1.html [ Failure ] -crbug.com/1050754 external/wpt/mathml/presentation-markup/radicals/root-parameters-2.html [ Failure ] -crbug.com/1050754 external/wpt/mathml/presentation-markup/scripts/cramped-001.html [ Failure ] -crbug.com/1050754 external/wpt/mathml/presentation-markup/scripts/empty-underover.html [ Failure ] -crbug.com/1050754 external/wpt/mathml/presentation-markup/scripts/subsup-1.html [ Failure ] -crbug.com/1050754 external/wpt/mathml/presentation-markup/scripts/subsup-2.html [ Failure Pass ] -crbug.com/1050754 external/wpt/mathml/presentation-markup/scripts/subsup-3.html [ Failure Pass ] -crbug.com/1050754 external/wpt/mathml/presentation-markup/scripts/subsup-4.html [ Failure ] -crbug.com/1050754 external/wpt/mathml/presentation-markup/scripts/subsup-5.html [ Failure ] -crbug.com/1050754 external/wpt/mathml/presentation-markup/scripts/subsup-parameters-1.html [ Failure ] -crbug.com/1050754 external/wpt/mathml/presentation-markup/scripts/subsup-parameters-2.html [ Failure Pass ] -crbug.com/1050754 external/wpt/mathml/presentation-markup/scripts/underover-1.html [ Failure ] -crbug.com/1050754 external/wpt/mathml/presentation-markup/scripts/underover-parameters-1.html [ Failure ] -crbug.com/1050754 external/wpt/mathml/presentation-markup/scripts/underover-parameters-2.html [ Failure ] -crbug.com/1050754 external/wpt/mathml/presentation-markup/scripts/underover-parameters-3.html [ Failure ] -crbug.com/1050754 external/wpt/mathml/presentation-markup/spaces/space-1.html [ Failure ] -crbug.com/1050754 external/wpt/mathml/presentation-markup/spaces/space-like-001.html [ Failure ] -crbug.com/1050754 external/wpt/mathml/presentation-markup/spaces/space-like-002.html [ Failure ] -crbug.com/1050754 external/wpt/mathml/presentation-markup/spaces/space-like-003.html [ Failure ] -crbug.com/1050754 external/wpt/mathml/presentation-markup/spaces/space-like-004.html [ Failure ] -crbug.com/1050754 external/wpt/mathml/presentation-markup/tables/dynamic-table-001.html [ Failure ] -crbug.com/1050754 external/wpt/mathml/presentation-markup/tables/table-001.html [ Failure ] -crbug.com/1050754 external/wpt/mathml/presentation-markup/tables/table-002.html [ Failure ] -crbug.com/1050754 external/wpt/mathml/presentation-markup/tables/table-axis-height.html [ Failure ] -crbug.com/1050754 external/wpt/mathml/relations/css-styling/attribute-mapping-001.html [ Failure Pass ] -crbug.com/1050754 external/wpt/mathml/relations/css-styling/display-2.html [ Failure ] -crbug.com/1050754 external/wpt/mathml/relations/css-styling/display-contents.html [ Failure ] -crbug.com/1050754 external/wpt/mathml/relations/css-styling/displaystyle-1.html [ Failure ] -crbug.com/1050754 external/wpt/mathml/relations/css-styling/displaystyle-2.html [ Failure ] -crbug.com/1050754 external/wpt/mathml/relations/css-styling/displaystyle-3.html [ Failure ] -crbug.com/1050754 external/wpt/mathml/relations/css-styling/ignored-properties-001.html [ Failure ] -crbug.com/1050754 external/wpt/mathml/relations/css-styling/lengths-2.html [ Failure ] -crbug.com/1050754 external/wpt/mathml/relations/css-styling/multi-column-layout.html [ Failure ] -crbug.com/1050754 external/wpt/mathml/relations/css-styling/not-participating-to-parent-layout.html [ Failure ] -crbug.com/1050754 external/wpt/mathml/relations/css-styling/padding-border-margin/border-001.html [ Failure ] -crbug.com/1050754 external/wpt/mathml/relations/css-styling/padding-border-margin/border-002.html [ Failure Pass ] -crbug.com/1050754 external/wpt/mathml/relations/css-styling/padding-border-margin/margin-001.html [ Failure ] -crbug.com/1050754 external/wpt/mathml/relations/css-styling/padding-border-margin/margin-002.html [ Failure ] -crbug.com/1050754 external/wpt/mathml/relations/css-styling/padding-border-margin/margin-003.html [ Failure ] -crbug.com/1050754 external/wpt/mathml/relations/css-styling/padding-border-margin/padding-001.html [ Failure ] -crbug.com/1050754 external/wpt/mathml/relations/css-styling/padding-border-margin/padding-002.html [ Failure ] -crbug.com/1050754 external/wpt/mathml/relations/css-styling/scriptlevel-001.html [ Failure ] -crbug.com/1050754 external/wpt/mathml/relations/css-styling/width-height-001.html [ Failure ] -crbug.com/1050754 external/wpt/mathml/relations/css-styling/writing-mode/writing-mode-001.html [ Failure ] -crbug.com/1050754 external/wpt/mathml/relations/css-styling/writing-mode/writing-mode-002.html [ Failure ] -crbug.com/1050754 external/wpt/mathml/relations/html5-tree/clipboard-event-handlers.tentative.html [ Failure ] -crbug.com/1050754 external/wpt/mathml/relations/html5-tree/content-editable.html [ Failure ] -crbug.com/1050754 external/wpt/mathml/relations/html5-tree/css-inline-style-interface.tentative.html [ Failure ] -crbug.com/1050754 external/wpt/mathml/relations/html5-tree/display-1.html [ Failure Pass ] -crbug.com/1050754 external/wpt/mathml/relations/html5-tree/dynamic-childlist-001.html [ Failure ] -crbug.com/1050754 external/wpt/mathml/relations/html5-tree/dynamic-childlist-002.html [ Failure ] -crbug.com/1050754 external/wpt/mathml/relations/html5-tree/href-click-3.html [ Failure Pass ] -crbug.com/1050754 external/wpt/mathml/relations/html5-tree/html-or-foreign-element-interfaces.tentative.html [ Failure ] -crbug.com/1050754 external/wpt/mathml/relations/html5-tree/integration-point-4.html [ Failure ] -crbug.com/1050754 external/wpt/mathml/relations/html5-tree/integration-point-5.html [ Failure ] -crbug.com/1050754 external/wpt/mathml/relations/html5-tree/math-global-event-handlers.tentative.html [ Failure Pass ] -crbug.com/1050754 external/wpt/mathml/relations/html5-tree/tabindex-001.html [ Failure Pass ] -crbug.com/1050754 external/wpt/mathml/relations/html5-tree/tabindex-002.html [ Failure ] -crbug.com/1050754 external/wpt/measure-memory/detached.https.window.html [ Failure Timeout ] -crbug.com/1050754 external/wpt/measure-memory/iframe.cross-origin.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/measure-memory/iframe.cross-site.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/measure-memory/iframe.same-origin.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/measure-memory/main-frame-and-worker.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/measure-memory/main-frame.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/measure-memory/redirect.client.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/measure-memory/redirect.server.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/measure-memory/window-open.cross-origin.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/measure-memory/window-open.cross-site.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/measure-memory/window-open.mix.https.window.html [ Failure Timeout ] -crbug.com/1050754 external/wpt/measure-memory/window-open.same-origin.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/measure-memory/randomized-breakdown.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/media-capabilities/decodingInfo.any.html [ Failure ] -crbug.com/1050754 external/wpt/media-capabilities/decodingInfo.any.worker.html [ Failure ] -crbug.com/1050754 external/wpt/media-capabilities/encodingInfo.html [ Failure ] -crbug.com/1050754 external/wpt/media-capabilities/idlharness.any.html [ Failure ] -crbug.com/1050754 external/wpt/media-capabilities/idlharness.any.worker.html [ Failure ] -crbug.com/1050754 external/wpt/media-source/SourceBuffer-abort-readyState.html [ Failure Pass ] -crbug.com/1050754 external/wpt/media-source/SourceBuffer-abort-removed.html [ Failure Pass ] -crbug.com/1050754 external/wpt/media-source/SourceBuffer-abort-updating.html [ Failure Pass ] -crbug.com/1050754 external/wpt/media-source/SourceBuffer-abort.html [ Failure Pass ] -crbug.com/1050754 external/wpt/media-source/URL-createObjectURL-revoke.html [ Failure Pass ] -crbug.com/1050754 external/wpt/media-source/dedicated-worker/mediasource-worker-objecturl.html [ Failure ] -crbug.com/1050754 external/wpt/media-source/dedicated-worker/mediasource-worker-play-terminate-worker.html [ Failure ] -crbug.com/1050754 external/wpt/media-source/dedicated-worker/mediasource-worker-play.html [ Failure ] -crbug.com/1050754 external/wpt/media-source/idlharness.window.html [ Failure Pass ] -crbug.com/1050754 external/wpt/media-source/mediasource-activesourcebuffers.html [ Failure ] -crbug.com/1050754 external/wpt/media-source/mediasource-append-buffer.html [ Failure Pass ] -crbug.com/1050754 external/wpt/media-source/mediasource-avtracks.html [ Failure ] -crbug.com/1050754 external/wpt/media-source/mediasource-buffered.html [ Failure Pass ] -crbug.com/1050754 external/wpt/media-source/mediasource-changetype-play-implicit.html [ Failure ] -crbug.com/1050754 external/wpt/media-source/mediasource-changetype-play-negative.html [ Failure ] -crbug.com/1050754 external/wpt/media-source/mediasource-changetype-play-without-codecs-parameter.html [ Failure ] -crbug.com/1050754 external/wpt/media-source/mediasource-changetype-play.html [ Failure ] -crbug.com/1050754 external/wpt/media-source/mediasource-config-change-mp4-a-bitrate.html [ Failure ] -crbug.com/1050754 external/wpt/media-source/mediasource-config-change-mp4-av-audio-bitrate.html [ Failure ] -crbug.com/1050754 external/wpt/media-source/mediasource-config-change-mp4-av-framesize.html [ Failure ] -crbug.com/1050754 external/wpt/media-source/mediasource-config-change-mp4-av-video-bitrate.html [ Failure ] -crbug.com/1050754 external/wpt/media-source/mediasource-config-change-mp4-v-bitrate.html [ Failure ] -crbug.com/1050754 external/wpt/media-source/mediasource-config-change-mp4-v-framerate.html [ Failure ] -crbug.com/1050754 external/wpt/media-source/mediasource-config-change-mp4-v-framesize.html [ Failure ] -crbug.com/1050754 external/wpt/media-source/mediasource-config-change-webm-a-bitrate.html [ Failure ] -crbug.com/1050754 external/wpt/media-source/mediasource-config-change-webm-av-audio-bitrate.html [ Failure ] -crbug.com/1050754 external/wpt/media-source/mediasource-config-change-webm-av-framesize.html [ Failure ] -crbug.com/1050754 external/wpt/media-source/mediasource-config-change-webm-av-video-bitrate.html [ Failure ] -crbug.com/1050754 external/wpt/media-source/mediasource-config-change-webm-v-bitrate.html [ Failure ] -crbug.com/1050754 external/wpt/media-source/mediasource-config-change-webm-v-framerate.html [ Failure ] -crbug.com/1050754 external/wpt/media-source/mediasource-config-change-webm-v-framesize.html [ Failure ] -crbug.com/1050754 external/wpt/media-source/mediasource-correct-frames-after-reappend.html [ Failure ] -crbug.com/1050754 external/wpt/media-source/mediasource-correct-frames.html [ Failure ] -crbug.com/1050754 external/wpt/media-source/mediasource-duration.html [ Failure ] -crbug.com/1050754 external/wpt/media-source/mediasource-endofstream.html [ Failure Pass ] -crbug.com/1050754 external/wpt/media-source/mediasource-getvideoplaybackquality.html [ Failure ] -crbug.com/1050754 external/wpt/media-source/mediasource-play-then-seek-back.html [ Failure ] -crbug.com/1050754 external/wpt/media-source/mediasource-play.html [ Failure ] -crbug.com/1050754 external/wpt/media-source/mediasource-redundant-seek.html [ Failure ] -crbug.com/1050754 external/wpt/media-source/mediasource-remove.html [ Failure Pass ] -crbug.com/1050754 external/wpt/media-source/mediasource-replay.html [ Failure ] -crbug.com/1050754 external/wpt/media-source/mediasource-seek-beyond-duration.html [ Failure ] -crbug.com/1050754 external/wpt/media-source/mediasource-seek-during-pending-seek.html [ Failure ] -crbug.com/1050754 external/wpt/media-source/mediasource-sequencemode-append-buffer.html [ Failure Pass ] -crbug.com/1050754 external/wpt/media-source/mediasource-sourcebuffer-trackdefaults.html [ Failure ] -crbug.com/1050754 external/wpt/media-source/mediasource-trackdefault.html [ Failure ] -crbug.com/1050754 external/wpt/media-source/mediasource-trackdefaultlist.html [ Failure ] -crbug.com/1050754 external/wpt/mediacapture-fromelement/HTMLCanvasElement-getImageData-noframe.html [ Failure ] -crbug.com/1050754 external/wpt/mediacapture-fromelement/capture.html [ Failure ] -crbug.com/1050754 external/wpt/mediacapture-fromelement/ended.html [ Failure ] -crbug.com/1050754 external/wpt/mediacapture-fromelement/historical.html [ Failure Pass ] -crbug.com/1050754 external/wpt/mediacapture-fromelement/idlharness.window.html [ Failure Pass ] -crbug.com/1050754 external/wpt/mediacapture-image/ImageCapture-MediaTrackSupportedConstraints.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/mediacapture-image/MediaStreamTrack-applyConstraints-fast.html [ Failure Pass ] -crbug.com/1050754 external/wpt/mediacapture-image/MediaStreamTrack-applyConstraints-getSettings.https.html [ Failure ] -crbug.com/1050754 external/wpt/mediacapture-image/MediaStreamTrack-applyConstraints-reject.https.html [ Failure ] -crbug.com/1050754 external/wpt/mediacapture-image/MediaStreamTrack-applyConstraints.https.html [ Failure ] -crbug.com/1050754 external/wpt/mediacapture-image/MediaStreamTrack-clone.https.html [ Failure ] -crbug.com/1050754 external/wpt/mediacapture-image/MediaStreamTrack-getCapabilities.https.html [ Failure ] -crbug.com/1050754 external/wpt/mediacapture-image/MediaStreamTrack-getConstraints.https.html [ Failure ] -crbug.com/1050754 external/wpt/mediacapture-image/MediaStreamTrack-getSettings.https.html [ Failure ] -crbug.com/1050754 external/wpt/mediacapture-image/getPhotoCapabilities.html [ Failure ] -crbug.com/1050754 external/wpt/mediacapture-image/getPhotoSettings.html [ Failure ] -crbug.com/1050754 external/wpt/mediacapture-image/setOptions-reject.html [ Failure ] -crbug.com/1050754 external/wpt/mediacapture-image/takePhoto-with-PhotoSettings.html [ Failure ] -crbug.com/1050754 external/wpt/mediacapture-image/takePhoto.html [ Failure ] -crbug.com/1050754 external/wpt/mediacapture-record/MediaRecorder-bitrate.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/mediacapture-record/MediaRecorder-creation.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/mediacapture-record/MediaRecorder-error.html [ Failure Pass ] -crbug.com/1050754 external/wpt/mediacapture-record/MediaRecorder-events-and-exceptions.html [ Failure Pass ] -crbug.com/1050754 external/wpt/mediacapture-record/MediaRecorder-pause-resume.html [ Timeout ] -crbug.com/1050754 external/wpt/mediacapture-record/MediaRecorder-peerconnection.https.html [ Timeout ] -crbug.com/1050754 external/wpt/mediacapture-record/idlharness.window.html [ Failure Pass ] -crbug.com/1050754 external/wpt/mediacapture-record/passthrough/MediaRecorder-passthrough.https.html [ Timeout ] -crbug.com/1050754 external/wpt/mediacapture-streams/GUM-deny.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/mediacapture-streams/GUM-required-constraint-with-ideal-value.https.html [ Failure ] -crbug.com/1050754 external/wpt/mediacapture-streams/MediaDevices-enumerateDevices-not-allowed-camera.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/mediacapture-streams/MediaDevices-enumerateDevices-not-allowed-mic.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/mediacapture-streams/MediaStream-MediaElement-firstframe.https.html [ Failure ] -crbug.com/1050754 external/wpt/mediacapture-streams/MediaStream-MediaElement-srcObject.https.html [ Failure ] -crbug.com/1050754 external/wpt/mediacapture-streams/MediaStream-default-feature-policy.https.html [ Failure ] -crbug.com/1050754 external/wpt/mediacapture-streams/MediaStream-removetrack.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/mediacapture-streams/MediaStreamTrack-MediaElement-disabled-video-is-black.https.html [ Failure ] -crbug.com/1050754 external/wpt/mediacapture-streams/historical.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/mediacapture-streams/idlharness.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/mediasession/idlharness.window.html [ Failure ] -crbug.com/1050754 external/wpt/mediasession/mediametadata.html [ Failure Pass ] -crbug.com/1050754 external/wpt/mediasession/playbackstate.html [ Failure ] -crbug.com/1050754 external/wpt/mediasession/positionstate.html [ Failure Pass ] -crbug.com/1050754 external/wpt/mediasession/setactionhandler.html [ Failure ] -crbug.com/1050754 external/wpt/merchant-validation/complete-method.tentative.https.html [ Failure ] -crbug.com/1050754 external/wpt/merchant-validation/constructor.tentative.https.html [ Failure ] -crbug.com/1050754 external/wpt/merchant-validation/constructor.tentative.http.html [ Failure ] -crbug.com/1050754 external/wpt/merchant-validation/onmerchantvalidation-attribute.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/mimesniff/mime-types/charset-parameter.window.html [ Failure Pass ] -crbug.com/1050754 external/wpt/mimesniff/mime-types/parsing.any.html [ Failure Pass ] -crbug.com/1050754 external/wpt/mimesniff/mime-types/parsing.any.worker.html [ Failure Pass ] -crbug.com/1050754 external/wpt/mixed-content/gen/sharedworker-classic-data.http-rp/opt-in/fetch.https.html [ Failure ] -crbug.com/1050754 external/wpt/mixed-content/gen/sharedworker-classic-data.http-rp/opt-in/websocket.https.html [ Failure ] -crbug.com/1050754 external/wpt/mixed-content/gen/sharedworker-classic-data.http-rp/opt-in/xhr.https.html [ Failure ] -crbug.com/1050754 external/wpt/mixed-content/gen/sharedworker-classic-data.meta/opt-in/fetch.https.html [ Failure ] -crbug.com/1050754 external/wpt/mixed-content/gen/sharedworker-classic-data.meta/opt-in/websocket.https.html [ Failure ] -crbug.com/1050754 external/wpt/mixed-content/gen/sharedworker-classic-data.meta/opt-in/xhr.https.html [ Failure ] -crbug.com/1050754 external/wpt/mixed-content/gen/sharedworker-classic-data.meta/unset/fetch.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/mixed-content/gen/sharedworker-classic-data.meta/unset/websocket.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/mixed-content/gen/sharedworker-classic-data.meta/unset/xhr.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/mixed-content/gen/sharedworker-classic.http-rp/opt-in/fetch.https.html [ Failure ] -crbug.com/1050754 external/wpt/mixed-content/gen/sharedworker-classic.http-rp/opt-in/websocket.https.html [ Failure ] -crbug.com/1050754 external/wpt/mixed-content/gen/sharedworker-classic.http-rp/opt-in/xhr.https.html [ Failure ] -crbug.com/1050754 external/wpt/mixed-content/gen/sharedworker-classic.http-rp/unset/fetch.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/mixed-content/gen/sharedworker-classic.http-rp/unset/websocket.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/mixed-content/gen/sharedworker-classic.http-rp/unset/xhr.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/mixed-content/gen/sharedworker-module-data.http-rp/opt-in/fetch.https.html [ Failure ] -crbug.com/1050754 external/wpt/mixed-content/gen/sharedworker-module-data.http-rp/opt-in/websocket.https.html [ Failure ] -crbug.com/1050754 external/wpt/mixed-content/gen/sharedworker-module-data.http-rp/opt-in/xhr.https.html [ Failure ] -crbug.com/1050754 external/wpt/mixed-content/gen/sharedworker-module-data.meta/opt-in/fetch.https.html [ Failure ] -crbug.com/1050754 external/wpt/mixed-content/gen/sharedworker-module-data.meta/opt-in/websocket.https.html [ Failure ] -crbug.com/1050754 external/wpt/mixed-content/gen/sharedworker-module-data.meta/opt-in/xhr.https.html [ Failure ] -crbug.com/1050754 external/wpt/mixed-content/gen/sharedworker-module-data.meta/unset/fetch.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/mixed-content/gen/sharedworker-module-data.meta/unset/websocket.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/mixed-content/gen/sharedworker-module-data.meta/unset/xhr.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/mixed-content/gen/sharedworker-module.http-rp/opt-in/fetch.https.html [ Failure ] -crbug.com/1050754 external/wpt/mixed-content/gen/sharedworker-module.http-rp/opt-in/websocket.https.html [ Failure ] -crbug.com/1050754 external/wpt/mixed-content/gen/sharedworker-module.http-rp/opt-in/xhr.https.html [ Failure ] -crbug.com/1050754 external/wpt/mixed-content/gen/sharedworker-module.http-rp/unset/fetch.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/mixed-content/gen/sharedworker-module.http-rp/unset/websocket.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/mixed-content/gen/sharedworker-module.http-rp/unset/xhr.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/mixed-content/gen/top.http-rp/opt-in/object-tag.https.html [ Timeout ] -crbug.com/1050754 external/wpt/mixed-content/gen/top.http-rp/opt-in/sharedworker-classic.https.html [ Failure ] -crbug.com/1050754 external/wpt/mixed-content/gen/top.http-rp/opt-in/sharedworker-import-data.https.html [ Failure ] -crbug.com/1050754 external/wpt/mixed-content/gen/top.http-rp/opt-in/sharedworker-import.https.html [ Failure ] -crbug.com/1050754 external/wpt/mixed-content/gen/top.http-rp/opt-in/sharedworker-module.https.html [ Failure ] -crbug.com/1050754 external/wpt/mixed-content/gen/top.http-rp/opt-in/video-tag.https.html [ Timeout ] -crbug.com/1050754 external/wpt/mixed-content/gen/top.http-rp/opt-in/worklet-animation-import-data.https.html [ Failure ] -crbug.com/1050754 external/wpt/mixed-content/gen/top.http-rp/opt-in/worklet-animation.https.html [ Failure ] -crbug.com/1050754 external/wpt/mixed-content/gen/top.http-rp/opt-in/worklet-layout-import-data.https.html [ Failure ] -crbug.com/1050754 external/wpt/mixed-content/gen/top.http-rp/opt-in/worklet-layout.https.html [ Failure ] -crbug.com/1050754 external/wpt/mixed-content/gen/top.meta/opt-in/sharedworker-classic.https.html [ Failure ] -crbug.com/1050754 external/wpt/mixed-content/gen/top.meta/opt-in/sharedworker-import-data.https.html [ Failure ] -crbug.com/1050754 external/wpt/mixed-content/gen/top.meta/opt-in/sharedworker-import.https.html [ Failure ] -crbug.com/1050754 external/wpt/mixed-content/gen/top.meta/opt-in/sharedworker-module.https.html [ Failure ] -crbug.com/1050754 external/wpt/mixed-content/gen/top.meta/opt-in/video-tag.https.html [ Timeout ] -crbug.com/1050754 external/wpt/mixed-content/gen/top.meta/opt-in/worklet-animation-import-data.https.html [ Failure ] -crbug.com/1050754 external/wpt/mixed-content/gen/top.meta/opt-in/worklet-animation.https.html [ Failure ] -crbug.com/1050754 external/wpt/mixed-content/gen/top.meta/opt-in/worklet-layout-import-data.https.html [ Failure ] -crbug.com/1050754 external/wpt/mixed-content/gen/top.meta/opt-in/worklet-layout.https.html [ Failure ] -crbug.com/1050754 external/wpt/mixed-content/gen/top.meta/unset/audio-tag.https.html [ Failure ] -crbug.com/1050754 external/wpt/mixed-content/gen/top.meta/unset/img-tag.https.html [ Failure ] -crbug.com/1050754 external/wpt/mixed-content/gen/top.meta/unset/sharedworker-classic.https.html [ Failure ] -crbug.com/1050754 external/wpt/mixed-content/gen/top.meta/unset/sharedworker-import-data.https.html [ Failure ] -crbug.com/1050754 external/wpt/mixed-content/gen/top.meta/unset/sharedworker-import.https.html [ Failure ] -crbug.com/1050754 external/wpt/mixed-content/gen/top.meta/unset/sharedworker-module.https.html [ Failure ] -crbug.com/1050754 external/wpt/mixed-content/gen/top.meta/unset/video-tag.https.html [ Timeout ] -crbug.com/1050754 external/wpt/mixed-content/gen/top.meta/unset/worklet-animation-import-data.https.html [ Failure ] -crbug.com/1050754 external/wpt/mixed-content/gen/top.meta/unset/worklet-animation.https.html [ Failure ] -crbug.com/1050754 external/wpt/mixed-content/gen/top.meta/unset/worklet-layout-import-data.https.html [ Failure ] -crbug.com/1050754 external/wpt/mixed-content/gen/top.meta/unset/worklet-layout.https.html [ Failure ] -crbug.com/1050754 external/wpt/mixed-content/imageset.https.sub.html [ Failure ] -crbug.com/1050754 external/wpt/mixed-content/tentative/autoupgrades/audio-upgrade.https.sub.html [ Failure ] -crbug.com/1050754 external/wpt/mixed-content/tentative/autoupgrades/image-upgrade.https.sub.html [ Failure ] -crbug.com/1050754 external/wpt/mixed-content/tentative/autoupgrades/video-upgrade.https.sub.html [ Failure ] -crbug.com/1050754 external/wpt/mst-content-hint/idlharness.window.html [ Failure Pass ] -crbug.com/1050754 external/wpt/file-system-access/opaque-origin.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/file-system-access/sandboxed_FileSystemBaseHandle-IndexedDB.https.any.html [ Failure ] -crbug.com/1050754 external/wpt/file-system-access/sandboxed_FileSystemBaseHandle-IndexedDB.https.any.worker.html [ Failure ] -crbug.com/1050754 external/wpt/file-system-access/sandboxed_FileSystemBaseHandle-isSameEntry.https.any.html [ Failure ] -crbug.com/1050754 external/wpt/file-system-access/sandboxed_FileSystemBaseHandle-isSameEntry.https.any.worker.html [ Failure ] -crbug.com/1050754 external/wpt/file-system-access/sandboxed_FileSystemBaseHandle-postMessage-BroadcastChannel.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/file-system-access/sandboxed_FileSystemBaseHandle-postMessage-Error.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/file-system-access/sandboxed_FileSystemBaseHandle-postMessage-MessagePort-frames.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/file-system-access/sandboxed_FileSystemBaseHandle-postMessage-MessagePort-windows.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/file-system-access/sandboxed_FileSystemBaseHandle-postMessage-MessagePort-workers.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/file-system-access/sandboxed_FileSystemBaseHandle-postMessage-frames.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/file-system-access/sandboxed_FileSystemBaseHandle-postMessage-windows.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/file-system-access/sandboxed_FileSystemBaseHandle-postMessage-workers.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/file-system-access/sandboxed_FileSystemDirectoryHandle-getDirectoryHandle.https.any.html [ Failure ] -crbug.com/1050754 external/wpt/file-system-access/sandboxed_FileSystemDirectoryHandle-getDirectoryHandle.https.any.worker.html [ Failure ] -crbug.com/1050754 external/wpt/file-system-access/sandboxed_FileSystemDirectoryHandle-getFileHandle.https.any.html [ Failure ] -crbug.com/1050754 external/wpt/file-system-access/sandboxed_FileSystemDirectoryHandle-getFileHandle.https.any.worker.html [ Failure ] -crbug.com/1050754 external/wpt/file-system-access/sandboxed_FileSystemDirectoryHandle-iteration.https.any.html [ Failure ] -crbug.com/1050754 external/wpt/file-system-access/sandboxed_FileSystemDirectoryHandle-iteration.https.any.worker.html [ Failure ] -crbug.com/1050754 external/wpt/file-system-access/sandboxed_FileSystemDirectoryHandle-removeEntry.https.any.html [ Failure ] -crbug.com/1050754 external/wpt/file-system-access/sandboxed_FileSystemDirectoryHandle-removeEntry.https.any.worker.html [ Failure ] -crbug.com/1050754 external/wpt/file-system-access/sandboxed_FileSystemDirectoryHandle-resolve.https.any.html [ Failure ] -crbug.com/1050754 external/wpt/file-system-access/sandboxed_FileSystemDirectoryHandle-resolve.https.any.worker.html [ Failure ] -crbug.com/1050754 external/wpt/file-system-access/sandboxed_FileSystemFileHandle-getFile.https.any.html [ Failure ] -crbug.com/1050754 external/wpt/file-system-access/sandboxed_FileSystemFileHandle-getFile.https.any.worker.html [ Failure ] -crbug.com/1050754 external/wpt/file-system-access/sandboxed_FileSystemWritableFileStream-piped.https.any.html [ Failure ] -crbug.com/1050754 external/wpt/file-system-access/sandboxed_FileSystemWritableFileStream-piped.https.any.worker.html [ Failure ] -crbug.com/1050754 external/wpt/file-system-access/sandboxed_FileSystemWritableFileStream-write.https.any.html [ Failure ] -crbug.com/1050754 external/wpt/file-system-access/sandboxed_FileSystemWritableFileStream-write.https.any.worker.html [ Failure ] -crbug.com/1050754 external/wpt/file-system-access/sandboxed_FileSystemWritableFileStream.https.any.html [ Failure ] -crbug.com/1050754 external/wpt/file-system-access/sandboxed_FileSystemWritableFileStream.https.any.worker.html [ Failure ] -crbug.com/1050754 external/wpt/file-system-access/showPicker-errors.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/native-io/close_async.tentative.https.any.html [ Failure ] -crbug.com/1050754 external/wpt/native-io/close_async.tentative.https.any.serviceworker.html [ Failure ] -crbug.com/1050754 external/wpt/native-io/close_async.tentative.https.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/native-io/close_async.tentative.https.any.worker.html [ Failure ] -crbug.com/1050754 external/wpt/native-io/close_sync.tentative.https.any.worker.html [ Failure ] -crbug.com/1050754 external/wpt/native-io/concurrent_io/concurrent_io_flush_async.tentative.https.any.html [ Failure ] -crbug.com/1050754 external/wpt/native-io/concurrent_io/concurrent_io_flush_async.tentative.https.any.serviceworker.html [ Failure ] -crbug.com/1050754 external/wpt/native-io/concurrent_io/concurrent_io_flush_async.tentative.https.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/native-io/concurrent_io/concurrent_io_flush_async.tentative.https.any.worker.html [ Failure ] -crbug.com/1050754 external/wpt/native-io/concurrent_io/concurrent_io_getLength_async.tentative.https.any.html [ Failure ] -crbug.com/1050754 external/wpt/native-io/concurrent_io/concurrent_io_getLength_async.tentative.https.any.serviceworker.html [ Failure ] -crbug.com/1050754 external/wpt/native-io/concurrent_io/concurrent_io_getLength_async.tentative.https.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/native-io/concurrent_io/concurrent_io_getLength_async.tentative.https.any.worker.html [ Failure ] -crbug.com/1050754 external/wpt/native-io/concurrent_io/concurrent_io_read_async.tentative.https.any.html [ Failure ] -crbug.com/1050754 external/wpt/native-io/concurrent_io/concurrent_io_read_async.tentative.https.any.serviceworker.html [ Failure ] -crbug.com/1050754 external/wpt/native-io/concurrent_io/concurrent_io_read_async.tentative.https.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/native-io/concurrent_io/concurrent_io_read_async.tentative.https.any.worker.html [ Failure ] -crbug.com/1050754 external/wpt/native-io/concurrent_io/concurrent_io_setLength_async.tentative.https.any.html [ Failure ] -crbug.com/1050754 external/wpt/native-io/concurrent_io/concurrent_io_setLength_async.tentative.https.any.serviceworker.html [ Failure ] -crbug.com/1050754 external/wpt/native-io/concurrent_io/concurrent_io_setLength_async.tentative.https.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/native-io/concurrent_io/concurrent_io_setLength_async.tentative.https.any.worker.html [ Failure ] -crbug.com/1050754 external/wpt/native-io/concurrent_io/concurrent_io_write_async.tentative.https.any.html [ Failure ] -crbug.com/1050754 external/wpt/native-io/concurrent_io/concurrent_io_write_async.tentative.https.any.serviceworker.html [ Failure ] -crbug.com/1050754 external/wpt/native-io/concurrent_io/concurrent_io_write_async.tentative.https.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/native-io/concurrent_io/concurrent_io_write_async.tentative.https.any.worker.html [ Failure ] -crbug.com/1050754 external/wpt/native-io/delete_async_basic.tentative.https.any.html [ Failure ] -crbug.com/1050754 external/wpt/native-io/delete_async_basic.tentative.https.any.serviceworker.html [ Failure ] -crbug.com/1050754 external/wpt/native-io/delete_async_basic.tentative.https.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/native-io/delete_async_basic.tentative.https.any.worker.html [ Failure ] -crbug.com/1050754 external/wpt/native-io/delete_sync_basic.tentative.https.any.worker.html [ Failure ] -crbug.com/1050754 external/wpt/native-io/flush_async_basic.tentative.https.any.html [ Failure ] -crbug.com/1050754 external/wpt/native-io/flush_async_basic.tentative.https.any.serviceworker.html [ Failure ] -crbug.com/1050754 external/wpt/native-io/flush_async_basic.tentative.https.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/native-io/flush_async_basic.tentative.https.any.worker.html [ Failure ] -crbug.com/1050754 external/wpt/native-io/flush_sync_basic.tentative.https.any.worker.html [ Failure ] -crbug.com/1050754 external/wpt/native-io/getLength_setLength_async_basic.tentative.https.any.html [ Failure ] -crbug.com/1050754 external/wpt/native-io/getLength_setLength_async_basic.tentative.https.any.serviceworker.html [ Failure ] -crbug.com/1050754 external/wpt/native-io/getLength_setLength_async_basic.tentative.https.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/native-io/getLength_setLength_async_basic.tentative.https.any.worker.html [ Failure ] -crbug.com/1050754 external/wpt/native-io/getLength_setLength_sync_basic.tentative.https.any.worker.html [ Failure ] -crbug.com/1050754 external/wpt/native-io/open_getAll_async_basic.tentative.https.any.html [ Failure ] -crbug.com/1050754 external/wpt/native-io/open_getAll_async_basic.tentative.https.any.serviceworker.html [ Failure ] -crbug.com/1050754 external/wpt/native-io/open_getAll_async_basic.tentative.https.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/native-io/open_getAll_async_basic.tentative.https.any.worker.html [ Failure ] -crbug.com/1050754 external/wpt/native-io/open_getAll_sync_basic.tentative.https.any.worker.html [ Failure ] -crbug.com/1050754 external/wpt/native-io/read_write_async_basic.tentative.https.any.html [ Failure ] -crbug.com/1050754 external/wpt/native-io/read_write_async_basic.tentative.https.any.serviceworker.html [ Failure ] -crbug.com/1050754 external/wpt/native-io/read_write_async_basic.tentative.https.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/native-io/read_write_async_basic.tentative.https.any.worker.html [ Failure ] -crbug.com/1050754 external/wpt/native-io/read_write_sync_basic.tentative.https.any.worker.html [ Failure ] -crbug.com/1050754 external/wpt/native-io/rename_async_basic.tentative.https.any.html [ Failure ] -crbug.com/1050754 external/wpt/native-io/rename_async_basic.tentative.https.any.serviceworker.html [ Failure ] -crbug.com/1050754 external/wpt/native-io/rename_async_basic.tentative.https.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/native-io/rename_async_basic.tentative.https.any.worker.html [ Failure ] -crbug.com/1050754 external/wpt/native-io/rename_async_failure_handling.tentative.https.any.html [ Failure ] -crbug.com/1050754 external/wpt/native-io/rename_async_failure_handling.tentative.https.any.serviceworker.html [ Failure ] -crbug.com/1050754 external/wpt/native-io/rename_async_failure_handling.tentative.https.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/native-io/rename_async_failure_handling.tentative.https.any.worker.html [ Failure ] -crbug.com/1050754 external/wpt/native-io/rename_sync_basic.tentative.https.any.worker.html [ Failure ] -crbug.com/1050754 external/wpt/native-io/rename_sync_failure_handling.tentative.https.any.worker.html [ Failure ] -crbug.com/1050754 external/wpt/native-io/setLength_bounds_async.tentative.https.any.html [ Failure ] -crbug.com/1050754 external/wpt/native-io/setLength_bounds_async.tentative.https.any.serviceworker.html [ Failure ] -crbug.com/1050754 external/wpt/native-io/setLength_bounds_async.tentative.https.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/native-io/setLength_bounds_async.tentative.https.any.worker.html [ Failure ] -crbug.com/1050754 external/wpt/native-io/setLength_bounds_sync.tentative.https.any.worker.html [ Failure ] -crbug.com/1050754 external/wpt/native-io/write_getLength_async_basic.tentative.https.any.html [ Failure ] -crbug.com/1050754 external/wpt/native-io/write_getLength_async_basic.tentative.https.any.serviceworker.html [ Failure ] -crbug.com/1050754 external/wpt/native-io/write_getLength_async_basic.tentative.https.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/native-io/write_getLength_async_basic.tentative.https.any.worker.html [ Failure ] -crbug.com/1050754 external/wpt/native-io/write_getLength_sync_basic.tentative.https.any.worker.html [ Failure ] -crbug.com/1050754 external/wpt/navigation-timing/test_performance_attributes.sub.html [ Failure Pass ] -crbug.com/1050754 external/wpt/network-error-logging/sends-report-on-404.https.html [ Failure ] -crbug.com/1050754 external/wpt/network-error-logging/sends-report-on-cache-validation.https.html [ Failure ] -crbug.com/1050754 external/wpt/network-error-logging/sends-report-on-redirect.https.html [ Failure ] -crbug.com/1050754 external/wpt/network-error-logging/sends-report-on-subdomain-dns-failure.https.html [ Failure ] -crbug.com/1050754 external/wpt/network-error-logging/sends-report-on-success-with-subdomain-policy.https.html [ Failure ] -crbug.com/1050754 external/wpt/network-error-logging/sends-report-on-success.https.html [ Failure ] -crbug.com/1050754 external/wpt/notifications/constructor-basic.html [ Failure Pass ] -crbug.com/1050754 external/wpt/notifications/constructor-invalid.html [ Failure Pass ] -crbug.com/1050754 external/wpt/notifications/event-onclose.html [ Failure Pass ] -crbug.com/1050754 external/wpt/notifications/event-onshow.html [ Failure Pass ] -crbug.com/1050754 external/wpt/notifications/idlharness.https.any.html [ Failure ] -crbug.com/1050754 external/wpt/notifications/idlharness.https.any.serviceworker.html [ Failure ] -crbug.com/1050754 external/wpt/notifications/idlharness.https.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/notifications/idlharness.https.any.worker.html [ Failure ] -crbug.com/1050754 external/wpt/notifications/instance.html [ Failure ] -crbug.com/1050754 external/wpt/notifications/lang.html [ Failure Pass ] -crbug.com/1050754 external/wpt/notifications/permission.html [ Failure ] -crbug.com/1050754 external/wpt/orientation-event/device-orientation-events-of-detached-documents.https.html [ Failure ] -crbug.com/1050754 external/wpt/orientation-event/device-orientation-events-unavailable-on-insecure-origins.html [ Failure ] -crbug.com/1050754 external/wpt/orientation-event/idlharness.https.window.html [ Failure Pass ] -crbug.com/1050754 external/wpt/orientation-event/motion/add-during-dispatch.https.html [ Failure ] -crbug.com/1050754 external/wpt/orientation-event/motion/add-listener-from-callback.https.html [ Failure ] -crbug.com/1050754 external/wpt/orientation-event/motion/multiple-event-listeners.https.html [ Failure ] -crbug.com/1050754 external/wpt/orientation-event/motion/null-values.https.html [ Failure ] -crbug.com/1050754 external/wpt/orientation-event/orientation/absolute-fallback.https.html [ Failure ] -crbug.com/1050754 external/wpt/orientation-event/orientation/add-listener-from-callback.https.html [ Failure ] -crbug.com/1050754 external/wpt/orientation-event/orientation/basic-operation-absolute.https.html [ Failure ] -crbug.com/1050754 external/wpt/orientation-event/orientation/basic-operation.https.html [ Failure ] -crbug.com/1050754 external/wpt/orientation-event/orientation/multiple-event-listeners.https.html [ Failure ] -crbug.com/1050754 external/wpt/orientation-event/orientation/no-synchronous-events.https.html [ Failure ] -crbug.com/1050754 external/wpt/orientation-event/orientation/null-values.https.html [ Failure ] -crbug.com/1050754 external/wpt/orientation-event/orientation/updates.https.html [ Failure ] -crbug.com/1050754 external/wpt/orientation-sensor/AbsoluteOrientationSensor-iframe-access.https.html [ Failure ] -crbug.com/1050754 external/wpt/orientation-sensor/AbsoluteOrientationSensor.https.html [ Failure ] -crbug.com/1050754 external/wpt/orientation-sensor/RelativeOrientationSensor-iframe-access.https.html [ Failure ] -crbug.com/1050754 external/wpt/orientation-sensor/RelativeOrientationSensor.https.html [ Failure ] -crbug.com/1050754 external/wpt/origin-isolation/1-iframe/parent-no-child-bad-subdomain.sub.https.html [ Failure ] -crbug.com/1050754 external/wpt/origin-isolation/1-iframe/parent-no-child-yes-port.sub.https.html [ Failure ] -crbug.com/1050754 external/wpt/origin-isolation/1-iframe/parent-no-child-yes-same.sub.https.html [ Failure ] -crbug.com/1050754 external/wpt/origin-isolation/1-iframe/parent-no-child-yes-subdomain-with-redirect.sub.https.html [ Failure ] -crbug.com/1050754 external/wpt/origin-isolation/1-iframe/parent-no-child-yes-subdomain.sub.https.html [ Failure ] -crbug.com/1050754 external/wpt/origin-isolation/1-iframe/parent-no-child-yeswithparams-subdomain.sub.https.html [ Failure ] -crbug.com/1050754 external/wpt/origin-isolation/1-iframe/parent-yes-child-no-port.sub.https.html [ Failure ] -crbug.com/1050754 external/wpt/origin-isolation/1-iframe/parent-yes-child-no-same.sub.https.html [ Failure ] -crbug.com/1050754 external/wpt/origin-isolation/1-iframe/parent-yes-child-no-subdomain.sub.https.html [ Failure ] -crbug.com/1050754 external/wpt/origin-isolation/1-iframe/parent-yes-child-yes-port.sub.https.html [ Failure ] -crbug.com/1050754 external/wpt/origin-isolation/1-iframe/parent-yes-child-yes-same.sub.https.html [ Failure ] -crbug.com/1050754 external/wpt/origin-isolation/1-iframe/parent-yes-child-yes-subdomain.sub.https.html [ Failure ] -crbug.com/1050754 external/wpt/origin-isolation/2-iframes/parent-no-child1-no-subdomain-child2-yes-subdomain.sub.https.html [ Failure ] -crbug.com/1050754 external/wpt/origin-isolation/2-iframes/parent-no-child1-no-subdomain-child2-yes-subdomainport.sub.https.html [ Failure ] -crbug.com/1050754 external/wpt/origin-isolation/2-iframes/parent-no-child1-no-subdomain1-child2-yes-subdomain2.sub.https.html [ Failure ] -crbug.com/1050754 external/wpt/origin-isolation/2-iframes/parent-no-child1-yes-subdomain-child2-no-port.sub.https.html [ Failure ] -crbug.com/1050754 external/wpt/origin-isolation/2-iframes/parent-no-child1-yes-subdomain-child2-no-subdomain.sub.https.html [ Failure ] -crbug.com/1050754 external/wpt/origin-isolation/2-iframes/parent-yes-child1-no-subdomain-child2-no-subdomain.sub.https.html [ Failure ] -crbug.com/1050754 external/wpt/origin-isolation/2-iframes/parent-yes-child1-no-subdomain-child2-no-subdomain2.sub.https.html [ Failure ] -crbug.com/1050754 external/wpt/origin-isolation/2-iframes/parent-yes-child1-no-subdomain-child2-yes-subdomain.sub.https.html [ Failure ] -crbug.com/1050754 external/wpt/origin-isolation/2-iframes/parent-yes-child1-no-subdomain-child2-yes-subdomain2.sub.https.html [ Failure ] -crbug.com/1050754 external/wpt/origin-isolation/2-iframes/parent-yes-child1-no-subdomain-child2-yes-subdomainport.sub.https.html [ Failure ] -crbug.com/1050754 external/wpt/origin-isolation/2-iframes/parent-yes-child1-yes-subdomain-child2-no-port.sub.https.html [ Failure ] -crbug.com/1050754 external/wpt/origin-isolation/2-iframes/parent-yes-child1-yes-subdomain-child2-no-subdomain.sub.https.html [ Failure ] -crbug.com/1050754 external/wpt/origin-isolation/2-iframes/parent-yes-child1-yes-subdomain-child2-yes-subdomain.sub.https.html [ Failure ] -crbug.com/1050754 external/wpt/origin-isolation/2-iframes/parent-yes-child1-yes-subdomain-child2-yes-subdomain2.sub.https.html [ Failure ] -crbug.com/1050754 external/wpt/origin-isolation/2-iframes/parent-yes-child1-yes-subdomain-child2-yes-subdomainport.sub.https.html [ Failure ] -crbug.com/1050754 external/wpt/origin-isolation/about-blank.https.sub.html [ Failure ] -crbug.com/1050754 external/wpt/origin-isolation/document-domain.sub.https.html [ Failure ] -crbug.com/1050754 external/wpt/origin-isolation/getter-special-cases/csp-sandbox-no.https.html [ Failure ] -crbug.com/1050754 external/wpt/origin-isolation/getter-special-cases/csp-sandbox-yes.https.html [ Failure ] -crbug.com/1050754 external/wpt/origin-isolation/getter-special-cases/data-to-javascript-no.https.html [ Failure ] -crbug.com/1050754 external/wpt/origin-isolation/getter-special-cases/data-to-javascript-yes.https.html [ Failure ] -crbug.com/1050754 external/wpt/origin-isolation/getter-special-cases/data-url-no.https.html [ Failure ] -crbug.com/1050754 external/wpt/origin-isolation/getter-special-cases/data-url-yes.https.html [ Failure ] -crbug.com/1050754 external/wpt/origin-isolation/getter-special-cases/javascript-url-no.https.html [ Failure ] -crbug.com/1050754 external/wpt/origin-isolation/getter-special-cases/javascript-url-yes.https.html [ Failure ] -crbug.com/1050754 external/wpt/origin-isolation/getter-special-cases/removed-iframe.sub.https.html [ Failure ] -crbug.com/1050754 external/wpt/origin-isolation/getter-special-cases/sandboxed-iframe-no.https.html [ Failure ] -crbug.com/1050754 external/wpt/origin-isolation/getter-special-cases/sandboxed-iframe-yes.https.html [ Failure ] -crbug.com/1050754 external/wpt/origin-isolation/getter-special-cases/sandboxed-same-origin-iframe-no.https.html [ Failure ] -crbug.com/1050754 external/wpt/origin-isolation/getter-special-cases/sandboxed-same-origin-iframe-yes.https.html [ Failure ] -crbug.com/1050754 external/wpt/origin-isolation/going-back.sub.https.html [ Failure ] -crbug.com/1050754 external/wpt/origin-isolation/iframe-navigation/parent-no-1-no-same-2-yes-port.sub.https.html [ Failure ] -crbug.com/1050754 external/wpt/origin-isolation/iframe-navigation/parent-no-1-no-same-2-yes-subdomain.sub.https.html [ Failure ] -crbug.com/1050754 external/wpt/origin-isolation/iframe-navigation/parent-no-1-no-subdomain-2-yes-subdomain.sub.https.html [ Failure ] -crbug.com/1050754 external/wpt/origin-isolation/iframe-navigation/parent-no-1-no-subdomain-2-yes-subdomain2.sub.https.html [ Failure ] -crbug.com/1050754 external/wpt/origin-isolation/iframe-navigation/parent-no-1-subdomain-yes-2-subdomain2-no.sub.https.html [ Failure ] -crbug.com/1050754 external/wpt/origin-isolation/iframe-navigation/parent-no-1-yes-subdomain-2-no-subdomain.sub.https.html [ Failure ] -crbug.com/1050754 external/wpt/origin-isolation/iframe-navigation/parent-yes-1-no-same-2-no-port.sub.https.html [ Failure ] -crbug.com/1050754 external/wpt/origin-isolation/iframe-navigation/parent-yes-1-no-same-2-no-subdomain.sub.https.html [ Failure ] -crbug.com/1050754 external/wpt/origin-isolation/insecure-http.sub.html [ Failure ] -crbug.com/1050754 external/wpt/origin-isolation/popups/opener-no-openee-yes-port.sub.https.html [ Failure ] -crbug.com/1050754 external/wpt/origin-isolation/popups/opener-no-openee-yes-same.sub.https.html [ Failure ] -crbug.com/1050754 external/wpt/origin-isolation/popups/opener-no-openee-yes-subdomain.sub.https.html [ Failure ] -crbug.com/1050754 external/wpt/origin-isolation/popups/opener-yes-openee-no-port.sub.https.html [ Failure ] -crbug.com/1050754 external/wpt/origin-isolation/popups/opener-yes-openee-no-same.sub.https.html [ Failure ] -crbug.com/1050754 external/wpt/origin-isolation/popups/opener-yes-openee-no-subdomain.sub.https.html [ Failure ] -crbug.com/1050754 external/wpt/origin-isolation/popups/opener-yes-openee-yes-port.sub.https.html [ Failure ] -crbug.com/1050754 external/wpt/origin-isolation/popups/opener-yes-openee-yes-same.sub.https.html [ Failure ] -crbug.com/1050754 external/wpt/origin-isolation/popups/opener-yes-openee-yes-subdomain.sub.https.html [ Failure ] -crbug.com/1050754 external/wpt/origin-isolation/removing-iframes.sub.https.html [ Failure ] -crbug.com/1050754 external/wpt/paint-timing/fcp-only/fcp-gradient.html [ Failure ] -crbug.com/1050754 external/wpt/paint-timing/fcp-only/fcp-invisible-3d-rotate-descendant.html [ Failure ] -crbug.com/1050754 external/wpt/paint-timing/fcp-only/fcp-invisible-3d-rotate.html [ Failure ] -crbug.com/1050754 external/wpt/paint-timing/fcp-only/fcp-out-of-bounds-translate.html [ Failure ] -crbug.com/1050754 external/wpt/paint-timing/fcp-only/fcp-svg.html [ Failure Pass ] -crbug.com/1050754 external/wpt/paint-timing/fcp-only/fcp-text-input.html [ Failure ] -crbug.com/1050754 external/wpt/paint-timing/fcp-only/fcp-video-frame.html [ Failure ] -crbug.com/1050754 external/wpt/paint-timing/fcp-only/fcp-video-poster.html [ Failure ] -crbug.com/1050754 external/wpt/payment-handler/idlharness.https.any.serviceworker.html [ Failure Pass ] -crbug.com/1050754 external/wpt/payment-handler/idlharness.https.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/payment-handler/idlharness.https.any.worker.html [ Failure Pass ] -crbug.com/1050754 external/wpt/payment-handler/payment-instruments.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/payment-handler/respond-with-minimal-ui.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/payment-method-basic-card/apply_the_modifiers.html [ Timeout ] -crbug.com/1050754 external/wpt/payment-method-basic-card/historical.https.html [ Failure ] -crbug.com/1050754 external/wpt/payment-method-basic-card/payment-request-canmakepayment-method.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/payment-method-basic-card/steps_for_selecting_the_payment_handler.html [ Timeout ] -crbug.com/1050754 external/wpt/payment-method-id/payment-request-ctor-pmi-handling.https.sub.html [ Failure ] -crbug.com/1050754 external/wpt/payment-request/PaymentMethodChangeEvent/methodDetails-attribute.https.html [ Failure ] -crbug.com/1050754 external/wpt/payment-request/PaymentMethodChangeEvent/methodName-attribute.https.html [ Failure ] -crbug.com/1050754 external/wpt/payment-request/PaymentRequestUpdateEvent/constructor.https.html [ Failure ] -crbug.com/1050754 external/wpt/payment-request/PaymentRequestUpdateEvent/updatewith-method.https.html [ Failure ] -crbug.com/1050754 external/wpt/payment-request/allowpayment/active-document-cross-origin.https.sub.html [ Failure ] -crbug.com/1050754 external/wpt/payment-request/allowpayment/active-document-same-origin.https.html [ Failure ] -crbug.com/1050754 external/wpt/payment-request/allowpayment/allowpaymentrequest-attribute-cross-origin-bc-containers.https.html [ Failure ] -crbug.com/1050754 external/wpt/payment-request/allowpayment/no-attribute-cross-origin-bc-containers.https.html [ Failure ] -crbug.com/1050754 external/wpt/payment-request/allowpayment/no-attribute-same-origin-bc-containers.https.html [ Failure ] -crbug.com/1050754 external/wpt/payment-request/allowpayment/removing-allowpaymentrequest.https.sub.html [ Failure ] -crbug.com/1050754 external/wpt/payment-request/allowpayment/setting-allowpaymentrequest.https.sub.html [ Failure ] -crbug.com/1050754 external/wpt/payment-request/constructor_convert_method_data.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/payment-request/historical.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/payment-request/idlharness.https.window.html [ Failure Pass ] -crbug.com/1050754 external/wpt/payment-request/onpaymentmethodchange-attribute.https.html [ Failure ] -crbug.com/1050754 external/wpt/payment-request/payment-is-showing.https.html [ Failure ] -crbug.com/1050754 external/wpt/payment-request/payment-request-abort-method.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/payment-request/payment-request-canmakepayment-method.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/payment-request/payment-request-constructor.https.sub.html [ Failure ] -crbug.com/1050754 external/wpt/payment-request/payment-request-ctor-currency-code-checks.https.sub.html [ Failure ] -crbug.com/1050754 external/wpt/payment-request/payment-request-ctor-pmi-handling.https.sub.html [ Failure ] -crbug.com/1050754 external/wpt/payment-request/payment-request-hasenrolledinstrument-method-protection.tentative.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/payment-request/payment-request-hasenrolledinstrument-method.tentative.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/payment-request/payment-request-id-attribute.https.html [ Failure ] -crbug.com/1050754 external/wpt/payment-request/payment-request-show-method.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/payment-request/payment-response/onpayerdetailchange-attribute.https.html [ Failure ] -crbug.com/1050754 external/wpt/payment-request/rejects_if_not_active.https.html [ Failure ] -crbug.com/1050754 external/wpt/performance-timeline/idlharness.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/periodic-background-sync/periodicsync.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/permissions-policy/experimental-features/focus-without-user-activation-enabled-tentative.sub.html [ Timeout ] -crbug.com/1050754 external/wpt/permissions-policy/experimental-features/trust-token-redemption-default-permissions-policy.tentative.https.sub.html [ Failure ] -crbug.com/1050754 external/wpt/permissions-policy/experimental-features/trust-token-redemption-supported-by-permissions-policy.tentative.html [ Failure ] -crbug.com/1050754 external/wpt/permissions-policy/experimental-features/vertical-scroll-scrollintoview.tentative.html [ Failure ] -crbug.com/1050754 external/wpt/permissions-policy/payment-allowed-by-permissions-policy-attribute-redirect-on-load.https.sub.html [ Failure ] -crbug.com/1050754 external/wpt/permissions-policy/payment-allowed-by-permissions-policy-attribute.https.sub.html [ Failure ] -crbug.com/1050754 external/wpt/permissions-policy/payment-allowed-by-permissions-policy.https.sub.html [ Failure ] -crbug.com/1050754 external/wpt/permissions-policy/payment-default-permissions-policy.https.sub.html [ Failure ] -crbug.com/1050754 external/wpt/permissions-policy/payment-disabled-by-permissions-policy.https.sub.html [ Failure ] -crbug.com/1050754 external/wpt/permissions-policy/payment-supported-by-permissions-policy.tentative.html [ Failure ] -crbug.com/1050754 external/wpt/permissions-policy/permissions-policy-frame-policy-allowed-for-all.https.sub.html [ Failure ] -crbug.com/1050754 external/wpt/permissions-policy/permissions-policy-frame-policy-disallowed-for-all.https.sub.html [ Failure ] -crbug.com/1050754 external/wpt/permissions-policy/permissions-policy-header-policy-allowed-for-all.https.sub.html [ Failure ] -crbug.com/1050754 external/wpt/permissions-policy/permissions-policy-header-policy-allowed-for-some.https.sub.html [ Failure ] -crbug.com/1050754 external/wpt/permissions-policy/permissions-policy-header-policy-declined.https.sub.html [ Failure ] -crbug.com/1050754 external/wpt/permissions-policy/permissions-policy-header-policy-disallowed-for-all.https.sub.html [ Failure ] -crbug.com/1050754 external/wpt/permissions-policy/permissions-policy-nested-header-policy-allowed-for-all.https.sub.html [ Failure ] -crbug.com/1050754 external/wpt/permissions-policy/permissions-policy-nested-header-policy-allowed-for-self.https.sub.html [ Failure ] -crbug.com/1050754 external/wpt/permissions-policy/permissions-policy-nested-header-policy-disallowed-for-all.https.sub.html [ Failure ] -crbug.com/1050754 external/wpt/permissions-policy/picture-in-picture-allowed-by-permissions-policy-attribute-redirect-on-load.https.sub.html [ Failure ] -crbug.com/1050754 external/wpt/permissions-policy/picture-in-picture-allowed-by-permissions-policy-attribute.https.sub.html [ Failure ] -crbug.com/1050754 external/wpt/permissions-policy/picture-in-picture-allowed-by-permissions-policy.https.sub.html [ Failure ] -crbug.com/1050754 external/wpt/permissions-policy/picture-in-picture-default-permissions-policy.https.sub.html [ Failure ] -crbug.com/1050754 external/wpt/permissions-policy/picture-in-picture-disabled-by-permissions-policy.https.sub.html [ Failure ] -crbug.com/1050754 external/wpt/permissions-policy/picture-in-picture-supported-by-permissions-policy.html [ Failure ] -crbug.com/1050754 external/wpt/permissions-policy/reporting/camera-report-only.https.html [ Timeout ] -crbug.com/1050754 external/wpt/permissions-policy/reporting/camera-reporting.https.html [ Failure ] -crbug.com/1050754 external/wpt/permissions-policy/reporting/encrypted-media-report-only.https.html [ Timeout ] -crbug.com/1050754 external/wpt/permissions-policy/reporting/encrypted-media-reporting.https.html [ Failure ] -crbug.com/1050754 external/wpt/permissions-policy/reporting/fullscreen-report-only.html [ Failure ] -crbug.com/1050754 external/wpt/permissions-policy/reporting/fullscreen-reporting.html [ Timeout ] -crbug.com/1050754 external/wpt/permissions-policy/reporting/generic-sensor-report-only.https.html [ Failure ] -crbug.com/1050754 external/wpt/permissions-policy/reporting/generic-sensor-reporting.https.html [ Failure ] -crbug.com/1050754 external/wpt/permissions-policy/reporting/geolocation-report-only.https.html [ Timeout ] -crbug.com/1050754 external/wpt/permissions-policy/reporting/geolocation-reporting.https.html [ Timeout ] -crbug.com/1050754 external/wpt/permissions-policy/reporting/microphone-report-only.https.html [ Timeout ] -crbug.com/1050754 external/wpt/permissions-policy/reporting/microphone-reporting.https.html [ Failure ] -crbug.com/1050754 external/wpt/permissions-policy/reporting/midi-report-only.https.html [ Timeout ] -crbug.com/1050754 external/wpt/permissions-policy/reporting/midi-reporting.https.html [ Failure ] -crbug.com/1050754 external/wpt/permissions-policy/reporting/payment-report-only.https.html [ Timeout ] -crbug.com/1050754 external/wpt/permissions-policy/reporting/payment-reporting.https.html [ Failure ] -crbug.com/1050754 external/wpt/permissions-policy/reporting/picture-in-picture-report-only.html [ Failure ] -crbug.com/1050754 external/wpt/permissions-policy/reporting/picture-in-picture-reporting.html [ Failure ] -crbug.com/1050754 external/wpt/permissions-policy/reporting/serial-report-only.https.html [ Failure ] -crbug.com/1050754 external/wpt/permissions-policy/reporting/serial-reporting.https.html [ Failure ] -crbug.com/1050754 external/wpt/permissions-policy/reporting/sync-xhr-report-only.html [ Timeout ] -crbug.com/1050754 external/wpt/permissions-policy/reporting/sync-xhr-reporting.html [ Failure ] -crbug.com/1050754 external/wpt/permissions-policy/reporting/usb-report-only.https.html [ Timeout ] -crbug.com/1050754 external/wpt/permissions-policy/reporting/usb-reporting.https.html [ Failure ] -crbug.com/1050754 external/wpt/permissions-policy/reporting/xr-report-only.https.html [ Failure ] -crbug.com/1050754 external/wpt/permissions-policy/reporting/xr-reporting.https.html [ Failure ] -crbug.com/1050754 external/wpt/permissions-request/idlharness.any.html [ Failure ] -crbug.com/1050754 external/wpt/permissions-request/idlharness.any.worker.html [ Failure ] -crbug.com/1050754 external/wpt/permissions-revoke/idlharness.any.html [ Failure ] -crbug.com/1050754 external/wpt/permissions-revoke/idlharness.any.worker.html [ Failure ] -crbug.com/1050754 external/wpt/permissions/idlharness.any.html [ Failure ] -crbug.com/1050754 external/wpt/permissions/idlharness.any.worker.html [ Failure ] -crbug.com/1050754 external/wpt/permissions/nfc-permission.html [ Failure ] -crbug.com/1050754 external/wpt/permissions/permissions-query-feature-policy-attribute.https.sub.html [ Failure Pass ] -crbug.com/1050754 external/wpt/permissions/test-background-fetch-permission.html [ Failure ] -crbug.com/1050754 external/wpt/permissions/test-periodic-background-sync-permission.html [ Failure ] -crbug.com/1050754 external/wpt/picture-in-picture/css-selector.html [ Failure ] -crbug.com/1050754 external/wpt/picture-in-picture/disable-picture-in-picture.html [ Failure ] -crbug.com/1050754 external/wpt/picture-in-picture/enter-picture-in-picture.html [ Failure ] -crbug.com/1050754 external/wpt/picture-in-picture/exit-picture-in-picture.html [ Failure ] -crbug.com/1050754 external/wpt/picture-in-picture/idlharness.window.html [ Failure ] -crbug.com/1050754 external/wpt/picture-in-picture/leave-picture-in-picture.html [ Failure ] -crbug.com/1050754 external/wpt/picture-in-picture/mediastream.html [ Failure ] -crbug.com/1050754 external/wpt/picture-in-picture/picture-in-picture-element.html [ Failure ] -crbug.com/1050754 external/wpt/picture-in-picture/picture-in-picture-window.html [ Failure ] -crbug.com/1050754 external/wpt/picture-in-picture/request-picture-in-picture-twice.html [ Failure ] -crbug.com/1050754 external/wpt/picture-in-picture/request-picture-in-picture.html [ Failure ] -crbug.com/1050754 external/wpt/picture-in-picture/removed-from-document.html [ Failure ] -crbug.com/1050754 external/wpt/picture-in-picture/shadow-dom.html [ Failure ] -crbug.com/1050754 external/wpt/pointerevents/compat/pointerevent_compat-mouse-events-when-removing-nodes.html [ Failure Pass ] -crbug.com/1050754 external/wpt/pointerevents/compat/pointerevent_mouse-on-object.html [ Failure Pass ] -crbug.com/1050754 external/wpt/pointerevents/compat/pointerevent_mouse-pointer-on-scrollbar.html [ Failure ] -crbug.com/1050754 external/wpt/pointerevents/compat/pointerevent_touch-action_two-finger_interaction.html [ Failure Timeout ] -crbug.com/1050754 external/wpt/pointerevents/idlharness.window.html [ Failure Pass ] -crbug.com/1050754 external/wpt/pointerevents/pointerevent_attributes_nohover_pointers.html [ Failure Timeout ] -crbug.com/1050754 external/wpt/pointerevents/pointerevent_boundary_events_in_capturing.html [ Failure Timeout ] -crbug.com/1050754 external/wpt/pointerevents/pointerevent_change-touch-action-onpointerdown_touch.html [ Failure Timeout ] -crbug.com/1050754 external/wpt/pointerevents/pointerevent_coalesced_events_attributes.html [ Failure Timeout ] -crbug.com/1050754 external/wpt/pointerevents/pointerevent_disabled_form_control.html [ Failure Timeout ] -crbug.com/1050754 external/wpt/pointerevents/pointerevent_pointercancel_touch.html [ Failure Timeout ] -crbug.com/1050754 external/wpt/pointerevents/pointerevent_pointercapture-not-lost-in-chorded-buttons.html [ Failure ] -crbug.com/1050754 external/wpt/pointerevents/pointerevent_pointercapture_in_frame.html [ Failure Timeout ] -crbug.com/1050754 external/wpt/pointerevents/pointerevent_pointerleave_after_pointercancel_touch.html [ Failure Timeout ] -crbug.com/1050754 external/wpt/pointerevents/pointerevent_pointerout_after_pointercancel_touch.html [ Failure Timeout ] -crbug.com/1050754 external/wpt/pointerevents/pointerevent_releasepointercapture_events_to_original_target.html [ Failure Timeout ] -crbug.com/1050754 external/wpt/pointerevents/pointerevent_releasepointercapture_onpointercancel_touch.html [ Failure Timeout ] -crbug.com/1050754 external/wpt/pointerevents/pointerevent_sequence_at_implicit_release_on_click.html [ Failure Timeout ] -crbug.com/1050754 external/wpt/pointerevents/pointerevent_sequence_at_implicit_release_on_drag.html [ Failure Timeout ] -crbug.com/1050754 external/wpt/pointerevents/pointerevent_touch-action-auto-css_touch.html [ Failure Timeout ] -crbug.com/1050754 external/wpt/pointerevents/pointerevent_touch-action-button-none-test_touch.html [ Failure Timeout ] -crbug.com/1050754 external/wpt/pointerevents/pointerevent_touch-action-inherit_child-auto-child-none_touch.html [ Failure Timeout ] -crbug.com/1050754 external/wpt/pointerevents/pointerevent_touch-action-inherit_child-none_touch.html [ Failure Timeout ] -crbug.com/1050754 external/wpt/pointerevents/pointerevent_touch-action-inherit_child-pan-x-child-pan-x_touch.html [ Failure Timeout ] -crbug.com/1050754 external/wpt/pointerevents/pointerevent_touch-action-inherit_child-pan-x-child-pan-y_touch.html [ Failure Timeout ] -crbug.com/1050754 external/wpt/pointerevents/pointerevent_touch-action-inherit_highest-parent-none_touch.html [ Failure Timeout ] -crbug.com/1050754 external/wpt/pointerevents/pointerevent_touch-action-inherit_parent-none_touch.html [ Failure Timeout ] -crbug.com/1050754 external/wpt/pointerevents/pointerevent_touch-action-none-css_touch.html [ Failure Timeout ] -crbug.com/1050754 external/wpt/pointerevents/pointerevent_touch-action-none-on-body-when-style-propagates-to-viewport_touch.html [ Failure ] -crbug.com/1050754 external/wpt/pointerevents/pointerevent_touch-action-pan-down-css_touch.html [ Failure Timeout ] -crbug.com/1050754 external/wpt/pointerevents/pointerevent_touch-action-pan-left-css_touch.html [ Failure Timeout ] -crbug.com/1050754 external/wpt/pointerevents/pointerevent_touch-action-pan-right-css_touch.html [ Failure Timeout ] -crbug.com/1050754 external/wpt/pointerevents/pointerevent_touch-action-pan-up-css_touch.html [ Failure Timeout ] -crbug.com/1050754 external/wpt/pointerevents/pointerevent_touch-action-pan-x-css_touch.html [ Failure Timeout ] -crbug.com/1050754 external/wpt/pointerevents/pointerevent_touch-action-pan-x-pan-y-pan-y_touch.html [ Failure Timeout ] -crbug.com/1050754 external/wpt/pointerevents/pointerevent_touch-action-pan-x-pan-y_touch.html [ Failure Timeout ] -crbug.com/1050754 external/wpt/pointerevents/pointerevent_touch-action-pan-y-css_touch.html [ Failure Timeout ] -crbug.com/1050754 external/wpt/pointerevents/pointerevent_touch-action-span-none-test_touch.html [ Failure Timeout ] -crbug.com/1050754 external/wpt/pointerevents/pointerevent_touch-action-svg-none-test_touch.html [ Failure Timeout ] -crbug.com/1050754 external/wpt/pointerevents/pointerevent_touch-action-table-none-test_touch.html [ Failure Timeout ] -crbug.com/1050754 external/wpt/pointerevents/pointerevent_touch-adjustment_click_target.html [ Failure ] -crbug.com/1050754 external/wpt/pointerevents/pointerlock/pointerevent_coordinates_when_locked.html [ Timeout ] -crbug.com/1050754 external/wpt/pointerevents/pointerlock/pointerevent_getCoalescedEvents_when_pointerlocked.html [ Failure ] -crbug.com/1050754 external/wpt/pointerevents/pointerlock/pointerevent_movementxy.html [ Failure ] -crbug.com/1050754 external/wpt/pointerevents/pointerlock/pointerevent_movementxy_with_pointerlock.html [ Failure ] -crbug.com/1050754 external/wpt/pointerevents/pointerlock/pointerevent_pointerlock_after_pointercapture.html [ Failure ] -crbug.com/1050754 external/wpt/pointerevents/pointerlock/pointerevent_pointerlock_supercedes_capture.html [ Failure ] -crbug.com/1050754 external/wpt/pointerevents/pointerlock/pointerevent_pointermove_in_pointerlock.html [ Timeout ] -crbug.com/1050754 external/wpt/pointerevents/pointerlock/pointerevent_pointermove_on_chorded_mouse_button_when_locked.html [ Timeout ] -crbug.com/1050754 external/wpt/pointerlock/mouse_buttons_back_forward.html [ Timeout ] -crbug.com/1050754 external/wpt/pointerlock/movementX_Y_basic.html [ Failure ] -crbug.com/1050754 external/wpt/pointerlock/pointerlock_remove_target.html [ Timeout ] -crbug.com/1050754 external/wpt/pointerlock/pointerlock_shadow.html [ Timeout ] -crbug.com/1050754 external/wpt/portals/about-blank-cannot-host.html [ Failure ] -crbug.com/1050754 external/wpt/portals/csp/frame-ancestors.sub.html [ Failure Timeout ] -crbug.com/1050754 external/wpt/portals/csp/frame-src.sub.html [ Failure ] -crbug.com/1050754 external/wpt/portals/history/history-manipulation-inside-portal-with-subframes.html [ Failure ] -crbug.com/1050754 external/wpt/portals/history/history-manipulation-inside-portal.html [ Failure ] -crbug.com/1050754 external/wpt/portals/htmlportalelement-event-handler-content-attributes.html [ Failure ] -crbug.com/1050754 external/wpt/portals/portal-activate-data.html [ Failure ] -crbug.com/1050754 external/wpt/portals/portal-activate-default.html [ Failure ] -crbug.com/1050754 external/wpt/portals/portal-activate-event-constructor.html [ Failure ] -crbug.com/1050754 external/wpt/portals/portal-activate-event.html [ Failure ] -crbug.com/1050754 external/wpt/portals/portal-non-http-navigation.html [ Failure ] -crbug.com/1050754 external/wpt/portals/portal-onload-event.html [ Failure ] -crbug.com/1050754 external/wpt/portals/portals-activate-empty-browsing-context.html [ Failure ] -crbug.com/1050754 external/wpt/portals/portals-activate-inside-iframe.html [ Failure ] -crbug.com/1050754 external/wpt/portals/portals-activate-inside-portal.html [ Failure ] -crbug.com/1050754 external/wpt/portals/portals-activate-network-error.html [ Failure ] -crbug.com/1050754 external/wpt/portals/portals-activate-no-browsing-context.html [ Failure ] -crbug.com/1050754 external/wpt/portals/portals-activate-resolution.html [ Failure ] -crbug.com/1050754 external/wpt/portals/portals-activate-twice.html [ Failure ] -crbug.com/1050754 external/wpt/portals/portals-activate-while-unloading.html [ Failure Timeout ] -crbug.com/1050754 external/wpt/portals/portals-adopt-predecessor.html [ Failure ] -crbug.com/1050754 external/wpt/portals/portals-api.html [ Failure ] -crbug.com/1050754 external/wpt/portals/portals-close-window.html [ Failure ] -crbug.com/1050754 external/wpt/portals/portals-cross-origin-load.sub.html [ Failure ] -crbug.com/1050754 external/wpt/portals/portals-focus.sub.html [ Failure ] -crbug.com/1050754 external/wpt/portals/portals-host-exposure.sub.html [ Failure ] -crbug.com/1050754 external/wpt/portals/portals-host-hidden-after-activation.html [ Failure ] -crbug.com/1050754 external/wpt/portals/portals-host-null.html [ Failure ] -crbug.com/1050754 external/wpt/portals/portals-host-post-message.sub.html [ Failure ] -crbug.com/1050754 external/wpt/portals/portals-navigate-after-adoption.html [ Failure ] -crbug.com/1050754 external/wpt/portals/portals-nested.html [ Failure ] -crbug.com/1050754 external/wpt/portals/portals-post-message.sub.html [ Failure ] -crbug.com/1050754 external/wpt/portals/portals-referrer-inherit-header.html [ Failure ] -crbug.com/1050754 external/wpt/portals/portals-referrer-inherit-meta.html [ Failure ] -crbug.com/1050754 external/wpt/portals/portals-referrer.html [ Failure ] -crbug.com/1050754 external/wpt/portals/portals-repeated-activate.html [ Failure ] -crbug.com/1050754 external/wpt/portals/portals-set-src-after-activate.html [ Failure ] -crbug.com/1050754 external/wpt/portals/predecessor-fires-unload.html [ Failure ] -crbug.com/1050754 external/wpt/portals/xfo/portals-xfo-deny.sub.html [ Failure ] -crbug.com/1050754 external/wpt/portals/xfo/portals-xfo-sameorigin.html [ Failure ] -crbug.com/1050754 external/wpt/preload/delaying-onload-link-preload-after-discovery.html [ Timeout ] -crbug.com/1050754 external/wpt/preload/download-resources.html [ Failure Pass ] -crbug.com/1050754 external/wpt/preload/link-header-preload-imagesrcset.html [ Failure ] -crbug.com/1050754 external/wpt/preload/onerror-event.html [ Failure Pass ] -crbug.com/1050754 external/wpt/preload/onload-event.html [ Failure Pass ] -crbug.com/1050754 external/wpt/preload/preload-with-type.html [ Failure Pass ] -crbug.com/1050754 external/wpt/preload/reflected-as-value.html [ Failure Pass ] -crbug.com/1050754 external/wpt/preload/single-download-preload.html [ Pass Timeout ] -crbug.com/1050754 external/wpt/preload/subresource-integrity.html [ Failure Pass ] -crbug.com/1050754 external/wpt/presentation-api/controlling-ua/PresentationRequest_error.https.html [ Failure ] -crbug.com/1050754 external/wpt/presentation-api/controlling-ua/PresentationRequest_mixedcontent.https.html [ Failure ] -crbug.com/1050754 external/wpt/presentation-api/controlling-ua/PresentationRequest_mixedcontent_multiple.https.html [ Failure ] -crbug.com/1050754 external/wpt/presentation-api/controlling-ua/PresentationRequest_sandboxing_error.https.html [ Failure ] -crbug.com/1050754 external/wpt/presentation-api/controlling-ua/PresentationRequest_sandboxing_success.https.html [ Failure ] -crbug.com/1050754 external/wpt/presentation-api/controlling-ua/PresentationRequest_success.https.html [ Failure ] -crbug.com/1050754 external/wpt/presentation-api/controlling-ua/defaultRequest.https.html [ Failure ] -crbug.com/1050754 external/wpt/presentation-api/controlling-ua/getAvailability.https.html [ Failure ] -crbug.com/1050754 external/wpt/presentation-api/controlling-ua/getAvailability_sandboxing_success.https.html [ Failure ] -crbug.com/1050754 external/wpt/presentation-api/controlling-ua/idlharness.https.html [ Failure ] -crbug.com/1050754 external/wpt/presentation-api/controlling-ua/reconnectToPresentation_sandboxing_success.https.html [ Failure ] -crbug.com/1050754 external/wpt/presentation-api/controlling-ua/startNewPresentation_error.https.html [ Failure ] -crbug.com/1050754 external/wpt/priority-hints/fetch-api-request.tentative.any.html [ Failure ] -crbug.com/1050754 external/wpt/priority-hints/fetch-api-request.tentative.any.worker.html [ Failure ] -crbug.com/1050754 external/wpt/priority-hints/img-attr-named-constructor.tentative.html [ Failure ] -crbug.com/1050754 external/wpt/priority-hints/link-attr.tentative.html [ Failure ] -crbug.com/1050754 external/wpt/push-api/idlharness.https.any.html [ Failure ] -crbug.com/1050754 external/wpt/push-api/idlharness.https.any.serviceworker.html [ Failure ] -crbug.com/1050754 external/wpt/push-api/idlharness.https.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/push-api/idlharness.https.any.worker.html [ Failure ] -crbug.com/1050754 external/wpt/quirks/line-height-calculation.html [ Failure ] -crbug.com/1050754 external/wpt/quirks/percentage-height-calculation.html [ Failure ] -crbug.com/1050754 external/wpt/quirks/table-cell-nowrap-minimum-width-calculation.html [ Failure ] -crbug.com/1050754 external/wpt/quirks/table-cell-width-calculation.html [ Failure ] -crbug.com/1050754 external/wpt/quirks/unitless-length/excluded-properties-003.html [ Failure Pass ] -crbug.com/1050754 external/wpt/direct-sockets/open-consume-activation.https.html [ Failure ] -crbug.com/1050754 external/wpt/direct-sockets/open-without-user-gesture.https.html [ Failure ] -crbug.com/1050754 external/wpt/direct-sockets/remotePort-required.https.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/4K+1/gen/top.http-rp/no-referrer-when-downgrade/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/4K+1/gen/top.http-rp/origin-when-cross-origin/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/4K+1/gen/top.http-rp/same-origin/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/4K+1/gen/top.http-rp/strict-origin-when-cross-origin/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/4K+1/gen/top.http-rp/unsafe-url/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/4K+1/gen/top.http-rp/unset/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/4K+1/gen/top.meta/no-referrer-when-downgrade/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/4K+1/gen/top.meta/origin-when-cross-origin/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/4K+1/gen/top.meta/same-origin/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/4K+1/gen/top.meta/strict-origin-when-cross-origin/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/4K+1/gen/top.meta/unsafe-url/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/4K+1/gen/top.meta/unset/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/4K-1/gen/top.http-rp/no-referrer-when-downgrade/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/4K-1/gen/top.http-rp/origin-when-cross-origin/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/4K-1/gen/top.http-rp/same-origin/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/4K-1/gen/top.http-rp/strict-origin-when-cross-origin/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/4K-1/gen/top.http-rp/unsafe-url/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/4K-1/gen/top.http-rp/unset/a-tag.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/4K-1/gen/top.http-rp/unset/fetch.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/4K-1/gen/top.http-rp/unset/iframe-tag.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/4K-1/gen/top.http-rp/unset/img-tag.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/4K-1/gen/top.http-rp/unset/script-tag.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/4K-1/gen/top.http-rp/unset/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/4K-1/gen/top.http-rp/unset/xhr.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/4K-1/gen/top.meta/no-referrer-when-downgrade/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/4K-1/gen/top.meta/origin-when-cross-origin/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/4K-1/gen/top.meta/same-origin/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/4K-1/gen/top.meta/strict-origin-when-cross-origin/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/4K-1/gen/top.meta/unsafe-url/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/4K-1/gen/top.meta/unset/a-tag.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/4K-1/gen/top.meta/unset/fetch.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/4K-1/gen/top.meta/unset/iframe-tag.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/4K-1/gen/top.meta/unset/img-tag.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/4K-1/gen/top.meta/unset/script-tag.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/4K-1/gen/top.meta/unset/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/4K-1/gen/top.meta/unset/xhr.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/4K/gen/top.http-rp/no-referrer-when-downgrade/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/4K/gen/top.http-rp/origin-when-cross-origin/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/4K/gen/top.http-rp/same-origin/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/4K/gen/top.http-rp/strict-origin-when-cross-origin/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/4K/gen/top.http-rp/unsafe-url/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/4K/gen/top.http-rp/unset/a-tag.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/4K/gen/top.http-rp/unset/fetch.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/4K/gen/top.http-rp/unset/iframe-tag.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/4K/gen/top.http-rp/unset/img-tag.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/4K/gen/top.http-rp/unset/script-tag.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/4K/gen/top.http-rp/unset/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/4K/gen/top.http-rp/unset/xhr.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/4K/gen/top.meta/no-referrer-when-downgrade/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/4K/gen/top.meta/origin-when-cross-origin/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/4K/gen/top.meta/same-origin/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/4K/gen/top.meta/strict-origin-when-cross-origin/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/4K/gen/top.meta/unsafe-url/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/4K/gen/top.meta/unset/a-tag.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/4K/gen/top.meta/unset/fetch.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/4K/gen/top.meta/unset/iframe-tag.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/4K/gen/top.meta/unset/img-tag.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/4K/gen/top.meta/unset/script-tag.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/4K/gen/top.meta/unset/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/4K/gen/top.meta/unset/xhr.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/css-integration/svg/external-stylesheet.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/css-integration/svg/inline-style.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/css-integration/svg/internal-stylesheet.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/css-integration/svg/presentation-attribute.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/css-integration/svg/processing-instruction.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/iframe.http-rp/no-referrer-when-downgrade/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/iframe.http-rp/no-referrer-when-downgrade/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/iframe.http-rp/no-referrer-when-downgrade/worker-module.http.html [ Failure Pass ] -crbug.com/1050754 external/wpt/referrer-policy/gen/iframe.http-rp/no-referrer/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/iframe.http-rp/no-referrer/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/iframe.http-rp/no-referrer/worker-module.http.html [ Failure Pass ] -crbug.com/1050754 external/wpt/referrer-policy/gen/iframe.http-rp/origin-when-cross-origin/fetch.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/iframe.http-rp/origin-when-cross-origin/script-tag.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/iframe.http-rp/origin-when-cross-origin/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/iframe.http-rp/origin-when-cross-origin/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/iframe.http-rp/origin-when-cross-origin/worker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/iframe.http-rp/origin-when-cross-origin/xhr.http.html [ Failure Pass ] -crbug.com/1050754 external/wpt/referrer-policy/gen/iframe.http-rp/origin/fetch.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/iframe.http-rp/origin/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/iframe.http-rp/origin/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/iframe.http-rp/origin/worker-module.http.html [ Failure Pass ] -crbug.com/1050754 external/wpt/referrer-policy/gen/iframe.http-rp/origin/xhr.http.html [ Failure Pass ] -crbug.com/1050754 external/wpt/referrer-policy/gen/iframe.http-rp/same-origin/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/iframe.http-rp/same-origin/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/iframe.http-rp/strict-origin-when-cross-origin/fetch.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/iframe.http-rp/strict-origin-when-cross-origin/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/iframe.http-rp/strict-origin-when-cross-origin/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/iframe.http-rp/strict-origin-when-cross-origin/worker-module.http.html [ Failure Pass ] -crbug.com/1050754 external/wpt/referrer-policy/gen/iframe.http-rp/strict-origin/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/iframe.http-rp/strict-origin/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/iframe.http-rp/strict-origin/xhr.http.html [ Failure Pass ] -crbug.com/1050754 external/wpt/referrer-policy/gen/iframe.http-rp/unsafe-url/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/iframe.http-rp/unsafe-url/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/iframe.http-rp/unsafe-url/worker-module.http.html [ Failure Pass ] -crbug.com/1050754 external/wpt/referrer-policy/gen/iframe.http-rp/unset/a-tag.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/iframe.http-rp/unset/fetch.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/iframe.http-rp/unset/iframe-tag.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/iframe.http-rp/unset/img-tag.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/iframe.http-rp/unset/script-tag.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/iframe.http-rp/unset/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/iframe.http-rp/unset/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/iframe.http-rp/unset/worker-module.http.html [ Failure Pass ] -crbug.com/1050754 external/wpt/referrer-policy/gen/iframe.http-rp/unset/xhr.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/iframe.meta/no-referrer-when-downgrade/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/iframe.meta/no-referrer-when-downgrade/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/iframe.meta/no-referrer-when-downgrade/xhr.http.html [ Failure Pass ] -crbug.com/1050754 external/wpt/referrer-policy/gen/iframe.meta/no-referrer/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/iframe.meta/no-referrer/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/iframe.meta/origin-when-cross-origin/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/iframe.meta/origin-when-cross-origin/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/iframe.meta/origin-when-cross-origin/worker-module.http.html [ Failure Pass ] -crbug.com/1050754 external/wpt/referrer-policy/gen/iframe.meta/origin/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/iframe.meta/origin/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/iframe.meta/origin/xhr.http.html [ Failure Pass ] -crbug.com/1050754 external/wpt/referrer-policy/gen/iframe.meta/same-origin/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/iframe.meta/same-origin/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/iframe.meta/same-origin/worker-module.http.html [ Failure Pass ] -crbug.com/1050754 external/wpt/referrer-policy/gen/iframe.meta/strict-origin-when-cross-origin/script-tag.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/iframe.meta/strict-origin-when-cross-origin/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/iframe.meta/strict-origin-when-cross-origin/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/iframe.meta/strict-origin-when-cross-origin/worker-classic.http.html [ Failure Pass ] -crbug.com/1050754 external/wpt/referrer-policy/gen/iframe.meta/strict-origin-when-cross-origin/worker-module.http.html [ Failure Pass ] -crbug.com/1050754 external/wpt/referrer-policy/gen/iframe.meta/strict-origin/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/iframe.meta/strict-origin/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/iframe.meta/strict-origin/xhr.http.html [ Failure Pass ] -crbug.com/1050754 external/wpt/referrer-policy/gen/iframe.meta/unsafe-url/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/iframe.meta/unsafe-url/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/iframe.meta/unsafe-url/worker-module.http.html [ Failure Pass ] -crbug.com/1050754 external/wpt/referrer-policy/gen/iframe.meta/unsafe-url/xhr.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/iframe.meta/unset/a-tag.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/iframe.meta/unset/fetch.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/iframe.meta/unset/iframe-tag.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/iframe.meta/unset/img-tag.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/iframe.meta/unset/script-tag.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/iframe.meta/unset/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/iframe.meta/unset/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/iframe.meta/unset/worker-module.http.html [ Failure Pass ] -crbug.com/1050754 external/wpt/referrer-policy/gen/iframe.meta/unset/xhr.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/req.attr/no-referrer/a-tag.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc-inherit.http-rp/no-referrer-when-downgrade/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc-inherit.http-rp/no-referrer-when-downgrade/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc-inherit.http-rp/no-referrer-when-downgrade/worker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc-inherit.http-rp/no-referrer-when-downgrade/worker-module.http.html [ Failure Pass ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc-inherit.http-rp/no-referrer/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc-inherit.http-rp/no-referrer/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc-inherit.http-rp/no-referrer/worker-module.http.html [ Failure Pass ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc-inherit.http-rp/origin-when-cross-origin/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc-inherit.http-rp/origin-when-cross-origin/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc-inherit.http-rp/origin-when-cross-origin/worker-module.http.html [ Failure Pass ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc-inherit.http-rp/origin-when-cross-origin/xhr.http.html [ Failure Pass ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc-inherit.http-rp/origin/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc-inherit.http-rp/origin/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc-inherit.http-rp/origin/worker-classic.http.html [ Crash ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc-inherit.http-rp/origin/worker-module.http.html [ Failure Pass ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc-inherit.http-rp/same-origin/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc-inherit.http-rp/same-origin/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc-inherit.http-rp/same-origin/worker-module.http.html [ Failure Pass ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc-inherit.http-rp/strict-origin-when-cross-origin/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc-inherit.http-rp/strict-origin-when-cross-origin/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc-inherit.http-rp/strict-origin-when-cross-origin/worker-module.http.html [ Failure Pass ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc-inherit.http-rp/strict-origin-when-cross-origin/xhr.http.html [ Failure Pass ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc-inherit.http-rp/strict-origin/iframe-tag.http.html [ Failure Pass ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc-inherit.http-rp/strict-origin/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc-inherit.http-rp/strict-origin/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc-inherit.http-rp/strict-origin/worker-module.http.html [ Failure Pass ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc-inherit.http-rp/unsafe-url/script-tag.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc-inherit.http-rp/unsafe-url/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc-inherit.http-rp/unsafe-url/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc-inherit.http-rp/unsafe-url/worker-module.http.html [ Failure Pass ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc-inherit.http-rp/unset/a-tag.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc-inherit.http-rp/unset/fetch.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc-inherit.http-rp/unset/iframe-tag.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc-inherit.http-rp/unset/img-tag.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc-inherit.http-rp/unset/script-tag.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc-inherit.http-rp/unset/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc-inherit.http-rp/unset/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc-inherit.http-rp/unset/worker-module.http.html [ Failure Pass ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc-inherit.http-rp/unset/xhr.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc-inherit.meta/no-referrer-when-downgrade/fetch.http.html [ Failure Pass ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc-inherit.meta/no-referrer-when-downgrade/img-tag.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc-inherit.meta/no-referrer-when-downgrade/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc-inherit.meta/no-referrer-when-downgrade/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc-inherit.meta/no-referrer-when-downgrade/xhr.http.html [ Failure Pass ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc-inherit.meta/no-referrer/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc-inherit.meta/no-referrer/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc-inherit.meta/no-referrer/worker-module.http.html [ Failure Pass ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc-inherit.meta/origin-when-cross-origin/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc-inherit.meta/origin-when-cross-origin/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc-inherit.meta/origin-when-cross-origin/worker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc-inherit.meta/origin-when-cross-origin/worker-module.http.html [ Failure Pass ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc-inherit.meta/origin/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc-inherit.meta/origin/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc-inherit.meta/origin/worker-module.http.html [ Failure Pass ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc-inherit.meta/same-origin/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc-inherit.meta/same-origin/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc-inherit.meta/same-origin/worker-module.http.html [ Failure Pass ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc-inherit.meta/strict-origin-when-cross-origin/fetch.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc-inherit.meta/strict-origin-when-cross-origin/iframe-tag.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc-inherit.meta/strict-origin-when-cross-origin/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc-inherit.meta/strict-origin-when-cross-origin/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc-inherit.meta/strict-origin-when-cross-origin/worker-module.http.html [ Failure Pass ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc-inherit.meta/strict-origin-when-cross-origin/xhr.http.html [ Failure Pass ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc-inherit.meta/strict-origin/a-tag.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc-inherit.meta/strict-origin/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc-inherit.meta/strict-origin/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc-inherit.meta/strict-origin/worker-module.http.html [ Failure Pass ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc-inherit.meta/unsafe-url/iframe-tag.http.html [ Failure Pass ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc-inherit.meta/unsafe-url/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc-inherit.meta/unsafe-url/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc-inherit.meta/unset/a-tag.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc-inherit.meta/unset/fetch.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc-inherit.meta/unset/iframe-tag.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc-inherit.meta/unset/img-tag.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc-inherit.meta/unset/script-tag.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc-inherit.meta/unset/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc-inherit.meta/unset/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc-inherit.meta/unset/worker-module.http.html [ Failure Pass ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc-inherit.meta/unset/xhr.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc.meta/no-referrer-when-downgrade/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc.meta/no-referrer-when-downgrade/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc.meta/no-referrer-when-downgrade/worker-module.http.html [ Failure Pass ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc.meta/no-referrer/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc.meta/no-referrer/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc.meta/no-referrer/worker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc.meta/origin-when-cross-origin/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc.meta/origin-when-cross-origin/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc.meta/origin-when-cross-origin/worker-module.http.html [ Failure Pass ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc.meta/origin/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc.meta/origin/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc.meta/origin/worker-module.http.html [ Failure Pass ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc.meta/same-origin/iframe-tag.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc.meta/same-origin/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc.meta/same-origin/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc.meta/same-origin/worker-module.http.html [ Failure Pass ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc.meta/strict-origin-when-cross-origin/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc.meta/strict-origin-when-cross-origin/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc.meta/strict-origin-when-cross-origin/worker-module.http.html [ Failure Pass ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc.meta/strict-origin/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc.meta/strict-origin/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc.meta/strict-origin/worker-module.http.html [ Failure Pass ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc.meta/unsafe-url/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc.meta/unsafe-url/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/srcdoc.meta/unsafe-url/worker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/top.http-rp/no-referrer-when-downgrade/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/top.http-rp/no-referrer-when-downgrade/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/top.http-rp/no-referrer/iframe-tag.http.html [ Failure Pass ] -crbug.com/1050754 external/wpt/referrer-policy/gen/top.http-rp/no-referrer/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/top.http-rp/no-referrer/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/top.http-rp/origin-when-cross-origin/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/top.http-rp/origin-when-cross-origin/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/top.http-rp/origin/iframe-tag.http.html [ Failure Pass ] -crbug.com/1050754 external/wpt/referrer-policy/gen/top.http-rp/origin/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/top.http-rp/origin/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/top.http-rp/same-origin/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/top.http-rp/same-origin/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/top.http-rp/strict-origin-when-cross-origin/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/top.http-rp/strict-origin-when-cross-origin/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/top.http-rp/strict-origin/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/top.http-rp/strict-origin/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/top.http-rp/unsafe-url/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/top.http-rp/unsafe-url/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/top.http-rp/unset/a-tag.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/top.http-rp/unset/fetch.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/top.http-rp/unset/iframe-tag.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/top.http-rp/unset/img-tag.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/top.http-rp/unset/script-tag.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/top.http-rp/unset/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/top.http-rp/unset/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/top.http-rp/unset/xhr.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/top.meta/no-referrer-when-downgrade/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/top.meta/no-referrer-when-downgrade/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/top.meta/no-referrer/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/top.meta/no-referrer/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/top.meta/origin-when-cross-origin/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/top.meta/origin-when-cross-origin/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/top.meta/origin/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/top.meta/origin/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/top.meta/same-origin/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/top.meta/same-origin/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/top.meta/strict-origin-when-cross-origin/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/top.meta/strict-origin-when-cross-origin/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/top.meta/strict-origin/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/top.meta/strict-origin/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/top.meta/unsafe-url/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/top.meta/unsafe-url/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/top.meta/unset/a-tag.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/top.meta/unset/fetch.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/top.meta/unset/iframe-tag.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/top.meta/unset/img-tag.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/top.meta/unset/script-tag.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/top.meta/unset/sharedworker-classic.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/top.meta/unset/sharedworker-module.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/top.meta/unset/xhr.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/worker-classic.http-rp/unset/fetch.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/worker-classic.http-rp/unset/xhr.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/worker-module.http-rp/unset/fetch.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/gen/worker-module.http-rp/unset/xhr.http.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/generic/inheritance/iframe-inheritance-javascript-child.html [ Failure Pass ] -crbug.com/1050754 external/wpt/referrer-policy/generic/inheritance/iframe-inheritance-javascript.html [ Failure Pass ] -crbug.com/1050754 external/wpt/referrer-policy/generic/multiple-headers-one-invalid.html [ Failure ] -crbug.com/1050754 external/wpt/referrer-policy/generic/unsupported-csp-referrer-directive.html [ Failure ] -crbug.com/1050754 external/wpt/remote-playback/cancel-watch-availability.html [ Failure ] -crbug.com/1050754 external/wpt/remote-playback/disable-remote-playback-cancel-watch-availability-throws.html [ Failure ] -crbug.com/1050754 external/wpt/remote-playback/disable-remote-playback-prompt-throws.html [ Failure ] -crbug.com/1050754 external/wpt/remote-playback/disable-remote-playback-watch-availability-throws.html [ Failure ] -crbug.com/1050754 external/wpt/remote-playback/idlharness.window.html [ Failure ] -crbug.com/1050754 external/wpt/remote-playback/watch-availability-initial-callback.html [ Failure ] -crbug.com/1050754 external/wpt/reporting/bufferSize.html [ Pass Timeout ] -crbug.com/1050754 external/wpt/reporting/idlharness.any.html [ Failure Pass ] -crbug.com/1050754 external/wpt/reporting/idlharness.any.worker.html [ Failure Pass ] -crbug.com/1050754 external/wpt/reporting/nestedReport.html [ Failure ] -crbug.com/1050754 external/wpt/reporting/order.html [ Failure ] -crbug.com/1050754 external/wpt/reporting/path-absolute-endpoint.https.sub.html [ Failure ] -crbug.com/1050754 external/wpt/requestidlecallback/callback-idle-periods.html [ Failure Pass ] -crbug.com/1050754 external/wpt/resize-observer/idlharness.window.html [ Failure Pass ] -crbug.com/1050754 external/wpt/resource-timing/buffer-full-add-after-full-event.html [ Timeout ] -crbug.com/1050754 external/wpt/resource-timing/buffer-full-add-then-clear.html [ Failure Pass ] -crbug.com/1050754 external/wpt/resource-timing/buffer-full-set-to-current-buffer.html [ Failure Timeout ] -crbug.com/1050754 external/wpt/resource-timing/buffer-full-then-increased.html [ Failure Pass ] -crbug.com/1050754 external/wpt/resource-timing/buffered-flag.any.html [ Failure ] -crbug.com/1050754 external/wpt/resource-timing/crossorigin-sandwich-TAO.sub.html [ Failure ] -crbug.com/1050754 external/wpt/resource-timing/no-entries-for-cross-origin-css-fetched.sub.html [ Failure Pass ] -crbug.com/1050754 external/wpt/resource-timing/object-not-found-adds-entry.html [ Failure ] -crbug.com/1050754 external/wpt/resource-timing/resource-timing-level1.sub.html [ Failure ] -crbug.com/1050754 external/wpt/resource-timing/resource_dedicated_worker.html [ Failure ] -crbug.com/1050754 external/wpt/sanitizer-api/idlharness.https.tentative.window.html [ Failure ] -crbug.com/1050754 external/wpt/sanitizer-api/sanitizer-sanitizeToString.https.tentative.html [ Failure ] -crbug.com/1050754 external/wpt/screen-capture/feature-policy.https.html [ Failure Timeout ] -crbug.com/1050754 external/wpt/screen-capture/getdisplaymedia.https.html [ Pass Timeout ] -crbug.com/1050754 external/wpt/screen-capture/idlharness.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/screen-orientation/active-lock.html [ Failure ] -crbug.com/1050754 external/wpt/screen-orientation/event-before-promise.html [ Failure Pass ] -crbug.com/1050754 external/wpt/screen-orientation/lock-basic.html [ Failure Pass ] -crbug.com/1050754 external/wpt/screen-orientation/lock-sandboxed-iframe.html [ Failure ] -crbug.com/1050754 external/wpt/screen-orientation/lock-unlock-check.html [ Failure Pass ] -crbug.com/1050754 external/wpt/screen-orientation/onchange-event-subframe.html [ Failure Pass ] -crbug.com/1050754 external/wpt/screen-orientation/onchange-event.html [ Failure Pass ] -crbug.com/1050754 external/wpt/screen-orientation/orientation-reading.html [ Failure Pass ] -crbug.com/1050754 external/wpt/screen-wake-lock/idlharness.https.window.html [ Crash Failure ] -crbug.com/1050754 external/wpt/screen-wake-lock/wakelock-active-document.https.window.html [ Failure Pass ] -crbug.com/1050754 external/wpt/screen-wake-lock/wakelock-onrelease.https.html [ Crash Failure ] -crbug.com/1050754 external/wpt/screen-wake-lock/wakelock-released.https.html [ Crash ] -crbug.com/1050754 external/wpt/screen-wake-lock/wakelock-request-denied.https.html [ Crash Failure ] -crbug.com/1050754 external/wpt/screen-wake-lock/wakelock-screen-type-on-worker.https.worker.html [ Failure ] -crbug.com/1050754 external/wpt/screen-wake-lock/wakelock-supported-by-feature-policy.html [ Failure Pass ] -crbug.com/1050754 external/wpt/screen-wake-lock/wakelock-type.https.window.html [ Crash Failure ] -crbug.com/1050754 external/wpt/screen-wake-lock/wakelockpermissiondescriptor.https.html [ Crash Failure ] -crbug.com/1050754 external/wpt/screen_enumeration/getScreens.tentative.https.window.html [ Crash Failure ] -crbug.com/1050754 external/wpt/screen_enumeration/screen_enumeration_permission.https.window.html [ Crash Failure ] -crbug.com/1050754 external/wpt/scroll-animations/cancel-animation.html [ Failure ] -crbug.com/1050754 external/wpt/scroll-animations/constructor-no-document.html [ Failure ] -crbug.com/1050754 external/wpt/scroll-animations/constructor.html [ Failure Pass ] -crbug.com/1050754 external/wpt/scroll-animations/constructor.tentative.html [ Failure ] -crbug.com/1050754 external/wpt/scroll-animations/css/animation-shorthand.html [ Failure ] -crbug.com/1050754 external/wpt/scroll-animations/css/animation-timeline-computed.html [ Failure ] -crbug.com/1050754 external/wpt/scroll-animations/css/animation-timeline-in-keyframe.html [ Failure ] -crbug.com/1050754 external/wpt/scroll-animations/css/animation-timeline-none.html [ Failure ] -crbug.com/1050754 external/wpt/scroll-animations/css/animation-timeline-parsing.html [ Failure ] -crbug.com/1050754 external/wpt/scroll-animations/css/at-scroll-timeline-before-phase.html [ Failure ] -crbug.com/1050754 external/wpt/scroll-animations/css/at-scroll-timeline-cascade.html [ Failure ] -crbug.com/1050754 external/wpt/scroll-animations/css/at-scroll-timeline-dynamic.tentative.html [ Failure ] -crbug.com/1050754 external/wpt/scroll-animations/css/at-scroll-timeline-element-offsets.html [ Failure ] -crbug.com/1050754 external/wpt/scroll-animations/css/at-scroll-timeline-inactive-phase.html [ Failure ] -crbug.com/1050754 external/wpt/scroll-animations/css/at-scroll-timeline-offset-invalidation.tentative.html [ Failure ] -crbug.com/1050754 external/wpt/scroll-animations/css/at-scroll-timeline-orientation.html [ Failure ] -crbug.com/1050754 external/wpt/scroll-animations/css/at-scroll-timeline-sampling.html [ Failure ] -crbug.com/1050754 external/wpt/scroll-animations/css/at-scroll-timeline-source-invalidation.tentative.html [ Failure ] -crbug.com/1050754 external/wpt/scroll-animations/css/at-scroll-timeline-source.html [ Failure ] -crbug.com/1050754 external/wpt/scroll-animations/css/at-scroll-timeline-start-end.html [ Failure ] -crbug.com/1050754 external/wpt/scroll-animations/css/scroll-timeline-cssom.tentative.html [ Failure ] -crbug.com/1050754 external/wpt/scroll-animations/current-time-nan.html [ Failure ] -crbug.com/1050754 external/wpt/scroll-animations/current-time-root-scroller.html [ Failure ] -crbug.com/1050754 external/wpt/scroll-animations/current-time-writing-modes.html [ Failure ] -crbug.com/1050754 external/wpt/scroll-animations/current-time.html [ Failure ] -crbug.com/1050754 external/wpt/scroll-animations/element-based-offset-clamp.html [ Failure ] -crbug.com/1050754 external/wpt/scroll-animations/element-based-offset-unresolved.html [ Failure ] -crbug.com/1050754 external/wpt/scroll-animations/element-based-offset.html [ Failure ] -crbug.com/1050754 external/wpt/scroll-animations/finish-animation.html [ Failure ] -crbug.com/1050754 external/wpt/scroll-animations/idlharness.window.html [ Failure Pass ] -crbug.com/1050754 external/wpt/scroll-animations/pause-animation.html [ Failure ] -crbug.com/1050754 external/wpt/scroll-animations/play-animation.html [ Failure ] -crbug.com/1050754 external/wpt/scroll-animations/reverse-animation.html [ Failure ] -crbug.com/1050754 external/wpt/scroll-animations/scroll-animation-effect-phases.tentative.html [ Failure ] -crbug.com/1050754 external/wpt/scroll-animations/scroll-animation-inactive-timeline.html [ Failure ] -crbug.com/1050754 external/wpt/scroll-animations/scroll-animation.html [ Failure ] -crbug.com/1050754 external/wpt/scroll-animations/scroll-timeline-invalidation.html [ Failure ] -crbug.com/1050754 external/wpt/scroll-animations/scroll-timeline-phases.tentative.html [ Failure ] -crbug.com/1050754 external/wpt/scroll-animations/scroll-timeline-snapshotting.html [ Failure ] -crbug.com/1050754 external/wpt/scroll-animations/setting-current-time.html [ Failure ] -crbug.com/1050754 external/wpt/scroll-animations/setting-playback-rate.html [ Failure ] -crbug.com/1050754 external/wpt/scroll-animations/setting-start-time.html [ Failure ] -crbug.com/1050754 external/wpt/scroll-animations/setting-timeline.tentative.html [ Failure ] -crbug.com/1050754 external/wpt/scroll-animations/update-playback-rate.html [ Failure ] -crbug.com/1050754 external/wpt/scroll-animations/updating-the-finished-state.html [ Failure ] -crbug.com/1050754 external/wpt/scroll-to-text-fragment/scroll-to-text-fragment-security.sub.html [ Failure ] -crbug.com/1050754 external/wpt/scroll-to-text-fragment/scroll-to-text-fragment.html [ Failure ] -crbug.com/1050754 external/wpt/secure-contexts/basic-dedicated-worker.html [ Failure Pass ] -crbug.com/1050754 external/wpt/secure-contexts/basic-popup-and-iframe-tests.html [ Failure Pass ] -crbug.com/1050754 external/wpt/secure-contexts/basic-popup-and-iframe-tests.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/secure-contexts/basic-shared-worker.html [ Failure Pass ] -crbug.com/1050754 external/wpt/secure-contexts/basic-shared-worker.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/secure-contexts/shared-worker-insecure-first.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/secure-contexts/shared-worker-secure-first.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/secure-payment-confirmation/secure-payment-confirmation.tenative.https.html [ Failure ] -crbug.com/1050754 external/wpt/selection/Document-open.html [ Failure Pass ] -crbug.com/1050754 external/wpt/selection/addRange-52.html [ Failure ] -crbug.com/1050754 external/wpt/selection/removeRange.html [ Failure Pass ] -crbug.com/1050754 external/wpt/selection/script-and-style-elements.html [ Failure Pass ] -crbug.com/1050754 external/wpt/selection/setBaseAndExtent.html [ Failure Pass ] -crbug.com/1050754 external/wpt/serial/serial-allowed-by-feature-policy-attribute-redirect-on-load.https.sub.html [ Timeout ] -crbug.com/1050754 external/wpt/serial/serial-allowed-by-feature-policy-attribute.https.sub.html [ Timeout ] -crbug.com/1050754 external/wpt/serial/serial-allowed-by-feature-policy.https.sub.html [ Timeout ] -crbug.com/1050754 external/wpt/serial/serial-default-feature-policy.https.sub.html [ Timeout ] -crbug.com/1050754 external/wpt/serial/serial-disabled-by-feature-policy.https.sub.html [ Timeout ] -crbug.com/1050754 external/wpt/server-timing/server_timing_header-parsing.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/service-workers/cache-storage/serviceworker/cache-keys-attributes-for-service-worker.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/service-workers/cache-storage/sandboxed-iframes.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/service-workers/idlharness.https.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/service-workers/service-worker/Service-Worker-Allowed-header.https.html [ Failure ] -crbug.com/1050754 external/wpt/service-workers/service-worker/ServiceWorkerGlobalScope/extendable-message-event.https.html [ Failure ] -crbug.com/1050754 external/wpt/service-workers/service-worker/ServiceWorkerGlobalScope/registration-attribute.https.html [ Failure ] -crbug.com/1050754 external/wpt/service-workers/service-worker/about-blank-replacement.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/service-workers/service-worker/active.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/service-workers/service-worker/claim-shared-worker-fetch.https.html [ Failure ] -crbug.com/1050754 external/wpt/service-workers/service-worker/claim-using-registration.https.html [ Failure ] -crbug.com/1050754 external/wpt/service-workers/service-worker/claim-worker-fetch.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/service-workers/service-worker/client-navigate.https.html [ Failure Pass Timeout ] -crbug.com/1050754 external/wpt/service-workers/service-worker/clients-get-client-types.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/service-workers/service-worker/clients-get.https.html [ Failure ] -crbug.com/1050754 external/wpt/service-workers/service-worker/clients-matchall-client-types.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/service-workers/service-worker/clients-matchall-exact-controller.https.html [ Failure ] -crbug.com/1050754 external/wpt/service-workers/service-worker/clients-matchall-frozen.https.html [ Timeout ] -crbug.com/1050754 external/wpt/service-workers/service-worker/clients-matchall-include-uncontrolled.https.html [ Failure ] -crbug.com/1050754 external/wpt/service-workers/service-worker/clients-matchall-order.https.html [ Timeout ] -crbug.com/1050754 external/wpt/service-workers/service-worker/clients-matchall.https.html [ Failure ] -crbug.com/1050754 external/wpt/service-workers/service-worker/dedicated-worker-service-worker-interception.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/service-workers/service-worker/detached-context.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/service-workers/service-worker/fetch-audio-tainting.https.html [ Timeout ] -crbug.com/1050754 external/wpt/service-workers/service-worker/fetch-canvas-tainting-video-cache.https.html [ Failure ] -crbug.com/1050754 external/wpt/service-workers/service-worker/fetch-canvas-tainting-video-with-range-request.https.html [ Timeout ] -crbug.com/1050754 external/wpt/service-workers/service-worker/fetch-canvas-tainting-video.https.html [ Failure ] -crbug.com/1050754 external/wpt/service-workers/service-worker/fetch-error.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/service-workers/service-worker/fetch-event-redirect.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/service-workers/service-worker/fetch-event-referrer-policy.https.html [ Failure ] -crbug.com/1050754 external/wpt/service-workers/service-worker/fetch-event-respond-with-custom-response.https.html [ Failure ] -crbug.com/1050754 external/wpt/service-workers/service-worker/fetch-event-respond-with-readable-stream.https.html [ Failure ] -crbug.com/1050754 external/wpt/service-workers/service-worker/fetch-event-worker-timing-frame.tentative.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/service-workers/service-worker/fetch-event.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/service-workers/service-worker/fetch-header-visibility.https.html [ Failure ] -crbug.com/1050754 external/wpt/service-workers/service-worker/fetch-request-css-base-url.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/service-workers/service-worker/fetch-request-css-cross-origin.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/service-workers/service-worker/fetch-request-redirect.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/service-workers/service-worker/fetch-request-xhr-sync.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/service-workers/service-worker/fetch-request-xhr.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/service-workers/service-worker/fetch-waits-for-activate.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/service-workers/service-worker/import-scripts-redirect.https.html [ Failure Timeout ] -crbug.com/1050754 external/wpt/service-workers/service-worker/local-url-inherit-controller.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/service-workers/service-worker/navigate-window.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/service-workers/service-worker/navigation-redirect.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/service-workers/service-worker/performance-timeline.https.html [ Pass Timeout ] -crbug.com/1050754 external/wpt/service-workers/service-worker/postmessage-to-client-message-queue.https.html [ Failure ] -crbug.com/1050754 external/wpt/service-workers/service-worker/postmessage.https.html [ Failure ] -crbug.com/1050754 external/wpt/service-workers/service-worker/ready.https.window.html [ Timeout ] -crbug.com/1050754 external/wpt/service-workers/service-worker/register-default-scope.https.html [ Failure ] -crbug.com/1050754 external/wpt/service-workers/service-worker/register-same-scope-different-script-url.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/service-workers/service-worker/registration-mime-types.https.html [ Failure ] -crbug.com/1050754 external/wpt/service-workers/service-worker/registration-schedule-job.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/service-workers/service-worker/registration-script-module.https.html [ Failure ] -crbug.com/1050754 external/wpt/service-workers/service-worker/registration-updateviacache.https.html [ Failure Timeout ] -crbug.com/1050754 external/wpt/service-workers/service-worker/request-end-to-end.https.html [ Failure ] -crbug.com/1050754 external/wpt/service-workers/service-worker/unregister-immediately-during-extendable-events.https.html [ Timeout ] -crbug.com/1050754 external/wpt/service-workers/service-worker/unregister-then-register-new-script.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/service-workers/service-worker/unregister-then-register.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/service-workers/service-worker/update-after-navigation-fetch-event.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/service-workers/service-worker/update-after-oneday.https.html [ Timeout ] -crbug.com/1050754 external/wpt/service-workers/service-worker/update-bytecheck.https.html [ Failure ] -crbug.com/1050754 external/wpt/service-workers/service-worker/update-import-scripts.https.html [ Failure ] -crbug.com/1050754 external/wpt/service-workers/service-worker/update-no-cache-request-headers.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/service-workers/service-worker/update-not-allowed.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/service-workers/service-worker/update-on-navigation.https.html [ Pass Timeout ] -crbug.com/1050754 external/wpt/service-workers/service-worker/update-recovery.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/service-workers/service-worker/update-registration-with-type.https.html [ Failure ] -crbug.com/1050754 external/wpt/service-workers/service-worker/update.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/service-workers/service-worker/windowclient-navigate.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/service-workers/service-worker/worker-client-id.https.html [ Failure ] -crbug.com/1050754 external/wpt/service-workers/service-worker/worker-interception-redirect.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/shadow-dom/MouseEvent-prototype-offsetX-offsetY.html [ Failure ] -crbug.com/1050754 external/wpt/shadow-dom/capturing-and-bubbling-event-listeners-across-shadow-trees.html [ Failure Pass ] -crbug.com/1050754 external/wpt/shadow-dom/declarative/declarative-shadow-dom-attachment.tentative.html [ Failure ] -crbug.com/1050754 external/wpt/shadow-dom/declarative/declarative-shadow-dom-basic.tentative.html [ Failure ] -crbug.com/1050754 external/wpt/shadow-dom/declarative/getinnerhtml.tentative.html [ Failure ] -crbug.com/1050754 external/wpt/shadow-dom/declarative/innerhtml-before-closing-tag.html [ Failure ] -crbug.com/1050754 external/wpt/shadow-dom/declarative/move-template-before-closing-tag.html [ Failure ] -crbug.com/1050754 external/wpt/shadow-dom/declarative/script-access.tentative.html [ Failure ] -crbug.com/1050754 external/wpt/shadow-dom/focus/click-focus-delegatesFocus-tabindex-varies.html [ Failure ] -crbug.com/1050754 external/wpt/shadow-dom/focus/focus-selector-delegatesFocus.html [ Failure Pass ] -crbug.com/1050754 external/wpt/shadow-dom/offsetParent-across-shadow-boundaries.html [ Failure Pass ] -crbug.com/1050754 external/wpt/shadow-dom/slots-imperative-api-slotchange.tentative.html [ Failure Pass ] -crbug.com/1050754 external/wpt/shadow-dom/slots-imperative-slot-api.tentative.html [ Failure Pass ] -crbug.com/1050754 external/wpt/shadow-dom/untriaged/events/event-dispatch/test-003.html [ Timeout ] -crbug.com/1050754 external/wpt/shadow-dom/untriaged/events/retargeting-focus-events/test-002.html [ Failure ] -crbug.com/1050754 external/wpt/shadow-dom/untriaged/events/retargeting-focus-events/test-003.html [ Failure ] -crbug.com/1050754 external/wpt/shape-detection/detected-boundingBox-read-only.https.html [ Failure ] -crbug.com/1050754 external/wpt/shape-detection/detected-postMessage.https.html [ Failure ] -crbug.com/1050754 external/wpt/shape-detection/detection-HTMLCanvasElement.https.html [ Failure ] -crbug.com/1050754 external/wpt/shape-detection/detection-HTMLImageElement.https.html [ Failure ] -crbug.com/1050754 external/wpt/shape-detection/detection-HTMLVideoElement.https.html [ Failure ] -crbug.com/1050754 external/wpt/shape-detection/detection-ImageBitmap.https.html [ Failure ] -crbug.com/1050754 external/wpt/shape-detection/detection-ImageData-detached.https.html [ Failure ] -crbug.com/1050754 external/wpt/shape-detection/detection-ImageData.https.html [ Failure ] -crbug.com/1050754 external/wpt/shape-detection/detection-getSupportedFormats.https.html [ Failure ] -crbug.com/1050754 external/wpt/shape-detection/detection-on-worker.https.worker.html [ Failure ] -crbug.com/1050754 external/wpt/shape-detection/detection-options.https.html [ Failure ] -crbug.com/1050754 external/wpt/shape-detection/detection-security-test.https.html [ Failure ] -crbug.com/1050754 external/wpt/shape-detection/detector-same-object.https.html [ Failure ] -crbug.com/1050754 external/wpt/shape-detection/idlharness.https.any.html [ Failure ] -crbug.com/1050754 external/wpt/shape-detection/idlharness.https.any.serviceworker.html [ Failure ] -crbug.com/1050754 external/wpt/shape-detection/idlharness.https.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/shape-detection/idlharness.https.any.worker.html [ Failure ] -crbug.com/1050754 external/wpt/shape-detection/shapedetection-cross-origin.sub.https.html [ Failure ] -crbug.com/1050754 external/wpt/shape-detection/shapedetection-empty-input.https.html [ Failure ] -crbug.com/1050754 external/wpt/signed-exchange/check-cert-request.tentative.html [ Failure ] -crbug.com/1050754 external/wpt/signed-exchange/fallback-to-another-sxg.tentative.html [ Failure ] -crbug.com/1050754 external/wpt/signed-exchange/nested-sxg.tentative.html [ Failure Pass ] -crbug.com/1050754 external/wpt/signed-exchange/reporting/sxg-reporting-navigation-cert_fetch_error-downgraded.tentative.html [ Failure Timeout ] -crbug.com/1050754 external/wpt/signed-exchange/reporting/sxg-reporting-navigation-cert_fetch_error.tentative.html [ Failure Timeout ] -crbug.com/1050754 external/wpt/signed-exchange/reporting/sxg-reporting-navigation-cert_parse_error-downgraded.tentative.html [ Failure Timeout ] -crbug.com/1050754 external/wpt/signed-exchange/reporting/sxg-reporting-navigation-cert_parse_error.tentative.html [ Failure Timeout ] -crbug.com/1050754 external/wpt/signed-exchange/reporting/sxg-reporting-navigation-cert_verification_error-downgraded.tentative.html [ Failure Timeout ] -crbug.com/1050754 external/wpt/signed-exchange/reporting/sxg-reporting-navigation-cert_verification_error.tentative.html [ Failure Timeout ] -crbug.com/1050754 external/wpt/signed-exchange/reporting/sxg-reporting-navigation-failed-zero-success-fraction.tentative.html [ Failure ] -crbug.com/1050754 external/wpt/signed-exchange/reporting/sxg-reporting-navigation-invalid_integrity_header.tentative.html [ Failure Timeout ] -crbug.com/1050754 external/wpt/signed-exchange/reporting/sxg-reporting-navigation-mi_error.tentative.html [ Failure Timeout ] -crbug.com/1050754 external/wpt/signed-exchange/reporting/sxg-reporting-navigation-ok-no-referrer.tentative.html [ Failure ] -crbug.com/1050754 external/wpt/signed-exchange/reporting/sxg-reporting-navigation-ok-origin-referrer.tentative.html [ Failure ] -crbug.com/1050754 external/wpt/signed-exchange/reporting/sxg-reporting-navigation-ok.tentative.html [ Failure ] -crbug.com/1050754 external/wpt/signed-exchange/reporting/sxg-reporting-navigation-parse_error.tentative.html [ Failure Timeout ] -crbug.com/1050754 external/wpt/signed-exchange/reporting/sxg-reporting-navigation-signature_verification_error-downgraded.tentative.html [ Failure Timeout ] -crbug.com/1050754 external/wpt/signed-exchange/reporting/sxg-reporting-navigation-signature_verification_error.tentative.html [ Failure Timeout ] -crbug.com/1050754 external/wpt/signed-exchange/reporting/sxg-reporting-prefetch-cert_fetch_error-downgraded.tentative.html [ Timeout ] -crbug.com/1050754 external/wpt/signed-exchange/reporting/sxg-reporting-prefetch-cert_fetch_error.tentative.html [ Timeout ] -crbug.com/1050754 external/wpt/signed-exchange/reporting/sxg-reporting-prefetch-cert_parse_error-downgraded.tentative.html [ Timeout ] -crbug.com/1050754 external/wpt/signed-exchange/reporting/sxg-reporting-prefetch-cert_parse_error.tentative.html [ Timeout ] -crbug.com/1050754 external/wpt/signed-exchange/reporting/sxg-reporting-prefetch-cert_verification_error-downgraded.tentative.html [ Timeout ] -crbug.com/1050754 external/wpt/signed-exchange/reporting/sxg-reporting-prefetch-cert_verification_error.tentative.html [ Timeout ] -crbug.com/1050754 external/wpt/signed-exchange/reporting/sxg-reporting-prefetch-failed-zero-success-feaction.tentative.html [ Failure ] -crbug.com/1050754 external/wpt/signed-exchange/reporting/sxg-reporting-prefetch-invalid_integrity_header.tentative.html [ Timeout ] -crbug.com/1050754 external/wpt/signed-exchange/reporting/sxg-reporting-prefetch-mi_error.tentative.html [ Timeout ] -crbug.com/1050754 external/wpt/signed-exchange/reporting/sxg-reporting-prefetch-ok.tentative.html [ Timeout ] -crbug.com/1050754 external/wpt/signed-exchange/reporting/sxg-reporting-prefetch-parse_error.tentative.html [ Timeout ] -crbug.com/1050754 external/wpt/signed-exchange/reporting/sxg-reporting-prefetch-signature_verification_error-downgraded.tentative.html [ Timeout ] -crbug.com/1050754 external/wpt/signed-exchange/reporting/sxg-reporting-prefetch-signature_verification_error.tentative.html [ Timeout ] -crbug.com/1050754 external/wpt/signed-exchange/service-workers/sxg-sw-register-after-fallback.tentative.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/signed-exchange/service-workers/sxg-sw-register.tentative.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/signed-exchange/subresource/sxg-subresource-header-integrity-mismatch.tentative.html [ Timeout ] -crbug.com/1050754 external/wpt/signed-exchange/subresource/sxg-subresource.tentative.html [ Timeout ] -crbug.com/1050754 external/wpt/signed-exchange/sxg-data-cert-url.tentative.html [ Failure ] -crbug.com/1050754 external/wpt/signed-exchange/sxg-double-prefetch.tentative.html [ Pass Timeout ] -crbug.com/1050754 external/wpt/signed-exchange/sxg-fallback-with-fragment.tentative.html [ Failure Pass ] -crbug.com/1050754 external/wpt/signed-exchange/sxg-hsts.tentative.html [ Failure Pass ] -crbug.com/1050754 external/wpt/signed-exchange/sxg-invalid-validity-url.tentative.html [ Failure Pass ] -crbug.com/1050754 external/wpt/signed-exchange/sxg-location-fragment.tentative.html [ Failure ] -crbug.com/1050754 external/wpt/signed-exchange/sxg-location.tentative.html [ Failure ] -crbug.com/1050754 external/wpt/signed-exchange/sxg-merkle-integrity-error.tentative.html [ Failure ] -crbug.com/1050754 external/wpt/signed-exchange/sxg-navigation-timing.tentative.html [ Failure ] -crbug.com/1050754 external/wpt/signed-exchange/sxg-non-secure-origin.tentative.html [ Failure Pass ] -crbug.com/1050754 external/wpt/signed-exchange/sxg-noncacheable.tentative.html [ Failure Pass ] -crbug.com/1050754 external/wpt/signed-exchange/sxg-prefetch-resource-timing.tentative.html [ Failure Timeout ] -crbug.com/1050754 external/wpt/signed-exchange/sxg-prefetch.tentative.https.html [ Failure ] -crbug.com/1050754 external/wpt/signed-exchange/sxg-referrer-policy-header.tentative.https.html [ Failure Timeout ] -crbug.com/1050754 external/wpt/signed-exchange/sxg-referrer-remote-physical-remote-logical.tentative.https.html [ Failure Timeout ] -crbug.com/1050754 external/wpt/signed-exchange/sxg-referrer-remote-physical-same-logical.tentative.https.html [ Failure Timeout ] -crbug.com/1050754 external/wpt/signed-exchange/sxg-referrer-same-physical-remote-logical.tentative.https.html [ Failure Timeout ] -crbug.com/1050754 external/wpt/signed-exchange/sxg-referrer-same-physical-same-logical.tentative.https.html [ Failure Timeout ] -crbug.com/1050754 external/wpt/signed-exchange/sxg-utf8-inner-url.tentative.html [ Failure ] -crbug.com/1050754 external/wpt/signed-exchange/sxg-variants-match.tentative.html [ Failure ] -crbug.com/1050754 external/wpt/signed-exchange/sxg-variants-mismatch.tentative.html [ Failure Pass ] -crbug.com/1050754 external/wpt/signed-exchange/sxg-version1b2.tentative.html [ Failure Pass ] -crbug.com/1050754 external/wpt/speech-api/SpeechRecognition-basics.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/speech-api/SpeechSynthesis-pause-resume.tentative.html [ Failure ] -crbug.com/1050754 external/wpt/speech-api/SpeechSynthesis-speak-events.html [ Failure ] -crbug.com/1050754 external/wpt/speech-api/SpeechSynthesis-speak-twice.html [ Failure ] -crbug.com/1050754 external/wpt/speech-api/SpeechSynthesis-speak-without-activation-fails.tentative.html [ Failure ] -crbug.com/1050754 external/wpt/speech-api/SpeechSynthesisErrorEvent-constructor.html [ Failure ] -crbug.com/1050754 external/wpt/speech-api/SpeechSynthesisEvent-constructor.html [ Failure ] -crbug.com/1050754 external/wpt/speech-api/SpeechSynthesisUtterance-basics.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/speech-api/historical.html [ Failure Pass ] -crbug.com/1050754 external/wpt/speech-api/idlharness.window.html [ Failure Pass ] -crbug.com/1050754 external/wpt/storage-access-api/hasStorageAccess.sub.window.html [ Timeout ] -crbug.com/1050754 external/wpt/storage-access-api/idlharness.window.html [ Failure ] -crbug.com/1050754 external/wpt/storage-access-api/requestStorageAccess.sub.window.html [ Crash Failure ] -crbug.com/1050754 external/wpt/storage-access-api/sandboxAttribute.window.html [ Failure ] -crbug.com/1050754 external/wpt/storage-access-api/storageAccess.testdriver.sub.html [ Failure ] -crbug.com/1050754 external/wpt/storage/permission-query.https.any.html [ Failure ] -crbug.com/1050754 external/wpt/storage/permission-query.https.any.worker.html [ Failure ] -crbug.com/1050754 external/wpt/streams/idlharness.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/streams/transferable/shared-worker.html [ Failure ] -crbug.com/1050754 external/wpt/svg/animations/end-attribute-change-end-time.html [ Failure Pass ] -crbug.com/1050754 external/wpt/svg/animations/scripted/onhover-syncbases.html [ Failure Pass ] -crbug.com/1050754 external/wpt/svg/coordinate-systems/outer-svg-intrinsic-size-001.html [ Failure ] -crbug.com/1050754 external/wpt/svg/coordinate-systems/outer-svg-intrinsic-size-002.html [ Failure ] -crbug.com/1050754 external/wpt/svg/extensibility/foreignObject/containing-block.html [ Failure Pass ] -crbug.com/1050754 external/wpt/svg/geometry/parsing/cx-invalid.svg [ Failure Pass ] -crbug.com/1050754 external/wpt/svg/geometry/parsing/cy-invalid.svg [ Failure Pass ] -crbug.com/1050754 external/wpt/svg/geometry/parsing/height-computed.svg [ Failure Pass ] -crbug.com/1050754 external/wpt/svg/geometry/parsing/r-invalid.svg [ Failure Pass ] -crbug.com/1050754 external/wpt/svg/geometry/parsing/rx-invalid.svg [ Failure Pass ] -crbug.com/1050754 external/wpt/svg/geometry/parsing/ry-invalid.svg [ Failure Pass ] -crbug.com/1050754 external/wpt/svg/geometry/parsing/width-computed.svg [ Failure Pass ] -crbug.com/1050754 external/wpt/svg/geometry/parsing/x-invalid.svg [ Failure Pass ] -crbug.com/1050754 external/wpt/svg/geometry/parsing/y-invalid.svg [ Failure Pass ] -crbug.com/1050754 external/wpt/svg/geometry/svg-baseval-in-display-none.html [ Failure Pass ] -crbug.com/1050754 external/wpt/svg/idlharness.window.html [ Failure Pass ] -crbug.com/1050754 external/wpt/svg/interact/scripted/composed.window.svg [ Timeout ] -crbug.com/1050754 external/wpt/svg/interact/scripted/focus-events.svg [ Timeout ] -crbug.com/1050754 external/wpt/svg/interact/scripted/tabindex-focus-flag.svg [ Failure Pass ] -crbug.com/1050754 external/wpt/svg/linking/scripted/a.rel-getter-01.svg [ Failure Pass ] -crbug.com/1050754 external/wpt/svg/linking/scripted/a.text-getter-01.svg [ Failure Pass ] -crbug.com/1050754 external/wpt/svg/linking/scripted/a.text-setter-01.svg [ Failure Pass ] -crbug.com/1050754 external/wpt/svg/linking/scripted/href-animate-element.html [ Timeout ] -crbug.com/1050754 external/wpt/svg/linking/scripted/href-mpath-element.html [ Timeout ] -crbug.com/1050754 external/wpt/svg/linking/scripted/rellist-feature-detection.svg [ Failure Pass ] -crbug.com/1050754 external/wpt/svg/painting/inheritance.svg [ Failure Pass ] -crbug.com/1050754 external/wpt/svg/painting/parsing/fill-valid.svg [ Failure Pass ] -crbug.com/1050754 external/wpt/svg/painting/parsing/image-rendering-computed.svg [ Failure Pass ] -crbug.com/1050754 external/wpt/svg/painting/parsing/image-rendering-valid.svg [ Failure Pass ] -crbug.com/1050754 external/wpt/svg/painting/parsing/stroke-dashoffset-valid.svg [ Failure Pass ] -crbug.com/1050754 external/wpt/svg/painting/parsing/stroke-linejoin-valid.svg [ Failure Pass ] -crbug.com/1050754 external/wpt/svg/painting/parsing/stroke-valid.svg [ Failure Pass ] -crbug.com/1050754 external/wpt/svg/painting/parsing/stroke-width-computed.svg [ Failure ] -crbug.com/1050754 external/wpt/svg/painting/parsing/stroke-width-valid.svg [ Failure Pass ] -crbug.com/1050754 external/wpt/svg/pservers/parsing/stop-color-invalid.svg [ Failure Pass ] -crbug.com/1050754 external/wpt/svg/shapes/animatedPoints-non-animated.html [ Failure Pass ] -crbug.com/1050754 external/wpt/svg/struct/UnknownElement/interface.svg [ Failure Pass ] -crbug.com/1050754 external/wpt/svg/struct/scripted/autofocus-attribute.svg [ Failure Pass ] -crbug.com/1050754 external/wpt/svg/styling/presentation-attributes-irrelevant.html [ Failure Pass ] -crbug.com/1050754 external/wpt/svg/styling/presentation-attributes-relevant.html [ Failure Pass ] -crbug.com/1050754 external/wpt/svg/styling/presentation-attributes-special-cases.html [ Failure Pass ] -crbug.com/1050754 external/wpt/svg/styling/presentation-attributes-unknown.html [ Failure Pass ] -crbug.com/1050754 external/wpt/svg/styling/required-properties.svg [ Failure Pass ] -crbug.com/1050754 external/wpt/svg/text/inheritance.svg [ Failure Pass ] -crbug.com/1050754 external/wpt/svg/text/parsing/shape-inside-valid.svg [ Failure Pass ] -crbug.com/1050754 external/wpt/svg/text/parsing/shape-subtract-valid.svg [ Failure Pass ] -crbug.com/1050754 external/wpt/svg/text/parsing/text-decoration-fill-valid.svg [ Failure Pass ] -crbug.com/1050754 external/wpt/svg/text/parsing/text-decoration-stroke-valid.svg [ Failure Pass ] -crbug.com/1050754 external/wpt/svg/types/elements/SVGGeometryElement-rect.svg [ Failure Pass ] -crbug.com/1050754 external/wpt/svg/types/scripted/SVGAnimatedRect.html [ Failure Pass ] -crbug.com/1050754 external/wpt/svg/types/scripted/SVGGeometryElement.isPointInFill-01.svg [ Failure Pass ] -crbug.com/1050754 external/wpt/svg/types/scripted/SVGGeometryElement.isPointInStroke-01.svg [ Failure Pass ] -crbug.com/1050754 external/wpt/svg/types/scripted/SVGGraphicsElement.getBBox-02.html [ Failure ] -crbug.com/1050754 external/wpt/svg/types/scripted/SVGGraphicsElement.svg [ Failure Pass ] -crbug.com/1050754 external/wpt/svg/types/scripted/SVGLength-px.html [ Failure Pass ] -crbug.com/1050754 external/wpt/touch-events/idlharness.window.html [ Failure Pass ] -crbug.com/1050754 external/wpt/trust-tokens/end-to-end/has-trust-token-with-no-top-frame.tentative.https.html [ Failure ] -crbug.com/1050754 external/wpt/trust-tokens/trust-token-parameter-validation-xhr.tentative.https.html [ Failure ] -crbug.com/1050754 external/wpt/trust-tokens/trust-token-parameter-validation.tentative.https.html [ Failure ] -crbug.com/1050754 external/wpt/ua-client-hints/idlharness.https.any.html [ Failure Pass ] -crbug.com/1050754 external/wpt/ua-client-hints/idlharness.https.any.worker.html [ Failure Pass ] -crbug.com/1050754 external/wpt/uievents/legacy/Event-subclasses-init.html [ Failure Pass ] -crbug.com/1050754 external/wpt/uievents/order-of-events/focus-events/focus-automated-blink-webkit.html [ Timeout ] -crbug.com/1050754 external/wpt/uievents/order-of-events/mouse-events/wheel-basic.html [ Timeout ] -crbug.com/1050754 external/wpt/upgrade-insecure-requests/gen/iframe-blank-inherit.meta/unset/iframe-tag.https.html [ Timeout ] -crbug.com/1050754 external/wpt/upgrade-insecure-requests/gen/iframe-blank-inherit.meta/unset/worklet-audio.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/upgrade-insecure-requests/gen/iframe-blank-inherit.meta/unset/worklet-paint.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/upgrade-insecure-requests/gen/iframe-blank-inherit.meta/unset/xhr.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/upgrade-insecure-requests/gen/iframe-blank-inherit.meta/upgrade/sharedworker-classic.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/upgrade-insecure-requests/gen/iframe-blank-inherit.meta/upgrade/sharedworker-import-data.https.html [ Failure ] -crbug.com/1050754 external/wpt/upgrade-insecure-requests/gen/iframe-blank-inherit.meta/upgrade/sharedworker-import.https.html [ Failure ] -crbug.com/1050754 external/wpt/upgrade-insecure-requests/gen/iframe-blank-inherit.meta/upgrade/sharedworker-module.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/upgrade-insecure-requests/gen/iframe-blank-inherit.meta/upgrade/websocket.https.html [ Failure ] -crbug.com/1050754 external/wpt/upgrade-insecure-requests/gen/iframe-blank-inherit.meta/upgrade/worker-classic.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/upgrade-insecure-requests/gen/iframe-blank-inherit.meta/upgrade/worker-import.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/upgrade-insecure-requests/gen/iframe-blank-inherit.meta/upgrade/worker-module.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/upgrade-insecure-requests/gen/iframe-blank-inherit.meta/upgrade/worklet-animation-import-data.https.html [ Failure ] -crbug.com/1050754 external/wpt/upgrade-insecure-requests/gen/iframe-blank-inherit.meta/upgrade/worklet-animation.https.html [ Failure ] -crbug.com/1050754 external/wpt/upgrade-insecure-requests/gen/iframe-blank-inherit.meta/upgrade/worklet-audio.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/upgrade-insecure-requests/gen/iframe-blank-inherit.meta/upgrade/worklet-layout-import-data.https.html [ Failure ] -crbug.com/1050754 external/wpt/upgrade-insecure-requests/gen/iframe-blank-inherit.meta/upgrade/worklet-layout.https.html [ Failure ] -crbug.com/1050754 external/wpt/upgrade-insecure-requests/gen/iframe-blank-inherit.meta/upgrade/worklet-paint.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/upgrade-insecure-requests/gen/sharedworker-classic-data.http-rp/upgrade/fetch.https.html [ Failure ] -crbug.com/1050754 external/wpt/upgrade-insecure-requests/gen/sharedworker-classic-data.http-rp/upgrade/websocket.https.html [ Failure ] -crbug.com/1050754 external/wpt/upgrade-insecure-requests/gen/sharedworker-classic-data.http-rp/upgrade/xhr.https.html [ Failure ] -crbug.com/1050754 external/wpt/upgrade-insecure-requests/gen/sharedworker-classic-data.meta/upgrade/fetch.https.html [ Failure ] -crbug.com/1050754 external/wpt/upgrade-insecure-requests/gen/sharedworker-classic-data.meta/upgrade/websocket.https.html [ Failure ] -crbug.com/1050754 external/wpt/upgrade-insecure-requests/gen/sharedworker-classic-data.meta/upgrade/xhr.https.html [ Failure ] -crbug.com/1050754 external/wpt/upgrade-insecure-requests/gen/sharedworker-classic.http-rp/upgrade/fetch.https.html [ Failure ] -crbug.com/1050754 external/wpt/upgrade-insecure-requests/gen/sharedworker-classic.http-rp/upgrade/websocket.https.html [ Failure ] -crbug.com/1050754 external/wpt/upgrade-insecure-requests/gen/sharedworker-classic.http-rp/upgrade/xhr.https.html [ Failure ] -crbug.com/1050754 external/wpt/upgrade-insecure-requests/gen/sharedworker-module-data.http-rp/upgrade/fetch.https.html [ Failure ] -crbug.com/1050754 external/wpt/upgrade-insecure-requests/gen/sharedworker-module-data.http-rp/upgrade/websocket.https.html [ Failure ] -crbug.com/1050754 external/wpt/upgrade-insecure-requests/gen/sharedworker-module-data.http-rp/upgrade/xhr.https.html [ Failure ] -crbug.com/1050754 external/wpt/upgrade-insecure-requests/gen/sharedworker-module-data.meta/unset/xhr.https.html [ Failure ] -crbug.com/1050754 external/wpt/upgrade-insecure-requests/gen/sharedworker-module-data.meta/upgrade/fetch.https.html [ Failure ] -crbug.com/1050754 external/wpt/upgrade-insecure-requests/gen/sharedworker-module-data.meta/upgrade/websocket.https.html [ Failure ] -crbug.com/1050754 external/wpt/upgrade-insecure-requests/gen/sharedworker-module-data.meta/upgrade/xhr.https.html [ Failure ] -crbug.com/1050754 external/wpt/upgrade-insecure-requests/gen/sharedworker-module.http-rp/upgrade/fetch.https.html [ Failure ] -crbug.com/1050754 external/wpt/upgrade-insecure-requests/gen/sharedworker-module.http-rp/upgrade/websocket.https.html [ Failure ] -crbug.com/1050754 external/wpt/upgrade-insecure-requests/gen/sharedworker-module.http-rp/upgrade/xhr.https.html [ Failure ] -crbug.com/1050754 external/wpt/upgrade-insecure-requests/gen/srcdoc-inherit.meta/unset/fetch.https.html [ Failure ] -crbug.com/1050754 external/wpt/upgrade-insecure-requests/gen/srcdoc-inherit.meta/unset/iframe-tag.https.html [ Timeout ] -crbug.com/1050754 external/wpt/upgrade-insecure-requests/gen/srcdoc-inherit.meta/unset/worklet-audio.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/upgrade-insecure-requests/gen/srcdoc-inherit.meta/unset/worklet-layout-import-data.https.html [ Failure ] -crbug.com/1050754 external/wpt/upgrade-insecure-requests/gen/srcdoc-inherit.meta/unset/worklet-paint.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/upgrade-insecure-requests/gen/srcdoc-inherit.meta/upgrade/iframe-tag.https.html [ Failure ] -crbug.com/1050754 external/wpt/upgrade-insecure-requests/gen/srcdoc-inherit.meta/upgrade/sharedworker-classic.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/upgrade-insecure-requests/gen/srcdoc-inherit.meta/upgrade/sharedworker-import-data.https.html [ Failure ] -crbug.com/1050754 external/wpt/upgrade-insecure-requests/gen/srcdoc-inherit.meta/upgrade/sharedworker-import.https.html [ Failure ] -crbug.com/1050754 external/wpt/upgrade-insecure-requests/gen/srcdoc-inherit.meta/upgrade/sharedworker-module.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/upgrade-insecure-requests/gen/srcdoc-inherit.meta/upgrade/worker-classic.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/upgrade-insecure-requests/gen/srcdoc-inherit.meta/upgrade/worker-import.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/upgrade-insecure-requests/gen/srcdoc-inherit.meta/upgrade/worker-module.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/upgrade-insecure-requests/gen/srcdoc-inherit.meta/upgrade/worklet-animation-import-data.https.html [ Failure ] -crbug.com/1050754 external/wpt/upgrade-insecure-requests/gen/srcdoc-inherit.meta/upgrade/worklet-animation.https.html [ Failure ] -crbug.com/1050754 external/wpt/upgrade-insecure-requests/gen/srcdoc-inherit.meta/upgrade/worklet-audio-import-data.https.html [ Failure ] -crbug.com/1050754 external/wpt/upgrade-insecure-requests/gen/srcdoc-inherit.meta/upgrade/worklet-audio.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/upgrade-insecure-requests/gen/srcdoc-inherit.meta/upgrade/worklet-layout-import-data.https.html [ Failure ] -crbug.com/1050754 external/wpt/upgrade-insecure-requests/gen/srcdoc-inherit.meta/upgrade/worklet-layout.https.html [ Failure ] -crbug.com/1050754 external/wpt/upgrade-insecure-requests/gen/srcdoc-inherit.meta/upgrade/worklet-paint.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/upgrade-insecure-requests/gen/top.http-rp/upgrade/iframe-tag.https.html [ Failure ] -crbug.com/1050754 external/wpt/upgrade-insecure-requests/gen/top.http-rp/upgrade/sharedworker-classic.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/upgrade-insecure-requests/gen/top.http-rp/upgrade/sharedworker-import-data.https.html [ Failure ] -crbug.com/1050754 external/wpt/upgrade-insecure-requests/gen/top.http-rp/upgrade/sharedworker-import.https.html [ Failure ] -crbug.com/1050754 external/wpt/upgrade-insecure-requests/gen/top.http-rp/upgrade/sharedworker-module.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/upgrade-insecure-requests/gen/top.http-rp/upgrade/worker-classic.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/upgrade-insecure-requests/gen/top.http-rp/upgrade/worker-module.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/upgrade-insecure-requests/gen/top.http-rp/upgrade/worklet-animation-import-data.https.html [ Failure ] -crbug.com/1050754 external/wpt/upgrade-insecure-requests/gen/top.http-rp/upgrade/worklet-animation.https.html [ Failure ] -crbug.com/1050754 external/wpt/upgrade-insecure-requests/gen/top.http-rp/upgrade/worklet-layout-import-data.https.html [ Failure ] -crbug.com/1050754 external/wpt/upgrade-insecure-requests/gen/top.http-rp/upgrade/worklet-layout.https.html [ Failure ] -crbug.com/1050754 external/wpt/upgrade-insecure-requests/gen/top.meta/unset/iframe-tag.https.html [ Timeout ] -crbug.com/1050754 external/wpt/upgrade-insecure-requests/gen/top.meta/upgrade/sharedworker-classic.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/upgrade-insecure-requests/gen/top.meta/upgrade/sharedworker-import-data.https.html [ Failure ] -crbug.com/1050754 external/wpt/upgrade-insecure-requests/gen/top.meta/upgrade/sharedworker-import.https.html [ Failure ] -crbug.com/1050754 external/wpt/upgrade-insecure-requests/gen/top.meta/upgrade/sharedworker-module.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/upgrade-insecure-requests/gen/top.meta/upgrade/worker-classic.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/upgrade-insecure-requests/gen/top.meta/upgrade/worker-module.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/upgrade-insecure-requests/gen/top.meta/upgrade/worklet-animation-import-data.https.html [ Failure ] -crbug.com/1050754 external/wpt/upgrade-insecure-requests/gen/top.meta/upgrade/worklet-animation.https.html [ Failure ] -crbug.com/1050754 external/wpt/upgrade-insecure-requests/gen/top.meta/upgrade/worklet-layout-import-data.https.html [ Failure ] -crbug.com/1050754 external/wpt/upgrade-insecure-requests/gen/top.meta/upgrade/worklet-layout.https.html [ Failure ] -crbug.com/1050754 external/wpt/upgrade-insecure-requests/link-upgrade.sub.https.html [ Failure ] -crbug.com/1050754 external/wpt/url/a-element-origin-xhtml.xhtml [ Failure ] -crbug.com/1050754 external/wpt/url/a-element-origin.html [ Failure ] -crbug.com/1050754 external/wpt/url/a-element-xhtml.xhtml [ Failure ] -crbug.com/1050754 external/wpt/url/a-element.html [ Failure ] -crbug.com/1050754 external/wpt/url/failure.html [ Failure ] -crbug.com/1050754 external/wpt/url/historical.any.html [ Failure Pass ] -crbug.com/1050754 external/wpt/url/historical.any.worker.html [ Failure Pass ] -crbug.com/1050754 external/wpt/url/toascii.window.html [ Failure Pass ] -crbug.com/1050754 external/wpt/url/url-constructor.html [ Failure ] -crbug.com/1050754 external/wpt/url/url-origin.html [ Failure ] -crbug.com/1050754 external/wpt/url/url-setters.html [ Failure ] -crbug.com/1050754 external/wpt/user-timing/idlharness.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/vibration/silent-ignore.html [ Failure Pass ] -crbug.com/1050754 external/wpt/video-rvfc/request-video-frame-callback-before-xr-session.https.html [ Failure ] -crbug.com/1050754 external/wpt/video-rvfc/request-video-frame-callback-dom.html [ Failure ] -crbug.com/1050754 external/wpt/video-rvfc/request-video-frame-callback-during-xr-session.https.html [ Failure ] -crbug.com/1050754 external/wpt/video-rvfc/request-video-frame-callback-parallel.html [ Failure ] -crbug.com/1050754 external/wpt/video-rvfc/request-video-frame-callback-repeating.html [ Failure ] -crbug.com/1050754 external/wpt/video-rvfc/request-video-frame-callback-webrtc.https.html [ Timeout ] -crbug.com/1050754 external/wpt/video-rvfc/request-video-frame-callback.html [ Failure ] -crbug.com/1050754 external/wpt/visual-viewport/viewport-read-size-causes-layout.html [ Failure ] -crbug.com/1050754 external/wpt/visual-viewport/viewport-scrollbars-cause-resize.html [ Failure ] -crbug.com/1050754 external/wpt/visual-viewport/viewport-unscaled-size.html [ Failure ] -crbug.com/1050754 external/wpt/wasm/jsapi/constructor/multi-value.any.worker.html [ Failure Pass ] -crbug.com/1050754 external/wpt/wasm/jsapi/functions/entry-different-function-realm.html [ Failure Pass ] -crbug.com/1050754 external/wpt/wasm/jsapi/functions/entry.html [ Failure ] -crbug.com/1050754 external/wpt/wasm/jsapi/functions/incumbent.html [ Failure Pass ] -crbug.com/1050754 external/wpt/wasm/jsapi/instance/constructor-caching.any.html [ Failure Pass ] -crbug.com/1050754 external/wpt/wasm/jsapi/instance/constructor-caching.any.worker.html [ Failure Pass ] -crbug.com/1050754 external/wpt/wasm/jsapi/memory/constructor-shared.tentative.any.html [ Failure ] -crbug.com/1050754 external/wpt/wasm/jsapi/memory/constructor-shared.tentative.any.worker.html [ Failure ] -crbug.com/1050754 external/wpt/wasm/jsapi/memory/constructor.any.html [ Failure Pass ] -crbug.com/1050754 external/wpt/wasm/jsapi/memory/constructor.any.worker.html [ Failure Pass ] -crbug.com/1050754 external/wpt/wasm/jsapi/memory/grow.any.html [ Failure ] -crbug.com/1050754 external/wpt/wasm/jsapi/memory/grow.any.worker.html [ Failure ] -crbug.com/1050754 external/wpt/wasm/jsapi/table/grow-reftypes.tentative.any.html [ Failure Pass ] -crbug.com/1050754 external/wpt/wasm/jsapi/table/grow-reftypes.tentative.any.worker.html [ Failure ] -crbug.com/1050754 external/wpt/wasm/serialization/arraybuffer/transfer.window.html [ Failure Pass ] -crbug.com/1050754 external/wpt/wasm/serialization/module/broadcastchannel-success-and-failure.html [ Failure ] -crbug.com/1050754 external/wpt/wasm/serialization/module/broadcastchannel-success.html [ Timeout ] -crbug.com/1050754 external/wpt/wasm/serialization/module/nested-worker-success.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/wasm/serialization/module/no-transferring.html [ Failure ] -crbug.com/1050754 external/wpt/wasm/serialization/module/serialization-via-notifications-api.any.html [ Failure ] -crbug.com/1050754 external/wpt/wasm/serialization/module/serialization-via-notifications-api.any.worker.html [ Failure ] -crbug.com/1050754 external/wpt/wasm/serialization/module/window-sharedworker-failure.html [ Failure ] -crbug.com/1050754 external/wpt/wasm/webapi/body.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/wasm/webapi/contenttype.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/wasm/webapi/empty-body.any.html [ Failure Pass ] -crbug.com/1050754 external/wpt/wasm/webapi/empty-body.any.serviceworker.html [ Failure Pass ] -crbug.com/1050754 external/wpt/wasm/webapi/empty-body.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/wasm/webapi/empty-body.any.worker.html [ Failure Pass ] -crbug.com/1050754 external/wpt/wasm/webapi/historical.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/wasm/webapi/instantiateStreaming-bad-imports.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/wasm/webapi/instantiateStreaming.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/wasm/webapi/invalid-args.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/wasm/webapi/invalid-code.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/wasm/webapi/origin.sub.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/wasm/webapi/rejected-arg.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/wasm/webapi/status.any.html [ Timeout ] -crbug.com/1050754 external/wpt/wasm/webapi/status.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/wasm/webapi/status.any.worker.html [ Timeout ] -crbug.com/1050754 external/wpt/web-animations/animation-model/animation-types/accumulation-per-property-001.html [ Failure Pass ] -crbug.com/1050754 external/wpt/web-animations/animation-model/animation-types/accumulation-per-property-002.html [ Failure Pass ] -crbug.com/1050754 external/wpt/web-animations/animation-model/animation-types/addition-per-property-001.html [ Failure Pass ] -crbug.com/1050754 external/wpt/web-animations/animation-model/animation-types/addition-per-property-002.html [ Failure Pass ] -crbug.com/1050754 external/wpt/web-animations/animation-model/animation-types/interpolation-per-property-001.html [ Failure Pass ] -crbug.com/1050754 external/wpt/web-animations/animation-model/animation-types/interpolation-per-property-002.html [ Failure Pass ] -crbug.com/1050754 external/wpt/web-animations/animation-model/combining-effects/applying-interpolated-transform.html [ Failure Pass ] -crbug.com/1050754 external/wpt/web-animations/animation-model/combining-effects/effect-composition.html [ Failure Pass ] -crbug.com/1050754 external/wpt/web-animations/animation-model/keyframe-effects/computed-keyframes-shorthands.html [ Failure Pass ] -crbug.com/1050754 external/wpt/web-animations/animation-model/keyframe-effects/effect-value-context-filling.html [ Failure Pass ] -crbug.com/1050754 external/wpt/web-animations/animation-model/keyframe-effects/effect-value-context.html [ Failure Pass ] -crbug.com/1050754 external/wpt/web-animations/animation-model/keyframe-effects/effect-value-iteration-composite-operation.html [ Failure Pass ] -crbug.com/1050754 external/wpt/web-animations/animation-model/keyframe-effects/effect-value-replaced-animations.html [ Failure Pass ] -crbug.com/1050754 external/wpt/web-animations/interfaces/Animatable/animate-no-browsing-context.html [ Failure Pass ] -crbug.com/1050754 external/wpt/web-animations/interfaces/Animatable/animate.html [ Failure Pass ] -crbug.com/1050754 external/wpt/web-animations/interfaces/Animatable/getAnimations.html [ Failure Pass ] -crbug.com/1050754 external/wpt/web-animations/interfaces/Animation/cancel.html [ Failure Pass ] -crbug.com/1050754 external/wpt/web-animations/interfaces/Animation/commitStyles.html [ Failure Pass ] -crbug.com/1050754 external/wpt/web-animations/interfaces/Animation/constructor.html [ Failure Pass ] -crbug.com/1050754 external/wpt/web-animations/interfaces/Animation/finished.html [ Failure Pass ] -crbug.com/1050754 external/wpt/web-animations/interfaces/Animation/oncancel.html [ Failure Pass ] -crbug.com/1050754 external/wpt/web-animations/interfaces/Animation/onfinish.html [ Failure Pass ] -crbug.com/1050754 external/wpt/web-animations/interfaces/Animation/onremove.html [ Failure Pass ] -crbug.com/1050754 external/wpt/web-animations/interfaces/Animation/pause.html [ Failure Pass ] -crbug.com/1050754 external/wpt/web-animations/interfaces/Animation/pending.html [ Failure Pass ] -crbug.com/1050754 external/wpt/web-animations/interfaces/Animation/persist.html [ Failure Pass ] -crbug.com/1050754 external/wpt/web-animations/interfaces/Animation/play.html [ Failure Pass ] -crbug.com/1050754 external/wpt/web-animations/interfaces/Animation/ready.html [ Failure Pass ] -crbug.com/1050754 external/wpt/web-animations/interfaces/Animation/startTime.html [ Failure Pass ] -crbug.com/1050754 external/wpt/web-animations/interfaces/Animation/style-change-events.html [ Failure Pass ] -crbug.com/1050754 external/wpt/web-animations/interfaces/AnimationEffect/updateTiming.html [ Failure Pass ] -crbug.com/1050754 external/wpt/web-animations/interfaces/AnimationPlaybackEvent/constructor.html [ Failure Pass ] -crbug.com/1050754 external/wpt/web-animations/interfaces/Document/timeline.html [ Failure Pass ] -crbug.com/1050754 external/wpt/web-animations/interfaces/DocumentOrShadowRoot/getAnimations.html [ Failure Pass ] -crbug.com/1050754 external/wpt/web-animations/interfaces/DocumentTimeline/constructor.html [ Failure Pass ] -crbug.com/1050754 external/wpt/web-animations/interfaces/DocumentTimeline/document-timeline-phases.tentative.html [ Failure ] -crbug.com/1050754 external/wpt/web-animations/interfaces/DocumentTimeline/style-change-events.html [ Failure Pass ] -crbug.com/1050754 external/wpt/web-animations/interfaces/KeyframeEffect/composite.html [ Failure Pass ] -crbug.com/1050754 external/wpt/web-animations/interfaces/KeyframeEffect/constructor.html [ Failure Pass ] -crbug.com/1050754 external/wpt/web-animations/interfaces/KeyframeEffect/copy-constructor.html [ Failure Pass ] -crbug.com/1050754 external/wpt/web-animations/interfaces/KeyframeEffect/getKeyframes.html [ Failure Pass ] -crbug.com/1050754 external/wpt/web-animations/interfaces/KeyframeEffect/iterationComposite.html [ Failure Pass ] -crbug.com/1050754 external/wpt/web-animations/interfaces/KeyframeEffect/processing-a-keyframes-argument-001.html [ Failure Pass ] -crbug.com/1050754 external/wpt/web-animations/interfaces/KeyframeEffect/processing-a-keyframes-argument-002.html [ Failure Pass ] -crbug.com/1050754 external/wpt/web-animations/interfaces/KeyframeEffect/setKeyframes.html [ Failure Pass ] -crbug.com/1050754 external/wpt/web-animations/interfaces/KeyframeEffect/style-change-events.html [ Failure Pass ] -crbug.com/1050754 external/wpt/web-animations/interfaces/KeyframeEffect/target.html [ Failure Pass ] -crbug.com/1050754 external/wpt/web-animations/timing-model/animation-effects/current-iteration.html [ Failure Pass ] -crbug.com/1050754 external/wpt/web-animations/timing-model/animations/canceling-an-animation.html [ Failure Pass ] -crbug.com/1050754 external/wpt/web-animations/timing-model/animations/finishing-an-animation.html [ Failure Pass ] -crbug.com/1050754 external/wpt/web-animations/timing-model/animations/pausing-an-animation.html [ Failure Pass ] -crbug.com/1050754 external/wpt/web-animations/timing-model/animations/play-states.html [ Failure Pass ] -crbug.com/1050754 external/wpt/web-animations/timing-model/animations/playing-an-animation.html [ Failure Pass ] -crbug.com/1050754 external/wpt/web-animations/timing-model/animations/reversing-an-animation.html [ Failure Pass ] -crbug.com/1050754 external/wpt/web-animations/timing-model/animations/seamlessly-updating-the-playback-rate-of-an-animation.html [ Failure Pass ] -crbug.com/1050754 external/wpt/web-animations/timing-model/animations/setting-the-playback-rate-of-an-animation.html [ Failure Pass ] -crbug.com/1050754 external/wpt/web-animations/timing-model/animations/setting-the-start-time-of-an-animation.html [ Failure Pass ] -crbug.com/1050754 external/wpt/web-animations/timing-model/animations/setting-the-target-effect-of-an-animation.html [ Failure Pass ] -crbug.com/1050754 external/wpt/web-animations/timing-model/animations/setting-the-timeline-of-an-animation.html [ Failure Timeout ] -crbug.com/1050754 external/wpt/web-animations/timing-model/animations/the-current-time-of-an-animation.html [ Failure Pass ] -crbug.com/1050754 external/wpt/web-animations/timing-model/animations/updating-the-finished-state.html [ Failure Pass ] -crbug.com/1050754 external/wpt/web-animations/timing-model/timelines/document-timelines.html [ Failure Pass ] -crbug.com/1050754 external/wpt/web-animations/timing-model/timelines/timelines.html [ Failure Pass ] -crbug.com/1050754 external/wpt/web-animations/timing-model/timelines/update-and-send-events-replacement.html [ Failure Pass ] -crbug.com/1050754 external/wpt/web-animations/timing-model/timelines/update-and-send-events.html [ Failure ] -crbug.com/1050754 external/wpt/web-bundle/wbn-from-network/wbn-location.tentative.html [ Timeout ] -crbug.com/1050754 external/wpt/web-locks/acquire.tentative.https.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/web-locks/clientids.tentative.https.html [ Failure ] -crbug.com/1050754 external/wpt/web-locks/held.tentative.https.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/web-locks/idlharness.tentative.https.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/web-locks/ifAvailable.tentative.https.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/web-locks/lock-attributes.tentative.https.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/web-locks/mode-exclusive.tentative.https.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/web-locks/mode-mixed.tentative.https.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/web-locks/mode-shared.tentative.https.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/web-locks/non-secure-context.tentative.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/web-locks/query-empty.tentative.https.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/web-locks/resource-names.tentative.https.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/web-locks/secure-context.tentative.https.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/web-locks/signal.tentative.https.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/web-locks/steal.tentative.https.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/web-nfc/NDEFMessage_constructor.https.html [ Failure ] -crbug.com/1050754 external/wpt/web-nfc/NDEFReader_scan.https.html [ Failure ] -crbug.com/1050754 external/wpt/web-nfc/NDEFReader_scan_iframe.https.html [ Failure ] -crbug.com/1050754 external/wpt/web-nfc/NDEFReader_write.https.html [ Failure ] -crbug.com/1050754 external/wpt/web-nfc/NDEFReadingEvent_constructor.https.html [ Failure ] -crbug.com/1050754 external/wpt/web-nfc/NDEFRecord_constructor.https.html [ Failure ] -crbug.com/1050754 external/wpt/web-nfc/idlharness.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/web-nfc/nfc_permission.https.html [ Crash Failure ] -crbug.com/1050754 external/wpt/web-otp/idlharness.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/web-share/canShare-files.tentative.https.html [ Failure ] -crbug.com/1050754 external/wpt/web-share/canShare.tentative.https.html [ Failure ] -crbug.com/1050754 external/wpt/web-share/idlharness.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/web-share/share-consume-activation.https.html [ Failure ] -crbug.com/1050754 external/wpt/web-share/share-empty.https.html [ Failure ] -crbug.com/1050754 external/wpt/web-share/share-sharePromise-internal-slot.https.html [ Timeout ] -crbug.com/1050754 external/wpt/web-share/share-url-invalid.https.html [ Failure ] -crbug.com/1050754 external/wpt/web-share/share-without-user-gesture.https.html [ Failure ] -crbug.com/1050754 external/wpt/webaudio/idlharness.https.window.html [ Failure Pass ] -crbug.com/1050754 external/wpt/webaudio/the-audio-api/processing-model/cycle-without-delay.html [ Failure ] -crbug.com/1050754 external/wpt/webaudio/the-audio-api/processing-model/delay-time-clamping.html [ Failure ] -crbug.com/1050754 external/wpt/webaudio/the-audio-api/processing-model/feedback-delay-time.html [ Failure ] -crbug.com/1050754 external/wpt/webaudio/the-audio-api/the-analysernode-interface/test-analyser-minimum.html [ Pass Timeout ] -crbug.com/1050754 external/wpt/webaudio/the-audio-api/the-analysernode-interface/test-analyser-output.html [ Pass Timeout ] -crbug.com/1050754 external/wpt/webaudio/the-audio-api/the-audiobuffer-interface/audiobuffer-copy-channel.html [ Failure ] -crbug.com/1050754 external/wpt/webaudio/the-audio-api/the-audiobuffersourcenode-interface/active-processing.https.html [ Failure ] -crbug.com/1050754 external/wpt/webaudio/the-audio-api/the-audiocontext-interface/processing-after-resume.https.html [ Failure ] -crbug.com/1050754 external/wpt/webaudio/the-audio-api/the-audioparam-interface/event-insertion.html [ Failure ] -crbug.com/1050754 external/wpt/webaudio/the-audio-api/the-audioworklet-interface/audioworklet-messageport.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/webaudio/the-audio-api/the-audioworklet-interface/audioworklet-postmessage-sharedarraybuffer.https.html [ Timeout ] -crbug.com/1050754 external/wpt/webaudio/the-audio-api/the-audioworklet-interface/audioworkletnode-construction.https.html [ Failure ] -crbug.com/1050754 external/wpt/webaudio/the-audio-api/the-audioworklet-interface/audioworkletprocessor-promises.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/webaudio/the-audio-api/the-audioworklet-interface/process-getter.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/webaudio/the-audio-api/the-audioworklet-interface/process-parameters.https.html [ Pass Timeout ] -crbug.com/1050754 external/wpt/webaudio/the-audio-api/the-audioworklet-interface/processor-construction-port.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/webaudio/the-audio-api/the-audioworklet-interface/suspended-context-messageport.https.html [ Failure ] -crbug.com/1050754 external/wpt/webaudio/the-audio-api/the-biquadfilternode-interface/biquad-automation.html [ Failure ] -crbug.com/1050754 external/wpt/webaudio/the-audio-api/the-biquadfilternode-interface/biquad-getFrequencyResponse.html [ Failure ] -crbug.com/1050754 external/wpt/webaudio/the-audio-api/the-channelmergernode-interface/active-processing.https.html [ Failure ] -crbug.com/1050754 external/wpt/webaudio/the-audio-api/the-constantsourcenode-interface/test-constantsourcenode.html [ Failure ] -crbug.com/1050754 external/wpt/webaudio/the-audio-api/the-convolvernode-interface/active-processing.https.html [ Failure ] -crbug.com/1050754 external/wpt/webaudio/the-audio-api/the-convolvernode-interface/realtime-conv.html [ Failure ] -crbug.com/1050754 external/wpt/webaudio/the-audio-api/the-delaynode-interface/delaynode-channel-count-1.html [ Failure Pass ] -crbug.com/1050754 external/wpt/webaudio/the-audio-api/the-mediaelementaudiosourcenode-interface/cors-check.https.html [ Failure ] -crbug.com/1050754 external/wpt/webaudio/the-audio-api/the-mediaelementaudiosourcenode-interface/no-cors.https.html [ Failure ] -crbug.com/1050754 external/wpt/webauthn/createcredential-badargs-authnrselection.https.html [ Crash Failure ] -crbug.com/1050754 external/wpt/webauthn/createcredential-badargs-challenge.https.html [ Crash Failure ] -crbug.com/1050754 external/wpt/webauthn/createcredential-badargs-user.https.html [ Crash Failure ] -crbug.com/1050754 external/wpt/webauthn/createcredential-excludecredentials.https.html [ Crash Failure ] -crbug.com/1050754 external/wpt/webauthn/createcredential-extensions.https.html [ Crash Failure ] -crbug.com/1050754 external/wpt/webauthn/createcredential-getpublickey.https.html [ Crash Failure ] -crbug.com/1050754 external/wpt/webauthn/createcredential-large-blob-not-supported.https.html [ Crash ] -crbug.com/1050754 external/wpt/webauthn/createcredential-large-blob-supported.https.html [ Crash ] -crbug.com/1050754 external/wpt/webauthn/createcredential-pubkeycredparams.https.html [ Crash Failure ] -crbug.com/1050754 external/wpt/webauthn/createcredential-timeout.https.html [ Crash Failure ] -crbug.com/1050754 external/wpt/webauthn/getcredential-badargs-rpid.https.html [ Crash Failure ] -crbug.com/1050754 external/wpt/webauthn/getcredential-badargs-userverification.https.html [ Crash Failure ] -crbug.com/1050754 external/wpt/webauthn/getcredential-extensions.https.html [ Crash Failure ] -crbug.com/1050754 external/wpt/webauthn/getcredential-large-blob-not-supported.https.html [ Crash ] -crbug.com/1050754 external/wpt/webauthn/getcredential-large-blob-supported.https.html [ Crash ] -crbug.com/1050754 external/wpt/webauthn/getcredential-passing.https.html [ Crash Failure ] -crbug.com/1050754 external/wpt/webauthn/getcredential-rk-passing.https.html [ Crash Failure ] -crbug.com/1050754 external/wpt/webauthn/getcredential-timeout.https.html [ Crash Failure ] -crbug.com/1050754 external/wpt/webauthn/idlharness.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/webauthn/webauthn-testdriver-basic.https.html [ Crash Failure ] -crbug.com/1050754 external/wpt/webcodecs/audio-decoder.https.html [ Failure ] -crbug.com/1050754 external/wpt/webcodecs/video-decoder.https.html [ Failure ] -crbug.com/1050754 external/wpt/webcodecs/video-encoder.https.html [ Failure ] -crbug.com/1050754 external/wpt/webcodecs/video-frame-serialization.html [ Failure ] -crbug.com/1050754 external/wpt/webcodecs/video-frame.html [ Failure ] -crbug.com/1050754 external/wpt/webcodecs/video-track-reader.html [ Failure ] -crbug.com/1050754 external/wpt/webmessaging/broadcastchannel/basics.html [ Failure Pass ] -crbug.com/1050754 external/wpt/webmessaging/broadcastchannel/sandbox.html [ Failure ] -crbug.com/1050754 external/wpt/webmessaging/broadcastchannel/workers.html [ Failure ] -crbug.com/1050754 external/wpt/webmessaging/message-channels/close.html [ Failure Pass ] -crbug.com/1050754 external/wpt/webmessaging/with-options/broken-origin.html [ Failure ] -crbug.com/1050754 external/wpt/webmessaging/with-ports/001.html [ Failure ] -crbug.com/1050754 external/wpt/webmessaging/without-ports/001.html [ Failure ] -crbug.com/1050754 external/wpt/webmidi/idlharness.https.window.html [ Failure Pass ] -crbug.com/1050754 external/wpt/webrtc-extensions/RTCRtpSynchronizationSource-captureTimestamp.html [ Timeout ] -crbug.com/1050754 external/wpt/webrtc-identity/RTCPeerConnection-constructor.html [ Failure Pass ] -crbug.com/1050754 external/wpt/webrtc-identity/RTCPeerConnection-getIdentityAssertion.sub.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/webrtc-identity/RTCPeerConnection-peerIdentity.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/webrtc-identity/idlharness.https.window.html [ Failure Pass ] -crbug.com/1050754 external/wpt/webrtc-encoded-transform/RTCEncodedAudioFrame-serviceworker-failure.https.html [ Failure Timeout ] -crbug.com/1050754 external/wpt/webrtc-encoded-transform/RTCEncodedVideoFrame-serviceworker-failure.https.html [ Failure Timeout ] -crbug.com/1050754 external/wpt/webrtc-encoded-transform/RTCPeerConnection-insertable-streams-audio.https.html [ Timeout ] -crbug.com/1050754 external/wpt/webrtc-encoded-transform/RTCPeerConnection-insertable-streams-errors.https.html [ Timeout ] -crbug.com/1050754 external/wpt/webrtc-encoded-transform/RTCPeerConnection-insertable-streams-legacy.https.html [ Timeout ] -crbug.com/1050754 external/wpt/webrtc-encoded-transform/RTCPeerConnection-insertable-streams-simulcast.https.html [ Timeout ] -crbug.com/1050754 external/wpt/webrtc-encoded-transform/RTCPeerConnection-insertable-streams-video-frames.https.html [ Timeout ] -crbug.com/1050754 external/wpt/webrtc-encoded-transform/RTCPeerConnection-insertable-streams-video.https.html [ Timeout ] -crbug.com/1050754 external/wpt/webrtc-encoded-transform/RTCPeerConnection-insertable-streams-worker.https.html [ Timeout ] -crbug.com/1050754 external/wpt/webrtc-stats/getStats-remote-candidate-address.html [ Timeout ] -crbug.com/1050754 external/wpt/webrtc-svc/RTCRtpParameters-scalability.html [ Failure ] -crbug.com/1050754 external/wpt/webrtc/RTCCertificate-postMessage.html [ Failure Pass ] -crbug.com/1050754 external/wpt/webrtc/RTCCertificate.html [ Failure Pass ] -crbug.com/1050754 external/wpt/webrtc/RTCConfiguration-iceServers.html [ Failure Pass ] -crbug.com/1050754 external/wpt/webrtc/RTCConfiguration-iceTransportPolicy.html [ Failure Pass ] -crbug.com/1050754 external/wpt/webrtc/RTCDTMFSender-insertDTMF.https.html [ Failure ] -crbug.com/1050754 external/wpt/webrtc/RTCDTMFSender-ontonechange-long.https.html [ Failure ] -crbug.com/1050754 external/wpt/webrtc/RTCDTMFSender-ontonechange.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/webrtc/RTCDataChannel-bufferedAmount.html [ Timeout ] -crbug.com/1050754 external/wpt/webrtc/RTCDataChannel-close.html [ Timeout ] -crbug.com/1050754 external/wpt/webrtc/RTCDataChannel-send-blob-order.html [ Timeout ] -crbug.com/1050754 external/wpt/webrtc/RTCDataChannel-send.html [ Timeout ] -crbug.com/1050754 external/wpt/webrtc/RTCDtlsTransport-getRemoteCertificates.html [ Timeout ] -crbug.com/1050754 external/wpt/webrtc/RTCDtlsTransport-state.html [ Timeout ] -crbug.com/1050754 external/wpt/webrtc/RTCIceConnectionState-candidate-pair.https.html [ Timeout ] -crbug.com/1050754 external/wpt/webrtc/RTCIceTransport-extension.https.html [ Failure ] -crbug.com/1050754 external/wpt/webrtc/RTCIceTransport.html [ Timeout ] -crbug.com/1050754 external/wpt/webrtc/RTCPeerConnection-addIceCandidate-connectionSetup.html [ Timeout ] -crbug.com/1050754 external/wpt/webrtc/RTCPeerConnection-addIceCandidate-timing.https.html [ Timeout ] -crbug.com/1050754 external/wpt/webrtc/RTCPeerConnection-addIceCandidate.html [ Failure Pass ] -crbug.com/1050754 external/wpt/webrtc/RTCPeerConnection-candidate-in-sdp.https.html [ Timeout ] -crbug.com/1050754 external/wpt/webrtc/RTCPeerConnection-connectionState.https.html [ Timeout ] -crbug.com/1050754 external/wpt/webrtc/RTCPeerConnection-createAnswer.html [ Failure Pass ] -crbug.com/1050754 external/wpt/webrtc/RTCPeerConnection-createDataChannel.html [ Timeout ] -crbug.com/1050754 external/wpt/webrtc/RTCPeerConnection-createOffer.html [ Failure Pass ] -crbug.com/1050754 external/wpt/webrtc/RTCPeerConnection-explicit-rollback-iceGatheringState.html [ Timeout ] -crbug.com/1050754 external/wpt/webrtc/RTCPeerConnection-generateCertificate.html [ Failure Pass ] -crbug.com/1050754 external/wpt/webrtc/RTCPeerConnection-getStats.https.html [ Timeout ] -crbug.com/1050754 external/wpt/webrtc/RTCPeerConnection-helper-test.html [ Timeout ] -crbug.com/1050754 external/wpt/webrtc/RTCPeerConnection-iceConnectionState-disconnected.https.html [ Timeout ] -crbug.com/1050754 external/wpt/webrtc/RTCPeerConnection-iceGatheringState.html [ Timeout ] -crbug.com/1050754 external/wpt/webrtc/RTCPeerConnection-ondatachannel.html [ Timeout ] -crbug.com/1050754 external/wpt/webrtc/RTCPeerConnection-onicecandidateerror.https.html [ Pass Timeout ] -crbug.com/1050754 external/wpt/webrtc/RTCPeerConnection-onsignalingstatechanged.https.html [ Timeout ] -crbug.com/1050754 external/wpt/webrtc/RTCPeerConnection-operations.https.html [ Timeout ] -crbug.com/1050754 external/wpt/webrtc/RTCPeerConnection-perfect-negotiation.https.html [ Timeout ] -crbug.com/1050754 external/wpt/webrtc/RTCPeerConnection-remote-track-mute.https.html [ Timeout ] -crbug.com/1050754 external/wpt/webrtc/RTCPeerConnection-removeTrack.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/webrtc/RTCPeerConnection-restartIce-onnegotiationneeded.https.html [ Pass Timeout ] -crbug.com/1050754 external/wpt/webrtc/RTCPeerConnection-setDescription-transceiver.html [ Failure Pass ] -crbug.com/1050754 external/wpt/webrtc/RTCPeerConnection-setLocalDescription-answer.html [ Failure Pass ] -crbug.com/1050754 external/wpt/webrtc/RTCPeerConnection-setLocalDescription-offer.html [ Failure Pass ] -crbug.com/1050754 external/wpt/webrtc/RTCPeerConnection-setLocalDescription-parameterless.https.html [ Pass Timeout ] -crbug.com/1050754 external/wpt/webrtc/RTCPeerConnection-setLocalDescription-pranswer.html [ Failure Pass ] -crbug.com/1050754 external/wpt/webrtc/RTCPeerConnection-setLocalDescription-rollback.html [ Failure Pass ] -crbug.com/1050754 external/wpt/webrtc/RTCPeerConnection-setRemoteDescription-simulcast.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/webrtc/RTCPeerConnection-setRemoteDescription-tracks.https.html [ Timeout ] -crbug.com/1050754 external/wpt/webrtc/RTCPeerConnection-setRemoteDescription.html [ Failure Pass ] -crbug.com/1050754 external/wpt/webrtc/RTCPeerConnection-track-stats.https.html [ Timeout ] -crbug.com/1050754 external/wpt/webrtc/RTCPeerConnection-videoDetectorTest.html [ Timeout ] -crbug.com/1050754 external/wpt/webrtc/RTCPeerConnectionIceEvent-constructor.html [ Failure Pass ] -crbug.com/1050754 external/wpt/webrtc/RTCRtpReceiver-getParameters.html [ Failure Pass ] -crbug.com/1050754 external/wpt/webrtc/RTCRtpReceiver-getStats.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/webrtc/RTCRtpReceiver-getSynchronizationSources.https.html [ Timeout ] -crbug.com/1050754 external/wpt/webrtc/RTCRtpSender-getStats.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/webrtc/RTCRtpSender-replaceTrack.https.html [ Failure Timeout ] -crbug.com/1050754 external/wpt/webrtc/RTCRtpSender-setParameters.html [ Failure Pass ] -crbug.com/1050754 external/wpt/webrtc/RTCRtpTransceiver-stop.html [ Failure Pass ] -crbug.com/1050754 external/wpt/webrtc/RTCSctpTransport-events.html [ Timeout ] -crbug.com/1050754 external/wpt/webrtc/RTCSctpTransport-maxChannels.html [ Timeout ] -crbug.com/1050754 external/wpt/webrtc/RTCTrackEvent-constructor.html [ Failure Pass ] -crbug.com/1050754 external/wpt/webrtc/RTCTrackEvent-fire.html [ Failure Pass ] -crbug.com/1050754 external/wpt/webrtc/datachannel-emptystring.html [ Timeout ] -crbug.com/1050754 external/wpt/webrtc/getstats.html [ Timeout ] -crbug.com/1050754 external/wpt/webrtc/historical.html [ Failure Pass ] -crbug.com/1050754 external/wpt/webrtc/idlharness.https.window.html [ Failure Pass ] -crbug.com/1050754 external/wpt/webrtc/no-media-call.html [ Timeout ] -crbug.com/1050754 external/wpt/webrtc/promises-call.html [ Timeout ] -crbug.com/1050754 external/wpt/webrtc/protocol/bundle.https.html [ Timeout ] -crbug.com/1050754 external/wpt/webrtc/protocol/candidate-exchange.https.html [ Timeout ] -crbug.com/1050754 external/wpt/webrtc/protocol/crypto-suite.https.html [ Timeout ] -crbug.com/1050754 external/wpt/webrtc/protocol/dtls-fingerprint-validation.html [ Timeout ] -crbug.com/1050754 external/wpt/webrtc/protocol/ice-state.https.html [ Timeout ] -crbug.com/1050754 external/wpt/webrtc/protocol/split.https.html [ Timeout ] -crbug.com/1050754 external/wpt/webrtc/protocol/unbundled-pt-demuxing.https.html [ Timeout ] -crbug.com/1050754 external/wpt/webrtc/protocol/video-codecs.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/webrtc/simplecall-no-ssrcs.https.html [ Timeout ] -crbug.com/1050754 external/wpt/webrtc/simplecall.https.html [ Timeout ] -crbug.com/1050754 external/wpt/webrtc/simulcast/basic.https.html [ Failure Timeout ] -crbug.com/1050754 external/wpt/webrtc/simulcast/getStats.https.html [ Timeout ] -crbug.com/1050754 external/wpt/webrtc/simulcast/setParameters-active.https.html [ Timeout ] -crbug.com/1050754 external/wpt/webrtc/simulcast/vp8.https.html [ Failure Timeout ] -crbug.com/1050754 external/wpt/websockets/Create-blocked-port.any.html [ Failure Pass ] -crbug.com/1050754 external/wpt/websockets/Create-blocked-port.any.worker.html [ Failure Pass ] -crbug.com/1050754 external/wpt/websockets/Create-on-worker-shutdown.any.html [ Failure Pass ] -crbug.com/1050754 external/wpt/websockets/Create-on-worker-shutdown.any.worker.html [ Failure Pass ] -crbug.com/1050754 external/wpt/websockets/Create-protocols-repeated-case-insensitive.any.html [ Failure Pass ] -crbug.com/1050754 external/wpt/websockets/Create-protocols-repeated-case-insensitive.any.worker.html [ Failure Pass ] -crbug.com/1050754 external/wpt/websockets/basic-auth.any.serviceworker.html [ Failure Pass ] -crbug.com/1050754 external/wpt/websockets/basic-auth.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/websockets/bufferedAmount-unchanged-by-sync-xhr.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/websockets/constructor/002.html [ Failure Pass ] -crbug.com/1050754 external/wpt/websockets/constructor/002.html?wss [ Failure Pass ] -crbug.com/1050754 external/wpt/websockets/cookies/007.html [ Failure Pass ] -crbug.com/1050754 external/wpt/websockets/cookies/007.html?wss [ Failure Pass ] -crbug.com/1050754 external/wpt/websockets/cookies/third-party-cookie-accepted.https.html [ Failure ] -crbug.com/1050754 external/wpt/websockets/interfaces/WebSocket/close/close-connecting.html [ Failure Pass ] -crbug.com/1050754 external/wpt/websockets/interfaces/WebSocket/close/close-connecting.html?wss [ Failure Pass ] -crbug.com/1050754 external/wpt/websockets/interfaces/WebSocket/close/close-nested.html [ Failure Pass ] -crbug.com/1050754 external/wpt/websockets/interfaces/WebSocket/close/close-nested.html?wss [ Failure Pass ] -crbug.com/1050754 external/wpt/websockets/interfaces/WebSocket/readyState/003.html [ Failure Pass ] -crbug.com/1050754 external/wpt/websockets/interfaces/WebSocket/readyState/003.html?wss [ Failure Pass ] -crbug.com/1050754 external/wpt/websockets/opening-handshake/005.html?wss [ Failure Pass ] -crbug.com/1050754 external/wpt/websockets/stream/tentative/abort.any.html [ Failure ] -crbug.com/1050754 external/wpt/websockets/stream/tentative/abort.any.serviceworker.html [ Failure ] -crbug.com/1050754 external/wpt/websockets/stream/tentative/abort.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/websockets/stream/tentative/abort.any.worker.html [ Failure ] -crbug.com/1050754 external/wpt/websockets/stream/tentative/backpressure-receive.any.html [ Failure ] -crbug.com/1050754 external/wpt/websockets/stream/tentative/backpressure-receive.any.serviceworker.html [ Failure ] -crbug.com/1050754 external/wpt/websockets/stream/tentative/backpressure-receive.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/websockets/stream/tentative/backpressure-receive.any.worker.html [ Failure ] -crbug.com/1050754 external/wpt/websockets/stream/tentative/backpressure-send.any.html [ Failure ] -crbug.com/1050754 external/wpt/websockets/stream/tentative/backpressure-send.any.serviceworker.html [ Failure ] -crbug.com/1050754 external/wpt/websockets/stream/tentative/backpressure-send.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/websockets/stream/tentative/backpressure-send.any.worker.html [ Failure ] -crbug.com/1050754 external/wpt/websockets/stream/tentative/close.any.html [ Failure ] -crbug.com/1050754 external/wpt/websockets/stream/tentative/close.any.serviceworker.html [ Failure ] -crbug.com/1050754 external/wpt/websockets/stream/tentative/close.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/websockets/stream/tentative/close.any.worker.html [ Failure ] -crbug.com/1050754 external/wpt/websockets/stream/tentative/constructor.any.html [ Failure ] -crbug.com/1050754 external/wpt/websockets/stream/tentative/constructor.any.serviceworker.html [ Failure ] -crbug.com/1050754 external/wpt/websockets/stream/tentative/constructor.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/websockets/stream/tentative/constructor.any.worker.html [ Failure ] -crbug.com/1050754 external/wpt/websockets/unload-a-document/002.html [ Failure Pass ] -crbug.com/1050754 external/wpt/websockets/unload-a-document/002.html?wss [ Failure Pass ] -crbug.com/1050754 external/wpt/websockets/unload-a-document/004.html [ Failure Pass ] -crbug.com/1050754 external/wpt/webstorage/set.window.html [ Failure Pass ] -crbug.com/1050754 external/wpt/webstorage/storage_builtins.html [ Failure Pass ] -crbug.com/1050754 external/wpt/webstorage/storage_session_window_noopener.html [ Failure Pass ] -crbug.com/1050754 external/wpt/webstorage/symbol-props.window.html [ Failure Pass ] -crbug.com/1050754 external/wpt/webtransport/quic/constructor.any.html [ Failure ] -crbug.com/1050754 external/wpt/webtransport/quic/constructor.any.serviceworker.html [ Failure ] -crbug.com/1050754 external/wpt/webtransport/quic/constructor.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/webtransport/quic/constructor.any.worker.html [ Failure ] -crbug.com/1050754 external/wpt/webusb/idlharness.https.any.html [ Failure Pass ] -crbug.com/1050754 external/wpt/webusb/idlharness.https.any.worker.html [ Failure Pass ] -crbug.com/1050754 external/wpt/webusb/usb.https.any.html [ Failure ] -crbug.com/1050754 external/wpt/webusb/usb.https.any.worker.html [ Failure ] -crbug.com/1050754 external/wpt/webusb/usb.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/webusb/usb.serviceworker.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/webusb/usbAlternateInterface.https.any.html [ Failure ] -crbug.com/1050754 external/wpt/webusb/usbAlternateInterface.https.any.worker.html [ Failure ] -crbug.com/1050754 external/wpt/webusb/usbConfiguration.https.any.html [ Failure ] -crbug.com/1050754 external/wpt/webusb/usbConfiguration.https.any.worker.html [ Failure ] -crbug.com/1050754 external/wpt/webusb/usbConnectionEvent.https.any.html [ Failure ] -crbug.com/1050754 external/wpt/webusb/usbConnectionEvent.https.any.worker.html [ Failure ] -crbug.com/1050754 external/wpt/webusb/usbDevice-iframe.https.html [ Failure ] -crbug.com/1050754 external/wpt/webusb/usbDevice-worker.https.html [ Failure ] -crbug.com/1050754 external/wpt/webusb/usbDevice.https.any.html [ Failure ] -crbug.com/1050754 external/wpt/webusb/usbDevice.https.any.worker.html [ Failure ] -crbug.com/1050754 external/wpt/webusb/usbEndpoint.https.any.html [ Failure ] -crbug.com/1050754 external/wpt/webusb/usbEndpoint.https.any.worker.html [ Failure ] -crbug.com/1050754 external/wpt/webusb/usbInterface.https.any.html [ Failure ] -crbug.com/1050754 external/wpt/webusb/usbInterface.https.any.worker.html [ Failure ] -crbug.com/1050754 external/wpt/webvtt/api/VTTCue/constructor.html [ Failure Pass ] -crbug.com/1050754 external/wpt/webvtt/api/VTTCue/getCueAsHTML.html [ Failure Pass ] -crbug.com/1050754 external/wpt/webvtt/api/VTTCue/lineAlign.html [ Failure Pass ] -crbug.com/1050754 external/wpt/webvtt/api/VTTCue/positionAlign.html [ Failure Pass ] -crbug.com/1050754 external/wpt/webvtt/api/VTTCue/region.html [ Failure Pass ] -crbug.com/1050754 external/wpt/webvtt/api/VTTRegion/constructor.html [ Failure ] -crbug.com/1050754 external/wpt/webvtt/api/VTTRegion/id.html [ Failure ] -crbug.com/1050754 external/wpt/webvtt/api/VTTRegion/lines.html [ Failure ] -crbug.com/1050754 external/wpt/webvtt/api/VTTRegion/non-visible-cue-with-region.html [ Failure ] -crbug.com/1050754 external/wpt/webvtt/api/VTTRegion/regionAnchorX.html [ Failure ] -crbug.com/1050754 external/wpt/webvtt/api/VTTRegion/regionAnchorY.html [ Failure ] -crbug.com/1050754 external/wpt/webvtt/api/VTTRegion/scroll.html [ Failure ] -crbug.com/1050754 external/wpt/webvtt/api/VTTRegion/viewportAnchorX.html [ Failure ] -crbug.com/1050754 external/wpt/webvtt/api/VTTRegion/viewportAnchorY.html [ Failure ] -crbug.com/1050754 external/wpt/webvtt/api/VTTRegion/width.html [ Failure ] -crbug.com/1050754 external/wpt/webvtt/api/historical.html [ Failure ] -crbug.com/1050754 external/wpt/webvtt/api/idlharness.window.html [ Failure Pass ] -crbug.com/1050754 external/wpt/webvtt/parsing/file-parsing/tests/header-regions.html [ Failure ] -crbug.com/1050754 external/wpt/webvtt/parsing/file-parsing/tests/regions-edge-case.html [ Failure ] -crbug.com/1050754 external/wpt/webvtt/parsing/file-parsing/tests/regions-id.html [ Failure Pass ] -crbug.com/1050754 external/wpt/webvtt/parsing/file-parsing/tests/regions-lines.html [ Failure Pass ] -crbug.com/1050754 external/wpt/webvtt/parsing/file-parsing/tests/regions-old.html [ Failure ] -crbug.com/1050754 external/wpt/webvtt/parsing/file-parsing/tests/regions-regionanchor.html [ Failure ] -crbug.com/1050754 external/wpt/webvtt/parsing/file-parsing/tests/regions-scroll.html [ Failure ] -crbug.com/1050754 external/wpt/webvtt/parsing/file-parsing/tests/regions-viewportanchor.html [ Failure ] -crbug.com/1050754 external/wpt/webvtt/parsing/file-parsing/tests/settings-line.html [ Failure Pass ] -crbug.com/1050754 external/wpt/webvtt/parsing/file-parsing/tests/settings-position.html [ Failure Pass ] -crbug.com/1050754 external/wpt/webvtt/parsing/file-parsing/tests/settings-region.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/anchors/ar_anchor_freefloating_create_move.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/anchors/ar_anchor_freefloating_delay_creation.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/anchors/ar_anchor_freefloating_failure.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/anchors/ar_anchor_freefloating_pause_resume_stop.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/anchors/ar_anchor_states.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/anchors/idlharness.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/ar-module/idlharness.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/ar-module/xrDevice_isSessionSupported_immersive-ar.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/ar-module/xrDevice_requestSession_immersive-ar.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/ar-module/xrSession_environmentBlendMode.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/ar-module/xrSession_interactionMode.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/dom-overlay/ar_dom_overlay.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/dom-overlay/ar_dom_overlay_hit_test.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/dom-overlay/nested_fullscreen.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/events_input_source_recreation.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/events_input_sources_change.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/events_referenceSpace_reset_immersive.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/events_referenceSpace_reset_inline.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/events_session_select.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/events_session_select_subframe.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/events_session_squeeze.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/exclusive_requestFrame_nolayer.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/gamepads-module/idlharness.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/gamepads-module/xrInputSource_gamepad_disconnect.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/gamepads-module/xrInputSource_gamepad_input_registered.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/getInputPose_handedness.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/getInputPose_pointer.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/getViewerPose_emulatedPosition.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/hit-test/ar_hittest_source_cancel.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/hit-test/ar_hittest_subscription_inputSources.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/hit-test/ar_hittest_subscription_refSpaces.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/hit-test/ar_hittest_subscription_states_regular.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/hit-test/ar_hittest_subscription_states_transient.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/hit-test/ar_hittest_subscription_transientInputSources.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/hit-test/idlharness.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/hit-test/xrRay_constructor.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/hit-test/xrRay_matrix.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/idlharness.https.window.html [ Failure Pass ] -crbug.com/1050754 external/wpt/webxr/navigator_xr_sameObject.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/render_state_update.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/render_state_vertical_fov_immersive.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/render_state_vertical_fov_inline.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/webGLCanvasContext_create_xrcompatible.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/webGLCanvasContext_makecompatible_contextlost.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/webGLCanvasContext_makecompatible_reentrant.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/webxr-supported-by-feature-policy.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/webxr_feature_policy.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/xrBoundedReferenceSpace_updates.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/xrDevice_disconnect_ends.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/xrDevice_isSessionSupported_immersive.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/xrDevice_isSessionSupported_immersive_unsupported.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/xrDevice_isSessionSupported_inline.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/xrDevice_requestSession_immersive.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/xrDevice_requestSession_immersive_no_gesture.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/xrDevice_requestSession_immersive_unsupported.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/xrDevice_requestSession_no_mode.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/xrDevice_requestSession_non_immersive_no_gesture.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/xrDevice_requestSession_optionalFeatures.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/xrDevice_requestSession_requiredFeatures_unknown.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/xrFrame_getPose.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/xrFrame_getViewerPose_getPose.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/xrFrame_lifetime.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/xrFrame_session_sameObject.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/xrInputSource_add_remove.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/xrInputSource_emulatedPosition.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/xrInputSource_profiles.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/xrInputSource_sameObject.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/xrPose_transform_sameObject.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/xrReferenceSpace_originOffset.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/xrReferenceSpace_originOffsetBounded.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/xrReferenceSpace_originOffset_viewer.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/xrReferenceSpace_relationships.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/xrRigidTransform_constructor.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/xrRigidTransform_inverse.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/xrRigidTransform_matrix.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/xrRigidTransform_sameObject.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/xrSession_cancelAnimationFrame.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/xrSession_cancelAnimationFrame_invalidhandle.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/xrSession_end.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/xrSession_features_deviceSupport.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/xrSession_input_events_end.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/xrSession_prevent_multiple_exclusive.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/xrSession_requestAnimationFrame_callback_calls.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/xrSession_requestAnimationFrame_data_valid.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/xrSession_requestAnimationFrame_getViewerPose.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/xrSession_requestAnimationFrame_timestamp.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/xrSession_requestReferenceSpace.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/xrSession_requestReferenceSpace_features.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/xrSession_requestSessionDuringEnd.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/xrSession_sameObject.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/xrSession_viewer_availability.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/xrSession_viewer_referenceSpace.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/xrSession_visibilityState.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/xrStationaryReferenceSpace_floorlevel_updates.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/xrView_eyes.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/xrView_match.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/xrView_oneframeupdate.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/xrView_sameObject.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/xrViewerPose_views_sameObject.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/xrViewport_valid.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/xrWebGLLayer_constructor.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/xrWebGLLayer_framebuffer_draw.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/xrWebGLLayer_framebuffer_sameObject.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/xrWebGLLayer_framebuffer_scale.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/xrWebGLLayer_opaque_framebuffer.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/xrWebGLLayer_opaque_framebuffer_stencil.https.html [ Failure ] -crbug.com/1050754 external/wpt/webxr/xrWebGLLayer_viewports.https.html [ Failure ] -crbug.com/1050754 external/wpt/window-segments/getWindowSegments.https.tentative.html [ Failure ] -crbug.com/1050754 external/wpt/workers/SharedWorker-MessageEvent-source.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/workers/SharedWorker-constructor.html [ Failure ] -crbug.com/1050754 external/wpt/workers/SharedWorker-detach-frame-in-error-event.html [ Timeout ] -crbug.com/1050754 external/wpt/workers/SharedWorker-exception-propagation.html [ Failure ] -crbug.com/1050754 external/wpt/workers/SharedWorker-exception.html [ Failure ] -crbug.com/1050754 external/wpt/workers/SharedWorker-replace-EventHandler.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/workers/SharedWorker-script-error.html [ Failure ] -crbug.com/1050754 external/wpt/workers/SharedWorker-simple.html [ Failure ] -crbug.com/1050754 external/wpt/workers/SharedWorkerPerformanceNow.html [ Failure ] -crbug.com/1050754 external/wpt/workers/SharedWorker_blobUrl.html [ Failure ] -crbug.com/1050754 external/wpt/workers/SharedWorker_dataUrl.html [ Timeout ] -crbug.com/1050754 external/wpt/workers/Worker-base64.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/workers/Worker-constructor-proto.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/workers/Worker-custom-event.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/workers/Worker-location.sub.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/workers/Worker-multi-port.html [ Failure Pass ] -crbug.com/1050754 external/wpt/workers/Worker-replace-event-handler.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/workers/Worker-replace-global-constructor.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/workers/Worker-replace-self.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/workers/WorkerNavigator-hardware-concurrency.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/workers/WorkerNavigator.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/workers/WorkerNavigator_appVersion.htm [ Failure ] -crbug.com/1050754 external/wpt/workers/WorkerNavigator_userAgentData.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/workers/Worker_script_mimetype.htm [ Failure ] -crbug.com/1050754 external/wpt/workers/abrupt-completion.html [ Failure Timeout ] -crbug.com/1050754 external/wpt/workers/baseurl/alpha/importScripts-in-sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/workers/baseurl/alpha/sharedworker-in-worker.html [ Failure Pass ] -crbug.com/1050754 external/wpt/workers/baseurl/alpha/xhr-in-moduleworker.html [ Failure ] -crbug.com/1050754 external/wpt/workers/baseurl/alpha/xhr-in-sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/workers/constructors/SharedWorker/Infinity-arguments.html [ Failure ] -crbug.com/1050754 external/wpt/workers/constructors/SharedWorker/NaN-arguments.html [ Failure ] -crbug.com/1050754 external/wpt/workers/constructors/SharedWorker/URLMismatchError.htm [ Failure ] -crbug.com/1050754 external/wpt/workers/constructors/SharedWorker/connect-event.html [ Failure Pass ] -crbug.com/1050754 external/wpt/workers/constructors/SharedWorker/dummy-name.html [ Failure ] -crbug.com/1050754 external/wpt/workers/constructors/SharedWorker/dummy-shared-worker.html [ Failure ] -crbug.com/1050754 external/wpt/workers/constructors/SharedWorker/empty-name.html [ Failure ] -crbug.com/1050754 external/wpt/workers/constructors/SharedWorker/global-members.html [ Failure ] -crbug.com/1050754 external/wpt/workers/constructors/SharedWorker/interface-objects.html [ Failure Pass ] -crbug.com/1050754 external/wpt/workers/constructors/SharedWorker/name.html [ Failure ] -crbug.com/1050754 external/wpt/workers/constructors/SharedWorker/no-arguments-ctor.html [ Failure ] -crbug.com/1050754 external/wpt/workers/constructors/SharedWorker/null-arguments.html [ Failure ] -crbug.com/1050754 external/wpt/workers/constructors/SharedWorker/number-arguments.html [ Failure ] -crbug.com/1050754 external/wpt/workers/constructors/SharedWorker/port-onmessage.html [ Failure ] -crbug.com/1050754 external/wpt/workers/constructors/SharedWorker/port-properties.html [ Failure ] -crbug.com/1050754 external/wpt/workers/constructors/SharedWorker/port-readonly.html [ Failure ] -crbug.com/1050754 external/wpt/workers/constructors/SharedWorker/same-origin.html [ Failure ] -crbug.com/1050754 external/wpt/workers/constructors/SharedWorker/setting-port-members.html [ Failure ] -crbug.com/1050754 external/wpt/workers/constructors/SharedWorker/undefined-arguments.html [ Failure ] -crbug.com/1050754 external/wpt/workers/constructors/SharedWorker/unexpected-global-properties.html [ Failure ] -crbug.com/1050754 external/wpt/workers/constructors/SharedWorker/unresolvable-url.html [ Failure Pass ] -crbug.com/1050754 external/wpt/workers/constructors/Worker/DedicatedWorkerGlobalScope-members.worker.html [ Failure Pass ] -crbug.com/1050754 external/wpt/workers/constructors/Worker/expected-self-properties.worker.html [ Failure Pass ] -crbug.com/1050754 external/wpt/workers/data-url-shared.html [ Timeout ] -crbug.com/1050754 external/wpt/workers/dedicated-worker-in-data-url-context.window.html [ Failure Pass ] -crbug.com/1050754 external/wpt/workers/examples/general.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/workers/examples/onconnect.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/workers/importscripts_mime.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/workers/interfaces/SharedWorkerGlobalScope/name/getting.html [ Failure ] -crbug.com/1050754 external/wpt/workers/interfaces/SharedWorkerGlobalScope/name/setting.html [ Failure ] -crbug.com/1050754 external/wpt/workers/interfaces/SharedWorkerGlobalScope/onconnect.html [ Failure Pass ] -crbug.com/1050754 external/wpt/workers/interfaces/WorkerGlobalScope/location/redirect-sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/workers/interfaces/WorkerGlobalScope/location/returns-same-object.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/workers/interfaces/WorkerGlobalScope/onerror/exception-in-onerror.html [ Failure Pass ] -crbug.com/1050754 external/wpt/workers/interfaces/WorkerGlobalScope/self.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/workers/interfaces/WorkerUtils/importScripts/002.worker.html [ Failure Pass ] -crbug.com/1050754 external/wpt/workers/interfaces/WorkerUtils/importScripts/catch.sub.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/workers/interfaces/WorkerUtils/importScripts/report-error-cross-origin.sub.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/workers/interfaces/WorkerUtils/importScripts/report-error-cross-origin.sub.any.worker.html [ Failure ] -crbug.com/1050754 external/wpt/workers/interfaces/WorkerUtils/importScripts/report-error-redirect-to-cross-origin.sub.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/workers/interfaces/WorkerUtils/importScripts/report-error-same-origin.sub.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/workers/interfaces/WorkerUtils/importScripts/report-error-same-origin.sub.any.worker.html [ Failure ] -crbug.com/1050754 external/wpt/workers/interfaces/WorkerUtils/importScripts/report-error-setTimeout-cross-origin.sub.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/workers/interfaces/WorkerUtils/importScripts/report-error-setTimeout-redirect-to-cross-origin.sub.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/workers/interfaces/WorkerUtils/importScripts/report-error-setTimeout-same-origin.sub.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/workers/modules/dedicated-worker-import-meta.html [ Failure Pass ] -crbug.com/1050754 external/wpt/workers/modules/shared-worker-import-blob-url.window.html [ Failure ] -crbug.com/1050754 external/wpt/workers/modules/shared-worker-import-csp.html [ Failure ] -crbug.com/1050754 external/wpt/workers/modules/shared-worker-import-data-url-cross-origin.html [ Failure ] -crbug.com/1050754 external/wpt/workers/modules/shared-worker-import-data-url.window.html [ Failure ] -crbug.com/1050754 external/wpt/workers/modules/shared-worker-import-failure.html [ Failure ] -crbug.com/1050754 external/wpt/workers/modules/shared-worker-import-meta.html [ Failure Pass ] -crbug.com/1050754 external/wpt/workers/modules/shared-worker-import-referrer.html [ Failure ] -crbug.com/1050754 external/wpt/workers/modules/shared-worker-import.window.html [ Failure ] -crbug.com/1050754 external/wpt/workers/modules/shared-worker-options-credentials.html [ Failure ] -crbug.com/1050754 external/wpt/workers/modules/shared-worker-options-type.html [ Failure ] -crbug.com/1050754 external/wpt/workers/modules/shared-worker-parse-error-failure.html [ Failure ] -crbug.com/1050754 external/wpt/workers/name-property.html [ Failure ] -crbug.com/1050754 external/wpt/workers/opaque-origin.html [ Failure Pass ] -crbug.com/1050754 external/wpt/workers/postMessage_block.https.html [ Failure ] -crbug.com/1050754 external/wpt/workers/semantics/encodings/001.html [ Failure Pass ] -crbug.com/1050754 external/wpt/workers/semantics/encodings/002.html [ Failure Pass ] -crbug.com/1050754 external/wpt/workers/semantics/encodings/004.html [ Failure ] -crbug.com/1050754 external/wpt/workers/semantics/interface-objects/001.worker.html [ Failure Pass ] -crbug.com/1050754 external/wpt/workers/semantics/interface-objects/002.worker.html [ Failure Pass ] -crbug.com/1050754 external/wpt/workers/semantics/interface-objects/003.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/workers/semantics/interface-objects/004.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/workers/semantics/multiple-workers/001.html [ Failure ] -crbug.com/1050754 external/wpt/workers/semantics/multiple-workers/004.html [ Failure ] -crbug.com/1050754 external/wpt/workers/semantics/multiple-workers/008.html [ Failure ] -crbug.com/1050754 external/wpt/workers/semantics/multiple-workers/exposure.any.html [ Failure ] -crbug.com/1050754 external/wpt/workers/semantics/multiple-workers/exposure.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/workers/semantics/navigation/002.html [ Failure Pass ] -crbug.com/1050754 external/wpt/workers/semantics/reporting-errors/001.html [ Failure ] -crbug.com/1050754 external/wpt/workers/semantics/reporting-errors/002.html [ Failure ] -crbug.com/1050754 external/wpt/workers/semantics/reporting-errors/003.html [ Failure ] -crbug.com/1050754 external/wpt/workers/semantics/reporting-errors/004.html [ Failure ] -crbug.com/1050754 external/wpt/workers/semantics/run-a-worker/002.html [ Failure ] -crbug.com/1050754 external/wpt/workers/semantics/run-a-worker/003.html [ Failure ] -crbug.com/1050754 external/wpt/workers/semantics/structured-clone/shared.html [ Failure ] -crbug.com/1050754 external/wpt/workers/semantics/xhr/003.html [ Failure ] -crbug.com/1050754 external/wpt/workers/semantics/xhr/004.html [ Failure ] -crbug.com/1050754 external/wpt/workers/semantics/xhr/006.html [ Failure ] -crbug.com/1050754 external/wpt/workers/shared-worker-from-blob-url.window.html [ Failure ] -crbug.com/1050754 external/wpt/workers/shared-worker-in-data-url-context.window.html [ Failure Pass ] -crbug.com/1050754 external/wpt/workers/shared-worker-name-via-options.html [ Failure ] -crbug.com/1050754 external/wpt/workers/shared-worker-options-mismatch.html [ Failure ] -crbug.com/1050754 external/wpt/workers/shared-worker-parse-error-failure.html [ Failure ] -crbug.com/1050754 external/wpt/worklets/animation-worklet-credentials.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/worklets/animation-worklet-csp.https.html [ Failure ] -crbug.com/1050754 external/wpt/worklets/animation-worklet-import.https.html [ Failure ] -crbug.com/1050754 external/wpt/worklets/animation-worklet-referrer.https.html [ Failure ] -crbug.com/1050754 external/wpt/worklets/animation-worklet-service-worker-interception.https.html [ Failure ] -crbug.com/1050754 external/wpt/worklets/audio-worklet-credentials.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/worklets/layout-worklet-credentials.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/worklets/layout-worklet-csp.https.html [ Failure ] -crbug.com/1050754 external/wpt/worklets/layout-worklet-import.https.html [ Failure ] -crbug.com/1050754 external/wpt/worklets/layout-worklet-referrer.https.html [ Failure ] -crbug.com/1050754 external/wpt/worklets/layout-worklet-service-worker-interception.https.html [ Failure ] -crbug.com/1050754 external/wpt/worklets/paint-worklet-credentials.https.html [ Failure Pass ] -crbug.com/1050754 external/wpt/worklets/paint-worklet-csp.https.html [ Pass Timeout ] -crbug.com/1050754 external/wpt/xhr/abort-after-send.any.html [ Failure ] -crbug.com/1050754 external/wpt/xhr/abort-after-send.any.worker.html [ Failure Pass ] -crbug.com/1050754 external/wpt/xhr/abort-after-timeout.any.html [ Failure Pass ] -crbug.com/1050754 external/wpt/xhr/access-control-basic-allow-preflight-cache-timeout.any.html [ Failure Pass ] -crbug.com/1050754 external/wpt/xhr/data-uri.htm [ Failure Pass ] -crbug.com/1050754 external/wpt/xhr/event-readystatechange-loaded.any.html [ Failure Timeout ] -crbug.com/1050754 external/wpt/xhr/event-readystatechange-loaded.any.worker.html [ Failure Timeout ] -crbug.com/1050754 external/wpt/xhr/event-timeout-order.any.html [ Failure Pass ] -crbug.com/1050754 external/wpt/xhr/event-timeout.any.html [ Failure Pass ] -crbug.com/1050754 external/wpt/xhr/idlharness.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/xhr/idlharness.any.worker.html [ Failure Pass ] -crbug.com/1050754 external/wpt/xhr/open-during-abort-processing.htm [ Failure Pass ] -crbug.com/1050754 external/wpt/xhr/open-url-multi-window-2.htm [ Failure Pass ] -crbug.com/1050754 external/wpt/xhr/open-url-multi-window-3.htm [ Failure Pass ] -crbug.com/1050754 external/wpt/xhr/open-url-multi-window-4.htm [ Timeout ] -crbug.com/1050754 external/wpt/xhr/open-url-multi-window-5.htm [ Failure Pass ] -crbug.com/1050754 external/wpt/xhr/open-url-multi-window-6.htm [ Failure Pass ] -crbug.com/1050754 external/wpt/xhr/open-url-redirected-sharedworker-origin.htm [ Failure ] -crbug.com/1050754 external/wpt/xhr/overridemimetype-blob.html [ Failure Pass ] -crbug.com/1050754 external/wpt/xhr/preserve-ua-header-on-redirect.htm [ Failure ] -crbug.com/1050754 external/wpt/xhr/response-data-progress.htm [ Failure Pass ] -crbug.com/1050754 external/wpt/xhr/response-json.htm [ Failure Pass ] -crbug.com/1050754 external/wpt/xhr/responseType-document-in-worker.html [ Failure Pass ] -crbug.com/1050754 external/wpt/xhr/responseXML-unavailable-in-worker.html [ Failure Pass ] -crbug.com/1050754 external/wpt/xhr/responsetype.any.worker.html [ Failure Pass ] -crbug.com/1050754 external/wpt/xhr/responsexml-media-type.htm [ Failure Pass ] -crbug.com/1050754 external/wpt/xhr/send-after-setting-document-domain.htm [ Pass Timeout ] -crbug.com/1050754 external/wpt/xhr/send-authentication-cors-setrequestheader-no-cred.htm [ Failure Pass ] -crbug.com/1050754 external/wpt/xhr/send-content-type-charset.htm [ Failure Pass ] -crbug.com/1050754 external/wpt/xhr/send-data-sharedarraybuffer.any.html [ Failure Pass ] -crbug.com/1050754 external/wpt/xhr/send-data-sharedarraybuffer.any.worker.html [ Failure Pass ] -crbug.com/1050754 external/wpt/xhr/send-no-response-event-order.htm [ Failure Pass ] -crbug.com/1050754 external/wpt/xhr/setrequestheader-combining.window.html [ Failure Pass ] -crbug.com/1050754 external/wpt/xhr/setrequestheader-content-type.htm [ Failure Pass ] -crbug.com/1050754 external/wpt/xhr/setrequestheader-header-allowed.htm [ Failure Pass ] -crbug.com/1050754 external/wpt/xhr/status-async.htm [ Failure ] -crbug.com/1050754 external/wpt/xhr/status-basic.htm [ Failure ] -crbug.com/1050754 external/wpt/xhr/status-error.htm [ Timeout ] -crbug.com/1050754 external/wpt/xhr/sync-no-timeout.any.sharedworker.html [ Failure ] -crbug.com/1050754 external/wpt/dom/xslt/transformToFragment.tentative.window.html [ Failure Pass ]
diff --git a/third_party/blink/web_tests/css3/flexbox/flexbox-baseline.html b/third_party/blink/web_tests/css3/flexbox/flexbox-baseline.html deleted file mode 100644 index 24d2704..0000000 --- a/third_party/blink/web_tests/css3/flexbox/flexbox-baseline.html +++ /dev/null
@@ -1,221 +0,0 @@ -<!DOCTYPE html> -<html> -<style> -body { - margin: 0; -} -.inline-flexbox { - display: inline-flex; - background-color: lightgrey; - margin-top: 5px; -} -.flexbox { - display: flex; - background-color: grey; - margin-top: 10px; -} -.column { - flex-flow: column; -} -.column-reverse { - flex-flow: column-reverse; -} -</style> - -<body style="position: relative"> - -<!-- If any of the flex items on the flex container's first line participate -in baseline alignment, the flex container's main-axis baseline is the baseline -of those flex items. --> -<div> -before text -<div class="inline-flexbox" style="height: 50px;"> - <div style="align-self: flex-end">below</div> - <div style="align-self: baseline; margin-top: 15px">baseline</div> - <div style="align-self: flex-start">above</div> -</div> -after text -</div> - -<div> -before text -<div class="inline-flexbox" style="height: 40px"> - <div style="align-self: flex-end">baseline</div> - <div style="align-self: flex-start">above</div> -</div> -after text -</div> - -<div> -before text -<div class="inline-flexbox"> - <h2>h2 baseline</h2> - <div>above</div> -</div> -after text -</div> - -<div> -before text -<div class="inline-flexbox"> - <div>baseline</div> - <h2>h2 below</h2> -</div> -after text -</div> - -<!-- If the first flex item has an orthogonal baseline, use the synthesized -baseline (bottom of the content box of the first item). --> -<div> -should align with the middle -<div class="inline-flexbox" style="width: 40px; height: 40px"> - <div style="writing-mode: vertical-rl; height: 20px; width: 40px; border-bottom: 1px solid black"></div> -</div> -of the grey flexbox -</div> - -<!-- If there are no flexitems, align to the bottom of the box. --> -<div> -should align with the bottom -<div class="inline-flexbox" style="width: 30px; height: 30px"> -</div> -of the grey flexbox -</div> - - -<!-- cross-axis (column) test cases. --> -<div> -before text -<div class="inline-flexbox column"> - <div>baseline</div> - <div>below</div> -</div> -after text -</div> - -<div> -before text -<div class="inline-flexbox column-reverse"> - <div>baseline</div> - <div>above</div> -</div> -after text -</div> - -<!-- If the first flex item has an orthogonal baseline, use the synthesized -baseline (bottom of the content box of the first item). --> -<div> -should align with the middle -<div class="inline-flexbox column" style="width: 40px; height: 40px;"> - <div style="writing-mode: vertical-rl; width: 40px; height: 20px; border-bottom: 1px solid black"></div> - <div style="writing-mode: vertical-rl; width: 40px; height: 20px"></div> -</div> -of the grey flexbox -</div> - -<!-- If there are no flexitems, align to the bottom of the box. --> -<div> -should align with the bottom -<div class="inline-flexbox column" style="width: 30px; height: 30px"> -</div> -of the grey flexbox -</div> - -<!-- More tests on the right side of the page. --> -<div style="position: absolute; top: 0; left: 400px; width: 360px"> - -<!-- Ignore absolutely positioned flex items. --> -<div> -before text -<div class="inline-flexbox"> - <div style="position: absolute">absolute</div> - <div style="margin-top: 30px">baseline</div> -</div> -after text -</div> - -<!-- We don't participate in baseline alignment if there's an auto margin. --> -<div> -before text -<div class="inline-flexbox" style="height: 40px;"> - <div>baseline</div> - <div style="align-self: baseline; margin-top: auto">below</div> -</div> -after text -</div> - -<div> -before text -<div style="display: inline-block"> -<div class="inline-flexbox" style="height: 40px;"> - <div>above</div> - <div style="align-self: baseline; margin-top: 10px">baseline</div> - <div>above</div> -</div> -after -</div> -text -</div> - -<!-- The spec is a little unclear what should happen here. For now, align to -the last line box. --> -<div> -before text -<div style="display: inline-block"> -<div class="flexbox" style="height: 30px;"> - baseline -</div> -</div> -after text -</div> - -<table style="background-color: lightgrey; margin-top: 5px"> -<tr style="height: 50px"> - <td style="vertical-align: bottom">bottom</td> - <td style="vertical-align: baseline">baseline</td> - <td style="vertical-align: top">top</td> - <td style="vertical-align: baseline"><div class="flexbox column"> - <div>baseline</div> - <div>below</div> - </div></td> - <td style="vertical-align: baseline"><div class="flexbox column-reverse"> - <div>baseline</div> - <div>above</div> - </div></td> -</tr> -</table> - -<table style="background-color: lightgrey; margin-top: 5px"> -<tr style="height: 50px"> - <td style="vertical-align: bottom">bottom</td> - <td style="vertical-align: baseline">baseline</td> - <td style="vertical-align: top">top</td> - <td style="vertical-align: baseline"><div class="flexbox"> - <h2>h2 baseline</h2> - <div>above</div> - </div></td> -</table> - -<!-- If a box contributing a baseline has a scrollbar, the box must be treated -as being in its initial scroll position when computing the baseline. --> -<div> -before text -<div id="flexbox-with-scrollbar" class="inline-flexbox" style="height: 65px; width: 150px"> - <div id="flexitem-with-scrollbar" style="align-self: baseline; padding-top: 15px; height: 50px; overflow-y: scroll;"> - The baseline is based on<br> - the non-scrolled position;<br> - this won't line up. - </div> -</div> -after text -</div> - -</div> - -<script> -document.getElementById("flexitem-with-scrollbar").scrollTop = 999; -document.getElementById("flexbox-with-scrollbar").style.width = "auto"; -</script> - -</body> -</html>
diff --git a/third_party/blink/web_tests/external/WPT_BASE_MANIFEST_8.json b/third_party/blink/web_tests/external/WPT_BASE_MANIFEST_8.json index 1a49fa4..81eaf1b 100644 --- a/third_party/blink/web_tests/external/WPT_BASE_MANIFEST_8.json +++ b/third_party/blink/web_tests/external/WPT_BASE_MANIFEST_8.json
@@ -331063,7 +331063,7 @@ [] ], "webidl.idl": [ - "43748c5ac4c889b73a8e78b8732ae6b235684266", + "9993673361aad662b83e96b491ddf6c6864f9100", [] ], "webmidi.idl": [ @@ -338857,7 +338857,7 @@ [] ], "getdisplaymedia.https-expected.txt": [ - "c47ba50cb142e7bbaaf8459f44ff532845b51b30", + "4cdf6f2574d11071332d57eef4113c77b312ee9d", [] ], "permissions-policy-audio.https.sub-expected.txt": [ @@ -348419,7 +348419,11 @@ "0e4f14b96247b4855fbda1df2a719b61b07f4a48", [] ] - } + }, + "idlharness-shadowrealm.window-expected.txt": [ + "2db45e1a047c174b9c072cddd88d6f749c59eb7c", + [] + ] }, "webmessaging": { "DIR_METADATA": [ @@ -538782,7 +538786,7 @@ ] ], "getdisplaymedia.https.html": [ - "33e70acacbf6a3d88adb7e8626afee1dbfa6abb3", + "69b47474be0192f5fa860fec89133b14320f0760", [ null, { @@ -546832,9 +546836,17 @@ ] ], "referrer-policy.https.html": [ - "e3c6e8aeb06c6b4bd9b3c38b5a7982a885886ca3", + "6d942fad0ddee198ab5dedbd61c67248de6e5316", [ - null, + "speculation-rules/prefetch/referrer-policy.https.html?1-1", + {} + ], + [ + "speculation-rules/prefetch/referrer-policy.https.html?2-2", + {} + ], + [ + "speculation-rules/prefetch/referrer-policy.https.html?3-last", {} ] ], @@ -571674,6 +571686,20 @@ ] ] }, + "idlharness-shadowrealm.window.js": [ + "ab1ca9a0198720d537744cdc8777205317b41f58", + [ + "webidl/idlharness-shadowrealm.window.html", + { + "script_metadata": [ + [ + "script", + "/resources/idlharness-shadowrealm.js" + ] + ] + } + ] + ], "idlharness.any.js": [ "3c662ba8e63f2f585ce1c5674eb1e165e5810313", [ @@ -574305,6 +574331,16 @@ } ] ], + "rid-manipulation.html": [ + "a88506305a1d58944e6e6c2f01b26d8aef882909", + [ + null, + { + "testdriver": true, + "timeout": "long" + } + ] + ], "setParameters-active.https.html": [ "86afa4082e27e5b6afa43f3e2a1f71766511dcc7", [
diff --git a/third_party/blink/web_tests/external/wpt/css/css-flexbox/alignment/flex-align-baseline-flex-001.html b/third_party/blink/web_tests/external/wpt/css/css-flexbox/alignment/flex-align-baseline-flex-001.html new file mode 100644 index 0000000..dda6c37 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-flexbox/alignment/flex-align-baseline-flex-001.html
@@ -0,0 +1,260 @@ +<!DOCTYPE html> +<link rel="help" href="https://drafts.csswg.org/css-flexbox-1/#flex-baselines"> +<style> +.target { + display: flex; + position: relative; + line-height: 0; + font-size: 20px; + inline-size: 200px; + margin-block: 10px; + padding: 10px; + border: solid 3px; +} + +.inner { + display: flex; + border: solid 5px; + padding: 10px; +} + +span { + display: inline-block; + width: 1em; + height: 1em; + outline: solid cyan 3px; + outline-offset: -3px; +} +</style> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/resources/check-layout-th.js"></script> +<body onload="checkLayout('.target > *')"> + +<div class="target" style="align-items: first baseline;"> + <div data-offset-y="15"><span></span></div> + <div class="inner" data-offset-y="10"> + <div style="font-size: 10px;"><span></span></div> + <div style="font-size: 30px;"><span></span></div> + </div> +</div> + +<div class="target" style="align-items: last baseline;"> + <div data-offset-y="35"><span></span></div> + <div class="inner" data-offset-y="10"> + <div style="font-size: 10px;"><span></span></div> + <div style="font-size: 30px;"><span></span></div> + </div> +</div> + +<div class="target" style="align-items: first baseline;"> + <div data-offset-y="35"><span></span></div> + <div class="inner" style="flex-direction: row-reverse;" data-offset-y="10"> + <div style="font-size: 10px;"><span></span></div> + <div style="font-size: 30px;"><span></span></div> + </div> +</div> + +<div class="target" style="align-items: last baseline;"> + <div data-offset-y="15"><span></span></div> + <div class="inner" style="flex-direction: row-reverse;" data-offset-y="10"> + <div style="font-size: 10px;"><span></span></div> + <div style="font-size: 30px;"><span></span></div> + </div> +</div> + +<div class="target" style="align-items: first baseline;"> + <div data-offset-y="15"><span></span></div> + <div class="inner" style="flex-direction: column;" data-offset-y="10"> + <div style="font-size: 10px;"><span></span></div> + <div style="font-size: 30px;"><span></span></div> + </div> +</div> + +<div class="target" style="align-items: last baseline;"> + <div data-offset-y="45"><span></span></div> + <div class="inner" style="flex-direction: column;" data-offset-y="10"> + <div style="font-size: 10px;"><span></span></div> + <div style="font-size: 30px;"><span></span></div> + </div> +</div> + +<div class="target" style="align-items: first baseline;"> + <div data-offset-y="35"><span></span></div> + <div class="inner" style="flex-direction: column-reverse;" data-offset-y="10"> + <div style="font-size: 10px;"><span></span></div> + <div style="font-size: 30px;"><span></span></div> + </div> +</div> + +<div class="target" style="align-items: last baseline;"> + <div data-offset-y="45"><span></span></div> + <div class="inner" style="flex-direction: column-reverse;" data-offset-y="10"> + <div style="font-size: 10px;"><span></span></div> + <div style="font-size: 30px;"><span></span></div> + </div> +</div> + +<!-- flex-wrap: wrap --> + +<div class="target" style="align-items: first baseline;"> + <div data-offset-y="25"><span></span></div> + <div class="inner" style="flex-wrap: wrap; inline-size: 50px;" data-offset-y="10"> + <div style="font-size: 20px;"><span></span></div> + <div style="font-size: 30px;"><span></span></div> + <div style="font-size: 10px;"><span></span></div> + <div style="font-size: 35px;"><span></span></div> + </div> +</div> + +<div class="target" style="align-items: last baseline;"> + <div data-offset-y="70"><span></span></div> + <div class="inner" style="flex-wrap: wrap; inline-size: 50px;" data-offset-y="10"> + <div style="font-size: 20px;"><span></span></div> + <div style="font-size: 30px;"><span></span></div> + <div style="font-size: 10px;"><span></span></div> + <div style="font-size: 35px;"><span></span></div> + </div> +</div> + +<div class="target" style="align-items: first baseline;"> + <div data-offset-y="35"><span></span></div> + <div class="inner" style="flex-wrap: wrap; flex-direction: row-reverse; inline-size: 50px;" data-offset-y="10"> + <div style="font-size: 20px;"><span></span></div> + <div style="font-size: 30px;"><span></span></div> + <div style="font-size: 10px;"><span></span></div> + <div style="font-size: 35px;"><span></span></div> + </div> +</div> + +<div class="target" style="align-items: last baseline;"> + <div data-offset-y="45"><span></span></div> + <div class="inner" style="flex-wrap: wrap; flex-direction: row-reverse; inline-size: 50px;" data-offset-y="10"> + <div style="font-size: 20px;"><span></span></div> + <div style="font-size: 30px;"><span></span></div> + <div style="font-size: 10px;"><span></span></div> + <div style="font-size: 35px;"><span></span></div> + </div> +</div> + +<div class="target" style="align-items: first baseline;"> + <div data-offset-y="25"><span></span></div> + <div class="inner" style="flex-wrap: wrap; flex-direction: column; block-size: 50px;" data-offset-y="10"> + <div style="font-size: 20px;"><span></span></div> + <div style="font-size: 30px;"><span></span></div> + <div style="font-size: 10px;"><span></span></div> + <div style="font-size: 35px;"><span></span></div> + </div> +</div> + +<div class="target" style="align-items: last baseline;"> + <div data-offset-y="50"><span></span></div> + <div class="inner" style="flex-wrap: wrap; flex-direction: column; block-size: 50px;" data-offset-y="10"> + <div style="font-size: 20px;"><span></span></div> + <div style="font-size: 30px;"><span></span></div> + <div style="font-size: 10px;"><span></span></div> + <div style="font-size: 35px;"><span></span></div> + </div> +</div> + +<div class="target" style="align-items: first baseline;"> + <div data-offset-y="35"><span></span></div> + <div class="inner" style="flex-wrap: wrap; flex-direction: column-reverse; block-size: 50px;" data-offset-y="10"> + <div style="font-size: 20px;"><span></span></div> + <div style="font-size: 30px;"><span></span></div> + <div style="font-size: 10px;"><span></span></div> + <div style="font-size: 35px;"><span></span></div> + </div> +</div> + +<div class="target" style="align-items: last baseline;"> + <div data-offset-y="55"><span></span></div> + <div class="inner" style="flex-wrap: wrap; flex-direction: column-reverse; block-size: 50px;" data-offset-y="10"> + <div style="font-size: 20px;"><span></span></div> + <div style="font-size: 30px;"><span></span></div> + <div style="font-size: 10px;"><span></span></div> + <div style="font-size: 35px;"><span></span></div> + </div> +</div> + +<!-- flex-wrap: wrap-reverse --> + +<div class="target" style="align-items: first baseline;"> + <div data-offset-y="15"><span></span></div> + <div class="inner" style="flex-wrap: wrap-reverse; inline-size: 50px;" data-offset-y="10"> + <div style="font-size: 20px;"><span></span></div> + <div style="font-size: 30px;"><span></span></div> + <div style="font-size: 10px;"><span></span></div> + <div style="font-size: 35px;"><span></span></div> + </div> +</div> + +<div class="target" style="align-items: last baseline;"> + <div data-offset-y="70"><span></span></div> + <div class="inner" style="flex-wrap: wrap-reverse; inline-size: 50px;" data-offset-y="10"> + <div style="font-size: 20px;"><span></span></div> + <div style="font-size: 30px;"><span></span></div> + <div style="font-size: 10px;"><span></span></div> + <div style="font-size: 35px;"><span></span></div> + </div> +</div> + +<div class="target" style="align-items: first baseline;"> + <div data-offset-y="40"><span></span></div> + <div class="inner" style="flex-wrap: wrap-reverse; flex-direction: row-reverse; inline-size: 50px;" data-offset-y="10"> + <div style="font-size: 20px;"><span></span></div> + <div style="font-size: 30px;"><span></span></div> + <div style="font-size: 10px;"><span></span></div> + <div style="font-size: 35px;"><span></span></div> + </div> +</div> + +<div class="target" style="align-items: last baseline;"> + <div data-offset-y="60"><span></span></div> + <div class="inner" style="flex-wrap: wrap-reverse; flex-direction: row-reverse; inline-size: 50px;" data-offset-y="10"> + <div style="font-size: 20px;"><span></span></div> + <div style="font-size: 30px;"><span></span></div> + <div style="font-size: 10px;"><span></span></div> + <div style="font-size: 35px;"><span></span></div> + </div> +</div> + +<div class="target" style="align-items: first baseline;"> + <div data-offset-y="15"><span></span></div> + <div class="inner" style="flex-wrap: wrap-reverse; flex-direction: column; block-size: 50px;" data-offset-y="10"> + <div style="font-size: 20px;"><span></span></div> + <div style="font-size: 30px;"><span></span></div> + <div style="font-size: 10px;"><span></span></div> + <div style="font-size: 35px;"><span></span></div> + </div> +</div> + +<div class="target" style="align-items: last baseline;"> + <div data-offset-y="55"><span></span></div> + <div class="inner" style="flex-wrap: wrap-reverse; flex-direction: column; block-size: 50px;" data-offset-y="10"> + <div style="font-size: 20px;"><span></span></div> + <div style="font-size: 30px;"><span></span></div> + <div style="font-size: 10px;"><span></span></div> + <div style="font-size: 35px;"><span></span></div> + </div> +</div> + +<div class="target" style="align-items: first baseline;"> + <div data-offset-y="45"><span></span></div> + <div class="inner" style="flex-wrap: wrap-reverse; flex-direction: column-reverse; block-size: 50px;" data-offset-y="10"> + <div style="font-size: 20px;"><span></span></div> + <div style="font-size: 30px;"><span></span></div> + <div style="font-size: 10px;"><span></span></div> + <div style="font-size: 35px;"><span></span></div> + </div> +</div> + +<div class="target" style="align-items: last baseline;"> + <div data-offset-y="55"><span></span></div> + <div class="inner" style="flex-wrap: wrap-reverse; flex-direction: column-reverse; block-size: 50px;" data-offset-y="10"> + <div style="font-size: 20px;"><span></span></div> + <div style="font-size: 30px;"><span></span></div> + <div style="font-size: 10px;"><span></span></div> + <div style="font-size: 35px;"><span></span></div> + </div> +</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-flexbox/alignment/flex-align-baseline-flex-002.html b/third_party/blink/web_tests/external/wpt/css/css-flexbox/alignment/flex-align-baseline-flex-002.html new file mode 100644 index 0000000..fc8e9f7 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-flexbox/alignment/flex-align-baseline-flex-002.html
@@ -0,0 +1,261 @@ +<!DOCTYPE html> +<link rel="help" href="https://drafts.csswg.org/css-flexbox-1/#flex-baselines"> +<style> +.target { + display: flex; + position: relative; + line-height: 0; + font-size: 20px; + inline-size: 200px; + margin-inline: 10px; + padding: 10px; + border: solid 3px; + writing-mode: vertical-rl; +} + +.inner { + display: flex; + border: solid 5px; + padding: 10px; +} + +span { + display: inline-block; + width: 1em; + height: 1em; + outline: solid cyan 3px; + outline-offset: -3px; +} +</style> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/resources/check-layout-th.js"></script> +<body onload="checkLayout('.target > *')"> + +<div class="target" style="align-items: first baseline;"> + <div data-offset-x="40"><span></span></div> + <div class="inner" data-offset-x="10"> + <div style="font-size: 10px;"><span></span></div> + <div style="font-size: 30px;"><span></span></div> + </div> +</div> + +<div class="target" style="align-items: last baseline;"> + <div data-offset-x="30"><span></span></div> + <div class="inner" data-offset-x="10"> + <div style="font-size: 10px;"><span></span></div> + <div style="font-size: 30px;"><span></span></div> + </div> +</div> + +<div class="target" style="align-items: first baseline;"> + <div data-offset-x="30"><span></span></div> + <div class="inner" style="flex-direction: row-reverse;" data-offset-x="10"> + <div style="font-size: 10px;"><span></span></div> + <div style="font-size: 30px;"><span></span></div> + </div> +</div> + +<div class="target" style="align-items: last baseline;"> + <div data-offset-x="40"><span></span></div> + <div class="inner" style="flex-direction: row-reverse;" data-offset-x="10"> + <div style="font-size: 10px;"><span></span></div> + <div style="font-size: 30px;"><span></span></div> + </div> +</div> + +<div class="target" style="align-items: first baseline;"> + <div data-offset-x="50"><span></span></div> + <div class="inner" style="flex-direction: column;" data-offset-x="10"> + <div style="font-size: 10px;"><span></span></div> + <div style="font-size: 30px;"><span></span></div> + </div> +</div> + +<div class="target" style="align-items: last baseline;"> + <div data-offset-x="30"><span></span></div> + <div class="inner" style="flex-direction: column;" data-offset-x="10"> + <div style="font-size: 10px;"><span></span></div> + <div style="font-size: 30px;"><span></span></div> + </div> +</div> + +<div class="target" style="align-items: first baseline;"> + <div data-offset-x="40"><span></span></div> + <div class="inner" style="flex-direction: column-reverse;" data-offset-x="10"> + <div style="font-size: 10px;"><span></span></div> + <div style="font-size: 30px;"><span></span></div> + </div> +</div> + +<div class="target" style="align-items: last baseline;"> + <div data-offset-x="20"><span></span></div> + <div class="inner" style="flex-direction: column-reverse;" data-offset-x="10"> + <div style="font-size: 10px;"><span></span></div> + <div style="font-size: 30px;"><span></span></div> + </div> +</div> + +<!-- flex-wrap: wrap --> + +<div class="target" style="align-items: first baseline;"> + <div data-offset-x="70"><span></span></div> + <div class="inner" style="flex-wrap: wrap; inline-size: 50px;" data-offset-x="10"> + <div style="font-size: 20px;"><span></span></div> + <div style="font-size: 30px;"><span></span></div> + <div style="font-size: 10px;"><span></span></div> + <div style="font-size: 35px;"><span></span></div> + </div> +</div> + +<div class="target" style="align-items: last baseline;"> + <div data-offset-x="33"><span></span></div> + <div class="inner" style="flex-wrap: wrap; inline-size: 50px;" data-offset-x="10"> + <div style="font-size: 20px;"><span></span></div> + <div style="font-size: 30px;"><span></span></div> + <div style="font-size: 10px;"><span></span></div> + <div style="font-size: 35px;"><span></span></div> + </div> +</div> + +<div class="target" style="align-items: first baseline;"> + <div data-offset-x="65"><span></span></div> + <div class="inner" style="flex-wrap: wrap; flex-direction: row-reverse; inline-size: 50px;" data-offset-x="10"> + <div style="font-size: 20px;"><span></span></div> + <div style="font-size: 30px;"><span></span></div> + <div style="font-size: 10px;"><span></span></div> + <div style="font-size: 35px;"><span></span></div> + </div> +</div> + +<div class="target" style="align-items: last baseline;"> + <div data-offset-x="45"><span></span></div> + <div class="inner" style="flex-wrap: wrap; flex-direction: row-reverse; inline-size: 50px;" data-offset-x="10"> + <div style="font-size: 20px;"><span></span></div> + <div style="font-size: 30px;"><span></span></div> + <div style="font-size: 10px;"><span></span></div> + <div style="font-size: 35px;"><span></span></div> + </div> +</div> + +<div class="target" style="align-items: first baseline;"> + <div data-offset-x="55"><span></span></div> + <div class="inner" style="flex-wrap: wrap; flex-direction: column; block-size: 50px;" data-offset-x="10"> + <div style="font-size: 20px;"><span></span></div> + <div style="font-size: 30px;"><span></span></div> + <div style="font-size: 10px;"><span></span></div> + <div style="font-size: 35px;"><span></span></div> + </div> +</div> + +<div class="target" style="align-items: last baseline;"> + <div data-offset-x="38"><span></span></div> + <div class="inner" style="flex-wrap: wrap; flex-direction: column; block-size: 50px;" data-offset-x="10"> + <div style="font-size: 20px;"><span></span></div> + <div style="font-size: 30px;"><span></span></div> + <div style="font-size: 10px;"><span></span></div> + <div style="font-size: 35px;"><span></span></div> + </div> +</div> + +<div class="target" style="align-items: first baseline;"> + <div data-offset-x="50"><span></span></div> + <div class="inner" style="flex-wrap: wrap; flex-direction: column-reverse; block-size: 50px;" data-offset-x="10"> + <div style="font-size: 20px;"><span></span></div> + <div style="font-size: 30px;"><span></span></div> + <div style="font-size: 10px;"><span></span></div> + <div style="font-size: 35px;"><span></span></div> + </div> +</div> + +<div class="target" style="align-items: last baseline;"> + <div data-offset-x="20"><span></span></div> + <div class="inner" style="flex-wrap: wrap; flex-direction: column-reverse; block-size: 50px;" data-offset-x="10"> + <div style="font-size: 20px;"><span></span></div> + <div style="font-size: 30px;"><span></span></div> + <div style="font-size: 10px;"><span></span></div> + <div style="font-size: 35px;"><span></span></div> + </div> +</div> + +<!-- flex-wrap: wrap-reverse --> + +<div class="target" style="align-items: first baseline;"> + <div data-offset-x="75"><span></span></div> + <div class="inner" style="flex-wrap: wrap-reverse; inline-size: 50px;" data-offset-x="10"> + <div style="font-size: 20px;"><span></span></div> + <div style="font-size: 30px;"><span></span></div> + <div style="font-size: 10px;"><span></span></div> + <div style="font-size: 35px;"><span></span></div> + </div> +</div> + +<div class="target" style="align-items: last baseline;"> + <div data-offset-x="30"><span></span></div> + <div class="inner" style="flex-wrap: wrap-reverse; inline-size: 50px;" data-offset-x="10"> + <div style="font-size: 20px;"><span></span></div> + <div style="font-size: 30px;"><span></span></div> + <div style="font-size: 10px;"><span></span></div> + <div style="font-size: 35px;"><span></span></div> + </div> +</div> + +<div class="target" style="align-items: first baseline;"> + <div data-offset-x="63"><span></span></div> + <div class="inner" style="flex-wrap: wrap-reverse; flex-direction: row-reverse; inline-size: 50px;" data-offset-x="10"> + <div style="font-size: 20px;"><span></span></div> + <div style="font-size: 30px;"><span></span></div> + <div style="font-size: 10px;"><span></span></div> + <div style="font-size: 35px;"><span></span></div> + </div> +</div> + +<div class="target" style="align-items: last baseline;"> + <div data-offset-x="35"><span></span></div> + <div class="inner" style="flex-wrap: wrap-reverse; flex-direction: row-reverse; inline-size: 50px;" data-offset-x="10"> + <div style="font-size: 20px;"><span></span></div> + <div style="font-size: 30px;"><span></span></div> + <div style="font-size: 10px;"><span></span></div> + <div style="font-size: 35px;"><span></span></div> + </div> +</div> + +<div class="target" style="align-items: first baseline;"> + <div data-offset-x="60"><span></span></div> + <div class="inner" style="flex-wrap: wrap-reverse; flex-direction: column; block-size: 50px;" data-offset-x="10"> + <div style="font-size: 20px;"><span></span></div> + <div style="font-size: 30px;"><span></span></div> + <div style="font-size: 10px;"><span></span></div> + <div style="font-size: 35px;"><span></span></div> + </div> +</div> + +<div class="target" style="align-items: last baseline;"> + <div data-offset-x="30"><span></span></div> + <div class="inner" style="flex-wrap: wrap-reverse; flex-direction: column; block-size: 50px;" data-offset-x="10"> + <div style="font-size: 20px;"><span></span></div> + <div style="font-size: 30px;"><span></span></div> + <div style="font-size: 10px;"><span></span></div> + <div style="font-size: 35px;"><span></span></div> + </div> +</div> + +<div class="target" style="align-items: first baseline;"> + <div data-offset-x="43"><span></span></div> + <div class="inner" style="flex-wrap: wrap-reverse; flex-direction: column-reverse; block-size: 50px;" data-offset-x="10"> + <div style="font-size: 20px;"><span></span></div> + <div style="font-size: 30px;"><span></span></div> + <div style="font-size: 10px;"><span></span></div> + <div style="font-size: 35px;"><span></span></div> + </div> +</div> + +<div class="target" style="align-items: last baseline;"> + <div data-offset-x="25"><span></span></div> + <div class="inner" style="flex-wrap: wrap-reverse; flex-direction: column-reverse; block-size: 50px;" data-offset-x="10"> + <div style="font-size: 20px;"><span></span></div> + <div style="font-size: 30px;"><span></span></div> + <div style="font-size: 10px;"><span></span></div> + <div style="font-size: 35px;"><span></span></div> + </div> +</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-flexbox/alignment/flex-align-baseline-flex-003.html b/third_party/blink/web_tests/external/wpt/css/css-flexbox/alignment/flex-align-baseline-flex-003.html new file mode 100644 index 0000000..0d2c2a7 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-flexbox/alignment/flex-align-baseline-flex-003.html
@@ -0,0 +1,129 @@ +<!DOCTYPE html> +<link rel="help" href="https://drafts.csswg.org/css-flexbox-1/#flex-baselines"> +<style> +.target { + display: flex; + position: relative; + line-height: 0; + font-size: 20px; + inline-size: 200px; + margin-block: 10px; + padding: 10px; + border: solid 3px; +} + +.inner { + display: flex; + border: solid 5px; + padding: 10px; + gap: 10px; +} + +span { + display: inline-block; + width: 1em; + height: 1em; + outline: solid cyan 3px; + outline-offset: -3px; +} +</style> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/resources/check-layout-th.js"></script> +<body onload="checkLayout('.target > *')"> + +<div class="target" style="align-items: first baseline;"> + <div data-offset-y="45"><span></span></div> + <div class="inner" style="inline-size: 140px; flex-wrap: wrap;" data-offset-y="10"> + <div style="font-size: 10px;"><span></span></div> + <div style="font-size: 30px; margin-block: 10px; align-self: first baseline;"><span></span></div> + <div style="font-size: 50px;"><span></span></div> + <div style="font-size: 60px;"><span></span></div> + <div style="font-size: 40px; margin-block: 10px; align-self: first baseline;"><span></span></div> + <div style="font-size: 20px;"><span></span></div> + </div> +</div> + +<div class="target" style="align-items: first baseline;"> + <div data-offset-y="45"><span></span></div> + <div class="inner" style="inline-size: 140px; flex-wrap: wrap;" data-offset-y="10"> + <div style="font-size: 10px;"><span></span></div> + <div style="font-size: 30px; margin-block: 10px; align-self: last baseline;"><span></span></div> + <div style="font-size: 50px;"><span></span></div> + <div style="font-size: 60px;"><span></span></div> + <div style="font-size: 40px; margin-block: 10px; align-self: last baseline;"><span></span></div> + <div style="font-size: 20px;"><span></span></div> + </div> +</div> + +<div class="target" style="align-items: first baseline;"> + <div data-offset-y="55"><span></span></div> + <div class="inner" style="inline-size: 140px; flex-wrap: wrap-reverse;" data-offset-y="10"> + <div style="font-size: 10px;"><span></span></div> + <div style="font-size: 30px; margin-block: 10px; align-self: first baseline;"><span></span></div> + <div style="font-size: 50px;"><span></span></div> + <div style="font-size: 60px;"><span></span></div> + <div style="font-size: 40px; margin-block: 10px; align-self: first baseline;"><span></span></div> + <div style="font-size: 20px;"><span></span></div> + </div> +</div> + +<div class="target" style="align-items: first baseline;"> + <div data-offset-y="55"><span></span></div> + <div class="inner" style="inline-size: 140px; flex-wrap: wrap-reverse;" data-offset-y="10"> + <div style="font-size: 10px;"><span></span></div> + <div style="font-size: 30px; margin-block: 10px; align-self: last baseline;"><span></span></div> + <div style="font-size: 50px;"><span></span></div> + <div style="font-size: 60px;"><span></span></div> + <div style="font-size: 40px; margin-block: 10px; align-self: last baseline;"><span></span></div> + <div style="font-size: 20px;"><span></span></div> + </div> +</div> + +<div class="target" style="align-items: last baseline;"> + <div data-offset-y="115"><span></span></div> + <div class="inner" style="inline-size: 140px; flex-wrap: wrap;" data-offset-y="10"> + <div style="font-size: 10px;"><span></span></div> + <div style="font-size: 30px; margin-block: 10px; align-self: first baseline;"><span></span></div> + <div style="font-size: 50px;"><span></span></div> + <div style="font-size: 60px;"><span></span></div> + <div style="font-size: 40px; margin-block: 10px; align-self: first baseline;"><span></span></div> + <div style="font-size: 20px;"><span></span></div> + </div> +</div> + +<div class="target" style="align-items: last baseline;"> + <div data-offset-y="115"><span></span></div> + <div class="inner" style="inline-size: 140px; flex-wrap: wrap;" data-offset-y="10"> + <div style="font-size: 10px;"><span></span></div> + <div style="font-size: 30px; margin-block: 10px; align-self: last baseline;"><span></span></div> + <div style="font-size: 50px;"><span></span></div> + <div style="font-size: 60px;"><span></span></div> + <div style="font-size: 40px; margin-block: 10px; align-self: last baseline;"><span></span></div> + <div style="font-size: 20px;"><span></span></div> + </div> +</div> + +<div class="target" style="align-items: last baseline;"> + <div data-offset-y="115"><span></span></div> + <div class="inner" style="inline-size: 140px; flex-wrap: wrap-reverse;" data-offset-y="10"> + <div style="font-size: 10px;"><span></span></div> + <div style="font-size: 30px; margin-block: 10px; align-self: first baseline;"><span></span></div> + <div style="font-size: 50px;"><span></span></div> + <div style="font-size: 60px;"><span></span></div> + <div style="font-size: 40px; margin-block: 10px; align-self: first baseline;"><span></span></div> + <div style="font-size: 20px;"><span></span></div> + </div> +</div> + +<div class="target" style="align-items: last baseline;"> + <div data-offset-y="115"><span></span></div> + <div class="inner" style="inline-size: 140px; flex-wrap: wrap-reverse;" data-offset-y="10"> + <div style="font-size: 10px;"><span></span></div> + <div style="font-size: 30px; margin-block: 10px; align-self: last baseline;"><span></span></div> + <div style="font-size: 50px;"><span></span></div> + <div style="font-size: 60px;"><span></span></div> + <div style="font-size: 40px; margin-block: 10px; align-self: last baseline;"><span></span></div> + <div style="font-size: 20px;"><span></span></div> + </div> +</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-flexbox/alignment/flex-align-baseline-flex-004.html b/third_party/blink/web_tests/external/wpt/css/css-flexbox/alignment/flex-align-baseline-flex-004.html new file mode 100644 index 0000000..eaedd81 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-flexbox/alignment/flex-align-baseline-flex-004.html
@@ -0,0 +1,130 @@ +<!DOCTYPE html> +<link rel="help" href="https://drafts.csswg.org/css-flexbox-1/#flex-baselines"> +<style> +.target { + display: flex; + position: relative; + line-height: 0; + font-size: 20px; + inline-size: 200px; + margin-block: 10px; + padding: 10px; + border: solid 3px; + writing-mode: vertical-rl; +} + +.inner { + display: flex; + border: solid 5px; + padding: 10px; + gap: 10px; +} + +span { + display: inline-block; + width: 1em; + height: 1em; + outline: solid cyan 3px; + outline-offset: -3px; +} +</style> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/resources/check-layout-th.js"></script> +<body onload="checkLayout('.target > *')"> + +<div class="target" style="align-items: first baseline;"> + <div data-offset-x="110"><span></span></div> + <div class="inner" style="inline-size: 140px; flex-wrap: wrap;" data-offset-x="10"> + <div style="font-size: 10px;"><span></span></div> + <div style="font-size: 30px; margin-block: 10px; align-self: first baseline;"><span></span></div> + <div style="font-size: 50px;"><span></span></div> + <div style="font-size: 60px;"><span></span></div> + <div style="font-size: 40px; margin-block: 10px; align-self: first baseline;"><span></span></div> + <div style="font-size: 20px;"><span></span></div> + </div> +</div> + +<div class="target" style="align-items: first baseline;"> + <div data-offset-x="110"><span></span></div> + <div class="inner" style="inline-size: 140px; flex-wrap: wrap;" data-offset-x="10"> + <div style="font-size: 10px;"><span></span></div> + <div style="font-size: 30px; margin-block: 10px; align-self: last baseline;"><span></span></div> + <div style="font-size: 50px;"><span></span></div> + <div style="font-size: 60px;"><span></span></div> + <div style="font-size: 40px; margin-block: 10px; align-self: last baseline;"><span></span></div> + <div style="font-size: 20px;"><span></span></div> + </div> +</div> + +<div class="target" style="align-items: first baseline;"> + <div data-offset-x="105"><span></span></div> + <div class="inner" style="inline-size: 140px; flex-wrap: wrap-reverse;" data-offset-x="10"> + <div style="font-size: 10px;"><span></span></div> + <div style="font-size: 30px; margin-block: 10px; align-self: first baseline;"><span></span></div> + <div style="font-size: 50px;"><span></span></div> + <div style="font-size: 60px;"><span></span></div> + <div style="font-size: 40px; margin-block: 10px; align-self: first baseline;"><span></span></div> + <div style="font-size: 20px;"><span></span></div> + </div> +</div> + +<div class="target" style="align-items: first baseline;"> + <div data-offset-x="105"><span></span></div> + <div class="inner" style="inline-size: 140px; flex-wrap: wrap-reverse;" data-offset-x="10"> + <div style="font-size: 10px;"><span></span></div> + <div style="font-size: 30px; margin-block: 10px; align-self: last baseline;"><span></span></div> + <div style="font-size: 50px;"><span></span></div> + <div style="font-size: 60px;"><span></span></div> + <div style="font-size: 40px; margin-block: 10px; align-self: last baseline;"><span></span></div> + <div style="font-size: 20px;"><span></span></div> + </div> +</div> + +<div class="target" style="align-items: last baseline;"> + <div data-offset-x="45"><span></span></div> + <div class="inner" style="inline-size: 140px; flex-wrap: wrap;" data-offset-x="10"> + <div style="font-size: 10px;"><span></span></div> + <div style="font-size: 30px; margin-block: 10px; align-self: first baseline;"><span></span></div> + <div style="font-size: 50px;"><span></span></div> + <div style="font-size: 60px;"><span></span></div> + <div style="font-size: 40px; margin-block: 10px; align-self: first baseline;"><span></span></div> + <div style="font-size: 20px;"><span></span></div> + </div> +</div> + +<div class="target" style="align-items: last baseline;"> + <div data-offset-x="45"><span></span></div> + <div class="inner" style="inline-size: 140px; flex-wrap: wrap;" data-offset-x="10"> + <div style="font-size: 10px;"><span></span></div> + <div style="font-size: 30px; margin-block: 10px; align-self: last baseline;"><span></span></div> + <div style="font-size: 50px;"><span></span></div> + <div style="font-size: 60px;"><span></span></div> + <div style="font-size: 40px; margin-block: 10px; align-self: last baseline;"><span></span></div> + <div style="font-size: 20px;"><span></span></div> + </div> +</div> + +<div class="target" style="align-items: last baseline;"> + <div data-offset-x="40"><span></span></div> + <div class="inner" style="inline-size: 140px; flex-wrap: wrap-reverse;" data-offset-x="10"> + <div style="font-size: 10px;"><span></span></div> + <div style="font-size: 30px; margin-block: 10px; align-self: first baseline;"><span></span></div> + <div style="font-size: 50px;"><span></span></div> + <div style="font-size: 60px;"><span></span></div> + <div style="font-size: 40px; margin-block: 10px; align-self: first baseline;"><span></span></div> + <div style="font-size: 20px;"><span></span></div> + </div> +</div> + +<div class="target" style="align-items: last baseline;"> + <div data-offset-x="40"><span></span></div> + <div class="inner" style="inline-size: 140px; flex-wrap: wrap-reverse;" data-offset-x="10"> + <div style="font-size: 10px;"><span></span></div> + <div style="font-size: 30px; margin-block: 10px; align-self: last baseline;"><span></span></div> + <div style="font-size: 50px;"><span></span></div> + <div style="font-size: 60px;"><span></span></div> + <div style="font-size: 40px; margin-block: 10px; align-self: last baseline;"><span></span></div> + <div style="font-size: 20px;"><span></span></div> + </div> +</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-flexbox/flexbox-baseline-multi-line-horiz-002-ref.html b/third_party/blink/web_tests/external/wpt/css/css-flexbox/flexbox-baseline-multi-line-horiz-002-ref.html index 361f096..491144c 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-flexbox/flexbox-baseline-multi-line-horiz-002-ref.html +++ b/third_party/blink/web_tests/external/wpt/css/css-flexbox/flexbox-baseline-multi-line-horiz-002-ref.html
@@ -17,11 +17,10 @@ .flexContainer { display: inline-block; width: 40px; - /* Split testcase's 40px height into 20px of padding-top and 20px of - height, to set aside space for the testcase's (invisible) second line - (which is above the first line, since this is wrap-reverse) */ + /* Split testcase's 40px height into 20px of padding-bottom and 20px of + height, to set aside space for the testcase's (invisible) second line. */ height: 20px; - padding-top: 20px; + padding-bottom: 20px; background: lightblue; } .flexContainer > * { @@ -48,20 +47,13 @@ a <!-- Flex containers with flex items that have a mix of baselines: --> <div class="flexContainer medFont"> - <div class="medFont">b</div - ><div class="bigFont unaligned">c</div> + <div class="bigFont">d</div + ><div class="medFont unaligned">e</div> </div> <div class="flexContainer bigFont"> - <div class="bigFont">f</div - ><div class="smallFont unaligned">g</div> - </div> - - <!-- Flex container with second line baseline-aligned - (shouldn't make a difference) --> - <div class="flexContainer smallFont"> - <div class="smallFont">j</div - ><div class="bigFont unaligned">k</div> + <div class="bigFont">h</div + ><div class="medFont unaligned">i</div> </div> n
diff --git a/third_party/blink/web_tests/external/wpt/css/css-flexbox/flexbox-baseline-multi-line-horiz-002.html b/third_party/blink/web_tests/external/wpt/css/css-flexbox/flexbox-baseline-multi-line-horiz-002.html index bd13de7..a58a7ec5 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-flexbox/flexbox-baseline-multi-line-horiz-002.html +++ b/third_party/blink/web_tests/external/wpt/css/css-flexbox/flexbox-baseline-multi-line-horiz-002.html
@@ -33,8 +33,8 @@ /* We'll make the second flex line not paint anything, so that the reference case doesn't need to bother matching it. */ - .flexContainer > *:nth-child(3), - .flexContainer > *:nth-child(4) { + .flexContainer > *:nth-child(1), + .flexContainer > *:nth-child(2) { visibility: hidden; } @@ -65,17 +65,8 @@ <div class="flexContainer"> <div class="bigFont">f</div ><div class="smallFont">g</div - ><div class="medFont">h</div - ><div class="bigFont">i</div> - </div> - - <!-- Flex container with second line baseline-aligned - (shouldn't make a difference) --> - <div class="flexContainer"> - <div class="smallFont">j</div - ><div class="bigFont">k</div - ><div class="bigFont" style="align-self: baseline">l</div - ><div class="medFont" style="align-self: baseline">m</div> + ><div class="bigFont">h</div + ><div class="medFont">i</div> </div> n
diff --git a/third_party/blink/web_tests/external/wpt/css/css-flexbox/flexbox-baseline-multi-line-vert-002-ref.html b/third_party/blink/web_tests/external/wpt/css/css-flexbox/flexbox-baseline-multi-line-vert-002-ref.html index f660966..15538f74 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-flexbox/flexbox-baseline-multi-line-vert-002-ref.html +++ b/third_party/blink/web_tests/external/wpt/css/css-flexbox/flexbox-baseline-multi-line-vert-002-ref.html
@@ -16,12 +16,11 @@ <style> .flexContainer { display: inline-block; - /* Split testcase's 40px width into 20px of padding-left and 20px of - width, to set aside space for the testcase's (invisible) second line - (which is to the left of the first line, since this is wrap-reverse) + /* Split testcase's 40px width into 20px of padding-right and 20px of + width, to set aside space for the testcase's (invisible) second line. */ width: 20px; - padding-left: 20px; + padding-right: 20px; height: 40px; background: lightblue; } @@ -50,20 +49,15 @@ a <!-- Flex containers with flex items that have a mix of baselines: --> <div class="flexContainer medFont"> - <div class="medFont">b</div - ><br><div class="bigFont unaligned">c</div> - </div> - - <div class="flexContainer bigFont"> - <div class="bigFont">f</div - ><br><div class="smallFont unaligned">g</div> + <div class="bigFont">d</div + ><br><div class="medFont unaligned">e</div> </div> <!-- Flex container with second line baseline-aligned (shouldn't make a difference) --> <div class="flexContainer smallFont"> - <div class="smallFont">j</div - ><br><div class="bigFont unaligned">k</div> + <div class="bigFont">l</div + ><br><div class="medFont unaligned">m</div> </div> n
diff --git a/third_party/blink/web_tests/external/wpt/css/css-flexbox/flexbox-baseline-multi-line-vert-002.html b/third_party/blink/web_tests/external/wpt/css/css-flexbox/flexbox-baseline-multi-line-vert-002.html index 5bffc846..062d808 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-flexbox/flexbox-baseline-multi-line-vert-002.html +++ b/third_party/blink/web_tests/external/wpt/css/css-flexbox/flexbox-baseline-multi-line-vert-002.html
@@ -35,8 +35,8 @@ /* We'll make the second flex line not paint anything, so that the reference case doesn't need to bother matching it. */ - .flexContainer > *:nth-child(3), - .flexContainer > *:nth-child(4) { + .flexContainer > *:nth-child(1), + .flexContainer > *:nth-child(2) { visibility: hidden; } @@ -64,13 +64,6 @@ ><div class="medFont">e</div> </div> - <div class="flexContainer"> - <div class="bigFont">f</div - ><div class="smallFont">g</div - ><div class="medFont">h</div - ><div class="bigFont">i</div> - </div> - <!-- Flex container with second line baseline-aligned (shouldn't make a difference) --> <div class="flexContainer">
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-align-baseline-flex-001.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-align-baseline-flex-001.html new file mode 100644 index 0000000..d004724 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-align-baseline-flex-001.html
@@ -0,0 +1,261 @@ +<!DOCTYPE html> +<link rel="help" href="https://drafts.csswg.org/css-flexbox-1/#flex-baselines"> +<style> +.target { + display: grid; + grid-auto-flow: column; + position: relative; + line-height: 0; + font-size: 20px; + inline-size: 200px; + margin-block: 10px; + padding: 10px; + border: solid 3px; +} + +.inner { + display: flex; + border: solid 5px; + padding: 10px; +} + +span { + display: inline-block; + width: 1em; + height: 1em; + outline: solid cyan 3px; + outline-offset: -3px; +} +</style> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/resources/check-layout-th.js"></script> +<body onload="checkLayout('.target > *')"> + +<div class="target" style="align-items: first baseline;"> + <div data-offset-y="15"><span></span></div> + <div class="inner" data-offset-y="10"> + <div style="font-size: 10px;"><span></span></div> + <div style="font-size: 30px;"><span></span></div> + </div> +</div> + +<div class="target" style="align-items: last baseline;"> + <div data-offset-y="35"><span></span></div> + <div class="inner" data-offset-y="10"> + <div style="font-size: 10px;"><span></span></div> + <div style="font-size: 30px;"><span></span></div> + </div> +</div> + +<div class="target" style="align-items: first baseline;"> + <div data-offset-y="35"><span></span></div> + <div class="inner" style="flex-direction: row-reverse;" data-offset-y="10"> + <div style="font-size: 10px;"><span></span></div> + <div style="font-size: 30px;"><span></span></div> + </div> +</div> + +<div class="target" style="align-items: last baseline;"> + <div data-offset-y="15"><span></span></div> + <div class="inner" style="flex-direction: row-reverse;" data-offset-y="10"> + <div style="font-size: 10px;"><span></span></div> + <div style="font-size: 30px;"><span></span></div> + </div> +</div> + +<div class="target" style="align-items: first baseline;"> + <div data-offset-y="15"><span></span></div> + <div class="inner" style="flex-direction: column;" data-offset-y="10"> + <div style="font-size: 10px;"><span></span></div> + <div style="font-size: 30px;"><span></span></div> + </div> +</div> + +<div class="target" style="align-items: last baseline;"> + <div data-offset-y="45"><span></span></div> + <div class="inner" style="flex-direction: column;" data-offset-y="10"> + <div style="font-size: 10px;"><span></span></div> + <div style="font-size: 30px;"><span></span></div> + </div> +</div> + +<div class="target" style="align-items: first baseline;"> + <div data-offset-y="35"><span></span></div> + <div class="inner" style="flex-direction: column-reverse;" data-offset-y="10"> + <div style="font-size: 10px;"><span></span></div> + <div style="font-size: 30px;"><span></span></div> + </div> +</div> + +<div class="target" style="align-items: last baseline;"> + <div data-offset-y="45"><span></span></div> + <div class="inner" style="flex-direction: column-reverse;" data-offset-y="10"> + <div style="font-size: 10px;"><span></span></div> + <div style="font-size: 30px;"><span></span></div> + </div> +</div> + +<!-- flex-wrap: wrap --> + +<div class="target" style="align-items: first baseline;"> + <div data-offset-y="25"><span></span></div> + <div class="inner" style="flex-wrap: wrap; inline-size: 50px;" data-offset-y="10"> + <div style="font-size: 20px;"><span></span></div> + <div style="font-size: 30px;"><span></span></div> + <div style="font-size: 10px;"><span></span></div> + <div style="font-size: 35px;"><span></span></div> + </div> +</div> + +<div class="target" style="align-items: last baseline;"> + <div data-offset-y="70"><span></span></div> + <div class="inner" style="flex-wrap: wrap; inline-size: 50px;" data-offset-y="10"> + <div style="font-size: 20px;"><span></span></div> + <div style="font-size: 30px;"><span></span></div> + <div style="font-size: 10px;"><span></span></div> + <div style="font-size: 35px;"><span></span></div> + </div> +</div> + +<div class="target" style="align-items: first baseline;"> + <div data-offset-y="35"><span></span></div> + <div class="inner" style="flex-wrap: wrap; flex-direction: row-reverse; inline-size: 50px;" data-offset-y="10"> + <div style="font-size: 20px;"><span></span></div> + <div style="font-size: 30px;"><span></span></div> + <div style="font-size: 10px;"><span></span></div> + <div style="font-size: 35px;"><span></span></div> + </div> +</div> + +<div class="target" style="align-items: last baseline;"> + <div data-offset-y="45"><span></span></div> + <div class="inner" style="flex-wrap: wrap; flex-direction: row-reverse; inline-size: 50px;" data-offset-y="10"> + <div style="font-size: 20px;"><span></span></div> + <div style="font-size: 30px;"><span></span></div> + <div style="font-size: 10px;"><span></span></div> + <div style="font-size: 35px;"><span></span></div> + </div> +</div> + +<div class="target" style="align-items: first baseline;"> + <div data-offset-y="25"><span></span></div> + <div class="inner" style="flex-wrap: wrap; flex-direction: column; block-size: 50px;" data-offset-y="10"> + <div style="font-size: 20px;"><span></span></div> + <div style="font-size: 30px;"><span></span></div> + <div style="font-size: 10px;"><span></span></div> + <div style="font-size: 35px;"><span></span></div> + </div> +</div> + +<div class="target" style="align-items: last baseline;"> + <div data-offset-y="50"><span></span></div> + <div class="inner" style="flex-wrap: wrap; flex-direction: column; block-size: 50px;" data-offset-y="10"> + <div style="font-size: 20px;"><span></span></div> + <div style="font-size: 30px;"><span></span></div> + <div style="font-size: 10px;"><span></span></div> + <div style="font-size: 35px;"><span></span></div> + </div> +</div> + +<div class="target" style="align-items: first baseline;"> + <div data-offset-y="35"><span></span></div> + <div class="inner" style="flex-wrap: wrap; flex-direction: column-reverse; block-size: 50px;" data-offset-y="10"> + <div style="font-size: 20px;"><span></span></div> + <div style="font-size: 30px;"><span></span></div> + <div style="font-size: 10px;"><span></span></div> + <div style="font-size: 35px;"><span></span></div> + </div> +</div> + +<div class="target" style="align-items: last baseline;"> + <div data-offset-y="55"><span></span></div> + <div class="inner" style="flex-wrap: wrap; flex-direction: column-reverse; block-size: 50px;" data-offset-y="10"> + <div style="font-size: 20px;"><span></span></div> + <div style="font-size: 30px;"><span></span></div> + <div style="font-size: 10px;"><span></span></div> + <div style="font-size: 35px;"><span></span></div> + </div> +</div> + +<!-- flex-wrap: wrap-reverse --> + +<div class="target" style="align-items: first baseline;"> + <div data-offset-y="15"><span></span></div> + <div class="inner" style="flex-wrap: wrap-reverse; inline-size: 50px;" data-offset-y="10"> + <div style="font-size: 20px;"><span></span></div> + <div style="font-size: 30px;"><span></span></div> + <div style="font-size: 10px;"><span></span></div> + <div style="font-size: 35px;"><span></span></div> + </div> +</div> + +<div class="target" style="align-items: last baseline;"> + <div data-offset-y="70"><span></span></div> + <div class="inner" style="flex-wrap: wrap-reverse; inline-size: 50px;" data-offset-y="10"> + <div style="font-size: 20px;"><span></span></div> + <div style="font-size: 30px;"><span></span></div> + <div style="font-size: 10px;"><span></span></div> + <div style="font-size: 35px;"><span></span></div> + </div> +</div> + +<div class="target" style="align-items: first baseline;"> + <div data-offset-y="40"><span></span></div> + <div class="inner" style="flex-wrap: wrap-reverse; flex-direction: row-reverse; inline-size: 50px;" data-offset-y="10"> + <div style="font-size: 20px;"><span></span></div> + <div style="font-size: 30px;"><span></span></div> + <div style="font-size: 10px;"><span></span></div> + <div style="font-size: 35px;"><span></span></div> + </div> +</div> + +<div class="target" style="align-items: last baseline;"> + <div data-offset-y="60"><span></span></div> + <div class="inner" style="flex-wrap: wrap-reverse; flex-direction: row-reverse; inline-size: 50px;" data-offset-y="10"> + <div style="font-size: 20px;"><span></span></div> + <div style="font-size: 30px;"><span></span></div> + <div style="font-size: 10px;"><span></span></div> + <div style="font-size: 35px;"><span></span></div> + </div> +</div> + +<div class="target" style="align-items: first baseline;"> + <div data-offset-y="15"><span></span></div> + <div class="inner" style="flex-wrap: wrap-reverse; flex-direction: column; block-size: 50px;" data-offset-y="10"> + <div style="font-size: 20px;"><span></span></div> + <div style="font-size: 30px;"><span></span></div> + <div style="font-size: 10px;"><span></span></div> + <div style="font-size: 35px;"><span></span></div> + </div> +</div> + +<div class="target" style="align-items: last baseline;"> + <div data-offset-y="55"><span></span></div> + <div class="inner" style="flex-wrap: wrap-reverse; flex-direction: column; block-size: 50px;" data-offset-y="10"> + <div style="font-size: 20px;"><span></span></div> + <div style="font-size: 30px;"><span></span></div> + <div style="font-size: 10px;"><span></span></div> + <div style="font-size: 35px;"><span></span></div> + </div> +</div> + +<div class="target" style="align-items: first baseline;"> + <div data-offset-y="45"><span></span></div> + <div class="inner" style="flex-wrap: wrap-reverse; flex-direction: column-reverse; block-size: 50px;" data-offset-y="10"> + <div style="font-size: 20px;"><span></span></div> + <div style="font-size: 30px;"><span></span></div> + <div style="font-size: 10px;"><span></span></div> + <div style="font-size: 35px;"><span></span></div> + </div> +</div> + +<div class="target" style="align-items: last baseline;"> + <div data-offset-y="55"><span></span></div> + <div class="inner" style="flex-wrap: wrap-reverse; flex-direction: column-reverse; block-size: 50px;" data-offset-y="10"> + <div style="font-size: 20px;"><span></span></div> + <div style="font-size: 30px;"><span></span></div> + <div style="font-size: 10px;"><span></span></div> + <div style="font-size: 35px;"><span></span></div> + </div> +</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-align-baseline-flex-002.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-align-baseline-flex-002.html new file mode 100644 index 0000000..b6df9d7 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-align-baseline-flex-002.html
@@ -0,0 +1,262 @@ +<!DOCTYPE html> +<link rel="help" href="https://drafts.csswg.org/css-flexbox-1/#flex-baselines"> +<style> +.target { + display: grid; + grid-auto-flow: column; + position: relative; + line-height: 0; + font-size: 20px; + inline-size: 200px; + margin-inline: 10px; + padding: 10px; + border: solid 3px; + writing-mode: vertical-rl; +} + +.inner { + display: flex; + border: solid 5px; + padding: 10px; +} + +span { + display: inline-block; + width: 1em; + height: 1em; + outline: solid cyan 3px; + outline-offset: -3px; +} +</style> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/resources/check-layout-th.js"></script> +<body onload="checkLayout('.target > *')"> + +<div class="target" style="align-items: first baseline;"> + <div data-offset-x="40"><span></span></div> + <div class="inner" data-offset-x="10"> + <div style="font-size: 10px;"><span></span></div> + <div style="font-size: 30px;"><span></span></div> + </div> +</div> + +<div class="target" style="align-items: last baseline;"> + <div data-offset-x="30"><span></span></div> + <div class="inner" data-offset-x="10"> + <div style="font-size: 10px;"><span></span></div> + <div style="font-size: 30px;"><span></span></div> + </div> +</div> + +<div class="target" style="align-items: first baseline;"> + <div data-offset-x="30"><span></span></div> + <div class="inner" style="flex-direction: row-reverse;" data-offset-x="10"> + <div style="font-size: 10px;"><span></span></div> + <div style="font-size: 30px;"><span></span></div> + </div> +</div> + +<div class="target" style="align-items: last baseline;"> + <div data-offset-x="40"><span></span></div> + <div class="inner" style="flex-direction: row-reverse;" data-offset-x="10"> + <div style="font-size: 10px;"><span></span></div> + <div style="font-size: 30px;"><span></span></div> + </div> +</div> + +<div class="target" style="align-items: first baseline;"> + <div data-offset-x="50"><span></span></div> + <div class="inner" style="flex-direction: column;" data-offset-x="10"> + <div style="font-size: 10px;"><span></span></div> + <div style="font-size: 30px;"><span></span></div> + </div> +</div> + +<div class="target" style="align-items: last baseline;"> + <div data-offset-x="30"><span></span></div> + <div class="inner" style="flex-direction: column;" data-offset-x="10"> + <div style="font-size: 10px;"><span></span></div> + <div style="font-size: 30px;"><span></span></div> + </div> +</div> + +<div class="target" style="align-items: first baseline;"> + <div data-offset-x="40"><span></span></div> + <div class="inner" style="flex-direction: column-reverse;" data-offset-x="10"> + <div style="font-size: 10px;"><span></span></div> + <div style="font-size: 30px;"><span></span></div> + </div> +</div> + +<div class="target" style="align-items: last baseline;"> + <div data-offset-x="20"><span></span></div> + <div class="inner" style="flex-direction: column-reverse;" data-offset-x="10"> + <div style="font-size: 10px;"><span></span></div> + <div style="font-size: 30px;"><span></span></div> + </div> +</div> + +<!-- flex-wrap: wrap --> + +<div class="target" style="align-items: first baseline;"> + <div data-offset-x="70"><span></span></div> + <div class="inner" style="flex-wrap: wrap; inline-size: 50px;" data-offset-x="10"> + <div style="font-size: 20px;"><span></span></div> + <div style="font-size: 30px;"><span></span></div> + <div style="font-size: 10px;"><span></span></div> + <div style="font-size: 35px;"><span></span></div> + </div> +</div> + +<div class="target" style="align-items: last baseline;"> + <div data-offset-x="33"><span></span></div> + <div class="inner" style="flex-wrap: wrap; inline-size: 50px;" data-offset-x="10"> + <div style="font-size: 20px;"><span></span></div> + <div style="font-size: 30px;"><span></span></div> + <div style="font-size: 10px;"><span></span></div> + <div style="font-size: 35px;"><span></span></div> + </div> +</div> + +<div class="target" style="align-items: first baseline;"> + <div data-offset-x="65"><span></span></div> + <div class="inner" style="flex-wrap: wrap; flex-direction: row-reverse; inline-size: 50px;" data-offset-x="10"> + <div style="font-size: 20px;"><span></span></div> + <div style="font-size: 30px;"><span></span></div> + <div style="font-size: 10px;"><span></span></div> + <div style="font-size: 35px;"><span></span></div> + </div> +</div> + +<div class="target" style="align-items: last baseline;"> + <div data-offset-x="45"><span></span></div> + <div class="inner" style="flex-wrap: wrap; flex-direction: row-reverse; inline-size: 50px;" data-offset-x="10"> + <div style="font-size: 20px;"><span></span></div> + <div style="font-size: 30px;"><span></span></div> + <div style="font-size: 10px;"><span></span></div> + <div style="font-size: 35px;"><span></span></div> + </div> +</div> + +<div class="target" style="align-items: first baseline;"> + <div data-offset-x="55"><span></span></div> + <div class="inner" style="flex-wrap: wrap; flex-direction: column; block-size: 50px;" data-offset-x="10"> + <div style="font-size: 20px;"><span></span></div> + <div style="font-size: 30px;"><span></span></div> + <div style="font-size: 10px;"><span></span></div> + <div style="font-size: 35px;"><span></span></div> + </div> +</div> + +<div class="target" style="align-items: last baseline;"> + <div data-offset-x="38"><span></span></div> + <div class="inner" style="flex-wrap: wrap; flex-direction: column; block-size: 50px;" data-offset-x="10"> + <div style="font-size: 20px;"><span></span></div> + <div style="font-size: 30px;"><span></span></div> + <div style="font-size: 10px;"><span></span></div> + <div style="font-size: 35px;"><span></span></div> + </div> +</div> + +<div class="target" style="align-items: first baseline;"> + <div data-offset-x="50"><span></span></div> + <div class="inner" style="flex-wrap: wrap; flex-direction: column-reverse; block-size: 50px;" data-offset-x="10"> + <div style="font-size: 20px;"><span></span></div> + <div style="font-size: 30px;"><span></span></div> + <div style="font-size: 10px;"><span></span></div> + <div style="font-size: 35px;"><span></span></div> + </div> +</div> + +<div class="target" style="align-items: last baseline;"> + <div data-offset-x="20"><span></span></div> + <div class="inner" style="flex-wrap: wrap; flex-direction: column-reverse; block-size: 50px;" data-offset-x="10"> + <div style="font-size: 20px;"><span></span></div> + <div style="font-size: 30px;"><span></span></div> + <div style="font-size: 10px;"><span></span></div> + <div style="font-size: 35px;"><span></span></div> + </div> +</div> + +<!-- flex-wrap: wrap-reverse --> + +<div class="target" style="align-items: first baseline;"> + <div data-offset-x="75"><span></span></div> + <div class="inner" style="flex-wrap: wrap-reverse; inline-size: 50px;" data-offset-x="10"> + <div style="font-size: 20px;"><span></span></div> + <div style="font-size: 30px;"><span></span></div> + <div style="font-size: 10px;"><span></span></div> + <div style="font-size: 35px;"><span></span></div> + </div> +</div> + +<div class="target" style="align-items: last baseline;"> + <div data-offset-x="30"><span></span></div> + <div class="inner" style="flex-wrap: wrap-reverse; inline-size: 50px;" data-offset-x="10"> + <div style="font-size: 20px;"><span></span></div> + <div style="font-size: 30px;"><span></span></div> + <div style="font-size: 10px;"><span></span></div> + <div style="font-size: 35px;"><span></span></div> + </div> +</div> + +<div class="target" style="align-items: first baseline;"> + <div data-offset-x="63"><span></span></div> + <div class="inner" style="flex-wrap: wrap-reverse; flex-direction: row-reverse; inline-size: 50px;" data-offset-x="10"> + <div style="font-size: 20px;"><span></span></div> + <div style="font-size: 30px;"><span></span></div> + <div style="font-size: 10px;"><span></span></div> + <div style="font-size: 35px;"><span></span></div> + </div> +</div> + +<div class="target" style="align-items: last baseline;"> + <div data-offset-x="35"><span></span></div> + <div class="inner" style="flex-wrap: wrap-reverse; flex-direction: row-reverse; inline-size: 50px;" data-offset-x="10"> + <div style="font-size: 20px;"><span></span></div> + <div style="font-size: 30px;"><span></span></div> + <div style="font-size: 10px;"><span></span></div> + <div style="font-size: 35px;"><span></span></div> + </div> +</div> + +<div class="target" style="align-items: first baseline;"> + <div data-offset-x="60"><span></span></div> + <div class="inner" style="flex-wrap: wrap-reverse; flex-direction: column; block-size: 50px;" data-offset-x="10"> + <div style="font-size: 20px;"><span></span></div> + <div style="font-size: 30px;"><span></span></div> + <div style="font-size: 10px;"><span></span></div> + <div style="font-size: 35px;"><span></span></div> + </div> +</div> + +<div class="target" style="align-items: last baseline;"> + <div data-offset-x="30"><span></span></div> + <div class="inner" style="flex-wrap: wrap-reverse; flex-direction: column; block-size: 50px;" data-offset-x="10"> + <div style="font-size: 20px;"><span></span></div> + <div style="font-size: 30px;"><span></span></div> + <div style="font-size: 10px;"><span></span></div> + <div style="font-size: 35px;"><span></span></div> + </div> +</div> + +<div class="target" style="align-items: first baseline;"> + <div data-offset-x="43"><span></span></div> + <div class="inner" style="flex-wrap: wrap-reverse; flex-direction: column-reverse; block-size: 50px;" data-offset-x="10"> + <div style="font-size: 20px;"><span></span></div> + <div style="font-size: 30px;"><span></span></div> + <div style="font-size: 10px;"><span></span></div> + <div style="font-size: 35px;"><span></span></div> + </div> +</div> + +<div class="target" style="align-items: last baseline;"> + <div data-offset-x="25"><span></span></div> + <div class="inner" style="flex-wrap: wrap-reverse; flex-direction: column-reverse; block-size: 50px;" data-offset-x="10"> + <div style="font-size: 20px;"><span></span></div> + <div style="font-size: 30px;"><span></span></div> + <div style="font-size: 10px;"><span></span></div> + <div style="font-size: 35px;"><span></span></div> + </div> +</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-align-baseline-flex-003.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-align-baseline-flex-003.html new file mode 100644 index 0000000..7fdc921 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-align-baseline-flex-003.html
@@ -0,0 +1,130 @@ +<!DOCTYPE html> +<link rel="help" href="https://drafts.csswg.org/css-flexbox-1/#flex-baselines"> +<style> +.target { + display: grid; + grid-auto-flow: column; + position: relative; + line-height: 0; + font-size: 20px; + inline-size: 200px; + margin-block: 10px; + padding: 10px; + border: solid 3px; +} + +.inner { + display: flex; + border: solid 5px; + padding: 10px; + gap: 10px; +} + +span { + display: inline-block; + width: 1em; + height: 1em; + outline: solid cyan 3px; + outline-offset: -3px; +} +</style> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/resources/check-layout-th.js"></script> +<body onload="checkLayout('.target > *')"> + +<div class="target" style="align-items: first baseline;"> + <div data-offset-y="45"><span></span></div> + <div class="inner" style="inline-size: 140px; flex-wrap: wrap;" data-offset-y="10"> + <div style="font-size: 10px;"><span></span></div> + <div style="font-size: 30px; margin-block: 10px; align-self: first baseline;"><span></span></div> + <div style="font-size: 50px;"><span></span></div> + <div style="font-size: 60px;"><span></span></div> + <div style="font-size: 40px; margin-block: 10px; align-self: first baseline;"><span></span></div> + <div style="font-size: 20px;"><span></span></div> + </div> +</div> + +<div class="target" style="align-items: first baseline;"> + <div data-offset-y="45"><span></span></div> + <div class="inner" style="inline-size: 140px; flex-wrap: wrap;" data-offset-y="10"> + <div style="font-size: 10px;"><span></span></div> + <div style="font-size: 30px; margin-block: 10px; align-self: last baseline;"><span></span></div> + <div style="font-size: 50px;"><span></span></div> + <div style="font-size: 60px;"><span></span></div> + <div style="font-size: 40px; margin-block: 10px; align-self: last baseline;"><span></span></div> + <div style="font-size: 20px;"><span></span></div> + </div> +</div> + +<div class="target" style="align-items: first baseline;"> + <div data-offset-y="55"><span></span></div> + <div class="inner" style="inline-size: 140px; flex-wrap: wrap-reverse;" data-offset-y="10"> + <div style="font-size: 10px;"><span></span></div> + <div style="font-size: 30px; margin-block: 10px; align-self: first baseline;"><span></span></div> + <div style="font-size: 50px;"><span></span></div> + <div style="font-size: 60px;"><span></span></div> + <div style="font-size: 40px; margin-block: 10px; align-self: first baseline;"><span></span></div> + <div style="font-size: 20px;"><span></span></div> + </div> +</div> + +<div class="target" style="align-items: first baseline;"> + <div data-offset-y="55"><span></span></div> + <div class="inner" style="inline-size: 140px; flex-wrap: wrap-reverse;" data-offset-y="10"> + <div style="font-size: 10px;"><span></span></div> + <div style="font-size: 30px; margin-block: 10px; align-self: last baseline;"><span></span></div> + <div style="font-size: 50px;"><span></span></div> + <div style="font-size: 60px;"><span></span></div> + <div style="font-size: 40px; margin-block: 10px; align-self: last baseline;"><span></span></div> + <div style="font-size: 20px;"><span></span></div> + </div> +</div> + +<div class="target" style="align-items: last baseline;"> + <div data-offset-y="115"><span></span></div> + <div class="inner" style="inline-size: 140px; flex-wrap: wrap;" data-offset-y="10"> + <div style="font-size: 10px;"><span></span></div> + <div style="font-size: 30px; margin-block: 10px; align-self: first baseline;"><span></span></div> + <div style="font-size: 50px;"><span></span></div> + <div style="font-size: 60px;"><span></span></div> + <div style="font-size: 40px; margin-block: 10px; align-self: first baseline;"><span></span></div> + <div style="font-size: 20px;"><span></span></div> + </div> +</div> + +<div class="target" style="align-items: last baseline;"> + <div data-offset-y="115"><span></span></div> + <div class="inner" style="inline-size: 140px; flex-wrap: wrap;" data-offset-y="10"> + <div style="font-size: 10px;"><span></span></div> + <div style="font-size: 30px; margin-block: 10px; align-self: last baseline;"><span></span></div> + <div style="font-size: 50px;"><span></span></div> + <div style="font-size: 60px;"><span></span></div> + <div style="font-size: 40px; margin-block: 10px; align-self: last baseline;"><span></span></div> + <div style="font-size: 20px;"><span></span></div> + </div> +</div> + +<div class="target" style="align-items: last baseline;"> + <div data-offset-y="115"><span></span></div> + <div class="inner" style="inline-size: 140px; flex-wrap: wrap-reverse;" data-offset-y="10"> + <div style="font-size: 10px;"><span></span></div> + <div style="font-size: 30px; margin-block: 10px; align-self: first baseline;"><span></span></div> + <div style="font-size: 50px;"><span></span></div> + <div style="font-size: 60px;"><span></span></div> + <div style="font-size: 40px; margin-block: 10px; align-self: first baseline;"><span></span></div> + <div style="font-size: 20px;"><span></span></div> + </div> +</div> + +<div class="target" style="align-items: last baseline;"> + <div data-offset-y="115"><span></span></div> + <div class="inner" style="inline-size: 140px; flex-wrap: wrap-reverse;" data-offset-y="10"> + <div style="font-size: 10px;"><span></span></div> + <div style="font-size: 30px; margin-block: 10px; align-self: last baseline;"><span></span></div> + <div style="font-size: 50px;"><span></span></div> + <div style="font-size: 60px;"><span></span></div> + <div style="font-size: 40px; margin-block: 10px; align-self: last baseline;"><span></span></div> + <div style="font-size: 20px;"><span></span></div> + </div> +</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-align-baseline-flex-004.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-align-baseline-flex-004.html new file mode 100644 index 0000000..447f008e --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/grid-align-baseline-flex-004.html
@@ -0,0 +1,131 @@ +<!DOCTYPE html> +<link rel="help" href="https://drafts.csswg.org/css-flexbox-1/#flex-baselines"> +<style> +.target { + display: grid; + grid-auto-flow: column; + position: relative; + line-height: 0; + font-size: 20px; + inline-size: 200px; + margin-block: 10px; + padding: 10px; + border: solid 3px; + writing-mode: vertical-rl; +} + +.inner { + display: flex; + border: solid 5px; + padding: 10px; + gap: 10px; +} + +span { + display: inline-block; + width: 1em; + height: 1em; + outline: solid cyan 3px; + outline-offset: -3px; +} +</style> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/resources/check-layout-th.js"></script> +<body onload="checkLayout('.target > *')"> + +<div class="target" style="align-items: first baseline;"> + <div data-offset-x="110"><span></span></div> + <div class="inner" style="inline-size: 140px; flex-wrap: wrap;" data-offset-x="10"> + <div style="font-size: 10px;"><span></span></div> + <div style="font-size: 30px; margin-block: 10px; align-self: first baseline;"><span></span></div> + <div style="font-size: 50px;"><span></span></div> + <div style="font-size: 60px;"><span></span></div> + <div style="font-size: 40px; margin-block: 10px; align-self: first baseline;"><span></span></div> + <div style="font-size: 20px;"><span></span></div> + </div> +</div> + +<div class="target" style="align-items: first baseline;"> + <div data-offset-x="110"><span></span></div> + <div class="inner" style="inline-size: 140px; flex-wrap: wrap;" data-offset-x="10"> + <div style="font-size: 10px;"><span></span></div> + <div style="font-size: 30px; margin-block: 10px; align-self: last baseline;"><span></span></div> + <div style="font-size: 50px;"><span></span></div> + <div style="font-size: 60px;"><span></span></div> + <div style="font-size: 40px; margin-block: 10px; align-self: last baseline;"><span></span></div> + <div style="font-size: 20px;"><span></span></div> + </div> +</div> + +<div class="target" style="align-items: first baseline;"> + <div data-offset-x="105"><span></span></div> + <div class="inner" style="inline-size: 140px; flex-wrap: wrap-reverse;" data-offset-x="10"> + <div style="font-size: 10px;"><span></span></div> + <div style="font-size: 30px; margin-block: 10px; align-self: first baseline;"><span></span></div> + <div style="font-size: 50px;"><span></span></div> + <div style="font-size: 60px;"><span></span></div> + <div style="font-size: 40px; margin-block: 10px; align-self: first baseline;"><span></span></div> + <div style="font-size: 20px;"><span></span></div> + </div> +</div> + +<div class="target" style="align-items: first baseline;"> + <div data-offset-x="105"><span></span></div> + <div class="inner" style="inline-size: 140px; flex-wrap: wrap-reverse;" data-offset-x="10"> + <div style="font-size: 10px;"><span></span></div> + <div style="font-size: 30px; margin-block: 10px; align-self: last baseline;"><span></span></div> + <div style="font-size: 50px;"><span></span></div> + <div style="font-size: 60px;"><span></span></div> + <div style="font-size: 40px; margin-block: 10px; align-self: last baseline;"><span></span></div> + <div style="font-size: 20px;"><span></span></div> + </div> +</div> + +<div class="target" style="align-items: last baseline;"> + <div data-offset-x="45"><span></span></div> + <div class="inner" style="inline-size: 140px; flex-wrap: wrap;" data-offset-x="10"> + <div style="font-size: 10px;"><span></span></div> + <div style="font-size: 30px; margin-block: 10px; align-self: first baseline;"><span></span></div> + <div style="font-size: 50px;"><span></span></div> + <div style="font-size: 60px;"><span></span></div> + <div style="font-size: 40px; margin-block: 10px; align-self: first baseline;"><span></span></div> + <div style="font-size: 20px;"><span></span></div> + </div> +</div> + +<div class="target" style="align-items: last baseline;"> + <div data-offset-x="45"><span></span></div> + <div class="inner" style="inline-size: 140px; flex-wrap: wrap;" data-offset-x="10"> + <div style="font-size: 10px;"><span></span></div> + <div style="font-size: 30px; margin-block: 10px; align-self: last baseline;"><span></span></div> + <div style="font-size: 50px;"><span></span></div> + <div style="font-size: 60px;"><span></span></div> + <div style="font-size: 40px; margin-block: 10px; align-self: last baseline;"><span></span></div> + <div style="font-size: 20px;"><span></span></div> + </div> +</div> + +<div class="target" style="align-items: last baseline;"> + <div data-offset-x="40"><span></span></div> + <div class="inner" style="inline-size: 140px; flex-wrap: wrap-reverse;" data-offset-x="10"> + <div style="font-size: 10px;"><span></span></div> + <div style="font-size: 30px; margin-block: 10px; align-self: first baseline;"><span></span></div> + <div style="font-size: 50px;"><span></span></div> + <div style="font-size: 60px;"><span></span></div> + <div style="font-size: 40px; margin-block: 10px; align-self: first baseline;"><span></span></div> + <div style="font-size: 20px;"><span></span></div> + </div> +</div> + +<div class="target" style="align-items: last baseline;"> + <div data-offset-x="40"><span></span></div> + <div class="inner" style="inline-size: 140px; flex-wrap: wrap-reverse;" data-offset-x="10"> + <div style="font-size: 10px;"><span></span></div> + <div style="font-size: 30px; margin-block: 10px; align-self: last baseline;"><span></span></div> + <div style="font-size: 50px;"><span></span></div> + <div style="font-size: 60px;"><span></span></div> + <div style="font-size: 40px; margin-block: 10px; align-self: last baseline;"><span></span></div> + <div style="font-size: 20px;"><span></span></div> + </div> +</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-layout-api/baseline/flex-baseline.https.html b/third_party/blink/web_tests/external/wpt/css/css-layout-api/baseline/flex-baseline.https.html index 0b0e147..ce869bee 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-layout-api/baseline/flex-baseline.https.html +++ b/third_party/blink/web_tests/external/wpt/css/css-layout-api/baseline/flex-baseline.https.html
@@ -10,10 +10,10 @@ padding: 0 10px; width: 80px; height: 100px; + align-items: baseline; } .child { - align-self: baseline; color: red; } @@ -31,6 +31,7 @@ <div class="parent"> <div style="position: absolute; top: 50px; width: 50px; height: 25px; background: green;"></div> + <div></div> <div class="child">text</div> </div>
diff --git a/third_party/blink/web_tests/external/wpt/interfaces/webidl.idl b/third_party/blink/web_tests/external/wpt/interfaces/webidl.idl index 43748c5..9993673 100644 --- a/third_party/blink/web_tests/external/wpt/interfaces/webidl.idl +++ b/third_party/blink/web_tests/external/wpt/interfaces/webidl.idl
@@ -9,7 +9,7 @@ Float32Array or Float64Array or DataView) ArrayBufferView; typedef (ArrayBufferView or ArrayBuffer) BufferSource; -[Exposed=(Window,Worker), +[Exposed=*, Serializable] interface DOMException { // but see below note about ECMAScript binding constructor(optional DOMString message = "", optional DOMString name = "Error");
diff --git a/third_party/blink/web_tests/external/wpt/storage-access-api/requestStorageAccess.sub.window.js b/third_party/blink/web_tests/external/wpt/storage-access-api/requestStorageAccess.sub.window.js index 308ad43..4600f52 100644 --- a/third_party/blink/web_tests/external/wpt/storage-access-api/requestStorageAccess.sub.window.js +++ b/third_party/blink/web_tests/external/wpt/storage-access-api/requestStorageAccess.sub.window.js
@@ -48,12 +48,12 @@ const description = "document.requestStorageAccess() call in a detached frame"; // Can't use `promise_rejects_dom` here, since the error comes from the wrong global. return promise.then(t.unreached_func("Should have rejected: " + description), (e) => { - assert_equals(e.name, 'SecurityError', description); + assert_equals(e.name, 'InvalidStateError', description); }); }, "[non-fully-active] document.requestStorageAccess() should not resolve when run in a detached frame"); promise_test(t => { - return promise_rejects_dom(t, 'SecurityError', RunRequestStorageAccessViaDomParser(), + return promise_rejects_dom(t, 'InvalidStateError', RunRequestStorageAccessViaDomParser(), "document.requestStorageAccess() in a detached DOMParser result"); }, "[non-fully-active] document.requestStorageAccess() should not resolve when run in a detached DOMParser document");
diff --git a/third_party/blink/web_tests/external/wpt/svg/interact/scripted/ellipse-hittest.html b/third_party/blink/web_tests/external/wpt/svg/interact/scripted/ellipse-hittest.html new file mode 100644 index 0000000..70b54e07 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/svg/interact/scripted/ellipse-hittest.html
@@ -0,0 +1,76 @@ +<!DOCTYPE html> +<title>elementFromPoint(...) on <ellipse>s with continuous strokes</title> +<link rel="help" href="https://svgwg.org/svg2-draft/interact.html#hit-testing"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<style> +#ell1:hover, +#ell2:hover, +#ell3:hover { + stroke: #9f9; +} +</style> +<svg id="svg" width="450" height="300"> + <rect id="border" x="0.5" y="0.5" width="449" height="299" stroke="#000" stroke-width="1" fill="none"/> + + <ellipse id="ell1" cx="130" cy="30" rx="100" ry="15" stroke="#ccf" fill="none" stroke-width="20"/> + <ellipse pointer-events="none" cx="130" cy="30" rx="110" ry="25" stroke="gray" fill="none"/> + <ellipse pointer-events="none" cx="130" cy="30" rx="90" ry="5" stroke="gray" fill="none"/> + + <ellipse id="ell2" cx="130" cy="180" rx="100" ry="100" stroke="#ccf" fill="none" stroke-width="30"/> + <ellipse pointer-events="none" cx="130" cy="180" rx="115" ry="115" stroke="gray" fill="none"/> + <ellipse pointer-events="none" cx="130" cy="180" rx="85" ry="85" stroke="gray" fill="none"/> + + <ellipse id="ell3" cx="340" cy="155" rx="15" ry="100" stroke="#ccf" fill="none" stroke-width="20" transform="rotate(30 340 155)"/> + <ellipse pointer-events="none" cx="340" cy="155" rx="25" ry="110" stroke="gray" fill="none" transform="rotate(30 340 155)"/> + <ellipse pointer-events="none" cx="340" cy="155" rx="5" ry="90" stroke="gray" fill="none" transform="rotate(30 340 155)"/> +</svg> +<script> +// Points are relative to the client rect of the <svg> root. +const tests = [ + { x: 27, y: 46, expectedElemId: "svg" }, + { x: 98, y: 33, expectedElemId: "svg" }, + { x: 202, y: 53, expectedElemId: "svg" }, + { x: 98, y: 142, expectedElemId: "svg" }, + { x: 130, y: 180, expectedElemId: "svg" }, + { x: 91, y: 247, expectedElemId: "svg" }, + { x: 27, y: 240, expectedElemId: "svg" }, + { x: 336, y: 166, expectedElemId: "svg" }, + { x: 337, y: 214, expectedElemId: "svg" }, + + { x: 31, y: 18, expectedElemId: "ell1" }, + { x: 209, y: 31, expectedElemId: "ell1" }, + { x: 132, y: 47, expectedElemId: "ell1" }, + { x: 229, y: 43, expectedElemId: "ell1" }, + + { x: 245, y: 180, expectedElemId: "ell2" }, + { x: 45, y: 180, expectedElemId: "ell2" }, + { x: 130, y: 95, expectedElemId: "ell2" }, + { x: 130, y: 295, expectedElemId: "ell2" }, + { x: 212, y: 255, expectedElemId: "ell2" }, + + { x: 280, y: 235, expectedElemId: "ell3" }, + { x: 301, y: 247, expectedElemId: "ell3" }, + { x: 378, y: 88, expectedElemId: "ell3" }, + { x: 335, y: 122, expectedElemId: "ell3" }, + { x: 333, y: 190, expectedElemId: "ell3" }, + { x: 377, y: 66, expectedElemId: "ell3" } +]; + +setup(() => { + const svg = document.getElementById("svg"); + const svgBounds = svg.getBoundingClientRect(); + window.svgOrigin = { + x: svgBounds.left << 0, + y: svgBounds.top << 0, + }; +}); + +tests.forEach(testcase => { + test(t => { + const expectedElem = document.getElementById(testcase.expectedElemId); + const hitElem = document.elementFromPoint(svgOrigin.x + testcase.x, svgOrigin.y + testcase.y); + assert_equals(hitElem, expectedElem); + }, `${document.title}, element at (${testcase.x}, ${testcase.y})`); +}); +</script>
diff --git a/third_party/blink/web_tests/external/wpt/svg/interact/scripted/rect-hittest.html b/third_party/blink/web_tests/external/wpt/svg/interact/scripted/rect-hittest.html new file mode 100644 index 0000000..7eb70f8 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/svg/interact/scripted/rect-hittest.html
@@ -0,0 +1,109 @@ +<!DOCTYPE html> +<title>elementFromPoint(...) on <rect>s with simple strokes</title> +<link rel="help" href="https://svgwg.org/svg2-draft/interact.html#hit-testing"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<style> +#rect1:hover, +#rect2:hover, +#rect3:hover, +#rect4:hover, +#rect5:hover, +#rect6:hover { + stroke: #00f; +} +</style> +<svg id="svg" width="420" height="300" version="1.1"> + <rect id="border" x="0.5" y="0.5" width="419" height="299" stroke="#000" stroke-width="1" fill="none"/> + + <rect id="rect1" x="70" y="30" width="100" height="80" stroke="#000" stroke-width="20" fill="none"/> + <rect id="rect2" x="40" y="150" width="50" height="120" stroke="#000" stroke-width="20" fill="none" transform="rotate(20 65 210)"/> + <rect id="rect3" x="140" y="200" width="150" height="70" stroke="#000" stroke-width="20" fill="none"/> + <rect id="rect4" x="220" y="50" width="60" height="10" stroke="#000" stroke-width="20" fill="none"/> + <rect id="rect5" x="230" y="100" width="10" height="60" stroke="#000" stroke-width="20" fill="none" transform="rotate(-45 235 130)"/> + <rect id="rect6" x="310" y="130" width="10" height="10" stroke="#000" stroke-width="20" fill="none"/> +</svg> +<script> +// Points are relative to the client rect of the <svg> root. +const tests = [ + { x: 30, y: 12, expectedElemId: "svg" }, + { x: 118, y: 10, expectedElemId: "svg" }, + { x: 197, y: 12, expectedElemId: "svg" }, + { x: 201, y: 28, expectedElemId: "svg" }, + { x: 15, y: 70, expectedElemId: "svg" }, + { x: 97, y: 52, expectedElemId: "svg" }, + { x: 149, y: 49, expectedElemId: "svg" }, + { x: 85, y: 82, expectedElemId: "svg" }, + { x: 122, y: 98, expectedElemId: "svg" }, + { x: 154, y: 75, expectedElemId: "svg" }, + { x: 72, y: 130, expectedElemId: "svg" }, + { x: 48, y: 145, expectedElemId: "svg" }, + { x: 31, y: 279, expectedElemId: "svg" }, + { x: 28, y: 201, expectedElemId: "svg" }, + { x: 71, y: 179, expectedElemId: "svg" }, + { x: 43, y: 244, expectedElemId: "svg" }, + { x: 74, y: 219, expectedElemId: "svg" }, + { x: 94, y: 261, expectedElemId: "svg" }, + { x: 126, y: 231, expectedElemId: "svg" }, + { x: 146, y: 185, expectedElemId: "svg" }, + { x: 173, y: 216, expectedElemId: "svg" }, + { x: 225, y: 258, expectedElemId: "svg" }, + { x: 247, y: 284, expectedElemId: "svg" }, + { x: 286, y: 174, expectedElemId: "svg" }, + { x: 254, y: 120, expectedElemId: "svg" }, + { x: 203, y: 96, expectedElemId: "svg" }, + { x: 244, y: 163, expectedElemId: "svg" }, + { x: 300, y: 37, expectedElemId: "svg" }, + { x: 335, y: 136, expectedElemId: "svg" }, + + // Test all four outer corner points of #rect1 + { x: 60, y: 20, expectedElemId: "rect1" }, + { x: 180, y: 20, expectedElemId: "rect1" }, + { x: 180, y: 120, expectedElemId: "rect1" }, + { x: 60, y: 120, expectedElemId: "rect1" }, + // Test all four interior corner points of #rect1 + { x: 80, y: 40, expectedElemId: "rect1" }, + { x: 160, y: 40, expectedElemId: "rect1" }, + { x: 160, y: 100, expectedElemId: "rect1" }, + { x: 80, y: 100, expectedElemId: "rect1" }, + + { x: 67, y: 56, expectedElemId: "rect1" }, + { x: 146, y: 27, expectedElemId: "rect1" }, + { x: 173, y: 111, expectedElemId: "rect1" }, + + { x: 28, y: 242, expectedElemId: "rect2" }, + { x: 51, y: 182, expectedElemId: "rect2" }, + { x: 89, y: 155, expectedElemId: "rect2" }, + + { x: 136, y: 198, expectedElemId: "rect3" }, + { x: 177, y: 270, expectedElemId: "rect3" }, + { x: 275, y: 197, expectedElemId: "rect3" }, + { x: 297, y: 233, expectedElemId: "rect3" }, + + { x: 235, y: 47, expectedElemId: "rect4" }, + { x: 272, y: 61, expectedElemId: "rect4" }, + { x: 290, y: 70, expectedElemId: "rect4" }, + + { x: 233, y: 140, expectedElemId: "rect5" }, + + { x: 312, y: 128, expectedElemId: "rect6" }, + { x: 330, y: 150, expectedElemId: "rect6" } +]; + +setup(() => { + const svg = document.getElementById("svg"); + const svgBounds = svg.getBoundingClientRect(); + window.svgOrigin = { + x: svgBounds.left << 0, + y: svgBounds.top << 0, + }; +}); + +tests.forEach(testcase => { + test(t => { + const expectedElem = document.getElementById(testcase.expectedElemId); + const hitElem = document.elementFromPoint(svgOrigin.x + testcase.x, svgOrigin.y + testcase.y); + assert_equals(hitElem, expectedElem); + }, `${document.title}, element at (${testcase.x}, ${testcase.y})`); +}); +</script>
diff --git a/third_party/blink/web_tests/external/wpt/svg/interact/scripted/svg-pointer-events-bbox.html b/third_party/blink/web_tests/external/wpt/svg/interact/scripted/svg-pointer-events-bbox.html new file mode 100644 index 0000000..8db9149c --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/svg/interact/scripted/svg-pointer-events-bbox.html
@@ -0,0 +1,155 @@ +<!DOCTYPE html> +<title>pointer-events: bounding-box</title> +<link rel="help" href="https://svgwg.org/svg2-draft/interact.html#PointerEventsProp"> +<link rel="stylesheet" type="text/css" href="/fonts/ahem.css"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<style type="text/css"> + #svgRoot { + margin: 0px; + padding: 0px; + position: absolute; + top: 0px; + left: 0px; + font: 10px/1 Ahem; + } + + .test { fill: blue; pointer-events: bounding-box; } + .test:hover { fill: green; visibility: visible; } +</style> +<svg id="svgRoot" width="800px" height="360px" viewBox="0 0 800 360" opacity="0"> + <g class="test" id="test1" transform="rotate(15)"> + <circle id="circle1" cx="50" cy="50" r="10"/> + <circle cx="150" cy="150" r="10"/> + </g> + <circle class="test" id="circle2" cx="400" cy="150" r="50" visibility="hidden"/> + <text class="test" id="text1" x="100" y="20">Text should change color when mouse is within <tspan id="tspan1" dy="3em">the bbox.</tspan></text> + <text class="test" id="text2" x="150" y="100" transform="rotate(15)">Text should change color when mouse is within <tspan id="tspan2" dy="3em">the bbox.</tspan></text> + <text class="test" id="text3" x="200" y="280" transform="rotate(5)">Text should end here.<tspan id="tspan3" dy="2em" display="none">invisible</tspan></text> + <image class="test" id="image1" xlink:href="data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 50 30'><rect x='10' y='10' width='20' height='10' fill='blue'/></svg>" + width="50" height="30" visibility="hidden" transform="translate(0,200)"/> +</svg> +<script> +const group1 = document.getElementById("test1"); +const circle1 = document.getElementById("circle1"); +const circle2 = document.getElementById("circle2"); +const text1 = document.getElementById("text1"); +const tspan1 = document.getElementById("tspan1"); +const text2 = document.getElementById("text2"); +const tspan2 = document.getElementById("tspan2"); +const text3 = document.getElementById("text3"); +const tspan3 = document.getElementById("tspan3"); +const image1 = document.getElementById("image1"); + +const pointsOnCircle1 = [ + {x: 36, y: 60}, + {x: 42, y: 67} +]; + +const pointsNotOnCircle1 = [ + {x: 50, y: 50}, + {x: 50, y: 55} +]; + +const pointsInsideBBoxOfCircle1 = [ + {x: 100, y: 100}, + {x: 137, y: 84}, + {x: 51, y: 156}, + {x:70, y:120} +]; + +const pointsOnCircle2 = [ + {x: 400, y: 150}, + {x: 432, y: 182}, + {x: 361, y: 122} +]; + +const pointsInsideBBoxOfCircle2 = [ + {x: 438, y: 103}, + {x: 450, y: 200} +]; + +const pointsOnText1 = [ + {x: 134, y: 16} +]; + +const pointsOnTspan1 = [ + {x: 579, y: 46} +]; + +const pointsNotOnText1 = [ + {x: 395, y: 73}, + {x: 74, y: 5} +]; + +const pointsInsideBBoxOfText1 = [ + {x: 435, y: 32}, + {x: 115, y: 46} +]; + +const pointsOnText2 = [ + {x: 178, y: 146} +]; + +const pointsOnTspan2 = [ + {x: 568, y: 283} +]; + +const pointsNotOnText2 = [ + {x: 319, y: 161}, + {x: 179, y: 131} +]; + +const pointsInsideBBoxOfText2 = [ + {x: 295, y: 214}, + {x: 444, y: 222} +]; + +const pointsOnText3 = [ + {x: 198, y: 291}, + {x: 286, y: 301} +]; + +const pointsNotOnText3 = [ + {x: 302, y: 337}, + {x: 348, y: 335} +]; + +const pointsOnImage1 = [ + {x: 19, y: 215}, + {x: 45, y: 225} +]; + +function hitTest(point, element, shouldContain, optionalLabel) { + const label = optionalLabel || element.id; + test(() => { + const contain = element.contains(document.elementFromPoint(point.x, point.y)); + if (shouldContain) + assert_true(contain); + else + assert_false(contain); + }, `${label} ${shouldContain ? 'contains' : 'does not contain'} point at (${point.x}, ${point.y})`); +} + +pointsOnCircle1.forEach(point => hitTest(point, circle1, true)); +pointsNotOnCircle1.forEach(point => hitTest(point, circle1, false)); +pointsInsideBBoxOfCircle1.forEach(point => hitTest(point, group1, true, 'group1')); + +pointsOnCircle2.forEach(point => hitTest(point, circle2, true)); +pointsInsideBBoxOfCircle2.forEach(point => hitTest(point, circle2, true, 'bbox of circle2')); + +pointsOnText1.forEach(point => hitTest(point, text1, true)); +pointsOnTspan1.forEach(point => hitTest(point, tspan1, true)); +pointsNotOnText1.forEach(point => hitTest(point, text1, false)); +pointsInsideBBoxOfText1.forEach(point => hitTest(point, text1, true, 'bbox of text1')); + +pointsOnText2.forEach(point => hitTest(point, text2, true)); +pointsOnTspan2.forEach(point => hitTest(point, tspan2, true)); +pointsNotOnText2.forEach(point => hitTest(point, text2, false)); +pointsInsideBBoxOfText2.forEach(point => hitTest(point, text2, true, 'bbox of text2')); + +pointsOnText3.forEach(point => hitTest(point, text3, true)); +pointsNotOnText3.forEach(point => hitTest(point, text3, false)); + +pointsOnImage1.forEach(point => hitTest(point, image1, true)); +</script>
diff --git a/third_party/blink/web_tests/external/wpt/svg/interact/scripted/svg-small-big-path.html b/third_party/blink/web_tests/external/wpt/svg/interact/scripted/svg-small-big-path.html new file mode 100644 index 0000000..ba0e403f --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/svg/interact/scripted/svg-small-big-path.html
@@ -0,0 +1,47 @@ +<!DOCTYPE html> +<title>Hit-test on a path whose x/y ranges have different magnitude</title> +<link rel="help" href="https://svgwg.org/svg2-draft/interact.html#hit-testing"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<style> + svg { + margin: 0px; + padding: 0px; + position: absolute; + top: 0px; + left: 0px; + } +</style> +<svg> + <svg x="-250000" width="500000" height="500"> + <path id="path" d="M 250005 104 l 19 0 l 3 3 l -3 3 l -19 0 z"/> + </svg> +</svg> +<script> +const pointsInPath = [ + {x: 5, y: 104}, + {x: 5, y: 107}, + {x: 5, y: 110} +]; + +const pointsNotInPath = [ + {x: 5, y: 103}, + {x: 5, y: 111} +]; + +setup(() => { + window.pathElement = document.getElementById("path"); +}); + +pointsInPath.forEach(point => { + test(t => { + assert_equals(pathElement, document.elementFromPoint(point.x, point.y)); + }, `${document.title}, path contains point at (${point.x}, ${point.y})`); +}); + +pointsNotInPath.forEach(point => { + test(t => { + assert_not_equals(pathElement, document.elementFromPoint(point.x, point.y)); + }, `${document.title}, path does not contain point at (${point.x}, ${point.y})`); +}); +</script>
diff --git a/third_party/blink/web_tests/external/wpt/webidl/idlharness-shadowrealm.window-expected.txt b/third_party/blink/web_tests/external/wpt/webidl/idlharness-shadowrealm.window-expected.txt new file mode 100644 index 0000000..2db45e1 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/webidl/idlharness-shadowrealm.window-expected.txt
@@ -0,0 +1,4 @@ +This is a testharness.js-based test. +Harness Error. harness_status.status = 1 , harness_status.message = ReferenceError: ShadowRealm is not defined +Harness: the test ran to completion. +
diff --git a/third_party/blink/web_tests/external/wpt/webidl/idlharness-shadowrealm.window.js b/third_party/blink/web_tests/external/wpt/webidl/idlharness-shadowrealm.window.js new file mode 100644 index 0000000..ab1ca9a --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/webidl/idlharness-shadowrealm.window.js
@@ -0,0 +1,2 @@ +// META: script=/resources/idlharness-shadowrealm.js +idl_test_shadowrealm(["webidl"], []);
diff --git a/third_party/blink/web_tests/http/tests/devtools/elements/highlight/highlight-css-flex-gap-expected.txt b/third_party/blink/web_tests/http/tests/devtools/elements/highlight/highlight-css-flex-gap-expected.txt index 8a7e71b3..9505657 100644 --- a/third_party/blink/web_tests/http/tests/devtools/elements/highlight/highlight-css-flex-gap-expected.txt +++ b/third_party/blink/web_tests/http/tests/devtools/elements/highlight/highlight-css-flex-gap-expected.txt
@@ -369,16 +369,16 @@ { "itemBorder": [ "M", - 400, + 180, 100, "L", - 500, + 280, 100, "L", - 500, + 280, 200, "L", - 400, + 180, 200, "Z" ], @@ -405,16 +405,16 @@ { "itemBorder": [ "M", - 180, + 400, 100, "L", - 280, + 500, 100, "L", - 280, + 500, 200, "L", - 180, + 400, 200, "Z" ], @@ -425,16 +425,16 @@ { "itemBorder": [ "M", - 400, + 290, 220, "L", - 500, + 390, 220, "L", - 500, + 390, 320, "L", - 400, + 290, 320, "Z" ], @@ -443,16 +443,16 @@ { "itemBorder": [ "M", - 290, + 400, 220, "L", - 390, + 500, 220, "L", - 390, + 500, 320, "L", - 290, + 400, 320, "Z" ],
diff --git a/third_party/blink/web_tests/http/tests/devtools/elements/highlight/highlight-css-flex-reverse-expected.txt b/third_party/blink/web_tests/http/tests/devtools/elements/highlight/highlight-css-flex-reverse-expected.txt index 0dacdce..5f877bae 100644 --- a/third_party/blink/web_tests/http/tests/devtools/elements/highlight/highlight-css-flex-reverse-expected.txt +++ b/third_party/blink/web_tests/http/tests/devtools/elements/highlight/highlight-css-flex-reverse-expected.txt
@@ -118,16 +118,16 @@ { "itemBorder": [ "M", - 78, + 18, 8, "L", - 98, + 38, 8, "L", - 98, + 38, 28, "L", - 78, + 18, 28, "Z" ], @@ -154,16 +154,16 @@ { "itemBorder": [ "M", - 18, + 78, 8, "L", - 38, + 98, 8, "L", - 38, + 98, 28, "L", - 18, + 78, 28, "Z" ],
diff --git a/third_party/blink/web_tests/platform/linux/css3/flexbox/flexbox-baseline-expected.png b/third_party/blink/web_tests/platform/linux/css3/flexbox/flexbox-baseline-expected.png deleted file mode 100644 index 7bb27e8..0000000 --- a/third_party/blink/web_tests/platform/linux/css3/flexbox/flexbox-baseline-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/css3/flexbox/flexbox-baseline-expected.png b/third_party/blink/web_tests/platform/mac/css3/flexbox/flexbox-baseline-expected.png deleted file mode 100644 index 75f3f11..0000000 --- a/third_party/blink/web_tests/platform/mac/css3/flexbox/flexbox-baseline-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/css3/flexbox/flexbox-baseline-expected.png b/third_party/blink/web_tests/platform/win/css3/flexbox/flexbox-baseline-expected.png deleted file mode 100644 index ff3917f5..0000000 --- a/third_party/blink/web_tests/platform/win/css3/flexbox/flexbox-baseline-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/printing/multi-page-background-expected.png b/third_party/blink/web_tests/printing/multi-page-background-expected.png index c11fdbe..03d6a5c 100644 --- a/third_party/blink/web_tests/printing/multi-page-background-expected.png +++ b/third_party/blink/web_tests/printing/multi-page-background-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/svg/hittest/ellipse-hittest-expected.txt b/third_party/blink/web_tests/svg/hittest/ellipse-hittest-expected.txt deleted file mode 100644 index 8d3f864..0000000 --- a/third_party/blink/web_tests/svg/hittest/ellipse-hittest-expected.txt +++ /dev/null
@@ -1,28 +0,0 @@ -This tests hit testing on ellipses with continuous strokes. If this test passes, you will see "PASS" below. - -PASS - -(27, 46) -(98, 33) -(202, 53) -(98, 142) -(130, 180) -(91, 247) -(27, 240) -(336, 166) -(337, 214) -(31, 18) -(209, 31) -(132, 47) -(229, 43) -(245, 180) -(45, 180) -(130, 95) -(130, 295) -(212, 255) -(280, 235) -(301, 247) -(378, 88) -(335, 122) -(333, 190) -(377, 66)
diff --git a/third_party/blink/web_tests/svg/hittest/ellipse-hittest.html b/third_party/blink/web_tests/svg/hittest/ellipse-hittest.html deleted file mode 100644 index 46474f2e..0000000 --- a/third_party/blink/web_tests/svg/hittest/ellipse-hittest.html +++ /dev/null
@@ -1,113 +0,0 @@ -<!DOCTYPE html> -This tests hit testing on ellipses with continuous strokes. If this test passes, you will see "PASS" below. -<p id="result">Running test...</p> -<style> -#ell1:hover, -#ell2:hover, -#ell3:hover { - stroke: #9f9; -} -</style> -<svg id="svg" width="450" height="300" version="1.1"> - <rect id="border" x="0.5" y="0.5" width="449" height="299" stroke="#000" stroke-width="1" fill="none"/> - - <ellipse id="ell1" cx="130" cy="30" rx="100" ry="15" stroke="#ccf" fill="none" stroke-width="20"/> - <ellipse pointer-events="none" cx="130" cy="30" rx="110" ry="25" stroke="gray" fill="none"/> - <ellipse pointer-events="none" cx="130" cy="30" rx="90" ry="5" stroke="gray" fill="none"/> - - <ellipse id="ell2" cx="130" cy="180" rx="100" ry="100" stroke="#ccf" fill="none" stroke-width="30"/> - <ellipse pointer-events="none" cx="130" cy="180" rx="115" ry="115" stroke="gray" fill="none"/> - <ellipse pointer-events="none" cx="130" cy="180" rx="85" ry="85" stroke="gray" fill="none"/> - - <ellipse id="ell3" cx="340" cy="155" rx="15" ry="100" stroke="#ccf" fill="none" stroke-width="20" transform="rotate(30 340 155)"/> - <ellipse pointer-events="none" cx="340" cy="155" rx="25" ry="110" stroke="gray" fill="none" transform="rotate(30 340 155)"/> - <ellipse pointer-events="none" cx="340" cy="155" rx="5" ry="90" stroke="gray" fill="none" transform="rotate(30 340 155)"/> -</svg> -<script type="text/javascript"> -if (window.testRunner) { - testRunner.dumpAsText(); - testRunner.waitUntilDone(); -} - -var svg = document.getElementById("svg"); -window.onload = function () { - var tests = [ - { x: 27, y: 46, expectedElemId: "svg" }, - { x: 98, y: 33, expectedElemId: "svg" }, - { x: 202, y: 53, expectedElemId: "svg" }, - { x: 98, y: 142, expectedElemId: "svg" }, - { x: 130, y: 180, expectedElemId: "svg" }, - { x: 91, y: 247, expectedElemId: "svg" }, - { x: 27, y: 240, expectedElemId: "svg" }, - { x: 336, y: 166, expectedElemId: "svg" }, - { x: 337, y: 214, expectedElemId: "svg" }, - - { x: 31, y: 18, expectedElemId: "ell1" }, - { x: 209, y: 31, expectedElemId: "ell1" }, - { x: 132, y: 47, expectedElemId: "ell1" }, - { x: 229, y: 43, expectedElemId: "ell1" }, - - { x: 245, y: 180, expectedElemId: "ell2" }, - { x: 45, y: 180, expectedElemId: "ell2" }, - { x: 130, y: 95, expectedElemId: "ell2" }, - { x: 130, y: 295, expectedElemId: "ell2" }, - { x: 212, y: 255, expectedElemId: "ell2" }, - - { x: 280, y: 235, expectedElemId: "ell3" }, - { x: 301, y: 247, expectedElemId: "ell3" }, - { x: 378, y: 88, expectedElemId: "ell3" }, - { x: 335, y: 122, expectedElemId: "ell3" }, - { x: 333, y: 190, expectedElemId: "ell3" }, - { x: 377, y: 66, expectedElemId: "ell3" } - ]; - - var bcr = svg.getBoundingClientRect(), - x0 = bcr.left << 0, - y0 = bcr.top << 0; - - for (var i = 0; i < tests.length; ++i) { - var test = tests[i], - elem = document.elementFromPoint(x0 + test.x, y0 + test.y), - expectedElem = document.getElementById(test.expectedElemId), - success; - if (elem !== expectedElem) { - success = false; - result.textContent = "FAIL - unexpected element at (" + test.x + ", " + test.y + ")"; - } else { - success = true; - } - - // Draw a dot and a label at the test point (helps with identification). - markPoint(test.x, test.y, success); - } - - if (result.textContent == "Running test...") - result.textContent = "PASS"; - - if (window.testRunner) - testRunner.notifyDone(); -}; - -function markPoint(testX, testY, success) { - var dot = document.createElementNS("http://www.w3.org/2000/svg", "circle"); - dot.setAttribute("pointer-events", "none"); - dot.setAttribute("cx", testX); - dot.setAttribute("cy", testY); - dot.setAttribute("r", "2"); - if (success) - dot.setAttribute("fill", "#0c0"); - else - dot.setAttribute("fill", "red"); - svg.appendChild(dot); - var label = document.createElementNS("http://www.w3.org/2000/svg", "text"); - label.setAttribute("pointer-events", "none"); - label.setAttribute("x", testX + 4); - label.setAttribute("y", testY); - label.textContent = "(" + testX + ", " + testY + ")"; - if (success) - label.setAttribute("fill", "#0c0"); - else - label.setAttribute("fill", "red"); - svg.appendChild(label); -} -</script>
diff --git a/third_party/blink/web_tests/svg/hittest/rect-hittest-expected.txt b/third_party/blink/web_tests/svg/hittest/rect-hittest-expected.txt deleted file mode 100644 index ee2de41..0000000 --- a/third_party/blink/web_tests/svg/hittest/rect-hittest-expected.txt +++ /dev/null
@@ -1,57 +0,0 @@ -This tests hit testing on rects with simple strokes, exercising optimized code for hit testing the rects' strokes. If this test passes, you will see "PASS" below. - -PASS - -(30, 12) -(118, 10) -(197, 12) -(201, 28) -(15, 70) -(97, 52) -(149, 49) -(85, 82) -(122, 98) -(154, 75) -(72, 130) -(48, 145) -(31, 279) -(28, 201) -(71, 179) -(43, 244) -(74, 219) -(94, 261) -(126, 231) -(146, 185) -(173, 216) -(225, 258) -(247, 284) -(286, 174) -(254, 120) -(203, 96) -(244, 163) -(300, 37) -(335, 136) -(60, 20) -(180, 20) -(180, 120) -(60, 120) -(80, 40) -(160, 40) -(160, 100) -(80, 100) -(67, 56) -(146, 27) -(173, 111) -(28, 242) -(51, 182) -(89, 155) -(136, 198) -(177, 270) -(275, 197) -(297, 233) -(235, 47) -(272, 61) -(290, 70) -(233, 140) -(312, 128) -(330, 150)
diff --git a/third_party/blink/web_tests/svg/hittest/rect-hittest.html b/third_party/blink/web_tests/svg/hittest/rect-hittest.html deleted file mode 100644 index 5022e1f..0000000 --- a/third_party/blink/web_tests/svg/hittest/rect-hittest.html +++ /dev/null
@@ -1,146 +0,0 @@ -<!DOCTYPE html> -This tests hit testing on rects with simple strokes, exercising optimized code for hit testing the rects' strokes. If this test passes, you will see "PASS" below. -<p id="result">Running test...</p> -<style> -#rect1:hover, -#rect2:hover, -#rect3:hover, -#rect4:hover, -#rect5:hover, -#rect6:hover { - stroke: #00f; -} -</style> -<svg id="svg" width="420" height="300" version="1.1"> - <rect id="border" x="0.5" y="0.5" width="419" height="299" stroke="#000" stroke-width="1" fill="none"/> - - <rect id="rect1" x="70" y="30" width="100" height="80" stroke="#000" stroke-width="20" fill="none"/> - <rect id="rect2" x="40" y="150" width="50" height="120" stroke="#000" stroke-width="20" fill="none" transform="rotate(20 65 210)"/> - <rect id="rect3" x="140" y="200" width="150" height="70" stroke="#000" stroke-width="20" fill="none"/> - <rect id="rect4" x="220" y="50" width="60" height="10" stroke="#000" stroke-width="20" fill="none"/> - <rect id="rect5" x="230" y="100" width="10" height="60" stroke="#000" stroke-width="20" fill="none" transform="rotate(-45 235 130)"/> - <rect id="rect6" x="310" y="130" width="10" height="10" stroke="#000" stroke-width="20" fill="none"/> -</svg> -<script type="text/javascript"> -if (window.testRunner) { - testRunner.dumpAsText(); - testRunner.waitUntilDone(); -} - -var svg = document.getElementById("svg"); -window.onload = function () { - var tests = [ - { x: 30, y: 12, expectedElemId: "svg" }, - { x: 118, y: 10, expectedElemId: "svg" }, - { x: 197, y: 12, expectedElemId: "svg" }, - { x: 201, y: 28, expectedElemId: "svg" }, - { x: 15, y: 70, expectedElemId: "svg" }, - { x: 97, y: 52, expectedElemId: "svg" }, - { x: 149, y: 49, expectedElemId: "svg" }, - { x: 85, y: 82, expectedElemId: "svg" }, - { x: 122, y: 98, expectedElemId: "svg" }, - { x: 154, y: 75, expectedElemId: "svg" }, - { x: 72, y: 130, expectedElemId: "svg" }, - { x: 48, y: 145, expectedElemId: "svg" }, - { x: 31, y: 279, expectedElemId: "svg" }, - { x: 28, y: 201, expectedElemId: "svg" }, - { x: 71, y: 179, expectedElemId: "svg" }, - { x: 43, y: 244, expectedElemId: "svg" }, - { x: 74, y: 219, expectedElemId: "svg" }, - { x: 94, y: 261, expectedElemId: "svg" }, - { x: 126, y: 231, expectedElemId: "svg" }, - { x: 146, y: 185, expectedElemId: "svg" }, - { x: 173, y: 216, expectedElemId: "svg" }, - { x: 225, y: 258, expectedElemId: "svg" }, - { x: 247, y: 284, expectedElemId: "svg" }, - { x: 286, y: 174, expectedElemId: "svg" }, - { x: 254, y: 120, expectedElemId: "svg" }, - { x: 203, y: 96, expectedElemId: "svg" }, - { x: 244, y: 163, expectedElemId: "svg" }, - { x: 300, y: 37, expectedElemId: "svg" }, - { x: 335, y: 136, expectedElemId: "svg" }, - - // Test all four outer corner points of #rect1 - { x: 60, y: 20, expectedElemId: "rect1" }, - { x: 180, y: 20, expectedElemId: "rect1" }, - { x: 180, y: 120, expectedElemId: "rect1" }, - { x: 60, y: 120, expectedElemId: "rect1" }, - // Test all four interior corner points of #rect1 - { x: 80, y: 40, expectedElemId: "rect1" }, - { x: 160, y: 40, expectedElemId: "rect1" }, - { x: 160, y: 100, expectedElemId: "rect1" }, - { x: 80, y: 100, expectedElemId: "rect1" }, - - { x: 67, y: 56, expectedElemId: "rect1" }, - { x: 146, y: 27, expectedElemId: "rect1" }, - { x: 173, y: 111, expectedElemId: "rect1" }, - - { x: 28, y: 242, expectedElemId: "rect2" }, - { x: 51, y: 182, expectedElemId: "rect2" }, - { x: 89, y: 155, expectedElemId: "rect2" }, - - { x: 136, y: 198, expectedElemId: "rect3" }, - { x: 177, y: 270, expectedElemId: "rect3" }, - { x: 275, y: 197, expectedElemId: "rect3" }, - { x: 297, y: 233, expectedElemId: "rect3" }, - - { x: 235, y: 47, expectedElemId: "rect4" }, - { x: 272, y: 61, expectedElemId: "rect4" }, - { x: 290, y: 70, expectedElemId: "rect4" }, - - { x: 233, y: 140, expectedElemId: "rect5" }, - - { x: 312, y: 128, expectedElemId: "rect6" }, - { x: 330, y: 150, expectedElemId: "rect6" } - ]; - - var bcr = svg.getBoundingClientRect(), - x0 = bcr.left << 0, - y0 = bcr.top << 0; - - for (var i = 0; i < tests.length; ++i) { - var test = tests[i], - elem = document.elementFromPoint(x0 + test.x, y0 + test.y), - expectedElem = document.getElementById(test.expectedElemId), - success; - if (elem !== expectedElem) { - success = false; - result.textContent = "FAIL - unexpected element at (" + test.x + ", " + test.y + ")"; - } else { - success = true; - } - - // Draw a dot and a label at the test point (helps with identification). - markPoint(test.x, test.y, success); - } - - if (result.textContent == "Running test...") - result.textContent = "PASS"; - - if (window.testRunner) - testRunner.notifyDone(); -}; - -function markPoint(testX, testY, success) { - var dot = document.createElementNS("http://www.w3.org/2000/svg", "circle"); - dot.setAttribute("pointer-events", "none"); - dot.setAttribute("cx", testX); - dot.setAttribute("cy", testY); - dot.setAttribute("r", "2"); - if (success) - dot.setAttribute("fill", "#0c0"); - else - dot.setAttribute("fill", "red"); - svg.appendChild(dot); - var label = document.createElementNS("http://www.w3.org/2000/svg", "text"); - label.setAttribute("pointer-events", "none"); - label.setAttribute("x", testX + 4); - label.setAttribute("y", testY); - label.textContent = "(" + testX + ", " + testY + ")"; - if (success) - label.setAttribute("fill", "#0c0"); - else - label.setAttribute("fill", "red"); - svg.appendChild(label); -} -</script>
diff --git a/third_party/blink/web_tests/svg/hittest/svg-pointer-events-bbox.html b/third_party/blink/web_tests/svg/hittest/svg-pointer-events-bbox.html deleted file mode 100644 index 5fe492d..0000000 --- a/third_party/blink/web_tests/svg/hittest/svg-pointer-events-bbox.html +++ /dev/null
@@ -1,169 +0,0 @@ -<html xmlns='http://www.w3.org/1999/xhtml'> -<head> -<script src="../../resources/ahem.js"></script> -<script src="../../resources/testharness.js"></script> -<script src="../../resources/testharnessreport.js"></script> - <style type="text/css"> - #svgRoot { - margin: 0px; - padding: 0px; - position: absolute; - top: 0px; - left: 0px; - font-family: Ahem; - font-size: 10px; - } - - .test { fill: blue; pointer-events: bounding-box; } - .test:hover { fill: green; visibility: visible; } - </style> - <title>Tests for pointer-events=bounding-box - hit testing.</title> - </head> - <body> - <pre id="console"></pre> - - <svg id="svgRoot" width="800px" height="360px" - viewBox="0 0 800 360" xmlns="http://www.w3.org/2000/svg" - xmlns:xlink="http://www.w3.org/1999/xlink" opacity="0"> - <g class="test" id="test1" transform="rotate(15)"> - <circle id="circle1" cx="50" cy="50" r="10"/> - <circle cx="150" cy="150" r="10"/> - </g> - <circle class="test" id="circle2" cx="400" cy="150" r="50" visibility="hidden"/> - <text class="test" id="text1" x="100" y="20">Text should change color when mouse is within <tspan id="tspan1" dy="3em">the bbox.</tspan></text> - <text class="test" id="text2" x="150" y="100" transform="rotate(15)">Text should change color when mouse is within <tspan id="tspan2" dy="3em">the bbox.</tspan></text> - <text class="test" id="text3" x="200" y="280" transform="rotate(5)">Text should end here.<tspan id="tspan3" dy="2em" display="none">invisible</tspan></text> - <image class="test" id="image1" xlink:href="data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 50 30'><rect x='10' y='10' width='20' height='10' fill='blue'/></svg>" - width="50" height="30" visibility="hidden" transform="translate(0,200)"/> - </svg> - - <script type="text/javascript"> - document.body.onclick = function(evt) { - document.getElementById("console").innerHTML = "mouse at " + evt.x + "," + evt.y; - }; - - var group1 = document.getElementById("test1"); - var circle1 = document.getElementById("circle1"); - var circle2 = document.getElementById("circle2"); - var text1 = document.getElementById("text1"); - var tspan1 = document.getElementById("tspan1"); - var text2 = document.getElementById("text2"); - var tspan2 = document.getElementById("tspan2"); - var text3 = document.getElementById("text3"); - var tspan3 = document.getElementById("tspan3"); - var image1 = document.getElementById("image1"); - - var pointsOnCircle1 = [ - {x: 36, y: 60}, - {x: 42, y: 67} - ]; - - var pointsNotOnCircle1 = [ - {x: 50, y: 50}, - {x: 50, y: 55} - ]; - - var pointsInsideBBoxOfCircle1 = [ - {x: 100, y: 100}, - {x: 137, y: 84}, - {x: 51, y: 156}, - {x:70, y:120} - ]; - - var pointsOnCircle2 = [ - {x: 400, y: 150}, - {x: 432, y: 182}, - {x: 361, y: 122} - ]; - - var pointsInsideBBoxOfCircle2 = [ - {x: 438, y: 103}, - {x: 450, y: 200} - ]; - - var pointsOnText1 = [ - {x: 134, y: 16} - ]; - - var pointsOnTspan1 = [ - {x: 579, y: 46} - ]; - - var pointsNotOnText1 = [ - {x: 395, y: 73}, - {x: 74, y: 5} - ]; - - var pointsInsideBBoxOfText1 = [ - {x: 435, y: 32}, - {x: 115, y: 46} - ]; - - var pointsOnText2 = [ - {x: 178, y: 146} - ]; - - var pointsOnTspan2 = [ - {x: 568, y: 283} - ]; - - var pointsNotOnText2 = [ - {x: 319, y: 161}, - {x: 179, y: 131} - ]; - - var pointsInsideBBoxOfText2 = [ - {x: 295, y: 214}, - {x: 444, y: 222} - ]; - - var pointsOnText3 = [ - {x: 198, y: 291}, - {x: 286, y: 301} - ]; - - var pointsNotOnText3 = [ - {x: 302, y: 337}, - {x: 348, y: 335} - ]; - - var pointsOnImage1 = [ - {x: 19, y: 215}, - {x: 45, y: 225} - ]; - - function hitTest(point, element, shouldContain, optionalLabel) { - const label = optionalLabel || element.id; - test(() => { - let contain = element.contains(document.elementFromPoint(point.x, point.y)); - if (shouldContain) - assert_true(contain); - else - assert_false(contain); - }, `${label} ${shouldContain ? 'contains' : 'does not contain'} point at (${point.x}, ${point.y})`); - } - - pointsOnCircle1.forEach(point => hitTest(point, circle1, true)); - pointsNotOnCircle1.forEach(point => hitTest(point, circle1, false)); - pointsInsideBBoxOfCircle1.forEach(point => hitTest(point, group1, true, 'group1')); - - pointsOnCircle2.forEach(point => hitTest(point, circle2, true)); - pointsInsideBBoxOfCircle2.forEach(point => hitTest(point, circle2, true, 'bbox of circle2')); - - pointsOnText1.forEach(point => hitTest(point, text1, true)); - pointsOnTspan1.forEach(point => hitTest(point, tspan1, true)); - pointsNotOnText1.forEach(point => hitTest(point, text1, false)); - pointsInsideBBoxOfText1.forEach(point => hitTest(point, text1, true, 'bbox of text1')); - - pointsOnText2.forEach(point => hitTest(point, text2, true)); - pointsOnTspan2.forEach(point => hitTest(point, tspan2, true)); - pointsNotOnText2.forEach(point => hitTest(point, text2, false)); - pointsInsideBBoxOfText2.forEach(point => hitTest(point, text2, true, 'bbox of text2')); - - pointsOnText3.forEach(point => hitTest(point, text3, true)); - pointsNotOnText3.forEach(point => hitTest(point, text3, false)); - - pointsOnImage1.forEach(point => hitTest(point, image1, true)); - </script> - </body> -</html>
diff --git a/third_party/blink/web_tests/svg/hittest/svg-small-big-path-expected.txt b/third_party/blink/web_tests/svg/hittest/svg-small-big-path-expected.txt deleted file mode 100644 index 21bf174..0000000 --- a/third_party/blink/web_tests/svg/hittest/svg-small-big-path-expected.txt +++ /dev/null
@@ -1,14 +0,0 @@ -Test that hit-test works for a path whose x/y ranges have different magnitude. - -On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE". - -PASS path contains point at (5, 104) -PASS path contains point at (5, 107) -PASS path contains point at (5, 110) -PASS path does not contain point at (5, 103) -PASS path does not contain point at (5, 111) - -PASS successfullyParsed is true - -TEST COMPLETE -
diff --git a/third_party/blink/web_tests/svg/hittest/svg-small-big-path.html b/third_party/blink/web_tests/svg/hittest/svg-small-big-path.html deleted file mode 100644 index 48e63563..0000000 --- a/third_party/blink/web_tests/svg/hittest/svg-small-big-path.html +++ /dev/null
@@ -1,49 +0,0 @@ -<!DOCTYPE html> -<style> - svg { - margin: 0px; - padding: 0px; - position: absolute; - top: 0px; - left: 0px; - } -</style> -<body> - <svg x="0" y="0"> - <svg x="-250000" width="500000" height="500"> - <path id="path" d="M 250005 104 l 19 0 l 3 3 l -3 3 l -19 0 z"></path> - </svg> - </svg> - -<script src="../../resources/js-test.js"></script> -<script> - description("Test that hit-test works for a path whose x/y ranges have different magnitude."); - if (window.testRunner) - testRunner.dumpAsText(); - - var resultString = ""; - var pathElement = document.getElementById("path"); - - var pointsInPath = [ - {x: 5, y: 104}, - {x: 5, y: 107}, - {x: 5, y: 110} - ]; - - var pointsNotInPath = [ - {x: 5, y: 103}, - {x: 5, y: 111} - ]; - - pointsInPath.forEach( function(point) { - var pass = (pathElement == document.elementFromPoint(point.x, point.y)); - resultString += ((pass) ? "PASS" : "FAIL") + " path contains point at (" + point.x + ", " + point.y + ")\n"; - }); - pointsNotInPath.forEach( function(point) { - var pass = (pathElement != document.elementFromPoint(point.x, point.y)); - resultString += ((pass) ? "PASS" : "FAIL") + " path does not contain point at (" + point.x + ", " + point.y + ")\n"; - }); - - debug(resultString); -</script> -</body>
diff --git a/third_party/blink/web_tests/wpt_internal/storage-access-api/requestStorageAccessForOrigin.sub.tentative.window.js b/third_party/blink/web_tests/wpt_internal/storage-access-api/requestStorageAccessForOrigin.sub.tentative.window.js index de77b3e..3cf94c74 100644 --- a/third_party/blink/web_tests/wpt_internal/storage-access-api/requestStorageAccessForOrigin.sub.tentative.window.js +++ b/third_party/blink/web_tests/wpt_internal/storage-access-api/requestStorageAccessForOrigin.sub.tentative.window.js
@@ -75,7 +75,7 @@ return promise .then(t.unreached_func('Should have rejected: ' + description)) .catch(function(e) { - assert_equals(e.name, 'SecurityError', description); + assert_equals(e.name, 'InvalidStateError', description); }); }, '[non-fully-active] document.requestStorageAccessForOrigin() should not resolve when run in a detached frame'); @@ -86,7 +86,7 @@ return promise .then(t.unreached_func('Should have rejected: ' + description)) .catch(function(e) { - assert_equals(e.name, 'SecurityError', description); + assert_equals(e.name, 'InvalidStateError', description); }); }, '[non-fully-active] document.requestStorageAccessForOrigin() should not resolve when run in a detached DOMParser document');
diff --git a/third_party/libavif/BUILD.gn b/third_party/libavif/BUILD.gn index deaaaeea..fa0d77f3 100644 --- a/third_party/libavif/BUILD.gn +++ b/third_party/libavif/BUILD.gn
@@ -18,6 +18,7 @@ "src/src/rawdata.c", "src/src/read.c", "src/src/reformat.c", + "src/src/reformat_libsharpyuv.c", "src/src/reformat_libyuv.c", "src/src/scale.c", "src/src/stream.c",
diff --git a/third_party/subresource-filter-ruleset/README.chromium b/third_party/subresource-filter-ruleset/README.chromium index 37c8e5e..fcf9a1a 100644 --- a/third_party/subresource-filter-ruleset/README.chromium +++ b/third_party/subresource-filter-ruleset/README.chromium
@@ -1,6 +1,6 @@ Name: EasyList URL: https://easylist.to/easylist/easylist.txt -Version: 202208151610 +Version: 202209201344 License: Creative Commons Attribution-ShareAlike 3.0 Unported License Android Compatible: yes License File: LICENSE
diff --git a/third_party/subresource-filter-ruleset/data/UnindexedRules.sha1 b/third_party/subresource-filter-ruleset/data/UnindexedRules.sha1 index bfaaedd..c2657a497 100644 --- a/third_party/subresource-filter-ruleset/data/UnindexedRules.sha1 +++ b/third_party/subresource-filter-ruleset/data/UnindexedRules.sha1
@@ -1 +1 @@ -d26fee22ae18ede362eda438c0062e8778ec7722 +423cb4d8abf7655ff4b6fe9850d9f746f4603a43 \ No newline at end of file
diff --git a/third_party/subresource-filter-ruleset/manifest.json b/third_party/subresource-filter-ruleset/manifest.json index 3786271..67c31b2 100644 --- a/third_party/subresource-filter-ruleset/manifest.json +++ b/third_party/subresource-filter-ruleset/manifest.json
@@ -2,5 +2,5 @@ "manifest_version": 2, "name": "Subresource Filtering Rules", "ruleset_format": 1, - "version": "9.38.0" + "version": "9.40.0" }
diff --git a/tools/android/instant_start/benchmark.py b/tools/android/instant_start/benchmark.py index f2bb6f7..c5bea65 100755 --- a/tools/android/instant_start/benchmark.py +++ b/tools/android/instant_start/benchmark.py
@@ -62,7 +62,6 @@ '/start_surface_variation/single' '/show_last_active_tab_only/true' '/open_ntp_instead_of_start/true' - '/exclude_mv_tiles/true' ] + extra_cmd) if reinstall:
diff --git a/tools/mb/mb_config.pyl b/tools/mb/mb_config.pyl index eb48edb..639890cd 100644 --- a/tools/mb/mb_config.pyl +++ b/tools/mb/mb_config.pyl
@@ -415,7 +415,7 @@ 'fuchsia-fyi-arm64-emu-arg': 'release_trybot_fuchsia_arm64', 'fuchsia-fyi-arm64-rel': 'release_bot_fuchsia_arm64', 'fuchsia-fyi-cfv2-script': 'release_bot_fuchsia_cfv2_script', - 'fuchsia-fyi-x64-rel': 'release_bot_fuchsia', + 'fuchsia-fyi-x64-rel': 'release_bot_fuchsia_cfv2_script', 'fuchsia-fyi-x64-wst': 'fuchsia_workstation_bot', 'ios-fieldtrial-rel': 'ios_simulator_debug_static_bot_xctest_arm64', 'ios-m1-simulator': 'ios_simulator_debug_static_bot_xctest_arm64', @@ -484,6 +484,7 @@ 'win-upload-perfetto': 'release_bot_perfetto_zlib_reclient', 'win10-code-coverage': 'clang_code_coverage_reclient', 'win10-rel-no-external-ip': 'gpu_tests_release_bot_minimal_symbols_reclient', + 'win10-wpt-content-shell-fyi-rel': 'release_trybot_minimal_symbols_reclient', 'win32-archive-rel-goma-rbe-canary': 'release_bot_x86_minimal_symbols_enable_archive_compression', 'win32-archive-rel-goma-rbe-latest': 'release_bot_x86_minimal_symbols_enable_archive_compression', 'win32-arm64-rel': 'win32_arm64_release_bot_reclient', @@ -1001,7 +1002,6 @@ 'android-marshmallow-x86-rel-non-cq': 'android_release_trybot_x86_fastbuild_webview_google', 'android-marshmallow-x86-rel-reclient': 'android_release_trybot_x86_fastbuild_webview_google_coverage_reclient', 'android-nougat-x86-rel': 'android_release_trybot_x86_fastbuild_webview_monochrome', - 'android-opus-arm-rel': 'android_release_trybot', 'android-oreo-arm64-cts-networkservice-dbg': 'android_debug_trybot_arm64', 'android-oreo-arm64-dbg': 'android_debug_trybot_arm64', 'android-perfetto-rel': 'perfetto_release_trybot_android', @@ -1152,7 +1152,7 @@ 'cast_shell_linux_dbg': 'cast_debug_bot', 'chromium_presubmit': 'presubmit', 'fuchsia-fyi-arm64-rel': 'release_trybot_fuchsia_arm64', - 'fuchsia-fyi-x64-rel': 'release_trybot_fuchsia', + 'fuchsia-fyi-x64-rel': 'release_trybot_fuchsia_cfv2_script', 'gpu-fyi-try-lacros-amd-rel': 'gpu_tests_ozone_linux_non_x11_release_trybot', 'gpu-fyi-try-lacros-intel-rel': 'gpu_tests_ozone_linux_non_x11_release_trybot', 'gpu-fyi-try-linux-amd-rel': 'gpu_fyi_tests_release_trybot', @@ -3637,6 +3637,10 @@ 'release_trybot', 'fuchsia', 'cast_receiver_size_optimized', ], + 'release_trybot_fuchsia_cfv2_script': [ + 'release_trybot', 'fuchsia', 'fuchsia_cfv2_script', + ], + 'release_trybot_minimal_symbols_reclient': [ 'release_trybot_minimal_symbols_reclient', ],
diff --git a/tools/mb/mb_config_expectations/chromium.fyi.json b/tools/mb/mb_config_expectations/chromium.fyi.json index a74305a6..cfb8342 100644 --- a/tools/mb/mb_config_expectations/chromium.fyi.json +++ b/tools/mb/mb_config_expectations/chromium.fyi.json
@@ -862,6 +862,7 @@ "is_component_build": false, "is_debug": false, "target_os": "fuchsia", + "use_cfv2_script": true, "use_goma": true } }, @@ -1650,6 +1651,15 @@ "use_remoteexec": true } }, + "win10-wpt-content-shell-fyi-rel": { + "gn_args": { + "dcheck_always_on": true, + "is_component_build": false, + "is_debug": false, + "symbol_level": 1, + "use_remoteexec": true + } + }, "win32-archive-rel-goma-rbe-canary": { "gn_args": { "dcheck_always_on": false,
diff --git a/tools/mb/mb_config_expectations/tryserver.chromium.android.json b/tools/mb/mb_config_expectations/tryserver.chromium.android.json index 53f997c7..cbc2673 100644 --- a/tools/mb/mb_config_expectations/tryserver.chromium.android.json +++ b/tools/mb/mb_config_expectations/tryserver.chromium.android.json
@@ -664,19 +664,6 @@ "use_goma": true } }, - "android-opus-arm-rel": { - "gn_args": { - "dcheck_always_on": true, - "ffmpeg_branding": "Chrome", - "is_component_build": false, - "is_debug": false, - "proprietary_codecs": true, - "strip_debug_info": true, - "symbol_level": 0, - "target_os": "android", - "use_goma": true - } - }, "android-oreo-arm64-cts-networkservice-dbg": { "gn_args": { "ffmpeg_branding": "Chrome",
diff --git a/tools/mb/mb_config_expectations/tryserver.chromium.linux.json b/tools/mb/mb_config_expectations/tryserver.chromium.linux.json index 8c515e1..d9b13f2 100644 --- a/tools/mb/mb_config_expectations/tryserver.chromium.linux.json +++ b/tools/mb/mb_config_expectations/tryserver.chromium.linux.json
@@ -74,6 +74,7 @@ "is_debug": false, "symbol_level": 0, "target_os": "fuchsia", + "use_cfv2_script": true, "use_goma": true } },
diff --git a/tools/metrics/histograms/enums.xml b/tools/metrics/histograms/enums.xml index 1b51579..8f8ba69 100644 --- a/tools/metrics/histograms/enums.xml +++ b/tools/metrics/histograms/enums.xml
@@ -43666,6 +43666,9 @@ <int value="12" label="Show welcome+sign-in screen"/> <int value="13" label="Close welcome+sign-in with sign-in"/> <int value="14" label="Close welcome+sign-in without sign-in"/> + <int value="15" label="Show tangible sync screen"/> + <int value="16" label="Close tangible sync with sync"/> + <int value="17" label="Close tangible sync without sync"/> </enum> <enum name="FirstSmartLockStatus"> @@ -89911,6 +89914,18 @@ <int value="2" label="PDP with cluster ID"/> </enum> +<enum name="ShoppingSubscriptionsRequestStatus"> + <summary>The different statuses of a shopping subscriptions request.</summary> + <int value="0" label="Succeeded"/> + <int value="1" label="Server failed to parse the request"/> + <int value="2" + label="Server successfully parsed the request, but failed afterwards"/> + <int value="3" + label="Local storage failed to load, create, or delete subscriptions"/> + <int value="4" label="Dropped since last sync with server failed"/> + <int value="5" label="Invalid argument"/> +</enum> + <enum name="ShortcutsCreationResult"> <summary>Result of creating shortcuts for PWA.</summary> <int value="0" label="Success"/>
diff --git a/tools/metrics/histograms/metadata/METRIC_REVIEWER_OWNERS b/tools/metrics/histograms/metadata/METRIC_REVIEWER_OWNERS index 69d6593..7d8b833 100644 --- a/tools/metrics/histograms/metadata/METRIC_REVIEWER_OWNERS +++ b/tools/metrics/histograms/metadata/METRIC_REVIEWER_OWNERS
@@ -7,6 +7,7 @@ mthiesse@chromium.org andzaytsev@google.com ckitagawa@chromium.org +sinansahin@google.com # apps nancylingwang@chromium.org tby@chromium.org
diff --git a/tools/metrics/histograms/metadata/autofill/histograms.xml b/tools/metrics/histograms/metadata/autofill/histograms.xml index 6828a6a..adf05b3c 100644 --- a/tools/metrics/histograms/metadata/autofill/histograms.xml +++ b/tools/metrics/histograms/metadata/autofill/histograms.xml
@@ -254,7 +254,7 @@ <histogram name="Autofill.Ablation.FillDurationSinceInteraction.{FormType}.{Group}" - units="ms" expires_after="M108"> + units="ms" expires_after="M112"> <owner>battre@chromium.org</owner> <owner>chrome-autofill-team@google.com</owner> <summary> @@ -269,7 +269,7 @@ <histogram name="Autofill.Ablation.FormSubmissionAfterInteraction.{FormType}.{Group}" - enum="Boolean" expires_after="M108"> + enum="Boolean" expires_after="M112"> <owner>battre@chromium.org</owner> <owner>chrome-autofill-team@google.com</owner> <summary> @@ -365,7 +365,7 @@ <histogram name="Autofill.AddressTokenVerificationStatusAtProfileUsage.{AddressType}" - enum="AufofillStructuredTokenVerificationStatus" expires_after="M108"> + enum="AufofillStructuredTokenVerificationStatus" expires_after="M112"> <owner>koerber@google.com</owner> <owner>chrome-autofill-alerts@google.com</owner> <summary> @@ -838,7 +838,7 @@ </histogram> <histogram name="Autofill.CountryCodeResolution.{Situation}" - enum="DetectionOfCountryName" expires_after="M108"> + enum="DetectionOfCountryName" expires_after="M112"> <owner>battre@google.com</owner> <owner>chrome-autofill-alerts@google.com</owner> <summary> @@ -1431,7 +1431,7 @@ <histogram name="Autofill.FormAffectedByLaxLocalHeuristicRule.FillingAcceptance{AutofillFormType}" - enum="BooleanAutofillFillingAcceptance" expires_after="M108"> + enum="BooleanAutofillFillingAcceptance" expires_after="M112"> <owner>battre@google.com</owner> <owner>chrome-autofill-alerts@google.com</owner> <summary> @@ -1449,7 +1449,7 @@ <histogram name="Autofill.FormAffectedByLaxLocalHeuristicRule.FillingCorrectness{AutofillFormType}" - enum="BooleanAutofillFillingCorrectness" expires_after="M108"> + enum="BooleanAutofillFillingCorrectness" expires_after="M112"> <owner>battre@google.com</owner> <owner>chrome-autofill-alerts@google.com</owner> <summary> @@ -2178,7 +2178,7 @@ </histogram> <histogram name="Autofill.NameTokenVerificationStatusAtProfileUsage.{NameType}" - enum="AufofillStructuredTokenVerificationStatus" expires_after="M108"> + enum="AufofillStructuredTokenVerificationStatus" expires_after="M112"> <owner>koerber@google.com</owner> <owner>chrome-autofill-alerts@google.com</owner> <summary> @@ -2198,7 +2198,7 @@ <histogram name="Autofill.NumberOfAutofilledFieldsAtSubmission.{AcceptanceStatus}" - units="fields" expires_after="M108"> + units="fields" expires_after="M112"> <owner>koerber@google.com</owner> <owner>chrome-autofill-alerts@google.com</owner> <summary> @@ -2214,7 +2214,7 @@ <histogram name="Autofill.NumberOfAutofilledFieldsWithAutocompleteUnrecognizedAtSubmission.{AcceptanceStatus}" - units="fields" expires_after="M108"> + units="fields" expires_after="M112"> <owner>koerber@google.com</owner> <owner>chrome-autofill-alerts@google.com</owner> <summary> @@ -2674,7 +2674,7 @@ </histogram> <histogram name="Autofill.PerfectFilling.{FormType}" enum="Boolean" - expires_after="M108"> + expires_after="M112"> <owner>koerber@google.com</owner> <owner>chrome-autofill-alerts@google.com</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/chromeos/histograms.xml b/tools/metrics/histograms/metadata/chromeos/histograms.xml index edfdaaf..29f13e77 100644 --- a/tools/metrics/histograms/metadata/chromeos/histograms.xml +++ b/tools/metrics/histograms/metadata/chromeos/histograms.xml
@@ -2206,7 +2206,7 @@ </histogram> <histogram name="ChromeOS.Zram.{CountMetric}" units="count" - expires_after="2022-11-10"> + expires_after="2023-03-30"> <owner>ctshao@google.com</owner> <owner>bgeffon@chromium.org</owner> <owner>chromeos-memory@google.com</owner> @@ -2240,7 +2240,7 @@ </histogram> <histogram name="ChromeOS.Zram.{HugePageActivityMetric}" units="pages" - expires_after="2022-11-10"> + expires_after="2023-03-30"> <owner>ctshao@google.com</owner> <owner>raging@google.com</owner> <owner>bgeffon@chromium.org</owner> @@ -2258,7 +2258,7 @@ </histogram> <histogram name="ChromeOS.Zram.{PctMetric}" units="%" - expires_after="2022-11-10"> + expires_after="2023-03-30"> <owner>ctshao@google.com</owner> <owner>bgeffon@chromium.org</owner> <owner>chromeos-memory@google.com</owner> @@ -2277,7 +2277,7 @@ </histogram> <histogram name="ChromeOS.Zram.{SizeMetric}" units="MB" - expires_after="2022-11-10"> + expires_after="2023-03-30"> <owner>ctshao@google.com</owner> <owner>bgeffon@chromium.org</owner> <owner>chromeos-memory@google.com</owner>
diff --git a/tools/metrics/histograms/metadata/commerce/histograms.xml b/tools/metrics/histograms/metadata/commerce/histograms.xml index 91719e3..62af416 100644 --- a/tools/metrics/histograms/metadata/commerce/histograms.xml +++ b/tools/metrics/histograms/metadata/commerce/histograms.xml
@@ -479,6 +479,28 @@ </summary> </histogram> +<histogram name="Commerce.Subscriptions.TrackResult" + enum="ShoppingSubscriptionsRequestStatus" expires_after="2023-04-25"> + <owner>zhiyuancai@chromium.org</owner> + <owner>ayman@chromium.org</owner> + <owner>chrome-shopping@google.com</owner> + <summary> + Records the result of a product tracking request in the subscriptions + manager. Recorded when the request finishes. + </summary> +</histogram> + +<histogram name="Commerce.Subscriptions.UntrackResult" + enum="ShoppingSubscriptionsRequestStatus" expires_after="2023-04-25"> + <owner>zhiyuancai@chromium.org</owner> + <owner>ayman@chromium.org</owner> + <owner>chrome-shopping@google.com</owner> + <summary> + Records the result of a product untracking request in the subscriptions + manager. Recorded when the request finishes. + </summary> +</histogram> + <histogram name="Commerce.Subscriptions.{ManagementType}.Count" units="subscriptions" expires_after="2023-04-25"> <owner>zhiyuancai@chromium.org</owner>
diff --git a/tools/metrics/histograms/metadata/ios/histograms.xml b/tools/metrics/histograms/metadata/ios/histograms.xml index c3a4c46f..8882005 100644 --- a/tools/metrics/histograms/metadata/ios/histograms.xml +++ b/tools/metrics/histograms/metadata/ios/histograms.xml
@@ -660,6 +660,8 @@ summary="The screen that asks the user to turn on sync while no account picker is present. Displayed when MICe is enabled or when no account is detected."/> + <variant name="TangibleSyncScreen" + summary="The tangible sync screen that asks the user to turn on sync."/> <variant name="WelcomeScreenWithoutUMACheckbox" summary="Welcome screen without UMA checkbox. Displayed when MICe is enabled."/>
diff --git a/tools/metrics/histograms/metadata/others/histograms.xml b/tools/metrics/histograms/metadata/others/histograms.xml index 29491748..75f4f2e 100644 --- a/tools/metrics/histograms/metadata/others/histograms.xml +++ b/tools/metrics/histograms/metadata/others/histograms.xml
@@ -5858,6 +5858,19 @@ </summary> </histogram> +<histogram name="Feedback.ChromeOSApp.Duration.GetBigFeedbackLogs" units="ms" + expires_after="2023-06-30"> + <owner>xiangdongkong@google.com</owner> + <owner>cros-feedback-app@google.com</owner> + <summary> + Records the elapsed time from the start of fetching Debugd logs via the + GetBigFeedbackLogs dbus method to when the data has been retrieved. Fires + during the process of sending a feedback report on Chrome OS, or when the + user previews the system logs from the feedback app on Chrome OS. + GetBigFeedbackLogs is the dbus method used. + </summary> +</histogram> + <histogram name="Feedback.ChromeOSApp.ExitPath" enum="FeedbackAppExitPath" expires_after="2023-07-27"> <owner>longbowei@google.com</owner>
diff --git a/tools/metrics/histograms/metadata/power/histograms.xml b/tools/metrics/histograms/metadata/power/histograms.xml index 326e0c0..b20fc25 100644 --- a/tools/metrics/histograms/metadata/power/histograms.xml +++ b/tools/metrics/histograms/metadata/power/histograms.xml
@@ -22,60 +22,72 @@ <histograms> +<variants name="IntervalType"> +<!-- + Variants describing if the histogram contains all samples, only the first + sample, or only subsequent ones. + --> + + <variant name="" summary="all recorded samples"/> + <variant name=".Initial" + summary="only the first sample recorded of the current Chrome + execution. The discharge potentially covers an interval of + time during which Chrome wasn't yet running"/> + <variant name=".Periodic" + summary="every sample recorded after the first one"/> +</variants> + <variants name="UsageScenario"> <!-- - Variants describing the usage scenario for a 2 minutes interval. Consider - updating UsageScenario10Sec when updating this. + Variants describing the usage scenario for a time interval. Consider updating + UsageScenario10Sec when updating this. --> - <variant name="" summary="2 minutes runtime intervals"/> + <variant name="" summary="all intervals no matter the usage scenario"/> <variant name=".AllTabsHidden" - summary="2 minutes runtime intervals during which there were tabs, but - none visible"> + summary="intervals during which there were tabs, but none visible"> <obsolete> 01/2022: Replaced with AllTabsHidden_VideoCapture, AllTabsHidden_Audio and AllTabsHidden_NoVideoCaptureOrAudio. </obsolete> </variant> <variant name=".AllTabsHidden_Audio" - summary="2 minutes runtime intervals during which there was no visible - tab and no video capture, but there was audio"/> + summary="intervals during which there was no visible tab and no video + capture, but there was audio"/> <variant name=".AllTabsHidden_NoVideoCaptureOrAudio" - summary="2 minutes runtime intervals during which there was no visible - tab, no video capture and no audio"/> + summary="intervals during which there was no visible tab, no video + capture and no audio"/> <variant name=".AllTabsHidden_VideoCapture" - summary="2 minutes runtime intervals during which there was no visible - tab, but there was video capture"/> + summary="intervals during which there was no visible tab, but there was + video capture"/> <variant name=".Audio" - summary="2 minutes runtime intervals during which there was audio and - at least 1 visible tab, but there was no video playback or - video capture"/> + summary="intervals during which there was audio and at least 1 visible + tab, but there was no video playback or video capture"/> <variant name=".EmbeddedVideo_NoNavigation" - summary="2 minutes runtime intervals during which a video played in a - visible tab and there was no navigation and no video capture"/> + summary="intervals during which a video played in a visible tab and + there was no navigation and no video capture"/> <variant name=".EmbeddedVideo_WithNavigation" - summary="2 minutes runtime intervals during which a video played in a - visible tab and there was a navigation, but no video capture"/> + summary="intervals during which a video played in a visible tab and + there was a navigation, but no video capture"/> <variant name=".FullscreenVideo" - summary="2 minutes runtime intervals during which a video played in - fullscreen and there was no video capture"/> + summary="intervals during which a video played in fullscreen and there + was no video capture"/> <variant name=".Interaction" - summary="2 minutes runtime intervals during which there was at least 1 - visible tab and a user interaction, but no navigation, audio, - video playback or video capture"/> - <variant name=".Navigation" - summary="2 minutes runtime intervals during which there was at least 1 - visible tab and a navigation, but no audio, video playback or + summary="intervals during which there was at least 1 visible tab and a + user interaction, but no navigation, audio, video playback or video capture"/> + <variant name=".Navigation" + summary="intervals during which there was at least 1 visible tab and a + navigation, but no audio, video playback or video capture"/> <variant name=".Passive" - summary="2 minutes runtime intervals during which there was at least 1 - visible tab, but no user interaction, navigation, audio, video - playback or video capture"/> + summary="intervals during which there was at least 1 visible tab, but + no user interaction, navigation, audio, video playback or + video capture"/> <variant name=".VideoCapture" - summary="2 minutes runtime intervals during which there was at least 1 - visible tab and video capture"/> + summary="intervals during which there was at least 1 visible tab and + video capture"/> <variant name=".ZeroWindow" - summary="2 minutes runtime intervals during which there was no window"/> + summary="intervals during which there was no window"/> </variants> <variants name="UsageScenario10sec"> @@ -141,7 +153,7 @@ <owner>catan-team@chromium.org</owner> <summary> See definition of PerformanceClass.AverageCPU6.ProcessName. This is recorded - for {UsageScenario} (see go/chrome_power_use_per_scenario). + every 2 minutes for {UsageScenario} (see go/chrome_power_use_per_scenario). </summary> <token key="UsageScenario" variants="UsageScenario"/> </histogram> @@ -178,7 +190,8 @@ <owner>catan-team@chromium.org</owner> <summary> See definition of PerformanceMonitor.EnergyImpact2.ProcessName. This is - recorded for {UsageScenario} (see go/chrome_power_use_per_scenario). + recorded every 2 minutes for {UsageScenario} (see + go/chrome_power_use_per_scenario). </summary> <token key="UsageScenario" variants="UsageScenario"/> </histogram> @@ -224,7 +237,8 @@ <owner>catan-team@chromium.org</owner> <summary> See definition of PerformanceMonitor.IdleWakeups2.ProcessName. This is - recorded for {UsageScenario} (see go/chrome_power_use_per_scenario). + recorded every 2 minutes for {UsageScenario} (see + go/chrome_power_use_per_scenario). </summary> <token key="UsageScenario" variants="UsageScenario"/> </histogram> @@ -254,7 +268,8 @@ <owner>catan-team@chromium.orgg</owner> <summary> See definition of PerformanceMonitor.PackageExitIdleWakeups2.ProcessName. - This is recorded for {UsageScenario} (see go/chrome_power_use_per_scenario). + This is recorded every 2 minutes for {UsageScenario} (see + go/chrome_power_use_per_scenario). </summary> <token key="UsageScenario" variants="UsageScenario"/> </histogram> @@ -297,7 +312,7 @@ <summary> The IO reads reported by the resource coalition mechanism on macOS. The data is reported as the rate per second during this interval with a byte - granularity. This is recorded for {UsageScenario} (see + granularity. This is recorded every 2 minutes for {UsageScenario} (see go/chrome_power_use_per_scenario). </summary> <token key="UsageScenario" variants="UsageScenario"/> @@ -311,7 +326,7 @@ <summary> The IO writes reported by the resource coalition mechanism on macOS. The data is reported as the rate per second during this interval with a byte - granularity. This is recorded for {UsageScenario} (see + granularity. This is recorded every 2 minutes for {UsageScenario} (see go/chrome_power_use_per_scenario). </summary> <token key="UsageScenario" variants="UsageScenario"/> @@ -359,7 +374,7 @@ macOS. The utilization is in the 0-100% range per CPU, which is then summed up and multiplied by 100. The histogram is capped at 20000 (equivalent to 2 cores fully loaded). I.e. 4 cores busy at 25% each will read as 25 * 4 * 100 - = 10000. This is recorded for {UsageScenario} (see + = 10000. This is recorded every 2 minutes for {UsageScenario} (see go/chrome_power_use_per_scenario). </summary> <token key="UsageScenario" variants="UsageScenario"/> @@ -396,7 +411,8 @@ Chrome processes no matter how short-lived, as well as XPC services running on Chrome's behalf. - This is recorded for {UsageScenario} (see go/chrome_power_use_per_scenario). + This is recorded every 2 minutes for {UsageScenario} (see + go/chrome_power_use_per_scenario). </summary> <token key="UsageScenario" variants="UsageScenario"/> </histogram> @@ -425,7 +441,7 @@ Average GPU utilization reported by the resource coalition mechanism on macOS. The utilization is in the 0-100% range and is multiplied by 100. The histogram is capped at 10000 (equivalent to the GPU being used 100% of the - time). This is recorded for {UsageScenario} (see + time). This is recorded every 2 minutes for {UsageScenario} (see go/chrome_power_use_per_scenario). </summary> <token key="UsageScenario" variants="UsageScenario"/> @@ -439,8 +455,8 @@ <summary> The interrupt wakeup rate reported by the resource coalition mechanism on macOS. The data is reported as the rate per second during this interval with - a milliwakeup granularity. This is recorded for {UsageScenario} (see - go/chrome_power_use_per_scenario). + a milliwakeup granularity. This is recorded every 2 minutes for + {UsageScenario} (see go/chrome_power_use_per_scenario). </summary> <token key="UsageScenario" variants="UsageScenario"/> </histogram> @@ -453,8 +469,8 @@ <summary> The platform idle wakeup rate reported by the resource coalition mechanism on macOS. The data is reported as the rate per second during this interval - with a milliwakeup granularity. This is recorded for {UsageScenario} (see - go/chrome_power_use_per_scenario). + with a milliwakeup granularity. This is recorded every 2 minutes for + {UsageScenario} (see go/chrome_power_use_per_scenario). </summary> <token key="UsageScenario" variants="UsageScenario"/> </histogram> @@ -465,8 +481,8 @@ <owner>catan-team@chromium.org</owner> <summary> The power usage reported by the resource coalition mechanism on macOS. Only - reported on devices with an ARM CPU. This is recorded for {UsageScenario} - (see go/chrome_power_use_per_scenario). + reported on devices with an ARM CPU. This is recorded every 2 minutes for + {UsageScenario} (see go/chrome_power_use_per_scenario). </summary> <token key="UsageScenario" variants="UsageScenario"/> </histogram> @@ -480,8 +496,8 @@ Average CPU time spent in a given QoS level, as reported by the resource coalition mechanism on macOS. The utilization is in the 0-100% range and is multiplied by 100. The histogram is capped at 10000 (equivalent to the GPU - being used 100% of the time). This is recorded for {UsageScenario} (see - go/chrome_power_use_per_scenario). + being used 100% of the time). This is recorded every 2 minutes for + {UsageScenario} (see go/chrome_power_use_per_scenario). </summary> <token key="QoSLevel"> <variant name="Background"/> @@ -705,13 +721,38 @@ <owner>olivierli@chromium.org</owner> <summary> Battery discharge mode describing whether BatteryDischargeRate2 could be - reported or not, and why. This is recorded for {UsageScenario} (an interval - represents 2 minutes of Chrome runtime, see - go/chrome_power_use_per_scenario). + reported or not, and why. This is recorded every 2 minutes for + {UsageScenario} (see go/chrome_power_use_per_scenario). </summary> <token key="UsageScenario" variants="UsageScenario"/> </histogram> +<histogram name="Power.BatteryDischargeMode3{UsageScenario}{IntervalType}" + enum="BatteryDischargeMode" expires_after="2022-11-30"> + <owner>etiennep@chromium.org</owner> + <owner>olivierli@chromium.org</owner> + <summary> + Battery discharge mode describing whether BatteryDischargeRate3 could be + reported or not, and why. + + This is reported at the end of every valid 1 minute interval. An invalid + interval is one that deviate too much from 1 minute, which can be caused by + the computer going to sleep, or the OS sending multiple notifications in a + row. + + This is recorded for {UsageScenario}. + + This contains {IntervalType}. + + There are 2 differences with Power.BatteryDischargeRate2. 1: When possible, + the intervals are aligned with battery discharge notifications from the OS + (MacOS only for now), and 2: Intervals represents only 1 minute of Chrome + runtime (as opposed to 2 minutes). + </summary> + <token key="UsageScenario" variants="UsageScenario"/> + <token key="IntervalType" variants="IntervalType"/> +</histogram> + <histogram name="Power.BatteryDischargeRate" units="mW" expires_after="2023-03-26"> <owner>puthik@chromium.org</owner> @@ -733,13 +774,42 @@ the interval: 3900 mAh; - Battery charge at the end of the interval: 3700 mAh; - Discharge proportion: (3900-3700) / 4000 = 0.05 - Reported value: 500. This metric is only recorded when on battery power. This is reported on - Mac and Windows. This is recorded for {UsageScenario} (an interval - represents 2 minutes of Chrome runtime, see + Mac and Windows. This is recorded every 2 minutes for {UsageScenario} (see go/chrome_power_use_per_scenario). </summary> <token key="UsageScenario" variants="UsageScenario"/> </histogram> +<histogram name="Power.BatteryDischargeRate3{UsageScenario}{IntervalType}" + units="hundredth of percent" expires_after="2022-11-30"> + <owner>etiennep@chromium.org</owner> + <owner>olivierli@chromium.org</owner> + <owner>lgrey@chromium.org</owner> + <summary> + Battery discharge rate per minute, with 1/10000 of full charge resolution, + example: - Battery capacity = 4000 mAh; - Battery charge at the beginning of + the interval: 3900 mAh; - Battery charge at the end of the interval: 3700 + mAh; - Discharge proportion: (3900-3700) / 4000 = 0.05 - Reported value: + 500. + + This is reported at the end of every valid 1 minute interval. An invalid + interval is one that deviate too much from 1 minute, which can be caused by + the computer going to sleep, or the OS sending multiple notifications in a + row. + + This is recorded for {UsageScenario}. + + This contains {IntervalType}. + + There are 2 differences with Power.BatteryDischargeRate2. 1: When possible, + the intervals are aligned with battery discharge notifications from the OS + (MacOS only for now), and 2: Intervals represents only 1 minute of Chrome + runtime (as opposed to 2 minutes). + </summary> + <token key="UsageScenario" variants="UsageScenario"/> + <token key="IntervalType" variants="IntervalType"/> +</histogram> + <histogram name="Power.BatteryDischargeRateWhileHibernated" units="mW" expires_after="2023-06-15"> <owner>puthik@chromium.org</owner>
diff --git a/tools/perf/core/perfetto_binary_roller/binary_deps.json b/tools/perf/core/perfetto_binary_roller/binary_deps.json index f5a9946..b05b79bd 100644 --- a/tools/perf/core/perfetto_binary_roller/binary_deps.json +++ b/tools/perf/core/perfetto_binary_roller/binary_deps.json
@@ -5,8 +5,8 @@ "full_remote_path": "chromium-telemetry/perfetto_binaries/trace_processor_shell/linux_arm64/49b4b5dcbc312d8d2c3751cf29238b8efeb4e494/trace_processor_shell" }, "win": { - "hash": "bdc0f05ef5e1749da2ca70dfceaca63891437f92", - "full_remote_path": "chromium-telemetry/perfetto_binaries/trace_processor_shell/win/8c7da08a03c5eda1be6768a949625c1dfa30e2ca/trace_processor_shell.exe" + "hash": "b691865de48e9be4ff4405e0c74c1c87c9eaf241", + "full_remote_path": "chromium-telemetry/perfetto_binaries/trace_processor_shell/win/a79be349818632ade2d345205540b3dddd58b033/trace_processor_shell.exe" }, "linux_arm": { "hash": "58893933be305d3bfe0a72ebebcacde2ac3ca893", @@ -14,15 +14,15 @@ }, "mac": { "hash": "1c5094d9cd5b55eb1a161d76056024f1e57c030a", - "full_remote_path": "chromium-telemetry/perfetto_binaries/trace_processor_shell/mac/8c7da08a03c5eda1be6768a949625c1dfa30e2ca/trace_processor_shell" + "full_remote_path": "chromium-telemetry/perfetto_binaries/trace_processor_shell/mac/a79be349818632ade2d345205540b3dddd58b033/trace_processor_shell" }, "mac_arm64": { "hash": "e1ad4861384b06d911a65f035317914b8cc975c6", "full_remote_path": "perfetto-luci-artifacts/v25.0/mac-arm64/trace_processor_shell" }, "linux": { - "hash": "1aceb392222766a1f338634d0cfca37679e31f9b", - "full_remote_path": "chromium-telemetry/perfetto_binaries/trace_processor_shell/linux/cfe31b48b9bef5b47cd50b8573fefc3c15ea3bef/trace_processor_shell" + "hash": "fe2278ab1e1282e4678a6000606b961d79d61ef8", + "full_remote_path": "chromium-telemetry/perfetto_binaries/trace_processor_shell/linux/0f0f1ffa169ed3be5c0e61443fb319df380634f0/trace_processor_shell" } }, "power_profile.sql": {
diff --git a/ui/accessibility/ax_node_data.cc b/ui/accessibility/ax_node_data.cc index 1206fcf8..10c84ae6 100644 --- a/ui/accessibility/ax_node_data.cc +++ b/ui/accessibility/ax_node_data.cc
@@ -612,7 +612,7 @@ // Elements with role='presentation' have Role::kNone. They should not be // named. Objects with Role::kUnknown were never given a role. This check // is only relevant if the name is not empty. - // TODO(accessibility): It would be nice to have a means to set the name + // TODO(crbug.com/1361972): It would be nice to have a means to set the name // and role at the same time to avoid this ordering requirement. DCHECK(name.empty() || (role != ax::mojom::Role::kNone && role != ax::mojom::Role::kUnknown)) @@ -631,8 +631,8 @@ iter->second = name; } - // It is possible for SetName to be called after - // SetNameExplicitlyEmpty. + // It is possible for `SetName`/`SetNameChecked` to be called after + // `SetNameExplicitlyEmpty`. if (!name.empty() && GetNameFrom() == ax::mojom::NameFrom::kAttributeExplicitlyEmpty) { RemoveIntAttribute(ax::mojom::IntAttribute::kNameFrom); @@ -663,6 +663,24 @@ SetName(base::UTF16ToUTF8(name)); } +void AXNodeData::SetNameChecked(const std::string& name) { + SetName(name); + + // We do this check after calling `SetName` because `SetName` handles the + // case where it is called after `SetNameExplicitlyEmpty` by removing the + // existing `NameFrom::kAttributeExplicitlyEmpty`. + DCHECK_EQ(name.empty(), + GetNameFrom() == ax::mojom::NameFrom::kAttributeExplicitlyEmpty) + << "If the accessible name of Role::" << role << " class: '" + << GetStringAttribute(ax::mojom::StringAttribute::kClassName) + << "' is being set to an empty string to improve the " + "user experience, call `SetNameExplicitlyEmpty` instead of `SetName`."; +} + +void AXNodeData::SetNameChecked(const std::u16string& name) { + SetNameChecked(base::UTF16ToUTF8(name)); +} + void AXNodeData::SetNameExplicitlyEmpty() { SetNameFrom(ax::mojom::NameFrom::kAttributeExplicitlyEmpty); SetName(std::string());
diff --git a/ui/accessibility/ax_node_data.h b/ui/accessibility/ax_node_data.h index 19bae97..229c004b 100644 --- a/ui/accessibility/ax_node_data.h +++ b/ui/accessibility/ax_node_data.h
@@ -151,10 +151,43 @@ // Adds the name attribute or replaces it if already present. Also sets the // NameFrom attribute if not already set. + // + // [[deprecated("Replaced by `SetNameChecked` and `SetNameExplicitlyEmpty`")]] + // See `SetNameChecked` and `SetNameExplicitlyEmpty` which have DCHECKs for + // conditions expected to be true, which in reality are not always true. + // Tracked by crbug.com/1348081. void SetName(const std::string& name); + // [[deprecated("Replaced by `SetNameChecked` and `SetNameExplicitlyEmpty`")]] + // See `SetNameChecked` and `SetNameExplicitlyEmpty` which have DCHECKs for + // conditions expected to be true, which in reality are not always true. + // Tracked by crbug.com/1348081. void SetName(const std::u16string& name); - // Allows nameless objects to pass accessibility checks. + // Adds the accessible name attribute or replaces it if already present, and + // also sets the NameFrom attribute if not already set. + // + // The value of the accessible name is a localized, end-user-consumable string + // which may be derived from visible information (e.g. the text on a button) + // or invisible information (e.g. the alternative text describing an icon). + // In the case of focusable objects, the name will be presented by the screen + // reader when that object gains focus and is critical to understanding the + // purpose of that object non-visually. + // + // Note that `SetNameChecked` must only be used to set a non-empty name, a + // condition enforced by a DCHECK. This is done to prevent UI from + // accidentally being given an empty name because, as a general rule, nameless + // controls tend to be inaccessible. However, because there can be valid + // reasons to remove or prevent naming of an item `SetNameExplicitlyEmpty` + // provides a means for developers to do so. + void SetNameChecked(const std::string& name); + void SetNameChecked(const std::u16string& name); + + // Indicates this object should not have an accessible name. One use case is + // to prevent screen readers from speaking redundant information, for instance + // if the parent View has the same name as this View, causing the screen + // reader to speak the name twice. This function can also be used to allow + // focusable nameless objects to pass accessibility checks in tests, a + // practice that should not be applied in production code. void SetNameExplicitlyEmpty(); // Adds the description attribute or replaces it if already present.
diff --git a/ui/accessibility/ax_node_data_unittest.cc b/ui/accessibility/ax_node_data_unittest.cc index e7072fae..e3e3d8f 100644 --- a/ui/accessibility/ax_node_data_unittest.cc +++ b/ui/accessibility/ax_node_data_unittest.cc
@@ -401,6 +401,10 @@ EXPECT_EQ("baz", data.GetStringAttribute(ax::mojom::StringAttribute::kName)); EXPECT_EQ(data.GetNameFrom(), ax::mojom::NameFrom::kContents); + // Setting the name to the empty string should not be done by + // `SetNameChecked`, which enforces that expectation with a DCHECK. + EXPECT_DCHECK_DEATH(data.SetNameChecked("")); + data.SetNameExplicitlyEmpty(); EXPECT_EQ("", data.GetStringAttribute(ax::mojom::StringAttribute::kName)); EXPECT_EQ(data.GetNameFrom(), ax::mojom::NameFrom::kAttributeExplicitlyEmpty);
diff --git a/ui/android/edge_effect.cc b/ui/android/edge_effect.cc index af9e04d9..9b2eb0c 100644 --- a/ui/android/edge_effect.cc +++ b/ui/android/edge_effect.cc
@@ -55,14 +55,16 @@ // Transforms assume the edge layers are anchored to their *top center point*. switch (edge) { case EdgeEffect::EDGE_TOP: - return gfx::Transform(1, 0, 0, 1, 0, offset); + return gfx::Transform::MakeTranslation(0, offset); case EdgeEffect::EDGE_LEFT: - return gfx::Transform(0, 1, -1, 0, -viewport_size.height() / 2.f + offset, - viewport_size.height() / 2.f); + return gfx::Transform::Affine(0, 1, -1, 0, + -viewport_size.height() / 2.f + offset, + viewport_size.height() / 2.f); case EdgeEffect::EDGE_BOTTOM: - return gfx::Transform(-1, 0, 0, -1, 0, viewport_size.height() + offset); + return gfx::Transform::Affine(-1, 0, 0, -1, 0, + viewport_size.height() + offset); case EdgeEffect::EDGE_RIGHT: - return gfx::Transform( + return gfx::Transform::Affine( 0, -1, 1, 0, -viewport_size.height() / 2.f + viewport_size.width() + offset, viewport_size.height() / 2.f);
diff --git a/ui/aura/client/screen_position_client_unittest.cc b/ui/aura/client/screen_position_client_unittest.cc index eb73a3f2..583f048 100644 --- a/ui/aura/client/screen_position_client_unittest.cc +++ b/ui/aura/client/screen_position_client_unittest.cc
@@ -57,7 +57,7 @@ EXPECT_EQ(gfx::Point(300, 300), point); point = gfx::Point(100, 100); - child->SetTransform(gfx::Transform(1, 0, 0, 1, 100, 100)); + child->SetTransform(gfx::Transform::MakeTranslation(100, 100)); test_client.ConvertPointToRootWindowIgnoringTransforms(child.get(), &point); EXPECT_EQ(gfx::Point(300, 300), point); }
diff --git a/ui/base/models/dialog_model_field.cc b/ui/base/models/dialog_model_field.cc index 93ae25f45..20494f9 100644 --- a/ui/base/models/dialog_model_field.cc +++ b/ui/base/models/dialog_model_field.cc
@@ -4,19 +4,27 @@ #include "ui/base/models/dialog_model_field.h" +#include <string> + #include "base/bind.h" #include "ui/base/l10n/l10n_util.h" #include "ui/base/models/dialog_model.h" namespace ui { +DialogModelLabel::TextReplacement::TextReplacement(std::u16string text, + bool is_emphasized) + : text_(text), is_emphasized_(is_emphasized) {} DialogModelLabel::TextReplacement::TextReplacement( int message_id, Callback callback, std::u16string accessible_name) : text_(l10n_util::GetStringUTF16(message_id)), + is_emphasized_(false), callback_(callback), - accessible_name_(accessible_name) {} + accessible_name_(accessible_name) { + // Emphasized links are not supported, at least for now. +} DialogModelLabel::TextReplacement::TextReplacement(const TextReplacement&) = default; DialogModelLabel::TextReplacement::~TextReplacement() = default; @@ -76,6 +84,16 @@ return TextReplacement(message_id, callback, accessible_name); } +DialogModelLabel::TextReplacement DialogModelLabel::CreatePlainText( + std::u16string text) { + return TextReplacement(text); +} + +DialogModelLabel::TextReplacement DialogModelLabel::CreateEmphasizedText( + std::u16string text) { + return TextReplacement(text, true); +} + DialogModelField::DialogModelField(base::PassKey<DialogModel>, DialogModel* model, Type type,
diff --git a/ui/base/models/dialog_model_field.h b/ui/base/models/dialog_model_field.h index 0d23fdc..5d8fb77 100644 --- a/ui/base/models/dialog_model_field.h +++ b/ui/base/models/dialog_model_field.h
@@ -47,24 +47,32 @@ TextReplacement(const TextReplacement&); ~TextReplacement(); - std::u16string text() const { return text_; } - Callback callback() const { return callback_; } - std::u16string accessible_name() const { return accessible_name_; } + const std::u16string& text() const { return text_; } + bool is_emphasized() const { return is_emphasized_; } + const absl::optional<Callback>& callback() const { return callback_; } + const absl::optional<std::u16string>& accessible_name() const { + return accessible_name_; + } private: friend class DialogModelLabel; + // Used for regular and emphasized text. + explicit TextReplacement(std::u16string text, bool is_emphasized = false); + // Used for links. TextReplacement(int message_id, Callback closure, std::u16string accessible_name = std::u16string()); const std::u16string text_; - const Callback callback_; - const std::u16string accessible_name_; + const bool is_emphasized_; + const absl::optional<Callback> callback_; + const absl::optional<std::u16string> accessible_name_; }; explicit DialogModelLabel(int message_id); explicit DialogModelLabel(std::u16string fixed_string); + DialogModelLabel(const DialogModelLabel&); DialogModelLabel& operator=(const DialogModelLabel&) = delete; ~DialogModelLabel(); @@ -75,6 +83,7 @@ int message_id, std::vector<TextReplacement> replacements); + // Builder methods for TextReplacements. static TextReplacement CreateLink( int message_id, base::RepeatingClosure closure, @@ -83,6 +92,8 @@ int message_id, Callback callback, std::u16string accessible_name = std::u16string()); + static TextReplacement CreatePlainText(std::u16string text); + static TextReplacement CreateEmphasizedText(std::u16string text); // Gets the string. Not for use with replacements, in which case the caller // must use replacements() and message_id() to construct the final label. This
diff --git a/ui/compositor/layer_animation_element_unittest.cc b/ui/compositor/layer_animation_element_unittest.cc index 5c3c20b7..5b56d14c 100644 --- a/ui/compositor/layer_animation_element_unittest.cc +++ b/ui/compositor/layer_animation_element_unittest.cc
@@ -25,7 +25,8 @@ // correctly assigns values. See www.crbug.com/483134. TEST(TargetValueTest, VerifyLayerAnimationDelegateConstructor) { const gfx::Rect kBounds(1, 2, 3, 5); - const gfx::Transform kTransform(1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f); + const auto kTransform = + gfx::Transform::Affine(1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f); const float kOpacity = 1.235f; const bool kVisibility = false; const float kBrightness = 2.358f;
diff --git a/ui/display/manager/touch_transform_controller.cc b/ui/display/manager/touch_transform_controller.cc index 64b63ac..865150a 100644 --- a/ui/display/manager/touch_transform_controller.cc +++ b/ui/display/manager/touch_transform_controller.cc
@@ -110,7 +110,7 @@ // Create a transform matrix using the touch calibration data. // clang-format off - ctm->ConcatTransform(gfx::Transform( + ctm->ConcatTransform(gfx::Transform::RowMajor( display_points_x[0], display_points_x[1], 0, display_points_x[2], display_points_y[0], display_points_y[1], 0, display_points_y[2], 0, 0, 1, 0,
diff --git a/ui/gfx/animation/keyframe/keyframed_animation_curve_unittest.cc b/ui/gfx/animation/keyframe/keyframed_animation_curve_unittest.cc index ffebe9c..addee6e 100644 --- a/ui/gfx/animation/keyframe/keyframed_animation_curve_unittest.cc +++ b/ui/gfx/animation/keyframe/keyframed_animation_curve_unittest.cc
@@ -276,7 +276,7 @@ // Tests that a discrete transform animation (e.g. where one or more keyframes // is a non-invertible matrix) works as expected. TEST(KeyframedAnimationCurveTest, DiscreteLinearTransformAnimation) { - gfx::Transform non_invertible_matrix(0, 0, 0, 0, 0, 0); + auto non_invertible_matrix = gfx::Transform::Affine(0, 0, 0, 0, 0, 0); gfx::Transform identity_matrix; std::unique_ptr<KeyframedTransformAnimationCurve> curve( @@ -320,7 +320,7 @@ } TEST(KeyframedAnimationCurveTest, DiscreteCubicBezierTransformAnimation) { - gfx::Transform non_invertible_matrix(0, 0, 0, 0, 0, 0); + auto non_invertible_matrix = gfx::Transform::Affine(0, 0, 0, 0, 0, 0); gfx::Transform identity_matrix; std::unique_ptr<KeyframedTransformAnimationCurve> curve(
diff --git a/ui/gfx/geometry/skia_conversions.cc b/ui/gfx/geometry/skia_conversions.cc index 0a07b20..d6ee3b4 100644 --- a/ui/gfx/geometry/skia_conversions.cc +++ b/ui/gfx/geometry/skia_conversions.cc
@@ -88,6 +88,7 @@ } SkM44 TransformToSkM44(const Transform& matrix) { + // The parameters of this SkM44 constructor are in row-major order. return SkM44( matrix.rc(0, 0), matrix.rc(0, 1), matrix.rc(0, 2), matrix.rc(0, 3), matrix.rc(1, 0), matrix.rc(1, 1), matrix.rc(1, 2), matrix.rc(1, 3), @@ -95,8 +96,8 @@ matrix.rc(3, 0), matrix.rc(3, 1), matrix.rc(3, 2), matrix.rc(3, 3)); } -gfx::Transform SkM44ToTransform(const SkM44& matrix) { - return Transform( +Transform SkM44ToTransform(const SkM44& matrix) { + return Transform::RowMajor( matrix.rc(0, 0), matrix.rc(0, 1), matrix.rc(0, 2), matrix.rc(0, 3), matrix.rc(1, 0), matrix.rc(1, 1), matrix.rc(1, 2), matrix.rc(1, 3), matrix.rc(2, 0), matrix.rc(2, 1), matrix.rc(2, 2), matrix.rc(2, 3), @@ -117,10 +118,11 @@ } Transform SkMatrixToTransform(const SkMatrix& matrix) { - return Transform(matrix.rc(0, 0), matrix.rc(0, 1), 0, matrix.rc(0, 2), - matrix.rc(1, 0), matrix.rc(1, 1), 0, matrix.rc(1, 2), // - 0, 0, 1, 0, // - matrix.rc(2, 0), matrix.rc(2, 1), 0, matrix.rc(2, 2)); + return Transform::RowMajor( + matrix.rc(0, 0), matrix.rc(0, 1), 0, matrix.rc(0, 2), // row 0 + matrix.rc(1, 0), matrix.rc(1, 1), 0, matrix.rc(1, 2), // row 1 + 0, 0, 1, 0, // row 2 + matrix.rc(2, 0), matrix.rc(2, 1), 0, matrix.rc(2, 2)); // row 3 } } // namespace gfx
diff --git a/ui/gfx/geometry/transform.cc b/ui/gfx/geometry/transform.cc index 00aa2d9..f49141c 100644 --- a/ui/gfx/geometry/transform.cc +++ b/ui/gfx/geometry/transform.cc
@@ -38,37 +38,15 @@ } // namespace // clang-format off -Transform::Transform(SkScalar col1row1, - SkScalar col2row1, - SkScalar col3row1, - SkScalar col4row1, - SkScalar col1row2, - SkScalar col2row2, - SkScalar col3row2, - SkScalar col4row2, - SkScalar col1row3, - SkScalar col2row3, - SkScalar col3row3, - SkScalar col4row3, - SkScalar col1row4, - SkScalar col2row4, - SkScalar col3row4, - SkScalar col4row4) - : matrix_(col1row1, col2row1, col3row1, col4row1, - col1row2, col2row2, col3row2, col4row2, - col1row3, col2row3, col3row3, col4row3, - col1row4, col2row4, col3row4, col4row4) {} - -Transform::Transform(SkScalar col1row1, - SkScalar col2row1, - SkScalar col1row2, - SkScalar col2row2, - SkScalar x_translation, - SkScalar y_translation) - : matrix_(col1row1, col2row1, 0, x_translation, - col1row2, col2row2, 0, y_translation, - 0, 0, 1, 0, - 0, 0, 0, 1) {} +Transform::Transform(SkScalar r0c0, SkScalar r1c0, SkScalar r2c0, SkScalar r3c0, + SkScalar r0c1, SkScalar r1c1, SkScalar r2c1, SkScalar r3c1, + SkScalar r0c2, SkScalar r1c2, SkScalar r2c2, SkScalar r3c2, + SkScalar r0c3, SkScalar r1c3, SkScalar r2c3, SkScalar r3c3) + // The parameters of SkMatrix's constructor is in row-major order. + : matrix_(r0c0, r0c1, r0c2, r0c3, // row 0 + r1c0, r1c1, r1c2, r1c3, // row 1 + r2c0, r2c1, r2c2, r2c3, // row 2 + r3c0, r3c1, r3c2, r3c3) {} // row 3 Transform::Transform(const Quaternion& q) : matrix_(
diff --git a/ui/gfx/geometry/transform.h b/ui/gfx/geometry/transform.h index e7d16f0..a43af04 100644 --- a/ui/gfx/geometry/transform.h +++ b/ui/gfx/geometry/transform.h
@@ -39,44 +39,85 @@ : matrix_(Matrix44::kUninitialized_Constructor) {} Transform(const Transform& rhs) = default; Transform& operator=(const Transform& rhs) = default; - // Initialize with the concatenation of lhs * rhs. - Transform(const Transform& lhs, const Transform& rhs) - : matrix_(lhs.matrix_, rhs.matrix_) {} - // Constructs a transform from explicit 16 matrix elements. Elements - // should be given in row-major order. - Transform(SkScalar col1row1, - SkScalar col2row1, - SkScalar col3row1, - SkScalar col4row1, - SkScalar col1row2, - SkScalar col2row2, - SkScalar col3row2, - SkScalar col4row2, - SkScalar col1row3, - SkScalar col2row3, - SkScalar col3row3, - SkScalar col4row3, - SkScalar col1row4, - SkScalar col2row4, - SkScalar col3row4, - SkScalar col4row4); - // Constructs a transform from explicit 2d elements. All other matrix - // elements remain the same as the corresponding elements of an identity - // matrix. - Transform(SkScalar col1row1, - SkScalar col2row1, - SkScalar col1row2, - SkScalar col2row2, - SkScalar x_translation, - SkScalar y_translation); + + // Creates a transform from explicit 16 matrix elements in row-major order. + static Transform RowMajor(SkScalar r0c0, + SkScalar r0c1, + SkScalar r0c2, + SkScalar r0c3, + SkScalar r1c0, + SkScalar r1c1, + SkScalar r1c2, + SkScalar r1c3, + SkScalar r2c0, + SkScalar r2c1, + SkScalar r2c2, + SkScalar r2c3, + SkScalar r3c0, + SkScalar r3c1, + SkScalar r3c2, + SkScalar r3c3) { + return Transform(r0c0, r1c0, r2c0, r3c0, // col 0 + r0c1, r1c1, r2c1, r3c1, // col 1 + r0c2, r1c2, r2c2, r3c2, // col 2 + r0c3, r1c3, r2c3, r3c3); // col 3 + } + + // Creates a transform from explicit 16 matrix elements in col-major order. + static Transform ColMajor(SkScalar r0c0, + SkScalar r1c0, + SkScalar r2c0, + SkScalar r3c0, + SkScalar r0c1, + SkScalar r1c1, + SkScalar r2c1, + SkScalar r3c1, + SkScalar r0c2, + SkScalar r1c2, + SkScalar r2c2, + SkScalar r3c2, + SkScalar r0c3, + SkScalar r1c3, + SkScalar r2c3, + SkScalar r3c3) { + return Transform(r0c0, r1c0, r2c0, r3c0, // col 0 + r0c1, r1c1, r2c1, r3c1, // col 1 + r0c2, r1c2, r2c2, r3c2, // col 2 + r0c3, r1c3, r2c3, r3c3); // col 3 + } + + // Creates a transform from explicit 2d elements. All other matrix elements + // remain the same as the corresponding elements of an identity matrix. + static Transform Affine(SkScalar r0c0, + SkScalar r0c1, + SkScalar r1c0, + SkScalar r1c1, + SkScalar x_translation, + SkScalar y_translation) { + return ColMajor(r0c0, r1c0, 0, 0, // col 0 + r0c1, r1c1, 0, 0, // col 1 + 0, 0, 1, 0, // col 2 + x_translation, y_translation, 0, 1); // col 3 + } // Constructs a transform corresponding to the given quaternion. explicit Transform(const Quaternion& q); + // Creates a transform as a 2d translation. + static Transform MakeTranslation(SkScalar tx, SkScalar ty) { + return Affine(1, 0, 0, 1, tx, ty); + } + // Creates a transform as a 2d scale. + static Transform MakeScale(SkScalar scale) { return MakeScale(scale, scale); } + static Transform MakeScale(SkScalar sx, SkScalar sy) { + return Affine(sx, 0, 0, sy, 0, 0); + } + bool operator==(const Transform& rhs) const { return matrix_ == rhs.matrix_; } bool operator!=(const Transform& rhs) const { return matrix_ != rhs.matrix_; } // Resets this transform to the identity transform. + // TODO(crbug.com/1359528): Rename this to SetIdentity or remove it. void MakeIdentity() { matrix_.setIdentity(); } // Gets a value at |row|, |col| from the matrix. @@ -334,6 +375,28 @@ std::string ToString() const; private: + // Used internally to construct Transform with parameters in col-major order. + Transform(SkScalar r0c0, + SkScalar r1c0, + SkScalar r2c0, + SkScalar r3c0, + SkScalar r0c1, + SkScalar r1c1, + SkScalar r2c1, + SkScalar r3c1, + SkScalar r0c2, + SkScalar r1c2, + SkScalar r2c2, + SkScalar r3c2, + SkScalar r0c3, + SkScalar r1c3, + SkScalar r2c3, + SkScalar r3c3); + + // Initialize with the concatenation of lhs * rhs. + Transform(const Transform& lhs, const Transform& rhs) + : matrix_(lhs.matrix_, rhs.matrix_) {} + Point TransformPointInternal(const Matrix44& xform, const Point& point) const; PointF TransformPointInternal(const Matrix44& xform,
diff --git a/ui/gfx/geometry/transform_operations_unittest.cc b/ui/gfx/geometry/transform_operations_unittest.cc index 613bbff..cee75f6 100644 --- a/ui/gfx/geometry/transform_operations_unittest.cc +++ b/ui/gfx/geometry/transform_operations_unittest.cc
@@ -914,7 +914,7 @@ TEST(TransformOperationTest, NonDecomposableBlend) { TransformOperations non_decomposible_transform; - gfx::Transform non_decomposible_matrix(0, 0, 0, 0, 0, 0); + auto non_decomposible_matrix = gfx::Transform::Affine(0, 0, 0, 0, 0, 0); non_decomposible_transform.AppendMatrix(non_decomposible_matrix); TransformOperations identity_transform;
diff --git a/ui/gfx/geometry/transform_unittest.cc b/ui/gfx/geometry/transform_unittest.cc index 738e1b95..94c85bad 100644 --- a/ui/gfx/geometry/transform_unittest.cc +++ b/ui/gfx/geometry/transform_unittest.cc
@@ -171,7 +171,8 @@ TEST(XFormTest, Equality) { Transform lhs, interpolated; - Transform rhs(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16); + auto rhs = Transform::RowMajor(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, + 15, 16); interpolated = lhs; for (int i = 0; i <= 100; ++i) { for (int row = 0; row < 4; ++row) { @@ -201,6 +202,27 @@ } } +// This test is to make it easier to understand the order of operations. +TEST(XFormTest, PrePostOperations) { + auto m1 = Transform::Affine(1, 2, 3, 4, 5, 6); + auto m2 = m1; + m1.Translate(10, 20); + m2.PreconcatTransform(Transform::MakeTranslation(10, 20)); + EXPECT_EQ(m1, m2); + + m1.PostTranslate(11, 22); + m2.ConcatTransform(Transform::MakeTranslation(11, 22)); + EXPECT_EQ(m1, m2); + + m1.Scale(3, 4); + m2.PreconcatTransform(Transform::MakeScale(3, 4)); + EXPECT_EQ(m1, m2); + + m1.PostScale(5, 6); + m2.ConcatTransform(Transform::MakeScale(5, 6)); + EXPECT_EQ(m1, m2); +} + TEST(XFormTest, ConcatTranslate) { static const struct TestCase { int x1; @@ -1388,8 +1410,9 @@ } TEST(XFormTest, verifyConstructorFor16Elements) { - Transform transform(1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, - 12.0, 13.0, 14.0, 15.0, 16.0); + auto transform = + Transform::RowMajor(1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, + 11.0, 12.0, 13.0, 14.0, 15.0, 16.0); EXPECT_ROW1_EQ(1.0f, 2.0f, 3.0f, 4.0f, transform); EXPECT_ROW2_EQ(5.0f, 6.0f, 7.0f, 8.0f, transform); @@ -1398,7 +1421,7 @@ } TEST(XFormTest, verifyConstructorFor2dElements) { - Transform transform(1.0, 2.0, 3.0, 4.0, 5.0, 6.0); + Transform transform = Transform::Affine(1.0, 2.0, 3.0, 4.0, 5.0, 6.0); EXPECT_ROW1_EQ(1.0f, 2.0f, 0.0f, 5.0f, transform); EXPECT_ROW2_EQ(3.0f, 4.0f, 0.0f, 6.0f, transform); @@ -2706,20 +2729,20 @@ // be positive. // clang-format off - transform = Transform(1.0, 0.0, 0.0, 0.0, - 0.0, 1.0, 0.0, 0.0, - 0.0, 0.0, 1.0, 0.0, - 0.0, 0.0, 0.0, -1.0); + transform = Transform::RowMajor(1.0, 0.0, 0.0, 0.0, + 0.0, 1.0, 0.0, 0.0, + 0.0, 0.0, 1.0, 0.0, + 0.0, 0.0, 0.0, -1.0); // clang-format on EXPECT_TRUE(EmpiricallyPreserves2dAxisAlignment(transform)); EXPECT_TRUE(transform.Preserves2dAxisAlignment()); EXPECT_FALSE(transform.NonDegeneratePreserves2dAxisAlignment()); // clang-format off - transform = Transform(2.0, 0.0, 0.0, 0.0, - 0.0, 5.0, 0.0, 0.0, - 0.0, 0.0, 1.0, 0.0, - 0.0, 0.0, 0.0, 0.0); + transform = Transform::RowMajor(2.0, 0.0, 0.0, 0.0, + 0.0, 5.0, 0.0, 0.0, + 0.0, 0.0, 1.0, 0.0, + 0.0, 0.0, 0.0, 0.0); // clang-format on EXPECT_TRUE(EmpiricallyPreserves2dAxisAlignment(transform)); EXPECT_TRUE(transform.Preserves2dAxisAlignment());
diff --git a/ui/gfx/geometry/transform_util_unittest.cc b/ui/gfx/geometry/transform_util_unittest.cc index ebe85e12..15f79c79 100644 --- a/ui/gfx/geometry/transform_util_unittest.cc +++ b/ui/gfx/geometry/transform_util_unittest.cc
@@ -233,29 +233,32 @@ TEST(TransformUtilTest, RoundTripTest) { // rotateZ(90deg) - EXPECT_APPROX_EQ(0, ComputeDecompRecompError(Transform(0, 1, -1, 0, 0, 0))); + EXPECT_APPROX_EQ( + 0, ComputeDecompRecompError(Transform::Affine(0, 1, -1, 0, 0, 0))); // rotateZ(180deg) // Edge case where w = 0. - EXPECT_APPROX_EQ(0, ComputeDecompRecompError(Transform(-1, 0, 0, -1, 0, 0))); + EXPECT_APPROX_EQ( + 0, ComputeDecompRecompError(Transform::Affine(-1, 0, 0, -1, 0, 0))); // rotateX(90deg) rotateY(90deg) rotateZ(90deg) // [1 0 0][ 0 0 1][0 -1 0] [0 0 1][0 -1 0] [0 0 1] // [0 0 -1][ 0 1 0][1 0 0] = [1 0 0][1 0 0] = [0 -1 0] // [0 1 0][-1 0 0][0 0 1] [0 1 0][0 0 1] [1 0 0] // This test case leads to Gimbal lock when using Euler angles. - EXPECT_APPROX_EQ(0, ComputeDecompRecompError(Transform( + EXPECT_APPROX_EQ(0, ComputeDecompRecompError(Transform::RowMajor( 0, 0, 1, 0, 0, -1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1))); // Quaternion matrices with 0 off-diagonal elements, and negative trace. // Stress tests handling of degenerate cases in computing quaternions. // Validates fix for https://crbug.com/647554. - EXPECT_APPROX_EQ(0, ComputeDecompRecompError(Transform(1, 1, 1, 0, 0, 0))); - EXPECT_APPROX_EQ(0, ComputeDecompRecompError(Transform( + EXPECT_APPROX_EQ( + 0, ComputeDecompRecompError(Transform::Affine(1, 1, 1, 0, 0, 0))); + EXPECT_APPROX_EQ(0, ComputeDecompRecompError(Transform::RowMajor( -1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1))); - EXPECT_APPROX_EQ(0, ComputeDecompRecompError(Transform( + EXPECT_APPROX_EQ(0, ComputeDecompRecompError(Transform::RowMajor( 1, 0, 0, 0, 0, -1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1))); - EXPECT_APPROX_EQ(0, ComputeDecompRecompError(Transform( + EXPECT_APPROX_EQ(0, ComputeDecompRecompError(Transform::RowMajor( 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, -1, 0, 0, 0, 0, 1))); } @@ -269,7 +272,7 @@ // multiple axes. 2D transformation matrices should follow the 2D spec // regarding matrix decomposition. DecomposedTransform decompFlipX; - DecomposeTransform(&decompFlipX, Transform(-1, 0, 0, 1, 0, 0)); + DecomposeTransform(&decompFlipX, Transform::Affine(-1, 0, 0, 1, 0, 0)); EXPECT_APPROX_EQ(-1, decompFlipX.scale[0]); EXPECT_APPROX_EQ(1, decompFlipX.scale[1]); EXPECT_APPROX_EQ(1, decompFlipX.scale[2]); @@ -277,7 +280,7 @@ EXPECT_APPROX_EQ(1, decompFlipX.quaternion.w()); DecomposedTransform decompFlipY; - DecomposeTransform(&decompFlipY, Transform(1, 0, 0, -1, 0, 0)); + DecomposeTransform(&decompFlipY, Transform::Affine(1, 0, 0, -1, 0, 0)); EXPECT_APPROX_EQ(1, decompFlipY.scale[0]); EXPECT_APPROX_EQ(-1, decompFlipY.scale[1]); EXPECT_APPROX_EQ(1, decompFlipY.scale[2]); @@ -285,7 +288,7 @@ EXPECT_APPROX_EQ(1, decompFlipY.quaternion.w()); DecomposedTransform decompR180; - DecomposeTransform(&decompR180, Transform(-1, 0, 0, -1, 0, 0)); + DecomposeTransform(&decompR180, Transform::Affine(-1, 0, 0, -1, 0, 0)); EXPECT_APPROX_EQ(1, decompR180.scale[0]); EXPECT_APPROX_EQ(1, decompR180.scale[1]); EXPECT_APPROX_EQ(1, decompR180.scale[2]); @@ -293,7 +296,7 @@ EXPECT_APPROX_EQ(0, decompR180.quaternion.w()); DecomposedTransform decompR90; - DecomposeTransform(&decompR180, Transform(0, -1, 1, 0, 0, 0)); + DecomposeTransform(&decompR180, Transform::Affine(0, -1, 1, 0, 0, 0)); EXPECT_APPROX_EQ(1, decompR180.scale[0]); EXPECT_APPROX_EQ(1, decompR180.scale[1]); EXPECT_APPROX_EQ(1, decompR180.scale[2]); @@ -301,7 +304,8 @@ EXPECT_APPROX_EQ(1 / sqrt(2), decompR180.quaternion.w()); DecomposedTransform decompR90Translate; - DecomposeTransform(&decompR90Translate, Transform(0, -1, 1, 0, -1, 1)); + DecomposeTransform(&decompR90Translate, + Transform::Affine(0, -1, 1, 0, -1, 1)); EXPECT_APPROX_EQ(1, decompR90Translate.scale[0]); EXPECT_APPROX_EQ(1, decompR90Translate.scale[1]); EXPECT_APPROX_EQ(1, decompR90Translate.scale[2]); @@ -312,7 +316,7 @@ EXPECT_APPROX_EQ(1 / sqrt(2), decompR90Translate.quaternion.w()); DecomposedTransform decompSkewRotate; - DecomposeTransform(&decompR90Translate, Transform(1, 1, 1, 0, 0, 0)); + DecomposeTransform(&decompR90Translate, Transform::Affine(1, 1, 1, 0, 0, 0)); EXPECT_APPROX_EQ(sqrt(2), decompR90Translate.scale[0]); EXPECT_APPROX_EQ(-1 / sqrt(2), decompR90Translate.scale[1]); EXPECT_APPROX_EQ(1, decompR90Translate.scale[2]); @@ -371,80 +375,80 @@ } tests[] = { // clang-format off // A matrix with only scale and translation. - {Transform(3, 0, 0, -23, - 0, 7, 0, 31, - 0, 0, 11, 47, - 0, 0, 0, 1), + {Transform::RowMajor(3, 0, 0, -23, + 0, 7, 0, 31, + 0, 0, 11, 47, + 0, 0, 0, 1), Vector2dF(3, 7)}, // Matrices like the first, but also with various // perspective-altering components. - {Transform(3, 0, 0, -23, - 0, 7, 0, 31, - 0, 0, 11, 47, - 0, 0, -0.5, 1), + {Transform::RowMajor(3, 0, 0, -23, + 0, 7, 0, 31, + 0, 0, 11, 47, + 0, 0, -0.5, 1), Vector2dF(3, 7)}, - {Transform(3, 0, 0, -23, - 0, 7, 0, 31, - 0, 0, 11, 47, - 0.2f, 0, -0.5f, 1), + {Transform::RowMajor(3, 0, 0, -23, + 0, 7, 0, 31, + 0, 0, 11, 47, + 0.2f, 0, -0.5f, 1), absl::nullopt}, - {Transform(3, 0, 0, -23, - 0, 7, 0, 31, - 0, 0, 11, 47, - 0.2f, -0.2f, -0.5f, 1), + {Transform::RowMajor(3, 0, 0, -23, + 0, 7, 0, 31, + 0, 0, 11, 47, + 0.2f, -0.2f, -0.5f, 1), absl::nullopt}, - {Transform(3, 0, 0, -23, - 0, 7, 0, 31, - 0, 0, 11, 47, - 0.2f, -0.2f, -0.5f, 1), + {Transform::RowMajor(3, 0, 0, -23, + 0, 7, 0, 31, + 0, 0, 11, 47, + 0.2f, -0.2f, -0.5f, 1), absl::nullopt}, - {Transform(3, 0, 0, -23, - 0, 7, 0, 31, - 0, 0, 11, 47, - 0, -0.2f, -0.5f, 1), + {Transform::RowMajor(3, 0, 0, -23, + 0, 7, 0, 31, + 0, 0, 11, 47, + 0, -0.2f, -0.5f, 1), absl::nullopt}, - {Transform(3, 0, 0, -23, - 0, 7, 0, 31, - 0, 0, 11, 47, - 0, 0, -0.5f, 0.25f), + {Transform::RowMajor(3, 0, 0, -23, + 0, 7, 0, 31, + 0, 0, 11, 47, + 0, 0, -0.5f, 0.25f), Vector2dF(12, 28)}, // Matrices like the first, but with some types of rotation. - {Transform(0, 3, 0, -23, - 7, 0, 0, 31, - 0, 0, 11, 47, - 0, 0, 0, 1), + {Transform::RowMajor(0, 3, 0, -23, + 7, 0, 0, 31, + 0, 0, 11, 47, + 0, 0, 0, 1), Vector2dF(7, 3)}, - {Transform(3, 8, 0, -23, - 4, 6, 0, 31, - 0, 0, 11, 47, - 0, 0, 0, 1), + {Transform::RowMajor(3, 8, 0, -23, + 4, 6, 0, 31, + 0, 0, 11, 47, + 0, 0, 0, 1), Vector2dF(5, 10)}, // Combination of rotation and perspective - {Transform(3, 8, 0, -23, - 4, 6, 0, 31, - 0, 0, 11, 47, - 0, 0, 0, 0.25f), + {Transform::RowMajor(3, 8, 0, -23, + 4, 6, 0, 31, + 0, 0, 11, 47, + 0, 0, 0, 0.25f), Vector2dF(20, 40)}, // Error handling cases for final perspective component. - {Transform(3, 0, 0, -23, - 0, 7, 0, 31, - 0, 0, 11, 47, - 0, 0, 0, 0), + {Transform::RowMajor(3, 0, 0, -23, + 0, 7, 0, 31, + 0, 0, 11, 47, + 0, 0, 0, 0), absl::nullopt}, - {Transform(3, 0, 0, -23, - 0, 7, 0, 31, - 0, 0, 11, 47, - 0, 0, 0, quiet_NaN_or_zero), + {Transform::RowMajor(3, 0, 0, -23, + 0, 7, 0, 31, + 0, 0, 11, 47, + 0, 0, 0, quiet_NaN_or_zero), absl::nullopt}, - {Transform(3, 0, 0, -23, - 0, 7, 0, 31, - 0, 0, 11, 47, - 0, 0, 0, infinity_or_zero), + {Transform::RowMajor(3, 0, 0, -23, + 0, 7, 0, 31, + 0, 0, 11, 47, + 0, 0, 0, infinity_or_zero), absl::nullopt}, - {Transform(3, 0, 0, -23, - 0, 7, 0, 31, - 0, 0, 11, 47, - 0, 0, 0, denorm_min_or_zero), + {Transform::RowMajor(3, 0, 0, -23, + 0, 7, 0, 31, + 0, 0, 11, 47, + 0, 0, 0, denorm_min_or_zero), absl::nullopt}, // clang-format on };
diff --git a/ui/gfx/mojom/mojom_traits_unittest.cc b/ui/gfx/mojom/mojom_traits_unittest.cc index 527cbb4d..3d4008b3 100644 --- a/ui/gfx/mojom/mojom_traits_unittest.cc +++ b/ui/gfx/mojom/mojom_traits_unittest.cc
@@ -95,45 +95,44 @@ } TEST_F(StructTraitsTest, Transform) { - const float col1row1 = 1.f; - const float col2row1 = 2.f; - const float col3row1 = 3.f; - const float col4row1 = 4.f; - const float col1row2 = 5.f; - const float col2row2 = 6.f; - const float col3row2 = 7.f; - const float col4row2 = 8.f; - const float col1row3 = 9.f; - const float col2row3 = 10.f; - const float col3row3 = 11.f; - const float col4row3 = 12.f; - const float col1row4 = 13.f; - const float col2row4 = 14.f; - const float col3row4 = 15.f; - const float col4row4 = 16.f; - gfx::Transform input(col1row1, col2row1, col3row1, col4row1, col1row2, - col2row2, col3row2, col4row2, col1row3, col2row3, - col3row3, col4row3, col1row4, col2row4, col3row4, - col4row4); + const float r0c0 = 1.f; + const float r0c1 = 2.f; + const float r0c2 = 3.f; + const float r0c3 = 4.f; + const float r1c0 = 5.f; + const float r1c1 = 6.f; + const float r1c2 = 7.f; + const float r1c3 = 8.f; + const float r2c0 = 9.f; + const float r2c1 = 10.f; + const float r2c2 = 11.f; + const float r2c3 = 12.f; + const float r3c0 = 13.f; + const float r3c1 = 14.f; + const float r3c2 = 15.f; + const float r3c3 = 16.f; + auto input = + gfx::Transform::RowMajor(r0c0, r0c1, r0c2, r0c3, r1c0, r1c1, r1c2, r1c3, + r2c0, r2c1, r2c2, r2c3, r3c0, r3c1, r3c2, r3c3); mojo::Remote<mojom::TraitsTestService> remote = GetTraitsTestRemote(); gfx::Transform output; remote->EchoTransform(input, &output); - EXPECT_EQ(col1row1, output.rc(0, 0)); - EXPECT_EQ(col2row1, output.rc(0, 1)); - EXPECT_EQ(col3row1, output.rc(0, 2)); - EXPECT_EQ(col4row1, output.rc(0, 3)); - EXPECT_EQ(col1row2, output.rc(1, 0)); - EXPECT_EQ(col2row2, output.rc(1, 1)); - EXPECT_EQ(col3row2, output.rc(1, 2)); - EXPECT_EQ(col4row2, output.rc(1, 3)); - EXPECT_EQ(col1row3, output.rc(2, 0)); - EXPECT_EQ(col2row3, output.rc(2, 1)); - EXPECT_EQ(col3row3, output.rc(2, 2)); - EXPECT_EQ(col4row3, output.rc(2, 3)); - EXPECT_EQ(col1row4, output.rc(3, 0)); - EXPECT_EQ(col2row4, output.rc(3, 1)); - EXPECT_EQ(col3row4, output.rc(3, 2)); - EXPECT_EQ(col4row4, output.rc(3, 3)); + EXPECT_EQ(r0c0, output.rc(0, 0)); + EXPECT_EQ(r0c1, output.rc(0, 1)); + EXPECT_EQ(r0c2, output.rc(0, 2)); + EXPECT_EQ(r0c3, output.rc(0, 3)); + EXPECT_EQ(r1c0, output.rc(1, 0)); + EXPECT_EQ(r1c1, output.rc(1, 1)); + EXPECT_EQ(r1c2, output.rc(1, 2)); + EXPECT_EQ(r1c3, output.rc(1, 3)); + EXPECT_EQ(r2c0, output.rc(2, 0)); + EXPECT_EQ(r2c1, output.rc(2, 1)); + EXPECT_EQ(r2c2, output.rc(2, 2)); + EXPECT_EQ(r2c3, output.rc(2, 3)); + EXPECT_EQ(r3c0, output.rc(3, 0)); + EXPECT_EQ(r3c1, output.rc(3, 1)); + EXPECT_EQ(r3c2, output.rc(3, 2)); + EXPECT_EQ(r3c3, output.rc(3, 3)); } TEST_F(StructTraitsTest, AcceleratedWidget) {
diff --git a/ui/gl/direct_composition_child_surface_win.cc b/ui/gl/direct_composition_child_surface_win.cc index 6efb589..17f28a2 100644 --- a/ui/gl/direct_composition_child_surface_win.cc +++ b/ui/gl/direct_composition_child_surface_win.cc
@@ -11,9 +11,9 @@ #include "base/debug/dump_without_crashing.h" #include "base/metrics/histogram_functions.h" #include "base/metrics/histogram_macros.h" +#include "base/notreached.h" #include "base/process/process.h" #include "base/synchronization/waitable_event.h" -#include "base/threading/thread_task_runner_handle.h" #include "base/trace_event/trace_event.h" #include "base/trace_event/traced_value.h" #include "base/win/windows_version.h" @@ -27,8 +27,6 @@ #include "ui/gl/gl_surface_egl.h" #include "ui/gl/gl_switches.h" #include "ui/gl/gl_utils.h" -#include "ui/gl/scoped_make_current.h" -#include "ui/gl/vsync_thread_win.h" #ifndef EGL_ANGLE_d3d_texture_client_buffer #define EGL_ANGLE_d3d_texture_client_buffer 1 @@ -52,11 +50,6 @@ const char* kDirectCompositionChildSurfaceLabel = "DirectCompositionChildSurface"; -bool SupportsLowLatencyPresentation() { - return base::FeatureList::IsEnabled( - features::kDirectCompositionLowLatencyPresentation); -} - bool IsVerifyDrawOffsetEnabled() { return base::FeatureList::IsEnabled( features::kDirectCompositionVerifyDrawOffset); @@ -75,32 +68,15 @@ } // namespace -DirectCompositionChildSurfaceWin::PendingFrame::PendingFrame( - Microsoft::WRL::ComPtr<ID3D11Query> query, - PresentationCallback callback) - : query(std::move(query)), callback(std::move(callback)) {} -DirectCompositionChildSurfaceWin::PendingFrame::PendingFrame( - PendingFrame&& other) = default; -DirectCompositionChildSurfaceWin::PendingFrame::~PendingFrame() = default; -DirectCompositionChildSurfaceWin::PendingFrame& -DirectCompositionChildSurfaceWin::PendingFrame::operator=( - PendingFrame&& other) = default; - DirectCompositionChildSurfaceWin::DirectCompositionChildSurfaceWin( GLDisplayEGL* display, - VSyncCallback vsync_callback, bool use_angle_texture_offset, - size_t max_pending_frames, bool force_full_damage, bool force_full_damage_always) : GLSurfaceEGL(display), - vsync_callback_(std::move(vsync_callback)), use_angle_texture_offset_(use_angle_texture_offset), - max_pending_frames_(max_pending_frames), force_full_damage_(force_full_damage), - force_full_damage_always_(force_full_damage_always), - vsync_thread_(VSyncThreadWin::GetInstance()), - task_runner_(base::ThreadTaskRunnerHandle::Get()) {} + force_full_damage_always_(force_full_damage_always) {} DirectCompositionChildSurfaceWin::~DirectCompositionChildSurfaceWin() { Destroy(); @@ -249,13 +225,6 @@ } void DirectCompositionChildSurfaceWin::Destroy() { - for (auto& frame : pending_frames_) - std::move(frame.callback).Run(gfx::PresentationFeedback::Failure()); - pending_frames_.clear(); - - if (vsync_thread_started_) - vsync_thread_->RemoveObserver(this); - if (default_surface_) { if (!eglDestroySurface(display_->GetDisplay(), default_surface_)) { DLOG(ERROR) << "eglDestroySurface failed with error " @@ -296,19 +265,23 @@ gfx::SwapResult DirectCompositionChildSurfaceWin::SwapBuffers( PresentationCallback callback) { - TRACE_EVENT1("gpu", "DirectCompositionChildSurfaceWin::SwapBuffers", "size", + NOTREACHED(); + return gfx::SwapResult::SWAP_FAILED; +} + +bool DirectCompositionChildSurfaceWin::EndDraw(gfx::Rect* swap_rect) { + TRACE_EVENT1("gpu", "DirectCompositionChildSurfaceWin::EndDraw", "size", size_.ToString()); - gfx::SwapResult swap_result = ReleaseDrawTexture(false /* will_discard */) - ? gfx::SwapResult::SWAP_ACK - : gfx::SwapResult::SWAP_FAILED; - EnqueuePendingFrame(std::move(callback)); + bool success = ReleaseDrawTexture(false /* will_discard */); + + *swap_rect = swap_rect_; // Reset swap_rect_ since SetDrawRectangle may not be called when the root // damage rect is empty. swap_rect_ = gfx::Rect(); - return swap_result; + return success; } gfx::SurfaceOrigin DirectCompositionChildSurfaceWin::GetOrigin() const { @@ -617,128 +590,6 @@ return true; } -gfx::VSyncProvider* DirectCompositionChildSurfaceWin::GetVSyncProvider() { - return vsync_thread_->vsync_provider(); -} - -bool DirectCompositionChildSurfaceWin::SupportsGpuVSync() const { - return true; -} - -void DirectCompositionChildSurfaceWin::SetGpuVSyncEnabled(bool enabled) { - { - base::AutoLock auto_lock(vsync_callback_enabled_lock_); - vsync_callback_enabled_ = enabled; - } - StartOrStopVSyncThread(); -} - -void DirectCompositionChildSurfaceWin::OnVSync(base::TimeTicks vsync_time, - base::TimeDelta interval) { - // Main thread will run vsync callback in low latency presentation mode. - if (VSyncCallbackEnabled() && !SupportsLowLatencyPresentation()) { - DCHECK(vsync_callback_); - vsync_callback_.Run(vsync_time, interval); - } - - task_runner_->PostTask( - FROM_HERE, - base::BindOnce(&DirectCompositionChildSurfaceWin::HandleVSyncOnMainThread, - weak_factory_.GetWeakPtr(), vsync_time, interval)); -} - -void DirectCompositionChildSurfaceWin::HandleVSyncOnMainThread( - base::TimeTicks vsync_time, - base::TimeDelta interval) { - last_vsync_time_ = vsync_time; - last_vsync_interval_ = interval; - - CheckPendingFrames(); - - UMA_HISTOGRAM_COUNTS_100("GPU.DirectComposition.NumPendingFrames", - pending_frames_.size()); - - if (SupportsLowLatencyPresentation() && VSyncCallbackEnabled() && - pending_frames_.size() < max_pending_frames_) { - DCHECK(vsync_callback_); - vsync_callback_.Run(vsync_time, interval); - } -} - -void DirectCompositionChildSurfaceWin::StartOrStopVSyncThread() { - bool start_vsync_thread = VSyncCallbackEnabled() || !pending_frames_.empty(); - if (vsync_thread_started_ == start_vsync_thread) - return; - vsync_thread_started_ = start_vsync_thread; - if (start_vsync_thread) { - vsync_thread_->AddObserver(this); - } else { - vsync_thread_->RemoveObserver(this); - } -} - -bool DirectCompositionChildSurfaceWin::VSyncCallbackEnabled() const { - base::AutoLock auto_lock(vsync_callback_enabled_lock_); - return vsync_callback_enabled_; -} - -void DirectCompositionChildSurfaceWin::CheckPendingFrames() { - TRACE_EVENT1("gpu", "DirectCompositionChildSurfaceWin::CheckPendingFrames", - "num_pending_frames", pending_frames_.size()); - - if (pending_frames_.empty()) - return; - - Microsoft::WRL::ComPtr<ID3D11DeviceContext> context; - d3d11_device_->GetImmediateContext(&context); - while (!pending_frames_.empty()) { - auto& frame = pending_frames_.front(); - // Query isn't created if there was no damage for previous frame. - if (frame.query) { - HRESULT hr = context->GetData(frame.query.Get(), nullptr, 0, - D3D11_ASYNC_GETDATA_DONOTFLUSH); - // When the GPU completes execution past the event query, GetData() will - // return S_OK, and S_FALSE otherwise. Do not use SUCCEEDED() because - // S_FALSE is also a success code. - if (hr != S_OK) - break; - } - std::move(frame.callback) - .Run( - gfx::PresentationFeedback(last_vsync_time_, last_vsync_interval_, - gfx::PresentationFeedback::kVSync | - gfx::PresentationFeedback::kHWClock)); - pending_frames_.pop_front(); - } - - StartOrStopVSyncThread(); -} - -void DirectCompositionChildSurfaceWin::EnqueuePendingFrame( - PresentationCallback callback) { - Microsoft::WRL::ComPtr<ID3D11Query> query; - - // Do not create query for empty damage so that 3D engine is not used when - // only presenting video in overlay. Callback will be dequeued on next vsync. - if (!swap_rect_.IsEmpty()) { - D3D11_QUERY_DESC desc = {}; - desc.Query = D3D11_QUERY_EVENT; - HRESULT hr = d3d11_device_->CreateQuery(&desc, &query); - if (SUCCEEDED(hr)) { - Microsoft::WRL::ComPtr<ID3D11DeviceContext> context; - d3d11_device_->GetImmediateContext(&context); - context->End(query.Get()); - context->Flush(); - } else { - DLOG(ERROR) << "CreateQuery failed with error 0x" << std::hex << hr; - } - } - - pending_frames_.emplace_back(std::move(query), std::move(callback)); - - StartOrStopVSyncThread(); -} - Microsoft::WRL::ComPtr<ID3D11Texture2D> DirectCompositionChildSurfaceWin::GetOffscreenTexture() { if (!dcomp_surface_) {
diff --git a/ui/gl/direct_composition_child_surface_win.h b/ui/gl/direct_composition_child_surface_win.h index 3eff525..4864f8d4 100644 --- a/ui/gl/direct_composition_child_surface_win.h +++ b/ui/gl/direct_composition_child_surface_win.h
@@ -10,32 +10,15 @@ #include <dcomp.h> #include <wrl/client.h> -#include "base/callback.h" -#include "base/containers/circular_deque.h" -#include "base/memory/raw_ptr.h" -#include "base/memory/weak_ptr.h" -#include "base/synchronization/lock.h" -#include "base/time/time.h" #include "ui/gl/gl_export.h" #include "ui/gl/gl_surface_egl.h" -#include "ui/gl/vsync_observer.h" - -namespace base { -class SequencedTaskRunner; -} // namespace base namespace gl { -class VSyncThreadWin; -class GL_EXPORT DirectCompositionChildSurfaceWin : public GLSurfaceEGL, - public VSyncObserver { +class GL_EXPORT DirectCompositionChildSurfaceWin : public GLSurfaceEGL { public: - using VSyncCallback = - base::RepeatingCallback<void(base::TimeTicks, base::TimeDelta)>; DirectCompositionChildSurfaceWin(GLDisplayEGL* display, - VSyncCallback vsync_callback, bool use_angle_texture_offset, - size_t max_pending_frames, bool force_full_damage, bool force_full_damage_always); @@ -63,12 +46,13 @@ const gfx::ColorSpace& color_space, bool has_alpha) override; bool SetEnableDCLayers(bool enable) override; - gfx::VSyncProvider* GetVSyncProvider() override; - bool SupportsGpuVSync() const override; - void SetGpuVSyncEnabled(bool enabled) override; - // VSyncObserver implementation. - void OnVSync(base::TimeTicks vsync_time, base::TimeDelta interval) override; + // Finish a draw started by |SetDrawRectangle|. Internally, calls presents the + // swap chain or calls |EndDraw| on the DComp surface. + // + // Returns true on success. |swap_rect| will contain the portion of the + // surface we're flipping (originally passed in via SetDrawRectangle). + bool EndDraw(gfx::Rect* swap_rect); static bool IsDirectCompositionSwapChainFailed(); @@ -89,30 +73,6 @@ ~DirectCompositionChildSurfaceWin() override; private: - struct PendingFrame { - PendingFrame(Microsoft::WRL::ComPtr<ID3D11Query> query, - PresentationCallback callback); - PendingFrame(PendingFrame&& other); - ~PendingFrame(); - PendingFrame& operator=(PendingFrame&& other); - - // Event query issued after frame is presented. - Microsoft::WRL::ComPtr<ID3D11Query> query; - - // Presentation callback enqueued in SwapBuffers(). - PresentationCallback callback; - }; - - void EnqueuePendingFrame(PresentationCallback callback); - void CheckPendingFrames(); - - void StartOrStopVSyncThread(); - - bool VSyncCallbackEnabled() const; - - void HandleVSyncOnMainThread(base::TimeTicks vsync_time, - base::TimeDelta interval); - // Release the texture that's currently being drawn to. If will_discard is // true then the surface should be discarded without swapping any contents // to it. Returns false if this fails. @@ -154,26 +114,9 @@ // verify a draw offset bug. Microsoft::WRL::ComPtr<ID3D11Texture2D> offscreen_texture_; - const VSyncCallback vsync_callback_; const bool use_angle_texture_offset_; - const size_t max_pending_frames_; const bool force_full_damage_; const bool force_full_damage_always_; - - const raw_ptr<VSyncThreadWin> vsync_thread_; - scoped_refptr<base::SequencedTaskRunner> task_runner_; - - bool vsync_thread_started_ = false; - bool vsync_callback_enabled_ GUARDED_BY(vsync_callback_enabled_lock_) = false; - mutable base::Lock vsync_callback_enabled_lock_; - - // Queue of pending presentation callbacks. - base::circular_deque<PendingFrame> pending_frames_; - - base::TimeTicks last_vsync_time_; - base::TimeDelta last_vsync_interval_; - - base::WeakPtrFactory<DirectCompositionChildSurfaceWin> weak_factory_{this}; }; } // namespace gl
diff --git a/ui/gl/direct_composition_surface_win.cc b/ui/gl/direct_composition_surface_win.cc index dc1c1b3..0921e8de 100644 --- a/ui/gl/direct_composition_surface_win.cc +++ b/ui/gl/direct_composition_surface_win.cc
@@ -8,13 +8,40 @@ #include <utility> #include "base/bind.h" +#include "base/functional/callback_helpers.h" +#include "base/metrics/histogram_macros.h" +#include "base/threading/thread_task_runner_handle.h" #include "base/trace_event/trace_event.h" +#include "ui/gfx/presentation_feedback.h" +#include "ui/gfx/swap_result.h" #include "ui/gl/dc_layer_tree.h" #include "ui/gl/direct_composition_child_surface_win.h" #include "ui/gl/direct_composition_support.h" +#include "ui/gl/gl_angle_util_win.h" +#include "ui/gl/vsync_thread_win.h" namespace gl { +namespace { + +bool SupportsLowLatencyPresentation() { + return base::FeatureList::IsEnabled( + features::kDirectCompositionLowLatencyPresentation); +} + +} // namespace + +DirectCompositionSurfaceWin::PendingFrame::PendingFrame( + Microsoft::WRL::ComPtr<ID3D11Query> query, + PresentationCallback callback) + : query(std::move(query)), callback(std::move(callback)) {} +DirectCompositionSurfaceWin::PendingFrame::PendingFrame(PendingFrame&& other) = + default; +DirectCompositionSurfaceWin::PendingFrame::~PendingFrame() = default; +DirectCompositionSurfaceWin::PendingFrame& +DirectCompositionSurfaceWin::PendingFrame::operator=(PendingFrame&& other) = + default; + DirectCompositionSurfaceWin::DirectCompositionSurfaceWin( GLDisplayEGL* display, HWND parent_window, @@ -22,11 +49,13 @@ const Settings& settings) : GLSurfaceEGL(display), child_window_(parent_window), + vsync_callback_(std::move(vsync_callback)), + vsync_thread_(VSyncThreadWin::GetInstance()), + task_runner_(base::ThreadTaskRunnerHandle::Get()), + max_pending_frames_(settings.max_pending_frames), root_surface_(new DirectCompositionChildSurfaceWin( display, - std::move(vsync_callback), settings.use_angle_texture_offset, - settings.max_pending_frames, settings.force_root_surface_full_damage, settings.force_root_surface_full_damage_always)), layer_tree_(std::make_unique<DCLayerTree>( @@ -45,6 +74,8 @@ return false; } + d3d11_device_ = QueryD3D11DeviceObjectFromANGLE(); + child_window_.Initialize(); window_ = child_window_.window(); @@ -59,6 +90,13 @@ } void DirectCompositionSurfaceWin::Destroy() { + for (auto& frame : pending_frames_) + std::move(frame.callback).Run(gfx::PresentationFeedback::Failure()); + pending_frames_.clear(); + + if (vsync_thread_started_) + vsync_thread_->RemoveObserver(this); + root_surface_->Destroy(); // Freeing DComp resources such as visuals and surfaces causes the // device to become 'dirty'. We must commit the changes to the device @@ -100,8 +138,13 @@ PresentationCallback callback) { TRACE_EVENT0("gpu", "DirectCompositionSurfaceWin::SwapBuffers"); - if (root_surface_->SwapBuffers(std::move(callback)) != - gfx::SwapResult::SWAP_ACK) + gfx::Rect swap_rect; + bool success = root_surface_->EndDraw(&swap_rect); + // Do not create query for empty damage so that 3D engine is not used when + // only presenting video in overlay. Callback will be dequeued on next vsync. + EnqueuePendingFrame(std::move(callback), + /*create_query=*/!swap_rect.IsEmpty()); + if (!success) return gfx::SwapResult::SWAP_FAILED; if (!layer_tree_->CommitAndClearPendingOverlays(root_surface_.get())) @@ -122,13 +165,27 @@ } gfx::VSyncProvider* DirectCompositionSurfaceWin::GetVSyncProvider() { - return root_surface_->GetVSyncProvider(); + return vsync_thread_->vsync_provider(); } void DirectCompositionSurfaceWin::SetVSyncEnabled(bool enabled) { root_surface_->SetVSyncEnabled(enabled); } +void DirectCompositionSurfaceWin::OnVSync(base::TimeTicks vsync_time, + base::TimeDelta interval) { + // Main thread will run vsync callback in low latency presentation mode. + if (VSyncCallbackEnabled() && !SupportsLowLatencyPresentation()) { + DCHECK(vsync_callback_); + vsync_callback_.Run(vsync_time, interval); + } + + task_runner_->PostTask( + FROM_HERE, + base::BindOnce(&DirectCompositionSurfaceWin::HandleVSyncOnMainThread, + weak_factory_.GetWeakPtr(), vsync_time, interval)); +} + bool DirectCompositionSurfaceWin::ScheduleDCLayer( std::unique_ptr<ui::DCRendererLayerParams> params) { return layer_tree_->ScheduleDCLayer(std::move(params)); @@ -182,7 +239,11 @@ } void DirectCompositionSurfaceWin::SetGpuVSyncEnabled(bool enabled) { - root_surface_->SetGpuVSyncEnabled(enabled); + { + base::AutoLock auto_lock(vsync_callback_enabled_lock_); + vsync_callback_enabled_ = enabled; + } + StartOrStopVSyncThread(); } bool DirectCompositionSurfaceWin::SupportsDelegatedInk() { @@ -230,4 +291,94 @@ index, transform, offset, clip_rect); } +void DirectCompositionSurfaceWin::HandleVSyncOnMainThread( + base::TimeTicks vsync_time, + base::TimeDelta interval) { + last_vsync_time_ = vsync_time; + last_vsync_interval_ = interval; + + CheckPendingFrames(); + + UMA_HISTOGRAM_COUNTS_100("GPU.DirectComposition.NumPendingFrames", + pending_frames_.size()); + + if (SupportsLowLatencyPresentation() && VSyncCallbackEnabled() && + pending_frames_.size() < max_pending_frames_) { + DCHECK(vsync_callback_); + vsync_callback_.Run(vsync_time, interval); + } +} + +void DirectCompositionSurfaceWin::StartOrStopVSyncThread() { + bool start_vsync_thread = VSyncCallbackEnabled() || !pending_frames_.empty(); + if (vsync_thread_started_ == start_vsync_thread) + return; + vsync_thread_started_ = start_vsync_thread; + if (start_vsync_thread) { + vsync_thread_->AddObserver(this); + } else { + vsync_thread_->RemoveObserver(this); + } +} + +bool DirectCompositionSurfaceWin::VSyncCallbackEnabled() const { + base::AutoLock auto_lock(vsync_callback_enabled_lock_); + return vsync_callback_enabled_; +} + +void DirectCompositionSurfaceWin::CheckPendingFrames() { + TRACE_EVENT1("gpu", "DirectCompositionSurfaceWin::CheckPendingFrames", + "num_pending_frames", pending_frames_.size()); + + if (pending_frames_.empty()) + return; + + Microsoft::WRL::ComPtr<ID3D11DeviceContext> context; + d3d11_device_->GetImmediateContext(&context); + while (!pending_frames_.empty()) { + auto& frame = pending_frames_.front(); + // Query isn't created if there was no damage for previous frame. + if (frame.query) { + HRESULT hr = context->GetData(frame.query.Get(), nullptr, 0, + D3D11_ASYNC_GETDATA_DONOTFLUSH); + // When the GPU completes execution past the event query, GetData() will + // return S_OK, and S_FALSE otherwise. Do not use SUCCEEDED() because + // S_FALSE is also a success code. + if (hr != S_OK) + break; + } + std::move(frame.callback) + .Run( + gfx::PresentationFeedback(last_vsync_time_, last_vsync_interval_, + gfx::PresentationFeedback::kVSync | + gfx::PresentationFeedback::kHWClock)); + pending_frames_.pop_front(); + } + + StartOrStopVSyncThread(); +} + +void DirectCompositionSurfaceWin::EnqueuePendingFrame( + PresentationCallback callback, + bool create_query) { + Microsoft::WRL::ComPtr<ID3D11Query> query; + if (create_query) { + D3D11_QUERY_DESC desc = {}; + desc.Query = D3D11_QUERY_EVENT; + HRESULT hr = d3d11_device_->CreateQuery(&desc, &query); + if (SUCCEEDED(hr)) { + Microsoft::WRL::ComPtr<ID3D11DeviceContext> context; + d3d11_device_->GetImmediateContext(&context); + context->End(query.Get()); + context->Flush(); + } else { + DLOG(ERROR) << "CreateQuery failed with error 0x" << std::hex << hr; + } + } + + pending_frames_.emplace_back(std::move(query), std::move(callback)); + + StartOrStopVSyncThread(); +} + } // namespace gl
diff --git a/ui/gl/direct_composition_surface_win.h b/ui/gl/direct_composition_surface_win.h index c444cee..cb2b544 100644 --- a/ui/gl/direct_composition_surface_win.h +++ b/ui/gl/direct_composition_surface_win.h
@@ -10,7 +10,10 @@ #include <dcomp.h> #include <wrl/client.h> +#include "base/containers/circular_deque.h" +#include "base/memory/raw_ptr.h" #include "base/memory/scoped_refptr.h" +#include "base/synchronization/lock.h" #include "base/time/time.h" #include "mojo/public/cpp/bindings/pending_receiver.h" #include "ui/gfx/geometry/transform.h" @@ -19,6 +22,10 @@ #include "ui/gl/gl_surface_egl.h" #include "ui/gl/vsync_observer.h" +namespace base { +class SequencedTaskRunner; +} // namespace base + namespace gfx { namespace mojom { class DelegatedInkPointRenderer; @@ -27,10 +34,12 @@ } // namespace gfx namespace gl { +class VSyncThreadWin; class DCLayerTree; class DirectCompositionChildSurfaceWin; -class GL_EXPORT DirectCompositionSurfaceWin : public GLSurfaceEGL { +class GL_EXPORT DirectCompositionSurfaceWin : public GLSurfaceEGL, + public VSyncObserver { public: using VSyncCallback = base::RepeatingCallback<void(base::TimeTicks, base::TimeDelta)>; @@ -94,6 +103,9 @@ std::unique_ptr<ui::DCRendererLayerParams> params) override; void SetFrameRate(float frame_rate) override; + // VSyncObserver implementation. + void OnVSync(base::TimeTicks vsync_time, base::TimeDelta interval) override; + bool SupportsDelegatedInk() override; void SetDelegatedInkTrailStartPoint( std::unique_ptr<gfx::DelegatedInkMetadata> metadata) override; @@ -125,11 +137,55 @@ ~DirectCompositionSurfaceWin() override; private: + struct PendingFrame { + PendingFrame(Microsoft::WRL::ComPtr<ID3D11Query> query, + PresentationCallback callback); + PendingFrame(PendingFrame&& other); + ~PendingFrame(); + PendingFrame& operator=(PendingFrame&& other); + + // Event query issued after frame is presented. + Microsoft::WRL::ComPtr<ID3D11Query> query; + + // Presentation callback enqueued in SwapBuffers(). + PresentationCallback callback; + }; + + void EnqueuePendingFrame(PresentationCallback callback, bool create_query); + void CheckPendingFrames(); + + void StartOrStopVSyncThread(); + + bool VSyncCallbackEnabled() const; + + void HandleVSyncOnMainThread(base::TimeTicks vsync_time, + base::TimeDelta interval); + HWND window_ = nullptr; ChildWindowWin child_window_; + Microsoft::WRL::ComPtr<ID3D11Device> d3d11_device_; + + const VSyncCallback vsync_callback_; + + const raw_ptr<VSyncThreadWin> vsync_thread_; + scoped_refptr<base::SequencedTaskRunner> task_runner_; + + bool vsync_thread_started_ = false; + bool vsync_callback_enabled_ GUARDED_BY(vsync_callback_enabled_lock_) = false; + mutable base::Lock vsync_callback_enabled_lock_; + + // Queue of pending presentation callbacks. + base::circular_deque<PendingFrame> pending_frames_; + const size_t max_pending_frames_; + + base::TimeTicks last_vsync_time_; + base::TimeDelta last_vsync_interval_; + scoped_refptr<DirectCompositionChildSurfaceWin> root_surface_; std::unique_ptr<DCLayerTree> layer_tree_; + + base::WeakPtrFactory<DirectCompositionSurfaceWin> weak_factory_{this}; }; } // namespace gl
diff --git a/ui/ozone/platform/wayland/host/wayland_surface.cc b/ui/ozone/platform/wayland/host/wayland_surface.cc index a13e1247..a7d45cf7 100644 --- a/ui/ozone/platform/wayland/host/wayland_surface.cc +++ b/ui/ozone/platform/wayland/host/wayland_surface.cc
@@ -584,9 +584,11 @@ gfx::ScaleRect(crop_transformed, bounds.width(), bounds.height()); DCHECK(viewport()); if (wl_fixed_from_double(viewport_src_dip.width()) == 0 || - wl_fixed_from_double(viewport_src_dip.height()) == 0) { - LOG(ERROR) << "Sending viewport src with width/height zero will result " - "in wayland disconnection"; + wl_fixed_from_double(viewport_src_dip.height()) == 0 || + wl_fixed_from_double(viewport_src_dip.x()) < 0 || + wl_fixed_from_double(viewport_src_dip.y()) < 0) { + LOG(ERROR) << "Sending viewport src with width/height zero or negative " + "origin will result in wayland disconnection"; // TODO(crbug.com/1325344): Resolve why this viewport size ends up being // zero and remove the fix below. LOG(ERROR) << "viewport_src_dip=" << viewport_src_dip.ToString() @@ -604,6 +606,8 @@ std::max(viewport_src_dip.width(), kViewPortSizeMinFloat)); viewport_src_dip.set_height( std::max(viewport_src_dip.height(), kViewPortSizeMinFloat)); + viewport_src_dip.set_x(std::max(viewport_src_dip.x(), 0.f)); + viewport_src_dip.set_y(std::max(viewport_src_dip.y(), 0.f)); } src_to_set[0] = wl_fixed_from_double(viewport_src_dip.x()), src_to_set[1] = wl_fixed_from_double(viewport_src_dip.y());
diff --git a/ui/shell_dialogs/select_file_dialog_linux_portal.cc b/ui/shell_dialogs/select_file_dialog_linux_portal.cc index 36fcc28..d1c0e41 100644 --- a/ui/shell_dialogs/select_file_dialog_linux_portal.cc +++ b/ui/shell_dialogs/select_file_dialog_linux_portal.cc
@@ -4,14 +4,15 @@ #include "ui/shell_dialogs/select_file_dialog_linux_portal.h" -#include "base/bind.h" #include "base/containers/contains.h" +#include "base/functional/bind.h" #include "base/logging.h" #include "base/memory/weak_ptr.h" #include "base/no_destructor.h" #include "base/notreached.h" #include "base/strings/string_piece.h" #include "base/strings/stringprintf.h" +#include "base/task/sequenced_task_runner.h" #include "base/time/time.h" #include "components/dbus/thread_linux/dbus_thread_linux.h" #include "dbus/object_path.h" @@ -20,6 +21,7 @@ #include "ui/base/l10n/l10n_util.h" #include "ui/gfx/native_widget_types.h" #include "ui/linux/linux_ui_delegate.h" +#include "ui/shell_dialogs/select_file_dialog.h" #include "ui/strings/grit/ui_strings.h" #include "url/gurl.h" #include "url/url_util.h" @@ -118,6 +120,34 @@ writer->CloseContainer(&option_writer); } +scoped_refptr<dbus::Bus>* AcquireBusStorageOnBusThread() { + static base::NoDestructor<scoped_refptr<dbus::Bus>> bus(nullptr); + if (!*bus) { + dbus::Bus::Options options; + options.bus_type = dbus::Bus::SESSION; + options.connection_type = dbus::Bus::PRIVATE; + options.dbus_task_runner = dbus_thread_linux::GetTaskRunner(); + + *bus = base::MakeRefCounted<dbus::Bus>(options); + } + + return bus.get(); +} + +dbus::Bus* AcquireBusOnBusThread() { + return AcquireBusStorageOnBusThread()->get(); +} + +void DestroyBusOnBusThread() { + scoped_refptr<dbus::Bus>* bus_storage = AcquireBusStorageOnBusThread(); + (*bus_storage)->ShutdownAndBlock(); + + // If the connection is restarted later on, we need to make sure the entire + // bus is newly created. Otherwise, references to an old, invalid task runner + // may persist. + bus_storage->reset(); +} + } // namespace SelectFileDialogLinuxPortal::SelectFileDialogLinuxPortal( @@ -149,15 +179,14 @@ // static void SelectFileDialogLinuxPortal::DestroyPortalConnection() { dbus_thread_linux::GetTaskRunner()->PostTask( - FROM_HERE, - base::BindOnce(&SelectFileDialogLinuxPortal::DestroyBusOnBusThread)); + FROM_HERE, base::BindOnce(&DestroyBusOnBusThread)); } bool SelectFileDialogLinuxPortal::IsRunning( gfx::NativeWindow parent_window) const { if (parent_window && parent_window->GetHost()) { auto window = parent_window->GetHost()->GetAcceleratedWidget(); - return parents_.find(window) != parents_.end(); + return parent_ && parent_.value() == window; } return false; @@ -174,14 +203,19 @@ void* params, const GURL* caller) { CheckCalledOnValidSequence(); - auto info = base::MakeRefCounted<DialogInfo>(); + + auto info = base::MakeRefCounted<DialogInfo>( + base::BindOnce(&SelectFileDialogLinuxPortal::CompleteOpenOnMainThread, + base::AsWeakPtr(this)), + base::BindOnce(&SelectFileDialogLinuxPortal::CancelOpenOnMainThread, + base::AsWeakPtr(this))); + info_ = info; info->type = type; info->main_task_runner = base::SequencedTaskRunnerHandle::Get(); - info->listener_params = params; + listener_params_ = params; if (owning_window && owning_window->GetHost()) { - info->parent = owning_window->GetHost()->GetAcceleratedWidget(); - parents_.insert(*info->parent); + parent_ = owning_window->GetHost()->GetAcceleratedWidget(); } if (file_types) @@ -195,16 +229,14 @@ // and returned to listeners later. filters_ = filter_set.filters; - if (info->parent) { + if (parent_) { auto* delegate = ui::LinuxUiDelegate::GetInstance(); if (delegate && delegate->ExportWindowHandle( - *info->parent, + *parent_, base::BindOnce( &SelectFileDialogLinuxPortal::SelectFileImplWithParentHandle, - // Note that we can't move any of the parameters, as the - // fallback case below requires them to all still be available. - base::AsWeakPtr(this), info, title, default_path, filter_set, + base::AsWeakPtr(this), title, default_path, filter_set, default_extension))) { // Return early to skip the fallback below. return; @@ -214,9 +246,8 @@ } // No parent, so just use a blank parent handle. - SelectFileImplWithParentHandle(std::move(info), std::move(title), - std::move(default_path), std::move(filter_set), - std::move(default_extension), ""); + SelectFileImplWithParentHandle(title, default_path, filter_set, + default_extension, ""); } bool SelectFileDialogLinuxPortal::HasMultipleFileTypeChoicesImpl() { @@ -225,6 +256,7 @@ // static void SelectFileDialogLinuxPortal::CheckPortalAvailabilityOnBusThread() { + DCHECK(dbus_thread_linux::GetTaskRunner()->RunsTasksInCurrentSequence()); base::AtomicFlag* availability_test_complete = GetAvailabilityTestCompletionFlag(); if (availability_test_complete->IsSet()) @@ -329,41 +361,14 @@ PortalFilterSet&& other) = default; SelectFileDialogLinuxPortal::PortalFilterSet::~PortalFilterSet() = default; -SelectFileDialogLinuxPortal::DialogInfo::DialogInfo() = default; +SelectFileDialogLinuxPortal::DialogInfo::DialogInfo( + OnSelectFileExecutedCallback selected_callback, + OnSelectFileCanceledCallback canceled_callback) + : selected_callback_(std::move(selected_callback)), + canceled_callback_(std::move(canceled_callback)) {} SelectFileDialogLinuxPortal::DialogInfo::~DialogInfo() = default; // static -scoped_refptr<dbus::Bus>* -SelectFileDialogLinuxPortal::AcquireBusStorageOnBusThread() { - static base::NoDestructor<scoped_refptr<dbus::Bus>> bus(nullptr); - if (!*bus) { - dbus::Bus::Options options; - options.bus_type = dbus::Bus::SESSION; - options.connection_type = dbus::Bus::PRIVATE; - options.dbus_task_runner = dbus_thread_linux::GetTaskRunner(); - - *bus = base::MakeRefCounted<dbus::Bus>(options); - } - - return bus.get(); -} - -// static -dbus::Bus* SelectFileDialogLinuxPortal::AcquireBusOnBusThread() { - return AcquireBusStorageOnBusThread()->get(); -} - -void SelectFileDialogLinuxPortal::DestroyBusOnBusThread() { - scoped_refptr<dbus::Bus>* bus_storage = AcquireBusStorageOnBusThread(); - (*bus_storage)->ShutdownAndBlock(); - - // If the connection is restarted later on, we need to make sure the entire - // bus is newly created. Otherwise, references to an old, invalid task runner - // may persist. - bus_storage->reset(); -} - -// static base::AtomicFlag* SelectFileDialogLinuxPortal::GetAvailabilityTestCompletionFlag() { static base::NoDestructor<base::AtomicFlag> flag; @@ -423,33 +428,36 @@ } void SelectFileDialogLinuxPortal::SelectFileImplWithParentHandle( - scoped_refptr<DialogInfo> info, std::u16string title, base::FilePath default_path, PortalFilterSet filter_set, base::FilePath::StringType default_extension, std::string parent_handle) { + CheckCalledOnValidSequence(); + bool default_path_exists = CallDirectoryExistsOnUIThread(default_path); dbus_thread_linux::GetTaskRunner()->PostTask( FROM_HERE, - base::BindOnce(&SelectFileDialogLinuxPortal::SelectFileImplOnBusThread, - base::AsWeakPtr(this), std::move(info), std::move(title), - std::move(default_path), std::move(filter_set), - std::move(default_extension), std::move(parent_handle))); + base::BindOnce( + &SelectFileDialogLinuxPortal::DialogInfo::SelectFileImplOnBusThread, + info_, std::move(title), std::move(default_path), default_path_exists, + std::move(filter_set), std::move(default_extension), + std::move(parent_handle))); } -void SelectFileDialogLinuxPortal::SelectFileImplOnBusThread( - scoped_refptr<DialogInfo> info, +void SelectFileDialogLinuxPortal::DialogInfo::SelectFileImplOnBusThread( std::u16string title, base::FilePath default_path, + const bool default_path_exists, PortalFilterSet filter_set, base::FilePath::StringType default_extension, std::string parent_handle) { + DCHECK(dbus_thread_linux::GetTaskRunner()->RunsTasksInCurrentSequence()); dbus::Bus* bus = AcquireBusOnBusThread(); if (!bus->Connect()) LOG(ERROR) << "Could not connect to bus for XDG portal"; std::string method; - switch (info->type) { + switch (type) { case SELECT_FOLDER: case SELECT_UPLOAD_FOLDER: case SELECT_EXISTING_FOLDER: @@ -474,9 +482,9 @@ writer.AppendString(base::UTF16ToUTF8(title)); } else { int message_id = 0; - if (info->type == SELECT_SAVEAS_FILE) { + if (type == SELECT_SAVEAS_FILE) { message_id = IDS_SAVEAS_ALL_FILES; - } else if (info->type == SELECT_OPEN_MULTI_FILE) { + } else if (type == SELECT_OPEN_MULTI_FILE) { message_id = IDS_OPEN_FILES_DIALOG_TITLE; } else { message_id = IDS_OPEN_FILE_DIALOG_TITLE; @@ -487,8 +495,8 @@ std::string response_handle_token = base::StringPrintf("handle_%d", handle_token_counter_++); - AppendOptions(&writer, info->type, response_handle_token, default_path, - filter_set); + AppendOptions(&writer, response_handle_token, default_path, + default_path_exists, filter_set); // The sender part of the handle object contains the D-Bus connection name // without the prefix colon and with all dots replaced with underscores. @@ -500,46 +508,47 @@ base::StringPrintf("/org/freedesktop/portal/desktop/request/%s/%s", sender_part.c_str(), response_handle_token.c_str())); - info->response_handle = + response_handle_ = bus->GetObjectProxy(kXdgPortalService, expected_handle_path); - ConnectToHandle(info); + ConnectToHandle(); dbus::ObjectPath portal_path(kXdgPortalObject); dbus::ObjectProxy* portal = bus->GetObjectProxy(kXdgPortalService, portal_path); portal->CallMethodWithErrorResponse( &method_call, dbus::ObjectProxy::TIMEOUT_USE_DEFAULT, - base::BindOnce(&SelectFileDialogLinuxPortal::OnCallResponse, - base::AsWeakPtr(this), base::Unretained(bus), info)); + base::BindOnce(&DialogInfo::OnCallResponse, this, base::Unretained(bus))); } -void SelectFileDialogLinuxPortal::AppendOptions( +void SelectFileDialogLinuxPortal::DialogInfo::AppendOptions( dbus::MessageWriter* writer, - Type type, const std::string& response_handle_token, const base::FilePath& default_path, - const PortalFilterSet& filter_set) { + const bool default_path_exists, + const SelectFileDialogLinuxPortal::PortalFilterSet& filter_set) { dbus::MessageWriter options_writer(nullptr); writer->OpenArray("{sv}", &options_writer); AppendStringOption(&options_writer, kFileChooserOptionHandleToken, response_handle_token); - if (type == SELECT_UPLOAD_FOLDER) { + if (type == SelectFileDialog::Type::SELECT_UPLOAD_FOLDER) { AppendStringOption(&options_writer, kFileChooserOptionAcceptLabel, l10n_util::GetStringUTF8( IDS_SELECT_UPLOAD_FOLDER_DIALOG_UPLOAD_BUTTON)); } - if (type == SELECT_FOLDER || type == SELECT_UPLOAD_FOLDER || - type == SELECT_EXISTING_FOLDER) { + if (type == SelectFileDialog::Type::SELECT_FOLDER || + type == SelectFileDialog::Type::SELECT_UPLOAD_FOLDER || + type == SelectFileDialog::Type::SELECT_EXISTING_FOLDER) { AppendBoolOption(&options_writer, kFileChooserOptionDirectory, true); - } else if (type == SELECT_OPEN_MULTI_FILE) { + } else if (type == SelectFileDialog::Type::SELECT_OPEN_MULTI_FILE) { AppendBoolOption(&options_writer, kFileChooserOptionMultiple, true); } - if (type == SELECT_SAVEAS_FILE && !default_path.empty()) { - if (CallDirectoryExistsOnUIThread(default_path)) { + if (type == SelectFileDialog::Type::SELECT_SAVEAS_FILE && + !default_path.empty()) { + if (default_path_exists) { // If this is an existing directory, navigate to that directory, with no // filename. AppendByteStringOption(&options_writer, kFileChooserOptionCurrentFolder, @@ -574,7 +583,7 @@ writer->CloseContainer(&options_writer); } -void SelectFileDialogLinuxPortal::AppendFiltersOption( +void SelectFileDialogLinuxPortal::DialogInfo::AppendFiltersOption( dbus::MessageWriter* writer, const std::vector<PortalFilter>& filters) { dbus::MessageWriter option_writer(nullptr); @@ -597,7 +606,7 @@ writer->CloseContainer(&option_writer); } -void SelectFileDialogLinuxPortal::AppendFilterStruct( +void SelectFileDialogLinuxPortal::DialogInfo::AppendFilterStruct( dbus::MessageWriter* writer, const PortalFilter& filter) { dbus::MessageWriter filter_writer(nullptr); @@ -622,45 +631,38 @@ writer->CloseContainer(&filter_writer); } -void SelectFileDialogLinuxPortal::ConnectToHandle( - scoped_refptr<DialogInfo> info) { - info->response_handle->ConnectToSignal( +void SelectFileDialogLinuxPortal::DialogInfo::ConnectToHandle() { + DCHECK(dbus_thread_linux::GetTaskRunner()->RunsTasksInCurrentSequence()); + response_handle_->ConnectToSignal( kXdgPortalRequestInterfaceName, kXdgPortalResponseSignal, - base::BindRepeating(&SelectFileDialogLinuxPortal::OnResponseSignalEmitted, - base::AsWeakPtr(this), info), - base::BindOnce(&SelectFileDialogLinuxPortal::OnResponseSignalConnected, - base::AsWeakPtr(this), info)); + base::BindRepeating(&DialogInfo::OnResponseSignalEmitted, this), + base::BindOnce(&DialogInfo::OnResponseSignalConnected, this)); } -void SelectFileDialogLinuxPortal::CompleteOpen( - scoped_refptr<DialogInfo> info, +void SelectFileDialogLinuxPortal::DialogInfo::CompleteOpen( std::vector<base::FilePath> paths, std::string current_filter) { - info->response_handle->Detach(); - info->main_task_runner->PostTask( - FROM_HERE, - base::BindOnce(&SelectFileDialogLinuxPortal::CompleteOpenOnMainThread, - base::AsWeakPtr(this), info, std::move(paths), - std::move(current_filter))); + DCHECK(dbus_thread_linux::GetTaskRunner()->RunsTasksInCurrentSequence()); + response_handle_->Detach(); + main_task_runner->PostTask( + FROM_HERE, base::BindOnce(std::move(selected_callback_), std::move(paths), + std::move(current_filter))); } -void SelectFileDialogLinuxPortal::CancelOpen(scoped_refptr<DialogInfo> info) { - info->response_handle->Detach(); - info->main_task_runner->PostTask( - FROM_HERE, - base::BindOnce(&SelectFileDialogLinuxPortal::CancelOpenOnMainThread, - base::AsWeakPtr(this), info)); +void SelectFileDialogLinuxPortal::DialogInfo::CancelOpen() { + response_handle_->Detach(); + main_task_runner->PostTask(FROM_HERE, std::move(canceled_callback_)); } void SelectFileDialogLinuxPortal::CompleteOpenOnMainThread( - scoped_refptr<DialogInfo> info, std::vector<base::FilePath> paths, std::string current_filter) { - UnparentOnMainThread(info.get()); + CheckCalledOnValidSequence(); + UnparentOnMainThread(); if (listener_) { - if (info->type == SELECT_OPEN_MULTI_FILE) { - listener_->MultiFilesSelected(paths, info->listener_params); + if (info_->type == SELECT_OPEN_MULTI_FILE) { + listener_->MultiFilesSelected(paths, listener_params_); } else if (paths.size() > 1) { LOG(ERROR) << "Got >1 file URI from a single-file chooser"; } else { @@ -671,45 +673,43 @@ break; } } - listener_->FileSelected(paths.front(), index, info->listener_params); + listener_->FileSelected(paths.front(), index, listener_params_); } } } -void SelectFileDialogLinuxPortal::CancelOpenOnMainThread( - scoped_refptr<DialogInfo> info) { - UnparentOnMainThread(info.get()); +void SelectFileDialogLinuxPortal::CancelOpenOnMainThread() { + UnparentOnMainThread(); if (listener_) - listener_->FileSelectionCanceled(info->listener_params); + listener_->FileSelectionCanceled(listener_params_); } -void SelectFileDialogLinuxPortal::UnparentOnMainThread(DialogInfo* info) { - if (info->parent) { - parents_.erase(*info->parent); - info->parent.reset(); +void SelectFileDialogLinuxPortal::UnparentOnMainThread() { + if (parent_) { + parent_.reset(); } } -void SelectFileDialogLinuxPortal::OnCallResponse( +void SelectFileDialogLinuxPortal::DialogInfo::OnCallResponse( dbus::Bus* bus, - scoped_refptr<DialogInfo> info, dbus::Response* response, dbus::ErrorResponse* error_response) { + DCHECK(dbus_thread_linux::GetTaskRunner()->RunsTasksInCurrentSequence()); if (response) { dbus::MessageReader reader(response); dbus::ObjectPath actual_handle_path; if (!reader.PopObjectPath(&actual_handle_path)) { LOG(ERROR) << "Invalid portal response"; } else { - if (info->response_handle->object_path() != actual_handle_path) { + if (response_handle_->object_path() != actual_handle_path) { VLOG(1) << "Re-attaching response handle to " << actual_handle_path.value(); - info->response_handle->Detach(); - info->response_handle = + response_handle_->Detach(); + response_handle_ = bus->GetObjectProxy(kXdgPortalService, actual_handle_path); - ConnectToHandle(info); + ConnectToHandle(); } // Return before the operation is cancelled. @@ -728,41 +728,41 @@ } // All error paths end up here. - CancelOpen(std::move(info)); + CancelOpen(); } -void SelectFileDialogLinuxPortal::OnResponseSignalConnected( - scoped_refptr<DialogInfo> info, +void SelectFileDialogLinuxPortal::DialogInfo::OnResponseSignalConnected( const std::string& interface, const std::string& signal, bool connected) { + DCHECK(dbus_thread_linux::GetTaskRunner()->RunsTasksInCurrentSequence()); if (!connected) { LOG(ERROR) << "Could not connect to Response signal"; - CancelOpen(std::move(info)); + CancelOpen(); } } -void SelectFileDialogLinuxPortal::OnResponseSignalEmitted( - scoped_refptr<DialogInfo> info, +void SelectFileDialogLinuxPortal::DialogInfo::OnResponseSignalEmitted( dbus::Signal* signal) { + DCHECK(dbus_thread_linux::GetTaskRunner()->RunsTasksInCurrentSequence()); dbus::MessageReader reader(signal); std::vector<std::string> uris; std::string current_filter; if (!CheckResponseCode(&reader) || !ReadResponseResults(&reader, &uris, ¤t_filter)) { - CancelOpen(std::move(info)); + CancelOpen(); return; } std::vector<base::FilePath> paths = ConvertUrisToPaths(uris); if (!paths.empty()) - CompleteOpen(std::move(info), std::move(paths), std::move(current_filter)); + CompleteOpen(std::move(paths), std::move(current_filter)); else - CancelOpen(std::move(info)); + CancelOpen(); } -bool SelectFileDialogLinuxPortal::CheckResponseCode( +bool SelectFileDialogLinuxPortal::DialogInfo::CheckResponseCode( dbus::MessageReader* reader) { std::uint32_t response = 0; if (!reader->PopUint32(&response)) { @@ -775,7 +775,7 @@ return true; } -bool SelectFileDialogLinuxPortal::ReadResponseResults( +bool SelectFileDialogLinuxPortal::DialogInfo::ReadResponseResults( dbus::MessageReader* reader, std::vector<std::string>* uris, std::string* current_filter) { @@ -816,7 +816,8 @@ return true; } -std::vector<base::FilePath> SelectFileDialogLinuxPortal::ConvertUrisToPaths( +std::vector<base::FilePath> +SelectFileDialogLinuxPortal::DialogInfo::ConvertUrisToPaths( const std::vector<std::string>& uris) { std::vector<base::FilePath> paths; for (const std::string& uri : uris) {
diff --git a/ui/shell_dialogs/select_file_dialog_linux_portal.h b/ui/shell_dialogs/select_file_dialog_linux_portal.h index dd912d1..7e5ffe6 100644 --- a/ui/shell_dialogs/select_file_dialog_linux_portal.h +++ b/ui/shell_dialogs/select_file_dialog_linux_portal.h
@@ -5,6 +5,7 @@ #ifndef UI_SHELL_DIALOGS_SELECT_FILE_DIALOG_LINUX_PORTAL_H_ #define UI_SHELL_DIALOGS_SELECT_FILE_DIALOG_LINUX_PORTAL_H_ +#include "base/functional/callback_forward.h" #include "base/memory/raw_ptr.h" #include "base/memory/ref_counted.h" #include "base/memory/scoped_refptr.h" @@ -16,6 +17,10 @@ #include "ui/shell_dialogs/select_file_dialog_linux.h" namespace ui { +using OnSelectFileExecutedCallback = + base::OnceCallback<void(std::vector<base::FilePath> paths, + std::string current_filter)>; +using OnSelectFileCanceledCallback = base::OnceCallback<void()>; // Implementation of SelectFileDialog that has the XDG file chooser portal show // a platform-dependent file selection dialog. This acts as a modal dialog. @@ -91,35 +96,78 @@ }; // A wrapper over some shared contextual information that needs to be passed - // around between various handler functions. This is ref-counted due to some - // of the locations its used in having slightly unclear or error-prone - // lifetimes. - struct DialogInfo : base::RefCountedThreadSafe<DialogInfo> { - DialogInfo(); + // around between SelectFileDialogLinuxPortal and the Portal via D-Bus. + // This is ref-counted due to sharing between the 2 sequences: dbus sequence + // and main sequence. + // Usage: SelectFileDialogLinuxPortal instantiates DialogInfo with the 2 + // callbacks, sets the public members and then call SelectFileImplOnDbus(). + // DialogInfo notifies the end result via one of the callbacks. + class DialogInfo : public base::RefCountedThreadSafe<DialogInfo> { + public: + DialogInfo(OnSelectFileExecutedCallback selected_callback, + OnSelectFileCanceledCallback canceled_callback); - // The response object handle that the portal will send a signal to upon the - // dialog's completion. - raw_ptr<dbus::ObjectProxy, DanglingUntriaged> response_handle = nullptr; - absl::optional<gfx::AcceleratedWidget> parent; + // Sets up listeners for the response handle's signals. + void SelectFileImplOnBusThread(std::u16string title, + base::FilePath default_path, + const bool default_path_exists, + PortalFilterSet filter_set, + base::FilePath::StringType default_extension, + std::string parent_handle); Type type; // The task runner the SelectFileImpl method was called on. scoped_refptr<base::SequencedTaskRunner> main_task_runner; - // The untyped params to pass to the listener. - raw_ptr<void> listener_params = nullptr; private: friend class base::RefCountedThreadSafe<DialogInfo>; - ~DialogInfo(); + + // Should run on D-Bus thread. + void ConnectToHandle(); + void OnCallResponse(dbus::Bus* bus, + dbus::Response* response, + dbus::ErrorResponse* error_response); + void OnResponseSignalEmitted(dbus::Signal* signal); + bool CheckResponseCode(dbus::MessageReader* reader); + bool ReadResponseResults(dbus::MessageReader* reader, + std::vector<std::string>* uris, + std::string* current_filter); + void OnResponseSignalConnected(const std::string& interface, + const std::string& signal, + bool connected); + void AppendFiltersOption(dbus::MessageWriter* writer, + const std::vector<PortalFilter>& filters); + void AppendOptions(dbus::MessageWriter* writer, + const std::string& response_handle_token, + const base::FilePath& default_path, + const bool derfault_path_exists, + const PortalFilterSet& filter_set); + void AppendFilterStruct(dbus::MessageWriter* writer, + const PortalFilter& filter); + std::vector<base::FilePath> ConvertUrisToPaths( + const std::vector<std::string>& uris); + + // Completes an open call, notifying the listener with the given paths, and + // marks the dialog as closed. + void CompleteOpen(std::vector<base::FilePath> paths, + std::string current_filter); + // Completes an open call, notifying the listener with a cancellation, and + // marks the dialog as closed. + void CancelOpen(); + + // These callbacks should run on main thread. + // It will point to SelectFileDialogPortal::CompleteOpenOnMainThread. + OnSelectFileExecutedCallback selected_callback_; + // It will point to SelectFileDialogPortal::CancelOpenOnMainThread. + OnSelectFileCanceledCallback canceled_callback_; + + // The response object handle that the portal will send a signal to upon the + // dialog's completion. + raw_ptr<dbus::ObjectProxy, DanglingUntriaged> response_handle_ = nullptr; }; - static scoped_refptr<dbus::Bus>* AcquireBusStorageOnBusThread(); - static dbus::Bus* AcquireBusOnBusThread(); - - static void DestroyBusOnBusThread(); - + // D-Bus configuration and initialization. static void CheckPortalAvailabilityOnBusThread(); - static bool IsPortalRunningOnBusThread(dbus::ObjectProxy* dbus_proxy); static bool IsPortalActivatableOnBusThread(dbus::ObjectProxy* dbus_proxy); @@ -130,71 +178,28 @@ PortalFilterSet BuildFilterSet(); void SelectFileImplWithParentHandle( - scoped_refptr<DialogInfo> info, std::u16string title, base::FilePath default_path, PortalFilterSet filter_set, base::FilePath::StringType default_extension, std::string parent_handle); - void SelectFileImplOnBusThread(scoped_refptr<DialogInfo> info, - std::u16string title, - base::FilePath default_path, - PortalFilterSet filter_set, - base::FilePath::StringType default_extension, - std::string parent_handle); - - void AppendOptions(dbus::MessageWriter* writer, - Type type, - const std::string& response_handle_token, - const base::FilePath& default_path, - const PortalFilterSet& filter_set); - void AppendFiltersOption(dbus::MessageWriter* writer, - const std::vector<PortalFilter>& filters); - void AppendFilterStruct(dbus::MessageWriter* writer, - const PortalFilter& filter); - - // Sets up listeners for the response handle's signals. - void ConnectToHandle(scoped_refptr<DialogInfo> info); - - // Completes an open call, notifying the listener with the given paths, and - // marks the dialog as closed. - void CompleteOpen(scoped_refptr<DialogInfo> info, - std::vector<base::FilePath> paths, - std::string current_filter); - // Completes an open call, notifying the listener with a cancellation, and - // marks the dialog as closed. - void CancelOpen(scoped_refptr<DialogInfo> info); - - void CompleteOpenOnMainThread(scoped_refptr<DialogInfo> info, - std::vector<base::FilePath> paths, + void CompleteOpenOnMainThread(std::vector<base::FilePath> paths, std::string current_filter); - void CancelOpenOnMainThread(scoped_refptr<DialogInfo> info); + void CancelOpenOnMainThread(); // Removes the DialogInfo parent. Must be called on the UI task runner. - void UnparentOnMainThread(DialogInfo* info); + void UnparentOnMainThread(); - void OnCallResponse(dbus::Bus* bus, - scoped_refptr<DialogInfo> info, - dbus::Response* response, - dbus::ErrorResponse* error_response); + // This should be used in the main thread. + absl::optional<gfx::AcceleratedWidget> parent_; - void OnResponseSignalConnected(scoped_refptr<DialogInfo> info, - const std::string& interface, - const std::string& signal, - bool connected); + // The untyped params to pass to the listener, it should be used in the main + // thread. + raw_ptr<void> listener_params_ = nullptr; - void OnResponseSignalEmitted(scoped_refptr<DialogInfo> info, - dbus::Signal* signal); - - bool CheckResponseCode(dbus::MessageReader* reader); - bool ReadResponseResults(dbus::MessageReader* reader, - std::vector<std::string>* uris, - std::string* current_filter); - std::vector<base::FilePath> ConvertUrisToPaths( - const std::vector<std::string>& uris); - - std::set<gfx::AcceleratedWidget> parents_; + // Data shared across main thread and D-Bus thread. + scoped_refptr<DialogInfo> info_; // Written by the D-Bus thread and read by the UI thread. static bool is_portal_available_;
diff --git a/ui/views/bubble/bubble_dialog_model_host.cc b/ui/views/bubble/bubble_dialog_model_host.cc index 8fc7aff..8dcc2ba 100644 --- a/ui/views/bubble/bubble_dialog_model_host.cc +++ b/ui/views/bubble/bubble_dialog_model_host.cc
@@ -35,6 +35,7 @@ #include "ui/views/layout/box_layout_view.h" #include "ui/views/layout/fill_layout.h" #include "ui/views/layout/layout_provider.h" +#include "ui/views/style/typography.h" #include "ui/views/view_class_properties.h" namespace views { @@ -390,9 +391,9 @@ extra_button->label(GetPassKey()))); } else if (ui::DialogModelLabel::TextReplacement* extra_link = model_->extra_link(GetPassKey())) { - DCHECK(extra_link->callback()); + DCHECK(extra_link->callback().has_value()); auto link = std::make_unique<views::Link>(extra_link->text()); - link->SetCallback(extra_link->callback()); + link->SetCallback(extra_link->callback().value()); SetExtraView(std::move(link)); } @@ -907,34 +908,50 @@ return CreateLabelForDialogModelLabel(dialog_label); } -// TODO(crbug.com/1363412): Add support for replacements with no style, and -// emphasized style. std::unique_ptr<StyledLabel> BubbleDialogModelHost::CreateStyledLabelForDialogModelLabel( const ui::DialogModelLabel& dialog_label) { DCHECK(DialogModelLabelRequiresStyledLabel(dialog_label)); - // TODO(pbos): Make sure this works for >1 link, it uses .front() now. - DCHECK_EQ(dialog_label.replacements(GetPassKey()).size(), 1u); + const std::vector<ui::DialogModelLabel::TextReplacement>& replacements = + dialog_label.replacements(GetPassKey()); - size_t offset; - const std::u16string link_text = - dialog_label.replacements(GetPassKey()).front().text(); + // Retrieve the replacements strings to create the text. + std::vector<std::u16string> string_replacements; + for (auto replacement : replacements) { + string_replacements.push_back(replacement.text()); + } + std::vector<size_t> offsets; const std::u16string text = l10n_util::GetStringFUTF16( - dialog_label.message_id(GetPassKey()), link_text, &offset); + dialog_label.message_id(GetPassKey()), string_replacements, &offsets); auto styled_label = std::make_unique<StyledLabel>(); styled_label->SetText(text); - auto style_info = StyledLabel::RangeStyleInfo::CreateForLink( - dialog_label.replacements(GetPassKey()).front().callback()); - style_info.accessible_name = - dialog_label.replacements(GetPassKey()).front().accessible_name(); - styled_label->AddStyleRange(gfx::Range(offset, offset + link_text.length()), - style_info); - styled_label->SetDefaultTextStyle(dialog_label.is_secondary(GetPassKey()) ? style::STYLE_SECONDARY : style::STYLE_PRIMARY); + // Style the replacements as needed. + DCHECK_EQ(string_replacements.size(), offsets.size()); + for (size_t i = 0; i < replacements.size(); ++i) { + auto replacement = replacements[i]; + // No styling needed if replacement is neither a link nor emphasized text. + if (!replacement.callback().has_value() && !replacement.is_emphasized()) + continue; + + StyledLabel::RangeStyleInfo style_info; + if (replacement.callback().has_value()) { + style_info = StyledLabel::RangeStyleInfo::CreateForLink( + replacement.callback().value()); + style_info.accessible_name = replacement.accessible_name().value(); + } else if (replacement.is_emphasized()) { + style_info.text_style = views::style::STYLE_EMPHASIZED; + } + + auto offset = offsets[i]; + styled_label->AddStyleRange( + gfx::Range(offset, offset + replacement.text().length()), style_info); + } + return styled_label; }
diff --git a/ui/views/bubble/tooltip_icon.cc b/ui/views/bubble/tooltip_icon.cc index f9ea2a0f..b4d2afc8 100644 --- a/ui/views/bubble/tooltip_icon.cc +++ b/ui/views/bubble/tooltip_icon.cc
@@ -86,7 +86,7 @@ // static text for screenreader users, since that's the role it serves here // anyway. node_data->role = ax::mojom::Role::kStaticText; - node_data->SetName(tooltip_); + node_data->SetNameChecked(tooltip_); } void TooltipIcon::OnThemeChanged() {