diff --git a/DEPS b/DEPS index 2d11fc4..4e0cce6 100644 --- a/DEPS +++ b/DEPS
@@ -228,11 +228,11 @@ # Three lines of non-changing comments so that # the commit queue can handle CLs rolling Skia # and whatever else without interference from each other. - 'skia_revision': '31df6806c06b2949769a128fc5c1da8408ad1d1e', + 'skia_revision': 'd7437eec2e9718eda8c8f5cb94ddcef1005c0bfb', # 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': '890fc3811c10070e1be72e3d48df0e385af369a2', + 'v8_revision': 'd5bc1bb5517606fbd131b29cc36170c00d58da13', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling swarming_client # and whatever else without interference from each other. @@ -279,7 +279,7 @@ # Three lines of non-changing comments so that # the commit queue can handle CLs rolling freetype # and whatever else without interference from each other. - 'freetype_revision': '47b1a541cb1943d85da3976b93f9a5ed490288e2', + 'freetype_revision': '09195a82a4a39afb0f8281563f48ce4493455b4e', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling freetype # and whatever else without interference from each other. @@ -299,7 +299,7 @@ # Three lines of non-changing comments so that # the commit queue can handle CLs rolling catapult # and whatever else without interference from each other. - 'catapult_revision': '4505381167a6d6d84ccf2897e903c18bc28f88e2', + 'catapult_revision': '4360d3a81d9d484e96562f1291f273ffadcb0a7d', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling libFuzzer # and whatever else without interference from each other. @@ -307,7 +307,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': '326dde8dbf802b1e6d7e261d0f158e86e54d70bd', + 'devtools_frontend_revision': 'f6d1346cfb3fd27044107f94114019f0d39a2aa7', # 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. @@ -347,7 +347,7 @@ # Three lines of non-changing comments so that # the commit queue can handle CLs rolling feed # and whatever else without interference from each other. - 'dawn_revision': 'b7c7f62829b0ed8297d5f35539c862d94d098a64', + 'dawn_revision': 'ccc4766e76ecaf3424f6cb74aa8ccee80800464b', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling feed # and whatever else without interference from each other. @@ -395,7 +395,7 @@ # Three lines of non-changing comments so that # the commit queue can handle CLs rolling feed # and whatever else without interference from each other. - 'libunwind_revision': 'cdb04dc77cd222c79c00a55bd11d4dc0e91b6cf1', + 'libunwind_revision': 'b79b97c1f6adf97270247f8cc8dfafa19b971453', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling feed # and whatever else without interference from each other. @@ -680,7 +680,7 @@ 'packages': [ { 'package': 'chromium/rts/model/linux-amd64', - 'version': 'MkXs6TpeCBl3pZazTjAVTWewsffZCrWkgBKMuw0eZFUC', + 'version': '1URU-9iILPccuJwgENTSMUJmx3PdNRt4uniDnIMcMLkC', }, ], 'dep_type': 'cipd', @@ -691,7 +691,7 @@ 'packages': [ { 'package': 'chromium/rts/model/mac-amd64', - 'version': 'amCMt5ElDz1OICB6umnsIEI-VlGDuxwiOdmE2m7Bp1QC', + 'version': 'wSU83B5QT_7vWnrJ8Gkecgy0kvaSMw4JwL70S1m4c_4C', }, ], 'dep_type': 'cipd', @@ -702,7 +702,7 @@ 'packages': [ { 'package': 'chromium/rts/model/windows-amd64', - 'version': '_PtlxrwpL9FLj5dDOhU3VPQMBcmk5YTQHklkKNvl5psC', + 'version': 'yFEgyjVypfPYm7pgT7EnKPoOqa3otepPvE9duGQbJzEC', }, ], 'dep_type': 'cipd', @@ -767,7 +767,7 @@ 'packages': [ { 'package': 'chromium/third_party/androidx', - 'version': 'LeiIWludv84_u11Z19AGLNhYxzZcsn_fP-PjDjkxdCsC', + 'version': 'lo5p1oo8yhPj2rUylGmKm2aBBQvNarY6hgj1tYbctQkC', }, ], 'condition': 'checkout_android', @@ -877,7 +877,7 @@ Var('chromium_git') + '/angle/angle.git' + '@' + Var('angle_revision'), 'src/third_party/dav1d/libdav1d': - Var('chromium_git') + '/external/github.com/videolan/dav1d.git' + '@' + 'e4812a6ad7621bb25f9d4ac40e8413e24ac78857', + Var('chromium_git') + '/external/github.com/videolan/dav1d.git' + '@' + '7ee2501b362c756cc0fef11412c6afea34de031c', 'src/third_party/dawn': Var('dawn_git') + '/dawn.git' + '@' + Var('dawn_revision'), @@ -983,7 +983,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' + '@' + '9039a957fa031a62a3afb51da628f405f8ccd1c9', + 'url': Var('chromium_git') + '/chromiumos/chromite.git' + '@' + '923a131e2a899aa635805f583e71e599c099c5c3', 'condition': 'checkout_chromeos', }, @@ -1389,7 +1389,7 @@ }, 'src/third_party/perfetto': - Var('android_git') + '/platform/external/perfetto.git' + '@' + '5d5769f0b54a2a505a62194493f1047dc3b686d1', + Var('android_git') + '/platform/external/perfetto.git' + '@' + '70e408c9bc8610ab9a8484b2ed91461d8416166e', 'src/third_party/perl': { 'url': Var('chromium_git') + '/chromium/deps/perl.git' + '@' + '6f3e5028eb65d0b4c5fdd792106ac4c84eee1eb3', @@ -1621,7 +1621,7 @@ Var('chromium_git') + '/external/github.com/gpuweb/cts.git' + '@' + 'c53abb766db4f9a1369b084b985319379b74f1b7', 'src/third_party/webrtc': - Var('webrtc_git') + '/src.git' + '@' + 'f48d3cfbabbd9c94c358dd78f461cb01a0253d8a', + Var('webrtc_git') + '/src.git' + '@' + '53adc7b1c8b200bd3227fb06157a56bff09471bb', 'src/third_party/libgifcodec': Var('skia_git') + '/libgifcodec' + '@'+ Var('libgifcodec_revision'), @@ -1682,7 +1682,7 @@ Var('chromium_git') + '/v8/v8.git' + '@' + Var('v8_revision'), 'src-internal': { - 'url': 'https://chrome-internal.googlesource.com/chrome/src-internal.git@aed2dbb78847aee2d4f3997afb84418573b2fc5e', + 'url': 'https://chrome-internal.googlesource.com/chrome/src-internal.git@0373519cba23d48901497d77251cb5f7e9df5cfa', 'condition': 'checkout_src_internal', }, @@ -1701,7 +1701,7 @@ 'packages': [ { 'package': 'chromeos_internal/apps/help_app/app', - 'version': 'M0YE0T_txF0uEMuGUtJTW-2dOVi1v-xOSUSLpF-ydI8C', + 'version': 'CXEQ-cXnS4zMzaASwBsQPC18ZbY69QxeHjiil4vn87kC', }, ], 'condition': 'checkout_chromeos and checkout_src_internal', @@ -1712,7 +1712,7 @@ 'packages': [ { 'package': 'chromeos_internal/apps/media_app/app', - 'version': 'JXDFnXGQv7TTH536aBAeQGpv-yVwwXaGiHQIWyolCUoC', + 'version': 'WOaciqMMXpXSwqvqLCdrelp36W5o0UTlPeTuT27iyR0C', }, ], 'condition': 'checkout_chromeos and checkout_src_internal',
diff --git a/android_webview/glue/java/src/com/android/webview/chromium/WebViewContentsClientAdapter.java b/android_webview/glue/java/src/com/android/webview/chromium/WebViewContentsClientAdapter.java index 029b7e0..3ce9a05 100644 --- a/android_webview/glue/java/src/com/android/webview/chromium/WebViewContentsClientAdapter.java +++ b/android_webview/glue/java/src/com/android/webview/chromium/WebViewContentsClientAdapter.java
@@ -51,7 +51,6 @@ import org.chromium.base.ContextUtils; import org.chromium.base.Log; import org.chromium.base.TraceEvent; -import org.chromium.base.metrics.RecordHistogram; import org.chromium.base.metrics.ScopedSysTraceEvent; import org.chromium.base.task.PostTask; import org.chromium.components.embedder_support.util.WebResourceResponseInfo; @@ -1006,8 +1005,6 @@ if (TRACE) Log.i(TAG, "getDefaultVideoPoster"); result = mWebChromeClient.getDefaultVideoPoster(); } - RecordHistogram.recordBooleanHistogram( - "Android.WebView.CustomDefaultVideoPoster", result != null); if (result == null) { // The ic_play_circle_outline_black_48dp icon is transparent so we need to draw it // on a gray background.
diff --git a/ash/app_list/app_list_presenter_unittest.cc b/ash/app_list/app_list_presenter_unittest.cc index 4eea7f9..81fcefe 100644 --- a/ash/app_list/app_list_presenter_unittest.cc +++ b/ash/app_list/app_list_presenter_unittest.cc
@@ -6,6 +6,7 @@ #include <memory> #include "ash/accessibility/accessibility_controller_impl.h" +#include "ash/app_list/app_list_bubble_presenter.h" #include "ash/app_list/app_list_controller_impl.h" #include "ash/app_list/app_list_presenter_impl.h" #include "ash/app_list/app_list_test_view_delegate.h" @@ -13,6 +14,8 @@ #include "ash/app_list/model/app_list_test_model.h" #include "ash/app_list/model/search/test_search_result.h" #include "ash/app_list/test/app_list_test_helper.h" +#include "ash/app_list/views/app_list_bubble_search_page.h" +#include "ash/app_list/views/app_list_bubble_view.h" #include "ash/app_list/views/app_list_folder_view.h" #include "ash/app_list/views/app_list_item_view.h" #include "ash/app_list/views/app_list_main_view.h" @@ -304,6 +307,99 @@ base::test::ScopedFeatureList feature_list_; }; +// Tests search UI for all tablet/clamshell classic/bubble launcher +// combinations. +class SearchUITest + : public AshTestBase, + public testing::WithParamInterface<std::tuple<bool, bool>> { + public: + SearchUITest() = default; + SearchUITest(const SearchUITest&) = delete; + SearchUITest& operator=(const SearchUITest&) = delete; + ~SearchUITest() override = default; + + // testing::Test: + void SetUp() override { + scoped_feature_list_.InitWithFeatureState(features::kAppListBubble, + app_list_bubble_flag()); + AppListView::SetShortAnimationForTesting(true); + AshTestBase::SetUp(); + + // Make the display big enough to hold the app list. + UpdateDisplay("1024x768"); + } + + // testing::Test: + void TearDown() override { + AshTestBase::TearDown(); + AppListView::SetShortAnimationForTesting(false); + } + + // Whether we should use the AppListBubble flag. + bool app_list_bubble_flag() { return std::get<0>(GetParam()); } + // Whether we should run the test in tablet mode. + bool tablet_mode() { return std::get<1>(GetParam()); } + + // Bubble launcher is visible in clamshell mode with kAppListBubble enabled. + bool should_show_bubble_launcher() { + return app_list_bubble_flag() && !tablet_mode(); + } + // Zero state be shown in clamshell mode and in tablet mode when bubble + // launcher is not enabled. + bool should_show_zero_state_search() { return !app_list_bubble_flag(); } + + void MaybeRefreshAppListSearchResultPage() { + // Bubble launcher has an AppListBubbleSearchPage which does not need to be + // refreshed like the SearchResultViewPage. + if (!should_show_bubble_launcher()) { + GetAppListTestHelper() + ->GetAppListView() + ->app_list_main_view() + ->contents_view() + ->search_result_page_view() + ->OnSearchResultContainerResultsChanged(); + } + } + + bool AppListSearchResultPageVisible() { + return should_show_bubble_launcher() + ? GetAppListTestHelper()->GetBubbleSearchPage()->GetVisible() + : GetAppListTestHelper() + ->GetAppListView() + ->app_list_main_view() + ->contents_view() + ->search_result_page_view() + ->GetVisible(); + } + + void EnsureLauncherShown() { + if (should_show_bubble_launcher()) { + Shell::Get()->app_list_controller()->bubble_presenter_for_test()->Show( + GetPrimaryDisplay().id()); + } else if (!tablet_mode()) { + // App list is always visible in tablet mode so we do not need to show it. + GetAppListTestHelper()->ShowAndRunLoop(GetPrimaryDisplayId()); + } + } + + gfx::Point SearchBoxCenterPoint() { + if (should_show_bubble_launcher()) { + return GetAppListTestHelper() + ->GetBubbleSearchBoxView() + ->GetBoundsInScreen() + .CenterPoint(); + } + return GetAppListTestHelper() + ->GetAppListView() + ->search_box_view() + ->GetBoundsInScreen() + .CenterPoint(); + } + + private: + base::test::ScopedFeatureList scoped_feature_list_; +}; + // Used to test app_list behavior with a populated apps_grid class PopulatedAppListTest : public AshTestBase, public testing::WithParamInterface<bool> { @@ -426,6 +522,35 @@ PopulatedAppListWithVKEnabledTest, testing::Bool()); +// Instantiate the values in the parameterized tests. First boolean is used to +// determine whether we should use the kAppListBubble feature flag. The second +// boolean is to determine whether we should run the test in tablet mode. +INSTANTIATE_TEST_SUITE_P(All, + SearchUITest, + testing::Combine(testing::Bool(), testing::Bool())); + +// Tests that Zero State Search is only shown when needed. +TEST_P(SearchUITest, LauncherSearchZeroState) { + EnableTabletMode(tablet_mode()); + ui::test::EventGenerator* generator = GetEventGenerator(); + EnsureLauncherShown(); + + // Tap Search Box to activate it and check search result view visibility. + generator->GestureTapAt(SearchBoxCenterPoint()); + MaybeRefreshAppListSearchResultPage(); + EXPECT_EQ(should_show_zero_state_search(), AppListSearchResultPageVisible()); + + // Type a character into the textfield and check visibility. + generator->PressKey(ui::VKEY_A, 0); + MaybeRefreshAppListSearchResultPage(); + EXPECT_TRUE(AppListSearchResultPageVisible()); + + // Delete the character in the textfield and check visibility. + generator->PressKey(ui::VKEY_BACK, 0); + MaybeRefreshAppListSearchResultPage(); + EXPECT_EQ(should_show_zero_state_search(), AppListSearchResultPageVisible()); +} + // Verifies that context menu click should not activate the search box // (see https://crbug.com/941428). TEST_P(AppListPresenterTest, RightClickSearchBoxInPeeking) {
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 6cedd7d..c4c51187 100644 --- a/ash/app_list/views/app_list_bubble_apps_page.cc +++ b/ash/app_list/views/app_list_bubble_apps_page.cc
@@ -30,6 +30,10 @@ namespace ash { +namespace { +constexpr int kContinueColumnCount = 2; +} // namespace + AppListBubbleAppsPage::AppListBubbleAppsPage( AppListViewDelegate* view_delegate, ApplicationDragAndDropHost* drag_and_drop_host) { @@ -56,8 +60,9 @@ layout->set_cross_axis_alignment(BoxLayout::CrossAxisAlignment::kStretch); // Continue section row. - continue_section_ = scroll_contents->AddChildView( - std::make_unique<ContinueSectionView>(view_delegate)); + continue_section_ = + scroll_contents->AddChildView(std::make_unique<ContinueSectionView>( + view_delegate, kContinueColumnCount)); // Recent apps row. recent_apps_ = scroll_contents->AddChildView(
diff --git a/ash/app_list/views/continue_section_view.cc b/ash/app_list/views/continue_section_view.cc index af83b1a..4ff34b76 100644 --- a/ash/app_list/views/continue_section_view.cc +++ b/ash/app_list/views/continue_section_view.cc
@@ -26,16 +26,17 @@ namespace ash { namespace { -// Horizontal space between suggestions in dips. -constexpr int kHorizontalSpacing = 8; +// Vertical space between header and content in dips. +constexpr int kVerticalSpacing = 8; -constexpr int kContinueColumnCount = 2; -constexpr int kContinueColumnSpacing = 16; -constexpr int kContinueRowSpacing = 10; +// Continue files section constants. +constexpr int kContinueColumnSpacing = 8; +constexpr int kContinueRowSpacing = 8; +constexpr int kMinFilesForContinueSection = 3; -std::unique_ptr<views::Label> CreateLabel(const std::u16string& text) { +std::unique_ptr<views::Label> CreateContinueLabel(const std::u16string& text) { auto label = std::make_unique<views::Label>(text); - bubble_utils::ApplyStyle(label.get(), bubble_utils::LabelStyle::kBody); + bubble_utils::ApplyStyle(label.get(), bubble_utils::LabelStyle::kSubtitle); return label; } @@ -75,23 +76,24 @@ } // namespace -ContinueSectionView::ContinueSectionView(AppListViewDelegate* view_delegate) - : view_delegate_(view_delegate) { +ContinueSectionView::ContinueSectionView(AppListViewDelegate* view_delegate, + int columns) + : view_delegate_(view_delegate), columns_(columns) { DCHECK(view_delegate_); auto* layout = SetLayoutManager(std::make_unique<views::BoxLayout>( views::BoxLayout::Orientation::kVertical, gfx::Insets(), - kHorizontalSpacing)); - layout->set_main_axis_alignment(views::BoxLayout::MainAxisAlignment::kCenter); + kVerticalSpacing)); + layout->set_main_axis_alignment(views::BoxLayout::MainAxisAlignment::kStart); // TODO(https://crbug.com/1204551): Localized strings. // TODO(https://crbug.com/1204551): Styling. - auto* continue_label = AddChildView(CreateLabel(u"Label")); + auto* continue_label = AddChildView(CreateContinueLabel(u"Continue")); continue_label->SetHorizontalAlignment(gfx::ALIGN_LEFT); suggestions_container_ = AddChildView(std::make_unique<views::View>()); suggestions_container_->SetLayoutManager(std::make_unique<SimpleGridLayout>( - kContinueColumnCount, kContinueColumnSpacing, kContinueRowSpacing)); + columns_, kContinueColumnSpacing, kContinueRowSpacing)); std::vector<SearchResult*> tasks = GetTasksResultsFromSuggestionChips(view_delegate_->GetSearchModel()); @@ -100,7 +102,7 @@ suggestions_container_->AddChildView( std::make_unique<ContinueTaskView>(task)); } - SetVisible(!tasks.empty()); + SetVisible(GetTasksSuggestionsCount() > kMinFilesForContinueSection); } ContinueSectionView::~ContinueSectionView() = default;
diff --git a/ash/app_list/views/continue_section_view.h b/ash/app_list/views/continue_section_view.h index 11b89d27..160697f 100644 --- a/ash/app_list/views/continue_section_view.h +++ b/ash/app_list/views/continue_section_view.h
@@ -19,7 +19,7 @@ public: METADATA_HEADER(ContinueSectionView); - explicit ContinueSectionView(AppListViewDelegate* view_delegate); + ContinueSectionView(AppListViewDelegate* view_delegate, int columns); ContinueSectionView(const ContinueSectionView&) = delete; ContinueSectionView& operator=(const ContinueSectionView&) = delete; ~ContinueSectionView() override; @@ -30,6 +30,7 @@ private: AppListViewDelegate* const view_delegate_; + const int columns_; views::View* suggestions_container_ = nullptr; };
diff --git a/ash/app_list/views/continue_task_view.cc b/ash/app_list/views/continue_task_view.cc index dc1be4d..dcc5c6ac 100644 --- a/ash/app_list/views/continue_task_view.cc +++ b/ash/app_list/views/continue_task_view.cc
@@ -9,34 +9,72 @@ #include <string> #include <utility> +#include "ash/app_list/app_list_util.h" #include "ash/app_list/model/search/search_result.h" #include "ash/bubble/bubble_utils.h" +#include "ash/style/ash_color_provider.h" #include "base/strings/string_util.h" #include "extensions/common/constants.h" #include "ui/base/metadata/metadata_impl_macros.h" +#include "ui/gfx/image/image_skia_operations.h" +#include "ui/views/accessibility/view_accessibility.h" +#include "ui/views/background.h" +#include "ui/views/controls/image_view.h" #include "ui/views/controls/label.h" -#include "ui/views/layout/fill_layout.h" +#include "ui/views/layout/box_layout.h" namespace ash { +namespace { +constexpr int kIconSize = 36; +constexpr int kPreferredWidth = 242; +constexpr int kPreferredHeight = 52; +} // namespace ContinueTaskView::ContinueTaskView(SearchResult* task_result) : result_(task_result) { - SetLayoutManager(std::make_unique<views::FillLayout>()); - title_ = AddChildView(std::make_unique<views::Label>()); - SetText(result()->title()); + SetFocusBehavior(FocusBehavior::ALWAYS); + SetLayoutManager(std::make_unique<views::BoxLayout>( + views::BoxLayout::Orientation::kHorizontal)); + GetViewAccessibility().OverrideName(result()->title() + u" " + + result()->details()); + GetViewAccessibility().OverrideRole(ax::mojom::Role::kListItem); + + icon_ = AddChildView(std::make_unique<views::ImageView>()); + icon_->SetVerticalAlignment(views::ImageView::Alignment::kLeading); + SetIcon(result()->chip_icon()); + + auto* label_container = AddChildView(std::make_unique<views::View>()); + label_container->SetLayoutManager(std::make_unique<views::BoxLayout>( + views::BoxLayout::Orientation::kVertical)); + + title_ = label_container->AddChildView( + std::make_unique<views::Label>(result()->title())); title_->SetAccessibleName(result()->accessible_name()); + title_->SetHorizontalAlignment(gfx::HorizontalAlignment::ALIGN_LEFT); + subtitle_ = label_container->AddChildView( + std::make_unique<views::Label>(result()->details())); + subtitle_->SetHorizontalAlignment(gfx::HorizontalAlignment::ALIGN_LEFT); + + SetPreferredSize(gfx::Size(kPreferredWidth, kPreferredHeight)); } ContinueTaskView::~ContinueTaskView() = default; -void ContinueTaskView::SetText(const std::u16string& text) { - title_->SetText(text); - PreferredSizeChanged(); -} - void ContinueTaskView::OnThemeChanged() { views::View::OnThemeChanged(); bubble_utils::ApplyStyle(title_, bubble_utils::LabelStyle::kBody); + bubble_utils::ApplyStyle(subtitle_, bubble_utils::LabelStyle::kSubtitle); +} + +void ContinueTaskView::SetIcon(const gfx::ImageSkia& icon) { + gfx::ImageSkia resized(gfx::ImageSkiaOperations::CreateResizedImage( + icon, skia::ImageOperations::RESIZE_BEST, GetIconSize())); + icon_->SetImage(resized); + icon_->SetImageSize(GetIconSize()); +} + +gfx::Size ContinueTaskView::GetIconSize() const { + return gfx::Size(kIconSize, kIconSize); } BEGIN_METADATA(ContinueTaskView, views::View)
diff --git a/ash/app_list/views/continue_task_view.h b/ash/app_list/views/continue_task_view.h index 555d231..8d122e1 100644 --- a/ash/app_list/views/continue_task_view.h +++ b/ash/app_list/views/continue_task_view.h
@@ -5,13 +5,11 @@ #ifndef ASH_APP_LIST_VIEWS_CONTINUE_TASK_VIEW_H_ #define ASH_APP_LIST_VIEWS_CONTINUE_TASK_VIEW_H_ -#include <memory> -#include <string> - #include "ash/ash_export.h" #include "ui/views/view.h" namespace views { +class ImageView; class Label; } @@ -34,10 +32,13 @@ SearchResult* result() { return result_; } private: - void SetText(const std::u16string& task_title); + void SetIcon(const gfx::ImageSkia& icon); + gfx::Size GetIconSize() const; SearchResult* result_; - views::Label* title_; + views::Label* title_ = nullptr; + views::Label* subtitle_ = nullptr; + views::ImageView* icon_ = nullptr; }; } // namespace ash
diff --git a/ash/app_list/views/search_box_view.cc b/ash/app_list/views/search_box_view.cc index 2cea2cc..ab4e2c6 100644 --- a/ash/app_list/views/search_box_view.cc +++ b/ash/app_list/views/search_box_view.cc
@@ -18,6 +18,7 @@ #include "ash/app_list/views/contents_view.h" #include "ash/app_list/views/result_selection_controller.h" #include "ash/app_list/views/search_result_base_view.h" +#include "ash/app_list/views/search_result_page_view.h" #include "ash/constants/ash_features.h" #include "ash/keyboard/ui/keyboard_ui_controller.h" #include "ash/public/cpp/app_list/app_list_color_provider.h" @@ -395,7 +396,9 @@ SkColor SearchBoxView::GetBackgroundColorForState(AppListState state) const { if (state == AppListState::kStateSearchResults) { - if (features::IsDarkLightModeEnabled()) + // Search box background is transparent when search results are shown. + if (features::IsDarkLightModeEnabled() && + contents_view_->search_result_page_view()->GetVisible()) return SK_ColorTRANSPARENT; return AppListColorProvider::Get()->GetSearchBoxCardBackgroundColor(); }
diff --git a/ash/app_list/views/search_result_page_view.cc b/ash/app_list/views/search_result_page_view.cc index d11e214..fc3035f 100644 --- a/ash/app_list/views/search_result_page_view.cc +++ b/ash/app_list/views/search_result_page_view.cc
@@ -17,6 +17,7 @@ #include "ash/app_list/views/search_result_list_view.h" #include "ash/app_list/views/search_result_page_anchored_dialog.h" #include "ash/app_list/views/search_result_tile_item_list_view.h" +#include "ash/constants/ash_features.h" #include "ash/public/cpp/app_list/app_list_color_provider.h" #include "ash/public/cpp/app_list/app_list_config.h" #include "ash/public/cpp/app_list/app_list_features.h" @@ -296,6 +297,12 @@ } void SearchResultPageView::UpdateResultContainersVisibility() { + if (!ShouldShowSearchResultView()) { + SetVisible(false); + return; + } + SetVisible(true); + for (auto* container : result_container_views_) { // Containers are wrapped by a `SearchCardView`, so update the parent // visibility. @@ -477,6 +484,14 @@ anchored_dialog_.reset(); } +bool SearchResultPageView::ShouldShowSearchResultView() const { + // TODO: crbug.com/1234969 Remove after we cease zero state result queries. + return !features::IsAppListBubbleEnabled() || + !base::TrimWhitespace(search_model_->search_box()->text(), + base::TrimPositions::TRIM_ALL) + .empty(); +} + void SearchResultPageView::OnHidden() { // Hide the search results page when it is behind search box to avoid focus // being moved onto suggested apps when zero state is enabled.
diff --git a/ash/app_list/views/search_result_page_view.h b/ash/app_list/views/search_result_page_view.h index ca479dc5..db1a6bf 100644 --- a/ash/app_list/views/search_result_page_view.h +++ b/ash/app_list/views/search_result_page_view.h
@@ -119,6 +119,9 @@ // Returns background color for the given state. SkColor GetBackgroundColorForState(AppListState state) const; + // Hide zero state search result view when AppListBubble is enabled. + bool ShouldShowSearchResultView() const; + PrivacyContainerView* GetPrivacyContainerViewForTest(); SearchResultTileItemListView* GetSearchResultTileItemListViewForTest(); SearchResultListView* GetSearchResultListViewForTest();
diff --git a/ash/bubble/bubble_utils.cc b/ash/bubble/bubble_utils.cc index 99a64c5..3d33e7fb 100644 --- a/ash/bubble/bubble_utils.cc +++ b/ash/bubble/bubble_utils.cc
@@ -96,31 +96,43 @@ void ApplyStyle(views::Label* label, LabelStyle style) { label->SetAutoColorReadabilityEnabled(false); - label->SetEnabledColor(AshColorProvider::Get()->GetContentLayerColor( - AshColorProvider::ContentLayerType::kTextColorPrimary)); + AshColorProvider::ContentLayerType text_color; switch (style) { case LabelStyle::kBadge: + text_color = AshColorProvider::ContentLayerType::kTextColorPrimary; label->SetFontList(gfx::FontList({"Roboto"}, gfx::Font::NORMAL, 14, gfx::Font::Weight::MEDIUM)); break; case LabelStyle::kBody: + text_color = AshColorProvider::ContentLayerType::kTextColorPrimary; label->SetFontList(gfx::FontList({"Roboto"}, gfx::Font::NORMAL, 14, gfx::Font::Weight::NORMAL)); break; case LabelStyle::kChipBody: + text_color = AshColorProvider::ContentLayerType::kTextColorPrimary; label->SetFontList(gfx::FontList({"Roboto"}, gfx::Font::NORMAL, 10, gfx::Font::Weight::MEDIUM)); break; case LabelStyle::kChipTitle: + text_color = AshColorProvider::ContentLayerType::kTextColorPrimary; label->SetFontList(gfx::FontList({"Roboto"}, gfx::Font::NORMAL, 13, gfx::Font::Weight::NORMAL)); break; case LabelStyle::kHeader: + text_color = AshColorProvider::ContentLayerType::kTextColorPrimary; label->SetFontList(gfx::FontList({"Roboto"}, gfx::Font::NORMAL, 16, gfx::Font::Weight::MEDIUM)); break; + case LabelStyle::kSubtitle: + text_color = AshColorProvider::ContentLayerType::kTextColorSecondary; + label->SetFontList(gfx::FontList({"Roboto"}, gfx::Font::NORMAL, 12, + gfx::Font::Weight::NORMAL)); + break; } + + label->SetEnabledColor( + AshColorProvider::Get()->GetContentLayerColor(text_color)); } std::unique_ptr<views::Label> CreateLabel(LabelStyle style,
diff --git a/ash/bubble/bubble_utils.h b/ash/bubble/bubble_utils.h index 93ec6f6..e0ea343 100644 --- a/ash/bubble/bubble_utils.h +++ b/ash/bubble/bubble_utils.h
@@ -34,6 +34,7 @@ kChipBody, kChipTitle, kHeader, + kSubtitle, }; // Applies the specified `style` to the given `label`.
diff --git a/ash/public/cpp/tab_cluster/correlation_clusterer.h b/ash/public/cpp/tab_cluster/correlation_clusterer.h index e9010ee..7560264 100644 --- a/ash/public/cpp/tab_cluster/correlation_clusterer.h +++ b/ash/public/cpp/tab_cluster/correlation_clusterer.h
@@ -19,7 +19,7 @@ class EdgeSum; // Adapted from -// https://github.com/google-research/google-research/blob/master/parallel_clustering/clustering/config.proto#L66 +// https://github.com/google-research/google-research/blob/HEAD/parallel_clustering/clustering/config.proto#L66 // Consider a graph with vertex set V, edge set E, non-negative vertex weights // k_u, edge weights w_uv, and a "resolution" parameter which must be // non-negative. We define "rescaled" edge weights w'_uv for all u, v, in V as:
diff --git a/ash/quick_pair/ui/fast_pair/fast_pair_presenter.cc b/ash/quick_pair/ui/fast_pair/fast_pair_presenter.cc index ecfb570..8e21a20 100644 --- a/ash/quick_pair/ui/fast_pair/fast_pair_presenter.cc +++ b/ash/quick_pair/ui/fast_pair/fast_pair_presenter.cc
@@ -30,8 +30,9 @@ void FastPairPresenter::ShowDiscovery(scoped_refptr<Device> device, DiscoveryCallback callback) { + const auto metadata_id = device->metadata_id; FastPairRepository::Get()->GetDeviceMetadata( - device->metadata_id, + metadata_id, base::BindOnce(&FastPairPresenter::ShowDiscoveryMetadataRetrieved, weak_pointer_factory_.GetWeakPtr(), std::move(device), std::move(callback)));
diff --git a/ash/webui/shimless_rma/backend/shimless_rma_service.cc b/ash/webui/shimless_rma/backend/shimless_rma_service.cc index b4a54ac..10a14ee 100644 --- a/ash/webui/shimless_rma/backend/shimless_rma_service.cc +++ b/ash/webui/shimless_rma/backend/shimless_rma_service.cc
@@ -311,25 +311,9 @@ rmad::RmadErrorCode::RMAD_ERROR_REQUEST_INVALID); return; } - // Create a new proto so that the full component list is retained while - // transitioning to the next state. - // This is not strictly necessary, but as the UX should never display - // 'mainboard' it reduces the chance of error. - rmad::RmadState state; - state.set_allocated_components_repair(new rmad::ComponentsRepairState()); - rmad::ComponentsRepairState::ComponentRepairStatus* component = - state.mutable_components_repair()->add_component_repair(); - component->set_component( - rmad::RmadComponent::RMAD_COMPONENT_MAINBOARD_REWORK); - component->set_repair_status( - rmad::ComponentsRepairState::ComponentRepairStatus:: - RMAD_REPAIR_STATUS_REPLACED); - - chromeos::RmadClient::Get()->TransitionNextState( - state, - base::BindOnce( - &ShimlessRmaService::OnGetStateResponse<ReworkMainboardCallback>, - weak_ptr_factory_.GetWeakPtr(), std::move(callback))); + // TODO(gavindodd): set mainboard_rework flag when new rmad.proto is in + // third_party + TransitionNextStateGeneric(std::move(callback)); } void ShimlessRmaService::ReimageRequired(ReimageRequiredCallback callback) {
diff --git a/ash/webui/shimless_rma/backend/shimless_rma_service_unittest.cc b/ash/webui/shimless_rma/backend/shimless_rma_service_unittest.cc index 2ca17b9..fcea4f2 100644 --- a/ash/webui/shimless_rma/backend/shimless_rma_service_unittest.cc +++ b/ash/webui/shimless_rma/backend/shimless_rma_service_unittest.cc
@@ -983,13 +983,8 @@ fake_rmad_client_()->SetFakeStateReplies(std::move(fake_states)); fake_rmad_client_()->check_state_callback = base::BindRepeating([](const rmad::RmadState& state) { - EXPECT_EQ(state.state_case(), rmad::RmadState::kComponentsRepair); - EXPECT_EQ(1, state.components_repair().component_repair_size()); - EXPECT_EQ(state.components_repair().component_repair(0).component(), - rmad::RmadComponent::RMAD_COMPONENT_MAINBOARD_REWORK); - EXPECT_EQ(state.components_repair().component_repair(0).repair_status(), - rmad::ComponentsRepairState::ComponentRepairStatus:: - RMAD_REPAIR_STATUS_REPLACED); + // TODO(gavindodd): Check the rework_mainboard flag when it is in + // rmad.proto. }); base::RunLoop run_loop; shimless_rma_provider_->GetCurrentState(base::BindLambdaForTesting(
diff --git a/ash/webui/shimless_rma/mojom/shimless_rma.mojom b/ash/webui/shimless_rma/mojom/shimless_rma.mojom index 27e24cd..ce6ac2a 100644 --- a/ash/webui/shimless_rma/mojom/shimless_rma.mojom +++ b/ash/webui/shimless_rma/mojom/shimless_rma.mojom
@@ -80,88 +80,86 @@ // No error, and wait for a signal. kWait = 2, - // Need a reboot to continue. - kNeedReboot = 3, // Expect a reboot soon. - kExpectReboot = 4, + kExpectReboot = 3, // Expect a reboot soon. - kExpectShutdown = 5, + kExpectShutdown = 4, // The device is not in RMA mode. - kRmaNotRequired = 6, + kRmaNotRequired = 5, // No corresponding state handler for a state. - kStateHandlerMissing = 7, + kStateHandlerMissing = 6, // State handler initialization failed. - kStateHandlerInitializationFailed = 8, + kStateHandlerInitializationFailed = 7, // The request could not be processed (e.g. bad proto). - kRequestInvalid = 9, + kRequestInvalid = 8, // The request is missing mandatory arguments. - kRequestArgsMissing = 10, + kRequestArgsMissing = 9, // The request arguments are violating some rules of the state. - kRequestArgsViolation = 11, + kRequestArgsViolation = 10, // It is not possible to go back to the previous state at this point. - kTransitionFailed = 12, + kTransitionFailed = 11, // Failed to abort the RMA process. - kAbortFailed = 13, + kAbortFailed = 12, // An expected component was not found. - kMissingComponent = 14, + kMissingComponent = 13, // Cannot get the RSU challenge code. - kWriteProtectDisableRsuNoChallenge = 15, + kWriteProtectDisableRsuNoChallenge = 14, // The RSU code was incorrect. - kWriteProtectDisableRsuCodeInvalid = 16, + kWriteProtectDisableRsuCodeInvalid = 15, // The battery was not disconnected when WP disable was required. - kWriteProtectDisableBatteryNotDisconnected = 17, + kWriteProtectDisableBatteryNotDisconnected = 16, // WP was not disabled when required. - kWriteProtectSignalNotDetected = 18, + kWriteProtectSignalNotDetected = 17, // Firmware image could not be downloaded because a network connection was // unavailable. - kReimagingDownloadNoNetwork = 19, + kReimagingDownloadNoNetwork = 18, // Firmware image download did not complete because of a network error. - kReimagingDownloadNetworkError = 20, + kReimagingDownloadNetworkError = 19, // The user cancelled the firmware image download. - kReimagingDownloadCancelled = 21, + kReimagingDownloadCancelled = 20, // No valid USB device with a firmware image was found. - kReimagingUsbNotFound = 22, + kReimagingUsbNotFound = 21, // More than one USB device with a firmware image was found. - kReimagingUsbTooManyFound = 23, + kReimagingUsbTooManyFound = 22, // The firmware image found was corrupt. - kReimagingUsbInvalidImage = 24, + kReimagingUsbInvalidImage = 23, // The firmware image could not be written. - kReimagingImagingFailed = 25, + kReimagingImagingFailed = 24, // An unexpected failure prevented imaging from completing. - kReimagingUnknownFailure = 26, + kReimagingUnknownFailure = 25, // The device info is incorrect. - kDeviceInfoInvalid = 27, + kDeviceInfoInvalid = 26, // Calibration component is missing. - kCalibrationMissingComponent = 28, + kCalibrationMissingComponent = 27, // Calibration failed for a component. - kCalibrationFailed = 29, + kCalibrationFailed = 28, // Provisioning failed for the device. - kProvisioningFailed = 30, + kProvisioningFailed = 29, // Device could not be powerwashed. - kPowerwashFailed = 31, + kPowerwashFailed = 30, // Device finalization failed. - kFinalizationFailed = 32, + kFinalizationFailed = 31, // Logs failed to upload because the server could not be reached. - kLogUploadFtpServerCannotConnect = 33, + kLogUploadFtpServerCannotConnect = 32, // Logs failed to upload because the server refused the connection. - kLogUploadFtpServerConnectionRejected = 34, + kLogUploadFtpServerConnectionRejected = 33, // Logs failed to upload because the connection was interrupted. - kLogUploadFtpServerTransferFailed = 35, + kLogUploadFtpServerTransferFailed = 34, // It is not possible to cancel RMA finalization process at this point. - kCannotCancelRma = 36, + kCannotCancelRma = 35, }; // TODO(gavindodd): This is copied from @@ -188,35 +186,32 @@ // Used as a safety fallback default, and therefore should always trigger safe // fallback behavior when present. kComponentUnknown = 0, - // NOTE: This is a special case for mainboards that will be restocked after - // repair. The board will stay in RMA until it is used in another device. - kMainboardRework = 1, // Standard components. - kAudioCodec = 2, - kBattery = 3, - kStorage = 4, - kVpdCached = 5, - kNetwork = 6, // Obsolete in M91. - kCamera = 7, - kStylus = 8, - kTouchpad = 9, - kTouchsreen = 10, - kDram = 11, - kDisplayPanel = 12, - kCellular = 13, - kEthernet = 14, - kWireless = 15, + kAudioCodec = 1, + kBattery = 2, + kStorage = 3, + kVpdCached = 4, + kNetwork = 5, // Obsolete in M91. + kCamera = 6, + kStylus = 7, + kTouchpad = 8, + kTouchsreen = 9, + kDram = 10, + kDisplayPanel = 11, + kCellular = 12, + kEthernet = 13, + kWireless = 14, // Additional rmad components. - kGyroscope = 16, - kAccelerometer = 17, - kScreen = 18, + kGyroscope = 15, + kAccelerometer = 16, + kScreen = 17, // Irrelevant components. // TODO(chenghan): Do we really need these? - kKeyboard = 19, - kPowerButton = 20, + kKeyboard = 18, + kPowerButton = 19, }; // Component repair state
diff --git a/ash/webui/shimless_rma/mojom/shimless_rma_mojom_traits.cc b/ash/webui/shimless_rma/mojom/shimless_rma_mojom_traits.cc index ce996f1..77593891 100644 --- a/ash/webui/shimless_rma/mojom/shimless_rma_mojom_traits.cc +++ b/ash/webui/shimless_rma/mojom/shimless_rma_mojom_traits.cc
@@ -85,8 +85,6 @@ return MojomRmadErrorCode::kOk; case ProtoRmadErrorCode::RMAD_ERROR_WAIT: return MojomRmadErrorCode::kWait; - case ProtoRmadErrorCode::RMAD_ERROR_NEED_REBOOT: - return MojomRmadErrorCode::kNeedReboot; case ProtoRmadErrorCode::RMAD_ERROR_EXPECT_REBOOT: return MojomRmadErrorCode::kExpectReboot; case ProtoRmadErrorCode::RMAD_ERROR_EXPECT_SHUTDOWN: @@ -177,9 +175,6 @@ case MojomRmadErrorCode::kWait: *out = ProtoRmadErrorCode::RMAD_ERROR_WAIT; return true; - case MojomRmadErrorCode::kNeedReboot: - *out = ProtoRmadErrorCode::RMAD_ERROR_NEED_REBOOT; - return true; case MojomRmadErrorCode::kExpectReboot: *out = ProtoRmadErrorCode::RMAD_ERROR_EXPECT_REBOOT; return true; @@ -299,9 +294,6 @@ MojomComponentType EnumTraits<MojomComponentType, ProtoComponentType>::ToMojom( ProtoComponentType component) { switch (component) { - case rmad::RmadComponent::RMAD_COMPONENT_MAINBOARD_REWORK: - return MojomComponentType::kMainboardRework; - case rmad::RmadComponent::RMAD_COMPONENT_AUDIO_CODEC: return MojomComponentType::kAudioCodec; case rmad::RmadComponent::RMAD_COMPONENT_BATTERY: @@ -358,10 +350,6 @@ MojomComponentType component, ProtoComponentType* out) { switch (component) { - case MojomComponentType::kMainboardRework: - *out = ProtoComponentType::RMAD_COMPONENT_MAINBOARD_REWORK; - return true; - case MojomComponentType::kAudioCodec: *out = rmad::RmadComponent::RMAD_COMPONENT_AUDIO_CODEC; return true;
diff --git a/ash/webui/shimless_rma/mojom/shimless_rma_mojom_traits_unittest.cc b/ash/webui/shimless_rma/mojom/shimless_rma_mojom_traits_unittest.cc index 07d6de3..f0f22384 100644 --- a/ash/webui/shimless_rma/mojom/shimless_rma_mojom_traits_unittest.cc +++ b/ash/webui/shimless_rma/mojom/shimless_rma_mojom_traits_unittest.cc
@@ -113,8 +113,6 @@ rmad::RmadErrorCode>( {{mojom::RmadErrorCode::kOk, rmad::RmadErrorCode::RMAD_ERROR_OK}, {mojom::RmadErrorCode::kWait, rmad::RmadErrorCode::RMAD_ERROR_WAIT}, - {mojom::RmadErrorCode::kNeedReboot, - rmad::RmadErrorCode::RMAD_ERROR_NEED_REBOOT}, {mojom::RmadErrorCode::kExpectReboot, rmad::RmadErrorCode::RMAD_ERROR_EXPECT_REBOOT}, {mojom::RmadErrorCode::kExpectShutdown, @@ -192,10 +190,7 @@ TEST_F(ShimlessRmaMojoToProtoTest, RepairComponentsMatch) { constexpr auto enums = base::MakeFixedFlatMap<mojom::ComponentType, rmad::RmadComponent>( - {{mojom::ComponentType::kMainboardRework, - rmad::RmadComponent::RMAD_COMPONENT_MAINBOARD_REWORK}, - - {mojom::ComponentType::kAudioCodec, + {{mojom::ComponentType::kAudioCodec, rmad::RmadComponent::RMAD_COMPONENT_AUDIO_CODEC}, {mojom::ComponentType::kBattery, rmad::RmadComponent::RMAD_COMPONENT_BATTERY},
diff --git a/base/trace_event/common/trace_event_common.h b/base/trace_event/common/trace_event_common.h index e7825446..e8a0de7 100644 --- a/base/trace_event/common/trace_event_common.h +++ b/base/trace_event/common/trace_event_common.h
@@ -1106,9 +1106,6 @@ #define TRACE_EVENT_FLAG_HAS_PROCESS_ID (static_cast<unsigned int>(1 << 10)) #define TRACE_EVENT_FLAG_HAS_LOCAL_ID (static_cast<unsigned int>(1 << 11)) #define TRACE_EVENT_FLAG_HAS_GLOBAL_ID (static_cast<unsigned int>(1 << 12)) -// TODO(eseckler): Remove once we have native support for typed proto events in -// TRACE_EVENT macros. -#define TRACE_EVENT_FLAG_TYPED_PROTO_ARGS (static_cast<unsigned int>(1 << 15)) #define TRACE_EVENT_FLAG_JAVA_STRING_LITERALS \ (static_cast<unsigned int>(1 << 16))
diff --git a/base/values.cc b/base/values.cc index 6a9be72..a01cdac7 100644 --- a/base/values.cc +++ b/base/values.cc
@@ -1367,23 +1367,6 @@ key, const_cast<const ListValue**>(out_value)); } -bool DictionaryValue::Remove(StringPiece path, - std::unique_ptr<Value>* out_value) { - DCHECK(IsStringUTF8AllowingNoncharacters(path)); - StringPiece current_path(path); - DictionaryValue* current_dictionary = this; - size_t delimiter_position = current_path.rfind('.'); - if (delimiter_position != StringPiece::npos) { - if (!GetDictionary(current_path.substr(0, delimiter_position), - ¤t_dictionary)) - return false; - current_path = current_path.substr(delimiter_position + 1); - } - - return current_dictionary->RemoveWithoutPathExpansion(current_path, - out_value); -} - bool DictionaryValue::RemoveWithoutPathExpansion( StringPiece key, std::unique_ptr<Value>* out_value) {
diff --git a/base/values.h b/base/values.h index b21776a8..2bd7aa7 100644 --- a/base/values.h +++ b/base/values.h
@@ -749,16 +749,6 @@ // DEPRECATED, use `Value::FindListKey(key)` instead. bool GetListWithoutPathExpansion(StringPiece key, ListValue** out_value); - // Removes the Value with the specified path from this dictionary (or one - // of its child dictionaries, if the path is more than just a local key). - // If `out_value` is non-NULL, the removed Value will be passed out via - // `out_value`. If `out_value` is NULL, the removed value will be deleted. - // This method returns true if `path` is a valid path; otherwise it will - // return false and the DictionaryValue object will be unchanged. - // DEPRECATED, use `Value::RemovePath(path)` or `Value::ExtractPath(path)` - // instead. - bool Remove(StringPiece path, std::unique_ptr<Value>* out_value); - // Like Remove(), but without special treatment of '.'. This allows e.g. URLs // to be used as paths. // DEPRECATED, use `Value::RemoveKey(key)` or `Value::ExtractKey(key)`
diff --git a/base/values_unittest.cc b/base/values_unittest.cc index 805eab7..eded0a40 100644 --- a/base/values_unittest.cc +++ b/base/values_unittest.cc
@@ -1559,36 +1559,6 @@ } } -TEST(ValuesTest, DictionaryRemoval) { - std::string key = "test"; - std::unique_ptr<Value> removed_item; - - { - DictionaryValue dict; - EXPECT_EQ(0U, dict.DictSize()); - EXPECT_TRUE(dict.DictEmpty()); - dict.Set(key, std::make_unique<Value>()); - EXPECT_TRUE(dict.HasKey(key)); - EXPECT_FALSE(dict.Remove("absent key", &removed_item)); - EXPECT_EQ(1U, dict.DictSize()); - EXPECT_FALSE(dict.DictEmpty()); - - EXPECT_TRUE(dict.Remove(key, &removed_item)); - EXPECT_FALSE(dict.HasKey(key)); - ASSERT_TRUE(removed_item); - EXPECT_EQ(0U, dict.DictSize()); - EXPECT_TRUE(dict.DictEmpty()); - } - - { - DictionaryValue dict; - dict.Set(key, std::make_unique<Value>()); - EXPECT_TRUE(dict.HasKey(key)); - EXPECT_TRUE(dict.Remove(key, nullptr)); - EXPECT_FALSE(dict.HasKey(key)); - } -} - TEST(ValuesTest, DictionaryWithoutPathExpansion) { DictionaryValue dict; dict.Set("this.is.expanded", std::make_unique<Value>()); @@ -1790,7 +1760,7 @@ // Check if Equals detects differences in only the keys. copy = dv.CreateDeepCopy(); EXPECT_EQ(dv, *copy); - copy->Remove("a", nullptr); + copy->RemoveKey("a"); copy->SetBoolKey("aa", false); EXPECT_NE(dv, *copy); }
diff --git a/build/fuchsia/linux.sdk.sha1 b/build/fuchsia/linux.sdk.sha1 index e2cc597..818d5ba 100644 --- a/build/fuchsia/linux.sdk.sha1 +++ b/build/fuchsia/linux.sdk.sha1
@@ -1 +1 @@ -6.20210801.3.1 +6.20210802.1.1
diff --git a/build/fuchsia/mac.sdk.sha1 b/build/fuchsia/mac.sdk.sha1 index e2cc597..818d5ba 100644 --- a/build/fuchsia/mac.sdk.sha1 +++ b/build/fuchsia/mac.sdk.sha1
@@ -1 +1 @@ -6.20210801.3.1 +6.20210802.1.1
diff --git a/build/lacros/test_runner.py b/build/lacros/test_runner.py index 0a49e05..aad200b7 100755 --- a/build/lacros/test_runner.py +++ b/build/lacros/test_runner.py
@@ -274,6 +274,19 @@ """ if args.ash_chrome_path_override: ash_chrome_file = args.ash_chrome_path_override + if not os.path.exists(ash_chrome_file): + logging.error("""Can not find ash chrome at %s. Did you download \ +the ash from CIPD? If you don't plan to build your own ash, you need \ +to download first. Example commandlines: + $ cipd auth-login + $ echo "chromium/testing/linux-ash-chromium/x86_64/ash.zip \ +version:92.0.4515.130" > /tmp/ensure-file.txt + $ cipd ensure -ensure-file /tmp/ensure-file.txt \ +-root lacros_version_skew_tests_v92.0.4515.130 + Then you can use --ash-chrome-path-override=\ +lacros_version_skew_tests_v92.0.4515.130/test_ash_chrome +""" % ash_chrome_file) + return 1 elif args.ash_chrome_path: ash_chrome_file = args.ash_chrome_path else:
diff --git a/cc/scheduler/begin_frame_tracker.cc b/cc/scheduler/begin_frame_tracker.cc index 2f5d645..ffeda4c 100644 --- a/cc/scheduler/begin_frame_tracker.cc +++ b/cc/scheduler/begin_frame_tracker.cc
@@ -86,6 +86,7 @@ } void BeginFrameTracker::AsProtozeroInto( + perfetto::EventContext& ctx, base::TimeTicks now, perfetto::protos::pbzero::BeginImplFrameArgs* state) const { state->set_updated_at_us(current_updated_at_.since_origin().InMicroseconds()); @@ -94,11 +95,11 @@ if (HasFinished()) { state->set_state( perfetto::protos::pbzero::BeginImplFrameArgs::BEGIN_FRAME_FINISHED); - current_args_.AsProtozeroInto(state->set_current_args()); + current_args_.AsProtozeroInto(ctx, state->set_current_args()); } else { state->set_state( perfetto::protos::pbzero::BeginImplFrameArgs::BEGIN_FRAME_USING); - current_args_.AsProtozeroInto(state->set_last_args()); + current_args_.AsProtozeroInto(ctx, state->set_last_args()); } base::TimeTicks frame_time = current_args_.frame_time;
diff --git a/cc/scheduler/begin_frame_tracker.h b/cc/scheduler/begin_frame_tracker.h index c718ca39..1165a0ca 100644 --- a/cc/scheduler/begin_frame_tracker.h +++ b/cc/scheduler/begin_frame_tracker.h
@@ -12,6 +12,7 @@ #include "components/viz/common/frame_sinks/begin_frame_args.h" namespace perfetto { +class EventContext; namespace protos { namespace pbzero { class BeginImplFrameArgs; @@ -71,6 +72,7 @@ base::TimeDelta Interval() const; void AsProtozeroInto( + perfetto::EventContext& ctx, base::TimeTicks now, perfetto::protos::pbzero::BeginImplFrameArgs* dict) const;
diff --git a/cc/scheduler/scheduler.cc b/cc/scheduler/scheduler.cc index 1d5bc26..37165ae 100644 --- a/cc/scheduler/scheduler.cc +++ b/cc/scheduler/scheduler.cc
@@ -844,7 +844,8 @@ action = state_machine_.NextAction(); TRACE_EVENT(TRACE_DISABLED_BY_DEFAULT("cc.debug.scheduler"), "SchedulerStateMachine", [this](perfetto::EventContext ctx) { - this->AsProtozeroInto(ctx.event()->set_cc_scheduler_state()); + this->AsProtozeroInto(ctx, + ctx.event()->set_cc_scheduler_state()); }); base::AutoReset<SchedulerStateMachine::Action> mark_inside_action( &inside_action_, action); @@ -931,6 +932,7 @@ } void Scheduler::AsProtozeroInto( + perfetto::EventContext& ctx, perfetto::protos::pbzero::ChromeCompositorSchedulerState* state) const { base::TimeTicks now = Now(); @@ -957,14 +959,15 @@ state->set_now_to_deadline_scheduled_at_delta_us( (deadline_scheduled_at_ - Now()).InMicroseconds()); - begin_impl_frame_tracker_.AsProtozeroInto(now, + begin_impl_frame_tracker_.AsProtozeroInto(ctx, now, state->set_begin_impl_frame_args()); BeginFrameObserverBase::AsProtozeroInto( - state->set_begin_frame_observer_state()); + ctx, state->set_begin_frame_observer_state()); if (begin_frame_source_) { - begin_frame_source_->AsProtozeroInto(state->set_begin_frame_source_state()); + begin_frame_source_->AsProtozeroInto(ctx, + state->set_begin_frame_source_state()); } }
diff --git a/cc/scheduler/scheduler.h b/cc/scheduler/scheduler.h index 7ee9bef..082fcb5 100644 --- a/cc/scheduler/scheduler.h +++ b/cc/scheduler/scheduler.h
@@ -250,6 +250,7 @@ void SetMainThreadWantsBeginMainFrameNotExpected(bool new_state); void AsProtozeroInto( + perfetto::EventContext& ctx, perfetto::protos::pbzero::ChromeCompositorSchedulerState* state) const; void SetVideoNeedsBeginFrames(bool video_needs_begin_frames);
diff --git a/chrome/android/chrome_test_java_sources.gni b/chrome/android/chrome_test_java_sources.gni index f97423a55..4295afff 100644 --- a/chrome/android/chrome_test_java_sources.gni +++ b/chrome/android/chrome_test_java_sources.gni
@@ -555,6 +555,7 @@ "javatests/src/org/chromium/chrome/browser/tab/state/LevelDBPersistedTabDataStorageTest.java", "javatests/src/org/chromium/chrome/browser/tab/state/LoadCallbackHelper.java", "javatests/src/org/chromium/chrome/browser/tab/state/PersistedTabDataTest.java", + "javatests/src/org/chromium/chrome/browser/tab/state/PriceDropMetricsLoggerTest.java", "javatests/src/org/chromium/chrome/browser/tab/state/ShoppingPersistedTabDataLegacyTest.java", "javatests/src/org/chromium/chrome/browser/tab/state/ShoppingPersistedTabDataLegacyWithPASTest.java", "javatests/src/org/chromium/chrome/browser/tab/state/ShoppingPersistedTabDataTest.java",
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/device_dialog/UsbChooserDialog.java b/chrome/android/java/src/org/chromium/chrome/browser/device_dialog/UsbChooserDialog.java index d3538abfb..ea035fc 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/device_dialog/UsbChooserDialog.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/device_dialog/UsbChooserDialog.java
@@ -99,7 +99,7 @@ ItemChooserDialog.ItemChooserLabels labels = new ItemChooserDialog.ItemChooserLabels(title, searching, noneFound, statusActive, statusIdleNoneFound, statusIdleSomeFound, positiveButton); - mItemChooserDialog = new ItemChooserDialog(activity, this, labels); + mItemChooserDialog = new ItemChooserDialog(activity, activity.getWindow(), this, labels); } @Override
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/signin/SigninChecker.java b/chrome/android/java/src/org/chromium/chrome/browser/signin/SigninChecker.java index 122f111d..7f4efa6 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/signin/SigninChecker.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/signin/SigninChecker.java
@@ -26,6 +26,7 @@ import org.chromium.components.signin.ChildAccountStatus; import org.chromium.components.signin.ChildAccountStatus.Status; import org.chromium.components.signin.base.CoreAccountInfo; +import org.chromium.components.signin.identitymanager.AccountInfoServiceProvider; import org.chromium.components.signin.identitymanager.AccountTrackerService; import org.chromium.components.signin.identitymanager.ConsentLevel; import org.chromium.components.signin.metrics.SigninAccessPoint; @@ -92,7 +93,10 @@ */ private void validatePrimaryAccountExists(List<Account> accounts) { final CoreAccountInfo oldAccount = - mSigninManager.getIdentityManager().getPrimaryAccountInfo(ConsentLevel.SYNC); + mSigninManager.getIdentityManager().getPrimaryAccountInfo(ConsentLevel.SIGNIN); + boolean oldSyncConsent = + mSigninManager.getIdentityManager().getPrimaryAccountInfo(ConsentLevel.SYNC) + != null; if (oldAccount == null || AccountUtils.findAccountByName(accounts, oldAccount.getEmail()) != null) { // Do nothing if user is not signed in or if the primary account is still on device @@ -103,22 +107,9 @@ .getNewNameOfRenamedAccountAsync(oldAccount.getEmail(), accounts) .then(newAccountName -> { if (newAccountName != null) { - // Sign in to the new account if the current primary account is renamed - // to a new account - mSigninManager.signOut(SignoutReason.USER_CLICKED_SIGNOUT_SETTINGS, () -> { - mSigninManager.signinAndEnableSync(SigninAccessPoint.ACCOUNT_RENAMED, - AccountUtils.createAccountFromName(newAccountName), - new SignInCallback() { - @Override - public void onSignInComplete() { - SyncService.get().setFirstSetupComplete( - SyncFirstSetupCompleteSource.BASIC_FLOW); - } - - @Override - public void onSignInAborted() {} - }); - }, false); + // Sign in to the new account if the current primary account is renamed to + // a new account. + resigninAfterAccountRename(newAccountName, oldSyncConsent); } else { // Sign out if the current primary account is not renamed mSigninManager.signOut(SignoutReason.ACCOUNT_REMOVED_FROM_DEVICE); @@ -126,6 +117,28 @@ }); } + private void resigninAfterAccountRename(String newAccountName, boolean shouldEnableSync) { + mSigninManager.signOut(SignoutReason.USER_CLICKED_SIGNOUT_SETTINGS, () -> { + if (shouldEnableSync) { + mSigninManager.signinAndEnableSync(SigninAccessPoint.ACCOUNT_RENAMED, + AccountUtils.createAccountFromName(newAccountName), new SignInCallback() { + @Override + public void onSignInComplete() { + SyncService.get().setFirstSetupComplete( + SyncFirstSetupCompleteSource.BASIC_FLOW); + } + + @Override + public void onSignInAborted() {} + }); + } else { + AccountInfoServiceProvider.get() + .getAccountInfoByEmail(newAccountName) + .then(accountInfo -> { mSigninManager.signin(accountInfo, null); }); + } + }, false); + } + private void checkChildAccount(List<Account> accounts) { if (accounts.size() == 1) { // Child accounts can't share a device.
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/signin/SigninManagerImpl.java b/chrome/android/java/src/org/chromium/chrome/browser/signin/SigninManagerImpl.java index 24b8498..30b43aa 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/signin/SigninManagerImpl.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/signin/SigninManagerImpl.java
@@ -153,7 +153,7 @@ @Override public void onAccountsSeeded(List<CoreAccountInfo> accountInfos) { if (ChromeFeatureList.isEnabled(ChromeFeatureList.DEPRECATE_MENAGERIE_API)) { - mIdentityManager.forceRefreshOfExtendedAccountInfo(accountInfos); + mIdentityManager.refreshAccountInfoIfStale(accountInfos); } }
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/contextualsearch/ContextualSearchManagerTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/contextualsearch/ContextualSearchManagerTest.java index 6a4949c4..c3d1a3ea 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/contextualsearch/ContextualSearchManagerTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/contextualsearch/ContextualSearchManagerTest.java
@@ -19,7 +19,6 @@ import android.content.SharedPreferences; import android.graphics.Point; import android.os.Build; -import android.os.Build.VERSION_CODES; import android.os.SystemClock; import android.support.test.InstrumentationRegistry; import android.text.TextUtils; @@ -3879,10 +3878,8 @@ @Test @SmallTest @Feature({"ContextualSearch"}) - @DisableIf.Build(sdk_is_less_than = VERSION_CODES.O, - message = "Flaky < P, https://crbug.com/1048827; Flaky on P, crbug.com/1181088") - public void - testLongpressExtendingSelectionExactResolve() throws Exception { + @DisabledTest(message = "https://crbug.com/1048827, https://crbug.com/1181088") + public void testLongpressExtendingSelectionExactResolve() throws Exception { // Enabling Translations implicitly enables Longpress too. FeatureList.setTestFeatures(ENABLE_TRANSLATIONS);
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/device_dialog/ItemChooserDialogTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/device_dialog/ItemChooserDialogTest.java index 4c24423f..a4d356c1 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/device_dialog/ItemChooserDialogTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/device_dialog/ItemChooserDialogTest.java
@@ -4,6 +4,7 @@ package org.chromium.chrome.browser.device_dialog; +import android.app.Activity; import android.app.Dialog; import android.graphics.drawable.Drawable; import android.text.SpannableString; @@ -115,15 +116,14 @@ SpannableString statusIdleNoneFound = new SpannableString("statusIdleNoneFound"); SpannableString statusIdleSomeFound = new SpannableString("statusIdleSomeFound"); String positiveButton = new String("positiveButton"); - final ItemChooserDialog.ItemChooserLabels labels = + ItemChooserDialog.ItemChooserLabels labels = new ItemChooserDialog.ItemChooserLabels(title, searching, noneFound, statusActive, statusIdleNoneFound, statusIdleSomeFound, positiveButton); - ItemChooserDialog dialog = TestThreadUtils.runOnUiThreadBlockingNoException(() -> { - ItemChooserDialog dialog1 = new ItemChooserDialog( - sActivityTestRule.getActivity(), ItemChooserDialogTest.this, labels); - return dialog1; + Activity activity = sActivityTestRule.getActivity(); + return TestThreadUtils.runOnUiThreadBlockingNoException(() -> { + return new ItemChooserDialog( + activity, activity.getWindow(), ItemChooserDialogTest.this, labels); }); - return dialog; } private void selectItem(Dialog dialog, int position, String expectedItemId,
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/signin/SigninCheckerTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/signin/SigninCheckerTest.java index 69b07bba..d1cc637 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/signin/SigninCheckerTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/signin/SigninCheckerTest.java
@@ -39,6 +39,7 @@ import org.chromium.components.signin.AccountRenameChecker; import org.chromium.components.signin.ChildAccountStatus; import org.chromium.components.signin.base.CoreAccountInfo; +import org.chromium.components.signin.identitymanager.ConsentLevel; import org.chromium.components.signin.test.util.FakeAccountManagerFacade; /** @@ -84,7 +85,6 @@ @Test @MediumTest - @FlakyTest(message = "https://crbug.com/1205346") public void signinWhenPrimaryAccountIsRenamedToAKnownAccount() { mActivityTestRule.startMainActivityOnBlankPage(); mAccountManagerTestRule.addAccountAndWaitForSeeding("the.second.account@gmail.com"); @@ -106,7 +106,6 @@ @Test @MediumTest - @FlakyTest(message = "https://crbug.com/1205346") public void signoutWhenPrimaryAccountIsRenamedToAnUnknownAccount() { mActivityTestRule.startMainActivityOnBlankPage(); mAccountManagerTestRule.addAccountAndWaitForSeeding("the.second.account@gmail.com"); @@ -147,6 +146,23 @@ @Test @MediumTest + public void signoutWhenPrimaryAccountWithoutSyncConsentIsRemoved() { + mActivityTestRule.startMainActivityOnBlankPage(); + mAccountManagerTestRule.addAccountAndWaitForSeeding("the.second.account@gmail.com"); + final CoreAccountInfo oldAccount = mAccountManagerTestRule.addTestAccountThenSignin(); + + mAccountManagerTestRule.removeAccountAndWaitForSeeding(oldAccount.getEmail()); + + CriteriaHelper.pollUiThread(() -> { + return IdentityServicesProvider.get() + .getIdentityManager(Profile.getLastUsedRegularProfile()) + .getPrimaryAccountInfo(ConsentLevel.SIGNIN) + == null; + }); + } + + @Test + @MediumTest public void signinWhenChildAccountIsTheOnlyAccount() { mActivityTestRule.startMainActivityOnBlankPage(); UserActionTester actionTester = new UserActionTester();
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/tab/state/PriceDropMetricsLoggerTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/tab/state/PriceDropMetricsLoggerTest.java new file mode 100644 index 0000000..f37585c --- /dev/null +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/tab/state/PriceDropMetricsLoggerTest.java
@@ -0,0 +1,151 @@ +// Copyright 2021 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +package org.chromium.chrome.browser.tab.state; + +import static org.mockito.Mockito.doReturn; + +import androidx.test.filters.SmallTest; + +import org.junit.Assert; +import org.junit.Before; +import org.junit.Rule; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; + +import org.chromium.base.metrics.RecordHistogram; +import org.chromium.base.test.BaseJUnit4ClassRunner; +import org.chromium.base.test.UiThreadTest; +import org.chromium.base.test.util.CommandLineFlags; +import org.chromium.chrome.browser.flags.ChromeSwitches; +import org.chromium.chrome.test.ChromeBrowserTestRule; + +import java.util.concurrent.TimeUnit; + +/** + * Test relating to {@link PriceDropsMetricsLogger} + */ +@RunWith(BaseJUnit4ClassRunner.class) +@CommandLineFlags. +Add({ChromeSwitches.DISABLE_FIRST_RUN_EXPERIENCE, "force-fieldtrials=Study/Group"}) +public class PriceDropMetricsLoggerTest { + @Rule + public final ChromeBrowserTestRule mBrowserTestRule = new ChromeBrowserTestRule(); + + @Mock + private ShoppingPersistedTabData mShoppingPersistedTabData; + + private PriceDropMetricsLogger mPriceDropMetricsLogger; + + @Before + public void setUp() { + MockitoAnnotations.initMocks(this); + doReturn("offer-id").when(mShoppingPersistedTabData).getMainOfferId(); + doReturn(true).when(mShoppingPersistedTabData).hasPriceMicros(); + doReturn(true).when(mShoppingPersistedTabData).hasPreviousPriceMicros(); + mPriceDropMetricsLogger = new PriceDropMetricsLogger(mShoppingPersistedTabData); + } + + @UiThreadTest + @SmallTest + @Test + public void testTabUsageStatus() { + Assert.assertEquals(PriceDropMetricsLogger.TabUsageStatus.ABANDONED, + PriceDropMetricsLogger.getTabUsageStatus(TimeUnit.DAYS.toMillis(100))); + Assert.assertEquals(PriceDropMetricsLogger.TabUsageStatus.ABANDONED, + PriceDropMetricsLogger.getTabUsageStatus(TimeUnit.DAYS.toMillis(90))); + Assert.assertEquals(PriceDropMetricsLogger.TabUsageStatus.STALE, + PriceDropMetricsLogger.getTabUsageStatus(TimeUnit.DAYS.toMillis(45))); + Assert.assertEquals(PriceDropMetricsLogger.TabUsageStatus.STALE, + PriceDropMetricsLogger.getTabUsageStatus(TimeUnit.DAYS.toMillis(1))); + Assert.assertEquals(PriceDropMetricsLogger.TabUsageStatus.ACTIVE, + PriceDropMetricsLogger.getTabUsageStatus(TimeUnit.HOURS.toMillis(12))); + } + + @UiThreadTest + @SmallTest + @Test + public void testMetricsStaleTabNavigation() { + mPriceDropMetricsLogger.logPriceDropMetrics( + "NavigationComplete", TimeUnit.DAYS.toMillis(45)); + Assert.assertEquals(1, + RecordHistogram.getHistogramTotalCountForTesting( + "Commerce.PriceDrops.StaleTabNavigationComplete.IsProductDetailPage")); + Assert.assertEquals(1, + RecordHistogram.getHistogramTotalCountForTesting( + "Commerce.PriceDrops.StaleTabNavigationComplete.ContainsPrice")); + Assert.assertEquals(1, + RecordHistogram.getHistogramTotalCountForTesting( + "Commerce.PriceDrops.StaleTabNavigationComplete.ContainsPriceDrop")); + } + + @UiThreadTest + @SmallTest + @Test + public void testMetrics2StaleTabEnterTabSwitcher() { + mPriceDropMetricsLogger.logPriceDropMetrics("EnterTabSwitcher", TimeUnit.DAYS.toMillis(45)); + Assert.assertEquals(1, + RecordHistogram.getHistogramTotalCountForTesting( + "Commerce.PriceDrops.StaleTabEnterTabSwitcher.IsProductDetailPage")); + Assert.assertEquals(1, + RecordHistogram.getHistogramTotalCountForTesting( + "Commerce.PriceDrops.StaleTabEnterTabSwitcher.ContainsPrice")); + Assert.assertEquals(1, + RecordHistogram.getHistogramTotalCountForTesting( + "Commerce.PriceDrops.StaleTabEnterTabSwitcher.ContainsPriceDrop")); + } + + @UiThreadTest + @SmallTest + @Test + public void testMetricsActiveTabNavigationComplete() { + mPriceDropMetricsLogger.logPriceDropMetrics( + "NavigationComplete", TimeUnit.HOURS.toMillis(12)); + Assert.assertEquals(1, + RecordHistogram.getHistogramTotalCountForTesting( + "Commerce.PriceDrops.ActiveTabNavigationComplete.IsProductDetailPage")); + Assert.assertEquals(1, + RecordHistogram.getHistogramTotalCountForTesting( + "Commerce.PriceDrops.ActiveTabNavigationComplete.ContainsPrice")); + Assert.assertEquals(1, + RecordHistogram.getHistogramTotalCountForTesting( + "Commerce.PriceDrops.ActiveTabNavigationComplete.ContainsPriceDrop")); + } + + @UiThreadTest + @SmallTest + @Test + public void testMetricsActiveTabEnterTabSwitcher() { + mPriceDropMetricsLogger.logPriceDropMetrics( + "EnterTabSwitcher", TimeUnit.HOURS.toMillis(12)); + Assert.assertEquals(1, + RecordHistogram.getHistogramTotalCountForTesting( + "Commerce.PriceDrops.ActiveTabEnterTabSwitcher.IsProductDetailPage")); + Assert.assertEquals(1, + RecordHistogram.getHistogramTotalCountForTesting( + "Commerce.PriceDrops.ActiveTabEnterTabSwitcher.ContainsPrice")); + Assert.assertEquals(1, + RecordHistogram.getHistogramTotalCountForTesting( + "Commerce.PriceDrops.ActiveTabEnterTabSwitcher.ContainsPriceDrop")); + } + + @UiThreadTest + @SmallTest + @Test + public void testMetricsPriceNoPriceDrop() { + mPriceDropMetricsLogger.logPriceDropMetrics( + "EnterTabSwitcher", TimeUnit.HOURS.toMillis(12)); + Assert.assertEquals(1, + RecordHistogram.getHistogramTotalCountForTesting( + "Commerce.PriceDrops.ActiveTabEnterTabSwitcher.IsProductDetailPage")); + Assert.assertEquals(1, + RecordHistogram.getHistogramTotalCountForTesting( + "Commerce.PriceDrops.ActiveTabEnterTabSwitcher.ContainsPrice")); + Assert.assertEquals(1, + RecordHistogram.getHistogramTotalCountForTesting( + "Commerce.PriceDrops.ActiveTabEnterTabSwitcher.ContainsPriceDrop")); + } +}
diff --git a/chrome/android/profiles/newest.txt b/chrome/android/profiles/newest.txt index afa67bd..2b2c676 100644 --- a/chrome/android/profiles/newest.txt +++ b/chrome/android/profiles/newest.txt
@@ -1 +1 @@ -chromeos-chrome-amd64-93.0.4577.21_rc-r1-merged.afdo.bz2 +chromeos-chrome-amd64-93.0.4577.22_rc-r1-merged.afdo.bz2
diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources.grd index 9609f01..59902b4 100644 --- a/chrome/app/generated_resources.grd +++ b/chrome/app/generated_resources.grd
@@ -5591,7 +5591,7 @@ <message name="IDS_UPLOAD_IMAGE_FORMAT" desc="The permitted upload image format for the custom background. (On the New Tab Page)"> *.jpeg, *.jpg, *.png </message> - <message name="IDS_NTP_CUSTOM_LINKS_NAME" desc="The title for custom link name input field on the edit shortcut dialog. (On the New Tab Page)"> + <message name="IDS_NTP_CUSTOM_LINKS_NAME" desc="The title for custom link name input field on the edit shortcut dialog. (On the New Tab Page)" meaning="Name of an inanimate object"> Name </message> <message name="IDS_NTP_CUSTOM_LINKS_URL" desc="The title for custom link URL input field on the edit shortcut dialog. (On the New Tab Page)"> @@ -8084,7 +8084,7 @@ <message name="IDS_COOKIES_REMOVE_LABEL" desc="The label of the 'Remove' button in the Cookies Window"> Remove </message> - <message name="IDS_COOKIES_COOKIE_NAME_LABEL" desc="The Cookie Name label"> + <message name="IDS_COOKIES_COOKIE_NAME_LABEL" desc="The Cookie Name label" meaning="Name of an inanimate object"> Name </message> <message name="IDS_COOKIES_COOKIE_CONTENT_LABEL" desc="The Cookie Content label"> @@ -8638,7 +8638,7 @@ <message name="IDS_DIRECTORY_LISTING_PARENT" desc="When viewing a local directory, this is the text for a link to the parent directory."> [parent directory] </message> - <message name="IDS_DIRECTORY_LISTING_NAME" desc="When viewing a local directory, this is the text for the column above the filenames."> + <message name="IDS_DIRECTORY_LISTING_NAME" desc="When viewing a local directory, this is the text for the column above the filenames." meaning="Name of an inanimate object"> Name </message> <message name="IDS_DIRECTORY_LISTING_SIZE" desc="When viewing a local directory, this is the text for the column above the file sizes.">
diff --git a/chrome/app/generated_resources_grd/IDS_COOKIES_COOKIE_NAME_LABEL.png.sha1 b/chrome/app/generated_resources_grd/IDS_COOKIES_COOKIE_NAME_LABEL.png.sha1 new file mode 100644 index 0000000..40d68cb9 --- /dev/null +++ b/chrome/app/generated_resources_grd/IDS_COOKIES_COOKIE_NAME_LABEL.png.sha1
@@ -0,0 +1 @@ +c76bf36135280ea6b20a93452448853becf8a2b9 \ No newline at end of file
diff --git a/chrome/app/generated_resources_grd/IDS_DIRECTORY_LISTING_NAME.png.sha1 b/chrome/app/generated_resources_grd/IDS_DIRECTORY_LISTING_NAME.png.sha1 new file mode 100644 index 0000000..8eb31a63 --- /dev/null +++ b/chrome/app/generated_resources_grd/IDS_DIRECTORY_LISTING_NAME.png.sha1
@@ -0,0 +1 @@ +23f3e07748aac139619e88f567748a58473efd80 \ No newline at end of file
diff --git a/chrome/app/settings_strings_grdp/IDS_SETTINGS_COOKIES_COOKIE_NAME_LABEL.png.sha1 b/chrome/app/settings_strings_grdp/IDS_SETTINGS_COOKIES_COOKIE_NAME_LABEL.png.sha1 index 40d68cb9..4703fb29 100644 --- a/chrome/app/settings_strings_grdp/IDS_SETTINGS_COOKIES_COOKIE_NAME_LABEL.png.sha1 +++ b/chrome/app/settings_strings_grdp/IDS_SETTINGS_COOKIES_COOKIE_NAME_LABEL.png.sha1
@@ -1 +1 @@ -c76bf36135280ea6b20a93452448853becf8a2b9 \ No newline at end of file +72c135a78f1f47fd8c2f9207421b8b63800aa580 \ No newline at end of file
diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn index ad2b45b..8369636 100644 --- a/chrome/browser/BUILD.gn +++ b/chrome/browser/BUILD.gn
@@ -382,6 +382,7 @@ "data_use_measurement/chrome_data_use_measurement.h", "defaults.cc", "defaults.h", + "device_reauth/chrome_biometric_authenticator.h", "display_capture/display_capture_permission_context.cc", "display_capture/display_capture_permission_context.h", "dom_distiller/dom_distiller_service_factory.cc", @@ -1022,7 +1023,6 @@ "password_manager/affiliation_service_factory.h", "password_manager/bulk_leak_check_service_factory.cc", "password_manager/bulk_leak_check_service_factory.h", - "password_manager/chrome_biometric_authenticator.h", "password_manager/chrome_password_manager_client.cc", "password_manager/chrome_password_manager_client.h", "password_manager/credentials_cleaner_runner_factory.cc", @@ -2019,6 +2019,7 @@ "//components/data_reduction_proxy/core/browser", "//components/data_use_measurement/core:ascriber", "//components/device_event_log", + "//components/device_reauth", "//components/digital_asset_links", "//components/dom_distiller/content/browser", "//components/dom_distiller/content/common/mojom", @@ -2969,6 +2970,11 @@ "data_reduction_proxy/data_reduction_promo_infobar_delegate_android.h", "data_reduction_proxy/data_reduction_proxy_settings_android.cc", "data_reduction_proxy/data_reduction_proxy_settings_android.h", + "device_reauth/android/biometric_authenticator_android.cc", + "device_reauth/android/biometric_authenticator_android.h", + "device_reauth/android/biometric_authenticator_bridge.h", + "device_reauth/android/biometric_authenticator_bridge_impl.cc", + "device_reauth/android/biometric_authenticator_bridge_impl.h", "dom_distiller/dom_distiller_service_factory_android.cc", "dom_distiller/dom_distiller_service_factory_android.h", "dom_distiller/tab_utils_android.cc", @@ -3088,11 +3094,6 @@ "password_manager/android/auto_signin_first_run_dialog_android.h", "password_manager/android/auto_signin_prompt_controller.cc", "password_manager/android/auto_signin_prompt_controller.h", - "password_manager/android/biometric_authenticator_android.cc", - "password_manager/android/biometric_authenticator_android.h", - "password_manager/android/biometric_authenticator_bridge.h", - "password_manager/android/biometric_authenticator_bridge_impl.cc", - "password_manager/android/biometric_authenticator_bridge_impl.h", "password_manager/android/credential_android.cc", "password_manager/android/credential_android.h", "password_manager/android/credential_leak_controller_android.cc", @@ -3253,6 +3254,7 @@ "//chrome/browser/content_creation/notes/internal/android:jni_headers", "//chrome/browser/continuous_search:jni_headers", "//chrome/browser/continuous_search/internal", + "//chrome/browser/device_reauth/android:jni_headers", "//chrome/browser/download/internal/android", "//chrome/browser/endpoint_fetcher:jni_headers", "//chrome/browser/feed/android:jni_headers", @@ -3313,6 +3315,7 @@ "//components/content_creation/notes/core/templates", "//components/content_settings/android", "//components/crash/android:crash_android", + "//components/device_reauth", "//components/embedder_support/android:browser_context", "//components/embedder_support/android:context_menu", "//components/embedder_support/android:simple_factory_key", @@ -6448,40 +6451,6 @@ "local_discovery/service_discovery_shared_client.cc", "local_discovery/service_discovery_shared_client.h", ] - if (enable_basic_printing) { - sources += [ - "printing/cloud_print/cloud_print_printer_list.cc", - "printing/cloud_print/cloud_print_printer_list.h", - "printing/cloud_print/device_description.cc", - "printing/cloud_print/device_description.h", - "printing/cloud_print/gcd_api_flow.cc", - "printing/cloud_print/gcd_api_flow.h", - "printing/cloud_print/gcd_api_flow_impl.cc", - "printing/cloud_print/gcd_api_flow_impl.h", - "printing/cloud_print/gcd_constants.cc", - "printing/cloud_print/gcd_constants.h", - "printing/cloud_print/privet_confirm_api_flow.cc", - "printing/cloud_print/privet_confirm_api_flow.h", - "printing/cloud_print/privet_constants.cc", - "printing/cloud_print/privet_constants.h", - "printing/cloud_print/privet_device_lister.cc", - "printing/cloud_print/privet_device_lister.h", - "printing/cloud_print/privet_device_lister_impl.cc", - "printing/cloud_print/privet_device_lister_impl.h", - "printing/cloud_print/privet_http.cc", - "printing/cloud_print/privet_http.h", - "printing/cloud_print/privet_http_asynchronous_factory.cc", - "printing/cloud_print/privet_http_asynchronous_factory.h", - "printing/cloud_print/privet_http_asynchronous_factory_impl.cc", - "printing/cloud_print/privet_http_asynchronous_factory_impl.h", - "printing/cloud_print/privet_http_impl.cc", - "printing/cloud_print/privet_http_impl.h", - "printing/cloud_print/privet_local_printer_lister.cc", - "printing/cloud_print/privet_local_printer_lister.h", - "printing/cloud_print/privet_url_loader.cc", - "printing/cloud_print/privet_url_loader.h", - ] - } if (enable_mdns) { sources += [ @@ -6490,12 +6459,6 @@ "local_discovery/service_discovery_client_mdns.cc", "local_discovery/service_discovery_client_mdns.h", ] - if (enable_basic_printing) { - sources += [ - "printing/cloud_print/privet_traffic_detector.cc", - "printing/cloud_print/privet_traffic_detector.h", - ] - } } } @@ -7286,8 +7249,6 @@ if (enable_extensions) { sources += [ - "extensions/api/messaging/native_messaging_test_util.cc", - "extensions/api/messaging/native_messaging_test_util.h", "extensions/chrome_extension_test_notification_observer.cc", "extensions/chrome_extension_test_notification_observer.h", "extensions/chrome_test_extension_loader.cc", @@ -7324,6 +7285,13 @@ "//google_apis:test_support", "//services/data_decoder/public/cpp:test_support", ] + if (!is_fuchsia) { + # Native Messaging is not available under Fuchsia. + sources += [ + "extensions/api/messaging/native_messaging_test_util.cc", + "extensions/api/messaging/native_messaging_test_util.h", + ] + } if (is_chromeos_ash) { deps += [ "//chrome/browser/chromeos" ] }
diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc index e45df1e..dbf5814 100644 --- a/chrome/browser/about_flags.cc +++ b/chrome/browser/about_flags.cc
@@ -3338,6 +3338,12 @@ {"username-first-flow", flag_descriptions::kUsernameFirstFlowName, flag_descriptions::kUsernameFirstFlowDescription, kOsAll, FEATURE_VALUE_TYPE(password_manager::features::kUsernameFirstFlow)}, + {"username-first-flow-fallback-crowdsourcing", + flag_descriptions::kUsernameFirstFlowFallbackCrowdsourcingName, + flag_descriptions::kUsernameFirstFlowFallbackCrowdsourcingDescription, + kOsAll, + FEATURE_VALUE_TYPE( + password_manager::features::kUsernameFirstFlowFallbackCrowdsourcing)}, {"username-first-flow-filling", flag_descriptions::kUsernameFirstFlowFillingName, flag_descriptions::kUsernameFirstFlowFillingDescription, kOsAll,
diff --git a/chrome/browser/accessibility/accessibility_extension_api_chromeos.cc b/chrome/browser/accessibility/accessibility_extension_api_chromeos.cc index 3f97a74..0769a71 100644 --- a/chrome/browser/accessibility/accessibility_extension_api_chromeos.cc +++ b/chrome/browser/accessibility/accessibility_extension_api_chromeos.cc
@@ -460,6 +460,21 @@ } ExtensionFunction::ResponseAction +AccessibilityPrivateMagnifierCenterOnPointFunction::Run() { + std::unique_ptr<accessibility_private::MagnifierCenterOnPoint::Params> + params = + accessibility_private::MagnifierCenterOnPoint::Params::Create(*args_); + EXTENSION_FUNCTION_VALIDATE(params); + gfx::Point point_in_screen(params->point.x, params->point.y); + + auto* magnification_manager = ash::MagnificationManager::Get(); + DCHECK(magnification_manager); + magnification_manager->HandleMagnifierCenterOnPointIfEnabled(point_in_screen); + + return RespondNow(NoArguments()); +} + +ExtensionFunction::ResponseAction AccessibilityPrivateToggleDictationFunction::Run() { ash::DictationToggleSource source = ash::DictationToggleSource::kChromevox; if (extension()->id() == extension_misc::kSwitchAccessExtensionId)
diff --git a/chrome/browser/accessibility/accessibility_extension_api_chromeos.h b/chrome/browser/accessibility/accessibility_extension_api_chromeos.h index cc1426e..c6825a2 100644 --- a/chrome/browser/accessibility/accessibility_extension_api_chromeos.h +++ b/chrome/browser/accessibility/accessibility_extension_api_chromeos.h
@@ -127,6 +127,16 @@ ACCESSIBILITY_PRIVATE_MOVEMAGNIFIERTORECT) }; +// API function that is called by the Accessibility Common extension to center +// the magnifier viewport on a passed-in point. +class AccessibilityPrivateMagnifierCenterOnPointFunction + : public ExtensionFunction { + ~AccessibilityPrivateMagnifierCenterOnPointFunction() override {} + ResponseAction Run() override; + DECLARE_EXTENSION_FUNCTION("accessibilityPrivate.magnifierCenterOnPoint", + ACCESSIBILITY_PRIVATE_MAGNIFIERCENTERONPOINT) +}; + // API function that is called when a user toggles Dictation from another // acessibility feature. class AccessibilityPrivateToggleDictationFunction : public ExtensionFunction {
diff --git a/chrome/browser/android/metrics/OWNERS b/chrome/browser/android/metrics/OWNERS index b9e8da9..4793d7d 100644 --- a/chrome/browser/android/metrics/OWNERS +++ b/chrome/browser/android/metrics/OWNERS
@@ -1 +1,3 @@ asvitkine@chromium.org + +per-file android_session_durations_service.*=rhalavati@chromium.org
diff --git a/chrome/browser/android/search_permissions/search_permissions_service.cc b/chrome/browser/android/search_permissions/search_permissions_service.cc index 636b770..cf0f4ee7c 100644 --- a/chrome/browser/android/search_permissions/search_permissions_service.cc +++ b/chrome/browser/android/search_permissions/search_permissions_service.cc
@@ -197,10 +197,17 @@ void SearchPermissionsService::ResetDSEPermission(ContentSettingsType type) { url::Origin dse_origin = delegate_->GetDSEOrigin(); GURL dse_url = dse_origin.GetURL(); - DCHECK(dse_url.is_empty() || IsPermissionControlledByDSE(type, dse_origin)); + bool auto_grant_enabled = !base::FeatureList::IsEnabled( + permissions::features::kRevertDSEAutomaticPermissions); - if (!dse_url.is_empty()) - SetContentSetting(dse_url, type, CONTENT_SETTING_ALLOW); + DCHECK(dse_url.is_empty() || IsPermissionControlledByDSE(type, dse_origin) || + !auto_grant_enabled); + + if (!dse_url.is_empty()) { + SetContentSetting( + dse_url, type, + auto_grant_enabled ? CONTENT_SETTING_ALLOW : CONTENT_SETTING_DEFAULT); + } } void SearchPermissionsService::ResetDSEPermissions() {
diff --git a/chrome/browser/android/search_permissions/search_permissions_service_unittest.cc b/chrome/browser/android/search_permissions/search_permissions_service_unittest.cc index 559e6741..366b6b88 100644 --- a/chrome/browser/android/search_permissions/search_permissions_service_unittest.cc +++ b/chrome/browser/android/search_permissions/search_permissions_service_unittest.cc
@@ -653,6 +653,22 @@ GetContentSetting(kGoogleAusURL, ContentSettingsType::NOTIFICATIONS)); EXPECT_EQ(CONTENT_SETTING_BLOCK, GetContentSetting(kGoogleURL, ContentSettingsType::GEOLOCATION)); + + // After enabling `kRevertDSEAutomaticPermissions` ResetDSEPermissions reverts + // it to ASK. + base::test::ScopedFeatureList features( + permissions::features::kRevertDSEAutomaticPermissions); + SetContentSetting(kGoogleAusURL, ContentSettingsType::GEOLOCATION, + CONTENT_SETTING_BLOCK); + SetContentSetting(kGoogleAusURL, ContentSettingsType::NOTIFICATIONS, + CONTENT_SETTING_BLOCK); + + GetService()->ResetDSEPermissions(); + EXPECT_EQ(CONTENT_SETTING_ASK, + GetContentSetting(kGoogleAusURL, ContentSettingsType::GEOLOCATION)); + EXPECT_EQ( + CONTENT_SETTING_ASK, + GetContentSetting(kGoogleAusURL, ContentSettingsType::NOTIFICATIONS)); } // Setting the `RevertDSEAutomaticPermissions` feature disables DSE permissions.
diff --git a/chrome/browser/ash/accessibility/magnification_manager.cc b/chrome/browser/ash/accessibility/magnification_manager.cc index f4f6332..35cc9ca 100644 --- a/chrome/browser/ash/accessibility/magnification_manager.cc +++ b/chrome/browser/ash/accessibility/magnification_manager.cc
@@ -109,8 +109,20 @@ rect); return; } - if (IsDockedMagnifierEnabled()) { + if (IsDockedMagnifierEnabled()) Shell::Get()->docked_magnifier_controller()->MoveMagnifierToRect(rect); +} + +void MagnificationManager::HandleMagnifierCenterOnPointIfEnabled( + const gfx::Point& point_in_screen) { + // Fullscreen magnifier and docked magnifier are mutually exclusive. + if (fullscreen_magnifier_enabled_) { + Shell::Get()->fullscreen_magnifier_controller()->CenterOnPoint( + point_in_screen); + return; + } + if (IsDockedMagnifierEnabled()) { + Shell::Get()->docked_magnifier_controller()->CenterOnPoint(point_in_screen); } }
diff --git a/chrome/browser/ash/accessibility/magnification_manager.h b/chrome/browser/ash/accessibility/magnification_manager.h index 46fa944a..0700b54 100644 --- a/chrome/browser/ash/accessibility/magnification_manager.h +++ b/chrome/browser/ash/accessibility/magnification_manager.h
@@ -67,6 +67,9 @@ // Move magnifier to ensure rect is within viewport if a magnifier is enabled. void HandleMoveMagnifierToRectIfEnabled(const gfx::Rect& rect); + // Move magnified region to center on point if a magnifier is enabled. + void HandleMagnifierCenterOnPointIfEnabled(const gfx::Point& point_in_screen); + // ProfileObserver: void OnProfileWillBeDestroyed(Profile* profile) override;
diff --git a/chrome/browser/ash/policy/core/device_cloud_policy_manager_ash.cc b/chrome/browser/ash/policy/core/device_cloud_policy_manager_ash.cc index 9405b9a..45d3e0a 100644 --- a/chrome/browser/ash/policy/core/device_cloud_policy_manager_ash.cc +++ b/chrome/browser/ash/policy/core/device_cloud_policy_manager_ash.cc
@@ -29,7 +29,7 @@ #include "chrome/browser/ash/login/reporting/login_logout_reporter.h" #include "chrome/browser/ash/policy/core/device_cloud_policy_store_ash.h" #include "chrome/browser/ash/policy/core/policy_pref_names.h" -#include "chrome/browser/ash/policy/remote_commands/device_commands_factory_chromeos.h" +#include "chrome/browser/ash/policy/remote_commands/device_commands_factory_ash.h" #include "chrome/browser/ash/policy/rsu/lookup_key_uploader.h" #include "chrome/browser/ash/policy/server_backed_state/server_backed_state_keys_broker.h" #include "chrome/browser/ash/policy/status_collector/device_status_collector.h" @@ -224,7 +224,7 @@ // Start remote commands services now that we have setup everything they need. core()->StartRemoteCommandsService( - std::make_unique<DeviceCommandsFactoryChromeOS>(this), + std::make_unique<DeviceCommandsFactoryAsh>(this), PolicyInvalidationScope::kDevice); // Enable device reporting and status monitoring for cloud managed devices. We
diff --git a/chrome/browser/ash/policy/core/user_cloud_policy_manager_ash.cc b/chrome/browser/ash/policy/core/user_cloud_policy_manager_ash.cc index 15fc6e3..b7513e5 100644 --- a/chrome/browser/ash/policy/core/user_cloud_policy_manager_ash.cc +++ b/chrome/browser/ash/policy/core/user_cloud_policy_manager_ash.cc
@@ -28,7 +28,7 @@ #include "chrome/browser/ash/login/users/chrome_user_manager_impl.h" #include "chrome/browser/ash/policy/core/policy_oauth2_token_fetcher.h" #include "chrome/browser/ash/policy/login/wildcard_login_checker.h" -#include "chrome/browser/ash/policy/remote_commands/user_commands_factory_chromeos.h" +#include "chrome/browser/ash/policy/remote_commands/user_commands_factory_ash.h" #include "chrome/browser/ash/policy/reporting/arc_app_install_event_log_uploader.h" #include "chrome/browser/ash/policy/reporting/extension_install_event_log_uploader.h" #include "chrome/browser/browser_process.h" @@ -808,7 +808,7 @@ return; core()->StartRemoteCommandsService( - std::make_unique<UserCommandsFactoryChromeOS>(profile_), + std::make_unique<UserCommandsFactoryAsh>(profile_), PolicyInvalidationScope::kUser); invalidator_ = std::make_unique<RemoteCommandsInvalidatorImpl>( core(), base::DefaultClock::GetInstance(),
diff --git a/chrome/browser/ash/policy/remote_commands/device_command_remote_powerwash_job_unittest.cc b/chrome/browser/ash/policy/remote_commands/device_command_remote_powerwash_job_unittest.cc index b2cc956..3538b07 100644 --- a/chrome/browser/ash/policy/remote_commands/device_command_remote_powerwash_job_unittest.cc +++ b/chrome/browser/ash/policy/remote_commands/device_command_remote_powerwash_job_unittest.cc
@@ -14,7 +14,7 @@ #include "base/test/test_mock_time_task_runner.h" #include "base/threading/sequenced_task_runner_handle.h" #include "base/time/time.h" -#include "chrome/browser/ash/policy/remote_commands/device_commands_factory_chromeos.h" +#include "chrome/browser/ash/policy/remote_commands/device_commands_factory_ash.h" #include "chromeos/dbus/session_manager/fake_session_manager_client.h" #include "chromeos/dbus/session_manager/session_manager_client.h" #include "components/policy/core/common/cloud/mock_cloud_policy_client.h" @@ -33,7 +33,7 @@ class TestingRemoteCommandsService : public RemoteCommandsService { public: explicit TestingRemoteCommandsService(MockCloudPolicyClient* client) - : RemoteCommandsService(std::make_unique<DeviceCommandsFactoryChromeOS>( + : RemoteCommandsService(std::make_unique<DeviceCommandsFactoryAsh>( /*policy_manager=*/nullptr), client, /*store=*/nullptr,
diff --git a/chrome/browser/ash/policy/remote_commands/device_command_start_crd_session_job.h b/chrome/browser/ash/policy/remote_commands/device_command_start_crd_session_job.h index da5b576..ded52cc 100644 --- a/chrome/browser/ash/policy/remote_commands/device_command_start_crd_session_job.h +++ b/chrome/browser/ash/policy/remote_commands/device_command_start_crd_session_job.h
@@ -152,7 +152,7 @@ absl::optional<std::string> oauth_token_for_test_; // The Delegate is used to interact with chrome services and CRD host. - // Owned by DeviceCommandsFactoryChromeOS. + // Owned by DeviceCommandsFactoryAsh. Delegate* delegate_; bool terminate_session_attempted_ = false;
diff --git a/chrome/browser/ash/policy/remote_commands/device_command_wipe_users_job_unittest.cc b/chrome/browser/ash/policy/remote_commands/device_command_wipe_users_job_unittest.cc index e7d84ff..b801e9b9 100644 --- a/chrome/browser/ash/policy/remote_commands/device_command_wipe_users_job_unittest.cc +++ b/chrome/browser/ash/policy/remote_commands/device_command_wipe_users_job_unittest.cc
@@ -16,7 +16,7 @@ #include "base/task_runner.h" #include "base/threading/sequenced_task_runner_handle.h" #include "base/time/time.h" -#include "chrome/browser/ash/policy/remote_commands/device_commands_factory_chromeos.h" +#include "chrome/browser/ash/policy/remote_commands/device_commands_factory_ash.h" #include "chrome/browser/ash/system/user_removal_manager.h" #include "chrome/browser/browser_process.h" #include "chrome/common/pref_names.h" @@ -39,7 +39,7 @@ class TestingRemoteCommandsService : public RemoteCommandsService { public: explicit TestingRemoteCommandsService(MockCloudPolicyClient* client) - : RemoteCommandsService(std::make_unique<DeviceCommandsFactoryChromeOS>( + : RemoteCommandsService(std::make_unique<DeviceCommandsFactoryAsh>( /*policy_manager=*/nullptr), client, /*store=*/nullptr,
diff --git a/chrome/browser/ash/policy/remote_commands/device_commands_factory_chromeos.cc b/chrome/browser/ash/policy/remote_commands/device_commands_factory_ash.cc similarity index 89% rename from chrome/browser/ash/policy/remote_commands/device_commands_factory_chromeos.cc rename to chrome/browser/ash/policy/remote_commands/device_commands_factory_ash.cc index 74c9af4..27424d1 100644 --- a/chrome/browser/ash/policy/remote_commands/device_commands_factory_chromeos.cc +++ b/chrome/browser/ash/policy/remote_commands/device_commands_factory_ash.cc
@@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "chrome/browser/ash/policy/remote_commands/device_commands_factory_chromeos.h" +#include "chrome/browser/ash/policy/remote_commands/device_commands_factory_ash.h" #include "base/notreached.h" #include "chrome/browser/ash/policy/core/device_cloud_policy_manager_ash.h" @@ -27,15 +27,15 @@ namespace policy { -DeviceCommandsFactoryChromeOS::DeviceCommandsFactoryChromeOS( +DeviceCommandsFactoryAsh::DeviceCommandsFactoryAsh( DeviceCloudPolicyManagerAsh* policy_manager) : policy_manager_(policy_manager) {} -DeviceCommandsFactoryChromeOS::~DeviceCommandsFactoryChromeOS() = default; +DeviceCommandsFactoryAsh::~DeviceCommandsFactoryAsh() = default; -std::unique_ptr<RemoteCommandJob> -DeviceCommandsFactoryChromeOS::BuildJobForType(em::RemoteCommand_Type type, - RemoteCommandsService* service) { +std::unique_ptr<RemoteCommandJob> DeviceCommandsFactoryAsh::BuildJobForType( + em::RemoteCommand_Type type, + RemoteCommandsService* service) { switch (type) { case em::RemoteCommand_Type_DEVICE_REBOOT: return std::make_unique<DeviceCommandRebootJob>( @@ -64,14 +64,14 @@ case em::RemoteCommand_Type_DEVICE_GET_DIAGNOSTIC_ROUTINE_UPDATE: return std::make_unique<DeviceCommandGetRoutineUpdateJob>(); default: - // Other types of commands should be sent to UserCommandsFactoryChromeOS + // Other types of commands should be sent to UserCommandsFactoryAsh // instead of here. NOTREACHED(); return nullptr; } } -CRDHostDelegate* DeviceCommandsFactoryChromeOS::GetCRDHostDelegate() { +CRDHostDelegate* DeviceCommandsFactoryAsh::GetCRDHostDelegate() { if (!crd_host_delegate_) { crd_host_delegate_ = std::make_unique<CRDHostDelegate>(); }
diff --git a/chrome/browser/ash/policy/remote_commands/device_commands_factory_chromeos.h b/chrome/browser/ash/policy/remote_commands/device_commands_factory_ash.h similarity index 77% rename from chrome/browser/ash/policy/remote_commands/device_commands_factory_chromeos.h rename to chrome/browser/ash/policy/remote_commands/device_commands_factory_ash.h index a9279fb..bd2ec93 100644 --- a/chrome/browser/ash/policy/remote_commands/device_commands_factory_chromeos.h +++ b/chrome/browser/ash/policy/remote_commands/device_commands_factory_ash.h
@@ -2,8 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef CHROME_BROWSER_ASH_POLICY_REMOTE_COMMANDS_DEVICE_COMMANDS_FACTORY_CHROMEOS_H_ -#define CHROME_BROWSER_ASH_POLICY_REMOTE_COMMANDS_DEVICE_COMMANDS_FACTORY_CHROMEOS_H_ +#ifndef CHROME_BROWSER_ASH_POLICY_REMOTE_COMMANDS_DEVICE_COMMANDS_FACTORY_ASH_H_ +#define CHROME_BROWSER_ASH_POLICY_REMOTE_COMMANDS_DEVICE_COMMANDS_FACTORY_ASH_H_ #include <memory> @@ -15,11 +15,11 @@ class CRDHostDelegate; class DeviceCloudPolicyManagerAsh; -class DeviceCommandsFactoryChromeOS : public RemoteCommandsFactory { +class DeviceCommandsFactoryAsh : public RemoteCommandsFactory { public: - explicit DeviceCommandsFactoryChromeOS( + explicit DeviceCommandsFactoryAsh( DeviceCloudPolicyManagerAsh* policy_manager); - ~DeviceCommandsFactoryChromeOS() override; + ~DeviceCommandsFactoryAsh() override; // RemoteCommandsFactory: std::unique_ptr<RemoteCommandJob> BuildJobForType( @@ -32,9 +32,9 @@ CRDHostDelegate* GetCRDHostDelegate(); - DISALLOW_COPY_AND_ASSIGN(DeviceCommandsFactoryChromeOS); + DISALLOW_COPY_AND_ASSIGN(DeviceCommandsFactoryAsh); }; } // namespace policy -#endif // CHROME_BROWSER_ASH_POLICY_REMOTE_COMMANDS_DEVICE_COMMANDS_FACTORY_CHROMEOS_H_ +#endif // CHROME_BROWSER_ASH_POLICY_REMOTE_COMMANDS_DEVICE_COMMANDS_FACTORY_ASH_H_
diff --git a/chrome/browser/ash/policy/remote_commands/user_commands_factory_chromeos.cc b/chrome/browser/ash/policy/remote_commands/user_commands_factory_ash.cc similarity index 77% rename from chrome/browser/ash/policy/remote_commands/user_commands_factory_chromeos.cc rename to chrome/browser/ash/policy/remote_commands/user_commands_factory_ash.cc index c3abd788..8c3a1aa 100644 --- a/chrome/browser/ash/policy/remote_commands/user_commands_factory_chromeos.cc +++ b/chrome/browser/ash/policy/remote_commands/user_commands_factory_ash.cc
@@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "chrome/browser/ash/policy/remote_commands/user_commands_factory_chromeos.h" +#include "chrome/browser/ash/policy/remote_commands/user_commands_factory_ash.h" #include "base/notreached.h" #include "chrome/browser/ash/policy/remote_commands/user_command_arc_job.h" @@ -13,19 +13,19 @@ namespace policy { -UserCommandsFactoryChromeOS::UserCommandsFactoryChromeOS(Profile* profile) +UserCommandsFactoryAsh::UserCommandsFactoryAsh(Profile* profile) : profile_(profile) {} -UserCommandsFactoryChromeOS::~UserCommandsFactoryChromeOS() = default; +UserCommandsFactoryAsh::~UserCommandsFactoryAsh() = default; -std::unique_ptr<RemoteCommandJob> UserCommandsFactoryChromeOS::BuildJobForType( +std::unique_ptr<RemoteCommandJob> UserCommandsFactoryAsh::BuildJobForType( em::RemoteCommand_Type type, RemoteCommandsService* service) { switch (type) { case em::RemoteCommand_Type_USER_ARC_COMMAND: return std::make_unique<UserCommandArcJob>(profile_); default: - // Other types of commands should be sent to DeviceCommandsFactoryChromeOS + // Other types of commands should be sent to DeviceCommandsFactoryAsh // instead of here. NOTREACHED(); return nullptr;
diff --git a/chrome/browser/ash/policy/remote_commands/user_commands_factory_chromeos.h b/chrome/browser/ash/policy/remote_commands/user_commands_factory_ash.h similarity index 72% rename from chrome/browser/ash/policy/remote_commands/user_commands_factory_chromeos.h rename to chrome/browser/ash/policy/remote_commands/user_commands_factory_ash.h index 67d16a0..3c79959 100644 --- a/chrome/browser/ash/policy/remote_commands/user_commands_factory_chromeos.h +++ b/chrome/browser/ash/policy/remote_commands/user_commands_factory_ash.h
@@ -2,8 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef CHROME_BROWSER_ASH_POLICY_REMOTE_COMMANDS_USER_COMMANDS_FACTORY_CHROMEOS_H_ -#define CHROME_BROWSER_ASH_POLICY_REMOTE_COMMANDS_USER_COMMANDS_FACTORY_CHROMEOS_H_ +#ifndef CHROME_BROWSER_ASH_POLICY_REMOTE_COMMANDS_USER_COMMANDS_FACTORY_ASH_H_ +#define CHROME_BROWSER_ASH_POLICY_REMOTE_COMMANDS_USER_COMMANDS_FACTORY_ASH_H_ #include <memory> @@ -14,10 +14,10 @@ namespace policy { -class UserCommandsFactoryChromeOS : public RemoteCommandsFactory { +class UserCommandsFactoryAsh : public RemoteCommandsFactory { public: - explicit UserCommandsFactoryChromeOS(Profile* profile); - ~UserCommandsFactoryChromeOS() override; + explicit UserCommandsFactoryAsh(Profile* profile); + ~UserCommandsFactoryAsh() override; // RemoteCommandsFactory: std::unique_ptr<RemoteCommandJob> BuildJobForType( @@ -27,9 +27,9 @@ private: Profile* const profile_; - DISALLOW_COPY_AND_ASSIGN(UserCommandsFactoryChromeOS); + DISALLOW_COPY_AND_ASSIGN(UserCommandsFactoryAsh); }; } // namespace policy -#endif // CHROME_BROWSER_ASH_POLICY_REMOTE_COMMANDS_USER_COMMANDS_FACTORY_CHROMEOS_H_ +#endif // CHROME_BROWSER_ASH_POLICY_REMOTE_COMMANDS_USER_COMMANDS_FACTORY_ASH_H_
diff --git a/chrome/browser/autofill/autofill_captured_sites_interactive_uitest.cc b/chrome/browser/autofill/autofill_captured_sites_interactive_uitest.cc index 7518deb..919a4d7 100644 --- a/chrome/browser/autofill/autofill_captured_sites_interactive_uitest.cc +++ b/chrome/browser/autofill/autofill_captured_sites_interactive_uitest.cc
@@ -241,7 +241,8 @@ // elements in a form to determine if the form is ready for interaction. feature_list_.InitWithFeatures( /*enabled_features=*/{features::kAutofillAcrossIframes, - features::kAutofillShowTypePredictions}, + features::kAutofillShowTypePredictions, + features::kAutofillUseNewFormExtraction}, /*disabled_features=*/{}); command_line->AppendSwitchASCII( variations::switches::kVariationsOverrideCountry, "us"); @@ -259,9 +260,9 @@ return recipe_replayer_.get(); } - const CreditCard credit_card() { return card_; } + const CreditCard& credit_card() { return card_; } - const AutofillProfile profile() { return profile_; } + const AutofillProfile& profile() { return profile_; } private: bool ShowAutofillSuggestion(const std::string& target_element_xpath,
diff --git a/chrome/browser/browsing_data/chrome_browsing_data_remover_delegate_unittest.cc b/chrome/browser/browsing_data/chrome_browsing_data_remover_delegate_unittest.cc index 0945a06..be44fe6 100644 --- a/chrome/browser/browsing_data/chrome_browsing_data_remover_delegate_unittest.cc +++ b/chrome/browser/browsing_data/chrome_browsing_data_remover_delegate_unittest.cc
@@ -99,10 +99,11 @@ #include "components/os_crypt/os_crypt_mocker.h" #include "components/password_manager/core/browser/mock_field_info_store.h" #include "components/password_manager/core/browser/mock_password_store.h" -#include "components/password_manager/core/browser/mock_password_sync_metadata_store.h" +#include "components/password_manager/core/browser/mock_password_store_interface.h" #include "components/password_manager/core/browser/mock_smart_bubble_stats_store.h" #include "components/password_manager/core/browser/password_manager_test_utils.h" #include "components/password_manager/core/browser/password_store_consumer.h" +#include "components/password_manager/core/browser/password_store_interface.h" #include "components/password_manager/core/common/password_manager_features.h" #include "components/permissions/features.h" #include "components/permissions/permission_decision_auto_blocker.h" @@ -537,13 +538,14 @@ PasswordStoreFactory::GetInstance()->SetTestingFactory( testing_profile, base::BindRepeating( - &password_manager::BuildPasswordStore< + &password_manager::BuildPasswordStoreInterface< content::BrowserContext, - testing::NiceMock<password_manager::MockPasswordStore>>)); + testing::NiceMock< + password_manager::MockPasswordStoreInterface>>)); - profile_store_ = static_cast<password_manager::MockPasswordStore*>( - PasswordStoreFactory::GetForProfile(testing_profile, - ServiceAccessType::EXPLICIT_ACCESS) + profile_store_ = static_cast<password_manager::MockPasswordStoreInterface*>( + PasswordStoreFactory::GetInterfaceForProfile( + testing_profile, ServiceAccessType::EXPLICIT_ACCESS) .get()); if (base::FeatureList::IsEnabled( @@ -551,14 +553,16 @@ AccountPasswordStoreFactory::GetInstance()->SetTestingFactory( testing_profile, base::BindRepeating( - &password_manager::BuildPasswordStore< + &password_manager::BuildPasswordStoreInterface< content::BrowserContext, - testing::NiceMock<password_manager::MockPasswordStore>>)); + testing::NiceMock< + password_manager::MockPasswordStoreInterface>>)); - account_store_ = static_cast<password_manager::MockPasswordStore*>( - AccountPasswordStoreFactory::GetForProfile( - testing_profile, ServiceAccessType::EXPLICIT_ACCESS) - .get()); + account_store_ = + static_cast<password_manager::MockPasswordStoreInterface*>( + AccountPasswordStoreFactory::GetInterfaceForProfile( + testing_profile, ServiceAccessType::EXPLICIT_ACCESS) + .get()); } OSCryptMocker::SetUp(); @@ -569,18 +573,14 @@ ~RemovePasswordsTester() { OSCryptMocker::TearDown(); } - password_manager::MockPasswordStore* profile_store() { + password_manager::MockPasswordStoreInterface* profile_store() { return profile_store_; } - password_manager::MockPasswordStore* account_store() { + password_manager::MockPasswordStoreInterface* account_store() { return account_store_; } - password_manager::MockPasswordSyncMetadataStore* account_metadata_store() { - return &account_metadata_store_; - } - password_manager::MockSmartBubbleStatsStore* mock_smart_bubble_stats_store() { return &mock_smart_bubble_stats_store_; } @@ -590,9 +590,8 @@ } private: - password_manager::MockPasswordStore* profile_store_; - password_manager::MockPasswordStore* account_store_; - password_manager::MockPasswordSyncMetadataStore account_metadata_store_; + password_manager::MockPasswordStoreInterface* profile_store_; + password_manager::MockPasswordStoreInterface* account_store_; testing::NiceMock<password_manager::MockSmartBubbleStatsStore> mock_smart_bubble_stats_store_; testing::NiceMock<password_manager::MockFieldInfoStore> @@ -1179,7 +1178,7 @@ } void ExpectRemoveLoginsByURLAndTime( - password_manager::MockPasswordStore* store) { + password_manager::MockPasswordStoreInterface* store) { EXPECT_CALL(*store, RemoveLoginsByURLAndTime) .WillOnce( testing::WithArgs<3, 4>([](auto callback, auto sync_callback) { @@ -1190,7 +1189,7 @@ } void ExpectRemoveLoginsByURLAndTimeWithFilter( - password_manager::MockPasswordStore* store, + password_manager::MockPasswordStoreInterface* store, base::RepeatingCallback<bool(const GURL&)> filter) { EXPECT_CALL(*store, RemoveLoginsByURLAndTime(ProbablySameFilter(filter), _, _, _, _)) @@ -2103,7 +2102,6 @@ base::ThreadTaskRunnerHandle::Get()->PostTask(FROM_HERE, std::move(completion)); })); - BlockUntilBrowsingDataRemoved( base::Time(), base::Time::Max(), content::BrowsingDataRemover::DATA_TYPE_COOKIES | @@ -3155,11 +3153,6 @@ EXPECT_CALL(*tester.profile_store(), RemoveLoginsByURLAndTime).Times(0); ExpectRemoveLoginsByURLAndTime(tester.account_store()); - // For the account store, the remover delegate also waits until all the - // deletions have propagated to the Sync server. Pretend that happens - // immediately. - EXPECT_CALL(*tester.account_metadata_store(), HasUnsyncedDeletions()) - .WillRepeatedly(Return(false)); BlockUntilBrowsingDataRemoved(base::Time(), base::Time::Max(), constants::DATA_TYPE_ACCOUNT_PASSWORDS, false); @@ -3171,11 +3164,6 @@ EXPECT_CALL(*tester.profile_store(), RemoveLoginsByURLAndTime).Times(0); ExpectRemoveLoginsByURLAndTime(tester.account_store()); - // For the account store, the remover delegate also waits until all the - // deletions have propagated to the Sync server. In this test, that never - // happens. - EXPECT_CALL(*tester.account_metadata_store(), HasUnsyncedDeletions()) - .WillRepeatedly(Return(true)); uint64_t failed_data_types = BlockUntilBrowsingDataRemoved( base::Time(), base::Time::Max(), constants::DATA_TYPE_ACCOUNT_PASSWORDS,
diff --git a/chrome/browser/chromeos/BUILD.gn b/chrome/browser/chromeos/BUILD.gn index 4c6ed66c..3b8a4e9 100644 --- a/chrome/browser/chromeos/BUILD.gn +++ b/chrome/browser/chromeos/BUILD.gn
@@ -2292,14 +2292,14 @@ "../ash/policy/remote_commands/device_command_start_crd_session_job.h", "../ash/policy/remote_commands/device_command_wipe_users_job.cc", "../ash/policy/remote_commands/device_command_wipe_users_job.h", - "../ash/policy/remote_commands/device_commands_factory_chromeos.cc", - "../ash/policy/remote_commands/device_commands_factory_chromeos.h", + "../ash/policy/remote_commands/device_commands_factory_ash.cc", + "../ash/policy/remote_commands/device_commands_factory_ash.h", "../ash/policy/remote_commands/screenshot_delegate.cc", "../ash/policy/remote_commands/screenshot_delegate.h", "../ash/policy/remote_commands/user_command_arc_job.cc", "../ash/policy/remote_commands/user_command_arc_job.h", - "../ash/policy/remote_commands/user_commands_factory_chromeos.cc", - "../ash/policy/remote_commands/user_commands_factory_chromeos.h", + "../ash/policy/remote_commands/user_commands_factory_ash.cc", + "../ash/policy/remote_commands/user_commands_factory_ash.h", "../ash/policy/reporting/app_install_event_log_manager_wrapper.cc", "../ash/policy/reporting/app_install_event_log_manager_wrapper.h", "../ash/policy/reporting/arc_app_install_event_log.cc",
diff --git a/chrome/browser/continuous_search/internal/android/java/src/org/chromium/chrome/browser/continuous_search/SearchResultExtractorProducer.java b/chrome/browser/continuous_search/internal/android/java/src/org/chromium/chrome/browser/continuous_search/SearchResultExtractorProducer.java index 927f251..25e3c8a 100644 --- a/chrome/browser/continuous_search/internal/android/java/src/org/chromium/chrome/browser/continuous_search/SearchResultExtractorProducer.java +++ b/chrome/browser/continuous_search/internal/android/java/src/org/chromium/chrome/browser/continuous_search/SearchResultExtractorProducer.java
@@ -83,16 +83,15 @@ * @param url The URL of SRP data was fetched for. * @param query The query associated with the SRP. * @param resultCategory The type of results: news, organic, etc. - * @param groupLabel One entry per group (g) naming the type of results. - * @param isAdGroup One entry per group (g) specifying the size of the group. + * @param groupType One entry per group (g) specifying the type of results. * @param groupSize One entry per group (g) specifying the number (n_g) of titles and urls in * the respective group. * @param titles One title per item ordered by group. There will be (sum n_g forall g) entries. * @param urls One URL per item ordered by group. There will be (sum n_g forall g) entries. */ @CalledByNative - void onResultsAvailable(GURL url, String query, int resultCategory, String[] groupLabel, - boolean[] isAdGroup, int[] groupSize, String[] titles, GURL[] urls) { + void onResultsAvailable(GURL url, String query, int resultCategory, int[] groupType, + int[] groupSize, String[] titles, GURL[] urls) { final int oldState = mState; mState = State.READY; if (oldState == State.CANCELLED) return; @@ -100,8 +99,9 @@ int groupOffset = 0; int urlCount = 0; List<PageGroup> groups = new ArrayList<PageGroup>(); - for (int i = 0; i < groupLabel.length; i++) { - if (isAdGroup[i]) { + for (int i = 0; i < groupType.length; i++) { + boolean isAdGroup = groupType[i] == 1; // continuous_search::mojom::ResultType::kAds. + if (isAdGroup) { // Account for the resulting group offset to ensure proper indexing. groupOffset += groupSize[i]; continue; @@ -118,7 +118,7 @@ } groupOffset += groupSize[i]; - groups.add(new PageGroup(groupLabel[i], isAdGroup[i], results)); + groups.add(new PageGroup(/*label=*/"", isAdGroup, results)); } if (urlCount < mMinimumUrlCount) {
diff --git a/chrome/browser/continuous_search/internal/android/junit/org/chromium/chrome/browser/continuous_search/SearchResultExtractorProducerTest.java b/chrome/browser/continuous_search/internal/android/junit/org/chromium/chrome/browser/continuous_search/SearchResultExtractorProducerTest.java index 8168f826..cd6299f4 100644 --- a/chrome/browser/continuous_search/internal/android/junit/org/chromium/chrome/browser/continuous_search/SearchResultExtractorProducerTest.java +++ b/chrome/browser/continuous_search/internal/android/junit/org/chromium/chrome/browser/continuous_search/SearchResultExtractorProducerTest.java
@@ -95,8 +95,7 @@ GURL url5 = JUnitTestGURLs.getGURL(JUnitTestGURLs.EXAMPLE_URL); mSearchResultProducer.onResultsAvailable(mTestUrl, TEST_QUERY, TEST_RESULT_TYPE, - new String[] {"Foo", "Bar", "Baz"}, new boolean[] {true, false, false}, - new int[] {1, 3, 1}, + new int[] {1, 0, 0}, new int[] {1, 3, 1}, new String[] {"Foo.com 1", "Bar.com 1", "Bar.com 2", "Bar.com 3", "Baz.com 1"}, new GURL[] {url1, url2, url3, url4, url5}); @@ -111,10 +110,10 @@ results2.add(new PageItem(url2, "Bar.com 1")); results2.add(new PageItem(url3, "Bar.com 2")); results2.add(new PageItem(url4, "Bar.com 3")); - groups.add(new PageGroup("Bar", false, results2)); + groups.add(new PageGroup("", false, results2)); List<PageItem> results3 = new ArrayList<PageItem>(); results3.add(new PageItem(url5, "Baz.com 1")); - groups.add(new PageGroup("Baz", false, results3)); + groups.add(new PageGroup("", false, results3)); verify(mListenerMock, times(1)) .onResult(new ContinuousNavigationMetadata(
diff --git a/chrome/browser/continuous_search/internal/search_result_extractor_producer.cc b/chrome/browser/continuous_search/internal/search_result_extractor_producer.cc index 0d931f7..49135ae 100644 --- a/chrome/browser/continuous_search/internal/search_result_extractor_producer.cc +++ b/chrome/browser/continuous_search/internal/search_result_extractor_producer.cc
@@ -44,14 +44,13 @@ const base::android::JavaRef<jobject>& url, const base::android::JavaRef<jstring>& query, jint result_type, - const base::android::JavaRef<jobjectArray>& group_label, - const base::android::JavaRef<jbooleanArray>& is_ad_group, + const base::android::JavaRef<jintArray>& group_type, const base::android::JavaRef<jintArray>& group_size, const base::android::JavaRef<jobjectArray>& titles, const base::android::JavaRef<jobjectArray>& urls) override { Java_SearchResultExtractorProducer_onResultsAvailable( - env, obj, url, query, result_type, group_label, is_ad_group, group_size, - titles, urls); + env, obj, url, query, result_type, group_type, group_size, titles, + urls); } }; @@ -82,6 +81,7 @@ content::WebContents::FromJavaWebContents(j_web_contents); client_.RequestData( web_contents, + {mojom::ResultType::kSearchResults, mojom::ResultType::kAds}, base::BindOnce(&SearchResultExtractorProducer::OnResultsCallback, weak_ptr_factory_.GetWeakPtr(), base::android::ConvertJavaStringToUTF8(env, j_query))); @@ -108,14 +108,9 @@ base::UmaHistogramCounts100( "Browser.ContinuousSearch.NumberOfSearchResultsExtracted", result_count); - std::vector<std::string> labels; + std::vector<int> group_types; + group_types.reserve(results->groups.size()); std::vector<int> group_sizes; - // std::vector<bool> doesn't provide data() due to its unique packing - // implementation and there is no JNI method for returning a Java array of - // booleans from a base::span<bool> or std::vector<bool>. This is the next - // best option. - std::unique_ptr<bool[]> groups_are_ad_type(new bool[results->groups.size()]); - labels.reserve(results->groups.size()); group_sizes.reserve(results->groups.size()); std::vector<std::u16string> titles; @@ -124,8 +119,7 @@ urls.reserve(result_count); for (size_t i = 0; i < results->groups.size(); ++i) { const mojom::ResultGroupPtr& group = results->groups[i]; - labels.push_back(group->label); - groups_are_ad_type[i] = group->is_ad_group; + group_types.push_back(static_cast<int>(group->type)); group_sizes.push_back(group->results.size()); for (const mojom::SearchResultPtr& result : group->results) { @@ -144,9 +138,7 @@ url::GURLAndroid::FromNativeGURL(env, results->document_url), base::android::ConvertUTF8ToJavaString(env, query), static_cast<jint>(GetSrpPageCategoryForUrl(results->document_url)), - base::android::ToJavaArrayOfStrings(env, labels), - base::android::ToJavaBooleanArray(env, groups_are_ad_type.get(), - results->groups.size()), + base::android::ToJavaIntArray(env, group_types), base::android::ToJavaIntArray(env, group_sizes), base::android::ToJavaArrayOfStrings(env, titles), url::GURLAndroid::ToJavaArrayOfGURLs(env, urls));
diff --git a/chrome/browser/continuous_search/internal/search_result_extractor_producer_interface.h b/chrome/browser/continuous_search/internal/search_result_extractor_producer_interface.h index c9bee6c..193a30f 100644 --- a/chrome/browser/continuous_search/internal/search_result_extractor_producer_interface.h +++ b/chrome/browser/continuous_search/internal/search_result_extractor_producer_interface.h
@@ -30,8 +30,7 @@ const base::android::JavaRef<jobject>& url, const base::android::JavaRef<jstring>& query, jint result_type, - const base::android::JavaRef<jobjectArray>& group_label, - const base::android::JavaRef<jbooleanArray>& is_ad_group, + const base::android::JavaRef<jintArray>& group_type, const base::android::JavaRef<jintArray>& group_size, const base::android::JavaRef<jobjectArray>& titles, const base::android::JavaRef<jobjectArray>& urls) = 0;
diff --git a/chrome/browser/continuous_search/internal/search_result_extractor_producer_unittest.cc b/chrome/browser/continuous_search/internal/search_result_extractor_producer_unittest.cc index f9f5d88..9681ac9 100644 --- a/chrome/browser/continuous_search/internal/search_result_extractor_producer_unittest.cc +++ b/chrome/browser/continuous_search/internal/search_result_extractor_producer_unittest.cc
@@ -36,8 +36,7 @@ expected_results->category_type = mojom::Category::kOrganic; { mojom::ResultGroupPtr result_group = mojom::ResultGroup::New(); - result_group->label = "Group 1"; - result_group->is_ad_group = false; + result_group->type = mojom::ResultType::kSearchResults; { mojom::SearchResultPtr result = mojom::SearchResult::New(); result->link = GURL("https://www.bar.com/"); @@ -68,8 +67,7 @@ const base::android::JavaRef<jobject>& url, const base::android::JavaRef<jstring>& query, jint result_type, - const base::android::JavaRef<jobjectArray>& group_label, - const base::android::JavaRef<jbooleanArray>& is_ad_group, + const base::android::JavaRef<jintArray>& group_type, const base::android::JavaRef<jintArray>& group_size, const base::android::JavaRef<jobjectArray>& titles, const base::android::JavaRef<jobjectArray>& urls), @@ -180,8 +178,7 @@ ::testing::_, ::testing::_, EqualsJavaGURL(GURL(kUrl)), EqualsJavaString(kQuery), static_cast<jint>(PageCategory::kOrganicSrp), - EqualsJavaStringArray(std::vector<std::string>({"Group 1"})), - EqualsJavaBooleanArray(std::vector<bool>({false})), + EqualsJavaIntArray(std::vector<int>({0})), EqualsJavaIntArray(std::vector<int>({1})), EqualsJavaStringArray(std::vector<std::string>({"Bar"})), EqualsJavaGURLArray(
diff --git a/chrome/browser/device_reauth/DEPS b/chrome/browser/device_reauth/DEPS new file mode 100644 index 0000000..4f13864 --- /dev/null +++ b/chrome/browser/device_reauth/DEPS
@@ -0,0 +1,3 @@ +include_rules = [ + "+components/device_reauth/biometric_authenticator.h", +]
diff --git a/chrome/browser/device_reauth/OWNERS b/chrome/browser/device_reauth/OWNERS new file mode 100644 index 0000000..275fae6 --- /dev/null +++ b/chrome/browser/device_reauth/OWNERS
@@ -0,0 +1,2 @@ +ioanap@chromium.org +roagarwal@chromium.org
diff --git a/chrome/browser/device_reauth/android/BUILD.gn b/chrome/browser/device_reauth/android/BUILD.gn new file mode 100644 index 0000000..da5a2879 --- /dev/null +++ b/chrome/browser/device_reauth/android/BUILD.gn
@@ -0,0 +1,34 @@ +# Copyright 2021 The Chromium Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +import("//build/config/android/config.gni") +import("//build/config/android/rules.gni") + +android_library("java") { + deps = [ + "//base:base_java", + "//chrome/browser/ui/android/strings:ui_strings_grd", + "//components/browser_ui/strings/android:browser_ui_strings_grd", + "//components/device_reauth:device_reauth_java_enums", + "//content/public/android:content_main_dex_java", + "//third_party/android_deps:com_android_support_support_annotations_java", + "//third_party/androidx:androidx_annotation_annotation_java", + "//ui/android:ui_no_recycler_view_java", + ] + srcjar_deps = [ ":device_reauth_java_enums_srcjar" ] + + sources = [ "java/src/org/chromium/chrome/browser/device_reauth/BiometricAuthenticatorBridge.java" ] + + annotation_processor_deps = [ "//base/android/jni_generator:jni_processor" ] + + resources_package = "org.chromium.chrome.browser.device_reauth" +} + +generate_jni("jni_headers") { + sources = [ "java/src/org/chromium/chrome/browser/device_reauth/BiometricAuthenticatorBridge.java" ] +} + +java_cpp_enum("device_reauth_java_enums_srcjar") { + sources = [ "biometric_authenticator_bridge.h" ] +}
diff --git a/chrome/browser/device_reauth/android/DEPS b/chrome/browser/device_reauth/android/DEPS new file mode 100644 index 0000000..6fbf0e2 --- /dev/null +++ b/chrome/browser/device_reauth/android/DEPS
@@ -0,0 +1,4 @@ +include_rules = [ + "+components/device_reauth/biometric_authenticator.h", + "+content/public/android/java/src/org/chromium/content_public", +]
diff --git a/chrome/browser/password_manager/android/biometric_authenticator_android.cc b/chrome/browser/device_reauth/android/biometric_authenticator_android.cc similarity index 81% rename from chrome/browser/password_manager/android/biometric_authenticator_android.cc rename to chrome/browser/device_reauth/android/biometric_authenticator_android.cc index 583426f..e170b75 100644 --- a/chrome/browser/password_manager/android/biometric_authenticator_android.cc +++ b/chrome/browser/device_reauth/android/biometric_authenticator_android.cc
@@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "chrome/browser/password_manager/android/biometric_authenticator_android.h" +#include "chrome/browser/device_reauth/android/biometric_authenticator_android.h" #include <memory> #include <utility> @@ -15,9 +15,9 @@ #include "base/metrics/histogram_functions.h" #include "base/metrics/histogram_macros.h" #include "base/time/time.h" -#include "chrome/browser/password_manager/android/biometric_authenticator_bridge_impl.h" +#include "chrome/browser/device_reauth/android/biometric_authenticator_bridge_impl.h" #include "components/autofill/core/common/autofill_features.h" -#include "components/password_manager/core/browser/biometric_authenticator.h" +#include "components/device_reauth/biometric_authenticator.h" #include "components/password_manager/core/browser/origin_credential_store.h" #include "components/password_manager/core/common/password_manager_features.h" #include "content/public/browser/browser_task_traits.h" @@ -27,9 +27,9 @@ #include "ui/android/view_android.h" using content::WebContents; -using password_manager::BiometricAuthFinalResult; -using password_manager::BiometricAuthUIResult; -using password_manager::BiometricsAvailability; +using device_reauth::BiometricAuthFinalResult; +using device_reauth::BiometricAuthUIResult; +using device_reauth::BiometricsAvailability; using password_manager::UiCredential; namespace { @@ -42,14 +42,14 @@ result == BiometricAuthUIResult::kSuccessWithDeviceLock; } -password_manager::BiometricAuthFinalResult MapUIResultToFinal( +device_reauth::BiometricAuthFinalResult MapUIResultToFinal( BiometricAuthUIResult result) { switch (result) { case BiometricAuthUIResult::kSuccessWithUnknownMethod: return BiometricAuthFinalResult::kSuccessWithUnknownMethod; case BiometricAuthUIResult::kSuccessWithBiometrics: return BiometricAuthFinalResult::kSuccessWithBiometrics; - case password_manager::BiometricAuthUIResult::kSuccessWithDeviceLock: + case BiometricAuthUIResult::kSuccessWithDeviceLock: return BiometricAuthFinalResult::kSuccessWithDeviceLock; case BiometricAuthUIResult::kCanceledByUser: return BiometricAuthFinalResult::kCanceledByUser; @@ -66,7 +66,7 @@ } // namespace // static -scoped_refptr<password_manager::BiometricAuthenticator> +scoped_refptr<device_reauth::BiometricAuthenticator> ChromeBiometricAuthenticator::Create(WebContents* web_contents) { auto* window_android = web_contents->GetNativeView()->GetWindowAndroid(); if (!window_android) { @@ -93,7 +93,7 @@ } void BiometricAuthenticatorAndroid::Authenticate( - password_manager::BiometricAuthRequester requester, + device_reauth::BiometricAuthRequester requester, AuthenticateCallback callback) { DCHECK(!callback_); DCHECK(!requester_.has_value()); @@ -105,7 +105,7 @@ if (last_good_auth_timestamp_.has_value() && base::TimeTicks::Now() - last_good_auth_timestamp_.value() < base::TimeDelta::FromSeconds(kAuthValidSeconds)) { - LogAuthResult(password_manager::BiometricAuthFinalResult::kAuthStillValid); + LogAuthResult(BiometricAuthFinalResult::kAuthStillValid); std::move(callback_).Run(/*success=*/true); requester_ = absl::nullopt; return; @@ -117,7 +117,7 @@ } void BiometricAuthenticatorAndroid::Cancel( - password_manager::BiometricAuthRequester requester) { + device_reauth::BiometricAuthRequester requester) { // The object cancelling the auth is not the same as the one to which // the ongoing auth corresponds. if (!requester_.has_value() || requester != requester_.value()) @@ -132,11 +132,9 @@ bool success = IsSuccessfulResult(ui_result); if (callback_.is_null()) { if (success) { - LogAuthResult( - password_manager::BiometricAuthFinalResult::kSuccessButCanceled); + LogAuthResult(BiometricAuthFinalResult::kSuccessButCanceled); } else { - LogAuthResult( - password_manager::BiometricAuthFinalResult::kFailedAndCanceled); + LogAuthResult(BiometricAuthFinalResult::kFailedAndCanceled); } return; }
diff --git a/chrome/browser/password_manager/android/biometric_authenticator_android.h b/chrome/browser/device_reauth/android/biometric_authenticator_android.h similarity index 64% rename from chrome/browser/password_manager/android/biometric_authenticator_android.h rename to chrome/browser/device_reauth/android/biometric_authenticator_android.h index 56c3c39..f1561d8 100644 --- a/chrome/browser/password_manager/android/biometric_authenticator_android.h +++ b/chrome/browser/device_reauth/android/biometric_authenticator_android.h
@@ -2,16 +2,19 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef CHROME_BROWSER_PASSWORD_MANAGER_ANDROID_BIOMETRIC_AUTHENTICATOR_ANDROID_H_ -#define CHROME_BROWSER_PASSWORD_MANAGER_ANDROID_BIOMETRIC_AUTHENTICATOR_ANDROID_H_ +#ifndef CHROME_BROWSER_DEVICE_REAUTH_ANDROID_BIOMETRIC_AUTHENTICATOR_ANDROID_H_ +#define CHROME_BROWSER_DEVICE_REAUTH_ANDROID_BIOMETRIC_AUTHENTICATOR_ANDROID_H_ #include "base/callback.h" #include "base/time/time.h" -#include "chrome/browser/password_manager/android/biometric_authenticator_bridge.h" -#include "chrome/browser/password_manager/chrome_biometric_authenticator.h" -#include "components/password_manager/core/browser/biometric_authenticator.h" +#include "chrome/browser/device_reauth/android/biometric_authenticator_bridge.h" +#include "chrome/browser/device_reauth/chrome_biometric_authenticator.h" +#include "components/device_reauth/biometric_authenticator.h" +#include "components/password_manager/core/browser/origin_credential_store.h" #include "third_party/abseil-cpp/absl/types/optional.h" +#include "ui/android/window_android.h" + // Android implementation of the BiometricAuthenticator interface. class BiometricAuthenticatorAndroid : public ChromeBiometricAuthenticator { public: @@ -19,25 +22,25 @@ std::unique_ptr<BiometricAuthenticatorBridge> bridge); // Checks whether biometrics are available. - password_manager::BiometricsAvailability CanAuthenticate() override; + device_reauth::BiometricsAvailability CanAuthenticate() override; // Trigges an authentication flow based on biometrics, with the // screen lock as fallback. Note: this only supports one authentication // request at a time. - void Authenticate(password_manager::BiometricAuthRequester requester, + void Authenticate(device_reauth::BiometricAuthRequester requester, AuthenticateCallback callback) override; // Should be called by the object using the authenticator if the purpose // for which the auth was requested becomes obsolete or the object is // destroyed. - void Cancel(password_manager::BiometricAuthRequester requester) override; + void Cancel(device_reauth::BiometricAuthRequester requester) override; private: ~BiometricAuthenticatorAndroid() override; // Called when the authentication compeletes with the result void OnAuthenticationCompleted( - password_manager::BiometricAuthUIResult ui_result); + device_reauth::BiometricAuthUIResult ui_result); // Time of last successful re-auth. nullopt if there hasn't been an auth yet. absl::optional<base::TimeTicks> last_good_auth_timestamp_; @@ -47,10 +50,10 @@ // Enum value representing the filling surface that has requested the current // authentication. - absl::optional<password_manager::BiometricAuthRequester> requester_; + absl::optional<device_reauth::BiometricAuthRequester> requester_; // Bridge used to call into the Java side. std::unique_ptr<BiometricAuthenticatorBridge> bridge_; }; -#endif // CHROME_BROWSER_PASSWORD_MANAGER_ANDROID_BIOMETRIC_AUTHENTICATOR_ANDROID_H_ +#endif // CHROME_BROWSER_DEVICE_REAUTH_ANDROID_BIOMETRIC_AUTHENTICATOR_ANDROID_H_
diff --git a/chrome/browser/password_manager/android/biometric_authenticator_android_unittest.cc b/chrome/browser/device_reauth/android/biometric_authenticator_android_unittest.cc similarity index 92% rename from chrome/browser/password_manager/android/biometric_authenticator_android_unittest.cc rename to chrome/browser/device_reauth/android/biometric_authenticator_android_unittest.cc index 7605af8..5078d8c 100644 --- a/chrome/browser/password_manager/android/biometric_authenticator_android_unittest.cc +++ b/chrome/browser/device_reauth/android/biometric_authenticator_android_unittest.cc
@@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "chrome/browser/password_manager/android/biometric_authenticator_android.h" +#include "chrome/browser/device_reauth/android/biometric_authenticator_android.h" #include <memory> @@ -13,8 +13,8 @@ #include "base/test/metrics/histogram_tester.h" #include "base/test/mock_callback.h" #include "base/test/task_environment.h" -#include "chrome/browser/password_manager/android/biometric_authenticator_bridge.h" -#include "components/password_manager/core/browser/biometric_authenticator.h" +#include "chrome/browser/device_reauth/android/biometric_authenticator_bridge.h" +#include "components/device_reauth/biometric_authenticator.h" #include "content/public/test/browser_task_environment.h" #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" @@ -23,11 +23,11 @@ using base::Bucket; using base::test::RunOnceCallback; -using password_manager::BiometricAuthenticator; -using password_manager::BiometricAuthFinalResult; -using password_manager::BiometricAuthRequester; -using password_manager::BiometricAuthUIResult; -using password_manager::BiometricsAvailability; +using device_reauth::BiometricAuthenticator; +using device_reauth::BiometricAuthFinalResult; +using device_reauth::BiometricAuthRequester; +using device_reauth::BiometricAuthUIResult; +using device_reauth::BiometricsAvailability; using testing::_; using testing::ElementsAre; using testing::Return; @@ -37,7 +37,7 @@ MOCK_METHOD(BiometricsAvailability, CanAuthenticate, (), (override)); MOCK_METHOD(void, Authenticate, - (base::OnceCallback<void(password_manager::BiometricAuthUIResult)> + (base::OnceCallback<void(device_reauth::BiometricAuthUIResult)> response_callback), (override)); MOCK_METHOD(void, Cancel, (), (override));
diff --git a/chrome/browser/password_manager/android/biometric_authenticator_bridge.h b/chrome/browser/device_reauth/android/biometric_authenticator_bridge.h similarity index 62% rename from chrome/browser/password_manager/android/biometric_authenticator_bridge.h rename to chrome/browser/device_reauth/android/biometric_authenticator_bridge.h index e5ea8a0..bfb0cee 100644 --- a/chrome/browser/password_manager/android/biometric_authenticator_bridge.h +++ b/chrome/browser/device_reauth/android/biometric_authenticator_bridge.h
@@ -2,18 +2,18 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef CHROME_BROWSER_PASSWORD_MANAGER_ANDROID_BIOMETRIC_AUTHENTICATOR_BRIDGE_H_ -#define CHROME_BROWSER_PASSWORD_MANAGER_ANDROID_BIOMETRIC_AUTHENTICATOR_BRIDGE_H_ +#ifndef CHROME_BROWSER_DEVICE_REAUTH_ANDROID_BIOMETRIC_AUTHENTICATOR_BRIDGE_H_ +#define CHROME_BROWSER_DEVICE_REAUTH_ANDROID_BIOMETRIC_AUTHENTICATOR_BRIDGE_H_ #include "base/callback_forward.h" -#include "chrome/browser/password_manager/android/biometric_authenticator_android.h" -#include "components/password_manager/core/browser/biometric_authenticator.h" +#include "chrome/browser/device_reauth/android/biometric_authenticator_android.h" +#include "components/device_reauth/biometric_authenticator.h" -namespace password_manager { +namespace device_reauth { // The biometric authentication result as returned by the biometric prompt. // -// GENERATED_JAVA_ENUM_PACKAGE: org.chromium.chrome.browser.password_manager +// GENERATED_JAVA_ENUM_PACKAGE: org.chromium.chrome.browser.device_reauth enum class BiometricAuthUIResult { kSuccessWithUnknownMethod = 0, kSuccessWithBiometrics = 1, @@ -22,7 +22,7 @@ kFailed = 4, }; -} // namespace password_manager +} // namespace device_reauth // Interface for the biometric authenticator bridge connecting the C++ side // of the implementation to the Java one. @@ -31,13 +31,13 @@ virtual ~BiometricAuthenticatorBridge() = default; // Checks whether biometrics are available. - virtual password_manager::BiometricsAvailability CanAuthenticate() = 0; + virtual device_reauth::BiometricsAvailability CanAuthenticate() = 0; // Trigges an authentication flow based on biometrics, with the // screen lock as fallback. Note: this only supports one authentication // request at a time. virtual void Authenticate( - base::OnceCallback<void(password_manager::BiometricAuthUIResult)> + base::OnceCallback<void(device_reauth::BiometricAuthUIResult)> response_callback) = 0; // Called when the authentication flow becomes obsolete (e.g. the original @@ -45,4 +45,4 @@ virtual void Cancel() = 0; }; -#endif // CHROME_BROWSER_PASSWORD_MANAGER_ANDROID_BIOMETRIC_AUTHENTICATOR_BRIDGE_H_ +#endif // CHROME_BROWSER_DEVICE_REAUTH_ANDROID_BIOMETRIC_AUTHENTICATOR_BRIDGE_H_
diff --git a/chrome/browser/password_manager/android/biometric_authenticator_bridge_impl.cc b/chrome/browser/device_reauth/android/biometric_authenticator_bridge_impl.cc similarity index 77% rename from chrome/browser/password_manager/android/biometric_authenticator_bridge_impl.cc rename to chrome/browser/device_reauth/android/biometric_authenticator_bridge_impl.cc index 69133ae..261b460 100644 --- a/chrome/browser/password_manager/android/biometric_authenticator_bridge_impl.cc +++ b/chrome/browser/device_reauth/android/biometric_authenticator_bridge_impl.cc
@@ -2,18 +2,18 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "chrome/browser/password_manager/android/biometric_authenticator_bridge_impl.h" +#include "chrome/browser/device_reauth/android/biometric_authenticator_bridge_impl.h" #include "base/android/jni_android.h" #include "base/callback.h" -#include "chrome/browser/password_manager/android/biometric_authenticator_android.h" -#include "chrome/browser/password_manager/android/jni_headers/BiometricAuthenticatorBridge_jni.h" -#include "components/password_manager/core/browser/biometric_authenticator.h" +#include "chrome/browser/device_reauth/android/biometric_authenticator_android.h" +#include "chrome/browser/device_reauth/android/jni_headers/BiometricAuthenticatorBridge_jni.h" +#include "components/device_reauth/biometric_authenticator.h" #include "ui/android/window_android.h" using base::android::AttachCurrentThread; -using password_manager::BiometricAuthUIResult; -using password_manager::BiometricsAvailability; +using device_reauth::BiometricAuthUIResult; +using device_reauth::BiometricsAvailability; BiometricAuthenticatorBridgeImpl::BiometricAuthenticatorBridgeImpl( ui::WindowAndroid* window_android) { @@ -34,7 +34,7 @@ } void BiometricAuthenticatorBridgeImpl::Authenticate( - base::OnceCallback<void(password_manager::BiometricAuthUIResult)> + base::OnceCallback<void(device_reauth::BiometricAuthUIResult)> response_callback) { response_callback_ = std::move(response_callback); Java_BiometricAuthenticatorBridge_authenticate(AttachCurrentThread(),
diff --git a/chrome/browser/password_manager/android/biometric_authenticator_bridge_impl.h b/chrome/browser/device_reauth/android/biometric_authenticator_bridge_impl.h similarity index 72% rename from chrome/browser/password_manager/android/biometric_authenticator_bridge_impl.h rename to chrome/browser/device_reauth/android/biometric_authenticator_bridge_impl.h index c1e0eac..63f0969 100644 --- a/chrome/browser/password_manager/android/biometric_authenticator_bridge_impl.h +++ b/chrome/browser/device_reauth/android/biometric_authenticator_bridge_impl.h
@@ -2,11 +2,11 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef CHROME_BROWSER_PASSWORD_MANAGER_ANDROID_BIOMETRIC_AUTHENTICATOR_BRIDGE_IMPL_H_ -#define CHROME_BROWSER_PASSWORD_MANAGER_ANDROID_BIOMETRIC_AUTHENTICATOR_BRIDGE_IMPL_H_ +#ifndef CHROME_BROWSER_DEVICE_REAUTH_ANDROID_BIOMETRIC_AUTHENTICATOR_BRIDGE_IMPL_H_ +#define CHROME_BROWSER_DEVICE_REAUTH_ANDROID_BIOMETRIC_AUTHENTICATOR_BRIDGE_IMPL_H_ #include "base/callback_forward.h" -#include "chrome/browser/password_manager/android/biometric_authenticator_android.h" +#include "chrome/browser/device_reauth/android/biometric_authenticator_android.h" #include "ui/android/window_android.h" class BiometricAuthenticatorBridgeImpl : public BiometricAuthenticatorBridge { @@ -23,11 +23,11 @@ BiometricAuthenticatorBridgeImpl&& operator=( const BiometricAuthenticatorBridgeImpl&&) = delete; - password_manager::BiometricsAvailability CanAuthenticate() override; + device_reauth::BiometricsAvailability CanAuthenticate() override; // Starts the authentication. void Authenticate( - base::OnceCallback<void(password_manager::BiometricAuthUIResult)> + base::OnceCallback<void(device_reauth::BiometricAuthUIResult)> response_callback) override; // Cancels the ongoing authentication. @@ -38,7 +38,7 @@ private: // Called when the authentication completes. - base::OnceCallback<void(password_manager::BiometricAuthUIResult)> + base::OnceCallback<void(device_reauth::BiometricAuthUIResult)> response_callback_; // This object is an instance of BiometricAuthenticatorBridge, i.e. the Java @@ -46,4 +46,4 @@ base::android::ScopedJavaGlobalRef<jobject> java_object_; }; -#endif // CHROME_BROWSER_PASSWORD_MANAGER_ANDROID_BIOMETRIC_AUTHENTICATOR_BRIDGE_IMPL_H_ +#endif // CHROME_BROWSER_DEVICE_REAUTH_ANDROID_BIOMETRIC_AUTHENTICATOR_BRIDGE_IMPL_H_
diff --git a/chrome/browser/password_manager/android/java/src/org/chromium/chrome/browser/password_manager/BiometricAuthenticatorBridge.java b/chrome/browser/device_reauth/android/java/src/org/chromium/chrome/browser/device_reauth/BiometricAuthenticatorBridge.java similarity index 98% rename from chrome/browser/password_manager/android/java/src/org/chromium/chrome/browser/password_manager/BiometricAuthenticatorBridge.java rename to chrome/browser/device_reauth/android/java/src/org/chromium/chrome/browser/device_reauth/BiometricAuthenticatorBridge.java index 92627c83..2fc3cb1 100644 --- a/chrome/browser/password_manager/android/java/src/org/chromium/chrome/browser/password_manager/BiometricAuthenticatorBridge.java +++ b/chrome/browser/device_reauth/android/java/src/org/chromium/chrome/browser/device_reauth/BiometricAuthenticatorBridge.java
@@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -package org.chromium.chrome.browser.password_manager; +package org.chromium.chrome.browser.device_reauth; import static android.hardware.biometrics.BiometricManager.BIOMETRIC_ERROR_HW_UNAVAILABLE; import static android.hardware.biometrics.BiometricManager.BIOMETRIC_ERROR_NONE_ENROLLED;
diff --git a/chrome/browser/password_manager/chrome_biometric_authenticator.h b/chrome/browser/device_reauth/chrome_biometric_authenticator.h similarity index 64% rename from chrome/browser/password_manager/chrome_biometric_authenticator.h rename to chrome/browser/device_reauth/chrome_biometric_authenticator.h index 369f77e..f1840e5 100644 --- a/chrome/browser/password_manager/chrome_biometric_authenticator.h +++ b/chrome/browser/device_reauth/chrome_biometric_authenticator.h
@@ -2,10 +2,10 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef CHROME_BROWSER_PASSWORD_MANAGER_CHROME_BIOMETRIC_AUTHENTICATOR_H_ -#define CHROME_BROWSER_PASSWORD_MANAGER_CHROME_BIOMETRIC_AUTHENTICATOR_H_ +#ifndef CHROME_BROWSER_DEVICE_REAUTH_CHROME_BIOMETRIC_AUTHENTICATOR_H_ +#define CHROME_BROWSER_DEVICE_REAUTH_CHROME_BIOMETRIC_AUTHENTICATOR_H_ -#include "components/password_manager/core/browser/biometric_authenticator.h" +#include "components/device_reauth/biometric_authenticator.h" namespace content { class WebContents; @@ -15,16 +15,16 @@ // provide an implementation for Create(), instantiating authenticators for a // given platform. class ChromeBiometricAuthenticator - : public password_manager::BiometricAuthenticator { + : public device_reauth::BiometricAuthenticator { public: // Create an instance of the ChromeBiometricAuthenticator. Trying to use this // API on platforms that do not provide an implementation will result in a // link error. So far only Android provides an implementation. - static scoped_refptr<password_manager::BiometricAuthenticator> Create( + static scoped_refptr<device_reauth::BiometricAuthenticator> Create( content::WebContents* web_contents); protected: ~ChromeBiometricAuthenticator() override = default; }; -#endif // CHROME_BROWSER_PASSWORD_MANAGER_CHROME_BIOMETRIC_AUTHENTICATOR_H_ +#endif // CHROME_BROWSER_DEVICE_REAUTH_CHROME_BIOMETRIC_AUTHENTICATOR_H_
diff --git a/chrome/browser/extensions/BUILD.gn b/chrome/browser/extensions/BUILD.gn index 6fa3fe4..39c6c89 100644 --- a/chrome/browser/extensions/BUILD.gn +++ b/chrome/browser/extensions/BUILD.gn
@@ -1259,6 +1259,13 @@ ] } + if (is_fuchsia) { + sources += [ + "api/image_writer_private/removable_storage_provider_fuchsia.cc", + "api/messaging/native_process_launcher_fuchsia.cc", + ] + } + if (enable_plugins) { sources += [ "plugin_manager.cc",
diff --git a/chrome/browser/extensions/api/image_writer_private/removable_storage_provider_fuchsia.cc b/chrome/browser/extensions/api/image_writer_private/removable_storage_provider_fuchsia.cc new file mode 100644 index 0000000..45b1f60 --- /dev/null +++ b/chrome/browser/extensions/api/image_writer_private/removable_storage_provider_fuchsia.cc
@@ -0,0 +1,19 @@ +// Copyright 2021 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "chrome/browser/extensions/api/image_writer_private/removable_storage_provider.h" + +#include "base/notreached.h" + +namespace extensions { + +// static +scoped_refptr<StorageDeviceList> +RemovableStorageProvider::PopulateDeviceList() { + // TODO(crbug.com/1233550): Integrate once platform APIs exist. + NOTIMPLEMENTED_LOG_ONCE(); + return {}; +} + +} // namespace extensions
diff --git a/chrome/browser/extensions/api/messaging/native_process_launcher_fuchsia.cc b/chrome/browser/extensions/api/messaging/native_process_launcher_fuchsia.cc new file mode 100644 index 0000000..4822e62 --- /dev/null +++ b/chrome/browser/extensions/api/messaging/native_process_launcher_fuchsia.cc
@@ -0,0 +1,29 @@ +// Copyright 2021 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "chrome/browser/extensions/api/messaging/native_process_launcher.h" + +#include "base/notreached.h" + +namespace extensions { + +// static +base::FilePath NativeProcessLauncher::FindManifest(const std::string& host_name, + bool allow_user_level_hosts, + std::string* error_message) { + *error_message = "Not implemented"; + return base::FilePath(); +} + +// static +bool NativeProcessLauncher::LaunchNativeProcess( + const base::CommandLine& command_line, + base::Process* process, + base::File* read_file, + base::File* write_file) { + NOTIMPLEMENTED_LOG_ONCE(); + return false; +} + +} // namespace extensions
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 b68ea15..1be2c72 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
@@ -136,16 +136,6 @@ }))); } -password_manager::InsecureCredential MakeInsecureCredential( - base::StringPiece signon_realm, - base::StringPiece16 username, - base::TimeDelta time_since_creation = base::TimeDelta(), - InsecureType compromise_type = InsecureType::kLeaked) { - return password_manager::InsecureCredential( - std::string(signon_realm), std::u16string(username), - base::Time::Now() - time_since_creation, compromise_type, IsMuted(false)); -} - PasswordForm MakeSavedPassword(base::StringPiece signon_realm, base::StringPiece16 username, base::StringPiece16 password = kPassword1, @@ -165,6 +155,14 @@ return form; } +void AddIssueToForm(PasswordForm* form, + InsecureType type, + base::TimeDelta time_since_creation = base::TimeDelta()) { + form->password_issues->insert_or_assign( + type, InsecurityMetadata(base::Time::Now() - time_since_creation, + IsMuted(false))); +} + std::string MakeAndroidRealm(base::StringPiece package_name) { return base::StrCat({"android://hash@", package_name}); } @@ -353,23 +351,26 @@ // credentials are before leaked credentials and that within each group // credentials are ordered by recency. TEST_F(PasswordCheckDelegateTest, GetCompromisedCredentialsOrders) { - store().AddLogin(MakeSavedPassword(kExampleCom, kUsername1)); - store().AddLogin(MakeSavedPassword(kExampleCom, kUsername2)); - store().AddLogin(MakeSavedPassword(kExampleOrg, kUsername1)); - store().AddLogin(MakeSavedPassword(kExampleOrg, kUsername2)); + PasswordForm form_com_username1 = MakeSavedPassword(kExampleCom, kUsername1); + AddIssueToForm(&form_com_username1, InsecureType::kLeaked, + base::TimeDelta::FromMinutes(1)); + store().AddLogin(form_com_username1); - store().AddInsecureCredential(MakeInsecureCredential( - kExampleCom, kUsername1, base::TimeDelta::FromMinutes(1), - InsecureType::kLeaked)); - store().AddInsecureCredential(MakeInsecureCredential( - kExampleCom, kUsername2, base::TimeDelta::FromMinutes(2), - InsecureType::kPhished)); - store().AddInsecureCredential(MakeInsecureCredential( - kExampleOrg, kUsername2, base::TimeDelta::FromMinutes(3), - InsecureType::kLeaked)); - store().AddInsecureCredential(MakeInsecureCredential( - kExampleOrg, kUsername1, base::TimeDelta::FromMinutes(4), - InsecureType::kPhished)); + PasswordForm form_com_username2 = MakeSavedPassword(kExampleCom, kUsername2); + AddIssueToForm(&form_com_username2, InsecureType::kPhished, + base::TimeDelta::FromMinutes(2)); + store().AddLogin(form_com_username2); + + PasswordForm form_org_username1 = MakeSavedPassword(kExampleOrg, kUsername1); + AddIssueToForm(&form_org_username1, InsecureType::kPhished, + base::TimeDelta::FromMinutes(4)); + store().AddLogin(form_org_username1); + + PasswordForm form_org_username2 = MakeSavedPassword(kExampleOrg, kUsername2); + AddIssueToForm(&form_org_username2, InsecureType::kLeaked, + base::TimeDelta::FromMinutes(3)); + store().AddLogin(form_org_username2); + RunUntilIdle(); EXPECT_THAT( @@ -401,23 +402,26 @@ // credential covers the "Just now" cases (less than a minute ago), as well as // months and years. TEST_F(PasswordCheckDelegateTest, GetCompromisedCredentialsHandlesTimes) { - store().AddLogin(MakeSavedPassword(kExampleCom, kUsername1)); - store().AddLogin(MakeSavedPassword(kExampleCom, kUsername2)); - store().AddLogin(MakeSavedPassword(kExampleOrg, kUsername1)); - store().AddLogin(MakeSavedPassword(kExampleOrg, kUsername2)); + PasswordForm form_com_username1 = MakeSavedPassword(kExampleCom, kUsername1); + AddIssueToForm(&form_com_username1, InsecureType::kLeaked, + base::TimeDelta::FromSeconds(59)); + store().AddLogin(form_com_username1); - store().AddInsecureCredential(MakeInsecureCredential( - kExampleCom, kUsername1, base::TimeDelta::FromSeconds(59), - InsecureType::kLeaked)); - store().AddInsecureCredential(MakeInsecureCredential( - kExampleCom, kUsername2, base::TimeDelta::FromSeconds(60), - InsecureType::kLeaked)); - store().AddInsecureCredential(MakeInsecureCredential( - kExampleOrg, kUsername1, base::TimeDelta::FromDays(100), - InsecureType::kLeaked)); - store().AddInsecureCredential(MakeInsecureCredential( - kExampleOrg, kUsername2, base::TimeDelta::FromDays(800), - InsecureType::kLeaked)); + PasswordForm form_com_username2 = MakeSavedPassword(kExampleCom, kUsername2); + AddIssueToForm(&form_com_username2, InsecureType::kLeaked, + base::TimeDelta::FromSeconds(60)); + store().AddLogin(form_com_username2); + + PasswordForm form_org_username1 = MakeSavedPassword(kExampleOrg, kUsername1); + AddIssueToForm(&form_org_username1, InsecureType::kLeaked, + base::TimeDelta::FromDays(100)); + store().AddLogin(form_org_username1); + + PasswordForm form_org_username2 = MakeSavedPassword(kExampleOrg, kUsername2); + AddIssueToForm(&form_org_username2, InsecureType::kLeaked, + base::TimeDelta::FromDays(800)); + store().AddLogin(form_org_username2); + RunUntilIdle(); EXPECT_THAT( @@ -451,29 +455,30 @@ // most recent compromise. TEST_F(PasswordCheckDelegateTest, GetCompromisedCredentialsDedupesLeakedAndCompromised) { - store().AddLogin(MakeSavedPassword(kExampleCom, kUsername1)); - store().AddLogin(MakeSavedPassword(kExampleCom, kUsername2)); - store().AddLogin(MakeSavedPassword(kExampleOrg, kUsername1)); - store().AddLogin(MakeSavedPassword(kExampleOrg, kUsername2)); + PasswordForm form_com_username1 = MakeSavedPassword(kExampleCom, kUsername1); + AddIssueToForm(&form_com_username1, InsecureType::kLeaked, + base::TimeDelta::FromMinutes(1)); + AddIssueToForm(&form_com_username1, InsecureType::kPhished, + base::TimeDelta::FromMinutes(5)); + store().AddLogin(form_com_username1); - store().AddInsecureCredential(MakeInsecureCredential( - kExampleCom, kUsername1, base::TimeDelta::FromMinutes(1), - InsecureType::kLeaked)); - store().AddInsecureCredential(MakeInsecureCredential( - kExampleCom, kUsername2, base::TimeDelta::FromMinutes(2), - InsecureType::kLeaked)); - store().AddInsecureCredential(MakeInsecureCredential( - kExampleOrg, kUsername1, base::TimeDelta::FromMinutes(3), - InsecureType::kPhished)); - store().AddInsecureCredential(MakeInsecureCredential( - kExampleOrg, kUsername2, base::TimeDelta::FromMinutes(4), - InsecureType::kPhished)); - store().AddInsecureCredential(MakeInsecureCredential( - kExampleCom, kUsername1, base::TimeDelta::FromMinutes(5), - InsecureType::kPhished)); - store().AddInsecureCredential(MakeInsecureCredential( - kExampleOrg, kUsername2, base::TimeDelta::FromMinutes(6), - InsecureType::kLeaked)); + PasswordForm form_com_username2 = MakeSavedPassword(kExampleCom, kUsername2); + AddIssueToForm(&form_com_username2, InsecureType::kLeaked, + base::TimeDelta::FromMinutes(2)); + store().AddLogin(form_com_username2); + + PasswordForm form_org_username1 = MakeSavedPassword(kExampleOrg, kUsername1); + AddIssueToForm(&form_org_username1, InsecureType::kPhished, + base::TimeDelta::FromMinutes(3)); + store().AddLogin(form_org_username1); + + PasswordForm form_org_username2 = MakeSavedPassword(kExampleOrg, kUsername2); + AddIssueToForm(&form_org_username2, InsecureType::kPhished, + base::TimeDelta::FromMinutes(4)); + AddIssueToForm(&form_org_username2, InsecureType::kLeaked, + base::TimeDelta::FromMinutes(6)); + store().AddLogin(form_org_username2); + RunUntilIdle(); EXPECT_THAT( @@ -502,20 +507,22 @@ } TEST_F(PasswordCheckDelegateTest, GetCompromisedCredentialsInjectsAndroid) { - store().AddLogin(MakeSavedPassword(kExampleCom, kUsername1)); - store().AddLogin(MakeSavedAndroidPassword(kExampleApp, kUsername2, - "Example App", kExampleCom)); - // Test Android credential without affiliation information. - store().AddLogin(MakeSavedAndroidPassword(kExampleApp, kUsername1)); - store().AddInsecureCredential(MakeInsecureCredential( - kExampleCom, kUsername1, base::TimeDelta::FromMinutes(5), - InsecureType::kLeaked)); - store().AddInsecureCredential(MakeInsecureCredential( - MakeAndroidRealm(kExampleApp), kUsername2, base::TimeDelta::FromDays(3), - InsecureType::kPhished)); - store().AddInsecureCredential(MakeInsecureCredential( - MakeAndroidRealm(kExampleApp), kUsername1, base::TimeDelta::FromDays(4), - InsecureType::kPhished)); + PasswordForm form = MakeSavedPassword(kExampleCom, kUsername1); + AddIssueToForm(&form, InsecureType::kLeaked, base::TimeDelta::FromMinutes(5)); + store().AddLogin(form); + + PasswordForm android_form1 = + MakeSavedAndroidPassword(kExampleApp, kUsername1); + AddIssueToForm(&android_form1, InsecureType::kPhished, + base::TimeDelta::FromDays(4)); + store().AddLogin(android_form1); + + PasswordForm android_form2 = MakeSavedAndroidPassword( + kExampleApp, kUsername2, "Example App", kExampleCom); + AddIssueToForm(&android_form2, InsecureType::kPhished, + base::TimeDelta::FromDays(3)); + store().AddLogin(android_form2); + RunUntilIdle(); // Verify that the compromised credentials match what is stored in the @@ -554,21 +561,23 @@ event_router_observer().events().at(kEventName)->histogram_value); event_router_observer().ClearEvents(); - // Verify that a subsequent call to AddInsecureCredential results in the - // expected event. - store().AddLogin(MakeSavedPassword(kExampleCom, kUsername1)); + // Verify that a subsequent updating the form with a password issue results in + // the expected event. + PasswordForm form = MakeSavedPassword(kExampleCom, kUsername1); + store().AddLogin(form); RunUntilIdle(); - store().AddInsecureCredential( - MakeInsecureCredential(kExampleCom, kUsername1)); + AddIssueToForm(&form, InsecureType::kLeaked); + store().UpdateLogin(form); RunUntilIdle(); EXPECT_EQ(events::PASSWORDS_PRIVATE_ON_COMPROMISED_CREDENTIALS_INFO_CHANGED, event_router_observer().events().at(kEventName)->histogram_value); } TEST_F(PasswordCheckDelegateTest, GetPlaintextInsecurePasswordRejectsWrongId) { - store().AddLogin(MakeSavedPassword(kExampleCom, kUsername1)); - store().AddInsecureCredential( - MakeInsecureCredential(kExampleCom, kUsername1)); + PasswordForm form = MakeSavedPassword(kExampleCom, kUsername1); + AddIssueToForm(&form, InsecureType::kLeaked); + store().AddLogin(form); + RunUntilIdle(); InsecureCredential credential = @@ -584,11 +593,11 @@ TEST_F(PasswordCheckDelegateTest, GetPlaintextInsecurePasswordRejectsWrongSignonRealm) { - store().AddLogin(MakeSavedPassword(kExampleCom, kUsername1)); - store().AddInsecureCredential( - MakeInsecureCredential(kExampleCom, kUsername1)); - RunUntilIdle(); + PasswordForm form = MakeSavedPassword(kExampleCom, kUsername1); + AddIssueToForm(&form, InsecureType::kLeaked); + store().AddLogin(form); + RunUntilIdle(); InsecureCredential credential = std::move(delegate().GetCompromisedCredentials().at(0)); EXPECT_EQ(kExampleCom, credential.signon_realm); @@ -602,9 +611,9 @@ TEST_F(PasswordCheckDelegateTest, GetPlaintextInsecurePasswordRejectsWrongUsername) { - store().AddLogin(MakeSavedPassword(kExampleCom, kUsername1)); - store().AddInsecureCredential( - MakeInsecureCredential(kExampleCom, kUsername1)); + PasswordForm form = MakeSavedPassword(kExampleCom, kUsername1); + AddIssueToForm(&form, InsecureType::kLeaked); + store().AddLogin(form); RunUntilIdle(); InsecureCredential credential = @@ -620,9 +629,9 @@ TEST_F(PasswordCheckDelegateTest, GetPlaintextInsecurePasswordReturnsCorrectPassword) { - store().AddLogin(MakeSavedPassword(kExampleCom, kUsername1, kPassword1)); - store().AddInsecureCredential( - MakeInsecureCredential(kExampleCom, kUsername1)); + PasswordForm form = MakeSavedPassword(kExampleCom, kUsername1, kPassword1); + AddIssueToForm(&form, InsecureType::kLeaked); + store().AddLogin(form); RunUntilIdle(); InsecureCredential credential = @@ -643,9 +652,9 @@ // Test that changing a insecure password fails if the ids don't match. TEST_F(PasswordCheckDelegateTest, ChangeInsecureCredentialIdMismatch) { - store().AddLogin(MakeSavedPassword(kExampleCom, kUsername1)); - store().AddInsecureCredential( - MakeInsecureCredential(kExampleCom, kUsername1)); + PasswordForm form = MakeSavedPassword(kExampleCom, kUsername1); + AddIssueToForm(&form, InsecureType::kLeaked); + store().AddLogin(form); RunUntilIdle(); InsecureCredential credential = @@ -659,15 +668,15 @@ // Test that changing a insecure password fails if the underlying insecure // credential no longer exists. TEST_F(PasswordCheckDelegateTest, ChangeInsecureCredentialStaleData) { - store().AddLogin(MakeSavedPassword(kExampleCom, kUsername1)); - store().AddInsecureCredential( - MakeInsecureCredential(kExampleCom, kUsername1)); + PasswordForm form = MakeSavedPassword(kExampleCom, kUsername1); + AddIssueToForm(&form, InsecureType::kLeaked); + store().AddLogin(form); RunUntilIdle(); InsecureCredential credential = std::move(delegate().GetCompromisedCredentials().at(0)); - store().RemoveLogin(MakeSavedPassword(kExampleCom, kUsername1)); + store().RemoveLogin(form); RunUntilIdle(); EXPECT_FALSE(delegate().ChangeInsecureCredential(credential, "new_pass")); @@ -675,9 +684,9 @@ // Test that changing a insecure password succeeds. TEST_F(PasswordCheckDelegateTest, ChangeInsecureCredentialSuccess) { - store().AddLogin(MakeSavedPassword(kExampleCom, kUsername1, kPassword1)); - store().AddInsecureCredential( - MakeInsecureCredential(kExampleCom, kUsername1)); + PasswordForm form = MakeSavedPassword(kExampleCom, kUsername1); + AddIssueToForm(&form, InsecureType::kLeaked); + store().AddLogin(form); RunUntilIdle(); InsecureCredential credential = @@ -698,11 +707,15 @@ // Test that changing a insecure password removes duplicates from store. TEST_F(PasswordCheckDelegateTest, ChangeInsecureCredentialRemovesDupes) { - store().AddLogin(MakeSavedPassword(kExampleCom, kUsername1, kPassword1)); - store().AddLogin(MakeSavedPassword(kExampleCom, kUsername1, kPassword1, - u"different_element")); - store().AddInsecureCredential( - MakeInsecureCredential(kExampleCom, kUsername1)); + PasswordForm form = MakeSavedPassword(kExampleCom, kUsername1, kPassword1); + AddIssueToForm(&form, InsecureType::kLeaked); + store().AddLogin(form); + + PasswordForm duplicate_form = MakeSavedPassword( + kExampleCom, kUsername1, kPassword1, u"different_element"); + AddIssueToForm(&duplicate_form, InsecureType::kLeaked); + store().AddLogin(duplicate_form); + RunUntilIdle(); EXPECT_EQ(2u, store().stored_passwords().at(kExampleCom).size()); @@ -720,9 +733,9 @@ // Test that removing a insecure password fails if the ids don't match. TEST_F(PasswordCheckDelegateTest, RemoveInsecureCredentialIdMismatch) { - store().AddLogin(MakeSavedPassword(kExampleCom, kUsername1)); - store().AddInsecureCredential( - MakeInsecureCredential(kExampleCom, kUsername1)); + PasswordForm form = MakeSavedPassword(kExampleCom, kUsername1); + AddIssueToForm(&form, InsecureType::kLeaked); + store().AddLogin(form); RunUntilIdle(); InsecureCredential credential = @@ -736,14 +749,14 @@ // Test that removing a insecure password fails if the underlying insecure // credential no longer exists. TEST_F(PasswordCheckDelegateTest, RemoveInsecureCredentialStaleData) { - store().AddLogin(MakeSavedPassword(kExampleCom, kUsername1)); - store().AddInsecureCredential( - MakeInsecureCredential(kExampleCom, kUsername1)); + PasswordForm form = MakeSavedPassword(kExampleCom, kUsername1); + AddIssueToForm(&form, InsecureType::kLeaked); + store().AddLogin(form); RunUntilIdle(); InsecureCredential credential = std::move(delegate().GetCompromisedCredentials().at(0)); - store().RemoveLogin(MakeSavedPassword(kExampleCom, kUsername1)); + store().RemoveLogin(form); RunUntilIdle(); EXPECT_FALSE(delegate().RemoveInsecureCredential(credential)); @@ -751,9 +764,9 @@ // Test that removing a insecure password succeeds. TEST_F(PasswordCheckDelegateTest, RemoveInsecureCredentialSuccess) { - store().AddLogin(MakeSavedPassword(kExampleCom, kUsername1, kPassword1)); - store().AddInsecureCredential( - MakeInsecureCredential(kExampleCom, kUsername1)); + PasswordForm form = MakeSavedPassword(kExampleCom, kUsername1); + AddIssueToForm(&form, InsecureType::kLeaked); + store().AddLogin(form); RunUntilIdle(); InsecureCredential credential = @@ -770,10 +783,11 @@ // saved password. TEST_F(PasswordCheckDelegateTest, OnLeakFoundDoesNotCreateCredential) { identity_test_env().MakeAccountAvailable(kTestEmail); - store().AddLogin(MakeSavedPassword(kExampleCom, kUsername1, kPassword1)); + PasswordForm form = MakeSavedPassword(kExampleCom, kUsername1, kPassword1); + store().AddLogin(form); RunUntilIdle(); delegate().StartPasswordCheck(); - store().RemoveLogin(MakeSavedPassword(kExampleCom, kUsername1, kPassword1)); + store().RemoveLogin(form); RunUntilIdle(); static_cast<BulkLeakCheckDelegateInterface*>(service())->OnFinishedCredential( LeakCheckCredential(kUsername1, kPassword1), IsLeaked(true)); @@ -825,17 +839,20 @@ base::StrCat({kUsername2, u"@email.com"}); PasswordForm form_com_username1 = MakeSavedPassword(kExampleCom, kUsername1, kPassword1); + store().AddLogin(form_com_username1); + PasswordForm form_org_username1 = MakeSavedPassword(kExampleOrg, kUsername1, kPassword1); + store().AddLogin(form_org_username1); + PasswordForm form_com_username2 = MakeSavedPassword(kExampleCom, kUsername2Upper, kPassword2); + store().AddLogin(form_com_username2); + PasswordForm form_org_username2 = MakeSavedPassword(kExampleOrg, kUsername2Email, kPassword2); - - store().AddLogin(form_com_username1); - store().AddLogin(form_org_username1); - store().AddLogin(form_com_username2); store().AddLogin(form_org_username2); + RunUntilIdle(); identity_test_env().MakeAccountAvailable(kTestEmail); @@ -1126,10 +1143,9 @@ } TEST_F(PasswordCheckDelegateTest, WellKnownChangePasswordUrl) { - store().AddLogin(MakeSavedPassword(kExampleCom, kUsername1)); - store().AddInsecureCredential(MakeInsecureCredential( - kExampleCom, kUsername1, base::TimeDelta::FromMinutes(1), - InsecureType::kLeaked)); + PasswordForm form = MakeSavedPassword(kExampleCom, kUsername1); + AddIssueToForm(&form, InsecureType::kLeaked); + store().AddLogin(form); RunUntilIdle(); GURL change_password_url( @@ -1139,19 +1155,18 @@ } TEST_F(PasswordCheckDelegateTest, WellKnownChangePasswordUrl_androidrealm) { - store().AddLogin( - MakeSavedAndroidPassword(kExampleApp, kUsername1, "", kExampleCom)); - store().AddInsecureCredential(MakeInsecureCredential( - MakeAndroidRealm(kExampleApp), kUsername1, base::TimeDelta::FromDays(3), - InsecureType::kPhished)); + PasswordForm form1 = + MakeSavedAndroidPassword(kExampleApp, kUsername1, "", kExampleCom); + AddIssueToForm(&form1, InsecureType::kLeaked); + store().AddLogin(form1); - store().AddLogin(MakeSavedAndroidPassword(kExampleApp, kUsername2, - "Example App", kExampleCom)); - store().AddInsecureCredential(MakeInsecureCredential( - MakeAndroidRealm(kExampleApp), kUsername2, base::TimeDelta::FromDays(3), - InsecureType::kPhished)); + PasswordForm form2 = MakeSavedAndroidPassword(kExampleApp, kUsername2, + "Example App", kExampleCom); + form2.password_issues = form1.password_issues; + store().AddLogin(form2); RunUntilIdle(); + EXPECT_EQ(delegate().GetCompromisedCredentials().at(0).change_password_url, nullptr); EXPECT_EQ(
diff --git a/chrome/browser/extensions/api/passwords_private/passwords_private_delegate_impl_unittest.cc b/chrome/browser/extensions/api/passwords_private/passwords_private_delegate_impl_unittest.cc index 2777d1f..eec28a3 100644 --- a/chrome/browser/extensions/api/passwords_private/passwords_private_delegate_impl_unittest.cc +++ b/chrome/browser/extensions/api/passwords_private/passwords_private_delegate_impl_unittest.cc
@@ -597,11 +597,11 @@ PasswordsPrivateDelegateImpl delegate(&profile_); password_manager::PasswordForm form = CreateSampleForm(); - password_manager::InsecureCredential compromised_credentials; - compromised_credentials.signon_realm = form.signon_realm; - compromised_credentials.username = form.username_value; + form.password_issues = { + {password_manager::InsecureType::kLeaked, + password_manager::InsecurityMetadata(base::Time::FromTimeT(1), + password_manager::IsMuted(false))}}; store_->AddLogin(form); - store_->AddInsecureCredential(compromised_credentials); base::RunLoop().RunUntilIdle(); api::passwords_private::InsecureCredential credential =
diff --git a/chrome/browser/extensions/api/tab_capture/tab_capture_performancetest.cc b/chrome/browser/extensions/api/tab_capture/tab_capture_performancetest.cc index d8f8ffb..a7971c4d 100644 --- a/chrome/browser/extensions/api/tab_capture/tab_capture_performancetest.cc +++ b/chrome/browser/extensions/api/tab_capture/tab_capture_performancetest.cc
@@ -282,8 +282,11 @@ } // namespace -// Using MSAN on ChromeOS causes problems due to its hardware OpenGL library. #if BUILDFLAG(IS_CHROMEOS_ASH) && defined(MEMORY_SANITIZER) +// Using MSAN on ChromeOS causes problems due to its hardware OpenGL library. +#define MAYBE_Performance DISABLED_Performance +#elif defined(OS_MAC) +// flaky on Mac 10.11 See: http://crbug.com/1235358 #define MAYBE_Performance DISABLED_Performance #else #define MAYBE_Performance Performance
diff --git a/chrome/browser/extensions/error_console/error_console_browsertest.cc b/chrome/browser/extensions/error_console/error_console_browsertest.cc index f3d34b0..e15116caa 100644 --- a/chrome/browser/extensions/error_console/error_console_browsertest.cc +++ b/chrome/browser/extensions/error_console/error_console_browsertest.cc
@@ -352,10 +352,8 @@ // Load an extension which, upon visiting any page, first sends out a console // log, and then crashes with a JS TypeError. -// TODO(pthier, v8:11365): Update error message and re-enable test once -// https://crrev.com/c/2979599 is rolled into chromium. IN_PROC_BROWSER_TEST_F(ErrorConsoleBrowserTest, - DISABLED_ContentScriptLogAndRuntimeError) { + ContentScriptLogAndRuntimeError) { const Extension* extension = nullptr; LoadExtensionAndCheckErrors( "content_script_log_and_runtime_error", @@ -398,7 +396,7 @@ CheckRuntimeError(errors[1].get(), extension->id(), script_url, false, // not from incognito "Uncaught TypeError: " - "Cannot set property 'foo' of undefined", + "Cannot set properties of undefined (setting 'foo')", logging::LOG_ERROR, // JS errors are always ERROR level. GetTestURL(), 1u); @@ -468,10 +466,7 @@ // Test that we catch an error when we try to call an API method without // permission. -// TODO(pthier, v8:11365): Update error message and re-enable test once -// https://crrev.com/c/2979599 is rolled into chromium. -IN_PROC_BROWSER_TEST_F(ErrorConsoleBrowserTest, - DISABLED_BadAPIPermissionsRuntimeError) { +IN_PROC_BROWSER_TEST_F(ErrorConsoleBrowserTest, BadAPIPermissionsRuntimeError) { const Extension* extension = nullptr; LoadExtensionAndCheckErrors( "bad_api_permissions_runtime_error", {.ignore_manifest_warnings = false}, @@ -484,11 +479,12 @@ const ErrorList& errors = error_console()->GetErrorsForExtension(extension->id()); - CheckRuntimeError( - errors[0].get(), extension->id(), script_url, - false, // not incognito - "Uncaught TypeError: Cannot read property 'addUrl' of undefined", - logging::LOG_ERROR, extension->GetResourceURL(kBackgroundPageName), 1u); + CheckRuntimeError(errors[0].get(), extension->id(), script_url, + false, // not incognito + "Uncaught TypeError: Cannot read properties of undefined " + "(reading 'addUrl')", + logging::LOG_ERROR, + extension->GetResourceURL(kBackgroundPageName), 1u); const StackTrace& stack_trace = GetStackTraceFromError(errors[0].get()); ASSERT_EQ(1u, stack_trace.size());
diff --git a/chrome/browser/extensions/external_pref_loader.cc b/chrome/browser/extensions/external_pref_loader.cc index aa0418f1..260b09e 100644 --- a/chrome/browser/extensions/external_pref_loader.cc +++ b/chrome/browser/extensions/external_pref_loader.cc
@@ -87,7 +87,7 @@ base::FileEnumerator::FILES); #if defined(OS_WIN) base::FilePath::StringType extension = base::UTF8ToWide(".json"); -#elif defined(OS_POSIX) +#elif defined(OS_POSIX) || defined(OS_FUCHSIA) base::FilePath::StringType extension(".json"); #endif do { @@ -415,7 +415,7 @@ #if defined(OS_WIN) base::WideToASCII( extension_candidate_path.RemoveExtension().BaseName().value()); -#elif defined(OS_POSIX) +#elif defined(OS_POSIX) || defined(OS_FUCHSIA) extension_candidate_path.RemoveExtension().BaseName().value(); #endif
diff --git a/chrome/browser/flag-metadata.json b/chrome/browser/flag-metadata.json index 3c6ad929..59ae710 100644 --- a/chrome/browser/flag-metadata.json +++ b/chrome/browser/flag-metadata.json
@@ -4449,12 +4449,12 @@ { "name": "page-info-discoverability", "owners": [ "eokoyomon", "dullweber" ], - "expiry_milestone": 93 + "expiry_milestone": 95 }, { "name": "page-info-history", - "owners": [ "oroshiba", "dullweber" ], - "expiry_milestone": 93 + "owners": [ "eokoyomon", "dullweber" ], + "expiry_milestone": 95 }, { "name": "page-info-performance-hints", @@ -5692,6 +5692,11 @@ "expiry_milestone": 95 }, { + "name": "username-first-flow-fallback-crowdsourcing", + "owners": [ "kazinova@google.com", "kolos" ], + "expiry_milestone": 98 + }, + { "name": "username-first-flow-filling", "owners": [ "kazinova@google.com", "kolos" ], "expiry_milestone": 95
diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc index 45f36d4..0309ecb 100644 --- a/chrome/browser/flag_descriptions.cc +++ b/chrome/browser/flag_descriptions.cc
@@ -2771,7 +2771,18 @@ const char kUsernameFirstFlowDescription[] = "Support of sending votes on username first flow i.e. login " "flows where a user has to type username first on one page and then " - "password on another page"; + "password on another page. Votes are send on single username forms and are " + "based on user interaction with the save prompt."; + +const char kUsernameFirstFlowFallbackCrowdsourcingName[] = + "Username first flow fallback crowdsourcing"; +const char kUsernameFirstFlowFallbackCrowdsourcingDescription[] = + "Support of sending additional votes on username first flow i.e. login " + "flows where a user has to type username first on one page and then " + "password on another page. These votes are sent on single password forms " + "and contain information whether a 1-password form follows a 1-text form " + "and the value's type(or pattern) in the latter (e.g. email-like, " + "phone-like, arbitrary string)."; const char kUsernameFirstFlowFillingName[] = "Username first flow filling"; const char kUsernameFirstFlowFillingDescription[] =
diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h index aaa2105..5bab29b 100644 --- a/chrome/browser/flag_descriptions.h +++ b/chrome/browser/flag_descriptions.h
@@ -962,6 +962,9 @@ extern const char kUsernameFirstFlowName[]; extern const char kUsernameFirstFlowDescription[]; +extern const char kUsernameFirstFlowFallbackCrowdsourcingName[]; +extern const char kUsernameFirstFlowFallbackCrowdsourcingDescription[]; + extern const char kUsernameFirstFlowFillingName[]; extern const char kUsernameFirstFlowFillingDescription[];
diff --git a/chrome/browser/password_check/android/password_check_manager_unittest.cc b/chrome/browser/password_check/android/password_check_manager_unittest.cc index cc4b9b56..014bf35 100644 --- a/chrome/browser/password_check/android/password_check_manager_unittest.cc +++ b/chrome/browser/password_check/android/password_check_manager_unittest.cc
@@ -21,6 +21,7 @@ #include "chrome/browser/sync/sync_service_factory.h" #include "chrome/test/base/testing_profile.h" #include "components/password_manager/core/browser/bulk_leak_check_service.h" +#include "components/password_manager/core/browser/password_form.h" #include "components/password_manager/core/browser/password_manager_test_utils.h" #include "components/password_manager/core/browser/test_password_store.h" #include "components/password_manager/core/common/password_manager_features.h" @@ -172,14 +173,13 @@ return form; } -InsecureCredential MakeInsecureCredential( - base::StringPiece signon_realm, - base::StringPiece16 username, - base::TimeDelta time_since_creation = base::TimeDelta(), - InsecureType compromise_type = InsecureType::kLeaked) { - return InsecureCredential(std::string(signon_realm), std::u16string(username), - base::Time::Now() - time_since_creation, - compromise_type, password_manager::IsMuted(false)); +void AddIssueToForm(PasswordForm* form, + InsecureType type = InsecureType::kLeaked, + base::TimeDelta time_since_creation = base::TimeDelta()) { + form->password_issues->insert_or_assign( + type, password_manager::InsecurityMetadata( + base::Time::Now() - time_since_creation, + password_manager::IsMuted(false))); } // Creates matcher for a given compromised credential @@ -278,12 +278,13 @@ // and once when the saved password is added. EXPECT_CALL(mock_observer(), OnCompromisedCredentialsChanged(0)).Times(2); InitializeManager(); - store().AddLogin(MakeSavedPassword(kExampleCom, kUsername1)); + PasswordForm form = MakeSavedPassword(kExampleCom, kUsername1); + store().AddLogin(form); RunUntilIdle(); EXPECT_CALL(mock_observer(), OnCompromisedCredentialsChanged(1)); - store().AddInsecureCredential( - MakeInsecureCredential(kExampleCom, kUsername1)); + AddIssueToForm(&form); + store().UpdateLogin(form); RunUntilIdle(); } @@ -348,9 +349,9 @@ TEST_F(PasswordCheckManagerTest, CorrectlyCreatesUIStructForSiteCredential) { InitializeManager(); - store().AddLogin(MakeSavedPassword(kExampleCom, kUsername1)); - store().AddInsecureCredential( - MakeInsecureCredential(kExampleCom, kUsername1)); + PasswordForm form = MakeSavedPassword(kExampleCom, kUsername1); + AddIssueToForm(&form); + store().AddLogin(form); RunUntilIdle(); EXPECT_THAT(manager().GetCompromisedCredentials(), ElementsAre(ExpectCompromisedCredentialForUI( @@ -363,16 +364,18 @@ TEST_F(PasswordCheckManagerTest, CorrectlyCreatesUIStructForAppCredentials) { InitializeManager(); - // A credential without affiliation information. - store().AddLogin(MakeSavedAndroidPassword(kExampleApp, kUsername1)); - // A credential for which affiliation information is known. - store().AddLogin(MakeSavedAndroidPassword(kExampleApp, kUsername2, - "Example App", kExampleCom)); - store().AddInsecureCredential( - MakeInsecureCredential(MakeAndroidRealm(kExampleApp), kUsername1)); - store().AddInsecureCredential( - MakeInsecureCredential(MakeAndroidRealm(kExampleApp), kUsername2)); + // A credential without affiliation information. + PasswordForm form_no_affiliation = + MakeSavedAndroidPassword(kExampleApp, kUsername1); + AddIssueToForm(&form_no_affiliation); + store().AddLogin(form_no_affiliation); + + // A credential for which affiliation information is known. + PasswordForm form_with_affiliation = MakeSavedAndroidPassword( + kExampleApp, kUsername2, "Example App", kExampleCom); + AddIssueToForm(&form_with_affiliation); + store().AddLogin(form_with_affiliation); RunUntilIdle(); EXPECT_THAT( @@ -428,11 +431,11 @@ {password_manager::features::kPasswordScriptsFetching, password_manager::features::kPasswordChangeInSettings}, {}); - store().AddLogin(MakeSavedPassword(kExampleCom, kUsername1)); - store().AddInsecureCredential( - MakeInsecureCredential(kExampleCom, kUsername1)); - + PasswordForm form = MakeSavedPassword(kExampleCom, kUsername1); + AddIssueToForm(&form); + store().AddLogin(form); RunUntilIdle(); + // To have precise metrics, scripts are not requested for users who cannot // start a script, i.e. non-sync users. EXPECT_CALL(fetcher(), RefreshScriptsIfNecessary).Times(0); @@ -458,11 +461,11 @@ {password_manager::features::kPasswordScriptsFetching, password_manager::features::kPasswordChangeInSettings}, {}); - store().AddLogin(MakeSavedPassword(kExampleCom, kUsername1)); - store().AddInsecureCredential( - MakeInsecureCredential(kExampleCom, kUsername1)); - + PasswordForm form = MakeSavedPassword(kExampleCom, kUsername1); + AddIssueToForm(&form); + store().AddLogin(form); RunUntilIdle(); + EXPECT_CALL(fetcher(), RefreshScriptsIfNecessary) .WillOnce(Invoke( [](base::OnceClosure callback) { std::move(callback).Run(); })); @@ -488,10 +491,12 @@ {password_manager::features::kPasswordScriptsFetching, password_manager::features::kPasswordChangeInSettings}, {}); - store().AddLogin(MakeSavedPassword(kExampleCom, u"")); - store().AddInsecureCredential(MakeInsecureCredential(kExampleCom, u"")); + PasswordForm form = MakeSavedPassword(kExampleCom, u""); + AddIssueToForm(&form); + store().AddLogin(form); RunUntilIdle(); + EXPECT_CALL(fetcher(), RefreshScriptsIfNecessary) .WillOnce(Invoke( [](base::OnceClosure callback) { std::move(callback).Run(); })); @@ -521,11 +526,12 @@ kPasswordScriptsFetching}, /*disabled_features=*/{ password_manager::features::kPasswordChangeInSettings}); - store().AddLogin(MakeSavedPassword(kExampleCom, kUsername1)); - store().AddInsecureCredential( - MakeInsecureCredential(kExampleCom, kUsername1)); + PasswordForm form = MakeSavedPassword(kExampleCom, kUsername1); + AddIssueToForm(&form); + store().AddLogin(form); RunUntilIdle(); + EXPECT_CALL(fetcher(), RefreshScriptsIfNecessary) .WillOnce(Invoke( [](base::OnceClosure callback) { std::move(callback).Run(); })); @@ -553,11 +559,12 @@ {password_manager::features::kPasswordScriptsFetching, password_manager::features::kPasswordChangeInSettings}, {}); - store().AddLogin(MakeSavedPassword(kExampleCom, kUsername1)); - store().AddInsecureCredential( - MakeInsecureCredential(kExampleCom, kUsername1)); + PasswordForm form = MakeSavedPassword(kExampleCom, kUsername1); + AddIssueToForm(&form); + store().AddLogin(form); RunUntilIdle(); + EXPECT_CALL(fetcher(), RefreshScriptsIfNecessary) .WillOnce(Invoke( [](base::OnceClosure callback) { std::move(callback).Run(); })); @@ -578,6 +585,7 @@ TEST_F(PasswordCheckManagerTest, UpdatesProgressCorrectly) { identity_test_env().MakeAccountAvailable(kTestEmail); InitializeManager(); + store().AddLogin(MakeSavedPassword(kExampleCom, kUsername1, kPassword1)); store().AddLogin(MakeSavedPassword(kExampleOrg, kUsername1, kPassword1)); store().AddLogin(MakeSavedPassword(kExampleCom, kUsername2));
diff --git a/chrome/browser/password_manager/account_password_store_factory.cc b/chrome/browser/password_manager/account_password_store_factory.cc index af3fc1f..62d48be 100644 --- a/chrome/browser/password_manager/account_password_store_factory.cc +++ b/chrome/browser/password_manager/account_password_store_factory.cc
@@ -28,6 +28,7 @@ #include "components/password_manager/core/browser/password_store.h" #include "components/password_manager/core/browser/password_store_factory_util.h" #include "components/password_manager/core/browser/password_store_impl.h" +#include "components/password_manager/core/browser/password_store_interface.h" #include "components/password_manager/core/common/password_manager_features.h" #include "components/prefs/pref_service.h" #include "content/public/browser/browser_context.h" @@ -48,6 +49,7 @@ #endif // !defined(OS_ANDROID) using password_manager::PasswordStore; +using password_manager::PasswordStoreInterface; #if !defined(OS_ANDROID) @@ -125,10 +127,22 @@ #endif // defined(OS_ANDROID) } +// TODO(crbug.com/1218413): Delete this method when the migration to +// PasswordStoreInterface is complete and rename the method below to +// GetForProfile. // static scoped_refptr<PasswordStore> AccountPasswordStoreFactory::GetForProfile( Profile* profile, ServiceAccessType access_type) { + return base::WrapRefCounted(static_cast<PasswordStore*>( + GetInterfaceForProfile(profile, access_type).get())); +} + +// static +scoped_refptr<PasswordStoreInterface> +AccountPasswordStoreFactory::GetInterfaceForProfile( + Profile* profile, + ServiceAccessType access_type) { if (!base::FeatureList::IsEnabled( password_manager::features::kEnablePasswordsAccountStorage)) { return nullptr; @@ -140,8 +154,9 @@ profile->IsOffTheRecord()) { return nullptr; } - return base::WrapRefCounted(static_cast<password_manager::PasswordStore*>( - GetInstance()->GetServiceForBrowserContext(profile, true).get())); + return base::WrapRefCounted( + static_cast<password_manager::PasswordStoreInterface*>( + GetInstance()->GetServiceForBrowserContext(profile, true).get())); } // static
diff --git a/chrome/browser/password_manager/account_password_store_factory.h b/chrome/browser/password_manager/account_password_store_factory.h index c6baf21..07e9cb3 100644 --- a/chrome/browser/password_manager/account_password_store_factory.h +++ b/chrome/browser/password_manager/account_password_store_factory.h
@@ -9,6 +9,7 @@ #include "base/memory/singleton.h" #include "components/keyed_service/content/refcounted_browser_context_keyed_service_factory.h" #include "components/keyed_service/core/service_access_type.h" +#include "components/password_manager/core/browser/password_store_interface.h" class Profile; @@ -25,6 +26,9 @@ Profile* profile, ServiceAccessType set); + static scoped_refptr<password_manager::PasswordStoreInterface> + GetInterfaceForProfile(Profile* profile, ServiceAccessType set); + static AccountPasswordStoreFactory* GetInstance(); private:
diff --git a/chrome/browser/password_manager/android/BUILD.gn b/chrome/browser/password_manager/android/BUILD.gn index bf0108e..2b571b9 100644 --- a/chrome/browser/password_manager/android/BUILD.gn +++ b/chrome/browser/password_manager/android/BUILD.gn
@@ -8,8 +8,10 @@ deps = [ ":java_resources", "//base:base_java", + "//chrome/browser/device_reauth/android:java", "//chrome/browser/settings:java", "//components/browser_ui/settings/android:java", + "//components/device_reauth:device_reauth_java_enums", "//components/password_manager/core/browser:password_manager_java_enums", "//components/sync/protocol:protocol_java", "//content/public/android:content_java", @@ -20,10 +22,8 @@ "//ui/android:ui_no_recycler_view_java", "//url:gurl_java", ] - srcjar_deps = [ ":password_manager_android_java_enums_srcjar" ] sources = [ - "java/src/org/chromium/chrome/browser/password_manager/BiometricAuthenticatorBridge.java", "java/src/org/chromium/chrome/browser/password_manager/ConfirmationDialogHelper.java", "java/src/org/chromium/chrome/browser/password_manager/PasswordManagerHelper.java", "java/src/org/chromium/chrome/browser/password_manager/PasswordScriptsFetcherBridge.java", @@ -42,7 +42,6 @@ generate_jni("jni_headers") { visibility = [ "//chrome/browser" ] sources = [ - "java/src/org/chromium/chrome/browser/password_manager/BiometricAuthenticatorBridge.java", "java/src/org/chromium/chrome/browser/password_manager/PasswordScriptsFetcherBridge.java", "java/src/org/chromium/chrome/browser/password_manager/PasswordStoreAndroidBackendBridgeImpl.java", "java/src/org/chromium/chrome/browser/password_manager/PasswordStoreBridge.java", @@ -75,7 +74,3 @@ "//components/browser_ui/styles/android:java_resources", ] } - -java_cpp_enum("password_manager_android_java_enums_srcjar") { - sources = [ "biometric_authenticator_bridge.h" ] -}
diff --git a/chrome/browser/password_manager/android/DEPS b/chrome/browser/password_manager/android/DEPS index ca4acba..3136276 100644 --- a/chrome/browser/password_manager/android/DEPS +++ b/chrome/browser/password_manager/android/DEPS
@@ -1,4 +1,5 @@ include_rules = [ "-content/public/android/java", "+content/public/android/java/src/org/chromium/content_public", -] \ No newline at end of file + "+components/device_reauth", +]
diff --git a/chrome/browser/password_manager/android/account_chooser_dialog_android.cc b/chrome/browser/password_manager/android/account_chooser_dialog_android.cc index c01f576a..7d07e8b 100644 --- a/chrome/browser/password_manager/android/account_chooser_dialog_android.cc +++ b/chrome/browser/password_manager/android/account_chooser_dialog_android.cc
@@ -18,7 +18,7 @@ #include "chrome/browser/ui/passwords/account_avatar_fetcher.h" #include "chrome/browser/ui/passwords/manage_passwords_view_utils.h" #include "chrome/grit/generated_resources.h" -#include "components/password_manager/core/browser/biometric_authenticator.h" +#include "components/device_reauth/biometric_authenticator.h" #include "components/password_manager/core/browser/password_bubble_experiment.h" #include "components/password_manager/core/browser/password_manager_constants.h" #include "components/password_manager/core/browser/password_manager_metrics_util.h" @@ -123,7 +123,7 @@ AccountChooserDialogAndroid::~AccountChooserDialogAndroid() { if (authenticator_) { authenticator_->Cancel( - password_manager::BiometricAuthRequester::kAccountChooserDialog); + device_reauth::BiometricAuthRequester::kAccountChooserDialog); } // |dialog_jobject_| can be null in tests or if the dialog could not @@ -242,12 +242,12 @@ return true; } - scoped_refptr<password_manager::BiometricAuthenticator> authenticator = + scoped_refptr<device_reauth::BiometricAuthenticator> authenticator = client_->GetBiometricAuthenticator(); if (password_manager_util::CanUseBiometricAuth(authenticator.get())) { authenticator_ = std::move(authenticator); authenticator_->Authenticate( - password_manager::BiometricAuthRequester::kAccountChooserDialog, + device_reauth::BiometricAuthRequester::kAccountChooserDialog, base::BindOnce(&AccountChooserDialogAndroid::OnReauthCompleted, base::Unretained(this), index)); // The credential handling will only happen after the authentication
diff --git a/chrome/browser/password_manager/android/account_chooser_dialog_android.h b/chrome/browser/password_manager/android/account_chooser_dialog_android.h index b32f45b..07ea1e7 100644 --- a/chrome/browser/password_manager/android/account_chooser_dialog_android.h +++ b/chrome/browser/password_manager/android/account_chooser_dialog_android.h
@@ -12,7 +12,7 @@ #include "base/android/jni_android.h" #include "base/macros.h" #include "chrome/browser/ui/passwords/manage_passwords_state.h" -#include "components/password_manager/core/browser/biometric_authenticator.h" +#include "components/device_reauth/biometric_authenticator.h" #include "components/password_manager/core/browser/password_manager_metrics_util.h" #include "content/public/browser/web_contents_observer.h" @@ -86,7 +86,7 @@ // Authenticator used to trigger a biometric re-auth before passing the // credential to the site. - scoped_refptr<password_manager::BiometricAuthenticator> authenticator_; + scoped_refptr<device_reauth::BiometricAuthenticator> authenticator_; ManagePasswordsState passwords_data_; url::Origin origin_;
diff --git a/chrome/browser/password_manager/android/account_chooser_dialog_android_unittest.cc b/chrome/browser/password_manager/android/account_chooser_dialog_android_unittest.cc index 8408041..1803b37 100644 --- a/chrome/browser/password_manager/android/account_chooser_dialog_android_unittest.cc +++ b/chrome/browser/password_manager/android/account_chooser_dialog_android_unittest.cc
@@ -13,8 +13,8 @@ #include "chrome/browser/password_manager/chrome_password_manager_client.h" #include "chrome/browser/profiles/profile.h" #include "chrome/test/base/chrome_render_view_host_test_harness.h" -#include "components/password_manager/core/browser/biometric_authenticator.h" -#include "components/password_manager/core/browser/mock_biometric_authenticator.h" +#include "components/device_reauth/biometric_authenticator.h" +#include "components/device_reauth/mock_biometric_authenticator.h" #include "components/password_manager/core/browser/password_form.h" #include "components/password_manager/core/browser/password_manager_metrics_util.h" #include "components/password_manager/core/browser/password_manager_test_utils.h" @@ -29,9 +29,9 @@ namespace { using base::test::RunOnceCallback; -using password_manager::BiometricAuthRequester; -using password_manager::BiometricsAvailability; -using password_manager::MockBiometricAuthenticator; +using device_reauth::BiometricAuthRequester; +using device_reauth::BiometricsAvailability; +using device_reauth::MockBiometricAuthenticator; using testing::_; using testing::Eq; using testing::Pointee; @@ -68,7 +68,7 @@ class MockPasswordManagerClient : public password_manager::StubPasswordManagerClient { public: - MOCK_METHOD(scoped_refptr<password_manager::BiometricAuthenticator>, + MOCK_METHOD(scoped_refptr<device_reauth::BiometricAuthenticator>, GetBiometricAuthenticator, (), (override));
diff --git a/chrome/browser/password_manager/android/all_passwords_bottom_sheet_controller.cc b/chrome/browser/password_manager/android/all_passwords_bottom_sheet_controller.cc index 6892557..a7a57580 100644 --- a/chrome/browser/password_manager/android/all_passwords_bottom_sheet_controller.cc +++ b/chrome/browser/password_manager/android/all_passwords_bottom_sheet_controller.cc
@@ -8,9 +8,9 @@ #include "chrome/browser/password_manager/chrome_password_manager_client.h" #include "chrome/browser/ui/android/passwords/all_passwords_bottom_sheet_view.h" #include "chrome/browser/ui/android/passwords/all_passwords_bottom_sheet_view_impl.h" +#include "components/device_reauth/biometric_authenticator.h" #include "components/password_manager/content/browser/content_password_manager_driver.h" #include "components/password_manager/content/browser/content_password_manager_driver_factory.h" -#include "components/password_manager/core/browser/biometric_authenticator.h" #include "components/password_manager/core/browser/password_form.h" #include "components/password_manager/core/browser/password_manager_client.h" #include "components/password_manager/core/browser/password_manager_driver.h" @@ -63,7 +63,7 @@ AllPasswordsBottomSheetController::~AllPasswordsBottomSheetController() { if (authenticator_) { authenticator_->Cancel( - password_manager::BiometricAuthRequester::kAllPasswordsList); + device_reauth::BiometricAuthRequester::kAllPasswordsList); } } @@ -98,12 +98,12 @@ // WebContents. And AllPasswordBottomSheetController is owned by // PasswordAccessoryController. DCHECK(client_); - scoped_refptr<password_manager::BiometricAuthenticator> authenticator = + scoped_refptr<device_reauth::BiometricAuthenticator> authenticator = client_->GetBiometricAuthenticator(); if (password_manager_util::CanUseBiometricAuth(authenticator.get())) { authenticator_ = std::move(authenticator); authenticator_->Authenticate( - password_manager::BiometricAuthRequester::kAllPasswordsList, + device_reauth::BiometricAuthRequester::kAllPasswordsList, base::BindOnce(&AllPasswordsBottomSheetController::OnReauthCompleted, base::Unretained(this), password)); return;
diff --git a/chrome/browser/password_manager/android/all_passwords_bottom_sheet_controller.h b/chrome/browser/password_manager/android/all_passwords_bottom_sheet_controller.h index 63e268c..ff288b7 100644 --- a/chrome/browser/password_manager/android/all_passwords_bottom_sheet_controller.h +++ b/chrome/browser/password_manager/android/all_passwords_bottom_sheet_controller.h
@@ -8,7 +8,7 @@ #include "base/callback.h" #include "base/types/pass_key.h" #include "components/autofill/core/common/mojom/autofill_types.mojom-forward.h" -#include "components/password_manager/core/browser/biometric_authenticator.h" +#include "components/device_reauth/biometric_authenticator.h" #include "components/password_manager/core/browser/password_store_consumer.h" #include "ui/gfx/native_widget_types.h" #include "url/gurl.h" @@ -98,7 +98,7 @@ base::WeakPtr<password_manager::PasswordManagerDriver> driver_; // Authenticator used to trigger a biometric re-auth before password filling. - scoped_refptr<password_manager::BiometricAuthenticator> authenticator_; + scoped_refptr<device_reauth::BiometricAuthenticator> authenticator_; // The type of field on which the user is focused, e.g. PASSWORD. autofill::mojom::FocusedFieldType focused_field_type_;
diff --git a/chrome/browser/password_manager/android/all_passwords_bottom_sheet_controller_unittest.cc b/chrome/browser/password_manager/android/all_passwords_bottom_sheet_controller_unittest.cc index 19e5a025..e487340b 100644 --- a/chrome/browser/password_manager/android/all_passwords_bottom_sheet_controller_unittest.cc +++ b/chrome/browser/password_manager/android/all_passwords_bottom_sheet_controller_unittest.cc
@@ -13,8 +13,8 @@ #include "chrome/browser/ui/android/passwords/all_passwords_bottom_sheet_view.h" #include "chrome/test/base/testing_profile.h" #include "components/autofill/core/common/mojom/autofill_types.mojom-forward.h" -#include "components/password_manager/core/browser/biometric_authenticator.h" -#include "components/password_manager/core/browser/mock_biometric_authenticator.h" +#include "components/device_reauth/biometric_authenticator.h" +#include "components/device_reauth/mock_biometric_authenticator.h" #include "components/password_manager/core/browser/origin_credential_store.h" #include "components/password_manager/core/browser/password_form.h" #include "components/password_manager/core/browser/password_manager_test_utils.h" @@ -36,9 +36,9 @@ using autofill::mojom::FocusedFieldType; using base::test::RunOnceCallback; -using password_manager::BiometricAuthRequester; -using password_manager::BiometricsAvailability; -using password_manager::MockBiometricAuthenticator; +using device_reauth::BiometricAuthRequester; +using device_reauth::BiometricsAvailability; +using device_reauth::MockBiometricAuthenticator; using password_manager::PasswordForm; using password_manager::TestPasswordStore; using password_manager::UiCredential; @@ -82,7 +82,7 @@ public: MOCK_METHOD(void, OnPasswordSelected, (const std::u16string&), (override)); - MOCK_METHOD(scoped_refptr<password_manager::BiometricAuthenticator>, + MOCK_METHOD(scoped_refptr<device_reauth::BiometricAuthenticator>, GetBiometricAuthenticator, (), (override)); @@ -157,7 +157,7 @@ return *mock_pwd_manager_client_.get(); } - scoped_refptr<password_manager::MockBiometricAuthenticator> authenticator() { + scoped_refptr<MockBiometricAuthenticator> authenticator() { return mock_authenticator_; }
diff --git a/chrome/browser/password_manager/android/password_accessory_controller_impl.cc b/chrome/browser/password_manager/android/password_accessory_controller_impl.cc index a80381a..09b32b4 100644 --- a/chrome/browser/password_manager/android/password_accessory_controller_impl.cc +++ b/chrome/browser/password_manager/android/password_accessory_controller_impl.cc
@@ -36,10 +36,10 @@ #include "components/autofill/core/common/autofill_util.h" #include "components/autofill/core/common/mojom/autofill_types.mojom-shared.h" #include "components/autofill/core/common/password_generation_util.h" +#include "components/device_reauth/biometric_authenticator.h" #include "components/password_manager/content/browser/content_password_manager_driver.h" #include "components/password_manager/content/browser/content_password_manager_driver_factory.h" #include "components/password_manager/core/browser/android_affiliation/affiliation_utils.h" -#include "components/password_manager/core/browser/biometric_authenticator.h" #include "components/password_manager/core/browser/credential_cache.h" #include "components/password_manager/core/browser/origin_credential_store.h" #include "components/password_manager/core/browser/password_manager_client.h" @@ -114,7 +114,7 @@ PasswordAccessoryControllerImpl::~PasswordAccessoryControllerImpl() { if (authenticator_) { authenticator_->Cancel( - password_manager::BiometricAuthRequester::kFallbackSheet); + device_reauth::BiometricAuthRequester::kFallbackSheet); } } @@ -222,7 +222,7 @@ // |this| cancels the authentication when it is destroyed if one is ongoing, // which resets the callback, so it's safe to use base::Unretained(this) here. authenticator_->Authenticate( - password_manager::BiometricAuthRequester::kFallbackSheet, + device_reauth::BiometricAuthRequester::kFallbackSheet, base::BindOnce(&PasswordAccessoryControllerImpl::OnReauthCompleted, base::Unretained(this), selection)); } @@ -524,7 +524,7 @@ if (!selection.is_obfuscated()) return false; - scoped_refptr<password_manager::BiometricAuthenticator> authenticator = + scoped_refptr<device_reauth::BiometricAuthenticator> authenticator = password_client_->GetBiometricAuthenticator(); return password_manager_util::CanUseBiometricAuth(authenticator.get()); }
diff --git a/chrome/browser/password_manager/android/password_accessory_controller_impl.h b/chrome/browser/password_manager/android/password_accessory_controller_impl.h index 9d0cc87..5804b1e 100644 --- a/chrome/browser/password_manager/android/password_accessory_controller_impl.h +++ b/chrome/browser/password_manager/android/password_accessory_controller_impl.h
@@ -191,7 +191,7 @@ // The authenticator used to trigger a biometric re-auth before filling. // null, if there is no ongoing authentication. - scoped_refptr<password_manager::BiometricAuthenticator> authenticator_; + scoped_refptr<device_reauth::BiometricAuthenticator> authenticator_; // Information about the currently focused field. This is the only place // allowed to store frame-specific data. If a new field is focused or focus is
diff --git a/chrome/browser/password_manager/android/password_accessory_controller_impl_unittest.cc b/chrome/browser/password_manager/android/password_accessory_controller_impl_unittest.cc index 3fb63c4..5970fbf 100644 --- a/chrome/browser/password_manager/android/password_accessory_controller_impl_unittest.cc +++ b/chrome/browser/password_manager/android/password_accessory_controller_impl_unittest.cc
@@ -31,11 +31,11 @@ #include "components/autofill/core/common/autofill_features.h" #include "components/autofill/core/common/password_generation_util.h" #include "components/autofill/core/common/signatures.h" +#include "components/device_reauth/biometric_authenticator.h" +#include "components/device_reauth/mock_biometric_authenticator.h" #include "components/password_manager/content/browser/content_password_manager_driver.h" #include "components/password_manager/content/browser/content_password_manager_driver_factory.h" -#include "components/password_manager/core/browser/biometric_authenticator.h" #include "components/password_manager/core/browser/credential_cache.h" -#include "components/password_manager/core/browser/mock_biometric_authenticator.h" #include "components/password_manager/core/browser/mock_password_store.h" #include "components/password_manager/core/browser/origin_credential_store.h" #include "components/password_manager/core/browser/password_form.h" @@ -64,9 +64,11 @@ using autofill::UserInfo; using autofill::mojom::FocusedFieldType; using base::test::RunOnceCallback; +using device_reauth::BiometricAuthRequester; +using device_reauth::BiometricsAvailability; +using device_reauth::MockBiometricAuthenticator; using password_manager::CreateEntry; using password_manager::CredentialCache; -using password_manager::MockBiometricAuthenticator; using password_manager::MockPasswordStore; using password_manager::OriginCredentialStore; using password_manager::PasswordForm; @@ -131,7 +133,7 @@ (const GURL&), (const, override)); - MOCK_METHOD(scoped_refptr<password_manager::BiometricAuthenticator>, + MOCK_METHOD(scoped_refptr<device_reauth::BiometricAuthenticator>, GetBiometricAuthenticator, (), (override)); @@ -927,7 +929,7 @@ EXPECT_CALL(*password_client(), GetBiometricAuthenticator) .WillOnce(Return(mock_authenticator_)); EXPECT_CALL(*mock_authenticator_.get(), CanAuthenticate) - .WillOnce(Return(password_manager::BiometricsAvailability::kNotEnrolled)); + .WillOnce(Return(BiometricsAvailability::kNotEnrolled)); EXPECT_CALL(*driver(), FillIntoFocusedField(selected_field.is_obfuscated(), Eq(selected_field.display_text()))); @@ -956,10 +958,9 @@ ON_CALL(*password_client(), GetBiometricAuthenticator) .WillByDefault(Return(mock_authenticator_)); EXPECT_CALL(*mock_authenticator_.get(), CanAuthenticate) - .WillOnce(Return(password_manager::BiometricsAvailability::kAvailable)); - EXPECT_CALL( - *mock_authenticator_.get(), - Authenticate(password_manager::BiometricAuthRequester::kFallbackSheet, _)) + .WillOnce(Return(BiometricsAvailability::kAvailable)); + EXPECT_CALL(*mock_authenticator_.get(), + Authenticate(BiometricAuthRequester::kFallbackSheet, _)) .WillOnce(RunOnceCallback<1>(/*auth_succeeded=*/true)); EXPECT_CALL(*driver(), FillIntoFocusedField(selected_field.is_obfuscated(), @@ -989,10 +990,9 @@ ON_CALL(*password_client(), GetBiometricAuthenticator) .WillByDefault(Return(mock_authenticator_)); EXPECT_CALL(*mock_authenticator_.get(), CanAuthenticate) - .WillOnce(Return(password_manager::BiometricsAvailability::kAvailable)); - EXPECT_CALL( - *mock_authenticator_.get(), - Authenticate(password_manager::BiometricAuthRequester::kFallbackSheet, _)) + .WillOnce(Return(BiometricsAvailability::kAvailable)); + EXPECT_CALL(*mock_authenticator_.get(), + Authenticate(BiometricAuthRequester::kFallbackSheet, _)) .WillOnce(RunOnceCallback<1>(/*auth_succeeded=*/false)); EXPECT_CALL(*driver(), FillIntoFocusedField(selected_field.is_obfuscated(), @@ -1023,10 +1023,9 @@ ON_CALL(*password_client(), GetBiometricAuthenticator) .WillByDefault(Return(mock_authenticator_)); EXPECT_CALL(*mock_authenticator_.get(), CanAuthenticate) - .WillOnce(Return(password_manager::BiometricsAvailability::kAvailable)); + .WillOnce(Return(BiometricsAvailability::kAvailable)); EXPECT_CALL(*mock_authenticator_.get(), - Authenticate( - password_manager::BiometricAuthRequester::kFallbackSheet, _)); + Authenticate(BiometricAuthRequester::kFallbackSheet, _)); EXPECT_CALL(*driver(), FillIntoFocusedField(selected_field.is_obfuscated(), @@ -1035,7 +1034,7 @@ controller()->OnFillingTriggered(autofill::FieldGlobalId(), selected_field); EXPECT_CALL(*mock_authenticator_.get(), - Cancel(password_manager::BiometricAuthRequester::kFallbackSheet)); + Cancel(BiometricAuthRequester::kFallbackSheet)); } class PasswordAccessoryControllerWithTestStoreTest
diff --git a/chrome/browser/password_manager/chrome_password_manager_client.cc b/chrome/browser/password_manager/chrome_password_manager_client.cc index f9e4ebd..ac47cfa 100644 --- a/chrome/browser/password_manager/chrome_password_manager_client.cc +++ b/chrome/browser/password_manager/chrome_password_manager_client.cc
@@ -25,10 +25,10 @@ #include "build/buildflag.h" #include "build/chromeos_buildflags.h" #include "chrome/browser/browser_process.h" +#include "chrome/browser/device_reauth/chrome_biometric_authenticator.h" #include "chrome/browser/favicon/favicon_service_factory.h" #include "chrome/browser/metrics/chrome_metrics_service_accessor.h" #include "chrome/browser/password_manager/account_password_store_factory.h" -#include "chrome/browser/password_manager/chrome_biometric_authenticator.h" #include "chrome/browser/password_manager/field_info_manager_factory.h" #include "chrome/browser/password_manager/password_reuse_manager_factory.h" #include "chrome/browser/password_manager/password_store_factory.h" @@ -471,7 +471,7 @@ autofill_assistant::UIState::kShown; } -scoped_refptr<password_manager::BiometricAuthenticator> +scoped_refptr<device_reauth::BiometricAuthenticator> ChromePasswordManagerClient::GetBiometricAuthenticator() { #if defined(OS_ANDROID) if (!biometric_authenticator_) {
diff --git a/chrome/browser/password_manager/chrome_password_manager_client.h b/chrome/browser/password_manager/chrome_password_manager_client.h index 0561684d..f8bada8 100644 --- a/chrome/browser/password_manager/chrome_password_manager_client.h +++ b/chrome/browser/password_manager/chrome_password_manager_client.h
@@ -129,7 +129,7 @@ // Returns a pointer to the BiometricAuthenticator which is created on demand. // This is currently only implemented for Android, on all other platforms this // will always be null. - scoped_refptr<password_manager::BiometricAuthenticator> + scoped_refptr<device_reauth::BiometricAuthenticator> GetBiometricAuthenticator() override; void GeneratePassword( autofill::password_generation::PasswordGenerationType type) override; @@ -373,8 +373,7 @@ generated_password_saved_message_delegate_; #endif // defined(OS_ANDROID) - scoped_refptr<password_manager::BiometricAuthenticator> - biometric_authenticator_; + scoped_refptr<device_reauth::BiometricAuthenticator> biometric_authenticator_; password_manager::ContentPasswordManagerDriverFactory* driver_factory_;
diff --git a/chrome/browser/password_manager/password_store_factory.cc b/chrome/browser/password_manager/password_store_factory.cc index a6c7740..4013ea1 100644 --- a/chrome/browser/password_manager/password_store_factory.cc +++ b/chrome/browser/password_manager/password_store_factory.cc
@@ -43,18 +43,30 @@ #endif using password_manager::PasswordStore; +using password_manager::PasswordStoreInterface; +// TODO(crbug.com/1218413): Delete this method when the migration to +// PasswordStoreInterface is complete and rename the method below to +// GetForProfile. // static scoped_refptr<PasswordStore> PasswordStoreFactory::GetForProfile( Profile* profile, ServiceAccessType access_type) { + return base::WrapRefCounted(static_cast<PasswordStore*>( + GetInterfaceForProfile(profile, access_type).get())); +} + +// static +scoped_refptr<PasswordStoreInterface> +PasswordStoreFactory::GetInterfaceForProfile(Profile* profile, + ServiceAccessType access_type) { // |profile| gets always redirected to a non-Incognito profile below, so // Incognito & IMPLICIT_ACCESS means that incognito browsing session would // result in traces in the normal profile without the user knowing it. if (access_type == ServiceAccessType::IMPLICIT_ACCESS && profile->IsOffTheRecord()) return nullptr; - return base::WrapRefCounted(static_cast<password_manager::PasswordStore*>( + return base::WrapRefCounted(static_cast<PasswordStoreInterface*>( GetInstance()->GetServiceForBrowserContext(profile, true).get())); }
diff --git a/chrome/browser/password_manager/password_store_factory.h b/chrome/browser/password_manager/password_store_factory.h index 5c28463..5a2e0cd 100644 --- a/chrome/browser/password_manager/password_store_factory.h +++ b/chrome/browser/password_manager/password_store_factory.h
@@ -10,6 +10,7 @@ #include "build/build_config.h" #include "components/keyed_service/content/refcounted_browser_context_keyed_service_factory.h" #include "components/keyed_service/core/service_access_type.h" +#include "components/password_manager/core/browser/password_store_interface.h" class Profile; @@ -26,6 +27,9 @@ Profile* profile, ServiceAccessType set); + static scoped_refptr<password_manager::PasswordStoreInterface> + GetInterfaceForProfile(Profile* profile, ServiceAccessType set); + static PasswordStoreFactory* GetInstance(); // Called by the PasswordModelTypeController whenever there is a possibility
diff --git a/chrome/browser/policy/BUILD.gn b/chrome/browser/policy/BUILD.gn index 06f606c..fd96ddc 100644 --- a/chrome/browser/policy/BUILD.gn +++ b/chrome/browser/policy/BUILD.gn
@@ -61,6 +61,8 @@ sources += [ "policy_test_utils.cc", "policy_test_utils.h", + "url_blocking_policy_test_utils.cc", + "url_blocking_policy_test_utils.h", ] deps += [
diff --git a/chrome/browser/policy/policy_test_utils.cc b/chrome/browser/policy/policy_test_utils.cc index ea67256..d6e284f 100644 --- a/chrome/browser/policy/policy_test_utils.cc +++ b/chrome/browser/policy/policy_test_utils.cc
@@ -61,39 +61,6 @@ InProcessBrowserTest::SetUp(); } -void PolicyTest::CheckURLIsBlockedInWebContents( - content::WebContents* web_contents, - const GURL& url) { - EXPECT_EQ(url, web_contents->GetURL()); - - std::u16string blocked_page_title; - if (url.has_host()) { - blocked_page_title = base::UTF8ToUTF16(url.host()); - } else { - // Local file paths show the full URL. - blocked_page_title = base::UTF8ToUTF16(url.spec()); - } - EXPECT_EQ(blocked_page_title, web_contents->GetTitle()); - - // Verify that the expected error page is being displayed. - bool result = false; - EXPECT_TRUE(content::ExecuteScriptAndExtractBool( - web_contents, - "var textContent = document.body.textContent;" - "var hasError = textContent.indexOf('ERR_BLOCKED_BY_ADMINISTRATOR') >= 0;" - "domAutomationController.send(hasError);", - &result)); - EXPECT_TRUE(result); -} - -void PolicyTest::CheckURLIsBlocked(Browser* browser, const std::string& spec) { - GURL url(spec); - ui_test_utils::NavigateToURL(browser, url); - content::WebContents* contents = - browser->tab_strip_model()->GetActiveWebContents(); - PolicyTest::CheckURLIsBlockedInWebContents(contents, url); -} - void PolicyTest::SetUpInProcessBrowserTestFixture() { base::CommandLine::ForCurrentProcess()->AppendSwitch("noerrdialogs"); provider_.SetDefaultReturns(true /* is_initialization_complete_return */,
diff --git a/chrome/browser/policy/policy_test_utils.h b/chrome/browser/policy/policy_test_utils.h index e5b60665..50a99e0 100644 --- a/chrome/browser/policy/policy_test_utils.h +++ b/chrome/browser/policy/policy_test_utils.h
@@ -10,13 +10,17 @@ #include "ash/public/cpp/keyboard/keyboard_types.h" #include "base/files/file_path.h" #include "build/chromeos_buildflags.h" -#include "chrome/browser/ui/browser.h" -#include "chrome/test/base/in_process_browser_test.h" +#include "chrome/test/base/chrome_test_utils.h" #include "components/policy/core/common/mock_configuration_policy_provider.h" #include "components/security_interstitials/core/controller_client.h" -#include "content/public/browser/web_contents.h" #include "url/gurl.h" +class Browser; + +namespace content { +class WebContents; +} // namespace content + namespace extensions { class Extension; } // namespace extensions @@ -29,7 +33,7 @@ void GetTestDataDirectory(base::FilePath* test_data_directory); -class PolicyTest : public InProcessBrowserTest { +class PolicyTest : public PlatformBrowserTest { public: // The possibilities for a boolean policy. enum class BooleanPolicy { @@ -50,13 +54,6 @@ void SetUpCommandLine(base::CommandLine* command_line) override; - // Verifies that access to the given url |spec| is blocked. - void CheckURLIsBlockedInWebContents(content::WebContents* web_contents, - const GURL& url); - - // Verifies that access to the given url |spec| is blocked. - void CheckURLIsBlocked(Browser* browser, const std::string& spec); - void SetScreenshotPolicy(bool enabled); void SetRequireCTForTesting(bool required);
diff --git a/chrome/browser/policy/test/developer_tools_policy_browsertest.cc b/chrome/browser/policy/test/developer_tools_policy_browsertest.cc index 6fe949b..afbabe9 100644 --- a/chrome/browser/policy/test/developer_tools_policy_browsertest.cc +++ b/chrome/browser/policy/test/developer_tools_policy_browsertest.cc
@@ -8,6 +8,7 @@ #include "chrome/browser/devtools/devtools_window_testing.h" #include "chrome/browser/policy/policy_test_utils.h" #include "chrome/browser/profiles/profile.h" +#include "chrome/browser/ui/browser.h" #include "chrome/browser/ui/browser_commands.h" #include "chrome/browser/ui/tabs/tab_strip_model.h" #include "chrome/common/url_constants.h"
diff --git a/chrome/browser/policy/test/hide_webstore_icon_policy_browsertest.cc b/chrome/browser/policy/test/hide_webstore_icon_policy_browsertest.cc index 4a1e62d..f3f1ab2 100644 --- a/chrome/browser/policy/test/hide_webstore_icon_policy_browsertest.cc +++ b/chrome/browser/policy/test/hide_webstore_icon_policy_browsertest.cc
@@ -5,6 +5,7 @@ #include "base/command_line.h" #include "build/chromeos_buildflags.h" #include "chrome/browser/policy/policy_test_utils.h" +#include "chrome/browser/ui/browser.h" #include "chrome/browser/ui/tabs/tab_strip_model.h" #include "chrome/common/url_constants.h" #include "chrome/grit/locale_settings.h"
diff --git a/chrome/browser/policy/test/native_messaging_policy_browsertest.cc b/chrome/browser/policy/test/native_messaging_policy_browsertest.cc index 979239b..2312fce 100644 --- a/chrome/browser/policy/test/native_messaging_policy_browsertest.cc +++ b/chrome/browser/policy/test/native_messaging_policy_browsertest.cc
@@ -6,6 +6,7 @@ #include "chrome/browser/extensions/api/chrome_extensions_api_client.h" #include "chrome/browser/policy/policy_test_utils.h" #include "chrome/browser/profiles/profile.h" +#include "chrome/browser/ui/browser.h" #include "chrome/test/base/in_process_browser_test.h" #include "chrome/test/base/ui_test_utils.h" #include "components/policy/core/common/policy_map.h"
diff --git a/chrome/browser/policy/test/note_taking_on_lock_screen_policy_browsertest.cc b/chrome/browser/policy/test/note_taking_on_lock_screen_policy_browsertest.cc index 8c8aed4..6582c6c8 100644 --- a/chrome/browser/policy/test/note_taking_on_lock_screen_policy_browsertest.cc +++ b/chrome/browser/policy/test/note_taking_on_lock_screen_policy_browsertest.cc
@@ -10,6 +10,7 @@ #include "chrome/browser/chromeos/note_taking_helper.h" #include "chrome/browser/policy/policy_test_utils.h" #include "chrome/browser/profiles/profile.h" +#include "chrome/browser/ui/browser.h" #include "chrome/test/base/in_process_browser_test.h" #include "chrome/test/base/ui_test_utils.h" #include "components/policy/core/common/policy_map.h"
diff --git a/chrome/browser/policy/test/policy_test_google_browsertest.cc b/chrome/browser/policy/test/policy_test_google_browsertest.cc index 2199c8f..1927908 100644 --- a/chrome/browser/policy/test/policy_test_google_browsertest.cc +++ b/chrome/browser/policy/test/policy_test_google_browsertest.cc
@@ -10,6 +10,7 @@ #include "base/test/bind.h" #include "base/values.h" #include "chrome/browser/policy/policy_test_utils.h" +#include "chrome/browser/ui/browser.h" #include "chrome/browser/ui/tabs/tab_strip_model.h" #include "chrome/common/net/safe_search_util.h" #include "chrome/test/base/in_process_browser_test.h"
diff --git a/chrome/browser/policy/test/proxy_policies_browsertest.cc b/chrome/browser/policy/test/proxy_policies_browsertest.cc index e822ec0..11ab2af 100644 --- a/chrome/browser/policy/test/proxy_policies_browsertest.cc +++ b/chrome/browser/policy/test/proxy_policies_browsertest.cc
@@ -9,6 +9,7 @@ #include "chrome/browser/policy/policy_test_utils.h" #include "chrome/browser/policy/profile_policy_connector.h" #include "chrome/browser/profiles/profile.h" +#include "chrome/browser/ui/browser.h" #include "components/policy/core/common/policy_map.h" #include "components/policy/core/common/policy_namespace.h" #include "components/policy/core/common/policy_service.h"
diff --git a/chrome/browser/policy/test/restore_on_startup_policy_browsertest.cc b/chrome/browser/policy/test/restore_on_startup_policy_browsertest.cc index e86ca5b..0f76dc0 100644 --- a/chrome/browser/policy/test/restore_on_startup_policy_browsertest.cc +++ b/chrome/browser/policy/test/restore_on_startup_policy_browsertest.cc
@@ -9,7 +9,7 @@ #include "base/cxx17_backports.h" #include "base/values.h" #include "build/chromeos_buildflags.h" -#include "chrome/browser/policy/policy_test_utils.h" +#include "chrome/browser/policy/url_blocking_policy_test_utils.h" #include "chrome/browser/prefs/session_startup_pref.h" #include "chrome/browser/resource_coordinator/tab_load_tracker_test_support.h" #include "chrome/browser/search/search.h" @@ -50,7 +50,7 @@ // Similar to PolicyTest but allows setting policies before the browser is // created. Each test parameter is a method that sets up the early policies // and stores the expected startup URLs in |expected_urls_|. -class RestoreOnStartupPolicyTest : public PolicyTest, +class RestoreOnStartupPolicyTest : public UrlBlockingPolicyTest, public testing::WithParamInterface<void ( RestoreOnStartupPolicyTest::*)(void)> { public:
diff --git a/chrome/browser/policy/test/suggested_content_policy_browsertest.cc b/chrome/browser/policy/test/suggested_content_policy_browsertest.cc index 9565242..3a9319f 100644 --- a/chrome/browser/policy/test/suggested_content_policy_browsertest.cc +++ b/chrome/browser/policy/test/suggested_content_policy_browsertest.cc
@@ -5,6 +5,7 @@ #include "ash/constants/ash_pref_names.h" #include "chrome/browser/policy/policy_test_utils.h" #include "chrome/browser/profiles/profile.h" +#include "chrome/browser/ui/browser.h" #include "components/policy/core/common/policy_map.h" #include "components/policy/policy_constants.h" #include "components/prefs/pref_service.h"
diff --git a/chrome/browser/policy/test/url_blacklist_policy_browsertest.cc b/chrome/browser/policy/test/url_blacklist_policy_browsertest.cc index 8585560..0c0d52ca 100644 --- a/chrome/browser/policy/test/url_blacklist_policy_browsertest.cc +++ b/chrome/browser/policy/test/url_blacklist_policy_browsertest.cc
@@ -11,7 +11,7 @@ #include "build/build_config.h" #include "chrome/browser/apps/app_service/app_launch_params.h" #include "chrome/browser/apps/app_service/app_service_proxy_factory.h" -#include "chrome/browser/policy/policy_test_utils.h" +#include "chrome/browser/policy/url_blocking_policy_test_utils.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/ui/browser.h" #include "chrome/browser/ui/browser_commands.h" @@ -96,7 +96,7 @@ } // namespace -IN_PROC_BROWSER_TEST_F(PolicyTest, URLBlacklist) { +IN_PROC_BROWSER_TEST_F(UrlBlockingPolicyTest, URLBlacklist) { // Checks that URLs can be blacklisted, and that exceptions can be made to // the blacklist. @@ -140,7 +140,7 @@ CheckCanOpenURL(browser(), kURLS[4]); } -IN_PROC_BROWSER_TEST_F(PolicyTest, URLBlacklistIncognito) { +IN_PROC_BROWSER_TEST_F(UrlBlockingPolicyTest, URLBlacklistIncognito) { // Checks that URLs can be blacklisted, and that exceptions can be made to // the blacklist. @@ -187,7 +187,7 @@ CheckCanOpenURL(incognito_browser, kURLS[4]); } -IN_PROC_BROWSER_TEST_F(PolicyTest, URLBlacklistAndWhitelist) { +IN_PROC_BROWSER_TEST_F(UrlBlockingPolicyTest, URLBlacklistAndWhitelist) { // Regression test for http://crbug.com/755256. Blacklisting * and // whitelisting an origin should work. @@ -210,7 +210,7 @@ embedded_test_server()->GetURL("aaa.com", "/empty.html").spec()); } -IN_PROC_BROWSER_TEST_F(PolicyTest, URLBlacklistSubresources) { +IN_PROC_BROWSER_TEST_F(UrlBlockingPolicyTest, URLBlacklistSubresources) { // Checks that an image with a blacklisted URL is loaded, but an iframe with a // blacklisted URL is not. @@ -249,7 +249,7 @@ EXPECT_EQ("error", blacklisted_iframe_load_result); } -IN_PROC_BROWSER_TEST_F(PolicyTest, URLBlacklistClientRedirect) { +IN_PROC_BROWSER_TEST_F(UrlBlockingPolicyTest, URLBlacklistClientRedirect) { // Checks that a client side redirect to a blacklisted URL is blocked. ASSERT_TRUE(embedded_test_server()->Start()); @@ -280,7 +280,7 @@ browser()->tab_strip_model()->GetActiveWebContents()->GetTitle()); } -IN_PROC_BROWSER_TEST_F(PolicyTest, URLBlacklistServerRedirect) { +IN_PROC_BROWSER_TEST_F(UrlBlockingPolicyTest, URLBlacklistServerRedirect) { // Checks that a server side redirect to a blacklisted URL is blocked. ASSERT_TRUE(embedded_test_server()->Start()); @@ -310,7 +310,7 @@ browser()->tab_strip_model()->GetActiveWebContents()->GetTitle()); } -IN_PROC_BROWSER_TEST_F(PolicyTest, FileURLBlacklist) { +IN_PROC_BROWSER_TEST_F(UrlBlockingPolicyTest, FileURLBlacklist) { // Check that FileURLs can be blacklisted and DisabledSchemes works together // with URLblacklisting and URLwhitelisting. @@ -376,7 +376,7 @@ // Tests that javascript-links are handled properly according to blacklist // settings, bug crbug/913334. -IN_PROC_BROWSER_TEST_F(PolicyTest, JavascriptBlacklistable) { +IN_PROC_BROWSER_TEST_F(UrlBlockingPolicyTest, JavascriptBlacklistable) { embedded_test_server()->RegisterRequestHandler( base::BindRepeating(&JSIncrementerPageHandler)); ASSERT_TRUE(embedded_test_server()->Start());
diff --git a/chrome/browser/policy/url_blocking_policy_test_utils.cc b/chrome/browser/policy/url_blocking_policy_test_utils.cc new file mode 100644 index 0000000..26a1fe53 --- /dev/null +++ b/chrome/browser/policy/url_blocking_policy_test_utils.cc
@@ -0,0 +1,59 @@ +// Copyright 2021 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "chrome/browser/policy/url_blocking_policy_test_utils.h" + +#include <string> + +#include "base/strings/utf_string_conversions.h" +#include "chrome/browser/ui/browser.h" +#include "chrome/test/base/ui_test_utils.h" +#include "content/public/browser/web_contents.h" +#include "content/public/test/test_utils.h" +#include "testing/gtest/include/gtest/gtest.h" +#include "url/gurl.h" + +using content::BrowserThread; + +namespace policy { + +UrlBlockingPolicyTest::UrlBlockingPolicyTest() = default; + +UrlBlockingPolicyTest::~UrlBlockingPolicyTest() = default; + +void UrlBlockingPolicyTest::CheckURLIsBlockedInWebContents( + content::WebContents* web_contents, + const GURL& url) { + EXPECT_EQ(url, web_contents->GetURL()); + + std::u16string blocked_page_title; + if (url.has_host()) { + blocked_page_title = base::UTF8ToUTF16(url.host()); + } else { + // Local file paths show the full URL. + blocked_page_title = base::UTF8ToUTF16(url.spec()); + } + EXPECT_EQ(blocked_page_title, web_contents->GetTitle()); + + // Verify that the expected error page is being displayed. + bool result = false; + EXPECT_TRUE(content::ExecuteScriptAndExtractBool( + web_contents, + "var textContent = document.body.textContent;" + "var hasError = textContent.indexOf('ERR_BLOCKED_BY_ADMINISTRATOR') >= 0;" + "domAutomationController.send(hasError);", + &result)); + EXPECT_TRUE(result); +} + +void UrlBlockingPolicyTest::CheckURLIsBlocked(Browser* browser, + const std::string& spec) { + GURL url(spec); + ui_test_utils::NavigateToURL(browser, url); + content::WebContents* contents = + browser->tab_strip_model()->GetActiveWebContents(); + CheckURLIsBlockedInWebContents(contents, url); +} + +} // namespace policy
diff --git a/chrome/browser/policy/url_blocking_policy_test_utils.h b/chrome/browser/policy/url_blocking_policy_test_utils.h new file mode 100644 index 0000000..9ea0d64 --- /dev/null +++ b/chrome/browser/policy/url_blocking_policy_test_utils.h
@@ -0,0 +1,36 @@ +// Copyright 2021 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef CHROME_BROWSER_POLICY_URL_BLOCKING_POLICY_TEST_UTILS_H_ +#define CHROME_BROWSER_POLICY_URL_BLOCKING_POLICY_TEST_UTILS_H_ + +#include <string> + +#include "chrome/browser/policy/policy_test_utils.h" + +class Browser; +class GURL; + +namespace content { +class WebContents; +} // namespace content + +namespace policy { + +class UrlBlockingPolicyTest : public PolicyTest { + protected: + UrlBlockingPolicyTest(); + ~UrlBlockingPolicyTest() override; + + // Verifies that access to the given url |spec| is blocked. + void CheckURLIsBlockedInWebContents(content::WebContents* web_contents, + const GURL& url); + + // Verifies that access to the given url |spec| is blocked. + void CheckURLIsBlocked(Browser* browser, const std::string& spec); +}; + +} // namespace policy + +#endif // CHROME_BROWSER_POLICY_URL_BLOCKING_POLICY_TEST_UTILS_H_
diff --git a/chrome/browser/printing/cloud_print/cloud_print_printer_list.cc b/chrome/browser/printing/cloud_print/cloud_print_printer_list.cc deleted file mode 100644 index 6f0ef36..0000000 --- a/chrome/browser/printing/cloud_print/cloud_print_printer_list.cc +++ /dev/null
@@ -1,76 +0,0 @@ -// Copyright 2013 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "chrome/browser/printing/cloud_print/cloud_print_printer_list.h" - -#include "base/values.h" -#include "chrome/common/cloud_print/cloud_print_constants.h" -#include "components/cloud_devices/common/cloud_devices_urls.h" - -namespace cloud_print { - -CloudPrintPrinterList::Delegate::~Delegate() {} - -CloudPrintPrinterList::CloudPrintPrinterList(Delegate* delegate) - : delegate_(delegate) {} - -CloudPrintPrinterList::~CloudPrintPrinterList() { -} - -void CloudPrintPrinterList::OnGCDApiFlowError(GCDApiFlow::Status status) { - delegate_->OnDeviceListUnavailable(); -} - -void CloudPrintPrinterList::OnGCDApiFlowComplete( - const base::DictionaryValue& value) { - const base::ListValue* printers; - if (!value.GetList(cloud_print::kPrinterListValue, &printers)) { - delegate_->OnDeviceListUnavailable(); - return; - } - - DeviceList devices; - for (const auto& printer : printers->GetList()) { - const base::DictionaryValue* printer_dict; - if (!printer.GetAsDictionary(&printer_dict)) - continue; - - Device printer_details; - if (!FillPrinterDetails(*printer_dict, &printer_details)) - continue; - - devices.push_back(printer_details); - } - - delegate_->OnDeviceListReady(devices); -} - -GURL CloudPrintPrinterList::GetURL() { - return cloud_devices::GetCloudPrintRelativeURL("search"); -} - -GCDApiFlow::Request::NetworkTrafficAnnotation -CloudPrintPrinterList::GetNetworkTrafficAnnotationType() { - return TYPE_SEARCH; -} - -bool CloudPrintPrinterList::FillPrinterDetails( - const base::DictionaryValue& printer_value, - Device* printer_details) { - if (!printer_value.GetString(cloud_print::kIdValue, &printer_details->id)) - return false; - - if (!printer_value.GetString(cloud_print::kDisplayNameValue, - &printer_details->display_name)) { - return false; - } - - // Non-essential. - printer_value.GetString(cloud_print::kPrinterDescValue, - &printer_details->description); - - return true; -} - -} // namespace cloud_print
diff --git a/chrome/browser/printing/cloud_print/cloud_print_printer_list.h b/chrome/browser/printing/cloud_print/cloud_print_printer_list.h deleted file mode 100644 index 01abe9e..0000000 --- a/chrome/browser/printing/cloud_print/cloud_print_printer_list.h +++ /dev/null
@@ -1,50 +0,0 @@ -// Copyright 2013 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef CHROME_BROWSER_PRINTING_CLOUD_PRINT_CLOUD_PRINT_PRINTER_LIST_H_ -#define CHROME_BROWSER_PRINTING_CLOUD_PRINT_CLOUD_PRINT_PRINTER_LIST_H_ - -#include <string> -#include <vector> - -#include "chrome/browser/printing/cloud_print/gcd_api_flow.h" - -namespace cloud_print { - -class CloudPrintPrinterList : public CloudPrintApiFlowRequest { - public: - struct Device { - std::string id; - std::string display_name; - std::string description; - }; - using DeviceList = std::vector<Device>; - - class Delegate { - public: - virtual ~Delegate(); - - virtual void OnDeviceListReady(const DeviceList& devices) = 0; - virtual void OnDeviceListUnavailable() = 0; - }; - - explicit CloudPrintPrinterList(Delegate* delegate); - ~CloudPrintPrinterList() override; - - // CloudPrintApiFlowRequest implementation: - void OnGCDApiFlowError(GCDApiFlow::Status status) override; - void OnGCDApiFlowComplete(const base::DictionaryValue& value) override; - GURL GetURL() override; - NetworkTrafficAnnotation GetNetworkTrafficAnnotationType() override; - - private: - bool FillPrinterDetails(const base::DictionaryValue& printer_value, - Device* printer_details); - - Delegate* const delegate_; -}; - -} // namespace cloud_print - -#endif // CHROME_BROWSER_PRINTING_CLOUD_PRINT_CLOUD_PRINT_PRINTER_LIST_H_
diff --git a/chrome/browser/printing/cloud_print/cloud_print_printer_list_unittest.cc b/chrome/browser/printing/cloud_print/cloud_print_printer_list_unittest.cc deleted file mode 100644 index b064d03..0000000 --- a/chrome/browser/printing/cloud_print/cloud_print_printer_list_unittest.cc +++ /dev/null
@@ -1,81 +0,0 @@ -// Copyright 2013 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "chrome/browser/printing/cloud_print/cloud_print_printer_list.h" - -#include <stddef.h> - -#include <memory> -#include <set> - -#include "base/json/json_reader.h" -#include "base/values.h" -#include "testing/gmock/include/gmock/gmock.h" -#include "testing/gtest/include/gtest/gtest.h" - -using testing::Mock; -using testing::SaveArg; -using testing::StrictMock; -using testing::_; - -namespace cloud_print { - -namespace { - -const char kSampleSuccessResponseOAuth[] = "{" - " \"success\": true," - " \"printers\": [" - " {\"id\" : \"someID\"," - " \"displayName\": \"someDisplayName\"," - " \"description\": \"someDescription\"}" - " ]" - "}"; - -class MockDelegate : public CloudPrintPrinterList::Delegate { - public: - MOCK_METHOD1(OnDeviceListReady, - void(const CloudPrintPrinterList::DeviceList&)); - MOCK_METHOD0(OnDeviceListUnavailable, void()); -}; - -TEST(CloudPrintPrinterListTest, Params) { - CloudPrintPrinterList device_list(NULL); - EXPECT_EQ(GURL("https://www.google.com/cloudprint/search"), - device_list.GetURL()); - EXPECT_EQ("https://www.googleapis.com/auth/cloudprint", - device_list.GetOAuthScope()); - EXPECT_FALSE(device_list.GetExtraRequestHeaders().empty()); -} - -TEST(CloudPrintPrinterListTest, Parsing) { - StrictMock<MockDelegate> delegate; - CloudPrintPrinterList device_list(&delegate); - CloudPrintPrinterList::DeviceList devices; - EXPECT_CALL(delegate, OnDeviceListReady(_)).WillOnce(SaveArg<0>(&devices)); - - absl::optional<base::Value> value = - base::JSONReader::Read(kSampleSuccessResponseOAuth); - ASSERT_TRUE(value); - const base::DictionaryValue* dictionary = NULL; - ASSERT_TRUE(value->GetAsDictionary(&dictionary)); - device_list.OnGCDApiFlowComplete(*dictionary); - - Mock::VerifyAndClear(&delegate); - - std::set<std::string> ids_expected; - ids_expected.insert("someID"); - - std::set<std::string> ids_found; - for (const auto& device : devices) - ids_found.insert(device.id); - - ASSERT_EQ(ids_expected, ids_found); - EXPECT_EQ("someID", devices[0].id); - EXPECT_EQ("someDisplayName", devices[0].display_name); - EXPECT_EQ("someDescription", devices[0].description); -} - -} // namespace - -} // namespace cloud_print
diff --git a/chrome/browser/printing/cloud_print/device_description.cc b/chrome/browser/printing/cloud_print/device_description.cc deleted file mode 100644 index 2eb96ba..0000000 --- a/chrome/browser/printing/cloud_print/device_description.cc +++ /dev/null
@@ -1,60 +0,0 @@ -// Copyright 2014 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "chrome/browser/printing/cloud_print/device_description.h" - -#include <vector> - -#include "base/strings/string_number_conversions.h" -#include "base/strings/string_util.h" -#include "chrome/browser/local_discovery/service_discovery_client.h" -#include "chrome/browser/printing/cloud_print/privet_constants.h" - -namespace cloud_print { - -namespace { - -std::string GetValueByName(const std::vector<std::string>& metadata, - const std::string& name) { - std::string prefix(name + "="); - for (const std::string& record : metadata) { - if (base::StartsWith(record, prefix, - base::CompareCase::INSENSITIVE_ASCII)) { - return record.substr(prefix.size()); - } - } - return std::string(); -} - -} // namespace - -DeviceDescription::DeviceDescription() : version(0) { -} - -DeviceDescription::DeviceDescription( - const local_discovery::ServiceDescription& service_description) { - address = service_description.address; - - const std::vector<std::string>& metadata = service_description.metadata; - if (!base::StringToInt(GetValueByName(metadata, kPrivetTxtKeyVersion), - &version)) { - version = 0; - } - name = GetValueByName(metadata, kPrivetTxtKeyName); - description = GetValueByName(metadata, kPrivetTxtKeyDescription); - if (version >= 3) { - type = GetValueByName(metadata, kPrivetTxtKeyDevicesClass); - id = GetValueByName(metadata, kPrivetTxtKeyGcdID); - } else { - type = GetValueByName(metadata, kPrivetTxtKeyType); - id = GetValueByName(metadata, kPrivetTxtKeyID); - } -} - -DeviceDescription::DeviceDescription(const DeviceDescription& other) = default; - -DeviceDescription::~DeviceDescription() { -} - -} // namespace cloud_print
diff --git a/chrome/browser/printing/cloud_print/device_description.h b/chrome/browser/printing/cloud_print/device_description.h deleted file mode 100644 index e46242f..0000000 --- a/chrome/browser/printing/cloud_print/device_description.h +++ /dev/null
@@ -1,42 +0,0 @@ -// Copyright 2014 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef CHROME_BROWSER_PRINTING_CLOUD_PRINT_DEVICE_DESCRIPTION_H_ -#define CHROME_BROWSER_PRINTING_CLOUD_PRINT_DEVICE_DESCRIPTION_H_ - -#include <string> - -#include "net/base/host_port_pair.h" - -namespace local_discovery { -struct ServiceDescription; -} - -namespace cloud_print { - -struct DeviceDescription { - DeviceDescription(); - explicit DeviceDescription( - const local_discovery::ServiceDescription& service_description); - DeviceDescription(const DeviceDescription& other); - ~DeviceDescription(); - - bool IsValid() const; - - // Display attributes - std::string name; - std::string description; - - // Functional attributes - std::string id; - std::string type; - int version; - - // Attributes related to local HTTP - net::HostPortPair address; -}; - -} // namespace cloud_print - -#endif // CHROME_BROWSER_PRINTING_CLOUD_PRINT_DEVICE_DESCRIPTION_H_
diff --git a/chrome/browser/printing/cloud_print/gcd_api_flow.cc b/chrome/browser/printing/cloud_print/gcd_api_flow.cc deleted file mode 100644 index 98b2012..0000000 --- a/chrome/browser/printing/cloud_print/gcd_api_flow.cc +++ /dev/null
@@ -1,49 +0,0 @@ -// Copyright 2014 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "chrome/browser/printing/cloud_print/gcd_api_flow.h" - -#include <memory> - -#include "chrome/browser/printing/cloud_print/gcd_api_flow_impl.h" -#include "chrome/browser/printing/cloud_print/gcd_constants.h" -#include "chrome/common/cloud_print/cloud_print_constants.h" -#include "components/cloud_devices/common/cloud_devices_urls.h" -#include "services/network/public/cpp/shared_url_loader_factory.h" - -namespace cloud_print { - -GCDApiFlow::Request::~Request() { -} - -std::unique_ptr<GCDApiFlow> GCDApiFlow::Create( - scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory, - signin::IdentityManager* identity_manager) { - return std::make_unique<GCDApiFlowImpl>(url_loader_factory, identity_manager); -} - -GCDApiFlow::GCDApiFlow() { -} - -GCDApiFlow::~GCDApiFlow() { -} - -CloudPrintApiFlowRequest::CloudPrintApiFlowRequest() { -} - -CloudPrintApiFlowRequest::~CloudPrintApiFlowRequest() { -} - -std::string CloudPrintApiFlowRequest::GetOAuthScope() { - return cloud_devices::kCloudPrintAuthScope; -} - -std::vector<std::pair<std::string, std::string>> -CloudPrintApiFlowRequest::GetExtraRequestHeaders() { - return std::vector<std::pair<std::string, std::string>>( - 1, std::make_pair(cloud_print::kChromeCloudPrintProxyHeaderName, - cloud_print::kChromeCloudPrintProxyHeaderValue)); -} - -} // namespace cloud_print
diff --git a/chrome/browser/printing/cloud_print/gcd_api_flow.h b/chrome/browser/printing/cloud_print/gcd_api_flow.h deleted file mode 100644 index 788e0afd..0000000 --- a/chrome/browser/printing/cloud_print/gcd_api_flow.h +++ /dev/null
@@ -1,107 +0,0 @@ -// Copyright 2014 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef CHROME_BROWSER_PRINTING_CLOUD_PRINT_GCD_API_FLOW_H_ -#define CHROME_BROWSER_PRINTING_CLOUD_PRINT_GCD_API_FLOW_H_ - -#include <memory> -#include <string> -#include <vector> - -#include "base/bind.h" -#include "base/callback.h" -#include "base/macros.h" -#include "base/memory/scoped_refptr.h" -#include "net/traffic_annotation/network_traffic_annotation.h" -#include "url/gurl.h" - -namespace base { -class DictionaryValue; -} - -namespace signin { -class IdentityManager; -} - -namespace network { -class SharedURLLoaderFactory; -} - -namespace cloud_print { - -// API flow for communicating with cloud print and cloud devices. -class GCDApiFlow { - public: - // TODO(noamsml): Better error model for this class. - enum Status { - SUCCESS, - ERROR_TOKEN, - ERROR_NETWORK, - ERROR_HTTP_CODE, - ERROR_FROM_SERVER, - ERROR_MALFORMED_RESPONSE - }; - - // Provides GCDApiFlowImpl with parameters required to make request. - // Parses results of requests. - class Request { - public: - enum NetworkTrafficAnnotation { - TYPE_SEARCH, - TYPE_PRIVET_REGISTER, - }; - - virtual ~Request(); - - // Called if the API flow fails. - virtual void OnGCDApiFlowError(Status status) = 0; - - // Called when the API flow finishes. - virtual void OnGCDApiFlowComplete(const base::DictionaryValue& value) = 0; - - // Returns the URL for this request. - virtual GURL GetURL() = 0; - - // Returns the scope parameter for use with OAuth. - virtual std::string GetOAuthScope() = 0; - - // Returns extra headers, if any, to send with this request. - virtual std::vector< - std::pair<std::string /* name */, std::string /* value */>> - GetExtraRequestHeaders() = 0; - - // Returns the network traffic annotation tag for this request. - virtual NetworkTrafficAnnotation GetNetworkTrafficAnnotationType() = 0; - }; - - GCDApiFlow(); - virtual ~GCDApiFlow(); - - static std::unique_ptr<GCDApiFlow> Create( - scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory, - signin::IdentityManager* identity_manager); - - virtual void Start(std::unique_ptr<Request> request) = 0; - - private: - DISALLOW_COPY_AND_ASSIGN(GCDApiFlow); -}; - -class CloudPrintApiFlowRequest : public GCDApiFlow::Request { - public: - CloudPrintApiFlowRequest(); - ~CloudPrintApiFlowRequest() override; - - // GCDApiFlowRequest implementation - std::string GetOAuthScope() override; - std::vector<std::pair<std::string, std::string>> GetExtraRequestHeaders() - override; - - private: - DISALLOW_COPY_AND_ASSIGN(CloudPrintApiFlowRequest); -}; - -} // namespace cloud_print - -#endif // CHROME_BROWSER_PRINTING_CLOUD_PRINT_GCD_API_FLOW_H_
diff --git a/chrome/browser/printing/cloud_print/gcd_api_flow_impl.cc b/chrome/browser/printing/cloud_print/gcd_api_flow_impl.cc deleted file mode 100644 index 072d81c..0000000 --- a/chrome/browser/printing/cloud_print/gcd_api_flow_impl.cc +++ /dev/null
@@ -1,177 +0,0 @@ -// Copyright 2014 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "chrome/browser/printing/cloud_print/gcd_api_flow_impl.h" - -#include <stddef.h> - -#include <memory> -#include <utility> -#include <vector> - -#include "base/bind.h" -#include "base/json/json_reader.h" -#include "base/strings/string_number_conversions.h" -#include "base/strings/stringprintf.h" -#include "base/values.h" -#include "chrome/browser/printing/cloud_print/gcd_constants.h" -#include "chrome/common/cloud_print/cloud_print_constants.h" -#include "components/cloud_devices/common/cloud_devices_urls.h" -#include "components/signin/public/identity_manager/identity_manager.h" -#include "components/signin/public/identity_manager/primary_account_access_token_fetcher.h" -#include "components/signin/public/identity_manager/scope_set.h" -#include "google_apis/gaia/google_service_auth_error.h" -#include "net/base/load_flags.h" -#include "net/base/net_errors.h" -#include "net/base/url_util.h" -#include "net/http/http_status_code.h" -#include "services/network/public/cpp/resource_request.h" -#include "services/network/public/cpp/shared_url_loader_factory.h" -#include "services/network/public/cpp/simple_url_loader.h" -#include "services/network/public/mojom/url_response_head.mojom.h" - -using net::DefineNetworkTrafficAnnotation; - -namespace cloud_print { - -namespace { - -const char kCloudPrintOAuthHeaderKey[] = "Authorization"; -const char kCloudPrintOAuthHeaderValueFormat[] = "Bearer %s"; -constexpr size_t kMaxContentSize = 1 * 1024 * 1024; - -const std::string GetOAuthHeaderValue(const std::string& token) { - return base::StringPrintf(kCloudPrintOAuthHeaderValueFormat, token.c_str()); -} - -net::NetworkTrafficAnnotationTag GetNetworkTrafficAnnotation( - GCDApiFlow::Request::NetworkTrafficAnnotation type) { - if (type == CloudPrintApiFlowRequest::TYPE_PRIVET_REGISTER) { - return DefineNetworkTrafficAnnotation("cloud_print_privet_register", R"( - semantics { - sender: "Cloud Print" - description: - "Registers a locally discovered Privet printer with a Cloud Print " - "Server." - trigger: - "Users can select Privet printers on chrome://devices/ and " - "register them." - data: - "Token id for a printer retrieved from a previous request to a " - "Cloud Print Server." - destination: OTHER - } - policy { - cookies_allowed: NO - setting: "User triggered requests cannot be disabled." - policy_exception_justification: "Not implemented, it's good to do so." - })"); - } else { - DCHECK_EQ(CloudPrintApiFlowRequest::TYPE_SEARCH, type); - return DefineNetworkTrafficAnnotation("cloud_print_search", R"( - semantics { - sender: "Cloud Print" - description: - "Queries a Cloud Print Server for the list of printers." - trigger: - "chrome://devices/ fetches the list when the user logs in, " - "re-enable the Cloud Print service, or manually requests a printer " - "list refresh." - data: "None" - destination: OTHER - } - policy { - cookies_allowed: NO - setting: "User triggered requests cannot be disabled." - policy_exception_justification: "Not implemented, it's good to do so." - })"); - } -} - -} // namespace - -GCDApiFlowImpl::GCDApiFlowImpl( - scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory, - signin::IdentityManager* identity_manager) - : url_loader_factory_(url_loader_factory), - identity_manager_(identity_manager) {} - -GCDApiFlowImpl::~GCDApiFlowImpl() {} - -void GCDApiFlowImpl::Start(std::unique_ptr<Request> request) { - request_ = std::move(request); - signin::ScopeSet oauth_scopes; - oauth_scopes.insert(request_->GetOAuthScope()); - DCHECK(identity_manager_); - token_fetcher_ = std::make_unique<signin::PrimaryAccountAccessTokenFetcher>( - "cloud_print", identity_manager_, oauth_scopes, - base::BindOnce(&GCDApiFlowImpl::OnAccessTokenFetchComplete, - base::Unretained(this)), - signin::PrimaryAccountAccessTokenFetcher::Mode::kImmediate); -} - -void GCDApiFlowImpl::OnAccessTokenFetchComplete( - GoogleServiceAuthError error, - signin::AccessTokenInfo access_token_info) { - token_fetcher_.reset(); - - if (error.state() != GoogleServiceAuthError::NONE) { - request_->OnGCDApiFlowError(ERROR_TOKEN); - return; - } - - auto request = std::make_unique<network::ResourceRequest>(); - request->url = request_->GetURL(); - - request->credentials_mode = network::mojom::CredentialsMode::kOmit; - - request->headers.SetHeader(kCloudPrintOAuthHeaderKey, - GetOAuthHeaderValue(access_token_info.token)); - - auto extra_headers = request_->GetExtraRequestHeaders(); - for (const auto& header : extra_headers) { - request->headers.SetHeader(header.first, header.second); - } - - url_loader_ = network::SimpleURLLoader::Create( - std::move(request), - GetNetworkTrafficAnnotation(request_->GetNetworkTrafficAnnotationType())); - - url_loader_->SetAllowHttpErrorResults(true); - - url_loader_->DownloadToString( - url_loader_factory_.get(), - base::BindOnce(&GCDApiFlowImpl::OnDownloadedToString, - weak_factory_.GetWeakPtr()), - kMaxContentSize); -} - -void GCDApiFlowImpl::OnDownloadedToString( - std::unique_ptr<std::string> response_body) { - const network::mojom::URLResponseHead* response_info = - url_loader_->ResponseInfo(); - - if (url_loader_->NetError() != net::OK || !response_info) { - request_->OnGCDApiFlowError(ERROR_NETWORK); - return; - } - - if (response_info->headers && - response_info->headers->response_code() != net::HTTP_OK) { - request_->OnGCDApiFlowError(ERROR_HTTP_CODE); - return; - } - - absl::optional<base::Value> value = base::JSONReader::Read(*response_body); - const base::DictionaryValue* dictionary_value = NULL; - - if (!value || !value->GetAsDictionary(&dictionary_value)) { - request_->OnGCDApiFlowError(ERROR_MALFORMED_RESPONSE); - return; - } - - request_->OnGCDApiFlowComplete(*dictionary_value); -} - -} // namespace cloud_print
diff --git a/chrome/browser/printing/cloud_print/gcd_api_flow_impl.h b/chrome/browser/printing/cloud_print/gcd_api_flow_impl.h deleted file mode 100644 index 29a97fd7..0000000 --- a/chrome/browser/printing/cloud_print/gcd_api_flow_impl.h +++ /dev/null
@@ -1,56 +0,0 @@ -// Copyright 2014 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef CHROME_BROWSER_PRINTING_CLOUD_PRINT_GCD_API_FLOW_IMPL_H_ -#define CHROME_BROWSER_PRINTING_CLOUD_PRINT_GCD_API_FLOW_IMPL_H_ - -#include <memory> -#include <string> - -#include "base/macros.h" -#include "base/memory/weak_ptr.h" -#include "chrome/browser/printing/cloud_print/gcd_api_flow.h" -#include "components/signin/public/identity_manager/access_token_info.h" - -namespace signin { -class PrimaryAccountAccessTokenFetcher; -} -namespace network { -class SimpleURLLoader; -class SharedURLLoaderFactory; -} // namespace network -class GoogleServiceAuthError; - -namespace cloud_print { - -class GCDApiFlowImpl : public GCDApiFlow { - public: - // Create an OAuth2-based confirmation. - GCDApiFlowImpl( - scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory, - signin::IdentityManager* identity_manager); - ~GCDApiFlowImpl() override; - - // GCDApiFlow implementation: - void Start(std::unique_ptr<Request> request) override; - - void OnAccessTokenFetchComplete(GoogleServiceAuthError error, - signin::AccessTokenInfo access_token_info); - - private: - void OnDownloadedToString(std::unique_ptr<std::string> response_body); - - std::unique_ptr<network::SimpleURLLoader> url_loader_; - std::unique_ptr<signin::PrimaryAccountAccessTokenFetcher> token_fetcher_; - scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory_; - signin::IdentityManager* identity_manager_; - std::unique_ptr<Request> request_; - base::WeakPtrFactory<GCDApiFlowImpl> weak_factory_{this}; - - DISALLOW_COPY_AND_ASSIGN(GCDApiFlowImpl); -}; - -} // namespace cloud_print - -#endif // CHROME_BROWSER_PRINTING_CLOUD_PRINT_GCD_API_FLOW_IMPL_H_
diff --git a/chrome/browser/printing/cloud_print/gcd_api_flow_unittest.cc b/chrome/browser/printing/cloud_print/gcd_api_flow_unittest.cc deleted file mode 100644 index 514ce56..0000000 --- a/chrome/browser/printing/cloud_print/gcd_api_flow_unittest.cc +++ /dev/null
@@ -1,154 +0,0 @@ -// Copyright 2014 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "chrome/browser/printing/cloud_print/gcd_api_flow.h" - -#include <memory> -#include <set> -#include <utility> - -#include "base/bind.h" -#include "base/containers/contains.h" -#include "base/run_loop.h" -#include "base/test/bind.h" -#include "base/threading/thread_task_runner_handle.h" -#include "base/values.h" -#include "chrome/browser/printing/cloud_print/gcd_api_flow_impl.h" -#include "components/signin/public/identity_manager/identity_test_environment.h" -#include "content/public/test/browser_task_environment.h" -#include "google_apis/gaia/google_service_auth_error.h" -#include "net/base/host_port_pair.h" -#include "net/base/net_errors.h" -#include "net/http/http_request_headers.h" -#include "services/network/public/cpp/weak_wrapper_shared_url_loader_factory.h" -#include "services/network/test/test_url_loader_factory.h" -#include "testing/gmock/include/gmock/gmock.h" -#include "testing/gtest/include/gtest/gtest.h" - -using testing::_; -using testing::Invoke; -using testing::Return; -using testing::WithArgs; - -namespace cloud_print { - -namespace { - -const char kConfirmRequest[] = - "https://www.google.com/cloudprint/confirm?token=SomeToken"; - -const char kSampleConfirmResponse[] = "{}"; - -const char kFailedConfirmResponseBadJson[] = "[]"; - -const char kAccountId[] = "account_id@gmail.com"; - -class MockDelegate : public CloudPrintApiFlowRequest { - public: - MOCK_METHOD1(OnGCDApiFlowError, void(GCDApiFlow::Status)); - MOCK_METHOD1(OnGCDApiFlowComplete, void(const base::DictionaryValue&)); - MOCK_METHOD0(GetURL, GURL()); - MOCK_METHOD0(GetNetworkTrafficAnnotationType, - GCDApiFlow::Request::NetworkTrafficAnnotation()); -}; - -class GCDApiFlowTest : public testing::Test { - public: - GCDApiFlowTest() - : test_shared_url_loader_factory_( - base::MakeRefCounted<network::WeakWrapperSharedURLLoaderFactory>( - &test_url_loader_factory_)) {} - - ~GCDApiFlowTest() override {} - - protected: - void SetUp() override { - identity_test_environment_.MakePrimaryAccountAvailable( - kAccountId, signin::ConsentLevel::kSync); - - std::unique_ptr<MockDelegate> delegate = std::make_unique<MockDelegate>(); - mock_delegate_ = delegate.get(); - EXPECT_CALL(*mock_delegate_, GetURL()) - .WillRepeatedly(Return( - GURL("https://www.google.com/cloudprint/confirm?token=SomeToken"))); - gcd_flow_ = std::make_unique<GCDApiFlowImpl>( - test_shared_url_loader_factory_.get(), - identity_test_environment_.identity_manager()); - gcd_flow_->Start(std::move(delegate)); - } - - network::TestURLLoaderFactory test_url_loader_factory_; - std::unique_ptr<GCDApiFlowImpl> gcd_flow_; - MockDelegate* mock_delegate_; - - private: - content::BrowserTaskEnvironment task_environment_; - signin::IdentityTestEnvironment identity_test_environment_; - scoped_refptr<network::WeakWrapperSharedURLLoaderFactory> - test_shared_url_loader_factory_; -}; - -TEST_F(GCDApiFlowTest, SuccessOAuth2) { - std::set<GURL> requested_urls; - test_url_loader_factory_.SetInterceptor( - base::BindLambdaForTesting([&](const network::ResourceRequest& request) { - requested_urls.insert(request.url); - std::string oauth_header; - EXPECT_TRUE(request.headers.GetHeader("Authorization", &oauth_header)); - EXPECT_EQ("Bearer SomeToken", oauth_header); - - std::string proxy; - EXPECT_TRUE(request.headers.GetHeader("X-Cloudprint-Proxy", &proxy)); - EXPECT_EQ("Chrome", proxy); - })); - - gcd_flow_->OnAccessTokenFetchComplete( - GoogleServiceAuthError::AuthErrorNone(), - signin::AccessTokenInfo( - "SomeToken", base::Time::Now() + base::TimeDelta::FromHours(1), - std::string() /* No extra information needed for this test */)); - - EXPECT_TRUE(base::Contains(requested_urls, GURL(kConfirmRequest))); - - test_url_loader_factory_.AddResponse(kConfirmRequest, kSampleConfirmResponse); - - base::RunLoop run_loop; - EXPECT_CALL(*mock_delegate_, OnGCDApiFlowComplete(_)) - .WillOnce(testing::InvokeWithoutArgs([&]() { run_loop.Quit(); })); - run_loop.Run(); -} - -TEST_F(GCDApiFlowTest, BadToken) { - EXPECT_CALL(*mock_delegate_, OnGCDApiFlowError(GCDApiFlow::ERROR_TOKEN)); - gcd_flow_->OnAccessTokenFetchComplete( - GoogleServiceAuthError(GoogleServiceAuthError::USER_NOT_SIGNED_UP), - signin::AccessTokenInfo()); -} - -TEST_F(GCDApiFlowTest, BadJson) { - std::set<GURL> requested_urls; - test_url_loader_factory_.SetInterceptor( - base::BindLambdaForTesting([&](const network::ResourceRequest& request) { - requested_urls.insert(request.url); - })); - - gcd_flow_->OnAccessTokenFetchComplete( - GoogleServiceAuthError::AuthErrorNone(), - signin::AccessTokenInfo( - "SomeToken", base::Time::Now() + base::TimeDelta::FromHours(1), - std::string() /* No extra information needed for this test */)); - - EXPECT_TRUE(base::Contains(requested_urls, GURL(kConfirmRequest))); - test_url_loader_factory_.AddResponse(kConfirmRequest, - kFailedConfirmResponseBadJson); - base::RunLoop run_loop; - EXPECT_CALL(*mock_delegate_, - OnGCDApiFlowError(GCDApiFlow::ERROR_MALFORMED_RESPONSE)) - .WillOnce(testing::InvokeWithoutArgs([&]() { run_loop.Quit(); })); - run_loop.Run(); -} - -} // namespace - -} // namespace cloud_print
diff --git a/chrome/browser/printing/cloud_print/gcd_constants.cc b/chrome/browser/printing/cloud_print/gcd_constants.cc deleted file mode 100644 index 7ed8371..0000000 --- a/chrome/browser/printing/cloud_print/gcd_constants.cc +++ /dev/null
@@ -1,13 +0,0 @@ -// Copyright 2014 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "chrome/browser/printing/cloud_print/gcd_constants.h" - -namespace cloud_print { - -const char kGCDKeyKind[] = "kind"; -const char kGCDKeyDeviceId[] = "deviceId"; -const char kGCDTypePrinter[] = "printer"; - -} // namespace cloud_print
diff --git a/chrome/browser/printing/cloud_print/gcd_constants.h b/chrome/browser/printing/cloud_print/gcd_constants.h deleted file mode 100644 index 9fc2b97c..0000000 --- a/chrome/browser/printing/cloud_print/gcd_constants.h +++ /dev/null
@@ -1,16 +0,0 @@ -// Copyright 2014 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef CHROME_BROWSER_PRINTING_CLOUD_PRINT_GCD_CONSTANTS_H_ -#define CHROME_BROWSER_PRINTING_CLOUD_PRINT_GCD_CONSTANTS_H_ - -namespace cloud_print { - -extern const char kGCDKeyKind[]; -extern const char kGCDKeyDeviceId[]; -extern const char kGCDTypePrinter[]; - -} // namespace cloud_print - -#endif // CHROME_BROWSER_PRINTING_CLOUD_PRINT_GCD_CONSTANTS_H_
diff --git a/chrome/browser/printing/cloud_print/privet_confirm_api_flow.cc b/chrome/browser/printing/cloud_print/privet_confirm_api_flow.cc deleted file mode 100644 index 8485c06..0000000 --- a/chrome/browser/printing/cloud_print/privet_confirm_api_flow.cc +++ /dev/null
@@ -1,54 +0,0 @@ -// Copyright 2013 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "chrome/browser/printing/cloud_print/privet_confirm_api_flow.h" - -#include "base/values.h" -#include "chrome/browser/printing/cloud_print/gcd_api_flow.h" -#include "chrome/browser/printing/cloud_print/gcd_constants.h" -#include "chrome/browser/printing/cloud_print/privet_constants.h" -#include "chrome/common/cloud_print/cloud_print_constants.h" -#include "components/cloud_devices/common/cloud_devices_urls.h" -#include "net/base/url_util.h" - -namespace cloud_print { - -PrivetConfirmApiCallFlow::PrivetConfirmApiCallFlow(const std::string& token, - ResponseCallback callback) - : callback_(std::move(callback)), token_(token) {} - -PrivetConfirmApiCallFlow::~PrivetConfirmApiCallFlow() { -} - -void PrivetConfirmApiCallFlow::OnGCDApiFlowError(GCDApiFlow::Status status) { - if (callback_) - std::move(callback_).Run(status); -} - -void PrivetConfirmApiCallFlow::OnGCDApiFlowComplete( - const base::DictionaryValue& value) { - if (!callback_) - return; - - bool success = false; - if (!value.GetBoolean(cloud_print::kSuccessValue, &success)) { - std::move(callback_).Run(GCDApiFlow::ERROR_MALFORMED_RESPONSE); - return; - } - - std::move(callback_).Run(success ? GCDApiFlow::SUCCESS - : GCDApiFlow::ERROR_FROM_SERVER); -} - -GURL PrivetConfirmApiCallFlow::GetURL() { - return net::AppendQueryParameter( - cloud_devices::GetCloudPrintRelativeURL("confirm"), "token", token_); -} - -GCDApiFlow::Request::NetworkTrafficAnnotation -PrivetConfirmApiCallFlow::GetNetworkTrafficAnnotationType() { - return TYPE_PRIVET_REGISTER; -} - -} // namespace cloud_print
diff --git a/chrome/browser/printing/cloud_print/privet_confirm_api_flow.h b/chrome/browser/printing/cloud_print/privet_confirm_api_flow.h deleted file mode 100644 index 5594ddb..0000000 --- a/chrome/browser/printing/cloud_print/privet_confirm_api_flow.h +++ /dev/null
@@ -1,36 +0,0 @@ -// Copyright 2013 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef CHROME_BROWSER_PRINTING_CLOUD_PRINT_PRIVET_CONFIRM_API_FLOW_H_ -#define CHROME_BROWSER_PRINTING_CLOUD_PRINT_PRIVET_CONFIRM_API_FLOW_H_ - -#include <string> - -#include "chrome/browser/printing/cloud_print/gcd_api_flow.h" - -namespace cloud_print { - -// API call flow for server-side communication with CloudPrint for registration. -class PrivetConfirmApiCallFlow : public CloudPrintApiFlowRequest { - public: - using ResponseCallback = base::OnceCallback<void(GCDApiFlow::Status)>; - - // Create an OAuth2-based confirmation - PrivetConfirmApiCallFlow(const std::string& token, ResponseCallback callback); - ~PrivetConfirmApiCallFlow() override; - - // CloudPrintApiFlowRequest implementation: - void OnGCDApiFlowError(GCDApiFlow::Status status) override; - void OnGCDApiFlowComplete(const base::DictionaryValue& value) override; - GURL GetURL() override; - NetworkTrafficAnnotation GetNetworkTrafficAnnotationType() override; - - private: - ResponseCallback callback_; - const std::string token_; -}; - -} // namespace cloud_print - -#endif // CHROME_BROWSER_PRINTING_CLOUD_PRINT_PRIVET_CONFIRM_API_FLOW_H_
diff --git a/chrome/browser/printing/cloud_print/privet_confirm_api_flow_unittest.cc b/chrome/browser/printing/cloud_print/privet_confirm_api_flow_unittest.cc deleted file mode 100644 index 108866b..0000000 --- a/chrome/browser/printing/cloud_print/privet_confirm_api_flow_unittest.cc +++ /dev/null
@@ -1,73 +0,0 @@ -// Copyright 2013 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "chrome/browser/printing/cloud_print/privet_confirm_api_flow.h" - -#include <memory> -#include <set> - -#include "base/bind.h" -#include "base/json/json_reader.h" -#include "base/values.h" -#include "testing/gmock/include/gmock/gmock.h" -#include "testing/gtest/include/gtest/gtest.h" - -using testing::StrictMock; -using testing::_; - -namespace cloud_print { - -namespace { - -const char kSampleConfirmResponse[] = "{" - " \"success\": true" - "}"; - -const char kFailedConfirmResponse[] = "{" - " \"success\": false" - "}"; - -TEST(PrivetConfirmApiFlowTest, Params) { - PrivetConfirmApiCallFlow confirmation( - "123", PrivetConfirmApiCallFlow::ResponseCallback()); - EXPECT_EQ(GURL("https://www.google.com/cloudprint/confirm?token=123"), - confirmation.GetURL()); - EXPECT_EQ("https://www.googleapis.com/auth/cloudprint", - confirmation.GetOAuthScope()); - EXPECT_FALSE(confirmation.GetExtraRequestHeaders().empty()); -} - -class MockDelegate { - public: - MOCK_METHOD1(Callback, void(GCDApiFlow::Status)); -}; - -TEST(PrivetConfirmApiFlowTest, Parsing) { - StrictMock<MockDelegate> delegate; - PrivetConfirmApiCallFlow confirmation( - "123", - base::BindOnce(&MockDelegate::Callback, base::Unretained(&delegate))); - EXPECT_CALL(delegate, Callback(GCDApiFlow::SUCCESS)).Times(1); - - absl::optional<base::Value> value = - base::JSONReader::Read(kSampleConfirmResponse); - ASSERT_TRUE(value); - const base::DictionaryValue* dictionary = NULL; - ASSERT_TRUE(value->GetAsDictionary(&dictionary)); - confirmation.OnGCDApiFlowComplete(*dictionary); - - PrivetConfirmApiCallFlow confirmation2( - "123", - base::BindOnce(&MockDelegate::Callback, base::Unretained(&delegate))); - EXPECT_CALL(delegate, Callback(GCDApiFlow::ERROR_FROM_SERVER)).Times(1); - - value = base::JSONReader::Read(kFailedConfirmResponse); - ASSERT_TRUE(value); - ASSERT_TRUE(value->GetAsDictionary(&dictionary)); - confirmation2.OnGCDApiFlowComplete(*dictionary); -} - -} // namespace - -} // namespace cloud_print
diff --git a/chrome/browser/printing/cloud_print/privet_constants.cc b/chrome/browser/printing/cloud_print/privet_constants.cc deleted file mode 100644 index daa7a82..0000000 --- a/chrome/browser/printing/cloud_print/privet_constants.cc +++ /dev/null
@@ -1,52 +0,0 @@ -// Copyright 2013 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "chrome/browser/printing/cloud_print/privet_constants.h" - -namespace cloud_print { - -const char kPrivetKeyError[] = "error"; -const char kPrivetInfoKeyToken[] = "x-privet-token"; -const char kPrivetInfoKeyAPIList[] = "api"; -const char kPrivetInfoKeyID[] = "id"; -const char kPrivetKeyDeviceID[] = "device_id"; -const char kPrivetKeyClaimURL[] = "claim_url"; -const char kPrivetKeyClaimToken[] = "token"; -const char kPrivetKeyTimeout[] = "timeout"; - -const char kPrivetActionNameInfo[] = "info"; - -const char kPrivetInfoPath[] = "/privet/info"; -const char kPrivetRegisterPath[] = "/privet/register"; -const char kPrivetCapabilitiesPath[] = "/privet/capabilities"; -const char kPrivetSubmitdocPath[] = "/privet/printer/submitdoc"; -const char kPrivetCreatejobPath[] = "/privet/printer/createjob"; - -const char kPrivetErrorDeviceBusy[] = "device_busy"; -const char kPrivetErrorPrinterBusy[] = "printer_busy"; -const char kPrivetErrorInvalidPrintJob[] = "invalid_print_job"; -const char kPrivetErrorInvalidDocumentType[] = "invalid_document_type"; -const char kPrivetErrorPendingUserAction[] = "pending_user_action"; -const char kPrivetErrorInvalidXPrivetToken[] = "invalid_x_privet_token"; -const char kPrivetErrorTimeout[] = "confirmation_timeout"; -const char kPrivetErrorCancel[] = "user_cancel"; - -const char kPrivetActionStart[] = "start"; -const char kPrivetActionGetClaimToken[] = "getClaimToken"; -const char kPrivetActionComplete[] = "complete"; -const char kPrivetActionCancel[] = "cancel"; - -const char kPrivetDefaultDeviceType[] = "_privet._tcp.local"; - -const char kPrivetTypePrinter[] = "printer"; - -const char kPrivetTxtKeyName[] = "ty"; -const char kPrivetTxtKeyDescription[] = "note"; -const char kPrivetTxtKeyVersion[] = "txtvers"; -const char kPrivetTxtKeyType[] = "type"; -const char kPrivetTxtKeyID[] = "id"; -const char kPrivetTxtKeyGcdID[] = "gcd_id"; -const char kPrivetTxtKeyDevicesClass[] = "class"; - -} // namespace cloud_print
diff --git a/chrome/browser/printing/cloud_print/privet_constants.h b/chrome/browser/printing/cloud_print/privet_constants.h deleted file mode 100644 index 51bf96c..0000000 --- a/chrome/browser/printing/cloud_print/privet_constants.h +++ /dev/null
@@ -1,61 +0,0 @@ -// Copyright 2013 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef CHROME_BROWSER_PRINTING_CLOUD_PRINT_PRIVET_CONSTANTS_H_ -#define CHROME_BROWSER_PRINTING_CLOUD_PRINT_PRIVET_CONSTANTS_H_ - -namespace cloud_print { - -extern const char kPrivetKeyError[]; -extern const char kPrivetInfoKeyToken[]; -extern const char kPrivetInfoKeyAPIList[]; -extern const char kPrivetInfoKeyID[]; -extern const char kPrivetKeyDeviceID[]; -extern const char kPrivetKeyClaimURL[]; -extern const char kPrivetKeyClaimToken[]; -extern const char kPrivetKeyTimeout[]; - -extern const char kPrivetActionNameInfo[]; - -extern const char kPrivetInfoPath[]; -extern const char kPrivetRegisterPath[]; -extern const char kPrivetCapabilitiesPath[]; -extern const char kPrivetSubmitdocPath[]; -extern const char kPrivetCreatejobPath[]; - -extern const char kPrivetErrorDeviceBusy[]; -extern const char kPrivetErrorPrinterBusy[]; -extern const char kPrivetErrorInvalidPrintJob[]; -extern const char kPrivetErrorInvalidDocumentType[]; -extern const char kPrivetErrorPendingUserAction[]; -extern const char kPrivetErrorInvalidXPrivetToken[]; -extern const char kPrivetErrorTimeout[]; -extern const char kPrivetErrorCancel[]; - -extern const char kPrivetActionStart[]; -extern const char kPrivetActionGetClaimToken[]; -extern const char kPrivetActionComplete[]; -extern const char kPrivetActionCancel[]; - -extern const char kPrivetDefaultDeviceType[]; - -extern const char kPrivetTypePrinter[]; - -extern const char kPrivetTxtKeyName[]; -extern const char kPrivetTxtKeyDescription[]; -extern const char kPrivetTxtKeyVersion[]; -extern const char kPrivetTxtKeyType[]; -extern const char kPrivetTxtKeyID[]; -extern const char kPrivetTxtKeyGcdID[]; -extern const char kPrivetTxtKeyDevicesClass[]; - -const int kPrivetDefaultTimeout = 15; - -const double kPrivetMaximumTimeRandomAddition = 0.2; - -const int kPrivetMinimumTimeout = 2; - -} // namespace cloud_print - -#endif // CHROME_BROWSER_PRINTING_CLOUD_PRINT_PRIVET_CONSTANTS_H_
diff --git a/chrome/browser/printing/cloud_print/privet_device_lister.cc b/chrome/browser/printing/cloud_print/privet_device_lister.cc deleted file mode 100644 index 9118eb6..0000000 --- a/chrome/browser/printing/cloud_print/privet_device_lister.cc +++ /dev/null
@@ -1,15 +0,0 @@ -// Copyright 2013 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "chrome/browser/printing/cloud_print/privet_device_lister.h" - -namespace cloud_print { - -PrivetDeviceLister::PrivetDeviceLister() { -} - -PrivetDeviceLister::~PrivetDeviceLister() { -} - -} // namespace cloud_print
diff --git a/chrome/browser/printing/cloud_print/privet_device_lister.h b/chrome/browser/printing/cloud_print/privet_device_lister.h deleted file mode 100644 index 44aba04..0000000 --- a/chrome/browser/printing/cloud_print/privet_device_lister.h +++ /dev/null
@@ -1,36 +0,0 @@ -// Copyright 2013 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef CHROME_BROWSER_PRINTING_CLOUD_PRINT_PRIVET_DEVICE_LISTER_H_ -#define CHROME_BROWSER_PRINTING_CLOUD_PRINT_PRIVET_DEVICE_LISTER_H_ - -#include <string> - -#include "chrome/browser/printing/cloud_print/device_description.h" - -namespace cloud_print { - -class PrivetDeviceLister { - public: - PrivetDeviceLister(); - virtual ~PrivetDeviceLister(); - - class Delegate { - public: - virtual ~Delegate() {} - virtual void DeviceChanged(const std::string& name, - const DeviceDescription& description) = 0; - virtual void DeviceRemoved(const std::string& name) = 0; - virtual void DeviceCacheFlushed() = 0; - }; - - // Start the PrivetServiceLister. - virtual void Start() = 0; - - virtual void DiscoverNewDevices() = 0; -}; - -} // namespace cloud_print - -#endif // CHROME_BROWSER_PRINTING_CLOUD_PRINT_PRIVET_DEVICE_LISTER_H_
diff --git a/chrome/browser/printing/cloud_print/privet_device_lister_impl.cc b/chrome/browser/printing/cloud_print/privet_device_lister_impl.cc deleted file mode 100644 index 5c92422..0000000 --- a/chrome/browser/printing/cloud_print/privet_device_lister_impl.cc +++ /dev/null
@@ -1,56 +0,0 @@ -// Copyright 2013 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "chrome/browser/printing/cloud_print/privet_device_lister_impl.h" - -#include <utility> - -#include "chrome/browser/printing/cloud_print/privet_constants.h" - -namespace cloud_print { - -PrivetDeviceListerImpl::PrivetDeviceListerImpl( - local_discovery::ServiceDiscoveryClient* service_discovery_client, - PrivetDeviceLister::Delegate* delegate) - : delegate_(delegate), - device_lister_(local_discovery::ServiceDiscoveryDeviceLister::Create( - this, - service_discovery_client, - kPrivetDefaultDeviceType)) {} - -PrivetDeviceListerImpl::~PrivetDeviceListerImpl() { -} - -void PrivetDeviceListerImpl::Start() { - device_lister_->Start(); -} - -void PrivetDeviceListerImpl::DiscoverNewDevices() { - device_lister_->DiscoverNewDevices(); -} - -void PrivetDeviceListerImpl::OnDeviceChanged( - const std::string& service_type, - bool added, - const local_discovery::ServiceDescription& service_description) { - if (!delegate_) - return; - - delegate_->DeviceChanged(service_description.service_name, - DeviceDescription(service_description)); -} - -void PrivetDeviceListerImpl::OnDeviceRemoved(const std::string& service_type, - const std::string& service_name) { - if (delegate_) - delegate_->DeviceRemoved(service_name); -} - -void PrivetDeviceListerImpl::OnDeviceCacheFlushed( - const std::string& service_type) { - if (delegate_) - delegate_->DeviceCacheFlushed(); -} - -} // namespace cloud_print
diff --git a/chrome/browser/printing/cloud_print/privet_device_lister_impl.h b/chrome/browser/printing/cloud_print/privet_device_lister_impl.h deleted file mode 100644 index 5d91da4..0000000 --- a/chrome/browser/printing/cloud_print/privet_device_lister_impl.h +++ /dev/null
@@ -1,50 +0,0 @@ -// Copyright 2013 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef CHROME_BROWSER_PRINTING_CLOUD_PRINT_PRIVET_DEVICE_LISTER_IMPL_H_ -#define CHROME_BROWSER_PRINTING_CLOUD_PRINT_PRIVET_DEVICE_LISTER_IMPL_H_ - -#include <memory> -#include <string> - -#include "chrome/browser/local_discovery/service_discovery_device_lister.h" -#include "chrome/browser/printing/cloud_print/privet_device_lister.h" - -namespace local_discovery { -class ServiceDiscoveryClient; -} - -namespace cloud_print { - -class PrivetDeviceListerImpl - : public PrivetDeviceLister, - public local_discovery::ServiceDiscoveryDeviceLister::Delegate { - public: - PrivetDeviceListerImpl( - local_discovery::ServiceDiscoveryClient* service_discovery_client, - PrivetDeviceLister::Delegate* delegate); - ~PrivetDeviceListerImpl() override; - - // PrivetDeviceLister: - void Start() override; - void DiscoverNewDevices() override; - - protected: - // ServiceDiscoveryDeviceLister: - void OnDeviceChanged( - const std::string& service_type, - bool added, - const local_discovery::ServiceDescription& service_description) override; - void OnDeviceRemoved(const std::string& service_type, - const std::string& service_name) override; - void OnDeviceCacheFlushed(const std::string& service_type) override; - - private: - PrivetDeviceLister::Delegate* const delegate_; - std::unique_ptr<local_discovery::ServiceDiscoveryDeviceLister> device_lister_; -}; - -} // namespace cloud_print - -#endif // CHROME_BROWSER_PRINTING_CLOUD_PRINT_PRIVET_DEVICE_LISTER_IMPL_H_
diff --git a/chrome/browser/printing/cloud_print/privet_device_lister_unittest.cc b/chrome/browser/printing/cloud_print/privet_device_lister_unittest.cc deleted file mode 100644 index 7b2be62..0000000 --- a/chrome/browser/printing/cloud_print/privet_device_lister_unittest.cc +++ /dev/null
@@ -1,304 +0,0 @@ -// Copyright 2013 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include <memory> - -#include "chrome/browser/printing/cloud_print/privet_device_lister_impl.h" -#include "testing/gmock/include/gmock/gmock.h" -#include "testing/gtest/include/gtest/gtest.h" - -using local_discovery::LocalDomainResolver; -using local_discovery::ServiceDescription; -using local_discovery::ServiceDiscoveryClient; -using local_discovery::ServiceResolver; -using local_discovery::ServiceWatcher; -using testing::_; -using testing::SaveArg; - -namespace cloud_print { - -namespace { - -class MockServiceResolver; -class MockServiceWatcher; - -class ServiceDiscoveryMockDelegate { - public: - virtual ~ServiceDiscoveryMockDelegate() {} - virtual void ServiceWatcherStarted(const std::string& service_type, - MockServiceWatcher* watcher) = 0; - virtual void ServiceResolverStarted(const std::string& service_type, - MockServiceResolver* resolver) = 0; -}; - -class MockServiceWatcher : public ServiceWatcher { - public: - MockServiceWatcher(const std::string& service_type, - ServiceWatcher::UpdatedCallback callback, - ServiceDiscoveryMockDelegate* mock_delegate) - : started_(false), - service_type_(service_type), - callback_(std::move(callback)), - mock_delegate_(mock_delegate) {} - - ~MockServiceWatcher() override {} - - void Start() override { - DCHECK(!started_); - started_ = true; - mock_delegate_->ServiceWatcherStarted(service_type_, this); - } - - MOCK_METHOD0(DiscoverNewServices, void()); - - MOCK_METHOD1(SetActivelyRefreshServices, void( - bool actively_refresh_services)); - - std::string GetServiceType() const override { return service_type_; } - - bool started() { - return started_; - } - - ServiceWatcher::UpdatedCallback callback() { - return callback_; - } - - private: - bool started_; - std::string service_type_; - ServiceWatcher::UpdatedCallback callback_; - ServiceDiscoveryMockDelegate* mock_delegate_; -}; - -class MockServiceResolver : public ServiceResolver { - public: - MockServiceResolver(const std::string& service_name, - ServiceResolver::ResolveCompleteCallback callback, - ServiceDiscoveryMockDelegate* mock_delegate) - : started_resolving_(false), - service_name_(service_name), - callback_(std::move(callback)), - mock_delegate_(mock_delegate) {} - - ~MockServiceResolver() override {} - - void StartResolving() override { - started_resolving_ = true; - mock_delegate_->ServiceResolverStarted(service_name_, this); - } - - bool IsResolving() const { - return started_resolving_; - } - - std::string GetName() const override { return service_name_; } - - ServiceResolver::ResolveCompleteCallback* callback() { return &callback_; } - - private: - bool started_resolving_; - std::string service_name_; - ServiceResolver::ResolveCompleteCallback callback_; - ServiceDiscoveryMockDelegate* mock_delegate_; -}; - -class MockServiceDiscoveryClient : public ServiceDiscoveryClient { - public: - explicit MockServiceDiscoveryClient( - ServiceDiscoveryMockDelegate* mock_delegate) - : mock_delegate_(mock_delegate) { - } - - ~MockServiceDiscoveryClient() override {} - - // Create a service watcher object listening for DNS-SD service announcements - // on service type |service_type|. - std::unique_ptr<ServiceWatcher> CreateServiceWatcher( - const std::string& service_type, - ServiceWatcher::UpdatedCallback callback) override { - return std::make_unique<MockServiceWatcher>( - service_type, std::move(callback), mock_delegate_); - } - - // Create a service resolver object for getting detailed service information - // for the service called |service_name|. - std::unique_ptr<ServiceResolver> CreateServiceResolver( - const std::string& service_name, - ServiceResolver::ResolveCompleteCallback callback) override { - return std::make_unique<MockServiceResolver>( - service_name, std::move(callback), mock_delegate_); - } - - // Not used in this test. - std::unique_ptr<LocalDomainResolver> CreateLocalDomainResolver( - const std::string& domain, - net::AddressFamily address_family, - LocalDomainResolver::IPAddressCallback callback) override { - NOTREACHED(); - return nullptr; - } - - private: - ServiceDiscoveryMockDelegate* mock_delegate_; -}; - -class MockServiceDiscoveryMockDelegate : public ServiceDiscoveryMockDelegate { - public: - MOCK_METHOD2(ServiceWatcherStarted, void(const std::string& service_type, - MockServiceWatcher* watcher)); - MOCK_METHOD2(ServiceResolverStarted, void(const std::string& service_type, - MockServiceResolver* resolver)); -}; - -class MockDeviceListerDelegate : public PrivetDeviceLister::Delegate { - public: - MockDeviceListerDelegate() {} - ~MockDeviceListerDelegate() override {} - - MOCK_METHOD2(DeviceChanged, - void(const std::string& name, - const DeviceDescription& description)); - - MOCK_METHOD1(DeviceRemoved, void(const std::string& name)); - - MOCK_METHOD0(DeviceCacheFlushed, void()); -}; - -class PrivetDeviceListerTest : public testing::Test { - public: - PrivetDeviceListerTest() : mock_client_(&mock_delegate_) {} - ~PrivetDeviceListerTest() override {} - - void SetUp() override { - example_attrs_.push_back("tXtvers=1"); - example_attrs_.push_back("ty=My Printer"); - example_attrs_.push_back("nOte=This is my Printer"); - example_attrs_.push_back("CS=ONlInE"); - example_attrs_.push_back("id="); - - service_description_.service_name = "myprinter._privet._tcp.local"; - service_description_.address = net::HostPortPair("myprinter.local", 6006); - service_description_.metadata = example_attrs_; - service_description_.last_seen = base::Time() + - base::TimeDelta::FromSeconds(5); - ASSERT_TRUE(service_description_.ip_address.AssignFromIPLiteral("1.2.3.4")); - } - - protected: - testing::StrictMock<MockServiceDiscoveryMockDelegate> mock_delegate_; - MockServiceDiscoveryClient mock_client_; - MockDeviceListerDelegate delegate_; - std::vector<std::string> example_attrs_; - ServiceDescription service_description_; -}; - -TEST_F(PrivetDeviceListerTest, SimpleUpdateTest) { - DeviceDescription outgoing_description; - - MockServiceWatcher* service_watcher; - MockServiceResolver* service_resolver; - - EXPECT_CALL(mock_delegate_, - ServiceWatcherStarted("_privet._tcp.local", _)) - .WillOnce(SaveArg<1>(&service_watcher)); - PrivetDeviceListerImpl privet_lister(&mock_client_, &delegate_); - privet_lister.Start(); - testing::Mock::VerifyAndClear(&mock_delegate_); - - EXPECT_CALL(mock_delegate_, - ServiceResolverStarted("myprinter._privet._tcp.local", _)) - .WillOnce(SaveArg<1>(&service_resolver)); - service_watcher->callback().Run(ServiceWatcher::UPDATE_ADDED, - "myprinter._privet._tcp.local"); - testing::Mock::VerifyAndClear(&mock_delegate_); - - EXPECT_CALL(delegate_, DeviceChanged("myprinter._privet._tcp.local", _)) - .WillOnce(SaveArg<1>(&outgoing_description)); - - std::move(*service_resolver->callback()) - .Run(ServiceResolver::STATUS_SUCCESS, service_description_); - - EXPECT_EQ(service_description_.address.host(), - outgoing_description.address.host()); - EXPECT_EQ(service_description_.address.port(), - outgoing_description.address.port()); - EXPECT_EQ("My Printer", outgoing_description.name); - EXPECT_EQ("This is my Printer", outgoing_description.description); - EXPECT_EQ("", outgoing_description.id); - - EXPECT_CALL(delegate_, DeviceRemoved("myprinter._privet._tcp.local")); - - service_watcher->callback().Run(ServiceWatcher::UPDATE_REMOVED, - "myprinter._privet._tcp.local"); -} - -TEST_F(PrivetDeviceListerTest, MultipleUpdatesPostResolve) { - MockServiceWatcher* service_watcher; - MockServiceResolver* service_resolver; - - EXPECT_CALL(mock_delegate_, - ServiceWatcherStarted("_privet._tcp.local", _)) - .WillOnce(SaveArg<1>(&service_watcher)); - PrivetDeviceListerImpl privet_lister(&mock_client_, &delegate_); - privet_lister.Start(); - testing::Mock::VerifyAndClear(&mock_delegate_); - - EXPECT_CALL(mock_delegate_, - ServiceResolverStarted("myprinter._privet._tcp.local", _)) - .WillOnce(SaveArg<1>(&service_resolver)); - - service_watcher->callback().Run(ServiceWatcher::UPDATE_CHANGED, - "myprinter._privet._tcp.local"); - testing::Mock::VerifyAndClear(&mock_delegate_); - - EXPECT_CALL(delegate_, DeviceChanged("myprinter._privet._tcp.local", _)); - std::move(*service_resolver->callback()) - .Run(ServiceResolver::STATUS_SUCCESS, service_description_); - - EXPECT_CALL(mock_delegate_, - ServiceResolverStarted("myprinter._privet._tcp.local", _)); - service_watcher->callback().Run(ServiceWatcher::UPDATE_CHANGED, - "myprinter._privet._tcp.local"); - testing::Mock::VerifyAndClear(&mock_delegate_); -} - -// Check that the device lister does not create a still-working resolver -TEST_F(PrivetDeviceListerTest, MultipleUpdatesPreResolve) { - MockServiceWatcher* service_watcher; - - EXPECT_CALL(mock_delegate_, - ServiceWatcherStarted("_privet._tcp.local", _)) - .WillOnce(SaveArg<1>(&service_watcher)); - PrivetDeviceListerImpl privet_lister(&mock_client_, &delegate_); - privet_lister.Start(); - testing::Mock::VerifyAndClear(&mock_delegate_); - - EXPECT_CALL(mock_delegate_, - ServiceResolverStarted("myprinter._privet._tcp.local", _)) - .Times(1); - service_watcher->callback().Run(ServiceWatcher::UPDATE_CHANGED, - "myprinter._privet._tcp.local"); - service_watcher->callback().Run(ServiceWatcher::UPDATE_CHANGED, - "myprinter._privet._tcp.local"); -} - -TEST_F(PrivetDeviceListerTest, DiscoverNewDevices) { - MockServiceWatcher* service_watcher; - - EXPECT_CALL(mock_delegate_, - ServiceWatcherStarted("_privet._tcp.local", _)) - .WillOnce(SaveArg<1>(&service_watcher)); - PrivetDeviceListerImpl privet_lister(&mock_client_, &delegate_); - privet_lister.Start(); - testing::Mock::VerifyAndClear(&mock_delegate_); - - EXPECT_CALL(*service_watcher, DiscoverNewServices()); - privet_lister.DiscoverNewDevices(); -} - - -} // namespace - -} // namespace cloud_print
diff --git a/chrome/browser/printing/cloud_print/privet_http.cc b/chrome/browser/printing/cloud_print/privet_http.cc deleted file mode 100644 index 6519834..0000000 --- a/chrome/browser/printing/cloud_print/privet_http.cc +++ /dev/null
@@ -1,22 +0,0 @@ -// Copyright 2014 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "chrome/browser/printing/cloud_print/privet_http.h" - -#include <memory> -#include <utility> - -#include "chrome/browser/printing/cloud_print/privet_http_impl.h" - -namespace cloud_print { - -// static -std::unique_ptr<PrivetV1HTTPClient> PrivetV1HTTPClient::CreateDefault( - std::unique_ptr<PrivetHTTPClient> info_client) { - if (!info_client) - return nullptr; - return std::make_unique<PrivetV1HTTPClientImpl>(std::move(info_client)); -} - -} // namespace cloud_print
diff --git a/chrome/browser/printing/cloud_print/privet_http.h b/chrome/browser/printing/cloud_print/privet_http.h deleted file mode 100644 index 230e7ef..0000000 --- a/chrome/browser/printing/cloud_print/privet_http.h +++ /dev/null
@@ -1,189 +0,0 @@ -// Copyright 2013 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef CHROME_BROWSER_PRINTING_CLOUD_PRINT_PRIVET_HTTP_H_ -#define CHROME_BROWSER_PRINTING_CLOUD_PRINT_PRIVET_HTTP_H_ - -#include <memory> -#include <string> - -#include "base/callback.h" -#include "chrome/browser/printing/cloud_print/privet_url_loader.h" -#include "net/base/host_port_pair.h" - -namespace base { -class RefCountedMemory; -} - -namespace gfx { -class Size; -} - -namespace printing { -class PwgRasterConverter; -} - -namespace cloud_print { - -class PrivetHTTPClient; - -// Represents a simple request that returns pure JSON. -class PrivetJSONOperation { - public: - // If value is null, the operation failed. - using ResultCallback = - base::OnceCallback<void(const base::DictionaryValue* /*value*/)>; - - virtual ~PrivetJSONOperation() {} - - virtual void Start() = 0; - - virtual PrivetHTTPClient* GetHTTPClient() = 0; -}; - -// Privet HTTP client. Must outlive the operations it creates. -class PrivetHTTPClient { - public: - virtual ~PrivetHTTPClient() {} - - // A name for the HTTP client, e.g. the device name for the privet device. - virtual const std::string& GetName() = 0; - - // Creates operation to query basic information about local device. - virtual std::unique_ptr<PrivetJSONOperation> CreateInfoOperation( - PrivetJSONOperation::ResultCallback callback) = 0; - - // Creates a URL loader for PrivetV1. - virtual std::unique_ptr<PrivetURLLoader> CreateURLLoader( - const GURL& url, - const std::string& http_method, - PrivetURLLoader::Delegate* delegate) = 0; - - virtual void RefreshPrivetToken( - PrivetURLLoader::TokenCallback token_callback) = 0; -}; - -// Represents a full registration flow (/privet/register), normally consisting -// of calling the start action, the getClaimToken action, and calling the -// complete action. Some intervention from the caller is required to display the -// claim URL to the user (noted in OnPrivetRegisterClaimURL). -class PrivetRegisterOperation { - public: - enum FailureReason { - FAILURE_NETWORK, - FAILURE_HTTP_ERROR, - FAILURE_JSON_ERROR, - FAILURE_MALFORMED_RESPONSE, - FAILURE_TOKEN, - FAILURE_UNKNOWN, - }; - - class Delegate { - public: - ~Delegate() {} - - // Called when a user needs to claim the printer by visiting the given URL. - virtual void OnPrivetRegisterClaimToken( - PrivetRegisterOperation* operation, - const std::string& token, - const GURL& url) = 0; - - // TODO(noamsml): Remove all unnecessary parameters. - // Called in case of an error while registering. |action| is the - // registration action taken during the error. |reason| is the reason for - // the failure. |printer_http_code| is the http code returned from the - // printer. If it is -1, an internal error occurred while trying to complete - // the request. |json| may be null if printer_http_code signifies an error. - virtual void OnPrivetRegisterError(PrivetRegisterOperation* operation, - const std::string& action, - FailureReason reason, - int printer_http_code, - const base::DictionaryValue* json) = 0; - - // Called when the registration is done. - virtual void OnPrivetRegisterDone(PrivetRegisterOperation* operation, - const std::string& device_id) = 0; - }; - - virtual ~PrivetRegisterOperation() {} - - virtual void Start() = 0; - // Owner SHOULD call explicitly before destroying operation. - virtual void Cancel() = 0; - virtual void CompleteRegistration() = 0; - - virtual PrivetHTTPClient* GetHTTPClient() = 0; -}; - -class PrivetLocalPrintOperation { - public: - class Delegate { - public: - virtual ~Delegate() {} - virtual void OnPrivetPrintingDone( - const PrivetLocalPrintOperation* print_operation) = 0; - virtual void OnPrivetPrintingError( - const PrivetLocalPrintOperation* print_operation, int http_code) = 0; - }; - - virtual ~PrivetLocalPrintOperation() {} - - virtual void Start() = 0; - - // Required print data. MUST be called before calling Start(). - virtual void SetData(scoped_refptr<base::RefCountedMemory> data) = 0; - - // Optional attributes for /submitdoc. Call before calling Start(). - // |ticket| should be in CJT format. - virtual void SetTicket(base::Value ticket) = 0; - - // |capabilities| should be in CDD format. - virtual void SetCapabilities(const std::string& capabilities) = 0; - - // Username and jobname are for display only. - virtual void SetUsername(const std::string& username) = 0; - virtual void SetJobname(const std::string& jobname) = 0; - - // Document page size. - virtual void SetPageSize(const gfx::Size& page_size) = 0; - - // For testing, inject an alternative PWG raster converter. - virtual void SetPwgRasterConverterForTesting( - std::unique_ptr<printing::PwgRasterConverter> pwg_raster_converter) = 0; - - virtual PrivetHTTPClient* GetHTTPClient() = 0; -}; - -// Privet HTTP client. Must outlive the operations it creates. -class PrivetV1HTTPClient { - public: - virtual ~PrivetV1HTTPClient() {} - - static std::unique_ptr<PrivetV1HTTPClient> CreateDefault( - std::unique_ptr<PrivetHTTPClient> info_client); - - // A name for the HTTP client, e.g. the device name for the privet device. - virtual const std::string& GetName() = 0; - - // Creates operation to query basic information about local device. - virtual std::unique_ptr<PrivetJSONOperation> CreateInfoOperation( - PrivetJSONOperation::ResultCallback callback) = 0; - - // Creates operation to register local device using Privet v1 protocol. - virtual std::unique_ptr<PrivetRegisterOperation> CreateRegisterOperation( - const std::string& user, - PrivetRegisterOperation::Delegate* delegate) = 0; - - // Creates operation to query capabilities of local printer. - virtual std::unique_ptr<PrivetJSONOperation> CreateCapabilitiesOperation( - PrivetJSONOperation::ResultCallback callback) = 0; - - // Creates operation to submit print job to local printer. - virtual std::unique_ptr<PrivetLocalPrintOperation> CreateLocalPrintOperation( - PrivetLocalPrintOperation::Delegate* delegate) = 0; -}; - -} // namespace cloud_print - -#endif // CHROME_BROWSER_PRINTING_CLOUD_PRINT_PRIVET_HTTP_H_
diff --git a/chrome/browser/printing/cloud_print/privet_http_asynchronous_factory.cc b/chrome/browser/printing/cloud_print/privet_http_asynchronous_factory.cc deleted file mode 100644 index 968fb33..0000000 --- a/chrome/browser/printing/cloud_print/privet_http_asynchronous_factory.cc +++ /dev/null
@@ -1,23 +0,0 @@ -// Copyright 2013 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "chrome/browser/printing/cloud_print/privet_http_asynchronous_factory.h" - -#include <memory> - -#include "base/memory/ptr_util.h" -#include "chrome/browser/printing/cloud_print/privet_http_asynchronous_factory_impl.h" -#include "services/network/public/cpp/shared_url_loader_factory.h" - -namespace cloud_print { - -// static -std::unique_ptr<PrivetHTTPAsynchronousFactory> -PrivetHTTPAsynchronousFactory::CreateInstance( - scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory) { - return base::WrapUnique<PrivetHTTPAsynchronousFactory>( - new PrivetHTTPAsynchronousFactoryImpl(url_loader_factory)); -} - -} // namespace cloud_print
diff --git a/chrome/browser/printing/cloud_print/privet_http_asynchronous_factory.h b/chrome/browser/printing/cloud_print/privet_http_asynchronous_factory.h deleted file mode 100644 index 2ee9337..0000000 --- a/chrome/browser/printing/cloud_print/privet_http_asynchronous_factory.h +++ /dev/null
@@ -1,52 +0,0 @@ -// Copyright 2013 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef CHROME_BROWSER_PRINTING_CLOUD_PRINT_PRIVET_HTTP_ASYNCHRONOUS_FACTORY_H_ -#define CHROME_BROWSER_PRINTING_CLOUD_PRINT_PRIVET_HTTP_ASYNCHRONOUS_FACTORY_H_ - -#include <memory> -#include <string> - -#include "base/callback.h" -#include "base/memory/ref_counted.h" - -namespace net { -class HostPortPair; -} - -namespace network { -class SharedURLLoaderFactory; -} - -namespace cloud_print { - -class PrivetHTTPClient; - -class PrivetHTTPResolution { - public: - using ResultCallback = - base::OnceCallback<void(std::unique_ptr<PrivetHTTPClient>)>; - - virtual ~PrivetHTTPResolution() {} - - virtual void Start(const net::HostPortPair& address, - ResultCallback callback) = 0; -}; - -class PrivetHTTPAsynchronousFactory { - public: - using ResultCallback = PrivetHTTPResolution::ResultCallback; - - virtual ~PrivetHTTPAsynchronousFactory() {} - - static std::unique_ptr<PrivetHTTPAsynchronousFactory> CreateInstance( - scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory); - - virtual std::unique_ptr<PrivetHTTPResolution> CreatePrivetHTTP( - const std::string& service_name) = 0; -}; - -} // namespace cloud_print - -#endif // CHROME_BROWSER_PRINTING_CLOUD_PRINT_PRIVET_HTTP_ASYNCHRONOUS_FACTORY_H_
diff --git a/chrome/browser/printing/cloud_print/privet_http_asynchronous_factory_impl.cc b/chrome/browser/printing/cloud_print/privet_http_asynchronous_factory_impl.cc deleted file mode 100644 index 03f8206..0000000 --- a/chrome/browser/printing/cloud_print/privet_http_asynchronous_factory_impl.cc +++ /dev/null
@@ -1,59 +0,0 @@ -// Copyright 2014 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "chrome/browser/printing/cloud_print/privet_http_asynchronous_factory_impl.h" - -#include <memory> -#include <utility> - -#include "base/bind.h" -#include "chrome/browser/local_discovery/endpoint_resolver.h" -#include "chrome/browser/printing/cloud_print/privet_http_impl.h" -#include "net/base/ip_endpoint.h" -#include "services/network/public/cpp/shared_url_loader_factory.h" - -namespace cloud_print { - -PrivetHTTPAsynchronousFactoryImpl::PrivetHTTPAsynchronousFactoryImpl( - scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory) - : url_loader_factory_(url_loader_factory) {} - -PrivetHTTPAsynchronousFactoryImpl::~PrivetHTTPAsynchronousFactoryImpl() {} - -std::unique_ptr<PrivetHTTPResolution> -PrivetHTTPAsynchronousFactoryImpl::CreatePrivetHTTP( - const std::string& service_name) { - return std::make_unique<ResolutionImpl>(service_name, url_loader_factory_); -} - -PrivetHTTPAsynchronousFactoryImpl::ResolutionImpl::ResolutionImpl( - const std::string& service_name, - scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory) - : name_(service_name), - url_loader_factory_(url_loader_factory), - endpoint_resolver_( - std::make_unique<local_discovery::EndpointResolver>()) {} - -PrivetHTTPAsynchronousFactoryImpl::ResolutionImpl::~ResolutionImpl() {} - -void PrivetHTTPAsynchronousFactoryImpl::ResolutionImpl::Start( - const net::HostPortPair& address, - ResultCallback callback) { - endpoint_resolver_->Start( - address, base::BindOnce(&ResolutionImpl::ResolveComplete, - base::Unretained(this), std::move(callback))); -} - -void PrivetHTTPAsynchronousFactoryImpl::ResolutionImpl::ResolveComplete( - ResultCallback callback, - const net::IPEndPoint& endpoint) { - if (endpoint.address().empty()) - return std::move(callback).Run(nullptr); - - net::HostPortPair new_address = net::HostPortPair::FromIPEndPoint(endpoint); - std::move(callback).Run(std::make_unique<PrivetHTTPClientImpl>( - name_, new_address, url_loader_factory_)); -} - -} // namespace cloud_print
diff --git a/chrome/browser/printing/cloud_print/privet_http_asynchronous_factory_impl.h b/chrome/browser/printing/cloud_print/privet_http_asynchronous_factory_impl.h deleted file mode 100644 index c8b8a7b3..0000000 --- a/chrome/browser/printing/cloud_print/privet_http_asynchronous_factory_impl.h +++ /dev/null
@@ -1,63 +0,0 @@ -// Copyright 2014 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef CHROME_BROWSER_PRINTING_CLOUD_PRINT_PRIVET_HTTP_ASYNCHRONOUS_FACTORY_IMPL_H_ -#define CHROME_BROWSER_PRINTING_CLOUD_PRINT_PRIVET_HTTP_ASYNCHRONOUS_FACTORY_IMPL_H_ - -#include <memory> -#include <string> - -#include "base/macros.h" -#include "base/memory/ref_counted.h" -#include "chrome/browser/printing/cloud_print/privet_http.h" -#include "chrome/browser/printing/cloud_print/privet_http_asynchronous_factory.h" - -namespace local_discovery { -class EndpointResolver; -} - -namespace network { -class SharedURLLoaderFactory; -} - -namespace cloud_print { - -class PrivetHTTPAsynchronousFactoryImpl : public PrivetHTTPAsynchronousFactory { - public: - explicit PrivetHTTPAsynchronousFactoryImpl( - scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory); - ~PrivetHTTPAsynchronousFactoryImpl() override; - - std::unique_ptr<PrivetHTTPResolution> CreatePrivetHTTP( - const std::string& service_name) override; - - private: - class ResolutionImpl : public PrivetHTTPResolution { - public: - ResolutionImpl( - const std::string& service_name, - scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory); - ~ResolutionImpl() override; - - void Start(const net::HostPortPair& address, - ResultCallback callback) override; - - private: - void ResolveComplete(ResultCallback callback, - const net::IPEndPoint& endpoint); - std::string name_; - scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory_; - std::unique_ptr<local_discovery::EndpointResolver> endpoint_resolver_; - - DISALLOW_COPY_AND_ASSIGN(ResolutionImpl); - }; - - scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory_; - - DISALLOW_COPY_AND_ASSIGN(PrivetHTTPAsynchronousFactoryImpl); -}; - -} // namespace cloud_print - -#endif // CHROME_BROWSER_PRINTING_CLOUD_PRINT_PRIVET_HTTP_ASYNCHRONOUS_FACTORY_IMPL_H_
diff --git a/chrome/browser/printing/cloud_print/privet_http_impl.cc b/chrome/browser/printing/cloud_print/privet_http_impl.cc deleted file mode 100644 index 960486b..0000000 --- a/chrome/browser/printing/cloud_print/privet_http_impl.cc +++ /dev/null
@@ -1,812 +0,0 @@ -// Copyright 2013 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "chrome/browser/printing/cloud_print/privet_http_impl.h" - -#include <stddef.h> - -#include <algorithm> -#include <memory> -#include <utility> -#include <vector> - -#include "base/bind.h" -#include "base/command_line.h" -#include "base/location.h" -#include "base/memory/ref_counted_memory.h" -#include "base/rand_util.h" -#include "base/strings/string_number_conversions.h" -#include "base/strings/utf_string_conversions.h" -#include "base/threading/thread_task_runner_handle.h" -#include "chrome/browser/printing/cloud_print/privet_constants.h" -#include "chrome/common/chrome_content_client.h" -#include "chrome/common/chrome_switches.h" -#include "chrome/common/cloud_print/cloud_print_constants.h" -#include "net/base/url_util.h" -#include "net/traffic_annotation/network_traffic_annotation.h" -#include "printing/buildflags/buildflags.h" -#include "services/network/public/cpp/shared_url_loader_factory.h" -#include "url/gurl.h" - -#if BUILDFLAG(ENABLE_PRINT_PREVIEW) -#include "chrome/browser/printing/pwg_raster_converter.h" -#include "components/cloud_devices/common/printer_description.h" -#include "printing/pdf_render_settings.h" -#include "printing/pwg_raster_settings.h" -#include "ui/gfx/text_elider.h" -#endif // ENABLE_PRINT_PREVIEW - -namespace cloud_print { - -namespace { - -const char kUrlPlaceHolder[] = "http://host/"; -const char kPrivetRegisterActionArgName[] = "action"; -const char kPrivetRegisterUserArgName[] = "user"; - -const int kPrivetCancelationTimeoutSeconds = 3; - -#if BUILDFLAG(ENABLE_PRINT_PREVIEW) -const char kPrivetURLKeyUserName[] = "user_name"; -const char kPrivetURLKeyClientName[] = "client_name"; -const char kPrivetURLKeyJobname[] = "job_name"; -const char kPrivetURLValueClientName[] = "Chrome"; - -const char kPrivetContentTypePDF[] = "application/pdf"; -const char kPrivetContentTypePWGRaster[] = "image/pwg-raster"; -const char kPrivetContentTypeAny[] = "*/*"; - -const char kPrivetKeyJobID[] = "job_id"; - -const int kPrivetLocalPrintMaxRetries = 2; -const int kPrivetLocalPrintDefaultTimeout = 5; - -const size_t kPrivetLocalPrintMaxJobNameLength = 64; -#endif // ENABLE_PRINT_PREVIEW - -GURL CreatePrivetURL(const std::string& path) { - GURL url(kUrlPlaceHolder); - GURL::Replacements replacements; - replacements.SetPathStr(path); - return url.ReplaceComponents(replacements); -} - -GURL CreatePrivetRegisterURL(const std::string& action, - const std::string& user) { - GURL url = CreatePrivetURL(kPrivetRegisterPath); - url = net::AppendQueryParameter(url, kPrivetRegisterActionArgName, action); - return net::AppendQueryParameter(url, kPrivetRegisterUserArgName, user); -} - -GURL CreatePrivetParamURL(const std::string& path, - const std::string& query_params) { - GURL url(kUrlPlaceHolder); - GURL::Replacements replacements; - replacements.SetPathStr(path); - if (!query_params.empty()) { - replacements.SetQueryStr(query_params); - } - return url.ReplaceComponents(replacements); -} - -} // namespace - -PrivetInfoOperationImpl::PrivetInfoOperationImpl( - PrivetHTTPClient* privet_client, - PrivetJSONOperation::ResultCallback callback) - : privet_client_(privet_client), callback_(std::move(callback)) {} - -PrivetInfoOperationImpl::~PrivetInfoOperationImpl() { -} - -void PrivetInfoOperationImpl::Start() { - url_loader_ = privet_client_->CreateURLLoader( - CreatePrivetURL(kPrivetInfoPath), "GET", this); - - url_loader_->DoNotRetryOnTransientError(); - url_loader_->SendEmptyPrivetToken(); - - url_loader_->Start(); -} - -PrivetHTTPClient* PrivetInfoOperationImpl::GetHTTPClient() { - return privet_client_; -} - -void PrivetInfoOperationImpl::OnError(int response_code, - PrivetURLLoader::ErrorType error) { - if (callback_) - std::move(callback_).Run(nullptr); -} - -void PrivetInfoOperationImpl::OnParsedJson(int response_code, - const base::DictionaryValue& value, - bool has_error) { - if (callback_) - std::move(callback_).Run(&value); -} - -// static -bool PrivetRegisterOperationImpl::run_tasks_immediately_for_testing_ = false; - -PrivetRegisterOperationImpl::RunTasksImmediatelyForTesting:: - RunTasksImmediatelyForTesting() { - DCHECK(!run_tasks_immediately_for_testing_); - run_tasks_immediately_for_testing_ = true; -} - -PrivetRegisterOperationImpl::RunTasksImmediatelyForTesting:: - ~RunTasksImmediatelyForTesting() { - DCHECK(run_tasks_immediately_for_testing_); - run_tasks_immediately_for_testing_ = false; -} - -PrivetRegisterOperationImpl::PrivetRegisterOperationImpl( - PrivetHTTPClient* privet_client, - const std::string& user, - PrivetRegisterOperation::Delegate* delegate) - : user_(user), delegate_(delegate), privet_client_(privet_client) {} - -PrivetRegisterOperationImpl::~PrivetRegisterOperationImpl() { -} - -void PrivetRegisterOperationImpl::Start() { - ongoing_ = true; - next_response_handler_ = base::BindOnce( - &PrivetRegisterOperationImpl::StartResponse, base::Unretained(this)); - SendRequest(kPrivetActionStart); -} - -void PrivetRegisterOperationImpl::Cancel() { - url_loader_.reset(); - - if (!ongoing_) - return; - - int delay_seconds = - run_tasks_immediately_for_testing_ ? 0 : kPrivetCancelationTimeoutSeconds; - - base::ThreadTaskRunnerHandle::Get()->PostDelayedTask( - FROM_HERE, - base::BindOnce(&PrivetRegisterOperationImpl::Cancelation::Cleanup, - base::Owned(new Cancelation(privet_client_, user_))), - base::TimeDelta::FromSeconds(delay_seconds)); - ongoing_ = false; -} - -void PrivetRegisterOperationImpl::CompleteRegistration() { - next_response_handler_ = base::BindOnce( - &PrivetRegisterOperationImpl::CompleteResponse, base::Unretained(this)); - SendRequest(kPrivetActionComplete); -} - -PrivetHTTPClient* PrivetRegisterOperationImpl::GetHTTPClient() { - return privet_client_; -} - -void PrivetRegisterOperationImpl::OnError(int response_code, - PrivetURLLoader::ErrorType error) { - ongoing_ = false; - int visible_http_code = -1; - FailureReason reason = FAILURE_NETWORK; - - if (error == PrivetURLLoader::RESPONSE_CODE_ERROR) { - visible_http_code = response_code; - reason = FAILURE_HTTP_ERROR; - } else if (error == PrivetURLLoader::JSON_PARSE_ERROR) { - reason = FAILURE_MALFORMED_RESPONSE; - } else if (error == PrivetURLLoader::TOKEN_ERROR) { - reason = FAILURE_TOKEN; - } else if (error == PrivetURLLoader::UNKNOWN_ERROR) { - reason = FAILURE_UNKNOWN; - } - - delegate_->OnPrivetRegisterError(this, current_action_, reason, - visible_http_code, nullptr); -} - -void PrivetRegisterOperationImpl::OnParsedJson( - int response_code, - const base::DictionaryValue& value, - bool has_error) { - if (has_error) { - std::string error; - value.GetString(kPrivetKeyError, &error); - - ongoing_ = false; - delegate_->OnPrivetRegisterError(this, current_action_, FAILURE_JSON_ERROR, - response_code, &value); - return; - } - - // TODO(noamsml): Match the user&action with the user&action in the object, - // and fail if different. - std::move(next_response_handler_).Run(value); -} - -void PrivetRegisterOperationImpl::OnNeedPrivetToken( - PrivetURLLoader::TokenCallback callback) { - privet_client_->RefreshPrivetToken(std::move(callback)); -} - -void PrivetRegisterOperationImpl::SendRequest(const std::string& action) { - current_action_ = action; - url_loader_ = privet_client_->CreateURLLoader( - CreatePrivetRegisterURL(action, user_), "POST", this); - url_loader_->Start(); -} - -void PrivetRegisterOperationImpl::StartResponse( - const base::DictionaryValue& value) { - next_response_handler_ = - base::BindOnce(&PrivetRegisterOperationImpl::GetClaimTokenResponse, - base::Unretained(this)); - - SendRequest(kPrivetActionGetClaimToken); -} - -void PrivetRegisterOperationImpl::GetClaimTokenResponse( - const base::DictionaryValue& value) { - std::string claim_url; - std::string claim_token; - bool got_url = value.GetString(kPrivetKeyClaimURL, &claim_url); - bool got_token = value.GetString(kPrivetKeyClaimToken, &claim_token); - if (got_url || got_token) { - delegate_->OnPrivetRegisterClaimToken(this, claim_token, GURL(claim_url)); - } else { - delegate_->OnPrivetRegisterError(this, current_action_, - FAILURE_MALFORMED_RESPONSE, -1, nullptr); - } -} - -void PrivetRegisterOperationImpl::CompleteResponse( - const base::DictionaryValue& value) { - std::string id; - value.GetString(kPrivetKeyDeviceID, &id); - ongoing_ = false; - expected_id_ = id; - StartInfoOperation(); -} - -void PrivetRegisterOperationImpl::OnPrivetInfoDone( - const base::DictionaryValue* value) { - // TODO(noamsml): Simplify error case and depracate HTTP error value in - // OnPrivetRegisterError. - if (!value) { - delegate_->OnPrivetRegisterError(this, kPrivetActionNameInfo, - FAILURE_NETWORK, -1, nullptr); - return; - } - - if (!value->HasKey(kPrivetInfoKeyID)) { - if (value->HasKey(kPrivetKeyError)) { - delegate_->OnPrivetRegisterError(this, - kPrivetActionNameInfo, - FAILURE_JSON_ERROR, - -1, - value); - } else { - delegate_->OnPrivetRegisterError(this, kPrivetActionNameInfo, - FAILURE_MALFORMED_RESPONSE, -1, nullptr); - } - return; - } - - std::string id; - - if (!value->GetString(kPrivetInfoKeyID, &id) || - id != expected_id_) { - delegate_->OnPrivetRegisterError(this, kPrivetActionNameInfo, - FAILURE_MALFORMED_RESPONSE, -1, nullptr); - } else { - delegate_->OnPrivetRegisterDone(this, id); - } -} - -void PrivetRegisterOperationImpl::StartInfoOperation() { - info_operation_ = privet_client_->CreateInfoOperation(base::BindOnce( - &PrivetRegisterOperationImpl::OnPrivetInfoDone, base::Unretained(this))); - info_operation_->Start(); -} - -PrivetRegisterOperationImpl::Cancelation::Cancelation( - PrivetHTTPClient* privet_client, - const std::string& user) { - url_loader_ = privet_client->CreateURLLoader( - CreatePrivetRegisterURL(kPrivetActionCancel, user), "POST", this); - url_loader_->DoNotRetryOnTransientError(); - url_loader_->Start(); -} - -PrivetRegisterOperationImpl::Cancelation::~Cancelation() { -} - -void PrivetRegisterOperationImpl::Cancelation::OnError( - int response_code, - PrivetURLLoader::ErrorType error) {} - -void PrivetRegisterOperationImpl::Cancelation::OnParsedJson( - int response_code, - const base::DictionaryValue& value, - bool has_error) {} - -void PrivetRegisterOperationImpl::Cancelation::Cleanup() { - // Nothing needs to be done, as base::Owned will delete this object, - // this callback is just here to pass ownership of the Cancelation to - // the message loop. -} - -PrivetJSONOperationImpl::PrivetJSONOperationImpl( - PrivetHTTPClient* privet_client, - const std::string& path, - const std::string& query_params, - PrivetJSONOperation::ResultCallback callback) - : privet_client_(privet_client), - path_(path), - query_params_(query_params), - callback_(std::move(callback)) {} - -PrivetJSONOperationImpl::~PrivetJSONOperationImpl() { -} - -void PrivetJSONOperationImpl::Start() { - url_loader_ = privet_client_->CreateURLLoader( - CreatePrivetParamURL(path_, query_params_), "GET", this); - url_loader_->DoNotRetryOnTransientError(); - url_loader_->Start(); -} - -PrivetHTTPClient* PrivetJSONOperationImpl::GetHTTPClient() { - return privet_client_; -} - -void PrivetJSONOperationImpl::OnError(int response_code, - PrivetURLLoader::ErrorType error) { - if (callback_) - std::move(callback_).Run(nullptr); -} - -void PrivetJSONOperationImpl::OnParsedJson(int response_code, - const base::DictionaryValue& value, - bool has_error) { - if (callback_) - std::move(callback_).Run(&value); -} - -void PrivetJSONOperationImpl::OnNeedPrivetToken( - PrivetURLLoader::TokenCallback callback) { - privet_client_->RefreshPrivetToken(std::move(callback)); -} - -#if BUILDFLAG(ENABLE_PRINT_PREVIEW) -// static -bool PrivetLocalPrintOperationImpl::run_tasks_immediately_for_testing_ = false; - -PrivetLocalPrintOperationImpl::RunTasksImmediatelyForTesting:: - RunTasksImmediatelyForTesting() { - DCHECK(!run_tasks_immediately_for_testing_); - run_tasks_immediately_for_testing_ = true; -} - -PrivetLocalPrintOperationImpl::RunTasksImmediatelyForTesting:: - ~RunTasksImmediatelyForTesting() { - DCHECK(run_tasks_immediately_for_testing_); - run_tasks_immediately_for_testing_ = false; -} - -PrivetLocalPrintOperationImpl::PrivetLocalPrintOperationImpl( - PrivetHTTPClient* privet_client, - PrivetLocalPrintOperation::Delegate* delegate) - : privet_client_(privet_client), delegate_(delegate) {} - -PrivetLocalPrintOperationImpl::~PrivetLocalPrintOperationImpl() { -} - -void PrivetLocalPrintOperationImpl::Start() { - DCHECK(!started_); - - // We need to get the /info response so we can know which APIs are available. - // TODO(noamsml): Use cached info when available. - info_operation_ = privet_client_->CreateInfoOperation( - base::BindOnce(&PrivetLocalPrintOperationImpl::OnPrivetInfoDone, - weak_factory_.GetWeakPtr())); - info_operation_->Start(); - started_ = true; -} - -void PrivetLocalPrintOperationImpl::OnPrivetInfoDone( - const base::DictionaryValue* value) { - if (!value || value->HasKey(kPrivetKeyError)) { - delegate_->OnPrivetPrintingError(this, -1); - return; - } - - has_extended_workflow_ = false; - bool has_printing = false; - const base::Value* api_list = - value->FindKeyOfType(kPrivetInfoKeyAPIList, base::Value::Type::LIST); - if (api_list) { - for (const auto& api : api_list->GetList()) { - if (!api.is_string()) - continue; - - const std::string& api_str = api.GetString(); - if (!has_printing && api_str == kPrivetSubmitdocPath) - has_printing = true; - else if (!has_extended_workflow_ && api_str == kPrivetCreatejobPath) - has_extended_workflow_ = true; - - if (has_printing && has_extended_workflow_) - break; - } - } - - if (!has_printing) { - delegate_->OnPrivetPrintingError(this, -1); - return; - } - - StartInitialRequest(); -} - -void PrivetLocalPrintOperationImpl::StartInitialRequest() { - cloud_devices::printer::ContentTypesCapability content_types; - if (content_types.LoadFrom(capabilities_)) { - use_pdf_ = content_types.Contains(kPrivetContentTypePDF) || - content_types.Contains(kPrivetContentTypeAny); - } else { - use_pdf_ = false; - } - - if (use_pdf_) { - StartPrinting(); - } else { - StartConvertToPWG(); - } -} - -void PrivetLocalPrintOperationImpl::DoCreatejob() { - current_response_ = - base::BindOnce(&PrivetLocalPrintOperationImpl::OnCreatejobResponse, - weak_factory_.GetWeakPtr()); - - url_loader_ = privet_client_->CreateURLLoader( - CreatePrivetURL(kPrivetCreatejobPath), "POST", this); - url_loader_->SetUploadData(kContentTypeJSON, ticket_.ToString()); - - url_loader_->Start(); -} - -void PrivetLocalPrintOperationImpl::DoSubmitdoc() { - current_response_ = - base::BindOnce(&PrivetLocalPrintOperationImpl::OnSubmitdocResponse, - weak_factory_.GetWeakPtr()); - - GURL url = CreatePrivetURL(kPrivetSubmitdocPath); - - url = net::AppendQueryParameter(url, - kPrivetURLKeyClientName, - kPrivetURLValueClientName); - - if (!user_.empty()) { - url = net::AppendQueryParameter(url, - kPrivetURLKeyUserName, - user_); - } - - std::u16string shortened_jobname; - gfx::ElideString(base::UTF8ToUTF16(jobname_), - kPrivetLocalPrintMaxJobNameLength, - &shortened_jobname); - - if (!jobname_.empty()) { - url = net::AppendQueryParameter( - url, kPrivetURLKeyJobname, base::UTF16ToUTF8(shortened_jobname)); - } - - if (!jobid_.empty()) { - url = net::AppendQueryParameter(url, - kPrivetKeyJobID, - jobid_); - } - - url_loader_ = privet_client_->CreateURLLoader(url, "POST", this); - - std::string data_str(reinterpret_cast<const char*>(data_->front()), - data_->size()); - url_loader_->SetUploadData( - use_pdf_ ? kPrivetContentTypePDF : kPrivetContentTypePWGRaster, data_str); - url_loader_->Start(); -} - -void PrivetLocalPrintOperationImpl::StartPrinting() { - if (has_extended_workflow_ && jobid_.empty()) { - DoCreatejob(); - } else { - DoSubmitdoc(); - } -} - -void PrivetLocalPrintOperationImpl::StartConvertToPWG() { - using printing::PwgRasterConverter; - if (!pwg_raster_converter_) - pwg_raster_converter_ = PwgRasterConverter::CreateDefault(); - - printing::PwgRasterSettings bitmap_settings = - PwgRasterConverter::GetBitmapSettings(capabilities_, ticket_); - pwg_raster_converter_->Start( - data_.get(), - PwgRasterConverter::GetConversionSettings(capabilities_, page_size_, - bitmap_settings.use_color), - bitmap_settings, - base::BindOnce(&PrivetLocalPrintOperationImpl::OnPWGRasterConverted, - weak_factory_.GetWeakPtr())); -} - -void PrivetLocalPrintOperationImpl::OnSubmitdocResponse( - bool has_error, - const base::DictionaryValue* value) { - std::string error; - // This error is only relevant in the case of extended workflow: - // If the print job ID is invalid, retry createjob and submitdoc, - // rather than simply retrying the current request. - if (has_error && value->GetString(kPrivetKeyError, &error)) { - if (has_extended_workflow_ && - error == kPrivetErrorInvalidPrintJob && - invalid_job_retries_ < kPrivetLocalPrintMaxRetries) { - invalid_job_retries_++; - - int timeout = kPrivetLocalPrintDefaultTimeout; - value->GetInteger(kPrivetKeyTimeout, &timeout); - - double random_scaling_factor = - 1 + base::RandDouble() * kPrivetMaximumTimeRandomAddition; - - timeout = - run_tasks_immediately_for_testing_ - ? 0 - : std::max(static_cast<int>(timeout * random_scaling_factor), - kPrivetMinimumTimeout); - base::ThreadTaskRunnerHandle::Get()->PostDelayedTask( - FROM_HERE, - base::BindOnce(&PrivetLocalPrintOperationImpl::DoCreatejob, - weak_factory_.GetWeakPtr()), - base::TimeDelta::FromSeconds(timeout)); - } else if (use_pdf_ && error == kPrivetErrorInvalidDocumentType) { - use_pdf_ = false; - StartConvertToPWG(); - } else { - delegate_->OnPrivetPrintingError(this, 200); - } - - return; - } - - // If we've gotten this far, there are no errors, so we've effectively - // succeeded. - delegate_->OnPrivetPrintingDone(this); -} - -void PrivetLocalPrintOperationImpl::OnCreatejobResponse( - bool has_error, - const base::DictionaryValue* value) { - if (has_error) { - delegate_->OnPrivetPrintingError(this, 200); - return; - } - - // Try to get job ID from value. If not, |jobid_| will be empty and we will - // use simple printing. - value->GetString(kPrivetKeyJobID, &jobid_); - DoSubmitdoc(); -} - -void PrivetLocalPrintOperationImpl::OnPWGRasterConverted( - base::ReadOnlySharedMemoryRegion pwg_region) { - auto data = - base::RefCountedSharedMemoryMapping::CreateFromWholeRegion(pwg_region); - if (!data) { - delegate_->OnPrivetPrintingError(this, -1); - return; - } - - data_ = data; - StartPrinting(); -} - -PrivetHTTPClient* PrivetLocalPrintOperationImpl::GetHTTPClient() { - return privet_client_; -} - -void PrivetLocalPrintOperationImpl::OnError(int response_code, - PrivetURLLoader::ErrorType error) { - delegate_->OnPrivetPrintingError(this, -1); -} - -void PrivetLocalPrintOperationImpl::OnParsedJson( - int response_code, - const base::DictionaryValue& value, - bool has_error) { - DCHECK(current_response_); - std::move(current_response_).Run(has_error, &value); -} - -void PrivetLocalPrintOperationImpl::OnNeedPrivetToken( - PrivetURLLoader::TokenCallback callback) { - privet_client_->RefreshPrivetToken(std::move(callback)); -} - -void PrivetLocalPrintOperationImpl::SetData( - scoped_refptr<base::RefCountedMemory> data) { - DCHECK(!started_); - data_ = data; -} - -void PrivetLocalPrintOperationImpl::SetTicket(base::Value ticket) { - DCHECK(!started_); - ticket_.InitFromValue(std::move(ticket)); -} - -void PrivetLocalPrintOperationImpl::SetCapabilities( - const std::string& capabilities) { - DCHECK(!started_); - capabilities_.InitFromString(capabilities); -} - -void PrivetLocalPrintOperationImpl::SetUsername(const std::string& user) { - DCHECK(!started_); - user_ = user; -} - -void PrivetLocalPrintOperationImpl::SetJobname(const std::string& jobname) { - DCHECK(!started_); - jobname_ = jobname; -} - -void PrivetLocalPrintOperationImpl::SetPageSize(const gfx::Size& page_size) { - DCHECK(!started_); - page_size_ = page_size; -} - -void PrivetLocalPrintOperationImpl::SetPwgRasterConverterForTesting( - std::unique_ptr<printing::PwgRasterConverter> pwg_raster_converter) { - pwg_raster_converter_ = std::move(pwg_raster_converter); -} -#endif // ENABLE_PRINT_PREVIEW - -PrivetHTTPClientImpl::PrivetHTTPClientImpl( - const std::string& name, - const net::HostPortPair& host_port, - scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory) - : name_(name), - url_loader_factory_(url_loader_factory), - host_port_(host_port) { - DCHECK(url_loader_factory_); -} - -PrivetHTTPClientImpl::~PrivetHTTPClientImpl() { -} - -const std::string& PrivetHTTPClientImpl::GetName() { - return name_; -} - -std::unique_ptr<PrivetJSONOperation> PrivetHTTPClientImpl::CreateInfoOperation( - PrivetJSONOperation::ResultCallback callback) { - return std::make_unique<PrivetInfoOperationImpl>(this, std::move(callback)); -} - -std::unique_ptr<PrivetURLLoader> PrivetHTTPClientImpl::CreateURLLoader( - const GURL& url, - const std::string& request_type, - PrivetURLLoader::Delegate* delegate) { - GURL::Replacements replacements; - std::string host = host_port_.HostForURL(); - replacements.SetHostStr(host); - std::string port = base::NumberToString(host_port_.port()); - replacements.SetPortStr(port); - - net::NetworkTrafficAnnotationTag traffic_annotation = - net::DefineNetworkTrafficAnnotation("privet_http_impl", R"( - semantics { - sender: "Cloud Print" - description: - "Cloud Print local printing uses these requests to query " - "information from printers on local network and send print jobs to " - "them." - trigger: - "Print Preview; New printer on network; chrome://devices/" - data: - "Printer information, settings and document for printing." - destination: OTHER - } - policy { - cookies_allowed: NO - setting: - "Users can enable or disable background requests by 'Show " - "notifications when new printers are detected on the network' in " - "Chromium's settings under Advanced Settings, Google Cloud Print. " - "User triggered requests, like from print preview or " - "chrome://devices/ cannot be disabled." - policy_exception_justification: - "Not implemented, it's good to do so." - })"); - return std::make_unique<PrivetURLLoader>(url.ReplaceComponents(replacements), - request_type, url_loader_factory_, - traffic_annotation, delegate); -} - -void PrivetHTTPClientImpl::RefreshPrivetToken( - PrivetURLLoader::TokenCallback callback) { - token_callbacks_.push_back(std::move(callback)); - - if (info_operation_) - return; - - info_operation_ = CreateInfoOperation(base::BindOnce( - &PrivetHTTPClientImpl::OnPrivetInfoDone, base::Unretained(this))); - info_operation_->Start(); -} - -void PrivetHTTPClientImpl::OnPrivetInfoDone( - const base::DictionaryValue* value) { - info_operation_.reset(); - - // If this does not succeed, token will be empty, and an empty string - // is our sentinel value, since empty X-Privet-Tokens are not allowed. - std::string token; - if (value) - value->GetString(kPrivetInfoKeyToken, &token); - - TokenCallbackVector token_callbacks; - token_callbacks_.swap(token_callbacks); - - for (auto& callback : token_callbacks) - std::move(callback).Run(token); -} - -PrivetV1HTTPClientImpl::PrivetV1HTTPClientImpl( - std::unique_ptr<PrivetHTTPClient> info_client) - : info_client_(std::move(info_client)) {} - -PrivetV1HTTPClientImpl::~PrivetV1HTTPClientImpl() { -} - -const std::string& PrivetV1HTTPClientImpl::GetName() { - return info_client_->GetName(); -} - -std::unique_ptr<PrivetJSONOperation> -PrivetV1HTTPClientImpl::CreateInfoOperation( - PrivetJSONOperation::ResultCallback callback) { - return info_client_->CreateInfoOperation(std::move(callback)); -} - -std::unique_ptr<PrivetRegisterOperation> -PrivetV1HTTPClientImpl::CreateRegisterOperation( - const std::string& user, - PrivetRegisterOperation::Delegate* delegate) { - return std::make_unique<PrivetRegisterOperationImpl>(info_client_.get(), user, - delegate); -} - -std::unique_ptr<PrivetJSONOperation> -PrivetV1HTTPClientImpl::CreateCapabilitiesOperation( - PrivetJSONOperation::ResultCallback callback) { - return std::make_unique<PrivetJSONOperationImpl>( - info_client_.get(), kPrivetCapabilitiesPath, "", std::move(callback)); -} - -std::unique_ptr<PrivetLocalPrintOperation> -PrivetV1HTTPClientImpl::CreateLocalPrintOperation( - PrivetLocalPrintOperation::Delegate* delegate) { -#if BUILDFLAG(ENABLE_PRINT_PREVIEW) - return std::make_unique<PrivetLocalPrintOperationImpl>(info_client_.get(), - delegate); -#else - return nullptr; -#endif // ENABLE_PRINT_PREVIEW -} - -} // namespace cloud_print
diff --git a/chrome/browser/printing/cloud_print/privet_http_impl.h b/chrome/browser/printing/cloud_print/privet_http_impl.h deleted file mode 100644 index f828c5aa..0000000 --- a/chrome/browser/printing/cloud_print/privet_http_impl.h +++ /dev/null
@@ -1,310 +0,0 @@ -// Copyright 2013 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef CHROME_BROWSER_PRINTING_CLOUD_PRINT_PRIVET_HTTP_IMPL_H_ -#define CHROME_BROWSER_PRINTING_CLOUD_PRINT_PRIVET_HTTP_IMPL_H_ - -#include <memory> -#include <string> -#include <vector> - -#include "base/callback.h" -#include "base/macros.h" -#include "base/memory/read_only_shared_memory_region.h" -#include "base/memory/ref_counted.h" -#include "base/memory/weak_ptr.h" -#include "chrome/browser/printing/cloud_print/privet_http.h" -#include "chrome/browser/printing/cloud_print/privet_url_loader.h" -#include "components/cloud_devices/common/cloud_device_description.h" -#include "printing/buildflags/buildflags.h" -#include "ui/gfx/geometry/size.h" - -namespace base { -class RefCountedMemory; -} - -namespace network { -class SharedURLLoaderFactory; -} - -namespace cloud_print { - -class PrivetHTTPClient; - -class PrivetInfoOperationImpl : public PrivetJSONOperation, - public PrivetURLLoader::Delegate { - public: - PrivetInfoOperationImpl(PrivetHTTPClient* privet_client, - PrivetJSONOperation::ResultCallback callback); - ~PrivetInfoOperationImpl() override; - - // PrivetJSONOperation: - void Start() override; - PrivetHTTPClient* GetHTTPClient() override; - - // PrivetURLLoader::Delegate: - void OnError(int response_code, PrivetURLLoader::ErrorType error) override; - void OnParsedJson(int response_code, - const base::DictionaryValue& value, - bool has_error) override; - - private: - PrivetHTTPClient* const privet_client_; - PrivetJSONOperation::ResultCallback callback_; - std::unique_ptr<PrivetURLLoader> url_loader_; -}; - -class PrivetRegisterOperationImpl - : public PrivetRegisterOperation, - public PrivetURLLoader::Delegate, - public base::SupportsWeakPtr<PrivetRegisterOperationImpl> { - public: - PrivetRegisterOperationImpl(PrivetHTTPClient* privet_client, - const std::string& user, - PrivetRegisterOperation::Delegate* delegate); - ~PrivetRegisterOperationImpl() override; - - // PrivetRegisterOperation: - void Start() override; - void Cancel() override; - void CompleteRegistration() override; - PrivetHTTPClient* GetHTTPClient() override; - - // PrivetURLLoader::Delegate: - void OnError(int response_code, PrivetURLLoader::ErrorType error) override; - void OnParsedJson(int response_code, - const base::DictionaryValue& value, - bool has_error) override; - void OnNeedPrivetToken(PrivetURLLoader::TokenCallback callback) override; - - // Used in test to skip delays when posting tasks for cancellation. - class RunTasksImmediatelyForTesting final { - public: - RunTasksImmediatelyForTesting(); - ~RunTasksImmediatelyForTesting(); - }; - - private: - class Cancelation : public PrivetURLLoader::Delegate { - public: - Cancelation(PrivetHTTPClient* privet_client, const std::string& user); - ~Cancelation() override; - - // PrivetURLLoader::Delegate: - void OnError(int response_code, PrivetURLLoader::ErrorType error) override; - void OnParsedJson(int response_code, - const base::DictionaryValue& value, - bool has_error) override; - - void Cleanup(); - - private: - std::unique_ptr<PrivetURLLoader> url_loader_; - }; - - // Arguments is JSON value from request. - using ResponseHandler = - base::OnceCallback<void(const base::DictionaryValue&)>; - - void StartInfoOperation(); - void OnPrivetInfoDone(const base::DictionaryValue* value); - - void StartResponse(const base::DictionaryValue& value); - void GetClaimTokenResponse(const base::DictionaryValue& value); - void CompleteResponse(const base::DictionaryValue& value); - - void SendRequest(const std::string& action); - - const std::string user_; - std::string current_action_; - std::unique_ptr<PrivetURLLoader> url_loader_; - PrivetRegisterOperation::Delegate* const delegate_; - PrivetHTTPClient* const privet_client_; - ResponseHandler next_response_handler_; - // Required to ensure destroying completed register operations doesn't cause - // extraneous cancelations. - bool ongoing_ = false; - - std::unique_ptr<PrivetJSONOperation> info_operation_; - std::string expected_id_; - - static bool run_tasks_immediately_for_testing_; -}; - -class PrivetJSONOperationImpl : public PrivetJSONOperation, - public PrivetURLLoader::Delegate { - public: - PrivetJSONOperationImpl(PrivetHTTPClient* privet_client, - const std::string& path, - const std::string& query_params, - PrivetJSONOperation::ResultCallback callback); - ~PrivetJSONOperationImpl() override; - - // PrivetJSONOperation: - void Start() override; - PrivetHTTPClient* GetHTTPClient() override; - - // PrivetURLLoader::Delegate: - void OnError(int response_code, PrivetURLLoader::ErrorType error) override; - void OnParsedJson(int response_code, - const base::DictionaryValue& value, - bool has_error) override; - void OnNeedPrivetToken(PrivetURLLoader::TokenCallback callback) override; - - private: - PrivetHTTPClient* const privet_client_; - const std::string path_; - const std::string query_params_; - PrivetJSONOperation::ResultCallback callback_; - - std::unique_ptr<PrivetURLLoader> url_loader_; -}; - -#if BUILDFLAG(ENABLE_PRINT_PREVIEW) -class PrivetLocalPrintOperationImpl : public PrivetLocalPrintOperation, - public PrivetURLLoader::Delegate { - public: - PrivetLocalPrintOperationImpl(PrivetHTTPClient* privet_client, - PrivetLocalPrintOperation::Delegate* delegate); - ~PrivetLocalPrintOperationImpl() override; - - // PrivetLocalPrintOperation: - void Start() override; - void SetData(scoped_refptr<base::RefCountedMemory> data) override; - void SetTicket(base::Value ticket) override; - void SetCapabilities(const std::string& capabilities) override; - void SetUsername(const std::string& user) override; - void SetJobname(const std::string& jobname) override; - void SetPageSize(const gfx::Size& page_size) override; - void SetPwgRasterConverterForTesting( - std::unique_ptr<printing::PwgRasterConverter> pwg_raster_converter) - override; - PrivetHTTPClient* GetHTTPClient() override; - - // PrivetURLLoader::Delegate: - void OnError(int response_code, PrivetURLLoader::ErrorType error) override; - void OnParsedJson(int response_code, - const base::DictionaryValue& value, - bool has_error) override; - void OnNeedPrivetToken(PrivetURLLoader::TokenCallback callback) override; - - // Used in test to skip delays when posting tasks for cancellation. - class RunTasksImmediatelyForTesting final { - public: - RunTasksImmediatelyForTesting(); - ~RunTasksImmediatelyForTesting(); - }; - - private: - using ResponseCallback = - base::OnceCallback<void(/*has_error=*/bool, - const base::DictionaryValue* value)>; - - void StartInitialRequest(); - void DoCreatejob(); - void DoSubmitdoc(); - - void StartConvertToPWG(); - void StartPrinting(); - - void OnPrivetInfoDone(const base::DictionaryValue* value); - void OnSubmitdocResponse(bool has_error, - const base::DictionaryValue* value); - void OnCreatejobResponse(bool has_error, - const base::DictionaryValue* value); - void OnPWGRasterConverted(base::ReadOnlySharedMemoryRegion pwg_region); - - PrivetHTTPClient* const privet_client_; - PrivetLocalPrintOperation::Delegate* const delegate_; - - ResponseCallback current_response_; - - cloud_devices::CloudDeviceDescription ticket_; - cloud_devices::CloudDeviceDescription capabilities_; - - scoped_refptr<base::RefCountedMemory> data_; - - bool use_pdf_ = false; - bool has_extended_workflow_ = false; - bool started_ = false; - gfx::Size page_size_; - - std::string user_; - std::string jobname_; - - std::string jobid_; - - int invalid_job_retries_ = 0; - - std::unique_ptr<PrivetURLLoader> url_loader_; - std::unique_ptr<PrivetJSONOperation> info_operation_; - std::unique_ptr<printing::PwgRasterConverter> pwg_raster_converter_; - - base::WeakPtrFactory<PrivetLocalPrintOperationImpl> weak_factory_{this}; - - static bool run_tasks_immediately_for_testing_; -}; -#endif // ENABLE_PRINT_PREVIEW - -class PrivetHTTPClientImpl : public PrivetHTTPClient { - public: - PrivetHTTPClientImpl( - const std::string& name, - const net::HostPortPair& host_port, - scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory); - ~PrivetHTTPClientImpl() override; - - // PrivetHTTPClient: - const std::string& GetName() override; - std::unique_ptr<PrivetJSONOperation> CreateInfoOperation( - PrivetJSONOperation::ResultCallback callback) override; - std::unique_ptr<PrivetURLLoader> CreateURLLoader( - const GURL& url, - const std::string& request_type, - PrivetURLLoader::Delegate* delegate) override; - void RefreshPrivetToken( - PrivetURLLoader::TokenCallback token_callback) override; - - private: - using TokenCallbackVector = std::vector<PrivetURLLoader::TokenCallback>; - - void OnPrivetInfoDone(const base::DictionaryValue* value); - - const std::string name_; - scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory_; - const net::HostPortPair host_port_; - - std::unique_ptr<PrivetJSONOperation> info_operation_; - TokenCallbackVector token_callbacks_; - - DISALLOW_COPY_AND_ASSIGN(PrivetHTTPClientImpl); -}; - -class PrivetV1HTTPClientImpl : public PrivetV1HTTPClient { - public: - explicit PrivetV1HTTPClientImpl( - std::unique_ptr<PrivetHTTPClient> info_client); - ~PrivetV1HTTPClientImpl() override; - - // PrivetV1HTTPClient: - const std::string& GetName() override; - std::unique_ptr<PrivetJSONOperation> CreateInfoOperation( - PrivetJSONOperation::ResultCallback callback) override; - std::unique_ptr<PrivetRegisterOperation> CreateRegisterOperation( - const std::string& user, - PrivetRegisterOperation::Delegate* delegate) override; - std::unique_ptr<PrivetJSONOperation> CreateCapabilitiesOperation( - PrivetJSONOperation::ResultCallback callback) override; - std::unique_ptr<PrivetLocalPrintOperation> CreateLocalPrintOperation( - PrivetLocalPrintOperation::Delegate* delegate) override; - - private: - std::unique_ptr<PrivetHTTPClient> info_client_; - - DISALLOW_COPY_AND_ASSIGN(PrivetV1HTTPClientImpl); -}; - -} // namespace cloud_print - -#endif // CHROME_BROWSER_PRINTING_CLOUD_PRINT_PRIVET_HTTP_IMPL_H_
diff --git a/chrome/browser/printing/cloud_print/privet_http_unittest.cc b/chrome/browser/printing/cloud_print/privet_http_unittest.cc deleted file mode 100644 index 2517376..0000000 --- a/chrome/browser/printing/cloud_print/privet_http_unittest.cc +++ /dev/null
@@ -1,1052 +0,0 @@ -// Copyright 2013 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "chrome/browser/printing/cloud_print/privet_http.h" - -#include <map> -#include <memory> -#include <utility> -#include <vector> - -#include "base/bind.h" -#include "base/json/json_reader.h" -#include "base/json/json_writer.h" -#include "base/location.h" -#include "base/path_service.h" -#include "base/run_loop.h" -#include "base/single_thread_task_runner.h" -#include "base/test/bind.h" -#include "base/test/task_environment.h" -#include "base/threading/thread_task_runner_handle.h" -#include "chrome/browser/printing/cloud_print/privet_http_impl.h" -#include "content/public/browser/browser_thread.h" -#include "content/public/test/browser_task_environment.h" -#include "net/test/embedded_test_server/embedded_test_server.h" -#include "printing/buildflags/buildflags.h" -#include "services/network/public/cpp/weak_wrapper_shared_url_loader_factory.h" -#include "services/network/public/mojom/url_response_head.mojom.h" -#include "services/network/test/test_shared_url_loader_factory.h" -#include "services/network/test/test_url_loader_factory.h" -#include "services/network/test/test_utils.h" -#include "testing/gmock/include/gmock/gmock.h" -#include "testing/gtest/include/gtest/gtest.h" - -#if BUILDFLAG(ENABLE_PRINT_PREVIEW) -#include "chrome/browser/printing/pwg_raster_converter.h" -#include "printing/mojom/print.mojom.h" -#include "printing/pwg_raster_settings.h" -#endif - -namespace cloud_print { - -namespace { - -using content::BrowserThread; -using net::EmbeddedTestServer; -using testing::Mock; -using testing::NiceMock; -using testing::StrictMock; -using testing::TestWithParam; -using testing::ValuesIn; -using testing::_; - -const char kSampleInfoResponse[] = - R"({ - "version": "1.0", - "name": "Common printer", - "description": "Printer connected through Chrome connector", - "url": "https://www.google.com/cloudprint", - "type": [ "printer" ], - "id": "", - "device_state": "idle", - "connection_state": "online", - "manufacturer": "Google", - "model": "Google Chrome", - "serial_number": "1111-22222-33333-4444", - "firmware": "24.0.1312.52", - "uptime": 600, - "setup_url": "http://support.google.com/", - "support_url": "http://support.google.com/cloudprint/?hl=en", - "update_url": "http://support.google.com/cloudprint/?hl=en", - "x-privet-token": "SampleTokenForTesting", - "api": [ - "/privet/accesstoken", - "/privet/capabilities", - "/privet/printer/submitdoc", - ] - })"; - -const char kSampleInfoResponseRegistered[] = - R"({ - "version": "1.0", - "name": "Common printer", - "description": "Printer connected through Chrome connector", - "url": "https://www.google.com/cloudprint", - "type": [ "printer" ], - "id": "MyDeviceID", - "device_state": "idle", - "connection_state": "online", - "manufacturer": "Google", - "model": "Google Chrome", - "serial_number": "1111-22222-33333-4444", - "firmware": "24.0.1312.52", - "uptime": 600, - "setup_url": "http://support.google.com/", - "support_url": "http://support.google.com/cloudprint/?hl=en", - "update_url": "http://support.google.com/cloudprint/?hl=en", - "x-privet-token": "SampleTokenForTesting", - "api": [ - "/privet/accesstoken", - "/privet/capabilities", - "/privet/printer/submitdoc", - ] - })"; - -const char kSampleRegisterStartResponse[] = - R"({ - "user": "example@google.com", - "action": "start" - })"; - -const char kSampleRegisterGetClaimTokenResponse[] = - R"({ - "action": "getClaimToken", - "user": "example@google.com", - "token": "MySampleToken", - "claim_url": "https://domain.com/SoMeUrL" - })"; - -const char kSampleRegisterCompleteResponse[] = - R"({ - "user": "example@google.com", - "action": "complete", - "device_id": "MyDeviceID" - })"; - -const char kSampleXPrivetErrorResponse[] = - R"({ "error": "invalid_x_privet_token" })"; - -const char kSampleRegisterErrorTransient[] = - R"({ "error": "device_busy", "timeout": 1})"; - -const char kSampleRegisterErrorPermanent[] = - R"({ "error": "user_cancel" })"; - -const char kSampleInfoResponseBadJson[] = "{"; - -const char kSampleRegisterCancelResponse[] = - R"({ - "user": "example@google.com", - "action": "cancel" - })"; - -const char kSampleCapabilitiesResponse[] = - R"({ - "version" : "1.0", - "printer" : { - "supported_content_type" : [ - { "content_type" : "application/pdf" }, - { "content_type" : "image/pwg-raster" } - ] - } - })"; - -#if BUILDFLAG(ENABLE_PRINT_PREVIEW) -const char kSampleInfoResponseWithCreatejob[] = - R"({ - "version": "1.0", - "name": "Common printer", - "description": "Printer connected through Chrome connector", - "url": "https://www.google.com/cloudprint", - "type": [ "printer" ], - "id": "", - "device_state": "idle", - "connection_state": "online", - "manufacturer": "Google", - "model": "Google Chrome", - "serial_number": "1111-22222-33333-4444", - "firmware": "24.0.1312.52", - "uptime": 600, - "setup_url": "http://support.google.com/", - "support_url": "http://support.google.com/cloudprint/?hl=en", - "update_url": "http://support.google.com/cloudprint/?hl=en", - "x-privet-token": "SampleTokenForTesting", - "api": [ - "/privet/accesstoken", - "/privet/capabilities", - "/privet/printer/createjob", - "/privet/printer/submitdoc", - ] - })"; - -const char kSampleLocalPrintResponse[] = - R"({ - "job_id": "123", - "expires_in": 500, - "job_type": "application/pdf", - "job_size": 16, - "job_name": "Sample job name", - })"; - -const char kSampleCapabilitiesResponsePWGOnly[] = - R"({ - "version" : "1.0", - "printer" : { - "supported_content_type" : [ - { "content_type" : "image/pwg-raster" } - ] - } - })"; - -const char kSampleErrorResponsePrinterBusy[] = - R"({ - "error": "invalid_print_job", - "timeout": 1 - })"; - -const char kSampleInvalidDocumentTypeResponse[] = - R"({ "error" : "invalid_document_type" })"; - -const char kSampleCreateJobResponse[] = R"({ "job_id": "1234" })"; - -const char kSampleCapabilitiesResponseWithAnyMimetype[] = - R"({ - "version" : "1.0", - "printer" : { - "supported_content_type" : [ - { "content_type" : "*/*" }, - { "content_type" : "image/pwg-raster" } - ] - } - })"; - -const char kSampleCJT[] = R"({ "version" : "1.0" })"; - -const char kSampleCapabilitiesResponsePWGSettings[] = - R"({ - "version" : "1.0", - "printer" : { - "pwg_raster_config" : { - "document_sheet_back" : "MANUAL_TUMBLE", - "reverse_order_streaming": true - }, - "supported_content_type" : [ - { "content_type" : "image/pwg-raster" } - ] - } - })"; - -const char kSampleCapabilitiesResponsePWGSettingsMono[] = - R"({ - "version": "1.0", - "printer": { - "pwg_raster_config": { - "document_type_supported": [ "SGRAY_8" ], - "document_sheet_back": "ROTATED" - } - } - })"; - -const char kSampleCJTDuplex[] = - R"({ - "version" : "1.0", - "print": { "duplex": {"type": "SHORT_EDGE"} } - })"; - -const char kSampleCJTMono[] = - R"({ - "version" : "1.0", - "print": { "color": {"type": "STANDARD_MONOCHROME"} } - })"; -#endif // BUILDFLAG(ENABLE_PRINT_PREVIEW) - -const char* const kTestParams[] = {"8.8.4.4", "2001:4860:4860::8888"}; - -// Returns the representation of the given JSON that would be outputted by -// JSONWriter. This ensures the same JSON values are represented by the same -// string. -std::string NormalizeJson(const std::string& json) { - std::string result = json; - absl::optional<base::Value> value = base::JSONReader::Read(result); - DCHECK(value) << result; - base::JSONWriter::Write(*value, &result); - return result; -} - -class PrivetHTTPTest : public TestWithParam<const char*> { - public: - PrivetHTTPTest() - : kInfoURL(GetUrl("/privet/info")), - kRegisterStartURL( - GetUrl("/privet/register?action=start&user=example%40google.com")), - kRegisterGetTokenURL(GetUrl( - "/privet/register?action=getClaimToken&user=example%40google.com")), - kRegisterCompleteURL(GetUrl( - "/privet/register?action=complete&user=example%40google.com")), - kCapabilitiesURL(GetUrl("/privet/capabilities")), - kSubmitDocURL(GetUrl("/privet/printer/" - "submitdoc?client_name=Chrome&user_name=sample%" - "40gmail.com&job_name=Sample+job+name")), - kSubmitDocWithJobIDURL( - GetUrl("/privet/printer/" - "submitdoc?client_name=Chrome&user_name=sample%40gmail.com&" - "job_name=Sample+job+name&job_id=1234")), - kCreateJobURL(GetUrl("/privet/printer/createjob")), - test_shared_url_loader_factory_( - base::MakeRefCounted<network::WeakWrapperSharedURLLoaderFactory>( - &test_url_loader_factory_)) { - PrivetURLLoader::ResetTokenMapForTest(); - - auto privet_http_client_impl = std::make_unique<PrivetHTTPClientImpl>( - "sampleDevice._privet._tcp.local", net::HostPortPair(GetParam(), 6006), - test_shared_url_loader_factory_); - privet_client_ = - PrivetV1HTTPClient::CreateDefault(std::move(privet_http_client_impl)); - - test_url_loader_factory_.SetInterceptor(base::BindRepeating( - &PrivetHTTPTest::InterceptURL, base::Unretained(this))); - } - - GURL GetUrl(const std::string& path) const { - std::string host = GetParam(); - if (host.find(":") != std::string::npos) - host = "[" + host + "]"; - return GURL("http://" + host + ":6006" + path); - } - - protected: - void InterceptURL(const network::ResourceRequest& request) { - url_to_resource_requests_[request.url].push_back(request); - } - - bool SuccessfulResponse(const GURL& request_url, - std::string content, - net::HttpStatusCode http_status = net::HTTP_OK) { - return test_url_loader_factory_.SimulateResponseForPendingRequest( - request_url, network::URLLoaderCompletionStatus(net::OK), - network::CreateURLResponseHead(http_status), content); - } - - std::string GetUploadDataAsNormalizedJSON(const GURL& url) { - std::string data = GetUploadData(url); - if (data.empty()) - return data; - return NormalizeJson(data); - } - - std::string GetUploadData(const GURL& url) { - auto it = url_to_resource_requests_.find(url); - if (it == url_to_resource_requests_.end()) - return std::string(); - const std::vector<network::ResourceRequest>& resource_requests = it->second; - DCHECK(!resource_requests.empty()); - - const network::ResourceRequest& resource_request = resource_requests[0]; - return network::GetUploadData(resource_request); - } - - const GURL kInfoURL; - const GURL kRegisterStartURL; - const GURL kRegisterGetTokenURL; - const GURL kRegisterCompleteURL; - const GURL kCapabilitiesURL; - const GURL kSubmitDocURL; - const GURL kSubmitDocWithJobIDURL; - const GURL kCreateJobURL; - - base::test::TaskEnvironment task_environment_; - network::TestURLLoaderFactory test_url_loader_factory_; - scoped_refptr<network::WeakWrapperSharedURLLoaderFactory> - test_shared_url_loader_factory_; - std::unique_ptr<PrivetV1HTTPClient> privet_client_; - std::map<GURL, std::vector<network::ResourceRequest>> - url_to_resource_requests_; -}; - -class MockJSONCallback{ - public: - void OnPrivetJSONDone(const base::DictionaryValue* value) { - value_.reset(value ? value->DeepCopy() : nullptr); - OnPrivetJSONDoneInternal(); - } - - MOCK_METHOD0(OnPrivetJSONDoneInternal, void()); - - const base::DictionaryValue* value() { return value_.get(); } - PrivetJSONOperation::ResultCallback callback() { - return base::BindOnce(&MockJSONCallback::OnPrivetJSONDone, - base::Unretained(this)); - } - protected: - std::unique_ptr<base::DictionaryValue> value_; -}; - -class MockRegisterDelegate : public PrivetRegisterOperation::Delegate { - public: - MOCK_METHOD3(OnPrivetRegisterClaimToken, - void(PrivetRegisterOperation* operation, - const std::string& token, - const GURL& url)); - - void OnPrivetRegisterError( - PrivetRegisterOperation* operation, - const std::string& action, - PrivetRegisterOperation::FailureReason reason, - int printer_http_code, - const base::DictionaryValue* json) override { - // TODO(noamsml): Save and test for JSON? - OnPrivetRegisterErrorInternal(action, reason, printer_http_code); - } - - MOCK_METHOD3(OnPrivetRegisterErrorInternal, - void(const std::string& action, - PrivetRegisterOperation::FailureReason reason, - int printer_http_code)); - - MOCK_METHOD2(OnPrivetRegisterDone, - void(PrivetRegisterOperation* operation, - const std::string& device_id)); -}; - -class MockLocalPrintDelegate : public PrivetLocalPrintOperation::Delegate { - public: - MOCK_METHOD1(OnPrivetPrintingDone, void(const PrivetLocalPrintOperation*)); - MOCK_METHOD2(OnPrivetPrintingError, - void(const PrivetLocalPrintOperation* print_operation, - int http_code)); -}; - -class PrivetInfoTest : public PrivetHTTPTest { - public: - void SetUp() override { - info_operation_ = privet_client_->CreateInfoOperation( - info_callback_.callback()); - } - - protected: - std::unique_ptr<PrivetJSONOperation> info_operation_; - StrictMock<MockJSONCallback> info_callback_; -}; - -INSTANTIATE_TEST_SUITE_P(PrivetTests, PrivetInfoTest, ValuesIn(kTestParams)); - -TEST_P(PrivetInfoTest, SuccessfulInfo) { - info_operation_->Start(); - - EXPECT_CALL(info_callback_, OnPrivetJSONDoneInternal()); - EXPECT_TRUE(SuccessfulResponse(kInfoURL, kSampleInfoResponse)); -} - -TEST_P(PrivetInfoTest, InfoFailureHTTP) { - info_operation_->Start(); - - EXPECT_CALL(info_callback_, OnPrivetJSONDoneInternal()); - EXPECT_TRUE( - SuccessfulResponse(kInfoURL, kSampleInfoResponse, net::HTTP_NOT_FOUND)); -} - -class PrivetRegisterTest : public PrivetHTTPTest { - protected: - void SetUp() override { - info_operation_ = privet_client_->CreateInfoOperation( - info_callback_.callback()); - register_operation_ = - privet_client_->CreateRegisterOperation("example@google.com", - ®ister_delegate_); - } - - std::unique_ptr<PrivetJSONOperation> info_operation_; - NiceMock<MockJSONCallback> info_callback_; - std::unique_ptr<PrivetRegisterOperation> register_operation_; - StrictMock<MockRegisterDelegate> register_delegate_; - PrivetURLLoader::RetryImmediatelyForTest retry_immediately_; -}; - -INSTANTIATE_TEST_SUITE_P(PrivetTests, - PrivetRegisterTest, - ValuesIn(kTestParams)); - -TEST_P(PrivetRegisterTest, RegisterSuccessSimple) { - register_operation_->Start(); - - EXPECT_TRUE(SuccessfulResponse(kInfoURL, kSampleInfoResponse)); - - EXPECT_TRUE( - SuccessfulResponse(kRegisterStartURL, kSampleRegisterStartResponse)); - - EXPECT_CALL(register_delegate_, - OnPrivetRegisterClaimToken(_, "MySampleToken", - GURL("https://domain.com/SoMeUrL"))); - - EXPECT_TRUE(SuccessfulResponse(kRegisterGetTokenURL, - kSampleRegisterGetClaimTokenResponse)); - - register_operation_->CompleteRegistration(); - - EXPECT_TRUE(SuccessfulResponse(kRegisterCompleteURL, - kSampleRegisterCompleteResponse)); - - EXPECT_CALL(register_delegate_, OnPrivetRegisterDone(_, "MyDeviceID")); - - EXPECT_TRUE(SuccessfulResponse(kInfoURL, kSampleInfoResponseRegistered)); -} - -TEST_P(PrivetRegisterTest, RegisterXSRFFailure) { - register_operation_->Start(); - - EXPECT_TRUE(SuccessfulResponse(kInfoURL, kSampleInfoResponse)); - - EXPECT_TRUE( - SuccessfulResponse(kRegisterStartURL, kSampleRegisterStartResponse)); - - EXPECT_TRUE( - SuccessfulResponse(kRegisterGetTokenURL, kSampleXPrivetErrorResponse)); - - EXPECT_TRUE(SuccessfulResponse(kInfoURL, kSampleInfoResponse)); - - EXPECT_CALL(register_delegate_, - OnPrivetRegisterClaimToken(_, "MySampleToken", - GURL("https://domain.com/SoMeUrL"))); - - EXPECT_TRUE(SuccessfulResponse(kRegisterGetTokenURL, - kSampleRegisterGetClaimTokenResponse)); -} - -TEST_P(PrivetRegisterTest, TransientFailure) { - register_operation_->Start(); - - EXPECT_TRUE(SuccessfulResponse(kInfoURL, kSampleInfoResponse)); - - // Make the registration request fail the first time and work after that. - EXPECT_TRUE( - SuccessfulResponse(kRegisterStartURL, kSampleRegisterErrorTransient)); - - EXPECT_TRUE( - SuccessfulResponse(kRegisterStartURL, kSampleRegisterStartResponse)); -} - -TEST_P(PrivetRegisterTest, PermanentFailure) { - register_operation_->Start(); - - EXPECT_TRUE(SuccessfulResponse(kInfoURL, kSampleInfoResponse)); - - EXPECT_TRUE( - SuccessfulResponse(kRegisterStartURL, kSampleRegisterStartResponse)); - - EXPECT_CALL( - register_delegate_, - OnPrivetRegisterErrorInternal( - "getClaimToken", PrivetRegisterOperation::FAILURE_JSON_ERROR, 200)); - - EXPECT_TRUE( - SuccessfulResponse(kRegisterGetTokenURL, kSampleRegisterErrorPermanent)); -} - -TEST_P(PrivetRegisterTest, InfoFailure) { - register_operation_->Start(); - - EXPECT_CALL(register_delegate_, - OnPrivetRegisterErrorInternal( - "start", - PrivetRegisterOperation::FAILURE_TOKEN, - -1)); - - EXPECT_TRUE(SuccessfulResponse(kInfoURL, kSampleInfoResponseBadJson)); -} - -TEST_P(PrivetRegisterTest, RegisterCancel) { - register_operation_->Start(); - - EXPECT_TRUE(SuccessfulResponse(kInfoURL, kSampleInfoResponse)); - - EXPECT_TRUE( - SuccessfulResponse(kRegisterStartURL, kSampleRegisterStartResponse)); - - register_operation_->Cancel(); - EXPECT_TRUE(SuccessfulResponse( - GetUrl("/privet/register?action=cancel&user=example%40google.com"), - kSampleRegisterCancelResponse)); -} - -class PrivetCapabilitiesTest : public PrivetHTTPTest { - public: - void SetUp() override { - capabilities_operation_ = privet_client_->CreateCapabilitiesOperation( - capabilities_callback_.callback()); - } - - protected: - std::unique_ptr<PrivetJSONOperation> capabilities_operation_; - StrictMock<MockJSONCallback> capabilities_callback_; -}; - -INSTANTIATE_TEST_SUITE_P(PrivetTests, - PrivetCapabilitiesTest, - ValuesIn(kTestParams)); - -TEST_P(PrivetCapabilitiesTest, SuccessfulCapabilities) { - capabilities_operation_->Start(); - - EXPECT_TRUE(SuccessfulResponse(kInfoURL, kSampleInfoResponse)); - - EXPECT_CALL(capabilities_callback_, OnPrivetJSONDoneInternal()); - - EXPECT_TRUE( - SuccessfulResponse(kCapabilitiesURL, kSampleCapabilitiesResponse)); - - std::string version; - EXPECT_TRUE(capabilities_callback_.value()->GetString("version", &version)); - EXPECT_EQ("1.0", version); -} - -TEST_P(PrivetCapabilitiesTest, CacheToken) { - capabilities_operation_->Start(); - - EXPECT_TRUE(SuccessfulResponse(kInfoURL, kSampleInfoResponse)); - - EXPECT_CALL(capabilities_callback_, OnPrivetJSONDoneInternal()); - - EXPECT_TRUE( - SuccessfulResponse(kCapabilitiesURL, kSampleCapabilitiesResponse)); - - capabilities_operation_ = privet_client_->CreateCapabilitiesOperation( - capabilities_callback_.callback()); - - capabilities_operation_->Start(); - - EXPECT_CALL(capabilities_callback_, OnPrivetJSONDoneInternal()); - - EXPECT_TRUE( - SuccessfulResponse(kCapabilitiesURL, kSampleCapabilitiesResponse)); -} - -TEST_P(PrivetCapabilitiesTest, BadToken) { - capabilities_operation_->Start(); - - EXPECT_TRUE(SuccessfulResponse(kInfoURL, kSampleInfoResponse)); - - EXPECT_TRUE( - SuccessfulResponse(kCapabilitiesURL, kSampleXPrivetErrorResponse)); - - EXPECT_TRUE(SuccessfulResponse(kInfoURL, kSampleInfoResponse)); - - EXPECT_CALL(capabilities_callback_, OnPrivetJSONDoneInternal()); - - EXPECT_TRUE( - SuccessfulResponse(kCapabilitiesURL, kSampleCapabilitiesResponse)); -} - -#if BUILDFLAG(ENABLE_PRINT_PREVIEW) -// A note on PWG raster conversion: The fake PWG raster converter simply returns -// the input as the converted data. The output isn't checked anyway. -// converts strings to file paths based on them by appending "test.pdf", since -// it's easier to test that way. Instead of using a mock, we simply check if the -// request is uploading a file that is based on this pattern. -class FakePwgRasterConverter : public printing::PwgRasterConverter { - public: - void Start(const base::RefCountedMemory* data, - const printing::PdfRenderSettings& conversion_settings, - const printing::PwgRasterSettings& bitmap_settings, - ResultCallback callback) override { - base::MappedReadOnlyRegion memory = - base::ReadOnlySharedMemoryRegion::Create(data->size()); - if (!memory.mapping.IsValid()) { - ADD_FAILURE() << "Failed to create pwg raster shared memory."; - std::move(callback).Run(base::ReadOnlySharedMemoryRegion()); - return; - } - - memcpy(memory.mapping.memory(), data->front(), data->size()); - bitmap_settings_ = bitmap_settings; - std::move(callback).Run(std::move(memory.region)); - } - - const printing::PwgRasterSettings& bitmap_settings() { - return bitmap_settings_; - } - - private: - printing::PwgRasterSettings bitmap_settings_; -}; - -class PrivetLocalPrintTest : public PrivetHTTPTest { - public: - void SetUp() override { - PrivetURLLoader::ResetTokenMapForTest(); - - local_print_operation_ = privet_client_->CreateLocalPrintOperation( - &local_print_delegate_); - - auto pwg_converter = std::make_unique<FakePwgRasterConverter>(); - pwg_converter_ = pwg_converter.get(); - local_print_operation_->SetPwgRasterConverterForTesting( - std::move(pwg_converter)); - } - - scoped_refptr<base::RefCountedBytes> RefCountedBytesFromString( - base::StringPiece str) { - std::vector<unsigned char> str_vec; - str_vec.insert(str_vec.begin(), str.begin(), str.end()); - return base::RefCountedBytes::TakeVector(&str_vec); - } - - protected: - std::unique_ptr<PrivetLocalPrintOperation> local_print_operation_; - StrictMock<MockLocalPrintDelegate> local_print_delegate_; - FakePwgRasterConverter* pwg_converter_; - PrivetLocalPrintOperationImpl::RunTasksImmediatelyForTesting - run_tasks_immediately_for_local_print_; -}; - -INSTANTIATE_TEST_SUITE_P(PrivetTests, - PrivetLocalPrintTest, - ValuesIn(kTestParams)); - -TEST_P(PrivetLocalPrintTest, SuccessfulLocalPrint) { - local_print_operation_->SetUsername("sample@gmail.com"); - local_print_operation_->SetJobname("Sample job name"); - local_print_operation_->SetData(RefCountedBytesFromString( - "Sample print data")); - local_print_operation_->SetCapabilities(kSampleCapabilitiesResponse); - local_print_operation_->Start(); - - EXPECT_TRUE(SuccessfulResponse(kInfoURL, kSampleInfoResponse)); - - EXPECT_TRUE(SuccessfulResponse(kInfoURL, kSampleInfoResponse)); - - EXPECT_CALL(local_print_delegate_, OnPrivetPrintingDone(_)); - - EXPECT_TRUE(SuccessfulResponse(kSubmitDocURL, kSampleLocalPrintResponse)); - EXPECT_EQ("Sample print data", GetUploadData(kSubmitDocURL)); -} - -TEST_P(PrivetLocalPrintTest, SuccessfulLocalPrintWithAnyMimetype) { - local_print_operation_->SetUsername("sample@gmail.com"); - local_print_operation_->SetJobname("Sample job name"); - local_print_operation_->SetData( - RefCountedBytesFromString("Sample print data")); - local_print_operation_->SetCapabilities( - kSampleCapabilitiesResponseWithAnyMimetype); - local_print_operation_->Start(); - - EXPECT_TRUE(SuccessfulResponse(kInfoURL, kSampleInfoResponse)); - - EXPECT_TRUE(SuccessfulResponse(kInfoURL, kSampleInfoResponse)); - - EXPECT_CALL(local_print_delegate_, OnPrivetPrintingDone(_)); - - EXPECT_TRUE(SuccessfulResponse(kSubmitDocURL, kSampleLocalPrintResponse)); - EXPECT_EQ("Sample print data", GetUploadData(kSubmitDocURL)); -} - -TEST_P(PrivetLocalPrintTest, SuccessfulPWGLocalPrint) { - local_print_operation_->SetUsername("sample@gmail.com"); - local_print_operation_->SetJobname("Sample job name"); - local_print_operation_->SetData(RefCountedBytesFromString("foobar")); - local_print_operation_->SetCapabilities(kSampleCapabilitiesResponsePWGOnly); - local_print_operation_->Start(); - - EXPECT_TRUE(SuccessfulResponse(kInfoURL, kSampleInfoResponse)); - - EXPECT_TRUE(SuccessfulResponse(kInfoURL, kSampleInfoResponse)); - - EXPECT_CALL(local_print_delegate_, OnPrivetPrintingDone(_)); - - EXPECT_TRUE(SuccessfulResponse(kSubmitDocURL, kSampleLocalPrintResponse)); - EXPECT_EQ("foobar", GetUploadData(kSubmitDocURL)); - - EXPECT_EQ(printing::mojom::DuplexMode::kSimplex, - pwg_converter_->bitmap_settings().duplex_mode); - EXPECT_EQ(printing::TRANSFORM_NORMAL, - pwg_converter_->bitmap_settings().odd_page_transform); - EXPECT_FALSE(pwg_converter_->bitmap_settings().rotate_all_pages); - EXPECT_FALSE(pwg_converter_->bitmap_settings().reverse_page_order); - - // Defaults to true when the color is not specified. - EXPECT_TRUE(pwg_converter_->bitmap_settings().use_color); -} - -TEST_P(PrivetLocalPrintTest, SuccessfulPWGLocalPrintDuplex) { - local_print_operation_->SetUsername("sample@gmail.com"); - local_print_operation_->SetJobname("Sample job name"); - local_print_operation_->SetData(RefCountedBytesFromString("foobar")); - absl::optional<base::Value> ticket = base::JSONReader::Read(kSampleCJTDuplex); - ASSERT_TRUE(ticket); - local_print_operation_->SetTicket(std::move(*ticket)); - local_print_operation_->SetCapabilities( - kSampleCapabilitiesResponsePWGSettings); - local_print_operation_->Start(); - - EXPECT_TRUE(SuccessfulResponse(kInfoURL, kSampleInfoResponseWithCreatejob)); - - EXPECT_TRUE(SuccessfulResponse(kInfoURL, kSampleInfoResponse)); - - EXPECT_TRUE(SuccessfulResponse(kCreateJobURL, kSampleCreateJobResponse)); - EXPECT_EQ(NormalizeJson(kSampleCJTDuplex), - GetUploadDataAsNormalizedJSON(kCreateJobURL)); - - EXPECT_CALL(local_print_delegate_, OnPrivetPrintingDone(_)); - - EXPECT_TRUE( - SuccessfulResponse(kSubmitDocWithJobIDURL, kSampleLocalPrintResponse)); - EXPECT_EQ("foobar", GetUploadData(kSubmitDocWithJobIDURL)); - - EXPECT_EQ(printing::mojom::DuplexMode::kShortEdge, - pwg_converter_->bitmap_settings().duplex_mode); - EXPECT_EQ(printing::TRANSFORM_ROTATE_180, - pwg_converter_->bitmap_settings().odd_page_transform); - EXPECT_FALSE(pwg_converter_->bitmap_settings().rotate_all_pages); - EXPECT_TRUE(pwg_converter_->bitmap_settings().reverse_page_order); - - // Defaults to true when the color is not specified. - EXPECT_TRUE(pwg_converter_->bitmap_settings().use_color); -} - -TEST_P(PrivetLocalPrintTest, SuccessfulPWGLocalPrintMono) { - local_print_operation_->SetUsername("sample@gmail.com"); - local_print_operation_->SetJobname("Sample job name"); - local_print_operation_->SetData(RefCountedBytesFromString("foobar")); - absl::optional<base::Value> ticket = base::JSONReader::Read(kSampleCJTMono); - ASSERT_TRUE(ticket); - local_print_operation_->SetTicket(std::move(*ticket)); - local_print_operation_->SetCapabilities( - kSampleCapabilitiesResponsePWGSettings); - local_print_operation_->Start(); - - EXPECT_TRUE(SuccessfulResponse(kInfoURL, kSampleInfoResponseWithCreatejob)); - - EXPECT_TRUE(SuccessfulResponse(kInfoURL, kSampleInfoResponse)); - - EXPECT_TRUE(SuccessfulResponse(kCreateJobURL, kSampleCreateJobResponse)); - EXPECT_EQ(NormalizeJson(kSampleCJTMono), - GetUploadDataAsNormalizedJSON(kCreateJobURL)); - - EXPECT_CALL(local_print_delegate_, OnPrivetPrintingDone(_)); - - EXPECT_TRUE( - SuccessfulResponse(kSubmitDocWithJobIDURL, kSampleLocalPrintResponse)); - EXPECT_EQ("foobar", GetUploadData(kSubmitDocWithJobIDURL)); - - EXPECT_EQ(printing::TRANSFORM_NORMAL, - pwg_converter_->bitmap_settings().odd_page_transform); - EXPECT_FALSE(pwg_converter_->bitmap_settings().rotate_all_pages); - EXPECT_TRUE(pwg_converter_->bitmap_settings().reverse_page_order); - - // Ticket specified mono, but no SGRAY_8 color capability. - EXPECT_TRUE(pwg_converter_->bitmap_settings().use_color); -} - -TEST_P(PrivetLocalPrintTest, SuccessfulPWGLocalPrintMonoToGRAY8Printer) { - local_print_operation_->SetUsername("sample@gmail.com"); - local_print_operation_->SetJobname("Sample job name"); - local_print_operation_->SetData(RefCountedBytesFromString("foobar")); - absl::optional<base::Value> ticket = base::JSONReader::Read(kSampleCJTMono); - ASSERT_TRUE(ticket); - local_print_operation_->SetTicket(std::move(*ticket)); - local_print_operation_->SetCapabilities( - kSampleCapabilitiesResponsePWGSettingsMono); - local_print_operation_->Start(); - - EXPECT_TRUE(SuccessfulResponse(kInfoURL, kSampleInfoResponseWithCreatejob)); - - EXPECT_TRUE(SuccessfulResponse(kInfoURL, kSampleInfoResponse)); - - EXPECT_TRUE(SuccessfulResponse(kCreateJobURL, kSampleCreateJobResponse)); - EXPECT_EQ(NormalizeJson(kSampleCJTMono), - GetUploadDataAsNormalizedJSON(kCreateJobURL)); - - EXPECT_CALL(local_print_delegate_, OnPrivetPrintingDone(_)); - - EXPECT_TRUE( - SuccessfulResponse(kSubmitDocWithJobIDURL, kSampleLocalPrintResponse)); - EXPECT_EQ("foobar", GetUploadData(kSubmitDocWithJobIDURL)); - - EXPECT_EQ(printing::TRANSFORM_NORMAL, - pwg_converter_->bitmap_settings().odd_page_transform); - EXPECT_FALSE(pwg_converter_->bitmap_settings().rotate_all_pages); - EXPECT_FALSE(pwg_converter_->bitmap_settings().reverse_page_order); - - // Ticket specified mono, and SGRAY_8 color capability exists. - EXPECT_FALSE(pwg_converter_->bitmap_settings().use_color); -} - -TEST_P(PrivetLocalPrintTest, SuccessfulLocalPrintWithCreatejob) { - local_print_operation_->SetUsername("sample@gmail.com"); - local_print_operation_->SetJobname("Sample job name"); - absl::optional<base::Value> ticket = base::JSONReader::Read(kSampleCJT); - ASSERT_TRUE(ticket); - local_print_operation_->SetTicket(std::move(*ticket)); - local_print_operation_->SetData( - RefCountedBytesFromString("Sample print data")); - local_print_operation_->SetCapabilities(kSampleCapabilitiesResponse); - local_print_operation_->Start(); - - EXPECT_TRUE(SuccessfulResponse(kInfoURL, kSampleInfoResponseWithCreatejob)); - - EXPECT_TRUE(SuccessfulResponse(kInfoURL, kSampleInfoResponse)); - - EXPECT_TRUE(SuccessfulResponse(kCreateJobURL, kSampleCreateJobResponse)); - EXPECT_EQ(NormalizeJson(kSampleCJT), - GetUploadDataAsNormalizedJSON(kCreateJobURL)); - - EXPECT_CALL(local_print_delegate_, OnPrivetPrintingDone(_)); - - EXPECT_TRUE( - SuccessfulResponse(kSubmitDocWithJobIDURL, kSampleLocalPrintResponse)); - EXPECT_EQ("Sample print data", GetUploadData(kSubmitDocWithJobIDURL)); -} - -TEST_P(PrivetLocalPrintTest, SuccessfulLocalPrintWithOverlongName) { - const GURL kSubmitDocURL = GetUrl( - "/privet/printer/" - "submitdoc?client_name=Chrome&user_name=sample%40gmail.com&job_name=" - "123456789%3A123456789%3A123456789%3A1...123456789%3A123456789%" - "3A123456789%3A&job_id=1234"); - - local_print_operation_->SetUsername("sample@gmail.com"); - local_print_operation_->SetJobname( - "123456789:123456789:123456789:123456789:123456789:123456789:123456789:"); - absl::optional<base::Value> ticket = base::JSONReader::Read(kSampleCJT); - ASSERT_TRUE(ticket); - local_print_operation_->SetTicket(std::move(*ticket)); - local_print_operation_->SetCapabilities(kSampleCapabilitiesResponse); - local_print_operation_->SetData( - RefCountedBytesFromString("Sample print data")); - local_print_operation_->Start(); - - EXPECT_TRUE(SuccessfulResponse(kInfoURL, kSampleInfoResponseWithCreatejob)); - - EXPECT_TRUE(SuccessfulResponse(kInfoURL, kSampleInfoResponse)); - - EXPECT_TRUE(SuccessfulResponse(kCreateJobURL, kSampleCreateJobResponse)); - EXPECT_EQ(NormalizeJson(kSampleCJT), - GetUploadDataAsNormalizedJSON(kCreateJobURL)); - - EXPECT_CALL(local_print_delegate_, OnPrivetPrintingDone(_)); - - EXPECT_TRUE(SuccessfulResponse(kSubmitDocURL, kSampleLocalPrintResponse)); - EXPECT_EQ("Sample print data", GetUploadData(kSubmitDocURL)); -} - -TEST_P(PrivetLocalPrintTest, PDFPrintInvalidDocumentTypeRetry) { - local_print_operation_->SetUsername("sample@gmail.com"); - local_print_operation_->SetJobname("Sample job name"); - absl::optional<base::Value> ticket = base::JSONReader::Read(kSampleCJT); - ASSERT_TRUE(ticket); - local_print_operation_->SetTicket(std::move(*ticket)); - local_print_operation_->SetCapabilities(kSampleCapabilitiesResponse); - local_print_operation_->SetData(RefCountedBytesFromString("sample_data")); - local_print_operation_->Start(); - - EXPECT_TRUE(SuccessfulResponse(kInfoURL, kSampleInfoResponseWithCreatejob)); - - EXPECT_TRUE(SuccessfulResponse(kInfoURL, kSampleInfoResponse)); - - EXPECT_TRUE(SuccessfulResponse(kCreateJobURL, kSampleCreateJobResponse)); - EXPECT_EQ(NormalizeJson(kSampleCJT), - GetUploadDataAsNormalizedJSON(kCreateJobURL)); - - EXPECT_TRUE(SuccessfulResponse(kSubmitDocWithJobIDURL, - kSampleInvalidDocumentTypeResponse)); - EXPECT_EQ("sample_data", GetUploadData(kSubmitDocWithJobIDURL)); - - EXPECT_CALL(local_print_delegate_, OnPrivetPrintingDone(_)); - - EXPECT_TRUE( - SuccessfulResponse(kSubmitDocWithJobIDURL, kSampleLocalPrintResponse)); - EXPECT_EQ("sample_data", GetUploadData(kSubmitDocWithJobIDURL)); -} - -TEST_P(PrivetLocalPrintTest, LocalPrintRetryOnInvalidJobID) { - local_print_operation_->SetUsername("sample@gmail.com"); - local_print_operation_->SetJobname("Sample job name"); - absl::optional<base::Value> ticket = base::JSONReader::Read(kSampleCJT); - ASSERT_TRUE(ticket); - local_print_operation_->SetTicket(std::move(*ticket)); - local_print_operation_->SetCapabilities(kSampleCapabilitiesResponse); - local_print_operation_->SetData( - RefCountedBytesFromString("Sample print data")); - local_print_operation_->Start(); - - EXPECT_TRUE(SuccessfulResponse(kInfoURL, kSampleInfoResponseWithCreatejob)); - - EXPECT_TRUE(SuccessfulResponse(kInfoURL, kSampleInfoResponse)); - - EXPECT_TRUE(SuccessfulResponse(kCreateJobURL, kSampleCreateJobResponse)); - EXPECT_EQ(NormalizeJson(kSampleCJT), - GetUploadDataAsNormalizedJSON(kCreateJobURL)); - - EXPECT_TRUE(SuccessfulResponse(kSubmitDocWithJobIDURL, - kSampleErrorResponsePrinterBusy)); - EXPECT_EQ("Sample print data", GetUploadData(kSubmitDocWithJobIDURL)); - - EXPECT_TRUE(SuccessfulResponse(kCreateJobURL, kSampleCreateJobResponse)); -} -#endif // BUILDFLAG(ENABLE_PRINT_PREVIEW) - -class PrivetHttpWithServerTest : public ::testing::Test { - protected: - PrivetHttpWithServerTest() - : task_environment_(content::BrowserTaskEnvironment::IO_MAINLOOP), - shared_url_loader_factory_( - base::MakeRefCounted<network::TestSharedURLLoaderFactory>()) {} - - void SetUp() override { - server_ = - std::make_unique<EmbeddedTestServer>(EmbeddedTestServer::TYPE_HTTP); - - base::FilePath test_data_dir; - ASSERT_TRUE(base::PathService::Get(base::DIR_SOURCE_ROOT, &test_data_dir)); - server_->ServeFilesFromDirectory( - test_data_dir.Append(FILE_PATH_LITERAL("chrome/test/data"))); - ASSERT_TRUE(server_->Start()); - - client_ = std::make_unique<PrivetHTTPClientImpl>( - "test", server_->host_port_pair(), shared_url_loader_factory_); - } - - content::BrowserTaskEnvironment task_environment_; - std::unique_ptr<EmbeddedTestServer> server_; - std::unique_ptr<PrivetHTTPClientImpl> client_; - scoped_refptr<network::TestSharedURLLoaderFactory> shared_url_loader_factory_; -}; - -class MockPrivetURLLoaderDelegate : public PrivetURLLoader::Delegate { - public: - // GMock does not like mocking methods with movable parameters. - void OnNeedPrivetToken(PrivetURLLoader::TokenCallback callback) override { - std::move(callback).Run("abc"); - } - MOCK_METHOD2(OnError, - void(int response_code, PrivetURLLoader::ErrorType error)); - MOCK_METHOD3(OnParsedJson, - void(int response_code, - const base::DictionaryValue& value, - bool has_error)); - MOCK_METHOD3(OnRawData, - bool(bool response_is_file, - const std::string& data_string, - const base::FilePath& data_file)); -}; - -TEST_F(PrivetHttpWithServerTest, HttpServer) { - StrictMock<MockPrivetURLLoaderDelegate> delegate_; - - std::unique_ptr<PrivetURLLoader> url_loader = client_->CreateURLLoader( - server_->GetURL("/simple.html"), "GET", &delegate_); - url_loader->SetMaxRetriesForTest(1); - url_loader->Start(); - - base::RunLoop run_loop; - EXPECT_CALL(delegate_, OnRawData(_, _, _)) - .WillOnce(testing::InvokeWithoutArgs([&]() { - run_loop.Quit(); - return true; - })); - run_loop.Run(); -} - -} // namespace - -} // namespace cloud_print
diff --git a/chrome/browser/printing/cloud_print/privet_local_printer_lister.cc b/chrome/browser/printing/cloud_print/privet_local_printer_lister.cc deleted file mode 100644 index fa0812a2..0000000 --- a/chrome/browser/printing/cloud_print/privet_local_printer_lister.cc +++ /dev/null
@@ -1,136 +0,0 @@ -// Copyright 2013 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "chrome/browser/printing/cloud_print/privet_local_printer_lister.h" - -#include <stddef.h> - -#include <memory> -#include <string> -#include <utility> - -#include "base/bind.h" -#include "chrome/browser/printing/cloud_print/privet_constants.h" -#include "chrome/browser/printing/cloud_print/privet_device_lister_impl.h" -#include "chrome/browser/printing/cloud_print/privet_http_asynchronous_factory.h" -#include "services/network/public/cpp/shared_url_loader_factory.h" - -namespace cloud_print { - -struct PrivetLocalPrinterLister::DeviceContext { - std::unique_ptr<PrivetHTTPResolution> privet_resolution; - std::unique_ptr<PrivetHTTPClient> privet_client; - std::unique_ptr<PrivetJSONOperation> info_operation; - DeviceDescription description; - - bool has_local_printing = false; -}; - -PrivetLocalPrinterLister::PrivetLocalPrinterLister( - local_discovery::ServiceDiscoveryClient* service_discovery_client, - scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory, - Delegate* delegate) - : privet_http_factory_( - PrivetHTTPAsynchronousFactory::CreateInstance(url_loader_factory)), - delegate_(delegate), - privet_lister_( - new PrivetDeviceListerImpl(service_discovery_client, this)) {} - -PrivetLocalPrinterLister::~PrivetLocalPrinterLister() { -} - -void PrivetLocalPrinterLister::Start() { - privet_lister_->Start(); - privet_lister_->DiscoverNewDevices(); -} - -void PrivetLocalPrinterLister::Stop() { - privet_lister_.reset(); -} - -void PrivetLocalPrinterLister::DeviceChanged( - const std::string& name, - const DeviceDescription& description) { - if (description.type != kPrivetTypePrinter) - return; - - auto it = device_contexts_.find(name); - if (it != device_contexts_.end()) { - it->second->description = description; - delegate_->LocalPrinterChanged(name, it->second->has_local_printing, - description); - return; - } - - auto context = std::make_unique<DeviceContext>(); - context->has_local_printing = false; - context->description = description; - context->privet_resolution = privet_http_factory_->CreatePrivetHTTP(name); - - DeviceContext* context_ptr = context.get(); - device_contexts_[name] = std::move(context); - context_ptr->privet_resolution->Start( - description.address, - base::BindOnce(&PrivetLocalPrinterLister::OnPrivetResolved, - base::Unretained(this), name)); -} - -void PrivetLocalPrinterLister::DeviceCacheFlushed() { - device_contexts_.clear(); - delegate_->LocalPrinterCacheFlushed(); -} - -void PrivetLocalPrinterLister::OnPrivetResolved( - const std::string& name, - std::unique_ptr<PrivetHTTPClient> http_client) { - if (!http_client) { - // Remove device if we can't resolve it. - device_contexts_.erase(name); - return; - } - auto it = device_contexts_.find(http_client->GetName()); - DCHECK(it != device_contexts_.end()); - - it->second->info_operation = http_client->CreateInfoOperation(base::BindOnce( - &PrivetLocalPrinterLister::OnPrivetInfoDone, base::Unretained(this), - it->second.get(), http_client->GetName())); - it->second->privet_client = std::move(http_client); - it->second->info_operation->Start(); -} - -void PrivetLocalPrinterLister::OnPrivetInfoDone( - DeviceContext* context, - const std::string& name, - const base::DictionaryValue* json_value) { - bool has_local_printing = false; - const base::ListValue* api_list = nullptr; - if (json_value && json_value->GetList(kPrivetInfoKeyAPIList, &api_list)) { - for (size_t i = 0; i < api_list->GetSize(); ++i) { - std::string api; - api_list->GetString(i, &api); - if (api == kPrivetSubmitdocPath) { - has_local_printing = true; - break; - } - } - } - - context->has_local_printing = has_local_printing; - delegate_->LocalPrinterChanged(name, has_local_printing, - context->description); -} - -void PrivetLocalPrinterLister::DeviceRemoved(const std::string& device_name) { - size_t removed = device_contexts_.erase(device_name); - if (removed) - delegate_->LocalPrinterRemoved(device_name); -} - -const DeviceDescription* PrivetLocalPrinterLister::GetDeviceDescription( - const std::string& name) { - auto it = device_contexts_.find(name); - return (it != device_contexts_.end()) ? &it->second->description : nullptr; -} - -} // namespace cloud_print
diff --git a/chrome/browser/printing/cloud_print/privet_local_printer_lister.h b/chrome/browser/printing/cloud_print/privet_local_printer_lister.h deleted file mode 100644 index 4c036582..0000000 --- a/chrome/browser/printing/cloud_print/privet_local_printer_lister.h +++ /dev/null
@@ -1,78 +0,0 @@ -// Copyright 2013 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef CHROME_BROWSER_PRINTING_CLOUD_PRINT_PRIVET_LOCAL_PRINTER_LISTER_H_ -#define CHROME_BROWSER_PRINTING_CLOUD_PRINT_PRIVET_LOCAL_PRINTER_LISTER_H_ - -#include <map> -#include <memory> -#include <string> - -#include "chrome/browser/local_discovery/service_discovery_client.h" -#include "chrome/browser/printing/cloud_print/privet_device_lister.h" -#include "chrome/browser/printing/cloud_print/privet_http.h" -#include "chrome/browser/printing/cloud_print/privet_http_asynchronous_factory.h" - -namespace network { -class SharedURLLoaderFactory; -} - -namespace cloud_print { - -// This is an adapter to PrivetDeviceLister that finds printers and checks if -// they support Privet local printing. -class PrivetLocalPrinterLister : PrivetDeviceLister::Delegate { - public: - class Delegate { - public: - virtual ~Delegate() {} - virtual void LocalPrinterChanged(const std::string& name, - bool has_local_printing, - const DeviceDescription& description) = 0; - virtual void LocalPrinterRemoved(const std::string& name) = 0; - virtual void LocalPrinterCacheFlushed() = 0; - }; - - PrivetLocalPrinterLister( - local_discovery::ServiceDiscoveryClient* service_discovery_client, - scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory, - Delegate* delegate); - ~PrivetLocalPrinterLister() override; - - void Start(); - - // Stops listening/listing, keeps the data. - void Stop(); - - const DeviceDescription* GetDeviceDescription(const std::string& name); - - // PrivetDeviceLister::Delegate implementation. - void DeviceChanged(const std::string& name, - const DeviceDescription& description) override; - void DeviceRemoved(const std::string& name) override; - void DeviceCacheFlushed() override; - - private: - struct DeviceContext; - - using DeviceContextMap = - std::map<std::string, std::unique_ptr<DeviceContext>>; - - void OnPrivetInfoDone(DeviceContext* context, - const std::string& name, - const base::DictionaryValue* json_value); - - void OnPrivetResolved(const std::string& name, - std::unique_ptr<PrivetHTTPClient> http_client); - - std::unique_ptr<PrivetHTTPAsynchronousFactory> privet_http_factory_; - DeviceContextMap device_contexts_; - Delegate* const delegate_; - - std::unique_ptr<PrivetDeviceLister> privet_lister_; -}; - -} // namespace cloud_print - -#endif // CHROME_BROWSER_PRINTING_CLOUD_PRINT_PRIVET_LOCAL_PRINTER_LISTER_H_
diff --git a/chrome/browser/printing/cloud_print/privet_local_printer_lister_unittest.cc b/chrome/browser/printing/cloud_print/privet_local_printer_lister_unittest.cc deleted file mode 100644 index 8ce760c..0000000 --- a/chrome/browser/printing/cloud_print/privet_local_printer_lister_unittest.cc +++ /dev/null
@@ -1,170 +0,0 @@ -// Copyright 2013 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "chrome/browser/printing/cloud_print/privet_local_printer_lister.h" - -#include <stddef.h> -#include <stdint.h> - -#include <memory> - -#include "base/run_loop.h" -#include "base/threading/thread_task_runner_handle.h" -#include "chrome/browser/local_discovery/test_service_discovery_client.h" -#include "chrome/browser/printing/cloud_print/privet_http_asynchronous_factory_impl.h" -#include "content/public/test/browser_task_environment.h" -#include "services/network/public/cpp/weak_wrapper_shared_url_loader_factory.h" -#include "services/network/test/test_url_loader_factory.h" -#include "testing/gmock/include/gmock/gmock.h" -#include "testing/gtest/include/gtest/gtest.h" - -using local_discovery::TestServiceDiscoveryClient; - -using testing::_; -using testing::AtLeast; -using testing::StrictMock; - -namespace cloud_print { - -namespace { - -const uint8_t kAnnouncePacket[] = { - // Header - 0x00, 0x00, // ID is zeroed out - 0x80, 0x00, // Standard query response, no error - 0x00, 0x00, // No questions (for simplicity) - 0x00, 0x05, // 5 RR (answers) - 0x00, 0x00, // 0 authority RRs - 0x00, 0x00, // 0 additional RRs - 0x07, '_', 'p', 'r', 'i', 'v', 'e', 't', 0x04, '_', - 't', 'c', 'p', 0x05, 'l', 'o', 'c', 'a', 'l', 0x00, - 0x00, 0x0c, // TYPE is PTR. - 0x00, 0x01, // CLASS is IN. - 0x00, 0x00, // TTL (4 bytes) is 32768 second. - 0x10, 0x00, 0x00, 0x0c, // RDLENGTH is 12 bytes. - 0x09, 'm', 'y', 'S', 'e', 'r', 'v', 'i', 'c', 'e', - 0xc0, 0x0c, 0x09, 'm', 'y', 'S', 'e', 'r', 'v', 'i', - 'c', 'e', 0xc0, 0x0c, 0x00, 0x10, // TYPE is TXT. - 0x00, 0x01, // CLASS is IN. - 0x00, 0x00, // TTL (4 bytes) is 32768 seconds. - 0x01, 0x00, 0x00, 0x44, // RDLENGTH is 55 bytes. - 0x06, 'i', 'd', '=', 'r', 'e', 'g', 0x10, 't', 'y', - '=', 'S', 'a', 'm', 'p', 'l', 'e', ' ', 'd', 'e', - 'v', 'i', 'c', 'e', 0x1e, 'n', 'o', 't', 'e', '=', - 'S', 'a', 'm', 'p', 'l', 'e', ' ', 'd', 'e', 'v', - 'i', 'c', 'e', ' ', 'd', 'e', 's', 'c', 'r', 'i', - 'p', 't', 'i', 'o', 'n', 0x0c, 't', 'y', 'p', 'e', - '=', 'p', 'r', 'i', 'n', 't', 'e', 'r', 0x09, 'm', - 'y', 'S', 'e', 'r', 'v', 'i', 'c', 'e', 0xc0, 0x0c, - 0x00, 0x21, // Type is SRV - 0x00, 0x01, // CLASS is IN - 0x00, 0x00, // TTL (4 bytes) is 32768 second. - 0x10, 0x00, 0x00, 0x17, // RDLENGTH is 23 - 0x00, 0x00, 0x00, 0x00, 0x22, 0xb8, // port 8888 - 0x09, 'm', 'y', 'S', 'e', 'r', 'v', 'i', 'c', 'e', - 0x05, 'l', 'o', 'c', 'a', 'l', 0x00, 0x09, 'm', 'y', - 'S', 'e', 'r', 'v', 'i', 'c', 'e', 0x05, 'l', 'o', - 'c', 'a', 'l', 0x00, 0x00, 0x01, // Type is A - 0x00, 0x01, // CLASS is IN - 0x00, 0x00, // TTL (4 bytes) is 32768 second. - 0x10, 0x00, 0x00, 0x04, // RDLENGTH is 4 - 0x01, 0x02, 0x03, 0x04, // 1.2.3.4 - 0x09, 'm', 'y', 'S', 'e', 'r', 'v', 'i', 'c', 'e', - 0x05, 'l', 'o', 'c', 'a', 'l', 0x00, 0x00, 0x1C, // Type is AAAA - 0x00, 0x01, // CLASS is IN - 0x00, 0x00, // TTL (4 bytes) is 32768 second. - 0x10, 0x00, 0x00, 0x10, // RDLENGTH is 16 - 0x01, 0x02, 0x03, 0x04, // 1.2.3.4 - 0x01, 0x02, 0x03, 0x04, 0x01, 0x02, 0x03, 0x04, 0x01, 0x02, - 0x03, 0x04, -}; - -const char kInfoIsLocalPrinter[] = - "{" - "\"api\" : [ \"/privet/printer/submitdoc\" ]," - "\"x-privet-token\" : \"sample\"" - "}"; - -const char kInfoIsNotLocalPrinter[] = - "{" - "\"api\" : [ \"/privet/register\" ]," - "\"x-privet-token\" : \"sample\"" - "}"; - -const char kServiceName[] = "myService._privet._tcp.local"; - -const char kPrivetInfoURL[] = "http://1.2.3.4:8888/privet/info"; - -class MockLocalPrinterListerDelegate - : public PrivetLocalPrinterLister::Delegate { - public: - MockLocalPrinterListerDelegate() {} - ~MockLocalPrinterListerDelegate() override {} - - MOCK_METHOD3(LocalPrinterChanged, - void(const std::string& name, - bool has_local_printing, - const DeviceDescription& description)); - - MOCK_METHOD1(LocalPrinterRemoved, void(const std::string& name)); - - MOCK_METHOD0(LocalPrinterCacheFlushed, void()); -}; - -class PrivetLocalPrinterListerTest : public testing::Test { - public: - PrivetLocalPrinterListerTest() - : test_service_discovery_client_( - base::MakeRefCounted<TestServiceDiscoveryClient>()), - http_asynchronous_factory_impl_( - test_url_loader_factory_.GetSafeWeakWrapper()) { - local_printer_lister_ = std::make_unique<PrivetLocalPrinterLister>( - test_service_discovery_client_.get(), - test_url_loader_factory_.GetSafeWeakWrapper(), &delegate_); - test_service_discovery_client_->Start(); - } - - void SimulateReceive(const uint8_t* packet, size_t size) { - test_service_discovery_client_->SimulateReceive(packet, size); - base::RunLoop().RunUntilIdle(); - } - - void ExpectAnyPacket() { - EXPECT_CALL(*test_service_discovery_client_.get(), OnSendTo(_)) - .Times(AtLeast(2)); - } - - protected: - content::BrowserTaskEnvironment task_environment; - scoped_refptr<TestServiceDiscoveryClient> test_service_discovery_client_; - std::unique_ptr<PrivetLocalPrinterLister> local_printer_lister_; - StrictMock<MockLocalPrinterListerDelegate> delegate_; - network::TestURLLoaderFactory test_url_loader_factory_; - cloud_print::PrivetHTTPAsynchronousFactoryImpl - http_asynchronous_factory_impl_; -}; - -TEST_F(PrivetLocalPrinterListerTest, PrinterAddedTest) { - test_url_loader_factory_.AddResponse(GURL(kPrivetInfoURL).spec(), - kInfoIsLocalPrinter); - ExpectAnyPacket(); - EXPECT_CALL(delegate_, LocalPrinterChanged(kServiceName, true, _)); - - local_printer_lister_->Start(); - SimulateReceive(kAnnouncePacket, sizeof(kAnnouncePacket)); -} - -TEST_F(PrivetLocalPrinterListerTest, NonPrinterAddedTest) { - test_url_loader_factory_.AddResponse(GURL(kPrivetInfoURL).spec(), - kInfoIsNotLocalPrinter); - ExpectAnyPacket(); - EXPECT_CALL(delegate_, LocalPrinterChanged(kServiceName, false, _)); - - local_printer_lister_->Start(); - SimulateReceive(kAnnouncePacket, sizeof(kAnnouncePacket)); -} - -} // namespace - -} // namespace cloud_print
diff --git a/chrome/browser/printing/cloud_print/privet_traffic_detector.cc b/chrome/browser/printing/cloud_print/privet_traffic_detector.cc deleted file mode 100644 index f37a57f..0000000 --- a/chrome/browser/printing/cloud_print/privet_traffic_detector.cc +++ /dev/null
@@ -1,260 +0,0 @@ -// Copyright 2013 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "chrome/browser/printing/cloud_print/privet_traffic_detector.h" - -#include <utility> - -#include "base/bind.h" -#include "base/cxx17_backports.h" -#include "base/sys_byteorder.h" -#include "base/threading/scoped_blocking_call.h" -#include "base/threading/thread_task_runner_handle.h" -#include "content/public/browser/browser_context.h" -#include "content/public/browser/browser_task_traits.h" -#include "content/public/browser/browser_thread.h" -#include "content/public/browser/network_service_instance.h" -#include "content/public/browser/storage_partition.h" -#include "mojo/public/cpp/bindings/pending_receiver.h" -#include "mojo/public/cpp/bindings/pending_remote.h" -#include "net/base/address_family.h" -#include "net/base/ip_address.h" -#include "net/base/network_interfaces.h" -#include "net/dns/public/dns_protocol.h" -#include "net/dns/public/util.h" -#include "services/network/public/mojom/network_context.mojom.h" -#include "services/network/public/mojom/network_service.mojom.h" - -namespace { - -const int kMaxRestartAttempts = 10; - -void OnGetNetworkList( - base::OnceCallback<void(net::NetworkInterfaceList)> callback, - const absl::optional<net::NetworkInterfaceList>& networks) { - DCHECK_CURRENTLY_ON(content::BrowserThread::UI); - if (!networks.has_value()) - return; - - net::NetworkInterfaceList ip4_networks; - for (const auto& network : networks.value()) { - net::AddressFamily address_family = net::GetAddressFamily(network.address); - if (address_family == net::ADDRESS_FAMILY_IPV4 && - network.prefix_length >= 24) { - ip4_networks.push_back(network); - } - } - - net::IPAddress localhost_prefix(127, 0, 0, 0); - ip4_networks.push_back(net::NetworkInterface( - "lo", "lo", 0, net::NetworkChangeNotifier::CONNECTION_UNKNOWN, - localhost_prefix, 8, net::IP_ADDRESS_ATTRIBUTE_NONE)); - - content::GetIOThreadTaskRunner({})->PostTask( - FROM_HERE, base::BindOnce(std::move(callback), std::move(ip4_networks))); -} - -void GetNetworkListOnUIThread( - base::OnceCallback<void(net::NetworkInterfaceList)> callback) { - DCHECK_CURRENTLY_ON(content::BrowserThread::UI); - content::GetNetworkService()->GetNetworkList( - net::INCLUDE_HOST_SCOPE_VIRTUAL_INTERFACES, - base::BindOnce(&OnGetNetworkList, std::move(callback))); -} - -void CreateUDPSocketOnUIThread( - content::BrowserContext* profile, - mojo::PendingReceiver<network::mojom::UDPSocket> receiver, - mojo::PendingRemote<network::mojom::UDPSocketListener> listener_remote) { - DCHECK_CURRENTLY_ON(content::BrowserThread::UI); - network::mojom::NetworkContext* network_context = - profile->GetDefaultStoragePartition()->GetNetworkContext(); - network_context->CreateUDPSocket(std::move(receiver), - std::move(listener_remote)); -} - -} // namespace - -namespace cloud_print { - -PrivetTrafficDetector::PrivetTrafficDetector( - content::BrowserContext* profile, - base::RepeatingClosure on_traffic_detected) - : helper_(new Helper(profile, on_traffic_detected)) { - DCHECK_CURRENTLY_ON(content::BrowserThread::UI); - content::GetNetworkConnectionTracker()->AddNetworkConnectionObserver(this); - content::GetIOThreadTaskRunner({})->PostTask( - FROM_HERE, base::BindOnce(&PrivetTrafficDetector::Helper::ScheduleRestart, - base::Unretained(helper_))); -} - -PrivetTrafficDetector::~PrivetTrafficDetector() { - DCHECK_CURRENTLY_ON(content::BrowserThread::UI); - content::GetNetworkConnectionTracker()->RemoveNetworkConnectionObserver(this); - content::GetIOThreadTaskRunner({})->DeleteSoon(FROM_HERE, helper_); -} - -void PrivetTrafficDetector::OnConnectionChanged( - network::mojom::ConnectionType type) { - DCHECK_CURRENTLY_ON(content::BrowserThread::UI); - content::GetIOThreadTaskRunner({})->PostTask( - FROM_HERE, - base::BindOnce(&PrivetTrafficDetector::Helper::HandleConnectionChanged, - base::Unretained(helper_), type)); -} - -PrivetTrafficDetector::Helper::Helper( - content::BrowserContext* profile, - base::RepeatingClosure on_traffic_detected) - : profile_(profile), - on_traffic_detected_(on_traffic_detected), - restart_attempts_(kMaxRestartAttempts) { - DCHECK_CURRENTLY_ON(content::BrowserThread::UI); -} - -PrivetTrafficDetector::Helper::~Helper() { - DCHECK_CURRENTLY_ON(content::BrowserThread::IO); -} - -void PrivetTrafficDetector::Helper::HandleConnectionChanged( - network::mojom::ConnectionType type) { - DCHECK_CURRENTLY_ON(content::BrowserThread::IO); - restart_attempts_ = kMaxRestartAttempts; - if (type != network::mojom::ConnectionType::CONNECTION_NONE) { - ScheduleRestart(); - } -} - -void PrivetTrafficDetector::Helper::ScheduleRestart() { - DCHECK_CURRENTLY_ON(content::BrowserThread::IO); - ResetConnection(); - weak_ptr_factory_.InvalidateWeakPtrs(); - content::GetUIThreadTaskRunner({})->PostDelayedTask( - FROM_HERE, - base::BindOnce( - &GetNetworkListOnUIThread, - base::BindOnce(&Helper::Restart, weak_ptr_factory_.GetWeakPtr())), - base::TimeDelta::FromSeconds(3)); -} - -void PrivetTrafficDetector::Helper::Restart( - net::NetworkInterfaceList networks) { - DCHECK_CURRENTLY_ON(content::BrowserThread::IO); - networks_ = std::move(networks); - Bind(); -} - -void PrivetTrafficDetector::Helper::Bind() { - DCHECK_CURRENTLY_ON(content::BrowserThread::IO); - - content::GetUIThreadTaskRunner({})->PostTask( - FROM_HERE, base::BindOnce(&CreateUDPSocketOnUIThread, profile_, - socket_.BindNewPipeAndPassReceiver(), - listener_receiver_.BindNewPipeAndPassRemote())); - - network::mojom::UDPSocketOptionsPtr socket_options = - network::mojom::UDPSocketOptions::New(); - socket_options->allow_address_sharing_for_multicast = true; - socket_options->multicast_loopback_mode = false; - - socket_->Bind( - net::dns_util::GetMdnsReceiveEndPoint(net::ADDRESS_FAMILY_IPV4), - std::move(socket_options), - base::BindOnce( - &Helper::OnBindComplete, weak_ptr_factory_.GetWeakPtr(), - net::dns_util::GetMdnsGroupEndPoint(net::ADDRESS_FAMILY_IPV4))); -} - -void PrivetTrafficDetector::Helper::OnBindComplete( - net::IPEndPoint multicast_group_addr, - int rv, - const absl::optional<net::IPEndPoint>& ip_endpoint) { - DCHECK_CURRENTLY_ON(content::BrowserThread::IO); - if (rv == net::OK) { - socket_->JoinGroup(multicast_group_addr.address(), - base::BindOnce(&Helper::OnJoinGroupComplete, - weak_ptr_factory_.GetWeakPtr())); - return; - } - - if (restart_attempts_-- > 0) - ScheduleRestart(); -} - -bool PrivetTrafficDetector::Helper::IsSourceAcceptable() const { - DCHECK_CURRENTLY_ON(content::BrowserThread::IO); - for (const auto& network : networks_) { - if (net::IPAddressMatchesPrefix(recv_addr_.address(), network.address, - network.prefix_length)) { - return true; - } - } - return false; -} - -bool PrivetTrafficDetector::Helper::IsPrivetPacket( - base::span<const uint8_t> data) const { - DCHECK_CURRENTLY_ON(content::BrowserThread::IO); - if (data.size() <= sizeof(net::dns_protocol::Header) || - !IsSourceAcceptable()) { - return false; - } - - const char* buffer_begin = reinterpret_cast<const char*>(data.data()); - const char* buffer_end = buffer_begin + data.size(); - const net::dns_protocol::Header* header = - reinterpret_cast<const net::dns_protocol::Header*>(buffer_begin); - // Check if response packet. - if (!(header->flags & base::HostToNet16(net::dns_protocol::kFlagResponse))) - return false; - - static const char kPrivetDeviceTypeDnsString[] = "\x07_privet"; - const char* substring_begin = kPrivetDeviceTypeDnsString; - const char* substring_end = - substring_begin + base::size(kPrivetDeviceTypeDnsString) - 1; - // Check for expected substring, any Privet device must include this. - return std::search(buffer_begin, buffer_end, substring_begin, - substring_end) != buffer_end; -} - -void PrivetTrafficDetector::Helper::OnJoinGroupComplete(int rv) { - DCHECK_CURRENTLY_ON(content::BrowserThread::IO); - if (rv == net::OK) { - // Reset on success. - restart_attempts_ = kMaxRestartAttempts; - socket_->ReceiveMoreWithBufferSize(1, net::dns_protocol::kMaxMulticastSize); - return; - } - - if (restart_attempts_-- > 0) - ScheduleRestart(); -} - -void PrivetTrafficDetector::Helper::ResetConnection() { - DCHECK_CURRENTLY_ON(content::BrowserThread::IO); - socket_.reset(); - listener_receiver_.reset(); -} - -void PrivetTrafficDetector::Helper::OnReceived( - int32_t result, - const absl::optional<net::IPEndPoint>& src_addr, - absl::optional<base::span<const uint8_t>> data) { - DCHECK_CURRENTLY_ON(content::BrowserThread::IO); - if (result != net::OK) - return; - - // |data| and |src_addr| are guaranteed to be non-null when |result| is - // net::OK - recv_addr_ = src_addr.value(); - if (IsPrivetPacket(data.value())) { - ResetConnection(); - content::GetUIThreadTaskRunner({})->PostTask(FROM_HERE, - on_traffic_detected_); - } else { - socket_->ReceiveMoreWithBufferSize(1, net::dns_protocol::kMaxMulticastSize); - } -} - -} // namespace cloud_print
diff --git a/chrome/browser/printing/cloud_print/privet_traffic_detector.h b/chrome/browser/printing/cloud_print/privet_traffic_detector.h deleted file mode 100644 index 55a236ef..0000000 --- a/chrome/browser/printing/cloud_print/privet_traffic_detector.h +++ /dev/null
@@ -1,99 +0,0 @@ -// Copyright 2013 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef CHROME_BROWSER_PRINTING_CLOUD_PRINT_PRIVET_TRAFFIC_DETECTOR_H_ -#define CHROME_BROWSER_PRINTING_CLOUD_PRINT_PRIVET_TRAFFIC_DETECTOR_H_ - -#include "base/callback.h" -#include "base/macros.h" -#include "mojo/public/cpp/bindings/receiver.h" -#include "mojo/public/cpp/bindings/remote.h" -#include "net/base/ip_endpoint.h" -#include "net/base/network_interfaces.h" -#include "services/network/public/cpp/network_connection_tracker.h" -#include "services/network/public/mojom/udp_socket.mojom.h" - -namespace content { -class BrowserContext; -} - -namespace cloud_print { - -// Detects mDns traffic that looks like the "Privet" protocol. This can produce -// false positives results, but the main task of the class is to avoid running a -// full mDns listener if user doesn't have devices. -// When potential "Privet" traffic has been detected, fire a callback and stop -// listening for traffic. -// When the network changes, restarts itself to start listening for traffic -// again on the new network(s). -// The class lives on the UI thread, with a helper that lives on the IO thread. -class PrivetTrafficDetector - : public network::NetworkConnectionTracker::NetworkConnectionObserver { - public: - // Called on the UI thread. - PrivetTrafficDetector(content::BrowserContext* profile, - base::RepeatingClosure on_traffic_detected); - ~PrivetTrafficDetector() override; - - // network::NetworkConnectionTracker::NetworkConnectionObserver: - void OnConnectionChanged(network::mojom::ConnectionType type) override; - - private: - // Constructed by PrivetTrafficDetector on the UI thread. but lives on the IO - // thread and destroyed on the IO thread. - class Helper : public network::mojom::UDPSocketListener { - public: - Helper(content::BrowserContext* profile, - base::RepeatingClosure on_traffic_detected); - ~Helper() override; - - // network::mojom::UDPSocketListener: - void OnReceived(int32_t result, - const absl::optional<net::IPEndPoint>& src_addr, - absl::optional<base::span<const uint8_t>> data) override; - - void HandleConnectionChanged(network::mojom::ConnectionType type); - void ScheduleRestart(); - - private: - void Restart(net::NetworkInterfaceList networks); - void Bind(); - void OnBindComplete(net::IPEndPoint multicast_addr, - int rv, - const absl::optional<net::IPEndPoint>& ip_address); - bool IsSourceAcceptable() const; - bool IsPrivetPacket(base::span<const uint8_t> data) const; - void OnJoinGroupComplete(int rv); - void ResetConnection(); - - // Initialized on the UI thread, but only accessed on the IO thread for the - // purpose of passing it back to the UI thread. Safe because it is const. - content::BrowserContext* const profile_; - - // Initialized on the UI thread, but only accessed on the IO thread. - base::RepeatingClosure on_traffic_detected_; - int restart_attempts_; - - // Only accessed on the IO thread. - net::NetworkInterfaceList networks_; - net::IPEndPoint recv_addr_; - mojo::Remote<network::mojom::UDPSocket> socket_; - - // Implementation of socket listener callback. - // Initialized on the UI thread, but only accessed on the IO thread. - mojo::Receiver<network::mojom::UDPSocketListener> listener_receiver_{this}; - - base::WeakPtrFactory<Helper> weak_ptr_factory_{this}; - - DISALLOW_COPY_AND_ASSIGN(Helper); - }; - - Helper* const helper_; - - DISALLOW_COPY_AND_ASSIGN(PrivetTrafficDetector); -}; - -} // namespace cloud_print - -#endif // CHROME_BROWSER_PRINTING_CLOUD_PRINT_PRIVET_TRAFFIC_DETECTOR_H_
diff --git a/chrome/browser/printing/cloud_print/privet_url_loader.cc b/chrome/browser/printing/cloud_print/privet_url_loader.cc deleted file mode 100644 index 65a8250..0000000 --- a/chrome/browser/printing/cloud_print/privet_url_loader.cc +++ /dev/null
@@ -1,367 +0,0 @@ -// Copyright 2013 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "chrome/browser/printing/cloud_print/privet_url_loader.h" - -#include <stdint.h> - -#include <algorithm> -#include <limits> -#include <map> -#include <memory> -#include <utility> - -#include "base/bind.h" -#include "base/json/json_reader.h" -#include "base/lazy_instance.h" -#include "base/location.h" -#include "base/no_destructor.h" -#include "base/rand_util.h" -#include "base/strings/stringprintf.h" -#include "base/task/post_task.h" -#include "base/threading/thread_task_runner_handle.h" -#include "chrome/browser/browser_process.h" -#include "chrome/browser/net/system_network_context_manager.h" -#include "chrome/browser/printing/cloud_print/privet_constants.h" -#include "net/base/load_flags.h" -#include "net/http/http_status_code.h" -#include "services/network/public/cpp/resource_request.h" -#include "services/network/public/cpp/shared_url_loader_factory.h" -#include "services/network/public/mojom/url_response_head.mojom.h" - -namespace cloud_print { - -namespace { - -constexpr char kXPrivetTokenHeaderKey[] = "X-Privet-Token"; -constexpr char kRangeHeaderKey[] = "Range"; -constexpr char kRangeHeaderValueFormat[] = "bytes=%d-%d"; -constexpr char kXPrivetEmptyToken[] = "\"\""; -constexpr int kPrivetMaxRetries = 20; -constexpr int kPrivetTimeoutOnError = 5; -constexpr int kHTTPErrorCodeInvalidXPrivetToken = 418; -constexpr size_t kPrivetMaxContentSize = 1 * 1024 * 1024; - -base::LazyInstance<std::map<std::string, std::string>>::Leaky g_tokens = - LAZY_INSTANCE_INITIALIZER; - -std::string MakeRangeHeaderValue(int start, int end) { - DCHECK_GE(start, 0); - DCHECK_GT(end, 0); - DCHECK_GT(end, start); - return base::StringPrintf(kRangeHeaderValueFormat, start, end); -} - -} // namespace - -PrivetURLLoader::RetryImmediatelyForTest::RetryImmediatelyForTest() { - DCHECK(!skip_retry_timeouts_for_tests_); - skip_retry_timeouts_for_tests_ = true; -} - -PrivetURLLoader::RetryImmediatelyForTest::~RetryImmediatelyForTest() { - DCHECK(skip_retry_timeouts_for_tests_); - skip_retry_timeouts_for_tests_ = false; -} - -// static -bool PrivetURLLoader::skip_retry_timeouts_for_tests_ = false; - -void PrivetURLLoader::Delegate::OnNeedPrivetToken(TokenCallback callback) { - OnError(0, TOKEN_ERROR); -} - -bool PrivetURLLoader::Delegate::OnRawData(bool response_is_file, - const std::string& data_string, - const base::FilePath& data_file) { - return false; -} - -PrivetURLLoader::PrivetURLLoader( - const GURL& url, - const std::string& request_type, - scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory, - const net::NetworkTrafficAnnotationTag& traffic_annotation, - PrivetURLLoader::Delegate* delegate) - : url_(url), - request_type_(request_type), - url_loader_factory_(url_loader_factory), - traffic_annotation_(traffic_annotation), - delegate_(delegate), - max_retries_(kPrivetMaxRetries) {} - -PrivetURLLoader::~PrivetURLLoader() {} - -// static -void PrivetURLLoader::SetTokenForHost(const std::string& host, - const std::string& token) { - g_tokens.Get()[host] = token; -} - -// static -void PrivetURLLoader::ResetTokenMapForTest() { - g_tokens.Get().clear(); -} - -void PrivetURLLoader::SetMaxRetriesForTest(int max_retries) { - DCHECK_EQ(tries_, 0); - max_retries_ = max_retries; -} - -void PrivetURLLoader::DoNotRetryOnTransientError() { - DCHECK_EQ(tries_, 0); - do_not_retry_on_transient_error_ = true; -} - -void PrivetURLLoader::SendEmptyPrivetToken() { - DCHECK_EQ(tries_, 0); - send_empty_privet_token_ = true; -} - -std::string PrivetURLLoader::GetPrivetAccessToken() { - if (send_empty_privet_token_) - return std::string(); - - auto it = g_tokens.Get().find(GetHostString()); - return it != g_tokens.Get().end() ? it->second : std::string(); -} - -std::string PrivetURLLoader::GetHostString() { - return url_.GetOrigin().spec(); -} - -void PrivetURLLoader::SaveResponseToFile() { - DCHECK_EQ(tries_, 0); - make_response_file_ = true; -} - -void PrivetURLLoader::SetByteRange(int start, int end) { - DCHECK_EQ(tries_, 0); - byte_range_start_ = start; - byte_range_end_ = end; - has_byte_range_ = true; -} - -void PrivetURLLoader::Try() { - tries_++; - if (tries_ > max_retries_) { - delegate_->OnError(0, UNKNOWN_ERROR); - return; - } - - DVLOG(1) << "Attempt: " << tries_; - - auto request = std::make_unique<network::ResourceRequest>(); - request->url = url_; - request->method = request_type_; - // Privet requests are relevant to hosts on local network only. - request->load_flags = net::LOAD_BYPASS_PROXY | net::LOAD_DISABLE_CACHE; - request->credentials_mode = network::mojom::CredentialsMode::kOmit; - - std::string token = GetPrivetAccessToken(); - if (token.empty()) - token = kXPrivetEmptyToken; - request->headers.SetHeader(kXPrivetTokenHeaderKey, token); - - if (has_byte_range_) { - request->headers.SetHeader( - kRangeHeaderKey, - MakeRangeHeaderValue(byte_range_start_, byte_range_end_)); - } - - url_loader_ = - network::SimpleURLLoader::Create(std::move(request), traffic_annotation_); - - url_loader_->SetAllowHttpErrorResults(true); - - url_loader_->SetOnResponseStartedCallback(base::BindOnce( - &PrivetURLLoader::OnResponseStarted, weak_factory_.GetWeakPtr())); - - // URLFetcher requires us to set upload data for POST requests. - if (request_type_ == "POST") - url_loader_->AttachStringForUpload(upload_data_, upload_content_type_); - - if (make_response_file_) { - url_loader_->DownloadToTempFile( - url_loader_factory_.get(), - base::BindOnce(&PrivetURLLoader::OnDownloadedToFile, - weak_factory_.GetWeakPtr())); - } else { - url_loader_->DownloadToString( - url_loader_factory_.get(), - base::BindOnce(&PrivetURLLoader::OnDownloadedToString, - weak_factory_.GetWeakPtr()), - kPrivetMaxContentSize); - } -} - -void PrivetURLLoader::Start() { - DCHECK_EQ(tries_, 0); // We haven't called |Start()| yet. - - if (!url_.is_valid()) - return delegate_->OnError(0, UNKNOWN_ERROR); - - if (!send_empty_privet_token_) { - std::string privet_access_token; - privet_access_token = GetPrivetAccessToken(); - if (privet_access_token.empty()) { - RequestTokenRefresh(); - return; - } - } - - Try(); -} - -void PrivetURLLoader::SetUploadData(const std::string& upload_content_type, - const std::string& upload_data) { - upload_content_type_ = upload_content_type; - upload_data_ = upload_data; -} - -void PrivetURLLoader::OnResponseStarted( - const GURL& final_url, - const network::mojom::URLResponseHead& response_head) { - if (!response_head.headers || - response_head.headers->response_code() == net::HTTP_SERVICE_UNAVAILABLE) { - url_loader_.reset(); - ScheduleRetry(kPrivetTimeoutOnError); - } -} - -void PrivetURLLoader::OnDownloadedToString( - std::unique_ptr<std::string> response_body) { - DCHECK(!make_response_file_); - - if (CheckURLLoaderForError()) - return; - - if (delegate_->OnRawData(false, *response_body, base::FilePath())) - return; - - // Byte ranges should only be used when we're not parsing the data as JSON. - DCHECK(!has_byte_range_); - - // Response contains error description. - int response_code = url_loader_->ResponseInfo()->headers->response_code(); - bool is_error_response = false; - if (response_code != net::HTTP_OK) { - delegate_->OnError(response_code, RESPONSE_CODE_ERROR); - return; - } - - absl::optional<base::Value> value = - base::JSONReader::Read(*response_body, base::JSON_ALLOW_TRAILING_COMMAS); - if (!value || !value->is_dict()) { - delegate_->OnError(0, JSON_PARSE_ERROR); - return; - } - - const base::Value* error_value = - value->FindKeyOfType(kPrivetKeyError, base::Value::Type::STRING); - if (error_value) { - const std::string& error = error_value->GetString(); - if (error == kPrivetErrorInvalidXPrivetToken) { - RequestTokenRefresh(); - return; - } - if (PrivetErrorTransient(error)) { - if (!do_not_retry_on_transient_error_) { - const base::Value* timeout_value = - value->FindKeyOfType(kPrivetKeyTimeout, base::Value::Type::INTEGER); - ScheduleRetry(timeout_value ? timeout_value->GetInt() - : kPrivetDefaultTimeout); - return; - } - } - is_error_response = true; - } - - std::unique_ptr<base::DictionaryValue> dict_value = - base::DictionaryValue::From( - base::Value::ToUniquePtrValue(std::move(*value))); - delegate_->OnParsedJson(response_code, *dict_value, is_error_response); -} - -void PrivetURLLoader::OnDownloadedToFile(base::FilePath path) { - DCHECK(make_response_file_); - - if (CheckURLLoaderForError()) - return; - - bool result = delegate_->OnRawData(true, std::string(), path); - DCHECK(result); -} - -bool PrivetURLLoader::CheckURLLoaderForError() { - switch (url_loader_->NetError()) { - case net::OK: - break; - case net::ERR_ABORTED: - delegate_->OnError(0, REQUEST_CANCELED); - return true; - default: - delegate_->OnError(0, UNKNOWN_ERROR); - return true; - } - int response_code = net::ERR_FAILED; - if (url_loader_->ResponseInfo()->headers) - response_code = url_loader_->ResponseInfo()->headers->response_code(); - if (response_code == kHTTPErrorCodeInvalidXPrivetToken) { - RequestTokenRefresh(); - return true; - } - if (response_code != net::HTTP_OK && - response_code != net::HTTP_PARTIAL_CONTENT && - response_code != net::HTTP_BAD_REQUEST) { - delegate_->OnError(response_code, RESPONSE_CODE_ERROR); - return true; - } - return false; -} - -void PrivetURLLoader::ScheduleRetry(int timeout_seconds) { - double random_scaling_factor = - 1 + base::RandDouble() * kPrivetMaximumTimeRandomAddition; - - int timeout_seconds_randomized = - static_cast<int>(timeout_seconds * random_scaling_factor); - - timeout_seconds_randomized = - std::max(timeout_seconds_randomized, kPrivetMinimumTimeout); - - // Don't wait because only error callback is going to be called. - if (tries_ >= max_retries_) - timeout_seconds_randomized = 0; - - if (skip_retry_timeouts_for_tests_) - timeout_seconds_randomized = 0; - - base::ThreadTaskRunnerHandle::Get()->PostDelayedTask( - FROM_HERE, - base::BindOnce(&PrivetURLLoader::Try, weak_factory_.GetWeakPtr()), - base::TimeDelta::FromSeconds(timeout_seconds_randomized)); -} - -void PrivetURLLoader::RequestTokenRefresh() { - delegate_->OnNeedPrivetToken(base::BindOnce(&PrivetURLLoader::RefreshToken, - weak_factory_.GetWeakPtr())); -} - -void PrivetURLLoader::RefreshToken(const std::string& token) { - if (token.empty()) { - delegate_->OnError(0, TOKEN_ERROR); - } else { - SetTokenForHost(GetHostString(), token); - Try(); - } -} - -bool PrivetURLLoader::PrivetErrorTransient(const std::string& error) { - return error == kPrivetErrorDeviceBusy || - error == kPrivetErrorPendingUserAction || - error == kPrivetErrorPrinterBusy; -} - -} // namespace cloud_print
diff --git a/chrome/browser/printing/cloud_print/privet_url_loader.h b/chrome/browser/printing/cloud_print/privet_url_loader.h deleted file mode 100644 index 93fcb3a..0000000 --- a/chrome/browser/printing/cloud_print/privet_url_loader.h +++ /dev/null
@@ -1,151 +0,0 @@ -// Copyright 2013 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef CHROME_BROWSER_PRINTING_CLOUD_PRINT_PRIVET_URL_LOADER_H_ -#define CHROME_BROWSER_PRINTING_CLOUD_PRINT_PRIVET_URL_LOADER_H_ - -#include <memory> -#include <string> - -#include "base/files/file_path.h" -#include "base/files/file_util.h" -#include "base/macros.h" -#include "base/memory/ref_counted.h" -#include "base/memory/weak_ptr.h" -#include "base/sequenced_task_runner.h" -#include "base/values.h" -#include "net/traffic_annotation/network_traffic_annotation.h" -#include "services/network/public/cpp/simple_url_loader.h" -#include "services/network/public/mojom/url_response_head.mojom-forward.h" -#include "url/gurl.h" - -namespace network { -class SharedURLLoaderFactory; -} - -namespace cloud_print { - -// Privet-specific URLLoader adapter. Currently supports only the subset of -// HTTP features required by Privet for GCP 1.5 (/privet/info and -// /privet/register). -class PrivetURLLoader { - public: - enum ErrorType { - JSON_PARSE_ERROR, - REQUEST_CANCELED, - RESPONSE_CODE_ERROR, - TOKEN_ERROR, - UNKNOWN_ERROR, - }; - - using TokenCallback = base::OnceCallback<void(const std::string& /*token*/)>; - - class Delegate { - public: - virtual ~Delegate() {} - - // If you do not implement this method for PrivetV1 callers, you will always - // get a TOKEN_ERROR error when your token is invalid. - virtual void OnNeedPrivetToken(TokenCallback callback); - - // |response_code| is only needed for RESPONSE_CODE_ERROR. - virtual void OnError(int response_code, ErrorType error) = 0; - virtual void OnParsedJson(int response_code, - const base::DictionaryValue& value, - bool has_error) = 0; - - // If this method returns true, the data will not be parsed as JSON, and - // OnParsedJson() will not be called. Otherwise, OnParsedJson() will be - // called. This only happens in tests. - virtual bool OnRawData(bool response_is_file, - const std::string& data_string, - const base::FilePath& data_file); - }; - - PrivetURLLoader( - const GURL& url, - const std::string& request_type, - scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory, - const net::NetworkTrafficAnnotationTag& traffic_annotation, - Delegate* delegate); - - virtual ~PrivetURLLoader(); - - static void SetTokenForHost(const std::string& host, - const std::string& token); - - static void ResetTokenMapForTest(); - - void SetMaxRetriesForTest(int max_retries); - - void DoNotRetryOnTransientError(); - - void SendEmptyPrivetToken(); - - // Set the contents of the Range header. OnRawData() must return true if this - // is called. - void SetByteRange(int start, int end); - - // Save the response to a file. OnRawData() must return true if this is - // called. - void SaveResponseToFile(); - - void Start(); - - void SetUploadData(const std::string& upload_content_type, - const std::string& upload_data); - - // A class that can be used in tests that want to bypass the delay when - // retrying loading a URL. Create one of this object in your test, it will - // disable the delay for retry on construction and revert it back on - // destruction. - // Note that you should not have more than one of these allocated at a time. - class RetryImmediatelyForTest final { - public: - RetryImmediatelyForTest(); - ~RetryImmediatelyForTest(); - }; - - private: - std::string GetHostString(); // Get string representing the host. - std::string GetPrivetAccessToken(); - void Try(); - void ScheduleRetry(int timeout_seconds); - bool PrivetErrorTransient(const std::string& error); - void RequestTokenRefresh(); - void RefreshToken(const std::string& token); - void OnResponseStarted(const GURL& final_url, - const network::mojom::URLResponseHead& response_head); - void OnDownloadedToString(std::unique_ptr<std::string> response_body); - void OnDownloadedToFile(base::FilePath path); - bool CheckURLLoaderForError(); - - const GURL url_; - const std::string request_type_; - scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory_; - const net::NetworkTrafficAnnotationTag traffic_annotation_; - Delegate* const delegate_; - - int max_retries_; - bool do_not_retry_on_transient_error_ = false; - bool send_empty_privet_token_ = false; - bool has_byte_range_ = false; - bool make_response_file_ = false; - static bool skip_retry_timeouts_for_tests_; - - int byte_range_start_ = 0; - int byte_range_end_ = 0; - - int tries_ = 0; - std::string upload_data_; - std::string upload_content_type_; - std::unique_ptr<network::SimpleURLLoader> url_loader_; - - base::WeakPtrFactory<PrivetURLLoader> weak_factory_{this}; - DISALLOW_COPY_AND_ASSIGN(PrivetURLLoader); -}; - -} // namespace cloud_print - -#endif // CHROME_BROWSER_PRINTING_CLOUD_PRINT_PRIVET_URL_LOADER_H_
diff --git a/chrome/browser/printing/cloud_print/privet_url_loader_unittest.cc b/chrome/browser/printing/cloud_print/privet_url_loader_unittest.cc deleted file mode 100644 index a50b2234..0000000 --- a/chrome/browser/printing/cloud_print/privet_url_loader_unittest.cc +++ /dev/null
@@ -1,298 +0,0 @@ -// Copyright 2013 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "chrome/browser/printing/cloud_print/privet_url_loader.h" - -#include <memory> - -#include "base/bind.h" -#include "base/callback_helpers.h" -#include "base/files/file_util.h" -#include "base/run_loop.h" -#include "base/test/bind.h" -#include "base/test/task_environment.h" -#include "net/traffic_annotation/network_traffic_annotation_test_helper.h" -#include "services/network/public/cpp/weak_wrapper_shared_url_loader_factory.h" -#include "services/network/test/test_url_loader_factory.h" -#include "testing/gmock/include/gmock/gmock.h" -#include "testing/gtest/include/gtest/gtest.h" - -using ::testing::_; - -namespace cloud_print { - -namespace { - -const char kSamplePrivetURL[] = - "http://10.0.0.8:7676/privet/register?action=start"; -const char kSamplePrivetToken[] = "MyToken"; -const char kEmptyPrivetToken[] = "\"\""; - -const char kSampleParsableJSON[] = "{ \"hello\" : 2 }"; -const char kSampleUnparsableJSON[] = "{ \"hello\" : }"; -const char kSampleJSONWithError[] = "{ \"error\" : \"unittest_example\" }"; -const net::HttpStatusCode kHTTPErrorCodeInvalidXPrivetToken = - static_cast<net::HttpStatusCode>(418); - -class MockPrivetURLLoaderDelegate : public PrivetURLLoader::Delegate { - public: - MockPrivetURLLoaderDelegate( - scoped_refptr<base::SingleThreadTaskRunner> task_runner) - : raw_mode_(false), task_runner_(task_runner) {} - - ~MockPrivetURLLoaderDelegate() override {} - - MOCK_METHOD2(OnError, - void(int response_code, PrivetURLLoader::ErrorType error)); - - void OnParsedJson(int response_code, - const base::DictionaryValue& value, - bool has_error) override { - saved_value_.reset(value.DeepCopy()); - OnParsedJsonInternal(has_error); - } - - MOCK_METHOD1(OnParsedJsonInternal, void(bool has_error)); - - void OnNeedPrivetToken(PrivetURLLoader::TokenCallback callback) override { - auto closure = base::BindOnce( - [](PrivetURLLoader::TokenCallback callback) { - std::move(callback).Run(kSamplePrivetToken); - }, - std::move(callback)); - task_runner_->PostTask(FROM_HERE, std::move(closure)); - OnNeedPrivetTokenInternal(); - } - - MOCK_METHOD0(OnNeedPrivetTokenInternal, void()); - - bool OnRawData(bool response_is_file, - const std::string& data, - const base::FilePath& response_file) override { - if (!raw_mode_) - return false; - - if (response_is_file) { - EXPECT_TRUE(response_file != base::FilePath()); - OnFileInternal(response_file); - } else { - OnRawDataInternal(data); - } - - return true; - } - - MOCK_METHOD1(OnRawDataInternal, void(const std::string& data)); - - MOCK_METHOD1(OnFileInternal, void(const base::FilePath& response_file)); - - const base::DictionaryValue* saved_value() { return saved_value_.get(); } - - void SetRawMode(bool raw_mode) { raw_mode_ = raw_mode; } - - private: - std::unique_ptr<base::DictionaryValue> saved_value_; - bool raw_mode_; - scoped_refptr<base::SingleThreadTaskRunner> task_runner_; -}; - -class PrivetURLLoaderTest : public ::testing::Test { - public: - PrivetURLLoaderTest() - : task_environment_(base::test::TaskEnvironment::MainThreadType::IO), - test_shared_url_loader_factory_( - base::MakeRefCounted<network::WeakWrapperSharedURLLoaderFactory>( - &test_url_loader_factory_)), - delegate_(task_environment_.GetMainThreadTaskRunner()) { - privet_url_loader_ = std::make_unique<PrivetURLLoader>( - GURL(kSamplePrivetURL), "POST", test_shared_url_loader_factory_, - TRAFFIC_ANNOTATION_FOR_TESTS, &delegate_); - - PrivetURLLoader::SetTokenForHost(GURL(kSamplePrivetURL).GetOrigin().spec(), - kSamplePrivetToken); - } - ~PrivetURLLoaderTest() override {} - - protected: - void StartPrivetURLLoaderAndCaptureHeaders(net::HttpRequestHeaders* headers) { - test_url_loader_factory_.SetInterceptor(base::BindLambdaForTesting( - [&](const network::ResourceRequest& request) { - *headers = request.headers; - })); - privet_url_loader_->Start(); - base::RunLoop().RunUntilIdle(); - test_url_loader_factory_.SetInterceptor(base::NullCallback()); - } - - base::test::TaskEnvironment task_environment_; - network::TestURLLoaderFactory test_url_loader_factory_; - scoped_refptr<network::WeakWrapperSharedURLLoaderFactory> - test_shared_url_loader_factory_; - std::unique_ptr<PrivetURLLoader> privet_url_loader_; - testing::StrictMock<MockPrivetURLLoaderDelegate> delegate_; -}; - -TEST_F(PrivetURLLoaderTest, FetchSuccess) { - test_url_loader_factory_.AddResponse(kSamplePrivetURL, kSampleParsableJSON); - - EXPECT_CALL(delegate_, OnParsedJsonInternal(false)); - privet_url_loader_->Start(); - base::RunLoop().RunUntilIdle(); - - const base::DictionaryValue* value = delegate_.saved_value(); - int hello_value; - ASSERT_TRUE(value); - ASSERT_TRUE(value->GetInteger("hello", &hello_value)); - EXPECT_EQ(2, hello_value); -} - -// An interceptor used by the HTTP503Retry test that returns multiple failures -// then success. -class RetryURLLoaderInterceptor { - public: - explicit RetryURLLoaderInterceptor( - network::TestURLLoaderFactory* test_url_loader_factory) - : test_url_loader_factory_(test_url_loader_factory) { - test_url_loader_factory_->SetInterceptor(base::BindRepeating( - &RetryURLLoaderInterceptor::InterceptURL, base::Unretained(this))); - } - - void InterceptURL(const network::ResourceRequest& resource_request) { - if (resource_request.url != kSamplePrivetURL) - return; - net::HttpStatusCode status = - counter_++ < 3 ? net::HTTP_SERVICE_UNAVAILABLE : net::HTTP_OK; - test_url_loader_factory_->AddResponse(kSamplePrivetURL, kSampleParsableJSON, - status); - } - - private: - network::TestURLLoaderFactory* test_url_loader_factory_; - int counter_ = 0; - GURL url_; -}; - -TEST_F(PrivetURLLoaderTest, HTTP503Retry) { - PrivetURLLoader::RetryImmediatelyForTest retry_immediately; - - // The interceptor simulates the service being unavailable and then available. - RetryURLLoaderInterceptor interceptor(&test_url_loader_factory_); - - EXPECT_CALL(delegate_, OnParsedJsonInternal(false)); - privet_url_loader_->Start(); - base::RunLoop().RunUntilIdle(); -} - -TEST_F(PrivetURLLoaderTest, ResponseCodeError) { - test_url_loader_factory_.AddResponse(kSamplePrivetURL, kSampleParsableJSON, - net::HTTP_NOT_FOUND); - EXPECT_CALL(delegate_, OnError(_, PrivetURLLoader::RESPONSE_CODE_ERROR)); - privet_url_loader_->Start(); - base::RunLoop().RunUntilIdle(); -} - -TEST_F(PrivetURLLoaderTest, JsonParseError) { - test_url_loader_factory_.AddResponse(kSamplePrivetURL, kSampleUnparsableJSON); - EXPECT_CALL(delegate_, OnError(_, PrivetURLLoader::JSON_PARSE_ERROR)); - privet_url_loader_->Start(); - base::RunLoop().RunUntilIdle(); -} - -TEST_F(PrivetURLLoaderTest, Header) { - net::HttpRequestHeaders request_headers; - StartPrivetURLLoaderAndCaptureHeaders(&request_headers); - - std::string header_token; - ASSERT_TRUE(request_headers.GetHeader("X-Privet-Token", &header_token)); - EXPECT_EQ(kSamplePrivetToken, header_token); -} - -TEST_F(PrivetURLLoaderTest, Header2) { - PrivetURLLoader::SetTokenForHost(GURL(kSamplePrivetURL).GetOrigin().spec(), - ""); - privet_url_loader_->SendEmptyPrivetToken(); - - net::HttpRequestHeaders request_headers; - StartPrivetURLLoaderAndCaptureHeaders(&request_headers); - - std::string header_token; - ASSERT_TRUE(request_headers.GetHeader("X-Privet-Token", &header_token)); - EXPECT_EQ(kEmptyPrivetToken, header_token); -} - -TEST_F(PrivetURLLoaderTest, AlwaysSendEmpty) { - PrivetURLLoader::SetTokenForHost(GURL(kSamplePrivetURL).GetOrigin().spec(), - "SampleToken"); - - privet_url_loader_->SendEmptyPrivetToken(); - - net::HttpRequestHeaders request_headers; - StartPrivetURLLoaderAndCaptureHeaders(&request_headers); - - std::string header_token; - ASSERT_TRUE(request_headers.GetHeader("X-Privet-Token", &header_token)); - EXPECT_EQ(kEmptyPrivetToken, header_token); -} - -TEST_F(PrivetURLLoaderTest, HandleInvalidToken) { - privet_url_loader_->SetMaxRetriesForTest(1); - test_url_loader_factory_.AddResponse(kSamplePrivetURL, kSampleParsableJSON, - kHTTPErrorCodeInvalidXPrivetToken); - EXPECT_CALL(delegate_, OnNeedPrivetTokenInternal()); - EXPECT_CALL(delegate_, OnError(0, PrivetURLLoader::UNKNOWN_ERROR)); - privet_url_loader_->Start(); - base::RunLoop().RunUntilIdle(); -} - -TEST_F(PrivetURLLoaderTest, FetchHasError) { - test_url_loader_factory_.AddResponse(kSamplePrivetURL, kSampleJSONWithError); - EXPECT_CALL(delegate_, OnParsedJsonInternal(true)); - privet_url_loader_->Start(); - base::RunLoop().RunUntilIdle(); -} - -TEST_F(PrivetURLLoaderTest, LoaderRawData) { - delegate_.SetRawMode(true); - test_url_loader_factory_.AddResponse(kSamplePrivetURL, kSampleJSONWithError); - EXPECT_CALL(delegate_, OnRawDataInternal(kSampleJSONWithError)); - privet_url_loader_->Start(); - base::RunLoop().RunUntilIdle(); -} - -TEST_F(PrivetURLLoaderTest, RangeRequest) { - delegate_.SetRawMode(true); - privet_url_loader_->SetByteRange(200, 300); - - net::HttpRequestHeaders request_headers; - StartPrivetURLLoaderAndCaptureHeaders(&request_headers); - - std::string header_range; - ASSERT_TRUE(request_headers.GetHeader("Range", &header_range)); - EXPECT_EQ("bytes=200-300", header_range); -} - -TEST_F(PrivetURLLoaderTest, LoaderToFile) { - test_url_loader_factory_.AddResponse(kSamplePrivetURL, kSampleParsableJSON); - delegate_.SetRawMode(true); - privet_url_loader_->SaveResponseToFile(); - // Downloading to a file bounce to another thread for the write so we cannot - // just use RunLoop::RunUntilIdle() and have to wait for the callback. - base::FilePath response_file; - base::RunLoop run_loop; - EXPECT_CALL(delegate_, OnFileInternal(testing::_)) - .WillOnce(testing::Invoke([&](const base::FilePath& response_file_param) { - response_file = response_file_param; - run_loop.Quit(); - })); - privet_url_loader_->Start(); - run_loop.Run(); - - std::string file_content; - ASSERT_TRUE(base::ReadFileToString(response_file, &file_content)); - EXPECT_EQ(kSampleParsableJSON, file_content); -} - -} // namespace - -} // namespace cloud_print
diff --git a/chrome/browser/profiles/profile_attributes_storage.cc b/chrome/browser/profiles/profile_attributes_storage.cc index 1698fc0..26630f5 100644 --- a/chrome/browser/profiles/profile_attributes_storage.cc +++ b/chrome/browser/profiles/profile_attributes_storage.cc
@@ -428,7 +428,7 @@ DictionaryPrefUpdate update(prefs_, prefs::kProfileAttributes); base::DictionaryValue* attributes = update.Get(); std::string key = StorageKeyFromProfilePath(profile_path); - attributes->Remove(key, nullptr); + attributes->RemoveKey(key); profile_attributes_entries_.erase(profile_path.value()); // `OnProfileWasRemoved()` must be the first observer method being called
diff --git a/chrome/browser/resources/BUILD.gn b/chrome/browser/resources/BUILD.gn index a9bd73841..50e47faf 100644 --- a/chrome/browser/resources/BUILD.gn +++ b/chrome/browser/resources/BUILD.gn
@@ -123,7 +123,6 @@ "bluetooth_internals:closure_compile", "commander:closure_compile", "discards:closure_compile", - "download_internals:closure_compile", "federated_learning:closure_compile", "feedback_webui/js:closure_compile", "gaia_auth_host:closure_compile", @@ -311,7 +310,6 @@ sources = [ "$root_gen_dir/chrome/bluetooth_internals_resources.pak", "$root_gen_dir/chrome/dev_ui_browser_resources.pak", - "$root_gen_dir/chrome/download_internals_resources.pak", "$root_gen_dir/chrome/floc_internals_resources.pak", "$root_gen_dir/chrome/internals_resources.pak", "$root_gen_dir/chrome/invalidations_resources.pak", @@ -321,6 +319,7 @@ "$root_gen_dir/chrome/usb_internals_resources.pak", "$root_gen_dir/chrome/webrtc_logs_resources.pak", "$root_gen_dir/components/dev_ui_components_resources.pak", + "$root_gen_dir/components/download_internals_resources.pak", "$root_gen_dir/components/sync_driver_sync_internals_resources.pak", "$root_gen_dir/content/browser/resources/media/media_internals_resources.pak", "$root_gen_dir/content/browser/webrtc/resources/webrtc_internals_resources.pak", @@ -329,7 +328,6 @@ deps = [ "//chrome/browser:dev_ui_browser_resources", "//chrome/browser/resources/bluetooth_internals:resources", - "//chrome/browser/resources/download_internals:resources", "//chrome/browser/resources/federated_learning:resources", "//chrome/browser/resources/internals:resources", "//chrome/browser/resources/invalidations:resources", @@ -338,6 +336,7 @@ "//chrome/browser/resources/omnibox:resources", "//chrome/browser/resources/quota_internals:resources", "//chrome/browser/resources/usb_internals:resources", + "//components/download/resources/download_internals:resources", "//components/resources:dev_ui_components_resources", "//components/sync/driver/resources", "//content:dev_ui_content_resources",
diff --git a/chrome/browser/resources/chromeos/accessibility/accessibility_common/magnifier/magnifier_test.js b/chrome/browser/resources/chromeos/accessibility/accessibility_common/magnifier/magnifier_test.js index 9432147..c9854ba2 100644 --- a/chrome/browser/resources/chromeos/accessibility/accessibility_common/magnifier/magnifier_test.js +++ b/chrome/browser/resources/chromeos/accessibility/accessibility_common/magnifier/magnifier_test.js
@@ -182,6 +182,26 @@ }); }); +TEST_F('MagnifierE2ETest', 'MagnifierCenterOnPoint', function() { + this.runWithLoadedTree('', async function(root) { + const targetPoint = {x: 100, y: 100}; + const targetBounds = {left: 100, top: 100, width: 0, height: 0}; + const magnifier = accessibilityCommon.getMagnifierForTest(); + magnifier.setIsInitializingForTest(false); + + // Verify magnifier bounds don't include |targetBounds|. + bounds = await this.getNextMagnifierBounds(); + assertFalse(RectUtil.contains(bounds, targetBounds)); + + // Center magnifier on point |targetPoint|. + chrome.accessibilityPrivate.magnifierCenterOnPoint(targetPoint); + + // Verify magnifier bounds do include |targetBounds|. + bounds = await this.getNextMagnifierBounds(); + assertTrue(RectUtil.contains(bounds, targetBounds)); + }); +}); + TEST_F('MagnifierE2ETest', 'ScreenMagnifierFocusFollowingPref', function() { this.newCallback(async () => {
diff --git a/chrome/browser/resources/settings/reset_page/reset_browser_proxy.js b/chrome/browser/resources/settings/reset_page/reset_browser_proxy.js index 6e6ddb1..839f5514 100644 --- a/chrome/browser/resources/settings/reset_page/reset_browser_proxy.js +++ b/chrome/browser/resources/settings/reset_page/reset_browser_proxy.js
@@ -15,6 +15,7 @@ * @return {!Promise} A promise firing once resetting has completed. */ performResetProfileSettings(sendSettings, requestOrigin) {} + /** * A method to be called when the reset profile dialog is hidden. */ @@ -42,18 +43,6 @@ * has been retrieved. */ getTriggeredResetToolName() {} - - // <if expr="chromeos"> - /** - * A method to be called when the reset powerwash dialog is shown. - */ - onPowerwashDialogShow() {} - - /** - * Initiates a factory reset and restarts ChromeOS. - */ - requestFactoryResetRestart() {} - // </if> } /** @@ -99,18 +88,6 @@ getTriggeredResetToolName() { return sendWithPromise('getTriggeredResetToolName'); } - - // <if expr="chromeos"> - /** @override */ - onPowerwashDialogShow() { - chrome.send('onPowerwashDialogShow'); - } - - /** @override */ - requestFactoryResetRestart() { - chrome.send('requestFactoryResetRestart'); - } - // </if> } addSingletonGetter(ResetBrowserProxyImpl);
diff --git a/chrome/browser/resources/signin/signin_reauth/signin_reauth_app.ts b/chrome/browser/resources/signin/signin_reauth/signin_reauth_app.ts index 0e0e46c..0904a24 100644 --- a/chrome/browser/resources/signin/signin_reauth/signin_reauth_app.ts +++ b/chrome/browser/resources/signin/signin_reauth/signin_reauth_app.ts
@@ -59,7 +59,7 @@ super.connectedCallback(); this.addWebUIListener( - 'reauth-type-received', this.onReauthTypeReceived_.bind(this)); + 'reauth-type-determined', this.onReauthTypeDetermined_.bind(this)); this.signinReauthBrowserProxy_.initialize(); } @@ -73,11 +73,7 @@ this.signinReauthBrowserProxy_.cancel(); } - /** - * @param requiresReauth Whether the user will be asked to - * reauthenticate after clicking on the confirm button. - */ - private onReauthTypeReceived_(_requiresReauth: boolean) { + private onReauthTypeDetermined_() { this.confirmButtonHidden_ = false; this.$.confirmButton.focus(); this.cancelButtonHidden_ = false;
diff --git a/chrome/browser/safe_browsing/chrome_password_protection_service.cc b/chrome/browser/safe_browsing/chrome_password_protection_service.cc index 4e90f8a7..0163c54 100644 --- a/chrome/browser/safe_browsing/chrome_password_protection_service.cc +++ b/chrome/browser/safe_browsing/chrome_password_protection_service.cc
@@ -1751,7 +1751,7 @@ return; for (const auto& credential : matching_reused_credentials) { - password_manager::PasswordStore* password_store = + password_manager::PasswordStoreInterface* password_store = GetStoreForReusedCredential(credential); // Password store can be null in tests. if (!password_store) { @@ -1770,7 +1770,7 @@ return; for (const auto& credential : matching_reused_credentials) { - password_manager::PasswordStore* password_store = + password_manager::PasswordStoreInterface* password_store = GetStoreForReusedCredential(credential); // Password store can be null in tests. if (!password_store) { @@ -1795,20 +1795,20 @@ return PasswordReuseManagerFactory::GetForProfile(profile_); } -password_manager::PasswordStore* +password_manager::PasswordStoreInterface* ChromePasswordProtectionService::GetProfilePasswordStore() const { // Always use EXPLICIT_ACCESS as the password manager checks IsIncognito - // itself when it shouldn't access the PasswordStore. - return PasswordStoreFactory::GetForProfile(profile_, - ServiceAccessType::EXPLICIT_ACCESS) + // itself when it shouldn't access the PasswordStoreInterface. + return PasswordStoreFactory::GetInterfaceForProfile( + profile_, ServiceAccessType::EXPLICIT_ACCESS) .get(); } -password_manager::PasswordStore* +password_manager::PasswordStoreInterface* ChromePasswordProtectionService::GetAccountPasswordStore() const { // Always use EXPLICIT_ACCESS as the password manager checks IsIncognito - // itself when it shouldn't access the PasswordStore. - return AccountPasswordStoreFactory::GetForProfile( + // itself when it shouldn't access the PasswordStoreInterface. + return AccountPasswordStoreFactory::GetInterfaceForProfile( profile_, ServiceAccessType::EXPLICIT_ACCESS) .get(); } @@ -1867,7 +1867,7 @@ } #endif // FULL_SAFE_BROWSING -password_manager::PasswordStore* +password_manager::PasswordStoreInterface* ChromePasswordProtectionService::GetStoreForReusedCredential( const password_manager::MatchingReusedCredential& reused_credential) { if (!profile_)
diff --git a/chrome/browser/safe_browsing/chrome_password_protection_service.h b/chrome/browser/safe_browsing/chrome_password_protection_service.h index ac8410ee..f40a6c5 100644 --- a/chrome/browser/safe_browsing/chrome_password_protection_service.h +++ b/chrome/browser/safe_browsing/chrome_password_protection_service.h
@@ -246,13 +246,13 @@ // Returns the PasswordReuseManager associated with this instance. password_manager::PasswordReuseManager* GetPasswordReuseManager() const; - // Returns the profile PasswordStore associated with this instance. - password_manager::PasswordStore* GetProfilePasswordStore() const; + // Returns the profile PasswordStoreInterface associated with this instance. + password_manager::PasswordStoreInterface* GetProfilePasswordStore() const; - // Returns the GAIA-account-scoped PasswordStore associated with this + // Returns the GAIA-account-scoped PasswordStoreInterface associated with this // instance. The account password store contains passwords stored in the // account and is accessible only when the user is signed in and non syncing. - password_manager::PasswordStore* GetAccountPasswordStore() const; + password_manager::PasswordStoreInterface* GetAccountPasswordStore() const; // Gets the type of sync account associated with current profile or // |NOT_SIGNED_IN|. @@ -560,7 +560,7 @@ // Code shared by both ctors. void Init(); - password_manager::PasswordStore* GetStoreForReusedCredential( + password_manager::PasswordStoreInterface* GetStoreForReusedCredential( const password_manager::MatchingReusedCredential& reused_credential); scoped_refptr<SafeBrowsingUIManager> ui_manager_;
diff --git a/chrome/browser/safe_browsing/chrome_password_protection_service_unittest.cc b/chrome/browser/safe_browsing/chrome_password_protection_service_unittest.cc index dcf3a2c1..22b06c5 100644 --- a/chrome/browser/safe_browsing/chrome_password_protection_service_unittest.cc +++ b/chrome/browser/safe_browsing/chrome_password_protection_service_unittest.cc
@@ -31,7 +31,7 @@ #include "components/content_settings/core/browser/host_content_settings_map.h" #include "components/password_manager/core/browser/hash_password_manager.h" #include "components/password_manager/core/browser/insecure_credentials_table.h" -#include "components/password_manager/core/browser/mock_password_store.h" +#include "components/password_manager/core/browser/mock_password_store_interface.h" #include "components/password_manager/core/browser/password_manager_metrics_util.h" #include "components/password_manager/core/browser/password_manager_test_utils.h" #include "components/password_manager/core/browser/password_reuse_detector.h" @@ -236,26 +236,28 @@ void SetUp() override { ChromeRenderViewHostTestHarness::SetUp(); - password_store_ = - base::WrapRefCounted(static_cast<password_manager::MockPasswordStore*>( + password_store_ = base::WrapRefCounted( + static_cast<password_manager::MockPasswordStoreInterface*>( PasswordStoreFactory::GetInstance() ->SetTestingFactoryAndUse( profile(), - base::BindRepeating(&password_manager::BuildPasswordStore< - content::BrowserContext, - password_manager::MockPasswordStore>)) + base::BindRepeating( + &password_manager::BuildPasswordStoreInterface< + content::BrowserContext, + password_manager::MockPasswordStoreInterface>)) .get())); if (base::FeatureList::IsEnabled( password_manager::features::kEnablePasswordsAccountStorage)) { account_password_store_ = base::WrapRefCounted( - static_cast<password_manager::MockPasswordStore*>( + static_cast<password_manager::MockPasswordStoreInterface*>( AccountPasswordStoreFactory::GetInstance() ->SetTestingFactoryAndUse( profile(), - base::BindRepeating(&password_manager::BuildPasswordStore< - content::BrowserContext, - password_manager::MockPasswordStore>)) + base::BindRepeating( + &password_manager::BuildPasswordStoreInterface< + content::BrowserContext, + password_manager::MockPasswordStoreInterface>)) .get())); } @@ -416,8 +418,9 @@ std::unique_ptr<IdentityTestEnvironmentProfileAdaptor> identity_test_env_profile_adaptor_; MockSecurityEventRecorder* security_event_recorder_; - scoped_refptr<password_manager::MockPasswordStore> password_store_; - scoped_refptr<password_manager::MockPasswordStore> account_password_store_; + scoped_refptr<password_manager::MockPasswordStoreInterface> password_store_; + scoped_refptr<password_manager::MockPasswordStoreInterface> + account_password_store_; // Owned by KeyedServiceFactory. syncer::FakeUserEventService* fake_user_event_service_; #if !defined(OS_ANDROID)
diff --git a/chrome/browser/sync/chrome_sync_client.cc b/chrome/browser/sync/chrome_sync_client.cc index 63261de..f351237c7 100644 --- a/chrome/browser/sync/chrome_sync_client.cc +++ b/chrome/browser/sync/chrome_sync_client.cc
@@ -66,7 +66,7 @@ #include "components/invalidation/impl/invalidation_switches.h" #include "components/invalidation/impl/profile_invalidation_provider.h" #include "components/metrics/demographics/user_demographics.h" -#include "components/password_manager/core/browser/password_store.h" +#include "components/password_manager/core/browser/password_store_interface.h" #include "components/prefs/pref_service.h" #include "components/reading_list/core/reading_list_model.h" #include "components/reading_list/features/reading_list_switches.h" @@ -210,9 +210,9 @@ DCHECK(!account_web_data_service_ || web_data_service_thread_ == account_web_data_service_->GetDBTaskRunner()); - profile_password_store_ = PasswordStoreFactory::GetForProfile( + profile_password_store_ = PasswordStoreFactory::GetInterfaceForProfile( profile_, ServiceAccessType::IMPLICIT_ACCESS); - account_password_store_ = AccountPasswordStoreFactory::GetForProfile( + account_password_store_ = AccountPasswordStoreFactory::GetInterfaceForProfile( profile_, ServiceAccessType::IMPLICIT_ACCESS); component_factory_ = std::make_unique<ProfileSyncComponentsFactoryImpl>(
diff --git a/chrome/browser/sync/chrome_sync_client.h b/chrome/browser/sync/chrome_sync_client.h index 9dc5f00..689b807 100644 --- a/chrome/browser/sync/chrome_sync_client.h +++ b/chrome/browser/sync/chrome_sync_client.h
@@ -23,7 +23,7 @@ } // namespace autofill namespace password_manager { -class PasswordStore; +class PasswordStoreInterface; } // namespace password_manager namespace syncer { @@ -99,8 +99,10 @@ // respective backend threads. scoped_refptr<autofill::AutofillWebDataService> profile_web_data_service_; scoped_refptr<autofill::AutofillWebDataService> account_web_data_service_; - scoped_refptr<password_manager::PasswordStore> profile_password_store_; - scoped_refptr<password_manager::PasswordStore> account_password_store_; + scoped_refptr<password_manager::PasswordStoreInterface> + profile_password_store_; + scoped_refptr<password_manager::PasswordStoreInterface> + account_password_store_; // The task runner for the |web_data_service_|, if any. scoped_refptr<base::SequencedTaskRunner> web_data_service_thread_;
diff --git a/chrome/browser/sync/test/integration/enable_disable_test.cc b/chrome/browser/sync/test/integration/enable_disable_test.cc index a07c35a..dde89a5 100644 --- a/chrome/browser/sync/test/integration/enable_disable_test.cc +++ b/chrome/browser/sync/test/integration/enable_disable_test.cc
@@ -31,7 +31,6 @@ using syncer::ModelTypeFromString; using syncer::ModelTypeSet; using syncer::ModelTypeToString; -using syncer::ProxyTypes; using syncer::SyncUserSettings; using syncer::UserSelectableType; using syncer::UserSelectableTypeSet; @@ -63,8 +62,8 @@ return multi; } -// This test enables and disables types and verifies the type is sufficiently -// affected by checking for existence of a root node. +// This test enables and disables types and verifies the type is active via +// SyncService::GetActiveDataTypes(). class EnableDisableSingleClientTest : public SyncTest { public: EnableDisableSingleClientTest() : SyncTest(SINGLE_CLIENT) {} @@ -73,33 +72,8 @@ // Don't use self-notifications as they can trigger additional sync cycles. bool TestUsesSelfNotifications() override { return false; } - bool ModelTypeExists(ModelType type) { - base::RunLoop loop; - std::unique_ptr<base::ListValue> all_nodes; - GetSyncService(0)->GetAllNodesForDebugging( - base::BindLambdaForTesting([&](std::unique_ptr<base::ListValue> nodes) { - all_nodes = std::move(nodes); - loop.Quit(); - })); - loop.Run(); - // Look for the root node corresponding to |type|. - for (const base::Value& value : all_nodes->GetList()) { - DCHECK(value.is_dict()); - const base::Value* nodes = value.FindKey("nodes"); - DCHECK(nodes); - DCHECK(nodes->is_list()); - // Ignore types that are empty, because we expect the root node. - if (nodes->GetList().empty()) { - continue; - } - const base::Value* model_type = value.FindKey("type"); - DCHECK(model_type); - DCHECK(model_type->is_string()); - if (type == ModelTypeFromString(model_type->GetString())) { - return true; - } - } - return false; + bool IsModelTypeActive(ModelType type) { + return GetSyncService(0)->GetActiveDataTypes().Has(type); } void InjectSyncedBookmark() { @@ -136,7 +110,6 @@ ModelTypeSet grouped_types = syncer::SyncUserSettingsImpl::ResolvePreferredTypesForTesting({type}); grouped_types.RetainAll(registered_data_types_); - grouped_types.RemoveAll(ProxyTypes()); return grouped_types; } @@ -158,10 +131,17 @@ // Setup sync with no enabled types. SetupTest(/*all_types_enabled=*/false); + // Certain datatypes like SESSIONS can be configured by multiple + // user-selectable types. Hence, enabling a new user-selectable type doesn't + // necessarily mean that the datatype (SESSIONS) will be newly-configured. In + // this particular test, this influences whether the engine will issue UMA + // corresponding to the configuration cycle. + syncer::ModelTypeSet previously_active_types; + for (UserSelectableType type : registered_selectable_types_) { const ModelTypeSet grouped_types = ResolveGroup(type); for (ModelType single_grouped_type : WithoutMultiTypes(grouped_types)) { - ASSERT_FALSE(ModelTypeExists(single_grouped_type)) + ASSERT_FALSE(IsModelTypeActive(single_grouped_type)) << " for " << GetUserSelectableTypeName(type); } @@ -169,10 +149,12 @@ EXPECT_TRUE(GetClient(0)->EnableSyncForType(type)); for (ModelType grouped_type : grouped_types) { - EXPECT_TRUE(ModelTypeExists(grouped_type)) + EXPECT_TRUE(IsModelTypeActive(grouped_type)) << " for " << GetUserSelectableTypeName(type); - if (syncer::CommitOnlyTypes().Has(grouped_type)) { + if (!syncer::ProtocolTypes().Has(grouped_type) || + syncer::CommitOnlyTypes().Has(grouped_type) || + previously_active_types.Has(grouped_type)) { EXPECT_EQ(0, histogram_tester.GetBucketCount( "Sync.PostedDataTypeGetUpdatesRequest", @@ -185,6 +167,8 @@ static_cast<int>(ModelTypeHistogramValue(grouped_type)))) << " for " << ModelTypeToString(grouped_type); } + + previously_active_types.Put(grouped_type); } } } @@ -196,14 +180,14 @@ for (UserSelectableType type : registered_selectable_types_) { const ModelTypeSet grouped_types = ResolveGroup(type); for (ModelType grouped_type : grouped_types) { - ASSERT_TRUE(ModelTypeExists(grouped_type)) + ASSERT_TRUE(IsModelTypeActive(grouped_type)) << " for " << GetUserSelectableTypeName(type); } EXPECT_TRUE(GetClient(0)->DisableSyncForType(type)); for (ModelType single_grouped_type : WithoutMultiTypes(grouped_types)) { - EXPECT_FALSE(ModelTypeExists(single_grouped_type)) + EXPECT_FALSE(IsModelTypeActive(single_grouped_type)) << " for " << GetUserSelectableTypeName(type); } } @@ -211,7 +195,7 @@ // Lastly make sure that all the multi grouped times are all gone, since we // did not check these after disabling inside the above loop. for (ModelType multi_grouped_type : multi_grouped_types_) { - EXPECT_FALSE(ModelTypeExists(multi_grouped_type)) + EXPECT_FALSE(IsModelTypeActive(multi_grouped_type)) << " for " << ModelTypeToString(multi_grouped_type); } } @@ -225,7 +209,7 @@ const ModelTypeSet grouped_types = ResolveGroup(type); const ModelTypeSet single_grouped_types = WithoutMultiTypes(grouped_types); for (ModelType single_grouped_type : single_grouped_types) { - ASSERT_FALSE(ModelTypeExists(single_grouped_type)) + ASSERT_FALSE(IsModelTypeActive(single_grouped_type)) << " for " << GetUserSelectableTypeName(type); } @@ -235,7 +219,7 @@ EXPECT_TRUE(GetClient(0)->DisableSyncForType(type)); for (ModelType single_grouped_type : single_grouped_types) { - EXPECT_FALSE(ModelTypeExists(single_grouped_type)) + EXPECT_FALSE(IsModelTypeActive(single_grouped_type)) << " for " << GetUserSelectableTypeName(type); } } @@ -243,7 +227,7 @@ // Lastly make sure that all the multi grouped times are all gone, since we // did not check these after disabling inside the above loop. for (ModelType multi_grouped_type : multi_grouped_types_) { - EXPECT_FALSE(ModelTypeExists(multi_grouped_type)) + EXPECT_FALSE(IsModelTypeActive(multi_grouped_type)) << " for " << ModelTypeToString(multi_grouped_type); } } @@ -256,7 +240,7 @@ for (UserSelectableType type : registered_selectable_types_) { const ModelTypeSet grouped_types = ResolveGroup(type); for (ModelType grouped_type : grouped_types) { - ASSERT_TRUE(ModelTypeExists(grouped_type)) + ASSERT_TRUE(IsModelTypeActive(grouped_type)) << " for " << GetUserSelectableTypeName(type); } @@ -266,7 +250,7 @@ EXPECT_TRUE(GetClient(0)->EnableSyncForType(type)); for (ModelType grouped_type : grouped_types) { - EXPECT_TRUE(ModelTypeExists(grouped_type)) + EXPECT_TRUE(IsModelTypeActive(grouped_type)) << " for " << GetUserSelectableTypeName(type); } } @@ -281,7 +265,7 @@ const ModelTypeSet single_grouped_types = WithoutMultiTypes(ResolveGroup(type)); for (ModelType single_grouped_type : single_grouped_types) { - ASSERT_FALSE(ModelTypeExists(single_grouped_type)) + ASSERT_FALSE(IsModelTypeActive(single_grouped_type)) << " for " << GetUserSelectableTypeName(type); } @@ -292,7 +276,7 @@ EXPECT_TRUE(GetClient(0)->EnableSyncForType(type)); for (ModelType single_grouped_type : single_grouped_types) { - EXPECT_TRUE(ModelTypeExists(single_grouped_type)) + EXPECT_TRUE(IsModelTypeActive(single_grouped_type)) << " for " << GetUserSelectableTypeName(type); } } @@ -309,7 +293,7 @@ for (UserSelectableType type : UserSelectableTypeSet::All()) { for (ModelType grouped_type : ResolveGroup(type)) { - EXPECT_FALSE(ModelTypeExists(grouped_type)) + EXPECT_FALSE(IsModelTypeActive(grouped_type)) << " for " << GetUserSelectableTypeName(type); } } @@ -326,7 +310,7 @@ for (UserSelectableType type : UserSelectableTypeSet::All()) { for (ModelType model_type : ResolveGroup(type)) { - EXPECT_TRUE(ModelTypeExists(model_type)) + EXPECT_TRUE(IsModelTypeActive(model_type)) << " for " << ModelTypeToString(model_type); } } @@ -344,7 +328,7 @@ for (UserSelectableType type : UserSelectableTypeSet::All()) { for (ModelType model_type : ResolveGroup(type)) { - EXPECT_TRUE(ModelTypeExists(model_type)) + EXPECT_TRUE(IsModelTypeActive(model_type)) << " for " << ModelTypeToString(model_type); } }
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 9e5911d..ec568823 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
@@ -807,9 +807,17 @@ EXPECT_TRUE(keys_cleared_checker.Wait()); } +// Failing on Mac 10.11 (See http://crbug.com/1235658) +#if defined(OS_MAC) +#define MAYBE_ShouldClearEncryptionKeysFromTheWebWhenSigninCookiesCleared \ + DISABLED_ShouldClearEncryptionKeysFromTheWebWhenSigninCookiesCleared +#else +#define MAYBE_ShouldClearEncryptionKeysFromTheWebWhenSigninCookiesCleared \ + ShouldClearEncryptionKeysFromTheWebWhenSigninCookiesCleared +#endif IN_PROC_BROWSER_TEST_F( SingleClientNigoriWithWebApiTest, - ShouldClearEncryptionKeysFromTheWebWhenSigninCookiesCleared) { + MAYBE_ShouldClearEncryptionKeysFromTheWebWhenSigninCookiesCleared) { const std::vector<uint8_t> kTestEncryptionKey = {1, 2, 3, 4}; // Mimic the account being already using a trusted vault passphrase.
diff --git a/chrome/browser/sync/test/integration/two_client_web_apps_integration_sync_test.cc b/chrome/browser/sync/test/integration/two_client_web_apps_integration_sync_test.cc index 9775866..bc43740c 100644 --- a/chrome/browser/sync/test/integration/two_client_web_apps_integration_sync_test.cc +++ b/chrome/browser/sync/test/integration/two_client_web_apps_integration_sync_test.cc
@@ -18,28 +18,6 @@ namespace web_app { -namespace { - -const char kTestCaseFileName[] = - "web_app_integration_browsertest_sync_cases.csv"; - -// Returns the path of the requested file in the test data directory. -base::FilePath GetTestFileDir() { - base::FilePath file_path; - base::PathService::Get(base::DIR_SOURCE_ROOT, &file_path); - file_path = file_path.Append(FILE_PATH_LITERAL("chrome")); - file_path = file_path.Append(FILE_PATH_LITERAL("test")); - file_path = file_path.Append(FILE_PATH_LITERAL("data")); - return file_path.Append(FILE_PATH_LITERAL("web_apps")); -} - -std::vector<std::string> BuildAllPlatformTestCaseSet() { - return WebAppIntegrationBrowserTestBase::BuildAllPlatformTestCaseSet( - GetTestFileDir(), kTestCaseFileName); -} - -} // anonymous namespace - class TwoClientWebAppsIntegrationSyncTest : public SyncTest, public WebAppIntegrationBrowserTestBase::TestDelegate, @@ -71,15 +49,13 @@ bool IsSyncTest() override { return true; } - bool UserSigninInternal() override { return SyncTest::SetupSync(); } - - void TurnSyncOff() override { + void SyncTurnOff() override { for (auto* client : GetSyncClients()) { client->StopSyncServiceAndClearData(); } } - void TurnSyncOn() override { + void SyncTurnOn() override { for (auto* client : GetSyncClients()) { ASSERT_TRUE(client->StartSyncService()); } @@ -103,12 +79,14 @@ helper_.SetUpOnMainThread(); } + void TearDownOnMainThread() override { helper_.TearDownOnMainThread(); } + void SetUpCommandLine(base::CommandLine* command_line) override { SyncTest::SetUpCommandLine(command_line); ASSERT_TRUE(embedded_test_server()->Start()); command_line->AppendSwitchASCII( network::switches::kUnsafelyTreatInsecureOriginAsSecure, - helper_.GetInstallableAppURL("site_a").GetOrigin().spec()); + helper_.GetInstallableAppURL("SiteA").GetOrigin().spec()); command_line->AppendSwitch("disable-fake-server-failure-output"); } @@ -133,21 +111,6 @@ // documented in //chrome/browser/ui/views/web_apps/README.md. For information // about diagnosing, debugging and/or disabling tests, please look to the // README file. -IN_PROC_BROWSER_TEST_P(TwoClientWebAppsIntegrationSyncTest, Default) { - helper_.ParseParams(GetParam()); - // Since this test framework differs from traditional browser tests, print - // some useful information for sheriffs and developers to help identify, - // diagnose, and disable failing tests. - LOG(INFO) << helper_.BuildLogForTest(helper_.testing_actions(), IsSyncTest()); - - for (const auto& action : helper_.testing_actions()) { - helper_.ExecuteAction(action); - } -} - -INSTANTIATE_TEST_SUITE_P(All, - TwoClientWebAppsIntegrationSyncTest, - testing::ValuesIn(BuildAllPlatformTestCaseSet())); namespace { // TODO(jarrydg@chromium.org): Remove the macro disabling the following tests @@ -159,56 +122,125 @@ // Test contents are generated by script. Please do not modify! // See `chrome/test/webapps/README.md` for more info. // Sheriffs: Disabling this test is supported. - InstallOmniboxIcon("SiteA"); - CheckWindowCreated(); - SwitchProfileClients("UserAClient2"); - CheckAppInListNotLocallyInstalled("SiteA"); - NavigateBrowser("SiteA"); - CheckInstallIconShown(); - CheckLaunchIconNotShown(); + helper_.BeforeStateChangeAction(); + helper_.InstallOmniboxIcon("SiteA"); + helper_.AfterStateChangeAction(); + + helper_.BeforeStateCheckAction(); + helper_.CheckWindowCreated(); + helper_.AfterStateCheckAction(); + + helper_.BeforeStateChangeAction(); + helper_.SwitchProfileClients(); + helper_.AfterStateChangeAction(); + + helper_.BeforeStateCheckAction(); + helper_.CheckAppInListNotLocallyInstalled("SiteA"); + helper_.AfterStateCheckAction(); + + helper_.BeforeStateChangeAction(); + helper_.NavigateBrowser("SiteA"); + helper_.AfterStateChangeAction(); + + helper_.BeforeStateCheckAction(); + helper_.CheckInstallIconShown(); + helper_.AfterStateCheckAction(); + + helper_.BeforeStateCheckAction(); + helper_.CheckLaunchIconNotShown(); + helper_.AfterStateCheckAction(); } IN_PROC_BROWSER_TEST_F( - WebAppSyncIntegrationTestBase, + TwoClientWebAppsIntegrationSyncTest, WebAppIntegration_InstOmniboxSiteA_WindowCreated_SwitchProfileClientUserAClient2_InListNotLclyInstSiteA_TurnSyncOff) { // Test contents are generated by script. Please do not modify! // See `chrome/test/webapps/README.md` for more info. // Sheriffs: Disabling this test is supported. - InstallOmniboxIcon("SiteA"); - CheckWindowCreated(); - SwitchProfileClients("UserAClient2"); - CheckAppInListNotLocallyInstalled("SiteA"); - SyncTurnOff(); + helper_.BeforeStateChangeAction(); + helper_.InstallOmniboxIcon("SiteA"); + helper_.AfterStateChangeAction(); + + helper_.BeforeStateCheckAction(); + helper_.CheckWindowCreated(); + helper_.AfterStateCheckAction(); + + helper_.BeforeStateChangeAction(); + helper_.SwitchProfileClients(); + helper_.AfterStateChangeAction(); + + helper_.BeforeStateCheckAction(); + helper_.CheckAppInListNotLocallyInstalled("SiteA"); + helper_.AfterStateCheckAction(); + + helper_.BeforeStateChangeAction(); + helper_.SyncTurnOff(); + helper_.AfterStateChangeAction(); } IN_PROC_BROWSER_TEST_F( - WebAppSyncIntegrationTestBase, + TwoClientWebAppsIntegrationSyncTest, WebAppIntegration_InstMenuOptionSiteA_WindowCreated_SwitchProfileClientUserAClient2_InListNotLclyInstSiteA_NavSiteA_InstIconShown_LaunchIconShown) { // Test contents are generated by script. Please do not modify! // See `chrome/test/webapps/README.md` for more info. // Sheriffs: Disabling this test is supported. - InstallMenuOption("SiteA"); - CheckWindowCreated(); - SwitchProfileClients("UserAClient2"); - CheckAppInListNotLocallyInstalled("SiteA"); - NavigateBrowser("SiteA"); - CheckInstallIconShown(); - CheckLaunchIconNotShown(); + helper_.BeforeStateChangeAction(); + helper_.InstallMenuOption("SiteA"); + helper_.AfterStateChangeAction(); + + helper_.BeforeStateCheckAction(); + helper_.CheckWindowCreated(); + helper_.AfterStateCheckAction(); + + helper_.BeforeStateChangeAction(); + helper_.SwitchProfileClients(); + helper_.AfterStateChangeAction(); + + helper_.BeforeStateCheckAction(); + helper_.CheckAppInListNotLocallyInstalled("SiteA"); + helper_.AfterStateCheckAction(); + + helper_.BeforeStateChangeAction(); + helper_.NavigateBrowser("SiteA"); + helper_.AfterStateChangeAction(); + + helper_.BeforeStateCheckAction(); + helper_.CheckInstallIconShown(); + helper_.AfterStateCheckAction(); + + helper_.BeforeStateCheckAction(); + helper_.CheckLaunchIconNotShown(); + helper_.AfterStateCheckAction(); } IN_PROC_BROWSER_TEST_F( - WebAppSyncIntegrationTestBase, + TwoClientWebAppsIntegrationSyncTest, WebAppIntegration_InstMenuOptionSiteA_WindowCreated_SwitchProfileClientUserAClient2_InListNotLclyInstSiteA_TurnSyncOff) { // Test contents are generated by script. Please do not modify! // See `chrome/test/webapps/README.md` for more info. // Sheriffs: Disabling this test is supported. - InstallMenuOption("SiteA"); - CheckWindowCreated(); - SwitchProfileClients("UserAClient2"); - CheckAppInListNotLocallyInstalled("SiteA"); - SyncTurnOff(); + helper_.BeforeStateChangeAction(); + helper_.InstallMenuOption("SiteA"); + helper_.AfterStateChangeAction(); + + helper_.BeforeStateCheckAction(); + helper_.CheckWindowCreated(); + helper_.AfterStateCheckAction(); + + helper_.BeforeStateChangeAction(); + helper_.SwitchProfileClients(); + helper_.AfterStateChangeAction(); + + helper_.BeforeStateCheckAction(); + helper_.CheckAppInListNotLocallyInstalled("SiteA"); + helper_.AfterStateCheckAction(); + + helper_.BeforeStateChangeAction(); + helper_.SyncTurnOff(); + helper_.AfterStateChangeAction(); } #endif } // namespace + } // namespace web_app
diff --git a/chrome/browser/tab/java/src/org/chromium/chrome/browser/tab/state/PriceDropMetricsLogger.java b/chrome/browser/tab/java/src/org/chromium/chrome/browser/tab/state/PriceDropMetricsLogger.java index 5d7ad9cea..2266989 100644 --- a/chrome/browser/tab/java/src/org/chromium/chrome/browser/tab/state/PriceDropMetricsLogger.java +++ b/chrome/browser/tab/java/src/org/chromium/chrome/browser/tab/state/PriceDropMetricsLogger.java
@@ -11,12 +11,33 @@ import org.chromium.base.metrics.RecordHistogram; import java.util.Locale; +import java.util.concurrent.TimeUnit; /** * Records metrics to better understand and enhance our price drops feature */ public class PriceDropMetricsLogger { + private static final long NINETY_DAYS_MS = TimeUnit.DAYS.toMillis(90); + private static final long ONE_DAY_MS = TimeUnit.DAYS.toMillis(1); + private MetricsResult mMetrics; + @VisibleForTesting + protected enum TabUsageStatus { + ABANDONED("AbandonedTab"), + STALE("StaleTab"), + ACTIVE("ActiveTab"); + + private final String mTabUsageStatus; + + TabUsageStatus(String tabUsageStatus) { + mTabUsageStatus = tabUsageStatus; + } + + @Override + public String toString() { + return mTabUsageStatus; + } + } /** * Log metrics related to our price drops feature. @@ -30,20 +51,27 @@ /** * Log metrics related to the price drops feature * @param locationIdentifier to be placed in the metric name (these metrics are recorded in - * different places in the user experience) + * different places in the user experience). + * @param timeSinceTabLastOpenedMs time since the tab was last opened in milliseconds. */ - public void logPriceDropMetrics(String locationIdentifier) { + public void logPriceDropMetrics(String locationIdentifier, long timeSinceTabLastOpenedMs) { + TabUsageStatus tabUsageStatus = getTabUsageStatus(timeSinceTabLastOpenedMs); + // Tabs greater than 90 days old are not included in price drops, so the following shouldn't + // happen but is included as a safeguard. + if (tabUsageStatus == TabUsageStatus.ABANDONED) { + return; + } RecordHistogram.recordBooleanHistogram( - String.format(Locale.US, "Commerce.PriceDrops.%s.IsProductDetailPage", - locationIdentifier), + String.format(Locale.US, "Commerce.PriceDrops.%s%s.IsProductDetailPage", + tabUsageStatus, locationIdentifier), mMetrics.isProductDetailPage); RecordHistogram.recordBooleanHistogram( - String.format( - Locale.US, "Commerce.PriceDrops.%s.ContainsPrice", locationIdentifier), + String.format(Locale.US, "Commerce.PriceDrops.%s%s.ContainsPrice", tabUsageStatus, + locationIdentifier), mMetrics.containsPrice); RecordHistogram.recordBooleanHistogram( - String.format( - Locale.US, "Commerce.PriceDrops.%s.ContainsPriceDrop", locationIdentifier), + String.format(Locale.US, "Commerce.PriceDrops.%s%s.ContainsPriceDrop", + tabUsageStatus, locationIdentifier), mMetrics.containsPriceDrop); } @@ -60,6 +88,14 @@ } @VisibleForTesting + protected static TabUsageStatus getTabUsageStatus(long timeSinceTabLastOpenedMs) { + if (timeSinceTabLastOpenedMs >= NINETY_DAYS_MS) { + return TabUsageStatus.ABANDONED; + } + return timeSinceTabLastOpenedMs < ONE_DAY_MS ? TabUsageStatus.ACTIVE : TabUsageStatus.STALE; + } + + @VisibleForTesting protected static class MetricsResult { public final boolean isProductDetailPage; public final boolean containsPrice;
diff --git a/chrome/browser/tab/java/src/org/chromium/chrome/browser/tab/state/ShoppingPersistedTabData.java b/chrome/browser/tab/java/src/org/chromium/chrome/browser/tab/state/ShoppingPersistedTabData.java index e4c4d001..49dd5de 100644 --- a/chrome/browser/tab/java/src/org/chromium/chrome/browser/tab/state/ShoppingPersistedTabData.java +++ b/chrome/browser/tab/java/src/org/chromium/chrome/browser/tab/state/ShoppingPersistedTabData.java
@@ -238,7 +238,8 @@ setLastUpdatedMs(System.currentTimeMillis()); mPriceDropMetricsLogger = new PriceDropMetricsLogger(this); mPriceDropMetricsLogger.logPriceDropMetrics( - METRICS_IDENTIFIER_PREFIX); + METRICS_IDENTIFIER_PREFIX, + getTimeSinceTabLastOpenedMs(tab)); } catch (InvalidProtocolBufferException e) { Log.i(TAG, String.format(Locale.US, @@ -262,7 +263,8 @@ */ public void logPriceDropMetrics(String locationIdentifier) { if (mPriceDropMetricsLogger != null) { - mPriceDropMetricsLogger.logPriceDropMetrics(locationIdentifier); + mPriceDropMetricsLogger.logPriceDropMetrics( + locationIdentifier, getTimeSinceTabLastOpenedMs(mTab)); } }
diff --git a/chrome/browser/touch_to_fill/DEPS b/chrome/browser/touch_to_fill/DEPS index 557b697..7f6dcd7 100644 --- a/chrome/browser/touch_to_fill/DEPS +++ b/chrome/browser/touch_to_fill/DEPS
@@ -3,4 +3,6 @@ "+chrome/browser/ui/android/favicon/java", "+components/browser_ui/bottomsheet/android", "+components/favicon/android", + "+components/device_reauth/biometric_authenticator.h", + "+components/device_reauth/mock_biometric_authenticator.h", ]
diff --git a/chrome/browser/touch_to_fill/touch_to_fill_controller.cc b/chrome/browser/touch_to_fill/touch_to_fill_controller.cc index e466ed0..e30c5c2 100644 --- a/chrome/browser/touch_to_fill/touch_to_fill_controller.cc +++ b/chrome/browser/touch_to_fill/touch_to_fill_controller.cc
@@ -11,12 +11,12 @@ #include "base/metrics/histogram_functions.h" #include "base/ranges/algorithm.h" #include "base/types/pass_key.h" -#include "chrome/browser/password_manager/chrome_biometric_authenticator.h" +#include "chrome/browser/device_reauth/chrome_biometric_authenticator.h" #include "chrome/browser/password_manager/chrome_password_manager_client.h" #include "chrome/browser/touch_to_fill/touch_to_fill_view.h" #include "chrome/browser/touch_to_fill/touch_to_fill_view_factory.h" +#include "components/device_reauth/biometric_authenticator.h" #include "components/password_manager/core/browser/android_affiliation/affiliation_utils.h" -#include "components/password_manager/core/browser/biometric_authenticator.h" #include "components/password_manager/core/browser/origin_credential_store.h" #include "components/password_manager/core/browser/password_manager_driver.h" #include "components/password_manager/core/browser/password_manager_metrics_util.h" @@ -34,7 +34,7 @@ using ShowVirtualKeyboard = password_manager::PasswordManagerDriver::ShowVirtualKeyboard; -using password_manager::BiometricsAvailability; +using device_reauth::BiometricsAvailability; using password_manager::PasswordManagerDriver; using password_manager::UiCredential; @@ -57,12 +57,12 @@ TouchToFillController::TouchToFillController( base::PassKey<TouchToFillControllerTest>, - scoped_refptr<password_manager::BiometricAuthenticator> authenticator) + scoped_refptr<device_reauth::BiometricAuthenticator> authenticator) : authenticator_(std::move(authenticator)) {} TouchToFillController::TouchToFillController( ChromePasswordManagerClient* password_client, - scoped_refptr<password_manager::BiometricAuthenticator> authenticator) + scoped_refptr<device_reauth::BiometricAuthenticator> authenticator) : password_client_(password_client), authenticator_(std::move(authenticator)), source_id_(ukm::GetSourceIdForWebContentsDocument( @@ -71,8 +71,7 @@ TouchToFillController::~TouchToFillController() { if (authenticator_) { // This is a noop if no auth triggered by Touch To Fill is in progress. - authenticator_->Cancel( - password_manager::BiometricAuthRequester::kTouchToFill); + authenticator_->Cancel(device_reauth::BiometricAuthRequester::kTouchToFill); } } @@ -120,7 +119,7 @@ // the callback being reset by the authenticator. Therefore, it is safe // to use base::Unretained. authenticator_->Authenticate( - password_manager::BiometricAuthRequester::kTouchToFill, + device_reauth::BiometricAuthRequester::kTouchToFill, base::BindOnce(&TouchToFillController::OnReauthCompleted, base::Unretained(this), credential)); }
diff --git a/chrome/browser/touch_to_fill/touch_to_fill_controller.h b/chrome/browser/touch_to_fill/touch_to_fill_controller.h index 723988a2..a9bd8ac 100644 --- a/chrome/browser/touch_to_fill/touch_to_fill_controller.h +++ b/chrome/browser/touch_to_fill/touch_to_fill_controller.h
@@ -15,7 +15,7 @@ #include "base/types/pass_key.h" #include "chrome/browser/touch_to_fill/touch_to_fill_view.h" #include "chrome/browser/touch_to_fill/touch_to_fill_view_factory.h" -#include "components/password_manager/core/browser/biometric_authenticator.h" +#include "components/device_reauth/biometric_authenticator.h" #include "services/metrics/public/cpp/ukm_source_id.h" #include "ui/gfx/native_widget_types.h" @@ -45,10 +45,10 @@ // No-op constructor for tests. TouchToFillController( base::PassKey<class TouchToFillControllerTest>, - scoped_refptr<password_manager::BiometricAuthenticator> authenticator); + scoped_refptr<device_reauth::BiometricAuthenticator> authenticator); TouchToFillController( ChromePasswordManagerClient* password_client, - scoped_refptr<password_manager::BiometricAuthenticator> authenticator); + scoped_refptr<device_reauth::BiometricAuthenticator> authenticator); TouchToFillController(const TouchToFillController&) = delete; TouchToFillController& operator=(const TouchToFillController&) = delete; ~TouchToFillController(); @@ -96,7 +96,7 @@ base::WeakPtr<password_manager::PasswordManagerDriver> driver_; // Authenticator used to trigger a biometric auth before filling. - scoped_refptr<password_manager::BiometricAuthenticator> authenticator_; + scoped_refptr<device_reauth::BiometricAuthenticator> authenticator_; ukm::SourceId source_id_ = ukm::kInvalidSourceId;
diff --git a/chrome/browser/touch_to_fill/touch_to_fill_controller_unittest.cc b/chrome/browser/touch_to_fill/touch_to_fill_controller_unittest.cc index 194b73e..23a80789 100644 --- a/chrome/browser/touch_to_fill/touch_to_fill_controller_unittest.cc +++ b/chrome/browser/touch_to_fill/touch_to_fill_controller_unittest.cc
@@ -14,8 +14,8 @@ #include "base/test/scoped_feature_list.h" #include "base/test/task_environment.h" #include "base/types/pass_key.h" -#include "components/password_manager/core/browser/biometric_authenticator.h" -#include "components/password_manager/core/browser/mock_biometric_authenticator.h" +#include "components/device_reauth/biometric_authenticator.h" +#include "components/device_reauth/mock_biometric_authenticator.h" #include "components/password_manager/core/browser/origin_credential_store.h" #include "components/password_manager/core/browser/stub_password_manager_client.h" #include "components/password_manager/core/browser/stub_password_manager_driver.h" @@ -32,7 +32,9 @@ using ShowVirtualKeyboard = password_manager::PasswordManagerDriver::ShowVirtualKeyboard; using base::test::RunOnceCallback; -using password_manager::MockBiometricAuthenticator; +using device_reauth::BiometricAuthRequester; +using device_reauth::BiometricsAvailability; +using device_reauth::MockBiometricAuthenticator; using password_manager::UiCredential; using ::testing::_; using ::testing::ElementsAreArray; @@ -184,7 +186,7 @@ EXPECT_CALL(driver(), TouchToFillClosed(ShowVirtualKeyboard(false))); EXPECT_CALL(*authenticator(), CanAuthenticate()) - .WillOnce(Return(password_manager::BiometricsAvailability::kNoHardware)); + .WillOnce(Return(BiometricsAvailability::kNoHardware)); touch_to_fill_controller().OnCredentialSelected(credentials[0]); histogram_tester().ExpectUniqueSample( @@ -213,10 +215,9 @@ EXPECT_CALL(driver(), TouchToFillClosed(ShowVirtualKeyboard(false))); EXPECT_CALL(*authenticator(), CanAuthenticate()) - .WillOnce(Return(password_manager::BiometricsAvailability::kAvailable)); - EXPECT_CALL( - *authenticator(), - Authenticate(password_manager::BiometricAuthRequester::kTouchToFill, _)) + .WillOnce(Return(BiometricsAvailability::kAvailable)); + EXPECT_CALL(*authenticator(), + Authenticate(BiometricAuthRequester::kTouchToFill, _)) .WillOnce(RunOnceCallback<1>(true)); touch_to_fill_controller().OnCredentialSelected(credentials[0]); } @@ -233,10 +234,9 @@ EXPECT_CALL(driver(), TouchToFillClosed(ShowVirtualKeyboard(true))); EXPECT_CALL(*authenticator(), CanAuthenticate()) - .WillOnce(Return(password_manager::BiometricsAvailability::kAvailable)); - EXPECT_CALL( - *authenticator(), - Authenticate(password_manager::BiometricAuthRequester::kTouchToFill, _)) + .WillOnce(Return(BiometricsAvailability::kAvailable)); + EXPECT_CALL(*authenticator(), + Authenticate(BiometricAuthRequester::kTouchToFill, _)) .WillOnce(RunOnceCallback<1>(false)); touch_to_fill_controller().OnCredentialSelected(credentials[0]); } @@ -287,7 +287,7 @@ std::u16string(u"s3cr3t"))); EXPECT_CALL(driver(), TouchToFillClosed(ShowVirtualKeyboard(false))); EXPECT_CALL(*authenticator(), CanAuthenticate()) - .WillOnce(Return(password_manager::BiometricsAvailability::kNoHardware)); + .WillOnce(Return(BiometricsAvailability::kNoHardware)); touch_to_fill_controller().OnCredentialSelected(credentials[1]); histogram_tester().ExpectUniqueSample( "PasswordManager.TouchToFill.NumCredentialsShown", 2, 1); @@ -361,12 +361,10 @@ touch_to_fill_controller().Show(credentials, driver().AsWeakPtr()); EXPECT_CALL(*authenticator(), CanAuthenticate) - .WillOnce(Return(password_manager::BiometricsAvailability::kAvailable)); - EXPECT_CALL( - *authenticator(), - Authenticate(password_manager::BiometricAuthRequester::kTouchToFill, _)); + .WillOnce(Return(BiometricsAvailability::kAvailable)); + EXPECT_CALL(*authenticator(), + Authenticate(BiometricAuthRequester::kTouchToFill, _)); touch_to_fill_controller().OnCredentialSelected(credentials[0]); - EXPECT_CALL(*authenticator(), - Cancel(password_manager::BiometricAuthRequester::kTouchToFill)); + EXPECT_CALL(*authenticator(), Cancel(BiometricAuthRequester::kTouchToFill)); }
diff --git a/chrome/browser/ui/BUILD.gn b/chrome/browser/ui/BUILD.gn index f8a8a41..f975bd3c 100644 --- a/chrome/browser/ui/BUILD.gn +++ b/chrome/browser/ui/BUILD.gn
@@ -388,7 +388,6 @@ "//chrome/browser/profiles", "//chrome/browser/profiles:profile", "//chrome/browser/profiling_host", - "//chrome/browser/resources/download_internals:resources", "//chrome/browser/resources/federated_learning:resources", "//chrome/browser/resources/internals:resources", "//chrome/browser/resources/invalidations:resources", @@ -447,6 +446,7 @@ "//components/domain_reliability", "//components/download/content/factory", "//components/download/content/public", + "//components/download/resources/download_internals:resources", "//components/embedder_support", "//components/embedder_support:browser_util", "//components/encrypted_messages:encrypted_message_proto", @@ -5182,6 +5182,7 @@ deps += [ "//chrome/test:test_support_ui", "//components/media_message_center:media_message_center", + "//components/media_router/browser:browser", "//components/signin/core/browser", "//components/signin/public/identity_manager", "//components/ukm:test_support",
diff --git a/chrome/browser/ui/android/appmenu/internal/java/res/layout/title_button_menu_item.xml b/chrome/browser/ui/android/appmenu/internal/java/res/layout/title_button_menu_item.xml index 5c6f6f9..d944ad8 100644 --- a/chrome/browser/ui/android/appmenu/internal/java/res/layout/title_button_menu_item.xml +++ b/chrome/browser/ui/android/appmenu/internal/java/res/layout/title_button_menu_item.xml
@@ -27,7 +27,8 @@ android:layout_height="match_parent" android:layout_weight="1" android:paddingStart="16dp" - android:background="@color/menu_item_bg_color" /> + android:background="@color/menu_item_bg_color" + android:foreground="?attr/listChoiceBackgroundIndicator"/> <!-- Checkbox. Paddings account for built-in padding from the Android resource. --> <org.chromium.chrome.browser.ui.appmenu.AppMenuItemIcon @@ -35,6 +36,7 @@ android:layout_width="56dp" android:layout_height="match_parent" android:background="@color/menu_item_bg_color" + android:foreground="?attr/listChoiceBackgroundIndicator" android:paddingStart="12dp" android:paddingEnd="12dp" android:paddingTop="8dp" @@ -51,6 +53,7 @@ android:layout_width="56dp" android:layout_height="match_parent" android:background="@color/menu_item_bg_color" + android:foreground="?attr/listChoiceBackgroundIndicator" android:paddingStart="16dp" android:paddingEnd="16dp" android:paddingTop="12dp"
diff --git a/chrome/browser/ui/ash/chrome_shell_delegate.cc b/chrome/browser/ui/ash/chrome_shell_delegate.cc index 4e3e746..d96d7b6 100644 --- a/chrome/browser/ui/ash/chrome_shell_delegate.cc +++ b/chrome/browser/ui/ash/chrome_shell_delegate.cc
@@ -14,6 +14,8 @@ #include "base/check.h" #include "base/command_line.h" #include "cc/input/touch_action.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/file_manager/path_util.h" #include "chrome/browser/ash/profiles/profile_helper.h" #include "chrome/browser/browser_process.h" @@ -402,6 +404,21 @@ } } + auto& app_registry_cache = + apps::AppServiceProxyFactory::GetForProfile(user_profile) + ->AppRegistryCache(); + const apps::mojom::AppType app_type = app_registry_cache.GetAppType(app_id); + if (app_id != extension_misc::kChromeAppId && + (app_type == apps::mojom::AppType::kExtension || + app_type == apps::mojom::AppType::kWeb)) { + // If these values are not present, we will not be able to restore the + // application. See http://crbug.com/1232520 for more information. + if (!app_launch_info->container.has_value() || + !app_launch_info->disposition.has_value()) { + return nullptr; + } + } + return app_launch_info; }
diff --git a/chrome/browser/ui/ash/holding_space/holding_space_keyed_service_unittest.cc b/chrome/browser/ui/ash/holding_space/holding_space_keyed_service_unittest.cc index d8fcb0c..32592b6 100644 --- a/chrome/browser/ui/ash/holding_space/holding_space_keyed_service_unittest.cc +++ b/chrome/browser/ui/ash/holding_space/holding_space_keyed_service_unittest.cc
@@ -1792,36 +1792,33 @@ constexpr gfx::Size kImageSize(20, 20); constexpr bool kDarkBackground = false; - // Initially the holding space image should be an empty bitmap until the - // thumbnail loader finishes processing the request. Note that requesting the - // image is what spawns the initial request. - gfx::ImageSkia actual_image = - model->items()[0]->image().GetImageSkia(kImageSize, kDarkBackground); - gfx::ImageSkia expected_image = image_util::CreateEmptyImage(kImageSize); - EXPECT_TRUE(BitmapsAreEqual(actual_image, expected_image)); - - ThumbnailLoader* thumbnail_loader = - HoldingSpaceKeyedServiceFactory::GetInstance() - ->GetService(GetProfile()) - ->thumbnail_loader_for_testing(); - { - // Wait for the `thumbnail_loader` to finish processing the request. + // Once the `ThumbnailLoader` has finished processing the initial request, + // the image should represent the file type of the *target* file for the + // underlying download, not its current backing file. base::RunLoop run_loop; - thumbnail_loader->SetRequestFinishedCallbackForTesting( - run_loop.QuitClosure()); - run_loop.Run(); - thumbnail_loader->SetRequestFinishedCallbackForTesting( - base::NullCallback()); - } + auto image_skia_changed_subscription = + model->items()[0]->image().AddImageSkiaChangedCallback( + base::BindLambdaForTesting([&]() { + gfx::ImageSkia actual_image = + model->items()[0]->image().GetImageSkia(kImageSize, + kDarkBackground); + gfx::ImageSkia expected_image = + GetIconForPath(current_target_path, kDarkBackground); + EXPECT_TRUE(BitmapsAreEqual(actual_image, expected_image)); + run_loop.Quit(); + })); - // Once the `thumbnail_loader` has finished processing the request, the image - // should represent the file type of the *target* file for the underlying - // download, not its current backing file. - actual_image = - model->items()[0]->image().GetImageSkia(kImageSize, kDarkBackground); - expected_image = GetIconForPath(current_target_path, kDarkBackground); - EXPECT_TRUE(BitmapsAreEqual(actual_image, expected_image)); + // But initially the holding space image should be an empty bitmap. Note + // that requesting the image is what spawns the initial request. + gfx::ImageSkia actual_image = + model->items()[0]->image().GetImageSkia(kImageSize, kDarkBackground); + gfx::ImageSkia expected_image = image_util::CreateEmptyImage(kImageSize); + EXPECT_TRUE(BitmapsAreEqual(actual_image, expected_image)); + + // Wait for the `ThumbnailLoader` to finish processing the initial request. + run_loop.Run(); + } // Update the total bytes for the download. current_total_bytes = -1; @@ -1884,31 +1881,33 @@ EXPECT_EQ(model->items()[0]->file_path(), current_path); EXPECT_EQ(model->items()[0]->progress().GetValue(), 0.5f); - // Initially the holding space image should be an empty bitmap until the - // `thumbnail_loader` finishes processing the request. Note that requesting - // the image is what spawns the initial request. - actual_image = - model->items()[0]->image().GetImageSkia(kImageSize, kDarkBackground); - expected_image = image_util::CreateEmptyImage(kImageSize); - EXPECT_TRUE(BitmapsAreEqual(actual_image, expected_image)); - { - // Wait for the `thumbnail_loader` to finish processing the request. + // Once the `ThumbnailLoader` has finished processing the request, the image + // should represent the file type of the *target* file for the underlying + // download, not its current backing file. base::RunLoop run_loop; - thumbnail_loader->SetRequestFinishedCallbackForTesting( - run_loop.QuitClosure()); - run_loop.Run(); - thumbnail_loader->SetRequestFinishedCallbackForTesting( - base::NullCallback()); - } + auto image_skia_changed_subscription = + model->items()[0]->image().AddImageSkiaChangedCallback( + base::BindLambdaForTesting([&]() { + gfx::ImageSkia actual_image = + model->items()[0]->image().GetImageSkia(kImageSize, + kDarkBackground); + gfx::ImageSkia expected_image = + GetIconForPath(current_target_path, kDarkBackground); + EXPECT_TRUE(BitmapsAreEqual(actual_image, expected_image)); + run_loop.Quit(); + })); - // Once the `thumbnail_loader` has finished processing the request, the image - // should represent the file type of the *target* file for the underlying - // download, not its current backing file. - actual_image = - model->items()[0]->image().GetImageSkia(kImageSize, kDarkBackground); - expected_image = GetIconForPath(current_target_path, kDarkBackground); - EXPECT_TRUE(BitmapsAreEqual(actual_image, expected_image)); + // But initially the holding space image should be an empty bitmap. Note + // that requesting the image is what spawns the initial request. + gfx::ImageSkia actual_image = + model->items()[0]->image().GetImageSkia(kImageSize, kDarkBackground); + gfx::ImageSkia expected_image = image_util::CreateEmptyImage(kImageSize); + EXPECT_TRUE(BitmapsAreEqual(actual_image, expected_image)); + + // Wait for the `ThumbnailLoader` to finish processing the initial request. + run_loop.Run(); + } // Complete the download. current_state = download::DownloadItem::COMPLETE; @@ -1925,9 +1924,10 @@ // The image should still be representative of the file type of the *target* // file for the underlying download which by this point is actually the same // file path as the backing file path. - actual_image = + gfx::ImageSkia actual_image = model->items()[0]->image().GetImageSkia(kImageSize, kDarkBackground); - expected_image = GetIconForPath(current_target_path, kDarkBackground); + gfx::ImageSkia expected_image = + GetIconForPath(current_target_path, kDarkBackground); EXPECT_TRUE(BitmapsAreEqual(actual_image, expected_image)); }
diff --git a/chrome/browser/ui/ash/media_notification_provider_impl.cc b/chrome/browser/ui/ash/media_notification_provider_impl.cc index 5278250..88f53574 100644 --- a/chrome/browser/ui/ash/media_notification_provider_impl.cc +++ b/chrome/browser/ui/ash/media_notification_provider_impl.cc
@@ -87,7 +87,7 @@ return nullptr; auto container = std::make_unique<MediaNotificationContainerImplView>( - id, item, service_, GlobalMediaControlsEntryPoint::kSystemTray, + id, item, service_, GlobalMediaControlsEntryPoint::kSystemTray, profile_, color_theme_); MediaNotificationContainerImplView* container_ptr = container.get(); container_ptr->AddObserver(this); @@ -136,13 +136,12 @@ void MediaNotificationProviderImpl::OnUserProfileLoaded( const AccountId& account_id) { - Profile* profile = - chromeos::ProfileHelper::Get()->GetProfileByAccountId(account_id); + profile_ = chromeos::ProfileHelper::Get()->GetProfileByAccountId(account_id); user_manager::User* user = - chromeos::ProfileHelper::Get()->GetUserByProfile(profile); + chromeos::ProfileHelper::Get()->GetUserByProfile(profile_); if (user_manager::UserManager::Get()->GetPrimaryUser() == user) { - service_ = MediaNotificationServiceFactory::GetForProfile(profile); + service_ = MediaNotificationServiceFactory::GetForProfile(profile_); service_->AddObserver(this); } }
diff --git a/chrome/browser/ui/ash/media_notification_provider_impl.h b/chrome/browser/ui/ash/media_notification_provider_impl.h index faa01002..7ddf013 100644 --- a/chrome/browser/ui/ash/media_notification_provider_impl.h +++ b/chrome/browser/ui/ash/media_notification_provider_impl.h
@@ -16,6 +16,7 @@ class MediaNotificationService; class MediaNotificationListView; class MediaNotificationContainerImplView; +class Profile; class MediaNotificationProviderImpl : public ash::MediaNotificationProvider, @@ -76,6 +77,8 @@ MediaNotificationListView* active_session_view_ = nullptr; + Profile* profile_ = nullptr; + MediaNotificationService* service_ = nullptr; std::map<const std::string, MediaNotificationContainerImplView*>
diff --git a/chrome/browser/ui/ash/thumbnail_loader.cc b/chrome/browser/ui/ash/thumbnail_loader.cc index 43ca6a2..6c73bd5 100644 --- a/chrome/browser/ui/ash/thumbnail_loader.cc +++ b/chrome/browser/ui/ash/thumbnail_loader.cc
@@ -212,11 +212,6 @@ weak_factory_.GetWeakPtr(), request, std::move(callback))); } -void ThumbnailLoader::SetRequestFinishedCallbackForTesting( - base::RepeatingClosure callback) { - request_finished_callback_for_testing_ = std::move(callback); -} - void ThumbnailLoader::LoadForFileWithMetadata( const ThumbnailRequest& request, ImageCallback callback, @@ -344,9 +339,6 @@ requests_.erase(request_it); std::move(callback).Run(cropped_bitmap.isNull() ? bitmap : &cropped_bitmap, error); - - if (!request_finished_callback_for_testing_.is_null()) - request_finished_callback_for_testing_.Run(); } } // namespace ash
diff --git a/chrome/browser/ui/ash/thumbnail_loader.h b/chrome/browser/ui/ash/thumbnail_loader.h index 8420085..30e29b4 100644 --- a/chrome/browser/ui/ash/thumbnail_loader.h +++ b/chrome/browser/ui/ash/thumbnail_loader.h
@@ -56,10 +56,6 @@ // bitmap. On error, the bitmap will be null. void Load(const ThumbnailRequest& request, ImageCallback callback); - // Sets the `request_finished_callback_for_testing_` which is run whenever - // any request has finished, both in the case of success and failure. - void SetRequestFinishedCallbackForTesting(base::RepeatingClosure callback); - private: class ThumbnailDecoder; @@ -98,10 +94,6 @@ std::map<base::UnguessableToken, std::unique_ptr<ThumbnailDecoder>> thumbnail_decoders_; - // An optional callback to be run whenever any request has finished, both in - // the case of success and failure. - base::RepeatingClosure request_finished_callback_for_testing_; - base::WeakPtrFactory<ThumbnailLoader> weak_factory_{this}; };
diff --git a/chrome/browser/ui/cocoa/window_size_autosaver.mm b/chrome/browser/ui/cocoa/window_size_autosaver.mm index c86282bb..a0fe83e 100644 --- a/chrome/browser/ui/cocoa/window_size_autosaver.mm +++ b/chrome/browser/ui/cocoa/window_size_autosaver.mm
@@ -87,10 +87,10 @@ // Windows should never be very small. DictionaryPrefUpdate update(_prefService, _path); base::DictionaryValue* mutableWindowPrefs = update.Get(); - mutableWindowPrefs->Remove("left", NULL); - mutableWindowPrefs->Remove("right", NULL); - mutableWindowPrefs->Remove("top", NULL); - mutableWindowPrefs->Remove("bottom", NULL); + mutableWindowPrefs->RemoveKey("left"); + mutableWindowPrefs->RemoveKey("right"); + mutableWindowPrefs->RemoveKey("top"); + mutableWindowPrefs->RemoveKey("bottom"); } else { [_window setFrame:NSMakeRect(x1, y1, x2 - x1, y2 - y1) display:YES];
diff --git a/chrome/browser/ui/exclusive_access/fullscreen_controller_interactive_browsertest.cc b/chrome/browser/ui/exclusive_access/fullscreen_controller_interactive_browsertest.cc index e30e9af..ad5afa62 100644 --- a/chrome/browser/ui/exclusive_access/fullscreen_controller_interactive_browsertest.cc +++ b/chrome/browser/ui/exclusive_access/fullscreen_controller_interactive_browsertest.cc
@@ -276,10 +276,18 @@ ASSERT_TRUE(IsWindowFullscreenForTabOrPending()); } +#if (defined(OS_WIN) && !defined(NDEBUG)) +// Test is flaky on Windows 7 (dbg): https://crbug.com/1234337 +#define MAYBE_TestFullscreenFromTabWhenAlreadyInBrowserFullscreenWorks \ + DISABLED_TestFullscreenFromTabWhenAlreadyInBrowserFullscreenWorks +#else +#define MAYBE_TestFullscreenFromTabWhenAlreadyInBrowserFullscreenWorks \ + TestFullscreenFromTabWhenAlreadyInBrowserFullscreenWorks +#endif // Tests tab fullscreen exits, but browser fullscreen remains, on navigation. IN_PROC_BROWSER_TEST_F( FullscreenControllerInteractiveTest, - TestFullscreenFromTabWhenAlreadyInBrowserFullscreenWorks) { + MAYBE_TestFullscreenFromTabWhenAlreadyInBrowserFullscreenWorks) { ASSERT_TRUE(embedded_test_server()->Start()); ui_test_utils::NavigateToURL(browser(), GURL("about:blank"));
diff --git a/chrome/browser/ui/global_media_controls/media_notification_service.cc b/chrome/browser/ui/global_media_controls/media_notification_service.cc index 48107b4..dcefd4d 100644 --- a/chrome/browser/ui/global_media_controls/media_notification_service.cc +++ b/chrome/browser/ui/global_media_controls/media_notification_service.cc
@@ -32,6 +32,16 @@ #include "media/base/media_switches.h" #include "services/media_session/public/mojom/media_session.mojom.h" +namespace { +void CancelRequest( + std::unique_ptr<media_router::StartPresentationContext> context, + const std::string& message) { + context->InvokeErrorCallback(blink::mojom::PresentationError( + blink::mojom::PresentationErrorType::PRESENTATION_REQUEST_CANCELLED, + message)); +} +} // namespace + MediaNotificationService::MediaNotificationService( Profile* profile, bool show_from_all_profiles) { @@ -207,15 +217,11 @@ bool MediaNotificationService::HasActiveNotificationsForWebContents( content::WebContents* web_contents) const { - bool has_cast_session = - !media_router::WebContentsPresentationManager::Get(web_contents) - ->GetMediaRoutes() - .empty(); bool has_media_session = media_session_notification_producer_ && media_session_notification_producer_ ->HasActiveControllableSessionForWebContents(web_contents); - return has_cast_session || has_media_session; + return HasCastNotificationsForWebContents(web_contents) || has_media_session; } bool MediaNotificationService::HasFrozenNotifications() const { @@ -260,13 +266,33 @@ void MediaNotificationService::OnStartPresentationContextCreated( std::unique_ptr<media_router::StartPresentationContext> context) { - if (presentation_request_notification_producer_) { + auto* web_contents = content::WebContents::FromRenderFrameHost( + content::RenderFrameHost::FromID( + context->presentation_request().render_frame_host_id)); + if (!web_contents) { + CancelRequest(std::move(context), "The web page is closed."); + return; + } + + // If there exists a cast notification associated with |web_contents|, + // delete |context| because users should not start a new presentation at + // this time. + if (HasCastNotificationsForWebContents(web_contents)) { + CancelRequest(std::move(context), "A presentation has already started."); + } else if (media_session_notification_producer_ + ->HasActiveControllableSessionForWebContents(web_contents)) { + // If there exists a media session notification associated with + // |web_contents|, pass |context| to |media_session_notification_producer_|. + media_session_notification_producer_->OnStartPresentationContextCreated( + std::move(context)); + } else if (presentation_request_notification_producer_) { + // If there do not exist active notifications, pass |context| to + // |presentation_request_notification_producer_| to create a dummy + // notification. presentation_request_notification_producer_ ->OnStartPresentationContextCreated(std::move(context)); } else { - context->InvokeErrorCallback(blink::mojom::PresentationError( - blink::mojom::PresentationErrorType::PRESENTATION_REQUEST_CANCELLED, - "Unable to start presentation.")); + CancelRequest(std::move(context), "Unable to start presentation."); } } @@ -344,3 +370,10 @@ } return nullptr; } + +bool MediaNotificationService::HasCastNotificationsForWebContents( + content::WebContents* web_contents) const { + return !media_router::WebContentsPresentationManager::Get(web_contents) + ->GetMediaRoutes() + .empty(); +}
diff --git a/chrome/browser/ui/global_media_controls/media_notification_service.h b/chrome/browser/ui/global_media_controls/media_notification_service.h index 2d18c211..2e3fabe0 100644 --- a/chrome/browser/ui/global_media_controls/media_notification_service.h +++ b/chrome/browser/ui/global_media_controls/media_notification_service.h
@@ -111,9 +111,6 @@ const std::string& id, base::RepeatingCallback<void(bool)> callback); - void OnPresentationRequestCreated( - std::unique_ptr<media_router::StartPresentationContext> context); - void OnStartPresentationContextCreated( std::unique_ptr<media_router::StartPresentationContext> context); @@ -163,6 +160,10 @@ // PresentationRequest. bool HasOpenDialogForPresentationRequest() const; + // True if there are cast notifications associated with |web_contents|. + bool HasCastNotificationsForWebContents( + content::WebContents* web_contents) const; + MediaDialogDelegate* dialog_delegate_ = nullptr; // True if the dialog was opened by |SetDialogDelegateForWebContents()|. The
diff --git a/chrome/browser/ui/global_media_controls/media_notification_service_unittest.cc b/chrome/browser/ui/global_media_controls/media_notification_service_unittest.cc index 855b2a1..cb8a253db 100644 --- a/chrome/browser/ui/global_media_controls/media_notification_service_unittest.cc +++ b/chrome/browser/ui/global_media_controls/media_notification_service_unittest.cc
@@ -11,6 +11,7 @@ #include "base/strings/string_number_conversions.h" #include "base/strings/utf_string_conversions.h" #include "base/test/metrics/histogram_tester.h" +#include "base/test/mock_callback.h" #include "base/test/scoped_feature_list.h" #include "base/unguessable_token.h" #include "build/build_config.h" @@ -38,6 +39,7 @@ #include "testing/gtest/include/gtest/gtest.h" using media_router::MediaRoute; +using media_router::StartPresentationContext; using media_session::mojom::AudioFocusRequestState; using media_session::mojom::AudioFocusRequestStatePtr; using media_session::mojom::MediaSessionInfo; @@ -93,45 +95,6 @@ OverlayMediaNotificationsManager* manager_ = nullptr; }; -class MockWebContentsPresentationManager - : public media_router::WebContentsPresentationManager { - public: - void NotifyMediaRoutesChanged( - const std::vector<media_router::MediaRoute>& routes) { - for (auto& observer : observers_) { - observer.OnMediaRoutesChanged(routes); - } - } - - void AddObserver(media_router::WebContentsPresentationManager::Observer* - observer) override { - observers_.AddObserver(observer); - } - - void RemoveObserver(media_router::WebContentsPresentationManager::Observer* - observer) override { - observers_.RemoveObserver(observer); - } - - MOCK_CONST_METHOD0(HasDefaultPresentationRequest, bool()); - MOCK_CONST_METHOD0(GetDefaultPresentationRequest, - const content::PresentationRequest&()); - MOCK_METHOD3(OnPresentationResponse, - void(const content::PresentationRequest&, - media_router::mojom::RoutePresentationConnectionPtr, - const media_router::RouteRequestResult&)); - MOCK_METHOD0(GetMediaRoutes, std::vector<media_router::MediaRoute>()); - - base::WeakPtr<WebContentsPresentationManager> GetWeakPtr() override { - return weak_factory_.GetWeakPtr(); - } - - private: - base::ObserverList<media_router::WebContentsPresentationManager::Observer> - observers_; - base::WeakPtrFactory<MockWebContentsPresentationManager> weak_factory_{this}; -}; - } // anonymous namespace class MediaNotificationServiceTest : public ChromeRenderViewHostTestHarness { @@ -434,19 +397,29 @@ return media_route; } + content::PresentationRequest CreatePresentationRequest() { + return content::PresentationRequest(main_rfh()->GetGlobalId(), + {GURL(), GURL()}, + url::Origin::Create(GURL())); + } + + std::unique_ptr<StartPresentationContext> CreateStartPresentationContext( + content::PresentationRequest presentation_request, + StartPresentationContext::PresentationConnectionCallback success_cb = + base::DoNothing(), + StartPresentationContext::PresentationConnectionErrorCallback error_cb = + base::DoNothing()) { + return std::make_unique<StartPresentationContext>( + presentation_request, std::move(success_cb), std::move(error_cb)); + } + // Simulate a supplementalNotification for |web_contents()|. std::string SimulateSupplementalNotification() { - auto presentation_request = content::PresentationRequest( - main_rfh()->GetGlobalId(), - {GURL("http://example.com"), GURL("http://example2.com")}, - url::Origin::Create(GURL("http://google.com"))); - - auto start_presentation_context = - GetStartPresentationContext(presentation_request); + auto presentation_request = CreatePresentationRequest(); // Create a PresentationRequestNotificationItem. service()->OnStartPresentationContextCreated( - std::move(start_presentation_context)); + CreateStartPresentationContext(presentation_request)); auto notification_id = GetSupplementalNotification()->id(); EXPECT_FALSE(notification_id.empty()); auto item = @@ -472,25 +445,12 @@ ->presentation_request_notification_producer_->GetNotificationItem(); } - MOCK_METHOD3(RequestSuccess, - void(const blink::mojom::PresentationInfo&, - media_router::mojom::RoutePresentationConnectionPtr, - const MediaRoute&)); - MOCK_METHOD1(RequestError, - void(const blink::mojom::PresentationError& error)); - - private: - std::unique_ptr<media_router::StartPresentationContext> - GetStartPresentationContext( - content::PresentationRequest presentation_request) { - return std::make_unique<media_router::StartPresentationContext>( - presentation_request, - base::BindOnce(&MediaNotificationServiceCastTest::RequestSuccess, - base::Unretained(this)), - base::BindOnce(&MediaNotificationServiceCastTest::RequestError, - base::Unretained(this))); + MockWebContentsPresentationManager* GetMockPresentationManager() { + return static_cast<MockWebContentsPresentationManager*>( + presentation_manager_.get()); } + private: std::unique_ptr<MockWebContentsPresentationManager> presentation_manager_; base::test::ScopedFeatureList feature_list_; }; @@ -970,6 +930,64 @@ testing::Mock::VerifyAndClearExpectations(&observer()); } +TEST_F(MediaNotificationServiceCastTest, + OnStartPresentationContextCreated_ForPresentationRequestNotifications) { + // If there does not exist an active notification, pass the + // StartPresentationContext to PresentationRequestNotificationProducer. + service()->OnStartPresentationContextCreated( + CreateStartPresentationContext(CreatePresentationRequest())); + auto supplemental_notification = GetSupplementalNotification(); + EXPECT_TRUE(supplemental_notification); + EXPECT_FALSE(supplemental_notification->is_default_presentation_request()); +} + +TEST_F(MediaNotificationServiceCastTest, + OnStartPresentationContextCreated_ForMediaSessionNotifications) { + SimulatePlayingControllableMediaForWebContents(web_contents()); + base::MockCallback<content::PresentationConnectionErrorCallback> + mock_error_cb; + auto context = CreateStartPresentationContext( + CreatePresentationRequest(), base::DoNothing(), mock_error_cb.Get()); + auto* context_ptr = context.get(); + + // If there only exists a media session notification, pass |context| to + // MediaSessionNotificationProducer. + EXPECT_CALL(mock_error_cb, Run).Times(0); + service()->OnStartPresentationContextCreated(std::move(context)); + + // Invoke callback before |mock_error_cb| is deleted. + testing::Mock::VerifyAndClearExpectations(&mock_error_cb); + context_ptr->InvokeErrorCallback(blink::mojom::PresentationError( + blink::mojom::PresentationErrorType::PRESENTATION_REQUEST_CANCELLED, "")); +} + +TEST_F(MediaNotificationServiceCastTest, + OnStartPresentationContextCreated_ForCastNotifications) { + auto media_route = CreateMediaRoute("route_id"); + SetMediaRoutesManagedByPresentationManager({media_route}); + + // If there exists cast notifications, |context| will not be passed to any + // notification producer and its error callback should be evoked. + base::MockCallback<content::PresentationConnectionErrorCallback> + mock_error_cb; + EXPECT_CALL(mock_error_cb, Run); + service()->OnStartPresentationContextCreated(CreateStartPresentationContext( + CreatePresentationRequest(), base::DoNothing(), mock_error_cb.Get())); +} + +TEST_F(MediaNotificationServiceCastTest, + OnStartPresentationContextCreated_ForRemovedWebContents) { + // If the StartPresentationContext is from a WebContents that has been + // removed, its error callback should be evoked. + base::MockCallback<content::PresentationConnectionErrorCallback> + mock_error_cb; + auto context = CreateStartPresentationContext( + CreatePresentationRequest(), base::DoNothing(), mock_error_cb.Get()); + EXPECT_CALL(mock_error_cb, Run); + DeleteContents(); + service()->OnStartPresentationContextCreated(std::move(context)); +} + // Regression test for https://crbug.com/1015903: we could end up in a // situation where the toolbar icon was disabled indefinitely. TEST_F(MediaNotificationServiceTest, LoseGainLoseDoesNotCauseRaceCondition) {
diff --git a/chrome/browser/ui/global_media_controls/media_session_notification_producer.cc b/chrome/browser/ui/global_media_controls/media_session_notification_producer.cc index 2eac128..ff843e6 100644 --- a/chrome/browser/ui/global_media_controls/media_session_notification_producer.cc +++ b/chrome/browser/ui/global_media_controls/media_session_notification_producer.cc
@@ -15,6 +15,7 @@ #include "chrome/browser/ui/global_media_controls/media_notification_device_provider_impl.h" #include "chrome/browser/ui/global_media_controls/media_notification_service.h" #include "chrome/browser/ui/media_router/media_router_ui.h" +#include "components/media_router/browser/presentation/start_presentation_context.h" #include "components/ukm/content/source_url_recorder.h" #include "content/public/browser/audio_service.h" #include "content/public/browser/media_session.h" @@ -254,6 +255,12 @@ std::move(callback)); } +void MediaSessionNotificationProducer::OnStartPresentationContextCreated( + std::unique_ptr<media_router::StartPresentationContext> context) { + DCHECK(context); + context_ = std::move(context); +} + void MediaSessionNotificationProducer::Session:: SetPresentationManagerForTesting( base::WeakPtr<media_router::WebContentsPresentationManager> @@ -585,13 +592,16 @@ MediaSessionNotificationProducer::CreateCastDialogControllerForSession( const std::string& session_id) { auto it = sessions_.find(session_id); - if (it != sessions_.end()) { - auto ui = std::make_unique<media_router::MediaRouterUI>( - it->second.web_contents()); + if (it == sessions_.end()) + return nullptr; + auto ui = + std::make_unique<media_router::MediaRouterUI>(it->second.web_contents()); + if (context_) { + ui->InitWithStartPresentationContext(std::move(context_)); + } else { ui->InitWithDefaultMediaSource(); - return ui; } - return nullptr; + return ui; } bool MediaSessionNotificationProducer::
diff --git a/chrome/browser/ui/global_media_controls/media_session_notification_producer.h b/chrome/browser/ui/global_media_controls/media_session_notification_producer.h index cee3750..a9666b1 100644 --- a/chrome/browser/ui/global_media_controls/media_session_notification_producer.h +++ b/chrome/browser/ui/global_media_controls/media_session_notification_producer.h
@@ -25,6 +25,7 @@ namespace media_router { class CastDialogController; +class StartPresentationContext; } // namespace media_router class MediaNotificationContainerImpl; @@ -108,6 +109,9 @@ const std::string& id, base::RepeatingCallback<void(bool)> callback); + void OnStartPresentationContextCreated( + std::unique_ptr<media_router::StartPresentationContext> context); + void set_device_provider_for_testing( std::unique_ptr<MediaNotificationDeviceProvider> device_provider); @@ -288,6 +292,8 @@ std::unique_ptr<MediaNotificationDeviceProvider> device_provider_; + // Used to initialize a MediaRouterUI. + std::unique_ptr<media_router::StartPresentationContext> context_; base::WeakPtrFactory<MediaSessionNotificationProducer> weak_ptr_factory_{ this}; };
diff --git a/chrome/browser/ui/global_media_controls/presentation_request_notification_producer_unittest.cc b/chrome/browser/ui/global_media_controls/presentation_request_notification_producer_unittest.cc index d7f28b6..867f5a91 100644 --- a/chrome/browser/ui/global_media_controls/presentation_request_notification_producer_unittest.cc +++ b/chrome/browser/ui/global_media_controls/presentation_request_notification_producer_unittest.cc
@@ -28,43 +28,7 @@ using testing::NiceMock; namespace { -class MockWebContentsPresentationManager - : public media_router::WebContentsPresentationManager { - public: - bool HasDefaultPresentationRequest() const override { - return default_presentation_request_.has_value(); - } - const content::PresentationRequest& GetDefaultPresentationRequest() - const override { - return *default_presentation_request_; - } - - void SetDefaultPresentationRequest( - const content::PresentationRequest& request) { - default_presentation_request_ = request; - } - - MOCK_METHOD1( - AddObserver, - void(media_router::WebContentsPresentationManager::Observer* observer)); - MOCK_METHOD1( - RemoveObserver, - void(media_router::WebContentsPresentationManager::Observer* observer)); - MOCK_METHOD3(OnPresentationResponse, - void(const content::PresentationRequest&, - media_router::mojom::RoutePresentationConnectionPtr, - const media_router::RouteRequestResult&)); - MOCK_METHOD0(GetMediaRoutes, std::vector<media_router::MediaRoute>()); - - base::WeakPtr<WebContentsPresentationManager> GetWeakPtr() override { - return weak_factory_.GetWeakPtr(); - } - - private: - absl::optional<content::PresentationRequest> default_presentation_request_; - base::WeakPtrFactory<MockWebContentsPresentationManager> weak_factory_{this}; -}; media_router::MediaRoute CreateMediaRoute( media_router::MediaRoute::Id route_id) {
diff --git a/chrome/browser/ui/global_media_controls/test_helper.cc b/chrome/browser/ui/global_media_controls/test_helper.cc index 5511c01..4a1ae5e 100644 --- a/chrome/browser/ui/global_media_controls/test_helper.cc +++ b/chrome/browser/ui/global_media_controls/test_helper.cc
@@ -59,3 +59,44 @@ MockMediaItemsManager::MockMediaItemsManager() = default; MockMediaItemsManager::~MockMediaItemsManager() = default; + +MockWebContentsPresentationManager::MockWebContentsPresentationManager() = + default; +MockWebContentsPresentationManager::~MockWebContentsPresentationManager() = + default; + +bool MockWebContentsPresentationManager::HasDefaultPresentationRequest() const { + return default_presentation_request_.has_value(); +} + +const content::PresentationRequest& +MockWebContentsPresentationManager::GetDefaultPresentationRequest() const { + return *default_presentation_request_; +} + +void MockWebContentsPresentationManager::SetDefaultPresentationRequest( + const content::PresentationRequest& request) { + default_presentation_request_ = request; +} + +void MockWebContentsPresentationManager::NotifyMediaRoutesChanged( + const std::vector<media_router::MediaRoute>& routes) { + for (auto& observer : observers_) { + observer.OnMediaRoutesChanged(routes); + } +} + +void MockWebContentsPresentationManager::AddObserver( + media_router::WebContentsPresentationManager::Observer* observer) { + observers_.AddObserver(observer); +} + +void MockWebContentsPresentationManager::RemoveObserver( + media_router::WebContentsPresentationManager::Observer* observer) { + observers_.RemoveObserver(observer); +} + +base::WeakPtr<WebContentsPresentationManager> +MockWebContentsPresentationManager::GetWeakPtr() { + return weak_factory_.GetWeakPtr(); +}
diff --git a/chrome/browser/ui/global_media_controls/test_helper.h b/chrome/browser/ui/global_media_controls/test_helper.h index e34e4b1..a7e9ec3 100644 --- a/chrome/browser/ui/global_media_controls/test_helper.h +++ b/chrome/browser/ui/global_media_controls/test_helper.h
@@ -8,6 +8,8 @@ #include "chrome/browser/ui/global_media_controls/media_dialog_delegate.h" #include "chrome/browser/ui/global_media_controls/media_items_manager.h" #include "components/media_message_center/media_notification_item.h" +#include "components/media_router/browser/presentation/web_contents_presentation_manager.h" +#include "content/public/browser/presentation_request.h" #include "testing/gmock/include/gmock/gmock.h" namespace content { @@ -16,6 +18,7 @@ class MediaNotificationService; using media_message_center::MediaNotificationView; +using media_router::WebContentsPresentationManager; class MockMediaNotificationItem : public media_message_center::MediaNotificationItem { @@ -52,12 +55,13 @@ gfx::Rect bounds)); // MediaDialogDelegate implementation. - MOCK_METHOD2( + MOCK_METHOD( + MediaNotificationContainerImpl*, ShowMediaSession, - MediaNotificationContainerImpl*( - const std::string& id, - base::WeakPtr<media_message_center::MediaNotificationItem> item)); - MOCK_METHOD1(HideMediaSession, void(const std::string& id)); + (const std::string& id, + base::WeakPtr<media_message_center::MediaNotificationItem> item)); + MOCK_METHOD(void, HideMediaSession, (const std::string& id)); + std::unique_ptr<OverlayMediaNotification> PopOut(const std::string& id, gfx::Rect bounds) override; void HideMediaDialog() override; @@ -77,4 +81,37 @@ MOCK_METHOD(void, HideItem, (const std::string&)); }; +class MockWebContentsPresentationManager + : public WebContentsPresentationManager { + public: + MockWebContentsPresentationManager(); + ~MockWebContentsPresentationManager() override; + + void NotifyMediaRoutesChanged( + const std::vector<media_router::MediaRoute>& routes); + void SetDefaultPresentationRequest( + const content::PresentationRequest& request); + + // WebContentsPresentationManager implementation. + bool HasDefaultPresentationRequest() const override; + const content::PresentationRequest& GetDefaultPresentationRequest() + const override; + void AddObserver(WebContentsPresentationManager::Observer* observer) override; + void RemoveObserver( + WebContentsPresentationManager::Observer* observer) override; + base::WeakPtr<WebContentsPresentationManager> GetWeakPtr() override; + + MOCK_METHOD(void, + OnPresentationResponse, + (const content::PresentationRequest&, + media_router::mojom::RoutePresentationConnectionPtr, + const media_router::RouteRequestResult&)); + MOCK_METHOD(std::vector<media_router::MediaRoute>, GetMediaRoutes, ()); + + private: + absl::optional<content::PresentationRequest> default_presentation_request_; + base::ObserverList<WebContentsPresentationManager::Observer> observers_; + base::WeakPtrFactory<MockWebContentsPresentationManager> weak_factory_{this}; +}; + #endif // CHROME_BROWSER_UI_GLOBAL_MEDIA_CONTROLS_TEST_HELPER_H_
diff --git a/chrome/browser/ui/passwords/manage_passwords_ui_controller.cc b/chrome/browser/ui/passwords/manage_passwords_ui_controller.cc index 0aba6d6..ef806dd 100644 --- a/chrome/browser/ui/passwords/manage_passwords_ui_controller.cc +++ b/chrome/browser/ui/passwords/manage_passwords_ui_controller.cc
@@ -536,8 +536,8 @@ std::make_unique<password_manager::PostSaveCompromisedHelper>( passwords_data_.form_manager()->GetInsecureCredentials(), username); post_save_compromised_helper_->AnalyzeLeakedCredentials( - passwords_data_.client()->GetProfilePasswordStore(), - passwords_data_.client()->GetAccountPasswordStore(), + passwords_data_.client()->GetProfilePasswordStoreInterface(), + passwords_data_.client()->GetAccountPasswordStoreInterface(), Profile::FromBrowserContext(web_contents()->GetBrowserContext()) ->GetPrefs(), base::BindOnce( @@ -556,7 +556,7 @@ const std::vector<password_manager::PasswordForm>& selected_credentials) { auto profile_store_form_saver = std::make_unique<password_manager::FormSaverImpl>( - passwords_data_.client()->GetProfilePasswordStore()); + passwords_data_.client()->GetProfilePasswordStoreInterface()); for (const password_manager::PasswordForm& form : selected_credentials) { // Only newly-saved or newly-updated credentials can be unsynced. Since // conflicts are solved in that process, any entry in the profile store
diff --git a/chrome/browser/ui/passwords/manage_passwords_ui_controller_unittest.cc b/chrome/browser/ui/passwords/manage_passwords_ui_controller_unittest.cc index bce78b6a..3e783522 100644 --- a/chrome/browser/ui/passwords/manage_passwords_ui_controller_unittest.cc +++ b/chrome/browser/ui/passwords/manage_passwords_ui_controller_unittest.cc
@@ -27,7 +27,7 @@ #include "chrome/browser/ui/passwords/passwords_model_delegate.h" #include "chrome/test/base/chrome_render_view_host_test_harness.h" #include "components/password_manager/core/browser/mock_password_form_manager_for_ui.h" -#include "components/password_manager/core/browser/mock_password_store.h" +#include "components/password_manager/core/browser/mock_password_store_interface.h" #include "components/password_manager/core/browser/password_bubble_experiment.h" #include "components/password_manager/core/browser/password_form.h" #include "components/password_manager/core/browser/password_form_metrics_recorder.h" @@ -51,7 +51,7 @@ using password_manager::InsecureCredential; using password_manager::MockPasswordFormManagerForUI; -using password_manager::MockPasswordStore; +using password_manager::MockPasswordStoreInterface; using password_manager::PasswordForm; using ReauthSucceeded = password_manager::PasswordManagerClient::ReauthSucceeded; @@ -114,11 +114,10 @@ class TestPasswordManagerClient : public password_manager::StubPasswordManagerClient { public: - TestPasswordManagerClient() : mock_profile_store_(new MockPasswordStore()) { - mock_profile_store_->Init(nullptr); - } + TestPasswordManagerClient() + : mock_profile_store_(new MockPasswordStoreInterface()) {} + ~TestPasswordManagerClient() override { - mock_profile_store_->ShutdownOnUIThread(); } MOCK_METHOD(void, @@ -127,12 +126,13 @@ base::OnceCallback<void(ReauthSucceeded)>), (override)); - MockPasswordStore* GetProfilePasswordStore() const override { + MockPasswordStoreInterface* GetProfilePasswordStoreInterface() + const override { return mock_profile_store_.get(); } private: - scoped_refptr<MockPasswordStore> mock_profile_store_; + scoped_refptr<MockPasswordStoreInterface> mock_profile_store_; }; // This subclass is used to disable some code paths which are not essential for @@ -1465,7 +1465,8 @@ BuildFormFromLoginAndURL("user2", "password2", "http://b.com")}; // Set expectations on the store. - MockPasswordStore* profile_store = client().GetProfilePasswordStore(); + MockPasswordStoreInterface* profile_store = + client().GetProfilePasswordStoreInterface(); EXPECT_CALL(*profile_store, AddLogin(MatchesLoginAndURL(credentials[0].username_value, credentials[0].password_value, @@ -1493,7 +1494,8 @@ controller()->NotifyUnsyncedCredentialsWillBeDeleted(std::move(credentials)); // No save should happen on the profile store. - MockPasswordStore* profile_store = client().GetProfilePasswordStore(); + MockPasswordStoreInterface* profile_store = + client().GetProfilePasswordStoreInterface(); EXPECT_CALL(*profile_store, AddLogin).Times(0); // Discard. @@ -1553,7 +1555,8 @@ .WillOnce(Return(saved)); password_manager::PasswordStoreConsumer* post_save_helper = nullptr; - EXPECT_CALL(*client().GetProfilePasswordStore(), GetAutofillableLogins) + EXPECT_CALL(*client().GetProfilePasswordStoreInterface(), + GetAutofillableLogins) .WillOnce(testing::WithArg<0>([&post_save_helper](auto* consumer) { post_save_helper = consumer; })); @@ -1596,7 +1599,8 @@ password_manager::PasswordStoreConsumer* post_save_helper = nullptr; - EXPECT_CALL(*client().GetProfilePasswordStore(), GetAutofillableLogins) + EXPECT_CALL(*client().GetProfilePasswordStoreInterface(), + GetAutofillableLogins) .WillOnce(testing::WithArg<0>([&post_save_helper](auto* consumer) { post_save_helper = consumer; })); @@ -1647,12 +1651,6 @@ controller()->SavePassword(submitted_form().username_value, submitted_form().password_value); // The sign-in promo bubble stays open, the warning isn't shown. - // There are insecure credentials to fix. - saved[0].username = u"another username"; - EXPECT_CALL(*client().GetProfilePasswordStore(), - GetAllInsecureCredentialsImpl) - .Times(testing::AtMost(1)) - .WillOnce(Return(saved)); WaitForPasswordStore(); ExpectIconAndControllerStateIs(password_manager::ui::MANAGE_STATE);
diff --git a/chrome/browser/ui/views/global_media_controls/media_dialog_view.cc b/chrome/browser/ui/views/global_media_controls/media_dialog_view.cc index 14266ffb..73a4b11 100644 --- a/chrome/browser/ui/views/global_media_controls/media_dialog_view.cc +++ b/chrome/browser/ui/views/global_media_controls/media_dialog_view.cc
@@ -114,7 +114,7 @@ const std::string& id, base::WeakPtr<media_message_center::MediaNotificationItem> item) { auto container = std::make_unique<MediaNotificationContainerImplView>( - id, item, service_, entry_point_); + id, item, service_, entry_point_, profile_); MediaNotificationContainerImplView* container_ptr = container.get(); container_ptr->AddObserver(this); observed_containers_[id] = container_ptr;
diff --git a/chrome/browser/ui/views/global_media_controls/media_notification_container_impl_view.cc b/chrome/browser/ui/views/global_media_controls/media_notification_container_impl_view.cc index 6ab73d9..a87083a 100644 --- a/chrome/browser/ui/views/global_media_controls/media_notification_container_impl_view.cc +++ b/chrome/browser/ui/views/global_media_controls/media_notification_container_impl_view.cc
@@ -102,6 +102,7 @@ base::WeakPtr<media_message_center::MediaNotificationItem> item, MediaNotificationService* service, GlobalMediaControlsEntryPoint entry_point, + Profile* profile, absl::optional<media_message_center::NotificationTheme> theme) : views::Button(base::BindRepeating( [](MediaNotificationContainerImplView* view) { @@ -116,7 +117,8 @@ background_color_(kDefaultBackgroundColor), service_(service), is_cros_(theme.has_value()), - entry_point_(entry_point) { + entry_point_(entry_point), + profile_(profile) { DCHECK(item); SetLayoutManager(std::make_unique<views::BoxLayout>( views::BoxLayout::Orientation::kVertical)); @@ -195,17 +197,18 @@ SetPreferredSize(kNormalSize); } view_ = swipeable_container_->AddChildView(std::move(view)); - - // Show a stop cast button for cast notifications. - if (is_cast_notification && + bool gmc_cast_start_stop_enabled = media_router::GlobalMediaControlsCastStartStopEnabled() && + media_router::MediaRouterEnabled(profile_); + // Show a stop cast button for cast notifications. + if (is_cast_notification && gmc_cast_start_stop_enabled && !base::FeatureList::IsEnabled(media::kGlobalMediaControlsModernUI)) { AddStopCastButton(cast_item); } // Show a device selector view for media and supplemental notifications. if (!is_cast_notification && - (media_router::GlobalMediaControlsCastStartStopEnabled() || + (gmc_cast_start_stop_enabled || base::FeatureList::IsEnabled( media::kGlobalMediaControlsSeamlessTransfer))) { AddDeviceSelectorView( @@ -549,7 +552,8 @@ bool is_local_media_session, bool show_expand_button) { std::unique_ptr<media_router::CastDialogController> cast_controller; - if (media_router::GlobalMediaControlsCastStartStopEnabled()) { + if (media_router::GlobalMediaControlsCastStartStopEnabled() && + media_router::MediaRouterEnabled(profile_)) { cast_controller = is_local_media_session ? service_->CreateCastDialogControllerForSession(id_)
diff --git a/chrome/browser/ui/views/global_media_controls/media_notification_container_impl_view.h b/chrome/browser/ui/views/global_media_controls/media_notification_container_impl_view.h index 3e55331c..32da6c0 100644 --- a/chrome/browser/ui/views/global_media_controls/media_notification_container_impl_view.h +++ b/chrome/browser/ui/views/global_media_controls/media_notification_container_impl_view.h
@@ -37,6 +37,7 @@ class MediaNotificationContainerObserver; class MediaNotificationFooterView; class MediaNotificationService; +class Profile; // MediaNotificationContainerImplView holds a media notification for display // within the MediaDialogView. The media notification shows metadata for a media @@ -56,6 +57,7 @@ base::WeakPtr<media_message_center::MediaNotificationItem> item, MediaNotificationService* service, GlobalMediaControlsEntryPoint entry_point, + Profile* profile, absl::optional<media_message_center::NotificationTheme> theme = absl::nullopt); MediaNotificationContainerImplView( @@ -227,6 +229,7 @@ const bool is_cros_; const GlobalMediaControlsEntryPoint entry_point_; + Profile* const profile_; }; #endif // CHROME_BROWSER_UI_VIEWS_GLOBAL_MEDIA_CONTROLS_MEDIA_NOTIFICATION_CONTAINER_IMPL_VIEW_H_
diff --git a/chrome/browser/ui/views/global_media_controls/media_notification_container_impl_view_unittest.cc b/chrome/browser/ui/views/global_media_controls/media_notification_container_impl_view_unittest.cc index 49a3167..88d75a3b 100644 --- a/chrome/browser/ui/views/global_media_controls/media_notification_container_impl_view_unittest.cc +++ b/chrome/browser/ui/views/global_media_controls/media_notification_container_impl_view_unittest.cc
@@ -101,7 +101,7 @@ item_ = std::make_unique<NiceMock<MockMediaNotificationItem>>(); SetUpCommon(std::make_unique<MediaNotificationContainerImplView>( kTestNotificationId, item_->GetWeakPtr(), nullptr, - GlobalMediaControlsEntryPoint::kToolbarIcon)); + GlobalMediaControlsEntryPoint::kToolbarIcon, nullptr)); } void SetUpCommon(std::unique_ptr<MediaNotificationContainerImplView> @@ -362,7 +362,7 @@ SetUpCommon(std::make_unique<MediaNotificationContainerImplView>( kTestNotificationId, item_->GetWeakPtr(), nullptr, - GlobalMediaControlsEntryPoint::kToolbarIcon)); + GlobalMediaControlsEntryPoint::kToolbarIcon, profile())); } void TearDown() override { @@ -487,7 +487,7 @@ TEST_F(MediaNotificationContainerImplViewTest, SendsDestroyedUpdates) { auto container = std::make_unique<MediaNotificationContainerImplView>( kOtherTestNotificationId, notification_item(), nullptr, - GlobalMediaControlsEntryPoint::kToolbarIcon); + GlobalMediaControlsEntryPoint::kToolbarIcon, nullptr); MockMediaNotificationContainerObserver observer; container->AddObserver(&observer); @@ -518,7 +518,7 @@ TEST_F(MediaNotificationContainerImplViewTest, MetadataTest) { auto container_view = std::make_unique<MediaNotificationContainerImplView>( kOtherTestNotificationId, notification_item(), nullptr, - GlobalMediaControlsEntryPoint::kToolbarIcon); + GlobalMediaControlsEntryPoint::kToolbarIcon, nullptr); views::test::TestViewMetadata(container_view.get()); }
diff --git a/chrome/browser/ui/views/global_media_controls/media_notification_list_view_unittest.cc b/chrome/browser/ui/views/global_media_controls/media_notification_list_view_unittest.cc index 38aa2eb..8d4a678 100644 --- a/chrome/browser/ui/views/global_media_controls/media_notification_list_view_unittest.cc +++ b/chrome/browser/ui/views/global_media_controls/media_notification_list_view_unittest.cc
@@ -52,7 +52,7 @@ list_view_->ShowNotification( id, std::make_unique<MediaNotificationContainerImplView>( id, item_->GetWeakPtr(), nullptr, - GlobalMediaControlsEntryPoint::kToolbarIcon)); + GlobalMediaControlsEntryPoint::kToolbarIcon, nullptr)); } void HideNotification(const std::string& id) {
diff --git a/chrome/browser/ui/views/global_media_controls/overlay_media_notification_view_unittest.cc b/chrome/browser/ui/views/global_media_controls/overlay_media_notification_view_unittest.cc index ac863ae8..f3a00095 100644 --- a/chrome/browser/ui/views/global_media_controls/overlay_media_notification_view_unittest.cc +++ b/chrome/browser/ui/views/global_media_controls/overlay_media_notification_view_unittest.cc
@@ -44,7 +44,7 @@ auto notification = std::make_unique<MediaNotificationContainerImplView>( kTestNotificationId, item_->GetWeakPtr(), nullptr, - GlobalMediaControlsEntryPoint::kToolbarIcon); + GlobalMediaControlsEntryPoint::kToolbarIcon, nullptr); notification->PopOut(); overlay_ = std::make_unique<OverlayMediaNotificationView>(
diff --git a/chrome/browser/ui/views/page_info/accuracy_tip_bubble_view.cc b/chrome/browser/ui/views/page_info/accuracy_tip_bubble_view.cc index f478dc5a..b473787 100644 --- a/chrome/browser/ui/views/page_info/accuracy_tip_bubble_view.cc +++ b/chrome/browser/ui/views/page_info/accuracy_tip_bubble_view.cc
@@ -8,6 +8,7 @@ #include "base/bind.h" #include "base/callback.h" +#include "base/notreached.h" #include "chrome/browser/platform_util.h" #include "chrome/browser/ui/browser.h" #include "chrome/browser/ui/browser_finder.h" @@ -173,7 +174,7 @@ // action_taken_ may be set. Otherwise, keep default of kNoAction. break; case ClosedReason::kAcceptButtonClicked: - action_taken_ = AccuracyTipUI::Interaction::kLearnMorePressed; + action_taken_ = AccuracyTipUI::Interaction::kLearnMore; break; case ClosedReason::kEscKeyPressed: case ClosedReason::kCloseButtonClicked: @@ -189,7 +190,7 @@ void AccuracyTipBubbleView::OpenHelpCenter() { // TODO(crbug.com/1210891): Add link to the right info page. - action_taken_ = AccuracyTipUI::Interaction::kLearnMorePressed; + action_taken_ = AccuracyTipUI::Interaction::kLearnMore; web_contents()->OpenURL(content::OpenURLParams( GURL(accuracy_tips::features::kLearnMoreUrl.Get().empty() ? chrome::kSafetyTipHelpCenterURL @@ -199,7 +200,7 @@ } void AccuracyTipBubbleView::OnDontShowAgainClicked() { - action_taken_ = AccuracyTipUI::Interaction::kOptOutPressed; + action_taken_ = AccuracyTipUI::Interaction::kOptOut; GetWidget()->Close(); }
diff --git a/chrome/browser/ui/views/page_info/accuracy_tip_bubble_view_browsertest.cc b/chrome/browser/ui/views/page_info/accuracy_tip_bubble_view_browsertest.cc index 07c49359..e3176aed1 100644 --- a/chrome/browser/ui/views/page_info/accuracy_tip_bubble_view_browsertest.cc +++ b/chrome/browser/ui/views/page_info/accuracy_tip_bubble_view_browsertest.cc
@@ -139,7 +139,7 @@ histogram_tester()->ExpectUniqueSample( "Privacy.AccuracyTip.AccuracyTipInteraction", - AccuracyTipUI::Interaction::kOptOutPressed, 1); + AccuracyTipUI::Interaction::kOptOut, 1); } IN_PROC_BROWSER_TEST_F(AccuracyTipBubbleViewBrowserTest, DisappearOnNavigate) { @@ -174,7 +174,7 @@ histogram_tester()->ExpectUniqueSample( "Privacy.AccuracyTip.AccuracyTipInteraction", - AccuracyTipUI::Interaction::kLearnMorePressed, 1); + AccuracyTipUI::Interaction::kLearnMore, 1); } // Render test for accuracy tip ui.
diff --git a/chrome/browser/ui/views/toolbar/chrome_labs_utils.cc b/chrome/browser/ui/views/toolbar/chrome_labs_utils.cc index 7ea5fe8..a10c3dd 100644 --- a/chrome/browser/ui/views/toolbar/chrome_labs_utils.cc +++ b/chrome/browser/ui/views/toolbar/chrome_labs_utils.cc
@@ -79,5 +79,5 @@ } for (const std::string& key : entries_to_remove) - new_badge_prefs->Remove(key, nullptr); + new_badge_prefs->RemoveKey(key); }
diff --git a/chrome/browser/ui/views/web_apps/web_app_integration_browsertest.cc b/chrome/browser/ui/views/web_apps/web_app_integration_browsertest.cc index c4ec6946..b3cd3291 100644 --- a/chrome/browser/ui/views/web_apps/web_app_integration_browsertest.cc +++ b/chrome/browser/ui/views/web_apps/web_app_integration_browsertest.cc
@@ -11,27 +11,6 @@ namespace web_app { -namespace { - -const char kTestCaseFileName[] = "web_app_integration_browsertest_cases.csv"; - -// Returns the path of the requested file in the test data directory. -base::FilePath GetTestFileDir() { - base::FilePath file_path; - base::PathService::Get(base::DIR_SOURCE_ROOT, &file_path); - file_path = file_path.Append(FILE_PATH_LITERAL("chrome")); - file_path = file_path.Append(FILE_PATH_LITERAL("test")); - file_path = file_path.Append(FILE_PATH_LITERAL("data")); - return file_path.Append(FILE_PATH_LITERAL("web_apps")); -} - -std::vector<std::string> BuildAllPlatformTestCaseSet() { - return WebAppIntegrationBrowserTestBase::BuildAllPlatformTestCaseSet( - GetTestFileDir(), kTestCaseFileName); -} - -} // anonymous namespace - class WebAppIntegrationBrowserTest : public InProcessBrowserTest, public WebAppIntegrationBrowserTestBase::TestDelegate, @@ -47,24 +26,25 @@ // BrowserTestBase void SetUpOnMainThread() override { helper_.SetUpOnMainThread(); } + void TearDownOnMainThread() override { helper_.TearDownOnMainThread(); } void SetUpCommandLine(base::CommandLine* command_line) override { ASSERT_TRUE(embedded_test_server()->Start()); command_line->AppendSwitchASCII( network::switches::kUnsafelyTreatInsecureOriginAsSecure, - helper_.GetInstallableAppURL("site_a").GetOrigin().spec()); + helper_.GetInstallableAppURL("SiteA").GetOrigin().spec()); command_line->AppendSwitchASCII( network::switches::kUnsafelyTreatInsecureOriginAsSecure, - helper_.GetInstallableAppURL("site_b").GetOrigin().spec()); + helper_.GetInstallableAppURL("SiteB").GetOrigin().spec()); command_line->AppendSwitchASCII( network::switches::kUnsafelyTreatInsecureOriginAsSecure, - helper_.GetInstallableAppURL("site_c").GetOrigin().spec()); + helper_.GetInstallableAppURL("SiteC").GetOrigin().spec()); command_line->AppendSwitchASCII( network::switches::kUnsafelyTreatInsecureOriginAsSecure, - helper_.GetInstallableAppURL("site_a_foo").GetOrigin().spec()); + helper_.GetInstallableAppURL("SiteAFoo").GetOrigin().spec()); command_line->AppendSwitchASCII( network::switches::kUnsafelyTreatInsecureOriginAsSecure, - helper_.GetInstallableAppURL("site_a_bar").GetOrigin().spec()); + helper_.GetInstallableAppURL("SiteABar").GetOrigin().spec()); } // WebAppIntegrationBrowserTestBase::TestDelegate @@ -86,479 +66,926 @@ bool IsSyncTest() override { return false; } - bool UserSigninInternal() override { - NOTREACHED(); - return false; - } - void TurnSyncOff() override { NOTREACHED(); } - void TurnSyncOn() override { NOTREACHED(); } + void SyncTurnOff() override { NOTREACHED(); } + void SyncTurnOn() override { NOTREACHED(); } WebAppIntegrationBrowserTestBase helper_; }; -// This test is a part of the web app integration test suite, which is -// documented in //chrome/browser/ui/views/web_apps/README.md. For information -// about diagnosing, debugging and/or disabling tests, please look to the -// README file. -IN_PROC_BROWSER_TEST_P(WebAppIntegrationBrowserTest, Default) { - helper_.ParseParams(GetParam()); - // Since this test framework differs from traditional browser tests, print - // some useful information for sheriffs and developers to help identify, - // diagnose, and disable failing tests. - LOG(INFO) << helper_.BuildLogForTest(helper_.testing_actions(), IsSyncTest()); - - for (auto& action : helper_.testing_actions()) { - helper_.ExecuteAction(action); - } - helper_.ResetRegistrarObserver(); -} - -INSTANTIATE_TEST_SUITE_P(All, - WebAppIntegrationBrowserTest, - testing::ValuesIn(BuildAllPlatformTestCaseSet())); - -// TODO(jarrydg@chromium.org): Remove the macro disabling the following tests -// when they can compile. https://crbug.com/1215791 +// TODO(jarrydg@): Fix the following test failure/crash. #if false -namespace { - -IN_PROC_BROWSER_TEST( +IN_PROC_BROWSER_TEST_F( WebAppIntegrationBrowserTest, WebAppIntegration_InstOmniboxSiteA_WindowCreated_InstPlcyTabShctSiteA_NavSiteA_LaunchIconShown) { // Test contents are generated by script. Please do not modify! // See `chrome/test/webapps/README.md` for more info. // Sheriffs: Disabling this test is supported. - InstallOmniboxIcon("SiteA"); - CheckWindowCreated(); - InstallPolicyAppTabbedShortcut("SiteA"); - NavigateBrowser("SiteA"); - CheckLaunchIconShown(); -} + helper_.BeforeStateChangeAction(); + helper_.InstallOmniboxIcon("SiteA"); + helper_.AfterStateChangeAction(); -IN_PROC_BROWSER_TEST( + helper_.BeforeStateCheckAction(); + helper_.CheckWindowCreated(); + helper_.AfterStateCheckAction(); + + helper_.BeforeStateChangeAction(); + helper_.InstallPolicyAppTabbedShortcut("SiteA"); + helper_.AfterStateChangeAction(); + + helper_.BeforeStateChangeAction(); + helper_.NavigateBrowser("SiteA"); + helper_.AfterStateChangeAction(); + + helper_.BeforeStateCheckAction(); + helper_.CheckLaunchIconShown(); + helper_.AfterStateCheckAction(); +} +#endif + +// TODO(jarrydg@): Fix the following test failure/crash. +#if false +IN_PROC_BROWSER_TEST_F( WebAppIntegrationBrowserTest, - WebAppIntegration_InstOmniboxSiteA_WindowCreated_InstPlcyTabShctSiteA_UninstallPlcySiteA) { + WebAppIntegration_InstOmniboxSiteA_WindowCreated_InstPlcyTabShctSiteA_UninstallPlcySiteA) +{ // Test contents are generated by script. Please do not modify! // See `chrome/test/webapps/README.md` for more info. // Sheriffs: Disabling this test is supported. - InstallOmniboxIcon("SiteA"); - CheckWindowCreated(); - InstallPolicyAppTabbedShortcut("SiteA"); - UninstallPolicyApp("SiteA"); -} + helper_.BeforeStateChangeAction(); + helper_.InstallOmniboxIcon("SiteA"); + helper_.AfterStateChangeAction(); -IN_PROC_BROWSER_TEST( + helper_.BeforeStateCheckAction(); + helper_.CheckWindowCreated(); + helper_.AfterStateCheckAction(); + + helper_.BeforeStateChangeAction(); + helper_.InstallPolicyAppTabbedShortcut("SiteA"); + helper_.AfterStateChangeAction(); + + helper_.BeforeStateChangeAction(); + helper_.UninstallPolicyApp("SiteA"); + helper_.AfterStateChangeAction(); +} +#endif + +// TODO(jarrydg@): Fix the following test failure/crash. +#if false +IN_PROC_BROWSER_TEST_F( WebAppIntegrationBrowserTest, WebAppIntegration_InstOmniboxSiteA_WindowCreated_NavSiteA_InstIconNotShown_LaunchIconShown) { // Test contents are generated by script. Please do not modify! // See `chrome/test/webapps/README.md` for more info. // Sheriffs: Disabling this test is supported. - InstallOmniboxIcon("SiteA"); - CheckWindowCreated(); - NavigateBrowser("SiteA"); - CheckInstallIconNotShown(); - CheckLaunchIconShown(); -} + helper_.BeforeStateChangeAction(); + helper_.InstallOmniboxIcon("SiteA"); + helper_.AfterStateChangeAction(); -IN_PROC_BROWSER_TEST( + helper_.BeforeStateCheckAction(); + helper_.CheckWindowCreated(); + helper_.AfterStateCheckAction(); + + helper_.BeforeStateChangeAction(); + helper_.NavigateBrowser("SiteA"); + helper_.AfterStateChangeAction(); + + helper_.BeforeStateCheckAction(); + helper_.CheckInstallIconNotShown(); + helper_.AfterStateCheckAction(); + + helper_.BeforeStateCheckAction(); + helper_.CheckLaunchIconShown(); + helper_.AfterStateCheckAction(); +} +#endif + +IN_PROC_BROWSER_TEST_F( WebAppIntegrationBrowserTest, WebAppIntegration_InstOmniboxSiteA_WindowCreated_ClosePWA_MnfstUpdateDsplMinimalSiteA) { // Test contents are generated by script. Please do not modify! // See `chrome/test/webapps/README.md` for more info. // Sheriffs: Disabling this test is supported. - InstallOmniboxIcon("SiteA"); - CheckWindowCreated(); - ClosePwa(); - ManifestUpdateDisplayMinimal("SiteA"); + helper_.BeforeStateChangeAction(); + helper_.InstallOmniboxIcon("SiteA"); + helper_.AfterStateChangeAction(); + + helper_.BeforeStateCheckAction(); + helper_.CheckWindowCreated(); + helper_.AfterStateCheckAction(); + + helper_.BeforeStateChangeAction(); + helper_.ClosePwa(); + helper_.AfterStateChangeAction(); + + helper_.BeforeStateChangeAction(); + helper_.ManifestUpdateDisplayMinimal("SiteA"); + helper_.AfterStateChangeAction(); } -IN_PROC_BROWSER_TEST( +IN_PROC_BROWSER_TEST_F( WebAppIntegrationBrowserTest, WebAppIntegration_InstOmniboxSiteA_WindowCreated_SetOpenTabSiteA_NavSiteA_InstIconShown) { // Test contents are generated by script. Please do not modify! // See `chrome/test/webapps/README.md` for more info. // Sheriffs: Disabling this test is supported. - InstallOmniboxIcon("SiteA"); - CheckWindowCreated(); - SetOpenInTab("SiteA"); - NavigateBrowser("SiteA"); - CheckInstallIconShown(); + helper_.BeforeStateChangeAction(); + helper_.InstallOmniboxIcon("SiteA"); + helper_.AfterStateChangeAction(); + + helper_.BeforeStateCheckAction(); + helper_.CheckWindowCreated(); + helper_.AfterStateCheckAction(); + + helper_.BeforeStateChangeAction(); + helper_.SetOpenInTab("SiteA"); + helper_.AfterStateChangeAction(); + + helper_.BeforeStateChangeAction(); + helper_.NavigateBrowser("SiteA"); + helper_.AfterStateChangeAction(); + + helper_.BeforeStateCheckAction(); + helper_.CheckInstallIconShown(); + helper_.AfterStateCheckAction(); } -IN_PROC_BROWSER_TEST( +IN_PROC_BROWSER_TEST_F( WebAppIntegrationBrowserTest, WebAppIntegration_InstOmniboxSiteA_WindowCreated_NavSiteAFoo_InstIconNotShown_LaunchIconShown) { // Test contents are generated by script. Please do not modify! // See `chrome/test/webapps/README.md` for more info. // Sheriffs: Disabling this test is supported. - InstallOmniboxIcon("SiteA"); - CheckWindowCreated(); - NavigateBrowser("SiteAFoo"); - CheckInstallIconNotShown(); - CheckLaunchIconShown(); + helper_.BeforeStateChangeAction(); + helper_.InstallOmniboxIcon("SiteA"); + helper_.AfterStateChangeAction(); + + helper_.BeforeStateCheckAction(); + helper_.CheckWindowCreated(); + helper_.AfterStateCheckAction(); + + helper_.BeforeStateChangeAction(); + helper_.NavigateBrowser("SiteAFoo"); + helper_.AfterStateChangeAction(); + + helper_.BeforeStateCheckAction(); + helper_.CheckInstallIconNotShown(); + helper_.AfterStateCheckAction(); + + helper_.BeforeStateCheckAction(); + helper_.CheckLaunchIconShown(); + helper_.AfterStateCheckAction(); } -IN_PROC_BROWSER_TEST( +// TODO(jarrydg@): Fix the following test failure/crash. +#if false +IN_PROC_BROWSER_TEST_F( WebAppIntegrationBrowserTest, - WebAppIntegration_InstOmniboxSiteA_WindowCreated_InstPlcyWinShctSiteA_UninstallPlcySiteA) { + WebAppIntegration_InstOmniboxSiteA_WindowCreated_InstPlcyWinShctSiteA_UninstallPlcySiteA) +{ // Test contents are generated by script. Please do not modify! // See `chrome/test/webapps/README.md` for more info. // Sheriffs: Disabling this test is supported. - InstallOmniboxIcon("SiteA"); - CheckWindowCreated(); - InstallPolicyAppWindowedShortcut("SiteA"); - UninstallPolicyApp("SiteA"); -} + helper_.BeforeStateCheckAction(); + helper_.InstallOmniboxIcon("SiteA"); + helper_.AfterStateCheckAction(); -IN_PROC_BROWSER_TEST( + helper_.BeforeStateCheckAction(); + helper_.CheckWindowCreated(); + helper_.AfterStateCheckAction(); + + helper_.BeforeStateChangeAction(); + helper_.InstallPolicyAppWindowedShortcut("SiteA"); + helper_.AfterStateChangeAction(); + + helper_.BeforeStateChangeAction(); + helper_.UninstallPolicyApp("SiteA"); + helper_.AfterStateChangeAction(); +} +#endif + +// TODO(jarrydg@): Fix the following test failure/crash. +#if false +IN_PROC_BROWSER_TEST_F( WebAppIntegrationBrowserTest, - WebAppIntegration_InstMenuOptionSiteA_WindowCreated_InstPlcyTabShctSiteA_NavSiteA_LaunchIconShown) { + WebAppIntegration_InstMenuOptionSiteA_WindowCreated_InstPlcyTabShctSiteA_NavSiteA_LaunchIconShown) +{ // Test contents are generated by script. Please do not modify! // See `chrome/test/webapps/README.md` for more info. // Sheriffs: Disabling this test is supported. - InstallMenuOption("SiteA"); - CheckWindowCreated(); - InstallPolicyAppTabbedShortcut("SiteA"); - NavigateBrowser("SiteA"); - CheckLaunchIconShown(); -} + helper_.BeforeStateChangeAction(); + helper_.InstallMenuOption("SiteA"); + helper_.AfterStateChangeAction(); -IN_PROC_BROWSER_TEST( + helper_.BeforeStateCheckAction(); + helper_.CheckWindowCreated(); + helper_.AfterStateCheckAction(); + + helper_.BeforeStateChangeAction(); + helper_.InstallPolicyAppTabbedShortcut("SiteA"); + helper_.AfterStateChangeAction(); + + helper_.BeforeStateChangeAction(); + helper_.NavigateBrowser("SiteA"); + helper_.AfterStateChangeAction(); + + helper_.BeforeStateCheckAction(); + helper_.CheckLaunchIconShown(); + helper_.AfterStateCheckAction(); +} +#endif + +// TODO(jarrydg@): Fix the following test failure/crash. +#if false +IN_PROC_BROWSER_TEST_F( WebAppIntegrationBrowserTest, - WebAppIntegration_InstMenuOptionSiteA_WindowCreated_InstPlcyTabShctSiteA_UninstallPlcySiteA) { + WebAppIntegration_InstMenuOptionSiteA_WindowCreated_InstPlcyTabShctSiteA_UninstallPlcySiteA) +{ // Test contents are generated by script. Please do not modify! // See `chrome/test/webapps/README.md` for more info. // Sheriffs: Disabling this test is supported. - InstallMenuOption("SiteA"); - CheckWindowCreated(); - InstallPolicyAppTabbedShortcut("SiteA"); - UninstallPolicyApp("SiteA"); -} + helper_.BeforeStateChangeAction(); + helper_.InstallMenuOption("SiteA"); + helper_.AfterStateChangeAction(); -IN_PROC_BROWSER_TEST( + helper_.BeforeStateCheckAction(); + helper_.CheckWindowCreated(); + helper_.AfterStateCheckAction(); + + helper_.BeforeStateChangeAction(); + helper_.InstallPolicyAppTabbedShortcut("SiteA"); + helper_.AfterStateChangeAction(); + + helper_.BeforeStateChangeAction(); + helper_.UninstallPolicyApp("SiteA"); + helper_.AfterStateChangeAction(); +} +#endif + +// TODO(jarrydg@): Fix the following test failure/crash. +#if false +IN_PROC_BROWSER_TEST_F( WebAppIntegrationBrowserTest, - WebAppIntegration_InstMenuOptionSiteA_WindowCreated_NavSiteA_InstIconNotShown_LaunchIconShown) { + WebAppIntegration_InstMenuOptionSiteA_WindowCreated_NavSiteA_InstIconNotShown_LaunchIconShown) +{ // Test contents are generated by script. Please do not modify! // See `chrome/test/webapps/README.md` for more info. // Sheriffs: Disabling this test is supported. - InstallMenuOption("SiteA"); - CheckWindowCreated(); - NavigateBrowser("SiteA"); - CheckInstallIconNotShown(); - CheckLaunchIconShown(); -} + helper_.BeforeStateChangeAction(); + helper_.InstallMenuOption("SiteA"); + helper_.AfterStateChangeAction(); -IN_PROC_BROWSER_TEST( + helper_.BeforeStateCheckAction(); + helper_.CheckWindowCreated(); + helper_.AfterStateCheckAction(); + + helper_.BeforeStateChangeAction(); + helper_.NavigateBrowser("SiteA"); + helper_.AfterStateChangeAction(); + + helper_.BeforeStateCheckAction(); + helper_.CheckInstallIconNotShown(); + helper_.AfterStateCheckAction(); + + helper_.BeforeStateCheckAction(); + helper_.CheckLaunchIconShown(); + helper_.AfterStateCheckAction(); +} +#endif + +// TODO(jarrydg@): Fix the following test failure/crash. +#if false +IN_PROC_BROWSER_TEST_F( WebAppIntegrationBrowserTest, - WebAppIntegration_InstMenuOptionSiteA_WindowCreated_ClosePWA_MnfstUpdateDsplMinimalSiteA) { + WebAppIntegration_InstMenuOptionSiteA_WindowCreated_ClosePWA_MnfstUpdateDsplMinimalSiteA) +{ // Test contents are generated by script. Please do not modify! // See `chrome/test/webapps/README.md` for more info. // Sheriffs: Disabling this test is supported. - InstallMenuOption("SiteA"); - CheckWindowCreated(); - ClosePwa(); - ManifestUpdateDisplayMinimal("SiteA"); -} + helper_.BeforeStateChangeAction(); + helper_.InstallMenuOption("SiteA"); + helper_.AfterStateChangeAction(); -IN_PROC_BROWSER_TEST( + helper_.BeforeStateCheckAction(); + helper_.CheckWindowCreated(); + helper_.AfterStateCheckAction(); + + helper_.BeforeStateChangeAction(); + helper_.ClosePwa(); + helper_.AfterStateChangeAction(); + + helper_.BeforeStateChangeAction(); + helper_.ManifestUpdateDisplayMinimal("SiteA"); + helper_.AfterStateChangeAction(); +} +#endif + +// TODO(jarrydg@): Fix the following test failure/crash. +#if false +IN_PROC_BROWSER_TEST_F( WebAppIntegrationBrowserTest, - WebAppIntegration_InstMenuOptionSiteA_WindowCreated_SetOpenTabSiteA_NavSiteA_InstIconShown) { + WebAppIntegration_InstMenuOptionSiteA_WindowCreated_SetOpenTabSiteA_NavSiteA_InstIconShown) +{ // Test contents are generated by script. Please do not modify! // See `chrome/test/webapps/README.md` for more info. // Sheriffs: Disabling this test is supported. - InstallMenuOption("SiteA"); - CheckWindowCreated(); - SetOpenInTab("SiteA"); - NavigateBrowser("SiteA"); - CheckInstallIconShown(); -} + helper_.BeforeStateChangeAction(); + helper_.InstallMenuOption("SiteA"); + helper_.AfterStateChangeAction(); -IN_PROC_BROWSER_TEST( + helper_.BeforeStateCheckAction(); + helper_.CheckWindowCreated(); + helper_.AfterStateCheckAction(); + + helper_.BeforeStateChangeAction(); + helper_.SetOpenInTab("SiteA"); + helper_.AfterStateChangeAction(); + + helper_.BeforeStateChangeAction(); + helper_.NavigateBrowser("SiteA"); + helper_.AfterStateChangeAction(); + + helper_.BeforeStateCheckAction(); + helper_.CheckInstallIconShown(); + helper_.AfterStateCheckAction(); +} +#endif + +// TODO(jarrydg@): Fix the following test failure/crash. +#if false +IN_PROC_BROWSER_TEST_F( WebAppIntegrationBrowserTest, - WebAppIntegration_InstMenuOptionSiteA_WindowCreated_NavSiteAFoo_InstIconNotShown_LaunchIconShown) { + WebAppIntegration_InstMenuOptionSiteA_WindowCreated_NavSiteAFoo_InstIconNotShown_LaunchIconShown) +{ // Test contents are generated by script. Please do not modify! // See `chrome/test/webapps/README.md` for more info. // Sheriffs: Disabling this test is supported. - InstallMenuOption("SiteA"); - CheckWindowCreated(); - NavigateBrowser("SiteAFoo"); - CheckInstallIconNotShown(); - CheckLaunchIconShown(); -} + helper_.BeforeStateChangeAction(); + helper_.InstallMenuOption("SiteA"); + helper_.AfterStateChangeAction(); -IN_PROC_BROWSER_TEST( - WebAppIntegrationBrowserTest, - WebAppIntegration_InstMenuOptionSiteA_WindowCreated_InstPlcyWinShctSiteA_UninstallPlcySiteA) { + helper_.BeforeStateCheckAction(); + helper_.CheckWindowCreated(); + helper_.AfterStateCheckAction(); + + helper_.BeforeStateChangeAction(); + helper_.NavigateBrowser("SiteAFoo"); + helper_.AfterStateChangeAction(); + + helper_.BeforeStateCheckAction(); + helper_.CheckInstallIconNotShown(); + helper_.AfterStateCheckAction(); + + helper_.BeforeStateCheckAction(); + helper_.CheckLaunchIconShown(); + helper_.AfterStateCheckAction(); +} +#endif + +// TODO(jarrydg@): Fix the following test failure/crash. +#if false +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTest, + WebAppIntegration_InstMenuOptionSiteA_WindowCreated_InstPlcyWinShctSiteA_UninstallPlcySiteA) +{ // Test contents are generated by script. Please do not modify! // See `chrome/test/webapps/README.md` for more info. // Sheriffs: Disabling this test is supported. - InstallMenuOption("SiteA"); - CheckWindowCreated(); - InstallPolicyAppWindowedShortcut("SiteA"); - UninstallPolicyApp("SiteA"); -} + helper_.BeforeStateChangeAction(); + helper_.InstallMenuOption("SiteA"); + helper_.AfterStateChangeAction(); -IN_PROC_BROWSER_TEST( + helper_.BeforeStateCheckAction(); + helper_.CheckWindowCreated(); + helper_.AfterStateCheckAction(); + + helper_.BeforeStateChangeAction(); + helper_.InstallPolicyAppWindowedShortcut("SiteA"); + helper_.BeforeStateChangeAction(); + + helper_.BeforeStateChangeAction(); + helper_.UninstallPolicyApp("SiteA"); + helper_.AfterStateChangeAction(); +} +#endif + +IN_PROC_BROWSER_TEST_F( WebAppIntegrationBrowserTest, WebAppIntegration_InstPlcyWinShctSiteA_UninstallPlcySiteA_NotInListSiteA) { // Test contents are generated by script. Please do not modify! // See `chrome/test/webapps/README.md` for more info. // Sheriffs: Disabling this test is supported. - InstallPolicyAppWindowedShortcut("SiteA"); - UninstallPolicyApp("SiteA"); - CheckAppNotInList("SiteA"); + helper_.BeforeStateChangeAction(); + helper_.InstallPolicyAppWindowedShortcut("SiteA"); + helper_.AfterStateChangeAction(); + + helper_.BeforeStateChangeAction(); + helper_.UninstallPolicyApp("SiteA"); + helper_.AfterStateChangeAction(); + + helper_.BeforeStateCheckAction(); + helper_.CheckAppNotInList("SiteA"); + helper_.AfterStateCheckAction(); } -IN_PROC_BROWSER_TEST( +IN_PROC_BROWSER_TEST_F( WebAppIntegrationBrowserTest, WebAppIntegration_InstPlcyWinShctSiteA_NavSiteA_InstIconNotShown_LaunchIconShown) { // Test contents are generated by script. Please do not modify! // See `chrome/test/webapps/README.md` for more info. // Sheriffs: Disabling this test is supported. - InstallPolicyAppWindowedShortcut("SiteA"); - NavigateBrowser("SiteA"); - CheckInstallIconNotShown(); - CheckLaunchIconShown(); + helper_.BeforeStateChangeAction(); + helper_.InstallPolicyAppWindowedShortcut("SiteA"); + helper_.AfterStateChangeAction(); + + helper_.BeforeStateChangeAction(); + helper_.NavigateBrowser("SiteA"); + helper_.AfterStateChangeAction(); + + helper_.BeforeStateCheckAction(); + helper_.CheckInstallIconNotShown(); + helper_.AfterStateCheckAction(); + + helper_.BeforeStateCheckAction(); + helper_.CheckLaunchIconShown(); + helper_.AfterStateCheckAction(); } -IN_PROC_BROWSER_TEST(WebAppIntegrationBrowserTest, - WebAppIntegration_InstPlcyWinShctSiteA_SetOpenTabSiteA) { +IN_PROC_BROWSER_TEST_F(WebAppIntegrationBrowserTest, + WebAppIntegration_InstPlcyWinShctSiteA_SetOpenTabSiteA) { // Test contents are generated by script. Please do not modify! // See `chrome/test/webapps/README.md` for more info. // Sheriffs: Disabling this test is supported. - InstallPolicyAppWindowedShortcut("SiteA"); - SetOpenInTab("SiteA"); + helper_.BeforeStateChangeAction(); + helper_.InstallPolicyAppWindowedShortcut("SiteA"); + helper_.AfterStateChangeAction(); + + helper_.BeforeStateChangeAction(); + helper_.SetOpenInTab("SiteA"); + helper_.AfterStateChangeAction(); } -IN_PROC_BROWSER_TEST( +IN_PROC_BROWSER_TEST_F( WebAppIntegrationBrowserTest, WebAppIntegration_InstPlcyWinShctSiteA_NavSiteAFoo_InstIconNotShown_LaunchIconShown) { // Test contents are generated by script. Please do not modify! // See `chrome/test/webapps/README.md` for more info. // Sheriffs: Disabling this test is supported. - InstallPolicyAppWindowedShortcut("SiteA"); - NavigateBrowser("SiteAFoo"); - CheckInstallIconNotShown(); - CheckLaunchIconShown(); + helper_.BeforeStateChangeAction(); + helper_.InstallPolicyAppWindowedShortcut("SiteA"); + helper_.AfterStateChangeAction(); + + helper_.BeforeStateChangeAction(); + helper_.NavigateBrowser("SiteAFoo"); + helper_.AfterStateChangeAction(); + + helper_.BeforeStateCheckAction(); + helper_.CheckInstallIconNotShown(); + helper_.AfterStateCheckAction(); + + helper_.BeforeStateCheckAction(); + helper_.CheckLaunchIconShown(); + helper_.AfterStateCheckAction(); } -IN_PROC_BROWSER_TEST( +IN_PROC_BROWSER_TEST_F( WebAppIntegrationBrowserTest, WebAppIntegration_InstPlcyTabShctSiteA_UninstallPlcySiteA_NotInListSiteA_NavSiteA_InstIconShown_LaunchIconShown) { // Test contents are generated by script. Please do not modify! // See `chrome/test/webapps/README.md` for more info. // Sheriffs: Disabling this test is supported. - InstallPolicyAppTabbedShortcut("SiteA"); - UninstallPolicyApp("SiteA"); - CheckAppNotInList("SiteA"); - NavigateBrowser("SiteA"); - CheckInstallIconShown(); - CheckLaunchIconNotShown(); + helper_.BeforeStateChangeAction(); + helper_.InstallPolicyAppTabbedShortcut("SiteA"); + helper_.AfterStateChangeAction(); + + helper_.BeforeStateChangeAction(); + helper_.UninstallPolicyApp("SiteA"); + helper_.AfterStateChangeAction(); + + helper_.BeforeStateCheckAction(); + helper_.CheckAppNotInList("SiteA"); + helper_.AfterStateCheckAction(); + + helper_.BeforeStateChangeAction(); + helper_.NavigateBrowser("SiteA"); + helper_.AfterStateChangeAction(); + + helper_.BeforeStateCheckAction(); + helper_.CheckInstallIconShown(); + helper_.AfterStateCheckAction(); + + helper_.BeforeStateCheckAction(); + helper_.CheckLaunchIconNotShown(); + helper_.AfterStateCheckAction(); } -IN_PROC_BROWSER_TEST( +// TODO(jarrydg@): Fix the following test failure/crash. +#if false +IN_PROC_BROWSER_TEST_F( WebAppIntegrationBrowserTest, - WebAppIntegration_InstPlcyTabShctSiteA_InstOmniboxSiteA_WindowCreated_UninstallPlcySiteA) { + WebAppIntegration_InstPlcyTabShctSiteA_InstOmniboxSiteA_WindowCreated_UninstallPlcySiteA) +{ // Test contents are generated by script. Please do not modify! // See `chrome/test/webapps/README.md` for more info. // Sheriffs: Disabling this test is supported. - InstallPolicyAppTabbedShortcut("SiteA"); - InstallOmniboxIcon("SiteA"); - CheckWindowCreated(); - UninstallPolicyApp("SiteA"); -} + helper_.BeforeStateChangeAction(); + helper_.InstallPolicyAppTabbedShortcut("SiteA"); + helper_.AfterStateChangeAction(); -IN_PROC_BROWSER_TEST( + helper_.BeforeStateChangeAction(); + helper_.InstallOmniboxIcon("SiteA"); + helper_.AfterStateChangeAction(); + + helper_.BeforeStateCheckAction(); + helper_.CheckWindowCreated(); + helper_.AfterStateCheckAction(); + + helper_.BeforeStateChangeAction(); + helper_.UninstallPolicyApp("SiteA"); + helper_.AfterStateChangeAction(); +} +#endif + +// TODO(jarrydg@): Fix the following test failure/crash. +#if false +IN_PROC_BROWSER_TEST_F( WebAppIntegrationBrowserTest, - WebAppIntegration_InstPlcyTabShctSiteA_InstMenuOptionSiteA_WindowCreated_UninstallPlcySiteA) { + WebAppIntegration_InstPlcyTabShctSiteA_InstMenuOptionSiteA_WindowCreated_UninstallPlcySiteA) +{ // Test contents are generated by script. Please do not modify! // See `chrome/test/webapps/README.md` for more info. // Sheriffs: Disabling this test is supported. - InstallPolicyAppTabbedShortcut("SiteA"); - InstallMenuOption("SiteA"); - CheckWindowCreated(); - UninstallPolicyApp("SiteA"); -} + helper_.BeforeStateChangeAction(); + helper_.InstallPolicyAppTabbedShortcut("SiteA"); + helper_.AfterStateChangeAction(); -IN_PROC_BROWSER_TEST( + helper_.BeforeStateChangeAction(); + helper_.InstallMenuOption("SiteA"); + helper_.AfterStateChangeAction(); + + helper_.BeforeStateCheckAction(); + helper_.CheckWindowCreated(); + helper_.AfterStateCheckAction(); + + helper_.BeforeStateChangeAction(); + helper_.UninstallPolicyApp("SiteA"); + helper_.AfterStateChangeAction(); +} +#endif + +IN_PROC_BROWSER_TEST_F( WebAppIntegrationBrowserTest, WebAppIntegration_InstPlcyTabShctSiteA_NavSiteA_InstIconShown_LaunchIconShown) { // Test contents are generated by script. Please do not modify! // See `chrome/test/webapps/README.md` for more info. // Sheriffs: Disabling this test is supported. - InstallPolicyAppTabbedShortcut("SiteA"); - NavigateBrowser("SiteA"); - CheckInstallIconShown(); - CheckLaunchIconNotShown(); + helper_.BeforeStateChangeAction(); + helper_.InstallPolicyAppTabbedShortcut("SiteA"); + helper_.AfterStateChangeAction(); + + helper_.BeforeStateChangeAction(); + helper_.NavigateBrowser("SiteA"); + helper_.AfterStateChangeAction(); + + helper_.BeforeStateCheckAction(); + helper_.CheckInstallIconShown(); + helper_.AfterStateCheckAction(); + + helper_.BeforeStateCheckAction(); + helper_.CheckLaunchIconNotShown(); + helper_.AfterStateCheckAction(); } -IN_PROC_BROWSER_TEST( +IN_PROC_BROWSER_TEST_F( WebAppIntegrationBrowserTest, WebAppIntegration_InstPlcyTabShctSiteA_SetOpenWindowSiteA) { // Test contents are generated by script. Please do not modify! // See `chrome/test/webapps/README.md` for more info. // Sheriffs: Disabling this test is supported. - InstallPolicyAppTabbedShortcut("SiteA"); - SetOpenInWindow("SiteA"); + helper_.BeforeStateChangeAction(); + helper_.InstallPolicyAppTabbedShortcut("SiteA"); + helper_.AfterStateChangeAction(); + + helper_.BeforeStateChangeAction(); + helper_.SetOpenInWindow("SiteA"); + helper_.AfterStateChangeAction(); } -IN_PROC_BROWSER_TEST( +// TODO(jarrydg@): Fix the following test failure/crash. +#if false +IN_PROC_BROWSER_TEST_F( WebAppIntegrationBrowserTest, - WebAppIntegration_InstPlcyTabShctSiteC_NavSiteC_InstIconNotShown_LaunchIconShown) { + WebAppIntegration_InstPlcyTabShctSiteC_NavSiteC_InstIconNotShown_LaunchIconShown) +{ // Test contents are generated by script. Please do not modify! // See `chrome/test/webapps/README.md` for more info. // Sheriffs: Disabling this test is supported. - InstallPolicyAppTabbedShortcut("SiteC"); - NavigateBrowser("SiteC"); - CheckInstallIconNotShown(); - CheckLaunchIconNotShown(); -} + helper_.BeforeStateChangeAction(); + helper_.InstallPolicyAppTabbedShortcut("SiteC"); + helper_.AfterStateChangeAction(); -IN_PROC_BROWSER_TEST( + helper_.BeforeStateChangeAction(); + helper_.NavigateBrowser("SiteC"); + helper_.AfterStateChangeAction(); + + helper_.BeforeStateCheckAction(); + helper_.CheckInstallIconNotShown(); + helper_.AfterStateCheckAction(); + + helper_.BeforeStateCheckAction(); + helper_.CheckLaunchIconNotShown(); + helper_.AfterStateCheckAction(); +} +#endif + +IN_PROC_BROWSER_TEST_F( WebAppIntegrationBrowserTest, WebAppIntegration_InstPlcyWinShctSiteC_NavSiteC_InstIconNotShown_LaunchIconShown) { // Test contents are generated by script. Please do not modify! // See `chrome/test/webapps/README.md` for more info. // Sheriffs: Disabling this test is supported. - InstallPolicyAppWindowedShortcut("SiteC"); - NavigateBrowser("SiteC"); - CheckInstallIconNotShown(); - CheckLaunchIconShown(); + helper_.BeforeStateChangeAction(); + helper_.InstallPolicyAppWindowedShortcut("SiteC"); + helper_.AfterStateChangeAction(); + + helper_.BeforeStateChangeAction(); + helper_.NavigateBrowser("SiteC"); + helper_.AfterStateChangeAction(); + + helper_.BeforeStateCheckAction(); + helper_.CheckInstallIconNotShown(); + helper_.AfterStateCheckAction(); + + helper_.BeforeStateCheckAction(); + helper_.CheckLaunchIconShown(); + helper_.AfterStateCheckAction(); } -IN_PROC_BROWSER_TEST(WebAppIntegrationBrowserTest, - WebAppIntegration_InstOmniboxSiteAFoo_ClosePWA) { +IN_PROC_BROWSER_TEST_F(WebAppIntegrationBrowserTest, + WebAppIntegration_InstOmniboxSiteAFoo_ClosePWA) { // Test contents are generated by script. Please do not modify! // See `chrome/test/webapps/README.md` for more info. // Sheriffs: Disabling this test is supported. - InstallOmniboxIcon("SiteAFoo"); - ClosePwa(); + helper_.BeforeStateChangeAction(); + helper_.InstallOmniboxIcon("SiteAFoo"); + helper_.AfterStateChangeAction(); + + helper_.BeforeStateChangeAction(); + helper_.ClosePwa(); + helper_.AfterStateChangeAction(); } -IN_PROC_BROWSER_TEST( +IN_PROC_BROWSER_TEST_F( WebAppIntegrationBrowserTest, WebAppIntegration_InstOmniboxSiteAFoo_NavSiteABar_InstIconShown_LaunchIconShown) { // Test contents are generated by script. Please do not modify! // See `chrome/test/webapps/README.md` for more info. // Sheriffs: Disabling this test is supported. - InstallOmniboxIcon("SiteAFoo"); - NavigateBrowser("SiteABar"); - CheckInstallIconShown(); - CheckLaunchIconNotShown(); + helper_.BeforeStateChangeAction(); + helper_.InstallOmniboxIcon("SiteAFoo"); + helper_.AfterStateChangeAction(); + + helper_.BeforeStateChangeAction(); + helper_.NavigateBrowser("SiteABar"); + helper_.AfterStateChangeAction(); + + helper_.BeforeStateCheckAction(); + helper_.CheckInstallIconShown(); + helper_.AfterStateCheckAction(); + + helper_.BeforeStateCheckAction(); + helper_.CheckLaunchIconNotShown(); + helper_.AfterStateCheckAction(); } -IN_PROC_BROWSER_TEST(WebAppIntegrationBrowserTest, - WebAppIntegration_InstMenuOptionSiteAFoo_ClosePWA) { +// TODO(jarrydg@): Fix the following test failure/crash. +#if false +IN_PROC_BROWSER_TEST_F(WebAppIntegrationBrowserTest, + WebAppIntegration_InstMenuOptionSiteAFoo_ClosePWA) { // Test contents are generated by script. Please do not modify! // See `chrome/test/webapps/README.md` for more info. // Sheriffs: Disabling this test is supported. - InstallMenuOption("SiteAFoo"); - ClosePwa(); -} + helper_.BeforeStateChangeAction(); + helper_.InstallMenuOption("SiteAFoo"); + helper_.AfterStateChangeAction(); -IN_PROC_BROWSER_TEST( + helper_.BeforeStateChangeAction(); + helper_.ClosePwa(); + helper_.AfterStateChangeAction(); +} +#endif + +// TODO(jarrydg@): Fix the following test failure/crash. +#if false +IN_PROC_BROWSER_TEST_F( WebAppIntegrationBrowserTest, - WebAppIntegration_InstMenuOptionSiteAFoo_NavSiteABar_InstIconShown_LaunchIconShown) { + WebAppIntegration_InstMenuOptionSiteAFoo_NavSiteABar_InstIconShown_LaunchIconShown) +{ // Test contents are generated by script. Please do not modify! // See `chrome/test/webapps/README.md` for more info. // Sheriffs: Disabling this test is supported. - InstallMenuOption("SiteAFoo"); - NavigateBrowser("SiteABar"); - CheckInstallIconShown(); - CheckLaunchIconNotShown(); -} + helper_.BeforeStateChangeAction(); + helper_.InstallMenuOption("SiteAFoo"); + helper_.AfterStateChangeAction(); -IN_PROC_BROWSER_TEST( + helper_.BeforeStateChangeAction(); + helper_.NavigateBrowser("SiteABar"); + helper_.AfterStateChangeAction(); + + helper_.BeforeStateCheckAction(); + helper_.CheckInstallIconShown(); + helper_.AfterStateCheckAction(); + + helper_.BeforeStateCheckAction(); + helper_.CheckLaunchIconNotShown(); + helper_.AfterStateCheckAction(); +} +#endif + +IN_PROC_BROWSER_TEST_F( WebAppIntegrationBrowserTest, WebAppIntegration_InstPlcyWinShctSiteAFoo_NavSiteABar_InstIconShown_LaunchIconShown) { // Test contents are generated by script. Please do not modify! // See `chrome/test/webapps/README.md` for more info. // Sheriffs: Disabling this test is supported. - InstallPolicyAppWindowedShortcut("SiteAFoo"); - NavigateBrowser("SiteABar"); - CheckInstallIconShown(); - CheckLaunchIconNotShown(); + helper_.BeforeStateChangeAction(); + helper_.InstallPolicyAppWindowedShortcut("SiteAFoo"); + helper_.AfterStateChangeAction(); + + helper_.BeforeStateChangeAction(); + helper_.NavigateBrowser("SiteABar"); + helper_.AfterStateChangeAction(); + + helper_.BeforeStateCheckAction(); + helper_.CheckInstallIconShown(); + helper_.AfterStateCheckAction(); + + helper_.BeforeStateCheckAction(); + helper_.CheckLaunchIconNotShown(); + helper_.AfterStateCheckAction(); } -IN_PROC_BROWSER_TEST(WebAppIntegrationBrowserTest, - WebAppIntegration_NavSiteAFoo_InstIconShown) { +IN_PROC_BROWSER_TEST_F(WebAppIntegrationBrowserTest, + WebAppIntegration_NavSiteAFoo_InstIconShown) { // Test contents are generated by script. Please do not modify! // See `chrome/test/webapps/README.md` for more info. // Sheriffs: Disabling this test is supported. - NavigateBrowser("SiteAFoo"); - CheckInstallIconShown(); + helper_.BeforeStateChangeAction(); + helper_.NavigateBrowser("SiteAFoo"); + helper_.AfterStateChangeAction(); + + helper_.BeforeStateCheckAction(); + helper_.CheckInstallIconShown(); + helper_.AfterStateCheckAction(); } -IN_PROC_BROWSER_TEST(WebAppIntegrationBrowserTest, - WebAppIntegration_NavSiteA_NotInListSiteA) { +IN_PROC_BROWSER_TEST_F(WebAppIntegrationBrowserTest, + WebAppIntegration_NavSiteA_NotInListSiteA) { // Test contents are generated by script. Please do not modify! // See `chrome/test/webapps/README.md` for more info. // Sheriffs: Disabling this test is supported. - NavigateBrowser("SiteA"); - CheckAppNotInList("SiteA"); + helper_.BeforeStateChangeAction(); + helper_.NavigateBrowser("SiteA"); + helper_.AfterStateChangeAction(); + + helper_.BeforeStateCheckAction(); + helper_.CheckAppNotInList("SiteA"); + helper_.AfterStateCheckAction(); } -IN_PROC_BROWSER_TEST( +IN_PROC_BROWSER_TEST_F( WebAppIntegrationBrowserTest, WebAppIntegration_NavSiteC_NotInListSiteA_InstIconNotShown) { // Test contents are generated by script. Please do not modify! // See `chrome/test/webapps/README.md` for more info. // Sheriffs: Disabling this test is supported. - NavigateBrowser("SiteC"); - CheckAppNotInList("SiteA"); - CheckInstallIconNotShown(); + helper_.BeforeStateChangeAction(); + helper_.NavigateBrowser("SiteC"); + helper_.AfterStateChangeAction(); + + helper_.BeforeStateCheckAction(); + helper_.CheckAppNotInList("SiteA"); + helper_.AfterStateCheckAction(); + + helper_.BeforeStateCheckAction(); + helper_.CheckInstallIconNotShown(); + helper_.AfterStateCheckAction(); } -IN_PROC_BROWSERTEST_F(WebAppIntegrationBrowserTest, WebAppIntegration_InstOmniboxSiteA_WindowCreated_NavSiteB_InstIconShown_LaunchIconShown){ +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTest, + WebAppIntegration_InstOmniboxSiteA_WindowCreated_NavSiteB_InstIconShown_LaunchIconShown) { // Test contents are generated by script. Please do not modify! // See `chrome/test/webapps/README.md` for more info. // Sheriffs: Disabling this test is supported. - InstallOmniboxIcon("SiteA"); - CheckWindowCreated(); - NavigateBrowser("SiteB"); - CheckInstallIconShown(); - CheckLaunchIconNotShown(); + helper_.BeforeStateChangeAction(); + helper_.InstallOmniboxIcon("SiteA"); + helper_.AfterStateChangeAction(); + + helper_.BeforeStateCheckAction(); + helper_.CheckWindowCreated(); + helper_.AfterStateCheckAction(); + + helper_.BeforeStateChangeAction(); + helper_.NavigateBrowser("SiteB"); + helper_.AfterStateChangeAction(); + + helper_.BeforeStateCheckAction(); + helper_.CheckInstallIconShown(); + helper_.AfterStateCheckAction(); + + helper_.BeforeStateCheckAction(); + helper_.CheckLaunchIconNotShown(); + helper_.AfterStateCheckAction(); } -IN_PROC_BROWSERTEST_F(WebAppIntegrationBrowserTest, WebAppIntegration_InstMenuOptionSiteA_WindowCreated_NavSiteB_InstIconShown_LaunchIconShown){ +// TODO(jarrydg@): Fix the following test failure/crash. +#if false +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTest, + WebAppIntegration_InstMenuOptionSiteA_WindowCreated_NavSiteB_InstIconShown_LaunchIconShown) +{ // Test contents are generated by script. Please do not modify! // See `chrome/test/webapps/README.md` for more info. // Sheriffs: Disabling this test is supported. - InstallMenuOption("SiteA"); - CheckWindowCreated(); - NavigateBrowser("SiteB"); - CheckInstallIconShown(); - CheckLaunchIconNotShown(); -} + helper_.BeforeStateChangeAction(); + helper_.InstallMenuOption("SiteA"); + helper_.AfterStateChangeAction(); -IN_PROC_BROWSERTEST_F(WebAppIntegrationBrowserTest, WebAppIntegration_InstOmniboxSiteB_NavSiteB_LaunchIconShown){ + helper_.BeforeStateCheckAction(); + helper_.CheckWindowCreated(); + helper_.AfterStateCheckAction(); + + helper_.BeforeStateChangeAction(); + helper_.NavigateBrowser("SiteB"); + helper_.AfterStateChangeAction(); + + helper_.BeforeStateCheckAction(); + helper_.CheckInstallIconShown(); + helper_.AfterStateCheckAction(); + + helper_.BeforeStateCheckAction(); + helper_.CheckLaunchIconNotShown(); + helper_.AfterStateCheckAction(); +} +#endif + +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTest, + WebAppIntegration_InstOmniboxSiteB_NavSiteB_LaunchIconShown) { // Test contents are generated by script. Please do not modify! // See `chrome/test/webapps/README.md` for more info. // Sheriffs: Disabling this test is supported. - InstallOmniboxIcon("SiteB"); - NavigateBrowser("SiteB"); - CheckLaunchIconShown(); + helper_.BeforeStateChangeAction(); + helper_.InstallOmniboxIcon("SiteB"); + helper_.AfterStateChangeAction(); + + helper_.BeforeStateChangeAction(); + helper_.NavigateBrowser("SiteB"); + helper_.AfterStateChangeAction(); + + helper_.BeforeStateCheckAction(); + helper_.CheckLaunchIconShown(); + helper_.AfterStateCheckAction(); } -IN_PROC_BROWSERTEST_F(WebAppIntegrationBrowserTest, WebAppIntegration_InstPlcyWinShctSiteB_NavSiteB_LaunchIconShown){ +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTest, + WebAppIntegration_InstPlcyWinShctSiteB_NavSiteB_LaunchIconShown) { // Test contents are generated by script. Please do not modify! // See `chrome/test/webapps/README.md` for more info. // Sheriffs: Disabling this test is supported. - InstallPolicyAppWindowedShortcut("SiteB"); - NavigateBrowser("SiteB"); - CheckLaunchIconShown(); + helper_.BeforeStateChangeAction(); + helper_.InstallPolicyAppWindowedShortcut("SiteB"); + helper_.AfterStateChangeAction(); + + helper_.BeforeStateChangeAction(); + helper_.NavigateBrowser("SiteB"); + helper_.AfterStateChangeAction(); + + helper_.BeforeStateCheckAction(); + helper_.CheckLaunchIconShown(); + helper_.AfterStateCheckAction(); } -IN_PROC_BROWSERTEST_F(WebAppIntegrationBrowserTest, WebAppIntegration_InstMenuOptionSiteB_NavSiteB_LaunchIconShown){ +// TODO(jarrydg@): Fix the following test failure/crash. +#if false +IN_PROC_BROWSER_TEST_F(WebAppIntegrationBrowserTest, + WebAppIntegration_InstMenuOptionSiteB_NavSiteB_LaunchIconShown) { // Test contents are generated by script. Please do not modify! // See `chrome/test/webapps/README.md` for more info. // Sheriffs: Disabling this test is supported. - InstallMenuOption("SiteB"); - NavigateBrowser("SiteB"); - CheckLaunchIconShown(); -} + helper_.BeforeStateChangeAction(); + helper_.InstallMenuOption("SiteB"); + helper_.AfterStateChangeAction(); -} // namespace + helper_.BeforeStateChangeAction(); + helper_.NavigateBrowser("SiteB"); + helper_.AfterStateChangeAction(); + + helper_.BeforeStateCheckAction(); + helper_.CheckLaunchIconShown(); + helper_.AfterStateCheckAction(); +} #endif } // namespace web_app
diff --git a/chrome/browser/ui/views/web_apps/web_app_integration_browsertest_base.cc b/chrome/browser/ui/views/web_apps/web_app_integration_browsertest_base.cc index 64dfaa9..8db0604 100644 --- a/chrome/browser/ui/views/web_apps/web_app_integration_browsertest_base.cc +++ b/chrome/browser/ui/views/web_apps/web_app_integration_browsertest_base.cc
@@ -58,7 +58,6 @@ namespace { -constexpr char kExpectationsFilename[] = "TestExpectations"; constexpr char kPlatformName[] = #if BUILDFLAG(IS_CHROMEOS_ASH) || BUILDFLAG(IS_CHROMEOS_LACROS) "ChromeOS"; @@ -74,11 +73,12 @@ #error "Unknown platform" #endif // BUILDFLAG(IS_CHROMEOS_ASH) -// Command-line switch that overrides test case input. Takes a comma -// separated list of testing actions. This aids in development of tests -// by allowing one to run a single test at a time, and avoid running every -// test case in the suite. -const char kWebAppIntegrationTestCase[] = "web-app-integration-test-case"; +const base::flat_map<std::string, std::string> scope_to_path = { + {"SiteA", "site_a"}, + {"SiteB", "site_b"}, + {"SiteC", "site_c"}, + {"SiteAFoo", "site_a/foo"}, + {"SiteABar", "site_a/bar"}}; class TestAppLauncherHandler : public AppLauncherHandler { public: @@ -92,29 +92,6 @@ } }; -bool IsStateCheckAction(const std::string& action) { - return base::StartsWith(action, "check_"); -} - -std::string GetCommandLineTestOverride() { - base::CommandLine* command_line = base::CommandLine::ForCurrentProcess(); - if (command_line->HasSwitch(kWebAppIntegrationTestCase)) { - return command_line->GetSwitchValueASCII(kWebAppIntegrationTestCase); - } - return ""; -} - -std::string StripAllWhitespace(std::string line) { - std::string output; - output.reserve(line.size()); - for (const char& c : line) { - if (!isspace(c)) { - output += c; - } - } - return output; -} - } // anonymous namespace BrowserState::BrowserState( @@ -201,14 +178,14 @@ absl::optional<AppState> WebAppIntegrationBrowserTestBase::GetAppByScope( StateSnapshot* state_snapshot, Profile* profile, - const std::string& action_param) { + const std::string& action_mode) { absl::optional<ProfileState> profile_state = GetStateForProfile(state_snapshot, profile); if (!profile_state) { return absl::nullopt; } - GURL scope = GetURLForScope(action_param); + GURL scope = GetURLForScope(action_mode); auto it = std::find_if(profile_state->apps.begin(), profile_state->apps.end(), [scope](std::pair<web_app::AppId, AppState>& app_entry) { @@ -287,262 +264,47 @@ void WebAppIntegrationBrowserTestBase::SetUpOnMainThread() { os_hooks_suppress_ = OsIntegrationManager::ScopedSuppressOsHooksForTesting(); if (!delegate_->IsSyncTest()) { + observation_.Reset(); observation_.Observe(&GetProvider()->registrar()); } } -std::vector<std::string> -WebAppIntegrationBrowserTestBase::BuildAllPlatformTestCaseSet( - base::FilePath test_data_dir, - const std::string& test_case_file_name) { - std::vector<std::string> test_cases_all = - ReadTestInputFile(test_data_dir, test_case_file_name); - std::sort(test_cases_all.begin(), test_cases_all.end()); +void WebAppIntegrationBrowserTestBase::TearDownOnMainThread() { + observation_.Reset(); +} - std::vector<std::string> ignored_cases = - GetPlatformIgnoredTests(test_data_dir, kExpectationsFilename); - std::sort(ignored_cases.begin(), ignored_cases.end()); +void WebAppIntegrationBrowserTestBase::BeforeStateChangeAction() { + if (after_state_change_action_state_) { + before_state_change_action_state_ = + std::move(after_state_change_action_state_); + } else { + before_state_change_action_state_ = + std::make_unique<StateSnapshot>(ConstructStateSnapshot()); + } +} - std::vector<std::string> final_tests(test_cases_all.size()); - auto iter = std::set_difference(test_cases_all.begin(), test_cases_all.end(), - ignored_cases.begin(), ignored_cases.end(), - final_tests.begin()); - final_tests.resize(iter - final_tests.begin()); - return final_tests; +void WebAppIntegrationBrowserTestBase::AfterStateChangeAction() { + after_state_change_action_state_ = + std::make_unique<StateSnapshot>(ConstructStateSnapshot()); + MaybeWaitForManifestUpdates(profile()); +} + +void WebAppIntegrationBrowserTestBase::BeforeStateCheckAction() { + DCHECK(after_state_change_action_state_); +} + +void WebAppIntegrationBrowserTestBase::AfterStateCheckAction() { + DCHECK(!after_state_change_action_state_ || + *after_state_change_action_state_ == ConstructStateSnapshot()); } // State change actions implemented before state check actions. Implemented in // alphabetical order. -void WebAppIntegrationBrowserTestBase::ExecuteAction( - const std::string& action_string) { - // Useful for sheriffs and developers in test failures since this test - // framework differs from that of traditional browser tests. - LOG(INFO) << base::StringPrintf("Current testing action: %s", - action_string.c_str()); - - std::string action_param; - RE2::PartialMatch(action_string, "(site_(a_foo|a_bar|a|b|c))", &action_param); - if (base::EndsWith(action_param, "_foo")) { - action_param = "site_a/foo"; - } else if (base::EndsWith(action_param, "_bar")) { - action_param = "site_a/bar"; - } - // Add 1 to `param_length` if a param is present to strip the preceding - // underscore. - const int param_length = - action_param.length() ? action_param.length() + 1 : 0; - std::string action_base = - action_string.substr(0, action_string.length() - param_length); - - if (!IsStateCheckAction(action_base)) { - before_state_change_action_state_ = - std::move(after_state_change_action_state_); - } - - if (action_base == "add_policy_app_internal_tabbed") { - AddPolicyAppInternal(action_param, - base::Value(kDefaultLaunchContainerTabValue), - /*create_shortcut=*/true); - } else if (action_base == "add_policy_app_internal_tabbed_no_shortcut") { - AddPolicyAppInternal(action_param, - base::Value(kDefaultLaunchContainerTabValue), - /*create_shortcut=*/false); - } else if (action_base == "add_policy_app_internal_windowed") { - AddPolicyAppInternal(action_param, - base::Value(kDefaultLaunchContainerWindowValue), - /*create_shortcut=*/true); - } else if (action_base == "add_policy_app_internal_windowed_no_shortcut") { - AddPolicyAppInternal(action_param, - base::Value(kDefaultLaunchContainerWindowValue), - /*create_shortcut=*/false); - } else if (action_base == "close_pwa") { - ClosePWA(); - } else if (action_base == "install_create_shortcut_tabbed") { - InstallCreateShortcut(/*open_in_window=*/false); - } else if (action_base == "install_create_shortcut_windowed") { - InstallCreateShortcut(/*open_in_window=*/true); - } else if (action_base == "install_internal_windowed") { - InstallOmnibox(); - } else if (action_base == "install_locally_internal") { - InstallLocally(); - } else if (action_base == "install_omnibox") { - InstallOmnibox(); - } else if (action_base == "launch_internal") { - LaunchInternal(action_param); - } else if (action_base == "list_apps_internal") { - ListAppsInternal(); - } else if (action_base == "manifest_update_display_minimal") { - ManifestUpdateDisplay(action_param, blink::mojom::DisplayMode::kMinimalUi); - } else if (action_base == "navigate_browser_in_scope") { - NavigateTabbedBrowserToSite(GetInScopeURL(action_param)); - } else if (action_base == "navigate_installable") { - NavigateTabbedBrowserToSite(GetInstallableAppURL(action_param)); - } else if (action_base == "navigate_not_installable") { - NavigateTabbedBrowserToSite(GetNonInstallableAppURL()); - } else if (action_base == "set_open_in_tab_internal") { - SetOpenInTabInternal(action_param); - } else if (action_base == "set_open_in_window_internal") { - SetOpenInWindowInternal(action_param); - } else if (action_base == "switch_profile_clients") { - SwitchProfileClients(); - } else if (action_base == "sync_turned_off") { - TurnSyncOff(); - } else if (action_base == "sync_turned_on") { - TurnSyncOn(); - } else if (action_base == "uninstall_from_menu") { - UninstallFromMenu(); - } else if (action_base == "uninstall_internal") { - UninstallInternal(action_param); - } else if (action_base == "uninstall_policy_app") { - UninstallPolicyApp(action_param.length() ? action_param : "site_a"); - } else if (action_base == "user_signin_internal") { - UserSigninInternal(); - } else if (action_base == "check_app_locally_installed_internal") { - CheckAppLocallyInstalledInternal(); - } else if (action_base == "check_app_not_in_list") { - CheckAppNotInList(action_param); - } else if (action_base == "check_app_not_locally_installed_internal") { - CheckAppNotLocallyInstalledInternal(); - } else if (action_base == "check_installable") { - CheckInstallable(); - } else if (action_base == "check_install_icon_shown") { - CheckInstallIconShown(); - } else if (action_base == "check_install_icon_not_shown") { - CheckInstallIconNotShown(); - } else if (action_base == "check_launch_icon_shown") { - CheckLaunchIconShown(); - } else if (action_base == "check_launch_icon_not_shown") { - CheckLaunchIconNotShown(); - } else if (action_base == "check_manifest_display_mode_browser_internal") { - CheckManifestDisplayModeInternal(DisplayMode::kBrowser); - } else if (action_base == "check_manifest_display_mode_minimal_internal") { - CheckManifestDisplayModeInternal(DisplayMode::kMinimalUi); - } else if (action_base == "check_manifest_display_mode_standalone_internal") { - CheckManifestDisplayModeInternal(DisplayMode::kStandalone); - } else if (action_base == "check_no_crash") { - } else if (action_base == "check_tab_created") { - CheckTabCreated(); - } else if (action_base == "check_user_display_mode_browser_internal") { - CheckUserDisplayModeInternal(DisplayMode::kBrowser); - } else if (action_base == "check_user_display_mode_standalone_internal") { - CheckUserDisplayModeInternal(DisplayMode::kStandalone); - } else if (action_base == "check_no_crash") { - } else if (action_base == "check_tab_created") { - CheckTabCreated(); - } else if (action_base == "check_window_closed") { - CheckWindowClosed(); - } else if (action_base == "check_window_created") { - CheckWindowCreated(); - } else if (action_string == "check_window_display_minimal") { - CheckWindowDisplayMode(blink::mojom::DisplayMode::kMinimalUi); - } else if (action_string == "check_window_display_standalone") { - CheckWindowDisplayMode(blink::mojom::DisplayMode::kStandalone); - } else { - FAIL() << "Unimplemented action: " << action_base; - } - - if (IsStateCheckAction(action_base)) { - DCHECK(!after_state_change_action_state_ || - *after_state_change_action_state_ == ConstructStateSnapshot()); - } else { - after_state_change_action_state_ = - std::make_unique<StateSnapshot>(ConstructStateSnapshot()); - MaybeWaitForManifestUpdates(profile()); - } -} - -std::vector<std::string> -WebAppIntegrationBrowserTestBase::GetPlatformIgnoredTests( - base::FilePath test_data_dir, - const std::string& file_name) { - base::FilePath file = GetTestFilePath(test_data_dir, file_name); - std::string contents; - std::vector<std::string> platform_expectations; - if (!base::ReadFileToString(file, &contents)) { - return platform_expectations; - } - - std::vector<std::string> file_lines = base::SplitString( - contents, "\n", base::TRIM_WHITESPACE, base::SPLIT_WANT_NONEMPTY); - for (const auto& line : file_lines) { - if (line[0] == '#') { - continue; - } - - std::string platform; - std::string expectation; - std::string test_case; - RE2::FullMatch( - line, "crbug.com/\\d* \\[ (\\w*) \\] \\[ (\\w*) \\] ([\\w*,\\s*]*)", - &platform, &expectation, &test_case); - if (platform == kPlatformName) { - if (expectation == "Skip") { - platform_expectations.push_back(StripAllWhitespace(test_case)); - } else { - NOTREACHED() << "Unsupported expectation " << expectation; - } - } - } - return platform_expectations; -} - -base::FilePath WebAppIntegrationBrowserTestBase::GetTestFilePath( - base::FilePath test_data_dir, - const std::string& file_name) { - return test_data_dir.AppendASCII(file_name); -} - -void WebAppIntegrationBrowserTestBase::ParseParams(std::string action_strings) { - // Useful for debugging since all tests are run in a single parameterized - // test. - testing_actions_ = base::SplitString( - action_strings, ",", base::TRIM_WHITESPACE, base::SPLIT_WANT_NONEMPTY); -} - -std::vector<std::string> WebAppIntegrationBrowserTestBase::ReadTestInputFile( - base::FilePath test_data_dir, - const std::string& file_name) { - std::vector<std::string> test_cases; - std::string command_line_test_case = GetCommandLineTestOverride(); - if (!command_line_test_case.empty()) { - test_cases.push_back(StripAllWhitespace(command_line_test_case)); - return test_cases; - } - - base::FilePath file = GetTestFilePath(test_data_dir, file_name); - std::string contents; - if (!base::ReadFileToString(file, &contents)) { - return test_cases; - } - - std::vector<std::string> file_lines = base::SplitString( - contents, "\n", base::TRIM_WHITESPACE, base::SPLIT_WANT_NONEMPTY); - for (const auto& line : file_lines) { - if (line[0] == '#') { - continue; - } - - if (line.find('|') == std::string::npos) { - test_cases.push_back(StripAllWhitespace(line)); - continue; - } - - std::vector<std::string> platforms_and_test = base::SplitString( - line, "|", base::TRIM_WHITESPACE, base::SPLIT_WANT_NONEMPTY); - if (platforms_and_test[0].find(kPlatformName) != std::string::npos) { - test_cases.push_back(StripAllWhitespace(platforms_and_test[1])); - } - } - - return test_cases; -} - -// State Change Actions -void WebAppIntegrationBrowserTestBase::AddPolicyAppInternal( - const std::string& action_param, +void WebAppIntegrationBrowserTestBase::InstallPolicyAppInternal( + const std::string& action_mode, base::Value default_launch_container, const bool create_shortcut) { - GURL url = GetInstallableAppURL(action_param); + GURL url = GetInstallableAppURL(action_mode); auto* web_app_registrar = WebAppProvider::Get(profile())->registrar().AsWebAppRegistrar(); base::RunLoop run_loop; @@ -570,19 +332,33 @@ run_loop.Run(); } -void WebAppIntegrationBrowserTestBase::ClosePWA() { +void WebAppIntegrationBrowserTestBase::ClosePwa() { DCHECK(app_browser_); app_browser_->window()->Close(); ui_test_utils::WaitForBrowserToClose(app_browser_); } -void WebAppIntegrationBrowserTestBase::InstallCreateShortcut( - bool open_in_window) { +void WebAppIntegrationBrowserTestBase::InstallCreateShortcutTabbed( + const std::string& action_scope) { + MaybeNavigateTabbedBrowserInScope(action_scope); + InstallCreateShortcut(/*open_in_window=*/false); +} + +void WebAppIntegrationBrowserTestBase::InstallCreateShortcutWindowed( + const std::string& action_scope) { + MaybeNavigateTabbedBrowserInScope(action_scope); + InstallCreateShortcut(/*open_in_window=*/true); +} + +void WebAppIntegrationBrowserTestBase::InstallMenuOption( + const std::string& action_scope) { + MaybeNavigateTabbedBrowserInScope(action_scope); chrome::SetAutoAcceptWebAppDialogForTesting( /*auto_accept=*/true, - /*auto_open_in_window=*/open_in_window); + /*auto_open_in_window=*/true); + chrome::SetAutoAcceptPWAInstallConfirmationForTesting(/*auto_accept=*/true); WebAppInstallObserver observer(profile()); - CHECK(chrome::ExecuteCommand(browser(), IDC_CREATE_SHORTCUT)); + CHECK(chrome::ExecuteCommand(browser(), IDC_INSTALL_PWA)); active_app_id_ = observer.AwaitNextInstall(); chrome::SetAutoAcceptWebAppDialogForTesting(false, false); } @@ -608,7 +384,9 @@ run_loop.Run(); } -web_app::AppId WebAppIntegrationBrowserTestBase::InstallOmnibox() { +void WebAppIntegrationBrowserTestBase::InstallOmniboxIcon( + const std::string& action_scope) { + MaybeNavigateTabbedBrowserInScope(action_scope); chrome::SetAutoAcceptPWAInstallConfirmationForTesting(true); web_app::AppId app_id; @@ -620,7 +398,7 @@ run_loop.Quit(); })); - DCHECK(pwa_install_view()->GetVisible()); + ASSERT_TRUE(pwa_install_view()->GetVisible()); pwa_install_view()->ExecuteForTesting(); run_loop.Run(); @@ -630,16 +408,42 @@ auto* browser_list = BrowserList::GetInstance(); app_browser_ = browser_list->GetLastActive(); DCHECK(AppBrowserController::IsWebApp(app_browser_)); +} - return app_id; +void WebAppIntegrationBrowserTestBase::InstallPolicyAppTabbedNoShortcut( + const std::string& action_mode) { + InstallPolicyAppInternal(action_mode, + base::Value(kDefaultLaunchContainerTabValue), + /*create_shortcut=*/false); +} + +void WebAppIntegrationBrowserTestBase::InstallPolicyAppTabbedShortcut( + const std::string& action_mode) { + InstallPolicyAppInternal(action_mode, + base::Value(kDefaultLaunchContainerTabValue), + /*create_shortcut=*/true); +} + +void WebAppIntegrationBrowserTestBase::InstallPolicyAppWindowedNoShortcut( + const std::string& action_mode) { + InstallPolicyAppInternal(action_mode, + base::Value(kDefaultLaunchContainerWindowValue), + /*create_shortcut=*/false); +} + +void WebAppIntegrationBrowserTestBase::InstallPolicyAppWindowedShortcut( + const std::string& action_mode) { + InstallPolicyAppInternal(action_mode, + base::Value(kDefaultLaunchContainerWindowValue), + /*create_shortcut=*/true); } void WebAppIntegrationBrowserTestBase::LaunchInternal( - const std::string& action_param) { + const std::string& action_mode) { absl::optional<AppState> app_state = GetAppByScope( - before_state_change_action_state_.get(), profile(), action_param); + before_state_change_action_state_.get(), profile(), action_mode); ASSERT_TRUE(app_state.has_value()) - << "No app installed for scope: " << action_param; + << "No app installed for scope: " << action_mode; auto app_id = app_state->id; auto* web_app_provider = GetProvider(); WebAppRegistrar& app_registrar = web_app_provider->registrar(); @@ -672,12 +476,17 @@ app_banner_manager->WaitForInstallableCheck(); } -void WebAppIntegrationBrowserTestBase::SetOpenInTabInternal( - const std::string& action_param) { +void WebAppIntegrationBrowserTestBase::NavigateBrowser( + const std::string& scope) { + NavigateTabbedBrowserToSite(GetInScopeURL(scope)); +} + +void WebAppIntegrationBrowserTestBase::SetOpenInTab( + const std::string& action_mode) { absl::optional<AppState> app_state = GetAppByScope( - before_state_change_action_state_.get(), profile(), action_param); + before_state_change_action_state_.get(), profile(), action_mode); ASSERT_TRUE(app_state.has_value()) - << "No app installed for scope: " << action_param; + << "No app installed for scope: " << action_mode; auto app_id = app_state->id; auto& app_registry_controller = WebAppProvider::Get(profile())->registry_controller(); @@ -685,12 +494,12 @@ app_id, blink::mojom::DisplayMode::kBrowser, true); } -void WebAppIntegrationBrowserTestBase::SetOpenInWindowInternal( - const std::string& action_param) { +void WebAppIntegrationBrowserTestBase::SetOpenInWindow( + const std::string& action_mode) { absl::optional<AppState> app_state = GetAppByScope( - before_state_change_action_state_.get(), profile(), action_param); + before_state_change_action_state_.get(), profile(), action_mode); ASSERT_TRUE(app_state.has_value()) - << "No app installed for scope: " << action_param; + << "No app installed for scope: " << action_mode; auto app_id = app_state->id; auto& app_registry_controller = WebAppProvider::Get(profile())->registry_controller(); @@ -714,12 +523,12 @@ active_profile_, /*match_original_profiles=*/false); } -void WebAppIntegrationBrowserTestBase::TurnSyncOff() { - delegate_->TurnSyncOff(); +void WebAppIntegrationBrowserTestBase::SyncTurnOff() { + delegate_->SyncTurnOff(); } -void WebAppIntegrationBrowserTestBase::TurnSyncOn() { - delegate_->TurnSyncOn(); +void WebAppIntegrationBrowserTestBase::SyncTurnOn() { + delegate_->SyncTurnOn(); } // TODO(https://crbug.com/1159651): Support this action on CrOS. @@ -756,35 +565,17 @@ run_loop.Run(); } -void WebAppIntegrationBrowserTestBase::UninstallInternal( - const std::string& action_param) { - absl::optional<AppState> app_state = GetAppByScope( - before_state_change_action_state_.get(), profile(), action_param); - ASSERT_TRUE(app_state.has_value()) - << "No app installed for scope: " << action_param; - auto app_id = app_state->id; - WebAppProvider* const provider = WebAppProvider::Get(profile()); - base::RunLoop run_loop; - - DCHECK(provider->install_finalizer().CanUserUninstallWebApp(app_id)); - provider->install_finalizer().UninstallWebApp( - app_id, webapps::WebappUninstallSource::kAppMenu, - base::BindLambdaForTesting([&](bool uninstalled) { - EXPECT_TRUE(uninstalled); - run_loop.Quit(); - })); - - run_loop.Run(); -} - void WebAppIntegrationBrowserTestBase::UninstallPolicyApp( - const std::string& action_param) { - GURL url = GetInstallableAppURL(action_param); + const std::string& action_mode) { + GURL url = GetInstallableAppURL(action_mode); + auto policy_app = GetAppByScope(before_state_change_action_state_.get(), + profile(), action_mode); + DCHECK(policy_app); base::RunLoop run_loop; WebAppInstallObserver observer(profile()); observer.SetWebAppUninstalledDelegate( base::BindLambdaForTesting([&](const AppId& app_id) { - if (active_app_id_ == app_id) { + if (policy_app->id == app_id) { run_loop.Quit(); } })); @@ -801,47 +592,39 @@ run_loop.Run(); } -void WebAppIntegrationBrowserTestBase::ManifestUpdateDisplay( - const std::string& action_scope, - DisplayMode display_mode) { +void WebAppIntegrationBrowserTestBase::ManifestUpdateDisplayMinimal( + const std::string& action_scope) { // TODO(jarrydg): Create a map of supported manifest updates keyed on scope. - ASSERT_EQ("site_a", action_scope); - ASSERT_EQ(blink::mojom::DisplayMode::kMinimalUi, display_mode); - ForceUpdateManifestContents(action_scope, - GetAppURLForManifest(action_scope, display_mode)); -} - -void WebAppIntegrationBrowserTestBase::UserSigninInternal() { - delegate_->UserSigninInternal(); + ASSERT_EQ("SiteA", action_scope); + ForceUpdateManifestContents( + action_scope, GetAppURLForManifest( + action_scope, blink::mojom::DisplayMode::kMinimalUi)); } // State Check Actions void WebAppIntegrationBrowserTestBase::CheckAppLocallyInstalledInternal() { - DCHECK(after_state_change_action_state_); absl::optional<AppState> app_state = GetStateForAppId( after_state_change_action_state_.get(), profile(), active_app_id_); ASSERT_TRUE(app_state.has_value()); EXPECT_TRUE(app_state->is_installed_locally); } -void WebAppIntegrationBrowserTestBase::CheckAppNotLocallyInstalledInternal() { - DCHECK(after_state_change_action_state_); - absl::optional<AppState> app_state = GetStateForAppId( - after_state_change_action_state_.get(), profile(), active_app_id_); +void WebAppIntegrationBrowserTestBase::CheckAppInListNotLocallyInstalled( + const std::string& action_mode) { + absl::optional<AppState> app_state = GetAppByScope( + after_state_change_action_state_.get(), profile(), action_mode); ASSERT_TRUE(app_state.has_value()); EXPECT_FALSE(app_state->is_installed_locally); } void WebAppIntegrationBrowserTestBase::CheckAppNotInList( - const std::string& action_param) { - DCHECK(after_state_change_action_state_); + const std::string& action_mode) { absl::optional<AppState> app_state = GetAppByScope( - after_state_change_action_state_.get(), profile(), action_param); + after_state_change_action_state_.get(), profile(), action_mode); EXPECT_FALSE(app_state.has_value()); } void WebAppIntegrationBrowserTestBase::CheckInstallable() { - DCHECK(after_state_change_action_state_); absl::optional<BrowserState> browser_state = GetStateForBrowser( after_state_change_action_state_.get(), profile(), browser()); ASSERT_TRUE(browser_state.has_value()); @@ -852,7 +635,6 @@ } void WebAppIntegrationBrowserTestBase::CheckInstallIconShown() { - DCHECK(after_state_change_action_state_); absl::optional<BrowserState> browser_state = GetStateForBrowser( after_state_change_action_state_.get(), profile(), browser()); ASSERT_TRUE(browser_state.has_value()); @@ -869,7 +651,6 @@ } void WebAppIntegrationBrowserTestBase::CheckLaunchIconShown() { - DCHECK(after_state_change_action_state_); absl::optional<BrowserState> browser_state = GetStateForBrowser( after_state_change_action_state_.get(), profile(), browser()); ASSERT_TRUE(browser_state.has_value()); @@ -877,7 +658,6 @@ } void WebAppIntegrationBrowserTestBase::CheckLaunchIconNotShown() { - DCHECK(after_state_change_action_state_); absl::optional<BrowserState> browser_state = GetStateForBrowser( after_state_change_action_state_.get(), profile(), browser()); ASSERT_TRUE(browser_state.has_value()); @@ -886,7 +666,6 @@ void WebAppIntegrationBrowserTestBase::CheckManifestDisplayModeInternal( DisplayMode display_mode) { - DCHECK(after_state_change_action_state_); absl::optional<AppState> app_state = GetStateForAppId( after_state_change_action_state_.get(), profile(), active_app_id_); ASSERT_TRUE(app_state.has_value()); @@ -895,7 +674,6 @@ void WebAppIntegrationBrowserTestBase::CheckTabCreated() { DCHECK(before_state_change_action_state_); - DCHECK(after_state_change_action_state_); absl::optional<BrowserState> most_recent_browser_state = GetStateForBrowser( after_state_change_action_state_.get(), profile(), browser()); absl::optional<BrowserState> previous_browser_state = GetStateForBrowser( @@ -912,7 +690,6 @@ void WebAppIntegrationBrowserTestBase::CheckUserDisplayModeInternal( DisplayMode display_mode) { - DCHECK(after_state_change_action_state_); absl::optional<AppState> app_state = GetStateForAppId( after_state_change_action_state_.get(), profile(), active_app_id_); ASSERT_TRUE(app_state.has_value()); @@ -921,7 +698,6 @@ void WebAppIntegrationBrowserTestBase::CheckWindowClosed() { DCHECK(before_state_change_action_state_); - DCHECK(after_state_change_action_state_); absl::optional<ProfileState> after_action_profile = GetStateForProfile(after_state_change_action_state_.get(), profile()); absl::optional<ProfileState> before_action_profile = @@ -934,7 +710,6 @@ void WebAppIntegrationBrowserTestBase::CheckWindowCreated() { DCHECK(before_state_change_action_state_); - DCHECK(after_state_change_action_state_); absl::optional<ProfileState> after_action_profile = GetStateForProfile(after_state_change_action_state_.get(), profile()); absl::optional<ProfileState> before_action_profile = @@ -998,10 +773,11 @@ } GURL WebAppIntegrationBrowserTestBase::GetInstallableAppURL( - const std::string& action_param) { - std::string scope = action_param; + const std::string& scope) { + DCHECK(scope_to_path.contains(scope)); + auto scope_url_path = scope_to_path.find(scope)->second; return embedded_test_server()->GetURL( - base::StringPrintf("/web_apps/%s/basic.html", scope.c_str())); + base::StringPrintf("/web_apps/%s/basic.html", scope_url_path.c_str())); } WebAppProvider* WebAppIntegrationBrowserTestBase::GetProviderForProfile( @@ -1070,14 +846,16 @@ } GURL WebAppIntegrationBrowserTestBase::GetAppURLForManifest( - const std::string& action_scope, + const std::string& scope, DisplayMode display_mode) { + DCHECK(scope_to_path.contains(scope)); + auto scope_url_path = scope_to_path.find(scope)->second; std::string str_template = "/web_apps/%s/basic.html"; if (display_mode == blink::mojom::DisplayMode::kMinimalUi) { str_template += "?manifest=manifest_minimal_ui.json"; } return embedded_test_server()->GetURL( - base::StringPrintf(str_template.c_str(), action_scope.c_str())); + base::StringPrintf(str_template.c_str(), scope_url_path.c_str())); } content::WebContents* WebAppIntegrationBrowserTestBase::GetCurrentTab( @@ -1086,8 +864,8 @@ } GURL WebAppIntegrationBrowserTestBase::GetInScopeURL( - const std::string& action_param) { - return GetInstallableAppURL(action_param); + const std::string& action_mode) { + return GetInstallableAppURL(action_mode); } GURL WebAppIntegrationBrowserTestBase::GetNonInstallableAppURL() { @@ -1095,14 +873,27 @@ } GURL WebAppIntegrationBrowserTestBase::GetOutOfScopeURL( - const std::string& action_param) { + const std::string& action_mode) { return embedded_test_server()->GetURL("/out_of_scope/index.html"); } GURL WebAppIntegrationBrowserTestBase::GetURLForScope( - const std::string& action_param) { + const std::string& scope) { + DCHECK(scope_to_path.contains(scope)); + auto scope_url_path = scope_to_path.find(scope)->second; return embedded_test_server()->GetURL( - base::StringPrintf("/web_apps/%s/", action_param.c_str())); + base::StringPrintf("/web_apps/%s/", scope_url_path.c_str())); +} + +void WebAppIntegrationBrowserTestBase::InstallCreateShortcut( + bool open_in_window) { + chrome::SetAutoAcceptWebAppDialogForTesting( + /*auto_accept=*/true, + /*auto_open_in_window=*/open_in_window); + WebAppInstallObserver observer(profile()); + CHECK(chrome::ExecuteCommand(browser(), IDC_CREATE_SHORTCUT)); + active_app_id_ = observer.AwaitNextInstall(); + chrome::SetAutoAcceptWebAppDialogForTesting(false, false); } bool WebAppIntegrationBrowserTestBase::AreNoAppWindowsOpen( @@ -1163,6 +954,15 @@ } } +void WebAppIntegrationBrowserTestBase::MaybeNavigateTabbedBrowserInScope( + const std::string& scope) { + auto browser_url = GetCurrentTab(browser())->GetURL(); + auto dest_url = GetInScopeURL(scope); + if (browser_url.is_empty() || browser_url != dest_url) { + NavigateTabbedBrowserToSite(dest_url); + } +} + Browser* WebAppIntegrationBrowserTestBase::browser() { Browser* browser = active_browser_ ? active_browser_
diff --git a/chrome/browser/ui/views/web_apps/web_app_integration_browsertest_base.h b/chrome/browser/ui/views/web_apps/web_app_integration_browsertest_base.h index 936d69f..b6f1ecc 100644 --- a/chrome/browser/ui/views/web_apps/web_app_integration_browsertest_base.h +++ b/chrome/browser/ui/views/web_apps/web_app_integration_browsertest_base.h
@@ -98,9 +98,8 @@ virtual net::EmbeddedTestServer* EmbeddedTestServer() = 0; virtual std::vector<Profile*> GetAllProfiles() = 0; virtual bool IsSyncTest() = 0; - virtual bool UserSigninInternal() = 0; - virtual void TurnSyncOff() = 0; - virtual void TurnSyncOn() = 0; + virtual void SyncTurnOff() = 0; + virtual void SyncTurnOn() = 0; }; explicit WebAppIntegrationBrowserTestBase(TestDelegate* delegate); @@ -119,7 +118,7 @@ // * site_c absl::optional<AppState> GetAppByScope(StateSnapshot* state_snapshot, Profile* profile, - const std::string& scope); + const std::string& action_scope); static absl::optional<TabState> GetStateForActiveTab( BrowserState browser_state); @@ -137,21 +136,19 @@ void SetUp(base::FilePath test_data_dir); void SetUpOnMainThread(); + void TearDownOnMainThread(); - // Test Framework - static std::vector<std::string> BuildAllPlatformTestCaseSet( - base::FilePath test_data_dir, - const std::string& test_case_file_name); - void ExecuteAction(const std::string& action_string); - static std::vector<std::string> GetPlatformIgnoredTests( - base::FilePath test_data_dir, - const std::string& file_name); - static base::FilePath GetTestFilePath(base::FilePath test_data_dir, - const std::string& file_name); - void ParseParams(std::string action_strings); - static std::vector<std::string> ReadTestInputFile( - base::FilePath test_data_dir, - const std::string& file_name); + // Script-generated tests will call these methods right before/after calling + // each action. Useful for common code that should be executed by most or all + // actions, such as constructing state snapshots after state change actions. + // Adding a before/after call around each action call may look a bit messier, + // but this removes a burden of remembering to execute this test-framework + // related code for future authors of action imiplementations, allowing them + // to focus entirely on action-related code. + void BeforeStateChangeAction(); + void AfterStateChangeAction(); + void BeforeStateCheckAction(); + void AfterStateCheckAction(); // Automated Testing Actions // @@ -164,32 +161,41 @@ // // State change actions are declared (and implemented) above state check // actions. - void AddPolicyAppInternal(const std::string& action_param, - base::Value default_launch_container, - const bool create_shortcut); - void ClosePWA(); - void InstallCreateShortcut(bool open_in_window); + void InstallPolicyAppInternal(const std::string& action_scope, + base::Value default_launch_container, + const bool create_shortcut); + void ClosePwa(); + void InstallCreateShortcutTabbed(const std::string& action_scope = "SiteA"); + void InstallCreateShortcutWindowed(const std::string& action_scope = "SiteA"); + void InstallMenuOption(const std::string& action_scope = "SiteA"); void InstallLocally(); - web_app::AppId InstallOmnibox(); - void LaunchInternal(const std::string& action_param); + void InstallOmniboxIcon(const std::string& action_scope = "SiteA"); + void InstallPolicyAppTabbedNoShortcut( + const std::string& action_scope = "SiteA"); + void InstallPolicyAppTabbedShortcut( + const std::string& action_scope = "SiteA"); + void InstallPolicyAppWindowedNoShortcut( + const std::string& action_scope = "SiteA"); + void InstallPolicyAppWindowedShortcut( + const std::string& action_scope = "SiteA"); + void LaunchInternal(const std::string& action_scope = "SiteA"); void ListAppsInternal(); void NavigateTabbedBrowserToSite(const GURL& url); - void SetOpenInTabInternal(const std::string& action_param); - void SetOpenInWindowInternal(const std::string& action_param); + void NavigateBrowser(const std::string& action_scope = "SiteA"); + void ManifestUpdateDisplayMinimal(const std::string& action_scope = "SiteA"); + void SetOpenInTab(const std::string& action_scope = "SiteA"); + void SetOpenInWindow(const std::string& action_scope = "SiteA"); void SwitchProfileClients(); - void TurnSyncOff(); - void TurnSyncOn(); + void SyncTurnOff(); + void SyncTurnOn(); void UninstallFromMenu(); - void UninstallInternal(const std::string& action_param); - void UninstallPolicyApp(const std::string& action_param); - void ManifestUpdateDisplay(const std::string& action_scope, - DisplayMode display_mode); - void UserSigninInternal(); + void UninstallPolicyApp(const std::string& action_scope = "SiteA"); // State Check Actions void CheckAppLocallyInstalledInternal(); - void CheckAppNotLocallyInstalledInternal(); - void CheckAppNotInList(const std::string& action_param); + void CheckAppInListNotLocallyInstalled( + const std::string& action_mode = "SiteA"); + void CheckAppNotInList(const std::string& action_scope = "SiteA"); void CheckInstallable(); void CheckInstallIconShown(); void CheckInstallIconNotShown(); @@ -214,7 +220,7 @@ // * site_a/bar // * site_b // * site_c - GURL GetInstallableAppURL(const std::string& action_param); + GURL GetInstallableAppURL(const std::string& scope); WebAppProvider* GetProviderForProfile(Profile* profile); // Allow test-driving classes to reset the ScopedObservation of the @@ -235,14 +241,14 @@ // * site_a/bar // * site_b // * site_c - GURL GetAppURLForManifest(const std::string& action_scope, - DisplayMode display_mode); + GURL GetAppURLForManifest(const std::string& scope, DisplayMode display_mode); content::WebContents* GetCurrentTab(Browser* browser); - GURL GetInScopeURL(const std::string& action_param); + GURL GetInScopeURL(const std::string& action_scope); GURL GetNonInstallableAppURL(); - GURL GetOutOfScopeURL(const std::string& action_param); + GURL GetOutOfScopeURL(const std::string& action_scope); WebAppProvider* GetProvider() { return WebAppProvider::Get(profile()); } - GURL GetURLForScope(const std::string& action_param); + GURL GetURLForScope(const std::string& scope); + void InstallCreateShortcut(bool open_in_window); // This action only works if no navigations to the given app_url occur // between app installation and calls to this action. @@ -250,6 +256,9 @@ void ForceUpdateManifestContents(const std::string& app_scope, GURL app_url_with_manifest_param); void MaybeWaitForManifestUpdates(Profile* profile); + void MaybeNavigateTabbedBrowserInScope(const std::string& scope); + void SetOpenInTabInternal(const std::string& action_scope); + void SetOpenInWindowInternal(const std::string& action_scope); Browser* browser(); const net::EmbeddedTestServer* embedded_test_server();
diff --git a/chrome/browser/ui/web_applications/app_browser_controller.cc b/chrome/browser/ui/web_applications/app_browser_controller.cc index 3211e08..45bc007 100644 --- a/chrome/browser/ui/web_applications/app_browser_controller.cc +++ b/chrome/browser/ui/web_applications/app_browser_controller.cc
@@ -154,9 +154,8 @@ return theme_provider_.get(); } -AppBrowserController::AppBrowserController( - Browser* browser, - absl::optional<web_app::AppId> app_id) +AppBrowserController::AppBrowserController(Browser* browser, + web_app::AppId app_id) : content::WebContentsObserver(nullptr), app_id_(std::move(app_id)), browser_(browser),
diff --git a/chrome/browser/ui/web_applications/app_browser_controller.h b/chrome/browser/ui/web_applications/app_browser_controller.h index 9b45d26..9d1b129d 100644 --- a/chrome/browser/ui/web_applications/app_browser_controller.h +++ b/chrome/browser/ui/web_applications/app_browser_controller.h
@@ -174,12 +174,11 @@ return system_app_type_; } - // Returns true if AppId is non-null - bool HasAppId() const { return app_id_.has_value(); } + // TODO(crbug.com/1110678): Retire this method. + bool HasAppId() const { return true; } - // Returns AppId if it is defined, otherwise DCHECK. - // Should check HasAppId() before calling if unsure - const AppId& GetAppId() const { return app_id_.value(); } + // TODO(crbug.com/1110678): Rename to |app_id()|. + const AppId& GetAppId() const { return app_id_; } Browser* browser() const { return browser_; } @@ -218,8 +217,7 @@ void SetOnUpdateDraggableRegionForTesting(base::OnceClosure done); protected: - explicit AppBrowserController(Browser* browser, - absl::optional<web_app::AppId> app_id); + explicit AppBrowserController(Browser* browser, web_app::AppId app_id); // Called once the app browser controller has determined its initial url. virtual void OnReceivedInitialURL(); @@ -237,7 +235,7 @@ void UpdateThemePack(); - const absl::optional<AppId> app_id_; + const AppId app_id_; Browser* const browser_; GURL initial_url_;
diff --git a/chrome/browser/ui/webui/download_internals/download_internals_ui.cc b/chrome/browser/ui/webui/download_internals/download_internals_ui.cc index c7c656d..b6addd3 100644 --- a/chrome/browser/ui/webui/download_internals/download_internals_ui.cc +++ b/chrome/browser/ui/webui/download_internals/download_internals_ui.cc
@@ -9,8 +9,8 @@ #include "chrome/browser/profiles/profile.h" #include "chrome/browser/ui/webui/download_internals/download_internals_ui_message_handler.h" #include "chrome/common/url_constants.h" -#include "chrome/grit/download_internals_resources.h" -#include "chrome/grit/download_internals_resources_map.h" +#include "components/grit/download_internals_resources.h" +#include "components/grit/download_internals_resources_map.h" #include "content/public/browser/web_ui.h" #include "content/public/browser/web_ui_controller.h" #include "content/public/browser/web_ui_data_source.h"
diff --git a/chrome/browser/ui/webui/settings/safety_check_handler_unittest.cc b/chrome/browser/ui/webui/settings/safety_check_handler_unittest.cc index 00a6585..2f1d496 100644 --- a/chrome/browser/ui/webui/settings/safety_check_handler_unittest.cc +++ b/chrome/browser/ui/webui/settings/safety_check_handler_unittest.cc
@@ -181,12 +181,10 @@ base::flat_map<password_manager::InsecureType, password_manager::InsecurityMetadata>(); store_->AddLogin(form); - base::RunLoop().RunUntilIdle(); - - store_->AddInsecureCredential(password_manager::InsecureCredential( - form.signon_realm, form.username_value, base::Time(), - password_manager::InsecureType::kLeaked, - password_manager::IsMuted(false))); + form.password_issues = { + {password_manager::InsecureType::kLeaked, + password_manager::InsecurityMetadata( + base::Time(), password_manager::IsMuted(false))}}; base::RunLoop().RunUntilIdle(); }
diff --git a/chrome/browser/ui/webui/signin/signin_reauth_handler.cc b/chrome/browser/ui/webui/signin/signin_reauth_handler.cc index 0d4d887..9a7160eb 100644 --- a/chrome/browser/ui/webui/signin/signin_reauth_handler.cc +++ b/chrome/browser/ui/webui/signin/signin_reauth_handler.cc
@@ -58,10 +58,7 @@ if (!IsJavascriptAllowed()) return; - DCHECK_NE(reauth_type, SigninReauthViewController::GaiaReauthType::kUnknown); - bool is_reauth_required = - reauth_type != SigninReauthViewController::GaiaReauthType::kAutoApproved; - FireWebUIListener("reauth-type-received", base::Value(is_reauth_required)); + FireWebUIListener("reauth-type-determined"); } void SigninReauthHandler::HandleInitialize(const base::ListValue* args) {
diff --git a/chrome/common/BUILD.gn b/chrome/common/BUILD.gn index 90835de..6ff61a2 100644 --- a/chrome/common/BUILD.gn +++ b/chrome/common/BUILD.gn
@@ -242,7 +242,6 @@ deps = [ "//build:chromeos_buildflags", - "//components/crash/core/app", "//components/google/core/common", "//components/live_caption:constants", "//components/metrics:call_stack_profile_builder", @@ -334,6 +333,12 @@ ] } + if (!is_fuchsia) { + deps += [ + "//components/crash/core/app", + ] + } + if (is_mac) { assert(enable_extensions) sources += [
diff --git a/chrome/common/chrome_features.h b/chrome/common/chrome_features.h index 449ed7d..1ccfc54 100644 --- a/chrome/common/chrome_features.h +++ b/chrome/common/chrome_features.h
@@ -353,7 +353,7 @@ #endif #if defined(OS_MAC) || defined(OS_WIN) || defined(OS_LINUX) || \ - defined(OS_CHROMEOS) + defined(OS_CHROMEOS) || defined(OS_FUCHSIA) COMPONENT_EXPORT(CHROME_FEATURES) extern const base::Feature kIncognitoBrandConsistencyForDesktop;
diff --git a/chrome/common/chrome_paths_unittest.cc b/chrome/common/chrome_paths_unittest.cc index 36b277c..cf485a80 100644 --- a/chrome/common/chrome_paths_unittest.cc +++ b/chrome/common/chrome_paths_unittest.cc
@@ -29,10 +29,9 @@ base::FilePath expected_cache_dir; ASSERT_TRUE(base::PathService::Get(base::DIR_CACHE, &expected_cache_dir)); expected_cache_dir = expected_cache_dir.Append("foobar"); -#elif(OS_ANDROID) - // No matter what the test_profile_dir is, Android always use the - // application's cache directory since multiple profiles are not - // supported. +#elif (OS_ANDROID) || defined(OS_FUCHSIA) + // No matter what the test_profile_dir is, Android and Fuchsia always use the + // application's cache directory since multiple profiles are not supported. base::FilePath expected_cache_dir; ASSERT_TRUE(base::PathService::Get(base::DIR_CACHE, &expected_cache_dir)); #elif(OS_POSIX)
diff --git a/chrome/common/extensions/api/accessibility_private.json b/chrome/common/extensions/api/accessibility_private.json index d7976d51..2224f84 100644 --- a/chrome/common/extensions/api/accessibility_private.json +++ b/chrome/common/extensions/api/accessibility_private.json
@@ -34,6 +34,15 @@ } }, { + "id": "ScreenPoint", + "type": "object", + "description": "Point in global screen coordinates.", + "properties": { + "x": {"type": "integer", "description": "X coordinate in global screen coordinates."}, + "y": {"type": "integer", "description": "Y coordinate in global screen coordinates."} + } + }, + { "id": "Gesture", "type": "string", "enum": [ "click", "swipeLeft1", "swipeUp1", "swipeRight1", "swipeDown1", "swipeLeft2", "swipeUp2", "swipeRight2", "swipeDown2", "swipeLeft3", "swipeUp3", "swipeRight3", "swipeDown3", "swipeLeft4", "swipeUp4", "swipeRight4", "swipeDown4", "tap2", "tap3", "tap4", "touchExplore" ], @@ -490,6 +499,17 @@ ] }, { + "name": "magnifierCenterOnPoint", + "type": "function", + "description": "Called by the Accessibility Common extension to center magnifier at |point|.", + "parameters": [ + { + "name": "point", + "$ref": "ScreenPoint" + } + ] + }, + { "name": "toggleDictation", "type": "function", "description": "Toggles dictation between active and inactive states.",
diff --git a/chrome/test/BUILD.gn b/chrome/test/BUILD.gn index 27ae91c..bb47bea 100644 --- a/chrome/test/BUILD.gn +++ b/chrome/test/BUILD.gn
@@ -440,7 +440,7 @@ libs = [ "runtimeobject.lib" ] } - if (is_chromeos_ash || is_chromeos_lacros) { + if (is_chromeos) { deps += [ "//chromeos/dbus/constants" ] } @@ -2587,7 +2587,7 @@ if (!is_chromeos_lacros) { sources += [ "../browser/extensions/api/image_writer_private/image_writer_private_apitest.cc" ] } - if (is_chromeos_ash || is_chromeos_lacros) { + if (is_chromeos) { sources += [ "../browser/extensions/clipboard_extension_apitest_chromeos.cc" ] } @@ -2798,7 +2798,7 @@ "../browser/ui/views/select_file_dialog_extension_browsertest.cc", ] } - if (!is_chromeos_ash && !is_chromeos_lacros) { + if (!is_chromeos) { sources += [ "../browser/ui/views/bookmarks/bookmark_bubble_sign_in_delegate_browsertest.cc", "../browser/ui/views/frame/opaque_browser_frame_view_browsertest.cc", @@ -3757,7 +3757,7 @@ "../browser/printing/pwg_raster_converter_browsertest.cc", "../browser/ui/webui/print_preview/print_preview_ui_browsertest.cc", ] - if (!is_mac && !is_chromeos_ash && !is_chromeos_lacros) { + if (!is_mac && !is_chromeos) { sources += [ # This test depends on GetCommandLineForRelaunch, which is not # available on Mac. It is also not intended to run on ChromeOS. @@ -4398,7 +4398,6 @@ "../browser/page_load_metrics/observers/tab_restore_page_load_metrics_observer_unittest.cc", "../browser/page_load_metrics/observers/third_party_metrics_observer_unittest.cc", "../browser/page_load_metrics/observers/translate_page_load_metrics_observer_unittest.cc", - "../browser/paint_preview/services/paint_preview_tab_service_unittest.cc", "../browser/password_manager/chrome_password_manager_client_unittest.cc", "../browser/performance_hints/performance_hints_observer_unittest.cc", "../browser/performance_hints/rewrite_handler_unittest.cc", @@ -4624,6 +4623,12 @@ "../../base/path_service_unittest.cc", ] + if (enable_paint_preview) { + sources += [ + "../browser/paint_preview/services/paint_preview_tab_service_unittest.cc", + ] + } + if (is_android) { sources += [ "../browser/android/bookmarks/partner_bookmarks_shim_unittest.cc", @@ -4670,12 +4675,12 @@ "../browser/android/webapk/webapk_installer_unittest.cc", "../browser/commerce/merchant_viewer/merchant_viewer_data_manager_unittest.cc", "../browser/data_reduction_proxy/data_reduction_proxy_settings_unittest_android.cc", + "../browser/device_reauth/android/biometric_authenticator_android_unittest.cc", "../browser/download/android/available_offline_content_provider_unittest.cc", "../browser/download/android/download_manager_service_unittest.cc", "../browser/metrics/thread_watcher_android_unittest.cc", "../browser/notifications/notification_channels_provider_android_unittest.cc", "../browser/optimization_guide/android/optimization_guide_tab_url_provider_android_unittest.cc", - "../browser/password_manager/android/biometric_authenticator_android_unittest.cc", "../browser/password_manager/android/password_ui_view_android_unittest.cc", "../browser/search/contextual_search_policy_handler_android_unittest.cc", "../browser/share/share_history_unittest.cc", @@ -5419,6 +5424,8 @@ "//chrome/services/media_gallery_util:unit_tests", "//components/back_forward_cache", "//components/crash/content/browser", + "//components/device_reauth", + "//components/device_reauth:test_support", "//components/download/internal/common:internal_java", "//components/embedder_support/android:browser_context", "//components/favicon/core/test:test_support", @@ -6646,30 +6653,6 @@ "../renderer/extensions/tabs_hooks_delegate_unittest.cc", ] - if (is_mac) { - sources += [ - "../browser/apps/app_shim/app_shim_host_mac_unittest.cc", - "../browser/apps/app_shim/app_shim_manager_mac_unittest.cc", - "../browser/apps/app_shim/web_app_shim_manager_delegate_mac_unittest.cc", - ] - } - - if (is_chromeos_ash) { - sources += [ - "../browser/extensions/api/image_writer_private/removable_storage_provider_chromeos_unittest.cc", - "../browser/extensions/extension_garbage_collector_chromeos_unittest.cc", - "../browser/extensions/external_provider_impl_chromeos_unittest.cc", - "../browser/extensions/system_display/display_info_provider_chromeos_unittest.cc", - "../browser/extensions/system_display/system_display_serialization_unittest.cc", - "../common/chromeos/extensions/manifest_tests/extension_manifests_chromeos_system_extension_unittest.cc", - "../renderer/extensions/accessibility_private_hooks_delegate_unittest.cc", - ] - deps += [ - "../common/chromeos/extensions", - "//chromeos/dbus/image_burner", - ] - } - allow_circular_includes_from = [ "//chrome/browser/web_applications:web_applications_unit_tests", "//chrome/browser/web_applications/extensions:unit_tests", @@ -6709,9 +6692,19 @@ "//third_party/blink/common/privacy_budget:test_support", "//tools/json_schema_compiler/test:unit_tests", ] + if (enable_service_discovery) { sources += [ "../browser/extensions/api/mdns/mdns_api_unittest.cc" ] } + + if (is_mac) { + sources += [ + "../browser/apps/app_shim/app_shim_host_mac_unittest.cc", + "../browser/apps/app_shim/app_shim_manager_mac_unittest.cc", + "../browser/apps/app_shim/web_app_shim_manager_delegate_mac_unittest.cc", + ] + } + if (is_win) { sources += [ "../browser/extensions/external_registry_loader_win_unittest.cc", @@ -6719,6 +6712,7 @@ "../browser/media_galleries/win/mtp_device_object_enumerator_unittest.cc", ] } + if (is_chromeos_ash) { sources += [ "../browser/ash/login/easy_unlock/easy_unlock_auth_attempt_unittest.cc", @@ -6727,9 +6721,21 @@ "../browser/ash/login/easy_unlock/smartlock_state_handler_unittest.cc", "../browser/chromeos/extensions/extensions_permissions_tracker_unittest.cc", "../browser/extensions/api/file_system/consent_provider_unittest.cc", + "../browser/extensions/api/image_writer_private/removable_storage_provider_chromeos_unittest.cc", + "../browser/extensions/extension_garbage_collector_chromeos_unittest.cc", "../browser/extensions/external_pref_loader_unittest.cc", + "../browser/extensions/external_provider_impl_chromeos_unittest.cc", + "../browser/extensions/system_display/display_info_provider_chromeos_unittest.cc", + "../browser/extensions/system_display/system_display_serialization_unittest.cc", "../browser/media_galleries/chromeos/mtp_device_object_enumerator_unittest.cc", "../browser/ui/webui/about_ui_unittest.cc", + "../common/chromeos/extensions/manifest_tests/extension_manifests_chromeos_system_extension_unittest.cc", + "../renderer/extensions/accessibility_private_hooks_delegate_unittest.cc", + ] + + deps += [ + "//chrome/common/chromeos/extensions", + "//chromeos/dbus/image_burner", ] } else { sources += [ @@ -6739,7 +6745,7 @@ deps += [ "//components/enterprise:test_support" ] } - if (!is_chromeos_ash && !is_chromeos_lacros) { + if (!is_chromeos_ash && !is_chromeos_lacros && !is_fuchsia) { sources += [ "../browser/extensions/api/messaging/native_message_process_host_unittest.cc", "../browser/extensions/api/messaging/native_messaging_launch_from_native_unittest.cc", @@ -6788,14 +6794,7 @@ } if (enable_service_discovery) { - sources += [ - "../browser/devtools/device/cast_device_provider_unittest.cc", - "../browser/printing/cloud_print/cloud_print_printer_list_unittest.cc", - "../browser/printing/cloud_print/gcd_api_flow_unittest.cc", - "../browser/printing/cloud_print/privet_confirm_api_flow_unittest.cc", - "../browser/printing/cloud_print/privet_http_unittest.cc", - "../browser/printing/cloud_print/privet_url_loader_unittest.cc", - ] + sources += [ "../browser/devtools/device/cast_device_provider_unittest.cc" ] if (is_mac) { sources += [ @@ -6805,8 +6804,6 @@ sources += [ "../browser/local_discovery/local_domain_resolver_unittest.cc", "../browser/local_discovery/service_discovery_client_unittest.cc", - "../browser/printing/cloud_print/privet_device_lister_unittest.cc", - "../browser/printing/cloud_print/privet_local_printer_lister_unittest.cc", ] } } @@ -7488,7 +7485,6 @@ sources -= [ "../browser/browsing_data/browsing_data_media_license_helper_unittest.cc", "../browser/extensions/api/safe_browsing_private/safe_browsing_private_event_router_unittest.cc", - "../browser/printing/cloud_print/privet_http_unittest.cc", "../browser/ui/tab_contents/chrome_web_contents_view_handle_drop_unittest.cc", "../browser/ui/webui/management/management_ui_handler_unittest.cc", ] @@ -8165,7 +8161,7 @@ ] } - if (is_chromeos_ash || is_chromeos_lacros) { + if (is_chromeos) { # These tests are not applicable on Chrome OS - Ash and Lacros. sources -= [ "../browser/ui/signin_view_controller_interactive_uitest.cc" ]
diff --git a/chrome/test/data/policy/policy_test_cases.json b/chrome/test/data/policy/policy_test_cases.json index 7b16321..a306c2bb 100644 --- a/chrome/test/data/policy/policy_test_cases.json +++ b/chrome/test/data/policy/policy_test_cases.json
@@ -6,7 +6,8 @@ "linux", "mac", "android", - "chromeos" + "chromeos_ash", + "chromeos_lacros" ], "policy_pref_mapping_tests": [ { @@ -53,7 +54,8 @@ "win", "linux", "mac", - "chromeos", + "chromeos_ash", + "chromeos_lacros", "android" ], "can_be_recommended": true, @@ -75,7 +77,8 @@ "win", "linux", "mac", - "chromeos" + "chromeos_ash", + "chromeos_lacros" ], "can_be_recommended": true, "policy_pref_mapping_tests": [ @@ -96,7 +99,8 @@ "win", "linux", "mac", - "chromeos" + "chromeos_ash", + "chromeos_lacros" ], "can_be_recommended": true, "policy_pref_mapping_tests": [ @@ -152,7 +156,8 @@ "win", "linux", "mac", - "chromeos" + "chromeos_ash", + "chromeos_lacros" ], "can_be_recommended": true, "policy_pref_mapping_tests": [ @@ -177,7 +182,8 @@ "win", "linux", "mac", - "chromeos", + "chromeos_ash", + "chromeos_lacros", "android" ], "can_be_recommended": true, @@ -220,7 +226,8 @@ "win", "linux", "mac", - "chromeos", + "chromeos_ash", + "chromeos_lacros", "android" ], "policy_pref_mapping_tests": [ @@ -241,7 +248,8 @@ "win", "linux", "mac", - "chromeos", + "chromeos_ash", + "chromeos_lacros", "android" ], "policy_pref_mapping_tests": [ @@ -264,7 +272,8 @@ "win", "linux", "mac", - "chromeos", + "chromeos_ash", + "chromeos_lacros", "android" ], "can_be_recommended": true, @@ -287,7 +296,8 @@ "win", "linux", "mac", - "chromeos" + "chromeos_ash", + "chromeos_lacros" ], "policy_pref_mapping_tests": [ { @@ -307,7 +317,8 @@ "win", "linux", "mac", - "chromeos" + "chromeos_ash", + "chromeos_lacros" ], "policy_pref_mapping_tests": [ { @@ -359,7 +370,8 @@ "win", "linux", "mac", - "chromeos", + "chromeos_ash", + "chromeos_lacros", "android" ], "policy_pref_mapping_tests": [ @@ -380,7 +392,8 @@ "win", "linux", "mac", - "chromeos", + "chromeos_ash", + "chromeos_lacros", "android" ], "policy_pref_mapping_tests": [ @@ -401,7 +414,8 @@ "win", "linux", "mac", - "chromeos", + "chromeos_ash", + "chromeos_lacros", "android" ], "policy_pref_mapping_tests": [ @@ -420,7 +434,8 @@ "win", "linux", "mac", - "chromeos", + "chromeos_ash", + "chromeos_lacros", "android" ], "policy_pref_mapping_tests": [ @@ -459,7 +474,8 @@ "win", "linux", "mac", - "chromeos" + "chromeos_ash", + "chromeos_lacros" ], "policy_pref_mapping_tests": [ { @@ -572,7 +588,8 @@ "win", "linux", "mac", - "chromeos", + "chromeos_ash", + "chromeos_lacros", "android" ], "policy_pref_mapping_tests": [ @@ -591,7 +608,8 @@ "win", "linux", "mac", - "chromeos" + "chromeos_ash", + "chromeos_lacros" ], "policy_pref_mapping_tests": [ { @@ -624,7 +642,8 @@ "win", "linux", "mac", - "chromeos" + "chromeos_ash", + "chromeos_lacros" ], "policy_pref_mapping_tests": [ { @@ -658,7 +677,7 @@ }, "PrintingAllowedColorModes": { "os": [ - "chromeos" + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -675,7 +694,7 @@ }, "PrintingAllowedDuplexModes": { "os": [ - "chromeos" + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -692,7 +711,7 @@ }, "PrintingAllowedPinModes": { "os": [ - "chromeos" + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -712,7 +731,8 @@ "win", "linux", "mac", - "chromeos" + "chromeos_ash", + "chromeos_lacros" ], "policy_pref_mapping_tests": [ { @@ -729,7 +749,7 @@ }, "PrintingColorDefault": { "os": [ - "chromeos" + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -746,7 +766,7 @@ }, "PrintingDuplexDefault": { "os": [ - "chromeos" + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -763,7 +783,7 @@ }, "PrintingPinDefault": { "os": [ - "chromeos" + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -783,7 +803,8 @@ "win", "linux", "mac", - "chromeos" + "chromeos_ash", + "chromeos_lacros" ], "policy_pref_mapping_tests": [ { @@ -803,7 +824,8 @@ "win", "linux", "mac", - "chromeos" + "chromeos_ash", + "chromeos_lacros" ], "policy_pref_mapping_tests": [ { @@ -824,7 +846,7 @@ }, "PrintingSendUsernameAndFilenameEnabled": { "os": [ - "chromeos" + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -839,7 +861,7 @@ }, "PrintingMaxSheetsAllowed": { "os": [ - "chromeos" + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -854,7 +876,7 @@ }, "PrintJobHistoryExpirationPeriod": { "os": [ - "chromeos" + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -869,7 +891,7 @@ }, "DeletePrintJobHistoryAllowed": { "os": [ - "chromeos" + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -884,7 +906,7 @@ }, "PrintingAPIExtensionsWhitelist": { "os": [ - "chromeos" + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -904,7 +926,7 @@ }, "PrintingAPIExtensionsAllowlist": { "os": [ - "chromeos" + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -950,7 +972,7 @@ }, "ExternalPrintServersWhitelist": { "os": [ - "chromeos" + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -998,7 +1020,7 @@ }, "ExternalPrintServersAllowlist": { "os": [ - "chromeos" + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -1076,7 +1098,7 @@ }, "NativePrinters": { "os": [ - "chromeos" + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -1104,7 +1126,7 @@ }, "Printers": { "os": [ - "chromeos" + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -1138,7 +1160,7 @@ }, "NativePrintersBulkAccessMode": { "os": [ - "chromeos" + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -1153,7 +1175,7 @@ }, "PrintersBulkAccessMode": { "os": [ - "chromeos" + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -1168,7 +1190,7 @@ }, "NativePrintersBulkBlacklist": { "os": [ - "chromeos" + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -1187,7 +1209,7 @@ }, "PrintersBulkBlocklist": { "os": [ - "chromeos" + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -1206,7 +1228,7 @@ }, "NativePrintersBulkWhitelist": { "os": [ - "chromeos" + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -1225,7 +1247,7 @@ }, "PrintersBulkAllowlist": { "os": [ - "chromeos" + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -1244,7 +1266,7 @@ }, "UserNativePrintersAllowed": { "os": [ - "chromeos" + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -1259,7 +1281,7 @@ }, "UserPrintersAllowed": { "os": [ - "chromeos" + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -1280,7 +1302,8 @@ "win", "linux", "mac", - "chromeos", + "chromeos_ash", + "chromeos_lacros", "android" ], "can_be_recommended": true, @@ -1320,7 +1343,8 @@ "win", "linux", "mac", - "chromeos", + "chromeos_ash", + "chromeos_lacros", "android" ], "can_be_recommended": true, @@ -1409,7 +1433,8 @@ "win", "linux", "mac", - "chromeos", + "chromeos_ash", + "chromeos_lacros", "android" ], "policy_pref_mapping_tests": [ @@ -1448,7 +1473,8 @@ "win", "linux", "mac", - "chromeos", + "chromeos_ash", + "chromeos_lacros", "android" ], "policy_pref_mapping_tests": [ @@ -1517,7 +1543,8 @@ "win", "linux", "mac", - "chromeos" + "chromeos_ash", + "chromeos_lacros" ], "policy_pref_mapping_tests": [ { @@ -1562,7 +1589,8 @@ "win", "linux", "mac", - "chromeos", + "chromeos_ash", + "chromeos_lacros", "android" ], "can_be_recommended": true, @@ -1585,7 +1613,8 @@ "win", "linux", "mac", - "chromeos", + "chromeos_ash", + "chromeos_lacros", "android" ], "can_be_recommended": true, @@ -1611,7 +1640,8 @@ "win", "linux", "mac", - "chromeos", + "chromeos_ash", + "chromeos_lacros", "android" ], "can_be_recommended": true, @@ -1631,7 +1661,8 @@ "win", "linux", "mac", - "chromeos", + "chromeos_ash", + "chromeos_lacros", "android" ], "can_be_recommended": true, @@ -1651,7 +1682,8 @@ "win", "linux", "mac", - "chromeos", + "chromeos_ash", + "chromeos_lacros", "android" ], "can_be_recommended": true, @@ -1701,7 +1733,8 @@ "win", "linux", "mac", - "chromeos", + "chromeos_ash", + "chromeos_lacros", "android" ], "policy_pref_mapping_tests": [ @@ -1741,7 +1774,8 @@ "linux", "mac", "android", - "chromeos" + "chromeos_ash", + "chromeos_lacros" ], "policy_pref_mapping_tests": [ { @@ -1911,7 +1945,8 @@ "win", "mac", "linux", - "chromeos" + "chromeos_ash", + "chromeos_lacros" ], "can_be_recommended": true, "policy_pref_mapping_tests": [ @@ -1966,7 +2001,8 @@ "win", "mac", "linux", - "chromeos" + "chromeos_ash", + "chromeos_lacros" ], "can_be_recommended": true, "policy_pref_mapping_tests": [ @@ -1988,7 +2024,7 @@ }, "DownloadDirectory.1": { "os": [ - "chromeos" + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -2008,7 +2044,8 @@ "win", "mac", "linux", - "chromeos" + "chromeos_ash", + "chromeos_lacros" ], "policy_pref_mapping_tests": [ { @@ -2035,7 +2072,8 @@ "win", "mac", "linux", - "chromeos" + "chromeos_ash", + "chromeos_lacros" ], "policy_pref_mapping_tests": [ { @@ -2059,7 +2097,7 @@ }, "CaptivePortalAuthenticationIgnoresProxy": { "os": [ - "chromeos" + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -2078,7 +2116,8 @@ "mac", "linux", "android", - "chromeos" + "chromeos_ash", + "chromeos_lacros" ], "policy_pref_mapping_tests": [ { @@ -2101,7 +2140,8 @@ "mac", "linux", "android", - "chromeos" + "chromeos_ash", + "chromeos_lacros" ], "policy_pref_mapping_tests": [ { @@ -2124,7 +2164,8 @@ "mac", "linux", "android", - "chromeos" + "chromeos_ash", + "chromeos_lacros" ], "policy_pref_mapping_tests": [ { @@ -2149,7 +2190,8 @@ "mac", "linux", "android", - "chromeos" + "chromeos_ash", + "chromeos_lacros" ], "policy_pref_mapping_tests": [ { @@ -2175,7 +2217,8 @@ "mac", "linux", "android", - "chromeos" + "chromeos_ash", + "chromeos_lacros" ], "policy_pref_mapping_tests": [ { @@ -2201,7 +2244,8 @@ "linux", "win", "android", - "chromeos", + "chromeos_ash", + "chromeos_lacros", "mac" ], "policy_pref_mapping_tests": [ @@ -2229,7 +2273,8 @@ "win", "linux", "mac", - "chromeos" + "chromeos_ash", + "chromeos_lacros" ], "policy_pref_mapping_tests": [ { @@ -2248,7 +2293,8 @@ "os": [ "win", "linux", - "chromeos" + "chromeos_ash", + "chromeos_lacros" ], "policy_pref_mapping_tests": [ { @@ -2294,7 +2340,8 @@ "win", "linux", "mac", - "chromeos", + "chromeos_ash", + "chromeos_lacros", "android" ], "policy_pref_mapping_tests": [ @@ -2338,7 +2385,8 @@ "win", "linux", "mac", - "chromeos", + "chromeos_ash", + "chromeos_lacros", "android" ], "policy_pref_mapping_tests": [ @@ -2381,7 +2429,8 @@ "win", "linux", "mac", - "chromeos" + "chromeos_ash", + "chromeos_lacros" ], "policy_pref_mapping_tests": [ { @@ -2423,7 +2472,8 @@ "win", "linux", "mac", - "chromeos" + "chromeos_ash", + "chromeos_lacros" ], "policy_pref_mapping_tests": [ { @@ -2443,7 +2493,8 @@ "win", "linux", "mac", - "chromeos", + "chromeos_ash", + "chromeos_lacros", "android" ], "policy_pref_mapping_tests": [ @@ -2465,7 +2516,8 @@ "win", "linux", "mac", - "chromeos", + "chromeos_ash", + "chromeos_lacros", "android" ], "policy_pref_mapping_tests": [ @@ -2499,7 +2551,8 @@ "win", "linux", "mac", - "chromeos", + "chromeos_ash", + "chromeos_lacros", "android" ], "policy_pref_mapping_tests": [ @@ -2521,7 +2574,8 @@ "win", "linux", "mac", - "chromeos", + "chromeos_ash", + "chromeos_lacros", "android" ], "policy_pref_mapping_tests": [ @@ -2565,7 +2619,8 @@ "os": [ "linux", "mac", - "chromeos" + "chromeos_ash", + "chromeos_lacros" ], "policy_pref_mapping_tests": [ { @@ -2630,7 +2685,8 @@ "win", "mac", "linux", - "chromeos" + "chromeos_ash", + "chromeos_lacros" ], "policy_pref_mapping_tests": [ { @@ -2673,7 +2729,8 @@ "os": [ "linux", "mac", - "chromeos", + "chromeos_ash", + "chromeos_lacros", "android" ], "policy_pref_mapping_tests": [ @@ -2691,7 +2748,7 @@ }, "KerberosEnabled": { "os": [ - "chromeos" + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -2708,7 +2765,7 @@ }, "KerberosRememberPasswordEnabled": { "os": [ - "chromeos" + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -2725,7 +2782,7 @@ }, "KerberosAddAccountsAllowed": { "os": [ - "chromeos" + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -2742,7 +2799,7 @@ }, "KerberosAccounts": { "os": [ - "chromeos" + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -2779,7 +2836,8 @@ "win", "linux", "mac", - "chromeos", + "chromeos_ash", + "chromeos_lacros", "android" ], "policy_pref_mapping_tests": [ @@ -2810,7 +2868,8 @@ "win", "linux", "mac", - "chromeos" + "chromeos_ash", + "chromeos_lacros" ], "policy_pref_mapping_tests": [ { @@ -2848,7 +2907,8 @@ "win", "linux", "mac", - "chromeos" + "chromeos_ash", + "chromeos_lacros" ], "policy_pref_mapping_tests": [ { @@ -2886,7 +2946,8 @@ "win", "linux", "mac", - "chromeos" + "chromeos_lacros", + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -2927,7 +2988,8 @@ "win", "linux", "mac", - "chromeos" + "chromeos_ash", + "chromeos_lacros" ], "can_be_recommended": true, "policy_pref_mapping_tests": [ @@ -2952,7 +3014,8 @@ "os": [ "win", "linux", - "chromeos" + "chromeos_ash", + "chromeos_lacros" ], "policy_pref_mapping_tests": [ { @@ -3050,7 +3113,8 @@ "os": [ "win", "linux", - "chromeos" + "chromeos_ash", + "chromeos_lacros" ], "policy_pref_mapping_tests": [ { @@ -3112,7 +3176,8 @@ "os": [ "win", "linux", - "chromeos" + "chromeos_ash", + "chromeos_lacros" ], "policy_pref_mapping_tests": [ { @@ -3214,7 +3279,8 @@ "win", "linux", "mac", - "chromeos" + "chromeos_ash", + "chromeos_lacros" ], "policy_pref_mapping_tests": [ { @@ -3246,7 +3312,8 @@ "win", "linux", "mac", - "chromeos" + "chromeos_ash", + "chromeos_lacros" ], "policy_pref_mapping_tests": [ { @@ -3266,7 +3333,8 @@ "win", "linux", "mac", - "chromeos" + "chromeos_ash", + "chromeos_lacros" ], "policy_pref_mapping_tests": [ { @@ -3286,7 +3354,8 @@ "win", "linux", "mac", - "chromeos" + "chromeos_ash", + "chromeos_lacros" ], "policy_pref_mapping_tests": [ { @@ -3306,7 +3375,8 @@ "win", "linux", "mac", - "chromeos" + "chromeos_ash", + "chromeos_lacros" ], "policy_pref_mapping_tests": [ { @@ -3326,7 +3396,8 @@ "win", "linux", "mac", - "chromeos" + "chromeos_ash", + "chromeos_lacros" ], "policy_pref_mapping_tests": [ { @@ -3352,7 +3423,8 @@ "win", "linux", "mac", - "chromeos" + "chromeos_ash", + "chromeos_lacros" ], "policy_pref_mapping_tests": [ { @@ -3372,7 +3444,8 @@ "win", "linux", "mac", - "chromeos" + "chromeos_ash", + "chromeos_lacros" ], "policy_pref_mapping_tests": [ { @@ -3396,7 +3469,8 @@ "win", "linux", "mac", - "chromeos" + "chromeos_ash", + "chromeos_lacros" ], "policy_pref_mapping_tests": [ { @@ -3460,7 +3534,8 @@ "win", "linux", "mac", - "chromeos" + "chromeos_ash", + "chromeos_lacros" ], "can_be_recommended": true, "policy_pref_mapping_tests": [ @@ -3499,7 +3574,8 @@ "win", "linux", "mac", - "chromeos" + "chromeos_ash", + "chromeos_lacros" ], "policy_pref_mapping_tests": [ { @@ -3537,7 +3613,8 @@ "win", "linux", "mac", - "chromeos" + "chromeos_ash", + "chromeos_lacros" ], "policy_pref_mapping_tests": [ { @@ -3597,7 +3674,8 @@ "win", "linux", "mac", - "chromeos" + "chromeos_ash", + "chromeos_lacros" ], "policy_pref_mapping_tests": [ { @@ -3621,7 +3699,8 @@ "win", "linux", "mac", - "chromeos" + "chromeos_ash", + "chromeos_lacros" ], "can_be_recommended": true, "policy_pref_mapping_tests": [ @@ -3682,7 +3761,8 @@ "win", "linux", "mac", - "chromeos" + "chromeos_ash", + "chromeos_lacros" ], "can_be_recommended": true, "policy_pref_mapping_tests": [ @@ -3703,7 +3783,8 @@ "win", "linux", "mac", - "chromeos", + "chromeos_ash", + "chromeos_lacros", "android" ], "can_be_recommended": true, @@ -3786,7 +3867,8 @@ "win", "linux", "mac", - "chromeos", + "chromeos_ash", + "chromeos_lacros", "android" ], "note": "TODO(http://crbug.com/106682): Flag this with can_be_recommended when bug is fixed.", @@ -3828,7 +3910,8 @@ "win", "linux", "mac", - "chromeos" + "chromeos_ash", + "chromeos_lacros" ], "note": "TODO(http://crbug.com/106682): Flag this with can_be_recommended when bug is fixed.", "policy_pref_mapping_tests": [ @@ -3859,7 +3942,8 @@ "win", "linux", "mac", - "chromeos" + "chromeos_ash", + "chromeos_lacros" ], "note": "TODO(http://crbug.com/106682): Flag this with can_be_recommended when bug is fixed.", "policy_pref_mapping_tests": [ @@ -3890,7 +3974,8 @@ "win", "linux", "mac", - "chromeos", + "chromeos_ash", + "chromeos_lacros", "android" ], "note": "TODO(http://crbug.com/106682): Flag this with can_be_recommended when bug is fixed.", @@ -3922,7 +4007,8 @@ "win", "linux", "mac", - "chromeos", + "chromeos_ash", + "chromeos_lacros", "android" ], "note": "TODO(http://crbug.com/106682): Flag this with can_be_recommended when bug is fixed.", @@ -3960,7 +4046,8 @@ "win", "linux", "mac", - "chromeos", + "chromeos_ash", + "chromeos_lacros", "android" ], "policy_pref_mapping_tests": [ @@ -3981,7 +4068,8 @@ "win", "linux", "mac", - "chromeos", + "chromeos_ash", + "chromeos_lacros", "android" ], "policy_pref_mapping_tests": [ @@ -4020,7 +4108,8 @@ "win", "linux", "mac", - "chromeos", + "chromeos_ash", + "chromeos_lacros", "android" ], "policy_pref_mapping_tests": [ @@ -4050,7 +4139,8 @@ "win", "linux", "mac", - "chromeos", + "chromeos_ash", + "chromeos_lacros", "android" ], "note": "TODO(http://crbug.com/106682): Flag this with can_be_recommended when bug is fixed.", @@ -4080,7 +4170,8 @@ "win", "linux", "mac", - "chromeos" + "chromeos_ash", + "chromeos_lacros" ], "note": "TODO(http://crbug.com/106682): Flag this with can_be_recommended when bug is fixed.", "policy_pref_mapping_tests": [ @@ -4121,7 +4212,8 @@ "win", "linux", "mac", - "chromeos", + "chromeos_ash", + "chromeos_lacros", "android" ], "note": "TODO(http://crbug.com/106682): Flag this with can_be_recommended when bug is fixed.", @@ -4163,7 +4255,8 @@ "win", "linux", "mac", - "chromeos" + "chromeos_ash", + "chromeos_lacros" ], "note": "TODO(http://crbug.com/106682): Flag this with can_be_recommended when bug is fixed.", "policy_pref_mapping_tests": [ @@ -4194,7 +4287,8 @@ "win", "linux", "mac", - "chromeos" + "chromeos_ash", + "chromeos_lacros" ], "policy_pref_mapping_tests": [ { @@ -4236,7 +4330,8 @@ "win", "linux", "mac", - "chromeos" + "chromeos_ash", + "chromeos_lacros" ], "policy_pref_mapping_tests": [ { @@ -4279,7 +4374,8 @@ "linux", "mac", "android", - "chromeos" + "chromeos_ash", + "chromeos_lacros" ], "note": "TODO(http://crbug.com/106682): Flag this with can_be_recommended when bug is fixed.", "policy_pref_mapping_tests": [ @@ -4310,7 +4406,8 @@ "win", "linux", "mac", - "chromeos" + "chromeos_ash", + "chromeos_lacros" ], "policy_pref_mapping_tests": [ { @@ -4348,7 +4445,8 @@ "win", "linux", "mac", - "chromeos" + "chromeos_ash", + "chromeos_lacros" ], "policy_pref_mapping_tests": [ { @@ -4380,7 +4478,8 @@ "win", "linux", "mac", - "chromeos" + "chromeos_ash", + "chromeos_lacros" ], "policy_pref_mapping_tests": [ { @@ -4418,7 +4517,8 @@ "win", "linux", "mac", - "chromeos" + "chromeos_ash", + "chromeos_lacros" ], "policy_pref_mapping_tests": [ { @@ -4450,7 +4550,8 @@ "win", "linux", "mac", - "chromeos" + "chromeos_ash", + "chromeos_lacros" ], "policy_pref_mapping_tests": [ { @@ -4488,7 +4589,8 @@ "win", "linux", "mac", - "chromeos" + "chromeos_lacros", + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -4516,7 +4618,8 @@ "win", "linux", "mac", - "chromeos" + "chromeos_lacros", + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -4544,7 +4647,8 @@ "win", "linux", "mac", - "chromeos" + "chromeos_lacros", + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -4572,7 +4676,8 @@ "win", "linux", "mac", - "chromeos" + "chromeos_lacros", + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -4600,7 +4705,8 @@ "win", "linux", "mac", - "chromeos", + "chromeos_ash", + "chromeos_lacros", "android" ], "policy_pref_mapping_tests": [ @@ -4619,7 +4725,8 @@ "win", "linux", "mac", - "chromeos", + "chromeos_ash", + "chromeos_lacros", "android" ], "policy_pref_mapping_tests": [ @@ -4638,7 +4745,8 @@ "win", "linux", "mac", - "chromeos" + "chromeos_ash", + "chromeos_lacros" ], "note": "TODO(http://crbug.com/106682): Flag this with can_be_recommended when bug is fixed.", "policy_pref_mapping_tests": [ @@ -4669,7 +4777,8 @@ "win", "linux", "mac", - "chromeos" + "chromeos_ash", + "chromeos_lacros" ], "note": "TODO(http://crbug.com/106682): Flag this with can_be_recommended when bug is fixed.", "policy_pref_mapping_tests": [ @@ -4690,7 +4799,8 @@ "win", "linux", "mac", - "chromeos", + "chromeos_ash", + "chromeos_lacros", "android" ], "note": "TODO(http://crbug.com/106682): Flag this with can_be_recommended when bug is fixed.", @@ -4712,7 +4822,8 @@ "win", "linux", "mac", - "chromeos", + "chromeos_ash", + "chromeos_lacros", "android" ], "note": "TODO(http://crbug.com/106682): Flag this with can_be_recommended when bug is fixed.", @@ -4734,7 +4845,8 @@ "win", "linux", "mac", - "chromeos", + "chromeos_ash", + "chromeos_lacros", "android" ], "note": "TODO(http://crbug.com/106682): Flag this with can_be_recommended when bug is fixed.", @@ -4756,7 +4868,8 @@ "win", "linux", "mac", - "chromeos" + "chromeos_ash", + "chromeos_lacros" ], "note": "TODO(http://crbug.com/106682): Flag this with can_be_recommended when bug is fixed.", "policy_pref_mapping_tests": [ @@ -4777,7 +4890,8 @@ "win", "linux", "mac", - "chromeos" + "chromeos_ash", + "chromeos_lacros" ], "note": "TODO(http://crbug.com/106682): Flag this with can_be_recommended when bug is fixed.", "policy_pref_mapping_tests": [ @@ -4798,7 +4912,8 @@ "win", "linux", "mac", - "chromeos" + "chromeos_ash", + "chromeos_lacros" ], "note": "TODO(http://crbug.com/106682): Flag this with can_be_recommended when bug is fixed.", "policy_pref_mapping_tests": [ @@ -4819,7 +4934,8 @@ "win", "linux", "mac", - "chromeos" + "chromeos_ash", + "chromeos_lacros" ], "note": "TODO(http://crbug.com/106682): Flag this with can_be_recommended when bug is fixed.", "policy_pref_mapping_tests": [ @@ -4840,7 +4956,8 @@ "win", "linux", "mac", - "chromeos", + "chromeos_ash", + "chromeos_lacros", "android" ], "note": "TODO(http://crbug.com/106682): Flag this with can_be_recommended when bug is fixed.", @@ -4862,7 +4979,8 @@ "win", "linux", "mac", - "chromeos", + "chromeos_ash", + "chromeos_lacros", "android" ], "note": "TODO(http://crbug.com/106682): Flag this with can_be_recommended when bug is fixed.", @@ -4884,7 +5002,8 @@ "win", "linux", "mac", - "chromeos", + "chromeos_ash", + "chromeos_lacros", "android" ], "note": "TODO(http://crbug.com/106682): Flag this with can_be_recommended when bug is fixed.", @@ -4906,7 +5025,8 @@ "win", "linux", "mac", - "chromeos", + "chromeos_ash", + "chromeos_lacros", "android" ], "note": "TODO(http://crbug.com/106682): Flag this with can_be_recommended when bug is fixed.", @@ -4940,7 +5060,8 @@ "win", "linux", "mac", - "chromeos", + "chromeos_ash", + "chromeos_lacros", "android" ], "note": "TODO(http://crbug.com/106682): Flag this with can_be_recommended when bug is fixed.", @@ -4962,7 +5083,8 @@ "win", "linux", "mac", - "chromeos", + "chromeos_ash", + "chromeos_lacros", "android" ], "note": "TODO(http://crbug.com/106682): Flag this with can_be_recommended when bug is fixed.", @@ -4984,7 +5106,8 @@ "win", "linux", "mac", - "chromeos" + "chromeos_ash", + "chromeos_lacros" ], "note": "TODO(http://crbug.com/106682): Flag this with can_be_recommended when bug is fixed.", "policy_pref_mapping_tests": [ @@ -5005,7 +5128,8 @@ "win", "linux", "mac", - "chromeos" + "chromeos_ash", + "chromeos_lacros" ], "note": "TODO(http://crbug.com/106682): Flag this with can_be_recommended when bug is fixed.", "policy_pref_mapping_tests": [ @@ -5027,7 +5151,8 @@ "linux", "mac", "android", - "chromeos" + "chromeos_ash", + "chromeos_lacros" ], "note": "TODO(http://crbug.com/106682): Flag this with can_be_recommended when bug is fixed.", "policy_pref_mapping_tests": [ @@ -5061,7 +5186,8 @@ "linux", "mac", "android", - "chromeos" + "chromeos_ash", + "chromeos_lacros" ], "note": "TODO(http://crbug.com/106682): Flag this with can_be_recommended when bug is fixed.", "policy_pref_mapping_tests": [ @@ -5094,7 +5220,8 @@ "win", "linux", "mac", - "chromeos", + "chromeos_ash", + "chromeos_lacros", "android" ], "policy_pref_mapping_tests": [ @@ -5123,7 +5250,7 @@ }, "DeviceLoginScreenWebUsbAllowDevicesForUrls": { "os": [ - "chromeos" + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -5156,7 +5283,8 @@ "win", "linux", "mac", - "chromeos", + "chromeos_ash", + "chromeos_lacros", "android" ], "note": "TODO(http://crbug.com/106682): Flag this with can_be_recommended when bug is fixed.", @@ -5178,7 +5306,8 @@ "win", "linux", "mac", - "chromeos", + "chromeos_ash", + "chromeos_lacros", "android" ], "policy_pref_mapping_tests": [ @@ -5199,7 +5328,8 @@ "win", "linux", "mac", - "chromeos" + "chromeos_ash", + "chromeos_lacros" ], "policy_pref_mapping_tests": [ { @@ -5219,7 +5349,8 @@ "win", "linux", "mac", - "chromeos" + "chromeos_ash", + "chromeos_lacros" ], "note": "TODO(http://crbug.com/106682): Flag this with can_be_recommended when bug is fixed.", "policy_pref_mapping_tests": [ @@ -5240,7 +5371,8 @@ "win", "linux", "mac", - "chromeos" + "chromeos_ash", + "chromeos_lacros" ], "policy_pref_mapping_tests": [ { @@ -5274,7 +5406,8 @@ "win", "linux", "mac", - "chromeos" + "chromeos_ash", + "chromeos_lacros" ], "policy_pref_mapping_tests": [ { @@ -5316,7 +5449,8 @@ "win", "linux", "mac", - "chromeos" + "chromeos_ash", + "chromeos_lacros" ], "policy_pref_mapping_tests": [ { @@ -5355,7 +5489,8 @@ "win", "linux", "mac", - "chromeos", + "chromeos_ash", + "chromeos_lacros", "android" ], "can_be_recommended": true, @@ -5372,7 +5507,7 @@ }, "AppRecommendationZeroStateEnabled": { "os": [ - "chromeos" + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -5399,7 +5534,8 @@ "win", "linux", "mac", - "chromeos" + "chromeos_ash", + "chromeos_lacros" ], "can_be_recommended": true, "policy_pref_mapping_tests": [ @@ -5418,7 +5554,8 @@ "win", "linux", "mac", - "chromeos", + "chromeos_ash", + "chromeos_lacros", "android" ], "policy_pref_mapping_tests": [ @@ -5474,7 +5611,8 @@ "win", "linux", "mac", - "chromeos" + "chromeos_ash", + "chromeos_lacros" ], "policy_pref_mapping_tests": [ { @@ -5636,7 +5774,8 @@ "win", "linux", "mac", - "chromeos", + "chromeos_ash", + "chromeos_lacros", "android" ], "policy_pref_mapping_tests": [ @@ -5669,7 +5808,8 @@ "win", "linux", "mac", - "chromeos", + "chromeos_ash", + "chromeos_lacros", "android" ], "policy_pref_mapping_tests": [ @@ -5720,7 +5860,8 @@ "win", "linux", "mac", - "chromeos", + "chromeos_ash", + "chromeos_lacros", "android" ], "policy_pref_mapping_tests": [ @@ -5753,7 +5894,8 @@ "win", "linux", "mac", - "chromeos", + "chromeos_ash", + "chromeos_lacros", "android" ], "policy_pref_mapping_tests": [ @@ -5859,7 +6001,8 @@ "win", "linux", "mac", - "chromeos" + "chromeos_ash", + "chromeos_lacros" ], "policy_pref_mapping_tests": [ { @@ -5942,7 +6085,8 @@ "win", "linux", "mac", - "chromeos", + "chromeos_ash", + "chromeos_lacros", "android" ], "policy_pref_mapping_tests": [ @@ -5984,7 +6128,8 @@ "win", "linux", "mac", - "chromeos" + "chromeos_ash", + "chromeos_lacros" ], "can_be_recommended": true, "policy_pref_mapping_tests": [ @@ -6014,7 +6159,8 @@ "win", "linux", "mac", - "chromeos" + "chromeos_ash", + "chromeos_lacros" ], "policy_pref_mapping_tests": [ { @@ -6080,7 +6226,8 @@ "os": [ "mac", "android", - "chromeos" + "chromeos_ash", + "chromeos_lacros" ], "policy_pref_mapping_tests": [ { @@ -6111,7 +6258,8 @@ "win", "linux", "mac", - "chromeos", + "chromeos_ash", + "chromeos_lacros", "android" ], "policy_pref_mapping_tests": [ @@ -6143,7 +6291,8 @@ "win", "linux", "mac", - "chromeos" + "chromeos_ash", + "chromeos_lacros" ], "policy_pref_mapping_tests": [ { @@ -6166,7 +6315,8 @@ "win", "linux", "mac", - "chromeos" + "chromeos_ash", + "chromeos_lacros" ], "can_be_recommended": true, "policy_pref_mapping_tests": [ @@ -6193,7 +6343,8 @@ "win", "linux", "mac", - "chromeos" + "chromeos_ash", + "chromeos_lacros" ], "policy_pref_mapping_tests": [ { @@ -6463,7 +6614,8 @@ "win", "linux", "mac", - "chromeos", + "chromeos_ash", + "chromeos_lacros", "android" ], "policy_pref_mapping_tests": [ @@ -6501,7 +6653,8 @@ "win", "linux", "mac", - "chromeos", + "chromeos_ash", + "chromeos_lacros", "android" ], "policy_pref_mapping_tests": [ @@ -6522,7 +6675,8 @@ "win", "linux", "mac", - "chromeos", + "chromeos_ash", + "chromeos_lacros", "android" ], "policy_pref_mapping_tests": [ @@ -6555,7 +6709,8 @@ "win", "linux", "mac", - "chromeos", + "chromeos_ash", + "chromeos_lacros", "android" ], "policy_pref_mapping_tests": [ @@ -6576,7 +6731,8 @@ "win", "linux", "mac", - "chromeos", + "chromeos_ash", + "chromeos_lacros", "android" ], "policy_pref_mapping_tests": [ @@ -6597,7 +6753,8 @@ "win", "linux", "mac", - "chromeos", + "chromeos_ash", + "chromeos_lacros", "android" ], "policy_pref_mapping_tests": [ @@ -6624,7 +6781,8 @@ }, "SuppressUnsupportedOSWarning": { "os": [ - "chromeos", + "chromeos_ash", + "chromeos_lacros", "linux", "mac", "win" @@ -6647,7 +6805,8 @@ "win", "linux", "mac", - "chromeos", + "chromeos_ash", + "chromeos_lacros", "android" ], "policy_pref_mapping_tests": [ @@ -6676,7 +6835,8 @@ "win", "linux", "mac", - "chromeos", + "chromeos_ash", + "chromeos_lacros", "android" ], "policy_pref_mapping_tests": [ @@ -6695,7 +6855,8 @@ "win", "linux", "mac", - "chromeos" + "chromeos_ash", + "chromeos_lacros" ], "policy_pref_mapping_tests": [ { @@ -6713,7 +6874,8 @@ "win", "linux", "mac", - "chromeos" + "chromeos_ash", + "chromeos_lacros" ], "policy_pref_mapping_tests": [ { @@ -6733,7 +6895,8 @@ "win", "linux", "mac", - "chromeos" + "chromeos_ash", + "chromeos_lacros" ], "policy_pref_mapping_tests": [ { @@ -6766,7 +6929,8 @@ "win", "linux", "mac", - "chromeos" + "chromeos_ash", + "chromeos_lacros" ], "policy_pref_mapping_tests": [ { @@ -6786,7 +6950,8 @@ "win", "linux", "mac", - "chromeos", + "chromeos_ash", + "chromeos_lacros", "android" ], "policy_pref_mapping_tests": [ @@ -6805,7 +6970,8 @@ "win", "linux", "mac", - "chromeos" + "chromeos_ash", + "chromeos_lacros" ], "policy_pref_mapping_tests": [ { @@ -6826,7 +6992,8 @@ "win", "linux", "mac", - "chromeos" + "chromeos_ash", + "chromeos_lacros" ], "policy_pref_mapping_tests": [ { @@ -6934,7 +7101,8 @@ "win", "linux", "mac", - "chromeos" + "chromeos_ash", + "chromeos_lacros" ], "policy_pref_mapping_tests": [ { @@ -6954,7 +7122,8 @@ "win", "linux", "mac", - "chromeos" + "chromeos_ash", + "chromeos_lacros" ], "policy_pref_mapping_tests": [ { @@ -6971,7 +7140,7 @@ }, "RelaunchHeadsUpPeriod": { "os": [ - "chromeos" + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -6991,7 +7160,8 @@ "win", "linux", "mac", - "chromeos" + "chromeos_ash", + "chromeos_lacros" ], "policy_pref_mapping_tests": [ { @@ -7021,7 +7191,8 @@ "win", "linux", "mac", - "chromeos" + "chromeos_ash", + "chromeos_lacros" ], "policy_pref_mapping_tests": [ { @@ -7063,7 +7234,8 @@ "win", "linux", "mac", - "chromeos", + "chromeos_ash", + "chromeos_lacros", "android" ], "policy_pref_mapping_tests": [ @@ -7157,7 +7329,8 @@ "win", "linux", "mac", - "chromeos", + "chromeos_ash", + "chromeos_lacros", "android" ], "policy_pref_mapping_tests": [ @@ -7196,7 +7369,8 @@ "win", "linux", "mac", - "chromeos", + "chromeos_ash", + "chromeos_lacros", "android" ], "policy_pref_mapping_tests": [ @@ -7215,7 +7389,7 @@ }, "FullscreenAlertEnabled": { "os": [ - "chromeos" + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -7233,7 +7407,8 @@ "win", "linux", "mac", - "chromeos" + "chromeos_ash", + "chromeos_lacros" ], "policy_pref_mapping_tests": [ { @@ -7253,7 +7428,8 @@ "win", "linux", "mac", - "chromeos", + "chromeos_ash", + "chromeos_lacros", "android" ], "policy_pref_mapping_tests": [ @@ -7271,7 +7447,8 @@ }, "DNSInterceptionChecksEnabled": { "os": [ - "chromeos", + "chromeos_ash", + "chromeos_lacros", "linux", "mac", "win" @@ -7292,7 +7469,8 @@ }, "IntranetRedirectBehavior": { "os": [ - "chromeos", + "chromeos_ash", + "chromeos_lacros", "linux", "mac", "win" @@ -7313,7 +7491,7 @@ }, "ChromeOsLockOnIdleSuspend": { "os": [ - "chromeos" + "chromeos_ash" ], "can_be_recommended": true, "policy_pref_mapping_tests": [ @@ -7329,7 +7507,8 @@ }, "PolicyRefreshRate": { "os": [ - "chromeos", + "chromeos_ash", + "chromeos_lacros", "linux", "mac", "win" @@ -7355,7 +7534,7 @@ }, "GaiaOfflineSigninTimeLimitDays": { "os": [ - "chromeos" + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -7372,7 +7551,7 @@ }, "SAMLOfflineSigninTimeLimit": { "os": [ - "chromeos" + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -7420,7 +7599,7 @@ }, "GaiaLockScreenOfflineSigninTimeLimitDays": { "os": [ - "chromeos" + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -7437,7 +7616,7 @@ }, "SamlLockScreenOfflineSigninTimeLimitDays": { "os": [ - "chromeos" + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -7507,7 +7686,7 @@ }, "DriveDisabled": { "os": [ - "chromeos" + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -7542,7 +7721,7 @@ }, "DriveDisabledOverCellular": { "os": [ - "chromeos" + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -7577,7 +7756,7 @@ }, "PinnedLauncherApps": { "os": [ - "chromeos" + "chromeos_ash" ], "can_be_recommended": true, "policy_pref_mapping_tests": [ @@ -7593,7 +7772,7 @@ }, "ExternalStorageDisabled": { "os": [ - "chromeos" + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -7628,7 +7807,7 @@ }, "ExternalStorageReadOnly": { "os": [ - "chromeos" + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -7663,7 +7842,7 @@ }, "AudioOutputAllowed": { "os": [ - "chromeos" + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -7680,7 +7859,7 @@ }, "ShowLogoutButtonInTray": { "os": [ - "chromeos" + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -7695,7 +7874,7 @@ }, "ShelfAutoHideBehavior": { "os": [ - "chromeos" + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -7710,7 +7889,7 @@ }, "ShelfAlignment": { "os": [ - "chromeos" + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -7728,7 +7907,7 @@ }, "ManagedGuestSessionPrivacyWarningsEnabled": { "os": [ - "chromeos" + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -7751,7 +7930,7 @@ }, "SystemFeaturesDisableList": { "os": [ - "chromeos" + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -7779,7 +7958,7 @@ }, "SystemFeaturesDisableMode": { "os": [ - "chromeos" + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -7796,7 +7975,7 @@ }, "SessionLengthLimit": { "os": [ - "chromeos" + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -7813,7 +7992,7 @@ }, "ScreenDimDelayAC": { "os": [ - "chromeos" + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -7849,7 +8028,7 @@ }, "ScreenOffDelayAC": { "os": [ - "chromeos" + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -7903,7 +8082,7 @@ }, "IdleWarningDelayAC": { "os": [ - "chromeos" + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -7918,7 +8097,7 @@ }, "IdleDelayAC": { "os": [ - "chromeos" + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -7933,7 +8112,7 @@ }, "ScreenDimDelayBattery": { "os": [ - "chromeos" + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -7969,7 +8148,7 @@ }, "ScreenOffDelayBattery": { "os": [ - "chromeos" + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -7984,7 +8163,7 @@ }, "IdleWarningDelayBattery": { "os": [ - "chromeos" + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -7999,7 +8178,7 @@ }, "IdleDelayBattery": { "os": [ - "chromeos" + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -8014,7 +8193,7 @@ }, "IdleAction": { "os": [ - "chromeos" + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -8030,7 +8209,7 @@ }, "IdleActionAC": { "os": [ - "chromeos" + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -8045,7 +8224,7 @@ }, "IdleActionBattery": { "os": [ - "chromeos" + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -8060,7 +8239,7 @@ }, "LidCloseAction": { "os": [ - "chromeos" + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -8075,7 +8254,7 @@ }, "PowerManagementUsesAudioActivity": { "os": [ - "chromeos" + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -8090,7 +8269,7 @@ }, "PowerManagementUsesVideoActivity": { "os": [ - "chromeos" + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -8106,7 +8285,7 @@ "PresentationIdleDelayScale": {}, "PresentationScreenDimDelayScale": { "os": [ - "chromeos" + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -8123,7 +8302,7 @@ }, "AllowWakeLocks": { "os": [ - "chromeos" + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -8138,7 +8317,7 @@ }, "AllowScreenWakeLocks": { "os": [ - "chromeos" + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -8153,7 +8332,7 @@ }, "UserActivityScreenDimDelayScale": { "os": [ - "chromeos" + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -8170,7 +8349,7 @@ }, "WaitForInitialUserActivity": { "os": [ - "chromeos" + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -8188,7 +8367,7 @@ }, "PowerManagementIdleSettings": { "os": [ - "chromeos" + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -8245,7 +8424,7 @@ }, "ScreenLockDelayAC": { "os": [ - "chromeos" + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -8272,7 +8451,7 @@ }, "ScreenLockDelayBattery": { "os": [ - "chromeos" + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -8298,7 +8477,7 @@ }, "ScreenLockDelays": { "os": [ - "chromeos" + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -8352,7 +8531,7 @@ }, "SecurityTokenSessionBehavior": { "os": [ - "chromeos" + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -8377,7 +8556,7 @@ }, "SecurityTokenSessionNotificationSeconds": { "os": [ - "chromeos" + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -8402,7 +8581,7 @@ }, "TermsOfServiceURL": { "os": [ - "chromeos" + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -8417,7 +8596,7 @@ }, "ShowAccessibilityOptionsInSystemTrayMenu": { "os": [ - "chromeos" + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -8432,7 +8611,7 @@ }, "LargeCursorEnabled": { "os": [ - "chromeos" + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -8447,7 +8626,7 @@ }, "StickyKeysEnabled": { "os": [ - "chromeos" + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -8462,7 +8641,7 @@ }, "SpokenFeedbackEnabled": { "os": [ - "chromeos" + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -8477,7 +8656,7 @@ }, "DictationEnabled": { "os": [ - "chromeos" + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -8492,7 +8671,7 @@ }, "PrimaryMouseButtonSwitch": { "os": [ - "chromeos" + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -8507,7 +8686,7 @@ }, "KeyboardFocusHighlightEnabled": { "os": [ - "chromeos" + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -8522,7 +8701,7 @@ }, "CursorHighlightEnabled": { "os": [ - "chromeos" + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -8537,7 +8716,7 @@ }, "CaretHighlightEnabled": { "os": [ - "chromeos" + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -8552,7 +8731,7 @@ }, "MonoAudioEnabled": { "os": [ - "chromeos" + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -8567,7 +8746,7 @@ }, "AutoclickEnabled": { "os": [ - "chromeos" + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -8582,7 +8761,7 @@ }, "HighContrastEnabled": { "os": [ - "chromeos" + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -8597,7 +8776,7 @@ }, "AccessibilityShortcutsEnabled": { "os": [ - "chromeos" + "chromeos_ash" ], "can_be_recommended": true, "policy_pref_mapping_tests": [ @@ -8639,7 +8818,7 @@ }, "SelectToSpeakEnabled": { "os": [ - "chromeos" + "chromeos_ash" ], "can_be_recommended": true, "policy_pref_mapping_tests": [ @@ -8675,7 +8854,7 @@ }, "ScreenMagnifierType": { "os": [ - "chromeos" + "chromeos_ash" ], "can_be_recommended": true, "policy_pref_mapping_tests": [ @@ -8755,7 +8934,7 @@ }, "VirtualKeyboardEnabled": { "os": [ - "chromeos" + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -8770,7 +8949,7 @@ }, "VirtualKeyboardFeatures": { "os": [ - "chromeos" + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -8791,7 +8970,7 @@ }, "KeyboardDefaultToFunctionKeys": { "os": [ - "chromeos" + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -8806,7 +8985,7 @@ }, "AttestationEnabledForUser": { "os": [ - "chromeos" + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -8821,7 +9000,8 @@ }, "AttestationExtensionAllowlist": { "os": [ - "chromeos" + "chromeos_ash", + "chromeos_lacros" ], "policy_pref_mapping_tests": [ { @@ -8839,7 +9019,8 @@ }, "AttestationExtensionWhitelist": { "os": [ - "chromeos" + "chromeos_ash", + "chromeos_lacros" ], "policy_pref_mapping_tests": [ { @@ -8862,7 +9043,8 @@ "os": [ "win", "linux", - "chromeos" + "chromeos_ash", + "chromeos_lacros" ], "policy_pref_mapping_tests": [ { @@ -8878,7 +9060,7 @@ }, "ChromeOsMultiProfileUserBehavior": { "os": [ - "chromeos" + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -8893,7 +9075,7 @@ }, "SecondaryGoogleAccountSigninAllowed": { "os": [ - "chromeos" + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -9025,7 +9207,7 @@ }, "TouchVirtualKeyboardEnabled": { "os": [ - "chromeos" + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -9040,7 +9222,7 @@ }, "EasyUnlockAllowed": { "os": [ - "chromeos" + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -9058,7 +9240,7 @@ }, "ForceMaximizeOnFirstRun": { "os": [ - "chromeos" + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -9076,7 +9258,8 @@ "win", "linux", "mac", - "chromeos", + "chromeos_ash", + "chromeos_lacros", "android" ], "policy_pref_mapping_tests": [ @@ -9106,7 +9289,8 @@ "win", "mac", "linux", - "chromeos", + "chromeos_ash", + "chromeos_lacros", "android" ], "policy_pref_mapping_tests": [ @@ -9139,7 +9323,7 @@ }, "DeviceAttributesAllowedForOrigins": { "os": [ - "chromeos" + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -9163,7 +9347,8 @@ "win", "linux", "mac", - "chromeos" + "chromeos_ash", + "chromeos_lacros" ], "policy_pref_mapping_tests": [ { @@ -9191,7 +9376,8 @@ "AllowDinosaurEasterEgg.CrOSDefault": { "note": "The default is changed by default_for_enterprise_users only on Chrome OS", "os": [ - "chromeos" + "chromeos_ash", + "chromeos_lacros" ], "policy_pref_mapping_tests": [ { @@ -9267,7 +9453,7 @@ }, "UnifiedDesktopEnabledByDefault": { "os": [ - "chromeos" + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -9285,7 +9471,8 @@ "win", "linux", "mac", - "chromeos" + "chromeos_ash", + "chromeos_lacros" ], "policy_pref_mapping_tests": [ { @@ -9300,7 +9487,7 @@ }, "ArcEnabled": { "os": [ - "chromeos" + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -9318,7 +9505,7 @@ }, "AllowScreenLock": { "os": [ - "chromeos" + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -9333,7 +9520,7 @@ }, "QuickUnlockModeAllowlist": { "os": [ - "chromeos" + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -9354,7 +9541,7 @@ }, "QuickUnlockModeWhitelist": { "os": [ - "chromeos" + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -9375,7 +9562,7 @@ }, "QuickUnlockTimeout": { "os": [ - "chromeos" + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -9390,7 +9577,7 @@ }, "PinUnlockMinimumLength": { "os": [ - "chromeos" + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -9405,7 +9592,7 @@ }, "PinUnlockMaximumLength": { "os": [ - "chromeos" + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -9420,7 +9607,7 @@ }, "PinUnlockWeakPinsAllowed": { "os": [ - "chromeos" + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -9435,7 +9622,7 @@ }, "PinUnlockAutosubmitEnabled": { "os": [ - "chromeos" + "chromeos_ash" ], "can_be_recommended": true, "policy_pref_mapping_tests": [ @@ -9460,7 +9647,7 @@ }, "ReportArcStatusEnabled": { "os": [ - "chromeos" + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -9495,7 +9682,7 @@ }, "ReportCrostiniUsageEnabled": { "os": [ - "chromeos" + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -9530,7 +9717,7 @@ }, "SmsMessagesAllowed": { "os": [ - "chromeos" + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -9565,7 +9752,7 @@ }, "WifiSyncAndroidAllowed": { "os": [ - "chromeos" + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -9600,7 +9787,7 @@ }, "SmartLockSigninAllowed": { "os": [ - "chromeos" + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -9635,7 +9822,7 @@ }, "InstantTetheringAllowed": { "os": [ - "chromeos" + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -9670,7 +9857,7 @@ }, "PhoneHubAllowed": { "os": [ - "chromeos" + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -9705,7 +9892,7 @@ }, "PhoneHubNotificationsAllowed": { "os": [ - "chromeos" + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -9740,7 +9927,7 @@ }, "PhoneHubTaskContinuationAllowed": { "os": [ - "chromeos" + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -9775,7 +9962,7 @@ }, "NearbyShareAllowed": { "os": [ - "chromeos" + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -9813,7 +10000,7 @@ }, "SchedulerConfiguration": { "os": [ - "chromeos" + "chromeos_ash" ], "can_be_recommended": true, "policy_pref_mapping_tests": [ @@ -9871,7 +10058,7 @@ }, "AllowedLanguages": { "os": [ - "chromeos" + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -9889,7 +10076,7 @@ }, "AllowedInputMethods": { "os": [ - "chromeos" + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -9921,7 +10108,8 @@ "win", "linux", "mac", - "chromeos", + "chromeos_ash", + "chromeos_lacros", "android" ], "policy_pref_mapping_tests": [ @@ -9957,7 +10145,7 @@ }, "NetworkFileSharesAllowed": { "os": [ - "chromeos" + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -9975,7 +10163,8 @@ "win", "linux", "mac", - "chromeos" + "chromeos_ash", + "chromeos_lacros" ], "policy_pref_mapping_tests": [ { @@ -9990,7 +10179,7 @@ }, "PowerSmartDimEnabled": { "os": [ - "chromeos" + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -10008,7 +10197,8 @@ "win", "linux", "mac", - "chromeos", + "chromeos_ash", + "chromeos_lacros", "android" ], "policy_pref_mapping_tests": [ @@ -10028,7 +10218,7 @@ }, "NetBiosShareDiscoveryEnabled": { "os": [ - "chromeos" + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -10046,7 +10236,8 @@ "win", "linux", "mac", - "chromeos", + "chromeos_ash", + "chromeos_lacros", "android" ], "policy_pref_mapping_tests": [ @@ -10062,7 +10253,7 @@ }, "NTLMShareAuthenticationEnabled": { "os": [ - "chromeos" + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -10080,7 +10271,8 @@ "win", "linux", "mac", - "chromeos" + "chromeos_ash", + "chromeos_lacros" ], "policy_pref_mapping_tests": [ { @@ -10097,7 +10289,7 @@ }, "NetworkFileSharesPreconfiguredShares": { "os": [ - "chromeos" + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -10129,7 +10321,7 @@ }, "ScreenBrightnessPercent": { "os": [ - "chromeos" + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -10163,7 +10355,7 @@ }, "UserPluginVmAllowed": { "os": [ - "chromeos" + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -10178,7 +10370,7 @@ }, "PluginVmImage": { "os": [ - "chromeos" + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -10196,7 +10388,7 @@ }, "PluginVmUserId": { "os": [ - "chromeos" + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -10213,7 +10405,7 @@ }, "PluginVmDataCollectionAllowed": { "os": [ - "chromeos" + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -10228,7 +10420,7 @@ }, "PluginVmRequiredFreeDiskSpace": { "os": [ - "chromeos" + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -10243,7 +10435,7 @@ }, "VoiceInteractionHotwordEnabled": { "os": [ - "chromeos" + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -10281,7 +10473,8 @@ "win", "linux", "mac", - "chromeos" + "chromeos_ash", + "chromeos_lacros" ], "policy_pref_mapping_tests": [ { @@ -10316,7 +10509,7 @@ }, "SamlInSessionPasswordChangeEnabled": { "os": [ - "chromeos" + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -10351,7 +10544,7 @@ }, "SamlPasswordExpirationAdvanceWarningDays": { "os": [ - "chromeos" + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -10376,7 +10569,7 @@ }, "LockScreenReauthenticationEnabled": { "os": [ - "chromeos" + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -10411,7 +10604,7 @@ }, "VmManagementCliAllowed": { "os": [ - "chromeos" + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -10449,7 +10642,8 @@ "win", "linux", "mac", - "chromeos" + "chromeos_ash", + "chromeos_lacros" ], "policy_pref_mapping_tests": [ { @@ -10493,7 +10687,8 @@ "win", "linux", "mac", - "chromeos" + "chromeos_ash", + "chromeos_lacros" ], "policy_pref_mapping_tests": [ { @@ -10534,7 +10729,7 @@ }, "LoginDisplayPasswordButtonEnabled": { "os": [ - "chromeos" + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -10569,7 +10764,7 @@ }, "SuggestedContentEnabled": { "os": [ - "chromeos" + "chromeos_ash" ], "can_be_recommended": true, "policy_pref_mapping_tests": [ @@ -10606,7 +10801,7 @@ }, "UserBorealisAllowed": { "os": [ - "chromeos" + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -10642,7 +10837,7 @@ "----- Chrome OS device policies ---------------------------------------": {}, "DevicePolicyRefreshRate": { "os": [ - "chromeos" + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -10911,7 +11106,7 @@ }, "DeviceLoginScreenAccessibilityShortcutsEnabled": { "os": [ - "chromeos" + "chromeos_ash" ], "can_be_recommended": true, "policy_pref_mapping_tests": [ @@ -10974,7 +11169,7 @@ }, "DeviceLoginScreenCaretHighlightEnabled": { "os": [ - "chromeos" + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -11033,7 +11228,7 @@ }, "DeviceChromeVariations": { "os": [ - "chromeos" + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -11085,7 +11280,7 @@ }, "UptimeLimit": { "os": [ - "chromeos" + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -11124,7 +11319,7 @@ }, "RebootAfterUpdate": { "os": [ - "chromeos" + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -11162,7 +11357,7 @@ }, "DeviceScheduledReboot": { "os": [ - "chromeos" + "chromeos_ash" ], "reason_for_missing_test": "Maps into CrosSettings" }, @@ -11228,7 +11423,8 @@ "win", "linux", "mac", - "chromeos" + "chromeos_ash", + "chromeos_lacros" ], "policy_pref_mapping_tests": [ { @@ -11245,7 +11441,7 @@ }, "NetworkThrottlingEnabled": { "os": [ - "chromeos" + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -11266,7 +11462,7 @@ }, "DeviceWiFiFastTransitionEnabled": { "os": [ - "chromeos" + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -11286,7 +11482,7 @@ }, "DeviceLoginScreenExtensions": { "os": [ - "chromeos" + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -11342,7 +11538,7 @@ }, "NoteTakingAppsLockScreenWhitelist": { "os": [ - "chromeos" + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -11357,7 +11553,7 @@ }, "NoteTakingAppsLockScreenAllowlist": { "os": [ - "chromeos" + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -11372,7 +11568,7 @@ }, "CastReceiverEnabled": { "os": [ - "chromeos" + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -11405,7 +11601,7 @@ }, "DeviceExternalPrintServersAllowlist": { "os": [ - "chromeos" + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -11479,7 +11675,8 @@ "win", "linux", "mac", - "chromeos" + "chromeos_ash", + "chromeos_lacros" ], "policy_pref_mapping_tests": [ { @@ -11510,7 +11707,8 @@ "win", "linux", "mac", - "chromeos" + "chromeos_ash", + "chromeos_lacros" ], "policy_pref_mapping_tests": [ { @@ -11528,7 +11726,8 @@ "win", "linux", "mac", - "chromeos" + "chromeos_ash", + "chromeos_lacros" ], "policy_pref_mapping_tests": [ { @@ -11572,7 +11771,8 @@ "win", "linux", "mac", - "chromeos", + "chromeos_ash", + "chromeos_lacros", "android" ], "policy_pref_mapping_tests": [ @@ -11641,7 +11841,7 @@ }, "CrostiniAllowed": { "os": [ - "chromeos" + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -11679,7 +11879,7 @@ }, "CrostiniExportImportUIAllowed": { "os": [ - "chromeos" + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -11714,7 +11914,7 @@ }, "CrostiniRootAccessAllowed": { "os": [ - "chromeos" + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -11752,7 +11952,7 @@ }, "CrostiniArcAdbSideloadingAllowed": { "os": [ - "chromeos" + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -11791,7 +11991,7 @@ }, "CrostiniPortForwardingAllowed": { "os": [ - "chromeos" + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -11870,7 +12070,8 @@ "win", "mac", "linux", - "chromeos" + "chromeos_ash", + "chromeos_lacros" ], "policy_pref_mapping_tests": [ { @@ -11894,7 +12095,8 @@ "win", "mac", "linux", - "chromeos" + "chromeos_ash", + "chromeos_lacros" ], "policy_pref_mapping_tests": [ { @@ -11950,7 +12152,8 @@ "win", "linux", "mac", - "chromeos" + "chromeos_ash", + "chromeos_lacros" ], "policy_pref_mapping_tests": [ { @@ -11968,7 +12171,8 @@ "win", "linux", "mac", - "chromeos" + "chromeos_ash", + "chromeos_lacros" ], "policy_pref_mapping_tests": [ { @@ -11994,7 +12198,8 @@ "win", "linux", "mac", - "chromeos" + "chromeos_ash", + "chromeos_lacros" ], "policy_pref_mapping_tests": [ { @@ -12020,7 +12225,7 @@ }, "ArcAppInstallEventLoggingEnabled": { "os": [ - "chromeos" + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -12035,7 +12240,7 @@ }, "ExtensionInstallEventLoggingEnabled": { "os": [ - "chromeos" + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -12050,7 +12255,7 @@ }, "UsageTimeLimit": { "os": [ - "chromeos" + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -12117,7 +12322,7 @@ }, "EnableSyncConsent": { "os": [ - "chromeos" + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -12144,7 +12349,8 @@ "win", "linux", "mac", - "chromeos" + "chromeos_ash", + "chromeos_lacros" ], "policy_pref_mapping_tests": [ { @@ -12165,7 +12371,7 @@ }, "DeviceAllowMGSToStoreDisplayProperties": { "os": [ - "chromeos" + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -12185,7 +12391,8 @@ "win", "linux", "mac", - "chromeos" + "chromeos_ash", + "chromeos_lacros" ], "policy_pref_mapping_tests": [ { @@ -12227,7 +12434,7 @@ }, "ParentAccessCodeConfig": { "os": [ - "chromeos" + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -12260,7 +12467,7 @@ }, "ClientCertificateManagementAllowed": { "os": [ - "chromeos" + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -12275,7 +12482,7 @@ }, "CACertificateManagementAllowed": { "os": [ - "chromeos" + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -12290,7 +12497,7 @@ }, "AssistantOnboardingMode": { "os": [ - "chromeos" + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -12307,7 +12514,7 @@ }, "VoiceInteractionContextEnabled": { "os": [ - "chromeos" + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -12357,7 +12564,7 @@ }, "DevicePowerPeakShiftEnabled": { "os": [ - "chromeos" + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -12374,7 +12581,7 @@ }, "DevicePowerPeakShiftBatteryThreshold": { "os": [ - "chromeos" + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -12391,7 +12598,7 @@ }, "DevicePowerPeakShiftDayConfig": { "os": [ - "chromeos" + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -12441,7 +12648,7 @@ }, "DeviceBootOnAcEnabled": { "os": [ - "chromeos" + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -12461,7 +12668,7 @@ }, "DeviceAdvancedBatteryChargeModeEnabled": { "os": [ - "chromeos" + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -12478,7 +12685,7 @@ }, "DeviceAdvancedBatteryChargeModeDayConfig": { "os": [ - "chromeos" + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -12520,7 +12727,7 @@ }, "DeviceBatteryChargeMode": { "os": [ - "chromeos" + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -12537,7 +12744,7 @@ }, "DeviceBatteryChargeCustomStartCharging": { "os": [ - "chromeos" + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -12554,7 +12761,7 @@ }, "DeviceBatteryChargeCustomStopCharging": { "os": [ - "chromeos" + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -12571,7 +12778,7 @@ }, "DeviceUsbPowerShareEnabled": { "os": [ - "chromeos" + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -12594,7 +12801,7 @@ }, "EmojiSuggestionEnabled": { "os": [ - "chromeos" + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -12609,7 +12816,7 @@ }, "PerAppTimeLimits": { "os": [ - "chromeos" + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -12658,7 +12865,7 @@ }, "PerAppTimeLimitsWhitelist": { "os": [ - "chromeos" + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -12692,7 +12899,7 @@ }, "PerAppTimeLimitsAllowlist": { "os": [ - "chromeos" + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -12726,7 +12933,7 @@ }, "DeviceLoginScreenPrivacyScreenEnabled": { "os": [ - "chromeos" + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -12744,7 +12951,7 @@ }, "PrivacyScreenEnabled": { "os": [ - "chromeos" + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -12759,7 +12966,7 @@ }, "RequiredClientCertificateForUser": { "os": [ - "chromeos" + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -12803,7 +13010,7 @@ }, "RequiredClientCertificateForDevice": { "os": [ - "chromeos" + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -12849,7 +13056,7 @@ }, "DeviceArcDataSnapshotHours": { "os": [ - "chromeos" + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -12923,7 +13130,7 @@ }, "ArcBackupRestoreServiceEnabled": { "os": [ - "chromeos" + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -12940,7 +13147,7 @@ }, "ArcGoogleLocationServicesEnabled": { "os": [ - "chromeos" + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -12960,7 +13167,8 @@ "win", "linux", "mac", - "chromeos" + "chromeos_ash", + "chromeos_lacros" ], "policy_pref_mapping_tests": [ { @@ -13018,7 +13226,8 @@ "win", "linux", "mac", - "chromeos" + "chromeos_ash", + "chromeos_lacros" ], "note": "Policy uses default value if CloudReportingEnabled is false or unset.", "policy_pref_mapping_tests": [ @@ -13154,7 +13363,8 @@ "win", "linux", "mac", - "chromeos" + "chromeos_ash", + "chromeos_lacros" ], "policy_pref_mapping_tests": [ { @@ -13177,7 +13387,7 @@ }, "VpnConfigAllowed": { "os": [ - "chromeos" + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -13418,7 +13628,7 @@ }, "StartupBrowserWindowLaunchSuppressed": { "os": [ - "chromeos" + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -13433,7 +13643,7 @@ }, "LockScreenMediaPlaybackEnabled": { "os": [ - "chromeos" + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -13451,7 +13661,8 @@ "win", "linux", "mac", - "chromeos" + "chromeos_ash", + "chromeos_lacros" ], "policy_pref_mapping_tests": [ { @@ -13550,7 +13761,8 @@ "win", "linux", "mac", - "chromeos" + "chromeos_ash", + "chromeos_lacros" ], "policy_pref_mapping_tests": [ { @@ -13604,7 +13816,8 @@ "win", "linux", "mac", - "chromeos" + "chromeos_ash", + "chromeos_lacros" ], "policy_pref_mapping_tests": [ { @@ -13658,7 +13871,8 @@ "win", "linux", "mac", - "chromeos" + "chromeos_ash", + "chromeos_lacros" ], "policy_pref_mapping_tests": [ { @@ -13710,7 +13924,8 @@ "win", "linux", "mac", - "chromeos" + "chromeos_ash", + "chromeos_lacros" ], "policy_pref_mapping_tests": [ { @@ -13732,7 +13947,8 @@ "win", "linux", "mac", - "chromeos" + "chromeos_ash", + "chromeos_lacros" ], "policy_pref_mapping_tests": [ { @@ -13769,7 +13985,8 @@ "win", "linux", "mac", - "chromeos", + "chromeos_ash", + "chromeos_lacros", "android" ], "policy_pref_mapping_tests": [ @@ -13839,7 +14056,7 @@ }, "ForceLogoutUnauthenticatedUserEnabled": { "os": [ - "chromeos" + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -13880,7 +14097,8 @@ "win", "linux", "mac", - "chromeos" + "chromeos_ash", + "chromeos_lacros" ], "policy_pref_mapping_tests": [ { @@ -13964,7 +14182,8 @@ "win", "linux", "mac", - "chromeos" + "chromeos_ash", + "chromeos_lacros" ], "policy_pref_mapping_tests": [ { @@ -13996,7 +14215,8 @@ "win", "linux", "mac", - "chromeos", + "chromeos_ash", + "chromeos_lacros", "android" ], "policy_pref_mapping_tests": [ @@ -14017,7 +14237,8 @@ "win", "linux", "mac", - "chromeos", + "chromeos_ash", + "chromeos_lacros", "android" ], "policy_pref_mapping_tests": [ @@ -14042,7 +14263,8 @@ "win", "linux", "mac", - "chromeos" + "chromeos_ash", + "chromeos_lacros" ], "can_be_recommended": true, "policy_pref_mapping_tests": [ @@ -14061,7 +14283,8 @@ "win", "linux", "mac", - "chromeos", + "chromeos_ash", + "chromeos_lacros", "android" ], "policy_pref_mapping_tests": [ @@ -14097,7 +14320,8 @@ "win", "linux", "mac", - "chromeos", + "chromeos_ash", + "chromeos_lacros", "android" ], "policy_pref_mapping_tests": [ @@ -14116,7 +14340,8 @@ "win", "linux", "mac", - "chromeos", + "chromeos_ash", + "chromeos_lacros", "android" ], "policy_pref_mapping_tests": [ @@ -14181,7 +14406,8 @@ "win", "linux", "mac", - "chromeos" + "chromeos_ash", + "chromeos_lacros" ], "policy_pref_mapping_tests": [ { @@ -14211,7 +14437,8 @@ "win", "linux", "mac", - "chromeos" + "chromeos_ash", + "chromeos_lacros" ], "note": "TODO(http://crbug.com/106682): Flag this with can_be_recommended when bug is fixed.", "policy_pref_mapping_tests": [ @@ -14232,7 +14459,8 @@ "win", "linux", "mac", - "chromeos" + "chromeos_ash", + "chromeos_lacros" ], "note": "TODO(http://crbug.com/106682): Flag this with can_be_recommended when bug is fixed.", "policy_pref_mapping_tests": [ @@ -14270,7 +14498,8 @@ "win", "linux", "mac", - "chromeos" + "chromeos_ash", + "chromeos_lacros" ], "policy_pref_mapping_tests": [ { @@ -14288,7 +14517,8 @@ "win", "linux", "mac", - "chromeos" + "chromeos_ash", + "chromeos_lacros" ], "policy_pref_mapping_tests": [ { @@ -14306,7 +14536,8 @@ "win", "linux", "mac", - "chromeos" + "chromeos_ash", + "chromeos_lacros" ], "note": "TODO(http://crbug.com/106682): Flag this with can_be_recommended when bug is fixed.", "policy_pref_mapping_tests": [ @@ -14327,7 +14558,8 @@ "win", "linux", "mac", - "chromeos" + "chromeos_ash", + "chromeos_lacros" ], "note": "TODO(http://crbug.com/106682): Flag this with can_be_recommended when bug is fixed.", "policy_pref_mapping_tests": [ @@ -14348,7 +14580,8 @@ "win", "linux", "mac", - "chromeos" + "chromeos_ash", + "chromeos_lacros" ], "note": "TODO(http://crbug.com/106682): Flag this with can_be_recommended when bug is fixed.", "policy_pref_mapping_tests": [ @@ -14369,7 +14602,8 @@ "win", "linux", "mac", - "chromeos" + "chromeos_ash", + "chromeos_lacros" ], "note": "TODO(http://crbug.com/106682): Flag this with can_be_recommended when bug is fixed.", "policy_pref_mapping_tests": [ @@ -14387,7 +14621,7 @@ }, "DataLeakPreventionClipboardCheckSizeLimit": { "os": [ - "chromeos" + "chromeos_ash" ], "can_be_recommended": false, "policy_pref_mapping_tests": [ @@ -14405,7 +14639,7 @@ }, "DataLeakPreventionReportingEnabled": { "os": [ - "chromeos" + "chromeos_ash" ], "can_be_recommended": false, "policy_pref_mapping_tests": [ @@ -14423,7 +14657,7 @@ }, "DataLeakPreventionRulesList": { "os": [ - "chromeos" + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -14489,7 +14723,8 @@ "win", "linux", "mac", - "chromeos" + "chromeos_ash", + "chromeos_lacros" ], "policy_pref_mapping_tests": [ { @@ -14507,7 +14742,7 @@ }, "EduCoexistenceToSVersion": { "os": [ - "chromeos" + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -14525,7 +14760,8 @@ "win", "linux", "mac", - "chromeos" + "chromeos_ash", + "chromeos_lacros" ], "policy_pref_mapping_tests": [ { @@ -14563,7 +14799,7 @@ }, "LacrosAllowed": { "os": [ - "chromeos" + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -14586,7 +14822,8 @@ "win", "linux", "mac", - "chromeos" + "chromeos_ash", + "chromeos_lacros" ], "policy_pref_mapping_tests": [ { @@ -14657,7 +14894,8 @@ "win", "linux", "mac", - "chromeos" + "chromeos_ash", + "chromeos_lacros" ], "policy_pref_mapping_tests": [ { @@ -14694,7 +14932,7 @@ }, "DeviceSystemWideTracingEnabled": { "os": [ - "chromeos" + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -14765,7 +15003,8 @@ "win", "linux", "mac", - "chromeos" + "chromeos_ash", + "chromeos_lacros" ], "policy_pref_mapping_tests": [ { @@ -14817,7 +15056,8 @@ "win", "linux", "mac", - "chromeos", + "chromeos_ash", + "chromeos_lacros", "android" ], "policy_pref_mapping_tests": [ @@ -14833,7 +15073,8 @@ }, "LacrosSecondaryProfilesAllowed": { "os": [ - "chromeos" + "chromeos_ash", + "chromeos_lacros" ], "policy_pref_mapping_tests": [ { @@ -14922,7 +15163,8 @@ "win", "linux", "mac", - "chromeos" + "chromeos_ash", + "chromeos_lacros" ], "can_be_recommended": false, "policy_pref_mapping_tests": [ @@ -14941,7 +15183,7 @@ }, "PdfAnnotationsEnabled": { "os": [ - "chromeos" + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -14959,7 +15201,8 @@ "win", "linux", "mac", - "chromeos", + "chromeos_ash", + "chromeos_lacros", "android" ], "policy_pref_mapping_tests": [ @@ -14984,7 +15227,7 @@ }, "SuggestLogoutAfterClosingLastWindow": { "os": [ - "chromeos" + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -15009,7 +15252,7 @@ }, "LacrosAvailability": { "os": [ - "chromeos" + "chromeos_ash" ], "can_be_recommended": false, "policy_pref_mapping_tests": [ @@ -15180,7 +15423,7 @@ }, "ManagedAccountsSigninRestriction.CrOS": { "os": [ - "chromeos" + "chromeos_ash" ], "reason_for_missing_test": "TODO(crbug.com/1213429) future policy" }, @@ -15189,7 +15432,8 @@ "win", "linux", "mac", - "chromeos", + "chromeos_ash", + "chromeos_lacros", "android" ], "policy_pref_mapping_tests": [ @@ -15230,7 +15474,7 @@ }, "RestrictedManagedGuestSessionExtensionCleanupExemptList": { "os": [ - "chromeos" + "chromeos_ash" ], "policy_pref_mapping_tests": [ { @@ -15259,4 +15503,4 @@ } ] } -} \ No newline at end of file +}
diff --git a/chrome/test/data/webui/chromeos/ash_common/navigation_view_panel_test.js b/chrome/test/data/webui/chromeos/ash_common/navigation_view_panel_test.js index 00291e3d..9a4b4c6 100644 --- a/chrome/test/data/webui/chromeos/ash_common/navigation_view_panel_test.js +++ b/chrome/test/data/webui/chromeos/ash_common/navigation_view_panel_test.js
@@ -60,14 +60,26 @@ return navElements; } - test('oneEntry', async () => { + /** + * Adds a section to the navigation element. + * @param {string} name + * @param {string} pageType + * @param {string} icon + * @param {?string} id + * @param {!Array<SelectorItem>} subItems + * @return {!Promise} + */ + function addNavigationSection( + name, pageType, icon = '', id = null, subItems = []) { + viewElement.addSelector(name, pageType, icon, id, subItems); + return flushTasks(); + } + + test('twoEntries', async () => { const dummyPage1 = 'dummy-page1'; const dummyPage2 = 'dummy-page2'; - - viewElement.addSelector('dummyPage1', dummyPage1); - viewElement.addSelector('dummyPage2', dummyPage2); - - await flushTasks(); + await addNavigationSection('dummyPage1', dummyPage1); + await addNavigationSection('dummyPage2', dummyPage2); // Click the first menu item. Expect that the dummyPage1 to be created and // not hidden. @@ -105,10 +117,7 @@ test('notifyEvent', async () => { const dummyPage1 = 'dummy-page1'; - - viewElement.addSelector('dummyPage1', dummyPage1); - - await flushTasks(); + await addNavigationSection('dummyPage1', dummyPage1); // Create the element. const navElements = getNavElements(); @@ -131,9 +140,8 @@ const dummyPage1 = 'dummy-page1'; const dummyPage2 = 'dummy-page2'; - viewElement.addSelector('dummyPage1', dummyPage1); - viewElement.addSelector('dummyPage2', dummyPage2); - await flushTasks(); + await addNavigationSection('dummyPage1', dummyPage1); + await addNavigationSection('dummyPage2', dummyPage2); assertFalse(viewElement.shadowRoot.querySelector(`#${dummyPage1}`).hidden); assertFalse(!!viewElement.shadowRoot.querySelector(`#${dummyPage2}`)); @@ -145,9 +153,8 @@ const id2 = 'id2'; // Add two pages of the the same type with different ids. - viewElement.addSelector('Page 1', pageType, /*icon=*/ '', 'id1'); - viewElement.addSelector('Page 2', pageType, /*icon=*/ '', 'id2'); - await flushTasks(); + await addNavigationSection('Page 1', pageType, /*icon=*/ '', 'id1'); + await addNavigationSection('Page 2', pageType, /*icon=*/ '', 'id2'); // First page should be created by default. assertTrue(!!viewElement.shadowRoot.querySelector(`#${id1}`)); @@ -176,15 +183,11 @@ /** @type {SelectorItem} */ ( {'name': 'subItem', 'pageIs': subPage, 'id': subid}); - viewElement.addSelector('dummyPage1', dummyPage1, '', id1, [subItem]); - viewElement.addSelector('dummyPage2', dummyPage2); - await flushTasks(); + await addNavigationSection('dummyPage1', dummyPage1, '', id1, [subItem]); + await addNavigationSection('dummyPage2', dummyPage2); - // Sub page of selected item will be created but hidden. - assertTrue(!!viewElement.shadowRoot.querySelector(`#${subid}`)); - assertFalse(viewElement.shadowRoot.querySelector(`#${subid}`).hidden); - - // Second page won't be created yet. + // The pages are not created yet. + assertFalse(!!viewElement.shadowRoot.querySelector(`#${id1}`)); assertFalse(!!viewElement.shadowRoot.querySelector(`#${dummyPage2}`)); }); }
diff --git a/chrome/test/data/webui/settings/test_reset_browser_proxy.js b/chrome/test/data/webui/settings/test_reset_browser_proxy.js index 4e5459c..d9870e6 100644 --- a/chrome/test/data/webui/settings/test_reset_browser_proxy.js +++ b/chrome/test/data/webui/settings/test_reset_browser_proxy.js
@@ -14,7 +14,6 @@ 'onShowResetProfileDialog', 'showReportedSettings', 'getTriggeredResetToolName', - 'onPowerwashDialogShow', ]); } @@ -49,9 +48,4 @@ this.methodCalled('getTriggeredResetToolName'); return Promise.resolve('WonderfulAV'); } - - /** @override */ - onPowerwashDialogShow() { - this.methodCalled('onPowerwashDialogShow'); - } }
diff --git a/chrome/test/data/webui/signin/signin_reauth_test.js b/chrome/test/data/webui/signin/signin_reauth_test.js index 46415c1..11f42d2 100644 --- a/chrome/test/data/webui/signin/signin_reauth_test.js +++ b/chrome/test/data/webui/signin/signin_reauth_test.js
@@ -52,33 +52,22 @@ return browserProxy.whenCalled('cancel'); }); - const requires_reauth_test_params = [ - { - requires_reauth: true, - }, - { - requires_reauth: false, - }, - ]; + test('ButtonsVisibilityAndFocus', async () => { + await browserProxy.whenCalled('initialize'); + assertFalse(isVisible(app.$.confirmButton)); + assertFalse(isVisible(app.$.cancelButton)); + assertTrue(isVisible(app.$$('paper-spinner-lite'))); - requires_reauth_test_params.forEach(function(params) { - test('ButtonsVisibilityAndFocus', async () => { - await browserProxy.whenCalled('initialize'); - assertFalse(isVisible(app.$.confirmButton)); - assertFalse(isVisible(app.$.cancelButton)); - assertTrue(isVisible(app.$$('paper-spinner-lite'))); + webUIListenerCallback('reauth-type-determined'); + flush(); - webUIListenerCallback('reauth-type-received', params.requires_reauth); - flush(); + assertTrue(isVisible(app.$.confirmButton)); + assertTrue(isVisible(app.$.cancelButton)); + assertFalse(isVisible(app.$$('paper-spinner-lite'))); - assertTrue(isVisible(app.$.confirmButton)); - assertTrue(isVisible(app.$.cancelButton)); - assertFalse(isVisible(app.$$('paper-spinner-lite'))); + assertEquals(getDeepActiveElement(), app.$.confirmButton); - assertEquals(getDeepActiveElement(), app.$.confirmButton); - - assertDefaultLocale(); - assertEquals('Yes', app.$.confirmButton.textContent.trim()); - }); + assertDefaultLocale(); + assertEquals('Yes', app.$.confirmButton.textContent.trim()); }); });
diff --git a/chrome/test/webapps/coverage/coverage_cros.tsv b/chrome/test/webapps/coverage/coverage_cros.tsv index f609e67..f4778b2 100644 --- a/chrome/test/webapps/coverage/coverage_cros.tsv +++ b/chrome/test/webapps/coverage/coverage_cros.tsv
@@ -1,774 +1,774 @@ -# This is a generated file. -# Full coverage: 13%, with partial coverage: 23% -install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 chrome_update🌑 check_app_in_list_not_locally_installed_SiteA🌑 -install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 chrome_update🌑 check_app_in_list_not_locally_installed_SiteA🌑 -install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 chrome_update🌑 check_app_in_list_not_locally_installed_SiteA🌑 -install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 chrome_update🌑 check_app_in_list_not_locally_installed_SiteA🌑 -install_create_shortcut_windowed_SiteA🌑 uninstall_from_app_list_SiteA🌑 chrome_update🌑 check_app_not_in_list_SiteA🌑 -install_create_shortcut_windowed_SiteA🌑 uninstall_from_menu_SiteA🌑 chrome_update🌑 check_app_not_in_list_SiteA🌑 -install_omnibox_icon_SiteA🌕 uninstall_from_app_list_SiteA🌑 chrome_update🌑 check_app_not_in_list_SiteA🌑 -install_omnibox_icon_SiteA🌕 uninstall_from_menu_SiteA🌑 chrome_update🌑 check_app_not_in_list_SiteA🌑 -install_menu_option_SiteA🌓 uninstall_from_app_list_SiteA🌑 chrome_update🌑 check_app_not_in_list_SiteA🌑 -install_menu_option_SiteA🌓 uninstall_from_menu_SiteA🌑 chrome_update🌑 check_app_not_in_list_SiteA🌑 -install_create_shortcut_tabbed_SiteA🌑 uninstall_from_app_list_SiteA🌑 chrome_update🌑 check_app_not_in_list_SiteA🌑 -install_create_shortcut_tabbed_SiteA🌑 uninstall_from_menu_SiteA🌑 chrome_update🌑 check_app_not_in_list_SiteA🌑 -install_create_shortcut_windowed_SiteA🌑 uninstall_from_app_list_SiteA🌑 chrome_update🌑 check_platform_shortcut_not_exists_SiteA🌑 -install_create_shortcut_windowed_SiteA🌑 uninstall_from_menu_SiteA🌑 chrome_update🌑 check_platform_shortcut_not_exists_SiteA🌑 -install_omnibox_icon_SiteA🌕 uninstall_from_app_list_SiteA🌑 chrome_update🌑 check_platform_shortcut_not_exists_SiteA🌑 -install_omnibox_icon_SiteA🌕 uninstall_from_menu_SiteA🌑 chrome_update🌑 check_platform_shortcut_not_exists_SiteA🌑 -install_menu_option_SiteA🌓 uninstall_from_app_list_SiteA🌑 chrome_update🌑 check_platform_shortcut_not_exists_SiteA🌑 -install_menu_option_SiteA🌓 uninstall_from_menu_SiteA🌑 chrome_update🌑 check_platform_shortcut_not_exists_SiteA🌑 -install_create_shortcut_tabbed_SiteA🌑 uninstall_from_app_list_SiteA🌑 chrome_update🌑 check_platform_shortcut_not_exists_SiteA🌑 -install_create_shortcut_tabbed_SiteA🌑 uninstall_from_menu_SiteA🌑 chrome_update🌑 check_platform_shortcut_not_exists_SiteA🌑 -install_create_shortcut_windowed_SiteC🌑 switch_profile_clients_UserAClient2🌑 chrome_update🌑 check_app_in_list_not_locally_installed_SiteC🌑 -install_create_shortcut_tabbed_SiteC🌑 switch_profile_clients_UserAClient2🌑 chrome_update🌑 check_app_in_list_not_locally_installed_SiteC🌑 -install_policy_app_windowed_no_shortcut_SiteA🌑 chrome_update🌑 check_platform_shortcut_not_exists_SiteA🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 chrome_update🌑 check_platform_shortcut_not_exists_SiteA🌑 -install_policy_app_windowed_no_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 chrome_update🌑 check_app_not_in_list_SiteA🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 chrome_update🌑 check_app_not_in_list_SiteA🌑 -install_policy_app_windowed_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 chrome_update🌑 check_app_not_in_list_SiteA🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 chrome_update🌑 check_app_not_in_list_SiteA🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 install_create_shortcut_windowed_SiteA🌑 chrome_update🌑 check_app_in_list_windowed_SiteA🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 install_omnibox_icon_SiteA🌕 chrome_update🌑 check_app_in_list_windowed_SiteA🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 install_menu_option_SiteA🌓 chrome_update🌑 check_app_in_list_windowed_SiteA🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 install_create_shortcut_windowed_SiteA🌑 chrome_update🌑 check_app_in_list_windowed_SiteA🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 install_omnibox_icon_SiteA🌑 chrome_update🌑 check_app_in_list_windowed_SiteA🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 install_menu_option_SiteA🌑 chrome_update🌑 check_app_in_list_windowed_SiteA🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 install_create_shortcut_windowed_SiteA🌑 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 install_omnibox_icon_SiteA🌕 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 install_menu_option_SiteA🌓 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 install_create_shortcut_windowed_SiteA🌑 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 install_omnibox_icon_SiteA🌑 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 install_menu_option_SiteA🌑 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 install_create_shortcut_windowed_SiteA🌑 uninstall_policy_app_SiteA🌑 chrome_update🌑 check_app_in_list_windowed_SiteA🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 install_omnibox_icon_SiteA🌕 uninstall_policy_app_SiteA🌕 chrome_update🌑 check_app_in_list_windowed_SiteA🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 install_menu_option_SiteA🌓 uninstall_policy_app_SiteA🌕 chrome_update🌑 check_app_in_list_windowed_SiteA🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 install_create_shortcut_windowed_SiteA🌑 uninstall_policy_app_SiteA🌑 chrome_update🌑 check_app_in_list_windowed_SiteA🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 install_omnibox_icon_SiteA🌑 uninstall_policy_app_SiteA🌑 chrome_update🌑 check_app_in_list_windowed_SiteA🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 install_menu_option_SiteA🌑 uninstall_policy_app_SiteA🌑 chrome_update🌑 check_app_in_list_windowed_SiteA🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 install_create_shortcut_windowed_SiteA🌑 uninstall_policy_app_SiteA🌑 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 install_omnibox_icon_SiteA🌕 uninstall_policy_app_SiteA🌕 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 install_menu_option_SiteA🌓 uninstall_policy_app_SiteA🌕 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 install_create_shortcut_windowed_SiteA🌑 uninstall_policy_app_SiteA🌑 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 install_omnibox_icon_SiteA🌑 uninstall_policy_app_SiteA🌑 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 install_menu_option_SiteA🌑 uninstall_policy_app_SiteA🌑 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 -install_create_shortcut_tabbed_SiteA🌑 chrome_update🌑 check_app_in_list_tabbed_SiteA🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 chrome_update🌑 check_app_in_list_tabbed_SiteA🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 chrome_update🌑 check_app_in_list_tabbed_SiteA🌑 -install_create_shortcut_tabbed_SiteA🌑 chrome_update🌑 navigate_browser_SiteA🌑 check_create_shortcut_shown🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 chrome_update🌑 navigate_browser_SiteA🌑 check_create_shortcut_shown🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 chrome_update🌑 navigate_browser_SiteA🌑 check_create_shortcut_shown🌑 -install_create_shortcut_tabbed_SiteA🌑 chrome_update🌑 navigate_browser_SiteA🌑 check_install_icon_shown🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 chrome_update🌑 navigate_browser_SiteA🌑 check_install_icon_shown🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 chrome_update🌑 navigate_browser_SiteA🌑 check_install_icon_shown🌑 -install_create_shortcut_tabbed_SiteA🌑 chrome_update🌑 navigate_browser_SiteA🌑 check_launch_icon_not_shown🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 chrome_update🌑 navigate_browser_SiteA🌑 check_launch_icon_not_shown🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 chrome_update🌑 navigate_browser_SiteA🌑 check_launch_icon_not_shown🌑 -install_create_shortcut_windowed_SiteA🌑 chrome_update🌑 check_app_in_list_windowed_SiteA🌑 -install_omnibox_icon_SiteA🌕 chrome_update🌑 check_app_in_list_windowed_SiteA🌑 -install_policy_app_windowed_no_shortcut_SiteA🌑 chrome_update🌑 check_app_in_list_windowed_SiteA🌑 -install_policy_app_windowed_shortcut_SiteA🌓 chrome_update🌑 check_app_in_list_windowed_SiteA🌑 -install_menu_option_SiteA🌓 chrome_update🌑 check_app_in_list_windowed_SiteA🌑 -install_create_shortcut_windowed_SiteA🌑 chrome_update🌑 navigate_browser_SiteA🌑 check_create_shortcut_not_shown🌑 -install_omnibox_icon_SiteA🌕 chrome_update🌑 navigate_browser_SiteA🌑 check_create_shortcut_not_shown🌑 -install_policy_app_windowed_no_shortcut_SiteA🌑 chrome_update🌑 navigate_browser_SiteA🌑 check_create_shortcut_not_shown🌑 -install_policy_app_windowed_shortcut_SiteA🌓 chrome_update🌑 navigate_browser_SiteA🌑 check_create_shortcut_not_shown🌑 -install_menu_option_SiteA🌓 chrome_update🌑 navigate_browser_SiteA🌑 check_create_shortcut_not_shown🌑 -install_create_shortcut_windowed_SiteA🌑 chrome_update🌑 navigate_browser_SiteA🌑 check_install_icon_not_shown🌑 -install_omnibox_icon_SiteA🌕 chrome_update🌑 navigate_browser_SiteA🌑 check_install_icon_not_shown🌑 -install_policy_app_windowed_no_shortcut_SiteA🌑 chrome_update🌑 navigate_browser_SiteA🌑 check_install_icon_not_shown🌑 -install_policy_app_windowed_shortcut_SiteA🌓 chrome_update🌑 navigate_browser_SiteA🌑 check_install_icon_not_shown🌑 -install_menu_option_SiteA🌓 chrome_update🌑 navigate_browser_SiteA🌑 check_install_icon_not_shown🌑 -install_create_shortcut_windowed_SiteA🌑 chrome_update🌑 navigate_browser_SiteA🌑 check_launch_icon_shown🌑 -install_omnibox_icon_SiteA🌕 chrome_update🌑 navigate_browser_SiteA🌑 check_launch_icon_shown🌑 -install_policy_app_windowed_no_shortcut_SiteA🌑 chrome_update🌑 navigate_browser_SiteA🌑 check_launch_icon_shown🌑 -install_policy_app_windowed_shortcut_SiteA🌓 chrome_update🌑 navigate_browser_SiteA🌑 check_launch_icon_shown🌑 -install_menu_option_SiteA🌓 chrome_update🌑 navigate_browser_SiteA🌑 check_launch_icon_shown🌑 -install_policy_app_windowed_shortcut_SiteA🌓 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 -install_create_shortcut_windowed_SiteA🌑 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 -install_omnibox_icon_SiteA🌕 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 -install_menu_option_SiteA🌓 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 -install_create_shortcut_tabbed_SiteA🌑 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 -install_policy_app_windowed_shortcut_SiteA🌓 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 -install_create_shortcut_windowed_SiteA🌑 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 -install_omnibox_icon_SiteA🌕 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 -install_menu_option_SiteA🌓 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 -install_create_shortcut_tabbed_SiteA🌑 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 -install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 chrome_update🌑 launch_from_menu_option_SiteA🌑 check_tab_created🌑 -install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 chrome_update🌑 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 -install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 chrome_update🌑 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 -install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 chrome_update🌑 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 -install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 chrome_update🌑 launch_from_menu_option_SiteA🌑 check_tab_created🌑 -install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 chrome_update🌑 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 -install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 chrome_update🌑 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 -install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 chrome_update🌑 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 -install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 chrome_update🌑 launch_from_menu_option_SiteA🌑 check_tab_created🌑 -install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 chrome_update🌑 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 -install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 chrome_update🌑 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 -install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 chrome_update🌑 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 -install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 chrome_update🌑 launch_from_menu_option_SiteA🌑 check_tab_created🌑 -install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 chrome_update🌑 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 -install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 chrome_update🌑 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 -install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 chrome_update🌑 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 -install_create_shortcut_tabbed_SiteA🌑 chrome_update🌑 launch_from_menu_option_SiteA🌑 check_tab_created🌑 -install_create_shortcut_tabbed_SiteA🌑 chrome_update🌑 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 -install_create_shortcut_tabbed_SiteA🌑 chrome_update🌑 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 -install_create_shortcut_tabbed_SiteA🌑 chrome_update🌑 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 chrome_update🌑 launch_from_menu_option_SiteA🌑 check_tab_created🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 chrome_update🌑 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 chrome_update🌑 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 chrome_update🌑 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 chrome_update🌑 launch_from_menu_option_SiteA🌑 check_tab_created🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 chrome_update🌑 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 chrome_update🌑 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 chrome_update🌑 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 -install_create_shortcut_windowed_SiteA🌑 chrome_update🌑 launch_from_menu_option_SiteA🌑 check_window_created🌑 -install_create_shortcut_windowed_SiteA🌑 chrome_update🌑 launch_from_launch_icon_SiteA🌑 check_window_created🌑 -install_create_shortcut_windowed_SiteA🌑 chrome_update🌑 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 -install_create_shortcut_windowed_SiteA🌑 chrome_update🌑 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 -install_omnibox_icon_SiteA🌕 chrome_update🌑 launch_from_menu_option_SiteA🌑 check_window_created🌑 -install_omnibox_icon_SiteA🌕 chrome_update🌑 launch_from_launch_icon_SiteA🌑 check_window_created🌑 -install_omnibox_icon_SiteA🌕 chrome_update🌑 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 -install_omnibox_icon_SiteA🌕 chrome_update🌑 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 -install_policy_app_windowed_no_shortcut_SiteA🌑 chrome_update🌑 launch_from_menu_option_SiteA🌑 check_window_created🌑 -install_policy_app_windowed_no_shortcut_SiteA🌑 chrome_update🌑 launch_from_launch_icon_SiteA🌑 check_window_created🌑 -install_policy_app_windowed_no_shortcut_SiteA🌑 chrome_update🌑 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 -install_policy_app_windowed_no_shortcut_SiteA🌑 chrome_update🌑 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 -install_policy_app_windowed_shortcut_SiteA🌓 chrome_update🌑 launch_from_menu_option_SiteA🌑 check_window_created🌑 -install_policy_app_windowed_shortcut_SiteA🌓 chrome_update🌑 launch_from_launch_icon_SiteA🌑 check_window_created🌑 -install_policy_app_windowed_shortcut_SiteA🌓 chrome_update🌑 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 -install_policy_app_windowed_shortcut_SiteA🌓 chrome_update🌑 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 -install_menu_option_SiteA🌓 chrome_update🌑 launch_from_menu_option_SiteA🌑 check_window_created🌑 -install_menu_option_SiteA🌓 chrome_update🌑 launch_from_launch_icon_SiteA🌑 check_window_created🌑 -install_menu_option_SiteA🌓 chrome_update🌑 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 -install_menu_option_SiteA🌓 chrome_update🌑 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 -install_create_shortcut_tabbed_SiteC🌑 chrome_update🌑 launch_from_menu_option_SiteA🌑 check_tab_created🌑 -install_create_shortcut_tabbed_SiteC🌑 chrome_update🌑 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 -install_create_shortcut_tabbed_SiteC🌑 chrome_update🌑 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 -install_create_shortcut_tabbed_SiteC🌑 chrome_update🌑 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 -install_policy_app_tabbed_shortcut_SiteC🌓 chrome_update🌑 launch_from_menu_option_SiteA🌑 check_tab_created🌑 -install_policy_app_tabbed_shortcut_SiteC🌓 chrome_update🌑 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 -install_policy_app_tabbed_shortcut_SiteC🌓 chrome_update🌑 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 -install_policy_app_tabbed_shortcut_SiteC🌓 chrome_update🌑 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 -install_policy_app_tabbed_no_shortcut_SiteC🌑 chrome_update🌑 launch_from_menu_option_SiteA🌑 check_tab_created🌑 -install_policy_app_tabbed_no_shortcut_SiteC🌑 chrome_update🌑 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 -install_policy_app_tabbed_no_shortcut_SiteC🌑 chrome_update🌑 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 -install_policy_app_tabbed_no_shortcut_SiteC🌑 chrome_update🌑 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 -install_create_shortcut_windowed_SiteA🌑 set_app_badge_SiteA🌑 clear_app_badge_SiteA🌑 check_app_badge_empty_SiteA🌑 -install_omnibox_icon_SiteA🌕 set_app_badge_SiteA🌑 clear_app_badge_SiteA🌑 check_app_badge_empty_SiteA🌑 -install_menu_option_SiteA🌓 set_app_badge_SiteA🌑 clear_app_badge_SiteA🌑 check_app_badge_empty_SiteA🌑 -install_create_shortcut_windowed_SiteA🌑 navigate_pwa_site_a_to_SiteB🌑 close_custom_toolbar🌑 check_navigation_start_url🌑 -install_omnibox_icon_SiteA🌕 navigate_pwa_site_a_to_SiteB🌑 close_custom_toolbar🌑 check_navigation_start_url🌑 -install_policy_app_windowed_no_shortcut_SiteA🌑 navigate_pwa_site_a_to_SiteB🌑 close_custom_toolbar🌑 check_navigation_start_url🌑 -install_policy_app_windowed_shortcut_SiteA🌓 navigate_pwa_site_a_to_SiteB🌑 close_custom_toolbar🌑 check_navigation_start_url🌑 -install_menu_option_SiteA🌓 navigate_pwa_site_a_to_SiteB🌑 close_custom_toolbar🌑 check_navigation_start_url🌑 -install_policy_app_windowed_no_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 -install_create_shortcut_windowed_SiteA🌑 delete_profile🌑 check_app_list_empty🌑 -install_omnibox_icon_SiteA🌕 delete_profile🌑 check_app_list_empty🌑 -install_policy_app_windowed_no_shortcut_SiteA🌑 delete_profile🌑 check_app_list_empty🌑 -install_policy_app_windowed_shortcut_SiteA🌓 delete_profile🌑 check_app_list_empty🌑 -install_menu_option_SiteA🌓 delete_profile🌑 check_app_list_empty🌑 -install_create_shortcut_tabbed_SiteA🌑 delete_profile🌑 check_app_list_empty🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 delete_profile🌑 check_app_list_empty🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 delete_profile🌑 check_app_list_empty🌑 -install_create_shortcut_windowed_SiteA🌑 delete_profile🌑 check_app_not_in_list_SiteA🌑 -install_omnibox_icon_SiteA🌕 delete_profile🌑 check_app_not_in_list_SiteA🌑 -install_policy_app_windowed_no_shortcut_SiteA🌑 delete_profile🌑 check_app_not_in_list_SiteA🌑 -install_policy_app_windowed_shortcut_SiteA🌓 delete_profile🌑 check_app_not_in_list_SiteA🌑 -install_menu_option_SiteA🌓 delete_profile🌑 check_app_not_in_list_SiteA🌑 -install_create_shortcut_tabbed_SiteA🌑 delete_profile🌑 check_app_not_in_list_SiteA🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 delete_profile🌑 check_app_not_in_list_SiteA🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 delete_profile🌑 check_app_not_in_list_SiteA🌑 -install_policy_app_windowed_shortcut_SiteA🌓 delete_profile🌑 check_platform_shortcut_not_exists_SiteA🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 delete_profile🌑 check_platform_shortcut_not_exists_SiteA🌑 -install_create_shortcut_windowed_SiteA🌑 delete_profile🌑 check_platform_shortcut_not_exists_SiteA🌑 -install_omnibox_icon_SiteA🌕 delete_profile🌑 check_platform_shortcut_not_exists_SiteA🌑 -install_menu_option_SiteA🌓 delete_profile🌑 check_platform_shortcut_not_exists_SiteA🌑 -install_create_shortcut_tabbed_SiteA🌑 delete_profile🌑 check_platform_shortcut_not_exists_SiteA🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 install_create_shortcut_windowed_SiteA🌑 check_app_in_list_windowed_SiteA🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 install_omnibox_icon_SiteA🌕 check_app_in_list_windowed_SiteA🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 install_menu_option_SiteA🌓 check_app_in_list_windowed_SiteA🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 install_create_shortcut_windowed_SiteA🌑 check_app_in_list_windowed_SiteA🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 install_omnibox_icon_SiteA🌑 check_app_in_list_windowed_SiteA🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 install_menu_option_SiteA🌑 check_app_in_list_windowed_SiteA🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 install_create_shortcut_windowed_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 install_omnibox_icon_SiteA🌕 check_platform_shortcut_exists_SiteA🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 install_menu_option_SiteA🌓 check_platform_shortcut_exists_SiteA🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 install_create_shortcut_windowed_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 install_omnibox_icon_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 install_menu_option_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 install_create_shortcut_windowed_SiteA🌑 check_window_created🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 install_omnibox_icon_SiteA🌕 check_window_created🌕 -install_policy_app_tabbed_shortcut_SiteA🌓 install_menu_option_SiteA🌓 check_window_created🌕 -install_policy_app_tabbed_no_shortcut_SiteA🌑 install_create_shortcut_windowed_SiteA🌑 check_window_created🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 install_omnibox_icon_SiteA🌑 check_window_created🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 install_menu_option_SiteA🌑 check_window_created🌑 -install_create_shortcut_windowed_SiteA🌑 check_window_created🌑 -install_omnibox_icon_SiteA🌕 check_window_created🌕 -install_menu_option_SiteA🌓 check_window_created🌕 -install_policy_app_windowed_no_shortcut_SiteA🌑 check_platform_shortcut_not_exists_SiteA🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 check_platform_shortcut_not_exists_SiteA🌑 -install_policy_app_windowed_no_shortcut_SiteC🌑 check_platform_shortcut_not_exists_SiteC🌑 -install_policy_app_tabbed_no_shortcut_SiteC🌑 check_platform_shortcut_not_exists_SiteC🌑 -install_create_shortcut_tabbed_SiteA🌑 install_policy_app_windowed_no_shortcut_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 -install_create_shortcut_tabbed_SiteA🌑 install_policy_app_windowed_shortcut_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 -install_create_shortcut_windowed_SiteA🌑 install_policy_app_tabbed_no_shortcut_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 -install_create_shortcut_windowed_SiteA🌑 install_policy_app_windowed_no_shortcut_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 -install_omnibox_icon_SiteA🌕 install_policy_app_tabbed_no_shortcut_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 -install_omnibox_icon_SiteA🌕 install_policy_app_windowed_no_shortcut_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 -install_menu_option_SiteA🌓 install_policy_app_tabbed_no_shortcut_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 -install_menu_option_SiteA🌓 install_policy_app_windowed_no_shortcut_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 -install_create_shortcut_windowed_SiteA🌑 install_policy_app_tabbed_shortcut_SiteA🌑 check_app_in_list_windowed_SiteA🌑 -install_create_shortcut_windowed_SiteA🌑 install_policy_app_tabbed_no_shortcut_SiteA🌑 check_app_in_list_windowed_SiteA🌑 -install_omnibox_icon_SiteA🌕 install_policy_app_tabbed_shortcut_SiteA🌓 check_app_in_list_windowed_SiteA🌑 -install_omnibox_icon_SiteA🌕 install_policy_app_tabbed_no_shortcut_SiteA🌑 check_app_in_list_windowed_SiteA🌑 -install_menu_option_SiteA🌓 install_policy_app_tabbed_shortcut_SiteA🌓 check_app_in_list_windowed_SiteA🌑 -install_menu_option_SiteA🌓 install_policy_app_tabbed_no_shortcut_SiteA🌑 check_app_in_list_windowed_SiteA🌑 -install_create_shortcut_windowed_SiteA🌑 install_policy_app_tabbed_shortcut_SiteA🌑 navigate_browser_SiteA🌑 check_launch_icon_shown🌑 -install_create_shortcut_windowed_SiteA🌑 install_policy_app_tabbed_no_shortcut_SiteA🌑 navigate_browser_SiteA🌑 check_launch_icon_shown🌑 -install_omnibox_icon_SiteA🌕 install_policy_app_tabbed_shortcut_SiteA🌓 navigate_browser_SiteA🌕 check_launch_icon_shown🌕 -install_omnibox_icon_SiteA🌕 install_policy_app_tabbed_no_shortcut_SiteA🌑 navigate_browser_SiteA🌑 check_launch_icon_shown🌑 -install_menu_option_SiteA🌓 install_policy_app_tabbed_shortcut_SiteA🌓 navigate_browser_SiteA🌕 check_launch_icon_shown🌕 -install_menu_option_SiteA🌓 install_policy_app_tabbed_no_shortcut_SiteA🌑 navigate_browser_SiteA🌑 check_launch_icon_shown🌑 -install_create_shortcut_tabbed_SiteA🌑 install_policy_app_windowed_no_shortcut_SiteA🌑 check_app_in_list_tabbed_SiteA🌑 -install_create_shortcut_tabbed_SiteA🌑 install_policy_app_windowed_shortcut_SiteA🌑 check_app_in_list_tabbed_SiteA🌑 -install_create_shortcut_tabbed_SiteA🌑 install_policy_app_windowed_no_shortcut_SiteA🌑 navigate_browser_SiteA🌑 check_install_icon_shown🌑 -install_create_shortcut_tabbed_SiteA🌑 install_policy_app_windowed_shortcut_SiteA🌑 navigate_browser_SiteA🌑 check_install_icon_shown🌑 -install_create_shortcut_tabbed_SiteA🌑 check_app_in_list_tabbed_SiteA🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 check_app_in_list_tabbed_SiteA🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 check_app_in_list_tabbed_SiteA🌑 -install_create_shortcut_tabbed_SiteA🌑 navigate_browser_SiteA🌑 check_create_shortcut_shown🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 navigate_browser_SiteA🌕 check_create_shortcut_shown🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 navigate_browser_SiteA🌑 check_create_shortcut_shown🌑 -install_create_shortcut_tabbed_SiteA🌑 navigate_browser_SiteA🌑 check_install_icon_shown🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 navigate_browser_SiteA🌕 check_install_icon_shown🌕 -install_policy_app_tabbed_no_shortcut_SiteA🌑 navigate_browser_SiteA🌑 check_install_icon_shown🌑 -install_create_shortcut_tabbed_SiteA🌑 navigate_browser_SiteA🌑 check_launch_icon_not_shown🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 navigate_browser_SiteA🌕 check_launch_icon_not_shown🌕 -install_policy_app_tabbed_no_shortcut_SiteA🌑 navigate_browser_SiteA🌑 check_launch_icon_not_shown🌑 -install_create_shortcut_tabbed_SiteC🌑 check_app_in_list_tabbed_SiteC🌑 -install_policy_app_tabbed_shortcut_SiteC🌓 check_app_in_list_tabbed_SiteC🌑 -install_policy_app_tabbed_no_shortcut_SiteC🌑 check_app_in_list_tabbed_SiteC🌑 -install_create_shortcut_tabbed_SiteC🌑 navigate_browser_SiteC🌑 check_create_shortcut_shown🌑 -install_policy_app_tabbed_shortcut_SiteC🌓 navigate_browser_SiteC🌕 check_create_shortcut_shown🌑 -install_policy_app_tabbed_no_shortcut_SiteC🌑 navigate_browser_SiteC🌑 check_create_shortcut_shown🌑 -install_create_shortcut_tabbed_SiteC🌑 navigate_browser_SiteC🌑 check_install_icon_not_shown🌑 -install_policy_app_tabbed_shortcut_SiteC🌓 navigate_browser_SiteC🌕 check_install_icon_not_shown🌕 -install_policy_app_tabbed_no_shortcut_SiteC🌑 navigate_browser_SiteC🌑 check_install_icon_not_shown🌑 -install_create_shortcut_tabbed_SiteC🌑 navigate_browser_SiteC🌑 check_launch_icon_not_shown🌑 -install_policy_app_tabbed_shortcut_SiteC🌓 navigate_browser_SiteC🌕 check_launch_icon_not_shown🌕 -install_policy_app_tabbed_no_shortcut_SiteC🌑 navigate_browser_SiteC🌑 check_launch_icon_not_shown🌑 -install_create_shortcut_windowed_SiteA🌑 check_app_in_list_windowed_SiteA🌑 -install_omnibox_icon_SiteA🌕 check_app_in_list_windowed_SiteA🌑 -install_policy_app_windowed_no_shortcut_SiteA🌑 check_app_in_list_windowed_SiteA🌑 -install_policy_app_windowed_shortcut_SiteA🌓 check_app_in_list_windowed_SiteA🌑 -install_menu_option_SiteA🌓 check_app_in_list_windowed_SiteA🌑 -install_create_shortcut_windowed_SiteA🌑 navigate_browser_SiteA🌑 check_create_shortcut_not_shown🌑 -install_omnibox_icon_SiteA🌕 navigate_browser_SiteA🌕 check_create_shortcut_not_shown🌑 -install_policy_app_windowed_no_shortcut_SiteA🌑 navigate_browser_SiteA🌑 check_create_shortcut_not_shown🌑 -install_policy_app_windowed_shortcut_SiteA🌓 navigate_browser_SiteA🌕 check_create_shortcut_not_shown🌑 -install_menu_option_SiteA🌓 navigate_browser_SiteA🌕 check_create_shortcut_not_shown🌑 -install_create_shortcut_windowed_SiteA🌑 navigate_browser_SiteA🌑 check_install_icon_not_shown🌑 -install_omnibox_icon_SiteA🌕 navigate_browser_SiteA🌕 check_install_icon_not_shown🌕 -install_policy_app_windowed_no_shortcut_SiteA🌑 navigate_browser_SiteA🌑 check_install_icon_not_shown🌑 -install_policy_app_windowed_shortcut_SiteA🌓 navigate_browser_SiteA🌕 check_install_icon_not_shown🌕 -install_menu_option_SiteA🌓 navigate_browser_SiteA🌕 check_install_icon_not_shown🌕 -install_create_shortcut_windowed_SiteA🌑 navigate_browser_SiteA🌑 check_launch_icon_shown🌑 -install_omnibox_icon_SiteA🌕 navigate_browser_SiteA🌕 check_launch_icon_shown🌕 -install_policy_app_windowed_no_shortcut_SiteA🌑 navigate_browser_SiteA🌑 check_launch_icon_shown🌑 -install_policy_app_windowed_shortcut_SiteA🌓 navigate_browser_SiteA🌕 check_launch_icon_shown🌕 -install_menu_option_SiteA🌓 navigate_browser_SiteA🌕 check_launch_icon_shown🌕 -install_create_shortcut_windowed_SiteB🌑 navigate_browser_SiteB🌑 check_launch_icon_shown🌑 -install_omnibox_icon_SiteB🌕 navigate_browser_SiteB🌕 check_launch_icon_shown🌕 -install_policy_app_windowed_no_shortcut_SiteB🌑 navigate_browser_SiteB🌑 check_launch_icon_shown🌑 -install_policy_app_windowed_shortcut_SiteB🌓 navigate_browser_SiteB🌕 check_launch_icon_shown🌕 -install_menu_option_SiteB🌓 navigate_browser_SiteB🌕 check_launch_icon_shown🌕 -install_create_shortcut_windowed_SiteB🌑 check_platform_shortcut_right_click_menu_has_actions_SiteB🌑 -install_omnibox_icon_SiteB🌕 check_platform_shortcut_right_click_menu_has_actions_SiteB🌑 -install_menu_option_SiteB🌓 check_platform_shortcut_right_click_menu_has_actions_SiteB🌑 -install_create_shortcut_windowed_SiteC🌑 check_app_in_list_windowed_SiteC🌑 -install_policy_app_windowed_no_shortcut_SiteC🌑 check_app_in_list_windowed_SiteC🌑 -install_policy_app_windowed_shortcut_SiteC🌓 check_app_in_list_windowed_SiteC🌑 -install_create_shortcut_windowed_SiteC🌑 navigate_browser_SiteC🌑 check_create_shortcut_not_shown🌑 -install_policy_app_windowed_no_shortcut_SiteC🌑 navigate_browser_SiteC🌑 check_create_shortcut_not_shown🌑 -install_policy_app_windowed_shortcut_SiteC🌓 navigate_browser_SiteC🌕 check_create_shortcut_not_shown🌑 -install_create_shortcut_windowed_SiteC🌑 navigate_browser_SiteC🌑 check_install_icon_not_shown🌑 -install_policy_app_windowed_no_shortcut_SiteC🌑 navigate_browser_SiteC🌑 check_install_icon_not_shown🌑 -install_policy_app_windowed_shortcut_SiteC🌓 navigate_browser_SiteC🌕 check_install_icon_not_shown🌕 -install_create_shortcut_windowed_SiteC🌑 navigate_browser_SiteC🌑 check_launch_icon_shown🌑 -install_policy_app_windowed_no_shortcut_SiteC🌑 navigate_browser_SiteC🌑 check_launch_icon_shown🌑 -install_policy_app_windowed_shortcut_SiteC🌓 navigate_browser_SiteC🌕 check_launch_icon_shown🌕 -install_policy_app_windowed_shortcut_SiteA🌓 check_platform_shortcut_exists_SiteA🌑 -install_policy_app_windowed_shortcut_SiteA🌓 check_platform_shortcut_exists_SiteC🌑 -install_create_shortcut_tabbed_SiteA🌑 install_policy_app_windowed_no_shortcut_SiteA🌑 launch_from_menu_option_SiteA🌑 check_tab_created🌑 -install_create_shortcut_tabbed_SiteA🌑 install_policy_app_windowed_no_shortcut_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 -install_create_shortcut_tabbed_SiteA🌑 install_policy_app_windowed_no_shortcut_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 -install_create_shortcut_tabbed_SiteA🌑 install_policy_app_windowed_no_shortcut_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 -install_create_shortcut_tabbed_SiteA🌑 install_policy_app_windowed_shortcut_SiteA🌑 launch_from_menu_option_SiteA🌑 check_tab_created🌑 -install_create_shortcut_tabbed_SiteA🌑 install_policy_app_windowed_shortcut_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 -install_create_shortcut_tabbed_SiteA🌑 install_policy_app_windowed_shortcut_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 -install_create_shortcut_tabbed_SiteA🌑 install_policy_app_windowed_shortcut_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 -install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 launch_from_menu_option_SiteA🌑 check_tab_created🌑 -install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 -install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 -install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 -install_create_shortcut_windowed_SiteA🌑 install_policy_app_tabbed_shortcut_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_created🌑 -install_create_shortcut_windowed_SiteA🌑 install_policy_app_tabbed_shortcut_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_created🌑 -install_create_shortcut_windowed_SiteA🌑 install_policy_app_tabbed_shortcut_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 -install_create_shortcut_windowed_SiteA🌑 install_policy_app_tabbed_shortcut_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 -install_create_shortcut_windowed_SiteA🌑 install_policy_app_tabbed_no_shortcut_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_created🌑 -install_create_shortcut_windowed_SiteA🌑 install_policy_app_tabbed_no_shortcut_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_created🌑 -install_create_shortcut_windowed_SiteA🌑 install_policy_app_tabbed_no_shortcut_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 -install_create_shortcut_windowed_SiteA🌑 install_policy_app_tabbed_no_shortcut_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 -install_omnibox_icon_SiteA🌕 install_policy_app_tabbed_shortcut_SiteA🌓 launch_from_menu_option_SiteA🌑 check_window_created🌑 -install_omnibox_icon_SiteA🌕 install_policy_app_tabbed_shortcut_SiteA🌓 launch_from_launch_icon_SiteA🌑 check_window_created🌑 -install_omnibox_icon_SiteA🌕 install_policy_app_tabbed_shortcut_SiteA🌓 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 -install_omnibox_icon_SiteA🌕 install_policy_app_tabbed_shortcut_SiteA🌓 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 -install_omnibox_icon_SiteA🌕 install_policy_app_tabbed_no_shortcut_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_created🌑 -install_omnibox_icon_SiteA🌕 install_policy_app_tabbed_no_shortcut_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_created🌑 -install_omnibox_icon_SiteA🌕 install_policy_app_tabbed_no_shortcut_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 -install_omnibox_icon_SiteA🌕 install_policy_app_tabbed_no_shortcut_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 -install_menu_option_SiteA🌓 install_policy_app_tabbed_shortcut_SiteA🌓 launch_from_menu_option_SiteA🌑 check_window_created🌑 -install_menu_option_SiteA🌓 install_policy_app_tabbed_shortcut_SiteA🌓 launch_from_launch_icon_SiteA🌑 check_window_created🌑 -install_menu_option_SiteA🌓 install_policy_app_tabbed_shortcut_SiteA🌓 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 -install_menu_option_SiteA🌓 install_policy_app_tabbed_shortcut_SiteA🌓 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 -install_menu_option_SiteA🌓 install_policy_app_tabbed_no_shortcut_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_created🌑 -install_menu_option_SiteA🌓 install_policy_app_tabbed_no_shortcut_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_created🌑 -install_menu_option_SiteA🌓 install_policy_app_tabbed_no_shortcut_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 -install_menu_option_SiteA🌓 install_policy_app_tabbed_no_shortcut_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 -install_create_shortcut_windowed_SiteA🌑 close_pwa🌑 manifest_update_colors_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_color_correct🌑 -install_create_shortcut_windowed_SiteA🌑 close_pwa🌑 manifest_update_colors_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_color_correct🌑 -install_create_shortcut_windowed_SiteA🌑 close_pwa🌑 manifest_update_colors_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_color_correct🌑 -install_create_shortcut_windowed_SiteA🌑 close_pwa🌑 manifest_update_colors_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_color_correct🌑 -install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_colors_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_color_correct🌑 -install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_colors_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_color_correct🌑 -install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_colors_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_color_correct🌑 -install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_colors_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_color_correct🌑 -install_menu_option_SiteA🌓 close_pwa🌕 manifest_update_colors_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_color_correct🌑 -install_menu_option_SiteA🌓 close_pwa🌕 manifest_update_colors_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_color_correct🌑 -install_menu_option_SiteA🌓 close_pwa🌕 manifest_update_colors_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_color_correct🌑 -install_menu_option_SiteA🌓 close_pwa🌕 manifest_update_colors_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_color_correct🌑 -install_create_shortcut_windowed_SiteA🌑 close_pwa🌑 manifest_update_display_browser_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_display_standalone🌑 -install_create_shortcut_windowed_SiteA🌑 close_pwa🌑 manifest_update_display_browser_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_display_standalone🌑 -install_create_shortcut_windowed_SiteA🌑 close_pwa🌑 manifest_update_display_browser_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_display_standalone🌑 -install_create_shortcut_windowed_SiteA🌑 close_pwa🌑 manifest_update_display_browser_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_display_standalone🌑 -install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_display_standalone🌑 -install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_display_standalone🌑 -install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_display_standalone🌑 -install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_display_standalone🌑 -install_menu_option_SiteA🌓 close_pwa🌕 manifest_update_display_browser_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_display_standalone🌑 -install_menu_option_SiteA🌓 close_pwa🌕 manifest_update_display_browser_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_display_standalone🌑 -install_menu_option_SiteA🌓 close_pwa🌕 manifest_update_display_browser_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_display_standalone🌑 -install_menu_option_SiteA🌓 close_pwa🌕 manifest_update_display_browser_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_display_standalone🌑 -install_create_shortcut_windowed_SiteA🌑 close_pwa🌑 manifest_update_display_minimal_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_display_minimal🌑 -install_create_shortcut_windowed_SiteA🌑 close_pwa🌑 manifest_update_display_minimal_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_display_minimal🌑 -install_create_shortcut_windowed_SiteA🌑 close_pwa🌑 manifest_update_display_minimal_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_display_minimal🌑 -install_create_shortcut_windowed_SiteA🌑 close_pwa🌑 manifest_update_display_minimal_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_display_minimal🌑 -install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_display_minimal_SiteA🌕 launch_from_menu_option_SiteA🌑 check_window_display_minimal🌑 -install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_display_minimal_SiteA🌕 launch_from_launch_icon_SiteA🌑 check_window_display_minimal🌑 -install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_display_minimal_SiteA🌕 launch_from_chrome_apps_SiteA🌑 check_window_display_minimal🌑 -install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_display_minimal_SiteA🌕 launch_from_platform_shortcut_SiteA🌑 check_window_display_minimal🌑 -install_menu_option_SiteA🌓 close_pwa🌕 manifest_update_display_minimal_SiteA🌕 launch_from_menu_option_SiteA🌑 check_window_display_minimal🌑 -install_menu_option_SiteA🌓 close_pwa🌕 manifest_update_display_minimal_SiteA🌕 launch_from_launch_icon_SiteA🌑 check_window_display_minimal🌑 -install_menu_option_SiteA🌓 close_pwa🌕 manifest_update_display_minimal_SiteA🌕 launch_from_chrome_apps_SiteA🌑 check_window_display_minimal🌑 -install_menu_option_SiteA🌓 close_pwa🌕 manifest_update_display_minimal_SiteA🌕 launch_from_platform_shortcut_SiteA🌑 check_window_display_minimal🌑 -install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 launch_from_menu_option_SiteA🌑 check_tab_created🌑 -install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 -install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 -install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 -install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 launch_from_menu_option_SiteA🌑 check_tab_created🌑 -install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 -install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 -install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 -install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 launch_from_menu_option_SiteA🌑 check_tab_created🌑 -install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 -install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 -install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 -install_create_shortcut_tabbed_SiteA🌑 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_menu_option_SiteA🌑 check_tab_created🌑 -install_create_shortcut_tabbed_SiteA🌑 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 -install_create_shortcut_tabbed_SiteA🌑 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 -install_create_shortcut_tabbed_SiteA🌑 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_menu_option_SiteA🌑 check_tab_created🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_menu_option_SiteA🌑 check_tab_created🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 -install_create_shortcut_tabbed_SiteA🌑 set_open_in_window_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_created🌑 -install_create_shortcut_tabbed_SiteA🌑 set_open_in_window_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_created🌑 -install_create_shortcut_tabbed_SiteA🌑 set_open_in_window_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 -install_create_shortcut_tabbed_SiteA🌑 set_open_in_window_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 set_open_in_window_SiteA🌓 launch_from_menu_option_SiteA🌑 check_window_created🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 set_open_in_window_SiteA🌓 launch_from_launch_icon_SiteA🌑 check_window_created🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 set_open_in_window_SiteA🌓 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 set_open_in_window_SiteA🌓 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 set_open_in_window_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_created🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 set_open_in_window_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_created🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 set_open_in_window_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 set_open_in_window_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 -install_create_shortcut_windowed_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_created🌑 -install_create_shortcut_windowed_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_created🌑 -install_create_shortcut_windowed_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 -install_create_shortcut_windowed_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 -install_omnibox_icon_SiteA🌕 launch_from_menu_option_SiteA🌑 check_window_created🌑 -install_omnibox_icon_SiteA🌕 launch_from_launch_icon_SiteA🌑 check_window_created🌑 -install_omnibox_icon_SiteA🌕 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 -install_omnibox_icon_SiteA🌕 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 -install_policy_app_windowed_no_shortcut_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_created🌑 -install_policy_app_windowed_no_shortcut_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_created🌑 -install_policy_app_windowed_no_shortcut_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 -install_policy_app_windowed_no_shortcut_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 -install_policy_app_windowed_shortcut_SiteA🌓 launch_from_menu_option_SiteA🌑 check_window_created🌑 -install_policy_app_windowed_shortcut_SiteA🌓 launch_from_launch_icon_SiteA🌑 check_window_created🌑 -install_policy_app_windowed_shortcut_SiteA🌓 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 -install_policy_app_windowed_shortcut_SiteA🌓 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 -install_menu_option_SiteA🌓 launch_from_menu_option_SiteA🌑 check_window_created🌑 -install_menu_option_SiteA🌓 launch_from_launch_icon_SiteA🌑 check_window_created🌑 -install_menu_option_SiteA🌓 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 -install_menu_option_SiteA🌓 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 -install_create_shortcut_windowed_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_display_standalone🌑 -install_create_shortcut_windowed_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_display_standalone🌑 -install_create_shortcut_windowed_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_display_standalone🌑 -install_create_shortcut_windowed_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_display_standalone🌑 -install_omnibox_icon_SiteA🌕 launch_from_menu_option_SiteA🌑 check_window_display_standalone🌑 -install_omnibox_icon_SiteA🌕 launch_from_launch_icon_SiteA🌑 check_window_display_standalone🌑 -install_omnibox_icon_SiteA🌕 launch_from_chrome_apps_SiteA🌑 check_window_display_standalone🌑 -install_omnibox_icon_SiteA🌕 launch_from_platform_shortcut_SiteA🌑 check_window_display_standalone🌑 -install_policy_app_windowed_no_shortcut_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_display_standalone🌑 -install_policy_app_windowed_no_shortcut_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_display_standalone🌑 -install_policy_app_windowed_no_shortcut_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_display_standalone🌑 -install_policy_app_windowed_no_shortcut_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_display_standalone🌑 -install_policy_app_windowed_shortcut_SiteA🌓 launch_from_menu_option_SiteA🌑 check_window_display_standalone🌑 -install_policy_app_windowed_shortcut_SiteA🌓 launch_from_launch_icon_SiteA🌑 check_window_display_standalone🌑 -install_policy_app_windowed_shortcut_SiteA🌓 launch_from_chrome_apps_SiteA🌑 check_window_display_standalone🌑 -install_policy_app_windowed_shortcut_SiteA🌓 launch_from_platform_shortcut_SiteA🌑 check_window_display_standalone🌑 -install_menu_option_SiteA🌓 launch_from_menu_option_SiteA🌑 check_window_display_standalone🌑 -install_menu_option_SiteA🌓 launch_from_launch_icon_SiteA🌑 check_window_display_standalone🌑 -install_menu_option_SiteA🌓 launch_from_chrome_apps_SiteA🌑 check_window_display_standalone🌑 -install_menu_option_SiteA🌓 launch_from_platform_shortcut_SiteA🌑 check_window_display_standalone🌑 -install_create_shortcut_windowed_SiteA🌑 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_created🌑 -install_create_shortcut_windowed_SiteA🌑 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_created🌑 -install_create_shortcut_windowed_SiteA🌑 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 -install_create_shortcut_windowed_SiteA🌑 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 -install_omnibox_icon_SiteA🌕 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_created🌑 -install_omnibox_icon_SiteA🌕 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_created🌑 -install_omnibox_icon_SiteA🌕 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 -install_omnibox_icon_SiteA🌕 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 -install_policy_app_windowed_no_shortcut_SiteA🌑 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_created🌑 -install_policy_app_windowed_no_shortcut_SiteA🌑 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_created🌑 -install_policy_app_windowed_no_shortcut_SiteA🌑 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 -install_policy_app_windowed_no_shortcut_SiteA🌑 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 -install_policy_app_windowed_shortcut_SiteA🌓 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_created🌑 -install_policy_app_windowed_shortcut_SiteA🌓 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_created🌑 -install_policy_app_windowed_shortcut_SiteA🌓 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 -install_policy_app_windowed_shortcut_SiteA🌓 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 -install_menu_option_SiteA🌓 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_created🌑 -install_menu_option_SiteA🌓 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_created🌑 -install_menu_option_SiteA🌓 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 -install_menu_option_SiteA🌓 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 -install_create_shortcut_windowed_SiteA🌑 set_open_in_tab_SiteA🌑 launch_from_menu_option_SiteA🌑 check_tab_created🌑 -install_create_shortcut_windowed_SiteA🌑 set_open_in_tab_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 -install_create_shortcut_windowed_SiteA🌑 set_open_in_tab_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 -install_create_shortcut_windowed_SiteA🌑 set_open_in_tab_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 -install_omnibox_icon_SiteA🌕 set_open_in_tab_SiteA🌓 launch_from_menu_option_SiteA🌑 check_tab_created🌑 -install_omnibox_icon_SiteA🌕 set_open_in_tab_SiteA🌓 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 -install_omnibox_icon_SiteA🌕 set_open_in_tab_SiteA🌓 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 -install_omnibox_icon_SiteA🌕 set_open_in_tab_SiteA🌓 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 -install_policy_app_windowed_no_shortcut_SiteA🌑 set_open_in_tab_SiteA🌑 launch_from_menu_option_SiteA🌑 check_tab_created🌑 -install_policy_app_windowed_no_shortcut_SiteA🌑 set_open_in_tab_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 -install_policy_app_windowed_no_shortcut_SiteA🌑 set_open_in_tab_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 -install_policy_app_windowed_no_shortcut_SiteA🌑 set_open_in_tab_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 -install_policy_app_windowed_shortcut_SiteA🌓 set_open_in_tab_SiteA🌓 launch_from_menu_option_SiteA🌑 check_tab_created🌑 -install_policy_app_windowed_shortcut_SiteA🌓 set_open_in_tab_SiteA🌓 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 -install_policy_app_windowed_shortcut_SiteA🌓 set_open_in_tab_SiteA🌓 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 -install_policy_app_windowed_shortcut_SiteA🌓 set_open_in_tab_SiteA🌓 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 -install_menu_option_SiteA🌓 set_open_in_tab_SiteA🌓 launch_from_menu_option_SiteA🌑 check_tab_created🌑 -install_menu_option_SiteA🌓 set_open_in_tab_SiteA🌓 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 -install_menu_option_SiteA🌓 set_open_in_tab_SiteA🌓 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 -install_menu_option_SiteA🌓 set_open_in_tab_SiteA🌓 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 -install_create_shortcut_windowed_SiteB🌑 launch_from_menu_option_SiteB🌑 check_window_display_minimal🌑 -install_create_shortcut_windowed_SiteB🌑 launch_from_launch_icon_SiteB🌑 check_window_display_minimal🌑 -install_create_shortcut_windowed_SiteB🌑 launch_from_chrome_apps_SiteB🌑 check_window_display_minimal🌑 -install_create_shortcut_windowed_SiteB🌑 launch_from_platform_shortcut_SiteB🌑 check_window_display_minimal🌑 -install_omnibox_icon_SiteB🌕 launch_from_menu_option_SiteB🌑 check_window_display_minimal🌑 -install_omnibox_icon_SiteB🌕 launch_from_launch_icon_SiteB🌑 check_window_display_minimal🌑 -install_omnibox_icon_SiteB🌕 launch_from_chrome_apps_SiteB🌑 check_window_display_minimal🌑 -install_omnibox_icon_SiteB🌕 launch_from_platform_shortcut_SiteB🌑 check_window_display_minimal🌑 -install_policy_app_windowed_no_shortcut_SiteB🌑 launch_from_menu_option_SiteB🌑 check_window_display_minimal🌑 -install_policy_app_windowed_no_shortcut_SiteB🌑 launch_from_launch_icon_SiteB🌑 check_window_display_minimal🌑 -install_policy_app_windowed_no_shortcut_SiteB🌑 launch_from_chrome_apps_SiteB🌑 check_window_display_minimal🌑 -install_policy_app_windowed_no_shortcut_SiteB🌑 launch_from_platform_shortcut_SiteB🌑 check_window_display_minimal🌑 -install_policy_app_windowed_shortcut_SiteB🌓 launch_from_menu_option_SiteB🌑 check_window_display_minimal🌑 -install_policy_app_windowed_shortcut_SiteB🌓 launch_from_launch_icon_SiteB🌑 check_window_display_minimal🌑 -install_policy_app_windowed_shortcut_SiteB🌓 launch_from_chrome_apps_SiteB🌑 check_window_display_minimal🌑 -install_policy_app_windowed_shortcut_SiteB🌓 launch_from_platform_shortcut_SiteB🌑 check_window_display_minimal🌑 -install_menu_option_SiteB🌓 launch_from_menu_option_SiteB🌑 check_window_display_minimal🌑 -install_menu_option_SiteB🌓 launch_from_launch_icon_SiteB🌑 check_window_display_minimal🌑 -install_menu_option_SiteB🌓 launch_from_chrome_apps_SiteB🌑 check_window_display_minimal🌑 -install_menu_option_SiteB🌓 launch_from_platform_shortcut_SiteB🌑 check_window_display_minimal🌑 -install_create_shortcut_tabbed_SiteC🌑 launch_from_menu_option_SiteC🌑 check_tab_created🌑 -install_create_shortcut_tabbed_SiteC🌑 launch_from_launch_icon_SiteC🌑 check_tab_created🌑 -install_create_shortcut_tabbed_SiteC🌑 launch_from_chrome_apps_SiteC🌑 check_tab_created🌑 -install_create_shortcut_tabbed_SiteC🌑 launch_from_platform_shortcut_SiteC🌑 check_tab_created🌑 -install_policy_app_tabbed_shortcut_SiteC🌓 launch_from_menu_option_SiteC🌑 check_tab_created🌑 -install_policy_app_tabbed_shortcut_SiteC🌓 launch_from_launch_icon_SiteC🌑 check_tab_created🌑 -install_policy_app_tabbed_shortcut_SiteC🌓 launch_from_chrome_apps_SiteC🌑 check_tab_created🌑 -install_policy_app_tabbed_shortcut_SiteC🌓 launch_from_platform_shortcut_SiteC🌑 check_tab_created🌑 -install_policy_app_tabbed_no_shortcut_SiteC🌑 launch_from_menu_option_SiteC🌑 check_tab_created🌑 -install_policy_app_tabbed_no_shortcut_SiteC🌑 launch_from_launch_icon_SiteC🌑 check_tab_created🌑 -install_policy_app_tabbed_no_shortcut_SiteC🌑 launch_from_chrome_apps_SiteC🌑 check_tab_created🌑 -install_policy_app_tabbed_no_shortcut_SiteC🌑 launch_from_platform_shortcut_SiteC🌑 check_tab_created🌑 -install_create_shortcut_windowed_SiteC🌑 launch_from_menu_option_SiteC🌑 check_window_created🌑 -install_create_shortcut_windowed_SiteC🌑 launch_from_launch_icon_SiteC🌑 check_window_created🌑 -install_create_shortcut_windowed_SiteC🌑 launch_from_chrome_apps_SiteC🌑 check_window_created🌑 -install_create_shortcut_windowed_SiteC🌑 launch_from_platform_shortcut_SiteC🌑 check_window_created🌑 -install_policy_app_windowed_no_shortcut_SiteC🌑 launch_from_menu_option_SiteC🌑 check_window_created🌑 -install_policy_app_windowed_no_shortcut_SiteC🌑 launch_from_launch_icon_SiteC🌑 check_window_created🌑 -install_policy_app_windowed_no_shortcut_SiteC🌑 launch_from_chrome_apps_SiteC🌑 check_window_created🌑 -install_policy_app_windowed_no_shortcut_SiteC🌑 launch_from_platform_shortcut_SiteC🌑 check_window_created🌑 -install_policy_app_windowed_shortcut_SiteC🌓 launch_from_menu_option_SiteC🌑 check_window_created🌑 -install_policy_app_windowed_shortcut_SiteC🌓 launch_from_launch_icon_SiteC🌑 check_window_created🌑 -install_policy_app_windowed_shortcut_SiteC🌓 launch_from_chrome_apps_SiteC🌑 check_window_created🌑 -install_policy_app_windowed_shortcut_SiteC🌓 launch_from_platform_shortcut_SiteC🌑 check_window_created🌑 -install_create_shortcut_windowed_SiteA🌑 close_pwa🌑 manifest_update_icons_SiteA🌑 check_app_in_list_icon_correct_SiteA🌑 -install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_icons_SiteA🌑 check_app_in_list_icon_correct_SiteA🌑 -install_menu_option_SiteA🌓 close_pwa🌕 manifest_update_icons_SiteA🌑 check_app_in_list_icon_correct_SiteA🌑 -install_create_shortcut_windowed_SiteA🌑 close_pwa🌑 manifest_update_icons_SiteA🌑 check_platform_shortcut_icon_correct_SiteA🌑 -install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_icons_SiteA🌑 check_platform_shortcut_icon_correct_SiteA🌑 -install_menu_option_SiteA🌓 close_pwa🌕 manifest_update_icons_SiteA🌑 check_platform_shortcut_icon_correct_SiteA🌑 -install_create_shortcut_windowed_SiteAFoo🌑 manifest_update_scope_site_a_foo_to_SiteA🌑 close_pwa🌑 launch_from_platform_shortcut_SiteAFoo🌑 close_pwa🌑 navigate_browser_SiteA🌑 check_install_icon_not_shown🌑 -install_omnibox_icon_SiteAFoo🌕 manifest_update_scope_site_a_foo_to_SiteA🌑 close_pwa🌑 launch_from_platform_shortcut_SiteAFoo🌑 close_pwa🌑 navigate_browser_SiteA🌑 check_install_icon_not_shown🌑 -install_menu_option_SiteAFoo🌓 manifest_update_scope_site_a_foo_to_SiteA🌑 close_pwa🌑 launch_from_platform_shortcut_SiteAFoo🌑 close_pwa🌑 navigate_browser_SiteA🌑 check_install_icon_not_shown🌑 -install_create_shortcut_windowed_SiteAFoo🌑 manifest_update_scope_site_a_foo_to_SiteA🌑 close_pwa🌑 launch_from_platform_shortcut_SiteAFoo🌑 close_pwa🌑 navigate_browser_SiteA🌑 check_launch_icon_shown🌑 -install_omnibox_icon_SiteAFoo🌕 manifest_update_scope_site_a_foo_to_SiteA🌑 close_pwa🌑 launch_from_platform_shortcut_SiteAFoo🌑 close_pwa🌑 navigate_browser_SiteA🌑 check_launch_icon_shown🌑 -install_menu_option_SiteAFoo🌓 manifest_update_scope_site_a_foo_to_SiteA🌑 close_pwa🌑 launch_from_platform_shortcut_SiteAFoo🌑 close_pwa🌑 navigate_browser_SiteA🌑 check_launch_icon_shown🌑 -install_create_shortcut_windowed_SiteAFoo🌑 close_pwa🌑 manifest_update_scope_site_a_foo_to_SiteA🌑 navigate_browser_SiteABar🌑 check_install_icon_not_shown🌑 -install_omnibox_icon_SiteAFoo🌕 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteA🌑 navigate_browser_SiteABar🌑 check_install_icon_not_shown🌑 -install_menu_option_SiteAFoo🌓 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteA🌑 navigate_browser_SiteABar🌑 check_install_icon_not_shown🌑 -install_create_shortcut_windowed_SiteAFoo🌑 close_pwa🌑 manifest_update_scope_site_a_foo_to_SiteA🌑 navigate_browser_SiteABar🌑 check_launch_icon_shown🌑 -install_omnibox_icon_SiteAFoo🌕 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteA🌑 navigate_browser_SiteABar🌑 check_launch_icon_shown🌑 -install_menu_option_SiteAFoo🌓 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteA🌑 navigate_browser_SiteABar🌑 check_launch_icon_shown🌑 -install_create_shortcut_windowed_SiteAFoo🌑 navigate_browser_SiteABar🌑 check_install_icon_shown🌑 -install_omnibox_icon_SiteAFoo🌕 navigate_browser_SiteABar🌕 check_install_icon_shown🌕 -install_policy_app_windowed_no_shortcut_SiteAFoo🌑 navigate_browser_SiteABar🌑 check_install_icon_shown🌑 -install_policy_app_windowed_shortcut_SiteAFoo🌓 navigate_browser_SiteABar🌕 check_install_icon_shown🌕 -install_menu_option_SiteAFoo🌓 navigate_browser_SiteABar🌕 check_install_icon_shown🌕 -install_create_shortcut_windowed_SiteAFoo🌑 navigate_browser_SiteABar🌑 check_launch_icon_not_shown🌑 -install_omnibox_icon_SiteAFoo🌕 navigate_browser_SiteABar🌕 check_launch_icon_not_shown🌕 -install_policy_app_windowed_no_shortcut_SiteAFoo🌑 navigate_browser_SiteABar🌑 check_launch_icon_not_shown🌑 -install_policy_app_windowed_shortcut_SiteAFoo🌓 navigate_browser_SiteABar🌕 check_launch_icon_not_shown🌕 -install_menu_option_SiteAFoo🌓 navigate_browser_SiteABar🌕 check_launch_icon_not_shown🌕 -install_create_shortcut_windowed_SiteAFoo🌑 close_pwa🌑 manifest_update_scope_site_a_foo_to_SiteA🌑 navigate_browser_SiteAFoo🌑 check_install_icon_not_shown🌑 -install_omnibox_icon_SiteAFoo🌕 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteA🌑 navigate_browser_SiteAFoo🌑 check_install_icon_not_shown🌑 -install_menu_option_SiteAFoo🌓 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteA🌑 navigate_browser_SiteAFoo🌑 check_install_icon_not_shown🌑 -install_create_shortcut_windowed_SiteAFoo🌑 close_pwa🌑 manifest_update_scope_site_a_foo_to_SiteA🌑 navigate_browser_SiteAFoo🌑 check_launch_icon_shown🌑 -install_omnibox_icon_SiteAFoo🌕 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteA🌑 navigate_browser_SiteAFoo🌑 check_launch_icon_shown🌑 -install_menu_option_SiteAFoo🌓 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteA🌑 navigate_browser_SiteAFoo🌑 check_launch_icon_shown🌑 -install_create_shortcut_windowed_SiteA🌑 navigate_browser_SiteAFoo🌑 check_install_icon_not_shown🌑 -install_omnibox_icon_SiteA🌕 navigate_browser_SiteAFoo🌕 check_install_icon_not_shown🌕 -install_policy_app_windowed_no_shortcut_SiteA🌑 navigate_browser_SiteAFoo🌑 check_install_icon_not_shown🌑 -install_policy_app_windowed_shortcut_SiteA🌓 navigate_browser_SiteAFoo🌕 check_install_icon_not_shown🌕 -install_menu_option_SiteA🌓 navigate_browser_SiteAFoo🌕 check_install_icon_not_shown🌕 -install_create_shortcut_windowed_SiteA🌑 navigate_browser_SiteAFoo🌑 check_launch_icon_shown🌑 -install_omnibox_icon_SiteA🌕 navigate_browser_SiteAFoo🌕 check_launch_icon_shown🌕 -install_policy_app_windowed_no_shortcut_SiteA🌑 navigate_browser_SiteAFoo🌑 check_launch_icon_shown🌑 -install_policy_app_windowed_shortcut_SiteA🌓 navigate_browser_SiteAFoo🌕 check_launch_icon_shown🌕 -install_menu_option_SiteA🌓 navigate_browser_SiteAFoo🌕 check_launch_icon_shown🌕 -navigate_browser_SiteAFoo🌕 check_install_icon_shown🌕 -switch_incognito_profile🌑 navigate_browser_SiteA🌑 check_create_shortcut_not_shown🌑 -navigate_browser_SiteA🌕 check_app_not_in_list_SiteA🌕 -navigate_browser_SiteA🌕 check_create_shortcut_shown🌑 -navigate_browser_SiteA🌕 check_platform_shortcut_not_exists_SiteA🌑 -install_create_shortcut_windowed_SiteA🌑 navigate_browser_SiteB🌑 check_install_icon_shown🌑 -install_omnibox_icon_SiteA🌕 navigate_browser_SiteB🌕 check_install_icon_shown🌕 -install_menu_option_SiteA🌓 navigate_browser_SiteB🌕 check_install_icon_shown🌕 -install_create_shortcut_windowed_SiteA🌑 navigate_browser_SiteB🌑 check_launch_icon_not_shown🌑 -install_omnibox_icon_SiteA🌕 navigate_browser_SiteB🌕 check_launch_icon_not_shown🌕 -install_menu_option_SiteA🌓 navigate_browser_SiteB🌕 check_launch_icon_not_shown🌕 -switch_incognito_profile🌑 navigate_browser_SiteC🌑 check_create_shortcut_not_shown🌑 -navigate_browser_SiteC🌕 check_app_not_in_list_SiteA🌕 -navigate_browser_SiteC🌕 check_create_shortcut_shown🌑 -navigate_browser_SiteC🌕 check_install_icon_not_shown🌕 -navigate_browser_SiteC🌕 check_platform_shortcut_not_exists_SiteA🌑 -navigate_crashed_url🌑 check_create_shortcut_not_shown🌑 -navigate_crashed_url🌑 check_install_icon_not_shown🌑 -navigate_notfound_url🌑 check_create_shortcut_not_shown🌑 -navigate_notfound_url🌑 check_install_icon_not_shown🌑 -install_create_shortcut_windowed_SiteAFoo🌑 close_pwa🌑 manifest_update_scope_site_a_foo_to_SiteA🌑 launch_from_menu_option_SiteAFoo🌑 navigate_pwa_site_a_foo_to_SiteABar🌑 check_no_toolbar🌑 -install_create_shortcut_windowed_SiteAFoo🌑 close_pwa🌑 manifest_update_scope_site_a_foo_to_SiteA🌑 launch_from_launch_icon_SiteAFoo🌑 navigate_pwa_site_a_foo_to_SiteABar🌑 check_no_toolbar🌑 -install_create_shortcut_windowed_SiteAFoo🌑 close_pwa🌑 manifest_update_scope_site_a_foo_to_SiteA🌑 launch_from_chrome_apps_SiteAFoo🌑 navigate_pwa_site_a_foo_to_SiteABar🌑 check_no_toolbar🌑 -install_create_shortcut_windowed_SiteAFoo🌑 close_pwa🌑 manifest_update_scope_site_a_foo_to_SiteA🌑 launch_from_platform_shortcut_SiteAFoo🌑 navigate_pwa_site_a_foo_to_SiteABar🌑 check_no_toolbar🌑 -install_omnibox_icon_SiteAFoo🌕 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteA🌑 launch_from_menu_option_SiteAFoo🌑 navigate_pwa_site_a_foo_to_SiteABar🌑 check_no_toolbar🌑 -install_omnibox_icon_SiteAFoo🌕 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteA🌑 launch_from_launch_icon_SiteAFoo🌑 navigate_pwa_site_a_foo_to_SiteABar🌑 check_no_toolbar🌑 -install_omnibox_icon_SiteAFoo🌕 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteA🌑 launch_from_chrome_apps_SiteAFoo🌑 navigate_pwa_site_a_foo_to_SiteABar🌑 check_no_toolbar🌑 -install_omnibox_icon_SiteAFoo🌕 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteA🌑 launch_from_platform_shortcut_SiteAFoo🌑 navigate_pwa_site_a_foo_to_SiteABar🌑 check_no_toolbar🌑 -install_menu_option_SiteAFoo🌓 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteA🌑 launch_from_menu_option_SiteAFoo🌑 navigate_pwa_site_a_foo_to_SiteABar🌑 check_no_toolbar🌑 -install_menu_option_SiteAFoo🌓 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteA🌑 launch_from_launch_icon_SiteAFoo🌑 navigate_pwa_site_a_foo_to_SiteABar🌑 check_no_toolbar🌑 -install_menu_option_SiteAFoo🌓 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteA🌑 launch_from_chrome_apps_SiteAFoo🌑 navigate_pwa_site_a_foo_to_SiteABar🌑 check_no_toolbar🌑 -install_menu_option_SiteAFoo🌓 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteA🌑 launch_from_platform_shortcut_SiteAFoo🌑 navigate_pwa_site_a_foo_to_SiteABar🌑 check_no_toolbar🌑 -install_create_shortcut_windowed_SiteA🌑 navigate_pwa_site_a_to_SiteB🌑 check_toolbar🌑 -install_omnibox_icon_SiteA🌕 navigate_pwa_site_a_to_SiteB🌑 check_toolbar🌑 -install_menu_option_SiteA🌓 navigate_pwa_site_a_to_SiteB🌑 check_toolbar🌑 -install_create_shortcut_windowed_SiteA🌑 navigate_pwa_site_a_to_SiteB🌑 check_window_title_is_SiteA🌑 -install_omnibox_icon_SiteA🌕 navigate_pwa_site_a_to_SiteB🌑 check_window_title_is_SiteA🌑 -install_menu_option_SiteA🌓 navigate_pwa_site_a_to_SiteB🌑 check_window_title_is_SiteA🌑 -install_create_shortcut_windowed_SiteA🌑 open_in_chrome🌑 check_tab_created🌑 -install_omnibox_icon_SiteA🌕 open_in_chrome🌑 check_tab_created🌑 -install_menu_option_SiteA🌓 open_in_chrome🌑 check_tab_created🌑 -install_create_shortcut_windowed_SiteA🌑 navigate_pwa_site_a_to_SiteB🌑 open_in_chrome🌑 check_tab_created🌑 -install_omnibox_icon_SiteA🌕 navigate_pwa_site_a_to_SiteB🌑 open_in_chrome🌑 check_tab_created🌑 -install_menu_option_SiteA🌓 navigate_pwa_site_a_to_SiteB🌑 open_in_chrome🌑 check_tab_created🌑 -install_create_shortcut_tabbed_SiteA🌑 install_policy_app_windowed_no_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_app_in_list_tabbed_SiteA🌑 -install_create_shortcut_tabbed_SiteA🌑 install_policy_app_tabbed_no_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_app_in_list_tabbed_SiteA🌑 -install_create_shortcut_tabbed_SiteA🌑 install_policy_app_windowed_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_app_in_list_tabbed_SiteA🌑 -install_create_shortcut_tabbed_SiteA🌑 install_policy_app_tabbed_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_app_in_list_tabbed_SiteA🌑 -install_create_shortcut_tabbed_SiteA🌑 install_policy_app_windowed_no_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 -install_create_shortcut_tabbed_SiteA🌑 install_policy_app_tabbed_no_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 -install_create_shortcut_tabbed_SiteA🌑 install_policy_app_windowed_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 -install_create_shortcut_tabbed_SiteA🌑 install_policy_app_tabbed_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 -install_create_shortcut_windowed_SiteA🌑 install_policy_app_windowed_no_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_app_in_list_windowed_SiteA🌑 -install_create_shortcut_windowed_SiteA🌑 install_policy_app_tabbed_no_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_app_in_list_windowed_SiteA🌑 -install_create_shortcut_windowed_SiteA🌑 install_policy_app_windowed_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_app_in_list_windowed_SiteA🌑 -install_create_shortcut_windowed_SiteA🌑 install_policy_app_tabbed_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_app_in_list_windowed_SiteA🌑 -install_omnibox_icon_SiteA🌕 install_policy_app_windowed_no_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_app_in_list_windowed_SiteA🌑 -install_omnibox_icon_SiteA🌕 install_policy_app_tabbed_no_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_app_in_list_windowed_SiteA🌑 -install_omnibox_icon_SiteA🌕 install_policy_app_windowed_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_app_in_list_windowed_SiteA🌑 -install_omnibox_icon_SiteA🌕 install_policy_app_tabbed_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_app_in_list_windowed_SiteA🌑 -install_menu_option_SiteA🌓 install_policy_app_windowed_no_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_app_in_list_windowed_SiteA🌑 -install_menu_option_SiteA🌓 install_policy_app_tabbed_no_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_app_in_list_windowed_SiteA🌑 -install_menu_option_SiteA🌓 install_policy_app_windowed_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_app_in_list_windowed_SiteA🌑 -install_menu_option_SiteA🌓 install_policy_app_tabbed_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_app_in_list_windowed_SiteA🌑 -install_create_shortcut_windowed_SiteA🌑 install_policy_app_windowed_no_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 -install_create_shortcut_windowed_SiteA🌑 install_policy_app_tabbed_no_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 -install_create_shortcut_windowed_SiteA🌑 install_policy_app_windowed_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 -install_create_shortcut_windowed_SiteA🌑 install_policy_app_tabbed_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 -install_omnibox_icon_SiteA🌕 install_policy_app_windowed_no_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 -install_omnibox_icon_SiteA🌕 install_policy_app_tabbed_no_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 -install_omnibox_icon_SiteA🌕 install_policy_app_windowed_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_platform_shortcut_exists_SiteA🌑 -install_omnibox_icon_SiteA🌕 install_policy_app_tabbed_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_platform_shortcut_exists_SiteA🌑 -install_menu_option_SiteA🌓 install_policy_app_windowed_no_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 -install_menu_option_SiteA🌓 install_policy_app_tabbed_no_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 -install_menu_option_SiteA🌓 install_policy_app_windowed_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_platform_shortcut_exists_SiteA🌑 -install_menu_option_SiteA🌓 install_policy_app_tabbed_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_platform_shortcut_exists_SiteA🌑 -install_policy_app_windowed_no_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_app_not_in_list_SiteA🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_app_not_in_list_SiteA🌑 -install_policy_app_windowed_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_app_not_in_list_SiteA🌕 -install_policy_app_tabbed_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_app_not_in_list_SiteA🌕 -install_policy_app_tabbed_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 navigate_browser_SiteA🌕 check_install_icon_shown🌕 -install_policy_app_tabbed_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 navigate_browser_SiteA🌕 check_launch_icon_not_shown🌕 -install_policy_app_windowed_no_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_platform_shortcut_not_exists_SiteA🌑 check_app_not_in_list_SiteA🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_platform_shortcut_not_exists_SiteA🌑 check_app_not_in_list_SiteA🌑 -install_policy_app_windowed_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_platform_shortcut_not_exists_SiteA🌑 check_app_not_in_list_SiteA🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_platform_shortcut_not_exists_SiteA🌑 check_app_not_in_list_SiteA🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 install_create_shortcut_windowed_SiteA🌑 uninstall_policy_app_SiteA🌑 check_app_in_list_windowed_SiteA🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 install_omnibox_icon_SiteA🌕 uninstall_policy_app_SiteA🌕 check_app_in_list_windowed_SiteA🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 install_menu_option_SiteA🌓 uninstall_policy_app_SiteA🌕 check_app_in_list_windowed_SiteA🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 install_create_shortcut_windowed_SiteA🌑 uninstall_policy_app_SiteA🌑 check_app_in_list_windowed_SiteA🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 install_omnibox_icon_SiteA🌑 uninstall_policy_app_SiteA🌑 check_app_in_list_windowed_SiteA🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 install_menu_option_SiteA🌑 uninstall_policy_app_SiteA🌑 check_app_in_list_windowed_SiteA🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 install_create_shortcut_windowed_SiteA🌑 uninstall_policy_app_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 install_omnibox_icon_SiteA🌕 uninstall_policy_app_SiteA🌕 check_platform_shortcut_exists_SiteA🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 install_menu_option_SiteA🌓 uninstall_policy_app_SiteA🌕 check_platform_shortcut_exists_SiteA🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 install_create_shortcut_windowed_SiteA🌑 uninstall_policy_app_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 install_omnibox_icon_SiteA🌑 uninstall_policy_app_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 install_menu_option_SiteA🌑 uninstall_policy_app_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 -install_create_shortcut_windowed_SiteA🌑 set_app_badge_SiteA🌑 check_app_badge_has_value_SiteA🌑 -install_omnibox_icon_SiteA🌕 set_app_badge_SiteA🌑 check_app_badge_has_value_SiteA🌑 -install_menu_option_SiteA🌓 set_app_badge_SiteA🌑 check_app_badge_has_value_SiteA🌑 -navigate_browser_SiteA🌕 set_app_badge_SiteA🌑 check_platform_shortcut_not_exists_SiteA🌑 -install_create_shortcut_windowed_SiteA🌑 set_open_in_tab_SiteA🌑 check_app_in_list_tabbed_SiteA🌑 -install_omnibox_icon_SiteA🌕 set_open_in_tab_SiteA🌓 check_app_in_list_tabbed_SiteA🌑 -install_menu_option_SiteA🌓 set_open_in_tab_SiteA🌓 check_app_in_list_tabbed_SiteA🌑 -install_create_shortcut_windowed_SiteA🌑 set_open_in_tab_SiteA🌑 navigate_browser_SiteA🌑 check_install_icon_shown🌑 -install_omnibox_icon_SiteA🌕 set_open_in_tab_SiteA🌓 navigate_browser_SiteA🌕 check_install_icon_shown🌕 -install_menu_option_SiteA🌓 set_open_in_tab_SiteA🌓 navigate_browser_SiteA🌕 check_install_icon_shown🌕 -install_create_shortcut_tabbed_SiteA🌑 set_open_in_window_SiteA🌑 check_app_in_list_windowed_SiteA🌑 -install_create_shortcut_tabbed_SiteA🌑 set_open_in_window_SiteA🌑 navigate_browser_SiteA🌑 check_install_icon_not_shown🌑 -install_create_shortcut_tabbed_SiteA🌑 set_open_in_window_SiteA🌑 navigate_browser_SiteA🌑 check_launch_icon_shown🌑 -install_create_shortcut_windowed_SiteA🌑 switch_incognito_profile🌑 navigate_browser_SiteA🌑 check_launch_icon_not_shown🌑 -install_omnibox_icon_SiteA🌕 switch_incognito_profile🌑 navigate_browser_SiteA🌑 check_launch_icon_not_shown🌑 -install_menu_option_SiteA🌓 switch_incognito_profile🌑 navigate_browser_SiteA🌑 check_launch_icon_not_shown🌑 -switch_incognito_profile🌑 navigate_browser_SiteA🌑 check_install_icon_not_shown🌑 -install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 check_app_in_list_not_locally_installed_SiteA🌑 -install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 check_app_in_list_not_locally_installed_SiteA🌓 -install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 check_app_in_list_not_locally_installed_SiteA🌓 -install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 check_app_in_list_not_locally_installed_SiteA🌑 -install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 check_app_in_list_not_locally_installed_SiteA🌑 -install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 check_app_in_list_not_locally_installed_SiteA🌓 -install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 check_app_in_list_not_locally_installed_SiteA🌓 -install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 check_app_in_list_not_locally_installed_SiteA🌑 -install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 check_platform_shortcut_not_exists_SiteA🌑 -install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 check_platform_shortcut_not_exists_SiteA🌑 -install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 check_platform_shortcut_not_exists_SiteA🌑 -install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 check_platform_shortcut_not_exists_SiteA🌑 -install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 navigate_browser_SiteA🌑 check_install_icon_shown🌑 -install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 navigate_browser_SiteA🌕 check_install_icon_shown🌕 -install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 navigate_browser_SiteA🌕 check_install_icon_shown🌕 -install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 navigate_browser_SiteA🌑 check_launch_icon_not_shown🌑 -install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 navigate_browser_SiteA🌕 check_launch_icon_not_shown🌕 -install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 navigate_browser_SiteA🌕 check_launch_icon_not_shown🌕 -install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 sync_turn_off🌑 uninstall_from_app_list_SiteA🌑 sync_turn_on🌑 switch_profile_clients_UserAClient1🌑 check_app_not_in_list_SiteA🌑 -install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 sync_turn_off🌕 uninstall_from_app_list_SiteA🌑 sync_turn_on🌑 switch_profile_clients_UserAClient1🌑 check_app_not_in_list_SiteA🌑 -install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 sync_turn_off🌕 uninstall_from_app_list_SiteA🌑 sync_turn_on🌑 switch_profile_clients_UserAClient1🌑 check_app_not_in_list_SiteA🌑 -install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 sync_turn_off🌑 uninstall_from_app_list_SiteA🌑 sync_turn_on🌑 switch_profile_clients_UserAClient1🌑 check_app_not_in_list_SiteA🌑 -install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 sync_turn_off🌑 uninstall_from_app_list_SiteA🌑 sync_turn_on🌑 switch_profile_clients_UserAClient1🌑 check_platform_shortcut_not_exists_SiteA🌑 -install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 sync_turn_off🌕 uninstall_from_app_list_SiteA🌑 sync_turn_on🌑 switch_profile_clients_UserAClient1🌑 check_platform_shortcut_not_exists_SiteA🌑 -install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 sync_turn_off🌕 uninstall_from_app_list_SiteA🌑 sync_turn_on🌑 switch_profile_clients_UserAClient1🌑 check_platform_shortcut_not_exists_SiteA🌑 -install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 sync_turn_off🌑 uninstall_from_app_list_SiteA🌑 sync_turn_on🌑 switch_profile_clients_UserAClient1🌑 check_platform_shortcut_not_exists_SiteA🌑 -install_create_shortcut_windowed_SiteA🌑 uninstall_from_app_list_SiteA🌑 check_app_not_in_list_SiteA🌑 -install_create_shortcut_windowed_SiteA🌑 uninstall_from_menu_SiteA🌑 check_app_not_in_list_SiteA🌑 -install_omnibox_icon_SiteA🌕 uninstall_from_app_list_SiteA🌑 check_app_not_in_list_SiteA🌑 -install_omnibox_icon_SiteA🌕 uninstall_from_menu_SiteA🌑 check_app_not_in_list_SiteA🌑 -install_menu_option_SiteA🌓 uninstall_from_app_list_SiteA🌑 check_app_not_in_list_SiteA🌑 -install_menu_option_SiteA🌓 uninstall_from_menu_SiteA🌑 check_app_not_in_list_SiteA🌑 -install_create_shortcut_tabbed_SiteA🌑 uninstall_from_app_list_SiteA🌑 check_app_not_in_list_SiteA🌑 -install_create_shortcut_tabbed_SiteA🌑 uninstall_from_menu_SiteA🌑 check_app_not_in_list_SiteA🌑 -install_create_shortcut_windowed_SiteA🌑 uninstall_from_app_list_SiteA🌑 navigate_browser_SiteA🌑 check_install_icon_shown🌑 -install_create_shortcut_windowed_SiteA🌑 uninstall_from_menu_SiteA🌑 navigate_browser_SiteA🌑 check_install_icon_shown🌑 -install_omnibox_icon_SiteA🌕 uninstall_from_app_list_SiteA🌑 navigate_browser_SiteA🌑 check_install_icon_shown🌑 -install_omnibox_icon_SiteA🌕 uninstall_from_menu_SiteA🌑 navigate_browser_SiteA🌑 check_install_icon_shown🌑 -install_menu_option_SiteA🌓 uninstall_from_app_list_SiteA🌑 navigate_browser_SiteA🌑 check_install_icon_shown🌑 -install_menu_option_SiteA🌓 uninstall_from_menu_SiteA🌑 navigate_browser_SiteA🌑 check_install_icon_shown🌑 -install_create_shortcut_tabbed_SiteA🌑 uninstall_from_app_list_SiteA🌑 navigate_browser_SiteA🌑 check_install_icon_shown🌑 -install_create_shortcut_tabbed_SiteA🌑 uninstall_from_menu_SiteA🌑 navigate_browser_SiteA🌑 check_install_icon_shown🌑 -install_create_shortcut_windowed_SiteA🌑 uninstall_from_app_list_SiteA🌑 navigate_browser_SiteA🌑 check_launch_icon_not_shown🌑 -install_create_shortcut_windowed_SiteA🌑 uninstall_from_menu_SiteA🌑 navigate_browser_SiteA🌑 check_launch_icon_not_shown🌑 -install_omnibox_icon_SiteA🌕 uninstall_from_app_list_SiteA🌑 navigate_browser_SiteA🌑 check_launch_icon_not_shown🌑 -install_omnibox_icon_SiteA🌕 uninstall_from_menu_SiteA🌑 navigate_browser_SiteA🌑 check_launch_icon_not_shown🌑 -install_menu_option_SiteA🌓 uninstall_from_app_list_SiteA🌑 navigate_browser_SiteA🌑 check_launch_icon_not_shown🌑 -install_menu_option_SiteA🌓 uninstall_from_menu_SiteA🌑 navigate_browser_SiteA🌑 check_launch_icon_not_shown🌑 -install_create_shortcut_tabbed_SiteA🌑 uninstall_from_app_list_SiteA🌑 navigate_browser_SiteA🌑 check_launch_icon_not_shown🌑 -install_create_shortcut_tabbed_SiteA🌑 uninstall_from_menu_SiteA🌑 navigate_browser_SiteA🌑 check_launch_icon_not_shown🌑 -install_create_shortcut_windowed_SiteA🌑 uninstall_from_app_list_SiteA🌑 check_platform_shortcut_not_exists_SiteA🌑 -install_create_shortcut_windowed_SiteA🌑 uninstall_from_menu_SiteA🌑 check_platform_shortcut_not_exists_SiteA🌑 -install_omnibox_icon_SiteA🌕 uninstall_from_app_list_SiteA🌑 check_platform_shortcut_not_exists_SiteA🌑 -install_omnibox_icon_SiteA🌕 uninstall_from_menu_SiteA🌑 check_platform_shortcut_not_exists_SiteA🌑 -install_menu_option_SiteA🌓 uninstall_from_app_list_SiteA🌑 check_platform_shortcut_not_exists_SiteA🌑 -install_menu_option_SiteA🌓 uninstall_from_menu_SiteA🌑 check_platform_shortcut_not_exists_SiteA🌑 -install_create_shortcut_tabbed_SiteA🌑 uninstall_from_app_list_SiteA🌑 check_platform_shortcut_not_exists_SiteA🌑 -install_create_shortcut_tabbed_SiteA🌑 uninstall_from_menu_SiteA🌑 check_platform_shortcut_not_exists_SiteA🌑 -install_create_shortcut_windowed_SiteC🌑 uninstall_from_app_list_SiteC🌑 check_app_not_in_list_SiteA🌑 -install_create_shortcut_windowed_SiteC🌑 uninstall_from_menu_SiteC🌑 check_app_not_in_list_SiteA🌑 -install_create_shortcut_tabbed_SiteC🌑 uninstall_from_app_list_SiteC🌑 check_app_not_in_list_SiteA🌑 -install_create_shortcut_tabbed_SiteC🌑 uninstall_from_menu_SiteC🌑 check_app_not_in_list_SiteA🌑 -install_create_shortcut_windowed_SiteC🌑 uninstall_from_app_list_SiteC🌑 navigate_browser_SiteC🌑 check_launch_icon_not_shown🌑 -install_create_shortcut_windowed_SiteC🌑 uninstall_from_menu_SiteC🌑 navigate_browser_SiteC🌑 check_launch_icon_not_shown🌑 -install_create_shortcut_tabbed_SiteC🌑 uninstall_from_app_list_SiteC🌑 navigate_browser_SiteC🌑 check_launch_icon_not_shown🌑 -install_create_shortcut_tabbed_SiteC🌑 uninstall_from_menu_SiteC🌑 navigate_browser_SiteC🌑 check_launch_icon_not_shown🌑 -install_create_shortcut_windowed_SiteC🌑 uninstall_from_app_list_SiteC🌑 check_platform_shortcut_not_exists_SiteC🌑 -install_create_shortcut_windowed_SiteC🌑 uninstall_from_menu_SiteC🌑 check_platform_shortcut_not_exists_SiteC🌑 -install_create_shortcut_tabbed_SiteC🌑 uninstall_from_app_list_SiteC🌑 check_platform_shortcut_not_exists_SiteC🌑 -install_create_shortcut_tabbed_SiteC🌑 uninstall_from_menu_SiteC🌑 check_platform_shortcut_not_exists_SiteC🌑 -install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 uninstall_from_app_list_SiteA🌑 check_app_not_in_list_SiteA🌑 -install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 uninstall_from_app_list_SiteA🌑 check_app_not_in_list_SiteA🌑 -install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 uninstall_from_app_list_SiteA🌑 check_app_not_in_list_SiteA🌑 -install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 uninstall_from_app_list_SiteA🌑 check_app_not_in_list_SiteA🌑 -install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 uninstall_from_app_list_SiteA🌑 switch_profile_clients_UserAClient1🌑 check_app_not_in_list_SiteA🌑 -install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 uninstall_from_app_list_SiteA🌑 switch_profile_clients_UserAClient1🌑 check_app_not_in_list_SiteA🌑 -install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 uninstall_from_app_list_SiteA🌑 switch_profile_clients_UserAClient1🌑 check_app_not_in_list_SiteA🌑 -install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 uninstall_from_app_list_SiteA🌑 switch_profile_clients_UserAClient1🌑 check_app_not_in_list_SiteA🌑 +# This is a generated file. +# Full coverage: 13%, with partial coverage: 23% +install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 chrome_update🌑 check_app_in_list_not_locally_installed_SiteA🌑 +install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 chrome_update🌑 check_app_in_list_not_locally_installed_SiteA🌑 +install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 chrome_update🌑 check_app_in_list_not_locally_installed_SiteA🌑 +install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 chrome_update🌑 check_app_in_list_not_locally_installed_SiteA🌑 +install_create_shortcut_windowed_SiteA🌑 uninstall_from_app_list_SiteA🌑 chrome_update🌑 check_app_not_in_list_SiteA🌑 +install_create_shortcut_windowed_SiteA🌑 uninstall_from_menu_SiteA🌑 chrome_update🌑 check_app_not_in_list_SiteA🌑 +install_omnibox_icon_SiteA🌕 uninstall_from_app_list_SiteA🌑 chrome_update🌑 check_app_not_in_list_SiteA🌑 +install_omnibox_icon_SiteA🌕 uninstall_from_menu_SiteA🌑 chrome_update🌑 check_app_not_in_list_SiteA🌑 +install_menu_option_SiteA🌓 uninstall_from_app_list_SiteA🌑 chrome_update🌑 check_app_not_in_list_SiteA🌑 +install_menu_option_SiteA🌓 uninstall_from_menu_SiteA🌑 chrome_update🌑 check_app_not_in_list_SiteA🌑 +install_create_shortcut_tabbed_SiteA🌑 uninstall_from_app_list_SiteA🌑 chrome_update🌑 check_app_not_in_list_SiteA🌑 +install_create_shortcut_tabbed_SiteA🌑 uninstall_from_menu_SiteA🌑 chrome_update🌑 check_app_not_in_list_SiteA🌑 +install_create_shortcut_windowed_SiteA🌑 uninstall_from_app_list_SiteA🌑 chrome_update🌑 check_platform_shortcut_not_exists_SiteA🌑 +install_create_shortcut_windowed_SiteA🌑 uninstall_from_menu_SiteA🌑 chrome_update🌑 check_platform_shortcut_not_exists_SiteA🌑 +install_omnibox_icon_SiteA🌕 uninstall_from_app_list_SiteA🌑 chrome_update🌑 check_platform_shortcut_not_exists_SiteA🌑 +install_omnibox_icon_SiteA🌕 uninstall_from_menu_SiteA🌑 chrome_update🌑 check_platform_shortcut_not_exists_SiteA🌑 +install_menu_option_SiteA🌓 uninstall_from_app_list_SiteA🌑 chrome_update🌑 check_platform_shortcut_not_exists_SiteA🌑 +install_menu_option_SiteA🌓 uninstall_from_menu_SiteA🌑 chrome_update🌑 check_platform_shortcut_not_exists_SiteA🌑 +install_create_shortcut_tabbed_SiteA🌑 uninstall_from_app_list_SiteA🌑 chrome_update🌑 check_platform_shortcut_not_exists_SiteA🌑 +install_create_shortcut_tabbed_SiteA🌑 uninstall_from_menu_SiteA🌑 chrome_update🌑 check_platform_shortcut_not_exists_SiteA🌑 +install_create_shortcut_windowed_SiteC🌑 switch_profile_clients_UserAClient2🌑 chrome_update🌑 check_app_in_list_not_locally_installed_SiteC🌑 +install_create_shortcut_tabbed_SiteC🌑 switch_profile_clients_UserAClient2🌑 chrome_update🌑 check_app_in_list_not_locally_installed_SiteC🌑 +install_policy_app_windowed_no_shortcut_SiteA🌑 chrome_update🌑 check_platform_shortcut_not_exists_SiteA🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 chrome_update🌑 check_platform_shortcut_not_exists_SiteA🌑 +install_policy_app_windowed_no_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 chrome_update🌑 check_app_not_in_list_SiteA🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 chrome_update🌑 check_app_not_in_list_SiteA🌑 +install_policy_app_windowed_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 chrome_update🌑 check_app_not_in_list_SiteA🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 chrome_update🌑 check_app_not_in_list_SiteA🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 install_create_shortcut_windowed_SiteA🌑 chrome_update🌑 check_app_in_list_windowed_SiteA🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 install_omnibox_icon_SiteA🌕 chrome_update🌑 check_app_in_list_windowed_SiteA🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 install_menu_option_SiteA🌓 chrome_update🌑 check_app_in_list_windowed_SiteA🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 install_create_shortcut_windowed_SiteA🌑 chrome_update🌑 check_app_in_list_windowed_SiteA🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 install_omnibox_icon_SiteA🌑 chrome_update🌑 check_app_in_list_windowed_SiteA🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 install_menu_option_SiteA🌑 chrome_update🌑 check_app_in_list_windowed_SiteA🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 install_create_shortcut_windowed_SiteA🌑 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 install_omnibox_icon_SiteA🌕 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 install_menu_option_SiteA🌓 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 install_create_shortcut_windowed_SiteA🌑 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 install_omnibox_icon_SiteA🌑 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 install_menu_option_SiteA🌑 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 install_create_shortcut_windowed_SiteA🌑 uninstall_policy_app_SiteA🌑 chrome_update🌑 check_app_in_list_windowed_SiteA🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 install_omnibox_icon_SiteA🌕 uninstall_policy_app_SiteA🌕 chrome_update🌑 check_app_in_list_windowed_SiteA🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 install_menu_option_SiteA🌓 uninstall_policy_app_SiteA🌕 chrome_update🌑 check_app_in_list_windowed_SiteA🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 install_create_shortcut_windowed_SiteA🌑 uninstall_policy_app_SiteA🌑 chrome_update🌑 check_app_in_list_windowed_SiteA🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 install_omnibox_icon_SiteA🌑 uninstall_policy_app_SiteA🌑 chrome_update🌑 check_app_in_list_windowed_SiteA🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 install_menu_option_SiteA🌑 uninstall_policy_app_SiteA🌑 chrome_update🌑 check_app_in_list_windowed_SiteA🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 install_create_shortcut_windowed_SiteA🌑 uninstall_policy_app_SiteA🌑 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 install_omnibox_icon_SiteA🌕 uninstall_policy_app_SiteA🌕 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 install_menu_option_SiteA🌓 uninstall_policy_app_SiteA🌕 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 install_create_shortcut_windowed_SiteA🌑 uninstall_policy_app_SiteA🌑 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 install_omnibox_icon_SiteA🌑 uninstall_policy_app_SiteA🌑 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 install_menu_option_SiteA🌑 uninstall_policy_app_SiteA🌑 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 +install_create_shortcut_tabbed_SiteA🌑 chrome_update🌑 check_app_in_list_tabbed_SiteA🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 chrome_update🌑 check_app_in_list_tabbed_SiteA🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 chrome_update🌑 check_app_in_list_tabbed_SiteA🌑 +install_create_shortcut_tabbed_SiteA🌑 chrome_update🌑 navigate_browser_SiteA🌑 check_create_shortcut_shown🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 chrome_update🌑 navigate_browser_SiteA🌑 check_create_shortcut_shown🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 chrome_update🌑 navigate_browser_SiteA🌑 check_create_shortcut_shown🌑 +install_create_shortcut_tabbed_SiteA🌑 chrome_update🌑 navigate_browser_SiteA🌑 check_install_icon_shown🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 chrome_update🌑 navigate_browser_SiteA🌑 check_install_icon_shown🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 chrome_update🌑 navigate_browser_SiteA🌑 check_install_icon_shown🌑 +install_create_shortcut_tabbed_SiteA🌑 chrome_update🌑 navigate_browser_SiteA🌑 check_launch_icon_not_shown🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 chrome_update🌑 navigate_browser_SiteA🌑 check_launch_icon_not_shown🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 chrome_update🌑 navigate_browser_SiteA🌑 check_launch_icon_not_shown🌑 +install_create_shortcut_windowed_SiteA🌑 chrome_update🌑 check_app_in_list_windowed_SiteA🌑 +install_omnibox_icon_SiteA🌕 chrome_update🌑 check_app_in_list_windowed_SiteA🌑 +install_policy_app_windowed_no_shortcut_SiteA🌑 chrome_update🌑 check_app_in_list_windowed_SiteA🌑 +install_policy_app_windowed_shortcut_SiteA🌓 chrome_update🌑 check_app_in_list_windowed_SiteA🌑 +install_menu_option_SiteA🌓 chrome_update🌑 check_app_in_list_windowed_SiteA🌑 +install_create_shortcut_windowed_SiteA🌑 chrome_update🌑 navigate_browser_SiteA🌑 check_create_shortcut_not_shown🌑 +install_omnibox_icon_SiteA🌕 chrome_update🌑 navigate_browser_SiteA🌑 check_create_shortcut_not_shown🌑 +install_policy_app_windowed_no_shortcut_SiteA🌑 chrome_update🌑 navigate_browser_SiteA🌑 check_create_shortcut_not_shown🌑 +install_policy_app_windowed_shortcut_SiteA🌓 chrome_update🌑 navigate_browser_SiteA🌑 check_create_shortcut_not_shown🌑 +install_menu_option_SiteA🌓 chrome_update🌑 navigate_browser_SiteA🌑 check_create_shortcut_not_shown🌑 +install_create_shortcut_windowed_SiteA🌑 chrome_update🌑 navigate_browser_SiteA🌑 check_install_icon_not_shown🌑 +install_omnibox_icon_SiteA🌕 chrome_update🌑 navigate_browser_SiteA🌑 check_install_icon_not_shown🌑 +install_policy_app_windowed_no_shortcut_SiteA🌑 chrome_update🌑 navigate_browser_SiteA🌑 check_install_icon_not_shown🌑 +install_policy_app_windowed_shortcut_SiteA🌓 chrome_update🌑 navigate_browser_SiteA🌑 check_install_icon_not_shown🌑 +install_menu_option_SiteA🌓 chrome_update🌑 navigate_browser_SiteA🌑 check_install_icon_not_shown🌑 +install_create_shortcut_windowed_SiteA🌑 chrome_update🌑 navigate_browser_SiteA🌑 check_launch_icon_shown🌑 +install_omnibox_icon_SiteA🌕 chrome_update🌑 navigate_browser_SiteA🌑 check_launch_icon_shown🌑 +install_policy_app_windowed_no_shortcut_SiteA🌑 chrome_update🌑 navigate_browser_SiteA🌑 check_launch_icon_shown🌑 +install_policy_app_windowed_shortcut_SiteA🌓 chrome_update🌑 navigate_browser_SiteA🌑 check_launch_icon_shown🌑 +install_menu_option_SiteA🌓 chrome_update🌑 navigate_browser_SiteA🌑 check_launch_icon_shown🌑 +install_policy_app_windowed_shortcut_SiteA🌓 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 +install_create_shortcut_windowed_SiteA🌑 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 +install_omnibox_icon_SiteA🌕 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 +install_menu_option_SiteA🌓 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 +install_create_shortcut_tabbed_SiteA🌑 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 +install_policy_app_windowed_shortcut_SiteA🌓 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 +install_create_shortcut_windowed_SiteA🌑 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 +install_omnibox_icon_SiteA🌕 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 +install_menu_option_SiteA🌓 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 +install_create_shortcut_tabbed_SiteA🌑 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 +install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 chrome_update🌑 launch_from_menu_option_SiteA🌑 check_tab_created🌑 +install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 chrome_update🌑 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 +install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 chrome_update🌑 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 +install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 chrome_update🌑 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 +install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 chrome_update🌑 launch_from_menu_option_SiteA🌑 check_tab_created🌑 +install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 chrome_update🌑 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 +install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 chrome_update🌑 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 +install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 chrome_update🌑 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 +install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 chrome_update🌑 launch_from_menu_option_SiteA🌑 check_tab_created🌑 +install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 chrome_update🌑 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 +install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 chrome_update🌑 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 +install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 chrome_update🌑 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 +install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 chrome_update🌑 launch_from_menu_option_SiteA🌑 check_tab_created🌑 +install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 chrome_update🌑 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 +install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 chrome_update🌑 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 +install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 chrome_update🌑 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 +install_create_shortcut_tabbed_SiteA🌑 chrome_update🌑 launch_from_menu_option_SiteA🌑 check_tab_created🌑 +install_create_shortcut_tabbed_SiteA🌑 chrome_update🌑 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 +install_create_shortcut_tabbed_SiteA🌑 chrome_update🌑 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 +install_create_shortcut_tabbed_SiteA🌑 chrome_update🌑 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 chrome_update🌑 launch_from_menu_option_SiteA🌑 check_tab_created🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 chrome_update🌑 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 chrome_update🌑 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 chrome_update🌑 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 chrome_update🌑 launch_from_menu_option_SiteA🌑 check_tab_created🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 chrome_update🌑 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 chrome_update🌑 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 chrome_update🌑 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 +install_create_shortcut_windowed_SiteA🌑 chrome_update🌑 launch_from_menu_option_SiteA🌑 check_window_created🌑 +install_create_shortcut_windowed_SiteA🌑 chrome_update🌑 launch_from_launch_icon_SiteA🌑 check_window_created🌑 +install_create_shortcut_windowed_SiteA🌑 chrome_update🌑 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 +install_create_shortcut_windowed_SiteA🌑 chrome_update🌑 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 +install_omnibox_icon_SiteA🌕 chrome_update🌑 launch_from_menu_option_SiteA🌑 check_window_created🌑 +install_omnibox_icon_SiteA🌕 chrome_update🌑 launch_from_launch_icon_SiteA🌑 check_window_created🌑 +install_omnibox_icon_SiteA🌕 chrome_update🌑 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 +install_omnibox_icon_SiteA🌕 chrome_update🌑 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 +install_policy_app_windowed_no_shortcut_SiteA🌑 chrome_update🌑 launch_from_menu_option_SiteA🌑 check_window_created🌑 +install_policy_app_windowed_no_shortcut_SiteA🌑 chrome_update🌑 launch_from_launch_icon_SiteA🌑 check_window_created🌑 +install_policy_app_windowed_no_shortcut_SiteA🌑 chrome_update🌑 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 +install_policy_app_windowed_no_shortcut_SiteA🌑 chrome_update🌑 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 +install_policy_app_windowed_shortcut_SiteA🌓 chrome_update🌑 launch_from_menu_option_SiteA🌑 check_window_created🌑 +install_policy_app_windowed_shortcut_SiteA🌓 chrome_update🌑 launch_from_launch_icon_SiteA🌑 check_window_created🌑 +install_policy_app_windowed_shortcut_SiteA🌓 chrome_update🌑 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 +install_policy_app_windowed_shortcut_SiteA🌓 chrome_update🌑 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 +install_menu_option_SiteA🌓 chrome_update🌑 launch_from_menu_option_SiteA🌑 check_window_created🌑 +install_menu_option_SiteA🌓 chrome_update🌑 launch_from_launch_icon_SiteA🌑 check_window_created🌑 +install_menu_option_SiteA🌓 chrome_update🌑 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 +install_menu_option_SiteA🌓 chrome_update🌑 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 +install_create_shortcut_tabbed_SiteC🌑 chrome_update🌑 launch_from_menu_option_SiteA🌑 check_tab_created🌑 +install_create_shortcut_tabbed_SiteC🌑 chrome_update🌑 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 +install_create_shortcut_tabbed_SiteC🌑 chrome_update🌑 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 +install_create_shortcut_tabbed_SiteC🌑 chrome_update🌑 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 +install_policy_app_tabbed_shortcut_SiteC🌓 chrome_update🌑 launch_from_menu_option_SiteA🌑 check_tab_created🌑 +install_policy_app_tabbed_shortcut_SiteC🌓 chrome_update🌑 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 +install_policy_app_tabbed_shortcut_SiteC🌓 chrome_update🌑 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 +install_policy_app_tabbed_shortcut_SiteC🌓 chrome_update🌑 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 +install_policy_app_tabbed_no_shortcut_SiteC🌑 chrome_update🌑 launch_from_menu_option_SiteA🌑 check_tab_created🌑 +install_policy_app_tabbed_no_shortcut_SiteC🌑 chrome_update🌑 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 +install_policy_app_tabbed_no_shortcut_SiteC🌑 chrome_update🌑 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 +install_policy_app_tabbed_no_shortcut_SiteC🌑 chrome_update🌑 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 +install_create_shortcut_windowed_SiteA🌑 set_app_badge_SiteA🌑 clear_app_badge_SiteA🌑 check_app_badge_empty_SiteA🌑 +install_omnibox_icon_SiteA🌕 set_app_badge_SiteA🌑 clear_app_badge_SiteA🌑 check_app_badge_empty_SiteA🌑 +install_menu_option_SiteA🌓 set_app_badge_SiteA🌑 clear_app_badge_SiteA🌑 check_app_badge_empty_SiteA🌑 +install_create_shortcut_windowed_SiteA🌑 navigate_pwa_site_a_to_SiteB🌑 close_custom_toolbar🌑 check_navigation_start_url🌑 +install_omnibox_icon_SiteA🌕 navigate_pwa_site_a_to_SiteB🌑 close_custom_toolbar🌑 check_navigation_start_url🌑 +install_policy_app_windowed_no_shortcut_SiteA🌑 navigate_pwa_site_a_to_SiteB🌑 close_custom_toolbar🌑 check_navigation_start_url🌑 +install_policy_app_windowed_shortcut_SiteA🌓 navigate_pwa_site_a_to_SiteB🌑 close_custom_toolbar🌑 check_navigation_start_url🌑 +install_menu_option_SiteA🌓 navigate_pwa_site_a_to_SiteB🌑 close_custom_toolbar🌑 check_navigation_start_url🌑 +install_policy_app_windowed_no_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 +install_create_shortcut_windowed_SiteA🌑 delete_profile🌑 check_app_list_empty🌑 +install_omnibox_icon_SiteA🌕 delete_profile🌑 check_app_list_empty🌑 +install_policy_app_windowed_no_shortcut_SiteA🌑 delete_profile🌑 check_app_list_empty🌑 +install_policy_app_windowed_shortcut_SiteA🌓 delete_profile🌑 check_app_list_empty🌑 +install_menu_option_SiteA🌓 delete_profile🌑 check_app_list_empty🌑 +install_create_shortcut_tabbed_SiteA🌑 delete_profile🌑 check_app_list_empty🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 delete_profile🌑 check_app_list_empty🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 delete_profile🌑 check_app_list_empty🌑 +install_create_shortcut_windowed_SiteA🌑 delete_profile🌑 check_app_not_in_list_SiteA🌑 +install_omnibox_icon_SiteA🌕 delete_profile🌑 check_app_not_in_list_SiteA🌑 +install_policy_app_windowed_no_shortcut_SiteA🌑 delete_profile🌑 check_app_not_in_list_SiteA🌑 +install_policy_app_windowed_shortcut_SiteA🌓 delete_profile🌑 check_app_not_in_list_SiteA🌑 +install_menu_option_SiteA🌓 delete_profile🌑 check_app_not_in_list_SiteA🌑 +install_create_shortcut_tabbed_SiteA🌑 delete_profile🌑 check_app_not_in_list_SiteA🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 delete_profile🌑 check_app_not_in_list_SiteA🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 delete_profile🌑 check_app_not_in_list_SiteA🌑 +install_policy_app_windowed_shortcut_SiteA🌓 delete_profile🌑 check_platform_shortcut_not_exists_SiteA🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 delete_profile🌑 check_platform_shortcut_not_exists_SiteA🌑 +install_create_shortcut_windowed_SiteA🌑 delete_profile🌑 check_platform_shortcut_not_exists_SiteA🌑 +install_omnibox_icon_SiteA🌕 delete_profile🌑 check_platform_shortcut_not_exists_SiteA🌑 +install_menu_option_SiteA🌓 delete_profile🌑 check_platform_shortcut_not_exists_SiteA🌑 +install_create_shortcut_tabbed_SiteA🌑 delete_profile🌑 check_platform_shortcut_not_exists_SiteA🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 install_create_shortcut_windowed_SiteA🌑 check_app_in_list_windowed_SiteA🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 install_omnibox_icon_SiteA🌕 check_app_in_list_windowed_SiteA🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 install_menu_option_SiteA🌓 check_app_in_list_windowed_SiteA🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 install_create_shortcut_windowed_SiteA🌑 check_app_in_list_windowed_SiteA🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 install_omnibox_icon_SiteA🌑 check_app_in_list_windowed_SiteA🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 install_menu_option_SiteA🌑 check_app_in_list_windowed_SiteA🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 install_create_shortcut_windowed_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 install_omnibox_icon_SiteA🌕 check_platform_shortcut_exists_SiteA🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 install_menu_option_SiteA🌓 check_platform_shortcut_exists_SiteA🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 install_create_shortcut_windowed_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 install_omnibox_icon_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 install_menu_option_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 install_create_shortcut_windowed_SiteA🌑 check_window_created🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 install_omnibox_icon_SiteA🌕 check_window_created🌕 +install_policy_app_tabbed_shortcut_SiteA🌓 install_menu_option_SiteA🌓 check_window_created🌕 +install_policy_app_tabbed_no_shortcut_SiteA🌑 install_create_shortcut_windowed_SiteA🌑 check_window_created🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 install_omnibox_icon_SiteA🌑 check_window_created🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 install_menu_option_SiteA🌑 check_window_created🌑 +install_create_shortcut_windowed_SiteA🌑 check_window_created🌑 +install_omnibox_icon_SiteA🌕 check_window_created🌕 +install_menu_option_SiteA🌓 check_window_created🌕 +install_policy_app_windowed_no_shortcut_SiteA🌑 check_platform_shortcut_not_exists_SiteA🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 check_platform_shortcut_not_exists_SiteA🌑 +install_policy_app_windowed_no_shortcut_SiteC🌑 check_platform_shortcut_not_exists_SiteC🌑 +install_policy_app_tabbed_no_shortcut_SiteC🌑 check_platform_shortcut_not_exists_SiteC🌑 +install_create_shortcut_tabbed_SiteA🌑 install_policy_app_windowed_no_shortcut_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 +install_create_shortcut_tabbed_SiteA🌑 install_policy_app_windowed_shortcut_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 +install_create_shortcut_windowed_SiteA🌑 install_policy_app_tabbed_no_shortcut_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 +install_create_shortcut_windowed_SiteA🌑 install_policy_app_windowed_no_shortcut_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 +install_omnibox_icon_SiteA🌕 install_policy_app_tabbed_no_shortcut_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 +install_omnibox_icon_SiteA🌕 install_policy_app_windowed_no_shortcut_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 +install_menu_option_SiteA🌓 install_policy_app_tabbed_no_shortcut_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 +install_menu_option_SiteA🌓 install_policy_app_windowed_no_shortcut_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 +install_create_shortcut_windowed_SiteA🌑 install_policy_app_tabbed_shortcut_SiteA🌑 check_app_in_list_windowed_SiteA🌑 +install_create_shortcut_windowed_SiteA🌑 install_policy_app_tabbed_no_shortcut_SiteA🌑 check_app_in_list_windowed_SiteA🌑 +install_omnibox_icon_SiteA🌕 install_policy_app_tabbed_shortcut_SiteA🌓 check_app_in_list_windowed_SiteA🌑 +install_omnibox_icon_SiteA🌕 install_policy_app_tabbed_no_shortcut_SiteA🌑 check_app_in_list_windowed_SiteA🌑 +install_menu_option_SiteA🌓 install_policy_app_tabbed_shortcut_SiteA🌓 check_app_in_list_windowed_SiteA🌑 +install_menu_option_SiteA🌓 install_policy_app_tabbed_no_shortcut_SiteA🌑 check_app_in_list_windowed_SiteA🌑 +install_create_shortcut_windowed_SiteA🌑 install_policy_app_tabbed_shortcut_SiteA🌑 navigate_browser_SiteA🌑 check_launch_icon_shown🌑 +install_create_shortcut_windowed_SiteA🌑 install_policy_app_tabbed_no_shortcut_SiteA🌑 navigate_browser_SiteA🌑 check_launch_icon_shown🌑 +install_omnibox_icon_SiteA🌕 install_policy_app_tabbed_shortcut_SiteA🌓 navigate_browser_SiteA🌕 check_launch_icon_shown🌕 +install_omnibox_icon_SiteA🌕 install_policy_app_tabbed_no_shortcut_SiteA🌑 navigate_browser_SiteA🌑 check_launch_icon_shown🌑 +install_menu_option_SiteA🌓 install_policy_app_tabbed_shortcut_SiteA🌓 navigate_browser_SiteA🌕 check_launch_icon_shown🌕 +install_menu_option_SiteA🌓 install_policy_app_tabbed_no_shortcut_SiteA🌑 navigate_browser_SiteA🌑 check_launch_icon_shown🌑 +install_create_shortcut_tabbed_SiteA🌑 install_policy_app_windowed_no_shortcut_SiteA🌑 check_app_in_list_tabbed_SiteA🌑 +install_create_shortcut_tabbed_SiteA🌑 install_policy_app_windowed_shortcut_SiteA🌑 check_app_in_list_tabbed_SiteA🌑 +install_create_shortcut_tabbed_SiteA🌑 install_policy_app_windowed_no_shortcut_SiteA🌑 navigate_browser_SiteA🌑 check_install_icon_shown🌑 +install_create_shortcut_tabbed_SiteA🌑 install_policy_app_windowed_shortcut_SiteA🌑 navigate_browser_SiteA🌑 check_install_icon_shown🌑 +install_create_shortcut_tabbed_SiteA🌑 check_app_in_list_tabbed_SiteA🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 check_app_in_list_tabbed_SiteA🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 check_app_in_list_tabbed_SiteA🌑 +install_create_shortcut_tabbed_SiteA🌑 navigate_browser_SiteA🌑 check_create_shortcut_shown🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 navigate_browser_SiteA🌕 check_create_shortcut_shown🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 navigate_browser_SiteA🌑 check_create_shortcut_shown🌑 +install_create_shortcut_tabbed_SiteA🌑 navigate_browser_SiteA🌑 check_install_icon_shown🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 navigate_browser_SiteA🌕 check_install_icon_shown🌕 +install_policy_app_tabbed_no_shortcut_SiteA🌑 navigate_browser_SiteA🌑 check_install_icon_shown🌑 +install_create_shortcut_tabbed_SiteA🌑 navigate_browser_SiteA🌑 check_launch_icon_not_shown🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 navigate_browser_SiteA🌕 check_launch_icon_not_shown🌕 +install_policy_app_tabbed_no_shortcut_SiteA🌑 navigate_browser_SiteA🌑 check_launch_icon_not_shown🌑 +install_create_shortcut_tabbed_SiteC🌑 check_app_in_list_tabbed_SiteC🌑 +install_policy_app_tabbed_shortcut_SiteC🌓 check_app_in_list_tabbed_SiteC🌑 +install_policy_app_tabbed_no_shortcut_SiteC🌑 check_app_in_list_tabbed_SiteC🌑 +install_create_shortcut_tabbed_SiteC🌑 navigate_browser_SiteC🌑 check_create_shortcut_shown🌑 +install_policy_app_tabbed_shortcut_SiteC🌓 navigate_browser_SiteC🌕 check_create_shortcut_shown🌑 +install_policy_app_tabbed_no_shortcut_SiteC🌑 navigate_browser_SiteC🌑 check_create_shortcut_shown🌑 +install_create_shortcut_tabbed_SiteC🌑 navigate_browser_SiteC🌑 check_install_icon_not_shown🌑 +install_policy_app_tabbed_shortcut_SiteC🌓 navigate_browser_SiteC🌕 check_install_icon_not_shown🌕 +install_policy_app_tabbed_no_shortcut_SiteC🌑 navigate_browser_SiteC🌑 check_install_icon_not_shown🌑 +install_create_shortcut_tabbed_SiteC🌑 navigate_browser_SiteC🌑 check_launch_icon_not_shown🌑 +install_policy_app_tabbed_shortcut_SiteC🌓 navigate_browser_SiteC🌕 check_launch_icon_not_shown🌕 +install_policy_app_tabbed_no_shortcut_SiteC🌑 navigate_browser_SiteC🌑 check_launch_icon_not_shown🌑 +install_create_shortcut_windowed_SiteA🌑 check_app_in_list_windowed_SiteA🌑 +install_omnibox_icon_SiteA🌕 check_app_in_list_windowed_SiteA🌑 +install_policy_app_windowed_no_shortcut_SiteA🌑 check_app_in_list_windowed_SiteA🌑 +install_policy_app_windowed_shortcut_SiteA🌓 check_app_in_list_windowed_SiteA🌑 +install_menu_option_SiteA🌓 check_app_in_list_windowed_SiteA🌑 +install_create_shortcut_windowed_SiteA🌑 navigate_browser_SiteA🌑 check_create_shortcut_not_shown🌑 +install_omnibox_icon_SiteA🌕 navigate_browser_SiteA🌕 check_create_shortcut_not_shown🌑 +install_policy_app_windowed_no_shortcut_SiteA🌑 navigate_browser_SiteA🌑 check_create_shortcut_not_shown🌑 +install_policy_app_windowed_shortcut_SiteA🌓 navigate_browser_SiteA🌕 check_create_shortcut_not_shown🌑 +install_menu_option_SiteA🌓 navigate_browser_SiteA🌕 check_create_shortcut_not_shown🌑 +install_create_shortcut_windowed_SiteA🌑 navigate_browser_SiteA🌑 check_install_icon_not_shown🌑 +install_omnibox_icon_SiteA🌕 navigate_browser_SiteA🌕 check_install_icon_not_shown🌕 +install_policy_app_windowed_no_shortcut_SiteA🌑 navigate_browser_SiteA🌑 check_install_icon_not_shown🌑 +install_policy_app_windowed_shortcut_SiteA🌓 navigate_browser_SiteA🌕 check_install_icon_not_shown🌕 +install_menu_option_SiteA🌓 navigate_browser_SiteA🌕 check_install_icon_not_shown🌕 +install_create_shortcut_windowed_SiteA🌑 navigate_browser_SiteA🌑 check_launch_icon_shown🌑 +install_omnibox_icon_SiteA🌕 navigate_browser_SiteA🌕 check_launch_icon_shown🌕 +install_policy_app_windowed_no_shortcut_SiteA🌑 navigate_browser_SiteA🌑 check_launch_icon_shown🌑 +install_policy_app_windowed_shortcut_SiteA🌓 navigate_browser_SiteA🌕 check_launch_icon_shown🌕 +install_menu_option_SiteA🌓 navigate_browser_SiteA🌕 check_launch_icon_shown🌕 +install_create_shortcut_windowed_SiteB🌑 navigate_browser_SiteB🌑 check_launch_icon_shown🌑 +install_omnibox_icon_SiteB🌕 navigate_browser_SiteB🌕 check_launch_icon_shown🌕 +install_policy_app_windowed_no_shortcut_SiteB🌑 navigate_browser_SiteB🌑 check_launch_icon_shown🌑 +install_policy_app_windowed_shortcut_SiteB🌓 navigate_browser_SiteB🌕 check_launch_icon_shown🌕 +install_menu_option_SiteB🌓 navigate_browser_SiteB🌕 check_launch_icon_shown🌕 +install_create_shortcut_windowed_SiteB🌑 check_platform_shortcut_right_click_menu_has_actions_SiteB🌑 +install_omnibox_icon_SiteB🌕 check_platform_shortcut_right_click_menu_has_actions_SiteB🌑 +install_menu_option_SiteB🌓 check_platform_shortcut_right_click_menu_has_actions_SiteB🌑 +install_create_shortcut_windowed_SiteC🌑 check_app_in_list_windowed_SiteC🌑 +install_policy_app_windowed_no_shortcut_SiteC🌑 check_app_in_list_windowed_SiteC🌑 +install_policy_app_windowed_shortcut_SiteC🌓 check_app_in_list_windowed_SiteC🌑 +install_create_shortcut_windowed_SiteC🌑 navigate_browser_SiteC🌑 check_create_shortcut_not_shown🌑 +install_policy_app_windowed_no_shortcut_SiteC🌑 navigate_browser_SiteC🌑 check_create_shortcut_not_shown🌑 +install_policy_app_windowed_shortcut_SiteC🌓 navigate_browser_SiteC🌕 check_create_shortcut_not_shown🌑 +install_create_shortcut_windowed_SiteC🌑 navigate_browser_SiteC🌑 check_install_icon_not_shown🌑 +install_policy_app_windowed_no_shortcut_SiteC🌑 navigate_browser_SiteC🌑 check_install_icon_not_shown🌑 +install_policy_app_windowed_shortcut_SiteC🌓 navigate_browser_SiteC🌕 check_install_icon_not_shown🌕 +install_create_shortcut_windowed_SiteC🌑 navigate_browser_SiteC🌑 check_launch_icon_shown🌑 +install_policy_app_windowed_no_shortcut_SiteC🌑 navigate_browser_SiteC🌑 check_launch_icon_shown🌑 +install_policy_app_windowed_shortcut_SiteC🌓 navigate_browser_SiteC🌕 check_launch_icon_shown🌕 +install_policy_app_windowed_shortcut_SiteA🌓 check_platform_shortcut_exists_SiteA🌑 +install_policy_app_windowed_shortcut_SiteA🌓 check_platform_shortcut_exists_SiteC🌑 +install_create_shortcut_tabbed_SiteA🌑 install_policy_app_windowed_no_shortcut_SiteA🌑 launch_from_menu_option_SiteA🌑 check_tab_created🌑 +install_create_shortcut_tabbed_SiteA🌑 install_policy_app_windowed_no_shortcut_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 +install_create_shortcut_tabbed_SiteA🌑 install_policy_app_windowed_no_shortcut_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 +install_create_shortcut_tabbed_SiteA🌑 install_policy_app_windowed_no_shortcut_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 +install_create_shortcut_tabbed_SiteA🌑 install_policy_app_windowed_shortcut_SiteA🌑 launch_from_menu_option_SiteA🌑 check_tab_created🌑 +install_create_shortcut_tabbed_SiteA🌑 install_policy_app_windowed_shortcut_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 +install_create_shortcut_tabbed_SiteA🌑 install_policy_app_windowed_shortcut_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 +install_create_shortcut_tabbed_SiteA🌑 install_policy_app_windowed_shortcut_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 +install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 launch_from_menu_option_SiteA🌑 check_tab_created🌑 +install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 +install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 +install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 +install_create_shortcut_windowed_SiteA🌑 install_policy_app_tabbed_shortcut_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_created🌑 +install_create_shortcut_windowed_SiteA🌑 install_policy_app_tabbed_shortcut_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_created🌑 +install_create_shortcut_windowed_SiteA🌑 install_policy_app_tabbed_shortcut_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 +install_create_shortcut_windowed_SiteA🌑 install_policy_app_tabbed_shortcut_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 +install_create_shortcut_windowed_SiteA🌑 install_policy_app_tabbed_no_shortcut_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_created🌑 +install_create_shortcut_windowed_SiteA🌑 install_policy_app_tabbed_no_shortcut_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_created🌑 +install_create_shortcut_windowed_SiteA🌑 install_policy_app_tabbed_no_shortcut_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 +install_create_shortcut_windowed_SiteA🌑 install_policy_app_tabbed_no_shortcut_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 +install_omnibox_icon_SiteA🌕 install_policy_app_tabbed_shortcut_SiteA🌓 launch_from_menu_option_SiteA🌑 check_window_created🌑 +install_omnibox_icon_SiteA🌕 install_policy_app_tabbed_shortcut_SiteA🌓 launch_from_launch_icon_SiteA🌑 check_window_created🌑 +install_omnibox_icon_SiteA🌕 install_policy_app_tabbed_shortcut_SiteA🌓 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 +install_omnibox_icon_SiteA🌕 install_policy_app_tabbed_shortcut_SiteA🌓 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 +install_omnibox_icon_SiteA🌕 install_policy_app_tabbed_no_shortcut_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_created🌑 +install_omnibox_icon_SiteA🌕 install_policy_app_tabbed_no_shortcut_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_created🌑 +install_omnibox_icon_SiteA🌕 install_policy_app_tabbed_no_shortcut_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 +install_omnibox_icon_SiteA🌕 install_policy_app_tabbed_no_shortcut_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 +install_menu_option_SiteA🌓 install_policy_app_tabbed_shortcut_SiteA🌓 launch_from_menu_option_SiteA🌑 check_window_created🌑 +install_menu_option_SiteA🌓 install_policy_app_tabbed_shortcut_SiteA🌓 launch_from_launch_icon_SiteA🌑 check_window_created🌑 +install_menu_option_SiteA🌓 install_policy_app_tabbed_shortcut_SiteA🌓 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 +install_menu_option_SiteA🌓 install_policy_app_tabbed_shortcut_SiteA🌓 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 +install_menu_option_SiteA🌓 install_policy_app_tabbed_no_shortcut_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_created🌑 +install_menu_option_SiteA🌓 install_policy_app_tabbed_no_shortcut_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_created🌑 +install_menu_option_SiteA🌓 install_policy_app_tabbed_no_shortcut_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 +install_menu_option_SiteA🌓 install_policy_app_tabbed_no_shortcut_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 +install_create_shortcut_windowed_SiteA🌑 close_pwa🌑 manifest_update_colors_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_color_correct🌑 +install_create_shortcut_windowed_SiteA🌑 close_pwa🌑 manifest_update_colors_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_color_correct🌑 +install_create_shortcut_windowed_SiteA🌑 close_pwa🌑 manifest_update_colors_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_color_correct🌑 +install_create_shortcut_windowed_SiteA🌑 close_pwa🌑 manifest_update_colors_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_color_correct🌑 +install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_colors_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_color_correct🌑 +install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_colors_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_color_correct🌑 +install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_colors_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_color_correct🌑 +install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_colors_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_color_correct🌑 +install_menu_option_SiteA🌓 close_pwa🌕 manifest_update_colors_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_color_correct🌑 +install_menu_option_SiteA🌓 close_pwa🌕 manifest_update_colors_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_color_correct🌑 +install_menu_option_SiteA🌓 close_pwa🌕 manifest_update_colors_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_color_correct🌑 +install_menu_option_SiteA🌓 close_pwa🌕 manifest_update_colors_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_color_correct🌑 +install_create_shortcut_windowed_SiteA🌑 close_pwa🌑 manifest_update_display_browser_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_display_standalone🌑 +install_create_shortcut_windowed_SiteA🌑 close_pwa🌑 manifest_update_display_browser_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_display_standalone🌑 +install_create_shortcut_windowed_SiteA🌑 close_pwa🌑 manifest_update_display_browser_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_display_standalone🌑 +install_create_shortcut_windowed_SiteA🌑 close_pwa🌑 manifest_update_display_browser_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_display_standalone🌑 +install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_display_standalone🌑 +install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_display_standalone🌑 +install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_display_standalone🌑 +install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_display_standalone🌑 +install_menu_option_SiteA🌓 close_pwa🌕 manifest_update_display_browser_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_display_standalone🌑 +install_menu_option_SiteA🌓 close_pwa🌕 manifest_update_display_browser_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_display_standalone🌑 +install_menu_option_SiteA🌓 close_pwa🌕 manifest_update_display_browser_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_display_standalone🌑 +install_menu_option_SiteA🌓 close_pwa🌕 manifest_update_display_browser_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_display_standalone🌑 +install_create_shortcut_windowed_SiteA🌑 close_pwa🌑 manifest_update_display_minimal_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_display_minimal🌑 +install_create_shortcut_windowed_SiteA🌑 close_pwa🌑 manifest_update_display_minimal_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_display_minimal🌑 +install_create_shortcut_windowed_SiteA🌑 close_pwa🌑 manifest_update_display_minimal_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_display_minimal🌑 +install_create_shortcut_windowed_SiteA🌑 close_pwa🌑 manifest_update_display_minimal_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_display_minimal🌑 +install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_display_minimal_SiteA🌕 launch_from_menu_option_SiteA🌑 check_window_display_minimal🌑 +install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_display_minimal_SiteA🌕 launch_from_launch_icon_SiteA🌑 check_window_display_minimal🌑 +install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_display_minimal_SiteA🌕 launch_from_chrome_apps_SiteA🌑 check_window_display_minimal🌑 +install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_display_minimal_SiteA🌕 launch_from_platform_shortcut_SiteA🌑 check_window_display_minimal🌑 +install_menu_option_SiteA🌓 close_pwa🌕 manifest_update_display_minimal_SiteA🌕 launch_from_menu_option_SiteA🌑 check_window_display_minimal🌑 +install_menu_option_SiteA🌓 close_pwa🌕 manifest_update_display_minimal_SiteA🌕 launch_from_launch_icon_SiteA🌑 check_window_display_minimal🌑 +install_menu_option_SiteA🌓 close_pwa🌕 manifest_update_display_minimal_SiteA🌕 launch_from_chrome_apps_SiteA🌑 check_window_display_minimal🌑 +install_menu_option_SiteA🌓 close_pwa🌕 manifest_update_display_minimal_SiteA🌕 launch_from_platform_shortcut_SiteA🌑 check_window_display_minimal🌑 +install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 launch_from_menu_option_SiteA🌑 check_tab_created🌑 +install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 +install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 +install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 +install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 launch_from_menu_option_SiteA🌑 check_tab_created🌑 +install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 +install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 +install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 +install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 launch_from_menu_option_SiteA🌑 check_tab_created🌑 +install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 +install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 +install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 +install_create_shortcut_tabbed_SiteA🌑 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_menu_option_SiteA🌑 check_tab_created🌑 +install_create_shortcut_tabbed_SiteA🌑 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 +install_create_shortcut_tabbed_SiteA🌑 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 +install_create_shortcut_tabbed_SiteA🌑 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_menu_option_SiteA🌑 check_tab_created🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_menu_option_SiteA🌑 check_tab_created🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 +install_create_shortcut_tabbed_SiteA🌑 set_open_in_window_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_created🌑 +install_create_shortcut_tabbed_SiteA🌑 set_open_in_window_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_created🌑 +install_create_shortcut_tabbed_SiteA🌑 set_open_in_window_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 +install_create_shortcut_tabbed_SiteA🌑 set_open_in_window_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 set_open_in_window_SiteA🌓 launch_from_menu_option_SiteA🌑 check_window_created🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 set_open_in_window_SiteA🌓 launch_from_launch_icon_SiteA🌑 check_window_created🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 set_open_in_window_SiteA🌓 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 set_open_in_window_SiteA🌓 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 set_open_in_window_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_created🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 set_open_in_window_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_created🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 set_open_in_window_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 set_open_in_window_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 +install_create_shortcut_windowed_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_created🌑 +install_create_shortcut_windowed_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_created🌑 +install_create_shortcut_windowed_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 +install_create_shortcut_windowed_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 +install_omnibox_icon_SiteA🌕 launch_from_menu_option_SiteA🌑 check_window_created🌑 +install_omnibox_icon_SiteA🌕 launch_from_launch_icon_SiteA🌑 check_window_created🌑 +install_omnibox_icon_SiteA🌕 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 +install_omnibox_icon_SiteA🌕 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 +install_policy_app_windowed_no_shortcut_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_created🌑 +install_policy_app_windowed_no_shortcut_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_created🌑 +install_policy_app_windowed_no_shortcut_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 +install_policy_app_windowed_no_shortcut_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 +install_policy_app_windowed_shortcut_SiteA🌓 launch_from_menu_option_SiteA🌑 check_window_created🌑 +install_policy_app_windowed_shortcut_SiteA🌓 launch_from_launch_icon_SiteA🌑 check_window_created🌑 +install_policy_app_windowed_shortcut_SiteA🌓 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 +install_policy_app_windowed_shortcut_SiteA🌓 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 +install_menu_option_SiteA🌓 launch_from_menu_option_SiteA🌑 check_window_created🌑 +install_menu_option_SiteA🌓 launch_from_launch_icon_SiteA🌑 check_window_created🌑 +install_menu_option_SiteA🌓 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 +install_menu_option_SiteA🌓 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 +install_create_shortcut_windowed_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_display_standalone🌑 +install_create_shortcut_windowed_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_display_standalone🌑 +install_create_shortcut_windowed_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_display_standalone🌑 +install_create_shortcut_windowed_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_display_standalone🌑 +install_omnibox_icon_SiteA🌕 launch_from_menu_option_SiteA🌑 check_window_display_standalone🌑 +install_omnibox_icon_SiteA🌕 launch_from_launch_icon_SiteA🌑 check_window_display_standalone🌑 +install_omnibox_icon_SiteA🌕 launch_from_chrome_apps_SiteA🌑 check_window_display_standalone🌑 +install_omnibox_icon_SiteA🌕 launch_from_platform_shortcut_SiteA🌑 check_window_display_standalone🌑 +install_policy_app_windowed_no_shortcut_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_display_standalone🌑 +install_policy_app_windowed_no_shortcut_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_display_standalone🌑 +install_policy_app_windowed_no_shortcut_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_display_standalone🌑 +install_policy_app_windowed_no_shortcut_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_display_standalone🌑 +install_policy_app_windowed_shortcut_SiteA🌓 launch_from_menu_option_SiteA🌑 check_window_display_standalone🌑 +install_policy_app_windowed_shortcut_SiteA🌓 launch_from_launch_icon_SiteA🌑 check_window_display_standalone🌑 +install_policy_app_windowed_shortcut_SiteA🌓 launch_from_chrome_apps_SiteA🌑 check_window_display_standalone🌑 +install_policy_app_windowed_shortcut_SiteA🌓 launch_from_platform_shortcut_SiteA🌑 check_window_display_standalone🌑 +install_menu_option_SiteA🌓 launch_from_menu_option_SiteA🌑 check_window_display_standalone🌑 +install_menu_option_SiteA🌓 launch_from_launch_icon_SiteA🌑 check_window_display_standalone🌑 +install_menu_option_SiteA🌓 launch_from_chrome_apps_SiteA🌑 check_window_display_standalone🌑 +install_menu_option_SiteA🌓 launch_from_platform_shortcut_SiteA🌑 check_window_display_standalone🌑 +install_create_shortcut_windowed_SiteA🌑 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_created🌑 +install_create_shortcut_windowed_SiteA🌑 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_created🌑 +install_create_shortcut_windowed_SiteA🌑 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 +install_create_shortcut_windowed_SiteA🌑 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 +install_omnibox_icon_SiteA🌕 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_created🌑 +install_omnibox_icon_SiteA🌕 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_created🌑 +install_omnibox_icon_SiteA🌕 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 +install_omnibox_icon_SiteA🌕 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 +install_policy_app_windowed_no_shortcut_SiteA🌑 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_created🌑 +install_policy_app_windowed_no_shortcut_SiteA🌑 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_created🌑 +install_policy_app_windowed_no_shortcut_SiteA🌑 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 +install_policy_app_windowed_no_shortcut_SiteA🌑 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 +install_policy_app_windowed_shortcut_SiteA🌓 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_created🌑 +install_policy_app_windowed_shortcut_SiteA🌓 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_created🌑 +install_policy_app_windowed_shortcut_SiteA🌓 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 +install_policy_app_windowed_shortcut_SiteA🌓 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 +install_menu_option_SiteA🌓 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_created🌑 +install_menu_option_SiteA🌓 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_created🌑 +install_menu_option_SiteA🌓 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 +install_menu_option_SiteA🌓 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 +install_create_shortcut_windowed_SiteA🌑 set_open_in_tab_SiteA🌑 launch_from_menu_option_SiteA🌑 check_tab_created🌑 +install_create_shortcut_windowed_SiteA🌑 set_open_in_tab_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 +install_create_shortcut_windowed_SiteA🌑 set_open_in_tab_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 +install_create_shortcut_windowed_SiteA🌑 set_open_in_tab_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 +install_omnibox_icon_SiteA🌕 set_open_in_tab_SiteA🌓 launch_from_menu_option_SiteA🌑 check_tab_created🌑 +install_omnibox_icon_SiteA🌕 set_open_in_tab_SiteA🌓 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 +install_omnibox_icon_SiteA🌕 set_open_in_tab_SiteA🌓 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 +install_omnibox_icon_SiteA🌕 set_open_in_tab_SiteA🌓 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 +install_policy_app_windowed_no_shortcut_SiteA🌑 set_open_in_tab_SiteA🌑 launch_from_menu_option_SiteA🌑 check_tab_created🌑 +install_policy_app_windowed_no_shortcut_SiteA🌑 set_open_in_tab_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 +install_policy_app_windowed_no_shortcut_SiteA🌑 set_open_in_tab_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 +install_policy_app_windowed_no_shortcut_SiteA🌑 set_open_in_tab_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 +install_policy_app_windowed_shortcut_SiteA🌓 set_open_in_tab_SiteA🌓 launch_from_menu_option_SiteA🌑 check_tab_created🌑 +install_policy_app_windowed_shortcut_SiteA🌓 set_open_in_tab_SiteA🌓 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 +install_policy_app_windowed_shortcut_SiteA🌓 set_open_in_tab_SiteA🌓 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 +install_policy_app_windowed_shortcut_SiteA🌓 set_open_in_tab_SiteA🌓 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 +install_menu_option_SiteA🌓 set_open_in_tab_SiteA🌓 launch_from_menu_option_SiteA🌑 check_tab_created🌑 +install_menu_option_SiteA🌓 set_open_in_tab_SiteA🌓 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 +install_menu_option_SiteA🌓 set_open_in_tab_SiteA🌓 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 +install_menu_option_SiteA🌓 set_open_in_tab_SiteA🌓 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 +install_create_shortcut_windowed_SiteB🌑 launch_from_menu_option_SiteB🌑 check_window_display_minimal🌑 +install_create_shortcut_windowed_SiteB🌑 launch_from_launch_icon_SiteB🌑 check_window_display_minimal🌑 +install_create_shortcut_windowed_SiteB🌑 launch_from_chrome_apps_SiteB🌑 check_window_display_minimal🌑 +install_create_shortcut_windowed_SiteB🌑 launch_from_platform_shortcut_SiteB🌑 check_window_display_minimal🌑 +install_omnibox_icon_SiteB🌕 launch_from_menu_option_SiteB🌑 check_window_display_minimal🌑 +install_omnibox_icon_SiteB🌕 launch_from_launch_icon_SiteB🌑 check_window_display_minimal🌑 +install_omnibox_icon_SiteB🌕 launch_from_chrome_apps_SiteB🌑 check_window_display_minimal🌑 +install_omnibox_icon_SiteB🌕 launch_from_platform_shortcut_SiteB🌑 check_window_display_minimal🌑 +install_policy_app_windowed_no_shortcut_SiteB🌑 launch_from_menu_option_SiteB🌑 check_window_display_minimal🌑 +install_policy_app_windowed_no_shortcut_SiteB🌑 launch_from_launch_icon_SiteB🌑 check_window_display_minimal🌑 +install_policy_app_windowed_no_shortcut_SiteB🌑 launch_from_chrome_apps_SiteB🌑 check_window_display_minimal🌑 +install_policy_app_windowed_no_shortcut_SiteB🌑 launch_from_platform_shortcut_SiteB🌑 check_window_display_minimal🌑 +install_policy_app_windowed_shortcut_SiteB🌓 launch_from_menu_option_SiteB🌑 check_window_display_minimal🌑 +install_policy_app_windowed_shortcut_SiteB🌓 launch_from_launch_icon_SiteB🌑 check_window_display_minimal🌑 +install_policy_app_windowed_shortcut_SiteB🌓 launch_from_chrome_apps_SiteB🌑 check_window_display_minimal🌑 +install_policy_app_windowed_shortcut_SiteB🌓 launch_from_platform_shortcut_SiteB🌑 check_window_display_minimal🌑 +install_menu_option_SiteB🌓 launch_from_menu_option_SiteB🌑 check_window_display_minimal🌑 +install_menu_option_SiteB🌓 launch_from_launch_icon_SiteB🌑 check_window_display_minimal🌑 +install_menu_option_SiteB🌓 launch_from_chrome_apps_SiteB🌑 check_window_display_minimal🌑 +install_menu_option_SiteB🌓 launch_from_platform_shortcut_SiteB🌑 check_window_display_minimal🌑 +install_create_shortcut_tabbed_SiteC🌑 launch_from_menu_option_SiteC🌑 check_tab_created🌑 +install_create_shortcut_tabbed_SiteC🌑 launch_from_launch_icon_SiteC🌑 check_tab_created🌑 +install_create_shortcut_tabbed_SiteC🌑 launch_from_chrome_apps_SiteC🌑 check_tab_created🌑 +install_create_shortcut_tabbed_SiteC🌑 launch_from_platform_shortcut_SiteC🌑 check_tab_created🌑 +install_policy_app_tabbed_shortcut_SiteC🌓 launch_from_menu_option_SiteC🌑 check_tab_created🌑 +install_policy_app_tabbed_shortcut_SiteC🌓 launch_from_launch_icon_SiteC🌑 check_tab_created🌑 +install_policy_app_tabbed_shortcut_SiteC🌓 launch_from_chrome_apps_SiteC🌑 check_tab_created🌑 +install_policy_app_tabbed_shortcut_SiteC🌓 launch_from_platform_shortcut_SiteC🌑 check_tab_created🌑 +install_policy_app_tabbed_no_shortcut_SiteC🌑 launch_from_menu_option_SiteC🌑 check_tab_created🌑 +install_policy_app_tabbed_no_shortcut_SiteC🌑 launch_from_launch_icon_SiteC🌑 check_tab_created🌑 +install_policy_app_tabbed_no_shortcut_SiteC🌑 launch_from_chrome_apps_SiteC🌑 check_tab_created🌑 +install_policy_app_tabbed_no_shortcut_SiteC🌑 launch_from_platform_shortcut_SiteC🌑 check_tab_created🌑 +install_create_shortcut_windowed_SiteC🌑 launch_from_menu_option_SiteC🌑 check_window_created🌑 +install_create_shortcut_windowed_SiteC🌑 launch_from_launch_icon_SiteC🌑 check_window_created🌑 +install_create_shortcut_windowed_SiteC🌑 launch_from_chrome_apps_SiteC🌑 check_window_created🌑 +install_create_shortcut_windowed_SiteC🌑 launch_from_platform_shortcut_SiteC🌑 check_window_created🌑 +install_policy_app_windowed_no_shortcut_SiteC🌑 launch_from_menu_option_SiteC🌑 check_window_created🌑 +install_policy_app_windowed_no_shortcut_SiteC🌑 launch_from_launch_icon_SiteC🌑 check_window_created🌑 +install_policy_app_windowed_no_shortcut_SiteC🌑 launch_from_chrome_apps_SiteC🌑 check_window_created🌑 +install_policy_app_windowed_no_shortcut_SiteC🌑 launch_from_platform_shortcut_SiteC🌑 check_window_created🌑 +install_policy_app_windowed_shortcut_SiteC🌓 launch_from_menu_option_SiteC🌑 check_window_created🌑 +install_policy_app_windowed_shortcut_SiteC🌓 launch_from_launch_icon_SiteC🌑 check_window_created🌑 +install_policy_app_windowed_shortcut_SiteC🌓 launch_from_chrome_apps_SiteC🌑 check_window_created🌑 +install_policy_app_windowed_shortcut_SiteC🌓 launch_from_platform_shortcut_SiteC🌑 check_window_created🌑 +install_create_shortcut_windowed_SiteA🌑 close_pwa🌑 manifest_update_icons_SiteA🌑 check_app_in_list_icon_correct_SiteA🌑 +install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_icons_SiteA🌑 check_app_in_list_icon_correct_SiteA🌑 +install_menu_option_SiteA🌓 close_pwa🌕 manifest_update_icons_SiteA🌑 check_app_in_list_icon_correct_SiteA🌑 +install_create_shortcut_windowed_SiteA🌑 close_pwa🌑 manifest_update_icons_SiteA🌑 check_platform_shortcut_icon_correct_SiteA🌑 +install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_icons_SiteA🌑 check_platform_shortcut_icon_correct_SiteA🌑 +install_menu_option_SiteA🌓 close_pwa🌕 manifest_update_icons_SiteA🌑 check_platform_shortcut_icon_correct_SiteA🌑 +install_create_shortcut_windowed_SiteAFoo🌑 manifest_update_scope_site_a_foo_to_SiteA🌑 close_pwa🌑 launch_from_platform_shortcut_SiteAFoo🌑 close_pwa🌑 navigate_browser_SiteA🌑 check_install_icon_not_shown🌑 +install_omnibox_icon_SiteAFoo🌕 manifest_update_scope_site_a_foo_to_SiteA🌑 close_pwa🌑 launch_from_platform_shortcut_SiteAFoo🌑 close_pwa🌑 navigate_browser_SiteA🌑 check_install_icon_not_shown🌑 +install_menu_option_SiteAFoo🌓 manifest_update_scope_site_a_foo_to_SiteA🌑 close_pwa🌑 launch_from_platform_shortcut_SiteAFoo🌑 close_pwa🌑 navigate_browser_SiteA🌑 check_install_icon_not_shown🌑 +install_create_shortcut_windowed_SiteAFoo🌑 manifest_update_scope_site_a_foo_to_SiteA🌑 close_pwa🌑 launch_from_platform_shortcut_SiteAFoo🌑 close_pwa🌑 navigate_browser_SiteA🌑 check_launch_icon_shown🌑 +install_omnibox_icon_SiteAFoo🌕 manifest_update_scope_site_a_foo_to_SiteA🌑 close_pwa🌑 launch_from_platform_shortcut_SiteAFoo🌑 close_pwa🌑 navigate_browser_SiteA🌑 check_launch_icon_shown🌑 +install_menu_option_SiteAFoo🌓 manifest_update_scope_site_a_foo_to_SiteA🌑 close_pwa🌑 launch_from_platform_shortcut_SiteAFoo🌑 close_pwa🌑 navigate_browser_SiteA🌑 check_launch_icon_shown🌑 +install_create_shortcut_windowed_SiteAFoo🌑 close_pwa🌑 manifest_update_scope_site_a_foo_to_SiteA🌑 navigate_browser_SiteABar🌑 check_install_icon_not_shown🌑 +install_omnibox_icon_SiteAFoo🌕 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteA🌑 navigate_browser_SiteABar🌑 check_install_icon_not_shown🌑 +install_menu_option_SiteAFoo🌓 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteA🌑 navigate_browser_SiteABar🌑 check_install_icon_not_shown🌑 +install_create_shortcut_windowed_SiteAFoo🌑 close_pwa🌑 manifest_update_scope_site_a_foo_to_SiteA🌑 navigate_browser_SiteABar🌑 check_launch_icon_shown🌑 +install_omnibox_icon_SiteAFoo🌕 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteA🌑 navigate_browser_SiteABar🌑 check_launch_icon_shown🌑 +install_menu_option_SiteAFoo🌓 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteA🌑 navigate_browser_SiteABar🌑 check_launch_icon_shown🌑 +install_create_shortcut_windowed_SiteAFoo🌑 navigate_browser_SiteABar🌑 check_install_icon_shown🌑 +install_omnibox_icon_SiteAFoo🌕 navigate_browser_SiteABar🌕 check_install_icon_shown🌕 +install_policy_app_windowed_no_shortcut_SiteAFoo🌑 navigate_browser_SiteABar🌑 check_install_icon_shown🌑 +install_policy_app_windowed_shortcut_SiteAFoo🌓 navigate_browser_SiteABar🌕 check_install_icon_shown🌕 +install_menu_option_SiteAFoo🌓 navigate_browser_SiteABar🌕 check_install_icon_shown🌕 +install_create_shortcut_windowed_SiteAFoo🌑 navigate_browser_SiteABar🌑 check_launch_icon_not_shown🌑 +install_omnibox_icon_SiteAFoo🌕 navigate_browser_SiteABar🌕 check_launch_icon_not_shown🌕 +install_policy_app_windowed_no_shortcut_SiteAFoo🌑 navigate_browser_SiteABar🌑 check_launch_icon_not_shown🌑 +install_policy_app_windowed_shortcut_SiteAFoo🌓 navigate_browser_SiteABar🌕 check_launch_icon_not_shown🌕 +install_menu_option_SiteAFoo🌓 navigate_browser_SiteABar🌕 check_launch_icon_not_shown🌕 +install_create_shortcut_windowed_SiteAFoo🌑 close_pwa🌑 manifest_update_scope_site_a_foo_to_SiteA🌑 navigate_browser_SiteAFoo🌑 check_install_icon_not_shown🌑 +install_omnibox_icon_SiteAFoo🌕 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteA🌑 navigate_browser_SiteAFoo🌑 check_install_icon_not_shown🌑 +install_menu_option_SiteAFoo🌓 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteA🌑 navigate_browser_SiteAFoo🌑 check_install_icon_not_shown🌑 +install_create_shortcut_windowed_SiteAFoo🌑 close_pwa🌑 manifest_update_scope_site_a_foo_to_SiteA🌑 navigate_browser_SiteAFoo🌑 check_launch_icon_shown🌑 +install_omnibox_icon_SiteAFoo🌕 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteA🌑 navigate_browser_SiteAFoo🌑 check_launch_icon_shown🌑 +install_menu_option_SiteAFoo🌓 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteA🌑 navigate_browser_SiteAFoo🌑 check_launch_icon_shown🌑 +install_create_shortcut_windowed_SiteA🌑 navigate_browser_SiteAFoo🌑 check_install_icon_not_shown🌑 +install_omnibox_icon_SiteA🌕 navigate_browser_SiteAFoo🌕 check_install_icon_not_shown🌕 +install_policy_app_windowed_no_shortcut_SiteA🌑 navigate_browser_SiteAFoo🌑 check_install_icon_not_shown🌑 +install_policy_app_windowed_shortcut_SiteA🌓 navigate_browser_SiteAFoo🌕 check_install_icon_not_shown🌕 +install_menu_option_SiteA🌓 navigate_browser_SiteAFoo🌕 check_install_icon_not_shown🌕 +install_create_shortcut_windowed_SiteA🌑 navigate_browser_SiteAFoo🌑 check_launch_icon_shown🌑 +install_omnibox_icon_SiteA🌕 navigate_browser_SiteAFoo🌕 check_launch_icon_shown🌕 +install_policy_app_windowed_no_shortcut_SiteA🌑 navigate_browser_SiteAFoo🌑 check_launch_icon_shown🌑 +install_policy_app_windowed_shortcut_SiteA🌓 navigate_browser_SiteAFoo🌕 check_launch_icon_shown🌕 +install_menu_option_SiteA🌓 navigate_browser_SiteAFoo🌕 check_launch_icon_shown🌕 +navigate_browser_SiteAFoo🌕 check_install_icon_shown🌕 +switch_incognito_profile🌑 navigate_browser_SiteA🌑 check_create_shortcut_not_shown🌑 +navigate_browser_SiteA🌕 check_app_not_in_list_SiteA🌕 +navigate_browser_SiteA🌕 check_create_shortcut_shown🌑 +navigate_browser_SiteA🌕 check_platform_shortcut_not_exists_SiteA🌑 +install_create_shortcut_windowed_SiteA🌑 navigate_browser_SiteB🌑 check_install_icon_shown🌑 +install_omnibox_icon_SiteA🌕 navigate_browser_SiteB🌕 check_install_icon_shown🌕 +install_menu_option_SiteA🌓 navigate_browser_SiteB🌕 check_install_icon_shown🌕 +install_create_shortcut_windowed_SiteA🌑 navigate_browser_SiteB🌑 check_launch_icon_not_shown🌑 +install_omnibox_icon_SiteA🌕 navigate_browser_SiteB🌕 check_launch_icon_not_shown🌕 +install_menu_option_SiteA🌓 navigate_browser_SiteB🌕 check_launch_icon_not_shown🌕 +switch_incognito_profile🌑 navigate_browser_SiteC🌑 check_create_shortcut_not_shown🌑 +navigate_browser_SiteC🌕 check_app_not_in_list_SiteA🌕 +navigate_browser_SiteC🌕 check_create_shortcut_shown🌑 +navigate_browser_SiteC🌕 check_install_icon_not_shown🌕 +navigate_browser_SiteC🌕 check_platform_shortcut_not_exists_SiteA🌑 +navigate_crashed_url🌑 check_create_shortcut_not_shown🌑 +navigate_crashed_url🌑 check_install_icon_not_shown🌑 +navigate_notfound_url🌑 check_create_shortcut_not_shown🌑 +navigate_notfound_url🌑 check_install_icon_not_shown🌑 +install_create_shortcut_windowed_SiteAFoo🌑 close_pwa🌑 manifest_update_scope_site_a_foo_to_SiteA🌑 launch_from_menu_option_SiteAFoo🌑 navigate_pwa_site_a_foo_to_SiteABar🌑 check_no_toolbar🌑 +install_create_shortcut_windowed_SiteAFoo🌑 close_pwa🌑 manifest_update_scope_site_a_foo_to_SiteA🌑 launch_from_launch_icon_SiteAFoo🌑 navigate_pwa_site_a_foo_to_SiteABar🌑 check_no_toolbar🌑 +install_create_shortcut_windowed_SiteAFoo🌑 close_pwa🌑 manifest_update_scope_site_a_foo_to_SiteA🌑 launch_from_chrome_apps_SiteAFoo🌑 navigate_pwa_site_a_foo_to_SiteABar🌑 check_no_toolbar🌑 +install_create_shortcut_windowed_SiteAFoo🌑 close_pwa🌑 manifest_update_scope_site_a_foo_to_SiteA🌑 launch_from_platform_shortcut_SiteAFoo🌑 navigate_pwa_site_a_foo_to_SiteABar🌑 check_no_toolbar🌑 +install_omnibox_icon_SiteAFoo🌕 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteA🌑 launch_from_menu_option_SiteAFoo🌑 navigate_pwa_site_a_foo_to_SiteABar🌑 check_no_toolbar🌑 +install_omnibox_icon_SiteAFoo🌕 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteA🌑 launch_from_launch_icon_SiteAFoo🌑 navigate_pwa_site_a_foo_to_SiteABar🌑 check_no_toolbar🌑 +install_omnibox_icon_SiteAFoo🌕 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteA🌑 launch_from_chrome_apps_SiteAFoo🌑 navigate_pwa_site_a_foo_to_SiteABar🌑 check_no_toolbar🌑 +install_omnibox_icon_SiteAFoo🌕 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteA🌑 launch_from_platform_shortcut_SiteAFoo🌑 navigate_pwa_site_a_foo_to_SiteABar🌑 check_no_toolbar🌑 +install_menu_option_SiteAFoo🌓 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteA🌑 launch_from_menu_option_SiteAFoo🌑 navigate_pwa_site_a_foo_to_SiteABar🌑 check_no_toolbar🌑 +install_menu_option_SiteAFoo🌓 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteA🌑 launch_from_launch_icon_SiteAFoo🌑 navigate_pwa_site_a_foo_to_SiteABar🌑 check_no_toolbar🌑 +install_menu_option_SiteAFoo🌓 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteA🌑 launch_from_chrome_apps_SiteAFoo🌑 navigate_pwa_site_a_foo_to_SiteABar🌑 check_no_toolbar🌑 +install_menu_option_SiteAFoo🌓 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteA🌑 launch_from_platform_shortcut_SiteAFoo🌑 navigate_pwa_site_a_foo_to_SiteABar🌑 check_no_toolbar🌑 +install_create_shortcut_windowed_SiteA🌑 navigate_pwa_site_a_to_SiteB🌑 check_toolbar🌑 +install_omnibox_icon_SiteA🌕 navigate_pwa_site_a_to_SiteB🌑 check_toolbar🌑 +install_menu_option_SiteA🌓 navigate_pwa_site_a_to_SiteB🌑 check_toolbar🌑 +install_create_shortcut_windowed_SiteA🌑 navigate_pwa_site_a_to_SiteB🌑 check_window_title_is_SiteA🌑 +install_omnibox_icon_SiteA🌕 navigate_pwa_site_a_to_SiteB🌑 check_window_title_is_SiteA🌑 +install_menu_option_SiteA🌓 navigate_pwa_site_a_to_SiteB🌑 check_window_title_is_SiteA🌑 +install_create_shortcut_windowed_SiteA🌑 open_in_chrome🌑 check_tab_created🌑 +install_omnibox_icon_SiteA🌕 open_in_chrome🌑 check_tab_created🌑 +install_menu_option_SiteA🌓 open_in_chrome🌑 check_tab_created🌑 +install_create_shortcut_windowed_SiteA🌑 navigate_pwa_site_a_to_SiteB🌑 open_in_chrome🌑 check_tab_created🌑 +install_omnibox_icon_SiteA🌕 navigate_pwa_site_a_to_SiteB🌑 open_in_chrome🌑 check_tab_created🌑 +install_menu_option_SiteA🌓 navigate_pwa_site_a_to_SiteB🌑 open_in_chrome🌑 check_tab_created🌑 +install_create_shortcut_tabbed_SiteA🌑 install_policy_app_windowed_no_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_app_in_list_tabbed_SiteA🌑 +install_create_shortcut_tabbed_SiteA🌑 install_policy_app_tabbed_no_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_app_in_list_tabbed_SiteA🌑 +install_create_shortcut_tabbed_SiteA🌑 install_policy_app_windowed_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_app_in_list_tabbed_SiteA🌑 +install_create_shortcut_tabbed_SiteA🌑 install_policy_app_tabbed_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_app_in_list_tabbed_SiteA🌑 +install_create_shortcut_tabbed_SiteA🌑 install_policy_app_windowed_no_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 +install_create_shortcut_tabbed_SiteA🌑 install_policy_app_tabbed_no_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 +install_create_shortcut_tabbed_SiteA🌑 install_policy_app_windowed_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 +install_create_shortcut_tabbed_SiteA🌑 install_policy_app_tabbed_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 +install_create_shortcut_windowed_SiteA🌑 install_policy_app_windowed_no_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_app_in_list_windowed_SiteA🌑 +install_create_shortcut_windowed_SiteA🌑 install_policy_app_tabbed_no_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_app_in_list_windowed_SiteA🌑 +install_create_shortcut_windowed_SiteA🌑 install_policy_app_windowed_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_app_in_list_windowed_SiteA🌑 +install_create_shortcut_windowed_SiteA🌑 install_policy_app_tabbed_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_app_in_list_windowed_SiteA🌑 +install_omnibox_icon_SiteA🌕 install_policy_app_windowed_no_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_app_in_list_windowed_SiteA🌑 +install_omnibox_icon_SiteA🌕 install_policy_app_tabbed_no_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_app_in_list_windowed_SiteA🌑 +install_omnibox_icon_SiteA🌕 install_policy_app_windowed_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_app_in_list_windowed_SiteA🌑 +install_omnibox_icon_SiteA🌕 install_policy_app_tabbed_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_app_in_list_windowed_SiteA🌑 +install_menu_option_SiteA🌓 install_policy_app_windowed_no_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_app_in_list_windowed_SiteA🌑 +install_menu_option_SiteA🌓 install_policy_app_tabbed_no_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_app_in_list_windowed_SiteA🌑 +install_menu_option_SiteA🌓 install_policy_app_windowed_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_app_in_list_windowed_SiteA🌑 +install_menu_option_SiteA🌓 install_policy_app_tabbed_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_app_in_list_windowed_SiteA🌑 +install_create_shortcut_windowed_SiteA🌑 install_policy_app_windowed_no_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 +install_create_shortcut_windowed_SiteA🌑 install_policy_app_tabbed_no_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 +install_create_shortcut_windowed_SiteA🌑 install_policy_app_windowed_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 +install_create_shortcut_windowed_SiteA🌑 install_policy_app_tabbed_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 +install_omnibox_icon_SiteA🌕 install_policy_app_windowed_no_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 +install_omnibox_icon_SiteA🌕 install_policy_app_tabbed_no_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 +install_omnibox_icon_SiteA🌕 install_policy_app_windowed_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_platform_shortcut_exists_SiteA🌑 +install_omnibox_icon_SiteA🌕 install_policy_app_tabbed_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_platform_shortcut_exists_SiteA🌑 +install_menu_option_SiteA🌓 install_policy_app_windowed_no_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 +install_menu_option_SiteA🌓 install_policy_app_tabbed_no_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 +install_menu_option_SiteA🌓 install_policy_app_windowed_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_platform_shortcut_exists_SiteA🌑 +install_menu_option_SiteA🌓 install_policy_app_tabbed_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_platform_shortcut_exists_SiteA🌑 +install_policy_app_windowed_no_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_app_not_in_list_SiteA🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_app_not_in_list_SiteA🌑 +install_policy_app_windowed_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_app_not_in_list_SiteA🌕 +install_policy_app_tabbed_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_app_not_in_list_SiteA🌕 +install_policy_app_tabbed_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 navigate_browser_SiteA🌕 check_install_icon_shown🌕 +install_policy_app_tabbed_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 navigate_browser_SiteA🌕 check_launch_icon_not_shown🌕 +install_policy_app_windowed_no_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_platform_shortcut_not_exists_SiteA🌑 check_app_not_in_list_SiteA🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_platform_shortcut_not_exists_SiteA🌑 check_app_not_in_list_SiteA🌑 +install_policy_app_windowed_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_platform_shortcut_not_exists_SiteA🌑 check_app_not_in_list_SiteA🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_platform_shortcut_not_exists_SiteA🌑 check_app_not_in_list_SiteA🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 install_create_shortcut_windowed_SiteA🌑 uninstall_policy_app_SiteA🌑 check_app_in_list_windowed_SiteA🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 install_omnibox_icon_SiteA🌕 uninstall_policy_app_SiteA🌕 check_app_in_list_windowed_SiteA🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 install_menu_option_SiteA🌓 uninstall_policy_app_SiteA🌕 check_app_in_list_windowed_SiteA🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 install_create_shortcut_windowed_SiteA🌑 uninstall_policy_app_SiteA🌑 check_app_in_list_windowed_SiteA🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 install_omnibox_icon_SiteA🌑 uninstall_policy_app_SiteA🌑 check_app_in_list_windowed_SiteA🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 install_menu_option_SiteA🌑 uninstall_policy_app_SiteA🌑 check_app_in_list_windowed_SiteA🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 install_create_shortcut_windowed_SiteA🌑 uninstall_policy_app_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 install_omnibox_icon_SiteA🌕 uninstall_policy_app_SiteA🌕 check_platform_shortcut_exists_SiteA🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 install_menu_option_SiteA🌓 uninstall_policy_app_SiteA🌕 check_platform_shortcut_exists_SiteA🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 install_create_shortcut_windowed_SiteA🌑 uninstall_policy_app_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 install_omnibox_icon_SiteA🌑 uninstall_policy_app_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 install_menu_option_SiteA🌑 uninstall_policy_app_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 +install_create_shortcut_windowed_SiteA🌑 set_app_badge_SiteA🌑 check_app_badge_has_value_SiteA🌑 +install_omnibox_icon_SiteA🌕 set_app_badge_SiteA🌑 check_app_badge_has_value_SiteA🌑 +install_menu_option_SiteA🌓 set_app_badge_SiteA🌑 check_app_badge_has_value_SiteA🌑 +navigate_browser_SiteA🌕 set_app_badge_SiteA🌑 check_platform_shortcut_not_exists_SiteA🌑 +install_create_shortcut_windowed_SiteA🌑 set_open_in_tab_SiteA🌑 check_app_in_list_tabbed_SiteA🌑 +install_omnibox_icon_SiteA🌕 set_open_in_tab_SiteA🌓 check_app_in_list_tabbed_SiteA🌑 +install_menu_option_SiteA🌓 set_open_in_tab_SiteA🌓 check_app_in_list_tabbed_SiteA🌑 +install_create_shortcut_windowed_SiteA🌑 set_open_in_tab_SiteA🌑 navigate_browser_SiteA🌑 check_install_icon_shown🌑 +install_omnibox_icon_SiteA🌕 set_open_in_tab_SiteA🌓 navigate_browser_SiteA🌕 check_install_icon_shown🌕 +install_menu_option_SiteA🌓 set_open_in_tab_SiteA🌓 navigate_browser_SiteA🌕 check_install_icon_shown🌕 +install_create_shortcut_tabbed_SiteA🌑 set_open_in_window_SiteA🌑 check_app_in_list_windowed_SiteA🌑 +install_create_shortcut_tabbed_SiteA🌑 set_open_in_window_SiteA🌑 navigate_browser_SiteA🌑 check_install_icon_not_shown🌑 +install_create_shortcut_tabbed_SiteA🌑 set_open_in_window_SiteA🌑 navigate_browser_SiteA🌑 check_launch_icon_shown🌑 +install_create_shortcut_windowed_SiteA🌑 switch_incognito_profile🌑 navigate_browser_SiteA🌑 check_launch_icon_not_shown🌑 +install_omnibox_icon_SiteA🌕 switch_incognito_profile🌑 navigate_browser_SiteA🌑 check_launch_icon_not_shown🌑 +install_menu_option_SiteA🌓 switch_incognito_profile🌑 navigate_browser_SiteA🌑 check_launch_icon_not_shown🌑 +switch_incognito_profile🌑 navigate_browser_SiteA🌑 check_install_icon_not_shown🌑 +install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 check_app_in_list_not_locally_installed_SiteA🌑 +install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 check_app_in_list_not_locally_installed_SiteA🌓 +install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 check_app_in_list_not_locally_installed_SiteA🌓 +install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 check_app_in_list_not_locally_installed_SiteA🌑 +install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 check_app_in_list_not_locally_installed_SiteA🌑 +install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 check_app_in_list_not_locally_installed_SiteA🌓 +install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 check_app_in_list_not_locally_installed_SiteA🌓 +install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 check_app_in_list_not_locally_installed_SiteA🌑 +install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 check_platform_shortcut_not_exists_SiteA🌑 +install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 check_platform_shortcut_not_exists_SiteA🌑 +install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 check_platform_shortcut_not_exists_SiteA🌑 +install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 check_platform_shortcut_not_exists_SiteA🌑 +install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 navigate_browser_SiteA🌑 check_install_icon_shown🌑 +install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 navigate_browser_SiteA🌕 check_install_icon_shown🌕 +install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 navigate_browser_SiteA🌕 check_install_icon_shown🌕 +install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 navigate_browser_SiteA🌑 check_launch_icon_not_shown🌑 +install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 navigate_browser_SiteA🌕 check_launch_icon_not_shown🌕 +install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 navigate_browser_SiteA🌕 check_launch_icon_not_shown🌕 +install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 sync_turn_off🌑 uninstall_from_app_list_SiteA🌑 sync_turn_on🌑 switch_profile_clients_UserAClient1🌑 check_app_not_in_list_SiteA🌑 +install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 sync_turn_off🌕 uninstall_from_app_list_SiteA🌑 sync_turn_on🌑 switch_profile_clients_UserAClient1🌑 check_app_not_in_list_SiteA🌑 +install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 sync_turn_off🌕 uninstall_from_app_list_SiteA🌑 sync_turn_on🌑 switch_profile_clients_UserAClient1🌑 check_app_not_in_list_SiteA🌑 +install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 sync_turn_off🌑 uninstall_from_app_list_SiteA🌑 sync_turn_on🌑 switch_profile_clients_UserAClient1🌑 check_app_not_in_list_SiteA🌑 +install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 sync_turn_off🌑 uninstall_from_app_list_SiteA🌑 sync_turn_on🌑 switch_profile_clients_UserAClient1🌑 check_platform_shortcut_not_exists_SiteA🌑 +install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 sync_turn_off🌕 uninstall_from_app_list_SiteA🌑 sync_turn_on🌑 switch_profile_clients_UserAClient1🌑 check_platform_shortcut_not_exists_SiteA🌑 +install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 sync_turn_off🌕 uninstall_from_app_list_SiteA🌑 sync_turn_on🌑 switch_profile_clients_UserAClient1🌑 check_platform_shortcut_not_exists_SiteA🌑 +install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 sync_turn_off🌑 uninstall_from_app_list_SiteA🌑 sync_turn_on🌑 switch_profile_clients_UserAClient1🌑 check_platform_shortcut_not_exists_SiteA🌑 +install_create_shortcut_windowed_SiteA🌑 uninstall_from_app_list_SiteA🌑 check_app_not_in_list_SiteA🌑 +install_create_shortcut_windowed_SiteA🌑 uninstall_from_menu_SiteA🌑 check_app_not_in_list_SiteA🌑 +install_omnibox_icon_SiteA🌕 uninstall_from_app_list_SiteA🌑 check_app_not_in_list_SiteA🌑 +install_omnibox_icon_SiteA🌕 uninstall_from_menu_SiteA🌑 check_app_not_in_list_SiteA🌑 +install_menu_option_SiteA🌓 uninstall_from_app_list_SiteA🌑 check_app_not_in_list_SiteA🌑 +install_menu_option_SiteA🌓 uninstall_from_menu_SiteA🌑 check_app_not_in_list_SiteA🌑 +install_create_shortcut_tabbed_SiteA🌑 uninstall_from_app_list_SiteA🌑 check_app_not_in_list_SiteA🌑 +install_create_shortcut_tabbed_SiteA🌑 uninstall_from_menu_SiteA🌑 check_app_not_in_list_SiteA🌑 +install_create_shortcut_windowed_SiteA🌑 uninstall_from_app_list_SiteA🌑 navigate_browser_SiteA🌑 check_install_icon_shown🌑 +install_create_shortcut_windowed_SiteA🌑 uninstall_from_menu_SiteA🌑 navigate_browser_SiteA🌑 check_install_icon_shown🌑 +install_omnibox_icon_SiteA🌕 uninstall_from_app_list_SiteA🌑 navigate_browser_SiteA🌑 check_install_icon_shown🌑 +install_omnibox_icon_SiteA🌕 uninstall_from_menu_SiteA🌑 navigate_browser_SiteA🌑 check_install_icon_shown🌑 +install_menu_option_SiteA🌓 uninstall_from_app_list_SiteA🌑 navigate_browser_SiteA🌑 check_install_icon_shown🌑 +install_menu_option_SiteA🌓 uninstall_from_menu_SiteA🌑 navigate_browser_SiteA🌑 check_install_icon_shown🌑 +install_create_shortcut_tabbed_SiteA🌑 uninstall_from_app_list_SiteA🌑 navigate_browser_SiteA🌑 check_install_icon_shown🌑 +install_create_shortcut_tabbed_SiteA🌑 uninstall_from_menu_SiteA🌑 navigate_browser_SiteA🌑 check_install_icon_shown🌑 +install_create_shortcut_windowed_SiteA🌑 uninstall_from_app_list_SiteA🌑 navigate_browser_SiteA🌑 check_launch_icon_not_shown🌑 +install_create_shortcut_windowed_SiteA🌑 uninstall_from_menu_SiteA🌑 navigate_browser_SiteA🌑 check_launch_icon_not_shown🌑 +install_omnibox_icon_SiteA🌕 uninstall_from_app_list_SiteA🌑 navigate_browser_SiteA🌑 check_launch_icon_not_shown🌑 +install_omnibox_icon_SiteA🌕 uninstall_from_menu_SiteA🌑 navigate_browser_SiteA🌑 check_launch_icon_not_shown🌑 +install_menu_option_SiteA🌓 uninstall_from_app_list_SiteA🌑 navigate_browser_SiteA🌑 check_launch_icon_not_shown🌑 +install_menu_option_SiteA🌓 uninstall_from_menu_SiteA🌑 navigate_browser_SiteA🌑 check_launch_icon_not_shown🌑 +install_create_shortcut_tabbed_SiteA🌑 uninstall_from_app_list_SiteA🌑 navigate_browser_SiteA🌑 check_launch_icon_not_shown🌑 +install_create_shortcut_tabbed_SiteA🌑 uninstall_from_menu_SiteA🌑 navigate_browser_SiteA🌑 check_launch_icon_not_shown🌑 +install_create_shortcut_windowed_SiteA🌑 uninstall_from_app_list_SiteA🌑 check_platform_shortcut_not_exists_SiteA🌑 +install_create_shortcut_windowed_SiteA🌑 uninstall_from_menu_SiteA🌑 check_platform_shortcut_not_exists_SiteA🌑 +install_omnibox_icon_SiteA🌕 uninstall_from_app_list_SiteA🌑 check_platform_shortcut_not_exists_SiteA🌑 +install_omnibox_icon_SiteA🌕 uninstall_from_menu_SiteA🌑 check_platform_shortcut_not_exists_SiteA🌑 +install_menu_option_SiteA🌓 uninstall_from_app_list_SiteA🌑 check_platform_shortcut_not_exists_SiteA🌑 +install_menu_option_SiteA🌓 uninstall_from_menu_SiteA🌑 check_platform_shortcut_not_exists_SiteA🌑 +install_create_shortcut_tabbed_SiteA🌑 uninstall_from_app_list_SiteA🌑 check_platform_shortcut_not_exists_SiteA🌑 +install_create_shortcut_tabbed_SiteA🌑 uninstall_from_menu_SiteA🌑 check_platform_shortcut_not_exists_SiteA🌑 +install_create_shortcut_windowed_SiteC🌑 uninstall_from_app_list_SiteC🌑 check_app_not_in_list_SiteA🌑 +install_create_shortcut_windowed_SiteC🌑 uninstall_from_menu_SiteC🌑 check_app_not_in_list_SiteA🌑 +install_create_shortcut_tabbed_SiteC🌑 uninstall_from_app_list_SiteC🌑 check_app_not_in_list_SiteA🌑 +install_create_shortcut_tabbed_SiteC🌑 uninstall_from_menu_SiteC🌑 check_app_not_in_list_SiteA🌑 +install_create_shortcut_windowed_SiteC🌑 uninstall_from_app_list_SiteC🌑 navigate_browser_SiteC🌑 check_launch_icon_not_shown🌑 +install_create_shortcut_windowed_SiteC🌑 uninstall_from_menu_SiteC🌑 navigate_browser_SiteC🌑 check_launch_icon_not_shown🌑 +install_create_shortcut_tabbed_SiteC🌑 uninstall_from_app_list_SiteC🌑 navigate_browser_SiteC🌑 check_launch_icon_not_shown🌑 +install_create_shortcut_tabbed_SiteC🌑 uninstall_from_menu_SiteC🌑 navigate_browser_SiteC🌑 check_launch_icon_not_shown🌑 +install_create_shortcut_windowed_SiteC🌑 uninstall_from_app_list_SiteC🌑 check_platform_shortcut_not_exists_SiteC🌑 +install_create_shortcut_windowed_SiteC🌑 uninstall_from_menu_SiteC🌑 check_platform_shortcut_not_exists_SiteC🌑 +install_create_shortcut_tabbed_SiteC🌑 uninstall_from_app_list_SiteC🌑 check_platform_shortcut_not_exists_SiteC🌑 +install_create_shortcut_tabbed_SiteC🌑 uninstall_from_menu_SiteC🌑 check_platform_shortcut_not_exists_SiteC🌑 +install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 uninstall_from_app_list_SiteA🌑 check_app_not_in_list_SiteA🌑 +install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 uninstall_from_app_list_SiteA🌑 check_app_not_in_list_SiteA🌑 +install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 uninstall_from_app_list_SiteA🌑 check_app_not_in_list_SiteA🌑 +install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 uninstall_from_app_list_SiteA🌑 check_app_not_in_list_SiteA🌑 +install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 uninstall_from_app_list_SiteA🌑 switch_profile_clients_UserAClient1🌑 check_app_not_in_list_SiteA🌑 +install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 uninstall_from_app_list_SiteA🌑 switch_profile_clients_UserAClient1🌑 check_app_not_in_list_SiteA🌑 +install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 uninstall_from_app_list_SiteA🌑 switch_profile_clients_UserAClient1🌑 check_app_not_in_list_SiteA🌑 +install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 uninstall_from_app_list_SiteA🌑 switch_profile_clients_UserAClient1🌑 check_app_not_in_list_SiteA🌑
diff --git a/chrome/test/webapps/coverage/coverage_linux.tsv b/chrome/test/webapps/coverage/coverage_linux.tsv index 21fa94ba8..d083c8b 100644 --- a/chrome/test/webapps/coverage/coverage_linux.tsv +++ b/chrome/test/webapps/coverage/coverage_linux.tsv
@@ -1,841 +1,841 @@ -# This is a generated file. -# Full coverage: 14%, with partial coverage: 24% -install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 chrome_update🌑 check_app_in_list_not_locally_installed_SiteA🌑 -install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 chrome_update🌑 check_app_in_list_not_locally_installed_SiteA🌑 -install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 chrome_update🌑 check_app_in_list_not_locally_installed_SiteA🌑 -install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 chrome_update🌑 check_app_in_list_not_locally_installed_SiteA🌑 -install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteA🌑 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 -install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 install_locally_SiteA🌓 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 -install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 install_locally_SiteA🌓 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 -install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteA🌑 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 -install_create_shortcut_windowed_SiteA🌑 uninstall_from_app_list_SiteA🌑 chrome_update🌑 check_app_not_in_list_SiteA🌑 -install_create_shortcut_windowed_SiteA🌑 uninstall_from_menu_SiteA🌑 chrome_update🌑 check_app_not_in_list_SiteA🌑 -install_omnibox_icon_SiteA🌕 uninstall_from_app_list_SiteA🌑 chrome_update🌑 check_app_not_in_list_SiteA🌑 -install_omnibox_icon_SiteA🌕 uninstall_from_menu_SiteA🌕 chrome_update🌑 check_app_not_in_list_SiteA🌑 -install_menu_option_SiteA🌓 uninstall_from_app_list_SiteA🌑 chrome_update🌑 check_app_not_in_list_SiteA🌑 -install_menu_option_SiteA🌓 uninstall_from_menu_SiteA🌕 chrome_update🌑 check_app_not_in_list_SiteA🌑 -install_create_shortcut_tabbed_SiteA🌑 uninstall_from_app_list_SiteA🌑 chrome_update🌑 check_app_not_in_list_SiteA🌑 -install_create_shortcut_tabbed_SiteA🌑 uninstall_from_menu_SiteA🌑 chrome_update🌑 check_app_not_in_list_SiteA🌑 -install_create_shortcut_windowed_SiteA🌑 uninstall_from_app_list_SiteA🌑 chrome_update🌑 check_platform_shortcut_not_exists_SiteA🌑 -install_create_shortcut_windowed_SiteA🌑 uninstall_from_menu_SiteA🌑 chrome_update🌑 check_platform_shortcut_not_exists_SiteA🌑 -install_omnibox_icon_SiteA🌕 uninstall_from_app_list_SiteA🌑 chrome_update🌑 check_platform_shortcut_not_exists_SiteA🌑 -install_omnibox_icon_SiteA🌕 uninstall_from_menu_SiteA🌕 chrome_update🌑 check_platform_shortcut_not_exists_SiteA🌑 -install_menu_option_SiteA🌓 uninstall_from_app_list_SiteA🌑 chrome_update🌑 check_platform_shortcut_not_exists_SiteA🌑 -install_menu_option_SiteA🌓 uninstall_from_menu_SiteA🌕 chrome_update🌑 check_platform_shortcut_not_exists_SiteA🌑 -install_create_shortcut_tabbed_SiteA🌑 uninstall_from_app_list_SiteA🌑 chrome_update🌑 check_platform_shortcut_not_exists_SiteA🌑 -install_create_shortcut_tabbed_SiteA🌑 uninstall_from_menu_SiteA🌑 chrome_update🌑 check_platform_shortcut_not_exists_SiteA🌑 -install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteA🌑 chrome_update🌑 check_app_in_list_tabbed_SiteA🌑 -install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteA🌑 chrome_update🌑 check_app_in_list_windowed_SiteA🌑 -install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 install_locally_SiteA🌓 chrome_update🌑 check_app_in_list_windowed_SiteA🌑 -install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 install_locally_SiteA🌓 chrome_update🌑 check_app_in_list_windowed_SiteA🌑 -install_create_shortcut_windowed_SiteC🌑 switch_profile_clients_UserAClient2🌑 chrome_update🌑 check_app_in_list_not_locally_installed_SiteC🌑 -install_create_shortcut_tabbed_SiteC🌑 switch_profile_clients_UserAClient2🌑 chrome_update🌑 check_app_in_list_not_locally_installed_SiteC🌑 -install_policy_app_windowed_no_shortcut_SiteA🌑 chrome_update🌑 check_platform_shortcut_not_exists_SiteA🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 chrome_update🌑 check_platform_shortcut_not_exists_SiteA🌑 -install_policy_app_windowed_no_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 chrome_update🌑 check_app_not_in_list_SiteA🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 chrome_update🌑 check_app_not_in_list_SiteA🌑 -install_policy_app_windowed_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 chrome_update🌑 check_app_not_in_list_SiteA🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 chrome_update🌑 check_app_not_in_list_SiteA🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 install_create_shortcut_windowed_SiteA🌑 chrome_update🌑 check_app_in_list_windowed_SiteA🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 install_omnibox_icon_SiteA🌕 chrome_update🌑 check_app_in_list_windowed_SiteA🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 install_menu_option_SiteA🌓 chrome_update🌑 check_app_in_list_windowed_SiteA🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 install_create_shortcut_windowed_SiteA🌑 chrome_update🌑 check_app_in_list_windowed_SiteA🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 install_omnibox_icon_SiteA🌑 chrome_update🌑 check_app_in_list_windowed_SiteA🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 install_menu_option_SiteA🌑 chrome_update🌑 check_app_in_list_windowed_SiteA🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 install_create_shortcut_windowed_SiteA🌑 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 install_omnibox_icon_SiteA🌕 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 install_menu_option_SiteA🌓 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 install_create_shortcut_windowed_SiteA🌑 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 install_omnibox_icon_SiteA🌑 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 install_menu_option_SiteA🌑 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 install_create_shortcut_windowed_SiteA🌑 uninstall_policy_app_SiteA🌑 chrome_update🌑 check_app_in_list_windowed_SiteA🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 install_omnibox_icon_SiteA🌕 uninstall_policy_app_SiteA🌕 chrome_update🌑 check_app_in_list_windowed_SiteA🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 install_menu_option_SiteA🌓 uninstall_policy_app_SiteA🌕 chrome_update🌑 check_app_in_list_windowed_SiteA🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 install_create_shortcut_windowed_SiteA🌑 uninstall_policy_app_SiteA🌑 chrome_update🌑 check_app_in_list_windowed_SiteA🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 install_omnibox_icon_SiteA🌑 uninstall_policy_app_SiteA🌑 chrome_update🌑 check_app_in_list_windowed_SiteA🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 install_menu_option_SiteA🌑 uninstall_policy_app_SiteA🌑 chrome_update🌑 check_app_in_list_windowed_SiteA🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 install_create_shortcut_windowed_SiteA🌑 uninstall_policy_app_SiteA🌑 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 install_omnibox_icon_SiteA🌕 uninstall_policy_app_SiteA🌕 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 install_menu_option_SiteA🌓 uninstall_policy_app_SiteA🌕 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 install_create_shortcut_windowed_SiteA🌑 uninstall_policy_app_SiteA🌑 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 install_omnibox_icon_SiteA🌑 uninstall_policy_app_SiteA🌑 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 install_menu_option_SiteA🌑 uninstall_policy_app_SiteA🌑 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 -install_create_shortcut_tabbed_SiteA🌑 chrome_update🌑 check_app_in_list_tabbed_SiteA🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 chrome_update🌑 check_app_in_list_tabbed_SiteA🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 chrome_update🌑 check_app_in_list_tabbed_SiteA🌑 -install_create_shortcut_tabbed_SiteA🌑 chrome_update🌑 navigate_browser_SiteA🌑 check_create_shortcut_shown🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 chrome_update🌑 navigate_browser_SiteA🌑 check_create_shortcut_shown🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 chrome_update🌑 navigate_browser_SiteA🌑 check_create_shortcut_shown🌑 -install_create_shortcut_tabbed_SiteA🌑 chrome_update🌑 navigate_browser_SiteA🌑 check_install_icon_shown🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 chrome_update🌑 navigate_browser_SiteA🌑 check_install_icon_shown🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 chrome_update🌑 navigate_browser_SiteA🌑 check_install_icon_shown🌑 -install_create_shortcut_tabbed_SiteA🌑 chrome_update🌑 navigate_browser_SiteA🌑 check_launch_icon_not_shown🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 chrome_update🌑 navigate_browser_SiteA🌑 check_launch_icon_not_shown🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 chrome_update🌑 navigate_browser_SiteA🌑 check_launch_icon_not_shown🌑 -install_create_shortcut_windowed_SiteA🌑 chrome_update🌑 check_app_in_list_windowed_SiteA🌑 -install_omnibox_icon_SiteA🌕 chrome_update🌑 check_app_in_list_windowed_SiteA🌑 -install_policy_app_windowed_no_shortcut_SiteA🌑 chrome_update🌑 check_app_in_list_windowed_SiteA🌑 -install_policy_app_windowed_shortcut_SiteA🌓 chrome_update🌑 check_app_in_list_windowed_SiteA🌑 -install_menu_option_SiteA🌓 chrome_update🌑 check_app_in_list_windowed_SiteA🌑 -install_create_shortcut_windowed_SiteA🌑 chrome_update🌑 navigate_browser_SiteA🌑 check_create_shortcut_not_shown🌑 -install_omnibox_icon_SiteA🌕 chrome_update🌑 navigate_browser_SiteA🌑 check_create_shortcut_not_shown🌑 -install_policy_app_windowed_no_shortcut_SiteA🌑 chrome_update🌑 navigate_browser_SiteA🌑 check_create_shortcut_not_shown🌑 -install_policy_app_windowed_shortcut_SiteA🌓 chrome_update🌑 navigate_browser_SiteA🌑 check_create_shortcut_not_shown🌑 -install_menu_option_SiteA🌓 chrome_update🌑 navigate_browser_SiteA🌑 check_create_shortcut_not_shown🌑 -install_create_shortcut_windowed_SiteA🌑 chrome_update🌑 navigate_browser_SiteA🌑 check_install_icon_not_shown🌑 -install_omnibox_icon_SiteA🌕 chrome_update🌑 navigate_browser_SiteA🌑 check_install_icon_not_shown🌑 -install_policy_app_windowed_no_shortcut_SiteA🌑 chrome_update🌑 navigate_browser_SiteA🌑 check_install_icon_not_shown🌑 -install_policy_app_windowed_shortcut_SiteA🌓 chrome_update🌑 navigate_browser_SiteA🌑 check_install_icon_not_shown🌑 -install_menu_option_SiteA🌓 chrome_update🌑 navigate_browser_SiteA🌑 check_install_icon_not_shown🌑 -install_create_shortcut_windowed_SiteA🌑 chrome_update🌑 navigate_browser_SiteA🌑 check_launch_icon_shown🌑 -install_omnibox_icon_SiteA🌕 chrome_update🌑 navigate_browser_SiteA🌑 check_launch_icon_shown🌑 -install_policy_app_windowed_no_shortcut_SiteA🌑 chrome_update🌑 navigate_browser_SiteA🌑 check_launch_icon_shown🌑 -install_policy_app_windowed_shortcut_SiteA🌓 chrome_update🌑 navigate_browser_SiteA🌑 check_launch_icon_shown🌑 -install_menu_option_SiteA🌓 chrome_update🌑 navigate_browser_SiteA🌑 check_launch_icon_shown🌑 -install_policy_app_windowed_shortcut_SiteA🌓 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 -install_create_shortcut_windowed_SiteA🌑 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 -install_omnibox_icon_SiteA🌕 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 -install_menu_option_SiteA🌓 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 -install_create_shortcut_tabbed_SiteA🌑 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 -install_policy_app_windowed_shortcut_SiteA🌓 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 -install_create_shortcut_windowed_SiteA🌑 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 -install_omnibox_icon_SiteA🌕 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 -install_menu_option_SiteA🌓 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 -install_create_shortcut_tabbed_SiteA🌑 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 -install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 chrome_update🌑 launch_from_menu_option_SiteA🌑 check_tab_created🌑 -install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 chrome_update🌑 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 -install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 chrome_update🌑 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 -install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 chrome_update🌑 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 -install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 chrome_update🌑 launch_from_menu_option_SiteA🌑 check_tab_created🌑 -install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 chrome_update🌑 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 -install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 chrome_update🌑 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 -install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 chrome_update🌑 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 -install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 chrome_update🌑 launch_from_menu_option_SiteA🌑 check_tab_created🌑 -install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 chrome_update🌑 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 -install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 chrome_update🌑 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 -install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 chrome_update🌑 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 -install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 chrome_update🌑 launch_from_menu_option_SiteA🌑 check_tab_created🌑 -install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 chrome_update🌑 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 -install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 chrome_update🌑 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 -install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 chrome_update🌑 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 -install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteA🌑 chrome_update🌑 launch_from_menu_option_SiteA🌑 check_tab_created🌑 -install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteA🌑 chrome_update🌑 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 -install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteA🌑 chrome_update🌑 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 -install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteA🌑 chrome_update🌑 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 -install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteA🌑 chrome_update🌑 launch_from_menu_option_SiteA🌑 check_window_created🌑 -install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteA🌑 chrome_update🌑 launch_from_launch_icon_SiteA🌑 check_window_created🌑 -install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteA🌑 chrome_update🌑 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 -install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteA🌑 chrome_update🌑 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 -install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 install_locally_SiteA🌓 chrome_update🌑 launch_from_menu_option_SiteA🌑 check_window_created🌑 -install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 install_locally_SiteA🌓 chrome_update🌑 launch_from_launch_icon_SiteA🌑 check_window_created🌑 -install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 install_locally_SiteA🌓 chrome_update🌑 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 -install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 install_locally_SiteA🌓 chrome_update🌑 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 -install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 install_locally_SiteA🌓 chrome_update🌑 launch_from_menu_option_SiteA🌑 check_window_created🌑 -install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 install_locally_SiteA🌓 chrome_update🌑 launch_from_launch_icon_SiteA🌑 check_window_created🌑 -install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 install_locally_SiteA🌓 chrome_update🌑 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 -install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 install_locally_SiteA🌓 chrome_update🌑 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 -install_create_shortcut_tabbed_SiteA🌑 chrome_update🌑 launch_from_menu_option_SiteA🌑 check_tab_created🌑 -install_create_shortcut_tabbed_SiteA🌑 chrome_update🌑 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 -install_create_shortcut_tabbed_SiteA🌑 chrome_update🌑 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 -install_create_shortcut_tabbed_SiteA🌑 chrome_update🌑 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 chrome_update🌑 launch_from_menu_option_SiteA🌑 check_tab_created🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 chrome_update🌑 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 chrome_update🌑 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 chrome_update🌑 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 chrome_update🌑 launch_from_menu_option_SiteA🌑 check_tab_created🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 chrome_update🌑 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 chrome_update🌑 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 chrome_update🌑 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 -install_create_shortcut_windowed_SiteA🌑 chrome_update🌑 launch_from_menu_option_SiteA🌑 check_window_created🌑 -install_create_shortcut_windowed_SiteA🌑 chrome_update🌑 launch_from_launch_icon_SiteA🌑 check_window_created🌑 -install_create_shortcut_windowed_SiteA🌑 chrome_update🌑 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 -install_create_shortcut_windowed_SiteA🌑 chrome_update🌑 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 -install_omnibox_icon_SiteA🌕 chrome_update🌑 launch_from_menu_option_SiteA🌑 check_window_created🌑 -install_omnibox_icon_SiteA🌕 chrome_update🌑 launch_from_launch_icon_SiteA🌑 check_window_created🌑 -install_omnibox_icon_SiteA🌕 chrome_update🌑 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 -install_omnibox_icon_SiteA🌕 chrome_update🌑 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 -install_policy_app_windowed_no_shortcut_SiteA🌑 chrome_update🌑 launch_from_menu_option_SiteA🌑 check_window_created🌑 -install_policy_app_windowed_no_shortcut_SiteA🌑 chrome_update🌑 launch_from_launch_icon_SiteA🌑 check_window_created🌑 -install_policy_app_windowed_no_shortcut_SiteA🌑 chrome_update🌑 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 -install_policy_app_windowed_no_shortcut_SiteA🌑 chrome_update🌑 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 -install_policy_app_windowed_shortcut_SiteA🌓 chrome_update🌑 launch_from_menu_option_SiteA🌑 check_window_created🌑 -install_policy_app_windowed_shortcut_SiteA🌓 chrome_update🌑 launch_from_launch_icon_SiteA🌑 check_window_created🌑 -install_policy_app_windowed_shortcut_SiteA🌓 chrome_update🌑 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 -install_policy_app_windowed_shortcut_SiteA🌓 chrome_update🌑 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 -install_menu_option_SiteA🌓 chrome_update🌑 launch_from_menu_option_SiteA🌑 check_window_created🌑 -install_menu_option_SiteA🌓 chrome_update🌑 launch_from_launch_icon_SiteA🌑 check_window_created🌑 -install_menu_option_SiteA🌓 chrome_update🌑 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 -install_menu_option_SiteA🌓 chrome_update🌑 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 -install_create_shortcut_tabbed_SiteC🌑 chrome_update🌑 launch_from_menu_option_SiteA🌑 check_tab_created🌑 -install_create_shortcut_tabbed_SiteC🌑 chrome_update🌑 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 -install_create_shortcut_tabbed_SiteC🌑 chrome_update🌑 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 -install_create_shortcut_tabbed_SiteC🌑 chrome_update🌑 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 -install_policy_app_tabbed_shortcut_SiteC🌓 chrome_update🌑 launch_from_menu_option_SiteA🌑 check_tab_created🌑 -install_policy_app_tabbed_shortcut_SiteC🌓 chrome_update🌑 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 -install_policy_app_tabbed_shortcut_SiteC🌓 chrome_update🌑 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 -install_policy_app_tabbed_shortcut_SiteC🌓 chrome_update🌑 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 -install_policy_app_tabbed_no_shortcut_SiteC🌑 chrome_update🌑 launch_from_menu_option_SiteA🌑 check_tab_created🌑 -install_policy_app_tabbed_no_shortcut_SiteC🌑 chrome_update🌑 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 -install_policy_app_tabbed_no_shortcut_SiteC🌑 chrome_update🌑 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 -install_policy_app_tabbed_no_shortcut_SiteC🌑 chrome_update🌑 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 -install_create_shortcut_windowed_SiteA🌑 set_app_badge_SiteA🌑 clear_app_badge_SiteA🌑 check_app_badge_empty_SiteA🌑 -install_omnibox_icon_SiteA🌕 set_app_badge_SiteA🌑 clear_app_badge_SiteA🌑 check_app_badge_empty_SiteA🌑 -install_menu_option_SiteA🌓 set_app_badge_SiteA🌑 clear_app_badge_SiteA🌑 check_app_badge_empty_SiteA🌑 -install_create_shortcut_windowed_SiteA🌑 navigate_pwa_site_a_to_SiteB🌑 close_custom_toolbar🌑 check_navigation_start_url🌑 -install_omnibox_icon_SiteA🌕 navigate_pwa_site_a_to_SiteB🌑 close_custom_toolbar🌑 check_navigation_start_url🌑 -install_policy_app_windowed_no_shortcut_SiteA🌑 navigate_pwa_site_a_to_SiteB🌑 close_custom_toolbar🌑 check_navigation_start_url🌑 -install_policy_app_windowed_shortcut_SiteA🌓 navigate_pwa_site_a_to_SiteB🌑 close_custom_toolbar🌑 check_navigation_start_url🌑 -install_menu_option_SiteA🌓 navigate_pwa_site_a_to_SiteB🌑 close_custom_toolbar🌑 check_navigation_start_url🌑 -install_policy_app_windowed_no_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 -install_create_shortcut_windowed_SiteA🌑 delete_profile🌑 check_app_list_empty🌑 -install_omnibox_icon_SiteA🌕 delete_profile🌑 check_app_list_empty🌑 -install_policy_app_windowed_no_shortcut_SiteA🌑 delete_profile🌑 check_app_list_empty🌑 -install_policy_app_windowed_shortcut_SiteA🌓 delete_profile🌑 check_app_list_empty🌑 -install_menu_option_SiteA🌓 delete_profile🌑 check_app_list_empty🌑 -install_create_shortcut_tabbed_SiteA🌑 delete_profile🌑 check_app_list_empty🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 delete_profile🌑 check_app_list_empty🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 delete_profile🌑 check_app_list_empty🌑 -install_create_shortcut_windowed_SiteA🌑 delete_profile🌑 check_app_not_in_list_SiteA🌑 -install_omnibox_icon_SiteA🌕 delete_profile🌑 check_app_not_in_list_SiteA🌑 -install_policy_app_windowed_no_shortcut_SiteA🌑 delete_profile🌑 check_app_not_in_list_SiteA🌑 -install_policy_app_windowed_shortcut_SiteA🌓 delete_profile🌑 check_app_not_in_list_SiteA🌑 -install_menu_option_SiteA🌓 delete_profile🌑 check_app_not_in_list_SiteA🌑 -install_create_shortcut_tabbed_SiteA🌑 delete_profile🌑 check_app_not_in_list_SiteA🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 delete_profile🌑 check_app_not_in_list_SiteA🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 delete_profile🌑 check_app_not_in_list_SiteA🌑 -install_policy_app_windowed_shortcut_SiteA🌓 delete_profile🌑 check_platform_shortcut_not_exists_SiteA🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 delete_profile🌑 check_platform_shortcut_not_exists_SiteA🌑 -install_create_shortcut_windowed_SiteA🌑 delete_profile🌑 check_platform_shortcut_not_exists_SiteA🌑 -install_omnibox_icon_SiteA🌕 delete_profile🌑 check_platform_shortcut_not_exists_SiteA🌑 -install_menu_option_SiteA🌓 delete_profile🌑 check_platform_shortcut_not_exists_SiteA🌑 -install_create_shortcut_tabbed_SiteA🌑 delete_profile🌑 check_platform_shortcut_not_exists_SiteA🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 install_create_shortcut_windowed_SiteA🌑 check_app_in_list_windowed_SiteA🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 install_omnibox_icon_SiteA🌕 check_app_in_list_windowed_SiteA🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 install_menu_option_SiteA🌓 check_app_in_list_windowed_SiteA🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 install_create_shortcut_windowed_SiteA🌑 check_app_in_list_windowed_SiteA🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 install_omnibox_icon_SiteA🌑 check_app_in_list_windowed_SiteA🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 install_menu_option_SiteA🌑 check_app_in_list_windowed_SiteA🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 install_create_shortcut_windowed_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 install_omnibox_icon_SiteA🌕 check_platform_shortcut_exists_SiteA🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 install_menu_option_SiteA🌓 check_platform_shortcut_exists_SiteA🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 install_create_shortcut_windowed_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 install_omnibox_icon_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 install_menu_option_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 install_create_shortcut_windowed_SiteA🌑 check_window_created🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 install_omnibox_icon_SiteA🌕 check_window_created🌕 -install_policy_app_tabbed_shortcut_SiteA🌓 install_menu_option_SiteA🌓 check_window_created🌕 -install_policy_app_tabbed_no_shortcut_SiteA🌑 install_create_shortcut_windowed_SiteA🌑 check_window_created🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 install_omnibox_icon_SiteA🌑 check_window_created🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 install_menu_option_SiteA🌑 check_window_created🌑 -install_create_shortcut_windowed_SiteA🌑 check_window_created🌑 -install_omnibox_icon_SiteA🌕 check_window_created🌕 -install_menu_option_SiteA🌓 check_window_created🌕 -install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 -install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 install_locally_SiteA🌓 check_platform_shortcut_exists_SiteA🌑 -install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 install_locally_SiteA🌓 check_platform_shortcut_exists_SiteA🌑 -install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 -install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteA🌑 check_app_in_list_tabbed_SiteA🌑 -install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteA🌑 navigate_browser_SiteA🌑 check_install_icon_shown🌑 -install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteA🌑 navigate_browser_SiteA🌑 check_launch_icon_not_shown🌑 -install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteA🌑 check_app_in_list_windowed_SiteA🌑 -install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 install_locally_SiteA🌓 check_app_in_list_windowed_SiteA🌑 -install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 install_locally_SiteA🌓 check_app_in_list_windowed_SiteA🌑 -install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteA🌑 navigate_browser_SiteA🌑 check_install_icon_not_shown🌑 -install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 install_locally_SiteA🌓 navigate_browser_SiteA🌕 check_install_icon_not_shown🌕 -install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 install_locally_SiteA🌓 navigate_browser_SiteA🌕 check_install_icon_not_shown🌕 -install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteA🌑 navigate_browser_SiteA🌑 check_launch_icon_shown🌑 -install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 install_locally_SiteA🌓 navigate_browser_SiteA🌕 check_launch_icon_shown🌕 -install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 install_locally_SiteA🌓 navigate_browser_SiteA🌕 check_launch_icon_shown🌕 -install_create_shortcut_windowed_SiteC🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 -install_create_shortcut_tabbed_SiteC🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 -install_create_shortcut_tabbed_SiteC🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteC🌑 check_app_in_list_tabbed_SiteC🌑 -install_create_shortcut_tabbed_SiteC🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteC🌑 navigate_browser_SiteC🌑 check_install_icon_shown🌑 -install_create_shortcut_tabbed_SiteC🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteC🌑 navigate_browser_SiteC🌑 check_launch_icon_not_shown🌑 -install_create_shortcut_windowed_SiteC🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteC🌑 check_app_in_list_tabbed_SiteC🌑 -install_create_shortcut_windowed_SiteC🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteC🌑 navigate_browser_SiteC🌑 check_install_icon_not_shown🌑 -install_create_shortcut_windowed_SiteC🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteC🌑 navigate_browser_SiteC🌑 check_launch_icon_shown🌑 -install_policy_app_windowed_no_shortcut_SiteA🌑 check_platform_shortcut_not_exists_SiteA🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 check_platform_shortcut_not_exists_SiteA🌑 -install_policy_app_windowed_no_shortcut_SiteC🌑 check_platform_shortcut_not_exists_SiteC🌑 -install_policy_app_tabbed_no_shortcut_SiteC🌑 check_platform_shortcut_not_exists_SiteC🌑 -install_create_shortcut_tabbed_SiteA🌑 install_policy_app_windowed_no_shortcut_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 -install_create_shortcut_tabbed_SiteA🌑 install_policy_app_windowed_shortcut_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 -install_create_shortcut_windowed_SiteA🌑 install_policy_app_tabbed_no_shortcut_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 -install_create_shortcut_windowed_SiteA🌑 install_policy_app_windowed_no_shortcut_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 -install_omnibox_icon_SiteA🌕 install_policy_app_tabbed_no_shortcut_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 -install_omnibox_icon_SiteA🌕 install_policy_app_windowed_no_shortcut_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 -install_menu_option_SiteA🌓 install_policy_app_tabbed_no_shortcut_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 -install_menu_option_SiteA🌓 install_policy_app_windowed_no_shortcut_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 -install_create_shortcut_windowed_SiteA🌑 install_policy_app_tabbed_shortcut_SiteA🌑 check_app_in_list_windowed_SiteA🌑 -install_create_shortcut_windowed_SiteA🌑 install_policy_app_tabbed_no_shortcut_SiteA🌑 check_app_in_list_windowed_SiteA🌑 -install_omnibox_icon_SiteA🌕 install_policy_app_tabbed_shortcut_SiteA🌓 check_app_in_list_windowed_SiteA🌑 -install_omnibox_icon_SiteA🌕 install_policy_app_tabbed_no_shortcut_SiteA🌑 check_app_in_list_windowed_SiteA🌑 -install_menu_option_SiteA🌓 install_policy_app_tabbed_shortcut_SiteA🌓 check_app_in_list_windowed_SiteA🌑 -install_menu_option_SiteA🌓 install_policy_app_tabbed_no_shortcut_SiteA🌑 check_app_in_list_windowed_SiteA🌑 -install_create_shortcut_windowed_SiteA🌑 install_policy_app_tabbed_shortcut_SiteA🌑 navigate_browser_SiteA🌑 check_launch_icon_shown🌑 -install_create_shortcut_windowed_SiteA🌑 install_policy_app_tabbed_no_shortcut_SiteA🌑 navigate_browser_SiteA🌑 check_launch_icon_shown🌑 -install_omnibox_icon_SiteA🌕 install_policy_app_tabbed_shortcut_SiteA🌓 navigate_browser_SiteA🌕 check_launch_icon_shown🌕 -install_omnibox_icon_SiteA🌕 install_policy_app_tabbed_no_shortcut_SiteA🌑 navigate_browser_SiteA🌑 check_launch_icon_shown🌑 -install_menu_option_SiteA🌓 install_policy_app_tabbed_shortcut_SiteA🌓 navigate_browser_SiteA🌕 check_launch_icon_shown🌕 -install_menu_option_SiteA🌓 install_policy_app_tabbed_no_shortcut_SiteA🌑 navigate_browser_SiteA🌑 check_launch_icon_shown🌑 -install_create_shortcut_tabbed_SiteA🌑 install_policy_app_windowed_no_shortcut_SiteA🌑 check_app_in_list_tabbed_SiteA🌑 -install_create_shortcut_tabbed_SiteA🌑 install_policy_app_windowed_shortcut_SiteA🌑 check_app_in_list_tabbed_SiteA🌑 -install_create_shortcut_tabbed_SiteA🌑 install_policy_app_windowed_no_shortcut_SiteA🌑 navigate_browser_SiteA🌑 check_install_icon_shown🌑 -install_create_shortcut_tabbed_SiteA🌑 install_policy_app_windowed_shortcut_SiteA🌑 navigate_browser_SiteA🌑 check_install_icon_shown🌑 -install_create_shortcut_tabbed_SiteA🌑 check_app_in_list_tabbed_SiteA🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 check_app_in_list_tabbed_SiteA🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 check_app_in_list_tabbed_SiteA🌑 -install_create_shortcut_tabbed_SiteA🌑 navigate_browser_SiteA🌑 check_create_shortcut_shown🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 navigate_browser_SiteA🌕 check_create_shortcut_shown🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 navigate_browser_SiteA🌑 check_create_shortcut_shown🌑 -install_create_shortcut_tabbed_SiteA🌑 navigate_browser_SiteA🌑 check_install_icon_shown🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 navigate_browser_SiteA🌕 check_install_icon_shown🌕 -install_policy_app_tabbed_no_shortcut_SiteA🌑 navigate_browser_SiteA🌑 check_install_icon_shown🌑 -install_create_shortcut_tabbed_SiteA🌑 navigate_browser_SiteA🌑 check_launch_icon_not_shown🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 navigate_browser_SiteA🌕 check_launch_icon_not_shown🌕 -install_policy_app_tabbed_no_shortcut_SiteA🌑 navigate_browser_SiteA🌑 check_launch_icon_not_shown🌑 -install_create_shortcut_tabbed_SiteC🌑 check_app_in_list_tabbed_SiteC🌑 -install_policy_app_tabbed_shortcut_SiteC🌓 check_app_in_list_tabbed_SiteC🌑 -install_policy_app_tabbed_no_shortcut_SiteC🌑 check_app_in_list_tabbed_SiteC🌑 -install_create_shortcut_tabbed_SiteC🌑 navigate_browser_SiteC🌑 check_create_shortcut_shown🌑 -install_policy_app_tabbed_shortcut_SiteC🌓 navigate_browser_SiteC🌕 check_create_shortcut_shown🌑 -install_policy_app_tabbed_no_shortcut_SiteC🌑 navigate_browser_SiteC🌑 check_create_shortcut_shown🌑 -install_create_shortcut_tabbed_SiteC🌑 navigate_browser_SiteC🌑 check_install_icon_not_shown🌑 -install_policy_app_tabbed_shortcut_SiteC🌓 navigate_browser_SiteC🌕 check_install_icon_not_shown🌕 -install_policy_app_tabbed_no_shortcut_SiteC🌑 navigate_browser_SiteC🌑 check_install_icon_not_shown🌑 -install_create_shortcut_tabbed_SiteC🌑 navigate_browser_SiteC🌑 check_launch_icon_not_shown🌑 -install_policy_app_tabbed_shortcut_SiteC🌓 navigate_browser_SiteC🌕 check_launch_icon_not_shown🌕 -install_policy_app_tabbed_no_shortcut_SiteC🌑 navigate_browser_SiteC🌑 check_launch_icon_not_shown🌑 -install_create_shortcut_windowed_SiteA🌑 check_app_in_list_windowed_SiteA🌑 -install_omnibox_icon_SiteA🌕 check_app_in_list_windowed_SiteA🌑 -install_policy_app_windowed_no_shortcut_SiteA🌑 check_app_in_list_windowed_SiteA🌑 -install_policy_app_windowed_shortcut_SiteA🌓 check_app_in_list_windowed_SiteA🌑 -install_menu_option_SiteA🌓 check_app_in_list_windowed_SiteA🌑 -install_create_shortcut_windowed_SiteA🌑 navigate_browser_SiteA🌑 check_create_shortcut_not_shown🌑 -install_omnibox_icon_SiteA🌕 navigate_browser_SiteA🌕 check_create_shortcut_not_shown🌑 -install_policy_app_windowed_no_shortcut_SiteA🌑 navigate_browser_SiteA🌑 check_create_shortcut_not_shown🌑 -install_policy_app_windowed_shortcut_SiteA🌓 navigate_browser_SiteA🌕 check_create_shortcut_not_shown🌑 -install_menu_option_SiteA🌓 navigate_browser_SiteA🌕 check_create_shortcut_not_shown🌑 -install_create_shortcut_windowed_SiteA🌑 navigate_browser_SiteA🌑 check_install_icon_not_shown🌑 -install_omnibox_icon_SiteA🌕 navigate_browser_SiteA🌕 check_install_icon_not_shown🌕 -install_policy_app_windowed_no_shortcut_SiteA🌑 navigate_browser_SiteA🌑 check_install_icon_not_shown🌑 -install_policy_app_windowed_shortcut_SiteA🌓 navigate_browser_SiteA🌕 check_install_icon_not_shown🌕 -install_menu_option_SiteA🌓 navigate_browser_SiteA🌕 check_install_icon_not_shown🌕 -install_create_shortcut_windowed_SiteA🌑 navigate_browser_SiteA🌑 check_launch_icon_shown🌑 -install_omnibox_icon_SiteA🌕 navigate_browser_SiteA🌕 check_launch_icon_shown🌕 -install_policy_app_windowed_no_shortcut_SiteA🌑 navigate_browser_SiteA🌑 check_launch_icon_shown🌑 -install_policy_app_windowed_shortcut_SiteA🌓 navigate_browser_SiteA🌕 check_launch_icon_shown🌕 -install_menu_option_SiteA🌓 navigate_browser_SiteA🌕 check_launch_icon_shown🌕 -install_create_shortcut_windowed_SiteB🌑 navigate_browser_SiteB🌑 check_launch_icon_shown🌑 -install_omnibox_icon_SiteB🌕 navigate_browser_SiteB🌕 check_launch_icon_shown🌕 -install_policy_app_windowed_no_shortcut_SiteB🌑 navigate_browser_SiteB🌑 check_launch_icon_shown🌑 -install_policy_app_windowed_shortcut_SiteB🌓 navigate_browser_SiteB🌕 check_launch_icon_shown🌕 -install_menu_option_SiteB🌓 navigate_browser_SiteB🌕 check_launch_icon_shown🌕 -install_create_shortcut_windowed_SiteC🌑 check_app_in_list_windowed_SiteC🌑 -install_policy_app_windowed_no_shortcut_SiteC🌑 check_app_in_list_windowed_SiteC🌑 -install_policy_app_windowed_shortcut_SiteC🌓 check_app_in_list_windowed_SiteC🌑 -install_create_shortcut_windowed_SiteC🌑 navigate_browser_SiteC🌑 check_create_shortcut_not_shown🌑 -install_policy_app_windowed_no_shortcut_SiteC🌑 navigate_browser_SiteC🌑 check_create_shortcut_not_shown🌑 -install_policy_app_windowed_shortcut_SiteC🌓 navigate_browser_SiteC🌕 check_create_shortcut_not_shown🌑 -install_create_shortcut_windowed_SiteC🌑 navigate_browser_SiteC🌑 check_install_icon_not_shown🌑 -install_policy_app_windowed_no_shortcut_SiteC🌑 navigate_browser_SiteC🌑 check_install_icon_not_shown🌑 -install_policy_app_windowed_shortcut_SiteC🌓 navigate_browser_SiteC🌕 check_install_icon_not_shown🌕 -install_create_shortcut_windowed_SiteC🌑 navigate_browser_SiteC🌑 check_launch_icon_shown🌑 -install_policy_app_windowed_no_shortcut_SiteC🌑 navigate_browser_SiteC🌑 check_launch_icon_shown🌑 -install_policy_app_windowed_shortcut_SiteC🌓 navigate_browser_SiteC🌕 check_launch_icon_shown🌕 -install_policy_app_windowed_shortcut_SiteA🌓 check_platform_shortcut_exists_SiteA🌑 -install_policy_app_windowed_shortcut_SiteA🌓 check_platform_shortcut_exists_SiteC🌑 -install_create_shortcut_tabbed_SiteA🌑 install_policy_app_windowed_no_shortcut_SiteA🌑 launch_from_menu_option_SiteA🌑 check_tab_created🌑 -install_create_shortcut_tabbed_SiteA🌑 install_policy_app_windowed_no_shortcut_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 -install_create_shortcut_tabbed_SiteA🌑 install_policy_app_windowed_no_shortcut_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 -install_create_shortcut_tabbed_SiteA🌑 install_policy_app_windowed_no_shortcut_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 -install_create_shortcut_tabbed_SiteA🌑 install_policy_app_windowed_shortcut_SiteA🌑 launch_from_menu_option_SiteA🌑 check_tab_created🌑 -install_create_shortcut_tabbed_SiteA🌑 install_policy_app_windowed_shortcut_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 -install_create_shortcut_tabbed_SiteA🌑 install_policy_app_windowed_shortcut_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 -install_create_shortcut_tabbed_SiteA🌑 install_policy_app_windowed_shortcut_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 -install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 launch_from_menu_option_SiteA🌑 check_tab_created🌑 -install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 -install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 -install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 -install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteA🌑 launch_from_menu_option_SiteA🌑 check_tab_created🌑 -install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 -install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 -install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 -install_create_shortcut_windowed_SiteA🌑 install_policy_app_tabbed_shortcut_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_created🌑 -install_create_shortcut_windowed_SiteA🌑 install_policy_app_tabbed_shortcut_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_created🌑 -install_create_shortcut_windowed_SiteA🌑 install_policy_app_tabbed_shortcut_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 -install_create_shortcut_windowed_SiteA🌑 install_policy_app_tabbed_shortcut_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 -install_create_shortcut_windowed_SiteA🌑 install_policy_app_tabbed_no_shortcut_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_created🌑 -install_create_shortcut_windowed_SiteA🌑 install_policy_app_tabbed_no_shortcut_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_created🌑 -install_create_shortcut_windowed_SiteA🌑 install_policy_app_tabbed_no_shortcut_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 -install_create_shortcut_windowed_SiteA🌑 install_policy_app_tabbed_no_shortcut_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 -install_omnibox_icon_SiteA🌕 install_policy_app_tabbed_shortcut_SiteA🌓 launch_from_menu_option_SiteA🌑 check_window_created🌑 -install_omnibox_icon_SiteA🌕 install_policy_app_tabbed_shortcut_SiteA🌓 launch_from_launch_icon_SiteA🌑 check_window_created🌑 -install_omnibox_icon_SiteA🌕 install_policy_app_tabbed_shortcut_SiteA🌓 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 -install_omnibox_icon_SiteA🌕 install_policy_app_tabbed_shortcut_SiteA🌓 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 -install_omnibox_icon_SiteA🌕 install_policy_app_tabbed_no_shortcut_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_created🌑 -install_omnibox_icon_SiteA🌕 install_policy_app_tabbed_no_shortcut_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_created🌑 -install_omnibox_icon_SiteA🌕 install_policy_app_tabbed_no_shortcut_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 -install_omnibox_icon_SiteA🌕 install_policy_app_tabbed_no_shortcut_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 -install_menu_option_SiteA🌓 install_policy_app_tabbed_shortcut_SiteA🌓 launch_from_menu_option_SiteA🌑 check_window_created🌑 -install_menu_option_SiteA🌓 install_policy_app_tabbed_shortcut_SiteA🌓 launch_from_launch_icon_SiteA🌑 check_window_created🌑 -install_menu_option_SiteA🌓 install_policy_app_tabbed_shortcut_SiteA🌓 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 -install_menu_option_SiteA🌓 install_policy_app_tabbed_shortcut_SiteA🌓 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 -install_menu_option_SiteA🌓 install_policy_app_tabbed_no_shortcut_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_created🌑 -install_menu_option_SiteA🌓 install_policy_app_tabbed_no_shortcut_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_created🌑 -install_menu_option_SiteA🌓 install_policy_app_tabbed_no_shortcut_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 -install_menu_option_SiteA🌓 install_policy_app_tabbed_no_shortcut_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 -install_create_shortcut_windowed_SiteA🌑 close_pwa🌑 manifest_update_colors_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_color_correct🌑 -install_create_shortcut_windowed_SiteA🌑 close_pwa🌑 manifest_update_colors_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_color_correct🌑 -install_create_shortcut_windowed_SiteA🌑 close_pwa🌑 manifest_update_colors_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_color_correct🌑 -install_create_shortcut_windowed_SiteA🌑 close_pwa🌑 manifest_update_colors_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_color_correct🌑 -install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_colors_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_color_correct🌑 -install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_colors_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_color_correct🌑 -install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_colors_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_color_correct🌑 -install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_colors_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_color_correct🌑 -install_menu_option_SiteA🌓 close_pwa🌕 manifest_update_colors_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_color_correct🌑 -install_menu_option_SiteA🌓 close_pwa🌕 manifest_update_colors_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_color_correct🌑 -install_menu_option_SiteA🌓 close_pwa🌕 manifest_update_colors_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_color_correct🌑 -install_menu_option_SiteA🌓 close_pwa🌕 manifest_update_colors_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_color_correct🌑 -install_create_shortcut_windowed_SiteA🌑 close_pwa🌑 manifest_update_display_browser_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_display_standalone🌑 -install_create_shortcut_windowed_SiteA🌑 close_pwa🌑 manifest_update_display_browser_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_display_standalone🌑 -install_create_shortcut_windowed_SiteA🌑 close_pwa🌑 manifest_update_display_browser_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_display_standalone🌑 -install_create_shortcut_windowed_SiteA🌑 close_pwa🌑 manifest_update_display_browser_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_display_standalone🌑 -install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_display_standalone🌑 -install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_display_standalone🌑 -install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_display_standalone🌑 -install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_display_standalone🌑 -install_menu_option_SiteA🌓 close_pwa🌕 manifest_update_display_browser_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_display_standalone🌑 -install_menu_option_SiteA🌓 close_pwa🌕 manifest_update_display_browser_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_display_standalone🌑 -install_menu_option_SiteA🌓 close_pwa🌕 manifest_update_display_browser_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_display_standalone🌑 -install_menu_option_SiteA🌓 close_pwa🌕 manifest_update_display_browser_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_display_standalone🌑 -install_create_shortcut_windowed_SiteA🌑 close_pwa🌑 manifest_update_display_minimal_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_display_minimal🌑 -install_create_shortcut_windowed_SiteA🌑 close_pwa🌑 manifest_update_display_minimal_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_display_minimal🌑 -install_create_shortcut_windowed_SiteA🌑 close_pwa🌑 manifest_update_display_minimal_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_display_minimal🌑 -install_create_shortcut_windowed_SiteA🌑 close_pwa🌑 manifest_update_display_minimal_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_display_minimal🌑 -install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_display_minimal_SiteA🌕 launch_from_menu_option_SiteA🌑 check_window_display_minimal🌑 -install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_display_minimal_SiteA🌕 launch_from_launch_icon_SiteA🌑 check_window_display_minimal🌑 -install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_display_minimal_SiteA🌕 launch_from_chrome_apps_SiteA🌑 check_window_display_minimal🌑 -install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_display_minimal_SiteA🌕 launch_from_platform_shortcut_SiteA🌑 check_window_display_minimal🌑 -install_menu_option_SiteA🌓 close_pwa🌕 manifest_update_display_minimal_SiteA🌕 launch_from_menu_option_SiteA🌑 check_window_display_minimal🌑 -install_menu_option_SiteA🌓 close_pwa🌕 manifest_update_display_minimal_SiteA🌕 launch_from_launch_icon_SiteA🌑 check_window_display_minimal🌑 -install_menu_option_SiteA🌓 close_pwa🌕 manifest_update_display_minimal_SiteA🌕 launch_from_chrome_apps_SiteA🌑 check_window_display_minimal🌑 -install_menu_option_SiteA🌓 close_pwa🌕 manifest_update_display_minimal_SiteA🌕 launch_from_platform_shortcut_SiteA🌑 check_window_display_minimal🌑 -install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 launch_from_menu_option_SiteA🌑 check_tab_created🌑 -install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 -install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 -install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 -install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 launch_from_menu_option_SiteA🌑 check_tab_created🌑 -install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 -install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 -install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 -install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 launch_from_menu_option_SiteA🌑 check_tab_created🌑 -install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 -install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 -install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 -install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_created🌑 -install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_created🌑 -install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 -install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 -install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 install_locally_SiteA🌓 launch_from_menu_option_SiteA🌑 check_window_created🌑 -install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 install_locally_SiteA🌓 launch_from_launch_icon_SiteA🌑 check_window_created🌑 -install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 install_locally_SiteA🌓 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 -install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 install_locally_SiteA🌓 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 -install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 install_locally_SiteA🌓 launch_from_menu_option_SiteA🌑 check_window_created🌑 -install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 install_locally_SiteA🌓 launch_from_launch_icon_SiteA🌑 check_window_created🌑 -install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 install_locally_SiteA🌓 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 -install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 install_locally_SiteA🌓 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 -install_create_shortcut_tabbed_SiteA🌑 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_menu_option_SiteA🌑 check_tab_created🌑 -install_create_shortcut_tabbed_SiteA🌑 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 -install_create_shortcut_tabbed_SiteA🌑 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 -install_create_shortcut_tabbed_SiteA🌑 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_menu_option_SiteA🌑 check_tab_created🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_menu_option_SiteA🌑 check_tab_created🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 -install_create_shortcut_tabbed_SiteA🌑 set_open_in_window_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_created🌑 -install_create_shortcut_tabbed_SiteA🌑 set_open_in_window_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_created🌑 -install_create_shortcut_tabbed_SiteA🌑 set_open_in_window_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 -install_create_shortcut_tabbed_SiteA🌑 set_open_in_window_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 set_open_in_window_SiteA🌓 launch_from_menu_option_SiteA🌑 check_window_created🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 set_open_in_window_SiteA🌓 launch_from_launch_icon_SiteA🌑 check_window_created🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 set_open_in_window_SiteA🌓 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 set_open_in_window_SiteA🌓 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 set_open_in_window_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_created🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 set_open_in_window_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_created🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 set_open_in_window_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 set_open_in_window_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 -install_create_shortcut_windowed_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_created🌑 -install_create_shortcut_windowed_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_created🌑 -install_create_shortcut_windowed_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 -install_create_shortcut_windowed_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 -install_omnibox_icon_SiteA🌕 launch_from_menu_option_SiteA🌑 check_window_created🌑 -install_omnibox_icon_SiteA🌕 launch_from_launch_icon_SiteA🌑 check_window_created🌑 -install_omnibox_icon_SiteA🌕 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 -install_omnibox_icon_SiteA🌕 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 -install_policy_app_windowed_no_shortcut_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_created🌑 -install_policy_app_windowed_no_shortcut_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_created🌑 -install_policy_app_windowed_no_shortcut_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 -install_policy_app_windowed_no_shortcut_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 -install_policy_app_windowed_shortcut_SiteA🌓 launch_from_menu_option_SiteA🌑 check_window_created🌑 -install_policy_app_windowed_shortcut_SiteA🌓 launch_from_launch_icon_SiteA🌑 check_window_created🌑 -install_policy_app_windowed_shortcut_SiteA🌓 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 -install_policy_app_windowed_shortcut_SiteA🌓 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 -install_menu_option_SiteA🌓 launch_from_menu_option_SiteA🌑 check_window_created🌑 -install_menu_option_SiteA🌓 launch_from_launch_icon_SiteA🌑 check_window_created🌑 -install_menu_option_SiteA🌓 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 -install_menu_option_SiteA🌓 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 -install_create_shortcut_windowed_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_display_standalone🌑 -install_create_shortcut_windowed_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_display_standalone🌑 -install_create_shortcut_windowed_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_display_standalone🌑 -install_create_shortcut_windowed_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_display_standalone🌑 -install_omnibox_icon_SiteA🌕 launch_from_menu_option_SiteA🌑 check_window_display_standalone🌑 -install_omnibox_icon_SiteA🌕 launch_from_launch_icon_SiteA🌑 check_window_display_standalone🌑 -install_omnibox_icon_SiteA🌕 launch_from_chrome_apps_SiteA🌑 check_window_display_standalone🌑 -install_omnibox_icon_SiteA🌕 launch_from_platform_shortcut_SiteA🌑 check_window_display_standalone🌑 -install_policy_app_windowed_no_shortcut_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_display_standalone🌑 -install_policy_app_windowed_no_shortcut_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_display_standalone🌑 -install_policy_app_windowed_no_shortcut_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_display_standalone🌑 -install_policy_app_windowed_no_shortcut_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_display_standalone🌑 -install_policy_app_windowed_shortcut_SiteA🌓 launch_from_menu_option_SiteA🌑 check_window_display_standalone🌑 -install_policy_app_windowed_shortcut_SiteA🌓 launch_from_launch_icon_SiteA🌑 check_window_display_standalone🌑 -install_policy_app_windowed_shortcut_SiteA🌓 launch_from_chrome_apps_SiteA🌑 check_window_display_standalone🌑 -install_policy_app_windowed_shortcut_SiteA🌓 launch_from_platform_shortcut_SiteA🌑 check_window_display_standalone🌑 -install_menu_option_SiteA🌓 launch_from_menu_option_SiteA🌑 check_window_display_standalone🌑 -install_menu_option_SiteA🌓 launch_from_launch_icon_SiteA🌑 check_window_display_standalone🌑 -install_menu_option_SiteA🌓 launch_from_chrome_apps_SiteA🌑 check_window_display_standalone🌑 -install_menu_option_SiteA🌓 launch_from_platform_shortcut_SiteA🌑 check_window_display_standalone🌑 -install_create_shortcut_windowed_SiteA🌑 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_created🌑 -install_create_shortcut_windowed_SiteA🌑 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_created🌑 -install_create_shortcut_windowed_SiteA🌑 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 -install_create_shortcut_windowed_SiteA🌑 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 -install_omnibox_icon_SiteA🌕 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_created🌑 -install_omnibox_icon_SiteA🌕 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_created🌑 -install_omnibox_icon_SiteA🌕 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 -install_omnibox_icon_SiteA🌕 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 -install_policy_app_windowed_no_shortcut_SiteA🌑 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_created🌑 -install_policy_app_windowed_no_shortcut_SiteA🌑 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_created🌑 -install_policy_app_windowed_no_shortcut_SiteA🌑 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 -install_policy_app_windowed_no_shortcut_SiteA🌑 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 -install_policy_app_windowed_shortcut_SiteA🌓 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_created🌑 -install_policy_app_windowed_shortcut_SiteA🌓 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_created🌑 -install_policy_app_windowed_shortcut_SiteA🌓 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 -install_policy_app_windowed_shortcut_SiteA🌓 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 -install_menu_option_SiteA🌓 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_created🌑 -install_menu_option_SiteA🌓 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_created🌑 -install_menu_option_SiteA🌓 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 -install_menu_option_SiteA🌓 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 -install_create_shortcut_windowed_SiteA🌑 set_open_in_tab_SiteA🌑 launch_from_menu_option_SiteA🌑 check_tab_created🌑 -install_create_shortcut_windowed_SiteA🌑 set_open_in_tab_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 -install_create_shortcut_windowed_SiteA🌑 set_open_in_tab_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 -install_create_shortcut_windowed_SiteA🌑 set_open_in_tab_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 -install_omnibox_icon_SiteA🌕 set_open_in_tab_SiteA🌓 launch_from_menu_option_SiteA🌑 check_tab_created🌑 -install_omnibox_icon_SiteA🌕 set_open_in_tab_SiteA🌓 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 -install_omnibox_icon_SiteA🌕 set_open_in_tab_SiteA🌓 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 -install_omnibox_icon_SiteA🌕 set_open_in_tab_SiteA🌓 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 -install_policy_app_windowed_no_shortcut_SiteA🌑 set_open_in_tab_SiteA🌑 launch_from_menu_option_SiteA🌑 check_tab_created🌑 -install_policy_app_windowed_no_shortcut_SiteA🌑 set_open_in_tab_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 -install_policy_app_windowed_no_shortcut_SiteA🌑 set_open_in_tab_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 -install_policy_app_windowed_no_shortcut_SiteA🌑 set_open_in_tab_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 -install_policy_app_windowed_shortcut_SiteA🌓 set_open_in_tab_SiteA🌓 launch_from_menu_option_SiteA🌑 check_tab_created🌑 -install_policy_app_windowed_shortcut_SiteA🌓 set_open_in_tab_SiteA🌓 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 -install_policy_app_windowed_shortcut_SiteA🌓 set_open_in_tab_SiteA🌓 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 -install_policy_app_windowed_shortcut_SiteA🌓 set_open_in_tab_SiteA🌓 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 -install_menu_option_SiteA🌓 set_open_in_tab_SiteA🌓 launch_from_menu_option_SiteA🌑 check_tab_created🌑 -install_menu_option_SiteA🌓 set_open_in_tab_SiteA🌓 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 -install_menu_option_SiteA🌓 set_open_in_tab_SiteA🌓 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 -install_menu_option_SiteA🌓 set_open_in_tab_SiteA🌓 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 -install_create_shortcut_windowed_SiteB🌑 launch_from_menu_option_SiteB🌑 check_window_display_minimal🌑 -install_create_shortcut_windowed_SiteB🌑 launch_from_launch_icon_SiteB🌑 check_window_display_minimal🌑 -install_create_shortcut_windowed_SiteB🌑 launch_from_chrome_apps_SiteB🌑 check_window_display_minimal🌑 -install_create_shortcut_windowed_SiteB🌑 launch_from_platform_shortcut_SiteB🌑 check_window_display_minimal🌑 -install_omnibox_icon_SiteB🌕 launch_from_menu_option_SiteB🌑 check_window_display_minimal🌑 -install_omnibox_icon_SiteB🌕 launch_from_launch_icon_SiteB🌑 check_window_display_minimal🌑 -install_omnibox_icon_SiteB🌕 launch_from_chrome_apps_SiteB🌑 check_window_display_minimal🌑 -install_omnibox_icon_SiteB🌕 launch_from_platform_shortcut_SiteB🌑 check_window_display_minimal🌑 -install_policy_app_windowed_no_shortcut_SiteB🌑 launch_from_menu_option_SiteB🌑 check_window_display_minimal🌑 -install_policy_app_windowed_no_shortcut_SiteB🌑 launch_from_launch_icon_SiteB🌑 check_window_display_minimal🌑 -install_policy_app_windowed_no_shortcut_SiteB🌑 launch_from_chrome_apps_SiteB🌑 check_window_display_minimal🌑 -install_policy_app_windowed_no_shortcut_SiteB🌑 launch_from_platform_shortcut_SiteB🌑 check_window_display_minimal🌑 -install_policy_app_windowed_shortcut_SiteB🌓 launch_from_menu_option_SiteB🌑 check_window_display_minimal🌑 -install_policy_app_windowed_shortcut_SiteB🌓 launch_from_launch_icon_SiteB🌑 check_window_display_minimal🌑 -install_policy_app_windowed_shortcut_SiteB🌓 launch_from_chrome_apps_SiteB🌑 check_window_display_minimal🌑 -install_policy_app_windowed_shortcut_SiteB🌓 launch_from_platform_shortcut_SiteB🌑 check_window_display_minimal🌑 -install_menu_option_SiteB🌓 launch_from_menu_option_SiteB🌑 check_window_display_minimal🌑 -install_menu_option_SiteB🌓 launch_from_launch_icon_SiteB🌑 check_window_display_minimal🌑 -install_menu_option_SiteB🌓 launch_from_chrome_apps_SiteB🌑 check_window_display_minimal🌑 -install_menu_option_SiteB🌓 launch_from_platform_shortcut_SiteB🌑 check_window_display_minimal🌑 -install_create_shortcut_tabbed_SiteC🌑 launch_from_menu_option_SiteC🌑 check_tab_created🌑 -install_create_shortcut_tabbed_SiteC🌑 launch_from_launch_icon_SiteC🌑 check_tab_created🌑 -install_create_shortcut_tabbed_SiteC🌑 launch_from_chrome_apps_SiteC🌑 check_tab_created🌑 -install_create_shortcut_tabbed_SiteC🌑 launch_from_platform_shortcut_SiteC🌑 check_tab_created🌑 -install_policy_app_tabbed_shortcut_SiteC🌓 launch_from_menu_option_SiteC🌑 check_tab_created🌑 -install_policy_app_tabbed_shortcut_SiteC🌓 launch_from_launch_icon_SiteC🌑 check_tab_created🌑 -install_policy_app_tabbed_shortcut_SiteC🌓 launch_from_chrome_apps_SiteC🌑 check_tab_created🌑 -install_policy_app_tabbed_shortcut_SiteC🌓 launch_from_platform_shortcut_SiteC🌑 check_tab_created🌑 -install_policy_app_tabbed_no_shortcut_SiteC🌑 launch_from_menu_option_SiteC🌑 check_tab_created🌑 -install_policy_app_tabbed_no_shortcut_SiteC🌑 launch_from_launch_icon_SiteC🌑 check_tab_created🌑 -install_policy_app_tabbed_no_shortcut_SiteC🌑 launch_from_chrome_apps_SiteC🌑 check_tab_created🌑 -install_policy_app_tabbed_no_shortcut_SiteC🌑 launch_from_platform_shortcut_SiteC🌑 check_tab_created🌑 -install_create_shortcut_windowed_SiteC🌑 launch_from_menu_option_SiteC🌑 check_window_created🌑 -install_create_shortcut_windowed_SiteC🌑 launch_from_launch_icon_SiteC🌑 check_window_created🌑 -install_create_shortcut_windowed_SiteC🌑 launch_from_chrome_apps_SiteC🌑 check_window_created🌑 -install_create_shortcut_windowed_SiteC🌑 launch_from_platform_shortcut_SiteC🌑 check_window_created🌑 -install_policy_app_windowed_no_shortcut_SiteC🌑 launch_from_menu_option_SiteC🌑 check_window_created🌑 -install_policy_app_windowed_no_shortcut_SiteC🌑 launch_from_launch_icon_SiteC🌑 check_window_created🌑 -install_policy_app_windowed_no_shortcut_SiteC🌑 launch_from_chrome_apps_SiteC🌑 check_window_created🌑 -install_policy_app_windowed_no_shortcut_SiteC🌑 launch_from_platform_shortcut_SiteC🌑 check_window_created🌑 -install_policy_app_windowed_shortcut_SiteC🌓 launch_from_menu_option_SiteC🌑 check_window_created🌑 -install_policy_app_windowed_shortcut_SiteC🌓 launch_from_launch_icon_SiteC🌑 check_window_created🌑 -install_policy_app_windowed_shortcut_SiteC🌓 launch_from_chrome_apps_SiteC🌑 check_window_created🌑 -install_policy_app_windowed_shortcut_SiteC🌓 launch_from_platform_shortcut_SiteC🌑 check_window_created🌑 -install_create_shortcut_windowed_SiteA🌑 close_pwa🌑 manifest_update_icons_SiteA🌑 check_app_in_list_icon_correct_SiteA🌑 -install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_icons_SiteA🌑 check_app_in_list_icon_correct_SiteA🌑 -install_menu_option_SiteA🌓 close_pwa🌕 manifest_update_icons_SiteA🌑 check_app_in_list_icon_correct_SiteA🌑 -install_create_shortcut_windowed_SiteA🌑 close_pwa🌑 manifest_update_icons_SiteA🌑 check_platform_shortcut_icon_correct_SiteA🌑 -install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_icons_SiteA🌑 check_platform_shortcut_icon_correct_SiteA🌑 -install_menu_option_SiteA🌓 close_pwa🌕 manifest_update_icons_SiteA🌑 check_platform_shortcut_icon_correct_SiteA🌑 -install_create_shortcut_windowed_SiteAFoo🌑 manifest_update_scope_site_a_foo_to_SiteA🌑 close_pwa🌑 launch_from_platform_shortcut_SiteAFoo🌑 close_pwa🌑 navigate_browser_SiteA🌑 check_install_icon_not_shown🌑 -install_omnibox_icon_SiteAFoo🌕 manifest_update_scope_site_a_foo_to_SiteA🌑 close_pwa🌑 launch_from_platform_shortcut_SiteAFoo🌑 close_pwa🌑 navigate_browser_SiteA🌑 check_install_icon_not_shown🌑 -install_menu_option_SiteAFoo🌓 manifest_update_scope_site_a_foo_to_SiteA🌑 close_pwa🌑 launch_from_platform_shortcut_SiteAFoo🌑 close_pwa🌑 navigate_browser_SiteA🌑 check_install_icon_not_shown🌑 -install_create_shortcut_windowed_SiteAFoo🌑 manifest_update_scope_site_a_foo_to_SiteA🌑 close_pwa🌑 launch_from_platform_shortcut_SiteAFoo🌑 close_pwa🌑 navigate_browser_SiteA🌑 check_launch_icon_shown🌑 -install_omnibox_icon_SiteAFoo🌕 manifest_update_scope_site_a_foo_to_SiteA🌑 close_pwa🌑 launch_from_platform_shortcut_SiteAFoo🌑 close_pwa🌑 navigate_browser_SiteA🌑 check_launch_icon_shown🌑 -install_menu_option_SiteAFoo🌓 manifest_update_scope_site_a_foo_to_SiteA🌑 close_pwa🌑 launch_from_platform_shortcut_SiteAFoo🌑 close_pwa🌑 navigate_browser_SiteA🌑 check_launch_icon_shown🌑 -install_create_shortcut_windowed_SiteAFoo🌑 close_pwa🌑 manifest_update_scope_site_a_foo_to_SiteA🌑 navigate_browser_SiteABar🌑 check_install_icon_not_shown🌑 -install_omnibox_icon_SiteAFoo🌕 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteA🌑 navigate_browser_SiteABar🌑 check_install_icon_not_shown🌑 -install_menu_option_SiteAFoo🌓 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteA🌑 navigate_browser_SiteABar🌑 check_install_icon_not_shown🌑 -install_create_shortcut_windowed_SiteAFoo🌑 close_pwa🌑 manifest_update_scope_site_a_foo_to_SiteA🌑 navigate_browser_SiteABar🌑 check_launch_icon_shown🌑 -install_omnibox_icon_SiteAFoo🌕 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteA🌑 navigate_browser_SiteABar🌑 check_launch_icon_shown🌑 -install_menu_option_SiteAFoo🌓 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteA🌑 navigate_browser_SiteABar🌑 check_launch_icon_shown🌑 -install_create_shortcut_windowed_SiteAFoo🌑 navigate_browser_SiteABar🌑 check_install_icon_shown🌑 -install_omnibox_icon_SiteAFoo🌕 navigate_browser_SiteABar🌕 check_install_icon_shown🌕 -install_policy_app_windowed_no_shortcut_SiteAFoo🌑 navigate_browser_SiteABar🌑 check_install_icon_shown🌑 -install_policy_app_windowed_shortcut_SiteAFoo🌓 navigate_browser_SiteABar🌕 check_install_icon_shown🌕 -install_menu_option_SiteAFoo🌓 navigate_browser_SiteABar🌕 check_install_icon_shown🌕 -install_create_shortcut_windowed_SiteAFoo🌑 navigate_browser_SiteABar🌑 check_launch_icon_not_shown🌑 -install_omnibox_icon_SiteAFoo🌕 navigate_browser_SiteABar🌕 check_launch_icon_not_shown🌕 -install_policy_app_windowed_no_shortcut_SiteAFoo🌑 navigate_browser_SiteABar🌑 check_launch_icon_not_shown🌑 -install_policy_app_windowed_shortcut_SiteAFoo🌓 navigate_browser_SiteABar🌕 check_launch_icon_not_shown🌕 -install_menu_option_SiteAFoo🌓 navigate_browser_SiteABar🌕 check_launch_icon_not_shown🌕 -install_create_shortcut_windowed_SiteAFoo🌑 close_pwa🌑 manifest_update_scope_site_a_foo_to_SiteA🌑 navigate_browser_SiteAFoo🌑 check_install_icon_not_shown🌑 -install_omnibox_icon_SiteAFoo🌕 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteA🌑 navigate_browser_SiteAFoo🌑 check_install_icon_not_shown🌑 -install_menu_option_SiteAFoo🌓 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteA🌑 navigate_browser_SiteAFoo🌑 check_install_icon_not_shown🌑 -install_create_shortcut_windowed_SiteAFoo🌑 close_pwa🌑 manifest_update_scope_site_a_foo_to_SiteA🌑 navigate_browser_SiteAFoo🌑 check_launch_icon_shown🌑 -install_omnibox_icon_SiteAFoo🌕 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteA🌑 navigate_browser_SiteAFoo🌑 check_launch_icon_shown🌑 -install_menu_option_SiteAFoo🌓 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteA🌑 navigate_browser_SiteAFoo🌑 check_launch_icon_shown🌑 -install_create_shortcut_windowed_SiteA🌑 navigate_browser_SiteAFoo🌑 check_install_icon_not_shown🌑 -install_omnibox_icon_SiteA🌕 navigate_browser_SiteAFoo🌕 check_install_icon_not_shown🌕 -install_policy_app_windowed_no_shortcut_SiteA🌑 navigate_browser_SiteAFoo🌑 check_install_icon_not_shown🌑 -install_policy_app_windowed_shortcut_SiteA🌓 navigate_browser_SiteAFoo🌕 check_install_icon_not_shown🌕 -install_menu_option_SiteA🌓 navigate_browser_SiteAFoo🌕 check_install_icon_not_shown🌕 -install_create_shortcut_windowed_SiteA🌑 navigate_browser_SiteAFoo🌑 check_launch_icon_shown🌑 -install_omnibox_icon_SiteA🌕 navigate_browser_SiteAFoo🌕 check_launch_icon_shown🌕 -install_policy_app_windowed_no_shortcut_SiteA🌑 navigate_browser_SiteAFoo🌑 check_launch_icon_shown🌑 -install_policy_app_windowed_shortcut_SiteA🌓 navigate_browser_SiteAFoo🌕 check_launch_icon_shown🌕 -install_menu_option_SiteA🌓 navigate_browser_SiteAFoo🌕 check_launch_icon_shown🌕 -navigate_browser_SiteAFoo🌕 check_install_icon_shown🌕 -switch_incognito_profile🌑 navigate_browser_SiteA🌑 check_create_shortcut_not_shown🌑 -navigate_browser_SiteA🌕 check_app_not_in_list_SiteA🌕 -navigate_browser_SiteA🌕 check_create_shortcut_shown🌑 -navigate_browser_SiteA🌕 check_platform_shortcut_not_exists_SiteA🌑 -install_create_shortcut_windowed_SiteA🌑 navigate_browser_SiteB🌑 check_install_icon_shown🌑 -install_omnibox_icon_SiteA🌕 navigate_browser_SiteB🌕 check_install_icon_shown🌕 -install_menu_option_SiteA🌓 navigate_browser_SiteB🌕 check_install_icon_shown🌕 -install_create_shortcut_windowed_SiteA🌑 navigate_browser_SiteB🌑 check_launch_icon_not_shown🌑 -install_omnibox_icon_SiteA🌕 navigate_browser_SiteB🌕 check_launch_icon_not_shown🌕 -install_menu_option_SiteA🌓 navigate_browser_SiteB🌕 check_launch_icon_not_shown🌕 -switch_incognito_profile🌑 navigate_browser_SiteC🌑 check_create_shortcut_not_shown🌑 -navigate_browser_SiteC🌕 check_app_not_in_list_SiteA🌕 -navigate_browser_SiteC🌕 check_create_shortcut_shown🌑 -navigate_browser_SiteC🌕 check_install_icon_not_shown🌕 -navigate_browser_SiteC🌕 check_platform_shortcut_not_exists_SiteA🌑 -navigate_crashed_url🌑 check_create_shortcut_not_shown🌑 -navigate_crashed_url🌑 check_install_icon_not_shown🌑 -navigate_notfound_url🌑 check_create_shortcut_not_shown🌑 -navigate_notfound_url🌑 check_install_icon_not_shown🌑 -install_create_shortcut_windowed_SiteAFoo🌑 close_pwa🌑 manifest_update_scope_site_a_foo_to_SiteA🌑 launch_from_menu_option_SiteAFoo🌑 navigate_pwa_site_a_foo_to_SiteABar🌑 check_no_toolbar🌑 -install_create_shortcut_windowed_SiteAFoo🌑 close_pwa🌑 manifest_update_scope_site_a_foo_to_SiteA🌑 launch_from_launch_icon_SiteAFoo🌑 navigate_pwa_site_a_foo_to_SiteABar🌑 check_no_toolbar🌑 -install_create_shortcut_windowed_SiteAFoo🌑 close_pwa🌑 manifest_update_scope_site_a_foo_to_SiteA🌑 launch_from_chrome_apps_SiteAFoo🌑 navigate_pwa_site_a_foo_to_SiteABar🌑 check_no_toolbar🌑 -install_create_shortcut_windowed_SiteAFoo🌑 close_pwa🌑 manifest_update_scope_site_a_foo_to_SiteA🌑 launch_from_platform_shortcut_SiteAFoo🌑 navigate_pwa_site_a_foo_to_SiteABar🌑 check_no_toolbar🌑 -install_omnibox_icon_SiteAFoo🌕 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteA🌑 launch_from_menu_option_SiteAFoo🌑 navigate_pwa_site_a_foo_to_SiteABar🌑 check_no_toolbar🌑 -install_omnibox_icon_SiteAFoo🌕 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteA🌑 launch_from_launch_icon_SiteAFoo🌑 navigate_pwa_site_a_foo_to_SiteABar🌑 check_no_toolbar🌑 -install_omnibox_icon_SiteAFoo🌕 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteA🌑 launch_from_chrome_apps_SiteAFoo🌑 navigate_pwa_site_a_foo_to_SiteABar🌑 check_no_toolbar🌑 -install_omnibox_icon_SiteAFoo🌕 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteA🌑 launch_from_platform_shortcut_SiteAFoo🌑 navigate_pwa_site_a_foo_to_SiteABar🌑 check_no_toolbar🌑 -install_menu_option_SiteAFoo🌓 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteA🌑 launch_from_menu_option_SiteAFoo🌑 navigate_pwa_site_a_foo_to_SiteABar🌑 check_no_toolbar🌑 -install_menu_option_SiteAFoo🌓 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteA🌑 launch_from_launch_icon_SiteAFoo🌑 navigate_pwa_site_a_foo_to_SiteABar🌑 check_no_toolbar🌑 -install_menu_option_SiteAFoo🌓 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteA🌑 launch_from_chrome_apps_SiteAFoo🌑 navigate_pwa_site_a_foo_to_SiteABar🌑 check_no_toolbar🌑 -install_menu_option_SiteAFoo🌓 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteA🌑 launch_from_platform_shortcut_SiteAFoo🌑 navigate_pwa_site_a_foo_to_SiteABar🌑 check_no_toolbar🌑 -install_create_shortcut_windowed_SiteA🌑 navigate_pwa_site_a_to_SiteB🌑 check_toolbar🌑 -install_omnibox_icon_SiteA🌕 navigate_pwa_site_a_to_SiteB🌑 check_toolbar🌑 -install_menu_option_SiteA🌓 navigate_pwa_site_a_to_SiteB🌑 check_toolbar🌑 -install_create_shortcut_windowed_SiteA🌑 navigate_pwa_site_a_to_SiteB🌑 check_window_title_is_SiteA🌑 -install_omnibox_icon_SiteA🌕 navigate_pwa_site_a_to_SiteB🌑 check_window_title_is_SiteA🌑 -install_menu_option_SiteA🌓 navigate_pwa_site_a_to_SiteB🌑 check_window_title_is_SiteA🌑 -install_create_shortcut_windowed_SiteA🌑 open_in_chrome🌑 check_tab_created🌑 -install_omnibox_icon_SiteA🌕 open_in_chrome🌑 check_tab_created🌑 -install_menu_option_SiteA🌓 open_in_chrome🌑 check_tab_created🌑 -install_create_shortcut_windowed_SiteA🌑 navigate_pwa_site_a_to_SiteB🌑 open_in_chrome🌑 check_tab_created🌑 -install_omnibox_icon_SiteA🌕 navigate_pwa_site_a_to_SiteB🌑 open_in_chrome🌑 check_tab_created🌑 -install_menu_option_SiteA🌓 navigate_pwa_site_a_to_SiteB🌑 open_in_chrome🌑 check_tab_created🌑 -install_create_shortcut_tabbed_SiteA🌑 install_policy_app_windowed_no_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_app_in_list_tabbed_SiteA🌑 -install_create_shortcut_tabbed_SiteA🌑 install_policy_app_tabbed_no_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_app_in_list_tabbed_SiteA🌑 -install_create_shortcut_tabbed_SiteA🌑 install_policy_app_windowed_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_app_in_list_tabbed_SiteA🌑 -install_create_shortcut_tabbed_SiteA🌑 install_policy_app_tabbed_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_app_in_list_tabbed_SiteA🌑 -install_create_shortcut_tabbed_SiteA🌑 install_policy_app_windowed_no_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 -install_create_shortcut_tabbed_SiteA🌑 install_policy_app_tabbed_no_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 -install_create_shortcut_tabbed_SiteA🌑 install_policy_app_windowed_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 -install_create_shortcut_tabbed_SiteA🌑 install_policy_app_tabbed_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 -install_create_shortcut_windowed_SiteA🌑 install_policy_app_windowed_no_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_app_in_list_windowed_SiteA🌑 -install_create_shortcut_windowed_SiteA🌑 install_policy_app_tabbed_no_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_app_in_list_windowed_SiteA🌑 -install_create_shortcut_windowed_SiteA🌑 install_policy_app_windowed_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_app_in_list_windowed_SiteA🌑 -install_create_shortcut_windowed_SiteA🌑 install_policy_app_tabbed_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_app_in_list_windowed_SiteA🌑 -install_omnibox_icon_SiteA🌕 install_policy_app_windowed_no_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_app_in_list_windowed_SiteA🌑 -install_omnibox_icon_SiteA🌕 install_policy_app_tabbed_no_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_app_in_list_windowed_SiteA🌑 -install_omnibox_icon_SiteA🌕 install_policy_app_windowed_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_app_in_list_windowed_SiteA🌑 -install_omnibox_icon_SiteA🌕 install_policy_app_tabbed_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_app_in_list_windowed_SiteA🌑 -install_menu_option_SiteA🌓 install_policy_app_windowed_no_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_app_in_list_windowed_SiteA🌑 -install_menu_option_SiteA🌓 install_policy_app_tabbed_no_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_app_in_list_windowed_SiteA🌑 -install_menu_option_SiteA🌓 install_policy_app_windowed_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_app_in_list_windowed_SiteA🌑 -install_menu_option_SiteA🌓 install_policy_app_tabbed_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_app_in_list_windowed_SiteA🌑 -install_create_shortcut_windowed_SiteA🌑 install_policy_app_windowed_no_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 -install_create_shortcut_windowed_SiteA🌑 install_policy_app_tabbed_no_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 -install_create_shortcut_windowed_SiteA🌑 install_policy_app_windowed_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 -install_create_shortcut_windowed_SiteA🌑 install_policy_app_tabbed_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 -install_omnibox_icon_SiteA🌕 install_policy_app_windowed_no_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 -install_omnibox_icon_SiteA🌕 install_policy_app_tabbed_no_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 -install_omnibox_icon_SiteA🌕 install_policy_app_windowed_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_platform_shortcut_exists_SiteA🌑 -install_omnibox_icon_SiteA🌕 install_policy_app_tabbed_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_platform_shortcut_exists_SiteA🌑 -install_menu_option_SiteA🌓 install_policy_app_windowed_no_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 -install_menu_option_SiteA🌓 install_policy_app_tabbed_no_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 -install_menu_option_SiteA🌓 install_policy_app_windowed_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_platform_shortcut_exists_SiteA🌑 -install_menu_option_SiteA🌓 install_policy_app_tabbed_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_platform_shortcut_exists_SiteA🌑 -install_policy_app_windowed_no_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_app_not_in_list_SiteA🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_app_not_in_list_SiteA🌑 -install_policy_app_windowed_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_app_not_in_list_SiteA🌕 -install_policy_app_tabbed_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_app_not_in_list_SiteA🌕 -install_policy_app_tabbed_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 navigate_browser_SiteA🌕 check_install_icon_shown🌕 -install_policy_app_tabbed_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 navigate_browser_SiteA🌕 check_launch_icon_not_shown🌕 -install_policy_app_windowed_no_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_platform_shortcut_not_exists_SiteA🌑 check_app_not_in_list_SiteA🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_platform_shortcut_not_exists_SiteA🌑 check_app_not_in_list_SiteA🌑 -install_policy_app_windowed_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_platform_shortcut_not_exists_SiteA🌑 check_app_not_in_list_SiteA🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_platform_shortcut_not_exists_SiteA🌑 check_app_not_in_list_SiteA🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 install_create_shortcut_windowed_SiteA🌑 uninstall_policy_app_SiteA🌑 check_app_in_list_windowed_SiteA🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 install_omnibox_icon_SiteA🌕 uninstall_policy_app_SiteA🌕 check_app_in_list_windowed_SiteA🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 install_menu_option_SiteA🌓 uninstall_policy_app_SiteA🌕 check_app_in_list_windowed_SiteA🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 install_create_shortcut_windowed_SiteA🌑 uninstall_policy_app_SiteA🌑 check_app_in_list_windowed_SiteA🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 install_omnibox_icon_SiteA🌑 uninstall_policy_app_SiteA🌑 check_app_in_list_windowed_SiteA🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 install_menu_option_SiteA🌑 uninstall_policy_app_SiteA🌑 check_app_in_list_windowed_SiteA🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 install_create_shortcut_windowed_SiteA🌑 uninstall_policy_app_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 install_omnibox_icon_SiteA🌕 uninstall_policy_app_SiteA🌕 check_platform_shortcut_exists_SiteA🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 install_menu_option_SiteA🌓 uninstall_policy_app_SiteA🌕 check_platform_shortcut_exists_SiteA🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 install_create_shortcut_windowed_SiteA🌑 uninstall_policy_app_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 install_omnibox_icon_SiteA🌑 uninstall_policy_app_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 install_menu_option_SiteA🌑 uninstall_policy_app_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 -install_create_shortcut_windowed_SiteA🌑 set_app_badge_SiteA🌑 check_app_badge_has_value_SiteA🌑 -install_omnibox_icon_SiteA🌕 set_app_badge_SiteA🌑 check_app_badge_has_value_SiteA🌑 -install_menu_option_SiteA🌓 set_app_badge_SiteA🌑 check_app_badge_has_value_SiteA🌑 -navigate_browser_SiteA🌕 set_app_badge_SiteA🌑 check_platform_shortcut_not_exists_SiteA🌑 -install_create_shortcut_windowed_SiteA🌑 set_open_in_tab_SiteA🌑 check_app_in_list_tabbed_SiteA🌑 -install_omnibox_icon_SiteA🌕 set_open_in_tab_SiteA🌓 check_app_in_list_tabbed_SiteA🌑 -install_menu_option_SiteA🌓 set_open_in_tab_SiteA🌓 check_app_in_list_tabbed_SiteA🌑 -install_create_shortcut_windowed_SiteA🌑 set_open_in_tab_SiteA🌑 navigate_browser_SiteA🌑 check_install_icon_shown🌑 -install_omnibox_icon_SiteA🌕 set_open_in_tab_SiteA🌓 navigate_browser_SiteA🌕 check_install_icon_shown🌕 -install_menu_option_SiteA🌓 set_open_in_tab_SiteA🌓 navigate_browser_SiteA🌕 check_install_icon_shown🌕 -install_create_shortcut_tabbed_SiteA🌑 set_open_in_window_SiteA🌑 check_app_in_list_windowed_SiteA🌑 -install_create_shortcut_tabbed_SiteA🌑 set_open_in_window_SiteA🌑 navigate_browser_SiteA🌑 check_install_icon_not_shown🌑 -install_create_shortcut_tabbed_SiteA🌑 set_open_in_window_SiteA🌑 navigate_browser_SiteA🌑 check_launch_icon_shown🌑 -install_create_shortcut_windowed_SiteA🌑 switch_incognito_profile🌑 navigate_browser_SiteA🌑 check_launch_icon_not_shown🌑 -install_omnibox_icon_SiteA🌕 switch_incognito_profile🌑 navigate_browser_SiteA🌑 check_launch_icon_not_shown🌑 -install_menu_option_SiteA🌓 switch_incognito_profile🌑 navigate_browser_SiteA🌑 check_launch_icon_not_shown🌑 -switch_incognito_profile🌑 navigate_browser_SiteA🌑 check_install_icon_not_shown🌑 -install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 check_app_in_list_not_locally_installed_SiteA🌑 -install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 check_app_in_list_not_locally_installed_SiteA🌓 -install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 check_app_in_list_not_locally_installed_SiteA🌓 -install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 check_app_in_list_not_locally_installed_SiteA🌑 -install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 check_platform_shortcut_not_exists_SiteA🌑 -install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 check_platform_shortcut_not_exists_SiteA🌑 -install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 check_platform_shortcut_not_exists_SiteA🌑 -install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 check_platform_shortcut_not_exists_SiteA🌑 -install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 navigate_browser_SiteA🌑 check_install_icon_shown🌑 -install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 navigate_browser_SiteA🌕 check_install_icon_shown🌕 -install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 navigate_browser_SiteA🌕 check_install_icon_shown🌕 -install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 navigate_browser_SiteA🌑 check_launch_icon_not_shown🌑 -install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 navigate_browser_SiteA🌕 check_launch_icon_not_shown🌕 -install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 navigate_browser_SiteA🌕 check_launch_icon_not_shown🌕 -install_create_shortcut_windowed_SiteC🌑 switch_profile_clients_UserAClient2🌑 check_app_in_list_not_locally_installed_SiteC🌑 -install_create_shortcut_tabbed_SiteC🌑 switch_profile_clients_UserAClient2🌑 check_app_in_list_not_locally_installed_SiteC🌑 -install_create_shortcut_windowed_SiteC🌑 switch_profile_clients_UserAClient2🌑 check_platform_shortcut_not_exists_SiteC🌑 -install_create_shortcut_tabbed_SiteC🌑 switch_profile_clients_UserAClient2🌑 check_platform_shortcut_not_exists_SiteC🌑 -sync_turn_off🌕 install_create_shortcut_windowed_SiteA🌑 sync_turn_on🌑 switch_profile_clients_UserAClient2🌑 check_app_in_list_not_locally_installed_SiteA🌑 -sync_turn_off🌕 install_omnibox_icon_SiteA🌕 sync_turn_on🌕 switch_profile_clients_UserAClient2🌕 check_app_in_list_not_locally_installed_SiteA🌓 -sync_turn_off🌕 install_menu_option_SiteA🌓 sync_turn_on🌕 switch_profile_clients_UserAClient2🌕 check_app_in_list_not_locally_installed_SiteA🌓 -sync_turn_off🌕 install_create_shortcut_tabbed_SiteA🌑 sync_turn_on🌑 switch_profile_clients_UserAClient2🌑 check_app_in_list_not_locally_installed_SiteA🌑 -sync_turn_off🌕 install_create_shortcut_windowed_SiteC🌑 sync_turn_on🌑 switch_profile_clients_UserAClient2🌑 check_app_in_list_not_locally_installed_SiteC🌑 -sync_turn_off🌕 install_create_shortcut_tabbed_SiteC🌑 sync_turn_on🌑 switch_profile_clients_UserAClient2🌑 check_app_in_list_not_locally_installed_SiteC🌑 -install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 sync_turn_off🌑 uninstall_from_app_list_SiteA🌑 sync_turn_on🌑 switch_profile_clients_UserAClient1🌑 check_app_not_in_list_SiteA🌑 -install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 sync_turn_off🌕 uninstall_from_app_list_SiteA🌑 sync_turn_on🌑 switch_profile_clients_UserAClient1🌑 check_app_not_in_list_SiteA🌑 -install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 sync_turn_off🌕 uninstall_from_app_list_SiteA🌑 sync_turn_on🌑 switch_profile_clients_UserAClient1🌑 check_app_not_in_list_SiteA🌑 -install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 sync_turn_off🌑 uninstall_from_app_list_SiteA🌑 sync_turn_on🌑 switch_profile_clients_UserAClient1🌑 check_app_not_in_list_SiteA🌑 -install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 sync_turn_off🌑 uninstall_from_app_list_SiteA🌑 sync_turn_on🌑 switch_profile_clients_UserAClient1🌑 check_platform_shortcut_not_exists_SiteA🌑 -install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 sync_turn_off🌕 uninstall_from_app_list_SiteA🌑 sync_turn_on🌑 switch_profile_clients_UserAClient1🌑 check_platform_shortcut_not_exists_SiteA🌑 -install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 sync_turn_off🌕 uninstall_from_app_list_SiteA🌑 sync_turn_on🌑 switch_profile_clients_UserAClient1🌑 check_platform_shortcut_not_exists_SiteA🌑 -install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 sync_turn_off🌑 uninstall_from_app_list_SiteA🌑 sync_turn_on🌑 switch_profile_clients_UserAClient1🌑 check_platform_shortcut_not_exists_SiteA🌑 -install_create_shortcut_windowed_SiteA🌑 uninstall_from_app_list_SiteA🌑 check_app_not_in_list_SiteA🌑 -install_create_shortcut_windowed_SiteA🌑 uninstall_from_menu_SiteA🌑 check_app_not_in_list_SiteA🌑 -install_omnibox_icon_SiteA🌕 uninstall_from_app_list_SiteA🌑 check_app_not_in_list_SiteA🌑 -install_omnibox_icon_SiteA🌕 uninstall_from_menu_SiteA🌕 check_app_not_in_list_SiteA🌕 -install_menu_option_SiteA🌓 uninstall_from_app_list_SiteA🌑 check_app_not_in_list_SiteA🌑 -install_menu_option_SiteA🌓 uninstall_from_menu_SiteA🌕 check_app_not_in_list_SiteA🌕 -install_create_shortcut_tabbed_SiteA🌑 uninstall_from_app_list_SiteA🌑 check_app_not_in_list_SiteA🌑 -install_create_shortcut_tabbed_SiteA🌑 uninstall_from_menu_SiteA🌑 check_app_not_in_list_SiteA🌑 -install_create_shortcut_windowed_SiteA🌑 uninstall_from_app_list_SiteA🌑 navigate_browser_SiteA🌑 check_install_icon_shown🌑 -install_create_shortcut_windowed_SiteA🌑 uninstall_from_menu_SiteA🌑 navigate_browser_SiteA🌑 check_install_icon_shown🌑 -install_omnibox_icon_SiteA🌕 uninstall_from_app_list_SiteA🌑 navigate_browser_SiteA🌑 check_install_icon_shown🌑 -install_omnibox_icon_SiteA🌕 uninstall_from_menu_SiteA🌕 navigate_browser_SiteA🌕 check_install_icon_shown🌕 -install_menu_option_SiteA🌓 uninstall_from_app_list_SiteA🌑 navigate_browser_SiteA🌑 check_install_icon_shown🌑 -install_menu_option_SiteA🌓 uninstall_from_menu_SiteA🌕 navigate_browser_SiteA🌕 check_install_icon_shown🌕 -install_create_shortcut_tabbed_SiteA🌑 uninstall_from_app_list_SiteA🌑 navigate_browser_SiteA🌑 check_install_icon_shown🌑 -install_create_shortcut_tabbed_SiteA🌑 uninstall_from_menu_SiteA🌑 navigate_browser_SiteA🌑 check_install_icon_shown🌑 -install_create_shortcut_windowed_SiteA🌑 uninstall_from_app_list_SiteA🌑 navigate_browser_SiteA🌑 check_launch_icon_not_shown🌑 -install_create_shortcut_windowed_SiteA🌑 uninstall_from_menu_SiteA🌑 navigate_browser_SiteA🌑 check_launch_icon_not_shown🌑 -install_omnibox_icon_SiteA🌕 uninstall_from_app_list_SiteA🌑 navigate_browser_SiteA🌑 check_launch_icon_not_shown🌑 -install_omnibox_icon_SiteA🌕 uninstall_from_menu_SiteA🌕 navigate_browser_SiteA🌕 check_launch_icon_not_shown🌕 -install_menu_option_SiteA🌓 uninstall_from_app_list_SiteA🌑 navigate_browser_SiteA🌑 check_launch_icon_not_shown🌑 -install_menu_option_SiteA🌓 uninstall_from_menu_SiteA🌕 navigate_browser_SiteA🌕 check_launch_icon_not_shown🌕 -install_create_shortcut_tabbed_SiteA🌑 uninstall_from_app_list_SiteA🌑 navigate_browser_SiteA🌑 check_launch_icon_not_shown🌑 -install_create_shortcut_tabbed_SiteA🌑 uninstall_from_menu_SiteA🌑 navigate_browser_SiteA🌑 check_launch_icon_not_shown🌑 -install_create_shortcut_windowed_SiteA🌑 uninstall_from_app_list_SiteA🌑 check_platform_shortcut_not_exists_SiteA🌑 -install_create_shortcut_windowed_SiteA🌑 uninstall_from_menu_SiteA🌑 check_platform_shortcut_not_exists_SiteA🌑 -install_omnibox_icon_SiteA🌕 uninstall_from_app_list_SiteA🌑 check_platform_shortcut_not_exists_SiteA🌑 -install_omnibox_icon_SiteA🌕 uninstall_from_menu_SiteA🌕 check_platform_shortcut_not_exists_SiteA🌑 -install_menu_option_SiteA🌓 uninstall_from_app_list_SiteA🌑 check_platform_shortcut_not_exists_SiteA🌑 -install_menu_option_SiteA🌓 uninstall_from_menu_SiteA🌕 check_platform_shortcut_not_exists_SiteA🌑 -install_create_shortcut_tabbed_SiteA🌑 uninstall_from_app_list_SiteA🌑 check_platform_shortcut_not_exists_SiteA🌑 -install_create_shortcut_tabbed_SiteA🌑 uninstall_from_menu_SiteA🌑 check_platform_shortcut_not_exists_SiteA🌑 -install_create_shortcut_windowed_SiteC🌑 uninstall_from_app_list_SiteC🌑 check_app_not_in_list_SiteA🌑 -install_create_shortcut_windowed_SiteC🌑 uninstall_from_menu_SiteC🌑 check_app_not_in_list_SiteA🌑 -install_create_shortcut_tabbed_SiteC🌑 uninstall_from_app_list_SiteC🌑 check_app_not_in_list_SiteA🌑 -install_create_shortcut_tabbed_SiteC🌑 uninstall_from_menu_SiteC🌑 check_app_not_in_list_SiteA🌑 -install_create_shortcut_windowed_SiteC🌑 uninstall_from_app_list_SiteC🌑 navigate_browser_SiteC🌑 check_launch_icon_not_shown🌑 -install_create_shortcut_windowed_SiteC🌑 uninstall_from_menu_SiteC🌑 navigate_browser_SiteC🌑 check_launch_icon_not_shown🌑 -install_create_shortcut_tabbed_SiteC🌑 uninstall_from_app_list_SiteC🌑 navigate_browser_SiteC🌑 check_launch_icon_not_shown🌑 -install_create_shortcut_tabbed_SiteC🌑 uninstall_from_menu_SiteC🌑 navigate_browser_SiteC🌑 check_launch_icon_not_shown🌑 -install_create_shortcut_windowed_SiteC🌑 uninstall_from_app_list_SiteC🌑 check_platform_shortcut_not_exists_SiteC🌑 -install_create_shortcut_windowed_SiteC🌑 uninstall_from_menu_SiteC🌑 check_platform_shortcut_not_exists_SiteC🌑 -install_create_shortcut_tabbed_SiteC🌑 uninstall_from_app_list_SiteC🌑 check_platform_shortcut_not_exists_SiteC🌑 -install_create_shortcut_tabbed_SiteC🌑 uninstall_from_menu_SiteC🌑 check_platform_shortcut_not_exists_SiteC🌑 -install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 uninstall_from_app_list_SiteA🌑 check_app_not_in_list_SiteA🌑 -install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 uninstall_from_app_list_SiteA🌑 check_app_not_in_list_SiteA🌑 -install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 uninstall_from_app_list_SiteA🌑 check_app_not_in_list_SiteA🌑 -install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 uninstall_from_app_list_SiteA🌑 check_app_not_in_list_SiteA🌑 -install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 uninstall_from_app_list_SiteA🌑 switch_profile_clients_UserAClient1🌑 check_app_not_in_list_SiteA🌑 -install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 uninstall_from_app_list_SiteA🌑 switch_profile_clients_UserAClient1🌑 check_app_not_in_list_SiteA🌑 -install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 uninstall_from_app_list_SiteA🌑 switch_profile_clients_UserAClient1🌑 check_app_not_in_list_SiteA🌑 -install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 uninstall_from_app_list_SiteA🌑 switch_profile_clients_UserAClient1🌑 check_app_not_in_list_SiteA🌑 +# This is a generated file. +# Full coverage: 14%, with partial coverage: 24% +install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 chrome_update🌑 check_app_in_list_not_locally_installed_SiteA🌑 +install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 chrome_update🌑 check_app_in_list_not_locally_installed_SiteA🌑 +install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 chrome_update🌑 check_app_in_list_not_locally_installed_SiteA🌑 +install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 chrome_update🌑 check_app_in_list_not_locally_installed_SiteA🌑 +install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteA🌑 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 +install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 install_locally_SiteA🌓 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 +install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 install_locally_SiteA🌓 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 +install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteA🌑 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 +install_create_shortcut_windowed_SiteA🌑 uninstall_from_app_list_SiteA🌑 chrome_update🌑 check_app_not_in_list_SiteA🌑 +install_create_shortcut_windowed_SiteA🌑 uninstall_from_menu_SiteA🌑 chrome_update🌑 check_app_not_in_list_SiteA🌑 +install_omnibox_icon_SiteA🌕 uninstall_from_app_list_SiteA🌑 chrome_update🌑 check_app_not_in_list_SiteA🌑 +install_omnibox_icon_SiteA🌕 uninstall_from_menu_SiteA🌕 chrome_update🌑 check_app_not_in_list_SiteA🌑 +install_menu_option_SiteA🌓 uninstall_from_app_list_SiteA🌑 chrome_update🌑 check_app_not_in_list_SiteA🌑 +install_menu_option_SiteA🌓 uninstall_from_menu_SiteA🌕 chrome_update🌑 check_app_not_in_list_SiteA🌑 +install_create_shortcut_tabbed_SiteA🌑 uninstall_from_app_list_SiteA🌑 chrome_update🌑 check_app_not_in_list_SiteA🌑 +install_create_shortcut_tabbed_SiteA🌑 uninstall_from_menu_SiteA🌑 chrome_update🌑 check_app_not_in_list_SiteA🌑 +install_create_shortcut_windowed_SiteA🌑 uninstall_from_app_list_SiteA🌑 chrome_update🌑 check_platform_shortcut_not_exists_SiteA🌑 +install_create_shortcut_windowed_SiteA🌑 uninstall_from_menu_SiteA🌑 chrome_update🌑 check_platform_shortcut_not_exists_SiteA🌑 +install_omnibox_icon_SiteA🌕 uninstall_from_app_list_SiteA🌑 chrome_update🌑 check_platform_shortcut_not_exists_SiteA🌑 +install_omnibox_icon_SiteA🌕 uninstall_from_menu_SiteA🌕 chrome_update🌑 check_platform_shortcut_not_exists_SiteA🌑 +install_menu_option_SiteA🌓 uninstall_from_app_list_SiteA🌑 chrome_update🌑 check_platform_shortcut_not_exists_SiteA🌑 +install_menu_option_SiteA🌓 uninstall_from_menu_SiteA🌕 chrome_update🌑 check_platform_shortcut_not_exists_SiteA🌑 +install_create_shortcut_tabbed_SiteA🌑 uninstall_from_app_list_SiteA🌑 chrome_update🌑 check_platform_shortcut_not_exists_SiteA🌑 +install_create_shortcut_tabbed_SiteA🌑 uninstall_from_menu_SiteA🌑 chrome_update🌑 check_platform_shortcut_not_exists_SiteA🌑 +install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteA🌑 chrome_update🌑 check_app_in_list_tabbed_SiteA🌑 +install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteA🌑 chrome_update🌑 check_app_in_list_windowed_SiteA🌑 +install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 install_locally_SiteA🌓 chrome_update🌑 check_app_in_list_windowed_SiteA🌑 +install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 install_locally_SiteA🌓 chrome_update🌑 check_app_in_list_windowed_SiteA🌑 +install_create_shortcut_windowed_SiteC🌑 switch_profile_clients_UserAClient2🌑 chrome_update🌑 check_app_in_list_not_locally_installed_SiteC🌑 +install_create_shortcut_tabbed_SiteC🌑 switch_profile_clients_UserAClient2🌑 chrome_update🌑 check_app_in_list_not_locally_installed_SiteC🌑 +install_policy_app_windowed_no_shortcut_SiteA🌑 chrome_update🌑 check_platform_shortcut_not_exists_SiteA🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 chrome_update🌑 check_platform_shortcut_not_exists_SiteA🌑 +install_policy_app_windowed_no_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 chrome_update🌑 check_app_not_in_list_SiteA🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 chrome_update🌑 check_app_not_in_list_SiteA🌑 +install_policy_app_windowed_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 chrome_update🌑 check_app_not_in_list_SiteA🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 chrome_update🌑 check_app_not_in_list_SiteA🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 install_create_shortcut_windowed_SiteA🌑 chrome_update🌑 check_app_in_list_windowed_SiteA🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 install_omnibox_icon_SiteA🌕 chrome_update🌑 check_app_in_list_windowed_SiteA🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 install_menu_option_SiteA🌓 chrome_update🌑 check_app_in_list_windowed_SiteA🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 install_create_shortcut_windowed_SiteA🌑 chrome_update🌑 check_app_in_list_windowed_SiteA🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 install_omnibox_icon_SiteA🌑 chrome_update🌑 check_app_in_list_windowed_SiteA🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 install_menu_option_SiteA🌑 chrome_update🌑 check_app_in_list_windowed_SiteA🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 install_create_shortcut_windowed_SiteA🌑 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 install_omnibox_icon_SiteA🌕 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 install_menu_option_SiteA🌓 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 install_create_shortcut_windowed_SiteA🌑 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 install_omnibox_icon_SiteA🌑 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 install_menu_option_SiteA🌑 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 install_create_shortcut_windowed_SiteA🌑 uninstall_policy_app_SiteA🌑 chrome_update🌑 check_app_in_list_windowed_SiteA🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 install_omnibox_icon_SiteA🌕 uninstall_policy_app_SiteA🌕 chrome_update🌑 check_app_in_list_windowed_SiteA🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 install_menu_option_SiteA🌓 uninstall_policy_app_SiteA🌕 chrome_update🌑 check_app_in_list_windowed_SiteA🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 install_create_shortcut_windowed_SiteA🌑 uninstall_policy_app_SiteA🌑 chrome_update🌑 check_app_in_list_windowed_SiteA🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 install_omnibox_icon_SiteA🌑 uninstall_policy_app_SiteA🌑 chrome_update🌑 check_app_in_list_windowed_SiteA🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 install_menu_option_SiteA🌑 uninstall_policy_app_SiteA🌑 chrome_update🌑 check_app_in_list_windowed_SiteA🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 install_create_shortcut_windowed_SiteA🌑 uninstall_policy_app_SiteA🌑 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 install_omnibox_icon_SiteA🌕 uninstall_policy_app_SiteA🌕 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 install_menu_option_SiteA🌓 uninstall_policy_app_SiteA🌕 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 install_create_shortcut_windowed_SiteA🌑 uninstall_policy_app_SiteA🌑 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 install_omnibox_icon_SiteA🌑 uninstall_policy_app_SiteA🌑 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 install_menu_option_SiteA🌑 uninstall_policy_app_SiteA🌑 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 +install_create_shortcut_tabbed_SiteA🌑 chrome_update🌑 check_app_in_list_tabbed_SiteA🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 chrome_update🌑 check_app_in_list_tabbed_SiteA🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 chrome_update🌑 check_app_in_list_tabbed_SiteA🌑 +install_create_shortcut_tabbed_SiteA🌑 chrome_update🌑 navigate_browser_SiteA🌑 check_create_shortcut_shown🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 chrome_update🌑 navigate_browser_SiteA🌑 check_create_shortcut_shown🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 chrome_update🌑 navigate_browser_SiteA🌑 check_create_shortcut_shown🌑 +install_create_shortcut_tabbed_SiteA🌑 chrome_update🌑 navigate_browser_SiteA🌑 check_install_icon_shown🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 chrome_update🌑 navigate_browser_SiteA🌑 check_install_icon_shown🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 chrome_update🌑 navigate_browser_SiteA🌑 check_install_icon_shown🌑 +install_create_shortcut_tabbed_SiteA🌑 chrome_update🌑 navigate_browser_SiteA🌑 check_launch_icon_not_shown🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 chrome_update🌑 navigate_browser_SiteA🌑 check_launch_icon_not_shown🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 chrome_update🌑 navigate_browser_SiteA🌑 check_launch_icon_not_shown🌑 +install_create_shortcut_windowed_SiteA🌑 chrome_update🌑 check_app_in_list_windowed_SiteA🌑 +install_omnibox_icon_SiteA🌕 chrome_update🌑 check_app_in_list_windowed_SiteA🌑 +install_policy_app_windowed_no_shortcut_SiteA🌑 chrome_update🌑 check_app_in_list_windowed_SiteA🌑 +install_policy_app_windowed_shortcut_SiteA🌓 chrome_update🌑 check_app_in_list_windowed_SiteA🌑 +install_menu_option_SiteA🌓 chrome_update🌑 check_app_in_list_windowed_SiteA🌑 +install_create_shortcut_windowed_SiteA🌑 chrome_update🌑 navigate_browser_SiteA🌑 check_create_shortcut_not_shown🌑 +install_omnibox_icon_SiteA🌕 chrome_update🌑 navigate_browser_SiteA🌑 check_create_shortcut_not_shown🌑 +install_policy_app_windowed_no_shortcut_SiteA🌑 chrome_update🌑 navigate_browser_SiteA🌑 check_create_shortcut_not_shown🌑 +install_policy_app_windowed_shortcut_SiteA🌓 chrome_update🌑 navigate_browser_SiteA🌑 check_create_shortcut_not_shown🌑 +install_menu_option_SiteA🌓 chrome_update🌑 navigate_browser_SiteA🌑 check_create_shortcut_not_shown🌑 +install_create_shortcut_windowed_SiteA🌑 chrome_update🌑 navigate_browser_SiteA🌑 check_install_icon_not_shown🌑 +install_omnibox_icon_SiteA🌕 chrome_update🌑 navigate_browser_SiteA🌑 check_install_icon_not_shown🌑 +install_policy_app_windowed_no_shortcut_SiteA🌑 chrome_update🌑 navigate_browser_SiteA🌑 check_install_icon_not_shown🌑 +install_policy_app_windowed_shortcut_SiteA🌓 chrome_update🌑 navigate_browser_SiteA🌑 check_install_icon_not_shown🌑 +install_menu_option_SiteA🌓 chrome_update🌑 navigate_browser_SiteA🌑 check_install_icon_not_shown🌑 +install_create_shortcut_windowed_SiteA🌑 chrome_update🌑 navigate_browser_SiteA🌑 check_launch_icon_shown🌑 +install_omnibox_icon_SiteA🌕 chrome_update🌑 navigate_browser_SiteA🌑 check_launch_icon_shown🌑 +install_policy_app_windowed_no_shortcut_SiteA🌑 chrome_update🌑 navigate_browser_SiteA🌑 check_launch_icon_shown🌑 +install_policy_app_windowed_shortcut_SiteA🌓 chrome_update🌑 navigate_browser_SiteA🌑 check_launch_icon_shown🌑 +install_menu_option_SiteA🌓 chrome_update🌑 navigate_browser_SiteA🌑 check_launch_icon_shown🌑 +install_policy_app_windowed_shortcut_SiteA🌓 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 +install_create_shortcut_windowed_SiteA🌑 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 +install_omnibox_icon_SiteA🌕 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 +install_menu_option_SiteA🌓 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 +install_create_shortcut_tabbed_SiteA🌑 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 +install_policy_app_windowed_shortcut_SiteA🌓 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 +install_create_shortcut_windowed_SiteA🌑 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 +install_omnibox_icon_SiteA🌕 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 +install_menu_option_SiteA🌓 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 +install_create_shortcut_tabbed_SiteA🌑 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 +install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 chrome_update🌑 launch_from_menu_option_SiteA🌑 check_tab_created🌑 +install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 chrome_update🌑 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 +install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 chrome_update🌑 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 +install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 chrome_update🌑 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 +install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 chrome_update🌑 launch_from_menu_option_SiteA🌑 check_tab_created🌑 +install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 chrome_update🌑 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 +install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 chrome_update🌑 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 +install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 chrome_update🌑 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 +install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 chrome_update🌑 launch_from_menu_option_SiteA🌑 check_tab_created🌑 +install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 chrome_update🌑 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 +install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 chrome_update🌑 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 +install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 chrome_update🌑 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 +install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 chrome_update🌑 launch_from_menu_option_SiteA🌑 check_tab_created🌑 +install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 chrome_update🌑 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 +install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 chrome_update🌑 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 +install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 chrome_update🌑 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 +install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteA🌑 chrome_update🌑 launch_from_menu_option_SiteA🌑 check_tab_created🌑 +install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteA🌑 chrome_update🌑 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 +install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteA🌑 chrome_update🌑 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 +install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteA🌑 chrome_update🌑 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 +install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteA🌑 chrome_update🌑 launch_from_menu_option_SiteA🌑 check_window_created🌑 +install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteA🌑 chrome_update🌑 launch_from_launch_icon_SiteA🌑 check_window_created🌑 +install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteA🌑 chrome_update🌑 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 +install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteA🌑 chrome_update🌑 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 +install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 install_locally_SiteA🌓 chrome_update🌑 launch_from_menu_option_SiteA🌑 check_window_created🌑 +install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 install_locally_SiteA🌓 chrome_update🌑 launch_from_launch_icon_SiteA🌑 check_window_created🌑 +install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 install_locally_SiteA🌓 chrome_update🌑 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 +install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 install_locally_SiteA🌓 chrome_update🌑 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 +install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 install_locally_SiteA🌓 chrome_update🌑 launch_from_menu_option_SiteA🌑 check_window_created🌑 +install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 install_locally_SiteA🌓 chrome_update🌑 launch_from_launch_icon_SiteA🌑 check_window_created🌑 +install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 install_locally_SiteA🌓 chrome_update🌑 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 +install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 install_locally_SiteA🌓 chrome_update🌑 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 +install_create_shortcut_tabbed_SiteA🌑 chrome_update🌑 launch_from_menu_option_SiteA🌑 check_tab_created🌑 +install_create_shortcut_tabbed_SiteA🌑 chrome_update🌑 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 +install_create_shortcut_tabbed_SiteA🌑 chrome_update🌑 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 +install_create_shortcut_tabbed_SiteA🌑 chrome_update🌑 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 chrome_update🌑 launch_from_menu_option_SiteA🌑 check_tab_created🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 chrome_update🌑 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 chrome_update🌑 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 chrome_update🌑 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 chrome_update🌑 launch_from_menu_option_SiteA🌑 check_tab_created🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 chrome_update🌑 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 chrome_update🌑 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 chrome_update🌑 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 +install_create_shortcut_windowed_SiteA🌑 chrome_update🌑 launch_from_menu_option_SiteA🌑 check_window_created🌑 +install_create_shortcut_windowed_SiteA🌑 chrome_update🌑 launch_from_launch_icon_SiteA🌑 check_window_created🌑 +install_create_shortcut_windowed_SiteA🌑 chrome_update🌑 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 +install_create_shortcut_windowed_SiteA🌑 chrome_update🌑 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 +install_omnibox_icon_SiteA🌕 chrome_update🌑 launch_from_menu_option_SiteA🌑 check_window_created🌑 +install_omnibox_icon_SiteA🌕 chrome_update🌑 launch_from_launch_icon_SiteA🌑 check_window_created🌑 +install_omnibox_icon_SiteA🌕 chrome_update🌑 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 +install_omnibox_icon_SiteA🌕 chrome_update🌑 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 +install_policy_app_windowed_no_shortcut_SiteA🌑 chrome_update🌑 launch_from_menu_option_SiteA🌑 check_window_created🌑 +install_policy_app_windowed_no_shortcut_SiteA🌑 chrome_update🌑 launch_from_launch_icon_SiteA🌑 check_window_created🌑 +install_policy_app_windowed_no_shortcut_SiteA🌑 chrome_update🌑 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 +install_policy_app_windowed_no_shortcut_SiteA🌑 chrome_update🌑 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 +install_policy_app_windowed_shortcut_SiteA🌓 chrome_update🌑 launch_from_menu_option_SiteA🌑 check_window_created🌑 +install_policy_app_windowed_shortcut_SiteA🌓 chrome_update🌑 launch_from_launch_icon_SiteA🌑 check_window_created🌑 +install_policy_app_windowed_shortcut_SiteA🌓 chrome_update🌑 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 +install_policy_app_windowed_shortcut_SiteA🌓 chrome_update🌑 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 +install_menu_option_SiteA🌓 chrome_update🌑 launch_from_menu_option_SiteA🌑 check_window_created🌑 +install_menu_option_SiteA🌓 chrome_update🌑 launch_from_launch_icon_SiteA🌑 check_window_created🌑 +install_menu_option_SiteA🌓 chrome_update🌑 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 +install_menu_option_SiteA🌓 chrome_update🌑 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 +install_create_shortcut_tabbed_SiteC🌑 chrome_update🌑 launch_from_menu_option_SiteA🌑 check_tab_created🌑 +install_create_shortcut_tabbed_SiteC🌑 chrome_update🌑 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 +install_create_shortcut_tabbed_SiteC🌑 chrome_update🌑 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 +install_create_shortcut_tabbed_SiteC🌑 chrome_update🌑 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 +install_policy_app_tabbed_shortcut_SiteC🌓 chrome_update🌑 launch_from_menu_option_SiteA🌑 check_tab_created🌑 +install_policy_app_tabbed_shortcut_SiteC🌓 chrome_update🌑 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 +install_policy_app_tabbed_shortcut_SiteC🌓 chrome_update🌑 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 +install_policy_app_tabbed_shortcut_SiteC🌓 chrome_update🌑 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 +install_policy_app_tabbed_no_shortcut_SiteC🌑 chrome_update🌑 launch_from_menu_option_SiteA🌑 check_tab_created🌑 +install_policy_app_tabbed_no_shortcut_SiteC🌑 chrome_update🌑 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 +install_policy_app_tabbed_no_shortcut_SiteC🌑 chrome_update🌑 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 +install_policy_app_tabbed_no_shortcut_SiteC🌑 chrome_update🌑 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 +install_create_shortcut_windowed_SiteA🌑 set_app_badge_SiteA🌑 clear_app_badge_SiteA🌑 check_app_badge_empty_SiteA🌑 +install_omnibox_icon_SiteA🌕 set_app_badge_SiteA🌑 clear_app_badge_SiteA🌑 check_app_badge_empty_SiteA🌑 +install_menu_option_SiteA🌓 set_app_badge_SiteA🌑 clear_app_badge_SiteA🌑 check_app_badge_empty_SiteA🌑 +install_create_shortcut_windowed_SiteA🌑 navigate_pwa_site_a_to_SiteB🌑 close_custom_toolbar🌑 check_navigation_start_url🌑 +install_omnibox_icon_SiteA🌕 navigate_pwa_site_a_to_SiteB🌑 close_custom_toolbar🌑 check_navigation_start_url🌑 +install_policy_app_windowed_no_shortcut_SiteA🌑 navigate_pwa_site_a_to_SiteB🌑 close_custom_toolbar🌑 check_navigation_start_url🌑 +install_policy_app_windowed_shortcut_SiteA🌓 navigate_pwa_site_a_to_SiteB🌑 close_custom_toolbar🌑 check_navigation_start_url🌑 +install_menu_option_SiteA🌓 navigate_pwa_site_a_to_SiteB🌑 close_custom_toolbar🌑 check_navigation_start_url🌑 +install_policy_app_windowed_no_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 +install_create_shortcut_windowed_SiteA🌑 delete_profile🌑 check_app_list_empty🌑 +install_omnibox_icon_SiteA🌕 delete_profile🌑 check_app_list_empty🌑 +install_policy_app_windowed_no_shortcut_SiteA🌑 delete_profile🌑 check_app_list_empty🌑 +install_policy_app_windowed_shortcut_SiteA🌓 delete_profile🌑 check_app_list_empty🌑 +install_menu_option_SiteA🌓 delete_profile🌑 check_app_list_empty🌑 +install_create_shortcut_tabbed_SiteA🌑 delete_profile🌑 check_app_list_empty🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 delete_profile🌑 check_app_list_empty🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 delete_profile🌑 check_app_list_empty🌑 +install_create_shortcut_windowed_SiteA🌑 delete_profile🌑 check_app_not_in_list_SiteA🌑 +install_omnibox_icon_SiteA🌕 delete_profile🌑 check_app_not_in_list_SiteA🌑 +install_policy_app_windowed_no_shortcut_SiteA🌑 delete_profile🌑 check_app_not_in_list_SiteA🌑 +install_policy_app_windowed_shortcut_SiteA🌓 delete_profile🌑 check_app_not_in_list_SiteA🌑 +install_menu_option_SiteA🌓 delete_profile🌑 check_app_not_in_list_SiteA🌑 +install_create_shortcut_tabbed_SiteA🌑 delete_profile🌑 check_app_not_in_list_SiteA🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 delete_profile🌑 check_app_not_in_list_SiteA🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 delete_profile🌑 check_app_not_in_list_SiteA🌑 +install_policy_app_windowed_shortcut_SiteA🌓 delete_profile🌑 check_platform_shortcut_not_exists_SiteA🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 delete_profile🌑 check_platform_shortcut_not_exists_SiteA🌑 +install_create_shortcut_windowed_SiteA🌑 delete_profile🌑 check_platform_shortcut_not_exists_SiteA🌑 +install_omnibox_icon_SiteA🌕 delete_profile🌑 check_platform_shortcut_not_exists_SiteA🌑 +install_menu_option_SiteA🌓 delete_profile🌑 check_platform_shortcut_not_exists_SiteA🌑 +install_create_shortcut_tabbed_SiteA🌑 delete_profile🌑 check_platform_shortcut_not_exists_SiteA🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 install_create_shortcut_windowed_SiteA🌑 check_app_in_list_windowed_SiteA🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 install_omnibox_icon_SiteA🌕 check_app_in_list_windowed_SiteA🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 install_menu_option_SiteA🌓 check_app_in_list_windowed_SiteA🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 install_create_shortcut_windowed_SiteA🌑 check_app_in_list_windowed_SiteA🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 install_omnibox_icon_SiteA🌑 check_app_in_list_windowed_SiteA🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 install_menu_option_SiteA🌑 check_app_in_list_windowed_SiteA🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 install_create_shortcut_windowed_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 install_omnibox_icon_SiteA🌕 check_platform_shortcut_exists_SiteA🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 install_menu_option_SiteA🌓 check_platform_shortcut_exists_SiteA🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 install_create_shortcut_windowed_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 install_omnibox_icon_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 install_menu_option_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 install_create_shortcut_windowed_SiteA🌑 check_window_created🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 install_omnibox_icon_SiteA🌕 check_window_created🌕 +install_policy_app_tabbed_shortcut_SiteA🌓 install_menu_option_SiteA🌓 check_window_created🌕 +install_policy_app_tabbed_no_shortcut_SiteA🌑 install_create_shortcut_windowed_SiteA🌑 check_window_created🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 install_omnibox_icon_SiteA🌑 check_window_created🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 install_menu_option_SiteA🌑 check_window_created🌑 +install_create_shortcut_windowed_SiteA🌑 check_window_created🌑 +install_omnibox_icon_SiteA🌕 check_window_created🌕 +install_menu_option_SiteA🌓 check_window_created🌕 +install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 +install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 install_locally_SiteA🌓 check_platform_shortcut_exists_SiteA🌑 +install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 install_locally_SiteA🌓 check_platform_shortcut_exists_SiteA🌑 +install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 +install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteA🌑 check_app_in_list_tabbed_SiteA🌑 +install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteA🌑 navigate_browser_SiteA🌑 check_install_icon_shown🌑 +install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteA🌑 navigate_browser_SiteA🌑 check_launch_icon_not_shown🌑 +install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteA🌑 check_app_in_list_windowed_SiteA🌑 +install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 install_locally_SiteA🌓 check_app_in_list_windowed_SiteA🌑 +install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 install_locally_SiteA🌓 check_app_in_list_windowed_SiteA🌑 +install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteA🌑 navigate_browser_SiteA🌑 check_install_icon_not_shown🌑 +install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 install_locally_SiteA🌓 navigate_browser_SiteA🌕 check_install_icon_not_shown🌕 +install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 install_locally_SiteA🌓 navigate_browser_SiteA🌕 check_install_icon_not_shown🌕 +install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteA🌑 navigate_browser_SiteA🌑 check_launch_icon_shown🌑 +install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 install_locally_SiteA🌓 navigate_browser_SiteA🌕 check_launch_icon_shown🌕 +install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 install_locally_SiteA🌓 navigate_browser_SiteA🌕 check_launch_icon_shown🌕 +install_create_shortcut_windowed_SiteC🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 +install_create_shortcut_tabbed_SiteC🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 +install_create_shortcut_tabbed_SiteC🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteC🌑 check_app_in_list_tabbed_SiteC🌑 +install_create_shortcut_tabbed_SiteC🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteC🌑 navigate_browser_SiteC🌑 check_install_icon_shown🌑 +install_create_shortcut_tabbed_SiteC🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteC🌑 navigate_browser_SiteC🌑 check_launch_icon_not_shown🌑 +install_create_shortcut_windowed_SiteC🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteC🌑 check_app_in_list_tabbed_SiteC🌑 +install_create_shortcut_windowed_SiteC🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteC🌑 navigate_browser_SiteC🌑 check_install_icon_not_shown🌑 +install_create_shortcut_windowed_SiteC🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteC🌑 navigate_browser_SiteC🌑 check_launch_icon_shown🌑 +install_policy_app_windowed_no_shortcut_SiteA🌑 check_platform_shortcut_not_exists_SiteA🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 check_platform_shortcut_not_exists_SiteA🌑 +install_policy_app_windowed_no_shortcut_SiteC🌑 check_platform_shortcut_not_exists_SiteC🌑 +install_policy_app_tabbed_no_shortcut_SiteC🌑 check_platform_shortcut_not_exists_SiteC🌑 +install_create_shortcut_tabbed_SiteA🌑 install_policy_app_windowed_no_shortcut_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 +install_create_shortcut_tabbed_SiteA🌑 install_policy_app_windowed_shortcut_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 +install_create_shortcut_windowed_SiteA🌑 install_policy_app_tabbed_no_shortcut_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 +install_create_shortcut_windowed_SiteA🌑 install_policy_app_windowed_no_shortcut_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 +install_omnibox_icon_SiteA🌕 install_policy_app_tabbed_no_shortcut_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 +install_omnibox_icon_SiteA🌕 install_policy_app_windowed_no_shortcut_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 +install_menu_option_SiteA🌓 install_policy_app_tabbed_no_shortcut_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 +install_menu_option_SiteA🌓 install_policy_app_windowed_no_shortcut_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 +install_create_shortcut_windowed_SiteA🌑 install_policy_app_tabbed_shortcut_SiteA🌑 check_app_in_list_windowed_SiteA🌑 +install_create_shortcut_windowed_SiteA🌑 install_policy_app_tabbed_no_shortcut_SiteA🌑 check_app_in_list_windowed_SiteA🌑 +install_omnibox_icon_SiteA🌕 install_policy_app_tabbed_shortcut_SiteA🌓 check_app_in_list_windowed_SiteA🌑 +install_omnibox_icon_SiteA🌕 install_policy_app_tabbed_no_shortcut_SiteA🌑 check_app_in_list_windowed_SiteA🌑 +install_menu_option_SiteA🌓 install_policy_app_tabbed_shortcut_SiteA🌓 check_app_in_list_windowed_SiteA🌑 +install_menu_option_SiteA🌓 install_policy_app_tabbed_no_shortcut_SiteA🌑 check_app_in_list_windowed_SiteA🌑 +install_create_shortcut_windowed_SiteA🌑 install_policy_app_tabbed_shortcut_SiteA🌑 navigate_browser_SiteA🌑 check_launch_icon_shown🌑 +install_create_shortcut_windowed_SiteA🌑 install_policy_app_tabbed_no_shortcut_SiteA🌑 navigate_browser_SiteA🌑 check_launch_icon_shown🌑 +install_omnibox_icon_SiteA🌕 install_policy_app_tabbed_shortcut_SiteA🌓 navigate_browser_SiteA🌕 check_launch_icon_shown🌕 +install_omnibox_icon_SiteA🌕 install_policy_app_tabbed_no_shortcut_SiteA🌑 navigate_browser_SiteA🌑 check_launch_icon_shown🌑 +install_menu_option_SiteA🌓 install_policy_app_tabbed_shortcut_SiteA🌓 navigate_browser_SiteA🌕 check_launch_icon_shown🌕 +install_menu_option_SiteA🌓 install_policy_app_tabbed_no_shortcut_SiteA🌑 navigate_browser_SiteA🌑 check_launch_icon_shown🌑 +install_create_shortcut_tabbed_SiteA🌑 install_policy_app_windowed_no_shortcut_SiteA🌑 check_app_in_list_tabbed_SiteA🌑 +install_create_shortcut_tabbed_SiteA🌑 install_policy_app_windowed_shortcut_SiteA🌑 check_app_in_list_tabbed_SiteA🌑 +install_create_shortcut_tabbed_SiteA🌑 install_policy_app_windowed_no_shortcut_SiteA🌑 navigate_browser_SiteA🌑 check_install_icon_shown🌑 +install_create_shortcut_tabbed_SiteA🌑 install_policy_app_windowed_shortcut_SiteA🌑 navigate_browser_SiteA🌑 check_install_icon_shown🌑 +install_create_shortcut_tabbed_SiteA🌑 check_app_in_list_tabbed_SiteA🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 check_app_in_list_tabbed_SiteA🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 check_app_in_list_tabbed_SiteA🌑 +install_create_shortcut_tabbed_SiteA🌑 navigate_browser_SiteA🌑 check_create_shortcut_shown🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 navigate_browser_SiteA🌕 check_create_shortcut_shown🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 navigate_browser_SiteA🌑 check_create_shortcut_shown🌑 +install_create_shortcut_tabbed_SiteA🌑 navigate_browser_SiteA🌑 check_install_icon_shown🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 navigate_browser_SiteA🌕 check_install_icon_shown🌕 +install_policy_app_tabbed_no_shortcut_SiteA🌑 navigate_browser_SiteA🌑 check_install_icon_shown🌑 +install_create_shortcut_tabbed_SiteA🌑 navigate_browser_SiteA🌑 check_launch_icon_not_shown🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 navigate_browser_SiteA🌕 check_launch_icon_not_shown🌕 +install_policy_app_tabbed_no_shortcut_SiteA🌑 navigate_browser_SiteA🌑 check_launch_icon_not_shown🌑 +install_create_shortcut_tabbed_SiteC🌑 check_app_in_list_tabbed_SiteC🌑 +install_policy_app_tabbed_shortcut_SiteC🌓 check_app_in_list_tabbed_SiteC🌑 +install_policy_app_tabbed_no_shortcut_SiteC🌑 check_app_in_list_tabbed_SiteC🌑 +install_create_shortcut_tabbed_SiteC🌑 navigate_browser_SiteC🌑 check_create_shortcut_shown🌑 +install_policy_app_tabbed_shortcut_SiteC🌓 navigate_browser_SiteC🌕 check_create_shortcut_shown🌑 +install_policy_app_tabbed_no_shortcut_SiteC🌑 navigate_browser_SiteC🌑 check_create_shortcut_shown🌑 +install_create_shortcut_tabbed_SiteC🌑 navigate_browser_SiteC🌑 check_install_icon_not_shown🌑 +install_policy_app_tabbed_shortcut_SiteC🌓 navigate_browser_SiteC🌕 check_install_icon_not_shown🌕 +install_policy_app_tabbed_no_shortcut_SiteC🌑 navigate_browser_SiteC🌑 check_install_icon_not_shown🌑 +install_create_shortcut_tabbed_SiteC🌑 navigate_browser_SiteC🌑 check_launch_icon_not_shown🌑 +install_policy_app_tabbed_shortcut_SiteC🌓 navigate_browser_SiteC🌕 check_launch_icon_not_shown🌕 +install_policy_app_tabbed_no_shortcut_SiteC🌑 navigate_browser_SiteC🌑 check_launch_icon_not_shown🌑 +install_create_shortcut_windowed_SiteA🌑 check_app_in_list_windowed_SiteA🌑 +install_omnibox_icon_SiteA🌕 check_app_in_list_windowed_SiteA🌑 +install_policy_app_windowed_no_shortcut_SiteA🌑 check_app_in_list_windowed_SiteA🌑 +install_policy_app_windowed_shortcut_SiteA🌓 check_app_in_list_windowed_SiteA🌑 +install_menu_option_SiteA🌓 check_app_in_list_windowed_SiteA🌑 +install_create_shortcut_windowed_SiteA🌑 navigate_browser_SiteA🌑 check_create_shortcut_not_shown🌑 +install_omnibox_icon_SiteA🌕 navigate_browser_SiteA🌕 check_create_shortcut_not_shown🌑 +install_policy_app_windowed_no_shortcut_SiteA🌑 navigate_browser_SiteA🌑 check_create_shortcut_not_shown🌑 +install_policy_app_windowed_shortcut_SiteA🌓 navigate_browser_SiteA🌕 check_create_shortcut_not_shown🌑 +install_menu_option_SiteA🌓 navigate_browser_SiteA🌕 check_create_shortcut_not_shown🌑 +install_create_shortcut_windowed_SiteA🌑 navigate_browser_SiteA🌑 check_install_icon_not_shown🌑 +install_omnibox_icon_SiteA🌕 navigate_browser_SiteA🌕 check_install_icon_not_shown🌕 +install_policy_app_windowed_no_shortcut_SiteA🌑 navigate_browser_SiteA🌑 check_install_icon_not_shown🌑 +install_policy_app_windowed_shortcut_SiteA🌓 navigate_browser_SiteA🌕 check_install_icon_not_shown🌕 +install_menu_option_SiteA🌓 navigate_browser_SiteA🌕 check_install_icon_not_shown🌕 +install_create_shortcut_windowed_SiteA🌑 navigate_browser_SiteA🌑 check_launch_icon_shown🌑 +install_omnibox_icon_SiteA🌕 navigate_browser_SiteA🌕 check_launch_icon_shown🌕 +install_policy_app_windowed_no_shortcut_SiteA🌑 navigate_browser_SiteA🌑 check_launch_icon_shown🌑 +install_policy_app_windowed_shortcut_SiteA🌓 navigate_browser_SiteA🌕 check_launch_icon_shown🌕 +install_menu_option_SiteA🌓 navigate_browser_SiteA🌕 check_launch_icon_shown🌕 +install_create_shortcut_windowed_SiteB🌑 navigate_browser_SiteB🌑 check_launch_icon_shown🌑 +install_omnibox_icon_SiteB🌕 navigate_browser_SiteB🌕 check_launch_icon_shown🌕 +install_policy_app_windowed_no_shortcut_SiteB🌑 navigate_browser_SiteB🌑 check_launch_icon_shown🌑 +install_policy_app_windowed_shortcut_SiteB🌓 navigate_browser_SiteB🌕 check_launch_icon_shown🌕 +install_menu_option_SiteB🌓 navigate_browser_SiteB🌕 check_launch_icon_shown🌕 +install_create_shortcut_windowed_SiteC🌑 check_app_in_list_windowed_SiteC🌑 +install_policy_app_windowed_no_shortcut_SiteC🌑 check_app_in_list_windowed_SiteC🌑 +install_policy_app_windowed_shortcut_SiteC🌓 check_app_in_list_windowed_SiteC🌑 +install_create_shortcut_windowed_SiteC🌑 navigate_browser_SiteC🌑 check_create_shortcut_not_shown🌑 +install_policy_app_windowed_no_shortcut_SiteC🌑 navigate_browser_SiteC🌑 check_create_shortcut_not_shown🌑 +install_policy_app_windowed_shortcut_SiteC🌓 navigate_browser_SiteC🌕 check_create_shortcut_not_shown🌑 +install_create_shortcut_windowed_SiteC🌑 navigate_browser_SiteC🌑 check_install_icon_not_shown🌑 +install_policy_app_windowed_no_shortcut_SiteC🌑 navigate_browser_SiteC🌑 check_install_icon_not_shown🌑 +install_policy_app_windowed_shortcut_SiteC🌓 navigate_browser_SiteC🌕 check_install_icon_not_shown🌕 +install_create_shortcut_windowed_SiteC🌑 navigate_browser_SiteC🌑 check_launch_icon_shown🌑 +install_policy_app_windowed_no_shortcut_SiteC🌑 navigate_browser_SiteC🌑 check_launch_icon_shown🌑 +install_policy_app_windowed_shortcut_SiteC🌓 navigate_browser_SiteC🌕 check_launch_icon_shown🌕 +install_policy_app_windowed_shortcut_SiteA🌓 check_platform_shortcut_exists_SiteA🌑 +install_policy_app_windowed_shortcut_SiteA🌓 check_platform_shortcut_exists_SiteC🌑 +install_create_shortcut_tabbed_SiteA🌑 install_policy_app_windowed_no_shortcut_SiteA🌑 launch_from_menu_option_SiteA🌑 check_tab_created🌑 +install_create_shortcut_tabbed_SiteA🌑 install_policy_app_windowed_no_shortcut_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 +install_create_shortcut_tabbed_SiteA🌑 install_policy_app_windowed_no_shortcut_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 +install_create_shortcut_tabbed_SiteA🌑 install_policy_app_windowed_no_shortcut_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 +install_create_shortcut_tabbed_SiteA🌑 install_policy_app_windowed_shortcut_SiteA🌑 launch_from_menu_option_SiteA🌑 check_tab_created🌑 +install_create_shortcut_tabbed_SiteA🌑 install_policy_app_windowed_shortcut_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 +install_create_shortcut_tabbed_SiteA🌑 install_policy_app_windowed_shortcut_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 +install_create_shortcut_tabbed_SiteA🌑 install_policy_app_windowed_shortcut_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 +install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 launch_from_menu_option_SiteA🌑 check_tab_created🌑 +install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 +install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 +install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 +install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteA🌑 launch_from_menu_option_SiteA🌑 check_tab_created🌑 +install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 +install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 +install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 +install_create_shortcut_windowed_SiteA🌑 install_policy_app_tabbed_shortcut_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_created🌑 +install_create_shortcut_windowed_SiteA🌑 install_policy_app_tabbed_shortcut_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_created🌑 +install_create_shortcut_windowed_SiteA🌑 install_policy_app_tabbed_shortcut_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 +install_create_shortcut_windowed_SiteA🌑 install_policy_app_tabbed_shortcut_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 +install_create_shortcut_windowed_SiteA🌑 install_policy_app_tabbed_no_shortcut_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_created🌑 +install_create_shortcut_windowed_SiteA🌑 install_policy_app_tabbed_no_shortcut_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_created🌑 +install_create_shortcut_windowed_SiteA🌑 install_policy_app_tabbed_no_shortcut_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 +install_create_shortcut_windowed_SiteA🌑 install_policy_app_tabbed_no_shortcut_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 +install_omnibox_icon_SiteA🌕 install_policy_app_tabbed_shortcut_SiteA🌓 launch_from_menu_option_SiteA🌑 check_window_created🌑 +install_omnibox_icon_SiteA🌕 install_policy_app_tabbed_shortcut_SiteA🌓 launch_from_launch_icon_SiteA🌑 check_window_created🌑 +install_omnibox_icon_SiteA🌕 install_policy_app_tabbed_shortcut_SiteA🌓 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 +install_omnibox_icon_SiteA🌕 install_policy_app_tabbed_shortcut_SiteA🌓 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 +install_omnibox_icon_SiteA🌕 install_policy_app_tabbed_no_shortcut_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_created🌑 +install_omnibox_icon_SiteA🌕 install_policy_app_tabbed_no_shortcut_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_created🌑 +install_omnibox_icon_SiteA🌕 install_policy_app_tabbed_no_shortcut_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 +install_omnibox_icon_SiteA🌕 install_policy_app_tabbed_no_shortcut_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 +install_menu_option_SiteA🌓 install_policy_app_tabbed_shortcut_SiteA🌓 launch_from_menu_option_SiteA🌑 check_window_created🌑 +install_menu_option_SiteA🌓 install_policy_app_tabbed_shortcut_SiteA🌓 launch_from_launch_icon_SiteA🌑 check_window_created🌑 +install_menu_option_SiteA🌓 install_policy_app_tabbed_shortcut_SiteA🌓 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 +install_menu_option_SiteA🌓 install_policy_app_tabbed_shortcut_SiteA🌓 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 +install_menu_option_SiteA🌓 install_policy_app_tabbed_no_shortcut_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_created🌑 +install_menu_option_SiteA🌓 install_policy_app_tabbed_no_shortcut_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_created🌑 +install_menu_option_SiteA🌓 install_policy_app_tabbed_no_shortcut_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 +install_menu_option_SiteA🌓 install_policy_app_tabbed_no_shortcut_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 +install_create_shortcut_windowed_SiteA🌑 close_pwa🌑 manifest_update_colors_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_color_correct🌑 +install_create_shortcut_windowed_SiteA🌑 close_pwa🌑 manifest_update_colors_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_color_correct🌑 +install_create_shortcut_windowed_SiteA🌑 close_pwa🌑 manifest_update_colors_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_color_correct🌑 +install_create_shortcut_windowed_SiteA🌑 close_pwa🌑 manifest_update_colors_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_color_correct🌑 +install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_colors_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_color_correct🌑 +install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_colors_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_color_correct🌑 +install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_colors_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_color_correct🌑 +install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_colors_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_color_correct🌑 +install_menu_option_SiteA🌓 close_pwa🌕 manifest_update_colors_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_color_correct🌑 +install_menu_option_SiteA🌓 close_pwa🌕 manifest_update_colors_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_color_correct🌑 +install_menu_option_SiteA🌓 close_pwa🌕 manifest_update_colors_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_color_correct🌑 +install_menu_option_SiteA🌓 close_pwa🌕 manifest_update_colors_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_color_correct🌑 +install_create_shortcut_windowed_SiteA🌑 close_pwa🌑 manifest_update_display_browser_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_display_standalone🌑 +install_create_shortcut_windowed_SiteA🌑 close_pwa🌑 manifest_update_display_browser_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_display_standalone🌑 +install_create_shortcut_windowed_SiteA🌑 close_pwa🌑 manifest_update_display_browser_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_display_standalone🌑 +install_create_shortcut_windowed_SiteA🌑 close_pwa🌑 manifest_update_display_browser_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_display_standalone🌑 +install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_display_standalone🌑 +install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_display_standalone🌑 +install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_display_standalone🌑 +install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_display_standalone🌑 +install_menu_option_SiteA🌓 close_pwa🌕 manifest_update_display_browser_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_display_standalone🌑 +install_menu_option_SiteA🌓 close_pwa🌕 manifest_update_display_browser_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_display_standalone🌑 +install_menu_option_SiteA🌓 close_pwa🌕 manifest_update_display_browser_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_display_standalone🌑 +install_menu_option_SiteA🌓 close_pwa🌕 manifest_update_display_browser_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_display_standalone🌑 +install_create_shortcut_windowed_SiteA🌑 close_pwa🌑 manifest_update_display_minimal_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_display_minimal🌑 +install_create_shortcut_windowed_SiteA🌑 close_pwa🌑 manifest_update_display_minimal_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_display_minimal🌑 +install_create_shortcut_windowed_SiteA🌑 close_pwa🌑 manifest_update_display_minimal_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_display_minimal🌑 +install_create_shortcut_windowed_SiteA🌑 close_pwa🌑 manifest_update_display_minimal_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_display_minimal🌑 +install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_display_minimal_SiteA🌕 launch_from_menu_option_SiteA🌑 check_window_display_minimal🌑 +install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_display_minimal_SiteA🌕 launch_from_launch_icon_SiteA🌑 check_window_display_minimal🌑 +install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_display_minimal_SiteA🌕 launch_from_chrome_apps_SiteA🌑 check_window_display_minimal🌑 +install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_display_minimal_SiteA🌕 launch_from_platform_shortcut_SiteA🌑 check_window_display_minimal🌑 +install_menu_option_SiteA🌓 close_pwa🌕 manifest_update_display_minimal_SiteA🌕 launch_from_menu_option_SiteA🌑 check_window_display_minimal🌑 +install_menu_option_SiteA🌓 close_pwa🌕 manifest_update_display_minimal_SiteA🌕 launch_from_launch_icon_SiteA🌑 check_window_display_minimal🌑 +install_menu_option_SiteA🌓 close_pwa🌕 manifest_update_display_minimal_SiteA🌕 launch_from_chrome_apps_SiteA🌑 check_window_display_minimal🌑 +install_menu_option_SiteA🌓 close_pwa🌕 manifest_update_display_minimal_SiteA🌕 launch_from_platform_shortcut_SiteA🌑 check_window_display_minimal🌑 +install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 launch_from_menu_option_SiteA🌑 check_tab_created🌑 +install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 +install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 +install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 +install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 launch_from_menu_option_SiteA🌑 check_tab_created🌑 +install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 +install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 +install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 +install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 launch_from_menu_option_SiteA🌑 check_tab_created🌑 +install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 +install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 +install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 +install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_created🌑 +install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_created🌑 +install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 +install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 +install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 install_locally_SiteA🌓 launch_from_menu_option_SiteA🌑 check_window_created🌑 +install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 install_locally_SiteA🌓 launch_from_launch_icon_SiteA🌑 check_window_created🌑 +install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 install_locally_SiteA🌓 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 +install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 install_locally_SiteA🌓 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 +install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 install_locally_SiteA🌓 launch_from_menu_option_SiteA🌑 check_window_created🌑 +install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 install_locally_SiteA🌓 launch_from_launch_icon_SiteA🌑 check_window_created🌑 +install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 install_locally_SiteA🌓 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 +install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 install_locally_SiteA🌓 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 +install_create_shortcut_tabbed_SiteA🌑 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_menu_option_SiteA🌑 check_tab_created🌑 +install_create_shortcut_tabbed_SiteA🌑 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 +install_create_shortcut_tabbed_SiteA🌑 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 +install_create_shortcut_tabbed_SiteA🌑 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_menu_option_SiteA🌑 check_tab_created🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_menu_option_SiteA🌑 check_tab_created🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 +install_create_shortcut_tabbed_SiteA🌑 set_open_in_window_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_created🌑 +install_create_shortcut_tabbed_SiteA🌑 set_open_in_window_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_created🌑 +install_create_shortcut_tabbed_SiteA🌑 set_open_in_window_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 +install_create_shortcut_tabbed_SiteA🌑 set_open_in_window_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 set_open_in_window_SiteA🌓 launch_from_menu_option_SiteA🌑 check_window_created🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 set_open_in_window_SiteA🌓 launch_from_launch_icon_SiteA🌑 check_window_created🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 set_open_in_window_SiteA🌓 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 set_open_in_window_SiteA🌓 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 set_open_in_window_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_created🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 set_open_in_window_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_created🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 set_open_in_window_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 set_open_in_window_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 +install_create_shortcut_windowed_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_created🌑 +install_create_shortcut_windowed_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_created🌑 +install_create_shortcut_windowed_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 +install_create_shortcut_windowed_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 +install_omnibox_icon_SiteA🌕 launch_from_menu_option_SiteA🌑 check_window_created🌑 +install_omnibox_icon_SiteA🌕 launch_from_launch_icon_SiteA🌑 check_window_created🌑 +install_omnibox_icon_SiteA🌕 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 +install_omnibox_icon_SiteA🌕 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 +install_policy_app_windowed_no_shortcut_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_created🌑 +install_policy_app_windowed_no_shortcut_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_created🌑 +install_policy_app_windowed_no_shortcut_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 +install_policy_app_windowed_no_shortcut_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 +install_policy_app_windowed_shortcut_SiteA🌓 launch_from_menu_option_SiteA🌑 check_window_created🌑 +install_policy_app_windowed_shortcut_SiteA🌓 launch_from_launch_icon_SiteA🌑 check_window_created🌑 +install_policy_app_windowed_shortcut_SiteA🌓 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 +install_policy_app_windowed_shortcut_SiteA🌓 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 +install_menu_option_SiteA🌓 launch_from_menu_option_SiteA🌑 check_window_created🌑 +install_menu_option_SiteA🌓 launch_from_launch_icon_SiteA🌑 check_window_created🌑 +install_menu_option_SiteA🌓 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 +install_menu_option_SiteA🌓 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 +install_create_shortcut_windowed_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_display_standalone🌑 +install_create_shortcut_windowed_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_display_standalone🌑 +install_create_shortcut_windowed_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_display_standalone🌑 +install_create_shortcut_windowed_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_display_standalone🌑 +install_omnibox_icon_SiteA🌕 launch_from_menu_option_SiteA🌑 check_window_display_standalone🌑 +install_omnibox_icon_SiteA🌕 launch_from_launch_icon_SiteA🌑 check_window_display_standalone🌑 +install_omnibox_icon_SiteA🌕 launch_from_chrome_apps_SiteA🌑 check_window_display_standalone🌑 +install_omnibox_icon_SiteA🌕 launch_from_platform_shortcut_SiteA🌑 check_window_display_standalone🌑 +install_policy_app_windowed_no_shortcut_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_display_standalone🌑 +install_policy_app_windowed_no_shortcut_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_display_standalone🌑 +install_policy_app_windowed_no_shortcut_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_display_standalone🌑 +install_policy_app_windowed_no_shortcut_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_display_standalone🌑 +install_policy_app_windowed_shortcut_SiteA🌓 launch_from_menu_option_SiteA🌑 check_window_display_standalone🌑 +install_policy_app_windowed_shortcut_SiteA🌓 launch_from_launch_icon_SiteA🌑 check_window_display_standalone🌑 +install_policy_app_windowed_shortcut_SiteA🌓 launch_from_chrome_apps_SiteA🌑 check_window_display_standalone🌑 +install_policy_app_windowed_shortcut_SiteA🌓 launch_from_platform_shortcut_SiteA🌑 check_window_display_standalone🌑 +install_menu_option_SiteA🌓 launch_from_menu_option_SiteA🌑 check_window_display_standalone🌑 +install_menu_option_SiteA🌓 launch_from_launch_icon_SiteA🌑 check_window_display_standalone🌑 +install_menu_option_SiteA🌓 launch_from_chrome_apps_SiteA🌑 check_window_display_standalone🌑 +install_menu_option_SiteA🌓 launch_from_platform_shortcut_SiteA🌑 check_window_display_standalone🌑 +install_create_shortcut_windowed_SiteA🌑 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_created🌑 +install_create_shortcut_windowed_SiteA🌑 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_created🌑 +install_create_shortcut_windowed_SiteA🌑 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 +install_create_shortcut_windowed_SiteA🌑 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 +install_omnibox_icon_SiteA🌕 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_created🌑 +install_omnibox_icon_SiteA🌕 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_created🌑 +install_omnibox_icon_SiteA🌕 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 +install_omnibox_icon_SiteA🌕 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 +install_policy_app_windowed_no_shortcut_SiteA🌑 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_created🌑 +install_policy_app_windowed_no_shortcut_SiteA🌑 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_created🌑 +install_policy_app_windowed_no_shortcut_SiteA🌑 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 +install_policy_app_windowed_no_shortcut_SiteA🌑 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 +install_policy_app_windowed_shortcut_SiteA🌓 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_created🌑 +install_policy_app_windowed_shortcut_SiteA🌓 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_created🌑 +install_policy_app_windowed_shortcut_SiteA🌓 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 +install_policy_app_windowed_shortcut_SiteA🌓 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 +install_menu_option_SiteA🌓 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_created🌑 +install_menu_option_SiteA🌓 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_created🌑 +install_menu_option_SiteA🌓 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 +install_menu_option_SiteA🌓 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 +install_create_shortcut_windowed_SiteA🌑 set_open_in_tab_SiteA🌑 launch_from_menu_option_SiteA🌑 check_tab_created🌑 +install_create_shortcut_windowed_SiteA🌑 set_open_in_tab_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 +install_create_shortcut_windowed_SiteA🌑 set_open_in_tab_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 +install_create_shortcut_windowed_SiteA🌑 set_open_in_tab_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 +install_omnibox_icon_SiteA🌕 set_open_in_tab_SiteA🌓 launch_from_menu_option_SiteA🌑 check_tab_created🌑 +install_omnibox_icon_SiteA🌕 set_open_in_tab_SiteA🌓 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 +install_omnibox_icon_SiteA🌕 set_open_in_tab_SiteA🌓 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 +install_omnibox_icon_SiteA🌕 set_open_in_tab_SiteA🌓 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 +install_policy_app_windowed_no_shortcut_SiteA🌑 set_open_in_tab_SiteA🌑 launch_from_menu_option_SiteA🌑 check_tab_created🌑 +install_policy_app_windowed_no_shortcut_SiteA🌑 set_open_in_tab_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 +install_policy_app_windowed_no_shortcut_SiteA🌑 set_open_in_tab_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 +install_policy_app_windowed_no_shortcut_SiteA🌑 set_open_in_tab_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 +install_policy_app_windowed_shortcut_SiteA🌓 set_open_in_tab_SiteA🌓 launch_from_menu_option_SiteA🌑 check_tab_created🌑 +install_policy_app_windowed_shortcut_SiteA🌓 set_open_in_tab_SiteA🌓 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 +install_policy_app_windowed_shortcut_SiteA🌓 set_open_in_tab_SiteA🌓 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 +install_policy_app_windowed_shortcut_SiteA🌓 set_open_in_tab_SiteA🌓 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 +install_menu_option_SiteA🌓 set_open_in_tab_SiteA🌓 launch_from_menu_option_SiteA🌑 check_tab_created🌑 +install_menu_option_SiteA🌓 set_open_in_tab_SiteA🌓 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 +install_menu_option_SiteA🌓 set_open_in_tab_SiteA🌓 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 +install_menu_option_SiteA🌓 set_open_in_tab_SiteA🌓 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 +install_create_shortcut_windowed_SiteB🌑 launch_from_menu_option_SiteB🌑 check_window_display_minimal🌑 +install_create_shortcut_windowed_SiteB🌑 launch_from_launch_icon_SiteB🌑 check_window_display_minimal🌑 +install_create_shortcut_windowed_SiteB🌑 launch_from_chrome_apps_SiteB🌑 check_window_display_minimal🌑 +install_create_shortcut_windowed_SiteB🌑 launch_from_platform_shortcut_SiteB🌑 check_window_display_minimal🌑 +install_omnibox_icon_SiteB🌕 launch_from_menu_option_SiteB🌑 check_window_display_minimal🌑 +install_omnibox_icon_SiteB🌕 launch_from_launch_icon_SiteB🌑 check_window_display_minimal🌑 +install_omnibox_icon_SiteB🌕 launch_from_chrome_apps_SiteB🌑 check_window_display_minimal🌑 +install_omnibox_icon_SiteB🌕 launch_from_platform_shortcut_SiteB🌑 check_window_display_minimal🌑 +install_policy_app_windowed_no_shortcut_SiteB🌑 launch_from_menu_option_SiteB🌑 check_window_display_minimal🌑 +install_policy_app_windowed_no_shortcut_SiteB🌑 launch_from_launch_icon_SiteB🌑 check_window_display_minimal🌑 +install_policy_app_windowed_no_shortcut_SiteB🌑 launch_from_chrome_apps_SiteB🌑 check_window_display_minimal🌑 +install_policy_app_windowed_no_shortcut_SiteB🌑 launch_from_platform_shortcut_SiteB🌑 check_window_display_minimal🌑 +install_policy_app_windowed_shortcut_SiteB🌓 launch_from_menu_option_SiteB🌑 check_window_display_minimal🌑 +install_policy_app_windowed_shortcut_SiteB🌓 launch_from_launch_icon_SiteB🌑 check_window_display_minimal🌑 +install_policy_app_windowed_shortcut_SiteB🌓 launch_from_chrome_apps_SiteB🌑 check_window_display_minimal🌑 +install_policy_app_windowed_shortcut_SiteB🌓 launch_from_platform_shortcut_SiteB🌑 check_window_display_minimal🌑 +install_menu_option_SiteB🌓 launch_from_menu_option_SiteB🌑 check_window_display_minimal🌑 +install_menu_option_SiteB🌓 launch_from_launch_icon_SiteB🌑 check_window_display_minimal🌑 +install_menu_option_SiteB🌓 launch_from_chrome_apps_SiteB🌑 check_window_display_minimal🌑 +install_menu_option_SiteB🌓 launch_from_platform_shortcut_SiteB🌑 check_window_display_minimal🌑 +install_create_shortcut_tabbed_SiteC🌑 launch_from_menu_option_SiteC🌑 check_tab_created🌑 +install_create_shortcut_tabbed_SiteC🌑 launch_from_launch_icon_SiteC🌑 check_tab_created🌑 +install_create_shortcut_tabbed_SiteC🌑 launch_from_chrome_apps_SiteC🌑 check_tab_created🌑 +install_create_shortcut_tabbed_SiteC🌑 launch_from_platform_shortcut_SiteC🌑 check_tab_created🌑 +install_policy_app_tabbed_shortcut_SiteC🌓 launch_from_menu_option_SiteC🌑 check_tab_created🌑 +install_policy_app_tabbed_shortcut_SiteC🌓 launch_from_launch_icon_SiteC🌑 check_tab_created🌑 +install_policy_app_tabbed_shortcut_SiteC🌓 launch_from_chrome_apps_SiteC🌑 check_tab_created🌑 +install_policy_app_tabbed_shortcut_SiteC🌓 launch_from_platform_shortcut_SiteC🌑 check_tab_created🌑 +install_policy_app_tabbed_no_shortcut_SiteC🌑 launch_from_menu_option_SiteC🌑 check_tab_created🌑 +install_policy_app_tabbed_no_shortcut_SiteC🌑 launch_from_launch_icon_SiteC🌑 check_tab_created🌑 +install_policy_app_tabbed_no_shortcut_SiteC🌑 launch_from_chrome_apps_SiteC🌑 check_tab_created🌑 +install_policy_app_tabbed_no_shortcut_SiteC🌑 launch_from_platform_shortcut_SiteC🌑 check_tab_created🌑 +install_create_shortcut_windowed_SiteC🌑 launch_from_menu_option_SiteC🌑 check_window_created🌑 +install_create_shortcut_windowed_SiteC🌑 launch_from_launch_icon_SiteC🌑 check_window_created🌑 +install_create_shortcut_windowed_SiteC🌑 launch_from_chrome_apps_SiteC🌑 check_window_created🌑 +install_create_shortcut_windowed_SiteC🌑 launch_from_platform_shortcut_SiteC🌑 check_window_created🌑 +install_policy_app_windowed_no_shortcut_SiteC🌑 launch_from_menu_option_SiteC🌑 check_window_created🌑 +install_policy_app_windowed_no_shortcut_SiteC🌑 launch_from_launch_icon_SiteC🌑 check_window_created🌑 +install_policy_app_windowed_no_shortcut_SiteC🌑 launch_from_chrome_apps_SiteC🌑 check_window_created🌑 +install_policy_app_windowed_no_shortcut_SiteC🌑 launch_from_platform_shortcut_SiteC🌑 check_window_created🌑 +install_policy_app_windowed_shortcut_SiteC🌓 launch_from_menu_option_SiteC🌑 check_window_created🌑 +install_policy_app_windowed_shortcut_SiteC🌓 launch_from_launch_icon_SiteC🌑 check_window_created🌑 +install_policy_app_windowed_shortcut_SiteC🌓 launch_from_chrome_apps_SiteC🌑 check_window_created🌑 +install_policy_app_windowed_shortcut_SiteC🌓 launch_from_platform_shortcut_SiteC🌑 check_window_created🌑 +install_create_shortcut_windowed_SiteA🌑 close_pwa🌑 manifest_update_icons_SiteA🌑 check_app_in_list_icon_correct_SiteA🌑 +install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_icons_SiteA🌑 check_app_in_list_icon_correct_SiteA🌑 +install_menu_option_SiteA🌓 close_pwa🌕 manifest_update_icons_SiteA🌑 check_app_in_list_icon_correct_SiteA🌑 +install_create_shortcut_windowed_SiteA🌑 close_pwa🌑 manifest_update_icons_SiteA🌑 check_platform_shortcut_icon_correct_SiteA🌑 +install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_icons_SiteA🌑 check_platform_shortcut_icon_correct_SiteA🌑 +install_menu_option_SiteA🌓 close_pwa🌕 manifest_update_icons_SiteA🌑 check_platform_shortcut_icon_correct_SiteA🌑 +install_create_shortcut_windowed_SiteAFoo🌑 manifest_update_scope_site_a_foo_to_SiteA🌑 close_pwa🌑 launch_from_platform_shortcut_SiteAFoo🌑 close_pwa🌑 navigate_browser_SiteA🌑 check_install_icon_not_shown🌑 +install_omnibox_icon_SiteAFoo🌕 manifest_update_scope_site_a_foo_to_SiteA🌑 close_pwa🌑 launch_from_platform_shortcut_SiteAFoo🌑 close_pwa🌑 navigate_browser_SiteA🌑 check_install_icon_not_shown🌑 +install_menu_option_SiteAFoo🌓 manifest_update_scope_site_a_foo_to_SiteA🌑 close_pwa🌑 launch_from_platform_shortcut_SiteAFoo🌑 close_pwa🌑 navigate_browser_SiteA🌑 check_install_icon_not_shown🌑 +install_create_shortcut_windowed_SiteAFoo🌑 manifest_update_scope_site_a_foo_to_SiteA🌑 close_pwa🌑 launch_from_platform_shortcut_SiteAFoo🌑 close_pwa🌑 navigate_browser_SiteA🌑 check_launch_icon_shown🌑 +install_omnibox_icon_SiteAFoo🌕 manifest_update_scope_site_a_foo_to_SiteA🌑 close_pwa🌑 launch_from_platform_shortcut_SiteAFoo🌑 close_pwa🌑 navigate_browser_SiteA🌑 check_launch_icon_shown🌑 +install_menu_option_SiteAFoo🌓 manifest_update_scope_site_a_foo_to_SiteA🌑 close_pwa🌑 launch_from_platform_shortcut_SiteAFoo🌑 close_pwa🌑 navigate_browser_SiteA🌑 check_launch_icon_shown🌑 +install_create_shortcut_windowed_SiteAFoo🌑 close_pwa🌑 manifest_update_scope_site_a_foo_to_SiteA🌑 navigate_browser_SiteABar🌑 check_install_icon_not_shown🌑 +install_omnibox_icon_SiteAFoo🌕 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteA🌑 navigate_browser_SiteABar🌑 check_install_icon_not_shown🌑 +install_menu_option_SiteAFoo🌓 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteA🌑 navigate_browser_SiteABar🌑 check_install_icon_not_shown🌑 +install_create_shortcut_windowed_SiteAFoo🌑 close_pwa🌑 manifest_update_scope_site_a_foo_to_SiteA🌑 navigate_browser_SiteABar🌑 check_launch_icon_shown🌑 +install_omnibox_icon_SiteAFoo🌕 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteA🌑 navigate_browser_SiteABar🌑 check_launch_icon_shown🌑 +install_menu_option_SiteAFoo🌓 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteA🌑 navigate_browser_SiteABar🌑 check_launch_icon_shown🌑 +install_create_shortcut_windowed_SiteAFoo🌑 navigate_browser_SiteABar🌑 check_install_icon_shown🌑 +install_omnibox_icon_SiteAFoo🌕 navigate_browser_SiteABar🌕 check_install_icon_shown🌕 +install_policy_app_windowed_no_shortcut_SiteAFoo🌑 navigate_browser_SiteABar🌑 check_install_icon_shown🌑 +install_policy_app_windowed_shortcut_SiteAFoo🌓 navigate_browser_SiteABar🌕 check_install_icon_shown🌕 +install_menu_option_SiteAFoo🌓 navigate_browser_SiteABar🌕 check_install_icon_shown🌕 +install_create_shortcut_windowed_SiteAFoo🌑 navigate_browser_SiteABar🌑 check_launch_icon_not_shown🌑 +install_omnibox_icon_SiteAFoo🌕 navigate_browser_SiteABar🌕 check_launch_icon_not_shown🌕 +install_policy_app_windowed_no_shortcut_SiteAFoo🌑 navigate_browser_SiteABar🌑 check_launch_icon_not_shown🌑 +install_policy_app_windowed_shortcut_SiteAFoo🌓 navigate_browser_SiteABar🌕 check_launch_icon_not_shown🌕 +install_menu_option_SiteAFoo🌓 navigate_browser_SiteABar🌕 check_launch_icon_not_shown🌕 +install_create_shortcut_windowed_SiteAFoo🌑 close_pwa🌑 manifest_update_scope_site_a_foo_to_SiteA🌑 navigate_browser_SiteAFoo🌑 check_install_icon_not_shown🌑 +install_omnibox_icon_SiteAFoo🌕 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteA🌑 navigate_browser_SiteAFoo🌑 check_install_icon_not_shown🌑 +install_menu_option_SiteAFoo🌓 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteA🌑 navigate_browser_SiteAFoo🌑 check_install_icon_not_shown🌑 +install_create_shortcut_windowed_SiteAFoo🌑 close_pwa🌑 manifest_update_scope_site_a_foo_to_SiteA🌑 navigate_browser_SiteAFoo🌑 check_launch_icon_shown🌑 +install_omnibox_icon_SiteAFoo🌕 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteA🌑 navigate_browser_SiteAFoo🌑 check_launch_icon_shown🌑 +install_menu_option_SiteAFoo🌓 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteA🌑 navigate_browser_SiteAFoo🌑 check_launch_icon_shown🌑 +install_create_shortcut_windowed_SiteA🌑 navigate_browser_SiteAFoo🌑 check_install_icon_not_shown🌑 +install_omnibox_icon_SiteA🌕 navigate_browser_SiteAFoo🌕 check_install_icon_not_shown🌕 +install_policy_app_windowed_no_shortcut_SiteA🌑 navigate_browser_SiteAFoo🌑 check_install_icon_not_shown🌑 +install_policy_app_windowed_shortcut_SiteA🌓 navigate_browser_SiteAFoo🌕 check_install_icon_not_shown🌕 +install_menu_option_SiteA🌓 navigate_browser_SiteAFoo🌕 check_install_icon_not_shown🌕 +install_create_shortcut_windowed_SiteA🌑 navigate_browser_SiteAFoo🌑 check_launch_icon_shown🌑 +install_omnibox_icon_SiteA🌕 navigate_browser_SiteAFoo🌕 check_launch_icon_shown🌕 +install_policy_app_windowed_no_shortcut_SiteA🌑 navigate_browser_SiteAFoo🌑 check_launch_icon_shown🌑 +install_policy_app_windowed_shortcut_SiteA🌓 navigate_browser_SiteAFoo🌕 check_launch_icon_shown🌕 +install_menu_option_SiteA🌓 navigate_browser_SiteAFoo🌕 check_launch_icon_shown🌕 +navigate_browser_SiteAFoo🌕 check_install_icon_shown🌕 +switch_incognito_profile🌑 navigate_browser_SiteA🌑 check_create_shortcut_not_shown🌑 +navigate_browser_SiteA🌕 check_app_not_in_list_SiteA🌕 +navigate_browser_SiteA🌕 check_create_shortcut_shown🌑 +navigate_browser_SiteA🌕 check_platform_shortcut_not_exists_SiteA🌑 +install_create_shortcut_windowed_SiteA🌑 navigate_browser_SiteB🌑 check_install_icon_shown🌑 +install_omnibox_icon_SiteA🌕 navigate_browser_SiteB🌕 check_install_icon_shown🌕 +install_menu_option_SiteA🌓 navigate_browser_SiteB🌕 check_install_icon_shown🌕 +install_create_shortcut_windowed_SiteA🌑 navigate_browser_SiteB🌑 check_launch_icon_not_shown🌑 +install_omnibox_icon_SiteA🌕 navigate_browser_SiteB🌕 check_launch_icon_not_shown🌕 +install_menu_option_SiteA🌓 navigate_browser_SiteB🌕 check_launch_icon_not_shown🌕 +switch_incognito_profile🌑 navigate_browser_SiteC🌑 check_create_shortcut_not_shown🌑 +navigate_browser_SiteC🌕 check_app_not_in_list_SiteA🌕 +navigate_browser_SiteC🌕 check_create_shortcut_shown🌑 +navigate_browser_SiteC🌕 check_install_icon_not_shown🌕 +navigate_browser_SiteC🌕 check_platform_shortcut_not_exists_SiteA🌑 +navigate_crashed_url🌑 check_create_shortcut_not_shown🌑 +navigate_crashed_url🌑 check_install_icon_not_shown🌑 +navigate_notfound_url🌑 check_create_shortcut_not_shown🌑 +navigate_notfound_url🌑 check_install_icon_not_shown🌑 +install_create_shortcut_windowed_SiteAFoo🌑 close_pwa🌑 manifest_update_scope_site_a_foo_to_SiteA🌑 launch_from_menu_option_SiteAFoo🌑 navigate_pwa_site_a_foo_to_SiteABar🌑 check_no_toolbar🌑 +install_create_shortcut_windowed_SiteAFoo🌑 close_pwa🌑 manifest_update_scope_site_a_foo_to_SiteA🌑 launch_from_launch_icon_SiteAFoo🌑 navigate_pwa_site_a_foo_to_SiteABar🌑 check_no_toolbar🌑 +install_create_shortcut_windowed_SiteAFoo🌑 close_pwa🌑 manifest_update_scope_site_a_foo_to_SiteA🌑 launch_from_chrome_apps_SiteAFoo🌑 navigate_pwa_site_a_foo_to_SiteABar🌑 check_no_toolbar🌑 +install_create_shortcut_windowed_SiteAFoo🌑 close_pwa🌑 manifest_update_scope_site_a_foo_to_SiteA🌑 launch_from_platform_shortcut_SiteAFoo🌑 navigate_pwa_site_a_foo_to_SiteABar🌑 check_no_toolbar🌑 +install_omnibox_icon_SiteAFoo🌕 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteA🌑 launch_from_menu_option_SiteAFoo🌑 navigate_pwa_site_a_foo_to_SiteABar🌑 check_no_toolbar🌑 +install_omnibox_icon_SiteAFoo🌕 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteA🌑 launch_from_launch_icon_SiteAFoo🌑 navigate_pwa_site_a_foo_to_SiteABar🌑 check_no_toolbar🌑 +install_omnibox_icon_SiteAFoo🌕 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteA🌑 launch_from_chrome_apps_SiteAFoo🌑 navigate_pwa_site_a_foo_to_SiteABar🌑 check_no_toolbar🌑 +install_omnibox_icon_SiteAFoo🌕 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteA🌑 launch_from_platform_shortcut_SiteAFoo🌑 navigate_pwa_site_a_foo_to_SiteABar🌑 check_no_toolbar🌑 +install_menu_option_SiteAFoo🌓 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteA🌑 launch_from_menu_option_SiteAFoo🌑 navigate_pwa_site_a_foo_to_SiteABar🌑 check_no_toolbar🌑 +install_menu_option_SiteAFoo🌓 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteA🌑 launch_from_launch_icon_SiteAFoo🌑 navigate_pwa_site_a_foo_to_SiteABar🌑 check_no_toolbar🌑 +install_menu_option_SiteAFoo🌓 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteA🌑 launch_from_chrome_apps_SiteAFoo🌑 navigate_pwa_site_a_foo_to_SiteABar🌑 check_no_toolbar🌑 +install_menu_option_SiteAFoo🌓 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteA🌑 launch_from_platform_shortcut_SiteAFoo🌑 navigate_pwa_site_a_foo_to_SiteABar🌑 check_no_toolbar🌑 +install_create_shortcut_windowed_SiteA🌑 navigate_pwa_site_a_to_SiteB🌑 check_toolbar🌑 +install_omnibox_icon_SiteA🌕 navigate_pwa_site_a_to_SiteB🌑 check_toolbar🌑 +install_menu_option_SiteA🌓 navigate_pwa_site_a_to_SiteB🌑 check_toolbar🌑 +install_create_shortcut_windowed_SiteA🌑 navigate_pwa_site_a_to_SiteB🌑 check_window_title_is_SiteA🌑 +install_omnibox_icon_SiteA🌕 navigate_pwa_site_a_to_SiteB🌑 check_window_title_is_SiteA🌑 +install_menu_option_SiteA🌓 navigate_pwa_site_a_to_SiteB🌑 check_window_title_is_SiteA🌑 +install_create_shortcut_windowed_SiteA🌑 open_in_chrome🌑 check_tab_created🌑 +install_omnibox_icon_SiteA🌕 open_in_chrome🌑 check_tab_created🌑 +install_menu_option_SiteA🌓 open_in_chrome🌑 check_tab_created🌑 +install_create_shortcut_windowed_SiteA🌑 navigate_pwa_site_a_to_SiteB🌑 open_in_chrome🌑 check_tab_created🌑 +install_omnibox_icon_SiteA🌕 navigate_pwa_site_a_to_SiteB🌑 open_in_chrome🌑 check_tab_created🌑 +install_menu_option_SiteA🌓 navigate_pwa_site_a_to_SiteB🌑 open_in_chrome🌑 check_tab_created🌑 +install_create_shortcut_tabbed_SiteA🌑 install_policy_app_windowed_no_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_app_in_list_tabbed_SiteA🌑 +install_create_shortcut_tabbed_SiteA🌑 install_policy_app_tabbed_no_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_app_in_list_tabbed_SiteA🌑 +install_create_shortcut_tabbed_SiteA🌑 install_policy_app_windowed_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_app_in_list_tabbed_SiteA🌑 +install_create_shortcut_tabbed_SiteA🌑 install_policy_app_tabbed_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_app_in_list_tabbed_SiteA🌑 +install_create_shortcut_tabbed_SiteA🌑 install_policy_app_windowed_no_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 +install_create_shortcut_tabbed_SiteA🌑 install_policy_app_tabbed_no_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 +install_create_shortcut_tabbed_SiteA🌑 install_policy_app_windowed_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 +install_create_shortcut_tabbed_SiteA🌑 install_policy_app_tabbed_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 +install_create_shortcut_windowed_SiteA🌑 install_policy_app_windowed_no_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_app_in_list_windowed_SiteA🌑 +install_create_shortcut_windowed_SiteA🌑 install_policy_app_tabbed_no_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_app_in_list_windowed_SiteA🌑 +install_create_shortcut_windowed_SiteA🌑 install_policy_app_windowed_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_app_in_list_windowed_SiteA🌑 +install_create_shortcut_windowed_SiteA🌑 install_policy_app_tabbed_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_app_in_list_windowed_SiteA🌑 +install_omnibox_icon_SiteA🌕 install_policy_app_windowed_no_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_app_in_list_windowed_SiteA🌑 +install_omnibox_icon_SiteA🌕 install_policy_app_tabbed_no_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_app_in_list_windowed_SiteA🌑 +install_omnibox_icon_SiteA🌕 install_policy_app_windowed_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_app_in_list_windowed_SiteA🌑 +install_omnibox_icon_SiteA🌕 install_policy_app_tabbed_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_app_in_list_windowed_SiteA🌑 +install_menu_option_SiteA🌓 install_policy_app_windowed_no_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_app_in_list_windowed_SiteA🌑 +install_menu_option_SiteA🌓 install_policy_app_tabbed_no_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_app_in_list_windowed_SiteA🌑 +install_menu_option_SiteA🌓 install_policy_app_windowed_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_app_in_list_windowed_SiteA🌑 +install_menu_option_SiteA🌓 install_policy_app_tabbed_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_app_in_list_windowed_SiteA🌑 +install_create_shortcut_windowed_SiteA🌑 install_policy_app_windowed_no_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 +install_create_shortcut_windowed_SiteA🌑 install_policy_app_tabbed_no_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 +install_create_shortcut_windowed_SiteA🌑 install_policy_app_windowed_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 +install_create_shortcut_windowed_SiteA🌑 install_policy_app_tabbed_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 +install_omnibox_icon_SiteA🌕 install_policy_app_windowed_no_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 +install_omnibox_icon_SiteA🌕 install_policy_app_tabbed_no_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 +install_omnibox_icon_SiteA🌕 install_policy_app_windowed_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_platform_shortcut_exists_SiteA🌑 +install_omnibox_icon_SiteA🌕 install_policy_app_tabbed_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_platform_shortcut_exists_SiteA🌑 +install_menu_option_SiteA🌓 install_policy_app_windowed_no_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 +install_menu_option_SiteA🌓 install_policy_app_tabbed_no_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 +install_menu_option_SiteA🌓 install_policy_app_windowed_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_platform_shortcut_exists_SiteA🌑 +install_menu_option_SiteA🌓 install_policy_app_tabbed_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_platform_shortcut_exists_SiteA🌑 +install_policy_app_windowed_no_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_app_not_in_list_SiteA🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_app_not_in_list_SiteA🌑 +install_policy_app_windowed_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_app_not_in_list_SiteA🌕 +install_policy_app_tabbed_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_app_not_in_list_SiteA🌕 +install_policy_app_tabbed_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 navigate_browser_SiteA🌕 check_install_icon_shown🌕 +install_policy_app_tabbed_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 navigate_browser_SiteA🌕 check_launch_icon_not_shown🌕 +install_policy_app_windowed_no_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_platform_shortcut_not_exists_SiteA🌑 check_app_not_in_list_SiteA🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_platform_shortcut_not_exists_SiteA🌑 check_app_not_in_list_SiteA🌑 +install_policy_app_windowed_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_platform_shortcut_not_exists_SiteA🌑 check_app_not_in_list_SiteA🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_platform_shortcut_not_exists_SiteA🌑 check_app_not_in_list_SiteA🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 install_create_shortcut_windowed_SiteA🌑 uninstall_policy_app_SiteA🌑 check_app_in_list_windowed_SiteA🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 install_omnibox_icon_SiteA🌕 uninstall_policy_app_SiteA🌕 check_app_in_list_windowed_SiteA🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 install_menu_option_SiteA🌓 uninstall_policy_app_SiteA🌕 check_app_in_list_windowed_SiteA🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 install_create_shortcut_windowed_SiteA🌑 uninstall_policy_app_SiteA🌑 check_app_in_list_windowed_SiteA🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 install_omnibox_icon_SiteA🌑 uninstall_policy_app_SiteA🌑 check_app_in_list_windowed_SiteA🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 install_menu_option_SiteA🌑 uninstall_policy_app_SiteA🌑 check_app_in_list_windowed_SiteA🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 install_create_shortcut_windowed_SiteA🌑 uninstall_policy_app_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 install_omnibox_icon_SiteA🌕 uninstall_policy_app_SiteA🌕 check_platform_shortcut_exists_SiteA🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 install_menu_option_SiteA🌓 uninstall_policy_app_SiteA🌕 check_platform_shortcut_exists_SiteA🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 install_create_shortcut_windowed_SiteA🌑 uninstall_policy_app_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 install_omnibox_icon_SiteA🌑 uninstall_policy_app_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 install_menu_option_SiteA🌑 uninstall_policy_app_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 +install_create_shortcut_windowed_SiteA🌑 set_app_badge_SiteA🌑 check_app_badge_has_value_SiteA🌑 +install_omnibox_icon_SiteA🌕 set_app_badge_SiteA🌑 check_app_badge_has_value_SiteA🌑 +install_menu_option_SiteA🌓 set_app_badge_SiteA🌑 check_app_badge_has_value_SiteA🌑 +navigate_browser_SiteA🌕 set_app_badge_SiteA🌑 check_platform_shortcut_not_exists_SiteA🌑 +install_create_shortcut_windowed_SiteA🌑 set_open_in_tab_SiteA🌑 check_app_in_list_tabbed_SiteA🌑 +install_omnibox_icon_SiteA🌕 set_open_in_tab_SiteA🌓 check_app_in_list_tabbed_SiteA🌑 +install_menu_option_SiteA🌓 set_open_in_tab_SiteA🌓 check_app_in_list_tabbed_SiteA🌑 +install_create_shortcut_windowed_SiteA🌑 set_open_in_tab_SiteA🌑 navigate_browser_SiteA🌑 check_install_icon_shown🌑 +install_omnibox_icon_SiteA🌕 set_open_in_tab_SiteA🌓 navigate_browser_SiteA🌕 check_install_icon_shown🌕 +install_menu_option_SiteA🌓 set_open_in_tab_SiteA🌓 navigate_browser_SiteA🌕 check_install_icon_shown🌕 +install_create_shortcut_tabbed_SiteA🌑 set_open_in_window_SiteA🌑 check_app_in_list_windowed_SiteA🌑 +install_create_shortcut_tabbed_SiteA🌑 set_open_in_window_SiteA🌑 navigate_browser_SiteA🌑 check_install_icon_not_shown🌑 +install_create_shortcut_tabbed_SiteA🌑 set_open_in_window_SiteA🌑 navigate_browser_SiteA🌑 check_launch_icon_shown🌑 +install_create_shortcut_windowed_SiteA🌑 switch_incognito_profile🌑 navigate_browser_SiteA🌑 check_launch_icon_not_shown🌑 +install_omnibox_icon_SiteA🌕 switch_incognito_profile🌑 navigate_browser_SiteA🌑 check_launch_icon_not_shown🌑 +install_menu_option_SiteA🌓 switch_incognito_profile🌑 navigate_browser_SiteA🌑 check_launch_icon_not_shown🌑 +switch_incognito_profile🌑 navigate_browser_SiteA🌑 check_install_icon_not_shown🌑 +install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 check_app_in_list_not_locally_installed_SiteA🌑 +install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 check_app_in_list_not_locally_installed_SiteA🌓 +install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 check_app_in_list_not_locally_installed_SiteA🌓 +install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 check_app_in_list_not_locally_installed_SiteA🌑 +install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 check_platform_shortcut_not_exists_SiteA🌑 +install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 check_platform_shortcut_not_exists_SiteA🌑 +install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 check_platform_shortcut_not_exists_SiteA🌑 +install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 check_platform_shortcut_not_exists_SiteA🌑 +install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 navigate_browser_SiteA🌑 check_install_icon_shown🌑 +install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 navigate_browser_SiteA🌕 check_install_icon_shown🌕 +install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 navigate_browser_SiteA🌕 check_install_icon_shown🌕 +install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 navigate_browser_SiteA🌑 check_launch_icon_not_shown🌑 +install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 navigate_browser_SiteA🌕 check_launch_icon_not_shown🌕 +install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 navigate_browser_SiteA🌕 check_launch_icon_not_shown🌕 +install_create_shortcut_windowed_SiteC🌑 switch_profile_clients_UserAClient2🌑 check_app_in_list_not_locally_installed_SiteC🌑 +install_create_shortcut_tabbed_SiteC🌑 switch_profile_clients_UserAClient2🌑 check_app_in_list_not_locally_installed_SiteC🌑 +install_create_shortcut_windowed_SiteC🌑 switch_profile_clients_UserAClient2🌑 check_platform_shortcut_not_exists_SiteC🌑 +install_create_shortcut_tabbed_SiteC🌑 switch_profile_clients_UserAClient2🌑 check_platform_shortcut_not_exists_SiteC🌑 +sync_turn_off🌕 install_create_shortcut_windowed_SiteA🌑 sync_turn_on🌑 switch_profile_clients_UserAClient2🌑 check_app_in_list_not_locally_installed_SiteA🌑 +sync_turn_off🌕 install_omnibox_icon_SiteA🌕 sync_turn_on🌕 switch_profile_clients_UserAClient2🌕 check_app_in_list_not_locally_installed_SiteA🌓 +sync_turn_off🌕 install_menu_option_SiteA🌓 sync_turn_on🌕 switch_profile_clients_UserAClient2🌕 check_app_in_list_not_locally_installed_SiteA🌓 +sync_turn_off🌕 install_create_shortcut_tabbed_SiteA🌑 sync_turn_on🌑 switch_profile_clients_UserAClient2🌑 check_app_in_list_not_locally_installed_SiteA🌑 +sync_turn_off🌕 install_create_shortcut_windowed_SiteC🌑 sync_turn_on🌑 switch_profile_clients_UserAClient2🌑 check_app_in_list_not_locally_installed_SiteC🌑 +sync_turn_off🌕 install_create_shortcut_tabbed_SiteC🌑 sync_turn_on🌑 switch_profile_clients_UserAClient2🌑 check_app_in_list_not_locally_installed_SiteC🌑 +install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 sync_turn_off🌑 uninstall_from_app_list_SiteA🌑 sync_turn_on🌑 switch_profile_clients_UserAClient1🌑 check_app_not_in_list_SiteA🌑 +install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 sync_turn_off🌕 uninstall_from_app_list_SiteA🌑 sync_turn_on🌑 switch_profile_clients_UserAClient1🌑 check_app_not_in_list_SiteA🌑 +install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 sync_turn_off🌕 uninstall_from_app_list_SiteA🌑 sync_turn_on🌑 switch_profile_clients_UserAClient1🌑 check_app_not_in_list_SiteA🌑 +install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 sync_turn_off🌑 uninstall_from_app_list_SiteA🌑 sync_turn_on🌑 switch_profile_clients_UserAClient1🌑 check_app_not_in_list_SiteA🌑 +install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 sync_turn_off🌑 uninstall_from_app_list_SiteA🌑 sync_turn_on🌑 switch_profile_clients_UserAClient1🌑 check_platform_shortcut_not_exists_SiteA🌑 +install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 sync_turn_off🌕 uninstall_from_app_list_SiteA🌑 sync_turn_on🌑 switch_profile_clients_UserAClient1🌑 check_platform_shortcut_not_exists_SiteA🌑 +install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 sync_turn_off🌕 uninstall_from_app_list_SiteA🌑 sync_turn_on🌑 switch_profile_clients_UserAClient1🌑 check_platform_shortcut_not_exists_SiteA🌑 +install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 sync_turn_off🌑 uninstall_from_app_list_SiteA🌑 sync_turn_on🌑 switch_profile_clients_UserAClient1🌑 check_platform_shortcut_not_exists_SiteA🌑 +install_create_shortcut_windowed_SiteA🌑 uninstall_from_app_list_SiteA🌑 check_app_not_in_list_SiteA🌑 +install_create_shortcut_windowed_SiteA🌑 uninstall_from_menu_SiteA🌑 check_app_not_in_list_SiteA🌑 +install_omnibox_icon_SiteA🌕 uninstall_from_app_list_SiteA🌑 check_app_not_in_list_SiteA🌑 +install_omnibox_icon_SiteA🌕 uninstall_from_menu_SiteA🌕 check_app_not_in_list_SiteA🌕 +install_menu_option_SiteA🌓 uninstall_from_app_list_SiteA🌑 check_app_not_in_list_SiteA🌑 +install_menu_option_SiteA🌓 uninstall_from_menu_SiteA🌕 check_app_not_in_list_SiteA🌕 +install_create_shortcut_tabbed_SiteA🌑 uninstall_from_app_list_SiteA🌑 check_app_not_in_list_SiteA🌑 +install_create_shortcut_tabbed_SiteA🌑 uninstall_from_menu_SiteA🌑 check_app_not_in_list_SiteA🌑 +install_create_shortcut_windowed_SiteA🌑 uninstall_from_app_list_SiteA🌑 navigate_browser_SiteA🌑 check_install_icon_shown🌑 +install_create_shortcut_windowed_SiteA🌑 uninstall_from_menu_SiteA🌑 navigate_browser_SiteA🌑 check_install_icon_shown🌑 +install_omnibox_icon_SiteA🌕 uninstall_from_app_list_SiteA🌑 navigate_browser_SiteA🌑 check_install_icon_shown🌑 +install_omnibox_icon_SiteA🌕 uninstall_from_menu_SiteA🌕 navigate_browser_SiteA🌕 check_install_icon_shown🌕 +install_menu_option_SiteA🌓 uninstall_from_app_list_SiteA🌑 navigate_browser_SiteA🌑 check_install_icon_shown🌑 +install_menu_option_SiteA🌓 uninstall_from_menu_SiteA🌕 navigate_browser_SiteA🌕 check_install_icon_shown🌕 +install_create_shortcut_tabbed_SiteA🌑 uninstall_from_app_list_SiteA🌑 navigate_browser_SiteA🌑 check_install_icon_shown🌑 +install_create_shortcut_tabbed_SiteA🌑 uninstall_from_menu_SiteA🌑 navigate_browser_SiteA🌑 check_install_icon_shown🌑 +install_create_shortcut_windowed_SiteA🌑 uninstall_from_app_list_SiteA🌑 navigate_browser_SiteA🌑 check_launch_icon_not_shown🌑 +install_create_shortcut_windowed_SiteA🌑 uninstall_from_menu_SiteA🌑 navigate_browser_SiteA🌑 check_launch_icon_not_shown🌑 +install_omnibox_icon_SiteA🌕 uninstall_from_app_list_SiteA🌑 navigate_browser_SiteA🌑 check_launch_icon_not_shown🌑 +install_omnibox_icon_SiteA🌕 uninstall_from_menu_SiteA🌕 navigate_browser_SiteA🌕 check_launch_icon_not_shown🌕 +install_menu_option_SiteA🌓 uninstall_from_app_list_SiteA🌑 navigate_browser_SiteA🌑 check_launch_icon_not_shown🌑 +install_menu_option_SiteA🌓 uninstall_from_menu_SiteA🌕 navigate_browser_SiteA🌕 check_launch_icon_not_shown🌕 +install_create_shortcut_tabbed_SiteA🌑 uninstall_from_app_list_SiteA🌑 navigate_browser_SiteA🌑 check_launch_icon_not_shown🌑 +install_create_shortcut_tabbed_SiteA🌑 uninstall_from_menu_SiteA🌑 navigate_browser_SiteA🌑 check_launch_icon_not_shown🌑 +install_create_shortcut_windowed_SiteA🌑 uninstall_from_app_list_SiteA🌑 check_platform_shortcut_not_exists_SiteA🌑 +install_create_shortcut_windowed_SiteA🌑 uninstall_from_menu_SiteA🌑 check_platform_shortcut_not_exists_SiteA🌑 +install_omnibox_icon_SiteA🌕 uninstall_from_app_list_SiteA🌑 check_platform_shortcut_not_exists_SiteA🌑 +install_omnibox_icon_SiteA🌕 uninstall_from_menu_SiteA🌕 check_platform_shortcut_not_exists_SiteA🌑 +install_menu_option_SiteA🌓 uninstall_from_app_list_SiteA🌑 check_platform_shortcut_not_exists_SiteA🌑 +install_menu_option_SiteA🌓 uninstall_from_menu_SiteA🌕 check_platform_shortcut_not_exists_SiteA🌑 +install_create_shortcut_tabbed_SiteA🌑 uninstall_from_app_list_SiteA🌑 check_platform_shortcut_not_exists_SiteA🌑 +install_create_shortcut_tabbed_SiteA🌑 uninstall_from_menu_SiteA🌑 check_platform_shortcut_not_exists_SiteA🌑 +install_create_shortcut_windowed_SiteC🌑 uninstall_from_app_list_SiteC🌑 check_app_not_in_list_SiteA🌑 +install_create_shortcut_windowed_SiteC🌑 uninstall_from_menu_SiteC🌑 check_app_not_in_list_SiteA🌑 +install_create_shortcut_tabbed_SiteC🌑 uninstall_from_app_list_SiteC🌑 check_app_not_in_list_SiteA🌑 +install_create_shortcut_tabbed_SiteC🌑 uninstall_from_menu_SiteC🌑 check_app_not_in_list_SiteA🌑 +install_create_shortcut_windowed_SiteC🌑 uninstall_from_app_list_SiteC🌑 navigate_browser_SiteC🌑 check_launch_icon_not_shown🌑 +install_create_shortcut_windowed_SiteC🌑 uninstall_from_menu_SiteC🌑 navigate_browser_SiteC🌑 check_launch_icon_not_shown🌑 +install_create_shortcut_tabbed_SiteC🌑 uninstall_from_app_list_SiteC🌑 navigate_browser_SiteC🌑 check_launch_icon_not_shown🌑 +install_create_shortcut_tabbed_SiteC🌑 uninstall_from_menu_SiteC🌑 navigate_browser_SiteC🌑 check_launch_icon_not_shown🌑 +install_create_shortcut_windowed_SiteC🌑 uninstall_from_app_list_SiteC🌑 check_platform_shortcut_not_exists_SiteC🌑 +install_create_shortcut_windowed_SiteC🌑 uninstall_from_menu_SiteC🌑 check_platform_shortcut_not_exists_SiteC🌑 +install_create_shortcut_tabbed_SiteC🌑 uninstall_from_app_list_SiteC🌑 check_platform_shortcut_not_exists_SiteC🌑 +install_create_shortcut_tabbed_SiteC🌑 uninstall_from_menu_SiteC🌑 check_platform_shortcut_not_exists_SiteC🌑 +install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 uninstall_from_app_list_SiteA🌑 check_app_not_in_list_SiteA🌑 +install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 uninstall_from_app_list_SiteA🌑 check_app_not_in_list_SiteA🌑 +install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 uninstall_from_app_list_SiteA🌑 check_app_not_in_list_SiteA🌑 +install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 uninstall_from_app_list_SiteA🌑 check_app_not_in_list_SiteA🌑 +install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 uninstall_from_app_list_SiteA🌑 switch_profile_clients_UserAClient1🌑 check_app_not_in_list_SiteA🌑 +install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 uninstall_from_app_list_SiteA🌑 switch_profile_clients_UserAClient1🌑 check_app_not_in_list_SiteA🌑 +install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 uninstall_from_app_list_SiteA🌑 switch_profile_clients_UserAClient1🌑 check_app_not_in_list_SiteA🌑 +install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 uninstall_from_app_list_SiteA🌑 switch_profile_clients_UserAClient1🌑 check_app_not_in_list_SiteA🌑
diff --git a/chrome/test/webapps/coverage/coverage_mac.tsv b/chrome/test/webapps/coverage/coverage_mac.tsv index 21fa94ba8..d083c8b 100644 --- a/chrome/test/webapps/coverage/coverage_mac.tsv +++ b/chrome/test/webapps/coverage/coverage_mac.tsv
@@ -1,841 +1,841 @@ -# This is a generated file. -# Full coverage: 14%, with partial coverage: 24% -install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 chrome_update🌑 check_app_in_list_not_locally_installed_SiteA🌑 -install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 chrome_update🌑 check_app_in_list_not_locally_installed_SiteA🌑 -install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 chrome_update🌑 check_app_in_list_not_locally_installed_SiteA🌑 -install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 chrome_update🌑 check_app_in_list_not_locally_installed_SiteA🌑 -install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteA🌑 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 -install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 install_locally_SiteA🌓 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 -install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 install_locally_SiteA🌓 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 -install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteA🌑 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 -install_create_shortcut_windowed_SiteA🌑 uninstall_from_app_list_SiteA🌑 chrome_update🌑 check_app_not_in_list_SiteA🌑 -install_create_shortcut_windowed_SiteA🌑 uninstall_from_menu_SiteA🌑 chrome_update🌑 check_app_not_in_list_SiteA🌑 -install_omnibox_icon_SiteA🌕 uninstall_from_app_list_SiteA🌑 chrome_update🌑 check_app_not_in_list_SiteA🌑 -install_omnibox_icon_SiteA🌕 uninstall_from_menu_SiteA🌕 chrome_update🌑 check_app_not_in_list_SiteA🌑 -install_menu_option_SiteA🌓 uninstall_from_app_list_SiteA🌑 chrome_update🌑 check_app_not_in_list_SiteA🌑 -install_menu_option_SiteA🌓 uninstall_from_menu_SiteA🌕 chrome_update🌑 check_app_not_in_list_SiteA🌑 -install_create_shortcut_tabbed_SiteA🌑 uninstall_from_app_list_SiteA🌑 chrome_update🌑 check_app_not_in_list_SiteA🌑 -install_create_shortcut_tabbed_SiteA🌑 uninstall_from_menu_SiteA🌑 chrome_update🌑 check_app_not_in_list_SiteA🌑 -install_create_shortcut_windowed_SiteA🌑 uninstall_from_app_list_SiteA🌑 chrome_update🌑 check_platform_shortcut_not_exists_SiteA🌑 -install_create_shortcut_windowed_SiteA🌑 uninstall_from_menu_SiteA🌑 chrome_update🌑 check_platform_shortcut_not_exists_SiteA🌑 -install_omnibox_icon_SiteA🌕 uninstall_from_app_list_SiteA🌑 chrome_update🌑 check_platform_shortcut_not_exists_SiteA🌑 -install_omnibox_icon_SiteA🌕 uninstall_from_menu_SiteA🌕 chrome_update🌑 check_platform_shortcut_not_exists_SiteA🌑 -install_menu_option_SiteA🌓 uninstall_from_app_list_SiteA🌑 chrome_update🌑 check_platform_shortcut_not_exists_SiteA🌑 -install_menu_option_SiteA🌓 uninstall_from_menu_SiteA🌕 chrome_update🌑 check_platform_shortcut_not_exists_SiteA🌑 -install_create_shortcut_tabbed_SiteA🌑 uninstall_from_app_list_SiteA🌑 chrome_update🌑 check_platform_shortcut_not_exists_SiteA🌑 -install_create_shortcut_tabbed_SiteA🌑 uninstall_from_menu_SiteA🌑 chrome_update🌑 check_platform_shortcut_not_exists_SiteA🌑 -install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteA🌑 chrome_update🌑 check_app_in_list_tabbed_SiteA🌑 -install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteA🌑 chrome_update🌑 check_app_in_list_windowed_SiteA🌑 -install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 install_locally_SiteA🌓 chrome_update🌑 check_app_in_list_windowed_SiteA🌑 -install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 install_locally_SiteA🌓 chrome_update🌑 check_app_in_list_windowed_SiteA🌑 -install_create_shortcut_windowed_SiteC🌑 switch_profile_clients_UserAClient2🌑 chrome_update🌑 check_app_in_list_not_locally_installed_SiteC🌑 -install_create_shortcut_tabbed_SiteC🌑 switch_profile_clients_UserAClient2🌑 chrome_update🌑 check_app_in_list_not_locally_installed_SiteC🌑 -install_policy_app_windowed_no_shortcut_SiteA🌑 chrome_update🌑 check_platform_shortcut_not_exists_SiteA🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 chrome_update🌑 check_platform_shortcut_not_exists_SiteA🌑 -install_policy_app_windowed_no_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 chrome_update🌑 check_app_not_in_list_SiteA🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 chrome_update🌑 check_app_not_in_list_SiteA🌑 -install_policy_app_windowed_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 chrome_update🌑 check_app_not_in_list_SiteA🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 chrome_update🌑 check_app_not_in_list_SiteA🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 install_create_shortcut_windowed_SiteA🌑 chrome_update🌑 check_app_in_list_windowed_SiteA🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 install_omnibox_icon_SiteA🌕 chrome_update🌑 check_app_in_list_windowed_SiteA🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 install_menu_option_SiteA🌓 chrome_update🌑 check_app_in_list_windowed_SiteA🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 install_create_shortcut_windowed_SiteA🌑 chrome_update🌑 check_app_in_list_windowed_SiteA🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 install_omnibox_icon_SiteA🌑 chrome_update🌑 check_app_in_list_windowed_SiteA🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 install_menu_option_SiteA🌑 chrome_update🌑 check_app_in_list_windowed_SiteA🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 install_create_shortcut_windowed_SiteA🌑 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 install_omnibox_icon_SiteA🌕 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 install_menu_option_SiteA🌓 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 install_create_shortcut_windowed_SiteA🌑 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 install_omnibox_icon_SiteA🌑 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 install_menu_option_SiteA🌑 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 install_create_shortcut_windowed_SiteA🌑 uninstall_policy_app_SiteA🌑 chrome_update🌑 check_app_in_list_windowed_SiteA🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 install_omnibox_icon_SiteA🌕 uninstall_policy_app_SiteA🌕 chrome_update🌑 check_app_in_list_windowed_SiteA🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 install_menu_option_SiteA🌓 uninstall_policy_app_SiteA🌕 chrome_update🌑 check_app_in_list_windowed_SiteA🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 install_create_shortcut_windowed_SiteA🌑 uninstall_policy_app_SiteA🌑 chrome_update🌑 check_app_in_list_windowed_SiteA🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 install_omnibox_icon_SiteA🌑 uninstall_policy_app_SiteA🌑 chrome_update🌑 check_app_in_list_windowed_SiteA🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 install_menu_option_SiteA🌑 uninstall_policy_app_SiteA🌑 chrome_update🌑 check_app_in_list_windowed_SiteA🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 install_create_shortcut_windowed_SiteA🌑 uninstall_policy_app_SiteA🌑 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 install_omnibox_icon_SiteA🌕 uninstall_policy_app_SiteA🌕 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 install_menu_option_SiteA🌓 uninstall_policy_app_SiteA🌕 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 install_create_shortcut_windowed_SiteA🌑 uninstall_policy_app_SiteA🌑 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 install_omnibox_icon_SiteA🌑 uninstall_policy_app_SiteA🌑 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 install_menu_option_SiteA🌑 uninstall_policy_app_SiteA🌑 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 -install_create_shortcut_tabbed_SiteA🌑 chrome_update🌑 check_app_in_list_tabbed_SiteA🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 chrome_update🌑 check_app_in_list_tabbed_SiteA🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 chrome_update🌑 check_app_in_list_tabbed_SiteA🌑 -install_create_shortcut_tabbed_SiteA🌑 chrome_update🌑 navigate_browser_SiteA🌑 check_create_shortcut_shown🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 chrome_update🌑 navigate_browser_SiteA🌑 check_create_shortcut_shown🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 chrome_update🌑 navigate_browser_SiteA🌑 check_create_shortcut_shown🌑 -install_create_shortcut_tabbed_SiteA🌑 chrome_update🌑 navigate_browser_SiteA🌑 check_install_icon_shown🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 chrome_update🌑 navigate_browser_SiteA🌑 check_install_icon_shown🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 chrome_update🌑 navigate_browser_SiteA🌑 check_install_icon_shown🌑 -install_create_shortcut_tabbed_SiteA🌑 chrome_update🌑 navigate_browser_SiteA🌑 check_launch_icon_not_shown🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 chrome_update🌑 navigate_browser_SiteA🌑 check_launch_icon_not_shown🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 chrome_update🌑 navigate_browser_SiteA🌑 check_launch_icon_not_shown🌑 -install_create_shortcut_windowed_SiteA🌑 chrome_update🌑 check_app_in_list_windowed_SiteA🌑 -install_omnibox_icon_SiteA🌕 chrome_update🌑 check_app_in_list_windowed_SiteA🌑 -install_policy_app_windowed_no_shortcut_SiteA🌑 chrome_update🌑 check_app_in_list_windowed_SiteA🌑 -install_policy_app_windowed_shortcut_SiteA🌓 chrome_update🌑 check_app_in_list_windowed_SiteA🌑 -install_menu_option_SiteA🌓 chrome_update🌑 check_app_in_list_windowed_SiteA🌑 -install_create_shortcut_windowed_SiteA🌑 chrome_update🌑 navigate_browser_SiteA🌑 check_create_shortcut_not_shown🌑 -install_omnibox_icon_SiteA🌕 chrome_update🌑 navigate_browser_SiteA🌑 check_create_shortcut_not_shown🌑 -install_policy_app_windowed_no_shortcut_SiteA🌑 chrome_update🌑 navigate_browser_SiteA🌑 check_create_shortcut_not_shown🌑 -install_policy_app_windowed_shortcut_SiteA🌓 chrome_update🌑 navigate_browser_SiteA🌑 check_create_shortcut_not_shown🌑 -install_menu_option_SiteA🌓 chrome_update🌑 navigate_browser_SiteA🌑 check_create_shortcut_not_shown🌑 -install_create_shortcut_windowed_SiteA🌑 chrome_update🌑 navigate_browser_SiteA🌑 check_install_icon_not_shown🌑 -install_omnibox_icon_SiteA🌕 chrome_update🌑 navigate_browser_SiteA🌑 check_install_icon_not_shown🌑 -install_policy_app_windowed_no_shortcut_SiteA🌑 chrome_update🌑 navigate_browser_SiteA🌑 check_install_icon_not_shown🌑 -install_policy_app_windowed_shortcut_SiteA🌓 chrome_update🌑 navigate_browser_SiteA🌑 check_install_icon_not_shown🌑 -install_menu_option_SiteA🌓 chrome_update🌑 navigate_browser_SiteA🌑 check_install_icon_not_shown🌑 -install_create_shortcut_windowed_SiteA🌑 chrome_update🌑 navigate_browser_SiteA🌑 check_launch_icon_shown🌑 -install_omnibox_icon_SiteA🌕 chrome_update🌑 navigate_browser_SiteA🌑 check_launch_icon_shown🌑 -install_policy_app_windowed_no_shortcut_SiteA🌑 chrome_update🌑 navigate_browser_SiteA🌑 check_launch_icon_shown🌑 -install_policy_app_windowed_shortcut_SiteA🌓 chrome_update🌑 navigate_browser_SiteA🌑 check_launch_icon_shown🌑 -install_menu_option_SiteA🌓 chrome_update🌑 navigate_browser_SiteA🌑 check_launch_icon_shown🌑 -install_policy_app_windowed_shortcut_SiteA🌓 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 -install_create_shortcut_windowed_SiteA🌑 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 -install_omnibox_icon_SiteA🌕 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 -install_menu_option_SiteA🌓 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 -install_create_shortcut_tabbed_SiteA🌑 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 -install_policy_app_windowed_shortcut_SiteA🌓 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 -install_create_shortcut_windowed_SiteA🌑 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 -install_omnibox_icon_SiteA🌕 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 -install_menu_option_SiteA🌓 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 -install_create_shortcut_tabbed_SiteA🌑 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 -install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 chrome_update🌑 launch_from_menu_option_SiteA🌑 check_tab_created🌑 -install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 chrome_update🌑 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 -install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 chrome_update🌑 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 -install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 chrome_update🌑 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 -install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 chrome_update🌑 launch_from_menu_option_SiteA🌑 check_tab_created🌑 -install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 chrome_update🌑 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 -install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 chrome_update🌑 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 -install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 chrome_update🌑 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 -install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 chrome_update🌑 launch_from_menu_option_SiteA🌑 check_tab_created🌑 -install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 chrome_update🌑 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 -install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 chrome_update🌑 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 -install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 chrome_update🌑 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 -install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 chrome_update🌑 launch_from_menu_option_SiteA🌑 check_tab_created🌑 -install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 chrome_update🌑 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 -install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 chrome_update🌑 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 -install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 chrome_update🌑 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 -install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteA🌑 chrome_update🌑 launch_from_menu_option_SiteA🌑 check_tab_created🌑 -install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteA🌑 chrome_update🌑 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 -install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteA🌑 chrome_update🌑 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 -install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteA🌑 chrome_update🌑 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 -install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteA🌑 chrome_update🌑 launch_from_menu_option_SiteA🌑 check_window_created🌑 -install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteA🌑 chrome_update🌑 launch_from_launch_icon_SiteA🌑 check_window_created🌑 -install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteA🌑 chrome_update🌑 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 -install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteA🌑 chrome_update🌑 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 -install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 install_locally_SiteA🌓 chrome_update🌑 launch_from_menu_option_SiteA🌑 check_window_created🌑 -install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 install_locally_SiteA🌓 chrome_update🌑 launch_from_launch_icon_SiteA🌑 check_window_created🌑 -install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 install_locally_SiteA🌓 chrome_update🌑 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 -install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 install_locally_SiteA🌓 chrome_update🌑 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 -install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 install_locally_SiteA🌓 chrome_update🌑 launch_from_menu_option_SiteA🌑 check_window_created🌑 -install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 install_locally_SiteA🌓 chrome_update🌑 launch_from_launch_icon_SiteA🌑 check_window_created🌑 -install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 install_locally_SiteA🌓 chrome_update🌑 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 -install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 install_locally_SiteA🌓 chrome_update🌑 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 -install_create_shortcut_tabbed_SiteA🌑 chrome_update🌑 launch_from_menu_option_SiteA🌑 check_tab_created🌑 -install_create_shortcut_tabbed_SiteA🌑 chrome_update🌑 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 -install_create_shortcut_tabbed_SiteA🌑 chrome_update🌑 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 -install_create_shortcut_tabbed_SiteA🌑 chrome_update🌑 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 chrome_update🌑 launch_from_menu_option_SiteA🌑 check_tab_created🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 chrome_update🌑 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 chrome_update🌑 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 chrome_update🌑 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 chrome_update🌑 launch_from_menu_option_SiteA🌑 check_tab_created🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 chrome_update🌑 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 chrome_update🌑 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 chrome_update🌑 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 -install_create_shortcut_windowed_SiteA🌑 chrome_update🌑 launch_from_menu_option_SiteA🌑 check_window_created🌑 -install_create_shortcut_windowed_SiteA🌑 chrome_update🌑 launch_from_launch_icon_SiteA🌑 check_window_created🌑 -install_create_shortcut_windowed_SiteA🌑 chrome_update🌑 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 -install_create_shortcut_windowed_SiteA🌑 chrome_update🌑 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 -install_omnibox_icon_SiteA🌕 chrome_update🌑 launch_from_menu_option_SiteA🌑 check_window_created🌑 -install_omnibox_icon_SiteA🌕 chrome_update🌑 launch_from_launch_icon_SiteA🌑 check_window_created🌑 -install_omnibox_icon_SiteA🌕 chrome_update🌑 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 -install_omnibox_icon_SiteA🌕 chrome_update🌑 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 -install_policy_app_windowed_no_shortcut_SiteA🌑 chrome_update🌑 launch_from_menu_option_SiteA🌑 check_window_created🌑 -install_policy_app_windowed_no_shortcut_SiteA🌑 chrome_update🌑 launch_from_launch_icon_SiteA🌑 check_window_created🌑 -install_policy_app_windowed_no_shortcut_SiteA🌑 chrome_update🌑 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 -install_policy_app_windowed_no_shortcut_SiteA🌑 chrome_update🌑 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 -install_policy_app_windowed_shortcut_SiteA🌓 chrome_update🌑 launch_from_menu_option_SiteA🌑 check_window_created🌑 -install_policy_app_windowed_shortcut_SiteA🌓 chrome_update🌑 launch_from_launch_icon_SiteA🌑 check_window_created🌑 -install_policy_app_windowed_shortcut_SiteA🌓 chrome_update🌑 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 -install_policy_app_windowed_shortcut_SiteA🌓 chrome_update🌑 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 -install_menu_option_SiteA🌓 chrome_update🌑 launch_from_menu_option_SiteA🌑 check_window_created🌑 -install_menu_option_SiteA🌓 chrome_update🌑 launch_from_launch_icon_SiteA🌑 check_window_created🌑 -install_menu_option_SiteA🌓 chrome_update🌑 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 -install_menu_option_SiteA🌓 chrome_update🌑 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 -install_create_shortcut_tabbed_SiteC🌑 chrome_update🌑 launch_from_menu_option_SiteA🌑 check_tab_created🌑 -install_create_shortcut_tabbed_SiteC🌑 chrome_update🌑 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 -install_create_shortcut_tabbed_SiteC🌑 chrome_update🌑 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 -install_create_shortcut_tabbed_SiteC🌑 chrome_update🌑 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 -install_policy_app_tabbed_shortcut_SiteC🌓 chrome_update🌑 launch_from_menu_option_SiteA🌑 check_tab_created🌑 -install_policy_app_tabbed_shortcut_SiteC🌓 chrome_update🌑 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 -install_policy_app_tabbed_shortcut_SiteC🌓 chrome_update🌑 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 -install_policy_app_tabbed_shortcut_SiteC🌓 chrome_update🌑 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 -install_policy_app_tabbed_no_shortcut_SiteC🌑 chrome_update🌑 launch_from_menu_option_SiteA🌑 check_tab_created🌑 -install_policy_app_tabbed_no_shortcut_SiteC🌑 chrome_update🌑 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 -install_policy_app_tabbed_no_shortcut_SiteC🌑 chrome_update🌑 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 -install_policy_app_tabbed_no_shortcut_SiteC🌑 chrome_update🌑 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 -install_create_shortcut_windowed_SiteA🌑 set_app_badge_SiteA🌑 clear_app_badge_SiteA🌑 check_app_badge_empty_SiteA🌑 -install_omnibox_icon_SiteA🌕 set_app_badge_SiteA🌑 clear_app_badge_SiteA🌑 check_app_badge_empty_SiteA🌑 -install_menu_option_SiteA🌓 set_app_badge_SiteA🌑 clear_app_badge_SiteA🌑 check_app_badge_empty_SiteA🌑 -install_create_shortcut_windowed_SiteA🌑 navigate_pwa_site_a_to_SiteB🌑 close_custom_toolbar🌑 check_navigation_start_url🌑 -install_omnibox_icon_SiteA🌕 navigate_pwa_site_a_to_SiteB🌑 close_custom_toolbar🌑 check_navigation_start_url🌑 -install_policy_app_windowed_no_shortcut_SiteA🌑 navigate_pwa_site_a_to_SiteB🌑 close_custom_toolbar🌑 check_navigation_start_url🌑 -install_policy_app_windowed_shortcut_SiteA🌓 navigate_pwa_site_a_to_SiteB🌑 close_custom_toolbar🌑 check_navigation_start_url🌑 -install_menu_option_SiteA🌓 navigate_pwa_site_a_to_SiteB🌑 close_custom_toolbar🌑 check_navigation_start_url🌑 -install_policy_app_windowed_no_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 -install_create_shortcut_windowed_SiteA🌑 delete_profile🌑 check_app_list_empty🌑 -install_omnibox_icon_SiteA🌕 delete_profile🌑 check_app_list_empty🌑 -install_policy_app_windowed_no_shortcut_SiteA🌑 delete_profile🌑 check_app_list_empty🌑 -install_policy_app_windowed_shortcut_SiteA🌓 delete_profile🌑 check_app_list_empty🌑 -install_menu_option_SiteA🌓 delete_profile🌑 check_app_list_empty🌑 -install_create_shortcut_tabbed_SiteA🌑 delete_profile🌑 check_app_list_empty🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 delete_profile🌑 check_app_list_empty🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 delete_profile🌑 check_app_list_empty🌑 -install_create_shortcut_windowed_SiteA🌑 delete_profile🌑 check_app_not_in_list_SiteA🌑 -install_omnibox_icon_SiteA🌕 delete_profile🌑 check_app_not_in_list_SiteA🌑 -install_policy_app_windowed_no_shortcut_SiteA🌑 delete_profile🌑 check_app_not_in_list_SiteA🌑 -install_policy_app_windowed_shortcut_SiteA🌓 delete_profile🌑 check_app_not_in_list_SiteA🌑 -install_menu_option_SiteA🌓 delete_profile🌑 check_app_not_in_list_SiteA🌑 -install_create_shortcut_tabbed_SiteA🌑 delete_profile🌑 check_app_not_in_list_SiteA🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 delete_profile🌑 check_app_not_in_list_SiteA🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 delete_profile🌑 check_app_not_in_list_SiteA🌑 -install_policy_app_windowed_shortcut_SiteA🌓 delete_profile🌑 check_platform_shortcut_not_exists_SiteA🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 delete_profile🌑 check_platform_shortcut_not_exists_SiteA🌑 -install_create_shortcut_windowed_SiteA🌑 delete_profile🌑 check_platform_shortcut_not_exists_SiteA🌑 -install_omnibox_icon_SiteA🌕 delete_profile🌑 check_platform_shortcut_not_exists_SiteA🌑 -install_menu_option_SiteA🌓 delete_profile🌑 check_platform_shortcut_not_exists_SiteA🌑 -install_create_shortcut_tabbed_SiteA🌑 delete_profile🌑 check_platform_shortcut_not_exists_SiteA🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 install_create_shortcut_windowed_SiteA🌑 check_app_in_list_windowed_SiteA🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 install_omnibox_icon_SiteA🌕 check_app_in_list_windowed_SiteA🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 install_menu_option_SiteA🌓 check_app_in_list_windowed_SiteA🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 install_create_shortcut_windowed_SiteA🌑 check_app_in_list_windowed_SiteA🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 install_omnibox_icon_SiteA🌑 check_app_in_list_windowed_SiteA🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 install_menu_option_SiteA🌑 check_app_in_list_windowed_SiteA🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 install_create_shortcut_windowed_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 install_omnibox_icon_SiteA🌕 check_platform_shortcut_exists_SiteA🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 install_menu_option_SiteA🌓 check_platform_shortcut_exists_SiteA🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 install_create_shortcut_windowed_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 install_omnibox_icon_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 install_menu_option_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 install_create_shortcut_windowed_SiteA🌑 check_window_created🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 install_omnibox_icon_SiteA🌕 check_window_created🌕 -install_policy_app_tabbed_shortcut_SiteA🌓 install_menu_option_SiteA🌓 check_window_created🌕 -install_policy_app_tabbed_no_shortcut_SiteA🌑 install_create_shortcut_windowed_SiteA🌑 check_window_created🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 install_omnibox_icon_SiteA🌑 check_window_created🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 install_menu_option_SiteA🌑 check_window_created🌑 -install_create_shortcut_windowed_SiteA🌑 check_window_created🌑 -install_omnibox_icon_SiteA🌕 check_window_created🌕 -install_menu_option_SiteA🌓 check_window_created🌕 -install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 -install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 install_locally_SiteA🌓 check_platform_shortcut_exists_SiteA🌑 -install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 install_locally_SiteA🌓 check_platform_shortcut_exists_SiteA🌑 -install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 -install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteA🌑 check_app_in_list_tabbed_SiteA🌑 -install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteA🌑 navigate_browser_SiteA🌑 check_install_icon_shown🌑 -install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteA🌑 navigate_browser_SiteA🌑 check_launch_icon_not_shown🌑 -install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteA🌑 check_app_in_list_windowed_SiteA🌑 -install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 install_locally_SiteA🌓 check_app_in_list_windowed_SiteA🌑 -install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 install_locally_SiteA🌓 check_app_in_list_windowed_SiteA🌑 -install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteA🌑 navigate_browser_SiteA🌑 check_install_icon_not_shown🌑 -install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 install_locally_SiteA🌓 navigate_browser_SiteA🌕 check_install_icon_not_shown🌕 -install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 install_locally_SiteA🌓 navigate_browser_SiteA🌕 check_install_icon_not_shown🌕 -install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteA🌑 navigate_browser_SiteA🌑 check_launch_icon_shown🌑 -install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 install_locally_SiteA🌓 navigate_browser_SiteA🌕 check_launch_icon_shown🌕 -install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 install_locally_SiteA🌓 navigate_browser_SiteA🌕 check_launch_icon_shown🌕 -install_create_shortcut_windowed_SiteC🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 -install_create_shortcut_tabbed_SiteC🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 -install_create_shortcut_tabbed_SiteC🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteC🌑 check_app_in_list_tabbed_SiteC🌑 -install_create_shortcut_tabbed_SiteC🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteC🌑 navigate_browser_SiteC🌑 check_install_icon_shown🌑 -install_create_shortcut_tabbed_SiteC🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteC🌑 navigate_browser_SiteC🌑 check_launch_icon_not_shown🌑 -install_create_shortcut_windowed_SiteC🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteC🌑 check_app_in_list_tabbed_SiteC🌑 -install_create_shortcut_windowed_SiteC🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteC🌑 navigate_browser_SiteC🌑 check_install_icon_not_shown🌑 -install_create_shortcut_windowed_SiteC🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteC🌑 navigate_browser_SiteC🌑 check_launch_icon_shown🌑 -install_policy_app_windowed_no_shortcut_SiteA🌑 check_platform_shortcut_not_exists_SiteA🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 check_platform_shortcut_not_exists_SiteA🌑 -install_policy_app_windowed_no_shortcut_SiteC🌑 check_platform_shortcut_not_exists_SiteC🌑 -install_policy_app_tabbed_no_shortcut_SiteC🌑 check_platform_shortcut_not_exists_SiteC🌑 -install_create_shortcut_tabbed_SiteA🌑 install_policy_app_windowed_no_shortcut_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 -install_create_shortcut_tabbed_SiteA🌑 install_policy_app_windowed_shortcut_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 -install_create_shortcut_windowed_SiteA🌑 install_policy_app_tabbed_no_shortcut_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 -install_create_shortcut_windowed_SiteA🌑 install_policy_app_windowed_no_shortcut_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 -install_omnibox_icon_SiteA🌕 install_policy_app_tabbed_no_shortcut_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 -install_omnibox_icon_SiteA🌕 install_policy_app_windowed_no_shortcut_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 -install_menu_option_SiteA🌓 install_policy_app_tabbed_no_shortcut_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 -install_menu_option_SiteA🌓 install_policy_app_windowed_no_shortcut_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 -install_create_shortcut_windowed_SiteA🌑 install_policy_app_tabbed_shortcut_SiteA🌑 check_app_in_list_windowed_SiteA🌑 -install_create_shortcut_windowed_SiteA🌑 install_policy_app_tabbed_no_shortcut_SiteA🌑 check_app_in_list_windowed_SiteA🌑 -install_omnibox_icon_SiteA🌕 install_policy_app_tabbed_shortcut_SiteA🌓 check_app_in_list_windowed_SiteA🌑 -install_omnibox_icon_SiteA🌕 install_policy_app_tabbed_no_shortcut_SiteA🌑 check_app_in_list_windowed_SiteA🌑 -install_menu_option_SiteA🌓 install_policy_app_tabbed_shortcut_SiteA🌓 check_app_in_list_windowed_SiteA🌑 -install_menu_option_SiteA🌓 install_policy_app_tabbed_no_shortcut_SiteA🌑 check_app_in_list_windowed_SiteA🌑 -install_create_shortcut_windowed_SiteA🌑 install_policy_app_tabbed_shortcut_SiteA🌑 navigate_browser_SiteA🌑 check_launch_icon_shown🌑 -install_create_shortcut_windowed_SiteA🌑 install_policy_app_tabbed_no_shortcut_SiteA🌑 navigate_browser_SiteA🌑 check_launch_icon_shown🌑 -install_omnibox_icon_SiteA🌕 install_policy_app_tabbed_shortcut_SiteA🌓 navigate_browser_SiteA🌕 check_launch_icon_shown🌕 -install_omnibox_icon_SiteA🌕 install_policy_app_tabbed_no_shortcut_SiteA🌑 navigate_browser_SiteA🌑 check_launch_icon_shown🌑 -install_menu_option_SiteA🌓 install_policy_app_tabbed_shortcut_SiteA🌓 navigate_browser_SiteA🌕 check_launch_icon_shown🌕 -install_menu_option_SiteA🌓 install_policy_app_tabbed_no_shortcut_SiteA🌑 navigate_browser_SiteA🌑 check_launch_icon_shown🌑 -install_create_shortcut_tabbed_SiteA🌑 install_policy_app_windowed_no_shortcut_SiteA🌑 check_app_in_list_tabbed_SiteA🌑 -install_create_shortcut_tabbed_SiteA🌑 install_policy_app_windowed_shortcut_SiteA🌑 check_app_in_list_tabbed_SiteA🌑 -install_create_shortcut_tabbed_SiteA🌑 install_policy_app_windowed_no_shortcut_SiteA🌑 navigate_browser_SiteA🌑 check_install_icon_shown🌑 -install_create_shortcut_tabbed_SiteA🌑 install_policy_app_windowed_shortcut_SiteA🌑 navigate_browser_SiteA🌑 check_install_icon_shown🌑 -install_create_shortcut_tabbed_SiteA🌑 check_app_in_list_tabbed_SiteA🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 check_app_in_list_tabbed_SiteA🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 check_app_in_list_tabbed_SiteA🌑 -install_create_shortcut_tabbed_SiteA🌑 navigate_browser_SiteA🌑 check_create_shortcut_shown🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 navigate_browser_SiteA🌕 check_create_shortcut_shown🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 navigate_browser_SiteA🌑 check_create_shortcut_shown🌑 -install_create_shortcut_tabbed_SiteA🌑 navigate_browser_SiteA🌑 check_install_icon_shown🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 navigate_browser_SiteA🌕 check_install_icon_shown🌕 -install_policy_app_tabbed_no_shortcut_SiteA🌑 navigate_browser_SiteA🌑 check_install_icon_shown🌑 -install_create_shortcut_tabbed_SiteA🌑 navigate_browser_SiteA🌑 check_launch_icon_not_shown🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 navigate_browser_SiteA🌕 check_launch_icon_not_shown🌕 -install_policy_app_tabbed_no_shortcut_SiteA🌑 navigate_browser_SiteA🌑 check_launch_icon_not_shown🌑 -install_create_shortcut_tabbed_SiteC🌑 check_app_in_list_tabbed_SiteC🌑 -install_policy_app_tabbed_shortcut_SiteC🌓 check_app_in_list_tabbed_SiteC🌑 -install_policy_app_tabbed_no_shortcut_SiteC🌑 check_app_in_list_tabbed_SiteC🌑 -install_create_shortcut_tabbed_SiteC🌑 navigate_browser_SiteC🌑 check_create_shortcut_shown🌑 -install_policy_app_tabbed_shortcut_SiteC🌓 navigate_browser_SiteC🌕 check_create_shortcut_shown🌑 -install_policy_app_tabbed_no_shortcut_SiteC🌑 navigate_browser_SiteC🌑 check_create_shortcut_shown🌑 -install_create_shortcut_tabbed_SiteC🌑 navigate_browser_SiteC🌑 check_install_icon_not_shown🌑 -install_policy_app_tabbed_shortcut_SiteC🌓 navigate_browser_SiteC🌕 check_install_icon_not_shown🌕 -install_policy_app_tabbed_no_shortcut_SiteC🌑 navigate_browser_SiteC🌑 check_install_icon_not_shown🌑 -install_create_shortcut_tabbed_SiteC🌑 navigate_browser_SiteC🌑 check_launch_icon_not_shown🌑 -install_policy_app_tabbed_shortcut_SiteC🌓 navigate_browser_SiteC🌕 check_launch_icon_not_shown🌕 -install_policy_app_tabbed_no_shortcut_SiteC🌑 navigate_browser_SiteC🌑 check_launch_icon_not_shown🌑 -install_create_shortcut_windowed_SiteA🌑 check_app_in_list_windowed_SiteA🌑 -install_omnibox_icon_SiteA🌕 check_app_in_list_windowed_SiteA🌑 -install_policy_app_windowed_no_shortcut_SiteA🌑 check_app_in_list_windowed_SiteA🌑 -install_policy_app_windowed_shortcut_SiteA🌓 check_app_in_list_windowed_SiteA🌑 -install_menu_option_SiteA🌓 check_app_in_list_windowed_SiteA🌑 -install_create_shortcut_windowed_SiteA🌑 navigate_browser_SiteA🌑 check_create_shortcut_not_shown🌑 -install_omnibox_icon_SiteA🌕 navigate_browser_SiteA🌕 check_create_shortcut_not_shown🌑 -install_policy_app_windowed_no_shortcut_SiteA🌑 navigate_browser_SiteA🌑 check_create_shortcut_not_shown🌑 -install_policy_app_windowed_shortcut_SiteA🌓 navigate_browser_SiteA🌕 check_create_shortcut_not_shown🌑 -install_menu_option_SiteA🌓 navigate_browser_SiteA🌕 check_create_shortcut_not_shown🌑 -install_create_shortcut_windowed_SiteA🌑 navigate_browser_SiteA🌑 check_install_icon_not_shown🌑 -install_omnibox_icon_SiteA🌕 navigate_browser_SiteA🌕 check_install_icon_not_shown🌕 -install_policy_app_windowed_no_shortcut_SiteA🌑 navigate_browser_SiteA🌑 check_install_icon_not_shown🌑 -install_policy_app_windowed_shortcut_SiteA🌓 navigate_browser_SiteA🌕 check_install_icon_not_shown🌕 -install_menu_option_SiteA🌓 navigate_browser_SiteA🌕 check_install_icon_not_shown🌕 -install_create_shortcut_windowed_SiteA🌑 navigate_browser_SiteA🌑 check_launch_icon_shown🌑 -install_omnibox_icon_SiteA🌕 navigate_browser_SiteA🌕 check_launch_icon_shown🌕 -install_policy_app_windowed_no_shortcut_SiteA🌑 navigate_browser_SiteA🌑 check_launch_icon_shown🌑 -install_policy_app_windowed_shortcut_SiteA🌓 navigate_browser_SiteA🌕 check_launch_icon_shown🌕 -install_menu_option_SiteA🌓 navigate_browser_SiteA🌕 check_launch_icon_shown🌕 -install_create_shortcut_windowed_SiteB🌑 navigate_browser_SiteB🌑 check_launch_icon_shown🌑 -install_omnibox_icon_SiteB🌕 navigate_browser_SiteB🌕 check_launch_icon_shown🌕 -install_policy_app_windowed_no_shortcut_SiteB🌑 navigate_browser_SiteB🌑 check_launch_icon_shown🌑 -install_policy_app_windowed_shortcut_SiteB🌓 navigate_browser_SiteB🌕 check_launch_icon_shown🌕 -install_menu_option_SiteB🌓 navigate_browser_SiteB🌕 check_launch_icon_shown🌕 -install_create_shortcut_windowed_SiteC🌑 check_app_in_list_windowed_SiteC🌑 -install_policy_app_windowed_no_shortcut_SiteC🌑 check_app_in_list_windowed_SiteC🌑 -install_policy_app_windowed_shortcut_SiteC🌓 check_app_in_list_windowed_SiteC🌑 -install_create_shortcut_windowed_SiteC🌑 navigate_browser_SiteC🌑 check_create_shortcut_not_shown🌑 -install_policy_app_windowed_no_shortcut_SiteC🌑 navigate_browser_SiteC🌑 check_create_shortcut_not_shown🌑 -install_policy_app_windowed_shortcut_SiteC🌓 navigate_browser_SiteC🌕 check_create_shortcut_not_shown🌑 -install_create_shortcut_windowed_SiteC🌑 navigate_browser_SiteC🌑 check_install_icon_not_shown🌑 -install_policy_app_windowed_no_shortcut_SiteC🌑 navigate_browser_SiteC🌑 check_install_icon_not_shown🌑 -install_policy_app_windowed_shortcut_SiteC🌓 navigate_browser_SiteC🌕 check_install_icon_not_shown🌕 -install_create_shortcut_windowed_SiteC🌑 navigate_browser_SiteC🌑 check_launch_icon_shown🌑 -install_policy_app_windowed_no_shortcut_SiteC🌑 navigate_browser_SiteC🌑 check_launch_icon_shown🌑 -install_policy_app_windowed_shortcut_SiteC🌓 navigate_browser_SiteC🌕 check_launch_icon_shown🌕 -install_policy_app_windowed_shortcut_SiteA🌓 check_platform_shortcut_exists_SiteA🌑 -install_policy_app_windowed_shortcut_SiteA🌓 check_platform_shortcut_exists_SiteC🌑 -install_create_shortcut_tabbed_SiteA🌑 install_policy_app_windowed_no_shortcut_SiteA🌑 launch_from_menu_option_SiteA🌑 check_tab_created🌑 -install_create_shortcut_tabbed_SiteA🌑 install_policy_app_windowed_no_shortcut_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 -install_create_shortcut_tabbed_SiteA🌑 install_policy_app_windowed_no_shortcut_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 -install_create_shortcut_tabbed_SiteA🌑 install_policy_app_windowed_no_shortcut_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 -install_create_shortcut_tabbed_SiteA🌑 install_policy_app_windowed_shortcut_SiteA🌑 launch_from_menu_option_SiteA🌑 check_tab_created🌑 -install_create_shortcut_tabbed_SiteA🌑 install_policy_app_windowed_shortcut_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 -install_create_shortcut_tabbed_SiteA🌑 install_policy_app_windowed_shortcut_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 -install_create_shortcut_tabbed_SiteA🌑 install_policy_app_windowed_shortcut_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 -install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 launch_from_menu_option_SiteA🌑 check_tab_created🌑 -install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 -install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 -install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 -install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteA🌑 launch_from_menu_option_SiteA🌑 check_tab_created🌑 -install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 -install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 -install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 -install_create_shortcut_windowed_SiteA🌑 install_policy_app_tabbed_shortcut_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_created🌑 -install_create_shortcut_windowed_SiteA🌑 install_policy_app_tabbed_shortcut_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_created🌑 -install_create_shortcut_windowed_SiteA🌑 install_policy_app_tabbed_shortcut_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 -install_create_shortcut_windowed_SiteA🌑 install_policy_app_tabbed_shortcut_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 -install_create_shortcut_windowed_SiteA🌑 install_policy_app_tabbed_no_shortcut_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_created🌑 -install_create_shortcut_windowed_SiteA🌑 install_policy_app_tabbed_no_shortcut_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_created🌑 -install_create_shortcut_windowed_SiteA🌑 install_policy_app_tabbed_no_shortcut_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 -install_create_shortcut_windowed_SiteA🌑 install_policy_app_tabbed_no_shortcut_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 -install_omnibox_icon_SiteA🌕 install_policy_app_tabbed_shortcut_SiteA🌓 launch_from_menu_option_SiteA🌑 check_window_created🌑 -install_omnibox_icon_SiteA🌕 install_policy_app_tabbed_shortcut_SiteA🌓 launch_from_launch_icon_SiteA🌑 check_window_created🌑 -install_omnibox_icon_SiteA🌕 install_policy_app_tabbed_shortcut_SiteA🌓 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 -install_omnibox_icon_SiteA🌕 install_policy_app_tabbed_shortcut_SiteA🌓 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 -install_omnibox_icon_SiteA🌕 install_policy_app_tabbed_no_shortcut_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_created🌑 -install_omnibox_icon_SiteA🌕 install_policy_app_tabbed_no_shortcut_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_created🌑 -install_omnibox_icon_SiteA🌕 install_policy_app_tabbed_no_shortcut_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 -install_omnibox_icon_SiteA🌕 install_policy_app_tabbed_no_shortcut_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 -install_menu_option_SiteA🌓 install_policy_app_tabbed_shortcut_SiteA🌓 launch_from_menu_option_SiteA🌑 check_window_created🌑 -install_menu_option_SiteA🌓 install_policy_app_tabbed_shortcut_SiteA🌓 launch_from_launch_icon_SiteA🌑 check_window_created🌑 -install_menu_option_SiteA🌓 install_policy_app_tabbed_shortcut_SiteA🌓 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 -install_menu_option_SiteA🌓 install_policy_app_tabbed_shortcut_SiteA🌓 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 -install_menu_option_SiteA🌓 install_policy_app_tabbed_no_shortcut_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_created🌑 -install_menu_option_SiteA🌓 install_policy_app_tabbed_no_shortcut_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_created🌑 -install_menu_option_SiteA🌓 install_policy_app_tabbed_no_shortcut_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 -install_menu_option_SiteA🌓 install_policy_app_tabbed_no_shortcut_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 -install_create_shortcut_windowed_SiteA🌑 close_pwa🌑 manifest_update_colors_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_color_correct🌑 -install_create_shortcut_windowed_SiteA🌑 close_pwa🌑 manifest_update_colors_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_color_correct🌑 -install_create_shortcut_windowed_SiteA🌑 close_pwa🌑 manifest_update_colors_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_color_correct🌑 -install_create_shortcut_windowed_SiteA🌑 close_pwa🌑 manifest_update_colors_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_color_correct🌑 -install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_colors_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_color_correct🌑 -install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_colors_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_color_correct🌑 -install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_colors_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_color_correct🌑 -install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_colors_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_color_correct🌑 -install_menu_option_SiteA🌓 close_pwa🌕 manifest_update_colors_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_color_correct🌑 -install_menu_option_SiteA🌓 close_pwa🌕 manifest_update_colors_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_color_correct🌑 -install_menu_option_SiteA🌓 close_pwa🌕 manifest_update_colors_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_color_correct🌑 -install_menu_option_SiteA🌓 close_pwa🌕 manifest_update_colors_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_color_correct🌑 -install_create_shortcut_windowed_SiteA🌑 close_pwa🌑 manifest_update_display_browser_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_display_standalone🌑 -install_create_shortcut_windowed_SiteA🌑 close_pwa🌑 manifest_update_display_browser_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_display_standalone🌑 -install_create_shortcut_windowed_SiteA🌑 close_pwa🌑 manifest_update_display_browser_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_display_standalone🌑 -install_create_shortcut_windowed_SiteA🌑 close_pwa🌑 manifest_update_display_browser_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_display_standalone🌑 -install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_display_standalone🌑 -install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_display_standalone🌑 -install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_display_standalone🌑 -install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_display_standalone🌑 -install_menu_option_SiteA🌓 close_pwa🌕 manifest_update_display_browser_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_display_standalone🌑 -install_menu_option_SiteA🌓 close_pwa🌕 manifest_update_display_browser_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_display_standalone🌑 -install_menu_option_SiteA🌓 close_pwa🌕 manifest_update_display_browser_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_display_standalone🌑 -install_menu_option_SiteA🌓 close_pwa🌕 manifest_update_display_browser_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_display_standalone🌑 -install_create_shortcut_windowed_SiteA🌑 close_pwa🌑 manifest_update_display_minimal_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_display_minimal🌑 -install_create_shortcut_windowed_SiteA🌑 close_pwa🌑 manifest_update_display_minimal_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_display_minimal🌑 -install_create_shortcut_windowed_SiteA🌑 close_pwa🌑 manifest_update_display_minimal_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_display_minimal🌑 -install_create_shortcut_windowed_SiteA🌑 close_pwa🌑 manifest_update_display_minimal_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_display_minimal🌑 -install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_display_minimal_SiteA🌕 launch_from_menu_option_SiteA🌑 check_window_display_minimal🌑 -install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_display_minimal_SiteA🌕 launch_from_launch_icon_SiteA🌑 check_window_display_minimal🌑 -install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_display_minimal_SiteA🌕 launch_from_chrome_apps_SiteA🌑 check_window_display_minimal🌑 -install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_display_minimal_SiteA🌕 launch_from_platform_shortcut_SiteA🌑 check_window_display_minimal🌑 -install_menu_option_SiteA🌓 close_pwa🌕 manifest_update_display_minimal_SiteA🌕 launch_from_menu_option_SiteA🌑 check_window_display_minimal🌑 -install_menu_option_SiteA🌓 close_pwa🌕 manifest_update_display_minimal_SiteA🌕 launch_from_launch_icon_SiteA🌑 check_window_display_minimal🌑 -install_menu_option_SiteA🌓 close_pwa🌕 manifest_update_display_minimal_SiteA🌕 launch_from_chrome_apps_SiteA🌑 check_window_display_minimal🌑 -install_menu_option_SiteA🌓 close_pwa🌕 manifest_update_display_minimal_SiteA🌕 launch_from_platform_shortcut_SiteA🌑 check_window_display_minimal🌑 -install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 launch_from_menu_option_SiteA🌑 check_tab_created🌑 -install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 -install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 -install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 -install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 launch_from_menu_option_SiteA🌑 check_tab_created🌑 -install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 -install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 -install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 -install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 launch_from_menu_option_SiteA🌑 check_tab_created🌑 -install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 -install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 -install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 -install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_created🌑 -install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_created🌑 -install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 -install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 -install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 install_locally_SiteA🌓 launch_from_menu_option_SiteA🌑 check_window_created🌑 -install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 install_locally_SiteA🌓 launch_from_launch_icon_SiteA🌑 check_window_created🌑 -install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 install_locally_SiteA🌓 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 -install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 install_locally_SiteA🌓 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 -install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 install_locally_SiteA🌓 launch_from_menu_option_SiteA🌑 check_window_created🌑 -install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 install_locally_SiteA🌓 launch_from_launch_icon_SiteA🌑 check_window_created🌑 -install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 install_locally_SiteA🌓 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 -install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 install_locally_SiteA🌓 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 -install_create_shortcut_tabbed_SiteA🌑 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_menu_option_SiteA🌑 check_tab_created🌑 -install_create_shortcut_tabbed_SiteA🌑 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 -install_create_shortcut_tabbed_SiteA🌑 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 -install_create_shortcut_tabbed_SiteA🌑 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_menu_option_SiteA🌑 check_tab_created🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_menu_option_SiteA🌑 check_tab_created🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 -install_create_shortcut_tabbed_SiteA🌑 set_open_in_window_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_created🌑 -install_create_shortcut_tabbed_SiteA🌑 set_open_in_window_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_created🌑 -install_create_shortcut_tabbed_SiteA🌑 set_open_in_window_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 -install_create_shortcut_tabbed_SiteA🌑 set_open_in_window_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 set_open_in_window_SiteA🌓 launch_from_menu_option_SiteA🌑 check_window_created🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 set_open_in_window_SiteA🌓 launch_from_launch_icon_SiteA🌑 check_window_created🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 set_open_in_window_SiteA🌓 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 set_open_in_window_SiteA🌓 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 set_open_in_window_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_created🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 set_open_in_window_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_created🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 set_open_in_window_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 set_open_in_window_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 -install_create_shortcut_windowed_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_created🌑 -install_create_shortcut_windowed_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_created🌑 -install_create_shortcut_windowed_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 -install_create_shortcut_windowed_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 -install_omnibox_icon_SiteA🌕 launch_from_menu_option_SiteA🌑 check_window_created🌑 -install_omnibox_icon_SiteA🌕 launch_from_launch_icon_SiteA🌑 check_window_created🌑 -install_omnibox_icon_SiteA🌕 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 -install_omnibox_icon_SiteA🌕 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 -install_policy_app_windowed_no_shortcut_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_created🌑 -install_policy_app_windowed_no_shortcut_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_created🌑 -install_policy_app_windowed_no_shortcut_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 -install_policy_app_windowed_no_shortcut_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 -install_policy_app_windowed_shortcut_SiteA🌓 launch_from_menu_option_SiteA🌑 check_window_created🌑 -install_policy_app_windowed_shortcut_SiteA🌓 launch_from_launch_icon_SiteA🌑 check_window_created🌑 -install_policy_app_windowed_shortcut_SiteA🌓 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 -install_policy_app_windowed_shortcut_SiteA🌓 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 -install_menu_option_SiteA🌓 launch_from_menu_option_SiteA🌑 check_window_created🌑 -install_menu_option_SiteA🌓 launch_from_launch_icon_SiteA🌑 check_window_created🌑 -install_menu_option_SiteA🌓 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 -install_menu_option_SiteA🌓 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 -install_create_shortcut_windowed_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_display_standalone🌑 -install_create_shortcut_windowed_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_display_standalone🌑 -install_create_shortcut_windowed_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_display_standalone🌑 -install_create_shortcut_windowed_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_display_standalone🌑 -install_omnibox_icon_SiteA🌕 launch_from_menu_option_SiteA🌑 check_window_display_standalone🌑 -install_omnibox_icon_SiteA🌕 launch_from_launch_icon_SiteA🌑 check_window_display_standalone🌑 -install_omnibox_icon_SiteA🌕 launch_from_chrome_apps_SiteA🌑 check_window_display_standalone🌑 -install_omnibox_icon_SiteA🌕 launch_from_platform_shortcut_SiteA🌑 check_window_display_standalone🌑 -install_policy_app_windowed_no_shortcut_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_display_standalone🌑 -install_policy_app_windowed_no_shortcut_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_display_standalone🌑 -install_policy_app_windowed_no_shortcut_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_display_standalone🌑 -install_policy_app_windowed_no_shortcut_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_display_standalone🌑 -install_policy_app_windowed_shortcut_SiteA🌓 launch_from_menu_option_SiteA🌑 check_window_display_standalone🌑 -install_policy_app_windowed_shortcut_SiteA🌓 launch_from_launch_icon_SiteA🌑 check_window_display_standalone🌑 -install_policy_app_windowed_shortcut_SiteA🌓 launch_from_chrome_apps_SiteA🌑 check_window_display_standalone🌑 -install_policy_app_windowed_shortcut_SiteA🌓 launch_from_platform_shortcut_SiteA🌑 check_window_display_standalone🌑 -install_menu_option_SiteA🌓 launch_from_menu_option_SiteA🌑 check_window_display_standalone🌑 -install_menu_option_SiteA🌓 launch_from_launch_icon_SiteA🌑 check_window_display_standalone🌑 -install_menu_option_SiteA🌓 launch_from_chrome_apps_SiteA🌑 check_window_display_standalone🌑 -install_menu_option_SiteA🌓 launch_from_platform_shortcut_SiteA🌑 check_window_display_standalone🌑 -install_create_shortcut_windowed_SiteA🌑 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_created🌑 -install_create_shortcut_windowed_SiteA🌑 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_created🌑 -install_create_shortcut_windowed_SiteA🌑 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 -install_create_shortcut_windowed_SiteA🌑 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 -install_omnibox_icon_SiteA🌕 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_created🌑 -install_omnibox_icon_SiteA🌕 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_created🌑 -install_omnibox_icon_SiteA🌕 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 -install_omnibox_icon_SiteA🌕 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 -install_policy_app_windowed_no_shortcut_SiteA🌑 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_created🌑 -install_policy_app_windowed_no_shortcut_SiteA🌑 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_created🌑 -install_policy_app_windowed_no_shortcut_SiteA🌑 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 -install_policy_app_windowed_no_shortcut_SiteA🌑 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 -install_policy_app_windowed_shortcut_SiteA🌓 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_created🌑 -install_policy_app_windowed_shortcut_SiteA🌓 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_created🌑 -install_policy_app_windowed_shortcut_SiteA🌓 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 -install_policy_app_windowed_shortcut_SiteA🌓 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 -install_menu_option_SiteA🌓 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_created🌑 -install_menu_option_SiteA🌓 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_created🌑 -install_menu_option_SiteA🌓 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 -install_menu_option_SiteA🌓 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 -install_create_shortcut_windowed_SiteA🌑 set_open_in_tab_SiteA🌑 launch_from_menu_option_SiteA🌑 check_tab_created🌑 -install_create_shortcut_windowed_SiteA🌑 set_open_in_tab_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 -install_create_shortcut_windowed_SiteA🌑 set_open_in_tab_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 -install_create_shortcut_windowed_SiteA🌑 set_open_in_tab_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 -install_omnibox_icon_SiteA🌕 set_open_in_tab_SiteA🌓 launch_from_menu_option_SiteA🌑 check_tab_created🌑 -install_omnibox_icon_SiteA🌕 set_open_in_tab_SiteA🌓 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 -install_omnibox_icon_SiteA🌕 set_open_in_tab_SiteA🌓 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 -install_omnibox_icon_SiteA🌕 set_open_in_tab_SiteA🌓 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 -install_policy_app_windowed_no_shortcut_SiteA🌑 set_open_in_tab_SiteA🌑 launch_from_menu_option_SiteA🌑 check_tab_created🌑 -install_policy_app_windowed_no_shortcut_SiteA🌑 set_open_in_tab_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 -install_policy_app_windowed_no_shortcut_SiteA🌑 set_open_in_tab_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 -install_policy_app_windowed_no_shortcut_SiteA🌑 set_open_in_tab_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 -install_policy_app_windowed_shortcut_SiteA🌓 set_open_in_tab_SiteA🌓 launch_from_menu_option_SiteA🌑 check_tab_created🌑 -install_policy_app_windowed_shortcut_SiteA🌓 set_open_in_tab_SiteA🌓 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 -install_policy_app_windowed_shortcut_SiteA🌓 set_open_in_tab_SiteA🌓 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 -install_policy_app_windowed_shortcut_SiteA🌓 set_open_in_tab_SiteA🌓 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 -install_menu_option_SiteA🌓 set_open_in_tab_SiteA🌓 launch_from_menu_option_SiteA🌑 check_tab_created🌑 -install_menu_option_SiteA🌓 set_open_in_tab_SiteA🌓 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 -install_menu_option_SiteA🌓 set_open_in_tab_SiteA🌓 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 -install_menu_option_SiteA🌓 set_open_in_tab_SiteA🌓 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 -install_create_shortcut_windowed_SiteB🌑 launch_from_menu_option_SiteB🌑 check_window_display_minimal🌑 -install_create_shortcut_windowed_SiteB🌑 launch_from_launch_icon_SiteB🌑 check_window_display_minimal🌑 -install_create_shortcut_windowed_SiteB🌑 launch_from_chrome_apps_SiteB🌑 check_window_display_minimal🌑 -install_create_shortcut_windowed_SiteB🌑 launch_from_platform_shortcut_SiteB🌑 check_window_display_minimal🌑 -install_omnibox_icon_SiteB🌕 launch_from_menu_option_SiteB🌑 check_window_display_minimal🌑 -install_omnibox_icon_SiteB🌕 launch_from_launch_icon_SiteB🌑 check_window_display_minimal🌑 -install_omnibox_icon_SiteB🌕 launch_from_chrome_apps_SiteB🌑 check_window_display_minimal🌑 -install_omnibox_icon_SiteB🌕 launch_from_platform_shortcut_SiteB🌑 check_window_display_minimal🌑 -install_policy_app_windowed_no_shortcut_SiteB🌑 launch_from_menu_option_SiteB🌑 check_window_display_minimal🌑 -install_policy_app_windowed_no_shortcut_SiteB🌑 launch_from_launch_icon_SiteB🌑 check_window_display_minimal🌑 -install_policy_app_windowed_no_shortcut_SiteB🌑 launch_from_chrome_apps_SiteB🌑 check_window_display_minimal🌑 -install_policy_app_windowed_no_shortcut_SiteB🌑 launch_from_platform_shortcut_SiteB🌑 check_window_display_minimal🌑 -install_policy_app_windowed_shortcut_SiteB🌓 launch_from_menu_option_SiteB🌑 check_window_display_minimal🌑 -install_policy_app_windowed_shortcut_SiteB🌓 launch_from_launch_icon_SiteB🌑 check_window_display_minimal🌑 -install_policy_app_windowed_shortcut_SiteB🌓 launch_from_chrome_apps_SiteB🌑 check_window_display_minimal🌑 -install_policy_app_windowed_shortcut_SiteB🌓 launch_from_platform_shortcut_SiteB🌑 check_window_display_minimal🌑 -install_menu_option_SiteB🌓 launch_from_menu_option_SiteB🌑 check_window_display_minimal🌑 -install_menu_option_SiteB🌓 launch_from_launch_icon_SiteB🌑 check_window_display_minimal🌑 -install_menu_option_SiteB🌓 launch_from_chrome_apps_SiteB🌑 check_window_display_minimal🌑 -install_menu_option_SiteB🌓 launch_from_platform_shortcut_SiteB🌑 check_window_display_minimal🌑 -install_create_shortcut_tabbed_SiteC🌑 launch_from_menu_option_SiteC🌑 check_tab_created🌑 -install_create_shortcut_tabbed_SiteC🌑 launch_from_launch_icon_SiteC🌑 check_tab_created🌑 -install_create_shortcut_tabbed_SiteC🌑 launch_from_chrome_apps_SiteC🌑 check_tab_created🌑 -install_create_shortcut_tabbed_SiteC🌑 launch_from_platform_shortcut_SiteC🌑 check_tab_created🌑 -install_policy_app_tabbed_shortcut_SiteC🌓 launch_from_menu_option_SiteC🌑 check_tab_created🌑 -install_policy_app_tabbed_shortcut_SiteC🌓 launch_from_launch_icon_SiteC🌑 check_tab_created🌑 -install_policy_app_tabbed_shortcut_SiteC🌓 launch_from_chrome_apps_SiteC🌑 check_tab_created🌑 -install_policy_app_tabbed_shortcut_SiteC🌓 launch_from_platform_shortcut_SiteC🌑 check_tab_created🌑 -install_policy_app_tabbed_no_shortcut_SiteC🌑 launch_from_menu_option_SiteC🌑 check_tab_created🌑 -install_policy_app_tabbed_no_shortcut_SiteC🌑 launch_from_launch_icon_SiteC🌑 check_tab_created🌑 -install_policy_app_tabbed_no_shortcut_SiteC🌑 launch_from_chrome_apps_SiteC🌑 check_tab_created🌑 -install_policy_app_tabbed_no_shortcut_SiteC🌑 launch_from_platform_shortcut_SiteC🌑 check_tab_created🌑 -install_create_shortcut_windowed_SiteC🌑 launch_from_menu_option_SiteC🌑 check_window_created🌑 -install_create_shortcut_windowed_SiteC🌑 launch_from_launch_icon_SiteC🌑 check_window_created🌑 -install_create_shortcut_windowed_SiteC🌑 launch_from_chrome_apps_SiteC🌑 check_window_created🌑 -install_create_shortcut_windowed_SiteC🌑 launch_from_platform_shortcut_SiteC🌑 check_window_created🌑 -install_policy_app_windowed_no_shortcut_SiteC🌑 launch_from_menu_option_SiteC🌑 check_window_created🌑 -install_policy_app_windowed_no_shortcut_SiteC🌑 launch_from_launch_icon_SiteC🌑 check_window_created🌑 -install_policy_app_windowed_no_shortcut_SiteC🌑 launch_from_chrome_apps_SiteC🌑 check_window_created🌑 -install_policy_app_windowed_no_shortcut_SiteC🌑 launch_from_platform_shortcut_SiteC🌑 check_window_created🌑 -install_policy_app_windowed_shortcut_SiteC🌓 launch_from_menu_option_SiteC🌑 check_window_created🌑 -install_policy_app_windowed_shortcut_SiteC🌓 launch_from_launch_icon_SiteC🌑 check_window_created🌑 -install_policy_app_windowed_shortcut_SiteC🌓 launch_from_chrome_apps_SiteC🌑 check_window_created🌑 -install_policy_app_windowed_shortcut_SiteC🌓 launch_from_platform_shortcut_SiteC🌑 check_window_created🌑 -install_create_shortcut_windowed_SiteA🌑 close_pwa🌑 manifest_update_icons_SiteA🌑 check_app_in_list_icon_correct_SiteA🌑 -install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_icons_SiteA🌑 check_app_in_list_icon_correct_SiteA🌑 -install_menu_option_SiteA🌓 close_pwa🌕 manifest_update_icons_SiteA🌑 check_app_in_list_icon_correct_SiteA🌑 -install_create_shortcut_windowed_SiteA🌑 close_pwa🌑 manifest_update_icons_SiteA🌑 check_platform_shortcut_icon_correct_SiteA🌑 -install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_icons_SiteA🌑 check_platform_shortcut_icon_correct_SiteA🌑 -install_menu_option_SiteA🌓 close_pwa🌕 manifest_update_icons_SiteA🌑 check_platform_shortcut_icon_correct_SiteA🌑 -install_create_shortcut_windowed_SiteAFoo🌑 manifest_update_scope_site_a_foo_to_SiteA🌑 close_pwa🌑 launch_from_platform_shortcut_SiteAFoo🌑 close_pwa🌑 navigate_browser_SiteA🌑 check_install_icon_not_shown🌑 -install_omnibox_icon_SiteAFoo🌕 manifest_update_scope_site_a_foo_to_SiteA🌑 close_pwa🌑 launch_from_platform_shortcut_SiteAFoo🌑 close_pwa🌑 navigate_browser_SiteA🌑 check_install_icon_not_shown🌑 -install_menu_option_SiteAFoo🌓 manifest_update_scope_site_a_foo_to_SiteA🌑 close_pwa🌑 launch_from_platform_shortcut_SiteAFoo🌑 close_pwa🌑 navigate_browser_SiteA🌑 check_install_icon_not_shown🌑 -install_create_shortcut_windowed_SiteAFoo🌑 manifest_update_scope_site_a_foo_to_SiteA🌑 close_pwa🌑 launch_from_platform_shortcut_SiteAFoo🌑 close_pwa🌑 navigate_browser_SiteA🌑 check_launch_icon_shown🌑 -install_omnibox_icon_SiteAFoo🌕 manifest_update_scope_site_a_foo_to_SiteA🌑 close_pwa🌑 launch_from_platform_shortcut_SiteAFoo🌑 close_pwa🌑 navigate_browser_SiteA🌑 check_launch_icon_shown🌑 -install_menu_option_SiteAFoo🌓 manifest_update_scope_site_a_foo_to_SiteA🌑 close_pwa🌑 launch_from_platform_shortcut_SiteAFoo🌑 close_pwa🌑 navigate_browser_SiteA🌑 check_launch_icon_shown🌑 -install_create_shortcut_windowed_SiteAFoo🌑 close_pwa🌑 manifest_update_scope_site_a_foo_to_SiteA🌑 navigate_browser_SiteABar🌑 check_install_icon_not_shown🌑 -install_omnibox_icon_SiteAFoo🌕 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteA🌑 navigate_browser_SiteABar🌑 check_install_icon_not_shown🌑 -install_menu_option_SiteAFoo🌓 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteA🌑 navigate_browser_SiteABar🌑 check_install_icon_not_shown🌑 -install_create_shortcut_windowed_SiteAFoo🌑 close_pwa🌑 manifest_update_scope_site_a_foo_to_SiteA🌑 navigate_browser_SiteABar🌑 check_launch_icon_shown🌑 -install_omnibox_icon_SiteAFoo🌕 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteA🌑 navigate_browser_SiteABar🌑 check_launch_icon_shown🌑 -install_menu_option_SiteAFoo🌓 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteA🌑 navigate_browser_SiteABar🌑 check_launch_icon_shown🌑 -install_create_shortcut_windowed_SiteAFoo🌑 navigate_browser_SiteABar🌑 check_install_icon_shown🌑 -install_omnibox_icon_SiteAFoo🌕 navigate_browser_SiteABar🌕 check_install_icon_shown🌕 -install_policy_app_windowed_no_shortcut_SiteAFoo🌑 navigate_browser_SiteABar🌑 check_install_icon_shown🌑 -install_policy_app_windowed_shortcut_SiteAFoo🌓 navigate_browser_SiteABar🌕 check_install_icon_shown🌕 -install_menu_option_SiteAFoo🌓 navigate_browser_SiteABar🌕 check_install_icon_shown🌕 -install_create_shortcut_windowed_SiteAFoo🌑 navigate_browser_SiteABar🌑 check_launch_icon_not_shown🌑 -install_omnibox_icon_SiteAFoo🌕 navigate_browser_SiteABar🌕 check_launch_icon_not_shown🌕 -install_policy_app_windowed_no_shortcut_SiteAFoo🌑 navigate_browser_SiteABar🌑 check_launch_icon_not_shown🌑 -install_policy_app_windowed_shortcut_SiteAFoo🌓 navigate_browser_SiteABar🌕 check_launch_icon_not_shown🌕 -install_menu_option_SiteAFoo🌓 navigate_browser_SiteABar🌕 check_launch_icon_not_shown🌕 -install_create_shortcut_windowed_SiteAFoo🌑 close_pwa🌑 manifest_update_scope_site_a_foo_to_SiteA🌑 navigate_browser_SiteAFoo🌑 check_install_icon_not_shown🌑 -install_omnibox_icon_SiteAFoo🌕 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteA🌑 navigate_browser_SiteAFoo🌑 check_install_icon_not_shown🌑 -install_menu_option_SiteAFoo🌓 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteA🌑 navigate_browser_SiteAFoo🌑 check_install_icon_not_shown🌑 -install_create_shortcut_windowed_SiteAFoo🌑 close_pwa🌑 manifest_update_scope_site_a_foo_to_SiteA🌑 navigate_browser_SiteAFoo🌑 check_launch_icon_shown🌑 -install_omnibox_icon_SiteAFoo🌕 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteA🌑 navigate_browser_SiteAFoo🌑 check_launch_icon_shown🌑 -install_menu_option_SiteAFoo🌓 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteA🌑 navigate_browser_SiteAFoo🌑 check_launch_icon_shown🌑 -install_create_shortcut_windowed_SiteA🌑 navigate_browser_SiteAFoo🌑 check_install_icon_not_shown🌑 -install_omnibox_icon_SiteA🌕 navigate_browser_SiteAFoo🌕 check_install_icon_not_shown🌕 -install_policy_app_windowed_no_shortcut_SiteA🌑 navigate_browser_SiteAFoo🌑 check_install_icon_not_shown🌑 -install_policy_app_windowed_shortcut_SiteA🌓 navigate_browser_SiteAFoo🌕 check_install_icon_not_shown🌕 -install_menu_option_SiteA🌓 navigate_browser_SiteAFoo🌕 check_install_icon_not_shown🌕 -install_create_shortcut_windowed_SiteA🌑 navigate_browser_SiteAFoo🌑 check_launch_icon_shown🌑 -install_omnibox_icon_SiteA🌕 navigate_browser_SiteAFoo🌕 check_launch_icon_shown🌕 -install_policy_app_windowed_no_shortcut_SiteA🌑 navigate_browser_SiteAFoo🌑 check_launch_icon_shown🌑 -install_policy_app_windowed_shortcut_SiteA🌓 navigate_browser_SiteAFoo🌕 check_launch_icon_shown🌕 -install_menu_option_SiteA🌓 navigate_browser_SiteAFoo🌕 check_launch_icon_shown🌕 -navigate_browser_SiteAFoo🌕 check_install_icon_shown🌕 -switch_incognito_profile🌑 navigate_browser_SiteA🌑 check_create_shortcut_not_shown🌑 -navigate_browser_SiteA🌕 check_app_not_in_list_SiteA🌕 -navigate_browser_SiteA🌕 check_create_shortcut_shown🌑 -navigate_browser_SiteA🌕 check_platform_shortcut_not_exists_SiteA🌑 -install_create_shortcut_windowed_SiteA🌑 navigate_browser_SiteB🌑 check_install_icon_shown🌑 -install_omnibox_icon_SiteA🌕 navigate_browser_SiteB🌕 check_install_icon_shown🌕 -install_menu_option_SiteA🌓 navigate_browser_SiteB🌕 check_install_icon_shown🌕 -install_create_shortcut_windowed_SiteA🌑 navigate_browser_SiteB🌑 check_launch_icon_not_shown🌑 -install_omnibox_icon_SiteA🌕 navigate_browser_SiteB🌕 check_launch_icon_not_shown🌕 -install_menu_option_SiteA🌓 navigate_browser_SiteB🌕 check_launch_icon_not_shown🌕 -switch_incognito_profile🌑 navigate_browser_SiteC🌑 check_create_shortcut_not_shown🌑 -navigate_browser_SiteC🌕 check_app_not_in_list_SiteA🌕 -navigate_browser_SiteC🌕 check_create_shortcut_shown🌑 -navigate_browser_SiteC🌕 check_install_icon_not_shown🌕 -navigate_browser_SiteC🌕 check_platform_shortcut_not_exists_SiteA🌑 -navigate_crashed_url🌑 check_create_shortcut_not_shown🌑 -navigate_crashed_url🌑 check_install_icon_not_shown🌑 -navigate_notfound_url🌑 check_create_shortcut_not_shown🌑 -navigate_notfound_url🌑 check_install_icon_not_shown🌑 -install_create_shortcut_windowed_SiteAFoo🌑 close_pwa🌑 manifest_update_scope_site_a_foo_to_SiteA🌑 launch_from_menu_option_SiteAFoo🌑 navigate_pwa_site_a_foo_to_SiteABar🌑 check_no_toolbar🌑 -install_create_shortcut_windowed_SiteAFoo🌑 close_pwa🌑 manifest_update_scope_site_a_foo_to_SiteA🌑 launch_from_launch_icon_SiteAFoo🌑 navigate_pwa_site_a_foo_to_SiteABar🌑 check_no_toolbar🌑 -install_create_shortcut_windowed_SiteAFoo🌑 close_pwa🌑 manifest_update_scope_site_a_foo_to_SiteA🌑 launch_from_chrome_apps_SiteAFoo🌑 navigate_pwa_site_a_foo_to_SiteABar🌑 check_no_toolbar🌑 -install_create_shortcut_windowed_SiteAFoo🌑 close_pwa🌑 manifest_update_scope_site_a_foo_to_SiteA🌑 launch_from_platform_shortcut_SiteAFoo🌑 navigate_pwa_site_a_foo_to_SiteABar🌑 check_no_toolbar🌑 -install_omnibox_icon_SiteAFoo🌕 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteA🌑 launch_from_menu_option_SiteAFoo🌑 navigate_pwa_site_a_foo_to_SiteABar🌑 check_no_toolbar🌑 -install_omnibox_icon_SiteAFoo🌕 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteA🌑 launch_from_launch_icon_SiteAFoo🌑 navigate_pwa_site_a_foo_to_SiteABar🌑 check_no_toolbar🌑 -install_omnibox_icon_SiteAFoo🌕 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteA🌑 launch_from_chrome_apps_SiteAFoo🌑 navigate_pwa_site_a_foo_to_SiteABar🌑 check_no_toolbar🌑 -install_omnibox_icon_SiteAFoo🌕 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteA🌑 launch_from_platform_shortcut_SiteAFoo🌑 navigate_pwa_site_a_foo_to_SiteABar🌑 check_no_toolbar🌑 -install_menu_option_SiteAFoo🌓 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteA🌑 launch_from_menu_option_SiteAFoo🌑 navigate_pwa_site_a_foo_to_SiteABar🌑 check_no_toolbar🌑 -install_menu_option_SiteAFoo🌓 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteA🌑 launch_from_launch_icon_SiteAFoo🌑 navigate_pwa_site_a_foo_to_SiteABar🌑 check_no_toolbar🌑 -install_menu_option_SiteAFoo🌓 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteA🌑 launch_from_chrome_apps_SiteAFoo🌑 navigate_pwa_site_a_foo_to_SiteABar🌑 check_no_toolbar🌑 -install_menu_option_SiteAFoo🌓 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteA🌑 launch_from_platform_shortcut_SiteAFoo🌑 navigate_pwa_site_a_foo_to_SiteABar🌑 check_no_toolbar🌑 -install_create_shortcut_windowed_SiteA🌑 navigate_pwa_site_a_to_SiteB🌑 check_toolbar🌑 -install_omnibox_icon_SiteA🌕 navigate_pwa_site_a_to_SiteB🌑 check_toolbar🌑 -install_menu_option_SiteA🌓 navigate_pwa_site_a_to_SiteB🌑 check_toolbar🌑 -install_create_shortcut_windowed_SiteA🌑 navigate_pwa_site_a_to_SiteB🌑 check_window_title_is_SiteA🌑 -install_omnibox_icon_SiteA🌕 navigate_pwa_site_a_to_SiteB🌑 check_window_title_is_SiteA🌑 -install_menu_option_SiteA🌓 navigate_pwa_site_a_to_SiteB🌑 check_window_title_is_SiteA🌑 -install_create_shortcut_windowed_SiteA🌑 open_in_chrome🌑 check_tab_created🌑 -install_omnibox_icon_SiteA🌕 open_in_chrome🌑 check_tab_created🌑 -install_menu_option_SiteA🌓 open_in_chrome🌑 check_tab_created🌑 -install_create_shortcut_windowed_SiteA🌑 navigate_pwa_site_a_to_SiteB🌑 open_in_chrome🌑 check_tab_created🌑 -install_omnibox_icon_SiteA🌕 navigate_pwa_site_a_to_SiteB🌑 open_in_chrome🌑 check_tab_created🌑 -install_menu_option_SiteA🌓 navigate_pwa_site_a_to_SiteB🌑 open_in_chrome🌑 check_tab_created🌑 -install_create_shortcut_tabbed_SiteA🌑 install_policy_app_windowed_no_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_app_in_list_tabbed_SiteA🌑 -install_create_shortcut_tabbed_SiteA🌑 install_policy_app_tabbed_no_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_app_in_list_tabbed_SiteA🌑 -install_create_shortcut_tabbed_SiteA🌑 install_policy_app_windowed_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_app_in_list_tabbed_SiteA🌑 -install_create_shortcut_tabbed_SiteA🌑 install_policy_app_tabbed_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_app_in_list_tabbed_SiteA🌑 -install_create_shortcut_tabbed_SiteA🌑 install_policy_app_windowed_no_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 -install_create_shortcut_tabbed_SiteA🌑 install_policy_app_tabbed_no_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 -install_create_shortcut_tabbed_SiteA🌑 install_policy_app_windowed_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 -install_create_shortcut_tabbed_SiteA🌑 install_policy_app_tabbed_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 -install_create_shortcut_windowed_SiteA🌑 install_policy_app_windowed_no_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_app_in_list_windowed_SiteA🌑 -install_create_shortcut_windowed_SiteA🌑 install_policy_app_tabbed_no_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_app_in_list_windowed_SiteA🌑 -install_create_shortcut_windowed_SiteA🌑 install_policy_app_windowed_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_app_in_list_windowed_SiteA🌑 -install_create_shortcut_windowed_SiteA🌑 install_policy_app_tabbed_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_app_in_list_windowed_SiteA🌑 -install_omnibox_icon_SiteA🌕 install_policy_app_windowed_no_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_app_in_list_windowed_SiteA🌑 -install_omnibox_icon_SiteA🌕 install_policy_app_tabbed_no_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_app_in_list_windowed_SiteA🌑 -install_omnibox_icon_SiteA🌕 install_policy_app_windowed_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_app_in_list_windowed_SiteA🌑 -install_omnibox_icon_SiteA🌕 install_policy_app_tabbed_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_app_in_list_windowed_SiteA🌑 -install_menu_option_SiteA🌓 install_policy_app_windowed_no_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_app_in_list_windowed_SiteA🌑 -install_menu_option_SiteA🌓 install_policy_app_tabbed_no_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_app_in_list_windowed_SiteA🌑 -install_menu_option_SiteA🌓 install_policy_app_windowed_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_app_in_list_windowed_SiteA🌑 -install_menu_option_SiteA🌓 install_policy_app_tabbed_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_app_in_list_windowed_SiteA🌑 -install_create_shortcut_windowed_SiteA🌑 install_policy_app_windowed_no_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 -install_create_shortcut_windowed_SiteA🌑 install_policy_app_tabbed_no_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 -install_create_shortcut_windowed_SiteA🌑 install_policy_app_windowed_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 -install_create_shortcut_windowed_SiteA🌑 install_policy_app_tabbed_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 -install_omnibox_icon_SiteA🌕 install_policy_app_windowed_no_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 -install_omnibox_icon_SiteA🌕 install_policy_app_tabbed_no_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 -install_omnibox_icon_SiteA🌕 install_policy_app_windowed_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_platform_shortcut_exists_SiteA🌑 -install_omnibox_icon_SiteA🌕 install_policy_app_tabbed_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_platform_shortcut_exists_SiteA🌑 -install_menu_option_SiteA🌓 install_policy_app_windowed_no_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 -install_menu_option_SiteA🌓 install_policy_app_tabbed_no_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 -install_menu_option_SiteA🌓 install_policy_app_windowed_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_platform_shortcut_exists_SiteA🌑 -install_menu_option_SiteA🌓 install_policy_app_tabbed_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_platform_shortcut_exists_SiteA🌑 -install_policy_app_windowed_no_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_app_not_in_list_SiteA🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_app_not_in_list_SiteA🌑 -install_policy_app_windowed_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_app_not_in_list_SiteA🌕 -install_policy_app_tabbed_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_app_not_in_list_SiteA🌕 -install_policy_app_tabbed_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 navigate_browser_SiteA🌕 check_install_icon_shown🌕 -install_policy_app_tabbed_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 navigate_browser_SiteA🌕 check_launch_icon_not_shown🌕 -install_policy_app_windowed_no_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_platform_shortcut_not_exists_SiteA🌑 check_app_not_in_list_SiteA🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_platform_shortcut_not_exists_SiteA🌑 check_app_not_in_list_SiteA🌑 -install_policy_app_windowed_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_platform_shortcut_not_exists_SiteA🌑 check_app_not_in_list_SiteA🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_platform_shortcut_not_exists_SiteA🌑 check_app_not_in_list_SiteA🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 install_create_shortcut_windowed_SiteA🌑 uninstall_policy_app_SiteA🌑 check_app_in_list_windowed_SiteA🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 install_omnibox_icon_SiteA🌕 uninstall_policy_app_SiteA🌕 check_app_in_list_windowed_SiteA🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 install_menu_option_SiteA🌓 uninstall_policy_app_SiteA🌕 check_app_in_list_windowed_SiteA🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 install_create_shortcut_windowed_SiteA🌑 uninstall_policy_app_SiteA🌑 check_app_in_list_windowed_SiteA🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 install_omnibox_icon_SiteA🌑 uninstall_policy_app_SiteA🌑 check_app_in_list_windowed_SiteA🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 install_menu_option_SiteA🌑 uninstall_policy_app_SiteA🌑 check_app_in_list_windowed_SiteA🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 install_create_shortcut_windowed_SiteA🌑 uninstall_policy_app_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 install_omnibox_icon_SiteA🌕 uninstall_policy_app_SiteA🌕 check_platform_shortcut_exists_SiteA🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 install_menu_option_SiteA🌓 uninstall_policy_app_SiteA🌕 check_platform_shortcut_exists_SiteA🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 install_create_shortcut_windowed_SiteA🌑 uninstall_policy_app_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 install_omnibox_icon_SiteA🌑 uninstall_policy_app_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 install_menu_option_SiteA🌑 uninstall_policy_app_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 -install_create_shortcut_windowed_SiteA🌑 set_app_badge_SiteA🌑 check_app_badge_has_value_SiteA🌑 -install_omnibox_icon_SiteA🌕 set_app_badge_SiteA🌑 check_app_badge_has_value_SiteA🌑 -install_menu_option_SiteA🌓 set_app_badge_SiteA🌑 check_app_badge_has_value_SiteA🌑 -navigate_browser_SiteA🌕 set_app_badge_SiteA🌑 check_platform_shortcut_not_exists_SiteA🌑 -install_create_shortcut_windowed_SiteA🌑 set_open_in_tab_SiteA🌑 check_app_in_list_tabbed_SiteA🌑 -install_omnibox_icon_SiteA🌕 set_open_in_tab_SiteA🌓 check_app_in_list_tabbed_SiteA🌑 -install_menu_option_SiteA🌓 set_open_in_tab_SiteA🌓 check_app_in_list_tabbed_SiteA🌑 -install_create_shortcut_windowed_SiteA🌑 set_open_in_tab_SiteA🌑 navigate_browser_SiteA🌑 check_install_icon_shown🌑 -install_omnibox_icon_SiteA🌕 set_open_in_tab_SiteA🌓 navigate_browser_SiteA🌕 check_install_icon_shown🌕 -install_menu_option_SiteA🌓 set_open_in_tab_SiteA🌓 navigate_browser_SiteA🌕 check_install_icon_shown🌕 -install_create_shortcut_tabbed_SiteA🌑 set_open_in_window_SiteA🌑 check_app_in_list_windowed_SiteA🌑 -install_create_shortcut_tabbed_SiteA🌑 set_open_in_window_SiteA🌑 navigate_browser_SiteA🌑 check_install_icon_not_shown🌑 -install_create_shortcut_tabbed_SiteA🌑 set_open_in_window_SiteA🌑 navigate_browser_SiteA🌑 check_launch_icon_shown🌑 -install_create_shortcut_windowed_SiteA🌑 switch_incognito_profile🌑 navigate_browser_SiteA🌑 check_launch_icon_not_shown🌑 -install_omnibox_icon_SiteA🌕 switch_incognito_profile🌑 navigate_browser_SiteA🌑 check_launch_icon_not_shown🌑 -install_menu_option_SiteA🌓 switch_incognito_profile🌑 navigate_browser_SiteA🌑 check_launch_icon_not_shown🌑 -switch_incognito_profile🌑 navigate_browser_SiteA🌑 check_install_icon_not_shown🌑 -install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 check_app_in_list_not_locally_installed_SiteA🌑 -install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 check_app_in_list_not_locally_installed_SiteA🌓 -install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 check_app_in_list_not_locally_installed_SiteA🌓 -install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 check_app_in_list_not_locally_installed_SiteA🌑 -install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 check_platform_shortcut_not_exists_SiteA🌑 -install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 check_platform_shortcut_not_exists_SiteA🌑 -install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 check_platform_shortcut_not_exists_SiteA🌑 -install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 check_platform_shortcut_not_exists_SiteA🌑 -install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 navigate_browser_SiteA🌑 check_install_icon_shown🌑 -install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 navigate_browser_SiteA🌕 check_install_icon_shown🌕 -install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 navigate_browser_SiteA🌕 check_install_icon_shown🌕 -install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 navigate_browser_SiteA🌑 check_launch_icon_not_shown🌑 -install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 navigate_browser_SiteA🌕 check_launch_icon_not_shown🌕 -install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 navigate_browser_SiteA🌕 check_launch_icon_not_shown🌕 -install_create_shortcut_windowed_SiteC🌑 switch_profile_clients_UserAClient2🌑 check_app_in_list_not_locally_installed_SiteC🌑 -install_create_shortcut_tabbed_SiteC🌑 switch_profile_clients_UserAClient2🌑 check_app_in_list_not_locally_installed_SiteC🌑 -install_create_shortcut_windowed_SiteC🌑 switch_profile_clients_UserAClient2🌑 check_platform_shortcut_not_exists_SiteC🌑 -install_create_shortcut_tabbed_SiteC🌑 switch_profile_clients_UserAClient2🌑 check_platform_shortcut_not_exists_SiteC🌑 -sync_turn_off🌕 install_create_shortcut_windowed_SiteA🌑 sync_turn_on🌑 switch_profile_clients_UserAClient2🌑 check_app_in_list_not_locally_installed_SiteA🌑 -sync_turn_off🌕 install_omnibox_icon_SiteA🌕 sync_turn_on🌕 switch_profile_clients_UserAClient2🌕 check_app_in_list_not_locally_installed_SiteA🌓 -sync_turn_off🌕 install_menu_option_SiteA🌓 sync_turn_on🌕 switch_profile_clients_UserAClient2🌕 check_app_in_list_not_locally_installed_SiteA🌓 -sync_turn_off🌕 install_create_shortcut_tabbed_SiteA🌑 sync_turn_on🌑 switch_profile_clients_UserAClient2🌑 check_app_in_list_not_locally_installed_SiteA🌑 -sync_turn_off🌕 install_create_shortcut_windowed_SiteC🌑 sync_turn_on🌑 switch_profile_clients_UserAClient2🌑 check_app_in_list_not_locally_installed_SiteC🌑 -sync_turn_off🌕 install_create_shortcut_tabbed_SiteC🌑 sync_turn_on🌑 switch_profile_clients_UserAClient2🌑 check_app_in_list_not_locally_installed_SiteC🌑 -install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 sync_turn_off🌑 uninstall_from_app_list_SiteA🌑 sync_turn_on🌑 switch_profile_clients_UserAClient1🌑 check_app_not_in_list_SiteA🌑 -install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 sync_turn_off🌕 uninstall_from_app_list_SiteA🌑 sync_turn_on🌑 switch_profile_clients_UserAClient1🌑 check_app_not_in_list_SiteA🌑 -install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 sync_turn_off🌕 uninstall_from_app_list_SiteA🌑 sync_turn_on🌑 switch_profile_clients_UserAClient1🌑 check_app_not_in_list_SiteA🌑 -install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 sync_turn_off🌑 uninstall_from_app_list_SiteA🌑 sync_turn_on🌑 switch_profile_clients_UserAClient1🌑 check_app_not_in_list_SiteA🌑 -install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 sync_turn_off🌑 uninstall_from_app_list_SiteA🌑 sync_turn_on🌑 switch_profile_clients_UserAClient1🌑 check_platform_shortcut_not_exists_SiteA🌑 -install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 sync_turn_off🌕 uninstall_from_app_list_SiteA🌑 sync_turn_on🌑 switch_profile_clients_UserAClient1🌑 check_platform_shortcut_not_exists_SiteA🌑 -install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 sync_turn_off🌕 uninstall_from_app_list_SiteA🌑 sync_turn_on🌑 switch_profile_clients_UserAClient1🌑 check_platform_shortcut_not_exists_SiteA🌑 -install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 sync_turn_off🌑 uninstall_from_app_list_SiteA🌑 sync_turn_on🌑 switch_profile_clients_UserAClient1🌑 check_platform_shortcut_not_exists_SiteA🌑 -install_create_shortcut_windowed_SiteA🌑 uninstall_from_app_list_SiteA🌑 check_app_not_in_list_SiteA🌑 -install_create_shortcut_windowed_SiteA🌑 uninstall_from_menu_SiteA🌑 check_app_not_in_list_SiteA🌑 -install_omnibox_icon_SiteA🌕 uninstall_from_app_list_SiteA🌑 check_app_not_in_list_SiteA🌑 -install_omnibox_icon_SiteA🌕 uninstall_from_menu_SiteA🌕 check_app_not_in_list_SiteA🌕 -install_menu_option_SiteA🌓 uninstall_from_app_list_SiteA🌑 check_app_not_in_list_SiteA🌑 -install_menu_option_SiteA🌓 uninstall_from_menu_SiteA🌕 check_app_not_in_list_SiteA🌕 -install_create_shortcut_tabbed_SiteA🌑 uninstall_from_app_list_SiteA🌑 check_app_not_in_list_SiteA🌑 -install_create_shortcut_tabbed_SiteA🌑 uninstall_from_menu_SiteA🌑 check_app_not_in_list_SiteA🌑 -install_create_shortcut_windowed_SiteA🌑 uninstall_from_app_list_SiteA🌑 navigate_browser_SiteA🌑 check_install_icon_shown🌑 -install_create_shortcut_windowed_SiteA🌑 uninstall_from_menu_SiteA🌑 navigate_browser_SiteA🌑 check_install_icon_shown🌑 -install_omnibox_icon_SiteA🌕 uninstall_from_app_list_SiteA🌑 navigate_browser_SiteA🌑 check_install_icon_shown🌑 -install_omnibox_icon_SiteA🌕 uninstall_from_menu_SiteA🌕 navigate_browser_SiteA🌕 check_install_icon_shown🌕 -install_menu_option_SiteA🌓 uninstall_from_app_list_SiteA🌑 navigate_browser_SiteA🌑 check_install_icon_shown🌑 -install_menu_option_SiteA🌓 uninstall_from_menu_SiteA🌕 navigate_browser_SiteA🌕 check_install_icon_shown🌕 -install_create_shortcut_tabbed_SiteA🌑 uninstall_from_app_list_SiteA🌑 navigate_browser_SiteA🌑 check_install_icon_shown🌑 -install_create_shortcut_tabbed_SiteA🌑 uninstall_from_menu_SiteA🌑 navigate_browser_SiteA🌑 check_install_icon_shown🌑 -install_create_shortcut_windowed_SiteA🌑 uninstall_from_app_list_SiteA🌑 navigate_browser_SiteA🌑 check_launch_icon_not_shown🌑 -install_create_shortcut_windowed_SiteA🌑 uninstall_from_menu_SiteA🌑 navigate_browser_SiteA🌑 check_launch_icon_not_shown🌑 -install_omnibox_icon_SiteA🌕 uninstall_from_app_list_SiteA🌑 navigate_browser_SiteA🌑 check_launch_icon_not_shown🌑 -install_omnibox_icon_SiteA🌕 uninstall_from_menu_SiteA🌕 navigate_browser_SiteA🌕 check_launch_icon_not_shown🌕 -install_menu_option_SiteA🌓 uninstall_from_app_list_SiteA🌑 navigate_browser_SiteA🌑 check_launch_icon_not_shown🌑 -install_menu_option_SiteA🌓 uninstall_from_menu_SiteA🌕 navigate_browser_SiteA🌕 check_launch_icon_not_shown🌕 -install_create_shortcut_tabbed_SiteA🌑 uninstall_from_app_list_SiteA🌑 navigate_browser_SiteA🌑 check_launch_icon_not_shown🌑 -install_create_shortcut_tabbed_SiteA🌑 uninstall_from_menu_SiteA🌑 navigate_browser_SiteA🌑 check_launch_icon_not_shown🌑 -install_create_shortcut_windowed_SiteA🌑 uninstall_from_app_list_SiteA🌑 check_platform_shortcut_not_exists_SiteA🌑 -install_create_shortcut_windowed_SiteA🌑 uninstall_from_menu_SiteA🌑 check_platform_shortcut_not_exists_SiteA🌑 -install_omnibox_icon_SiteA🌕 uninstall_from_app_list_SiteA🌑 check_platform_shortcut_not_exists_SiteA🌑 -install_omnibox_icon_SiteA🌕 uninstall_from_menu_SiteA🌕 check_platform_shortcut_not_exists_SiteA🌑 -install_menu_option_SiteA🌓 uninstall_from_app_list_SiteA🌑 check_platform_shortcut_not_exists_SiteA🌑 -install_menu_option_SiteA🌓 uninstall_from_menu_SiteA🌕 check_platform_shortcut_not_exists_SiteA🌑 -install_create_shortcut_tabbed_SiteA🌑 uninstall_from_app_list_SiteA🌑 check_platform_shortcut_not_exists_SiteA🌑 -install_create_shortcut_tabbed_SiteA🌑 uninstall_from_menu_SiteA🌑 check_platform_shortcut_not_exists_SiteA🌑 -install_create_shortcut_windowed_SiteC🌑 uninstall_from_app_list_SiteC🌑 check_app_not_in_list_SiteA🌑 -install_create_shortcut_windowed_SiteC🌑 uninstall_from_menu_SiteC🌑 check_app_not_in_list_SiteA🌑 -install_create_shortcut_tabbed_SiteC🌑 uninstall_from_app_list_SiteC🌑 check_app_not_in_list_SiteA🌑 -install_create_shortcut_tabbed_SiteC🌑 uninstall_from_menu_SiteC🌑 check_app_not_in_list_SiteA🌑 -install_create_shortcut_windowed_SiteC🌑 uninstall_from_app_list_SiteC🌑 navigate_browser_SiteC🌑 check_launch_icon_not_shown🌑 -install_create_shortcut_windowed_SiteC🌑 uninstall_from_menu_SiteC🌑 navigate_browser_SiteC🌑 check_launch_icon_not_shown🌑 -install_create_shortcut_tabbed_SiteC🌑 uninstall_from_app_list_SiteC🌑 navigate_browser_SiteC🌑 check_launch_icon_not_shown🌑 -install_create_shortcut_tabbed_SiteC🌑 uninstall_from_menu_SiteC🌑 navigate_browser_SiteC🌑 check_launch_icon_not_shown🌑 -install_create_shortcut_windowed_SiteC🌑 uninstall_from_app_list_SiteC🌑 check_platform_shortcut_not_exists_SiteC🌑 -install_create_shortcut_windowed_SiteC🌑 uninstall_from_menu_SiteC🌑 check_platform_shortcut_not_exists_SiteC🌑 -install_create_shortcut_tabbed_SiteC🌑 uninstall_from_app_list_SiteC🌑 check_platform_shortcut_not_exists_SiteC🌑 -install_create_shortcut_tabbed_SiteC🌑 uninstall_from_menu_SiteC🌑 check_platform_shortcut_not_exists_SiteC🌑 -install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 uninstall_from_app_list_SiteA🌑 check_app_not_in_list_SiteA🌑 -install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 uninstall_from_app_list_SiteA🌑 check_app_not_in_list_SiteA🌑 -install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 uninstall_from_app_list_SiteA🌑 check_app_not_in_list_SiteA🌑 -install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 uninstall_from_app_list_SiteA🌑 check_app_not_in_list_SiteA🌑 -install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 uninstall_from_app_list_SiteA🌑 switch_profile_clients_UserAClient1🌑 check_app_not_in_list_SiteA🌑 -install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 uninstall_from_app_list_SiteA🌑 switch_profile_clients_UserAClient1🌑 check_app_not_in_list_SiteA🌑 -install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 uninstall_from_app_list_SiteA🌑 switch_profile_clients_UserAClient1🌑 check_app_not_in_list_SiteA🌑 -install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 uninstall_from_app_list_SiteA🌑 switch_profile_clients_UserAClient1🌑 check_app_not_in_list_SiteA🌑 +# This is a generated file. +# Full coverage: 14%, with partial coverage: 24% +install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 chrome_update🌑 check_app_in_list_not_locally_installed_SiteA🌑 +install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 chrome_update🌑 check_app_in_list_not_locally_installed_SiteA🌑 +install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 chrome_update🌑 check_app_in_list_not_locally_installed_SiteA🌑 +install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 chrome_update🌑 check_app_in_list_not_locally_installed_SiteA🌑 +install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteA🌑 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 +install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 install_locally_SiteA🌓 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 +install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 install_locally_SiteA🌓 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 +install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteA🌑 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 +install_create_shortcut_windowed_SiteA🌑 uninstall_from_app_list_SiteA🌑 chrome_update🌑 check_app_not_in_list_SiteA🌑 +install_create_shortcut_windowed_SiteA🌑 uninstall_from_menu_SiteA🌑 chrome_update🌑 check_app_not_in_list_SiteA🌑 +install_omnibox_icon_SiteA🌕 uninstall_from_app_list_SiteA🌑 chrome_update🌑 check_app_not_in_list_SiteA🌑 +install_omnibox_icon_SiteA🌕 uninstall_from_menu_SiteA🌕 chrome_update🌑 check_app_not_in_list_SiteA🌑 +install_menu_option_SiteA🌓 uninstall_from_app_list_SiteA🌑 chrome_update🌑 check_app_not_in_list_SiteA🌑 +install_menu_option_SiteA🌓 uninstall_from_menu_SiteA🌕 chrome_update🌑 check_app_not_in_list_SiteA🌑 +install_create_shortcut_tabbed_SiteA🌑 uninstall_from_app_list_SiteA🌑 chrome_update🌑 check_app_not_in_list_SiteA🌑 +install_create_shortcut_tabbed_SiteA🌑 uninstall_from_menu_SiteA🌑 chrome_update🌑 check_app_not_in_list_SiteA🌑 +install_create_shortcut_windowed_SiteA🌑 uninstall_from_app_list_SiteA🌑 chrome_update🌑 check_platform_shortcut_not_exists_SiteA🌑 +install_create_shortcut_windowed_SiteA🌑 uninstall_from_menu_SiteA🌑 chrome_update🌑 check_platform_shortcut_not_exists_SiteA🌑 +install_omnibox_icon_SiteA🌕 uninstall_from_app_list_SiteA🌑 chrome_update🌑 check_platform_shortcut_not_exists_SiteA🌑 +install_omnibox_icon_SiteA🌕 uninstall_from_menu_SiteA🌕 chrome_update🌑 check_platform_shortcut_not_exists_SiteA🌑 +install_menu_option_SiteA🌓 uninstall_from_app_list_SiteA🌑 chrome_update🌑 check_platform_shortcut_not_exists_SiteA🌑 +install_menu_option_SiteA🌓 uninstall_from_menu_SiteA🌕 chrome_update🌑 check_platform_shortcut_not_exists_SiteA🌑 +install_create_shortcut_tabbed_SiteA🌑 uninstall_from_app_list_SiteA🌑 chrome_update🌑 check_platform_shortcut_not_exists_SiteA🌑 +install_create_shortcut_tabbed_SiteA🌑 uninstall_from_menu_SiteA🌑 chrome_update🌑 check_platform_shortcut_not_exists_SiteA🌑 +install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteA🌑 chrome_update🌑 check_app_in_list_tabbed_SiteA🌑 +install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteA🌑 chrome_update🌑 check_app_in_list_windowed_SiteA🌑 +install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 install_locally_SiteA🌓 chrome_update🌑 check_app_in_list_windowed_SiteA🌑 +install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 install_locally_SiteA🌓 chrome_update🌑 check_app_in_list_windowed_SiteA🌑 +install_create_shortcut_windowed_SiteC🌑 switch_profile_clients_UserAClient2🌑 chrome_update🌑 check_app_in_list_not_locally_installed_SiteC🌑 +install_create_shortcut_tabbed_SiteC🌑 switch_profile_clients_UserAClient2🌑 chrome_update🌑 check_app_in_list_not_locally_installed_SiteC🌑 +install_policy_app_windowed_no_shortcut_SiteA🌑 chrome_update🌑 check_platform_shortcut_not_exists_SiteA🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 chrome_update🌑 check_platform_shortcut_not_exists_SiteA🌑 +install_policy_app_windowed_no_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 chrome_update🌑 check_app_not_in_list_SiteA🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 chrome_update🌑 check_app_not_in_list_SiteA🌑 +install_policy_app_windowed_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 chrome_update🌑 check_app_not_in_list_SiteA🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 chrome_update🌑 check_app_not_in_list_SiteA🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 install_create_shortcut_windowed_SiteA🌑 chrome_update🌑 check_app_in_list_windowed_SiteA🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 install_omnibox_icon_SiteA🌕 chrome_update🌑 check_app_in_list_windowed_SiteA🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 install_menu_option_SiteA🌓 chrome_update🌑 check_app_in_list_windowed_SiteA🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 install_create_shortcut_windowed_SiteA🌑 chrome_update🌑 check_app_in_list_windowed_SiteA🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 install_omnibox_icon_SiteA🌑 chrome_update🌑 check_app_in_list_windowed_SiteA🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 install_menu_option_SiteA🌑 chrome_update🌑 check_app_in_list_windowed_SiteA🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 install_create_shortcut_windowed_SiteA🌑 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 install_omnibox_icon_SiteA🌕 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 install_menu_option_SiteA🌓 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 install_create_shortcut_windowed_SiteA🌑 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 install_omnibox_icon_SiteA🌑 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 install_menu_option_SiteA🌑 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 install_create_shortcut_windowed_SiteA🌑 uninstall_policy_app_SiteA🌑 chrome_update🌑 check_app_in_list_windowed_SiteA🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 install_omnibox_icon_SiteA🌕 uninstall_policy_app_SiteA🌕 chrome_update🌑 check_app_in_list_windowed_SiteA🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 install_menu_option_SiteA🌓 uninstall_policy_app_SiteA🌕 chrome_update🌑 check_app_in_list_windowed_SiteA🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 install_create_shortcut_windowed_SiteA🌑 uninstall_policy_app_SiteA🌑 chrome_update🌑 check_app_in_list_windowed_SiteA🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 install_omnibox_icon_SiteA🌑 uninstall_policy_app_SiteA🌑 chrome_update🌑 check_app_in_list_windowed_SiteA🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 install_menu_option_SiteA🌑 uninstall_policy_app_SiteA🌑 chrome_update🌑 check_app_in_list_windowed_SiteA🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 install_create_shortcut_windowed_SiteA🌑 uninstall_policy_app_SiteA🌑 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 install_omnibox_icon_SiteA🌕 uninstall_policy_app_SiteA🌕 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 install_menu_option_SiteA🌓 uninstall_policy_app_SiteA🌕 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 install_create_shortcut_windowed_SiteA🌑 uninstall_policy_app_SiteA🌑 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 install_omnibox_icon_SiteA🌑 uninstall_policy_app_SiteA🌑 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 install_menu_option_SiteA🌑 uninstall_policy_app_SiteA🌑 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 +install_create_shortcut_tabbed_SiteA🌑 chrome_update🌑 check_app_in_list_tabbed_SiteA🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 chrome_update🌑 check_app_in_list_tabbed_SiteA🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 chrome_update🌑 check_app_in_list_tabbed_SiteA🌑 +install_create_shortcut_tabbed_SiteA🌑 chrome_update🌑 navigate_browser_SiteA🌑 check_create_shortcut_shown🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 chrome_update🌑 navigate_browser_SiteA🌑 check_create_shortcut_shown🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 chrome_update🌑 navigate_browser_SiteA🌑 check_create_shortcut_shown🌑 +install_create_shortcut_tabbed_SiteA🌑 chrome_update🌑 navigate_browser_SiteA🌑 check_install_icon_shown🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 chrome_update🌑 navigate_browser_SiteA🌑 check_install_icon_shown🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 chrome_update🌑 navigate_browser_SiteA🌑 check_install_icon_shown🌑 +install_create_shortcut_tabbed_SiteA🌑 chrome_update🌑 navigate_browser_SiteA🌑 check_launch_icon_not_shown🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 chrome_update🌑 navigate_browser_SiteA🌑 check_launch_icon_not_shown🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 chrome_update🌑 navigate_browser_SiteA🌑 check_launch_icon_not_shown🌑 +install_create_shortcut_windowed_SiteA🌑 chrome_update🌑 check_app_in_list_windowed_SiteA🌑 +install_omnibox_icon_SiteA🌕 chrome_update🌑 check_app_in_list_windowed_SiteA🌑 +install_policy_app_windowed_no_shortcut_SiteA🌑 chrome_update🌑 check_app_in_list_windowed_SiteA🌑 +install_policy_app_windowed_shortcut_SiteA🌓 chrome_update🌑 check_app_in_list_windowed_SiteA🌑 +install_menu_option_SiteA🌓 chrome_update🌑 check_app_in_list_windowed_SiteA🌑 +install_create_shortcut_windowed_SiteA🌑 chrome_update🌑 navigate_browser_SiteA🌑 check_create_shortcut_not_shown🌑 +install_omnibox_icon_SiteA🌕 chrome_update🌑 navigate_browser_SiteA🌑 check_create_shortcut_not_shown🌑 +install_policy_app_windowed_no_shortcut_SiteA🌑 chrome_update🌑 navigate_browser_SiteA🌑 check_create_shortcut_not_shown🌑 +install_policy_app_windowed_shortcut_SiteA🌓 chrome_update🌑 navigate_browser_SiteA🌑 check_create_shortcut_not_shown🌑 +install_menu_option_SiteA🌓 chrome_update🌑 navigate_browser_SiteA🌑 check_create_shortcut_not_shown🌑 +install_create_shortcut_windowed_SiteA🌑 chrome_update🌑 navigate_browser_SiteA🌑 check_install_icon_not_shown🌑 +install_omnibox_icon_SiteA🌕 chrome_update🌑 navigate_browser_SiteA🌑 check_install_icon_not_shown🌑 +install_policy_app_windowed_no_shortcut_SiteA🌑 chrome_update🌑 navigate_browser_SiteA🌑 check_install_icon_not_shown🌑 +install_policy_app_windowed_shortcut_SiteA🌓 chrome_update🌑 navigate_browser_SiteA🌑 check_install_icon_not_shown🌑 +install_menu_option_SiteA🌓 chrome_update🌑 navigate_browser_SiteA🌑 check_install_icon_not_shown🌑 +install_create_shortcut_windowed_SiteA🌑 chrome_update🌑 navigate_browser_SiteA🌑 check_launch_icon_shown🌑 +install_omnibox_icon_SiteA🌕 chrome_update🌑 navigate_browser_SiteA🌑 check_launch_icon_shown🌑 +install_policy_app_windowed_no_shortcut_SiteA🌑 chrome_update🌑 navigate_browser_SiteA🌑 check_launch_icon_shown🌑 +install_policy_app_windowed_shortcut_SiteA🌓 chrome_update🌑 navigate_browser_SiteA🌑 check_launch_icon_shown🌑 +install_menu_option_SiteA🌓 chrome_update🌑 navigate_browser_SiteA🌑 check_launch_icon_shown🌑 +install_policy_app_windowed_shortcut_SiteA🌓 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 +install_create_shortcut_windowed_SiteA🌑 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 +install_omnibox_icon_SiteA🌕 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 +install_menu_option_SiteA🌓 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 +install_create_shortcut_tabbed_SiteA🌑 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 +install_policy_app_windowed_shortcut_SiteA🌓 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 +install_create_shortcut_windowed_SiteA🌑 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 +install_omnibox_icon_SiteA🌕 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 +install_menu_option_SiteA🌓 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 +install_create_shortcut_tabbed_SiteA🌑 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 +install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 chrome_update🌑 launch_from_menu_option_SiteA🌑 check_tab_created🌑 +install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 chrome_update🌑 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 +install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 chrome_update🌑 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 +install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 chrome_update🌑 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 +install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 chrome_update🌑 launch_from_menu_option_SiteA🌑 check_tab_created🌑 +install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 chrome_update🌑 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 +install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 chrome_update🌑 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 +install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 chrome_update🌑 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 +install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 chrome_update🌑 launch_from_menu_option_SiteA🌑 check_tab_created🌑 +install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 chrome_update🌑 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 +install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 chrome_update🌑 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 +install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 chrome_update🌑 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 +install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 chrome_update🌑 launch_from_menu_option_SiteA🌑 check_tab_created🌑 +install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 chrome_update🌑 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 +install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 chrome_update🌑 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 +install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 chrome_update🌑 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 +install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteA🌑 chrome_update🌑 launch_from_menu_option_SiteA🌑 check_tab_created🌑 +install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteA🌑 chrome_update🌑 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 +install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteA🌑 chrome_update🌑 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 +install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteA🌑 chrome_update🌑 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 +install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteA🌑 chrome_update🌑 launch_from_menu_option_SiteA🌑 check_window_created🌑 +install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteA🌑 chrome_update🌑 launch_from_launch_icon_SiteA🌑 check_window_created🌑 +install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteA🌑 chrome_update🌑 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 +install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteA🌑 chrome_update🌑 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 +install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 install_locally_SiteA🌓 chrome_update🌑 launch_from_menu_option_SiteA🌑 check_window_created🌑 +install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 install_locally_SiteA🌓 chrome_update🌑 launch_from_launch_icon_SiteA🌑 check_window_created🌑 +install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 install_locally_SiteA🌓 chrome_update🌑 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 +install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 install_locally_SiteA🌓 chrome_update🌑 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 +install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 install_locally_SiteA🌓 chrome_update🌑 launch_from_menu_option_SiteA🌑 check_window_created🌑 +install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 install_locally_SiteA🌓 chrome_update🌑 launch_from_launch_icon_SiteA🌑 check_window_created🌑 +install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 install_locally_SiteA🌓 chrome_update🌑 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 +install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 install_locally_SiteA🌓 chrome_update🌑 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 +install_create_shortcut_tabbed_SiteA🌑 chrome_update🌑 launch_from_menu_option_SiteA🌑 check_tab_created🌑 +install_create_shortcut_tabbed_SiteA🌑 chrome_update🌑 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 +install_create_shortcut_tabbed_SiteA🌑 chrome_update🌑 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 +install_create_shortcut_tabbed_SiteA🌑 chrome_update🌑 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 chrome_update🌑 launch_from_menu_option_SiteA🌑 check_tab_created🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 chrome_update🌑 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 chrome_update🌑 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 chrome_update🌑 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 chrome_update🌑 launch_from_menu_option_SiteA🌑 check_tab_created🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 chrome_update🌑 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 chrome_update🌑 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 chrome_update🌑 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 +install_create_shortcut_windowed_SiteA🌑 chrome_update🌑 launch_from_menu_option_SiteA🌑 check_window_created🌑 +install_create_shortcut_windowed_SiteA🌑 chrome_update🌑 launch_from_launch_icon_SiteA🌑 check_window_created🌑 +install_create_shortcut_windowed_SiteA🌑 chrome_update🌑 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 +install_create_shortcut_windowed_SiteA🌑 chrome_update🌑 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 +install_omnibox_icon_SiteA🌕 chrome_update🌑 launch_from_menu_option_SiteA🌑 check_window_created🌑 +install_omnibox_icon_SiteA🌕 chrome_update🌑 launch_from_launch_icon_SiteA🌑 check_window_created🌑 +install_omnibox_icon_SiteA🌕 chrome_update🌑 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 +install_omnibox_icon_SiteA🌕 chrome_update🌑 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 +install_policy_app_windowed_no_shortcut_SiteA🌑 chrome_update🌑 launch_from_menu_option_SiteA🌑 check_window_created🌑 +install_policy_app_windowed_no_shortcut_SiteA🌑 chrome_update🌑 launch_from_launch_icon_SiteA🌑 check_window_created🌑 +install_policy_app_windowed_no_shortcut_SiteA🌑 chrome_update🌑 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 +install_policy_app_windowed_no_shortcut_SiteA🌑 chrome_update🌑 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 +install_policy_app_windowed_shortcut_SiteA🌓 chrome_update🌑 launch_from_menu_option_SiteA🌑 check_window_created🌑 +install_policy_app_windowed_shortcut_SiteA🌓 chrome_update🌑 launch_from_launch_icon_SiteA🌑 check_window_created🌑 +install_policy_app_windowed_shortcut_SiteA🌓 chrome_update🌑 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 +install_policy_app_windowed_shortcut_SiteA🌓 chrome_update🌑 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 +install_menu_option_SiteA🌓 chrome_update🌑 launch_from_menu_option_SiteA🌑 check_window_created🌑 +install_menu_option_SiteA🌓 chrome_update🌑 launch_from_launch_icon_SiteA🌑 check_window_created🌑 +install_menu_option_SiteA🌓 chrome_update🌑 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 +install_menu_option_SiteA🌓 chrome_update🌑 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 +install_create_shortcut_tabbed_SiteC🌑 chrome_update🌑 launch_from_menu_option_SiteA🌑 check_tab_created🌑 +install_create_shortcut_tabbed_SiteC🌑 chrome_update🌑 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 +install_create_shortcut_tabbed_SiteC🌑 chrome_update🌑 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 +install_create_shortcut_tabbed_SiteC🌑 chrome_update🌑 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 +install_policy_app_tabbed_shortcut_SiteC🌓 chrome_update🌑 launch_from_menu_option_SiteA🌑 check_tab_created🌑 +install_policy_app_tabbed_shortcut_SiteC🌓 chrome_update🌑 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 +install_policy_app_tabbed_shortcut_SiteC🌓 chrome_update🌑 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 +install_policy_app_tabbed_shortcut_SiteC🌓 chrome_update🌑 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 +install_policy_app_tabbed_no_shortcut_SiteC🌑 chrome_update🌑 launch_from_menu_option_SiteA🌑 check_tab_created🌑 +install_policy_app_tabbed_no_shortcut_SiteC🌑 chrome_update🌑 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 +install_policy_app_tabbed_no_shortcut_SiteC🌑 chrome_update🌑 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 +install_policy_app_tabbed_no_shortcut_SiteC🌑 chrome_update🌑 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 +install_create_shortcut_windowed_SiteA🌑 set_app_badge_SiteA🌑 clear_app_badge_SiteA🌑 check_app_badge_empty_SiteA🌑 +install_omnibox_icon_SiteA🌕 set_app_badge_SiteA🌑 clear_app_badge_SiteA🌑 check_app_badge_empty_SiteA🌑 +install_menu_option_SiteA🌓 set_app_badge_SiteA🌑 clear_app_badge_SiteA🌑 check_app_badge_empty_SiteA🌑 +install_create_shortcut_windowed_SiteA🌑 navigate_pwa_site_a_to_SiteB🌑 close_custom_toolbar🌑 check_navigation_start_url🌑 +install_omnibox_icon_SiteA🌕 navigate_pwa_site_a_to_SiteB🌑 close_custom_toolbar🌑 check_navigation_start_url🌑 +install_policy_app_windowed_no_shortcut_SiteA🌑 navigate_pwa_site_a_to_SiteB🌑 close_custom_toolbar🌑 check_navigation_start_url🌑 +install_policy_app_windowed_shortcut_SiteA🌓 navigate_pwa_site_a_to_SiteB🌑 close_custom_toolbar🌑 check_navigation_start_url🌑 +install_menu_option_SiteA🌓 navigate_pwa_site_a_to_SiteB🌑 close_custom_toolbar🌑 check_navigation_start_url🌑 +install_policy_app_windowed_no_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 +install_create_shortcut_windowed_SiteA🌑 delete_profile🌑 check_app_list_empty🌑 +install_omnibox_icon_SiteA🌕 delete_profile🌑 check_app_list_empty🌑 +install_policy_app_windowed_no_shortcut_SiteA🌑 delete_profile🌑 check_app_list_empty🌑 +install_policy_app_windowed_shortcut_SiteA🌓 delete_profile🌑 check_app_list_empty🌑 +install_menu_option_SiteA🌓 delete_profile🌑 check_app_list_empty🌑 +install_create_shortcut_tabbed_SiteA🌑 delete_profile🌑 check_app_list_empty🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 delete_profile🌑 check_app_list_empty🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 delete_profile🌑 check_app_list_empty🌑 +install_create_shortcut_windowed_SiteA🌑 delete_profile🌑 check_app_not_in_list_SiteA🌑 +install_omnibox_icon_SiteA🌕 delete_profile🌑 check_app_not_in_list_SiteA🌑 +install_policy_app_windowed_no_shortcut_SiteA🌑 delete_profile🌑 check_app_not_in_list_SiteA🌑 +install_policy_app_windowed_shortcut_SiteA🌓 delete_profile🌑 check_app_not_in_list_SiteA🌑 +install_menu_option_SiteA🌓 delete_profile🌑 check_app_not_in_list_SiteA🌑 +install_create_shortcut_tabbed_SiteA🌑 delete_profile🌑 check_app_not_in_list_SiteA🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 delete_profile🌑 check_app_not_in_list_SiteA🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 delete_profile🌑 check_app_not_in_list_SiteA🌑 +install_policy_app_windowed_shortcut_SiteA🌓 delete_profile🌑 check_platform_shortcut_not_exists_SiteA🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 delete_profile🌑 check_platform_shortcut_not_exists_SiteA🌑 +install_create_shortcut_windowed_SiteA🌑 delete_profile🌑 check_platform_shortcut_not_exists_SiteA🌑 +install_omnibox_icon_SiteA🌕 delete_profile🌑 check_platform_shortcut_not_exists_SiteA🌑 +install_menu_option_SiteA🌓 delete_profile🌑 check_platform_shortcut_not_exists_SiteA🌑 +install_create_shortcut_tabbed_SiteA🌑 delete_profile🌑 check_platform_shortcut_not_exists_SiteA🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 install_create_shortcut_windowed_SiteA🌑 check_app_in_list_windowed_SiteA🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 install_omnibox_icon_SiteA🌕 check_app_in_list_windowed_SiteA🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 install_menu_option_SiteA🌓 check_app_in_list_windowed_SiteA🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 install_create_shortcut_windowed_SiteA🌑 check_app_in_list_windowed_SiteA🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 install_omnibox_icon_SiteA🌑 check_app_in_list_windowed_SiteA🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 install_menu_option_SiteA🌑 check_app_in_list_windowed_SiteA🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 install_create_shortcut_windowed_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 install_omnibox_icon_SiteA🌕 check_platform_shortcut_exists_SiteA🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 install_menu_option_SiteA🌓 check_platform_shortcut_exists_SiteA🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 install_create_shortcut_windowed_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 install_omnibox_icon_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 install_menu_option_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 install_create_shortcut_windowed_SiteA🌑 check_window_created🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 install_omnibox_icon_SiteA🌕 check_window_created🌕 +install_policy_app_tabbed_shortcut_SiteA🌓 install_menu_option_SiteA🌓 check_window_created🌕 +install_policy_app_tabbed_no_shortcut_SiteA🌑 install_create_shortcut_windowed_SiteA🌑 check_window_created🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 install_omnibox_icon_SiteA🌑 check_window_created🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 install_menu_option_SiteA🌑 check_window_created🌑 +install_create_shortcut_windowed_SiteA🌑 check_window_created🌑 +install_omnibox_icon_SiteA🌕 check_window_created🌕 +install_menu_option_SiteA🌓 check_window_created🌕 +install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 +install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 install_locally_SiteA🌓 check_platform_shortcut_exists_SiteA🌑 +install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 install_locally_SiteA🌓 check_platform_shortcut_exists_SiteA🌑 +install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 +install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteA🌑 check_app_in_list_tabbed_SiteA🌑 +install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteA🌑 navigate_browser_SiteA🌑 check_install_icon_shown🌑 +install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteA🌑 navigate_browser_SiteA🌑 check_launch_icon_not_shown🌑 +install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteA🌑 check_app_in_list_windowed_SiteA🌑 +install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 install_locally_SiteA🌓 check_app_in_list_windowed_SiteA🌑 +install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 install_locally_SiteA🌓 check_app_in_list_windowed_SiteA🌑 +install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteA🌑 navigate_browser_SiteA🌑 check_install_icon_not_shown🌑 +install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 install_locally_SiteA🌓 navigate_browser_SiteA🌕 check_install_icon_not_shown🌕 +install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 install_locally_SiteA🌓 navigate_browser_SiteA🌕 check_install_icon_not_shown🌕 +install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteA🌑 navigate_browser_SiteA🌑 check_launch_icon_shown🌑 +install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 install_locally_SiteA🌓 navigate_browser_SiteA🌕 check_launch_icon_shown🌕 +install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 install_locally_SiteA🌓 navigate_browser_SiteA🌕 check_launch_icon_shown🌕 +install_create_shortcut_windowed_SiteC🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 +install_create_shortcut_tabbed_SiteC🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 +install_create_shortcut_tabbed_SiteC🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteC🌑 check_app_in_list_tabbed_SiteC🌑 +install_create_shortcut_tabbed_SiteC🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteC🌑 navigate_browser_SiteC🌑 check_install_icon_shown🌑 +install_create_shortcut_tabbed_SiteC🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteC🌑 navigate_browser_SiteC🌑 check_launch_icon_not_shown🌑 +install_create_shortcut_windowed_SiteC🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteC🌑 check_app_in_list_tabbed_SiteC🌑 +install_create_shortcut_windowed_SiteC🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteC🌑 navigate_browser_SiteC🌑 check_install_icon_not_shown🌑 +install_create_shortcut_windowed_SiteC🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteC🌑 navigate_browser_SiteC🌑 check_launch_icon_shown🌑 +install_policy_app_windowed_no_shortcut_SiteA🌑 check_platform_shortcut_not_exists_SiteA🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 check_platform_shortcut_not_exists_SiteA🌑 +install_policy_app_windowed_no_shortcut_SiteC🌑 check_platform_shortcut_not_exists_SiteC🌑 +install_policy_app_tabbed_no_shortcut_SiteC🌑 check_platform_shortcut_not_exists_SiteC🌑 +install_create_shortcut_tabbed_SiteA🌑 install_policy_app_windowed_no_shortcut_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 +install_create_shortcut_tabbed_SiteA🌑 install_policy_app_windowed_shortcut_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 +install_create_shortcut_windowed_SiteA🌑 install_policy_app_tabbed_no_shortcut_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 +install_create_shortcut_windowed_SiteA🌑 install_policy_app_windowed_no_shortcut_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 +install_omnibox_icon_SiteA🌕 install_policy_app_tabbed_no_shortcut_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 +install_omnibox_icon_SiteA🌕 install_policy_app_windowed_no_shortcut_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 +install_menu_option_SiteA🌓 install_policy_app_tabbed_no_shortcut_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 +install_menu_option_SiteA🌓 install_policy_app_windowed_no_shortcut_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 +install_create_shortcut_windowed_SiteA🌑 install_policy_app_tabbed_shortcut_SiteA🌑 check_app_in_list_windowed_SiteA🌑 +install_create_shortcut_windowed_SiteA🌑 install_policy_app_tabbed_no_shortcut_SiteA🌑 check_app_in_list_windowed_SiteA🌑 +install_omnibox_icon_SiteA🌕 install_policy_app_tabbed_shortcut_SiteA🌓 check_app_in_list_windowed_SiteA🌑 +install_omnibox_icon_SiteA🌕 install_policy_app_tabbed_no_shortcut_SiteA🌑 check_app_in_list_windowed_SiteA🌑 +install_menu_option_SiteA🌓 install_policy_app_tabbed_shortcut_SiteA🌓 check_app_in_list_windowed_SiteA🌑 +install_menu_option_SiteA🌓 install_policy_app_tabbed_no_shortcut_SiteA🌑 check_app_in_list_windowed_SiteA🌑 +install_create_shortcut_windowed_SiteA🌑 install_policy_app_tabbed_shortcut_SiteA🌑 navigate_browser_SiteA🌑 check_launch_icon_shown🌑 +install_create_shortcut_windowed_SiteA🌑 install_policy_app_tabbed_no_shortcut_SiteA🌑 navigate_browser_SiteA🌑 check_launch_icon_shown🌑 +install_omnibox_icon_SiteA🌕 install_policy_app_tabbed_shortcut_SiteA🌓 navigate_browser_SiteA🌕 check_launch_icon_shown🌕 +install_omnibox_icon_SiteA🌕 install_policy_app_tabbed_no_shortcut_SiteA🌑 navigate_browser_SiteA🌑 check_launch_icon_shown🌑 +install_menu_option_SiteA🌓 install_policy_app_tabbed_shortcut_SiteA🌓 navigate_browser_SiteA🌕 check_launch_icon_shown🌕 +install_menu_option_SiteA🌓 install_policy_app_tabbed_no_shortcut_SiteA🌑 navigate_browser_SiteA🌑 check_launch_icon_shown🌑 +install_create_shortcut_tabbed_SiteA🌑 install_policy_app_windowed_no_shortcut_SiteA🌑 check_app_in_list_tabbed_SiteA🌑 +install_create_shortcut_tabbed_SiteA🌑 install_policy_app_windowed_shortcut_SiteA🌑 check_app_in_list_tabbed_SiteA🌑 +install_create_shortcut_tabbed_SiteA🌑 install_policy_app_windowed_no_shortcut_SiteA🌑 navigate_browser_SiteA🌑 check_install_icon_shown🌑 +install_create_shortcut_tabbed_SiteA🌑 install_policy_app_windowed_shortcut_SiteA🌑 navigate_browser_SiteA🌑 check_install_icon_shown🌑 +install_create_shortcut_tabbed_SiteA🌑 check_app_in_list_tabbed_SiteA🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 check_app_in_list_tabbed_SiteA🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 check_app_in_list_tabbed_SiteA🌑 +install_create_shortcut_tabbed_SiteA🌑 navigate_browser_SiteA🌑 check_create_shortcut_shown🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 navigate_browser_SiteA🌕 check_create_shortcut_shown🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 navigate_browser_SiteA🌑 check_create_shortcut_shown🌑 +install_create_shortcut_tabbed_SiteA🌑 navigate_browser_SiteA🌑 check_install_icon_shown🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 navigate_browser_SiteA🌕 check_install_icon_shown🌕 +install_policy_app_tabbed_no_shortcut_SiteA🌑 navigate_browser_SiteA🌑 check_install_icon_shown🌑 +install_create_shortcut_tabbed_SiteA🌑 navigate_browser_SiteA🌑 check_launch_icon_not_shown🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 navigate_browser_SiteA🌕 check_launch_icon_not_shown🌕 +install_policy_app_tabbed_no_shortcut_SiteA🌑 navigate_browser_SiteA🌑 check_launch_icon_not_shown🌑 +install_create_shortcut_tabbed_SiteC🌑 check_app_in_list_tabbed_SiteC🌑 +install_policy_app_tabbed_shortcut_SiteC🌓 check_app_in_list_tabbed_SiteC🌑 +install_policy_app_tabbed_no_shortcut_SiteC🌑 check_app_in_list_tabbed_SiteC🌑 +install_create_shortcut_tabbed_SiteC🌑 navigate_browser_SiteC🌑 check_create_shortcut_shown🌑 +install_policy_app_tabbed_shortcut_SiteC🌓 navigate_browser_SiteC🌕 check_create_shortcut_shown🌑 +install_policy_app_tabbed_no_shortcut_SiteC🌑 navigate_browser_SiteC🌑 check_create_shortcut_shown🌑 +install_create_shortcut_tabbed_SiteC🌑 navigate_browser_SiteC🌑 check_install_icon_not_shown🌑 +install_policy_app_tabbed_shortcut_SiteC🌓 navigate_browser_SiteC🌕 check_install_icon_not_shown🌕 +install_policy_app_tabbed_no_shortcut_SiteC🌑 navigate_browser_SiteC🌑 check_install_icon_not_shown🌑 +install_create_shortcut_tabbed_SiteC🌑 navigate_browser_SiteC🌑 check_launch_icon_not_shown🌑 +install_policy_app_tabbed_shortcut_SiteC🌓 navigate_browser_SiteC🌕 check_launch_icon_not_shown🌕 +install_policy_app_tabbed_no_shortcut_SiteC🌑 navigate_browser_SiteC🌑 check_launch_icon_not_shown🌑 +install_create_shortcut_windowed_SiteA🌑 check_app_in_list_windowed_SiteA🌑 +install_omnibox_icon_SiteA🌕 check_app_in_list_windowed_SiteA🌑 +install_policy_app_windowed_no_shortcut_SiteA🌑 check_app_in_list_windowed_SiteA🌑 +install_policy_app_windowed_shortcut_SiteA🌓 check_app_in_list_windowed_SiteA🌑 +install_menu_option_SiteA🌓 check_app_in_list_windowed_SiteA🌑 +install_create_shortcut_windowed_SiteA🌑 navigate_browser_SiteA🌑 check_create_shortcut_not_shown🌑 +install_omnibox_icon_SiteA🌕 navigate_browser_SiteA🌕 check_create_shortcut_not_shown🌑 +install_policy_app_windowed_no_shortcut_SiteA🌑 navigate_browser_SiteA🌑 check_create_shortcut_not_shown🌑 +install_policy_app_windowed_shortcut_SiteA🌓 navigate_browser_SiteA🌕 check_create_shortcut_not_shown🌑 +install_menu_option_SiteA🌓 navigate_browser_SiteA🌕 check_create_shortcut_not_shown🌑 +install_create_shortcut_windowed_SiteA🌑 navigate_browser_SiteA🌑 check_install_icon_not_shown🌑 +install_omnibox_icon_SiteA🌕 navigate_browser_SiteA🌕 check_install_icon_not_shown🌕 +install_policy_app_windowed_no_shortcut_SiteA🌑 navigate_browser_SiteA🌑 check_install_icon_not_shown🌑 +install_policy_app_windowed_shortcut_SiteA🌓 navigate_browser_SiteA🌕 check_install_icon_not_shown🌕 +install_menu_option_SiteA🌓 navigate_browser_SiteA🌕 check_install_icon_not_shown🌕 +install_create_shortcut_windowed_SiteA🌑 navigate_browser_SiteA🌑 check_launch_icon_shown🌑 +install_omnibox_icon_SiteA🌕 navigate_browser_SiteA🌕 check_launch_icon_shown🌕 +install_policy_app_windowed_no_shortcut_SiteA🌑 navigate_browser_SiteA🌑 check_launch_icon_shown🌑 +install_policy_app_windowed_shortcut_SiteA🌓 navigate_browser_SiteA🌕 check_launch_icon_shown🌕 +install_menu_option_SiteA🌓 navigate_browser_SiteA🌕 check_launch_icon_shown🌕 +install_create_shortcut_windowed_SiteB🌑 navigate_browser_SiteB🌑 check_launch_icon_shown🌑 +install_omnibox_icon_SiteB🌕 navigate_browser_SiteB🌕 check_launch_icon_shown🌕 +install_policy_app_windowed_no_shortcut_SiteB🌑 navigate_browser_SiteB🌑 check_launch_icon_shown🌑 +install_policy_app_windowed_shortcut_SiteB🌓 navigate_browser_SiteB🌕 check_launch_icon_shown🌕 +install_menu_option_SiteB🌓 navigate_browser_SiteB🌕 check_launch_icon_shown🌕 +install_create_shortcut_windowed_SiteC🌑 check_app_in_list_windowed_SiteC🌑 +install_policy_app_windowed_no_shortcut_SiteC🌑 check_app_in_list_windowed_SiteC🌑 +install_policy_app_windowed_shortcut_SiteC🌓 check_app_in_list_windowed_SiteC🌑 +install_create_shortcut_windowed_SiteC🌑 navigate_browser_SiteC🌑 check_create_shortcut_not_shown🌑 +install_policy_app_windowed_no_shortcut_SiteC🌑 navigate_browser_SiteC🌑 check_create_shortcut_not_shown🌑 +install_policy_app_windowed_shortcut_SiteC🌓 navigate_browser_SiteC🌕 check_create_shortcut_not_shown🌑 +install_create_shortcut_windowed_SiteC🌑 navigate_browser_SiteC🌑 check_install_icon_not_shown🌑 +install_policy_app_windowed_no_shortcut_SiteC🌑 navigate_browser_SiteC🌑 check_install_icon_not_shown🌑 +install_policy_app_windowed_shortcut_SiteC🌓 navigate_browser_SiteC🌕 check_install_icon_not_shown🌕 +install_create_shortcut_windowed_SiteC🌑 navigate_browser_SiteC🌑 check_launch_icon_shown🌑 +install_policy_app_windowed_no_shortcut_SiteC🌑 navigate_browser_SiteC🌑 check_launch_icon_shown🌑 +install_policy_app_windowed_shortcut_SiteC🌓 navigate_browser_SiteC🌕 check_launch_icon_shown🌕 +install_policy_app_windowed_shortcut_SiteA🌓 check_platform_shortcut_exists_SiteA🌑 +install_policy_app_windowed_shortcut_SiteA🌓 check_platform_shortcut_exists_SiteC🌑 +install_create_shortcut_tabbed_SiteA🌑 install_policy_app_windowed_no_shortcut_SiteA🌑 launch_from_menu_option_SiteA🌑 check_tab_created🌑 +install_create_shortcut_tabbed_SiteA🌑 install_policy_app_windowed_no_shortcut_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 +install_create_shortcut_tabbed_SiteA🌑 install_policy_app_windowed_no_shortcut_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 +install_create_shortcut_tabbed_SiteA🌑 install_policy_app_windowed_no_shortcut_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 +install_create_shortcut_tabbed_SiteA🌑 install_policy_app_windowed_shortcut_SiteA🌑 launch_from_menu_option_SiteA🌑 check_tab_created🌑 +install_create_shortcut_tabbed_SiteA🌑 install_policy_app_windowed_shortcut_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 +install_create_shortcut_tabbed_SiteA🌑 install_policy_app_windowed_shortcut_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 +install_create_shortcut_tabbed_SiteA🌑 install_policy_app_windowed_shortcut_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 +install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 launch_from_menu_option_SiteA🌑 check_tab_created🌑 +install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 +install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 +install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 +install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteA🌑 launch_from_menu_option_SiteA🌑 check_tab_created🌑 +install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 +install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 +install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 +install_create_shortcut_windowed_SiteA🌑 install_policy_app_tabbed_shortcut_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_created🌑 +install_create_shortcut_windowed_SiteA🌑 install_policy_app_tabbed_shortcut_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_created🌑 +install_create_shortcut_windowed_SiteA🌑 install_policy_app_tabbed_shortcut_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 +install_create_shortcut_windowed_SiteA🌑 install_policy_app_tabbed_shortcut_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 +install_create_shortcut_windowed_SiteA🌑 install_policy_app_tabbed_no_shortcut_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_created🌑 +install_create_shortcut_windowed_SiteA🌑 install_policy_app_tabbed_no_shortcut_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_created🌑 +install_create_shortcut_windowed_SiteA🌑 install_policy_app_tabbed_no_shortcut_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 +install_create_shortcut_windowed_SiteA🌑 install_policy_app_tabbed_no_shortcut_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 +install_omnibox_icon_SiteA🌕 install_policy_app_tabbed_shortcut_SiteA🌓 launch_from_menu_option_SiteA🌑 check_window_created🌑 +install_omnibox_icon_SiteA🌕 install_policy_app_tabbed_shortcut_SiteA🌓 launch_from_launch_icon_SiteA🌑 check_window_created🌑 +install_omnibox_icon_SiteA🌕 install_policy_app_tabbed_shortcut_SiteA🌓 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 +install_omnibox_icon_SiteA🌕 install_policy_app_tabbed_shortcut_SiteA🌓 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 +install_omnibox_icon_SiteA🌕 install_policy_app_tabbed_no_shortcut_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_created🌑 +install_omnibox_icon_SiteA🌕 install_policy_app_tabbed_no_shortcut_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_created🌑 +install_omnibox_icon_SiteA🌕 install_policy_app_tabbed_no_shortcut_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 +install_omnibox_icon_SiteA🌕 install_policy_app_tabbed_no_shortcut_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 +install_menu_option_SiteA🌓 install_policy_app_tabbed_shortcut_SiteA🌓 launch_from_menu_option_SiteA🌑 check_window_created🌑 +install_menu_option_SiteA🌓 install_policy_app_tabbed_shortcut_SiteA🌓 launch_from_launch_icon_SiteA🌑 check_window_created🌑 +install_menu_option_SiteA🌓 install_policy_app_tabbed_shortcut_SiteA🌓 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 +install_menu_option_SiteA🌓 install_policy_app_tabbed_shortcut_SiteA🌓 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 +install_menu_option_SiteA🌓 install_policy_app_tabbed_no_shortcut_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_created🌑 +install_menu_option_SiteA🌓 install_policy_app_tabbed_no_shortcut_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_created🌑 +install_menu_option_SiteA🌓 install_policy_app_tabbed_no_shortcut_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 +install_menu_option_SiteA🌓 install_policy_app_tabbed_no_shortcut_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 +install_create_shortcut_windowed_SiteA🌑 close_pwa🌑 manifest_update_colors_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_color_correct🌑 +install_create_shortcut_windowed_SiteA🌑 close_pwa🌑 manifest_update_colors_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_color_correct🌑 +install_create_shortcut_windowed_SiteA🌑 close_pwa🌑 manifest_update_colors_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_color_correct🌑 +install_create_shortcut_windowed_SiteA🌑 close_pwa🌑 manifest_update_colors_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_color_correct🌑 +install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_colors_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_color_correct🌑 +install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_colors_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_color_correct🌑 +install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_colors_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_color_correct🌑 +install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_colors_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_color_correct🌑 +install_menu_option_SiteA🌓 close_pwa🌕 manifest_update_colors_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_color_correct🌑 +install_menu_option_SiteA🌓 close_pwa🌕 manifest_update_colors_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_color_correct🌑 +install_menu_option_SiteA🌓 close_pwa🌕 manifest_update_colors_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_color_correct🌑 +install_menu_option_SiteA🌓 close_pwa🌕 manifest_update_colors_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_color_correct🌑 +install_create_shortcut_windowed_SiteA🌑 close_pwa🌑 manifest_update_display_browser_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_display_standalone🌑 +install_create_shortcut_windowed_SiteA🌑 close_pwa🌑 manifest_update_display_browser_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_display_standalone🌑 +install_create_shortcut_windowed_SiteA🌑 close_pwa🌑 manifest_update_display_browser_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_display_standalone🌑 +install_create_shortcut_windowed_SiteA🌑 close_pwa🌑 manifest_update_display_browser_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_display_standalone🌑 +install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_display_standalone🌑 +install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_display_standalone🌑 +install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_display_standalone🌑 +install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_display_standalone🌑 +install_menu_option_SiteA🌓 close_pwa🌕 manifest_update_display_browser_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_display_standalone🌑 +install_menu_option_SiteA🌓 close_pwa🌕 manifest_update_display_browser_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_display_standalone🌑 +install_menu_option_SiteA🌓 close_pwa🌕 manifest_update_display_browser_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_display_standalone🌑 +install_menu_option_SiteA🌓 close_pwa🌕 manifest_update_display_browser_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_display_standalone🌑 +install_create_shortcut_windowed_SiteA🌑 close_pwa🌑 manifest_update_display_minimal_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_display_minimal🌑 +install_create_shortcut_windowed_SiteA🌑 close_pwa🌑 manifest_update_display_minimal_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_display_minimal🌑 +install_create_shortcut_windowed_SiteA🌑 close_pwa🌑 manifest_update_display_minimal_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_display_minimal🌑 +install_create_shortcut_windowed_SiteA🌑 close_pwa🌑 manifest_update_display_minimal_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_display_minimal🌑 +install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_display_minimal_SiteA🌕 launch_from_menu_option_SiteA🌑 check_window_display_minimal🌑 +install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_display_minimal_SiteA🌕 launch_from_launch_icon_SiteA🌑 check_window_display_minimal🌑 +install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_display_minimal_SiteA🌕 launch_from_chrome_apps_SiteA🌑 check_window_display_minimal🌑 +install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_display_minimal_SiteA🌕 launch_from_platform_shortcut_SiteA🌑 check_window_display_minimal🌑 +install_menu_option_SiteA🌓 close_pwa🌕 manifest_update_display_minimal_SiteA🌕 launch_from_menu_option_SiteA🌑 check_window_display_minimal🌑 +install_menu_option_SiteA🌓 close_pwa🌕 manifest_update_display_minimal_SiteA🌕 launch_from_launch_icon_SiteA🌑 check_window_display_minimal🌑 +install_menu_option_SiteA🌓 close_pwa🌕 manifest_update_display_minimal_SiteA🌕 launch_from_chrome_apps_SiteA🌑 check_window_display_minimal🌑 +install_menu_option_SiteA🌓 close_pwa🌕 manifest_update_display_minimal_SiteA🌕 launch_from_platform_shortcut_SiteA🌑 check_window_display_minimal🌑 +install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 launch_from_menu_option_SiteA🌑 check_tab_created🌑 +install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 +install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 +install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 +install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 launch_from_menu_option_SiteA🌑 check_tab_created🌑 +install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 +install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 +install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 +install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 launch_from_menu_option_SiteA🌑 check_tab_created🌑 +install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 +install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 +install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 +install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_created🌑 +install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_created🌑 +install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 +install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 +install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 install_locally_SiteA🌓 launch_from_menu_option_SiteA🌑 check_window_created🌑 +install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 install_locally_SiteA🌓 launch_from_launch_icon_SiteA🌑 check_window_created🌑 +install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 install_locally_SiteA🌓 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 +install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 install_locally_SiteA🌓 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 +install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 install_locally_SiteA🌓 launch_from_menu_option_SiteA🌑 check_window_created🌑 +install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 install_locally_SiteA🌓 launch_from_launch_icon_SiteA🌑 check_window_created🌑 +install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 install_locally_SiteA🌓 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 +install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 install_locally_SiteA🌓 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 +install_create_shortcut_tabbed_SiteA🌑 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_menu_option_SiteA🌑 check_tab_created🌑 +install_create_shortcut_tabbed_SiteA🌑 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 +install_create_shortcut_tabbed_SiteA🌑 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 +install_create_shortcut_tabbed_SiteA🌑 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_menu_option_SiteA🌑 check_tab_created🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_menu_option_SiteA🌑 check_tab_created🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 +install_create_shortcut_tabbed_SiteA🌑 set_open_in_window_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_created🌑 +install_create_shortcut_tabbed_SiteA🌑 set_open_in_window_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_created🌑 +install_create_shortcut_tabbed_SiteA🌑 set_open_in_window_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 +install_create_shortcut_tabbed_SiteA🌑 set_open_in_window_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 set_open_in_window_SiteA🌓 launch_from_menu_option_SiteA🌑 check_window_created🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 set_open_in_window_SiteA🌓 launch_from_launch_icon_SiteA🌑 check_window_created🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 set_open_in_window_SiteA🌓 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 set_open_in_window_SiteA🌓 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 set_open_in_window_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_created🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 set_open_in_window_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_created🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 set_open_in_window_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 set_open_in_window_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 +install_create_shortcut_windowed_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_created🌑 +install_create_shortcut_windowed_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_created🌑 +install_create_shortcut_windowed_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 +install_create_shortcut_windowed_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 +install_omnibox_icon_SiteA🌕 launch_from_menu_option_SiteA🌑 check_window_created🌑 +install_omnibox_icon_SiteA🌕 launch_from_launch_icon_SiteA🌑 check_window_created🌑 +install_omnibox_icon_SiteA🌕 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 +install_omnibox_icon_SiteA🌕 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 +install_policy_app_windowed_no_shortcut_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_created🌑 +install_policy_app_windowed_no_shortcut_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_created🌑 +install_policy_app_windowed_no_shortcut_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 +install_policy_app_windowed_no_shortcut_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 +install_policy_app_windowed_shortcut_SiteA🌓 launch_from_menu_option_SiteA🌑 check_window_created🌑 +install_policy_app_windowed_shortcut_SiteA🌓 launch_from_launch_icon_SiteA🌑 check_window_created🌑 +install_policy_app_windowed_shortcut_SiteA🌓 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 +install_policy_app_windowed_shortcut_SiteA🌓 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 +install_menu_option_SiteA🌓 launch_from_menu_option_SiteA🌑 check_window_created🌑 +install_menu_option_SiteA🌓 launch_from_launch_icon_SiteA🌑 check_window_created🌑 +install_menu_option_SiteA🌓 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 +install_menu_option_SiteA🌓 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 +install_create_shortcut_windowed_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_display_standalone🌑 +install_create_shortcut_windowed_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_display_standalone🌑 +install_create_shortcut_windowed_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_display_standalone🌑 +install_create_shortcut_windowed_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_display_standalone🌑 +install_omnibox_icon_SiteA🌕 launch_from_menu_option_SiteA🌑 check_window_display_standalone🌑 +install_omnibox_icon_SiteA🌕 launch_from_launch_icon_SiteA🌑 check_window_display_standalone🌑 +install_omnibox_icon_SiteA🌕 launch_from_chrome_apps_SiteA🌑 check_window_display_standalone🌑 +install_omnibox_icon_SiteA🌕 launch_from_platform_shortcut_SiteA🌑 check_window_display_standalone🌑 +install_policy_app_windowed_no_shortcut_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_display_standalone🌑 +install_policy_app_windowed_no_shortcut_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_display_standalone🌑 +install_policy_app_windowed_no_shortcut_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_display_standalone🌑 +install_policy_app_windowed_no_shortcut_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_display_standalone🌑 +install_policy_app_windowed_shortcut_SiteA🌓 launch_from_menu_option_SiteA🌑 check_window_display_standalone🌑 +install_policy_app_windowed_shortcut_SiteA🌓 launch_from_launch_icon_SiteA🌑 check_window_display_standalone🌑 +install_policy_app_windowed_shortcut_SiteA🌓 launch_from_chrome_apps_SiteA🌑 check_window_display_standalone🌑 +install_policy_app_windowed_shortcut_SiteA🌓 launch_from_platform_shortcut_SiteA🌑 check_window_display_standalone🌑 +install_menu_option_SiteA🌓 launch_from_menu_option_SiteA🌑 check_window_display_standalone🌑 +install_menu_option_SiteA🌓 launch_from_launch_icon_SiteA🌑 check_window_display_standalone🌑 +install_menu_option_SiteA🌓 launch_from_chrome_apps_SiteA🌑 check_window_display_standalone🌑 +install_menu_option_SiteA🌓 launch_from_platform_shortcut_SiteA🌑 check_window_display_standalone🌑 +install_create_shortcut_windowed_SiteA🌑 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_created🌑 +install_create_shortcut_windowed_SiteA🌑 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_created🌑 +install_create_shortcut_windowed_SiteA🌑 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 +install_create_shortcut_windowed_SiteA🌑 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 +install_omnibox_icon_SiteA🌕 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_created🌑 +install_omnibox_icon_SiteA🌕 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_created🌑 +install_omnibox_icon_SiteA🌕 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 +install_omnibox_icon_SiteA🌕 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 +install_policy_app_windowed_no_shortcut_SiteA🌑 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_created🌑 +install_policy_app_windowed_no_shortcut_SiteA🌑 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_created🌑 +install_policy_app_windowed_no_shortcut_SiteA🌑 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 +install_policy_app_windowed_no_shortcut_SiteA🌑 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 +install_policy_app_windowed_shortcut_SiteA🌓 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_created🌑 +install_policy_app_windowed_shortcut_SiteA🌓 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_created🌑 +install_policy_app_windowed_shortcut_SiteA🌓 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 +install_policy_app_windowed_shortcut_SiteA🌓 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 +install_menu_option_SiteA🌓 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_created🌑 +install_menu_option_SiteA🌓 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_created🌑 +install_menu_option_SiteA🌓 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 +install_menu_option_SiteA🌓 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 +install_create_shortcut_windowed_SiteA🌑 set_open_in_tab_SiteA🌑 launch_from_menu_option_SiteA🌑 check_tab_created🌑 +install_create_shortcut_windowed_SiteA🌑 set_open_in_tab_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 +install_create_shortcut_windowed_SiteA🌑 set_open_in_tab_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 +install_create_shortcut_windowed_SiteA🌑 set_open_in_tab_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 +install_omnibox_icon_SiteA🌕 set_open_in_tab_SiteA🌓 launch_from_menu_option_SiteA🌑 check_tab_created🌑 +install_omnibox_icon_SiteA🌕 set_open_in_tab_SiteA🌓 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 +install_omnibox_icon_SiteA🌕 set_open_in_tab_SiteA🌓 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 +install_omnibox_icon_SiteA🌕 set_open_in_tab_SiteA🌓 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 +install_policy_app_windowed_no_shortcut_SiteA🌑 set_open_in_tab_SiteA🌑 launch_from_menu_option_SiteA🌑 check_tab_created🌑 +install_policy_app_windowed_no_shortcut_SiteA🌑 set_open_in_tab_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 +install_policy_app_windowed_no_shortcut_SiteA🌑 set_open_in_tab_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 +install_policy_app_windowed_no_shortcut_SiteA🌑 set_open_in_tab_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 +install_policy_app_windowed_shortcut_SiteA🌓 set_open_in_tab_SiteA🌓 launch_from_menu_option_SiteA🌑 check_tab_created🌑 +install_policy_app_windowed_shortcut_SiteA🌓 set_open_in_tab_SiteA🌓 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 +install_policy_app_windowed_shortcut_SiteA🌓 set_open_in_tab_SiteA🌓 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 +install_policy_app_windowed_shortcut_SiteA🌓 set_open_in_tab_SiteA🌓 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 +install_menu_option_SiteA🌓 set_open_in_tab_SiteA🌓 launch_from_menu_option_SiteA🌑 check_tab_created🌑 +install_menu_option_SiteA🌓 set_open_in_tab_SiteA🌓 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 +install_menu_option_SiteA🌓 set_open_in_tab_SiteA🌓 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 +install_menu_option_SiteA🌓 set_open_in_tab_SiteA🌓 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 +install_create_shortcut_windowed_SiteB🌑 launch_from_menu_option_SiteB🌑 check_window_display_minimal🌑 +install_create_shortcut_windowed_SiteB🌑 launch_from_launch_icon_SiteB🌑 check_window_display_minimal🌑 +install_create_shortcut_windowed_SiteB🌑 launch_from_chrome_apps_SiteB🌑 check_window_display_minimal🌑 +install_create_shortcut_windowed_SiteB🌑 launch_from_platform_shortcut_SiteB🌑 check_window_display_minimal🌑 +install_omnibox_icon_SiteB🌕 launch_from_menu_option_SiteB🌑 check_window_display_minimal🌑 +install_omnibox_icon_SiteB🌕 launch_from_launch_icon_SiteB🌑 check_window_display_minimal🌑 +install_omnibox_icon_SiteB🌕 launch_from_chrome_apps_SiteB🌑 check_window_display_minimal🌑 +install_omnibox_icon_SiteB🌕 launch_from_platform_shortcut_SiteB🌑 check_window_display_minimal🌑 +install_policy_app_windowed_no_shortcut_SiteB🌑 launch_from_menu_option_SiteB🌑 check_window_display_minimal🌑 +install_policy_app_windowed_no_shortcut_SiteB🌑 launch_from_launch_icon_SiteB🌑 check_window_display_minimal🌑 +install_policy_app_windowed_no_shortcut_SiteB🌑 launch_from_chrome_apps_SiteB🌑 check_window_display_minimal🌑 +install_policy_app_windowed_no_shortcut_SiteB🌑 launch_from_platform_shortcut_SiteB🌑 check_window_display_minimal🌑 +install_policy_app_windowed_shortcut_SiteB🌓 launch_from_menu_option_SiteB🌑 check_window_display_minimal🌑 +install_policy_app_windowed_shortcut_SiteB🌓 launch_from_launch_icon_SiteB🌑 check_window_display_minimal🌑 +install_policy_app_windowed_shortcut_SiteB🌓 launch_from_chrome_apps_SiteB🌑 check_window_display_minimal🌑 +install_policy_app_windowed_shortcut_SiteB🌓 launch_from_platform_shortcut_SiteB🌑 check_window_display_minimal🌑 +install_menu_option_SiteB🌓 launch_from_menu_option_SiteB🌑 check_window_display_minimal🌑 +install_menu_option_SiteB🌓 launch_from_launch_icon_SiteB🌑 check_window_display_minimal🌑 +install_menu_option_SiteB🌓 launch_from_chrome_apps_SiteB🌑 check_window_display_minimal🌑 +install_menu_option_SiteB🌓 launch_from_platform_shortcut_SiteB🌑 check_window_display_minimal🌑 +install_create_shortcut_tabbed_SiteC🌑 launch_from_menu_option_SiteC🌑 check_tab_created🌑 +install_create_shortcut_tabbed_SiteC🌑 launch_from_launch_icon_SiteC🌑 check_tab_created🌑 +install_create_shortcut_tabbed_SiteC🌑 launch_from_chrome_apps_SiteC🌑 check_tab_created🌑 +install_create_shortcut_tabbed_SiteC🌑 launch_from_platform_shortcut_SiteC🌑 check_tab_created🌑 +install_policy_app_tabbed_shortcut_SiteC🌓 launch_from_menu_option_SiteC🌑 check_tab_created🌑 +install_policy_app_tabbed_shortcut_SiteC🌓 launch_from_launch_icon_SiteC🌑 check_tab_created🌑 +install_policy_app_tabbed_shortcut_SiteC🌓 launch_from_chrome_apps_SiteC🌑 check_tab_created🌑 +install_policy_app_tabbed_shortcut_SiteC🌓 launch_from_platform_shortcut_SiteC🌑 check_tab_created🌑 +install_policy_app_tabbed_no_shortcut_SiteC🌑 launch_from_menu_option_SiteC🌑 check_tab_created🌑 +install_policy_app_tabbed_no_shortcut_SiteC🌑 launch_from_launch_icon_SiteC🌑 check_tab_created🌑 +install_policy_app_tabbed_no_shortcut_SiteC🌑 launch_from_chrome_apps_SiteC🌑 check_tab_created🌑 +install_policy_app_tabbed_no_shortcut_SiteC🌑 launch_from_platform_shortcut_SiteC🌑 check_tab_created🌑 +install_create_shortcut_windowed_SiteC🌑 launch_from_menu_option_SiteC🌑 check_window_created🌑 +install_create_shortcut_windowed_SiteC🌑 launch_from_launch_icon_SiteC🌑 check_window_created🌑 +install_create_shortcut_windowed_SiteC🌑 launch_from_chrome_apps_SiteC🌑 check_window_created🌑 +install_create_shortcut_windowed_SiteC🌑 launch_from_platform_shortcut_SiteC🌑 check_window_created🌑 +install_policy_app_windowed_no_shortcut_SiteC🌑 launch_from_menu_option_SiteC🌑 check_window_created🌑 +install_policy_app_windowed_no_shortcut_SiteC🌑 launch_from_launch_icon_SiteC🌑 check_window_created🌑 +install_policy_app_windowed_no_shortcut_SiteC🌑 launch_from_chrome_apps_SiteC🌑 check_window_created🌑 +install_policy_app_windowed_no_shortcut_SiteC🌑 launch_from_platform_shortcut_SiteC🌑 check_window_created🌑 +install_policy_app_windowed_shortcut_SiteC🌓 launch_from_menu_option_SiteC🌑 check_window_created🌑 +install_policy_app_windowed_shortcut_SiteC🌓 launch_from_launch_icon_SiteC🌑 check_window_created🌑 +install_policy_app_windowed_shortcut_SiteC🌓 launch_from_chrome_apps_SiteC🌑 check_window_created🌑 +install_policy_app_windowed_shortcut_SiteC🌓 launch_from_platform_shortcut_SiteC🌑 check_window_created🌑 +install_create_shortcut_windowed_SiteA🌑 close_pwa🌑 manifest_update_icons_SiteA🌑 check_app_in_list_icon_correct_SiteA🌑 +install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_icons_SiteA🌑 check_app_in_list_icon_correct_SiteA🌑 +install_menu_option_SiteA🌓 close_pwa🌕 manifest_update_icons_SiteA🌑 check_app_in_list_icon_correct_SiteA🌑 +install_create_shortcut_windowed_SiteA🌑 close_pwa🌑 manifest_update_icons_SiteA🌑 check_platform_shortcut_icon_correct_SiteA🌑 +install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_icons_SiteA🌑 check_platform_shortcut_icon_correct_SiteA🌑 +install_menu_option_SiteA🌓 close_pwa🌕 manifest_update_icons_SiteA🌑 check_platform_shortcut_icon_correct_SiteA🌑 +install_create_shortcut_windowed_SiteAFoo🌑 manifest_update_scope_site_a_foo_to_SiteA🌑 close_pwa🌑 launch_from_platform_shortcut_SiteAFoo🌑 close_pwa🌑 navigate_browser_SiteA🌑 check_install_icon_not_shown🌑 +install_omnibox_icon_SiteAFoo🌕 manifest_update_scope_site_a_foo_to_SiteA🌑 close_pwa🌑 launch_from_platform_shortcut_SiteAFoo🌑 close_pwa🌑 navigate_browser_SiteA🌑 check_install_icon_not_shown🌑 +install_menu_option_SiteAFoo🌓 manifest_update_scope_site_a_foo_to_SiteA🌑 close_pwa🌑 launch_from_platform_shortcut_SiteAFoo🌑 close_pwa🌑 navigate_browser_SiteA🌑 check_install_icon_not_shown🌑 +install_create_shortcut_windowed_SiteAFoo🌑 manifest_update_scope_site_a_foo_to_SiteA🌑 close_pwa🌑 launch_from_platform_shortcut_SiteAFoo🌑 close_pwa🌑 navigate_browser_SiteA🌑 check_launch_icon_shown🌑 +install_omnibox_icon_SiteAFoo🌕 manifest_update_scope_site_a_foo_to_SiteA🌑 close_pwa🌑 launch_from_platform_shortcut_SiteAFoo🌑 close_pwa🌑 navigate_browser_SiteA🌑 check_launch_icon_shown🌑 +install_menu_option_SiteAFoo🌓 manifest_update_scope_site_a_foo_to_SiteA🌑 close_pwa🌑 launch_from_platform_shortcut_SiteAFoo🌑 close_pwa🌑 navigate_browser_SiteA🌑 check_launch_icon_shown🌑 +install_create_shortcut_windowed_SiteAFoo🌑 close_pwa🌑 manifest_update_scope_site_a_foo_to_SiteA🌑 navigate_browser_SiteABar🌑 check_install_icon_not_shown🌑 +install_omnibox_icon_SiteAFoo🌕 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteA🌑 navigate_browser_SiteABar🌑 check_install_icon_not_shown🌑 +install_menu_option_SiteAFoo🌓 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteA🌑 navigate_browser_SiteABar🌑 check_install_icon_not_shown🌑 +install_create_shortcut_windowed_SiteAFoo🌑 close_pwa🌑 manifest_update_scope_site_a_foo_to_SiteA🌑 navigate_browser_SiteABar🌑 check_launch_icon_shown🌑 +install_omnibox_icon_SiteAFoo🌕 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteA🌑 navigate_browser_SiteABar🌑 check_launch_icon_shown🌑 +install_menu_option_SiteAFoo🌓 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteA🌑 navigate_browser_SiteABar🌑 check_launch_icon_shown🌑 +install_create_shortcut_windowed_SiteAFoo🌑 navigate_browser_SiteABar🌑 check_install_icon_shown🌑 +install_omnibox_icon_SiteAFoo🌕 navigate_browser_SiteABar🌕 check_install_icon_shown🌕 +install_policy_app_windowed_no_shortcut_SiteAFoo🌑 navigate_browser_SiteABar🌑 check_install_icon_shown🌑 +install_policy_app_windowed_shortcut_SiteAFoo🌓 navigate_browser_SiteABar🌕 check_install_icon_shown🌕 +install_menu_option_SiteAFoo🌓 navigate_browser_SiteABar🌕 check_install_icon_shown🌕 +install_create_shortcut_windowed_SiteAFoo🌑 navigate_browser_SiteABar🌑 check_launch_icon_not_shown🌑 +install_omnibox_icon_SiteAFoo🌕 navigate_browser_SiteABar🌕 check_launch_icon_not_shown🌕 +install_policy_app_windowed_no_shortcut_SiteAFoo🌑 navigate_browser_SiteABar🌑 check_launch_icon_not_shown🌑 +install_policy_app_windowed_shortcut_SiteAFoo🌓 navigate_browser_SiteABar🌕 check_launch_icon_not_shown🌕 +install_menu_option_SiteAFoo🌓 navigate_browser_SiteABar🌕 check_launch_icon_not_shown🌕 +install_create_shortcut_windowed_SiteAFoo🌑 close_pwa🌑 manifest_update_scope_site_a_foo_to_SiteA🌑 navigate_browser_SiteAFoo🌑 check_install_icon_not_shown🌑 +install_omnibox_icon_SiteAFoo🌕 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteA🌑 navigate_browser_SiteAFoo🌑 check_install_icon_not_shown🌑 +install_menu_option_SiteAFoo🌓 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteA🌑 navigate_browser_SiteAFoo🌑 check_install_icon_not_shown🌑 +install_create_shortcut_windowed_SiteAFoo🌑 close_pwa🌑 manifest_update_scope_site_a_foo_to_SiteA🌑 navigate_browser_SiteAFoo🌑 check_launch_icon_shown🌑 +install_omnibox_icon_SiteAFoo🌕 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteA🌑 navigate_browser_SiteAFoo🌑 check_launch_icon_shown🌑 +install_menu_option_SiteAFoo🌓 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteA🌑 navigate_browser_SiteAFoo🌑 check_launch_icon_shown🌑 +install_create_shortcut_windowed_SiteA🌑 navigate_browser_SiteAFoo🌑 check_install_icon_not_shown🌑 +install_omnibox_icon_SiteA🌕 navigate_browser_SiteAFoo🌕 check_install_icon_not_shown🌕 +install_policy_app_windowed_no_shortcut_SiteA🌑 navigate_browser_SiteAFoo🌑 check_install_icon_not_shown🌑 +install_policy_app_windowed_shortcut_SiteA🌓 navigate_browser_SiteAFoo🌕 check_install_icon_not_shown🌕 +install_menu_option_SiteA🌓 navigate_browser_SiteAFoo🌕 check_install_icon_not_shown🌕 +install_create_shortcut_windowed_SiteA🌑 navigate_browser_SiteAFoo🌑 check_launch_icon_shown🌑 +install_omnibox_icon_SiteA🌕 navigate_browser_SiteAFoo🌕 check_launch_icon_shown🌕 +install_policy_app_windowed_no_shortcut_SiteA🌑 navigate_browser_SiteAFoo🌑 check_launch_icon_shown🌑 +install_policy_app_windowed_shortcut_SiteA🌓 navigate_browser_SiteAFoo🌕 check_launch_icon_shown🌕 +install_menu_option_SiteA🌓 navigate_browser_SiteAFoo🌕 check_launch_icon_shown🌕 +navigate_browser_SiteAFoo🌕 check_install_icon_shown🌕 +switch_incognito_profile🌑 navigate_browser_SiteA🌑 check_create_shortcut_not_shown🌑 +navigate_browser_SiteA🌕 check_app_not_in_list_SiteA🌕 +navigate_browser_SiteA🌕 check_create_shortcut_shown🌑 +navigate_browser_SiteA🌕 check_platform_shortcut_not_exists_SiteA🌑 +install_create_shortcut_windowed_SiteA🌑 navigate_browser_SiteB🌑 check_install_icon_shown🌑 +install_omnibox_icon_SiteA🌕 navigate_browser_SiteB🌕 check_install_icon_shown🌕 +install_menu_option_SiteA🌓 navigate_browser_SiteB🌕 check_install_icon_shown🌕 +install_create_shortcut_windowed_SiteA🌑 navigate_browser_SiteB🌑 check_launch_icon_not_shown🌑 +install_omnibox_icon_SiteA🌕 navigate_browser_SiteB🌕 check_launch_icon_not_shown🌕 +install_menu_option_SiteA🌓 navigate_browser_SiteB🌕 check_launch_icon_not_shown🌕 +switch_incognito_profile🌑 navigate_browser_SiteC🌑 check_create_shortcut_not_shown🌑 +navigate_browser_SiteC🌕 check_app_not_in_list_SiteA🌕 +navigate_browser_SiteC🌕 check_create_shortcut_shown🌑 +navigate_browser_SiteC🌕 check_install_icon_not_shown🌕 +navigate_browser_SiteC🌕 check_platform_shortcut_not_exists_SiteA🌑 +navigate_crashed_url🌑 check_create_shortcut_not_shown🌑 +navigate_crashed_url🌑 check_install_icon_not_shown🌑 +navigate_notfound_url🌑 check_create_shortcut_not_shown🌑 +navigate_notfound_url🌑 check_install_icon_not_shown🌑 +install_create_shortcut_windowed_SiteAFoo🌑 close_pwa🌑 manifest_update_scope_site_a_foo_to_SiteA🌑 launch_from_menu_option_SiteAFoo🌑 navigate_pwa_site_a_foo_to_SiteABar🌑 check_no_toolbar🌑 +install_create_shortcut_windowed_SiteAFoo🌑 close_pwa🌑 manifest_update_scope_site_a_foo_to_SiteA🌑 launch_from_launch_icon_SiteAFoo🌑 navigate_pwa_site_a_foo_to_SiteABar🌑 check_no_toolbar🌑 +install_create_shortcut_windowed_SiteAFoo🌑 close_pwa🌑 manifest_update_scope_site_a_foo_to_SiteA🌑 launch_from_chrome_apps_SiteAFoo🌑 navigate_pwa_site_a_foo_to_SiteABar🌑 check_no_toolbar🌑 +install_create_shortcut_windowed_SiteAFoo🌑 close_pwa🌑 manifest_update_scope_site_a_foo_to_SiteA🌑 launch_from_platform_shortcut_SiteAFoo🌑 navigate_pwa_site_a_foo_to_SiteABar🌑 check_no_toolbar🌑 +install_omnibox_icon_SiteAFoo🌕 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteA🌑 launch_from_menu_option_SiteAFoo🌑 navigate_pwa_site_a_foo_to_SiteABar🌑 check_no_toolbar🌑 +install_omnibox_icon_SiteAFoo🌕 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteA🌑 launch_from_launch_icon_SiteAFoo🌑 navigate_pwa_site_a_foo_to_SiteABar🌑 check_no_toolbar🌑 +install_omnibox_icon_SiteAFoo🌕 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteA🌑 launch_from_chrome_apps_SiteAFoo🌑 navigate_pwa_site_a_foo_to_SiteABar🌑 check_no_toolbar🌑 +install_omnibox_icon_SiteAFoo🌕 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteA🌑 launch_from_platform_shortcut_SiteAFoo🌑 navigate_pwa_site_a_foo_to_SiteABar🌑 check_no_toolbar🌑 +install_menu_option_SiteAFoo🌓 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteA🌑 launch_from_menu_option_SiteAFoo🌑 navigate_pwa_site_a_foo_to_SiteABar🌑 check_no_toolbar🌑 +install_menu_option_SiteAFoo🌓 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteA🌑 launch_from_launch_icon_SiteAFoo🌑 navigate_pwa_site_a_foo_to_SiteABar🌑 check_no_toolbar🌑 +install_menu_option_SiteAFoo🌓 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteA🌑 launch_from_chrome_apps_SiteAFoo🌑 navigate_pwa_site_a_foo_to_SiteABar🌑 check_no_toolbar🌑 +install_menu_option_SiteAFoo🌓 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteA🌑 launch_from_platform_shortcut_SiteAFoo🌑 navigate_pwa_site_a_foo_to_SiteABar🌑 check_no_toolbar🌑 +install_create_shortcut_windowed_SiteA🌑 navigate_pwa_site_a_to_SiteB🌑 check_toolbar🌑 +install_omnibox_icon_SiteA🌕 navigate_pwa_site_a_to_SiteB🌑 check_toolbar🌑 +install_menu_option_SiteA🌓 navigate_pwa_site_a_to_SiteB🌑 check_toolbar🌑 +install_create_shortcut_windowed_SiteA🌑 navigate_pwa_site_a_to_SiteB🌑 check_window_title_is_SiteA🌑 +install_omnibox_icon_SiteA🌕 navigate_pwa_site_a_to_SiteB🌑 check_window_title_is_SiteA🌑 +install_menu_option_SiteA🌓 navigate_pwa_site_a_to_SiteB🌑 check_window_title_is_SiteA🌑 +install_create_shortcut_windowed_SiteA🌑 open_in_chrome🌑 check_tab_created🌑 +install_omnibox_icon_SiteA🌕 open_in_chrome🌑 check_tab_created🌑 +install_menu_option_SiteA🌓 open_in_chrome🌑 check_tab_created🌑 +install_create_shortcut_windowed_SiteA🌑 navigate_pwa_site_a_to_SiteB🌑 open_in_chrome🌑 check_tab_created🌑 +install_omnibox_icon_SiteA🌕 navigate_pwa_site_a_to_SiteB🌑 open_in_chrome🌑 check_tab_created🌑 +install_menu_option_SiteA🌓 navigate_pwa_site_a_to_SiteB🌑 open_in_chrome🌑 check_tab_created🌑 +install_create_shortcut_tabbed_SiteA🌑 install_policy_app_windowed_no_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_app_in_list_tabbed_SiteA🌑 +install_create_shortcut_tabbed_SiteA🌑 install_policy_app_tabbed_no_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_app_in_list_tabbed_SiteA🌑 +install_create_shortcut_tabbed_SiteA🌑 install_policy_app_windowed_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_app_in_list_tabbed_SiteA🌑 +install_create_shortcut_tabbed_SiteA🌑 install_policy_app_tabbed_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_app_in_list_tabbed_SiteA🌑 +install_create_shortcut_tabbed_SiteA🌑 install_policy_app_windowed_no_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 +install_create_shortcut_tabbed_SiteA🌑 install_policy_app_tabbed_no_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 +install_create_shortcut_tabbed_SiteA🌑 install_policy_app_windowed_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 +install_create_shortcut_tabbed_SiteA🌑 install_policy_app_tabbed_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 +install_create_shortcut_windowed_SiteA🌑 install_policy_app_windowed_no_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_app_in_list_windowed_SiteA🌑 +install_create_shortcut_windowed_SiteA🌑 install_policy_app_tabbed_no_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_app_in_list_windowed_SiteA🌑 +install_create_shortcut_windowed_SiteA🌑 install_policy_app_windowed_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_app_in_list_windowed_SiteA🌑 +install_create_shortcut_windowed_SiteA🌑 install_policy_app_tabbed_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_app_in_list_windowed_SiteA🌑 +install_omnibox_icon_SiteA🌕 install_policy_app_windowed_no_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_app_in_list_windowed_SiteA🌑 +install_omnibox_icon_SiteA🌕 install_policy_app_tabbed_no_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_app_in_list_windowed_SiteA🌑 +install_omnibox_icon_SiteA🌕 install_policy_app_windowed_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_app_in_list_windowed_SiteA🌑 +install_omnibox_icon_SiteA🌕 install_policy_app_tabbed_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_app_in_list_windowed_SiteA🌑 +install_menu_option_SiteA🌓 install_policy_app_windowed_no_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_app_in_list_windowed_SiteA🌑 +install_menu_option_SiteA🌓 install_policy_app_tabbed_no_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_app_in_list_windowed_SiteA🌑 +install_menu_option_SiteA🌓 install_policy_app_windowed_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_app_in_list_windowed_SiteA🌑 +install_menu_option_SiteA🌓 install_policy_app_tabbed_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_app_in_list_windowed_SiteA🌑 +install_create_shortcut_windowed_SiteA🌑 install_policy_app_windowed_no_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 +install_create_shortcut_windowed_SiteA🌑 install_policy_app_tabbed_no_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 +install_create_shortcut_windowed_SiteA🌑 install_policy_app_windowed_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 +install_create_shortcut_windowed_SiteA🌑 install_policy_app_tabbed_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 +install_omnibox_icon_SiteA🌕 install_policy_app_windowed_no_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 +install_omnibox_icon_SiteA🌕 install_policy_app_tabbed_no_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 +install_omnibox_icon_SiteA🌕 install_policy_app_windowed_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_platform_shortcut_exists_SiteA🌑 +install_omnibox_icon_SiteA🌕 install_policy_app_tabbed_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_platform_shortcut_exists_SiteA🌑 +install_menu_option_SiteA🌓 install_policy_app_windowed_no_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 +install_menu_option_SiteA🌓 install_policy_app_tabbed_no_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 +install_menu_option_SiteA🌓 install_policy_app_windowed_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_platform_shortcut_exists_SiteA🌑 +install_menu_option_SiteA🌓 install_policy_app_tabbed_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_platform_shortcut_exists_SiteA🌑 +install_policy_app_windowed_no_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_app_not_in_list_SiteA🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_app_not_in_list_SiteA🌑 +install_policy_app_windowed_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_app_not_in_list_SiteA🌕 +install_policy_app_tabbed_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_app_not_in_list_SiteA🌕 +install_policy_app_tabbed_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 navigate_browser_SiteA🌕 check_install_icon_shown🌕 +install_policy_app_tabbed_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 navigate_browser_SiteA🌕 check_launch_icon_not_shown🌕 +install_policy_app_windowed_no_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_platform_shortcut_not_exists_SiteA🌑 check_app_not_in_list_SiteA🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_platform_shortcut_not_exists_SiteA🌑 check_app_not_in_list_SiteA🌑 +install_policy_app_windowed_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_platform_shortcut_not_exists_SiteA🌑 check_app_not_in_list_SiteA🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_platform_shortcut_not_exists_SiteA🌑 check_app_not_in_list_SiteA🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 install_create_shortcut_windowed_SiteA🌑 uninstall_policy_app_SiteA🌑 check_app_in_list_windowed_SiteA🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 install_omnibox_icon_SiteA🌕 uninstall_policy_app_SiteA🌕 check_app_in_list_windowed_SiteA🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 install_menu_option_SiteA🌓 uninstall_policy_app_SiteA🌕 check_app_in_list_windowed_SiteA🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 install_create_shortcut_windowed_SiteA🌑 uninstall_policy_app_SiteA🌑 check_app_in_list_windowed_SiteA🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 install_omnibox_icon_SiteA🌑 uninstall_policy_app_SiteA🌑 check_app_in_list_windowed_SiteA🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 install_menu_option_SiteA🌑 uninstall_policy_app_SiteA🌑 check_app_in_list_windowed_SiteA🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 install_create_shortcut_windowed_SiteA🌑 uninstall_policy_app_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 install_omnibox_icon_SiteA🌕 uninstall_policy_app_SiteA🌕 check_platform_shortcut_exists_SiteA🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 install_menu_option_SiteA🌓 uninstall_policy_app_SiteA🌕 check_platform_shortcut_exists_SiteA🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 install_create_shortcut_windowed_SiteA🌑 uninstall_policy_app_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 install_omnibox_icon_SiteA🌑 uninstall_policy_app_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 install_menu_option_SiteA🌑 uninstall_policy_app_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 +install_create_shortcut_windowed_SiteA🌑 set_app_badge_SiteA🌑 check_app_badge_has_value_SiteA🌑 +install_omnibox_icon_SiteA🌕 set_app_badge_SiteA🌑 check_app_badge_has_value_SiteA🌑 +install_menu_option_SiteA🌓 set_app_badge_SiteA🌑 check_app_badge_has_value_SiteA🌑 +navigate_browser_SiteA🌕 set_app_badge_SiteA🌑 check_platform_shortcut_not_exists_SiteA🌑 +install_create_shortcut_windowed_SiteA🌑 set_open_in_tab_SiteA🌑 check_app_in_list_tabbed_SiteA🌑 +install_omnibox_icon_SiteA🌕 set_open_in_tab_SiteA🌓 check_app_in_list_tabbed_SiteA🌑 +install_menu_option_SiteA🌓 set_open_in_tab_SiteA🌓 check_app_in_list_tabbed_SiteA🌑 +install_create_shortcut_windowed_SiteA🌑 set_open_in_tab_SiteA🌑 navigate_browser_SiteA🌑 check_install_icon_shown🌑 +install_omnibox_icon_SiteA🌕 set_open_in_tab_SiteA🌓 navigate_browser_SiteA🌕 check_install_icon_shown🌕 +install_menu_option_SiteA🌓 set_open_in_tab_SiteA🌓 navigate_browser_SiteA🌕 check_install_icon_shown🌕 +install_create_shortcut_tabbed_SiteA🌑 set_open_in_window_SiteA🌑 check_app_in_list_windowed_SiteA🌑 +install_create_shortcut_tabbed_SiteA🌑 set_open_in_window_SiteA🌑 navigate_browser_SiteA🌑 check_install_icon_not_shown🌑 +install_create_shortcut_tabbed_SiteA🌑 set_open_in_window_SiteA🌑 navigate_browser_SiteA🌑 check_launch_icon_shown🌑 +install_create_shortcut_windowed_SiteA🌑 switch_incognito_profile🌑 navigate_browser_SiteA🌑 check_launch_icon_not_shown🌑 +install_omnibox_icon_SiteA🌕 switch_incognito_profile🌑 navigate_browser_SiteA🌑 check_launch_icon_not_shown🌑 +install_menu_option_SiteA🌓 switch_incognito_profile🌑 navigate_browser_SiteA🌑 check_launch_icon_not_shown🌑 +switch_incognito_profile🌑 navigate_browser_SiteA🌑 check_install_icon_not_shown🌑 +install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 check_app_in_list_not_locally_installed_SiteA🌑 +install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 check_app_in_list_not_locally_installed_SiteA🌓 +install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 check_app_in_list_not_locally_installed_SiteA🌓 +install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 check_app_in_list_not_locally_installed_SiteA🌑 +install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 check_platform_shortcut_not_exists_SiteA🌑 +install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 check_platform_shortcut_not_exists_SiteA🌑 +install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 check_platform_shortcut_not_exists_SiteA🌑 +install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 check_platform_shortcut_not_exists_SiteA🌑 +install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 navigate_browser_SiteA🌑 check_install_icon_shown🌑 +install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 navigate_browser_SiteA🌕 check_install_icon_shown🌕 +install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 navigate_browser_SiteA🌕 check_install_icon_shown🌕 +install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 navigate_browser_SiteA🌑 check_launch_icon_not_shown🌑 +install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 navigate_browser_SiteA🌕 check_launch_icon_not_shown🌕 +install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 navigate_browser_SiteA🌕 check_launch_icon_not_shown🌕 +install_create_shortcut_windowed_SiteC🌑 switch_profile_clients_UserAClient2🌑 check_app_in_list_not_locally_installed_SiteC🌑 +install_create_shortcut_tabbed_SiteC🌑 switch_profile_clients_UserAClient2🌑 check_app_in_list_not_locally_installed_SiteC🌑 +install_create_shortcut_windowed_SiteC🌑 switch_profile_clients_UserAClient2🌑 check_platform_shortcut_not_exists_SiteC🌑 +install_create_shortcut_tabbed_SiteC🌑 switch_profile_clients_UserAClient2🌑 check_platform_shortcut_not_exists_SiteC🌑 +sync_turn_off🌕 install_create_shortcut_windowed_SiteA🌑 sync_turn_on🌑 switch_profile_clients_UserAClient2🌑 check_app_in_list_not_locally_installed_SiteA🌑 +sync_turn_off🌕 install_omnibox_icon_SiteA🌕 sync_turn_on🌕 switch_profile_clients_UserAClient2🌕 check_app_in_list_not_locally_installed_SiteA🌓 +sync_turn_off🌕 install_menu_option_SiteA🌓 sync_turn_on🌕 switch_profile_clients_UserAClient2🌕 check_app_in_list_not_locally_installed_SiteA🌓 +sync_turn_off🌕 install_create_shortcut_tabbed_SiteA🌑 sync_turn_on🌑 switch_profile_clients_UserAClient2🌑 check_app_in_list_not_locally_installed_SiteA🌑 +sync_turn_off🌕 install_create_shortcut_windowed_SiteC🌑 sync_turn_on🌑 switch_profile_clients_UserAClient2🌑 check_app_in_list_not_locally_installed_SiteC🌑 +sync_turn_off🌕 install_create_shortcut_tabbed_SiteC🌑 sync_turn_on🌑 switch_profile_clients_UserAClient2🌑 check_app_in_list_not_locally_installed_SiteC🌑 +install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 sync_turn_off🌑 uninstall_from_app_list_SiteA🌑 sync_turn_on🌑 switch_profile_clients_UserAClient1🌑 check_app_not_in_list_SiteA🌑 +install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 sync_turn_off🌕 uninstall_from_app_list_SiteA🌑 sync_turn_on🌑 switch_profile_clients_UserAClient1🌑 check_app_not_in_list_SiteA🌑 +install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 sync_turn_off🌕 uninstall_from_app_list_SiteA🌑 sync_turn_on🌑 switch_profile_clients_UserAClient1🌑 check_app_not_in_list_SiteA🌑 +install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 sync_turn_off🌑 uninstall_from_app_list_SiteA🌑 sync_turn_on🌑 switch_profile_clients_UserAClient1🌑 check_app_not_in_list_SiteA🌑 +install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 sync_turn_off🌑 uninstall_from_app_list_SiteA🌑 sync_turn_on🌑 switch_profile_clients_UserAClient1🌑 check_platform_shortcut_not_exists_SiteA🌑 +install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 sync_turn_off🌕 uninstall_from_app_list_SiteA🌑 sync_turn_on🌑 switch_profile_clients_UserAClient1🌑 check_platform_shortcut_not_exists_SiteA🌑 +install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 sync_turn_off🌕 uninstall_from_app_list_SiteA🌑 sync_turn_on🌑 switch_profile_clients_UserAClient1🌑 check_platform_shortcut_not_exists_SiteA🌑 +install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 sync_turn_off🌑 uninstall_from_app_list_SiteA🌑 sync_turn_on🌑 switch_profile_clients_UserAClient1🌑 check_platform_shortcut_not_exists_SiteA🌑 +install_create_shortcut_windowed_SiteA🌑 uninstall_from_app_list_SiteA🌑 check_app_not_in_list_SiteA🌑 +install_create_shortcut_windowed_SiteA🌑 uninstall_from_menu_SiteA🌑 check_app_not_in_list_SiteA🌑 +install_omnibox_icon_SiteA🌕 uninstall_from_app_list_SiteA🌑 check_app_not_in_list_SiteA🌑 +install_omnibox_icon_SiteA🌕 uninstall_from_menu_SiteA🌕 check_app_not_in_list_SiteA🌕 +install_menu_option_SiteA🌓 uninstall_from_app_list_SiteA🌑 check_app_not_in_list_SiteA🌑 +install_menu_option_SiteA🌓 uninstall_from_menu_SiteA🌕 check_app_not_in_list_SiteA🌕 +install_create_shortcut_tabbed_SiteA🌑 uninstall_from_app_list_SiteA🌑 check_app_not_in_list_SiteA🌑 +install_create_shortcut_tabbed_SiteA🌑 uninstall_from_menu_SiteA🌑 check_app_not_in_list_SiteA🌑 +install_create_shortcut_windowed_SiteA🌑 uninstall_from_app_list_SiteA🌑 navigate_browser_SiteA🌑 check_install_icon_shown🌑 +install_create_shortcut_windowed_SiteA🌑 uninstall_from_menu_SiteA🌑 navigate_browser_SiteA🌑 check_install_icon_shown🌑 +install_omnibox_icon_SiteA🌕 uninstall_from_app_list_SiteA🌑 navigate_browser_SiteA🌑 check_install_icon_shown🌑 +install_omnibox_icon_SiteA🌕 uninstall_from_menu_SiteA🌕 navigate_browser_SiteA🌕 check_install_icon_shown🌕 +install_menu_option_SiteA🌓 uninstall_from_app_list_SiteA🌑 navigate_browser_SiteA🌑 check_install_icon_shown🌑 +install_menu_option_SiteA🌓 uninstall_from_menu_SiteA🌕 navigate_browser_SiteA🌕 check_install_icon_shown🌕 +install_create_shortcut_tabbed_SiteA🌑 uninstall_from_app_list_SiteA🌑 navigate_browser_SiteA🌑 check_install_icon_shown🌑 +install_create_shortcut_tabbed_SiteA🌑 uninstall_from_menu_SiteA🌑 navigate_browser_SiteA🌑 check_install_icon_shown🌑 +install_create_shortcut_windowed_SiteA🌑 uninstall_from_app_list_SiteA🌑 navigate_browser_SiteA🌑 check_launch_icon_not_shown🌑 +install_create_shortcut_windowed_SiteA🌑 uninstall_from_menu_SiteA🌑 navigate_browser_SiteA🌑 check_launch_icon_not_shown🌑 +install_omnibox_icon_SiteA🌕 uninstall_from_app_list_SiteA🌑 navigate_browser_SiteA🌑 check_launch_icon_not_shown🌑 +install_omnibox_icon_SiteA🌕 uninstall_from_menu_SiteA🌕 navigate_browser_SiteA🌕 check_launch_icon_not_shown🌕 +install_menu_option_SiteA🌓 uninstall_from_app_list_SiteA🌑 navigate_browser_SiteA🌑 check_launch_icon_not_shown🌑 +install_menu_option_SiteA🌓 uninstall_from_menu_SiteA🌕 navigate_browser_SiteA🌕 check_launch_icon_not_shown🌕 +install_create_shortcut_tabbed_SiteA🌑 uninstall_from_app_list_SiteA🌑 navigate_browser_SiteA🌑 check_launch_icon_not_shown🌑 +install_create_shortcut_tabbed_SiteA🌑 uninstall_from_menu_SiteA🌑 navigate_browser_SiteA🌑 check_launch_icon_not_shown🌑 +install_create_shortcut_windowed_SiteA🌑 uninstall_from_app_list_SiteA🌑 check_platform_shortcut_not_exists_SiteA🌑 +install_create_shortcut_windowed_SiteA🌑 uninstall_from_menu_SiteA🌑 check_platform_shortcut_not_exists_SiteA🌑 +install_omnibox_icon_SiteA🌕 uninstall_from_app_list_SiteA🌑 check_platform_shortcut_not_exists_SiteA🌑 +install_omnibox_icon_SiteA🌕 uninstall_from_menu_SiteA🌕 check_platform_shortcut_not_exists_SiteA🌑 +install_menu_option_SiteA🌓 uninstall_from_app_list_SiteA🌑 check_platform_shortcut_not_exists_SiteA🌑 +install_menu_option_SiteA🌓 uninstall_from_menu_SiteA🌕 check_platform_shortcut_not_exists_SiteA🌑 +install_create_shortcut_tabbed_SiteA🌑 uninstall_from_app_list_SiteA🌑 check_platform_shortcut_not_exists_SiteA🌑 +install_create_shortcut_tabbed_SiteA🌑 uninstall_from_menu_SiteA🌑 check_platform_shortcut_not_exists_SiteA🌑 +install_create_shortcut_windowed_SiteC🌑 uninstall_from_app_list_SiteC🌑 check_app_not_in_list_SiteA🌑 +install_create_shortcut_windowed_SiteC🌑 uninstall_from_menu_SiteC🌑 check_app_not_in_list_SiteA🌑 +install_create_shortcut_tabbed_SiteC🌑 uninstall_from_app_list_SiteC🌑 check_app_not_in_list_SiteA🌑 +install_create_shortcut_tabbed_SiteC🌑 uninstall_from_menu_SiteC🌑 check_app_not_in_list_SiteA🌑 +install_create_shortcut_windowed_SiteC🌑 uninstall_from_app_list_SiteC🌑 navigate_browser_SiteC🌑 check_launch_icon_not_shown🌑 +install_create_shortcut_windowed_SiteC🌑 uninstall_from_menu_SiteC🌑 navigate_browser_SiteC🌑 check_launch_icon_not_shown🌑 +install_create_shortcut_tabbed_SiteC🌑 uninstall_from_app_list_SiteC🌑 navigate_browser_SiteC🌑 check_launch_icon_not_shown🌑 +install_create_shortcut_tabbed_SiteC🌑 uninstall_from_menu_SiteC🌑 navigate_browser_SiteC🌑 check_launch_icon_not_shown🌑 +install_create_shortcut_windowed_SiteC🌑 uninstall_from_app_list_SiteC🌑 check_platform_shortcut_not_exists_SiteC🌑 +install_create_shortcut_windowed_SiteC🌑 uninstall_from_menu_SiteC🌑 check_platform_shortcut_not_exists_SiteC🌑 +install_create_shortcut_tabbed_SiteC🌑 uninstall_from_app_list_SiteC🌑 check_platform_shortcut_not_exists_SiteC🌑 +install_create_shortcut_tabbed_SiteC🌑 uninstall_from_menu_SiteC🌑 check_platform_shortcut_not_exists_SiteC🌑 +install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 uninstall_from_app_list_SiteA🌑 check_app_not_in_list_SiteA🌑 +install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 uninstall_from_app_list_SiteA🌑 check_app_not_in_list_SiteA🌑 +install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 uninstall_from_app_list_SiteA🌑 check_app_not_in_list_SiteA🌑 +install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 uninstall_from_app_list_SiteA🌑 check_app_not_in_list_SiteA🌑 +install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 uninstall_from_app_list_SiteA🌑 switch_profile_clients_UserAClient1🌑 check_app_not_in_list_SiteA🌑 +install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 uninstall_from_app_list_SiteA🌑 switch_profile_clients_UserAClient1🌑 check_app_not_in_list_SiteA🌑 +install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 uninstall_from_app_list_SiteA🌑 switch_profile_clients_UserAClient1🌑 check_app_not_in_list_SiteA🌑 +install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 uninstall_from_app_list_SiteA🌑 switch_profile_clients_UserAClient1🌑 check_app_not_in_list_SiteA🌑
diff --git a/chrome/test/webapps/coverage/coverage_win.tsv b/chrome/test/webapps/coverage/coverage_win.tsv index e71c6b4..0da8a774 100644 --- a/chrome/test/webapps/coverage/coverage_win.tsv +++ b/chrome/test/webapps/coverage/coverage_win.tsv
@@ -1,844 +1,844 @@ -# This is a generated file. -# Full coverage: 14%, with partial coverage: 24% -install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 chrome_update🌑 check_app_in_list_not_locally_installed_SiteA🌑 -install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 chrome_update🌑 check_app_in_list_not_locally_installed_SiteA🌑 -install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 chrome_update🌑 check_app_in_list_not_locally_installed_SiteA🌑 -install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 chrome_update🌑 check_app_in_list_not_locally_installed_SiteA🌑 -install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteA🌑 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 -install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 install_locally_SiteA🌓 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 -install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 install_locally_SiteA🌓 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 -install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteA🌑 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 -install_create_shortcut_windowed_SiteA🌑 uninstall_from_app_list_SiteA🌑 chrome_update🌑 check_app_not_in_list_SiteA🌑 -install_create_shortcut_windowed_SiteA🌑 uninstall_from_menu_SiteA🌑 chrome_update🌑 check_app_not_in_list_SiteA🌑 -install_omnibox_icon_SiteA🌕 uninstall_from_app_list_SiteA🌑 chrome_update🌑 check_app_not_in_list_SiteA🌑 -install_omnibox_icon_SiteA🌕 uninstall_from_menu_SiteA🌕 chrome_update🌑 check_app_not_in_list_SiteA🌑 -install_menu_option_SiteA🌓 uninstall_from_app_list_SiteA🌑 chrome_update🌑 check_app_not_in_list_SiteA🌑 -install_menu_option_SiteA🌓 uninstall_from_menu_SiteA🌕 chrome_update🌑 check_app_not_in_list_SiteA🌑 -install_create_shortcut_tabbed_SiteA🌑 uninstall_from_app_list_SiteA🌑 chrome_update🌑 check_app_not_in_list_SiteA🌑 -install_create_shortcut_tabbed_SiteA🌑 uninstall_from_menu_SiteA🌑 chrome_update🌑 check_app_not_in_list_SiteA🌑 -install_create_shortcut_windowed_SiteA🌑 uninstall_from_app_list_SiteA🌑 chrome_update🌑 check_platform_shortcut_not_exists_SiteA🌑 -install_create_shortcut_windowed_SiteA🌑 uninstall_from_menu_SiteA🌑 chrome_update🌑 check_platform_shortcut_not_exists_SiteA🌑 -install_omnibox_icon_SiteA🌕 uninstall_from_app_list_SiteA🌑 chrome_update🌑 check_platform_shortcut_not_exists_SiteA🌑 -install_omnibox_icon_SiteA🌕 uninstall_from_menu_SiteA🌕 chrome_update🌑 check_platform_shortcut_not_exists_SiteA🌑 -install_menu_option_SiteA🌓 uninstall_from_app_list_SiteA🌑 chrome_update🌑 check_platform_shortcut_not_exists_SiteA🌑 -install_menu_option_SiteA🌓 uninstall_from_menu_SiteA🌕 chrome_update🌑 check_platform_shortcut_not_exists_SiteA🌑 -install_create_shortcut_tabbed_SiteA🌑 uninstall_from_app_list_SiteA🌑 chrome_update🌑 check_platform_shortcut_not_exists_SiteA🌑 -install_create_shortcut_tabbed_SiteA🌑 uninstall_from_menu_SiteA🌑 chrome_update🌑 check_platform_shortcut_not_exists_SiteA🌑 -install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteA🌑 chrome_update🌑 check_app_in_list_tabbed_SiteA🌑 -install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteA🌑 chrome_update🌑 check_app_in_list_windowed_SiteA🌑 -install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 install_locally_SiteA🌓 chrome_update🌑 check_app_in_list_windowed_SiteA🌑 -install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 install_locally_SiteA🌓 chrome_update🌑 check_app_in_list_windowed_SiteA🌑 -install_create_shortcut_windowed_SiteC🌑 switch_profile_clients_UserAClient2🌑 chrome_update🌑 check_app_in_list_not_locally_installed_SiteC🌑 -install_create_shortcut_tabbed_SiteC🌑 switch_profile_clients_UserAClient2🌑 chrome_update🌑 check_app_in_list_not_locally_installed_SiteC🌑 -install_policy_app_windowed_no_shortcut_SiteA🌑 chrome_update🌑 check_platform_shortcut_not_exists_SiteA🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 chrome_update🌑 check_platform_shortcut_not_exists_SiteA🌑 -install_policy_app_windowed_no_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 chrome_update🌑 check_app_not_in_list_SiteA🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 chrome_update🌑 check_app_not_in_list_SiteA🌑 -install_policy_app_windowed_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 chrome_update🌑 check_app_not_in_list_SiteA🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 chrome_update🌑 check_app_not_in_list_SiteA🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 install_create_shortcut_windowed_SiteA🌑 chrome_update🌑 check_app_in_list_windowed_SiteA🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 install_omnibox_icon_SiteA🌕 chrome_update🌑 check_app_in_list_windowed_SiteA🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 install_menu_option_SiteA🌓 chrome_update🌑 check_app_in_list_windowed_SiteA🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 install_create_shortcut_windowed_SiteA🌑 chrome_update🌑 check_app_in_list_windowed_SiteA🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 install_omnibox_icon_SiteA🌑 chrome_update🌑 check_app_in_list_windowed_SiteA🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 install_menu_option_SiteA🌑 chrome_update🌑 check_app_in_list_windowed_SiteA🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 install_create_shortcut_windowed_SiteA🌑 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 install_omnibox_icon_SiteA🌕 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 install_menu_option_SiteA🌓 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 install_create_shortcut_windowed_SiteA🌑 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 install_omnibox_icon_SiteA🌑 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 install_menu_option_SiteA🌑 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 install_create_shortcut_windowed_SiteA🌑 uninstall_policy_app_SiteA🌑 chrome_update🌑 check_app_in_list_windowed_SiteA🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 install_omnibox_icon_SiteA🌕 uninstall_policy_app_SiteA🌕 chrome_update🌑 check_app_in_list_windowed_SiteA🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 install_menu_option_SiteA🌓 uninstall_policy_app_SiteA🌕 chrome_update🌑 check_app_in_list_windowed_SiteA🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 install_create_shortcut_windowed_SiteA🌑 uninstall_policy_app_SiteA🌑 chrome_update🌑 check_app_in_list_windowed_SiteA🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 install_omnibox_icon_SiteA🌑 uninstall_policy_app_SiteA🌑 chrome_update🌑 check_app_in_list_windowed_SiteA🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 install_menu_option_SiteA🌑 uninstall_policy_app_SiteA🌑 chrome_update🌑 check_app_in_list_windowed_SiteA🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 install_create_shortcut_windowed_SiteA🌑 uninstall_policy_app_SiteA🌑 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 install_omnibox_icon_SiteA🌕 uninstall_policy_app_SiteA🌕 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 install_menu_option_SiteA🌓 uninstall_policy_app_SiteA🌕 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 install_create_shortcut_windowed_SiteA🌑 uninstall_policy_app_SiteA🌑 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 install_omnibox_icon_SiteA🌑 uninstall_policy_app_SiteA🌑 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 install_menu_option_SiteA🌑 uninstall_policy_app_SiteA🌑 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 -install_create_shortcut_tabbed_SiteA🌑 chrome_update🌑 check_app_in_list_tabbed_SiteA🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 chrome_update🌑 check_app_in_list_tabbed_SiteA🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 chrome_update🌑 check_app_in_list_tabbed_SiteA🌑 -install_create_shortcut_tabbed_SiteA🌑 chrome_update🌑 navigate_browser_SiteA🌑 check_create_shortcut_shown🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 chrome_update🌑 navigate_browser_SiteA🌑 check_create_shortcut_shown🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 chrome_update🌑 navigate_browser_SiteA🌑 check_create_shortcut_shown🌑 -install_create_shortcut_tabbed_SiteA🌑 chrome_update🌑 navigate_browser_SiteA🌑 check_install_icon_shown🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 chrome_update🌑 navigate_browser_SiteA🌑 check_install_icon_shown🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 chrome_update🌑 navigate_browser_SiteA🌑 check_install_icon_shown🌑 -install_create_shortcut_tabbed_SiteA🌑 chrome_update🌑 navigate_browser_SiteA🌑 check_launch_icon_not_shown🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 chrome_update🌑 navigate_browser_SiteA🌑 check_launch_icon_not_shown🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 chrome_update🌑 navigate_browser_SiteA🌑 check_launch_icon_not_shown🌑 -install_create_shortcut_windowed_SiteA🌑 chrome_update🌑 check_app_in_list_windowed_SiteA🌑 -install_omnibox_icon_SiteA🌕 chrome_update🌑 check_app_in_list_windowed_SiteA🌑 -install_policy_app_windowed_no_shortcut_SiteA🌑 chrome_update🌑 check_app_in_list_windowed_SiteA🌑 -install_policy_app_windowed_shortcut_SiteA🌓 chrome_update🌑 check_app_in_list_windowed_SiteA🌑 -install_menu_option_SiteA🌓 chrome_update🌑 check_app_in_list_windowed_SiteA🌑 -install_create_shortcut_windowed_SiteA🌑 chrome_update🌑 navigate_browser_SiteA🌑 check_create_shortcut_not_shown🌑 -install_omnibox_icon_SiteA🌕 chrome_update🌑 navigate_browser_SiteA🌑 check_create_shortcut_not_shown🌑 -install_policy_app_windowed_no_shortcut_SiteA🌑 chrome_update🌑 navigate_browser_SiteA🌑 check_create_shortcut_not_shown🌑 -install_policy_app_windowed_shortcut_SiteA🌓 chrome_update🌑 navigate_browser_SiteA🌑 check_create_shortcut_not_shown🌑 -install_menu_option_SiteA🌓 chrome_update🌑 navigate_browser_SiteA🌑 check_create_shortcut_not_shown🌑 -install_create_shortcut_windowed_SiteA🌑 chrome_update🌑 navigate_browser_SiteA🌑 check_install_icon_not_shown🌑 -install_omnibox_icon_SiteA🌕 chrome_update🌑 navigate_browser_SiteA🌑 check_install_icon_not_shown🌑 -install_policy_app_windowed_no_shortcut_SiteA🌑 chrome_update🌑 navigate_browser_SiteA🌑 check_install_icon_not_shown🌑 -install_policy_app_windowed_shortcut_SiteA🌓 chrome_update🌑 navigate_browser_SiteA🌑 check_install_icon_not_shown🌑 -install_menu_option_SiteA🌓 chrome_update🌑 navigate_browser_SiteA🌑 check_install_icon_not_shown🌑 -install_create_shortcut_windowed_SiteA🌑 chrome_update🌑 navigate_browser_SiteA🌑 check_launch_icon_shown🌑 -install_omnibox_icon_SiteA🌕 chrome_update🌑 navigate_browser_SiteA🌑 check_launch_icon_shown🌑 -install_policy_app_windowed_no_shortcut_SiteA🌑 chrome_update🌑 navigate_browser_SiteA🌑 check_launch_icon_shown🌑 -install_policy_app_windowed_shortcut_SiteA🌓 chrome_update🌑 navigate_browser_SiteA🌑 check_launch_icon_shown🌑 -install_menu_option_SiteA🌓 chrome_update🌑 navigate_browser_SiteA🌑 check_launch_icon_shown🌑 -install_policy_app_windowed_shortcut_SiteA🌓 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 -install_create_shortcut_windowed_SiteA🌑 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 -install_omnibox_icon_SiteA🌕 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 -install_menu_option_SiteA🌓 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 -install_create_shortcut_tabbed_SiteA🌑 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 -install_policy_app_windowed_shortcut_SiteA🌓 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 -install_create_shortcut_windowed_SiteA🌑 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 -install_omnibox_icon_SiteA🌕 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 -install_menu_option_SiteA🌓 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 -install_create_shortcut_tabbed_SiteA🌑 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 -install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 chrome_update🌑 launch_from_menu_option_SiteA🌑 check_tab_created🌑 -install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 chrome_update🌑 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 -install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 chrome_update🌑 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 -install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 chrome_update🌑 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 -install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 chrome_update🌑 launch_from_menu_option_SiteA🌑 check_tab_created🌑 -install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 chrome_update🌑 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 -install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 chrome_update🌑 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 -install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 chrome_update🌑 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 -install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 chrome_update🌑 launch_from_menu_option_SiteA🌑 check_tab_created🌑 -install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 chrome_update🌑 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 -install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 chrome_update🌑 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 -install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 chrome_update🌑 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 -install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 chrome_update🌑 launch_from_menu_option_SiteA🌑 check_tab_created🌑 -install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 chrome_update🌑 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 -install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 chrome_update🌑 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 -install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 chrome_update🌑 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 -install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteA🌑 chrome_update🌑 launch_from_menu_option_SiteA🌑 check_tab_created🌑 -install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteA🌑 chrome_update🌑 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 -install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteA🌑 chrome_update🌑 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 -install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteA🌑 chrome_update🌑 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 -install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteA🌑 chrome_update🌑 launch_from_menu_option_SiteA🌑 check_window_created🌑 -install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteA🌑 chrome_update🌑 launch_from_launch_icon_SiteA🌑 check_window_created🌑 -install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteA🌑 chrome_update🌑 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 -install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteA🌑 chrome_update🌑 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 -install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 install_locally_SiteA🌓 chrome_update🌑 launch_from_menu_option_SiteA🌑 check_window_created🌑 -install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 install_locally_SiteA🌓 chrome_update🌑 launch_from_launch_icon_SiteA🌑 check_window_created🌑 -install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 install_locally_SiteA🌓 chrome_update🌑 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 -install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 install_locally_SiteA🌓 chrome_update🌑 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 -install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 install_locally_SiteA🌓 chrome_update🌑 launch_from_menu_option_SiteA🌑 check_window_created🌑 -install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 install_locally_SiteA🌓 chrome_update🌑 launch_from_launch_icon_SiteA🌑 check_window_created🌑 -install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 install_locally_SiteA🌓 chrome_update🌑 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 -install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 install_locally_SiteA🌓 chrome_update🌑 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 -install_create_shortcut_tabbed_SiteA🌑 chrome_update🌑 launch_from_menu_option_SiteA🌑 check_tab_created🌑 -install_create_shortcut_tabbed_SiteA🌑 chrome_update🌑 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 -install_create_shortcut_tabbed_SiteA🌑 chrome_update🌑 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 -install_create_shortcut_tabbed_SiteA🌑 chrome_update🌑 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 chrome_update🌑 launch_from_menu_option_SiteA🌑 check_tab_created🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 chrome_update🌑 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 chrome_update🌑 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 chrome_update🌑 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 chrome_update🌑 launch_from_menu_option_SiteA🌑 check_tab_created🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 chrome_update🌑 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 chrome_update🌑 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 chrome_update🌑 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 -install_create_shortcut_windowed_SiteA🌑 chrome_update🌑 launch_from_menu_option_SiteA🌑 check_window_created🌑 -install_create_shortcut_windowed_SiteA🌑 chrome_update🌑 launch_from_launch_icon_SiteA🌑 check_window_created🌑 -install_create_shortcut_windowed_SiteA🌑 chrome_update🌑 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 -install_create_shortcut_windowed_SiteA🌑 chrome_update🌑 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 -install_omnibox_icon_SiteA🌕 chrome_update🌑 launch_from_menu_option_SiteA🌑 check_window_created🌑 -install_omnibox_icon_SiteA🌕 chrome_update🌑 launch_from_launch_icon_SiteA🌑 check_window_created🌑 -install_omnibox_icon_SiteA🌕 chrome_update🌑 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 -install_omnibox_icon_SiteA🌕 chrome_update🌑 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 -install_policy_app_windowed_no_shortcut_SiteA🌑 chrome_update🌑 launch_from_menu_option_SiteA🌑 check_window_created🌑 -install_policy_app_windowed_no_shortcut_SiteA🌑 chrome_update🌑 launch_from_launch_icon_SiteA🌑 check_window_created🌑 -install_policy_app_windowed_no_shortcut_SiteA🌑 chrome_update🌑 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 -install_policy_app_windowed_no_shortcut_SiteA🌑 chrome_update🌑 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 -install_policy_app_windowed_shortcut_SiteA🌓 chrome_update🌑 launch_from_menu_option_SiteA🌑 check_window_created🌑 -install_policy_app_windowed_shortcut_SiteA🌓 chrome_update🌑 launch_from_launch_icon_SiteA🌑 check_window_created🌑 -install_policy_app_windowed_shortcut_SiteA🌓 chrome_update🌑 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 -install_policy_app_windowed_shortcut_SiteA🌓 chrome_update🌑 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 -install_menu_option_SiteA🌓 chrome_update🌑 launch_from_menu_option_SiteA🌑 check_window_created🌑 -install_menu_option_SiteA🌓 chrome_update🌑 launch_from_launch_icon_SiteA🌑 check_window_created🌑 -install_menu_option_SiteA🌓 chrome_update🌑 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 -install_menu_option_SiteA🌓 chrome_update🌑 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 -install_create_shortcut_tabbed_SiteC🌑 chrome_update🌑 launch_from_menu_option_SiteA🌑 check_tab_created🌑 -install_create_shortcut_tabbed_SiteC🌑 chrome_update🌑 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 -install_create_shortcut_tabbed_SiteC🌑 chrome_update🌑 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 -install_create_shortcut_tabbed_SiteC🌑 chrome_update🌑 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 -install_policy_app_tabbed_shortcut_SiteC🌓 chrome_update🌑 launch_from_menu_option_SiteA🌑 check_tab_created🌑 -install_policy_app_tabbed_shortcut_SiteC🌓 chrome_update🌑 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 -install_policy_app_tabbed_shortcut_SiteC🌓 chrome_update🌑 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 -install_policy_app_tabbed_shortcut_SiteC🌓 chrome_update🌑 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 -install_policy_app_tabbed_no_shortcut_SiteC🌑 chrome_update🌑 launch_from_menu_option_SiteA🌑 check_tab_created🌑 -install_policy_app_tabbed_no_shortcut_SiteC🌑 chrome_update🌑 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 -install_policy_app_tabbed_no_shortcut_SiteC🌑 chrome_update🌑 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 -install_policy_app_tabbed_no_shortcut_SiteC🌑 chrome_update🌑 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 -install_create_shortcut_windowed_SiteA🌑 set_app_badge_SiteA🌑 clear_app_badge_SiteA🌑 check_app_badge_empty_SiteA🌑 -install_omnibox_icon_SiteA🌕 set_app_badge_SiteA🌑 clear_app_badge_SiteA🌑 check_app_badge_empty_SiteA🌑 -install_menu_option_SiteA🌓 set_app_badge_SiteA🌑 clear_app_badge_SiteA🌑 check_app_badge_empty_SiteA🌑 -install_create_shortcut_windowed_SiteA🌑 navigate_pwa_site_a_to_SiteB🌑 close_custom_toolbar🌑 check_navigation_start_url🌑 -install_omnibox_icon_SiteA🌕 navigate_pwa_site_a_to_SiteB🌑 close_custom_toolbar🌑 check_navigation_start_url🌑 -install_policy_app_windowed_no_shortcut_SiteA🌑 navigate_pwa_site_a_to_SiteB🌑 close_custom_toolbar🌑 check_navigation_start_url🌑 -install_policy_app_windowed_shortcut_SiteA🌓 navigate_pwa_site_a_to_SiteB🌑 close_custom_toolbar🌑 check_navigation_start_url🌑 -install_menu_option_SiteA🌓 navigate_pwa_site_a_to_SiteB🌑 close_custom_toolbar🌑 check_navigation_start_url🌑 -install_policy_app_windowed_no_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 -install_create_shortcut_windowed_SiteA🌑 delete_profile🌑 check_app_list_empty🌑 -install_omnibox_icon_SiteA🌕 delete_profile🌑 check_app_list_empty🌑 -install_policy_app_windowed_no_shortcut_SiteA🌑 delete_profile🌑 check_app_list_empty🌑 -install_policy_app_windowed_shortcut_SiteA🌓 delete_profile🌑 check_app_list_empty🌑 -install_menu_option_SiteA🌓 delete_profile🌑 check_app_list_empty🌑 -install_create_shortcut_tabbed_SiteA🌑 delete_profile🌑 check_app_list_empty🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 delete_profile🌑 check_app_list_empty🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 delete_profile🌑 check_app_list_empty🌑 -install_create_shortcut_windowed_SiteA🌑 delete_profile🌑 check_app_not_in_list_SiteA🌑 -install_omnibox_icon_SiteA🌕 delete_profile🌑 check_app_not_in_list_SiteA🌑 -install_policy_app_windowed_no_shortcut_SiteA🌑 delete_profile🌑 check_app_not_in_list_SiteA🌑 -install_policy_app_windowed_shortcut_SiteA🌓 delete_profile🌑 check_app_not_in_list_SiteA🌑 -install_menu_option_SiteA🌓 delete_profile🌑 check_app_not_in_list_SiteA🌑 -install_create_shortcut_tabbed_SiteA🌑 delete_profile🌑 check_app_not_in_list_SiteA🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 delete_profile🌑 check_app_not_in_list_SiteA🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 delete_profile🌑 check_app_not_in_list_SiteA🌑 -install_policy_app_windowed_shortcut_SiteA🌓 delete_profile🌑 check_platform_shortcut_not_exists_SiteA🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 delete_profile🌑 check_platform_shortcut_not_exists_SiteA🌑 -install_create_shortcut_windowed_SiteA🌑 delete_profile🌑 check_platform_shortcut_not_exists_SiteA🌑 -install_omnibox_icon_SiteA🌕 delete_profile🌑 check_platform_shortcut_not_exists_SiteA🌑 -install_menu_option_SiteA🌓 delete_profile🌑 check_platform_shortcut_not_exists_SiteA🌑 -install_create_shortcut_tabbed_SiteA🌑 delete_profile🌑 check_platform_shortcut_not_exists_SiteA🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 install_create_shortcut_windowed_SiteA🌑 check_app_in_list_windowed_SiteA🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 install_omnibox_icon_SiteA🌕 check_app_in_list_windowed_SiteA🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 install_menu_option_SiteA🌓 check_app_in_list_windowed_SiteA🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 install_create_shortcut_windowed_SiteA🌑 check_app_in_list_windowed_SiteA🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 install_omnibox_icon_SiteA🌑 check_app_in_list_windowed_SiteA🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 install_menu_option_SiteA🌑 check_app_in_list_windowed_SiteA🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 install_create_shortcut_windowed_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 install_omnibox_icon_SiteA🌕 check_platform_shortcut_exists_SiteA🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 install_menu_option_SiteA🌓 check_platform_shortcut_exists_SiteA🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 install_create_shortcut_windowed_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 install_omnibox_icon_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 install_menu_option_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 install_create_shortcut_windowed_SiteA🌑 check_window_created🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 install_omnibox_icon_SiteA🌕 check_window_created🌕 -install_policy_app_tabbed_shortcut_SiteA🌓 install_menu_option_SiteA🌓 check_window_created🌕 -install_policy_app_tabbed_no_shortcut_SiteA🌑 install_create_shortcut_windowed_SiteA🌑 check_window_created🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 install_omnibox_icon_SiteA🌑 check_window_created🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 install_menu_option_SiteA🌑 check_window_created🌑 -install_create_shortcut_windowed_SiteA🌑 check_window_created🌑 -install_omnibox_icon_SiteA🌕 check_window_created🌕 -install_menu_option_SiteA🌓 check_window_created🌕 -install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 -install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 install_locally_SiteA🌓 check_platform_shortcut_exists_SiteA🌑 -install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 install_locally_SiteA🌓 check_platform_shortcut_exists_SiteA🌑 -install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 -install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteA🌑 check_app_in_list_tabbed_SiteA🌑 -install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteA🌑 navigate_browser_SiteA🌑 check_install_icon_shown🌑 -install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteA🌑 navigate_browser_SiteA🌑 check_launch_icon_not_shown🌑 -install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteA🌑 check_app_in_list_windowed_SiteA🌑 -install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 install_locally_SiteA🌓 check_app_in_list_windowed_SiteA🌑 -install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 install_locally_SiteA🌓 check_app_in_list_windowed_SiteA🌑 -install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteA🌑 navigate_browser_SiteA🌑 check_install_icon_not_shown🌑 -install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 install_locally_SiteA🌓 navigate_browser_SiteA🌕 check_install_icon_not_shown🌕 -install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 install_locally_SiteA🌓 navigate_browser_SiteA🌕 check_install_icon_not_shown🌕 -install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteA🌑 navigate_browser_SiteA🌑 check_launch_icon_shown🌑 -install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 install_locally_SiteA🌓 navigate_browser_SiteA🌕 check_launch_icon_shown🌕 -install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 install_locally_SiteA🌓 navigate_browser_SiteA🌕 check_launch_icon_shown🌕 -install_create_shortcut_windowed_SiteC🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 -install_create_shortcut_tabbed_SiteC🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 -install_create_shortcut_tabbed_SiteC🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteC🌑 check_app_in_list_tabbed_SiteC🌑 -install_create_shortcut_tabbed_SiteC🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteC🌑 navigate_browser_SiteC🌑 check_install_icon_shown🌑 -install_create_shortcut_tabbed_SiteC🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteC🌑 navigate_browser_SiteC🌑 check_launch_icon_not_shown🌑 -install_create_shortcut_windowed_SiteC🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteC🌑 check_app_in_list_tabbed_SiteC🌑 -install_create_shortcut_windowed_SiteC🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteC🌑 navigate_browser_SiteC🌑 check_install_icon_not_shown🌑 -install_create_shortcut_windowed_SiteC🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteC🌑 navigate_browser_SiteC🌑 check_launch_icon_shown🌑 -install_policy_app_windowed_no_shortcut_SiteA🌑 check_platform_shortcut_not_exists_SiteA🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 check_platform_shortcut_not_exists_SiteA🌑 -install_policy_app_windowed_no_shortcut_SiteC🌑 check_platform_shortcut_not_exists_SiteC🌑 -install_policy_app_tabbed_no_shortcut_SiteC🌑 check_platform_shortcut_not_exists_SiteC🌑 -install_create_shortcut_tabbed_SiteA🌑 install_policy_app_windowed_no_shortcut_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 -install_create_shortcut_tabbed_SiteA🌑 install_policy_app_windowed_shortcut_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 -install_create_shortcut_windowed_SiteA🌑 install_policy_app_tabbed_no_shortcut_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 -install_create_shortcut_windowed_SiteA🌑 install_policy_app_windowed_no_shortcut_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 -install_omnibox_icon_SiteA🌕 install_policy_app_tabbed_no_shortcut_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 -install_omnibox_icon_SiteA🌕 install_policy_app_windowed_no_shortcut_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 -install_menu_option_SiteA🌓 install_policy_app_tabbed_no_shortcut_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 -install_menu_option_SiteA🌓 install_policy_app_windowed_no_shortcut_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 -install_create_shortcut_windowed_SiteA🌑 install_policy_app_tabbed_shortcut_SiteA🌑 check_app_in_list_windowed_SiteA🌑 -install_create_shortcut_windowed_SiteA🌑 install_policy_app_tabbed_no_shortcut_SiteA🌑 check_app_in_list_windowed_SiteA🌑 -install_omnibox_icon_SiteA🌕 install_policy_app_tabbed_shortcut_SiteA🌓 check_app_in_list_windowed_SiteA🌑 -install_omnibox_icon_SiteA🌕 install_policy_app_tabbed_no_shortcut_SiteA🌑 check_app_in_list_windowed_SiteA🌑 -install_menu_option_SiteA🌓 install_policy_app_tabbed_shortcut_SiteA🌓 check_app_in_list_windowed_SiteA🌑 -install_menu_option_SiteA🌓 install_policy_app_tabbed_no_shortcut_SiteA🌑 check_app_in_list_windowed_SiteA🌑 -install_create_shortcut_windowed_SiteA🌑 install_policy_app_tabbed_shortcut_SiteA🌑 navigate_browser_SiteA🌑 check_launch_icon_shown🌑 -install_create_shortcut_windowed_SiteA🌑 install_policy_app_tabbed_no_shortcut_SiteA🌑 navigate_browser_SiteA🌑 check_launch_icon_shown🌑 -install_omnibox_icon_SiteA🌕 install_policy_app_tabbed_shortcut_SiteA🌓 navigate_browser_SiteA🌕 check_launch_icon_shown🌕 -install_omnibox_icon_SiteA🌕 install_policy_app_tabbed_no_shortcut_SiteA🌑 navigate_browser_SiteA🌑 check_launch_icon_shown🌑 -install_menu_option_SiteA🌓 install_policy_app_tabbed_shortcut_SiteA🌓 navigate_browser_SiteA🌕 check_launch_icon_shown🌕 -install_menu_option_SiteA🌓 install_policy_app_tabbed_no_shortcut_SiteA🌑 navigate_browser_SiteA🌑 check_launch_icon_shown🌑 -install_create_shortcut_tabbed_SiteA🌑 install_policy_app_windowed_no_shortcut_SiteA🌑 check_app_in_list_tabbed_SiteA🌑 -install_create_shortcut_tabbed_SiteA🌑 install_policy_app_windowed_shortcut_SiteA🌑 check_app_in_list_tabbed_SiteA🌑 -install_create_shortcut_tabbed_SiteA🌑 install_policy_app_windowed_no_shortcut_SiteA🌑 navigate_browser_SiteA🌑 check_install_icon_shown🌑 -install_create_shortcut_tabbed_SiteA🌑 install_policy_app_windowed_shortcut_SiteA🌑 navigate_browser_SiteA🌑 check_install_icon_shown🌑 -install_create_shortcut_tabbed_SiteA🌑 check_app_in_list_tabbed_SiteA🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 check_app_in_list_tabbed_SiteA🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 check_app_in_list_tabbed_SiteA🌑 -install_create_shortcut_tabbed_SiteA🌑 navigate_browser_SiteA🌑 check_create_shortcut_shown🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 navigate_browser_SiteA🌕 check_create_shortcut_shown🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 navigate_browser_SiteA🌑 check_create_shortcut_shown🌑 -install_create_shortcut_tabbed_SiteA🌑 navigate_browser_SiteA🌑 check_install_icon_shown🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 navigate_browser_SiteA🌕 check_install_icon_shown🌕 -install_policy_app_tabbed_no_shortcut_SiteA🌑 navigate_browser_SiteA🌑 check_install_icon_shown🌑 -install_create_shortcut_tabbed_SiteA🌑 navigate_browser_SiteA🌑 check_launch_icon_not_shown🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 navigate_browser_SiteA🌕 check_launch_icon_not_shown🌕 -install_policy_app_tabbed_no_shortcut_SiteA🌑 navigate_browser_SiteA🌑 check_launch_icon_not_shown🌑 -install_create_shortcut_tabbed_SiteC🌑 check_app_in_list_tabbed_SiteC🌑 -install_policy_app_tabbed_shortcut_SiteC🌓 check_app_in_list_tabbed_SiteC🌑 -install_policy_app_tabbed_no_shortcut_SiteC🌑 check_app_in_list_tabbed_SiteC🌑 -install_create_shortcut_tabbed_SiteC🌑 navigate_browser_SiteC🌑 check_create_shortcut_shown🌑 -install_policy_app_tabbed_shortcut_SiteC🌓 navigate_browser_SiteC🌕 check_create_shortcut_shown🌑 -install_policy_app_tabbed_no_shortcut_SiteC🌑 navigate_browser_SiteC🌑 check_create_shortcut_shown🌑 -install_create_shortcut_tabbed_SiteC🌑 navigate_browser_SiteC🌑 check_install_icon_not_shown🌑 -install_policy_app_tabbed_shortcut_SiteC🌓 navigate_browser_SiteC🌕 check_install_icon_not_shown🌕 -install_policy_app_tabbed_no_shortcut_SiteC🌑 navigate_browser_SiteC🌑 check_install_icon_not_shown🌑 -install_create_shortcut_tabbed_SiteC🌑 navigate_browser_SiteC🌑 check_launch_icon_not_shown🌑 -install_policy_app_tabbed_shortcut_SiteC🌓 navigate_browser_SiteC🌕 check_launch_icon_not_shown🌕 -install_policy_app_tabbed_no_shortcut_SiteC🌑 navigate_browser_SiteC🌑 check_launch_icon_not_shown🌑 -install_create_shortcut_windowed_SiteA🌑 check_app_in_list_windowed_SiteA🌑 -install_omnibox_icon_SiteA🌕 check_app_in_list_windowed_SiteA🌑 -install_policy_app_windowed_no_shortcut_SiteA🌑 check_app_in_list_windowed_SiteA🌑 -install_policy_app_windowed_shortcut_SiteA🌓 check_app_in_list_windowed_SiteA🌑 -install_menu_option_SiteA🌓 check_app_in_list_windowed_SiteA🌑 -install_create_shortcut_windowed_SiteA🌑 navigate_browser_SiteA🌑 check_create_shortcut_not_shown🌑 -install_omnibox_icon_SiteA🌕 navigate_browser_SiteA🌕 check_create_shortcut_not_shown🌑 -install_policy_app_windowed_no_shortcut_SiteA🌑 navigate_browser_SiteA🌑 check_create_shortcut_not_shown🌑 -install_policy_app_windowed_shortcut_SiteA🌓 navigate_browser_SiteA🌕 check_create_shortcut_not_shown🌑 -install_menu_option_SiteA🌓 navigate_browser_SiteA🌕 check_create_shortcut_not_shown🌑 -install_create_shortcut_windowed_SiteA🌑 navigate_browser_SiteA🌑 check_install_icon_not_shown🌑 -install_omnibox_icon_SiteA🌕 navigate_browser_SiteA🌕 check_install_icon_not_shown🌕 -install_policy_app_windowed_no_shortcut_SiteA🌑 navigate_browser_SiteA🌑 check_install_icon_not_shown🌑 -install_policy_app_windowed_shortcut_SiteA🌓 navigate_browser_SiteA🌕 check_install_icon_not_shown🌕 -install_menu_option_SiteA🌓 navigate_browser_SiteA🌕 check_install_icon_not_shown🌕 -install_create_shortcut_windowed_SiteA🌑 navigate_browser_SiteA🌑 check_launch_icon_shown🌑 -install_omnibox_icon_SiteA🌕 navigate_browser_SiteA🌕 check_launch_icon_shown🌕 -install_policy_app_windowed_no_shortcut_SiteA🌑 navigate_browser_SiteA🌑 check_launch_icon_shown🌑 -install_policy_app_windowed_shortcut_SiteA🌓 navigate_browser_SiteA🌕 check_launch_icon_shown🌕 -install_menu_option_SiteA🌓 navigate_browser_SiteA🌕 check_launch_icon_shown🌕 -install_create_shortcut_windowed_SiteB🌑 navigate_browser_SiteB🌑 check_launch_icon_shown🌑 -install_omnibox_icon_SiteB🌕 navigate_browser_SiteB🌕 check_launch_icon_shown🌕 -install_policy_app_windowed_no_shortcut_SiteB🌑 navigate_browser_SiteB🌑 check_launch_icon_shown🌑 -install_policy_app_windowed_shortcut_SiteB🌓 navigate_browser_SiteB🌕 check_launch_icon_shown🌕 -install_menu_option_SiteB🌓 navigate_browser_SiteB🌕 check_launch_icon_shown🌕 -install_create_shortcut_windowed_SiteB🌑 check_platform_shortcut_right_click_menu_has_actions_SiteB🌑 -install_omnibox_icon_SiteB🌕 check_platform_shortcut_right_click_menu_has_actions_SiteB🌑 -install_menu_option_SiteB🌓 check_platform_shortcut_right_click_menu_has_actions_SiteB🌑 -install_create_shortcut_windowed_SiteC🌑 check_app_in_list_windowed_SiteC🌑 -install_policy_app_windowed_no_shortcut_SiteC🌑 check_app_in_list_windowed_SiteC🌑 -install_policy_app_windowed_shortcut_SiteC🌓 check_app_in_list_windowed_SiteC🌑 -install_create_shortcut_windowed_SiteC🌑 navigate_browser_SiteC🌑 check_create_shortcut_not_shown🌑 -install_policy_app_windowed_no_shortcut_SiteC🌑 navigate_browser_SiteC🌑 check_create_shortcut_not_shown🌑 -install_policy_app_windowed_shortcut_SiteC🌓 navigate_browser_SiteC🌕 check_create_shortcut_not_shown🌑 -install_create_shortcut_windowed_SiteC🌑 navigate_browser_SiteC🌑 check_install_icon_not_shown🌑 -install_policy_app_windowed_no_shortcut_SiteC🌑 navigate_browser_SiteC🌑 check_install_icon_not_shown🌑 -install_policy_app_windowed_shortcut_SiteC🌓 navigate_browser_SiteC🌕 check_install_icon_not_shown🌕 -install_create_shortcut_windowed_SiteC🌑 navigate_browser_SiteC🌑 check_launch_icon_shown🌑 -install_policy_app_windowed_no_shortcut_SiteC🌑 navigate_browser_SiteC🌑 check_launch_icon_shown🌑 -install_policy_app_windowed_shortcut_SiteC🌓 navigate_browser_SiteC🌕 check_launch_icon_shown🌕 -install_policy_app_windowed_shortcut_SiteA🌓 check_platform_shortcut_exists_SiteA🌑 -install_policy_app_windowed_shortcut_SiteA🌓 check_platform_shortcut_exists_SiteC🌑 -install_create_shortcut_tabbed_SiteA🌑 install_policy_app_windowed_no_shortcut_SiteA🌑 launch_from_menu_option_SiteA🌑 check_tab_created🌑 -install_create_shortcut_tabbed_SiteA🌑 install_policy_app_windowed_no_shortcut_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 -install_create_shortcut_tabbed_SiteA🌑 install_policy_app_windowed_no_shortcut_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 -install_create_shortcut_tabbed_SiteA🌑 install_policy_app_windowed_no_shortcut_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 -install_create_shortcut_tabbed_SiteA🌑 install_policy_app_windowed_shortcut_SiteA🌑 launch_from_menu_option_SiteA🌑 check_tab_created🌑 -install_create_shortcut_tabbed_SiteA🌑 install_policy_app_windowed_shortcut_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 -install_create_shortcut_tabbed_SiteA🌑 install_policy_app_windowed_shortcut_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 -install_create_shortcut_tabbed_SiteA🌑 install_policy_app_windowed_shortcut_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 -install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 launch_from_menu_option_SiteA🌑 check_tab_created🌑 -install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 -install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 -install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 -install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteA🌑 launch_from_menu_option_SiteA🌑 check_tab_created🌑 -install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 -install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 -install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 -install_create_shortcut_windowed_SiteA🌑 install_policy_app_tabbed_shortcut_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_created🌑 -install_create_shortcut_windowed_SiteA🌑 install_policy_app_tabbed_shortcut_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_created🌑 -install_create_shortcut_windowed_SiteA🌑 install_policy_app_tabbed_shortcut_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 -install_create_shortcut_windowed_SiteA🌑 install_policy_app_tabbed_shortcut_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 -install_create_shortcut_windowed_SiteA🌑 install_policy_app_tabbed_no_shortcut_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_created🌑 -install_create_shortcut_windowed_SiteA🌑 install_policy_app_tabbed_no_shortcut_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_created🌑 -install_create_shortcut_windowed_SiteA🌑 install_policy_app_tabbed_no_shortcut_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 -install_create_shortcut_windowed_SiteA🌑 install_policy_app_tabbed_no_shortcut_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 -install_omnibox_icon_SiteA🌕 install_policy_app_tabbed_shortcut_SiteA🌓 launch_from_menu_option_SiteA🌑 check_window_created🌑 -install_omnibox_icon_SiteA🌕 install_policy_app_tabbed_shortcut_SiteA🌓 launch_from_launch_icon_SiteA🌑 check_window_created🌑 -install_omnibox_icon_SiteA🌕 install_policy_app_tabbed_shortcut_SiteA🌓 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 -install_omnibox_icon_SiteA🌕 install_policy_app_tabbed_shortcut_SiteA🌓 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 -install_omnibox_icon_SiteA🌕 install_policy_app_tabbed_no_shortcut_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_created🌑 -install_omnibox_icon_SiteA🌕 install_policy_app_tabbed_no_shortcut_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_created🌑 -install_omnibox_icon_SiteA🌕 install_policy_app_tabbed_no_shortcut_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 -install_omnibox_icon_SiteA🌕 install_policy_app_tabbed_no_shortcut_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 -install_menu_option_SiteA🌓 install_policy_app_tabbed_shortcut_SiteA🌓 launch_from_menu_option_SiteA🌑 check_window_created🌑 -install_menu_option_SiteA🌓 install_policy_app_tabbed_shortcut_SiteA🌓 launch_from_launch_icon_SiteA🌑 check_window_created🌑 -install_menu_option_SiteA🌓 install_policy_app_tabbed_shortcut_SiteA🌓 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 -install_menu_option_SiteA🌓 install_policy_app_tabbed_shortcut_SiteA🌓 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 -install_menu_option_SiteA🌓 install_policy_app_tabbed_no_shortcut_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_created🌑 -install_menu_option_SiteA🌓 install_policy_app_tabbed_no_shortcut_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_created🌑 -install_menu_option_SiteA🌓 install_policy_app_tabbed_no_shortcut_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 -install_menu_option_SiteA🌓 install_policy_app_tabbed_no_shortcut_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 -install_create_shortcut_windowed_SiteA🌑 close_pwa🌑 manifest_update_colors_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_color_correct🌑 -install_create_shortcut_windowed_SiteA🌑 close_pwa🌑 manifest_update_colors_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_color_correct🌑 -install_create_shortcut_windowed_SiteA🌑 close_pwa🌑 manifest_update_colors_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_color_correct🌑 -install_create_shortcut_windowed_SiteA🌑 close_pwa🌑 manifest_update_colors_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_color_correct🌑 -install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_colors_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_color_correct🌑 -install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_colors_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_color_correct🌑 -install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_colors_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_color_correct🌑 -install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_colors_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_color_correct🌑 -install_menu_option_SiteA🌓 close_pwa🌕 manifest_update_colors_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_color_correct🌑 -install_menu_option_SiteA🌓 close_pwa🌕 manifest_update_colors_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_color_correct🌑 -install_menu_option_SiteA🌓 close_pwa🌕 manifest_update_colors_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_color_correct🌑 -install_menu_option_SiteA🌓 close_pwa🌕 manifest_update_colors_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_color_correct🌑 -install_create_shortcut_windowed_SiteA🌑 close_pwa🌑 manifest_update_display_browser_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_display_standalone🌑 -install_create_shortcut_windowed_SiteA🌑 close_pwa🌑 manifest_update_display_browser_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_display_standalone🌑 -install_create_shortcut_windowed_SiteA🌑 close_pwa🌑 manifest_update_display_browser_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_display_standalone🌑 -install_create_shortcut_windowed_SiteA🌑 close_pwa🌑 manifest_update_display_browser_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_display_standalone🌑 -install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_display_standalone🌑 -install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_display_standalone🌑 -install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_display_standalone🌑 -install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_display_standalone🌑 -install_menu_option_SiteA🌓 close_pwa🌕 manifest_update_display_browser_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_display_standalone🌑 -install_menu_option_SiteA🌓 close_pwa🌕 manifest_update_display_browser_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_display_standalone🌑 -install_menu_option_SiteA🌓 close_pwa🌕 manifest_update_display_browser_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_display_standalone🌑 -install_menu_option_SiteA🌓 close_pwa🌕 manifest_update_display_browser_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_display_standalone🌑 -install_create_shortcut_windowed_SiteA🌑 close_pwa🌑 manifest_update_display_minimal_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_display_minimal🌑 -install_create_shortcut_windowed_SiteA🌑 close_pwa🌑 manifest_update_display_minimal_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_display_minimal🌑 -install_create_shortcut_windowed_SiteA🌑 close_pwa🌑 manifest_update_display_minimal_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_display_minimal🌑 -install_create_shortcut_windowed_SiteA🌑 close_pwa🌑 manifest_update_display_minimal_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_display_minimal🌑 -install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_display_minimal_SiteA🌕 launch_from_menu_option_SiteA🌑 check_window_display_minimal🌑 -install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_display_minimal_SiteA🌕 launch_from_launch_icon_SiteA🌑 check_window_display_minimal🌑 -install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_display_minimal_SiteA🌕 launch_from_chrome_apps_SiteA🌑 check_window_display_minimal🌑 -install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_display_minimal_SiteA🌕 launch_from_platform_shortcut_SiteA🌑 check_window_display_minimal🌑 -install_menu_option_SiteA🌓 close_pwa🌕 manifest_update_display_minimal_SiteA🌕 launch_from_menu_option_SiteA🌑 check_window_display_minimal🌑 -install_menu_option_SiteA🌓 close_pwa🌕 manifest_update_display_minimal_SiteA🌕 launch_from_launch_icon_SiteA🌑 check_window_display_minimal🌑 -install_menu_option_SiteA🌓 close_pwa🌕 manifest_update_display_minimal_SiteA🌕 launch_from_chrome_apps_SiteA🌑 check_window_display_minimal🌑 -install_menu_option_SiteA🌓 close_pwa🌕 manifest_update_display_minimal_SiteA🌕 launch_from_platform_shortcut_SiteA🌑 check_window_display_minimal🌑 -install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 launch_from_menu_option_SiteA🌑 check_tab_created🌑 -install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 -install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 -install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 -install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 launch_from_menu_option_SiteA🌑 check_tab_created🌑 -install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 -install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 -install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 -install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 launch_from_menu_option_SiteA🌑 check_tab_created🌑 -install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 -install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 -install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 -install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_created🌑 -install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_created🌑 -install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 -install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 -install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 install_locally_SiteA🌓 launch_from_menu_option_SiteA🌑 check_window_created🌑 -install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 install_locally_SiteA🌓 launch_from_launch_icon_SiteA🌑 check_window_created🌑 -install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 install_locally_SiteA🌓 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 -install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 install_locally_SiteA🌓 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 -install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 install_locally_SiteA🌓 launch_from_menu_option_SiteA🌑 check_window_created🌑 -install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 install_locally_SiteA🌓 launch_from_launch_icon_SiteA🌑 check_window_created🌑 -install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 install_locally_SiteA🌓 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 -install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 install_locally_SiteA🌓 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 -install_create_shortcut_tabbed_SiteA🌑 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_menu_option_SiteA🌑 check_tab_created🌑 -install_create_shortcut_tabbed_SiteA🌑 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 -install_create_shortcut_tabbed_SiteA🌑 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 -install_create_shortcut_tabbed_SiteA🌑 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_menu_option_SiteA🌑 check_tab_created🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_menu_option_SiteA🌑 check_tab_created🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 -install_create_shortcut_tabbed_SiteA🌑 set_open_in_window_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_created🌑 -install_create_shortcut_tabbed_SiteA🌑 set_open_in_window_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_created🌑 -install_create_shortcut_tabbed_SiteA🌑 set_open_in_window_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 -install_create_shortcut_tabbed_SiteA🌑 set_open_in_window_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 set_open_in_window_SiteA🌓 launch_from_menu_option_SiteA🌑 check_window_created🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 set_open_in_window_SiteA🌓 launch_from_launch_icon_SiteA🌑 check_window_created🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 set_open_in_window_SiteA🌓 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 set_open_in_window_SiteA🌓 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 set_open_in_window_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_created🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 set_open_in_window_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_created🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 set_open_in_window_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 set_open_in_window_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 -install_create_shortcut_windowed_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_created🌑 -install_create_shortcut_windowed_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_created🌑 -install_create_shortcut_windowed_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 -install_create_shortcut_windowed_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 -install_omnibox_icon_SiteA🌕 launch_from_menu_option_SiteA🌑 check_window_created🌑 -install_omnibox_icon_SiteA🌕 launch_from_launch_icon_SiteA🌑 check_window_created🌑 -install_omnibox_icon_SiteA🌕 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 -install_omnibox_icon_SiteA🌕 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 -install_policy_app_windowed_no_shortcut_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_created🌑 -install_policy_app_windowed_no_shortcut_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_created🌑 -install_policy_app_windowed_no_shortcut_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 -install_policy_app_windowed_no_shortcut_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 -install_policy_app_windowed_shortcut_SiteA🌓 launch_from_menu_option_SiteA🌑 check_window_created🌑 -install_policy_app_windowed_shortcut_SiteA🌓 launch_from_launch_icon_SiteA🌑 check_window_created🌑 -install_policy_app_windowed_shortcut_SiteA🌓 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 -install_policy_app_windowed_shortcut_SiteA🌓 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 -install_menu_option_SiteA🌓 launch_from_menu_option_SiteA🌑 check_window_created🌑 -install_menu_option_SiteA🌓 launch_from_launch_icon_SiteA🌑 check_window_created🌑 -install_menu_option_SiteA🌓 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 -install_menu_option_SiteA🌓 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 -install_create_shortcut_windowed_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_display_standalone🌑 -install_create_shortcut_windowed_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_display_standalone🌑 -install_create_shortcut_windowed_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_display_standalone🌑 -install_create_shortcut_windowed_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_display_standalone🌑 -install_omnibox_icon_SiteA🌕 launch_from_menu_option_SiteA🌑 check_window_display_standalone🌑 -install_omnibox_icon_SiteA🌕 launch_from_launch_icon_SiteA🌑 check_window_display_standalone🌑 -install_omnibox_icon_SiteA🌕 launch_from_chrome_apps_SiteA🌑 check_window_display_standalone🌑 -install_omnibox_icon_SiteA🌕 launch_from_platform_shortcut_SiteA🌑 check_window_display_standalone🌑 -install_policy_app_windowed_no_shortcut_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_display_standalone🌑 -install_policy_app_windowed_no_shortcut_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_display_standalone🌑 -install_policy_app_windowed_no_shortcut_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_display_standalone🌑 -install_policy_app_windowed_no_shortcut_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_display_standalone🌑 -install_policy_app_windowed_shortcut_SiteA🌓 launch_from_menu_option_SiteA🌑 check_window_display_standalone🌑 -install_policy_app_windowed_shortcut_SiteA🌓 launch_from_launch_icon_SiteA🌑 check_window_display_standalone🌑 -install_policy_app_windowed_shortcut_SiteA🌓 launch_from_chrome_apps_SiteA🌑 check_window_display_standalone🌑 -install_policy_app_windowed_shortcut_SiteA🌓 launch_from_platform_shortcut_SiteA🌑 check_window_display_standalone🌑 -install_menu_option_SiteA🌓 launch_from_menu_option_SiteA🌑 check_window_display_standalone🌑 -install_menu_option_SiteA🌓 launch_from_launch_icon_SiteA🌑 check_window_display_standalone🌑 -install_menu_option_SiteA🌓 launch_from_chrome_apps_SiteA🌑 check_window_display_standalone🌑 -install_menu_option_SiteA🌓 launch_from_platform_shortcut_SiteA🌑 check_window_display_standalone🌑 -install_create_shortcut_windowed_SiteA🌑 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_created🌑 -install_create_shortcut_windowed_SiteA🌑 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_created🌑 -install_create_shortcut_windowed_SiteA🌑 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 -install_create_shortcut_windowed_SiteA🌑 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 -install_omnibox_icon_SiteA🌕 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_created🌑 -install_omnibox_icon_SiteA🌕 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_created🌑 -install_omnibox_icon_SiteA🌕 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 -install_omnibox_icon_SiteA🌕 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 -install_policy_app_windowed_no_shortcut_SiteA🌑 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_created🌑 -install_policy_app_windowed_no_shortcut_SiteA🌑 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_created🌑 -install_policy_app_windowed_no_shortcut_SiteA🌑 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 -install_policy_app_windowed_no_shortcut_SiteA🌑 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 -install_policy_app_windowed_shortcut_SiteA🌓 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_created🌑 -install_policy_app_windowed_shortcut_SiteA🌓 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_created🌑 -install_policy_app_windowed_shortcut_SiteA🌓 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 -install_policy_app_windowed_shortcut_SiteA🌓 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 -install_menu_option_SiteA🌓 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_created🌑 -install_menu_option_SiteA🌓 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_created🌑 -install_menu_option_SiteA🌓 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 -install_menu_option_SiteA🌓 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 -install_create_shortcut_windowed_SiteA🌑 set_open_in_tab_SiteA🌑 launch_from_menu_option_SiteA🌑 check_tab_created🌑 -install_create_shortcut_windowed_SiteA🌑 set_open_in_tab_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 -install_create_shortcut_windowed_SiteA🌑 set_open_in_tab_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 -install_create_shortcut_windowed_SiteA🌑 set_open_in_tab_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 -install_omnibox_icon_SiteA🌕 set_open_in_tab_SiteA🌓 launch_from_menu_option_SiteA🌑 check_tab_created🌑 -install_omnibox_icon_SiteA🌕 set_open_in_tab_SiteA🌓 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 -install_omnibox_icon_SiteA🌕 set_open_in_tab_SiteA🌓 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 -install_omnibox_icon_SiteA🌕 set_open_in_tab_SiteA🌓 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 -install_policy_app_windowed_no_shortcut_SiteA🌑 set_open_in_tab_SiteA🌑 launch_from_menu_option_SiteA🌑 check_tab_created🌑 -install_policy_app_windowed_no_shortcut_SiteA🌑 set_open_in_tab_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 -install_policy_app_windowed_no_shortcut_SiteA🌑 set_open_in_tab_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 -install_policy_app_windowed_no_shortcut_SiteA🌑 set_open_in_tab_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 -install_policy_app_windowed_shortcut_SiteA🌓 set_open_in_tab_SiteA🌓 launch_from_menu_option_SiteA🌑 check_tab_created🌑 -install_policy_app_windowed_shortcut_SiteA🌓 set_open_in_tab_SiteA🌓 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 -install_policy_app_windowed_shortcut_SiteA🌓 set_open_in_tab_SiteA🌓 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 -install_policy_app_windowed_shortcut_SiteA🌓 set_open_in_tab_SiteA🌓 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 -install_menu_option_SiteA🌓 set_open_in_tab_SiteA🌓 launch_from_menu_option_SiteA🌑 check_tab_created🌑 -install_menu_option_SiteA🌓 set_open_in_tab_SiteA🌓 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 -install_menu_option_SiteA🌓 set_open_in_tab_SiteA🌓 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 -install_menu_option_SiteA🌓 set_open_in_tab_SiteA🌓 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 -install_create_shortcut_windowed_SiteB🌑 launch_from_menu_option_SiteB🌑 check_window_display_minimal🌑 -install_create_shortcut_windowed_SiteB🌑 launch_from_launch_icon_SiteB🌑 check_window_display_minimal🌑 -install_create_shortcut_windowed_SiteB🌑 launch_from_chrome_apps_SiteB🌑 check_window_display_minimal🌑 -install_create_shortcut_windowed_SiteB🌑 launch_from_platform_shortcut_SiteB🌑 check_window_display_minimal🌑 -install_omnibox_icon_SiteB🌕 launch_from_menu_option_SiteB🌑 check_window_display_minimal🌑 -install_omnibox_icon_SiteB🌕 launch_from_launch_icon_SiteB🌑 check_window_display_minimal🌑 -install_omnibox_icon_SiteB🌕 launch_from_chrome_apps_SiteB🌑 check_window_display_minimal🌑 -install_omnibox_icon_SiteB🌕 launch_from_platform_shortcut_SiteB🌑 check_window_display_minimal🌑 -install_policy_app_windowed_no_shortcut_SiteB🌑 launch_from_menu_option_SiteB🌑 check_window_display_minimal🌑 -install_policy_app_windowed_no_shortcut_SiteB🌑 launch_from_launch_icon_SiteB🌑 check_window_display_minimal🌑 -install_policy_app_windowed_no_shortcut_SiteB🌑 launch_from_chrome_apps_SiteB🌑 check_window_display_minimal🌑 -install_policy_app_windowed_no_shortcut_SiteB🌑 launch_from_platform_shortcut_SiteB🌑 check_window_display_minimal🌑 -install_policy_app_windowed_shortcut_SiteB🌓 launch_from_menu_option_SiteB🌑 check_window_display_minimal🌑 -install_policy_app_windowed_shortcut_SiteB🌓 launch_from_launch_icon_SiteB🌑 check_window_display_minimal🌑 -install_policy_app_windowed_shortcut_SiteB🌓 launch_from_chrome_apps_SiteB🌑 check_window_display_minimal🌑 -install_policy_app_windowed_shortcut_SiteB🌓 launch_from_platform_shortcut_SiteB🌑 check_window_display_minimal🌑 -install_menu_option_SiteB🌓 launch_from_menu_option_SiteB🌑 check_window_display_minimal🌑 -install_menu_option_SiteB🌓 launch_from_launch_icon_SiteB🌑 check_window_display_minimal🌑 -install_menu_option_SiteB🌓 launch_from_chrome_apps_SiteB🌑 check_window_display_minimal🌑 -install_menu_option_SiteB🌓 launch_from_platform_shortcut_SiteB🌑 check_window_display_minimal🌑 -install_create_shortcut_tabbed_SiteC🌑 launch_from_menu_option_SiteC🌑 check_tab_created🌑 -install_create_shortcut_tabbed_SiteC🌑 launch_from_launch_icon_SiteC🌑 check_tab_created🌑 -install_create_shortcut_tabbed_SiteC🌑 launch_from_chrome_apps_SiteC🌑 check_tab_created🌑 -install_create_shortcut_tabbed_SiteC🌑 launch_from_platform_shortcut_SiteC🌑 check_tab_created🌑 -install_policy_app_tabbed_shortcut_SiteC🌓 launch_from_menu_option_SiteC🌑 check_tab_created🌑 -install_policy_app_tabbed_shortcut_SiteC🌓 launch_from_launch_icon_SiteC🌑 check_tab_created🌑 -install_policy_app_tabbed_shortcut_SiteC🌓 launch_from_chrome_apps_SiteC🌑 check_tab_created🌑 -install_policy_app_tabbed_shortcut_SiteC🌓 launch_from_platform_shortcut_SiteC🌑 check_tab_created🌑 -install_policy_app_tabbed_no_shortcut_SiteC🌑 launch_from_menu_option_SiteC🌑 check_tab_created🌑 -install_policy_app_tabbed_no_shortcut_SiteC🌑 launch_from_launch_icon_SiteC🌑 check_tab_created🌑 -install_policy_app_tabbed_no_shortcut_SiteC🌑 launch_from_chrome_apps_SiteC🌑 check_tab_created🌑 -install_policy_app_tabbed_no_shortcut_SiteC🌑 launch_from_platform_shortcut_SiteC🌑 check_tab_created🌑 -install_create_shortcut_windowed_SiteC🌑 launch_from_menu_option_SiteC🌑 check_window_created🌑 -install_create_shortcut_windowed_SiteC🌑 launch_from_launch_icon_SiteC🌑 check_window_created🌑 -install_create_shortcut_windowed_SiteC🌑 launch_from_chrome_apps_SiteC🌑 check_window_created🌑 -install_create_shortcut_windowed_SiteC🌑 launch_from_platform_shortcut_SiteC🌑 check_window_created🌑 -install_policy_app_windowed_no_shortcut_SiteC🌑 launch_from_menu_option_SiteC🌑 check_window_created🌑 -install_policy_app_windowed_no_shortcut_SiteC🌑 launch_from_launch_icon_SiteC🌑 check_window_created🌑 -install_policy_app_windowed_no_shortcut_SiteC🌑 launch_from_chrome_apps_SiteC🌑 check_window_created🌑 -install_policy_app_windowed_no_shortcut_SiteC🌑 launch_from_platform_shortcut_SiteC🌑 check_window_created🌑 -install_policy_app_windowed_shortcut_SiteC🌓 launch_from_menu_option_SiteC🌑 check_window_created🌑 -install_policy_app_windowed_shortcut_SiteC🌓 launch_from_launch_icon_SiteC🌑 check_window_created🌑 -install_policy_app_windowed_shortcut_SiteC🌓 launch_from_chrome_apps_SiteC🌑 check_window_created🌑 -install_policy_app_windowed_shortcut_SiteC🌓 launch_from_platform_shortcut_SiteC🌑 check_window_created🌑 -install_create_shortcut_windowed_SiteA🌑 close_pwa🌑 manifest_update_icons_SiteA🌑 check_app_in_list_icon_correct_SiteA🌑 -install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_icons_SiteA🌑 check_app_in_list_icon_correct_SiteA🌑 -install_menu_option_SiteA🌓 close_pwa🌕 manifest_update_icons_SiteA🌑 check_app_in_list_icon_correct_SiteA🌑 -install_create_shortcut_windowed_SiteA🌑 close_pwa🌑 manifest_update_icons_SiteA🌑 check_platform_shortcut_icon_correct_SiteA🌑 -install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_icons_SiteA🌑 check_platform_shortcut_icon_correct_SiteA🌑 -install_menu_option_SiteA🌓 close_pwa🌕 manifest_update_icons_SiteA🌑 check_platform_shortcut_icon_correct_SiteA🌑 -install_create_shortcut_windowed_SiteAFoo🌑 manifest_update_scope_site_a_foo_to_SiteA🌑 close_pwa🌑 launch_from_platform_shortcut_SiteAFoo🌑 close_pwa🌑 navigate_browser_SiteA🌑 check_install_icon_not_shown🌑 -install_omnibox_icon_SiteAFoo🌕 manifest_update_scope_site_a_foo_to_SiteA🌑 close_pwa🌑 launch_from_platform_shortcut_SiteAFoo🌑 close_pwa🌑 navigate_browser_SiteA🌑 check_install_icon_not_shown🌑 -install_menu_option_SiteAFoo🌓 manifest_update_scope_site_a_foo_to_SiteA🌑 close_pwa🌑 launch_from_platform_shortcut_SiteAFoo🌑 close_pwa🌑 navigate_browser_SiteA🌑 check_install_icon_not_shown🌑 -install_create_shortcut_windowed_SiteAFoo🌑 manifest_update_scope_site_a_foo_to_SiteA🌑 close_pwa🌑 launch_from_platform_shortcut_SiteAFoo🌑 close_pwa🌑 navigate_browser_SiteA🌑 check_launch_icon_shown🌑 -install_omnibox_icon_SiteAFoo🌕 manifest_update_scope_site_a_foo_to_SiteA🌑 close_pwa🌑 launch_from_platform_shortcut_SiteAFoo🌑 close_pwa🌑 navigate_browser_SiteA🌑 check_launch_icon_shown🌑 -install_menu_option_SiteAFoo🌓 manifest_update_scope_site_a_foo_to_SiteA🌑 close_pwa🌑 launch_from_platform_shortcut_SiteAFoo🌑 close_pwa🌑 navigate_browser_SiteA🌑 check_launch_icon_shown🌑 -install_create_shortcut_windowed_SiteAFoo🌑 close_pwa🌑 manifest_update_scope_site_a_foo_to_SiteA🌑 navigate_browser_SiteABar🌑 check_install_icon_not_shown🌑 -install_omnibox_icon_SiteAFoo🌕 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteA🌑 navigate_browser_SiteABar🌑 check_install_icon_not_shown🌑 -install_menu_option_SiteAFoo🌓 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteA🌑 navigate_browser_SiteABar🌑 check_install_icon_not_shown🌑 -install_create_shortcut_windowed_SiteAFoo🌑 close_pwa🌑 manifest_update_scope_site_a_foo_to_SiteA🌑 navigate_browser_SiteABar🌑 check_launch_icon_shown🌑 -install_omnibox_icon_SiteAFoo🌕 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteA🌑 navigate_browser_SiteABar🌑 check_launch_icon_shown🌑 -install_menu_option_SiteAFoo🌓 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteA🌑 navigate_browser_SiteABar🌑 check_launch_icon_shown🌑 -install_create_shortcut_windowed_SiteAFoo🌑 navigate_browser_SiteABar🌑 check_install_icon_shown🌑 -install_omnibox_icon_SiteAFoo🌕 navigate_browser_SiteABar🌕 check_install_icon_shown🌕 -install_policy_app_windowed_no_shortcut_SiteAFoo🌑 navigate_browser_SiteABar🌑 check_install_icon_shown🌑 -install_policy_app_windowed_shortcut_SiteAFoo🌓 navigate_browser_SiteABar🌕 check_install_icon_shown🌕 -install_menu_option_SiteAFoo🌓 navigate_browser_SiteABar🌕 check_install_icon_shown🌕 -install_create_shortcut_windowed_SiteAFoo🌑 navigate_browser_SiteABar🌑 check_launch_icon_not_shown🌑 -install_omnibox_icon_SiteAFoo🌕 navigate_browser_SiteABar🌕 check_launch_icon_not_shown🌕 -install_policy_app_windowed_no_shortcut_SiteAFoo🌑 navigate_browser_SiteABar🌑 check_launch_icon_not_shown🌑 -install_policy_app_windowed_shortcut_SiteAFoo🌓 navigate_browser_SiteABar🌕 check_launch_icon_not_shown🌕 -install_menu_option_SiteAFoo🌓 navigate_browser_SiteABar🌕 check_launch_icon_not_shown🌕 -install_create_shortcut_windowed_SiteAFoo🌑 close_pwa🌑 manifest_update_scope_site_a_foo_to_SiteA🌑 navigate_browser_SiteAFoo🌑 check_install_icon_not_shown🌑 -install_omnibox_icon_SiteAFoo🌕 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteA🌑 navigate_browser_SiteAFoo🌑 check_install_icon_not_shown🌑 -install_menu_option_SiteAFoo🌓 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteA🌑 navigate_browser_SiteAFoo🌑 check_install_icon_not_shown🌑 -install_create_shortcut_windowed_SiteAFoo🌑 close_pwa🌑 manifest_update_scope_site_a_foo_to_SiteA🌑 navigate_browser_SiteAFoo🌑 check_launch_icon_shown🌑 -install_omnibox_icon_SiteAFoo🌕 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteA🌑 navigate_browser_SiteAFoo🌑 check_launch_icon_shown🌑 -install_menu_option_SiteAFoo🌓 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteA🌑 navigate_browser_SiteAFoo🌑 check_launch_icon_shown🌑 -install_create_shortcut_windowed_SiteA🌑 navigate_browser_SiteAFoo🌑 check_install_icon_not_shown🌑 -install_omnibox_icon_SiteA🌕 navigate_browser_SiteAFoo🌕 check_install_icon_not_shown🌕 -install_policy_app_windowed_no_shortcut_SiteA🌑 navigate_browser_SiteAFoo🌑 check_install_icon_not_shown🌑 -install_policy_app_windowed_shortcut_SiteA🌓 navigate_browser_SiteAFoo🌕 check_install_icon_not_shown🌕 -install_menu_option_SiteA🌓 navigate_browser_SiteAFoo🌕 check_install_icon_not_shown🌕 -install_create_shortcut_windowed_SiteA🌑 navigate_browser_SiteAFoo🌑 check_launch_icon_shown🌑 -install_omnibox_icon_SiteA🌕 navigate_browser_SiteAFoo🌕 check_launch_icon_shown🌕 -install_policy_app_windowed_no_shortcut_SiteA🌑 navigate_browser_SiteAFoo🌑 check_launch_icon_shown🌑 -install_policy_app_windowed_shortcut_SiteA🌓 navigate_browser_SiteAFoo🌕 check_launch_icon_shown🌕 -install_menu_option_SiteA🌓 navigate_browser_SiteAFoo🌕 check_launch_icon_shown🌕 -navigate_browser_SiteAFoo🌕 check_install_icon_shown🌕 -switch_incognito_profile🌑 navigate_browser_SiteA🌑 check_create_shortcut_not_shown🌑 -navigate_browser_SiteA🌕 check_app_not_in_list_SiteA🌕 -navigate_browser_SiteA🌕 check_create_shortcut_shown🌑 -navigate_browser_SiteA🌕 check_platform_shortcut_not_exists_SiteA🌑 -install_create_shortcut_windowed_SiteA🌑 navigate_browser_SiteB🌑 check_install_icon_shown🌑 -install_omnibox_icon_SiteA🌕 navigate_browser_SiteB🌕 check_install_icon_shown🌕 -install_menu_option_SiteA🌓 navigate_browser_SiteB🌕 check_install_icon_shown🌕 -install_create_shortcut_windowed_SiteA🌑 navigate_browser_SiteB🌑 check_launch_icon_not_shown🌑 -install_omnibox_icon_SiteA🌕 navigate_browser_SiteB🌕 check_launch_icon_not_shown🌕 -install_menu_option_SiteA🌓 navigate_browser_SiteB🌕 check_launch_icon_not_shown🌕 -switch_incognito_profile🌑 navigate_browser_SiteC🌑 check_create_shortcut_not_shown🌑 -navigate_browser_SiteC🌕 check_app_not_in_list_SiteA🌕 -navigate_browser_SiteC🌕 check_create_shortcut_shown🌑 -navigate_browser_SiteC🌕 check_install_icon_not_shown🌕 -navigate_browser_SiteC🌕 check_platform_shortcut_not_exists_SiteA🌑 -navigate_crashed_url🌑 check_create_shortcut_not_shown🌑 -navigate_crashed_url🌑 check_install_icon_not_shown🌑 -navigate_notfound_url🌑 check_create_shortcut_not_shown🌑 -navigate_notfound_url🌑 check_install_icon_not_shown🌑 -install_create_shortcut_windowed_SiteAFoo🌑 close_pwa🌑 manifest_update_scope_site_a_foo_to_SiteA🌑 launch_from_menu_option_SiteAFoo🌑 navigate_pwa_site_a_foo_to_SiteABar🌑 check_no_toolbar🌑 -install_create_shortcut_windowed_SiteAFoo🌑 close_pwa🌑 manifest_update_scope_site_a_foo_to_SiteA🌑 launch_from_launch_icon_SiteAFoo🌑 navigate_pwa_site_a_foo_to_SiteABar🌑 check_no_toolbar🌑 -install_create_shortcut_windowed_SiteAFoo🌑 close_pwa🌑 manifest_update_scope_site_a_foo_to_SiteA🌑 launch_from_chrome_apps_SiteAFoo🌑 navigate_pwa_site_a_foo_to_SiteABar🌑 check_no_toolbar🌑 -install_create_shortcut_windowed_SiteAFoo🌑 close_pwa🌑 manifest_update_scope_site_a_foo_to_SiteA🌑 launch_from_platform_shortcut_SiteAFoo🌑 navigate_pwa_site_a_foo_to_SiteABar🌑 check_no_toolbar🌑 -install_omnibox_icon_SiteAFoo🌕 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteA🌑 launch_from_menu_option_SiteAFoo🌑 navigate_pwa_site_a_foo_to_SiteABar🌑 check_no_toolbar🌑 -install_omnibox_icon_SiteAFoo🌕 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteA🌑 launch_from_launch_icon_SiteAFoo🌑 navigate_pwa_site_a_foo_to_SiteABar🌑 check_no_toolbar🌑 -install_omnibox_icon_SiteAFoo🌕 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteA🌑 launch_from_chrome_apps_SiteAFoo🌑 navigate_pwa_site_a_foo_to_SiteABar🌑 check_no_toolbar🌑 -install_omnibox_icon_SiteAFoo🌕 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteA🌑 launch_from_platform_shortcut_SiteAFoo🌑 navigate_pwa_site_a_foo_to_SiteABar🌑 check_no_toolbar🌑 -install_menu_option_SiteAFoo🌓 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteA🌑 launch_from_menu_option_SiteAFoo🌑 navigate_pwa_site_a_foo_to_SiteABar🌑 check_no_toolbar🌑 -install_menu_option_SiteAFoo🌓 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteA🌑 launch_from_launch_icon_SiteAFoo🌑 navigate_pwa_site_a_foo_to_SiteABar🌑 check_no_toolbar🌑 -install_menu_option_SiteAFoo🌓 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteA🌑 launch_from_chrome_apps_SiteAFoo🌑 navigate_pwa_site_a_foo_to_SiteABar🌑 check_no_toolbar🌑 -install_menu_option_SiteAFoo🌓 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteA🌑 launch_from_platform_shortcut_SiteAFoo🌑 navigate_pwa_site_a_foo_to_SiteABar🌑 check_no_toolbar🌑 -install_create_shortcut_windowed_SiteA🌑 navigate_pwa_site_a_to_SiteB🌑 check_toolbar🌑 -install_omnibox_icon_SiteA🌕 navigate_pwa_site_a_to_SiteB🌑 check_toolbar🌑 -install_menu_option_SiteA🌓 navigate_pwa_site_a_to_SiteB🌑 check_toolbar🌑 -install_create_shortcut_windowed_SiteA🌑 navigate_pwa_site_a_to_SiteB🌑 check_window_title_is_SiteA🌑 -install_omnibox_icon_SiteA🌕 navigate_pwa_site_a_to_SiteB🌑 check_window_title_is_SiteA🌑 -install_menu_option_SiteA🌓 navigate_pwa_site_a_to_SiteB🌑 check_window_title_is_SiteA🌑 -install_create_shortcut_windowed_SiteA🌑 open_in_chrome🌑 check_tab_created🌑 -install_omnibox_icon_SiteA🌕 open_in_chrome🌑 check_tab_created🌑 -install_menu_option_SiteA🌓 open_in_chrome🌑 check_tab_created🌑 -install_create_shortcut_windowed_SiteA🌑 navigate_pwa_site_a_to_SiteB🌑 open_in_chrome🌑 check_tab_created🌑 -install_omnibox_icon_SiteA🌕 navigate_pwa_site_a_to_SiteB🌑 open_in_chrome🌑 check_tab_created🌑 -install_menu_option_SiteA🌓 navigate_pwa_site_a_to_SiteB🌑 open_in_chrome🌑 check_tab_created🌑 -install_create_shortcut_tabbed_SiteA🌑 install_policy_app_windowed_no_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_app_in_list_tabbed_SiteA🌑 -install_create_shortcut_tabbed_SiteA🌑 install_policy_app_tabbed_no_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_app_in_list_tabbed_SiteA🌑 -install_create_shortcut_tabbed_SiteA🌑 install_policy_app_windowed_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_app_in_list_tabbed_SiteA🌑 -install_create_shortcut_tabbed_SiteA🌑 install_policy_app_tabbed_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_app_in_list_tabbed_SiteA🌑 -install_create_shortcut_tabbed_SiteA🌑 install_policy_app_windowed_no_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 -install_create_shortcut_tabbed_SiteA🌑 install_policy_app_tabbed_no_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 -install_create_shortcut_tabbed_SiteA🌑 install_policy_app_windowed_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 -install_create_shortcut_tabbed_SiteA🌑 install_policy_app_tabbed_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 -install_create_shortcut_windowed_SiteA🌑 install_policy_app_windowed_no_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_app_in_list_windowed_SiteA🌑 -install_create_shortcut_windowed_SiteA🌑 install_policy_app_tabbed_no_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_app_in_list_windowed_SiteA🌑 -install_create_shortcut_windowed_SiteA🌑 install_policy_app_windowed_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_app_in_list_windowed_SiteA🌑 -install_create_shortcut_windowed_SiteA🌑 install_policy_app_tabbed_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_app_in_list_windowed_SiteA🌑 -install_omnibox_icon_SiteA🌕 install_policy_app_windowed_no_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_app_in_list_windowed_SiteA🌑 -install_omnibox_icon_SiteA🌕 install_policy_app_tabbed_no_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_app_in_list_windowed_SiteA🌑 -install_omnibox_icon_SiteA🌕 install_policy_app_windowed_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_app_in_list_windowed_SiteA🌑 -install_omnibox_icon_SiteA🌕 install_policy_app_tabbed_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_app_in_list_windowed_SiteA🌑 -install_menu_option_SiteA🌓 install_policy_app_windowed_no_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_app_in_list_windowed_SiteA🌑 -install_menu_option_SiteA🌓 install_policy_app_tabbed_no_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_app_in_list_windowed_SiteA🌑 -install_menu_option_SiteA🌓 install_policy_app_windowed_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_app_in_list_windowed_SiteA🌑 -install_menu_option_SiteA🌓 install_policy_app_tabbed_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_app_in_list_windowed_SiteA🌑 -install_create_shortcut_windowed_SiteA🌑 install_policy_app_windowed_no_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 -install_create_shortcut_windowed_SiteA🌑 install_policy_app_tabbed_no_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 -install_create_shortcut_windowed_SiteA🌑 install_policy_app_windowed_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 -install_create_shortcut_windowed_SiteA🌑 install_policy_app_tabbed_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 -install_omnibox_icon_SiteA🌕 install_policy_app_windowed_no_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 -install_omnibox_icon_SiteA🌕 install_policy_app_tabbed_no_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 -install_omnibox_icon_SiteA🌕 install_policy_app_windowed_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_platform_shortcut_exists_SiteA🌑 -install_omnibox_icon_SiteA🌕 install_policy_app_tabbed_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_platform_shortcut_exists_SiteA🌑 -install_menu_option_SiteA🌓 install_policy_app_windowed_no_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 -install_menu_option_SiteA🌓 install_policy_app_tabbed_no_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 -install_menu_option_SiteA🌓 install_policy_app_windowed_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_platform_shortcut_exists_SiteA🌑 -install_menu_option_SiteA🌓 install_policy_app_tabbed_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_platform_shortcut_exists_SiteA🌑 -install_policy_app_windowed_no_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_app_not_in_list_SiteA🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_app_not_in_list_SiteA🌑 -install_policy_app_windowed_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_app_not_in_list_SiteA🌕 -install_policy_app_tabbed_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_app_not_in_list_SiteA🌕 -install_policy_app_tabbed_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 navigate_browser_SiteA🌕 check_install_icon_shown🌕 -install_policy_app_tabbed_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 navigate_browser_SiteA🌕 check_launch_icon_not_shown🌕 -install_policy_app_windowed_no_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_platform_shortcut_not_exists_SiteA🌑 check_app_not_in_list_SiteA🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_platform_shortcut_not_exists_SiteA🌑 check_app_not_in_list_SiteA🌑 -install_policy_app_windowed_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_platform_shortcut_not_exists_SiteA🌑 check_app_not_in_list_SiteA🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_platform_shortcut_not_exists_SiteA🌑 check_app_not_in_list_SiteA🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 install_create_shortcut_windowed_SiteA🌑 uninstall_policy_app_SiteA🌑 check_app_in_list_windowed_SiteA🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 install_omnibox_icon_SiteA🌕 uninstall_policy_app_SiteA🌕 check_app_in_list_windowed_SiteA🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 install_menu_option_SiteA🌓 uninstall_policy_app_SiteA🌕 check_app_in_list_windowed_SiteA🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 install_create_shortcut_windowed_SiteA🌑 uninstall_policy_app_SiteA🌑 check_app_in_list_windowed_SiteA🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 install_omnibox_icon_SiteA🌑 uninstall_policy_app_SiteA🌑 check_app_in_list_windowed_SiteA🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 install_menu_option_SiteA🌑 uninstall_policy_app_SiteA🌑 check_app_in_list_windowed_SiteA🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 install_create_shortcut_windowed_SiteA🌑 uninstall_policy_app_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 install_omnibox_icon_SiteA🌕 uninstall_policy_app_SiteA🌕 check_platform_shortcut_exists_SiteA🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 install_menu_option_SiteA🌓 uninstall_policy_app_SiteA🌕 check_platform_shortcut_exists_SiteA🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 install_create_shortcut_windowed_SiteA🌑 uninstall_policy_app_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 install_omnibox_icon_SiteA🌑 uninstall_policy_app_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌑 install_menu_option_SiteA🌑 uninstall_policy_app_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 -install_create_shortcut_windowed_SiteA🌑 set_app_badge_SiteA🌑 check_app_badge_has_value_SiteA🌑 -install_omnibox_icon_SiteA🌕 set_app_badge_SiteA🌑 check_app_badge_has_value_SiteA🌑 -install_menu_option_SiteA🌓 set_app_badge_SiteA🌑 check_app_badge_has_value_SiteA🌑 -navigate_browser_SiteA🌕 set_app_badge_SiteA🌑 check_platform_shortcut_not_exists_SiteA🌑 -install_create_shortcut_windowed_SiteA🌑 set_open_in_tab_SiteA🌑 check_app_in_list_tabbed_SiteA🌑 -install_omnibox_icon_SiteA🌕 set_open_in_tab_SiteA🌓 check_app_in_list_tabbed_SiteA🌑 -install_menu_option_SiteA🌓 set_open_in_tab_SiteA🌓 check_app_in_list_tabbed_SiteA🌑 -install_create_shortcut_windowed_SiteA🌑 set_open_in_tab_SiteA🌑 navigate_browser_SiteA🌑 check_install_icon_shown🌑 -install_omnibox_icon_SiteA🌕 set_open_in_tab_SiteA🌓 navigate_browser_SiteA🌕 check_install_icon_shown🌕 -install_menu_option_SiteA🌓 set_open_in_tab_SiteA🌓 navigate_browser_SiteA🌕 check_install_icon_shown🌕 -install_create_shortcut_tabbed_SiteA🌑 set_open_in_window_SiteA🌑 check_app_in_list_windowed_SiteA🌑 -install_create_shortcut_tabbed_SiteA🌑 set_open_in_window_SiteA🌑 navigate_browser_SiteA🌑 check_install_icon_not_shown🌑 -install_create_shortcut_tabbed_SiteA🌑 set_open_in_window_SiteA🌑 navigate_browser_SiteA🌑 check_launch_icon_shown🌑 -install_create_shortcut_windowed_SiteA🌑 switch_incognito_profile🌑 navigate_browser_SiteA🌑 check_launch_icon_not_shown🌑 -install_omnibox_icon_SiteA🌕 switch_incognito_profile🌑 navigate_browser_SiteA🌑 check_launch_icon_not_shown🌑 -install_menu_option_SiteA🌓 switch_incognito_profile🌑 navigate_browser_SiteA🌑 check_launch_icon_not_shown🌑 -switch_incognito_profile🌑 navigate_browser_SiteA🌑 check_install_icon_not_shown🌑 -install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 check_app_in_list_not_locally_installed_SiteA🌑 -install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 check_app_in_list_not_locally_installed_SiteA🌓 -install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 check_app_in_list_not_locally_installed_SiteA🌓 -install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 check_app_in_list_not_locally_installed_SiteA🌑 -install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 check_platform_shortcut_not_exists_SiteA🌑 -install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 check_platform_shortcut_not_exists_SiteA🌑 -install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 check_platform_shortcut_not_exists_SiteA🌑 -install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 check_platform_shortcut_not_exists_SiteA🌑 -install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 navigate_browser_SiteA🌑 check_install_icon_shown🌑 -install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 navigate_browser_SiteA🌕 check_install_icon_shown🌕 -install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 navigate_browser_SiteA🌕 check_install_icon_shown🌕 -install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 navigate_browser_SiteA🌑 check_launch_icon_not_shown🌑 -install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 navigate_browser_SiteA🌕 check_launch_icon_not_shown🌕 -install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 navigate_browser_SiteA🌕 check_launch_icon_not_shown🌕 -install_create_shortcut_windowed_SiteC🌑 switch_profile_clients_UserAClient2🌑 check_app_in_list_not_locally_installed_SiteC🌑 -install_create_shortcut_tabbed_SiteC🌑 switch_profile_clients_UserAClient2🌑 check_app_in_list_not_locally_installed_SiteC🌑 -install_create_shortcut_windowed_SiteC🌑 switch_profile_clients_UserAClient2🌑 check_platform_shortcut_not_exists_SiteC🌑 -install_create_shortcut_tabbed_SiteC🌑 switch_profile_clients_UserAClient2🌑 check_platform_shortcut_not_exists_SiteC🌑 -sync_turn_off🌕 install_create_shortcut_windowed_SiteA🌑 sync_turn_on🌑 switch_profile_clients_UserAClient2🌑 check_app_in_list_not_locally_installed_SiteA🌑 -sync_turn_off🌕 install_omnibox_icon_SiteA🌕 sync_turn_on🌕 switch_profile_clients_UserAClient2🌕 check_app_in_list_not_locally_installed_SiteA🌓 -sync_turn_off🌕 install_menu_option_SiteA🌓 sync_turn_on🌕 switch_profile_clients_UserAClient2🌕 check_app_in_list_not_locally_installed_SiteA🌓 -sync_turn_off🌕 install_create_shortcut_tabbed_SiteA🌑 sync_turn_on🌑 switch_profile_clients_UserAClient2🌑 check_app_in_list_not_locally_installed_SiteA🌑 -sync_turn_off🌕 install_create_shortcut_windowed_SiteC🌑 sync_turn_on🌑 switch_profile_clients_UserAClient2🌑 check_app_in_list_not_locally_installed_SiteC🌑 -sync_turn_off🌕 install_create_shortcut_tabbed_SiteC🌑 sync_turn_on🌑 switch_profile_clients_UserAClient2🌑 check_app_in_list_not_locally_installed_SiteC🌑 -install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 sync_turn_off🌑 uninstall_from_app_list_SiteA🌑 sync_turn_on🌑 switch_profile_clients_UserAClient1🌑 check_app_not_in_list_SiteA🌑 -install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 sync_turn_off🌕 uninstall_from_app_list_SiteA🌑 sync_turn_on🌑 switch_profile_clients_UserAClient1🌑 check_app_not_in_list_SiteA🌑 -install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 sync_turn_off🌕 uninstall_from_app_list_SiteA🌑 sync_turn_on🌑 switch_profile_clients_UserAClient1🌑 check_app_not_in_list_SiteA🌑 -install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 sync_turn_off🌑 uninstall_from_app_list_SiteA🌑 sync_turn_on🌑 switch_profile_clients_UserAClient1🌑 check_app_not_in_list_SiteA🌑 -install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 sync_turn_off🌑 uninstall_from_app_list_SiteA🌑 sync_turn_on🌑 switch_profile_clients_UserAClient1🌑 check_platform_shortcut_not_exists_SiteA🌑 -install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 sync_turn_off🌕 uninstall_from_app_list_SiteA🌑 sync_turn_on🌑 switch_profile_clients_UserAClient1🌑 check_platform_shortcut_not_exists_SiteA🌑 -install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 sync_turn_off🌕 uninstall_from_app_list_SiteA🌑 sync_turn_on🌑 switch_profile_clients_UserAClient1🌑 check_platform_shortcut_not_exists_SiteA🌑 -install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 sync_turn_off🌑 uninstall_from_app_list_SiteA🌑 sync_turn_on🌑 switch_profile_clients_UserAClient1🌑 check_platform_shortcut_not_exists_SiteA🌑 -install_create_shortcut_windowed_SiteA🌑 uninstall_from_app_list_SiteA🌑 check_app_not_in_list_SiteA🌑 -install_create_shortcut_windowed_SiteA🌑 uninstall_from_menu_SiteA🌑 check_app_not_in_list_SiteA🌑 -install_omnibox_icon_SiteA🌕 uninstall_from_app_list_SiteA🌑 check_app_not_in_list_SiteA🌑 -install_omnibox_icon_SiteA🌕 uninstall_from_menu_SiteA🌕 check_app_not_in_list_SiteA🌕 -install_menu_option_SiteA🌓 uninstall_from_app_list_SiteA🌑 check_app_not_in_list_SiteA🌑 -install_menu_option_SiteA🌓 uninstall_from_menu_SiteA🌕 check_app_not_in_list_SiteA🌕 -install_create_shortcut_tabbed_SiteA🌑 uninstall_from_app_list_SiteA🌑 check_app_not_in_list_SiteA🌑 -install_create_shortcut_tabbed_SiteA🌑 uninstall_from_menu_SiteA🌑 check_app_not_in_list_SiteA🌑 -install_create_shortcut_windowed_SiteA🌑 uninstall_from_app_list_SiteA🌑 navigate_browser_SiteA🌑 check_install_icon_shown🌑 -install_create_shortcut_windowed_SiteA🌑 uninstall_from_menu_SiteA🌑 navigate_browser_SiteA🌑 check_install_icon_shown🌑 -install_omnibox_icon_SiteA🌕 uninstall_from_app_list_SiteA🌑 navigate_browser_SiteA🌑 check_install_icon_shown🌑 -install_omnibox_icon_SiteA🌕 uninstall_from_menu_SiteA🌕 navigate_browser_SiteA🌕 check_install_icon_shown🌕 -install_menu_option_SiteA🌓 uninstall_from_app_list_SiteA🌑 navigate_browser_SiteA🌑 check_install_icon_shown🌑 -install_menu_option_SiteA🌓 uninstall_from_menu_SiteA🌕 navigate_browser_SiteA🌕 check_install_icon_shown🌕 -install_create_shortcut_tabbed_SiteA🌑 uninstall_from_app_list_SiteA🌑 navigate_browser_SiteA🌑 check_install_icon_shown🌑 -install_create_shortcut_tabbed_SiteA🌑 uninstall_from_menu_SiteA🌑 navigate_browser_SiteA🌑 check_install_icon_shown🌑 -install_create_shortcut_windowed_SiteA🌑 uninstall_from_app_list_SiteA🌑 navigate_browser_SiteA🌑 check_launch_icon_not_shown🌑 -install_create_shortcut_windowed_SiteA🌑 uninstall_from_menu_SiteA🌑 navigate_browser_SiteA🌑 check_launch_icon_not_shown🌑 -install_omnibox_icon_SiteA🌕 uninstall_from_app_list_SiteA🌑 navigate_browser_SiteA🌑 check_launch_icon_not_shown🌑 -install_omnibox_icon_SiteA🌕 uninstall_from_menu_SiteA🌕 navigate_browser_SiteA🌕 check_launch_icon_not_shown🌕 -install_menu_option_SiteA🌓 uninstall_from_app_list_SiteA🌑 navigate_browser_SiteA🌑 check_launch_icon_not_shown🌑 -install_menu_option_SiteA🌓 uninstall_from_menu_SiteA🌕 navigate_browser_SiteA🌕 check_launch_icon_not_shown🌕 -install_create_shortcut_tabbed_SiteA🌑 uninstall_from_app_list_SiteA🌑 navigate_browser_SiteA🌑 check_launch_icon_not_shown🌑 -install_create_shortcut_tabbed_SiteA🌑 uninstall_from_menu_SiteA🌑 navigate_browser_SiteA🌑 check_launch_icon_not_shown🌑 -install_create_shortcut_windowed_SiteA🌑 uninstall_from_app_list_SiteA🌑 check_platform_shortcut_not_exists_SiteA🌑 -install_create_shortcut_windowed_SiteA🌑 uninstall_from_menu_SiteA🌑 check_platform_shortcut_not_exists_SiteA🌑 -install_omnibox_icon_SiteA🌕 uninstall_from_app_list_SiteA🌑 check_platform_shortcut_not_exists_SiteA🌑 -install_omnibox_icon_SiteA🌕 uninstall_from_menu_SiteA🌕 check_platform_shortcut_not_exists_SiteA🌑 -install_menu_option_SiteA🌓 uninstall_from_app_list_SiteA🌑 check_platform_shortcut_not_exists_SiteA🌑 -install_menu_option_SiteA🌓 uninstall_from_menu_SiteA🌕 check_platform_shortcut_not_exists_SiteA🌑 -install_create_shortcut_tabbed_SiteA🌑 uninstall_from_app_list_SiteA🌑 check_platform_shortcut_not_exists_SiteA🌑 -install_create_shortcut_tabbed_SiteA🌑 uninstall_from_menu_SiteA🌑 check_platform_shortcut_not_exists_SiteA🌑 -install_create_shortcut_windowed_SiteC🌑 uninstall_from_app_list_SiteC🌑 check_app_not_in_list_SiteA🌑 -install_create_shortcut_windowed_SiteC🌑 uninstall_from_menu_SiteC🌑 check_app_not_in_list_SiteA🌑 -install_create_shortcut_tabbed_SiteC🌑 uninstall_from_app_list_SiteC🌑 check_app_not_in_list_SiteA🌑 -install_create_shortcut_tabbed_SiteC🌑 uninstall_from_menu_SiteC🌑 check_app_not_in_list_SiteA🌑 -install_create_shortcut_windowed_SiteC🌑 uninstall_from_app_list_SiteC🌑 navigate_browser_SiteC🌑 check_launch_icon_not_shown🌑 -install_create_shortcut_windowed_SiteC🌑 uninstall_from_menu_SiteC🌑 navigate_browser_SiteC🌑 check_launch_icon_not_shown🌑 -install_create_shortcut_tabbed_SiteC🌑 uninstall_from_app_list_SiteC🌑 navigate_browser_SiteC🌑 check_launch_icon_not_shown🌑 -install_create_shortcut_tabbed_SiteC🌑 uninstall_from_menu_SiteC🌑 navigate_browser_SiteC🌑 check_launch_icon_not_shown🌑 -install_create_shortcut_windowed_SiteC🌑 uninstall_from_app_list_SiteC🌑 check_platform_shortcut_not_exists_SiteC🌑 -install_create_shortcut_windowed_SiteC🌑 uninstall_from_menu_SiteC🌑 check_platform_shortcut_not_exists_SiteC🌑 -install_create_shortcut_tabbed_SiteC🌑 uninstall_from_app_list_SiteC🌑 check_platform_shortcut_not_exists_SiteC🌑 -install_create_shortcut_tabbed_SiteC🌑 uninstall_from_menu_SiteC🌑 check_platform_shortcut_not_exists_SiteC🌑 -install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 uninstall_from_app_list_SiteA🌑 check_app_not_in_list_SiteA🌑 -install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 uninstall_from_app_list_SiteA🌑 check_app_not_in_list_SiteA🌑 -install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 uninstall_from_app_list_SiteA🌑 check_app_not_in_list_SiteA🌑 -install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 uninstall_from_app_list_SiteA🌑 check_app_not_in_list_SiteA🌑 -install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 uninstall_from_app_list_SiteA🌑 switch_profile_clients_UserAClient1🌑 check_app_not_in_list_SiteA🌑 -install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 uninstall_from_app_list_SiteA🌑 switch_profile_clients_UserAClient1🌑 check_app_not_in_list_SiteA🌑 -install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 uninstall_from_app_list_SiteA🌑 switch_profile_clients_UserAClient1🌑 check_app_not_in_list_SiteA🌑 -install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 uninstall_from_app_list_SiteA🌑 switch_profile_clients_UserAClient1🌑 check_app_not_in_list_SiteA🌑 +# This is a generated file. +# Full coverage: 14%, with partial coverage: 24% +install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 chrome_update🌑 check_app_in_list_not_locally_installed_SiteA🌑 +install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 chrome_update🌑 check_app_in_list_not_locally_installed_SiteA🌑 +install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 chrome_update🌑 check_app_in_list_not_locally_installed_SiteA🌑 +install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 chrome_update🌑 check_app_in_list_not_locally_installed_SiteA🌑 +install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteA🌑 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 +install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 install_locally_SiteA🌓 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 +install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 install_locally_SiteA🌓 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 +install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteA🌑 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 +install_create_shortcut_windowed_SiteA🌑 uninstall_from_app_list_SiteA🌑 chrome_update🌑 check_app_not_in_list_SiteA🌑 +install_create_shortcut_windowed_SiteA🌑 uninstall_from_menu_SiteA🌑 chrome_update🌑 check_app_not_in_list_SiteA🌑 +install_omnibox_icon_SiteA🌕 uninstall_from_app_list_SiteA🌑 chrome_update🌑 check_app_not_in_list_SiteA🌑 +install_omnibox_icon_SiteA🌕 uninstall_from_menu_SiteA🌕 chrome_update🌑 check_app_not_in_list_SiteA🌑 +install_menu_option_SiteA🌓 uninstall_from_app_list_SiteA🌑 chrome_update🌑 check_app_not_in_list_SiteA🌑 +install_menu_option_SiteA🌓 uninstall_from_menu_SiteA🌕 chrome_update🌑 check_app_not_in_list_SiteA🌑 +install_create_shortcut_tabbed_SiteA🌑 uninstall_from_app_list_SiteA🌑 chrome_update🌑 check_app_not_in_list_SiteA🌑 +install_create_shortcut_tabbed_SiteA🌑 uninstall_from_menu_SiteA🌑 chrome_update🌑 check_app_not_in_list_SiteA🌑 +install_create_shortcut_windowed_SiteA🌑 uninstall_from_app_list_SiteA🌑 chrome_update🌑 check_platform_shortcut_not_exists_SiteA🌑 +install_create_shortcut_windowed_SiteA🌑 uninstall_from_menu_SiteA🌑 chrome_update🌑 check_platform_shortcut_not_exists_SiteA🌑 +install_omnibox_icon_SiteA🌕 uninstall_from_app_list_SiteA🌑 chrome_update🌑 check_platform_shortcut_not_exists_SiteA🌑 +install_omnibox_icon_SiteA🌕 uninstall_from_menu_SiteA🌕 chrome_update🌑 check_platform_shortcut_not_exists_SiteA🌑 +install_menu_option_SiteA🌓 uninstall_from_app_list_SiteA🌑 chrome_update🌑 check_platform_shortcut_not_exists_SiteA🌑 +install_menu_option_SiteA🌓 uninstall_from_menu_SiteA🌕 chrome_update🌑 check_platform_shortcut_not_exists_SiteA🌑 +install_create_shortcut_tabbed_SiteA🌑 uninstall_from_app_list_SiteA🌑 chrome_update🌑 check_platform_shortcut_not_exists_SiteA🌑 +install_create_shortcut_tabbed_SiteA🌑 uninstall_from_menu_SiteA🌑 chrome_update🌑 check_platform_shortcut_not_exists_SiteA🌑 +install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteA🌑 chrome_update🌑 check_app_in_list_tabbed_SiteA🌑 +install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteA🌑 chrome_update🌑 check_app_in_list_windowed_SiteA🌑 +install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 install_locally_SiteA🌓 chrome_update🌑 check_app_in_list_windowed_SiteA🌑 +install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 install_locally_SiteA🌓 chrome_update🌑 check_app_in_list_windowed_SiteA🌑 +install_create_shortcut_windowed_SiteC🌑 switch_profile_clients_UserAClient2🌑 chrome_update🌑 check_app_in_list_not_locally_installed_SiteC🌑 +install_create_shortcut_tabbed_SiteC🌑 switch_profile_clients_UserAClient2🌑 chrome_update🌑 check_app_in_list_not_locally_installed_SiteC🌑 +install_policy_app_windowed_no_shortcut_SiteA🌑 chrome_update🌑 check_platform_shortcut_not_exists_SiteA🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 chrome_update🌑 check_platform_shortcut_not_exists_SiteA🌑 +install_policy_app_windowed_no_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 chrome_update🌑 check_app_not_in_list_SiteA🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 chrome_update🌑 check_app_not_in_list_SiteA🌑 +install_policy_app_windowed_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 chrome_update🌑 check_app_not_in_list_SiteA🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 chrome_update🌑 check_app_not_in_list_SiteA🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 install_create_shortcut_windowed_SiteA🌑 chrome_update🌑 check_app_in_list_windowed_SiteA🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 install_omnibox_icon_SiteA🌕 chrome_update🌑 check_app_in_list_windowed_SiteA🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 install_menu_option_SiteA🌓 chrome_update🌑 check_app_in_list_windowed_SiteA🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 install_create_shortcut_windowed_SiteA🌑 chrome_update🌑 check_app_in_list_windowed_SiteA🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 install_omnibox_icon_SiteA🌑 chrome_update🌑 check_app_in_list_windowed_SiteA🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 install_menu_option_SiteA🌑 chrome_update🌑 check_app_in_list_windowed_SiteA🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 install_create_shortcut_windowed_SiteA🌑 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 install_omnibox_icon_SiteA🌕 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 install_menu_option_SiteA🌓 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 install_create_shortcut_windowed_SiteA🌑 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 install_omnibox_icon_SiteA🌑 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 install_menu_option_SiteA🌑 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 install_create_shortcut_windowed_SiteA🌑 uninstall_policy_app_SiteA🌑 chrome_update🌑 check_app_in_list_windowed_SiteA🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 install_omnibox_icon_SiteA🌕 uninstall_policy_app_SiteA🌕 chrome_update🌑 check_app_in_list_windowed_SiteA🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 install_menu_option_SiteA🌓 uninstall_policy_app_SiteA🌕 chrome_update🌑 check_app_in_list_windowed_SiteA🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 install_create_shortcut_windowed_SiteA🌑 uninstall_policy_app_SiteA🌑 chrome_update🌑 check_app_in_list_windowed_SiteA🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 install_omnibox_icon_SiteA🌑 uninstall_policy_app_SiteA🌑 chrome_update🌑 check_app_in_list_windowed_SiteA🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 install_menu_option_SiteA🌑 uninstall_policy_app_SiteA🌑 chrome_update🌑 check_app_in_list_windowed_SiteA🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 install_create_shortcut_windowed_SiteA🌑 uninstall_policy_app_SiteA🌑 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 install_omnibox_icon_SiteA🌕 uninstall_policy_app_SiteA🌕 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 install_menu_option_SiteA🌓 uninstall_policy_app_SiteA🌕 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 install_create_shortcut_windowed_SiteA🌑 uninstall_policy_app_SiteA🌑 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 install_omnibox_icon_SiteA🌑 uninstall_policy_app_SiteA🌑 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 install_menu_option_SiteA🌑 uninstall_policy_app_SiteA🌑 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 +install_create_shortcut_tabbed_SiteA🌑 chrome_update🌑 check_app_in_list_tabbed_SiteA🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 chrome_update🌑 check_app_in_list_tabbed_SiteA🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 chrome_update🌑 check_app_in_list_tabbed_SiteA🌑 +install_create_shortcut_tabbed_SiteA🌑 chrome_update🌑 navigate_browser_SiteA🌑 check_create_shortcut_shown🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 chrome_update🌑 navigate_browser_SiteA🌑 check_create_shortcut_shown🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 chrome_update🌑 navigate_browser_SiteA🌑 check_create_shortcut_shown🌑 +install_create_shortcut_tabbed_SiteA🌑 chrome_update🌑 navigate_browser_SiteA🌑 check_install_icon_shown🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 chrome_update🌑 navigate_browser_SiteA🌑 check_install_icon_shown🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 chrome_update🌑 navigate_browser_SiteA🌑 check_install_icon_shown🌑 +install_create_shortcut_tabbed_SiteA🌑 chrome_update🌑 navigate_browser_SiteA🌑 check_launch_icon_not_shown🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 chrome_update🌑 navigate_browser_SiteA🌑 check_launch_icon_not_shown🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 chrome_update🌑 navigate_browser_SiteA🌑 check_launch_icon_not_shown🌑 +install_create_shortcut_windowed_SiteA🌑 chrome_update🌑 check_app_in_list_windowed_SiteA🌑 +install_omnibox_icon_SiteA🌕 chrome_update🌑 check_app_in_list_windowed_SiteA🌑 +install_policy_app_windowed_no_shortcut_SiteA🌑 chrome_update🌑 check_app_in_list_windowed_SiteA🌑 +install_policy_app_windowed_shortcut_SiteA🌓 chrome_update🌑 check_app_in_list_windowed_SiteA🌑 +install_menu_option_SiteA🌓 chrome_update🌑 check_app_in_list_windowed_SiteA🌑 +install_create_shortcut_windowed_SiteA🌑 chrome_update🌑 navigate_browser_SiteA🌑 check_create_shortcut_not_shown🌑 +install_omnibox_icon_SiteA🌕 chrome_update🌑 navigate_browser_SiteA🌑 check_create_shortcut_not_shown🌑 +install_policy_app_windowed_no_shortcut_SiteA🌑 chrome_update🌑 navigate_browser_SiteA🌑 check_create_shortcut_not_shown🌑 +install_policy_app_windowed_shortcut_SiteA🌓 chrome_update🌑 navigate_browser_SiteA🌑 check_create_shortcut_not_shown🌑 +install_menu_option_SiteA🌓 chrome_update🌑 navigate_browser_SiteA🌑 check_create_shortcut_not_shown🌑 +install_create_shortcut_windowed_SiteA🌑 chrome_update🌑 navigate_browser_SiteA🌑 check_install_icon_not_shown🌑 +install_omnibox_icon_SiteA🌕 chrome_update🌑 navigate_browser_SiteA🌑 check_install_icon_not_shown🌑 +install_policy_app_windowed_no_shortcut_SiteA🌑 chrome_update🌑 navigate_browser_SiteA🌑 check_install_icon_not_shown🌑 +install_policy_app_windowed_shortcut_SiteA🌓 chrome_update🌑 navigate_browser_SiteA🌑 check_install_icon_not_shown🌑 +install_menu_option_SiteA🌓 chrome_update🌑 navigate_browser_SiteA🌑 check_install_icon_not_shown🌑 +install_create_shortcut_windowed_SiteA🌑 chrome_update🌑 navigate_browser_SiteA🌑 check_launch_icon_shown🌑 +install_omnibox_icon_SiteA🌕 chrome_update🌑 navigate_browser_SiteA🌑 check_launch_icon_shown🌑 +install_policy_app_windowed_no_shortcut_SiteA🌑 chrome_update🌑 navigate_browser_SiteA🌑 check_launch_icon_shown🌑 +install_policy_app_windowed_shortcut_SiteA🌓 chrome_update🌑 navigate_browser_SiteA🌑 check_launch_icon_shown🌑 +install_menu_option_SiteA🌓 chrome_update🌑 navigate_browser_SiteA🌑 check_launch_icon_shown🌑 +install_policy_app_windowed_shortcut_SiteA🌓 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 +install_create_shortcut_windowed_SiteA🌑 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 +install_omnibox_icon_SiteA🌕 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 +install_menu_option_SiteA🌓 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 +install_create_shortcut_tabbed_SiteA🌑 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 +install_policy_app_windowed_shortcut_SiteA🌓 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 +install_create_shortcut_windowed_SiteA🌑 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 +install_omnibox_icon_SiteA🌕 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 +install_menu_option_SiteA🌓 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 +install_create_shortcut_tabbed_SiteA🌑 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 chrome_update🌑 check_platform_shortcut_exists_SiteA🌑 +install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 chrome_update🌑 launch_from_menu_option_SiteA🌑 check_tab_created🌑 +install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 chrome_update🌑 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 +install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 chrome_update🌑 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 +install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 chrome_update🌑 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 +install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 chrome_update🌑 launch_from_menu_option_SiteA🌑 check_tab_created🌑 +install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 chrome_update🌑 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 +install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 chrome_update🌑 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 +install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 chrome_update🌑 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 +install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 chrome_update🌑 launch_from_menu_option_SiteA🌑 check_tab_created🌑 +install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 chrome_update🌑 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 +install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 chrome_update🌑 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 +install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 chrome_update🌑 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 +install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 chrome_update🌑 launch_from_menu_option_SiteA🌑 check_tab_created🌑 +install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 chrome_update🌑 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 +install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 chrome_update🌑 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 +install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 chrome_update🌑 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 +install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteA🌑 chrome_update🌑 launch_from_menu_option_SiteA🌑 check_tab_created🌑 +install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteA🌑 chrome_update🌑 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 +install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteA🌑 chrome_update🌑 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 +install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteA🌑 chrome_update🌑 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 +install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteA🌑 chrome_update🌑 launch_from_menu_option_SiteA🌑 check_window_created🌑 +install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteA🌑 chrome_update🌑 launch_from_launch_icon_SiteA🌑 check_window_created🌑 +install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteA🌑 chrome_update🌑 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 +install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteA🌑 chrome_update🌑 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 +install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 install_locally_SiteA🌓 chrome_update🌑 launch_from_menu_option_SiteA🌑 check_window_created🌑 +install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 install_locally_SiteA🌓 chrome_update🌑 launch_from_launch_icon_SiteA🌑 check_window_created🌑 +install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 install_locally_SiteA🌓 chrome_update🌑 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 +install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 install_locally_SiteA🌓 chrome_update🌑 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 +install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 install_locally_SiteA🌓 chrome_update🌑 launch_from_menu_option_SiteA🌑 check_window_created🌑 +install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 install_locally_SiteA🌓 chrome_update🌑 launch_from_launch_icon_SiteA🌑 check_window_created🌑 +install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 install_locally_SiteA🌓 chrome_update🌑 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 +install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 install_locally_SiteA🌓 chrome_update🌑 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 +install_create_shortcut_tabbed_SiteA🌑 chrome_update🌑 launch_from_menu_option_SiteA🌑 check_tab_created🌑 +install_create_shortcut_tabbed_SiteA🌑 chrome_update🌑 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 +install_create_shortcut_tabbed_SiteA🌑 chrome_update🌑 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 +install_create_shortcut_tabbed_SiteA🌑 chrome_update🌑 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 chrome_update🌑 launch_from_menu_option_SiteA🌑 check_tab_created🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 chrome_update🌑 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 chrome_update🌑 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 chrome_update🌑 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 chrome_update🌑 launch_from_menu_option_SiteA🌑 check_tab_created🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 chrome_update🌑 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 chrome_update🌑 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 chrome_update🌑 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 +install_create_shortcut_windowed_SiteA🌑 chrome_update🌑 launch_from_menu_option_SiteA🌑 check_window_created🌑 +install_create_shortcut_windowed_SiteA🌑 chrome_update🌑 launch_from_launch_icon_SiteA🌑 check_window_created🌑 +install_create_shortcut_windowed_SiteA🌑 chrome_update🌑 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 +install_create_shortcut_windowed_SiteA🌑 chrome_update🌑 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 +install_omnibox_icon_SiteA🌕 chrome_update🌑 launch_from_menu_option_SiteA🌑 check_window_created🌑 +install_omnibox_icon_SiteA🌕 chrome_update🌑 launch_from_launch_icon_SiteA🌑 check_window_created🌑 +install_omnibox_icon_SiteA🌕 chrome_update🌑 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 +install_omnibox_icon_SiteA🌕 chrome_update🌑 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 +install_policy_app_windowed_no_shortcut_SiteA🌑 chrome_update🌑 launch_from_menu_option_SiteA🌑 check_window_created🌑 +install_policy_app_windowed_no_shortcut_SiteA🌑 chrome_update🌑 launch_from_launch_icon_SiteA🌑 check_window_created🌑 +install_policy_app_windowed_no_shortcut_SiteA🌑 chrome_update🌑 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 +install_policy_app_windowed_no_shortcut_SiteA🌑 chrome_update🌑 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 +install_policy_app_windowed_shortcut_SiteA🌓 chrome_update🌑 launch_from_menu_option_SiteA🌑 check_window_created🌑 +install_policy_app_windowed_shortcut_SiteA🌓 chrome_update🌑 launch_from_launch_icon_SiteA🌑 check_window_created🌑 +install_policy_app_windowed_shortcut_SiteA🌓 chrome_update🌑 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 +install_policy_app_windowed_shortcut_SiteA🌓 chrome_update🌑 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 +install_menu_option_SiteA🌓 chrome_update🌑 launch_from_menu_option_SiteA🌑 check_window_created🌑 +install_menu_option_SiteA🌓 chrome_update🌑 launch_from_launch_icon_SiteA🌑 check_window_created🌑 +install_menu_option_SiteA🌓 chrome_update🌑 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 +install_menu_option_SiteA🌓 chrome_update🌑 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 +install_create_shortcut_tabbed_SiteC🌑 chrome_update🌑 launch_from_menu_option_SiteA🌑 check_tab_created🌑 +install_create_shortcut_tabbed_SiteC🌑 chrome_update🌑 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 +install_create_shortcut_tabbed_SiteC🌑 chrome_update🌑 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 +install_create_shortcut_tabbed_SiteC🌑 chrome_update🌑 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 +install_policy_app_tabbed_shortcut_SiteC🌓 chrome_update🌑 launch_from_menu_option_SiteA🌑 check_tab_created🌑 +install_policy_app_tabbed_shortcut_SiteC🌓 chrome_update🌑 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 +install_policy_app_tabbed_shortcut_SiteC🌓 chrome_update🌑 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 +install_policy_app_tabbed_shortcut_SiteC🌓 chrome_update🌑 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 +install_policy_app_tabbed_no_shortcut_SiteC🌑 chrome_update🌑 launch_from_menu_option_SiteA🌑 check_tab_created🌑 +install_policy_app_tabbed_no_shortcut_SiteC🌑 chrome_update🌑 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 +install_policy_app_tabbed_no_shortcut_SiteC🌑 chrome_update🌑 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 +install_policy_app_tabbed_no_shortcut_SiteC🌑 chrome_update🌑 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 +install_create_shortcut_windowed_SiteA🌑 set_app_badge_SiteA🌑 clear_app_badge_SiteA🌑 check_app_badge_empty_SiteA🌑 +install_omnibox_icon_SiteA🌕 set_app_badge_SiteA🌑 clear_app_badge_SiteA🌑 check_app_badge_empty_SiteA🌑 +install_menu_option_SiteA🌓 set_app_badge_SiteA🌑 clear_app_badge_SiteA🌑 check_app_badge_empty_SiteA🌑 +install_create_shortcut_windowed_SiteA🌑 navigate_pwa_site_a_to_SiteB🌑 close_custom_toolbar🌑 check_navigation_start_url🌑 +install_omnibox_icon_SiteA🌕 navigate_pwa_site_a_to_SiteB🌑 close_custom_toolbar🌑 check_navigation_start_url🌑 +install_policy_app_windowed_no_shortcut_SiteA🌑 navigate_pwa_site_a_to_SiteB🌑 close_custom_toolbar🌑 check_navigation_start_url🌑 +install_policy_app_windowed_shortcut_SiteA🌓 navigate_pwa_site_a_to_SiteB🌑 close_custom_toolbar🌑 check_navigation_start_url🌑 +install_menu_option_SiteA🌓 navigate_pwa_site_a_to_SiteB🌑 close_custom_toolbar🌑 check_navigation_start_url🌑 +install_policy_app_windowed_no_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 +install_create_shortcut_windowed_SiteA🌑 delete_profile🌑 check_app_list_empty🌑 +install_omnibox_icon_SiteA🌕 delete_profile🌑 check_app_list_empty🌑 +install_policy_app_windowed_no_shortcut_SiteA🌑 delete_profile🌑 check_app_list_empty🌑 +install_policy_app_windowed_shortcut_SiteA🌓 delete_profile🌑 check_app_list_empty🌑 +install_menu_option_SiteA🌓 delete_profile🌑 check_app_list_empty🌑 +install_create_shortcut_tabbed_SiteA🌑 delete_profile🌑 check_app_list_empty🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 delete_profile🌑 check_app_list_empty🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 delete_profile🌑 check_app_list_empty🌑 +install_create_shortcut_windowed_SiteA🌑 delete_profile🌑 check_app_not_in_list_SiteA🌑 +install_omnibox_icon_SiteA🌕 delete_profile🌑 check_app_not_in_list_SiteA🌑 +install_policy_app_windowed_no_shortcut_SiteA🌑 delete_profile🌑 check_app_not_in_list_SiteA🌑 +install_policy_app_windowed_shortcut_SiteA🌓 delete_profile🌑 check_app_not_in_list_SiteA🌑 +install_menu_option_SiteA🌓 delete_profile🌑 check_app_not_in_list_SiteA🌑 +install_create_shortcut_tabbed_SiteA🌑 delete_profile🌑 check_app_not_in_list_SiteA🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 delete_profile🌑 check_app_not_in_list_SiteA🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 delete_profile🌑 check_app_not_in_list_SiteA🌑 +install_policy_app_windowed_shortcut_SiteA🌓 delete_profile🌑 check_platform_shortcut_not_exists_SiteA🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 delete_profile🌑 check_platform_shortcut_not_exists_SiteA🌑 +install_create_shortcut_windowed_SiteA🌑 delete_profile🌑 check_platform_shortcut_not_exists_SiteA🌑 +install_omnibox_icon_SiteA🌕 delete_profile🌑 check_platform_shortcut_not_exists_SiteA🌑 +install_menu_option_SiteA🌓 delete_profile🌑 check_platform_shortcut_not_exists_SiteA🌑 +install_create_shortcut_tabbed_SiteA🌑 delete_profile🌑 check_platform_shortcut_not_exists_SiteA🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 install_create_shortcut_windowed_SiteA🌑 check_app_in_list_windowed_SiteA🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 install_omnibox_icon_SiteA🌕 check_app_in_list_windowed_SiteA🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 install_menu_option_SiteA🌓 check_app_in_list_windowed_SiteA🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 install_create_shortcut_windowed_SiteA🌑 check_app_in_list_windowed_SiteA🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 install_omnibox_icon_SiteA🌑 check_app_in_list_windowed_SiteA🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 install_menu_option_SiteA🌑 check_app_in_list_windowed_SiteA🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 install_create_shortcut_windowed_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 install_omnibox_icon_SiteA🌕 check_platform_shortcut_exists_SiteA🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 install_menu_option_SiteA🌓 check_platform_shortcut_exists_SiteA🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 install_create_shortcut_windowed_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 install_omnibox_icon_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 install_menu_option_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 install_create_shortcut_windowed_SiteA🌑 check_window_created🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 install_omnibox_icon_SiteA🌕 check_window_created🌕 +install_policy_app_tabbed_shortcut_SiteA🌓 install_menu_option_SiteA🌓 check_window_created🌕 +install_policy_app_tabbed_no_shortcut_SiteA🌑 install_create_shortcut_windowed_SiteA🌑 check_window_created🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 install_omnibox_icon_SiteA🌑 check_window_created🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 install_menu_option_SiteA🌑 check_window_created🌑 +install_create_shortcut_windowed_SiteA🌑 check_window_created🌑 +install_omnibox_icon_SiteA🌕 check_window_created🌕 +install_menu_option_SiteA🌓 check_window_created🌕 +install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 +install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 install_locally_SiteA🌓 check_platform_shortcut_exists_SiteA🌑 +install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 install_locally_SiteA🌓 check_platform_shortcut_exists_SiteA🌑 +install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 +install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteA🌑 check_app_in_list_tabbed_SiteA🌑 +install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteA🌑 navigate_browser_SiteA🌑 check_install_icon_shown🌑 +install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteA🌑 navigate_browser_SiteA🌑 check_launch_icon_not_shown🌑 +install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteA🌑 check_app_in_list_windowed_SiteA🌑 +install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 install_locally_SiteA🌓 check_app_in_list_windowed_SiteA🌑 +install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 install_locally_SiteA🌓 check_app_in_list_windowed_SiteA🌑 +install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteA🌑 navigate_browser_SiteA🌑 check_install_icon_not_shown🌑 +install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 install_locally_SiteA🌓 navigate_browser_SiteA🌕 check_install_icon_not_shown🌕 +install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 install_locally_SiteA🌓 navigate_browser_SiteA🌕 check_install_icon_not_shown🌕 +install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteA🌑 navigate_browser_SiteA🌑 check_launch_icon_shown🌑 +install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 install_locally_SiteA🌓 navigate_browser_SiteA🌕 check_launch_icon_shown🌕 +install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 install_locally_SiteA🌓 navigate_browser_SiteA🌕 check_launch_icon_shown🌕 +install_create_shortcut_windowed_SiteC🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 +install_create_shortcut_tabbed_SiteC🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 +install_create_shortcut_tabbed_SiteC🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteC🌑 check_app_in_list_tabbed_SiteC🌑 +install_create_shortcut_tabbed_SiteC🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteC🌑 navigate_browser_SiteC🌑 check_install_icon_shown🌑 +install_create_shortcut_tabbed_SiteC🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteC🌑 navigate_browser_SiteC🌑 check_launch_icon_not_shown🌑 +install_create_shortcut_windowed_SiteC🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteC🌑 check_app_in_list_tabbed_SiteC🌑 +install_create_shortcut_windowed_SiteC🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteC🌑 navigate_browser_SiteC🌑 check_install_icon_not_shown🌑 +install_create_shortcut_windowed_SiteC🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteC🌑 navigate_browser_SiteC🌑 check_launch_icon_shown🌑 +install_policy_app_windowed_no_shortcut_SiteA🌑 check_platform_shortcut_not_exists_SiteA🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 check_platform_shortcut_not_exists_SiteA🌑 +install_policy_app_windowed_no_shortcut_SiteC🌑 check_platform_shortcut_not_exists_SiteC🌑 +install_policy_app_tabbed_no_shortcut_SiteC🌑 check_platform_shortcut_not_exists_SiteC🌑 +install_create_shortcut_tabbed_SiteA🌑 install_policy_app_windowed_no_shortcut_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 +install_create_shortcut_tabbed_SiteA🌑 install_policy_app_windowed_shortcut_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 +install_create_shortcut_windowed_SiteA🌑 install_policy_app_tabbed_no_shortcut_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 +install_create_shortcut_windowed_SiteA🌑 install_policy_app_windowed_no_shortcut_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 +install_omnibox_icon_SiteA🌕 install_policy_app_tabbed_no_shortcut_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 +install_omnibox_icon_SiteA🌕 install_policy_app_windowed_no_shortcut_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 +install_menu_option_SiteA🌓 install_policy_app_tabbed_no_shortcut_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 +install_menu_option_SiteA🌓 install_policy_app_windowed_no_shortcut_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 +install_create_shortcut_windowed_SiteA🌑 install_policy_app_tabbed_shortcut_SiteA🌑 check_app_in_list_windowed_SiteA🌑 +install_create_shortcut_windowed_SiteA🌑 install_policy_app_tabbed_no_shortcut_SiteA🌑 check_app_in_list_windowed_SiteA🌑 +install_omnibox_icon_SiteA🌕 install_policy_app_tabbed_shortcut_SiteA🌓 check_app_in_list_windowed_SiteA🌑 +install_omnibox_icon_SiteA🌕 install_policy_app_tabbed_no_shortcut_SiteA🌑 check_app_in_list_windowed_SiteA🌑 +install_menu_option_SiteA🌓 install_policy_app_tabbed_shortcut_SiteA🌓 check_app_in_list_windowed_SiteA🌑 +install_menu_option_SiteA🌓 install_policy_app_tabbed_no_shortcut_SiteA🌑 check_app_in_list_windowed_SiteA🌑 +install_create_shortcut_windowed_SiteA🌑 install_policy_app_tabbed_shortcut_SiteA🌑 navigate_browser_SiteA🌑 check_launch_icon_shown🌑 +install_create_shortcut_windowed_SiteA🌑 install_policy_app_tabbed_no_shortcut_SiteA🌑 navigate_browser_SiteA🌑 check_launch_icon_shown🌑 +install_omnibox_icon_SiteA🌕 install_policy_app_tabbed_shortcut_SiteA🌓 navigate_browser_SiteA🌕 check_launch_icon_shown🌕 +install_omnibox_icon_SiteA🌕 install_policy_app_tabbed_no_shortcut_SiteA🌑 navigate_browser_SiteA🌑 check_launch_icon_shown🌑 +install_menu_option_SiteA🌓 install_policy_app_tabbed_shortcut_SiteA🌓 navigate_browser_SiteA🌕 check_launch_icon_shown🌕 +install_menu_option_SiteA🌓 install_policy_app_tabbed_no_shortcut_SiteA🌑 navigate_browser_SiteA🌑 check_launch_icon_shown🌑 +install_create_shortcut_tabbed_SiteA🌑 install_policy_app_windowed_no_shortcut_SiteA🌑 check_app_in_list_tabbed_SiteA🌑 +install_create_shortcut_tabbed_SiteA🌑 install_policy_app_windowed_shortcut_SiteA🌑 check_app_in_list_tabbed_SiteA🌑 +install_create_shortcut_tabbed_SiteA🌑 install_policy_app_windowed_no_shortcut_SiteA🌑 navigate_browser_SiteA🌑 check_install_icon_shown🌑 +install_create_shortcut_tabbed_SiteA🌑 install_policy_app_windowed_shortcut_SiteA🌑 navigate_browser_SiteA🌑 check_install_icon_shown🌑 +install_create_shortcut_tabbed_SiteA🌑 check_app_in_list_tabbed_SiteA🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 check_app_in_list_tabbed_SiteA🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 check_app_in_list_tabbed_SiteA🌑 +install_create_shortcut_tabbed_SiteA🌑 navigate_browser_SiteA🌑 check_create_shortcut_shown🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 navigate_browser_SiteA🌕 check_create_shortcut_shown🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 navigate_browser_SiteA🌑 check_create_shortcut_shown🌑 +install_create_shortcut_tabbed_SiteA🌑 navigate_browser_SiteA🌑 check_install_icon_shown🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 navigate_browser_SiteA🌕 check_install_icon_shown🌕 +install_policy_app_tabbed_no_shortcut_SiteA🌑 navigate_browser_SiteA🌑 check_install_icon_shown🌑 +install_create_shortcut_tabbed_SiteA🌑 navigate_browser_SiteA🌑 check_launch_icon_not_shown🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 navigate_browser_SiteA🌕 check_launch_icon_not_shown🌕 +install_policy_app_tabbed_no_shortcut_SiteA🌑 navigate_browser_SiteA🌑 check_launch_icon_not_shown🌑 +install_create_shortcut_tabbed_SiteC🌑 check_app_in_list_tabbed_SiteC🌑 +install_policy_app_tabbed_shortcut_SiteC🌓 check_app_in_list_tabbed_SiteC🌑 +install_policy_app_tabbed_no_shortcut_SiteC🌑 check_app_in_list_tabbed_SiteC🌑 +install_create_shortcut_tabbed_SiteC🌑 navigate_browser_SiteC🌑 check_create_shortcut_shown🌑 +install_policy_app_tabbed_shortcut_SiteC🌓 navigate_browser_SiteC🌕 check_create_shortcut_shown🌑 +install_policy_app_tabbed_no_shortcut_SiteC🌑 navigate_browser_SiteC🌑 check_create_shortcut_shown🌑 +install_create_shortcut_tabbed_SiteC🌑 navigate_browser_SiteC🌑 check_install_icon_not_shown🌑 +install_policy_app_tabbed_shortcut_SiteC🌓 navigate_browser_SiteC🌕 check_install_icon_not_shown🌕 +install_policy_app_tabbed_no_shortcut_SiteC🌑 navigate_browser_SiteC🌑 check_install_icon_not_shown🌑 +install_create_shortcut_tabbed_SiteC🌑 navigate_browser_SiteC🌑 check_launch_icon_not_shown🌑 +install_policy_app_tabbed_shortcut_SiteC🌓 navigate_browser_SiteC🌕 check_launch_icon_not_shown🌕 +install_policy_app_tabbed_no_shortcut_SiteC🌑 navigate_browser_SiteC🌑 check_launch_icon_not_shown🌑 +install_create_shortcut_windowed_SiteA🌑 check_app_in_list_windowed_SiteA🌑 +install_omnibox_icon_SiteA🌕 check_app_in_list_windowed_SiteA🌑 +install_policy_app_windowed_no_shortcut_SiteA🌑 check_app_in_list_windowed_SiteA🌑 +install_policy_app_windowed_shortcut_SiteA🌓 check_app_in_list_windowed_SiteA🌑 +install_menu_option_SiteA🌓 check_app_in_list_windowed_SiteA🌑 +install_create_shortcut_windowed_SiteA🌑 navigate_browser_SiteA🌑 check_create_shortcut_not_shown🌑 +install_omnibox_icon_SiteA🌕 navigate_browser_SiteA🌕 check_create_shortcut_not_shown🌑 +install_policy_app_windowed_no_shortcut_SiteA🌑 navigate_browser_SiteA🌑 check_create_shortcut_not_shown🌑 +install_policy_app_windowed_shortcut_SiteA🌓 navigate_browser_SiteA🌕 check_create_shortcut_not_shown🌑 +install_menu_option_SiteA🌓 navigate_browser_SiteA🌕 check_create_shortcut_not_shown🌑 +install_create_shortcut_windowed_SiteA🌑 navigate_browser_SiteA🌑 check_install_icon_not_shown🌑 +install_omnibox_icon_SiteA🌕 navigate_browser_SiteA🌕 check_install_icon_not_shown🌕 +install_policy_app_windowed_no_shortcut_SiteA🌑 navigate_browser_SiteA🌑 check_install_icon_not_shown🌑 +install_policy_app_windowed_shortcut_SiteA🌓 navigate_browser_SiteA🌕 check_install_icon_not_shown🌕 +install_menu_option_SiteA🌓 navigate_browser_SiteA🌕 check_install_icon_not_shown🌕 +install_create_shortcut_windowed_SiteA🌑 navigate_browser_SiteA🌑 check_launch_icon_shown🌑 +install_omnibox_icon_SiteA🌕 navigate_browser_SiteA🌕 check_launch_icon_shown🌕 +install_policy_app_windowed_no_shortcut_SiteA🌑 navigate_browser_SiteA🌑 check_launch_icon_shown🌑 +install_policy_app_windowed_shortcut_SiteA🌓 navigate_browser_SiteA🌕 check_launch_icon_shown🌕 +install_menu_option_SiteA🌓 navigate_browser_SiteA🌕 check_launch_icon_shown🌕 +install_create_shortcut_windowed_SiteB🌑 navigate_browser_SiteB🌑 check_launch_icon_shown🌑 +install_omnibox_icon_SiteB🌕 navigate_browser_SiteB🌕 check_launch_icon_shown🌕 +install_policy_app_windowed_no_shortcut_SiteB🌑 navigate_browser_SiteB🌑 check_launch_icon_shown🌑 +install_policy_app_windowed_shortcut_SiteB🌓 navigate_browser_SiteB🌕 check_launch_icon_shown🌕 +install_menu_option_SiteB🌓 navigate_browser_SiteB🌕 check_launch_icon_shown🌕 +install_create_shortcut_windowed_SiteB🌑 check_platform_shortcut_right_click_menu_has_actions_SiteB🌑 +install_omnibox_icon_SiteB🌕 check_platform_shortcut_right_click_menu_has_actions_SiteB🌑 +install_menu_option_SiteB🌓 check_platform_shortcut_right_click_menu_has_actions_SiteB🌑 +install_create_shortcut_windowed_SiteC🌑 check_app_in_list_windowed_SiteC🌑 +install_policy_app_windowed_no_shortcut_SiteC🌑 check_app_in_list_windowed_SiteC🌑 +install_policy_app_windowed_shortcut_SiteC🌓 check_app_in_list_windowed_SiteC🌑 +install_create_shortcut_windowed_SiteC🌑 navigate_browser_SiteC🌑 check_create_shortcut_not_shown🌑 +install_policy_app_windowed_no_shortcut_SiteC🌑 navigate_browser_SiteC🌑 check_create_shortcut_not_shown🌑 +install_policy_app_windowed_shortcut_SiteC🌓 navigate_browser_SiteC🌕 check_create_shortcut_not_shown🌑 +install_create_shortcut_windowed_SiteC🌑 navigate_browser_SiteC🌑 check_install_icon_not_shown🌑 +install_policy_app_windowed_no_shortcut_SiteC🌑 navigate_browser_SiteC🌑 check_install_icon_not_shown🌑 +install_policy_app_windowed_shortcut_SiteC🌓 navigate_browser_SiteC🌕 check_install_icon_not_shown🌕 +install_create_shortcut_windowed_SiteC🌑 navigate_browser_SiteC🌑 check_launch_icon_shown🌑 +install_policy_app_windowed_no_shortcut_SiteC🌑 navigate_browser_SiteC🌑 check_launch_icon_shown🌑 +install_policy_app_windowed_shortcut_SiteC🌓 navigate_browser_SiteC🌕 check_launch_icon_shown🌕 +install_policy_app_windowed_shortcut_SiteA🌓 check_platform_shortcut_exists_SiteA🌑 +install_policy_app_windowed_shortcut_SiteA🌓 check_platform_shortcut_exists_SiteC🌑 +install_create_shortcut_tabbed_SiteA🌑 install_policy_app_windowed_no_shortcut_SiteA🌑 launch_from_menu_option_SiteA🌑 check_tab_created🌑 +install_create_shortcut_tabbed_SiteA🌑 install_policy_app_windowed_no_shortcut_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 +install_create_shortcut_tabbed_SiteA🌑 install_policy_app_windowed_no_shortcut_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 +install_create_shortcut_tabbed_SiteA🌑 install_policy_app_windowed_no_shortcut_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 +install_create_shortcut_tabbed_SiteA🌑 install_policy_app_windowed_shortcut_SiteA🌑 launch_from_menu_option_SiteA🌑 check_tab_created🌑 +install_create_shortcut_tabbed_SiteA🌑 install_policy_app_windowed_shortcut_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 +install_create_shortcut_tabbed_SiteA🌑 install_policy_app_windowed_shortcut_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 +install_create_shortcut_tabbed_SiteA🌑 install_policy_app_windowed_shortcut_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 +install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 launch_from_menu_option_SiteA🌑 check_tab_created🌑 +install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 +install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 +install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 +install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteA🌑 launch_from_menu_option_SiteA🌑 check_tab_created🌑 +install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 +install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 +install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 +install_create_shortcut_windowed_SiteA🌑 install_policy_app_tabbed_shortcut_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_created🌑 +install_create_shortcut_windowed_SiteA🌑 install_policy_app_tabbed_shortcut_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_created🌑 +install_create_shortcut_windowed_SiteA🌑 install_policy_app_tabbed_shortcut_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 +install_create_shortcut_windowed_SiteA🌑 install_policy_app_tabbed_shortcut_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 +install_create_shortcut_windowed_SiteA🌑 install_policy_app_tabbed_no_shortcut_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_created🌑 +install_create_shortcut_windowed_SiteA🌑 install_policy_app_tabbed_no_shortcut_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_created🌑 +install_create_shortcut_windowed_SiteA🌑 install_policy_app_tabbed_no_shortcut_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 +install_create_shortcut_windowed_SiteA🌑 install_policy_app_tabbed_no_shortcut_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 +install_omnibox_icon_SiteA🌕 install_policy_app_tabbed_shortcut_SiteA🌓 launch_from_menu_option_SiteA🌑 check_window_created🌑 +install_omnibox_icon_SiteA🌕 install_policy_app_tabbed_shortcut_SiteA🌓 launch_from_launch_icon_SiteA🌑 check_window_created🌑 +install_omnibox_icon_SiteA🌕 install_policy_app_tabbed_shortcut_SiteA🌓 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 +install_omnibox_icon_SiteA🌕 install_policy_app_tabbed_shortcut_SiteA🌓 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 +install_omnibox_icon_SiteA🌕 install_policy_app_tabbed_no_shortcut_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_created🌑 +install_omnibox_icon_SiteA🌕 install_policy_app_tabbed_no_shortcut_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_created🌑 +install_omnibox_icon_SiteA🌕 install_policy_app_tabbed_no_shortcut_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 +install_omnibox_icon_SiteA🌕 install_policy_app_tabbed_no_shortcut_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 +install_menu_option_SiteA🌓 install_policy_app_tabbed_shortcut_SiteA🌓 launch_from_menu_option_SiteA🌑 check_window_created🌑 +install_menu_option_SiteA🌓 install_policy_app_tabbed_shortcut_SiteA🌓 launch_from_launch_icon_SiteA🌑 check_window_created🌑 +install_menu_option_SiteA🌓 install_policy_app_tabbed_shortcut_SiteA🌓 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 +install_menu_option_SiteA🌓 install_policy_app_tabbed_shortcut_SiteA🌓 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 +install_menu_option_SiteA🌓 install_policy_app_tabbed_no_shortcut_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_created🌑 +install_menu_option_SiteA🌓 install_policy_app_tabbed_no_shortcut_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_created🌑 +install_menu_option_SiteA🌓 install_policy_app_tabbed_no_shortcut_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 +install_menu_option_SiteA🌓 install_policy_app_tabbed_no_shortcut_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 +install_create_shortcut_windowed_SiteA🌑 close_pwa🌑 manifest_update_colors_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_color_correct🌑 +install_create_shortcut_windowed_SiteA🌑 close_pwa🌑 manifest_update_colors_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_color_correct🌑 +install_create_shortcut_windowed_SiteA🌑 close_pwa🌑 manifest_update_colors_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_color_correct🌑 +install_create_shortcut_windowed_SiteA🌑 close_pwa🌑 manifest_update_colors_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_color_correct🌑 +install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_colors_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_color_correct🌑 +install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_colors_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_color_correct🌑 +install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_colors_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_color_correct🌑 +install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_colors_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_color_correct🌑 +install_menu_option_SiteA🌓 close_pwa🌕 manifest_update_colors_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_color_correct🌑 +install_menu_option_SiteA🌓 close_pwa🌕 manifest_update_colors_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_color_correct🌑 +install_menu_option_SiteA🌓 close_pwa🌕 manifest_update_colors_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_color_correct🌑 +install_menu_option_SiteA🌓 close_pwa🌕 manifest_update_colors_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_color_correct🌑 +install_create_shortcut_windowed_SiteA🌑 close_pwa🌑 manifest_update_display_browser_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_display_standalone🌑 +install_create_shortcut_windowed_SiteA🌑 close_pwa🌑 manifest_update_display_browser_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_display_standalone🌑 +install_create_shortcut_windowed_SiteA🌑 close_pwa🌑 manifest_update_display_browser_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_display_standalone🌑 +install_create_shortcut_windowed_SiteA🌑 close_pwa🌑 manifest_update_display_browser_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_display_standalone🌑 +install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_display_standalone🌑 +install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_display_standalone🌑 +install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_display_standalone🌑 +install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_display_standalone🌑 +install_menu_option_SiteA🌓 close_pwa🌕 manifest_update_display_browser_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_display_standalone🌑 +install_menu_option_SiteA🌓 close_pwa🌕 manifest_update_display_browser_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_display_standalone🌑 +install_menu_option_SiteA🌓 close_pwa🌕 manifest_update_display_browser_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_display_standalone🌑 +install_menu_option_SiteA🌓 close_pwa🌕 manifest_update_display_browser_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_display_standalone🌑 +install_create_shortcut_windowed_SiteA🌑 close_pwa🌑 manifest_update_display_minimal_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_display_minimal🌑 +install_create_shortcut_windowed_SiteA🌑 close_pwa🌑 manifest_update_display_minimal_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_display_minimal🌑 +install_create_shortcut_windowed_SiteA🌑 close_pwa🌑 manifest_update_display_minimal_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_display_minimal🌑 +install_create_shortcut_windowed_SiteA🌑 close_pwa🌑 manifest_update_display_minimal_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_display_minimal🌑 +install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_display_minimal_SiteA🌕 launch_from_menu_option_SiteA🌑 check_window_display_minimal🌑 +install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_display_minimal_SiteA🌕 launch_from_launch_icon_SiteA🌑 check_window_display_minimal🌑 +install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_display_minimal_SiteA🌕 launch_from_chrome_apps_SiteA🌑 check_window_display_minimal🌑 +install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_display_minimal_SiteA🌕 launch_from_platform_shortcut_SiteA🌑 check_window_display_minimal🌑 +install_menu_option_SiteA🌓 close_pwa🌕 manifest_update_display_minimal_SiteA🌕 launch_from_menu_option_SiteA🌑 check_window_display_minimal🌑 +install_menu_option_SiteA🌓 close_pwa🌕 manifest_update_display_minimal_SiteA🌕 launch_from_launch_icon_SiteA🌑 check_window_display_minimal🌑 +install_menu_option_SiteA🌓 close_pwa🌕 manifest_update_display_minimal_SiteA🌕 launch_from_chrome_apps_SiteA🌑 check_window_display_minimal🌑 +install_menu_option_SiteA🌓 close_pwa🌕 manifest_update_display_minimal_SiteA🌕 launch_from_platform_shortcut_SiteA🌑 check_window_display_minimal🌑 +install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 launch_from_menu_option_SiteA🌑 check_tab_created🌑 +install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 +install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 +install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 +install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 launch_from_menu_option_SiteA🌑 check_tab_created🌑 +install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 +install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 +install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 +install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 launch_from_menu_option_SiteA🌑 check_tab_created🌑 +install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 +install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 +install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 +install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_created🌑 +install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_created🌑 +install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 +install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 install_locally_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 +install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 install_locally_SiteA🌓 launch_from_menu_option_SiteA🌑 check_window_created🌑 +install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 install_locally_SiteA🌓 launch_from_launch_icon_SiteA🌑 check_window_created🌑 +install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 install_locally_SiteA🌓 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 +install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 install_locally_SiteA🌓 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 +install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 install_locally_SiteA🌓 launch_from_menu_option_SiteA🌑 check_window_created🌑 +install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 install_locally_SiteA🌓 launch_from_launch_icon_SiteA🌑 check_window_created🌑 +install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 install_locally_SiteA🌓 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 +install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 install_locally_SiteA🌓 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 +install_create_shortcut_tabbed_SiteA🌑 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_menu_option_SiteA🌑 check_tab_created🌑 +install_create_shortcut_tabbed_SiteA🌑 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 +install_create_shortcut_tabbed_SiteA🌑 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 +install_create_shortcut_tabbed_SiteA🌑 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_menu_option_SiteA🌑 check_tab_created🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_menu_option_SiteA🌑 check_tab_created🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 +install_create_shortcut_tabbed_SiteA🌑 set_open_in_window_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_created🌑 +install_create_shortcut_tabbed_SiteA🌑 set_open_in_window_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_created🌑 +install_create_shortcut_tabbed_SiteA🌑 set_open_in_window_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 +install_create_shortcut_tabbed_SiteA🌑 set_open_in_window_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 set_open_in_window_SiteA🌓 launch_from_menu_option_SiteA🌑 check_window_created🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 set_open_in_window_SiteA🌓 launch_from_launch_icon_SiteA🌑 check_window_created🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 set_open_in_window_SiteA🌓 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 set_open_in_window_SiteA🌓 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 set_open_in_window_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_created🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 set_open_in_window_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_created🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 set_open_in_window_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 set_open_in_window_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 +install_create_shortcut_windowed_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_created🌑 +install_create_shortcut_windowed_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_created🌑 +install_create_shortcut_windowed_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 +install_create_shortcut_windowed_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 +install_omnibox_icon_SiteA🌕 launch_from_menu_option_SiteA🌑 check_window_created🌑 +install_omnibox_icon_SiteA🌕 launch_from_launch_icon_SiteA🌑 check_window_created🌑 +install_omnibox_icon_SiteA🌕 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 +install_omnibox_icon_SiteA🌕 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 +install_policy_app_windowed_no_shortcut_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_created🌑 +install_policy_app_windowed_no_shortcut_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_created🌑 +install_policy_app_windowed_no_shortcut_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 +install_policy_app_windowed_no_shortcut_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 +install_policy_app_windowed_shortcut_SiteA🌓 launch_from_menu_option_SiteA🌑 check_window_created🌑 +install_policy_app_windowed_shortcut_SiteA🌓 launch_from_launch_icon_SiteA🌑 check_window_created🌑 +install_policy_app_windowed_shortcut_SiteA🌓 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 +install_policy_app_windowed_shortcut_SiteA🌓 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 +install_menu_option_SiteA🌓 launch_from_menu_option_SiteA🌑 check_window_created🌑 +install_menu_option_SiteA🌓 launch_from_launch_icon_SiteA🌑 check_window_created🌑 +install_menu_option_SiteA🌓 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 +install_menu_option_SiteA🌓 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 +install_create_shortcut_windowed_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_display_standalone🌑 +install_create_shortcut_windowed_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_display_standalone🌑 +install_create_shortcut_windowed_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_display_standalone🌑 +install_create_shortcut_windowed_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_display_standalone🌑 +install_omnibox_icon_SiteA🌕 launch_from_menu_option_SiteA🌑 check_window_display_standalone🌑 +install_omnibox_icon_SiteA🌕 launch_from_launch_icon_SiteA🌑 check_window_display_standalone🌑 +install_omnibox_icon_SiteA🌕 launch_from_chrome_apps_SiteA🌑 check_window_display_standalone🌑 +install_omnibox_icon_SiteA🌕 launch_from_platform_shortcut_SiteA🌑 check_window_display_standalone🌑 +install_policy_app_windowed_no_shortcut_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_display_standalone🌑 +install_policy_app_windowed_no_shortcut_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_display_standalone🌑 +install_policy_app_windowed_no_shortcut_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_display_standalone🌑 +install_policy_app_windowed_no_shortcut_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_display_standalone🌑 +install_policy_app_windowed_shortcut_SiteA🌓 launch_from_menu_option_SiteA🌑 check_window_display_standalone🌑 +install_policy_app_windowed_shortcut_SiteA🌓 launch_from_launch_icon_SiteA🌑 check_window_display_standalone🌑 +install_policy_app_windowed_shortcut_SiteA🌓 launch_from_chrome_apps_SiteA🌑 check_window_display_standalone🌑 +install_policy_app_windowed_shortcut_SiteA🌓 launch_from_platform_shortcut_SiteA🌑 check_window_display_standalone🌑 +install_menu_option_SiteA🌓 launch_from_menu_option_SiteA🌑 check_window_display_standalone🌑 +install_menu_option_SiteA🌓 launch_from_launch_icon_SiteA🌑 check_window_display_standalone🌑 +install_menu_option_SiteA🌓 launch_from_chrome_apps_SiteA🌑 check_window_display_standalone🌑 +install_menu_option_SiteA🌓 launch_from_platform_shortcut_SiteA🌑 check_window_display_standalone🌑 +install_create_shortcut_windowed_SiteA🌑 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_created🌑 +install_create_shortcut_windowed_SiteA🌑 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_created🌑 +install_create_shortcut_windowed_SiteA🌑 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 +install_create_shortcut_windowed_SiteA🌑 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 +install_omnibox_icon_SiteA🌕 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_created🌑 +install_omnibox_icon_SiteA🌕 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_created🌑 +install_omnibox_icon_SiteA🌕 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 +install_omnibox_icon_SiteA🌕 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 +install_policy_app_windowed_no_shortcut_SiteA🌑 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_created🌑 +install_policy_app_windowed_no_shortcut_SiteA🌑 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_created🌑 +install_policy_app_windowed_no_shortcut_SiteA🌑 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 +install_policy_app_windowed_no_shortcut_SiteA🌑 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 +install_policy_app_windowed_shortcut_SiteA🌓 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_created🌑 +install_policy_app_windowed_shortcut_SiteA🌓 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_created🌑 +install_policy_app_windowed_shortcut_SiteA🌓 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 +install_policy_app_windowed_shortcut_SiteA🌓 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 +install_menu_option_SiteA🌓 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_created🌑 +install_menu_option_SiteA🌓 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_created🌑 +install_menu_option_SiteA🌓 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 +install_menu_option_SiteA🌓 delete_platform_shortcut_SiteA🌑 create_shortcuts_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 +install_create_shortcut_windowed_SiteA🌑 set_open_in_tab_SiteA🌑 launch_from_menu_option_SiteA🌑 check_tab_created🌑 +install_create_shortcut_windowed_SiteA🌑 set_open_in_tab_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 +install_create_shortcut_windowed_SiteA🌑 set_open_in_tab_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 +install_create_shortcut_windowed_SiteA🌑 set_open_in_tab_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 +install_omnibox_icon_SiteA🌕 set_open_in_tab_SiteA🌓 launch_from_menu_option_SiteA🌑 check_tab_created🌑 +install_omnibox_icon_SiteA🌕 set_open_in_tab_SiteA🌓 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 +install_omnibox_icon_SiteA🌕 set_open_in_tab_SiteA🌓 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 +install_omnibox_icon_SiteA🌕 set_open_in_tab_SiteA🌓 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 +install_policy_app_windowed_no_shortcut_SiteA🌑 set_open_in_tab_SiteA🌑 launch_from_menu_option_SiteA🌑 check_tab_created🌑 +install_policy_app_windowed_no_shortcut_SiteA🌑 set_open_in_tab_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 +install_policy_app_windowed_no_shortcut_SiteA🌑 set_open_in_tab_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 +install_policy_app_windowed_no_shortcut_SiteA🌑 set_open_in_tab_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 +install_policy_app_windowed_shortcut_SiteA🌓 set_open_in_tab_SiteA🌓 launch_from_menu_option_SiteA🌑 check_tab_created🌑 +install_policy_app_windowed_shortcut_SiteA🌓 set_open_in_tab_SiteA🌓 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 +install_policy_app_windowed_shortcut_SiteA🌓 set_open_in_tab_SiteA🌓 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 +install_policy_app_windowed_shortcut_SiteA🌓 set_open_in_tab_SiteA🌓 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 +install_menu_option_SiteA🌓 set_open_in_tab_SiteA🌓 launch_from_menu_option_SiteA🌑 check_tab_created🌑 +install_menu_option_SiteA🌓 set_open_in_tab_SiteA🌓 launch_from_launch_icon_SiteA🌑 check_tab_created🌑 +install_menu_option_SiteA🌓 set_open_in_tab_SiteA🌓 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 +install_menu_option_SiteA🌓 set_open_in_tab_SiteA🌓 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 +install_create_shortcut_windowed_SiteB🌑 launch_from_menu_option_SiteB🌑 check_window_display_minimal🌑 +install_create_shortcut_windowed_SiteB🌑 launch_from_launch_icon_SiteB🌑 check_window_display_minimal🌑 +install_create_shortcut_windowed_SiteB🌑 launch_from_chrome_apps_SiteB🌑 check_window_display_minimal🌑 +install_create_shortcut_windowed_SiteB🌑 launch_from_platform_shortcut_SiteB🌑 check_window_display_minimal🌑 +install_omnibox_icon_SiteB🌕 launch_from_menu_option_SiteB🌑 check_window_display_minimal🌑 +install_omnibox_icon_SiteB🌕 launch_from_launch_icon_SiteB🌑 check_window_display_minimal🌑 +install_omnibox_icon_SiteB🌕 launch_from_chrome_apps_SiteB🌑 check_window_display_minimal🌑 +install_omnibox_icon_SiteB🌕 launch_from_platform_shortcut_SiteB🌑 check_window_display_minimal🌑 +install_policy_app_windowed_no_shortcut_SiteB🌑 launch_from_menu_option_SiteB🌑 check_window_display_minimal🌑 +install_policy_app_windowed_no_shortcut_SiteB🌑 launch_from_launch_icon_SiteB🌑 check_window_display_minimal🌑 +install_policy_app_windowed_no_shortcut_SiteB🌑 launch_from_chrome_apps_SiteB🌑 check_window_display_minimal🌑 +install_policy_app_windowed_no_shortcut_SiteB🌑 launch_from_platform_shortcut_SiteB🌑 check_window_display_minimal🌑 +install_policy_app_windowed_shortcut_SiteB🌓 launch_from_menu_option_SiteB🌑 check_window_display_minimal🌑 +install_policy_app_windowed_shortcut_SiteB🌓 launch_from_launch_icon_SiteB🌑 check_window_display_minimal🌑 +install_policy_app_windowed_shortcut_SiteB🌓 launch_from_chrome_apps_SiteB🌑 check_window_display_minimal🌑 +install_policy_app_windowed_shortcut_SiteB🌓 launch_from_platform_shortcut_SiteB🌑 check_window_display_minimal🌑 +install_menu_option_SiteB🌓 launch_from_menu_option_SiteB🌑 check_window_display_minimal🌑 +install_menu_option_SiteB🌓 launch_from_launch_icon_SiteB🌑 check_window_display_minimal🌑 +install_menu_option_SiteB🌓 launch_from_chrome_apps_SiteB🌑 check_window_display_minimal🌑 +install_menu_option_SiteB🌓 launch_from_platform_shortcut_SiteB🌑 check_window_display_minimal🌑 +install_create_shortcut_tabbed_SiteC🌑 launch_from_menu_option_SiteC🌑 check_tab_created🌑 +install_create_shortcut_tabbed_SiteC🌑 launch_from_launch_icon_SiteC🌑 check_tab_created🌑 +install_create_shortcut_tabbed_SiteC🌑 launch_from_chrome_apps_SiteC🌑 check_tab_created🌑 +install_create_shortcut_tabbed_SiteC🌑 launch_from_platform_shortcut_SiteC🌑 check_tab_created🌑 +install_policy_app_tabbed_shortcut_SiteC🌓 launch_from_menu_option_SiteC🌑 check_tab_created🌑 +install_policy_app_tabbed_shortcut_SiteC🌓 launch_from_launch_icon_SiteC🌑 check_tab_created🌑 +install_policy_app_tabbed_shortcut_SiteC🌓 launch_from_chrome_apps_SiteC🌑 check_tab_created🌑 +install_policy_app_tabbed_shortcut_SiteC🌓 launch_from_platform_shortcut_SiteC🌑 check_tab_created🌑 +install_policy_app_tabbed_no_shortcut_SiteC🌑 launch_from_menu_option_SiteC🌑 check_tab_created🌑 +install_policy_app_tabbed_no_shortcut_SiteC🌑 launch_from_launch_icon_SiteC🌑 check_tab_created🌑 +install_policy_app_tabbed_no_shortcut_SiteC🌑 launch_from_chrome_apps_SiteC🌑 check_tab_created🌑 +install_policy_app_tabbed_no_shortcut_SiteC🌑 launch_from_platform_shortcut_SiteC🌑 check_tab_created🌑 +install_create_shortcut_windowed_SiteC🌑 launch_from_menu_option_SiteC🌑 check_window_created🌑 +install_create_shortcut_windowed_SiteC🌑 launch_from_launch_icon_SiteC🌑 check_window_created🌑 +install_create_shortcut_windowed_SiteC🌑 launch_from_chrome_apps_SiteC🌑 check_window_created🌑 +install_create_shortcut_windowed_SiteC🌑 launch_from_platform_shortcut_SiteC🌑 check_window_created🌑 +install_policy_app_windowed_no_shortcut_SiteC🌑 launch_from_menu_option_SiteC🌑 check_window_created🌑 +install_policy_app_windowed_no_shortcut_SiteC🌑 launch_from_launch_icon_SiteC🌑 check_window_created🌑 +install_policy_app_windowed_no_shortcut_SiteC🌑 launch_from_chrome_apps_SiteC🌑 check_window_created🌑 +install_policy_app_windowed_no_shortcut_SiteC🌑 launch_from_platform_shortcut_SiteC🌑 check_window_created🌑 +install_policy_app_windowed_shortcut_SiteC🌓 launch_from_menu_option_SiteC🌑 check_window_created🌑 +install_policy_app_windowed_shortcut_SiteC🌓 launch_from_launch_icon_SiteC🌑 check_window_created🌑 +install_policy_app_windowed_shortcut_SiteC🌓 launch_from_chrome_apps_SiteC🌑 check_window_created🌑 +install_policy_app_windowed_shortcut_SiteC🌓 launch_from_platform_shortcut_SiteC🌑 check_window_created🌑 +install_create_shortcut_windowed_SiteA🌑 close_pwa🌑 manifest_update_icons_SiteA🌑 check_app_in_list_icon_correct_SiteA🌑 +install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_icons_SiteA🌑 check_app_in_list_icon_correct_SiteA🌑 +install_menu_option_SiteA🌓 close_pwa🌕 manifest_update_icons_SiteA🌑 check_app_in_list_icon_correct_SiteA🌑 +install_create_shortcut_windowed_SiteA🌑 close_pwa🌑 manifest_update_icons_SiteA🌑 check_platform_shortcut_icon_correct_SiteA🌑 +install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_icons_SiteA🌑 check_platform_shortcut_icon_correct_SiteA🌑 +install_menu_option_SiteA🌓 close_pwa🌕 manifest_update_icons_SiteA🌑 check_platform_shortcut_icon_correct_SiteA🌑 +install_create_shortcut_windowed_SiteAFoo🌑 manifest_update_scope_site_a_foo_to_SiteA🌑 close_pwa🌑 launch_from_platform_shortcut_SiteAFoo🌑 close_pwa🌑 navigate_browser_SiteA🌑 check_install_icon_not_shown🌑 +install_omnibox_icon_SiteAFoo🌕 manifest_update_scope_site_a_foo_to_SiteA🌑 close_pwa🌑 launch_from_platform_shortcut_SiteAFoo🌑 close_pwa🌑 navigate_browser_SiteA🌑 check_install_icon_not_shown🌑 +install_menu_option_SiteAFoo🌓 manifest_update_scope_site_a_foo_to_SiteA🌑 close_pwa🌑 launch_from_platform_shortcut_SiteAFoo🌑 close_pwa🌑 navigate_browser_SiteA🌑 check_install_icon_not_shown🌑 +install_create_shortcut_windowed_SiteAFoo🌑 manifest_update_scope_site_a_foo_to_SiteA🌑 close_pwa🌑 launch_from_platform_shortcut_SiteAFoo🌑 close_pwa🌑 navigate_browser_SiteA🌑 check_launch_icon_shown🌑 +install_omnibox_icon_SiteAFoo🌕 manifest_update_scope_site_a_foo_to_SiteA🌑 close_pwa🌑 launch_from_platform_shortcut_SiteAFoo🌑 close_pwa🌑 navigate_browser_SiteA🌑 check_launch_icon_shown🌑 +install_menu_option_SiteAFoo🌓 manifest_update_scope_site_a_foo_to_SiteA🌑 close_pwa🌑 launch_from_platform_shortcut_SiteAFoo🌑 close_pwa🌑 navigate_browser_SiteA🌑 check_launch_icon_shown🌑 +install_create_shortcut_windowed_SiteAFoo🌑 close_pwa🌑 manifest_update_scope_site_a_foo_to_SiteA🌑 navigate_browser_SiteABar🌑 check_install_icon_not_shown🌑 +install_omnibox_icon_SiteAFoo🌕 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteA🌑 navigate_browser_SiteABar🌑 check_install_icon_not_shown🌑 +install_menu_option_SiteAFoo🌓 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteA🌑 navigate_browser_SiteABar🌑 check_install_icon_not_shown🌑 +install_create_shortcut_windowed_SiteAFoo🌑 close_pwa🌑 manifest_update_scope_site_a_foo_to_SiteA🌑 navigate_browser_SiteABar🌑 check_launch_icon_shown🌑 +install_omnibox_icon_SiteAFoo🌕 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteA🌑 navigate_browser_SiteABar🌑 check_launch_icon_shown🌑 +install_menu_option_SiteAFoo🌓 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteA🌑 navigate_browser_SiteABar🌑 check_launch_icon_shown🌑 +install_create_shortcut_windowed_SiteAFoo🌑 navigate_browser_SiteABar🌑 check_install_icon_shown🌑 +install_omnibox_icon_SiteAFoo🌕 navigate_browser_SiteABar🌕 check_install_icon_shown🌕 +install_policy_app_windowed_no_shortcut_SiteAFoo🌑 navigate_browser_SiteABar🌑 check_install_icon_shown🌑 +install_policy_app_windowed_shortcut_SiteAFoo🌓 navigate_browser_SiteABar🌕 check_install_icon_shown🌕 +install_menu_option_SiteAFoo🌓 navigate_browser_SiteABar🌕 check_install_icon_shown🌕 +install_create_shortcut_windowed_SiteAFoo🌑 navigate_browser_SiteABar🌑 check_launch_icon_not_shown🌑 +install_omnibox_icon_SiteAFoo🌕 navigate_browser_SiteABar🌕 check_launch_icon_not_shown🌕 +install_policy_app_windowed_no_shortcut_SiteAFoo🌑 navigate_browser_SiteABar🌑 check_launch_icon_not_shown🌑 +install_policy_app_windowed_shortcut_SiteAFoo🌓 navigate_browser_SiteABar🌕 check_launch_icon_not_shown🌕 +install_menu_option_SiteAFoo🌓 navigate_browser_SiteABar🌕 check_launch_icon_not_shown🌕 +install_create_shortcut_windowed_SiteAFoo🌑 close_pwa🌑 manifest_update_scope_site_a_foo_to_SiteA🌑 navigate_browser_SiteAFoo🌑 check_install_icon_not_shown🌑 +install_omnibox_icon_SiteAFoo🌕 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteA🌑 navigate_browser_SiteAFoo🌑 check_install_icon_not_shown🌑 +install_menu_option_SiteAFoo🌓 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteA🌑 navigate_browser_SiteAFoo🌑 check_install_icon_not_shown🌑 +install_create_shortcut_windowed_SiteAFoo🌑 close_pwa🌑 manifest_update_scope_site_a_foo_to_SiteA🌑 navigate_browser_SiteAFoo🌑 check_launch_icon_shown🌑 +install_omnibox_icon_SiteAFoo🌕 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteA🌑 navigate_browser_SiteAFoo🌑 check_launch_icon_shown🌑 +install_menu_option_SiteAFoo🌓 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteA🌑 navigate_browser_SiteAFoo🌑 check_launch_icon_shown🌑 +install_create_shortcut_windowed_SiteA🌑 navigate_browser_SiteAFoo🌑 check_install_icon_not_shown🌑 +install_omnibox_icon_SiteA🌕 navigate_browser_SiteAFoo🌕 check_install_icon_not_shown🌕 +install_policy_app_windowed_no_shortcut_SiteA🌑 navigate_browser_SiteAFoo🌑 check_install_icon_not_shown🌑 +install_policy_app_windowed_shortcut_SiteA🌓 navigate_browser_SiteAFoo🌕 check_install_icon_not_shown🌕 +install_menu_option_SiteA🌓 navigate_browser_SiteAFoo🌕 check_install_icon_not_shown🌕 +install_create_shortcut_windowed_SiteA🌑 navigate_browser_SiteAFoo🌑 check_launch_icon_shown🌑 +install_omnibox_icon_SiteA🌕 navigate_browser_SiteAFoo🌕 check_launch_icon_shown🌕 +install_policy_app_windowed_no_shortcut_SiteA🌑 navigate_browser_SiteAFoo🌑 check_launch_icon_shown🌑 +install_policy_app_windowed_shortcut_SiteA🌓 navigate_browser_SiteAFoo🌕 check_launch_icon_shown🌕 +install_menu_option_SiteA🌓 navigate_browser_SiteAFoo🌕 check_launch_icon_shown🌕 +navigate_browser_SiteAFoo🌕 check_install_icon_shown🌕 +switch_incognito_profile🌑 navigate_browser_SiteA🌑 check_create_shortcut_not_shown🌑 +navigate_browser_SiteA🌕 check_app_not_in_list_SiteA🌕 +navigate_browser_SiteA🌕 check_create_shortcut_shown🌑 +navigate_browser_SiteA🌕 check_platform_shortcut_not_exists_SiteA🌑 +install_create_shortcut_windowed_SiteA🌑 navigate_browser_SiteB🌑 check_install_icon_shown🌑 +install_omnibox_icon_SiteA🌕 navigate_browser_SiteB🌕 check_install_icon_shown🌕 +install_menu_option_SiteA🌓 navigate_browser_SiteB🌕 check_install_icon_shown🌕 +install_create_shortcut_windowed_SiteA🌑 navigate_browser_SiteB🌑 check_launch_icon_not_shown🌑 +install_omnibox_icon_SiteA🌕 navigate_browser_SiteB🌕 check_launch_icon_not_shown🌕 +install_menu_option_SiteA🌓 navigate_browser_SiteB🌕 check_launch_icon_not_shown🌕 +switch_incognito_profile🌑 navigate_browser_SiteC🌑 check_create_shortcut_not_shown🌑 +navigate_browser_SiteC🌕 check_app_not_in_list_SiteA🌕 +navigate_browser_SiteC🌕 check_create_shortcut_shown🌑 +navigate_browser_SiteC🌕 check_install_icon_not_shown🌕 +navigate_browser_SiteC🌕 check_platform_shortcut_not_exists_SiteA🌑 +navigate_crashed_url🌑 check_create_shortcut_not_shown🌑 +navigate_crashed_url🌑 check_install_icon_not_shown🌑 +navigate_notfound_url🌑 check_create_shortcut_not_shown🌑 +navigate_notfound_url🌑 check_install_icon_not_shown🌑 +install_create_shortcut_windowed_SiteAFoo🌑 close_pwa🌑 manifest_update_scope_site_a_foo_to_SiteA🌑 launch_from_menu_option_SiteAFoo🌑 navigate_pwa_site_a_foo_to_SiteABar🌑 check_no_toolbar🌑 +install_create_shortcut_windowed_SiteAFoo🌑 close_pwa🌑 manifest_update_scope_site_a_foo_to_SiteA🌑 launch_from_launch_icon_SiteAFoo🌑 navigate_pwa_site_a_foo_to_SiteABar🌑 check_no_toolbar🌑 +install_create_shortcut_windowed_SiteAFoo🌑 close_pwa🌑 manifest_update_scope_site_a_foo_to_SiteA🌑 launch_from_chrome_apps_SiteAFoo🌑 navigate_pwa_site_a_foo_to_SiteABar🌑 check_no_toolbar🌑 +install_create_shortcut_windowed_SiteAFoo🌑 close_pwa🌑 manifest_update_scope_site_a_foo_to_SiteA🌑 launch_from_platform_shortcut_SiteAFoo🌑 navigate_pwa_site_a_foo_to_SiteABar🌑 check_no_toolbar🌑 +install_omnibox_icon_SiteAFoo🌕 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteA🌑 launch_from_menu_option_SiteAFoo🌑 navigate_pwa_site_a_foo_to_SiteABar🌑 check_no_toolbar🌑 +install_omnibox_icon_SiteAFoo🌕 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteA🌑 launch_from_launch_icon_SiteAFoo🌑 navigate_pwa_site_a_foo_to_SiteABar🌑 check_no_toolbar🌑 +install_omnibox_icon_SiteAFoo🌕 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteA🌑 launch_from_chrome_apps_SiteAFoo🌑 navigate_pwa_site_a_foo_to_SiteABar🌑 check_no_toolbar🌑 +install_omnibox_icon_SiteAFoo🌕 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteA🌑 launch_from_platform_shortcut_SiteAFoo🌑 navigate_pwa_site_a_foo_to_SiteABar🌑 check_no_toolbar🌑 +install_menu_option_SiteAFoo🌓 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteA🌑 launch_from_menu_option_SiteAFoo🌑 navigate_pwa_site_a_foo_to_SiteABar🌑 check_no_toolbar🌑 +install_menu_option_SiteAFoo🌓 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteA🌑 launch_from_launch_icon_SiteAFoo🌑 navigate_pwa_site_a_foo_to_SiteABar🌑 check_no_toolbar🌑 +install_menu_option_SiteAFoo🌓 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteA🌑 launch_from_chrome_apps_SiteAFoo🌑 navigate_pwa_site_a_foo_to_SiteABar🌑 check_no_toolbar🌑 +install_menu_option_SiteAFoo🌓 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteA🌑 launch_from_platform_shortcut_SiteAFoo🌑 navigate_pwa_site_a_foo_to_SiteABar🌑 check_no_toolbar🌑 +install_create_shortcut_windowed_SiteA🌑 navigate_pwa_site_a_to_SiteB🌑 check_toolbar🌑 +install_omnibox_icon_SiteA🌕 navigate_pwa_site_a_to_SiteB🌑 check_toolbar🌑 +install_menu_option_SiteA🌓 navigate_pwa_site_a_to_SiteB🌑 check_toolbar🌑 +install_create_shortcut_windowed_SiteA🌑 navigate_pwa_site_a_to_SiteB🌑 check_window_title_is_SiteA🌑 +install_omnibox_icon_SiteA🌕 navigate_pwa_site_a_to_SiteB🌑 check_window_title_is_SiteA🌑 +install_menu_option_SiteA🌓 navigate_pwa_site_a_to_SiteB🌑 check_window_title_is_SiteA🌑 +install_create_shortcut_windowed_SiteA🌑 open_in_chrome🌑 check_tab_created🌑 +install_omnibox_icon_SiteA🌕 open_in_chrome🌑 check_tab_created🌑 +install_menu_option_SiteA🌓 open_in_chrome🌑 check_tab_created🌑 +install_create_shortcut_windowed_SiteA🌑 navigate_pwa_site_a_to_SiteB🌑 open_in_chrome🌑 check_tab_created🌑 +install_omnibox_icon_SiteA🌕 navigate_pwa_site_a_to_SiteB🌑 open_in_chrome🌑 check_tab_created🌑 +install_menu_option_SiteA🌓 navigate_pwa_site_a_to_SiteB🌑 open_in_chrome🌑 check_tab_created🌑 +install_create_shortcut_tabbed_SiteA🌑 install_policy_app_windowed_no_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_app_in_list_tabbed_SiteA🌑 +install_create_shortcut_tabbed_SiteA🌑 install_policy_app_tabbed_no_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_app_in_list_tabbed_SiteA🌑 +install_create_shortcut_tabbed_SiteA🌑 install_policy_app_windowed_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_app_in_list_tabbed_SiteA🌑 +install_create_shortcut_tabbed_SiteA🌑 install_policy_app_tabbed_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_app_in_list_tabbed_SiteA🌑 +install_create_shortcut_tabbed_SiteA🌑 install_policy_app_windowed_no_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 +install_create_shortcut_tabbed_SiteA🌑 install_policy_app_tabbed_no_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 +install_create_shortcut_tabbed_SiteA🌑 install_policy_app_windowed_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 +install_create_shortcut_tabbed_SiteA🌑 install_policy_app_tabbed_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 +install_create_shortcut_windowed_SiteA🌑 install_policy_app_windowed_no_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_app_in_list_windowed_SiteA🌑 +install_create_shortcut_windowed_SiteA🌑 install_policy_app_tabbed_no_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_app_in_list_windowed_SiteA🌑 +install_create_shortcut_windowed_SiteA🌑 install_policy_app_windowed_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_app_in_list_windowed_SiteA🌑 +install_create_shortcut_windowed_SiteA🌑 install_policy_app_tabbed_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_app_in_list_windowed_SiteA🌑 +install_omnibox_icon_SiteA🌕 install_policy_app_windowed_no_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_app_in_list_windowed_SiteA🌑 +install_omnibox_icon_SiteA🌕 install_policy_app_tabbed_no_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_app_in_list_windowed_SiteA🌑 +install_omnibox_icon_SiteA🌕 install_policy_app_windowed_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_app_in_list_windowed_SiteA🌑 +install_omnibox_icon_SiteA🌕 install_policy_app_tabbed_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_app_in_list_windowed_SiteA🌑 +install_menu_option_SiteA🌓 install_policy_app_windowed_no_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_app_in_list_windowed_SiteA🌑 +install_menu_option_SiteA🌓 install_policy_app_tabbed_no_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_app_in_list_windowed_SiteA🌑 +install_menu_option_SiteA🌓 install_policy_app_windowed_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_app_in_list_windowed_SiteA🌑 +install_menu_option_SiteA🌓 install_policy_app_tabbed_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_app_in_list_windowed_SiteA🌑 +install_create_shortcut_windowed_SiteA🌑 install_policy_app_windowed_no_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 +install_create_shortcut_windowed_SiteA🌑 install_policy_app_tabbed_no_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 +install_create_shortcut_windowed_SiteA🌑 install_policy_app_windowed_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 +install_create_shortcut_windowed_SiteA🌑 install_policy_app_tabbed_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 +install_omnibox_icon_SiteA🌕 install_policy_app_windowed_no_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 +install_omnibox_icon_SiteA🌕 install_policy_app_tabbed_no_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 +install_omnibox_icon_SiteA🌕 install_policy_app_windowed_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_platform_shortcut_exists_SiteA🌑 +install_omnibox_icon_SiteA🌕 install_policy_app_tabbed_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_platform_shortcut_exists_SiteA🌑 +install_menu_option_SiteA🌓 install_policy_app_windowed_no_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 +install_menu_option_SiteA🌓 install_policy_app_tabbed_no_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 +install_menu_option_SiteA🌓 install_policy_app_windowed_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_platform_shortcut_exists_SiteA🌑 +install_menu_option_SiteA🌓 install_policy_app_tabbed_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_platform_shortcut_exists_SiteA🌑 +install_policy_app_windowed_no_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_app_not_in_list_SiteA🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_app_not_in_list_SiteA🌑 +install_policy_app_windowed_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_app_not_in_list_SiteA🌕 +install_policy_app_tabbed_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_app_not_in_list_SiteA🌕 +install_policy_app_tabbed_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 navigate_browser_SiteA🌕 check_install_icon_shown🌕 +install_policy_app_tabbed_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 navigate_browser_SiteA🌕 check_launch_icon_not_shown🌕 +install_policy_app_windowed_no_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_platform_shortcut_not_exists_SiteA🌑 check_app_not_in_list_SiteA🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 uninstall_policy_app_SiteA🌑 check_platform_shortcut_not_exists_SiteA🌑 check_app_not_in_list_SiteA🌑 +install_policy_app_windowed_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_platform_shortcut_not_exists_SiteA🌑 check_app_not_in_list_SiteA🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_platform_shortcut_not_exists_SiteA🌑 check_app_not_in_list_SiteA🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 install_create_shortcut_windowed_SiteA🌑 uninstall_policy_app_SiteA🌑 check_app_in_list_windowed_SiteA🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 install_omnibox_icon_SiteA🌕 uninstall_policy_app_SiteA🌕 check_app_in_list_windowed_SiteA🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 install_menu_option_SiteA🌓 uninstall_policy_app_SiteA🌕 check_app_in_list_windowed_SiteA🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 install_create_shortcut_windowed_SiteA🌑 uninstall_policy_app_SiteA🌑 check_app_in_list_windowed_SiteA🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 install_omnibox_icon_SiteA🌑 uninstall_policy_app_SiteA🌑 check_app_in_list_windowed_SiteA🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 install_menu_option_SiteA🌑 uninstall_policy_app_SiteA🌑 check_app_in_list_windowed_SiteA🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 install_create_shortcut_windowed_SiteA🌑 uninstall_policy_app_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 install_omnibox_icon_SiteA🌕 uninstall_policy_app_SiteA🌕 check_platform_shortcut_exists_SiteA🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 install_menu_option_SiteA🌓 uninstall_policy_app_SiteA🌕 check_platform_shortcut_exists_SiteA🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 install_create_shortcut_windowed_SiteA🌑 uninstall_policy_app_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 install_omnibox_icon_SiteA🌑 uninstall_policy_app_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌑 install_menu_option_SiteA🌑 uninstall_policy_app_SiteA🌑 check_platform_shortcut_exists_SiteA🌑 +install_create_shortcut_windowed_SiteA🌑 set_app_badge_SiteA🌑 check_app_badge_has_value_SiteA🌑 +install_omnibox_icon_SiteA🌕 set_app_badge_SiteA🌑 check_app_badge_has_value_SiteA🌑 +install_menu_option_SiteA🌓 set_app_badge_SiteA🌑 check_app_badge_has_value_SiteA🌑 +navigate_browser_SiteA🌕 set_app_badge_SiteA🌑 check_platform_shortcut_not_exists_SiteA🌑 +install_create_shortcut_windowed_SiteA🌑 set_open_in_tab_SiteA🌑 check_app_in_list_tabbed_SiteA🌑 +install_omnibox_icon_SiteA🌕 set_open_in_tab_SiteA🌓 check_app_in_list_tabbed_SiteA🌑 +install_menu_option_SiteA🌓 set_open_in_tab_SiteA🌓 check_app_in_list_tabbed_SiteA🌑 +install_create_shortcut_windowed_SiteA🌑 set_open_in_tab_SiteA🌑 navigate_browser_SiteA🌑 check_install_icon_shown🌑 +install_omnibox_icon_SiteA🌕 set_open_in_tab_SiteA🌓 navigate_browser_SiteA🌕 check_install_icon_shown🌕 +install_menu_option_SiteA🌓 set_open_in_tab_SiteA🌓 navigate_browser_SiteA🌕 check_install_icon_shown🌕 +install_create_shortcut_tabbed_SiteA🌑 set_open_in_window_SiteA🌑 check_app_in_list_windowed_SiteA🌑 +install_create_shortcut_tabbed_SiteA🌑 set_open_in_window_SiteA🌑 navigate_browser_SiteA🌑 check_install_icon_not_shown🌑 +install_create_shortcut_tabbed_SiteA🌑 set_open_in_window_SiteA🌑 navigate_browser_SiteA🌑 check_launch_icon_shown🌑 +install_create_shortcut_windowed_SiteA🌑 switch_incognito_profile🌑 navigate_browser_SiteA🌑 check_launch_icon_not_shown🌑 +install_omnibox_icon_SiteA🌕 switch_incognito_profile🌑 navigate_browser_SiteA🌑 check_launch_icon_not_shown🌑 +install_menu_option_SiteA🌓 switch_incognito_profile🌑 navigate_browser_SiteA🌑 check_launch_icon_not_shown🌑 +switch_incognito_profile🌑 navigate_browser_SiteA🌑 check_install_icon_not_shown🌑 +install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 check_app_in_list_not_locally_installed_SiteA🌑 +install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 check_app_in_list_not_locally_installed_SiteA🌓 +install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 check_app_in_list_not_locally_installed_SiteA🌓 +install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 check_app_in_list_not_locally_installed_SiteA🌑 +install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 check_platform_shortcut_not_exists_SiteA🌑 +install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 check_platform_shortcut_not_exists_SiteA🌑 +install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 check_platform_shortcut_not_exists_SiteA🌑 +install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 check_platform_shortcut_not_exists_SiteA🌑 +install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 navigate_browser_SiteA🌑 check_install_icon_shown🌑 +install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 navigate_browser_SiteA🌕 check_install_icon_shown🌕 +install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 navigate_browser_SiteA🌕 check_install_icon_shown🌕 +install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 navigate_browser_SiteA🌑 check_launch_icon_not_shown🌑 +install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 navigate_browser_SiteA🌕 check_launch_icon_not_shown🌕 +install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 navigate_browser_SiteA🌕 check_launch_icon_not_shown🌕 +install_create_shortcut_windowed_SiteC🌑 switch_profile_clients_UserAClient2🌑 check_app_in_list_not_locally_installed_SiteC🌑 +install_create_shortcut_tabbed_SiteC🌑 switch_profile_clients_UserAClient2🌑 check_app_in_list_not_locally_installed_SiteC🌑 +install_create_shortcut_windowed_SiteC🌑 switch_profile_clients_UserAClient2🌑 check_platform_shortcut_not_exists_SiteC🌑 +install_create_shortcut_tabbed_SiteC🌑 switch_profile_clients_UserAClient2🌑 check_platform_shortcut_not_exists_SiteC🌑 +sync_turn_off🌕 install_create_shortcut_windowed_SiteA🌑 sync_turn_on🌑 switch_profile_clients_UserAClient2🌑 check_app_in_list_not_locally_installed_SiteA🌑 +sync_turn_off🌕 install_omnibox_icon_SiteA🌕 sync_turn_on🌕 switch_profile_clients_UserAClient2🌕 check_app_in_list_not_locally_installed_SiteA🌓 +sync_turn_off🌕 install_menu_option_SiteA🌓 sync_turn_on🌕 switch_profile_clients_UserAClient2🌕 check_app_in_list_not_locally_installed_SiteA🌓 +sync_turn_off🌕 install_create_shortcut_tabbed_SiteA🌑 sync_turn_on🌑 switch_profile_clients_UserAClient2🌑 check_app_in_list_not_locally_installed_SiteA🌑 +sync_turn_off🌕 install_create_shortcut_windowed_SiteC🌑 sync_turn_on🌑 switch_profile_clients_UserAClient2🌑 check_app_in_list_not_locally_installed_SiteC🌑 +sync_turn_off🌕 install_create_shortcut_tabbed_SiteC🌑 sync_turn_on🌑 switch_profile_clients_UserAClient2🌑 check_app_in_list_not_locally_installed_SiteC🌑 +install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 sync_turn_off🌑 uninstall_from_app_list_SiteA🌑 sync_turn_on🌑 switch_profile_clients_UserAClient1🌑 check_app_not_in_list_SiteA🌑 +install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 sync_turn_off🌕 uninstall_from_app_list_SiteA🌑 sync_turn_on🌑 switch_profile_clients_UserAClient1🌑 check_app_not_in_list_SiteA🌑 +install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 sync_turn_off🌕 uninstall_from_app_list_SiteA🌑 sync_turn_on🌑 switch_profile_clients_UserAClient1🌑 check_app_not_in_list_SiteA🌑 +install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 sync_turn_off🌑 uninstall_from_app_list_SiteA🌑 sync_turn_on🌑 switch_profile_clients_UserAClient1🌑 check_app_not_in_list_SiteA🌑 +install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 sync_turn_off🌑 uninstall_from_app_list_SiteA🌑 sync_turn_on🌑 switch_profile_clients_UserAClient1🌑 check_platform_shortcut_not_exists_SiteA🌑 +install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 sync_turn_off🌕 uninstall_from_app_list_SiteA🌑 sync_turn_on🌑 switch_profile_clients_UserAClient1🌑 check_platform_shortcut_not_exists_SiteA🌑 +install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 sync_turn_off🌕 uninstall_from_app_list_SiteA🌑 sync_turn_on🌑 switch_profile_clients_UserAClient1🌑 check_platform_shortcut_not_exists_SiteA🌑 +install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 sync_turn_off🌑 uninstall_from_app_list_SiteA🌑 sync_turn_on🌑 switch_profile_clients_UserAClient1🌑 check_platform_shortcut_not_exists_SiteA🌑 +install_create_shortcut_windowed_SiteA🌑 uninstall_from_app_list_SiteA🌑 check_app_not_in_list_SiteA🌑 +install_create_shortcut_windowed_SiteA🌑 uninstall_from_menu_SiteA🌑 check_app_not_in_list_SiteA🌑 +install_omnibox_icon_SiteA🌕 uninstall_from_app_list_SiteA🌑 check_app_not_in_list_SiteA🌑 +install_omnibox_icon_SiteA🌕 uninstall_from_menu_SiteA🌕 check_app_not_in_list_SiteA🌕 +install_menu_option_SiteA🌓 uninstall_from_app_list_SiteA🌑 check_app_not_in_list_SiteA🌑 +install_menu_option_SiteA🌓 uninstall_from_menu_SiteA🌕 check_app_not_in_list_SiteA🌕 +install_create_shortcut_tabbed_SiteA🌑 uninstall_from_app_list_SiteA🌑 check_app_not_in_list_SiteA🌑 +install_create_shortcut_tabbed_SiteA🌑 uninstall_from_menu_SiteA🌑 check_app_not_in_list_SiteA🌑 +install_create_shortcut_windowed_SiteA🌑 uninstall_from_app_list_SiteA🌑 navigate_browser_SiteA🌑 check_install_icon_shown🌑 +install_create_shortcut_windowed_SiteA🌑 uninstall_from_menu_SiteA🌑 navigate_browser_SiteA🌑 check_install_icon_shown🌑 +install_omnibox_icon_SiteA🌕 uninstall_from_app_list_SiteA🌑 navigate_browser_SiteA🌑 check_install_icon_shown🌑 +install_omnibox_icon_SiteA🌕 uninstall_from_menu_SiteA🌕 navigate_browser_SiteA🌕 check_install_icon_shown🌕 +install_menu_option_SiteA🌓 uninstall_from_app_list_SiteA🌑 navigate_browser_SiteA🌑 check_install_icon_shown🌑 +install_menu_option_SiteA🌓 uninstall_from_menu_SiteA🌕 navigate_browser_SiteA🌕 check_install_icon_shown🌕 +install_create_shortcut_tabbed_SiteA🌑 uninstall_from_app_list_SiteA🌑 navigate_browser_SiteA🌑 check_install_icon_shown🌑 +install_create_shortcut_tabbed_SiteA🌑 uninstall_from_menu_SiteA🌑 navigate_browser_SiteA🌑 check_install_icon_shown🌑 +install_create_shortcut_windowed_SiteA🌑 uninstall_from_app_list_SiteA🌑 navigate_browser_SiteA🌑 check_launch_icon_not_shown🌑 +install_create_shortcut_windowed_SiteA🌑 uninstall_from_menu_SiteA🌑 navigate_browser_SiteA🌑 check_launch_icon_not_shown🌑 +install_omnibox_icon_SiteA🌕 uninstall_from_app_list_SiteA🌑 navigate_browser_SiteA🌑 check_launch_icon_not_shown🌑 +install_omnibox_icon_SiteA🌕 uninstall_from_menu_SiteA🌕 navigate_browser_SiteA🌕 check_launch_icon_not_shown🌕 +install_menu_option_SiteA🌓 uninstall_from_app_list_SiteA🌑 navigate_browser_SiteA🌑 check_launch_icon_not_shown🌑 +install_menu_option_SiteA🌓 uninstall_from_menu_SiteA🌕 navigate_browser_SiteA🌕 check_launch_icon_not_shown🌕 +install_create_shortcut_tabbed_SiteA🌑 uninstall_from_app_list_SiteA🌑 navigate_browser_SiteA🌑 check_launch_icon_not_shown🌑 +install_create_shortcut_tabbed_SiteA🌑 uninstall_from_menu_SiteA🌑 navigate_browser_SiteA🌑 check_launch_icon_not_shown🌑 +install_create_shortcut_windowed_SiteA🌑 uninstall_from_app_list_SiteA🌑 check_platform_shortcut_not_exists_SiteA🌑 +install_create_shortcut_windowed_SiteA🌑 uninstall_from_menu_SiteA🌑 check_platform_shortcut_not_exists_SiteA🌑 +install_omnibox_icon_SiteA🌕 uninstall_from_app_list_SiteA🌑 check_platform_shortcut_not_exists_SiteA🌑 +install_omnibox_icon_SiteA🌕 uninstall_from_menu_SiteA🌕 check_platform_shortcut_not_exists_SiteA🌑 +install_menu_option_SiteA🌓 uninstall_from_app_list_SiteA🌑 check_platform_shortcut_not_exists_SiteA🌑 +install_menu_option_SiteA🌓 uninstall_from_menu_SiteA🌕 check_platform_shortcut_not_exists_SiteA🌑 +install_create_shortcut_tabbed_SiteA🌑 uninstall_from_app_list_SiteA🌑 check_platform_shortcut_not_exists_SiteA🌑 +install_create_shortcut_tabbed_SiteA🌑 uninstall_from_menu_SiteA🌑 check_platform_shortcut_not_exists_SiteA🌑 +install_create_shortcut_windowed_SiteC🌑 uninstall_from_app_list_SiteC🌑 check_app_not_in_list_SiteA🌑 +install_create_shortcut_windowed_SiteC🌑 uninstall_from_menu_SiteC🌑 check_app_not_in_list_SiteA🌑 +install_create_shortcut_tabbed_SiteC🌑 uninstall_from_app_list_SiteC🌑 check_app_not_in_list_SiteA🌑 +install_create_shortcut_tabbed_SiteC🌑 uninstall_from_menu_SiteC🌑 check_app_not_in_list_SiteA🌑 +install_create_shortcut_windowed_SiteC🌑 uninstall_from_app_list_SiteC🌑 navigate_browser_SiteC🌑 check_launch_icon_not_shown🌑 +install_create_shortcut_windowed_SiteC🌑 uninstall_from_menu_SiteC🌑 navigate_browser_SiteC🌑 check_launch_icon_not_shown🌑 +install_create_shortcut_tabbed_SiteC🌑 uninstall_from_app_list_SiteC🌑 navigate_browser_SiteC🌑 check_launch_icon_not_shown🌑 +install_create_shortcut_tabbed_SiteC🌑 uninstall_from_menu_SiteC🌑 navigate_browser_SiteC🌑 check_launch_icon_not_shown🌑 +install_create_shortcut_windowed_SiteC🌑 uninstall_from_app_list_SiteC🌑 check_platform_shortcut_not_exists_SiteC🌑 +install_create_shortcut_windowed_SiteC🌑 uninstall_from_menu_SiteC🌑 check_platform_shortcut_not_exists_SiteC🌑 +install_create_shortcut_tabbed_SiteC🌑 uninstall_from_app_list_SiteC🌑 check_platform_shortcut_not_exists_SiteC🌑 +install_create_shortcut_tabbed_SiteC🌑 uninstall_from_menu_SiteC🌑 check_platform_shortcut_not_exists_SiteC🌑 +install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 uninstall_from_app_list_SiteA🌑 check_app_not_in_list_SiteA🌑 +install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 uninstall_from_app_list_SiteA🌑 check_app_not_in_list_SiteA🌑 +install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 uninstall_from_app_list_SiteA🌑 check_app_not_in_list_SiteA🌑 +install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 uninstall_from_app_list_SiteA🌑 check_app_not_in_list_SiteA🌑 +install_create_shortcut_windowed_SiteA🌑 switch_profile_clients_UserAClient2🌑 uninstall_from_app_list_SiteA🌑 switch_profile_clients_UserAClient1🌑 check_app_not_in_list_SiteA🌑 +install_omnibox_icon_SiteA🌕 switch_profile_clients_UserAClient2🌕 uninstall_from_app_list_SiteA🌑 switch_profile_clients_UserAClient1🌑 check_app_not_in_list_SiteA🌑 +install_menu_option_SiteA🌓 switch_profile_clients_UserAClient2🌕 uninstall_from_app_list_SiteA🌑 switch_profile_clients_UserAClient1🌑 check_app_not_in_list_SiteA🌑 +install_create_shortcut_tabbed_SiteA🌑 switch_profile_clients_UserAClient2🌑 uninstall_from_app_list_SiteA🌑 switch_profile_clients_UserAClient1🌑 check_app_not_in_list_SiteA🌑
diff --git a/chrome/test/webapps/models.py b/chrome/test/webapps/models.py index 1e31df00..51e76feb7 100755 --- a/chrome/test/webapps/models.py +++ b/chrome/test/webapps/models.py
@@ -216,14 +216,34 @@ def generate_browsertest(self, test_partition: "TestPartitionDescription" ) -> str: + def create_before_action_method(action: Action): + method = "BeforeState" + if action.type == ActionType.STATE_CHECK: + method += "CheckAction();" + else: + method += "ChangeAction();" + return method + + def create_after_action_method(action: Action): + method = "AfterState" + if action.type == ActionType.STATE_CHECK: + method += "CheckAction()" + else: + method += "ChangeAction()" + return method + comments = [ "Test contents are generated by script. Please do not modify!", "See `chrome/test/webapps/README.md` for more info.", "Sheriffs: Disabling this test is supported." ] body = ''.join([" // " + comment + "\n" for comment in comments]) - body += '\n'.join( - [" " + action.cpp_method + ";" for action in self.actions]) + body += '\n\n'.join([ + (f" helper_.{create_before_action_method(action)}\n" + f" helper_.{action.cpp_method};\n" + f" helper_.{create_after_action_method(action)};") + for action in self.actions + ]) return (f"IN_PROC_BROWSERTEST_F(" f"{test_partition.test_fixture}, " f"{CoverageTest.TEST_ID_PREFIX}{self.id}){{\n"
diff --git a/chrome/updater/test/integration_tests_impl.cc b/chrome/updater/test/integration_tests_impl.cc index f6080ff..43ab3af 100644 --- a/chrome/updater/test/integration_tests_impl.cc +++ b/chrome/updater/test/integration_tests_impl.cc
@@ -65,11 +65,15 @@ } void ExpectVersionActive(const std::string& version) { - EXPECT_EQ(CreateGlobalPrefs(GetUpdaterScope())->GetActiveVersion(), version); + scoped_refptr<GlobalPrefs> prefs = CreateGlobalPrefs(GetUpdaterScope()); + ASSERT_NE(prefs, nullptr) << "Failed to acquire GlobalPrefs."; + EXPECT_EQ(prefs->GetActiveVersion(), version); } void ExpectVersionNotActive(const std::string& version) { - EXPECT_NE(CreateGlobalPrefs(GetUpdaterScope())->GetActiveVersion(), version); + scoped_refptr<GlobalPrefs> prefs = CreateGlobalPrefs(GetUpdaterScope()); + ASSERT_NE(prefs, nullptr) << "Failed to acquire GlobalPrefs."; + EXPECT_NE(prefs->GetActiveVersion(), version); } void PrintLog(UpdaterScope scope) {
diff --git a/chromecast/browser/test/cast_features_browsertest.cc b/chromecast/browser/test/cast_features_browsertest.cc index f9cba27c..1b6a21e 100644 --- a/chromecast/browser/test/cast_features_browsertest.cc +++ b/chromecast/browser/test/cast_features_browsertest.cc
@@ -133,7 +133,7 @@ ScopedUserPrefUpdate<base::DictionaryValue, base::Value::Type::DICTIONARY> dict(pref_service(), prefs::kLatestDCSFeatures); for (auto f : features) - dict->Remove(f.name, nullptr); + dict->RemoveKey(f.name); pref_service()->CommitPendingWrite(); }
diff --git a/chromecast/cast_core/BUILD.gn b/chromecast/cast_core/BUILD.gn index 1d0e071..1a506006 100644 --- a/chromecast/cast_core/BUILD.gn +++ b/chromecast/cast_core/BUILD.gn
@@ -221,10 +221,6 @@ "cast_runtime_service.h", ] - if (chromecast_branding == "public") { - sources += [ "cast_runtime_service_simple.cc" ] - } - deps = [ "//base", "//chromecast:chromecast_buildflags", @@ -232,6 +228,26 @@ ] public_deps = [ "//chromecast/media/cma/backend/proxy:headers" ] + + if (!enable_cast_media_runtime) { + sources += [ "cast_runtime_service_simple.cc" ] + } else { + sources += [ + "cast_runtime_service_impl.cc", + "cast_runtime_service_impl.h", + ] + + public_deps += [ + ":core_runtime", + ":metrics_recorder", + ] + + deps += [ "//chromecast/metrics:cast_event_builder_simple" ] + + if (chromecast_branding == "public") { + sources += [ "cast_runtime_service_impl_factory.cc" ] + } + } } cast_source_set("cast_core") {
diff --git a/chromecast/cast_core/cast_runtime_service.cc b/chromecast/cast_core/cast_runtime_service.cc index 9fd7c865..cec7bba 100644 --- a/chromecast/cast_core/cast_runtime_service.cc +++ b/chromecast/cast_core/cast_runtime_service.cc
@@ -3,14 +3,6 @@ // found in the LICENSE file. #include "chromecast/cast_core/cast_runtime_service.h" -#include "chromecast/chromecast_buildflags.h" - -#if BUILDFLAG(ENABLE_CAST_MEDIA_RUNTIME) -#include "chromecast/browser/cast_browser_process.h" // nogncheck -#else // BUILDFLAG(ENABLE_CAST_MEDIA_RUNTIME) -#include "base/bind.h" -#include "base/no_destructor.h" -#endif // BUILDFLAG(ENABLE_CAST_MEDIA_RUNTIME) namespace chromecast { namespace { @@ -19,25 +11,7 @@ } // namespace -// static -CastRuntimeService* CastRuntimeService::GetInstance() { -#if BUILDFLAG(ENABLE_CAST_MEDIA_RUNTIME) - DCHECK(shell::CastBrowserProcess::GetInstance()); - auto* cast_service = shell::CastBrowserProcess::GetInstance()->cast_service(); - DCHECK(cast_service); - return static_cast<CastRuntimeService*>(cast_service); -#else - // TODO(b/186668532): Instead use the CastService singleton instead of - // creating a new one with NoDestructor. - static base::NoDestructor<CastRuntimeService> g_instance(base::BindRepeating( - []() -> network::mojom::NetworkContext* { return nullptr; })); - return g_instance.get(); -#endif // BUILDFLAG(ENABLE_CAST_MEDIA_RUNTIME) -} - -CastRuntimeService::CastRuntimeService( - NetworkContextGetter network_context_getter) - : network_context_getter_(std::move(network_context_getter)) {} +CastRuntimeService::CastRuntimeService() = default; CastRuntimeService::~CastRuntimeService() = default;
diff --git a/chromecast/cast_core/cast_runtime_service.h b/chromecast/cast_core/cast_runtime_service.h index ff168e8..4fee2b9 100644 --- a/chromecast/cast_core/cast_runtime_service.h +++ b/chromecast/cast_core/cast_runtime_service.h
@@ -61,7 +61,7 @@ // Returns current instance of CastRuntimeService in the browser process. static CastRuntimeService* GetInstance(); - explicit CastRuntimeService(NetworkContextGetter network_context_getter); + CastRuntimeService(); ~CastRuntimeService() override; virtual WebCryptoServer* GetWebCryptoServer(); @@ -75,14 +75,6 @@ // CastRuntimeAudioChannelEndpointManager overrides. const std::string& GetAudioChannelEndpoint() override; - - protected: - NetworkContextGetter network_context_getter() { - return network_context_getter_; - } - - private: - NetworkContextGetter network_context_getter_; }; } // namespace chromecast
diff --git a/chromecast/cast_core/cast_runtime_service_impl.cc b/chromecast/cast_core/cast_runtime_service_impl.cc new file mode 100644 index 0000000..5583324c --- /dev/null +++ b/chromecast/cast_core/cast_runtime_service_impl.cc
@@ -0,0 +1,64 @@ +// Copyright 2021 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "chromecast/cast_core/cast_runtime_service_impl.h" + +#include "base/command_line.h" +#include "base/process/process.h" +#include "chromecast/browser/cast_browser_process.h" +#include "chromecast/metrics/cast_event_builder_simple.h" + +namespace chromecast { +namespace { + +const char kCastCoreRuntimeIdSwitch[] = "cast-core-runtime-id"; +const char kRuntimeServicePathSwitch[] = "runtime-service-path"; + +} // namespace + +// static +CastRuntimeService* CastRuntimeService::GetInstance() { + DCHECK(shell::CastBrowserProcess::GetInstance()); + auto* cast_service = shell::CastBrowserProcess::GetInstance()->cast_service(); + DCHECK(cast_service); + return static_cast<CastRuntimeService*>(cast_service); +} + +CastRuntimeServiceImpl::CastRuntimeServiceImpl( + content::BrowserContext* browser_context, + CastWindowManager* window_manager, + NetworkContextGetter network_context_getter) + : network_context_getter_(std::move(network_context_getter)), + runtime_service_(browser_context, window_manager, this) {} + +CastRuntimeServiceImpl::~CastRuntimeServiceImpl() = default; + +void CastRuntimeServiceImpl::StartInternal() { + CastRuntimeService::StartInternal(); + + auto* command_line = base::CommandLine::ForCurrentProcess(); + std::string runtime_id = + command_line->GetSwitchValueASCII(kCastCoreRuntimeIdSwitch); + std::string runtime_service_path = + command_line->GetSwitchValueASCII(kRuntimeServicePathSwitch); + if (!runtime_service_.Start(runtime_id, runtime_service_path)) { + base::Process::TerminateCurrentProcessImmediately(1); + } +} + +void CastRuntimeServiceImpl::StopInternal() { + CastRuntimeService::StopInternal(); + + runtime_service_.Stop(); +} + +std::unique_ptr<CastEventBuilder> CastRuntimeServiceImpl::CreateEventBuilder() { + return std::make_unique<CastEventBuilderSimple>(); +} + +const std::string& CastRuntimeServiceImpl::GetAudioChannelEndpoint() { + return runtime_service_.GetCastMediaServiceGrpcEndpoint(); +} + +} // namespace chromecast
diff --git a/chromecast/cast_core/cast_runtime_service_impl.h b/chromecast/cast_core/cast_runtime_service_impl.h new file mode 100644 index 0000000..a7fff01e --- /dev/null +++ b/chromecast/cast_core/cast_runtime_service_impl.h
@@ -0,0 +1,57 @@ +// Copyright 2021 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef CHROMECAST_CAST_CORE_CAST_RUNTIME_SERVICE_IMPL_H_ +#define CHROMECAST_CAST_CORE_CAST_RUNTIME_SERVICE_IMPL_H_ + +#include <memory> + +#include "chromecast/cast_core/cast_runtime_metrics_recorder.h" +#include "chromecast/cast_core/cast_runtime_service.h" +#include "chromecast/cast_core/runtime_service.h" + +namespace content { +class BrowserContext; +} // namespace content + +namespace chromecast { + +class CastWindowManager; + +class CastEventBuilder; + +// This interface is to be used for building the Cast Runtime Service and act as +// the border between shared Chromium code and the specifics of that +// implementation. +class CastRuntimeServiceImpl + : public CastRuntimeService, + public CastRuntimeMetricsRecorder::EventBuilderFactory { + public: + CastRuntimeServiceImpl(content::BrowserContext* browser_context, + CastWindowManager* window_manager, + NetworkContextGetter network_context_getter); + ~CastRuntimeServiceImpl() override; + + // CastService overrides. + void StartInternal() override; + void StopInternal() override; + const std::string& GetAudioChannelEndpoint() override; + + protected: + // CastRuntimeMetricsRecorder::EventBuilderFactory overrides. + std::unique_ptr<CastEventBuilder> CreateEventBuilder() override; + + NetworkContextGetter network_context_getter() { + return network_context_getter_; + } + + private: + NetworkContextGetter network_context_getter_; + + RuntimeService runtime_service_; +}; + +} // namespace chromecast + +#endif // CHROMECAST_CAST_CORE_CAST_RUNTIME_SERVICE_IMPL_H_
diff --git a/chromecast/cast_core/cast_runtime_service_impl_factory.cc b/chromecast/cast_core/cast_runtime_service_impl_factory.cc new file mode 100644 index 0000000..b3094df --- /dev/null +++ b/chromecast/cast_core/cast_runtime_service_impl_factory.cc
@@ -0,0 +1,22 @@ +// Copyright 2021 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "base/single_thread_task_runner.h" +#include "chromecast/cast_core/cast_runtime_service.h" +#include "chromecast/cast_core/cast_runtime_service_impl.h" + +namespace chromecast { + +std::unique_ptr<CastRuntimeService> CastRuntimeService::Create( + scoped_refptr<base::SingleThreadTaskRunner> task_runner, + content::BrowserContext* browser_context, + CastWindowManager* window_manager, + media::MediaPipelineBackendManager* media_pipeline_backend_manager, + CastRuntimeService::NetworkContextGetter network_context_getter, + PrefService* pref_service) { + return std::make_unique<CastRuntimeServiceImpl>( + browser_context, window_manager, std::move(network_context_getter)); +} + +} // namespace chromecast
diff --git a/chromecast/cast_core/cast_runtime_service_simple.cc b/chromecast/cast_core/cast_runtime_service_simple.cc index f9698da..754bc0e 100644 --- a/chromecast/cast_core/cast_runtime_service_simple.cc +++ b/chromecast/cast_core/cast_runtime_service_simple.cc
@@ -4,6 +4,7 @@ #include "chromecast/cast_core/cast_runtime_service.h" +#include "base/no_destructor.h" #include "base/single_thread_task_runner.h" namespace chromecast { @@ -16,8 +17,14 @@ media::MediaPipelineBackendManager* media_pipeline_backend_manager, CastRuntimeService::NetworkContextGetter network_context_getter, PrefService* pref_service) { - return std::make_unique<CastRuntimeService>( - std::move(network_context_getter)); + return std::make_unique<CastRuntimeService>(); +} + +CastRuntimeService* CastRuntimeService::GetInstance() { + // TODO(b/186668532): Instead use the CastService singleton instead of + // creating a new one with NoDestructor. + static base::NoDestructor<CastRuntimeService> g_instance; + return g_instance.get(); } } // namespace chromecast
diff --git a/chromecast/cast_core/runtime_service.cc b/chromecast/cast_core/runtime_service.cc index 9a869a25..e34b1f3 100644 --- a/chromecast/cast_core/runtime_service.cc +++ b/chromecast/cast_core/runtime_service.cc
@@ -46,13 +46,16 @@ delete this; } -RuntimeService::RuntimeService(content::BrowserContext* browser_context, - CastWindowManager* window_manager) +RuntimeService::RuntimeService( + content::BrowserContext* browser_context, + CastWindowManager* window_manager, + CastRuntimeMetricsRecorder::EventBuilderFactory* event_builder_factory) : GrpcServer(base::SequencedTaskRunnerHandle::Get()), web_view_factory_(std::make_unique<CastWebViewFactory>(browser_context)), web_service_(std::make_unique<CastWebService>(browser_context, web_view_factory_.get(), - window_manager)) { + window_manager)), + metrics_recorder_(event_builder_factory) { shell::CastBrowserProcess::GetInstance()->SetWebViewFactory( web_view_factory_.get()); } @@ -205,7 +208,7 @@ std::move(metrics_channel)); metrics_recorder_service_ = std::make_unique<CastRuntimeMetricsRecorderService>( - metrics_recorder_.get(), &action_recorder_, this, + &metrics_recorder_, &action_recorder_, this, kDefaultMetricsReportInterval); DVLOG(2) << "MetricsRecorderService started"; callback->StepGRPC(grpc::Status::OK);
diff --git a/chromecast/cast_core/runtime_service.h b/chromecast/cast_core/runtime_service.h index 9dd3677..9f58230 100644 --- a/chromecast/cast_core/runtime_service.h +++ b/chromecast/cast_core/runtime_service.h
@@ -33,8 +33,10 @@ public RuntimeServiceDelegate, public MetricsRecorderGrpc { public: - RuntimeService(content::BrowserContext* browser_context, - CastWindowManager* window_manager); + RuntimeService( + content::BrowserContext* browser_context, + CastWindowManager* window_manager, + CastRuntimeMetricsRecorder::EventBuilderFactory* event_builder_factory); ~RuntimeService() override; // Starts and stops the runtime service, including the gRPC completion queue. @@ -109,8 +111,7 @@ // Allows histogram and action recording, which can be reported by // CastRuntimeMetricsRecorderService if Cast Core starts it. - // TODO: Initialize this variable. - std::unique_ptr<CastRuntimeMetricsRecorder> metrics_recorder_; + CastRuntimeMetricsRecorder metrics_recorder_; CastRuntimeActionRecorder action_recorder_; std::string runtime_id_;
diff --git a/chromeos/CHROMEOS_LKGM b/chromeos/CHROMEOS_LKGM index ba6655a..aea4165f 100644 --- a/chromeos/CHROMEOS_LKGM +++ b/chromeos/CHROMEOS_LKGM
@@ -1 +1 @@ -14123.0.0 \ No newline at end of file +14128.0.0 \ No newline at end of file
diff --git a/chromeos/components/camera_app_ui/resources/js/main.js b/chromeos/components/camera_app_ui/resources/js/main.js index cffb9220b..a974def 100644 --- a/chromeos/components/camera_app_ui/resources/js/main.js +++ b/chromeos/components/camera_app_ui/resources/js/main.js
@@ -315,11 +315,13 @@ }); const results = await Promise.allSettled( preloadImagesList.map((name) => loadImage(`/images/${name}`))); - const failure = results.find(({status}) => status === 'rejected'); - if (failure !== undefined) { - reportError( - ErrorType.PRELOAD_IMAGE_FAILURE, ErrorLevel.ERROR, - assertInstanceof(failure.reason, Error)); + for (const result of results) { + if (result.status === 'rejected') { + reportError( + ErrorType.PRELOAD_IMAGE_FAILURE, ErrorLevel.ERROR, + assertInstanceof(result.reason, Error)); + break; + } } })();
diff --git a/chromeos/components/camera_app_ui/resources/js/preload_images.d.ts b/chromeos/components/camera_app_ui/resources/js/preload_images.d.ts new file mode 100644 index 0000000..1febe68c --- /dev/null +++ b/chromeos/components/camera_app_ui/resources/js/preload_images.d.ts
@@ -0,0 +1,8 @@ +// Copyright 2021 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// TODO(pihsun): Remove this file once we have generated preload_images.js +// checked into the source tree. + +export const preloadImagesList: string[];
diff --git a/chromeos/profiles/bigcore.afdo.newest.txt b/chromeos/profiles/bigcore.afdo.newest.txt index d94ebf9f8..59a9fb037 100644 --- a/chromeos/profiles/bigcore.afdo.newest.txt +++ b/chromeos/profiles/bigcore.afdo.newest.txt
@@ -1 +1 @@ -chromeos-chrome-amd64-bigcore-93-4577.5-1627292532-benchmark-93.0.4577.21-r1-redacted.afdo.xz +chromeos-chrome-amd64-bigcore-93-4577.5-1627292532-benchmark-93.0.4577.22-r1-redacted.afdo.xz
diff --git a/chromeos/services/cros_healthd/OWNERS b/chromeos/services/cros_healthd/OWNERS index 5dbf751..be1eb14 100644 --- a/chromeos/services/cros_healthd/OWNERS +++ b/chromeos/services/cros_healthd/OWNERS
@@ -1 +1,5 @@ pmoy@chromium.org + +menghuan@chromium.org +kerker@chromium.org +chungsheng@chromium.org
diff --git a/components/accuracy_tips/accuracy_service.cc b/components/accuracy_tips/accuracy_service.cc index 9f07d08..4bc8bda5c 100644 --- a/components/accuracy_tips/accuracy_service.cc +++ b/components/accuracy_tips/accuracy_service.cc
@@ -25,6 +25,24 @@ namespace accuracy_tips { +// Returns a suffix for accuracy tips histograms. +// Needs to match AccuracyTipInteractions from histogram_suffixes_list.xml. +const std::string GetHistogramSuffix(AccuracyTipUI::Interaction interaction) { + switch (interaction) { + case AccuracyTipUI::Interaction::kNoAction: + return "NoAction"; + case AccuracyTipUI::Interaction::kLearnMore: + return "LearnMore"; + case AccuracyTipUI::Interaction::kOptOut: + return "OptOut"; + case AccuracyTipUI::Interaction::kClosed: + return "Closed"; + case AccuracyTipUI::Interaction::kDisabledByExperiment: + NOTREACHED(); // We don't need specific histograms for this. + return ""; + } +} + // Returns the preference to store feature state in. Uses a different pref if // the UI is disabled to avoid dark-launch experiments affecting real usage. const char* GetLastShownPrefName(bool disable_ui) { @@ -84,7 +102,7 @@ const base::Value* last_interactions = pref_service_->Get(GetPreviousInteractionsPrefName(disable_ui_)); const base::Value opt_out_value( - static_cast<int>(AccuracyTipUI::Interaction::kOptOutPressed)); + static_cast<int>(AccuracyTipUI::Interaction::kOptOut)); if (base::Contains(last_interactions->GetList(), opt_out_value)) { return std::move(callback).Run(AccuracyTipStatus::kOptOut); } @@ -134,13 +152,22 @@ base::Value* interaction_list = update.Get(); interaction_list->Append(static_cast<int>(interaction)); + // Record metrics. base::UmaHistogramEnumeration("Privacy.AccuracyTip.AccuracyTipInteraction", interaction); base::UmaHistogramCounts100("Privacy.AccuracyTip.NumDialogsShown", interaction_list->GetList().size()); - if (!time_opened.is_null()) { + + if (interaction != AccuracyTipUI::Interaction::kDisabledByExperiment) { + const base::TimeDelta time_open = base::TimeTicks::Now() - time_opened; base::UmaHistogramMediumTimes("Privacy.AccuracyTip.AccuracyTipTimeOpen", - base::TimeTicks::Now() - time_opened); + time_open); + + const std::string suffix = GetHistogramSuffix(interaction); + base::UmaHistogramCounts100("Privacy.AccuracyTip.NumDialogsShown." + suffix, + interaction_list->GetList().size()); + base::UmaHistogramMediumTimes( + "Privacy.AccuracyTip.AccuracyTipTimeOpen." + suffix, time_open); } }
diff --git a/components/accuracy_tips/accuracy_service_unittest.cc b/components/accuracy_tips/accuracy_service_unittest.cc index c779f47..9327c57 100644 --- a/components/accuracy_tips/accuracy_service_unittest.cc +++ b/components/accuracy_tips/accuracy_service_unittest.cc
@@ -11,6 +11,7 @@ #include "base/task/post_task.h" #include "base/task/task_traits.h" #include "base/test/bind.h" +#include "base/test/metrics/histogram_tester.h" #include "base/test/mock_callback.h" #include "base/test/scoped_feature_list.h" #include "base/test/simple_test_clock.h" @@ -73,7 +74,15 @@ content::WebContents*, AccuracyTipStatus, base::OnceCallback<void(AccuracyTipUI::Interaction)> callback) { - std::move(callback).Run(AccuracyTipUI::Interaction::kOptOutPressed); + std::move(callback).Run(AccuracyTipUI::Interaction::kOptOut); +} + +// Handler that simulates a click on the learn more button. +void LearnMoreClicked( + content::WebContents*, + AccuracyTipStatus, + base::OnceCallback<void(AccuracyTipUI::Interaction)> callback) { + std::move(callback).Run(AccuracyTipUI::Interaction::kLearnMore); } class AccuracyServiceTest : public ::testing::Test { @@ -202,6 +211,34 @@ EXPECT_EQ(CheckAccuracyStatusSync(url), AccuracyTipStatus::kOptOut); } +TEST_F(AccuracyServiceTest, Histograms) { + { + base::HistogramTester t; + EXPECT_CALL(*ui(), ShowAccuracyTip(_, _, _)) + .WillOnce(Invoke(&LearnMoreClicked)); + service()->MaybeShowAccuracyTip(nullptr); + t.ExpectUniqueSample("Privacy.AccuracyTip.AccuracyTipInteraction", + AccuracyTipUI::Interaction::kLearnMore, 1); + t.ExpectBucketCount("Privacy.AccuracyTip.NumDialogsShown", 1, 1); + t.ExpectTotalCount("Privacy.AccuracyTip.AccuracyTipTimeOpen", 1); + t.ExpectBucketCount("Privacy.AccuracyTip.NumDialogsShown.LearnMore", 1, 1); + t.ExpectTotalCount("Privacy.AccuracyTip.AccuracyTipTimeOpen.LearnMore", 1); + } + + { + base::HistogramTester t; + EXPECT_CALL(*ui(), ShowAccuracyTip(_, _, _)) + .WillOnce(Invoke(&OptOutClicked)); + service()->MaybeShowAccuracyTip(nullptr); + t.ExpectUniqueSample("Privacy.AccuracyTip.AccuracyTipInteraction", + AccuracyTipUI::Interaction::kOptOut, 1); + t.ExpectBucketCount("Privacy.AccuracyTip.NumDialogsShown", 2, 1); + t.ExpectTotalCount("Privacy.AccuracyTip.AccuracyTipTimeOpen", 1); + t.ExpectBucketCount("Privacy.AccuracyTip.NumDialogsShown.OptOut", 2, 1); + t.ExpectTotalCount("Privacy.AccuracyTip.AccuracyTipTimeOpen.OptOut", 1); + } +} + class AccuracyServiceDisabledUiTest : public AccuracyServiceTest { private: void SetUpFeatureList(base::test::ScopedFeatureList& feature_list) override {
diff --git a/components/accuracy_tips/accuracy_tip_ui.h b/components/accuracy_tips/accuracy_tip_ui.h index fa31876..2652d7f 100644 --- a/components/accuracy_tips/accuracy_tip_ui.h +++ b/components/accuracy_tips/accuracy_tip_ui.h
@@ -27,14 +27,17 @@ // These values are persisted to logs. Entries should not be renumbered and // numeric values should never be reused. enum class Interaction { + // The UI was closed without interaction. E.g. because the tab navigated + // to a different site. kNoAction = 0, // Learn more button pressed. - kLearnMorePressed = 1, + kLearnMore = 1, // Opt out button pressed. - kOptOutPressed = 2, + kOptOut = 2, // Pressed ESC or close button. kClosed = 3, - // Logged when the UI was not actually shown. + // Logged when the UI was not actually shown due to experiment + // configuration. kDisabledByExperiment = 4, kMaxValue = kDisabledByExperiment,
diff --git a/components/autofill/content/renderer/BUILD.gn b/components/autofill/content/renderer/BUILD.gn index e30930b..1eb0974 100644 --- a/components/autofill/content/renderer/BUILD.gn +++ b/components/autofill/content/renderer/BUILD.gn
@@ -61,6 +61,7 @@ sources = [ "focus_test_utils.cc", "focus_test_utils.h", + "form_cache_test_api.h", "test_password_autofill_agent.cc", "test_password_autofill_agent.h", ]
diff --git a/components/autofill/content/renderer/form_cache.cc b/components/autofill/content/renderer/form_cache.cc index d201f15..4ad1f79 100644 --- a/components/autofill/content/renderer/form_cache.cc +++ b/components/autofill/content/renderer/form_cache.cc
@@ -120,8 +120,117 @@ FormCache::FormCache(WebLocalFrame* frame) : frame_(frame) {} FormCache::~FormCache() = default; +std::vector<FormData> FormCache::ModifiedExtractNewForms( + const FieldDataManager* field_data_manager) { + std::vector<FormData> forms; + WebDocument document = frame_->GetDocument(); + if (document.IsNull()) + return forms; + + initial_checked_state_.clear(); + initial_select_values_.clear(); + + std::set<FieldRendererId> observed_unique_renderer_ids; + + // Log an error message for deprecated attributes, but only the first time + // the form is parsed. + bool log_deprecation_messages = parsed_forms_rendererid_.empty(); + + std::map<FormRendererId, FormData> old_parsed_forms = + std::move(parsed_forms_rendererid_); + parsed_forms_rendererid_.clear(); + + size_t num_fields_seen = 0; + size_t num_frames_seen = 0; + std::vector<WebFormControlElement> control_elements; + + // Helper function that stores new autofillable forms. Returns false if the + // number of fields or frames would be too much if we extracted the new form. + auto ProcessForm = [&](FormData form) { + for (const auto& field : form.fields) + observed_unique_renderer_ids.insert(field.unique_renderer_id); + + num_fields_seen += form.fields.size(); + num_frames_seen += form.child_frames.size(); + if (num_fields_seen > kMaxParseableFields || + num_frames_seen > kMaxParseableFrames) { + // Restore |parsed_forms_rendererid_|. + parsed_forms_rendererid_.insert( + std::make_move_iterator(old_parsed_forms.begin()), + std::make_move_iterator(old_parsed_forms.end())); + PruneInitialValueCaches(observed_unique_renderer_ids); + return false; + } + + size_t num_editable_elements = + ScanFormControlElements(control_elements, log_deprecation_messages); + + // Store only "interesting" forms. + if (IsFormInteresting(form, num_editable_elements)) { + DCHECK(parsed_forms_rendererid_.find(form.unique_renderer_id) == + parsed_forms_rendererid_.end()); + parsed_forms_rendererid_.insert({form.unique_renderer_id, form}); + + // If it is a new form or an input field of the form changed, + // re-extract the form. + auto it = old_parsed_forms.find(form.unique_renderer_id); + if (it == old_parsed_forms.end() || + form.child_frames != it->second.child_frames || + !base::ranges::equal(form.fields, it->second.fields, {}, + &FormFieldData::unique_renderer_id, + &FormFieldData::unique_renderer_id)) { + SaveInitialValues(control_elements); + forms.push_back(std::move(form)); + } + } + return true; + }; + + constexpr form_util::ExtractMask extract_mask = + static_cast<form_util::ExtractMask>(form_util::EXTRACT_VALUE | + form_util::EXTRACT_OPTIONS); + + for (const WebFormElement& form_element : document.Forms()) { + control_elements = + form_util::ExtractAutofillableElementsInForm(form_element); + + FormData form; + if (!WebFormElementToFormData(form_element, WebFormControlElement(), + field_data_manager, extract_mask, &form, + nullptr)) { + continue; + } + if (!ProcessForm(std::move(form))) + return forms; + } + + // Look for more parseable fields outside of forms. Create a synthetic form + // from them. + std::vector<WebElement> fieldsets; + control_elements = form_util::GetUnownedAutofillableFormFieldElements( + document.All(), &fieldsets); + std::vector<WebElement> iframe_elements = + form_util::GetUnownedIframeElements(document); + + FormData synthetic_form; + if (!UnownedFormElementsAndFieldSetsToFormData( + fieldsets, control_elements, iframe_elements, nullptr, document, + field_data_manager, extract_mask, &synthetic_form, nullptr)) { + PruneInitialValueCaches(observed_unique_renderer_ids); + return forms; + } + if (!ProcessForm(std::move(synthetic_form))) + return forms; + + PruneInitialValueCaches(observed_unique_renderer_ids); + return forms; +} + std::vector<FormData> FormCache::ExtractNewForms( const FieldDataManager* field_data_manager) { + if (base::FeatureList::IsEnabled(features::kAutofillUseNewFormExtraction)) { + return ModifiedExtractNewForms(field_data_manager); + } std::vector<FormData> forms; WebDocument document = frame_->GetDocument(); if (document.IsNull()) @@ -243,6 +352,8 @@ synthetic_form_ = FormData(); parsed_forms_.clear(); + // Remove after the `AutofillUseNewFormExtraction` feature is deleted. + parsed_forms_rendererid_.clear(); initial_select_values_.clear(); initial_checked_state_.clear(); fields_eligible_for_manual_filling_.clear(); @@ -445,13 +556,6 @@ return true; } -bool FormCache::IsFormElementEligibleForManualFilling( - const blink::WebFormControlElement& control_element) { - return fields_eligible_for_manual_filling_.find( - FieldRendererId(control_element.UniqueRendererFormControlId())) != - fields_eligible_for_manual_filling_.end(); -} - void FormCache::SetFieldsEligibleForManualFilling( const std::vector<FieldRendererId>& fields_eligible_for_manual_filling) { fields_eligible_for_manual_filling_ = base::flat_set<FieldRendererId>(
diff --git a/components/autofill/content/renderer/form_cache.h b/components/autofill/content/renderer/form_cache.h index 22afde1..16f22d6 100644 --- a/components/autofill/content/renderer/form_cache.h +++ b/components/autofill/content/renderer/form_cache.h
@@ -41,6 +41,12 @@ std::vector<FormData> ExtractNewForms( const FieldDataManager* field_data_manager); + // Modified version of ExtractNewForms(). It is used only if + // `AutofillUseNewFormExtraction` feature is enabled. Remove after the feature + // is deleted. + std::vector<FormData> ModifiedExtractNewForms( + const FieldDataManager* field_data_manager); + // Resets the forms. void Reset(); @@ -56,24 +62,13 @@ bool ShowPredictions(const FormDataPredictions& form, bool attach_predictions_to_dom); - // For a given |control_element| check whether it is eligible for manual - // filling on form interaction. - bool IsFormElementEligibleForManualFilling( - const blink::WebFormControlElement& control_element); - // Stores the FieldRendererId of the fields that are eligible for manual // filling in a set. void SetFieldsEligibleForManualFilling( const std::vector<FieldRendererId>& fields_eligible_for_manual_filling); private: - FRIEND_TEST_ALL_PREFIXES(FormCacheBrowserTest, FreeDataOnElementRemoval); - FRIEND_TEST_ALL_PREFIXES( - FormCacheBrowserTest, - RemoveReextractedModifiedNonSyntheticFormsWithSameRendererID); - FRIEND_TEST_ALL_PREFIXES( - FormCacheBrowserTest, - RemoveReextractedModifiedSyntheticFormsWithSameRendererID); + friend class FormCacheTestApi; // Scans |control_elements| and returns the number of editable elements. // Also logs warning messages for deprecated attribute if @@ -101,6 +96,11 @@ // TODO(crbug/896689) Move to std::map<unique_rederer_id, FormData>. std::set<FormData, FormData::IdentityComparator> parsed_forms_; + // Same as |parsed_forms_|, but moved to a different type. It is used only if + // `AutofillUseNewFormExtraction` feature is enabled. Remove after the feature + // is deleted. + std::map<FormRendererId, FormData> parsed_forms_rendererid_; + // The synthetic FormData is for all the fieldsets in the document without a // form owner. FormData synthetic_form_;
diff --git a/components/autofill/content/renderer/form_cache_browsertest.cc b/components/autofill/content/renderer/form_cache_browsertest.cc index 00e4b6e..09cdbf7 100644 --- a/components/autofill/content/renderer/form_cache_browsertest.cc +++ b/components/autofill/content/renderer/form_cache_browsertest.cc
@@ -8,6 +8,7 @@ #include "components/autofill/content/renderer/focus_test_utils.h" #include "components/autofill/content/renderer/form_autofill_util.h" #include "components/autofill/content/renderer/form_cache.h" +#include "components/autofill/content/renderer/form_cache_test_api.h" #include "components/autofill/core/common/autofill_features.h" #include "components/autofill/core/common/form_field_data.h" #include "content/public/test/render_view_test.h" @@ -73,7 +74,24 @@ std::unique_ptr<test::FocusTestUtils> focus_test_utils_; }; -TEST_F(FormCacheBrowserTest, ExtractForms) { +class ParameterizedFormCacheBrowserTest + : public FormCacheBrowserTest, + public testing::WithParamInterface<bool> { + public: + ParameterizedFormCacheBrowserTest() { + bool use_new_form_extraction = GetParam(); + std::vector<base::Feature> enabled; + std::vector<base::Feature> disabled; + (use_new_form_extraction ? &enabled : &disabled) + ->push_back(features::kAutofillUseNewFormExtraction); + scoped_features_.InitWithFeatures(enabled, disabled); + } + + private: + base::test::ScopedFeatureList scoped_features_; +}; + +TEST_P(ParameterizedFormCacheBrowserTest, ExtractForms) { LoadHTML(R"( <form id="form1"> <input type="text" name="foo1"> @@ -99,7 +117,7 @@ EXPECT_TRUE(unowned_form->child_frames.empty()); } -class FormCacheIframeBrowserTest : public FormCacheBrowserTest { +class FormCacheIframeBrowserTest : public ParameterizedFormCacheBrowserTest { public: FormCacheIframeBrowserTest() { scoped_feature_list_.InitAndEnableFeature(features::kAutofillAcrossIframes); @@ -110,7 +128,7 @@ base::test::ScopedFeatureList scoped_feature_list_; }; -TEST_F(FormCacheIframeBrowserTest, ExtractFrames) { +TEST_P(FormCacheIframeBrowserTest, ExtractFrames) { LoadHTML(R"( <form id="form1"> <iframe id="frame1"></iframe> @@ -145,7 +163,7 @@ Field(&FrameTokenWithPredecessor::predecessor, -1)))); } -TEST_F(FormCacheBrowserTest, ExtractFormsTwice) { +TEST_P(ParameterizedFormCacheBrowserTest, ExtractFormsTwice) { LoadHTML(R"( <form id="form1"> <input type="text" name="foo1"> @@ -164,7 +182,7 @@ EXPECT_TRUE(forms.empty()); } -TEST_F(FormCacheIframeBrowserTest, ExtractFramesTwice) { +TEST_P(FormCacheIframeBrowserTest, ExtractFramesTwice) { LoadHTML(R"( <form id="form1"> <iframe></iframe> @@ -181,7 +199,7 @@ EXPECT_TRUE(forms.empty()); } -TEST_F(FormCacheIframeBrowserTest, ExtractFramesAfterVisibilityChange) { +TEST_P(FormCacheIframeBrowserTest, ExtractFramesAfterVisibilityChange) { LoadHTML(R"( <form id="form1"> <iframe id="frame1" style="display: none;"></iframe> @@ -232,7 +250,7 @@ EXPECT_EQ(forms.front().name, u"form1"); } -TEST_F(FormCacheBrowserTest, ExtractFormsAfterModification) { +TEST_P(ParameterizedFormCacheBrowserTest, ExtractFormsAfterModification) { LoadHTML(R"( <form id="form1"> <input type="text" name="foo1"> @@ -271,7 +289,7 @@ EXPECT_EQ(2u, unowned_form->fields.size()); } -TEST_F(FormCacheBrowserTest, FillAndClear) { +TEST_P(ParameterizedFormCacheBrowserTest, FillAndClear) { LoadHTML(R"( <input type="text" name="text" id="text"> <input type="checkbox" checked name="checkbox" id="checkbox"> @@ -317,7 +335,7 @@ // Tests that correct focus, change and blur events are emitted during the // autofilling and clearing of the form with an initially focused element. -TEST_F(FormCacheBrowserTest, +TEST_P(ParameterizedFormCacheBrowserTest, VerifyFocusAndBlurEventsAfterAutofillAndClearingWithFocusElement) { // Load a form. LoadHTML( @@ -369,7 +387,7 @@ EXPECT_EQ(GetFocusLog(), "c0b0f1c1b1f0c0b0f1c1b1f0"); } -TEST_F(FormCacheBrowserTest, FreeDataOnElementRemoval) { +TEST_P(ParameterizedFormCacheBrowserTest, FreeDataOnElementRemoval) { LoadHTML(R"( <div id="container"> <input type="text" name="text" id="text"> @@ -384,8 +402,8 @@ FormCache form_cache(GetMainFrame()); form_cache.ExtractNewForms(nullptr); - EXPECT_EQ(1u, form_cache.initial_select_values_.size()); - EXPECT_EQ(1u, form_cache.initial_checked_state_.size()); + EXPECT_EQ(1u, FormCacheTestApi(&form_cache).initial_select_values_size()); + EXPECT_EQ(1u, FormCacheTestApi(&form_cache).initial_checked_state_size()); ExecuteJavaScriptForTests(R"( const container = document.getElementById('container'); @@ -396,13 +414,14 @@ std::vector<FormData> forms = form_cache.ExtractNewForms(nullptr); EXPECT_EQ(0u, forms.size()); - EXPECT_EQ(0u, form_cache.initial_select_values_.size()); - EXPECT_EQ(0u, form_cache.initial_checked_state_.size()); + EXPECT_EQ(0u, FormCacheTestApi(&form_cache).initial_select_values_size()); + EXPECT_EQ(0u, FormCacheTestApi(&form_cache).initial_checked_state_size()); } // Test that the select element's user edited field state is set // to false after clearing the form. -TEST_F(FormCacheBrowserTest, ClearFormSelectElementEditedStateReset) { +TEST_P(ParameterizedFormCacheBrowserTest, + ClearFormSelectElementEditedStateReset) { LoadHTML(R"( <input type="text" name="text" id="text"> <select name="date" id="date"> @@ -471,7 +490,8 @@ EXPECT_TRUE(select_month.UserHasEditedTheField()); } -TEST_F(FormCacheBrowserTest, IsFormElementEligibleForManualFilling) { +TEST_P(ParameterizedFormCacheBrowserTest, + IsFormElementEligibleForManualFilling) { // Load a form. LoadHTML( "<html><form id='myForm'>" @@ -500,18 +520,18 @@ form_cache.SetFieldsEligibleForManualFilling( fields_eligible_for_manual_filling); - EXPECT_TRUE( - form_cache.IsFormElementEligibleForManualFilling(first_name_element)); - EXPECT_FALSE( - form_cache.IsFormElementEligibleForManualFilling(middle_name_element)); - EXPECT_TRUE( - form_cache.IsFormElementEligibleForManualFilling(last_name_element)); + EXPECT_TRUE(FormCacheTestApi(&form_cache) + .IsFormElementEligibleForManualFilling(first_name_element)); + EXPECT_FALSE(FormCacheTestApi(&form_cache) + .IsFormElementEligibleForManualFilling(middle_name_element)); + EXPECT_TRUE(FormCacheTestApi(&form_cache) + .IsFormElementEligibleForManualFilling(last_name_element)); } // Test that after adding an input element to an already extracted non-synthetic -// form, the form (has the same renderer ID) is not added twice to the extracted +// form, the form (has the same rendererId) is not added twice to the extracted // forms. -TEST_F(FormCacheBrowserTest, +TEST_P(ParameterizedFormCacheBrowserTest, RemoveReextractedModifiedNonSyntheticFormsWithSameRendererID) { base::test::ScopedFeatureList scoped_feature_list; scoped_feature_list.InitAndEnableFeature( @@ -539,14 +559,18 @@ ASSERT_TRUE(form1); EXPECT_EQ(2u, form1->fields.size()); - // Check if the modified form with the same rendererID was not added again. - EXPECT_EQ(1u, form_cache.parsed_forms_.size()); + // Check if the modified form with the same rendererId was not added again. + if (base::FeatureList::IsEnabled(features::kAutofillUseNewFormExtraction)) { + EXPECT_EQ(1u, FormCacheTestApi(&form_cache).parsed_forms_rendererid_size()); + } else { + EXPECT_EQ(1u, FormCacheTestApi(&form_cache).parsed_forms_size()); + } } // Test that after adding an unowned input element to an already extracted -// synthetic form, the form (has the same renderer ID) is not added twice to the +// synthetic form, the form (has the same rendererId) is not added twice to the // extracted forms. -TEST_F(FormCacheBrowserTest, +TEST_P(ParameterizedFormCacheBrowserTest, RemoveReextractedModifiedSyntheticFormsWithSameRendererID) { base::test::ScopedFeatureList scoped_feature_list; scoped_feature_list.InitAndEnableFeature( @@ -572,9 +596,57 @@ ASSERT_TRUE(unowned_form); EXPECT_EQ(2u, unowned_form->fields.size()); - // Check if the modified form with the same rendererID was not added again. - // (We expect that all the unowned fields have the same rendererID.) - EXPECT_EQ(1u, form_cache.parsed_forms_.size()); + // Check if the modified form with the same rendererId was not added again. + // (We expect that all the unowned fields have the same rendererId.) + if (base::FeatureList::IsEnabled(features::kAutofillUseNewFormExtraction)) { + EXPECT_EQ(1u, FormCacheTestApi(&form_cache).parsed_forms_rendererid_size()); + } else { + EXPECT_EQ(1u, FormCacheTestApi(&form_cache).parsed_forms_size()); + } } +// Test that the FormCache does not contain empty forms. +TEST_F(FormCacheBrowserTest, DoNotStoreEmptyForms) { + base::test::ScopedFeatureList scoped_feature_list; + scoped_feature_list.InitAndEnableFeature( + features::kAutofillUseNewFormExtraction); + + LoadHTML(R"(<form></form>)"); + + FormCache form_cache(GetMainFrame()); + form_cache.ExtractNewForms(nullptr); + + EXPECT_EQ(1u, GetMainFrame()->GetDocument().Forms().size()); + EXPECT_EQ(0u, FormCacheTestApi(&form_cache).parsed_forms_rendererid_size()); +} + +// Test that the FormCache never contains more than |kMaxParseableFields| +// non-empty parsed forms. +TEST_F(FormCacheBrowserTest, FormCacheSizeUpperBound) { + base::test::ScopedFeatureList scoped_feature_list; + scoped_feature_list.InitAndEnableFeature( + features::kAutofillUseNewFormExtraction); + + // Create a HTML page that contains `kMaxParseableFields + 1` non-empty + // forms. + std::string html; + for (unsigned int i = 0; i < kMaxParseableFields + 1; i++) { + html += "<form><input></form>"; + } + LoadHTML(html.c_str()); + + FormCache form_cache(GetMainFrame()); + form_cache.ExtractNewForms(nullptr); + + EXPECT_EQ(kMaxParseableFields + 1, + GetMainFrame()->GetDocument().Forms().size()); + EXPECT_EQ(kMaxParseableFields, + FormCacheTestApi(&form_cache).parsed_forms_rendererid_size()); +} + +INSTANTIATE_TEST_SUITE_P(All, + ParameterizedFormCacheBrowserTest, + testing::Bool()); +INSTANTIATE_TEST_SUITE_P(All, FormCacheIframeBrowserTest, testing::Bool()); + } // namespace autofill
diff --git a/components/autofill/content/renderer/form_cache_test_api.h b/components/autofill/content/renderer/form_cache_test_api.h new file mode 100644 index 0000000..e4845db --- /dev/null +++ b/components/autofill/content/renderer/form_cache_test_api.h
@@ -0,0 +1,53 @@ +// Copyright 2021 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef COMPONENTS_AUTOFILL_CONTENT_RENDERER_FORM_CACHE_TEST_API_H_ +#define COMPONENTS_AUTOFILL_CONTENT_RENDERER_FORM_CACHE_TEST_API_H_ + +#include <stddef.h> + +#include "components/autofill/content/renderer/form_cache.h" +#include "third_party/blink/public/web/web_form_control_element.h" + +namespace autofill { + +// Exposes some testing operations for FormCache. +class FormCacheTestApi { + public: + explicit FormCacheTestApi(FormCache* form_cache) : form_cache_(form_cache) { + DCHECK(form_cache_); + } + + // For a given |control_element| check whether it is eligible for manual + // filling on form interaction. + bool IsFormElementEligibleForManualFilling( + const blink::WebFormControlElement& control_element) { + return base::Contains( + form_cache_->fields_eligible_for_manual_filling_, + FieldRendererId(control_element.UniqueRendererFormControlId())); + } + + size_t initial_select_values_size() { + return form_cache_->initial_select_values_.size(); + } + + size_t initial_checked_state_size() { + return form_cache_->initial_checked_state_.size(); + } + + size_t parsed_forms_size() { return form_cache_->parsed_forms_.size(); } + + // TODO(crbug/1215333): Remove once the `AutofillUseNewFormExtraction` feature + // is launched. + size_t parsed_forms_rendererid_size() { + return form_cache_->parsed_forms_rendererid_.size(); + } + + private: + FormCache* form_cache_; +}; + +} // namespace autofill + +#endif // COMPONENTS_AUTOFILL_CONTENT_RENDERER_FORM_CACHE_TEST_API_H_ \ No newline at end of file
diff --git a/components/autofill/core/common/autofill_features.cc b/components/autofill/core/common/autofill_features.cc index 2ca29b49..16547fd 100644 --- a/components/autofill/core/common/autofill_features.cc +++ b/components/autofill/core/common/autofill_features.cc
@@ -384,6 +384,12 @@ "AutofillUseImprovedLabelDisambiguation", base::FEATURE_DISABLED_BY_DEFAULT}; +// Controls whether to use new form extraction function that does not leak +// memory and uses comparison based on the FormRendererIds. +// TODO(crbug.com/1215333): Remove the feature when the experiment is completed. +const base::Feature kAutofillUseNewFormExtraction{ + "AutofillUseNewFormExtraction", base::FEATURE_DISABLED_BY_DEFAULT}; + // Controls whether to use the combined heuristic and the autocomplete section // implementation for section splitting or not. See https://crbug.com/1076175. const base::Feature kAutofillUseNewSectioningMethod{
diff --git a/components/autofill/core/common/autofill_features.h b/components/autofill/core/common/autofill_features.h index bad3b49..9b6eac41 100644 --- a/components/autofill/core/common/autofill_features.h +++ b/components/autofill/core/common/autofill_features.h
@@ -148,6 +148,8 @@ COMPONENT_EXPORT(AUTOFILL) extern const base::Feature kAutofillUseNewSectioningMethod; COMPONENT_EXPORT(AUTOFILL) +extern const base::Feature kAutofillUseNewFormExtraction; +COMPONENT_EXPORT(AUTOFILL) extern const base::Feature kAutofillUseOnlyFormRendererIDForOldDuplicateFormRemoval;
diff --git a/components/autofill/core/common/form_data.h b/components/autofill/core/common/form_data.h index 9a9febb..cafea92 100644 --- a/components/autofill/core/common/form_data.h +++ b/components/autofill/core/common/form_data.h
@@ -54,6 +54,8 @@ struct FormData { // Less-than relation for STL containers. Compares only members needed to // uniquely identify a form. + // TODO(crbug.com/1215333): Remove once `AutofillUseNewFormExtraction` is + // launched. struct IdentityComparator { bool operator()(const FormData& a, const FormData& b) const; };
diff --git a/components/browser_sync/profile_sync_components_factory_impl.cc b/components/browser_sync/profile_sync_components_factory_impl.cc index 7a25f63..cd434aa6 100644 --- a/components/browser_sync/profile_sync_components_factory_impl.cc +++ b/components/browser_sync/profile_sync_components_factory_impl.cc
@@ -26,7 +26,7 @@ #include "components/history/core/browser/sync/history_delete_directives_model_type_controller.h" #include "components/history/core/browser/sync/typed_url_model_type_controller.h" #include "components/history/core/common/pref_names.h" -#include "components/password_manager/core/browser/password_store.h" +#include "components/password_manager/core/browser/password_store_interface.h" #include "components/password_manager/core/browser/sync/password_model_type_controller.h" #include "components/prefs/pref_service.h" #include "components/reading_list/features/reading_list_switches.h" @@ -133,9 +133,9 @@ web_data_service_on_disk, const scoped_refptr<autofill::AutofillWebDataService>& web_data_service_in_memory, - const scoped_refptr<password_manager::PasswordStore>& + const scoped_refptr<password_manager::PasswordStoreInterface>& profile_password_store, - const scoped_refptr<password_manager::PasswordStore>& + const scoped_refptr<password_manager::PasswordStoreInterface>& account_password_store, sync_bookmarks::BookmarkSyncService* bookmark_sync_service) : sync_client_(sync_client),
diff --git a/components/browser_sync/profile_sync_components_factory_impl.h b/components/browser_sync/profile_sync_components_factory_impl.h index c3d9a909..baa27021 100644 --- a/components/browser_sync/profile_sync_components_factory_impl.h +++ b/components/browser_sync/profile_sync_components_factory_impl.h
@@ -27,7 +27,7 @@ } namespace password_manager { -class PasswordStore; +class PasswordStoreInterface; } namespace sync_bookmarks { @@ -50,9 +50,9 @@ web_data_service_on_disk, const scoped_refptr<autofill::AutofillWebDataService>& web_data_service_in_memory, - const scoped_refptr<password_manager::PasswordStore>& + const scoped_refptr<password_manager::PasswordStoreInterface>& profile_password_store, - const scoped_refptr<password_manager::PasswordStore>& + const scoped_refptr<password_manager::PasswordStoreInterface>& account_password_store, sync_bookmarks::BookmarkSyncService* bookmark_sync_service); ProfileSyncComponentsFactoryImpl(const ProfileSyncComponentsFactoryImpl&) = @@ -123,8 +123,10 @@ web_data_service_on_disk_; const scoped_refptr<autofill::AutofillWebDataService> web_data_service_in_memory_; - const scoped_refptr<password_manager::PasswordStore> profile_password_store_; - const scoped_refptr<password_manager::PasswordStore> account_password_store_; + const scoped_refptr<password_manager::PasswordStoreInterface> + profile_password_store_; + const scoped_refptr<password_manager::PasswordStoreInterface> + account_password_store_; sync_bookmarks::BookmarkSyncService* const bookmark_sync_service_; };
diff --git a/components/browser_ui/styles/android/java/res/values/styles.xml b/components/browser_ui/styles/android/java/res/values/styles.xml index 8ae9cff582..341fc36 100644 --- a/components/browser_ui/styles/android/java/res/values/styles.xml +++ b/components/browser_ui/styles/android/java/res/values/styles.xml
@@ -160,6 +160,7 @@ <style name="AppMenuItem"> <item name="android:paddingStart">16dp</item> <item name="android:paddingEnd">16dp</item> + <item name="android:foreground">?attr/listChoiceBackgroundIndicator</item> <item name="android:background">@color/menu_item_bg_color</item> </style>
diff --git a/components/continuous_search/browser/search_result_extractor_client.cc b/components/continuous_search/browser/search_result_extractor_client.cc index 23265b2..d00d07d 100644 --- a/components/continuous_search/browser/search_result_extractor_client.cc +++ b/components/continuous_search/browser/search_result_extractor_client.cc
@@ -31,6 +31,7 @@ void SearchResultExtractorClient::RequestData( content::WebContents* web_contents, + const std::vector<mojom::ResultType>& result_types, RequestDataCallback callback) { if (!web_contents || !web_contents->GetMainFrame() || !web_contents->GetMainFrame()->GetRemoteAssociatedInterfaces()) { @@ -53,6 +54,7 @@ mojom::SearchResultExtractor* extractor_ptr = extractor.get(); extractor_ptr->ExtractCurrentSearchResults( + result_types, base::BindOnce(&SearchResultExtractorClient::RequestDataCallbackAdapter, weak_ptr_factory_.GetWeakPtr(), std::move(extractor), url, std::move(callback)));
diff --git a/components/continuous_search/browser/search_result_extractor_client.h b/components/continuous_search/browser/search_result_extractor_client.h index a4459395..5988661d 100644 --- a/components/continuous_search/browser/search_result_extractor_client.h +++ b/components/continuous_search/browser/search_result_extractor_client.h
@@ -5,6 +5,8 @@ #ifndef COMPONENTS_CONTINUOUS_SEARCH_BROWSER_SEARCH_RESULT_EXTRACTOR_CLIENT_H_ #define COMPONENTS_CONTINUOUS_SEARCH_BROWSER_SEARCH_RESULT_EXTRACTOR_CLIENT_H_ +#include <vector> + #include "base/callback.h" #include "base/memory/weak_ptr.h" #include "components/continuous_search/browser/search_result_extractor_client_status.h" @@ -33,8 +35,11 @@ mojom::CategoryResultsPtr)>; // Requests extraction of SRP data from the main frame of `web_contents`. - // Results are returned to `callback`. + // Results are returned to `callback`. `result_types` is list of result types + // to extract. The extraction will fail and no results will be generated if + // any of the types (except mojom::ResultType::kAds) cannot be extracted. void RequestData(content::WebContents* web_contents, + const std::vector<mojom::ResultType>& result_types, RequestDataCallback callback); private:
diff --git a/components/continuous_search/browser/search_result_extractor_client_unittest.cc b/components/continuous_search/browser/search_result_extractor_client_unittest.cc index f8da1fa99..cb36b90 100644 --- a/components/continuous_search/browser/search_result_extractor_client_unittest.cc +++ b/components/continuous_search/browser/search_result_extractor_client_unittest.cc
@@ -36,8 +36,7 @@ expected_results->category_type = mojom::Category::kOrganic; { mojom::ResultGroupPtr result_group = mojom::ResultGroup::New(); - result_group->label = "Group 1"; - result_group->is_ad_group = false; + result_group->type = mojom::ResultType::kSearchResults; { mojom::SearchResultPtr result = mojom::SearchResult::New(); result->link = GURL("https://www.bar.com/"); @@ -94,7 +93,7 @@ SearchResultExtractorClient client; base::RunLoop loop; client.RequestData( - web_contents(), + web_contents(), {mojom::ResultType::kSearchResults}, base::BindOnce(CheckResponse, SearchResultExtractorClientStatus::kSuccess, std::move(expected_results), loop.QuitClosure())); loop.Run(); @@ -105,7 +104,7 @@ SearchResultExtractorClient client; base::RunLoop loop; client.RequestData( - nullptr, + nullptr, {mojom::ResultType::kSearchResults}, base::BindOnce(CheckResponse, SearchResultExtractorClientStatus::kWebContentsGone, mojom::CategoryResults::New(), loop.QuitClosure())); @@ -122,7 +121,7 @@ SearchResultExtractorClient client; base::RunLoop loop; client.RequestData( - web_contents(), + web_contents(), {mojom::ResultType::kSearchResults}, base::BindOnce(CheckResponse, SearchResultExtractorClientStatus::kNoResults, mojom::CategoryResults::New(), loop.QuitClosure())); @@ -140,7 +139,7 @@ SearchResultExtractorClient client; base::RunLoop loop; client.RequestData( - web_contents(), + web_contents(), {mojom::ResultType::kSearchResults}, base::BindOnce(CheckResponse, SearchResultExtractorClientStatus::kUnexpectedUrl, mojom::CategoryResults::New(), loop.QuitClosure())); @@ -153,7 +152,7 @@ SearchResultExtractorClient client; base::RunLoop loop; client.RequestData( - web_contents(), + web_contents(), {mojom::ResultType::kSearchResults}, base::BindOnce( CheckResponse, SearchResultExtractorClientStatus::kWebContentsHasNonSrpUrl,
diff --git a/components/continuous_search/browser/test/fake_search_result_extractor.cc b/components/continuous_search/browser/test/fake_search_result_extractor.cc index 2350bbdd..1ab43c12 100644 --- a/components/continuous_search/browser/test/fake_search_result_extractor.cc +++ b/components/continuous_search/browser/test/fake_search_result_extractor.cc
@@ -12,6 +12,7 @@ FakeSearchResultExtractor::~FakeSearchResultExtractor() = default; void FakeSearchResultExtractor::ExtractCurrentSearchResults( + const std::vector<mojom::ResultType>& result_types, ExtractCurrentSearchResultsCallback callback) { CHECK(response_set_); std::move(callback).Run(status_, std::move(results_));
diff --git a/components/continuous_search/browser/test/fake_search_result_extractor.h b/components/continuous_search/browser/test/fake_search_result_extractor.h index f5951e0..b9ddba6 100644 --- a/components/continuous_search/browser/test/fake_search_result_extractor.h +++ b/components/continuous_search/browser/test/fake_search_result_extractor.h
@@ -5,6 +5,8 @@ #ifndef COMPONENTS_CONTINUOUS_SEARCH_BROWSER_TEST_FAKE_SEARCH_RESULT_EXTRACTOR_H_ #define COMPONENTS_CONTINUOUS_SEARCH_BROWSER_TEST_FAKE_SEARCH_RESULT_EXTRACTOR_H_ +#include <vector> + #include "components/continuous_search/common/public/mojom/continuous_search.mojom.h" #include "mojo/public/cpp/bindings/associated_receiver.h" @@ -20,6 +22,7 @@ delete; void ExtractCurrentSearchResults( + const std::vector<mojom::ResultType>& result_types, ExtractCurrentSearchResultsCallback callback) override; // Sets the `status` and `results` returned the next time
diff --git a/components/continuous_search/common/public/mojom/continuous_search.mojom b/components/continuous_search/common/public/mojom/continuous_search.mojom index 670b514f..11c793cf 100644 --- a/components/continuous_search/common/public/mojom/continuous_search.mojom +++ b/components/continuous_search/common/public/mojom/continuous_search.mojom
@@ -19,14 +19,21 @@ mojo_base.mojom.String16 title; }; +// The types of logically related groups of search results. E.g., ads, organic +// search results, etc. +enum ResultType { + // Organic search results (regular "10 blue links"). + kSearchResults, + + // Ads. + kAds, +}; + // A logically related group of search results with a label. E.g. ads, organic, // news, etc. struct ResultGroup { - // A label for the group of results. - string label; - - // Whether the group is for ads. - bool is_ad_group; + // The type for this group. + ResultType type; // A list of results for this group. array<SearchResult> results; @@ -64,7 +71,11 @@ kNoResults, }; - // Performs a structured search of the DOM to extract results for the current - // search result page (with the currently selected category). - ExtractCurrentSearchResults() => (Status status, CategoryResults results); + // Performs a structured search of the DOM to extract results of given types + // from the current search result page (with the currently selected category). + // `result_types` is list of result types to extract. The extraction will fail + // and no results will be generated if any of the types + // (except ResultType::kAds) cannot be extracted. + ExtractCurrentSearchResults(array<ResultType> result_types) + => (Status status, CategoryResults results); };
diff --git a/components/continuous_search/renderer/search_result_extractor_browsertest.cc b/components/continuous_search/renderer/search_result_extractor_browsertest.cc index a8fd80f3..e71d475 100644 --- a/components/continuous_search/renderer/search_result_extractor_browsertest.cc +++ b/components/continuous_search/renderer/search_result_extractor_browsertest.cc
@@ -26,6 +26,7 @@ // once the provided `html` is loaded. void LoadHtmlAndExpectExtractedOutput( base::StringPiece html, + const std::vector<mojom::ResultType>& result_types, mojom::SearchResultExtractor::Status expected_status, mojom::CategoryResultsPtr expected_results) { LoadHTML(html.data()); @@ -37,18 +38,19 @@ { auto* extractor = SearchResultExtractorImpl::Create(GetMainRenderFrame()); EXPECT_NE(extractor, nullptr); - extractor->ExtractCurrentSearchResults(base::BindOnce( - [](base::OnceClosure quit, - mojom::SearchResultExtractor::Status* out_status, - mojom::CategoryResultsPtr* out_results, - mojom::SearchResultExtractor::Status status, - mojom::CategoryResultsPtr results) { - *out_status = status; - *out_results = std::move(results); - std::move(quit).Run(); - }, - loop.QuitClosure(), base::Unretained(&out_status), - base::Unretained(&out_results))); + extractor->ExtractCurrentSearchResults( + result_types, base::BindOnce( + [](base::OnceClosure quit, + mojom::SearchResultExtractor::Status* out_status, + mojom::CategoryResultsPtr* out_results, + mojom::SearchResultExtractor::Status status, + mojom::CategoryResultsPtr results) { + *out_status = status; + *out_results = std::move(results); + std::move(quit).Run(); + }, + loop.QuitClosure(), base::Unretained(&out_status), + base::Unretained(&out_results))); loop.Run(); } EXPECT_EQ(expected_status, out_status); @@ -66,17 +68,13 @@ result2->title = u"World"; auto ad_group = mojom::ResultGroup::New(); - ad_group->label = "Ads"; - ad_group->is_ad_group = true; + ad_group->type = mojom::ResultType::kAds; ad_group->results.push_back(std::move(result1)); ad_group->results.push_back(std::move(result2)); auto expected_results = mojom::CategoryResults::New(); expected_results->groups.push_back(std::move(ad_group)); - // If only ads are present the status reports that there are no results as the - // organic search result extraction working is a requirement. However, the - // results for the ad group are still stored in the response. LoadHtmlAndExpectExtractedOutput( R"(<!doctype html> <body> @@ -102,18 +100,30 @@ </div> </div> </body>)", - mojom::SearchResultExtractor::Status::kNoResults, + {mojom::ResultType::kAds}, mojom::SearchResultExtractor::Status::kSuccess, std::move(expected_results)); } +TEST_F(SearchResultExtractorImplRenderViewTest, TestExtractNoAds) { + // If only ads are requested but ads are not present, the status still reports + // success because extracting ads is not a requirement. + LoadHtmlAndExpectExtractedOutput( + R"(<!doctype html> + <body> + <div> + </div> + </body>)", + {mojom::ResultType::kAds}, mojom::SearchResultExtractor::Status::kSuccess, + mojom::CategoryResults::New()); +} + TEST_F(SearchResultExtractorImplRenderViewTest, TestExtractAdsAndResults) { auto ad_result = mojom::SearchResult::New(); ad_result->link = GURL("https://www.example.com/"); ad_result->title = u"Hello"; auto ad_group = mojom::ResultGroup::New(); - ad_group->label = "Ads"; - ad_group->is_ad_group = true; + ad_group->type = mojom::ResultType::kAds; ad_group->results.push_back(std::move(ad_result)); auto result1 = mojom::SearchResult::New(); @@ -125,8 +135,7 @@ result2->title = u"Bar"; auto result_group = mojom::ResultGroup::New(); - result_group->label = "Search Results"; - result_group->is_ad_group = false; + result_group->type = mojom::ResultType::kSearchResults; result_group->results.push_back(std::move(result1)); result_group->results.push_back(std::move(result2)); @@ -180,11 +189,78 @@ </div> </div> </body>)", + {mojom::ResultType::kAds, mojom::ResultType::kSearchResults}, mojom::SearchResultExtractor::Status::kSuccess, std::move(expected_results)); } -TEST_F(SearchResultExtractorImplRenderViewTest, TestExtractResultsOnly) {} +TEST_F(SearchResultExtractorImplRenderViewTest, TestExtractResultsOnly) { + auto result1 = mojom::SearchResult::New(); + result1->link = GURL("https://www.foo.com/"); + result1->title = u"Foo"; + + auto result2 = mojom::SearchResult::New(); + result2->link = GURL("https://www.bar.com/"); + result2->title = u"Bar"; + + auto result_group = mojom::ResultGroup::New(); + result_group->type = mojom::ResultType::kSearchResults; + result_group->results.push_back(std::move(result1)); + result_group->results.push_back(std::move(result2)); + + auto expected_results = mojom::CategoryResults::New(); + expected_results->category_type = mojom::Category::kOrganic; + expected_results->groups.push_back(std::move(result_group)); + LoadHtmlAndExpectExtractedOutput( + R"(<!doctype html> + <body> + <div> + <div></div> + <div id="tads"> + <div> + <div class="mnr-c foo"> + <a href="https://www.example.com/"> + <div></div> + <div role="heading"> + <div>Hello</div> + </div> + </a> + </div> + </div> + </div> + <div id="rso"> + <div class="mnr-c"> + <div></div> + <div> + <a href="https://www.foo.com/"> + <div role="heading">Foo </div> + </a> + </div> + </div> + <div class="mnr-c"> + <div></div> + <div> + <a href="https://www.bar.com/"> + <div role="heading">Bar + </div> + </a> + </div> + </div> + <div class="alpha"> + <div></div> + <div> + <a href="https://www.beta.com/"> + <div role="heading">Beta</div> + </a> + </div> + </div> + </div> + </div> + </body>)", + {mojom::ResultType::kSearchResults}, + mojom::SearchResultExtractor::Status::kSuccess, + std::move(expected_results)); +} // The tests below this line are intended to test the branching of the // extractor. The goal is to ensure there are no scenarios where the extraction @@ -203,6 +279,7 @@ </div> </div> </body>)", + {mojom::ResultType::kSearchResults}, mojom::SearchResultExtractor::Status::kNoResults, mojom::CategoryResults::New()); } @@ -218,6 +295,7 @@ </a> </div> </body>)", + {mojom::ResultType::kSearchResults}, mojom::SearchResultExtractor::Status::kNoResults, mojom::CategoryResults::New()); } @@ -235,6 +313,7 @@ </div> </div> </body>)", + {mojom::ResultType::kSearchResults}, mojom::SearchResultExtractor::Status::kNoResults, mojom::CategoryResults::New()); } @@ -253,6 +332,7 @@ </div> </div> </body>)", + {mojom::ResultType::kSearchResults}, mojom::SearchResultExtractor::Status::kNoResults, mojom::CategoryResults::New()); } @@ -270,6 +350,7 @@ </div> </div> </body>)", + {mojom::ResultType::kSearchResults}, mojom::SearchResultExtractor::Status::kNoResults, mojom::CategoryResults::New()); } @@ -287,6 +368,7 @@ </div> </div> </body>)", + {mojom::ResultType::kSearchResults}, mojom::SearchResultExtractor::Status::kNoResults, mojom::CategoryResults::New()); } @@ -304,6 +386,7 @@ </div> </div> </body>)", + {mojom::ResultType::kSearchResults}, mojom::SearchResultExtractor::Status::kNoResults, mojom::CategoryResults::New()); } @@ -321,6 +404,7 @@ </div> </div> </body>)", + {mojom::ResultType::kSearchResults}, mojom::SearchResultExtractor::Status::kNoResults, mojom::CategoryResults::New()); } @@ -338,6 +422,7 @@ </div> </div> </body>)", + {mojom::ResultType::kSearchResults}, mojom::SearchResultExtractor::Status::kNoResults, mojom::CategoryResults::New()); } @@ -355,6 +440,7 @@ </div> </div> </body>)", + {mojom::ResultType::kSearchResults}, mojom::SearchResultExtractor::Status::kNoResults, mojom::CategoryResults::New()); } @@ -373,6 +459,7 @@ </div> </div> </body>)", + {mojom::ResultType::kSearchResults}, mojom::SearchResultExtractor::Status::kNoResults, mojom::CategoryResults::New()); } @@ -390,6 +477,7 @@ </div> </div> </body>)", + {mojom::ResultType::kSearchResults}, mojom::SearchResultExtractor::Status::kNoResults, mojom::CategoryResults::New()); }
diff --git a/components/continuous_search/renderer/search_result_extractor_impl.cc b/components/continuous_search/renderer/search_result_extractor_impl.cc index 9909eb99..6328777 100644 --- a/components/continuous_search/renderer/search_result_extractor_impl.cc +++ b/components/continuous_search/renderer/search_result_extractor_impl.cc
@@ -105,8 +105,7 @@ } auto group = mojom::ResultGroup::New(); - group->is_ad_group = true; - group->label = "Ads"; + group->type = mojom::ResultType::kAds; if (!ExtractResultCards(ads, group)) { return false; } @@ -123,8 +122,7 @@ } auto group = mojom::ResultGroup::New(); - group->is_ad_group = false; - group->label = "Search Results"; + group->type = mojom::ResultType::kSearchResults; if (!ExtractResultCards(cards, group)) { return false; } @@ -154,17 +152,28 @@ SearchResultExtractorImpl::~SearchResultExtractorImpl() = default; void SearchResultExtractorImpl::ExtractCurrentSearchResults( + const std::vector<mojom::ResultType>& result_types, ExtractCurrentSearchResultsCallback callback) { auto category_result = mojom::CategoryResults::New(); blink::WebDocument document = render_frame()->GetWebFrame()->GetDocument(); category_result->document_url = GURL(document.Url()); - ExtractAds(document, category_result); - if (!ExtractResults(document, category_result)) { - std::move(callback).Run(mojom::SearchResultExtractor::Status::kNoResults, - std::move(category_result)); - return; + for (const auto& result_type : result_types) { + switch (result_type) { + case mojom::ResultType::kAds: + ExtractAds(document, category_result); + break; + case mojom::ResultType::kSearchResults: + if (!ExtractResults(document, category_result)) { + // Extracting search results is a requirement, if requested. + std::move(callback).Run( + mojom::SearchResultExtractor::Status::kNoResults, + std::move(category_result)); + return; + } + break; + } } std::move(callback).Run(mojom::SearchResultExtractor::Status::kSuccess,
diff --git a/components/continuous_search/renderer/search_result_extractor_impl.h b/components/continuous_search/renderer/search_result_extractor_impl.h index 24805222..509c37c 100644 --- a/components/continuous_search/renderer/search_result_extractor_impl.h +++ b/components/continuous_search/renderer/search_result_extractor_impl.h
@@ -5,6 +5,8 @@ #ifndef COMPONENTS_CONTINUOUS_SEARCH_RENDERER_SEARCH_RESULT_EXTRACTOR_IMPL_H_ #define COMPONENTS_CONTINUOUS_SEARCH_RENDERER_SEARCH_RESULT_EXTRACTOR_IMPL_H_ +#include <vector> + #include "components/continuous_search/common/public/mojom/continuous_search.mojom.h" #include "content/public/renderer/render_frame.h" #include "content/public/renderer/render_frame_observer.h" @@ -26,6 +28,7 @@ delete; void ExtractCurrentSearchResults( + const std::vector<mojom::ResultType>& result_types, ExtractCurrentSearchResultsCallback callback) override; private:
diff --git a/components/device_reauth/BUILD.gn b/components/device_reauth/BUILD.gn new file mode 100644 index 0000000..8e14a02 --- /dev/null +++ b/components/device_reauth/BUILD.gn
@@ -0,0 +1,43 @@ +# Copyright 2021 The Chromium Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +if (is_android) { + import("//build/config/android/config.gni") + import("//build/config/android/rules.gni") +} + +static_library("device_reauth") { + sources = [ + "biometric_authenticator.cc", + "biometric_authenticator.h", + ] + + deps = [ "//base" ] +} + +static_library("test_support") { + testonly = true + sources = [ + "mock_biometric_authenticator.cc", + "mock_biometric_authenticator.h", + ] + + deps = [ + ":device_reauth", + "//base", + "//testing/gmock", + ] +} + +if (is_android) { + android_library("device_reauth_java_enums") { + srcjar_deps = [ ":device_reauth_java_enums_srcjar" ] + + deps = [ "//third_party/androidx:androidx_annotation_annotation_java" ] + } + + java_cpp_enum("device_reauth_java_enums_srcjar") { + sources = [ "biometric_authenticator.h" ] + } +}
diff --git a/components/device_reauth/OWNERS b/components/device_reauth/OWNERS new file mode 100644 index 0000000..275fae6 --- /dev/null +++ b/components/device_reauth/OWNERS
@@ -0,0 +1,2 @@ +ioanap@chromium.org +roagarwal@chromium.org
diff --git a/components/device_reauth/README.md b/components/device_reauth/README.md new file mode 100644 index 0000000..d98843a --- /dev/null +++ b/components/device_reauth/README.md
@@ -0,0 +1,4 @@ +#Device reauth + +Provides stubs for device level re-authentication capabilities. Currently, covers only biometric reauthentication. +The componenet is shared with iOS and hence dependencies on //content are not allowed.
diff --git a/components/device_reauth/biometric_authenticator.cc b/components/device_reauth/biometric_authenticator.cc new file mode 100644 index 0000000..9fba9a4 --- /dev/null +++ b/components/device_reauth/biometric_authenticator.cc
@@ -0,0 +1,11 @@ +// Copyright 2021 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "components/device_reauth/biometric_authenticator.h" + +namespace device_reauth { + +BiometricAuthenticator::BiometricAuthenticator() = default; + +} // namespace device_reauth
diff --git a/components/password_manager/core/browser/biometric_authenticator.h b/components/device_reauth/biometric_authenticator.h similarity index 90% rename from components/password_manager/core/browser/biometric_authenticator.h rename to components/device_reauth/biometric_authenticator.h index 9cdb611..f0862a4c 100644 --- a/components/password_manager/core/browser/biometric_authenticator.h +++ b/components/device_reauth/biometric_authenticator.h
@@ -2,13 +2,13 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef COMPONENTS_PASSWORD_MANAGER_CORE_BROWSER_BIOMETRIC_AUTHENTICATOR_H_ -#define COMPONENTS_PASSWORD_MANAGER_CORE_BROWSER_BIOMETRIC_AUTHENTICATOR_H_ +#ifndef COMPONENTS_DEVICE_REAUTH_BIOMETRIC_AUTHENTICATOR_H_ +#define COMPONENTS_DEVICE_REAUTH_BIOMETRIC_AUTHENTICATOR_H_ #include "base/callback_forward.h" #include "base/memory/ref_counted.h" -namespace password_manager { +namespace device_reauth { // Different states for biometric availability for a given device. Either no // biometric hardware is available, hardware is available but the user has no @@ -17,7 +17,7 @@ // These values are persisted to logs. Entries should not be renumbered and // numeric values should never be reused. // -// GENERATED_JAVA_ENUM_PACKAGE: org.chromium.chrome.browser.password_manager +// GENERATED_JAVA_ENUM_PACKAGE: org.chromium.chrome.browser.device_reauth enum class BiometricsAvailability { kOtherError = 0, kAvailable = 1, @@ -89,7 +89,7 @@ public: using AuthenticateCallback = base::OnceCallback<void(bool)>; - BiometricAuthenticator() = default; + BiometricAuthenticator(); BiometricAuthenticator(const BiometricAuthenticator&) = delete; BiometricAuthenticator& operator=(const BiometricAuthenticator&) = delete; @@ -115,6 +115,6 @@ friend class base::RefCounted<BiometricAuthenticator>; }; -} // namespace password_manager +} // namespace device_reauth -#endif // COMPONENTS_PASSWORD_MANAGER_CORE_BROWSER_BIOMETRIC_AUTHENTICATOR_H_ +#endif // COMPONENTS_DEVICE_REAUTH_BIOMETRIC_AUTHENTICATOR_H_
diff --git a/components/password_manager/core/browser/mock_biometric_authenticator.cc b/components/device_reauth/mock_biometric_authenticator.cc similarity index 67% rename from components/password_manager/core/browser/mock_biometric_authenticator.cc rename to components/device_reauth/mock_biometric_authenticator.cc index 50377d3..abdf2c9 100644 --- a/components/password_manager/core/browser/mock_biometric_authenticator.cc +++ b/components/device_reauth/mock_biometric_authenticator.cc
@@ -2,11 +2,11 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "components/password_manager/core/browser/mock_biometric_authenticator.h" +#include "components/device_reauth/mock_biometric_authenticator.h" -namespace password_manager { +namespace device_reauth { MockBiometricAuthenticator::MockBiometricAuthenticator() = default; MockBiometricAuthenticator::~MockBiometricAuthenticator() = default; -} // namespace password_manager +} // namespace device_reauth
diff --git a/components/password_manager/core/browser/mock_biometric_authenticator.h b/components/device_reauth/mock_biometric_authenticator.h similarity index 65% rename from components/password_manager/core/browser/mock_biometric_authenticator.h rename to components/device_reauth/mock_biometric_authenticator.h index a5c34cf..2824035 100644 --- a/components/password_manager/core/browser/mock_biometric_authenticator.h +++ b/components/device_reauth/mock_biometric_authenticator.h
@@ -2,14 +2,14 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef COMPONENTS_PASSWORD_MANAGER_CORE_BROWSER_MOCK_BIOMETRIC_AUTHENTICATOR_H_ -#define COMPONENTS_PASSWORD_MANAGER_CORE_BROWSER_MOCK_BIOMETRIC_AUTHENTICATOR_H_ +#ifndef COMPONENTS_DEVICE_REAUTH_MOCK_BIOMETRIC_AUTHENTICATOR_H_ +#define COMPONENTS_DEVICE_REAUTH_MOCK_BIOMETRIC_AUTHENTICATOR_H_ #include "base/callback.h" -#include "components/password_manager/core/browser/biometric_authenticator.h" +#include "components/device_reauth/biometric_authenticator.h" #include "testing/gmock/include/gmock/gmock.h" -namespace password_manager { +namespace device_reauth { // Mocked BiometricAuthenticator used by unit tests. class MockBiometricAuthenticator : public BiometricAuthenticator { @@ -27,6 +27,6 @@ ~MockBiometricAuthenticator() override; }; -} // namespace password_manager +} // namespace device_reauth -#endif // COMPONENTS_PASSWORD_MANAGER_CORE_BROWSER_MOCK_BIOMETRIC_AUTHENTICATOR_H_ \ No newline at end of file +#endif // COMPONENTS_DEVICE_REAUTH_MOCK_BIOMETRIC_AUTHENTICATOR_H_ \ No newline at end of file
diff --git a/chrome/browser/resources/download_internals/BUILD.gn b/components/download/resources/download_internals/BUILD.gn similarity index 95% rename from chrome/browser/resources/download_internals/BUILD.gn rename to components/download/resources/download_internals/BUILD.gn index 0b90251..ce7668b 100644 --- a/chrome/browser/resources/download_internals/BUILD.gn +++ b/components/download/resources/download_internals/BUILD.gn
@@ -21,8 +21,6 @@ } grit("resources") { - defines = chrome_grit_defines - # These arguments are needed since the grd is generated at build time. enable_input_discovery_for_gn_analyze = false source = "$target_gen_dir/resources.grd" @@ -34,7 +32,7 @@ "grit/download_internals_resources_map.h", "download_internals_resources.pak", ] - output_dir = "$root_gen_dir/chrome" + output_dir = "$root_gen_dir/components" } js_type_check("closure_compile") {
diff --git a/chrome/browser/resources/download_internals/download_internals.css b/components/download/resources/download_internals/download_internals.css similarity index 100% rename from chrome/browser/resources/download_internals/download_internals.css rename to components/download/resources/download_internals/download_internals.css
diff --git a/chrome/browser/resources/download_internals/download_internals.html b/components/download/resources/download_internals/download_internals.html similarity index 100% rename from chrome/browser/resources/download_internals/download_internals.html rename to components/download/resources/download_internals/download_internals.html
diff --git a/chrome/browser/resources/download_internals/download_internals.js b/components/download/resources/download_internals/download_internals.js similarity index 100% rename from chrome/browser/resources/download_internals/download_internals.js rename to components/download/resources/download_internals/download_internals.js
diff --git a/chrome/browser/resources/download_internals/download_internals_browser_proxy.js b/components/download/resources/download_internals/download_internals_browser_proxy.js similarity index 100% rename from chrome/browser/resources/download_internals/download_internals_browser_proxy.js rename to components/download/resources/download_internals/download_internals_browser_proxy.js
diff --git a/chrome/browser/resources/download_internals/download_internals_visuals.js b/components/download/resources/download_internals/download_internals_visuals.js similarity index 100% rename from chrome/browser/resources/download_internals/download_internals_visuals.js rename to components/download/resources/download_internals/download_internals_visuals.js
diff --git a/components/gcm_driver/gcm_account_tracker.cc b/components/gcm_driver/gcm_account_tracker.cc index fec1e8c..f1746f1d 100644 --- a/components/gcm_driver/gcm_account_tracker.cc +++ b/components/gcm_driver/gcm_account_tracker.cc
@@ -276,6 +276,10 @@ if (!driver_->IsConnected()) return; + // Only start fetching access tokens if the user consented for sync. + if (!identity_manager_->HasPrimaryAccount(signin::ConsentLevel::kSync)) + return; + for (auto iter = account_infos_.begin(); iter != account_infos_.end(); ++iter) { if (iter->second.state == TOKEN_NEEDED)
diff --git a/components/gcm_driver/gcm_account_tracker_unittest.cc b/components/gcm_driver/gcm_account_tracker_unittest.cc index cbc0a28..a8dfbd4 100644 --- a/components/gcm_driver/gcm_account_tracker_unittest.cc +++ b/components/gcm_driver/gcm_account_tracker_unittest.cc
@@ -11,6 +11,7 @@ #include "base/macros.h" #include "base/test/task_environment.h" +#include "build/chromeos_buildflags.h" #include "components/gcm_driver/fake_gcm_driver.h" #include "components/signin/public/identity_manager/identity_test_environment.h" #include "google_apis/gaia/google_service_auth_error.h" @@ -162,6 +163,7 @@ // Helpers to pass fake info to the tracker. CoreAccountInfo AddAccount(const std::string& email); CoreAccountInfo SetPrimaryAccount(const std::string& email); + void ClearPrimaryAccount(); void RemoveAccount(const CoreAccountId& account_id); // Helpers for dealing with OAuth2 access token requests. @@ -223,6 +225,10 @@ email, signin::ConsentLevel::kSync); } +void GCMAccountTrackerTest::ClearPrimaryAccount() { + identity_test_env_.ClearPrimaryAccount(); +} + void GCMAccountTrackerTest::RemoveAccount(const CoreAccountId& account_id) { identity_test_env_.RemoveRefreshTokenForAccount(account_id); } @@ -335,6 +341,29 @@ VerifyAccountTokens(expected_accounts, driver()->accounts()); } +#if !BUILDFLAG(IS_CHROMEOS_ASH) +// Tests that clearing the primary account when having multiple accounts +// does not crash the application. +// Regression test for crbug.com/1234406 +TEST_F(GCMAccountTrackerTest, AccountRemovedWithoutSyncConsentNoCrash) { + CoreAccountInfo account1 = SetPrimaryAccount(kEmail1); + CoreAccountInfo account2 = AddAccount(kEmail2); + + // Set last fetch time to now so that access token fetch is not required + // but not started. + driver()->SetLastTokenFetchTime(base::Time::Now()); + tracker()->Start(); + EXPECT_FALSE(driver()->update_accounts_called()); + + // Reset the last fetch time to verify that clearing the primary account + // will not trigger a token fetch. + driver()->SetLastTokenFetchTime(base::Time()); + EXPECT_EQ(base::TimeDelta(), GetTimeToNextTokenReporting()); + ClearPrimaryAccount(); + EXPECT_TRUE(driver()->update_accounts_called()); +} +#endif // !BUILDFLAG(IS_CHROMEOS_ASH) + TEST_F(GCMAccountTrackerTest, GetTokenFailed) { CoreAccountInfo account1 = SetPrimaryAccount(kEmail1); CoreAccountInfo account2 = AddAccount(kEmail2);
diff --git a/components/omnibox/browser/actions/omnibox_pedal_implementations.cc b/components/omnibox/browser/actions/omnibox_pedal_implementations.cc index 9c696df..a30324c0 100644 --- a/components/omnibox/browser/actions/omnibox_pedal_implementations.cc +++ b/components/omnibox/browser/actions/omnibox_pedal_implementations.cc
@@ -1085,7 +1085,7 @@ bool IsReadyToTrigger( const AutocompleteInput& input, const AutocompleteProviderClient& client) const override { - return client.GetPrefs()->GetBoolean("AllowDinosaurEasterEgg"); + return client.GetPrefs()->GetBoolean("allow_dinosaur_easter_egg"); } protected:
diff --git a/components/password_manager/DEPS b/components/password_manager/DEPS index 33b8431..68ccc86 100644 --- a/components/password_manager/DEPS +++ b/components/password_manager/DEPS
@@ -1,7 +1,6 @@ include_rules = [ "+components/autofill/core/common", "+components/os_crypt", - "+components/password_manager/core", "+components/prefs", "+components/strings/grit", "+components/sync/model",
diff --git a/components/password_manager/core/browser/BUILD.gn b/components/password_manager/core/browser/BUILD.gn index c94ba266..17de4d8 100644 --- a/components/password_manager/core/browser/BUILD.gn +++ b/components/password_manager/core/browser/BUILD.gn
@@ -38,7 +38,6 @@ "android_affiliation/facet_manager_host.h", "android_affiliation/lookup_affiliation_response_parser.cc", "android_affiliation/lookup_affiliation_response_parser.h", - "biometric_authenticator.h", "browser_save_password_progress_logger.cc", "browser_save_password_progress_logger.h", "bulk_leak_check_service.cc", @@ -277,6 +276,7 @@ "//components/autofill/core/browser/proto", "//components/autofill/core/common", "//components/autofill/core/common/mojom:mojo_types", + "//components/device_reauth", "//components/favicon/core", "//components/keyed_service/core", "//components/os_crypt", @@ -440,7 +440,6 @@ java_cpp_enum("password_manager_java_enums_srcjar") { sources = [ - "biometric_authenticator.h", "manage_passwords_referrer.h", "password_manager_metrics_util.h", ] @@ -496,8 +495,6 @@ "fake_form_fetcher.h", "fake_password_store_backend.cc", "fake_password_store_backend.h", - "mock_biometric_authenticator.cc", - "mock_biometric_authenticator.h", "mock_bulk_leak_check_service.cc", "mock_bulk_leak_check_service.h", "mock_field_info_store.cc", @@ -732,6 +729,8 @@ "//components/autofill/core/browser:test_support", "//components/autofill/core/browser/proto", "//components/autofill/core/common", + "//components/device_reauth", + "//components/device_reauth:test_support", "//components/favicon/core/test:test_support", "//components/os_crypt", "//components/os_crypt:test_support",
diff --git a/components/password_manager/core/browser/DEPS b/components/password_manager/core/browser/DEPS index 4b5b4fb5..62a2918 100644 --- a/components/password_manager/core/browser/DEPS +++ b/components/password_manager/core/browser/DEPS
@@ -1,5 +1,6 @@ include_rules = [ "+components/autofill/core/browser", + "+components/device_reauth", "+components/favicon/core", "+components/keyed_service/core", "+components/profile_metrics",
diff --git a/components/password_manager/core/browser/form_parsing/form_parser.cc b/components/password_manager/core/browser/form_parsing/form_parser.cc index 8b08c44..ac4cc7a 100644 --- a/components/password_manager/core/browser/form_parsing/form_parser.cc +++ b/components/password_manager/core/browser/form_parsing/form_parser.cc
@@ -512,6 +512,7 @@ // (1) Passwords with Interactability below |best_interactability| are removed. // (2) If |mode| == |kSaving|, passwords with empty values are removed. // (3) Passwords for which IsLikelyPassword returns false are removed. +// (4) Field parsed as username is removed. // If applying rules (1)-(3) results in a non-empty vector of password fields, // that vector is returned. Otherwise, only rules (1) and (2) are applied and // the result returned (even if it is empty). @@ -525,7 +526,8 @@ FormDataParser::Mode mode, Interactability best_interactability, FormDataParser::ReadonlyPasswordFields* readonly_status, - bool* is_fallback) { + bool* is_fallback, + const FormFieldData* username) { DCHECK(readonly_status); DCHECK(is_fallback); @@ -565,6 +567,15 @@ [&ignored_readonly](const ProcessedField* processed_field) { return IsLikelyPassword(*processed_field, &ignored_readonly); }); + + // Step 4: remove the field parsed as username, if needed. + if (username && username->IsPasswordInputElement()) { + base::EraseIf(filtered, [username](const ProcessedField* processed_field) { + return processed_field->field->unique_renderer_id == + username->unique_renderer_id; + }); + } + // Compute the readonly statistic for metrics. DCHECK_LE(ignored_readonly, all_passwords_seen); if (ignored_readonly == 0) @@ -743,9 +754,9 @@ // Try to find password elements (current, new, confirmation) among those // with best interactability. - std::vector<const FormFieldData*> passwords = - GetRelevantPasswords(processed_fields, mode, password_max, - readonly_status, &found_fields->is_fallback); + std::vector<const FormFieldData*> passwords = GetRelevantPasswords( + processed_fields, mode, password_max, readonly_status, + &found_fields->is_fallback, found_fields->username); if (passwords.empty()) return; LocateSpecificPasswords(passwords, &found_fields->password,
diff --git a/components/password_manager/core/browser/form_parsing/form_parser_unittest.cc b/components/password_manager/core/browser/form_parsing/form_parser_unittest.cc index 0285015..09dfdc3 100644 --- a/components/password_manager/core/browser/form_parsing/form_parser_unittest.cc +++ b/components/password_manager/core/browser/form_parsing/form_parser_unittest.cc
@@ -2829,6 +2829,29 @@ }}); } +// Tests that if the field is parsed as username based on server predictions, +// than it cannot be picked as password based on local heuristics. +TEST(FormParserTest, UsernameWithTypePasswordAndServerPredictions) { + CheckTestData({ + { + .description_for_logging = + "Username with server predictions and type 'password'", + .fields = + { + {.role = ElementRole::USERNAME, + .value = u"testusername", + .name = u"field1", + .form_control_type = "password", + .prediction = {.type = autofill::USERNAME}}, + {.role = ElementRole::CURRENT_PASSWORD, + .value = u"testpass", + .name = u"field2", + .form_control_type = "password"}, + }, + }, + }); +} + } // namespace } // namespace password_manager
diff --git a/components/password_manager/core/browser/mock_password_store.h b/components/password_manager/core/browser/mock_password_store.h index b100e567..ee39a29 100644 --- a/components/password_manager/core/browser/mock_password_store.h +++ b/components/password_manager/core/browser/mock_password_store.h
@@ -71,16 +71,6 @@ ReportMetricsImpl, (const std::string&, bool, BulkCheckDone), (override)); - MOCK_METHOD(PasswordStoreChangeList, - AddInsecureCredentialImpl, - (const InsecureCredential&), - (override)); - MOCK_METHOD(PasswordStoreChangeList, - RemoveInsecureCredentialsImpl, - (const std::string&, - const std::u16string&, - RemoveInsecureCredentialsReason), - (override)); MOCK_METHOD(std::vector<InsecureCredential>, GetAllInsecureCredentialsImpl, (),
diff --git a/components/password_manager/core/browser/password_autofill_manager.cc b/components/password_manager/core/browser/password_autofill_manager.cc index 01bedd0..ab3c798 100644 --- a/components/password_manager/core/browser/password_autofill_manager.cc +++ b/components/password_manager/core/browser/password_autofill_manager.cc
@@ -32,9 +32,9 @@ #include "components/autofill/core/common/autofill_util.h" #include "components/autofill/core/common/password_form_fill_data.h" #include "components/autofill/core/common/password_generation_util.h" +#include "components/device_reauth/biometric_authenticator.h" #include "components/favicon/core/favicon_util.h" #include "components/password_manager/core/browser/android_affiliation/affiliation_utils.h" -#include "components/password_manager/core/browser/biometric_authenticator.h" #include "components/password_manager/core/browser/password_feature_manager.h" #include "components/password_manager/core/browser/password_manager_client.h" #include "components/password_manager/core/browser/password_manager_driver.h" @@ -433,7 +433,7 @@ PasswordDropdownSelectedOption::kPassword, password_client_->IsIncognito()); - scoped_refptr<BiometricAuthenticator> authenticator = + scoped_refptr<device_reauth::BiometricAuthenticator> authenticator = password_client_->GetBiometricAuthenticator(); // Note: this is currently only implemented on Android. For desktop, // the `authenticator` will be null. @@ -446,7 +446,7 @@ // invalidates the callback, so using base::Unretained here is safe. authenticator_ = std::move(authenticator); authenticator_->Authenticate( - BiometricAuthRequester::kAutofillSuggestion, + device_reauth::BiometricAuthRequester::kAutofillSuggestion, base::BindOnce(&PasswordAutofillManager::OnBiometricReauthCompleted, base::Unretained(this), value, frontend_id)); } @@ -816,7 +816,8 @@ void PasswordAutofillManager::CancelBiometricReauthIfOngoing() { if (!authenticator_) return; - authenticator_->Cancel(BiometricAuthRequester::kAutofillSuggestion); + authenticator_->Cancel( + device_reauth::BiometricAuthRequester::kAutofillSuggestion); authenticator_.reset(); }
diff --git a/components/password_manager/core/browser/password_autofill_manager.h b/components/password_manager/core/browser/password_autofill_manager.h index e2bec94..62cec94 100644 --- a/components/password_manager/core/browser/password_autofill_manager.h +++ b/components/password_manager/core/browser/password_autofill_manager.h
@@ -218,7 +218,7 @@ // Used to trigger a reauthentication prompt based on biometrics that needs // to be cleared before the password is filled. Currently only used // on Android. - scoped_refptr<BiometricAuthenticator> authenticator_; + scoped_refptr<device_reauth::BiometricAuthenticator> authenticator_; base::WeakPtrFactory<PasswordAutofillManager> weak_ptr_factory_{this};
diff --git a/components/password_manager/core/browser/password_autofill_manager_unittest.cc b/components/password_manager/core/browser/password_autofill_manager_unittest.cc index f21df6e..a992485 100644 --- a/components/password_manager/core/browser/password_autofill_manager_unittest.cc +++ b/components/password_manager/core/browser/password_autofill_manager_unittest.cc
@@ -29,9 +29,9 @@ #include "components/autofill/core/common/form_field_data.h" #include "components/autofill/core/common/password_form_fill_data.h" #include "components/autofill/core/common/password_generation_util.h" +#include "components/device_reauth/biometric_authenticator.h" +#include "components/device_reauth/mock_biometric_authenticator.h" #include "components/favicon/core/test/mock_favicon_service.h" -#include "components/password_manager/core/browser/biometric_authenticator.h" -#include "components/password_manager/core/browser/mock_biometric_authenticator.h" #include "components/password_manager/core/browser/mock_password_feature_manager.h" #include "components/password_manager/core/browser/password_manager.h" #include "components/password_manager/core/browser/password_manager_metrics_util.h" @@ -71,6 +71,8 @@ using autofill::SuggestionVectorValuesAre; using autofill::password_generation::PasswordGenerationType; using base::test::RunOnceCallback; +using device_reauth::BiometricAuthRequester; +using device_reauth::BiometricsAvailability; using favicon_base::FaviconImageCallback; using gfx::test::AreImagesEqual; using testing::_; @@ -152,11 +154,13 @@ } void SetBiometricAuthenticator( - scoped_refptr<MockBiometricAuthenticator> biometric_authenticator) { + scoped_refptr<device_reauth::MockBiometricAuthenticator> + biometric_authenticator) { biometric_authenticator_ = std::move(biometric_authenticator); } - scoped_refptr<BiometricAuthenticator> GetBiometricAuthenticator() override { + scoped_refptr<device_reauth::BiometricAuthenticator> + GetBiometricAuthenticator() override { return biometric_authenticator_; } @@ -175,7 +179,8 @@ private: MockPasswordManagerDriver driver_; - scoped_refptr<MockBiometricAuthenticator> biometric_authenticator_ = nullptr; + scoped_refptr<device_reauth::MockBiometricAuthenticator> + biometric_authenticator_ = nullptr; signin::IdentityTestEnvironment identity_test_env_; std::unique_ptr<MockPasswordFeatureManager> feature_manager_{ new NiceMock<MockPasswordFeatureManager>}; @@ -330,8 +335,8 @@ std::unique_ptr<PasswordAutofillManager> password_autofill_manager_; - scoped_refptr<MockBiometricAuthenticator> authenticator_ = - base::MakeRefCounted<MockBiometricAuthenticator>(); + scoped_refptr<device_reauth::MockBiometricAuthenticator> authenticator_ = + base::MakeRefCounted<device_reauth::MockBiometricAuthenticator>(); std::u16string test_username_; std::u16string test_password_; @@ -1506,8 +1511,7 @@ // The authenticator exists, but cannot be used for authentication. EXPECT_CALL(*authenticator_.get(), CanAuthenticate()) - .WillOnce( - Return(password_manager::BiometricsAvailability::kNoHardware)); + .WillOnce(Return(BiometricsAvailability::kNoHardware)); // Accept the suggestion to start the filing process which tries to // reauthenticate the user if possible. @@ -1559,7 +1563,7 @@ // The authenticator exists and is available. EXPECT_CALL(*authenticator_.get(), CanAuthenticate()) - .WillOnce(Return(password_manager::BiometricsAvailability::kAvailable)); + .WillOnce(Return(BiometricsAvailability::kAvailable)); EXPECT_CALL(*authenticator_.get(), Authenticate(BiometricAuthRequester::kAutofillSuggestion, _)) .WillOnce(RunOnceCallback<1>(/*auth_succeeded=*/true)); @@ -1614,7 +1618,7 @@ // The authenticator exists and is available. EXPECT_CALL(*authenticator_.get(), CanAuthenticate()) - .WillOnce(Return(password_manager::BiometricsAvailability::kAvailable)); + .WillOnce(Return(BiometricsAvailability::kAvailable)); EXPECT_CALL(*authenticator_.get(), Authenticate(BiometricAuthRequester::kAutofillSuggestion, _)) .WillOnce(RunOnceCallback<1>(/*auth_succeeded=*/false)); @@ -1656,7 +1660,7 @@ // The authenticator exists and is available. EXPECT_CALL(*authenticator_.get(), CanAuthenticate()) - .WillOnce(Return(password_manager::BiometricsAvailability::kAvailable)); + .WillOnce(Return(BiometricsAvailability::kAvailable)); EXPECT_CALL(*authenticator_.get(), Authenticate(BiometricAuthRequester::kAutofillSuggestion, _)); @@ -1699,7 +1703,7 @@ // The authenticator exists and is available. EXPECT_CALL(*authenticator_.get(), CanAuthenticate()) - .WillOnce(Return(password_manager::BiometricsAvailability::kAvailable)); + .WillOnce(Return(BiometricsAvailability::kAvailable)); EXPECT_CALL(*authenticator_.get(), Authenticate(BiometricAuthRequester::kAutofillSuggestion, _)); @@ -1743,7 +1747,7 @@ // The authenticator exists and is available. EXPECT_CALL(*authenticator_.get(), CanAuthenticate()) - .WillOnce(Return(password_manager::BiometricsAvailability::kAvailable)); + .WillOnce(Return(BiometricsAvailability::kAvailable)); EXPECT_CALL(*authenticator_.get(), Authenticate(BiometricAuthRequester::kAutofillSuggestion, _));
diff --git a/components/password_manager/core/browser/password_form_manager_unittest.cc b/components/password_manager/core/browser/password_form_manager_unittest.cc index bd6435e..c2a4533 100644 --- a/components/password_manager/core/browser/password_form_manager_unittest.cc +++ b/components/password_manager/core/browser/password_form_manager_unittest.cc
@@ -2199,7 +2199,10 @@ // flow both on password saving and updating. TEST_P(PasswordFormManagerTest, UsernameFirstFlow) { base::test::ScopedFeatureList feature_list; - feature_list.InitAndEnableFeature(features::kUsernameFirstFlow); + feature_list.InitWithFeatures( + /*enabled_features=*/{features::kUsernameFirstFlow, + features::kUsernameFirstFlowFallbackCrowdsourcing}, + /*disabled_features=*/{}); for (bool is_password_update : {false, true}) { CreateFormManager(observed_form_only_password_fields_); @@ -2287,7 +2290,10 @@ .WillByDefault(Return(&mock_field_manager)); base::test::ScopedFeatureList feature_list; - feature_list.InitAndEnableFeature(features::kUsernameFirstFlow); + feature_list.InitWithFeatures( + /*enabled_features=*/{features::kUsernameFirstFlow, + features::kUsernameFirstFlowFallbackCrowdsourcing}, + /*disabled_features=*/{}); CreateFormManager(observed_form_only_password_fields_); fetcher_->NotifyFetchCompleted(); @@ -2338,7 +2344,10 @@ // sent for a nameless field. TEST_P(PasswordFormManagerTest, UsernameFirstFlowVotesNamelessField) { base::test::ScopedFeatureList feature_list; - feature_list.InitAndEnableFeature(features::kUsernameFirstFlow); + feature_list.InitWithFeatures( + /*enabled_features=*/{features::kUsernameFirstFlow, + features::kUsernameFirstFlowFallbackCrowdsourcing}, + /*disabled_features=*/{}); CreateFormManager(observed_form_only_password_fields_); fetcher_->NotifyFetchCompleted();
diff --git a/components/password_manager/core/browser/password_manager_client.cc b/components/password_manager/core/browser/password_manager_client.cc index 8e903b5..9797115 100644 --- a/components/password_manager/core/browser/password_manager_client.cc +++ b/components/password_manager/core/browser/password_manager_client.cc
@@ -6,7 +6,7 @@ #include "base/macros.h" #include "components/autofill/core/common/password_generation_util.h" -#include "components/password_manager/core/browser/biometric_authenticator.h" +#include "components/device_reauth/biometric_authenticator.h" #include "components/password_manager/core/browser/http_auth_manager.h" #include "components/password_manager/core/browser/password_form_manager_for_ui.h" #include "components/password_manager/core/browser/password_manager_client.h" @@ -31,7 +31,7 @@ void PasswordManagerClient::OnPasswordSelected(const std::u16string& text) {} -scoped_refptr<BiometricAuthenticator> +scoped_refptr<device_reauth::BiometricAuthenticator> PasswordManagerClient::GetBiometricAuthenticator() { return nullptr; }
diff --git a/components/password_manager/core/browser/password_manager_client.h b/components/password_manager/core/browser/password_manager_client.h index 240c3e4..0f59af27 100644 --- a/components/password_manager/core/browser/password_manager_client.h +++ b/components/password_manager/core/browser/password_manager_client.h
@@ -66,11 +66,14 @@ class PasswordProtectionService; } +namespace device_reauth { +class BiometricAuthenticator; +} + namespace password_manager { class FieldInfoManager; class PasswordFeatureManager; -class BiometricAuthenticator; class PasswordFormManagerForUI; class PasswordManagerDriver; class PasswordManagerMetricsRecorder; @@ -180,7 +183,8 @@ // Returns a pointer to a BiometricAuthenticator. Might be null if // BiometricAuthentication is not available for a given platform. - virtual scoped_refptr<BiometricAuthenticator> GetBiometricAuthenticator(); + virtual scoped_refptr<device_reauth::BiometricAuthenticator> + GetBiometricAuthenticator(); // Informs the embedder that the user has requested to generate a // password in the focused password field.
diff --git a/components/password_manager/core/browser/password_manager_test_utils.h b/components/password_manager/core/browser/password_manager_test_utils.h index 487b2869..0bfcc201 100644 --- a/components/password_manager/core/browser/password_manager_test_utils.h +++ b/components/password_manager/core/browser/password_manager_test_utils.h
@@ -34,6 +34,13 @@ return store; } +template <class Context, class Store> +scoped_refptr<RefcountedKeyedService> BuildPasswordStoreInterface( + Context* context) { + scoped_refptr<password_manager::PasswordStoreInterface> store(new Store); + return store; +} + // As above, but allows passing parameters to the to-be-created store. The // parameters are specified *before* context so that they can be bound (as in // base::BindRepeating(&BuildPasswordStoreWithArgs<...>, my_arg)), leaving
diff --git a/components/password_manager/core/browser/password_manager_util.cc b/components/password_manager/core/browser/password_manager_util.cc index 717b835..bddec038 100644 --- a/components/password_manager/core/browser/password_manager_util.cc +++ b/components/password_manager/core/browser/password_manager_util.cc
@@ -336,11 +336,10 @@ return result; } -bool CanUseBiometricAuth( - password_manager::BiometricAuthenticator* authenticator) { +bool CanUseBiometricAuth(device_reauth::BiometricAuthenticator* authenticator) { return authenticator && authenticator->CanAuthenticate() == - password_manager::BiometricsAvailability::kAvailable && + device_reauth::BiometricsAvailability::kAvailable && base::FeatureList::IsEnabled( password_manager::features::kBiometricTouchToFill); }
diff --git a/components/password_manager/core/browser/password_manager_util.h b/components/password_manager/core/browser/password_manager_util.h index c62c8ea..3d7c8bb 100644 --- a/components/password_manager/core/browser/password_manager_util.h +++ b/components/password_manager/core/browser/password_manager_util.h
@@ -11,7 +11,7 @@ #include "base/callback.h" #include "base/time/time.h" -#include "components/password_manager/core/browser/biometric_authenticator.h" +#include "components/device_reauth/biometric_authenticator.h" #include "components/password_manager/core/browser/password_form.h" #include "components/password_manager/core/browser/password_manager_client.h" #include "components/password_manager/core/browser/password_store.h" @@ -143,8 +143,7 @@ password_manager::PasswordFormDigest digest); // Helper which checks if biometric authentication is available. -bool CanUseBiometricAuth( - password_manager::BiometricAuthenticator* authenticator); +bool CanUseBiometricAuth(device_reauth::BiometricAuthenticator* authenticator); } // namespace password_manager_util
diff --git a/components/password_manager/core/browser/password_store.cc b/components/password_manager/core/browser/password_store.cc index 9f2cca3..e1e88b4 100644 --- a/components/password_manager/core/browser/password_store.cc +++ b/components/password_manager/core/browser/password_store.cc
@@ -323,27 +323,6 @@ base::TimeDelta::FromSeconds(30)); } } -void PasswordStore::AddInsecureCredential( - const InsecureCredential& insecure_credential) { - DCHECK(main_task_runner_->RunsTasksInCurrentSequence()); - auto callback = base::BindOnce(&PasswordStore::AddInsecureCredentialImpl, - this, insecure_credential); - ScheduleTask(base::BindOnce( - &PasswordStore::InvokeAndNotifyAboutInsecureCredentialsChange, this, - std::move(callback))); -} - -void PasswordStore::RemoveInsecureCredentials( - const std::string& signon_realm, - const std::u16string& username, - RemoveInsecureCredentialsReason reason) { - DCHECK(main_task_runner_->RunsTasksInCurrentSequence()); - auto callback = base::BindOnce(&PasswordStore::RemoveInsecureCredentialsImpl, - this, signon_realm, username, reason); - ScheduleTask(base::BindOnce( - &PasswordStore::InvokeAndNotifyAboutInsecureCredentialsChange, this, - std::move(callback))); -} void PasswordStore::GetAllInsecureCredentials( InsecureCredentialsConsumer* consumer) { @@ -418,22 +397,6 @@ LOG(ERROR) << "Called function without implementation: " << __func__; } -PasswordStoreChangeList PasswordStore::AddInsecureCredentialImpl( - const InsecureCredential& insecure_credential) { - // TODO(crbug.com/1217070): Move as implementation detail into backend. - LOG(ERROR) << "Called function without implementation: " << __func__; - return PasswordStoreChangeList(); -} - -PasswordStoreChangeList PasswordStore::RemoveInsecureCredentialsImpl( - const std::string& signon_realm, - const std::u16string& username, - RemoveInsecureCredentialsReason reason) { - // TODO(crbug.com/1217070): Move as implementation detail into backend. - LOG(ERROR) << "Called function without implementation: " << __func__; - return PasswordStoreChangeList(); -} - std::vector<InsecureCredential> PasswordStore::GetAllInsecureCredentialsImpl() { // TODO(crbug.com/1217070): Move as implementation detail into backend. LOG(ERROR) << "Called function without implementation: " << __func__;
diff --git a/components/password_manager/core/browser/password_store.h b/components/password_manager/core/browser/password_store.h index be11bb3..5b854ff 100644 --- a/components/password_manager/core/browser/password_store.h +++ b/components/password_manager/core/browser/password_store.h
@@ -133,18 +133,6 @@ bool custom_passphrase_sync_enabled, bool is_under_advanced_protection); - // Adds information about credentials issue on - // |insecure_credential.url| for |insecure_credential.username|. The - // first |insecure_credential.create_time| is kept, so if the record for - // given url and username already exists, the new one will be ignored. - void AddInsecureCredential(const InsecureCredential& insecure_credential); - - // Removes information about insecure credentials on |signon_realm| for - // |username|. - void RemoveInsecureCredentials(const std::string& signon_realm, - const std::u16string& username, - RemoveInsecureCredentialsReason reason); - // Retrieves all insecure credentials and notifies |consumer| on // completion. The request will be cancelled if the consumer is destroyed. void GetAllInsecureCredentials(InsecureCredentialsConsumer* consumer); @@ -195,12 +183,6 @@ // Synchronous implementation for manipulating with information about // insecure credentials. // Returns PasswordStoreChangeList for the updated password forms. - virtual PasswordStoreChangeList AddInsecureCredentialImpl( - const InsecureCredential& insecure_credential); - virtual PasswordStoreChangeList RemoveInsecureCredentialsImpl( - const std::string& signon_realm, - const std::u16string& username, - RemoveInsecureCredentialsReason reason); virtual std::vector<InsecureCredential> GetAllInsecureCredentialsImpl(); virtual std::vector<InsecureCredential> GetMatchingInsecureCredentialsImpl( const std::string& signon_realm);
diff --git a/components/password_manager/core/browser/password_store_impl.cc b/components/password_manager/core/browser/password_store_impl.cc index 31bf797..f60e033 100644 --- a/components/password_manager/core/browser/password_store_impl.cc +++ b/components/password_manager/core/browser/password_store_impl.cc
@@ -27,19 +27,6 @@ constexpr base::TimeDelta kSyncTaskTimeout = base::TimeDelta::FromSeconds(30); -// Generates PasswordStoreChangeList for affected forms during -// InsecureCredentials update. -PasswordStoreChangeList BuildPasswordChangeListForInsecureCredentialsUpdate( - PrimaryKeyToFormMap key_to_form_map) { - PasswordStoreChangeList changes; - changes.reserve(key_to_form_map.size()); - for (auto& pair : key_to_form_map) { - changes.emplace_back(PasswordStoreChange::UPDATE, std::move(*pair.second), - pair.first); - } - return changes; -} - } // namespace // TODO(crbug.com/1217071): Definition would clash with factory implementation @@ -150,56 +137,6 @@ } } -PasswordStoreChangeList PasswordStoreImpl::AddInsecureCredentialImpl( - const InsecureCredential& credential) { - DCHECK(background_task_runner()->RunsTasksInCurrentSequence()); - if (!login_db_ || - !login_db_->insecure_credentials_table().AddRow(credential)) { - return {}; - } - - PrimaryKeyToFormMap key_to_form_map; - if (login_db_->GetLoginsBySignonRealmAndUsername( - credential.signon_realm, credential.username, key_to_form_map) != - FormRetrievalResult::kSuccess) { - return {}; - } - - PasswordStoreChangeList changes = - BuildPasswordChangeListForInsecureCredentialsUpdate( - std::move(key_to_form_map)); - if (sync_bridge_ && !changes.empty()) - sync_bridge_->ActOnPasswordStoreChanges(changes); - - return changes; -} - -PasswordStoreChangeList PasswordStoreImpl::RemoveInsecureCredentialsImpl( - const std::string& signon_realm, - const std::u16string& username, - RemoveInsecureCredentialsReason reason) { - DCHECK(background_task_runner()->RunsTasksInCurrentSequence()); - if (!login_db_ || !login_db_->insecure_credentials_table().RemoveRows( - signon_realm, username, reason)) { - return {}; - } - - PrimaryKeyToFormMap key_to_form_map; - if (login_db_->GetLoginsBySignonRealmAndUsername(signon_realm, username, - key_to_form_map) != - FormRetrievalResult::kSuccess) { - return {}; - } - - PasswordStoreChangeList changes = - BuildPasswordChangeListForInsecureCredentialsUpdate( - std::move(key_to_form_map)); - if (sync_bridge_ && !changes.empty()) - sync_bridge_->ActOnPasswordStoreChanges(changes); - - return changes; -} - std::vector<InsecureCredential> PasswordStoreImpl::GetAllInsecureCredentialsImpl() { DCHECK(background_task_runner()->RunsTasksInCurrentSequence());
diff --git a/components/password_manager/core/browser/password_store_impl.h b/components/password_manager/core/browser/password_store_impl.h index d1ed5e8..04f8510 100644 --- a/components/password_manager/core/browser/password_store_impl.h +++ b/components/password_manager/core/browser/password_store_impl.h
@@ -52,12 +52,6 @@ PasswordStoreChangeList DisableAutoSignInForOriginsImpl( const base::RepeatingCallback<bool(const GURL&)>& origin_filter); DatabaseCleanupResult DeleteUndecryptableLogins() override; - PasswordStoreChangeList AddInsecureCredentialImpl( - const InsecureCredential& insecure_credential) override; - PasswordStoreChangeList RemoveInsecureCredentialsImpl( - const std::string& signon_realm, - const std::u16string& username, - RemoveInsecureCredentialsReason reason) override; std::vector<InsecureCredential> GetAllInsecureCredentialsImpl() override; std::vector<InsecureCredential> GetMatchingInsecureCredentialsImpl( const std::string& signon_realm) override; @@ -85,8 +79,6 @@ private: FRIEND_TEST_ALL_PREFIXES(PasswordStoreTest, UpdatePasswordsStoredForAffiliatedWebsites); - FRIEND_TEST_ALL_PREFIXES(PasswordStoreTest, AddInsecureCredentialsSync); - FRIEND_TEST_ALL_PREFIXES(PasswordStoreTest, UpdateInsecureCredentialsSync); // Implements PasswordStoreBackend interface. void InitBackend(RemoteChangesReceived remote_form_changes_received,
diff --git a/components/password_manager/core/browser/password_store_unittest.cc b/components/password_manager/core/browser/password_store_unittest.cc index eca52b1..02dc94a96 100644 --- a/components/password_manager/core/browser/password_store_unittest.cc +++ b/components/password_manager/core/browser/password_store_unittest.cc
@@ -426,10 +426,6 @@ // Verify that when a login is removed that the corresponding row is also // removed from the insecure credentials table. TEST_F(PasswordStoreTest, InsecureCredentialsObserverOnRemoveLogin) { - InsecureCredential insecure_credential(kTestWebRealm1, u"username_value_1", - base::Time::FromTimeT(1), - InsecureType::kLeaked, IsMuted(false)); - scoped_refptr<PasswordStoreImpl> store = CreatePasswordStore(); store->Init(nullptr); @@ -441,12 +437,14 @@ "", u"", u"username_element_1", u"password_element_1", u"username_value_1", u"", kTestLastUsageTime, 1}; - /* clang-format on */ + /* clang-format on */ std::unique_ptr<PasswordForm> test_form( FillPasswordFormWithData(kTestCredential)); + test_form->password_issues = { + {InsecureType::kLeaked, + InsecurityMetadata(base::Time::FromTimeT(1), IsMuted(false))}}; store->AddLogin(*test_form); - store->AddInsecureCredential(insecure_credential); WaitForPasswordStore(); MockInsecureCredentialsConsumer consumer; @@ -466,9 +464,6 @@ // Verify that when a login password is updated that the corresponding row is // removed from the insecure credentials table. TEST_F(PasswordStoreTest, InsecureCredentialsObserverOnLoginUpdated) { - InsecureCredential insecure_credential(kTestWebRealm1, u"username_value_1", - base::Time::FromTimeT(1), - InsecureType::kLeaked, IsMuted(false)); scoped_refptr<PasswordStoreImpl> store = CreatePasswordStore(); store->Init(nullptr); @@ -484,8 +479,10 @@ std::unique_ptr<PasswordForm> test_form( FillPasswordFormWithData(kTestCredential)); + test_form->password_issues = { + {InsecureType::kLeaked, + InsecurityMetadata(base::Time::FromTimeT(1), IsMuted(false))}}; store->AddLogin(*test_form); - store->AddInsecureCredential(insecure_credential); WaitForPasswordStore(); MockInsecureCredentialsConsumer consumer; @@ -523,8 +520,10 @@ std::unique_ptr<PasswordForm> test_form( FillPasswordFormWithData(kTestCredential)); + test_form->password_issues = { + {InsecureType::kLeaked, + InsecurityMetadata(base::Time::FromTimeT(1), IsMuted(false))}}; store->AddLogin(*test_form); - store->AddInsecureCredential(insecure_credential); WaitForPasswordStore(); MockInsecureCredentialsConsumer consumer; @@ -553,13 +552,11 @@ u"password", kTestLastUsageTime, 1}; - InsecureCredential insecure_credential(kTestWebRealm1, u"username_value_1", - base::Time::FromTimeT(1), - InsecureType::kLeaked, IsMuted(false)); - scoped_refptr<PasswordStoreImpl> store = CreatePasswordStore(); store->Init(nullptr); - store->AddLogin(*FillPasswordFormWithData(kTestCredentials)); + std::unique_ptr<PasswordForm> test_form( + FillPasswordFormWithData(kTestCredentials)); + store->AddLogin(*test_form); WaitForPasswordStore(); MockPasswordStoreObserver mock_observer; @@ -567,12 +564,11 @@ // Expect a notification after adding a credential. EXPECT_CALL(mock_observer, OnLoginsChanged); - store->AddInsecureCredential(insecure_credential); - WaitForPasswordStore(); + test_form->password_issues = { + {InsecureType::kLeaked, + InsecurityMetadata(base::Time::FromTimeT(1), IsMuted(false))}}; + store->UpdateLogin(*test_form); - // Adding the same credential should not result in another notification. - EXPECT_CALL(mock_observer, OnLoginsChanged).Times(0); - store->AddInsecureCredential(insecure_credential); WaitForPasswordStore(); store->RemoveObserver(&mock_observer); @@ -598,8 +594,12 @@ scoped_refptr<PasswordStoreImpl> store = CreatePasswordStore(); store->Init(nullptr); - store->AddLogin(*FillPasswordFormWithData(kTestCredentials)); - store->AddInsecureCredential(insecure_credential); + std::unique_ptr<PasswordForm> test_form( + FillPasswordFormWithData(kTestCredentials)); + test_form->password_issues = { + {InsecureType::kLeaked, + InsecurityMetadata(base::Time::FromTimeT(1), IsMuted(false))}}; + store->AddLogin(*test_form); WaitForPasswordStore(); MockPasswordStoreObserver mock_observer; @@ -607,16 +607,9 @@ // Expect a notification after removing a credential. EXPECT_CALL(mock_observer, OnLoginsChanged); - store->RemoveInsecureCredentials(insecure_credential.signon_realm, - insecure_credential.username, - RemoveInsecureCredentialsReason::kRemove); - WaitForPasswordStore(); + test_form->password_issues->clear(); + store->UpdateLogin(*test_form); - // Removing the same credential should not result in another notification. - EXPECT_CALL(mock_observer, OnLoginsChanged).Times(0); - store->RemoveInsecureCredentials(insecure_credential.signon_realm, - insecure_credential.username, - RemoveInsecureCredentialsReason::kRemove); WaitForPasswordStore(); store->RemoveObserver(&mock_observer); @@ -1030,32 +1023,40 @@ {PasswordForm::Scheme::kHtml, "https://2.example.com/", "https://2.example.com/", "", u"", u"", u"", u"username2", u"topsecret", kTestLastUsageTime, 1}}; + scoped_refptr<PasswordStoreImpl> store = CreatePasswordStore(); store->Init(nullptr); - for (const auto& data : kTestCredentials) - store->AddLogin(*FillPasswordFormWithData(data)); - InsecureCredential insecure_credential("https://example.com/", u"username", - base::Time::FromTimeT(1), - InsecureType::kLeaked, IsMuted(false)); - InsecureCredential insecure_credential2( - "https://2.example.com/", u"username2", base::Time::FromTimeT(2), - InsecureType::kLeaked, IsMuted(false)); + for (const auto& data : kTestCredentials) { + std::unique_ptr<PasswordForm> form = FillPasswordFormWithData(data); + form->password_issues = { + {InsecureType::kLeaked, + InsecurityMetadata(base::Time::FromTimeT(1), IsMuted(false))}}; + store->AddLogin(*form); + } - store->AddInsecureCredential(insecure_credential); - store->AddInsecureCredential(insecure_credential2); MockInsecureCredentialsConsumer consumer; + InsecureCredential expected_insecure_credential( + "https://example.com/", u"username", + + base::Time::FromTimeT(1), InsecureType::kLeaked, IsMuted(false)); + InsecureCredential expected_insecure_credential2( + "https://2.example.com/", u"username2", base::Time::FromTimeT(1), + InsecureType::kLeaked, IsMuted(false)); EXPECT_CALL(consumer, OnGetInsecureCredentials(UnorderedElementsAre( - insecure_credential, insecure_credential2))); + expected_insecure_credential, + expected_insecure_credential2))); store->GetAllInsecureCredentials(&consumer); WaitForPasswordStore(); testing::Mock::VerifyAndClearExpectations(&consumer); - store->RemoveInsecureCredentials(insecure_credential.signon_realm, - insecure_credential.username, - RemoveInsecureCredentialsReason::kRemove); - EXPECT_CALL(consumer, OnGetInsecureCredentials( - UnorderedElementsAre(insecure_credential2))); + // Remove the leaked entry for the first form + std::unique_ptr<PasswordForm> form = + FillPasswordFormWithData(kTestCredentials[0]); + store->UpdateLogin(*form); + + EXPECT_CALL(consumer, OnGetInsecureCredentials(UnorderedElementsAre( + expected_insecure_credential2))); store->GetAllInsecureCredentials(&consumer); WaitForPasswordStore(); @@ -1073,21 +1074,20 @@ u"", u"", u"username_value", u"password", kTestLastUsageTime, 1}, {PasswordForm::Scheme::kHtml, kTestWebRealm2, kTestWebRealm2, "", u"", u"", u"", u"username_value", u"topsecret", kTestLastUsageTime, 1}}; - for (const auto& data : kTestCredentials) - store->AddLogin(*FillPasswordFormWithData(data)); + for (const auto& data : kTestCredentials) { + std::unique_ptr<PasswordForm> form = FillPasswordFormWithData(data); + form->password_issues = { + {InsecureType::kLeaked, + InsecurityMetadata(base::Time::FromTimeT(1), IsMuted(false))}}; + store->AddLogin(*form); + }; - InsecureCredential credential1(kTestWebRealm1, u"username_value", - base::Time::FromTimeT(1), - InsecureType::kLeaked, IsMuted(false)); - InsecureCredential credential2(kTestWebRealm2, u"username_value", - base::Time::FromTimeT(2), - InsecureType::kLeaked, IsMuted(false)); - for (const auto& credential : {credential1, credential2}) - store->AddInsecureCredential(credential); - + InsecureCredential expected_credential(kTestWebRealm1, u"username_value", + base::Time::FromTimeT(1), + InsecureType::kLeaked, IsMuted(false)); MockInsecureCredentialsConsumer consumer; - EXPECT_CALL(consumer, - OnGetInsecureCredentials(UnorderedElementsAre(credential1))); + EXPECT_CALL(consumer, OnGetInsecureCredentials( + UnorderedElementsAre(expected_credential))); store->GetMatchingInsecureCredentials(kTestWebRealm1, &consumer); WaitForPasswordStore(); @@ -1107,20 +1107,26 @@ u"", u"", u"", u"username_value_1", u"topsecret", kTestLastUsageTime, 1}, {PasswordForm::Scheme::kHtml, kTestWebRealm2, kTestWebRealm2, "", u"", u"", u"", u"username_value_2", u"topsecret2", kTestLastUsageTime, 1}}; - for (const auto& data : kTestCredentials) - store->AddLogin(*FillPasswordFormWithData(data)); + InsecureCredential kInsecureCredentials[] = { + InsecureCredential(kTestWebRealm1, u"username_value", + base::Time::FromTimeT(1), InsecureType::kLeaked, + IsMuted(false)), + InsecureCredential(kTestAndroidRealm1, u"username_value_1", + base::Time::FromTimeT(1), InsecureType::kPhished, + IsMuted(false)), + InsecureCredential(kTestWebRealm2, u"username_value_2", + base::Time::FromTimeT(3), InsecureType::kLeaked, + IsMuted(false))}; - InsecureCredential credential1(kTestWebRealm1, u"username_value", - base::Time::FromTimeT(1), - InsecureType::kLeaked, IsMuted(false)); - InsecureCredential credential2(kTestAndroidRealm1, u"username_value_1", - base::Time::FromTimeT(2), - InsecureType::kPhished, IsMuted(false)); - InsecureCredential credential3(kTestWebRealm2, u"username_value_2", - base::Time::FromTimeT(3), - InsecureType::kLeaked, IsMuted(false)); - for (const auto& credentials : {credential1, credential2, credential3}) - store->AddInsecureCredential(credentials); + for (unsigned int i = 0; i < 3; ++i) { + std::unique_ptr<PasswordForm> form = + FillPasswordFormWithData(kTestCredentials[i]); + form->password_issues = { + {kInsecureCredentials[i].insecure_type, + InsecurityMetadata(kInsecureCredentials[i].create_time, + kInsecureCredentials[i].is_muted)}}; + store->AddLogin(*form); + } PasswordFormDigest observed_form = {PasswordForm::Scheme::kHtml, kTestWebRealm1, GURL(kTestWebRealm1)}; @@ -1131,8 +1137,8 @@ store->SetAffiliatedMatchHelper(std::move(mock_helper)); MockInsecureCredentialsConsumer consumer; - EXPECT_CALL(consumer, OnGetInsecureCredentials( - UnorderedElementsAre(credential1, credential2))); + EXPECT_CALL(consumer, OnGetInsecureCredentials(UnorderedElementsAre( + kInsecureCredentials[0], kInsecureCredentials[1]))); store->GetMatchingInsecureCredentials(kTestWebRealm1, &consumer); WaitForPasswordStore(); @@ -1145,9 +1151,6 @@ scoped_refptr<PasswordStoreImpl> store = CreatePasswordStore(); store->Init(nullptr); - InsecureCredential credential(kTestWebRealm1, u"username1", - base::Time::FromTimeT(100), - InsecureType::kLeaked, IsMuted(false)); constexpr PasswordFormData kTestCredential = {PasswordForm::Scheme::kHtml, kTestWebRealm1, kTestWebOrigin1, @@ -1160,8 +1163,11 @@ 10, 5}; std::unique_ptr<PasswordForm> form(FillPasswordFormWithData(kTestCredential)); + form->password_issues = { + {InsecureType::kLeaked, + InsecurityMetadata(base::Time::FromTimeT(100), IsMuted(false))}}; store->AddLogin(*form); - store->AddInsecureCredential(credential); + WaitForPasswordStore(); // Update the password value and immediately get the insecure passwords. @@ -1196,8 +1202,11 @@ 10, 5}; std::unique_ptr<PasswordForm> form(FillPasswordFormWithData(kTestCredential)); + form->password_issues = { + {InsecureType::kLeaked, + InsecurityMetadata(base::Time::FromTimeT(100), IsMuted(false))}}; store->AddLogin(*form); - store->AddInsecureCredential(credential); + WaitForPasswordStore(); // Delete the password and immediately get the insecure passwords.
diff --git a/components/password_manager/core/browser/sync/password_model_type_controller.cc b/components/password_manager/core/browser/sync/password_model_type_controller.cc index e953343..81c7b67 100644 --- a/components/password_manager/core/browser/sync/password_model_type_controller.cc +++ b/components/password_manager/core/browser/sync/password_model_type_controller.cc
@@ -49,7 +49,7 @@ delegate_for_full_sync_mode, std::unique_ptr<syncer::ModelTypeControllerDelegate> delegate_for_transport_mode, - scoped_refptr<PasswordStore> account_password_store_for_cleanup, + scoped_refptr<PasswordStoreInterface> account_password_store_for_cleanup, PrefService* pref_service, signin::IdentityManager* identity_manager, syncer::SyncService* sync_service, @@ -205,7 +205,7 @@ } void PasswordModelTypeController::MaybeClearStore( - scoped_refptr<PasswordStore> account_password_store_for_cleanup) { + scoped_refptr<PasswordStoreInterface> account_password_store_for_cleanup) { DCHECK(account_password_store_for_cleanup); if (features_util::IsOptedInForAccountStorage(pref_service_, sync_service_)) { RecordClearedOnStartup(ClearedOnStartup::kOptedInSoNoNeedToClear);
diff --git a/components/password_manager/core/browser/sync/password_model_type_controller.h b/components/password_manager/core/browser/sync/password_model_type_controller.h index 4ed2ce8..b512ab4d 100644 --- a/components/password_manager/core/browser/sync/password_model_type_controller.h +++ b/components/password_manager/core/browser/sync/password_model_type_controller.h
@@ -24,7 +24,7 @@ namespace password_manager { -class PasswordStore; +class PasswordStoreInterface; // A class that manages the startup and shutdown of password sync. class PasswordModelTypeController : public syncer::ModelTypeController, @@ -36,7 +36,7 @@ delegate_for_full_sync_mode, std::unique_ptr<syncer::ModelTypeControllerDelegate> delegate_for_transport_mode, - scoped_refptr<PasswordStore> account_password_store_for_cleanup, + scoped_refptr<PasswordStoreInterface> account_password_store_for_cleanup, PrefService* pref_service, signin::IdentityManager* identity_manager, syncer::SyncService* sync_service, @@ -66,7 +66,7 @@ void OnOptInStateMaybeChanged(); void MaybeClearStore( - scoped_refptr<PasswordStore> account_password_store_for_cleanup); + scoped_refptr<PasswordStoreInterface> account_password_store_for_cleanup); PrefService* const pref_service_; signin::IdentityManager* const identity_manager_;
diff --git a/components/password_manager/core/browser/test_password_store.cc b/components/password_manager/core/browser/test_password_store.cc index ae14ab8..889a44d0 100644 --- a/components/password_manager/core/browser/test_password_store.cc +++ b/components/password_manager/core/browser/test_password_store.cc
@@ -251,50 +251,6 @@ NOTIMPLEMENTED(); } -PasswordStoreChangeList TestPasswordStore::AddInsecureCredentialImpl( - const InsecureCredential& insecure_credential) { - InsecureCredential cred = insecure_credential; - cred.in_store = IsAccountStore() ? PasswordForm::Store::kAccountStore - : PasswordForm::Store::kProfileStore; - if (!insecure_credentials_.insert(std::move(cred)).second) - return {}; - - PasswordStoreChangeList changes; - for (auto& form : stored_passwords_[insecure_credential.signon_realm]) { - if (form.username_value == insecure_credential.username) { - form.password_issues->insert( - {insecure_credential.insecure_type, - InsecurityMetadata(insecure_credential.create_time, - insecure_credential.is_muted)}); - changes.emplace_back(PasswordStoreChange::UPDATE, form); - } - } - return changes; -} - -PasswordStoreChangeList TestPasswordStore::RemoveInsecureCredentialsImpl( - const std::string& signon_realm, - const std::u16string& username, - RemoveInsecureCredentialsReason reason) { - const size_t old_size = insecure_credentials_.size(); - base::EraseIf(insecure_credentials_, [&](const auto& credential) { - return credential.signon_realm == signon_realm && - credential.username == username; - }); - - if (old_size == insecure_credentials_.size()) - return {}; - - PasswordStoreChangeList changes; - for (auto& form : stored_passwords_[signon_realm]) { - if (form.username_value == username) { - form.password_issues->clear(); - changes.emplace_back(PasswordStoreChange::UPDATE, form); - } - } - return changes; -} - std::vector<InsecureCredential> TestPasswordStore::GetAllInsecureCredentialsImpl() { return std::vector<InsecureCredential>(insecure_credentials_.begin(),
diff --git a/components/password_manager/core/browser/test_password_store.h b/components/password_manager/core/browser/test_password_store.h index 5dc5ccd..77b2a3c 100644 --- a/components/password_manager/core/browser/test_password_store.h +++ b/components/password_manager/core/browser/test_password_store.h
@@ -118,12 +118,6 @@ void ReportMetricsImpl(const std::string& sync_username, bool custom_passphrase_sync_enabled, BulkCheckDone bulk_check_done) override; - PasswordStoreChangeList AddInsecureCredentialImpl( - const InsecureCredential& insecure_credentials) override; - PasswordStoreChangeList RemoveInsecureCredentialsImpl( - const std::string& signon_realm, - const std::u16string& username, - RemoveInsecureCredentialsReason reason) override; std::vector<InsecureCredential> GetAllInsecureCredentialsImpl() override; std::vector<InsecureCredential> GetMatchingInsecureCredentialsImpl( const std::string& signon_realm) override;
diff --git a/components/password_manager/core/browser/ui/post_save_compromised_helper.cc b/components/password_manager/core/browser/ui/post_save_compromised_helper.cc index 26a14ca..3e18e7d 100644 --- a/components/password_manager/core/browser/ui/post_save_compromised_helper.cc +++ b/components/password_manager/core/browser/ui/post_save_compromised_helper.cc
@@ -7,7 +7,7 @@ #include "base/barrier_closure.h" #include "base/containers/contains.h" #include "base/feature_list.h" -#include "components/password_manager/core/browser/password_store.h" +#include "components/password_manager/core/browser/password_store_interface.h" #include "components/password_manager/core/common/password_manager_features.h" #include "components/password_manager/core/common/password_manager_pref_names.h" #include "components/prefs/pref_service.h" @@ -30,8 +30,8 @@ PostSaveCompromisedHelper::~PostSaveCompromisedHelper() = default; void PostSaveCompromisedHelper::AnalyzeLeakedCredentials( - PasswordStore* profile_store, - PasswordStore* account_store, + PasswordStoreInterface* profile_store, + PasswordStoreInterface* account_store, PrefService* prefs, BubbleCallback callback) { DCHECK(profile_store);
diff --git a/components/password_manager/core/browser/ui/post_save_compromised_helper.h b/components/password_manager/core/browser/ui/post_save_compromised_helper.h index ae083c6c..45f147e 100644 --- a/components/password_manager/core/browser/ui/post_save_compromised_helper.h +++ b/components/password_manager/core/browser/ui/post_save_compromised_helper.h
@@ -17,7 +17,7 @@ namespace password_manager { -class PasswordStore; +class PasswordStoreInterface; // Helps to choose a compromised credential bubble after a password was saved. class PostSaveCompromisedHelper @@ -49,8 +49,8 @@ // Asynchronously queries the password stores for the compromised credentials // and notifies |callback| with the result of analysis. - void AnalyzeLeakedCredentials(PasswordStore* profile_store, - PasswordStore* account_store, + void AnalyzeLeakedCredentials(PasswordStoreInterface* profile_store, + PasswordStoreInterface* account_store, PrefService* prefs, BubbleCallback callback);
diff --git a/components/password_manager/core/browser/ui/post_save_compromised_helper_unittest.cc b/components/password_manager/core/browser/ui/post_save_compromised_helper_unittest.cc index dbcd700..60f48614 100644 --- a/components/password_manager/core/browser/ui/post_save_compromised_helper_unittest.cc +++ b/components/password_manager/core/browser/ui/post_save_compromised_helper_unittest.cc
@@ -9,7 +9,7 @@ #include "base/test/mock_callback.h" #include "base/test/scoped_feature_list.h" #include "base/test/task_environment.h" -#include "components/password_manager/core/browser/mock_password_store.h" +#include "components/password_manager/core/browser/mock_password_store_interface.h" #include "components/password_manager/core/browser/password_form.h" #include "components/password_manager/core/common/password_manager_features.h" #include "components/password_manager/core/common/password_manager_pref_names.h" @@ -62,8 +62,7 @@ class PostSaveCompromisedHelperTest : public testing::Test { public: PostSaveCompromisedHelperTest() { - mock_profile_store_ = new MockPasswordStore; - EXPECT_TRUE(mock_profile_store_->Init(/*prefs=*/nullptr)); + mock_profile_store_ = new MockPasswordStoreInterface; prefs_.registry()->RegisterDoublePref(kLastTimePasswordCheckCompleted, 0.0); } @@ -84,8 +83,10 @@ void WaitForPasswordStore() { task_environment_.RunUntilIdle(); } - MockPasswordStore* profile_store() { return mock_profile_store_.get(); } - virtual MockPasswordStore* account_store() { return nullptr; } + MockPasswordStoreInterface* profile_store() { + return mock_profile_store_.get(); + } + virtual MockPasswordStoreInterface* account_store() { return nullptr; } TestingPrefServiceSimple* prefs() { return &prefs_; } protected: @@ -94,7 +95,7 @@ private: base::test::SingleThreadTaskEnvironment task_environment_{ base::test::TaskEnvironment::TimeSource::MOCK_TIME}; - scoped_refptr<MockPasswordStore> mock_profile_store_; + scoped_refptr<MockPasswordStoreInterface> mock_profile_store_; }; TEST_F(PostSaveCompromisedHelperTest, DefaultState) { @@ -275,20 +276,17 @@ : public PostSaveCompromisedHelperTest { public: PostSaveCompromisedHelperWithTwoStoreTest() { - mock_account_store_ = new MockPasswordStore; - EXPECT_TRUE(mock_account_store_->Init(/*prefs=*/nullptr)); + mock_account_store_ = new MockPasswordStoreInterface; } - ~PostSaveCompromisedHelperWithTwoStoreTest() override { - mock_account_store_->ShutdownOnUIThread(); - } + ~PostSaveCompromisedHelperWithTwoStoreTest() override = default; - MockPasswordStore* account_store() override { + MockPasswordStoreInterface* account_store() override { return mock_account_store_.get(); } private: - scoped_refptr<MockPasswordStore> mock_account_store_; + scoped_refptr<MockPasswordStoreInterface> mock_account_store_; }; } // namespace
diff --git a/components/password_manager/core/common/password_manager_features.cc b/components/password_manager/core/common/password_manager_features.cc index 1b861f6b..0a5343b 100644 --- a/components/password_manager/core/common/password_manager_features.cc +++ b/components/password_manager/core/common/password_manager_features.cc
@@ -143,7 +143,9 @@ const base::Feature kUnifiedPasswordManagerAndroid{ "UnifiedPasswordManagerAndroid", base::FEATURE_DISABLED_BY_DEFAULT}; -// Enables support of sending votes on username first flow. +// Enables support of sending votes on username first flow. The votes are sent +// on single username forms and are based on user interaction with the save +// prompt. const base::Feature kUsernameFirstFlow = {"UsernameFirstFlow", base::FEATURE_DISABLED_BY_DEFAULT}; @@ -151,6 +153,13 @@ const base::Feature kUsernameFirstFlowFilling = { "UsernameFirstFlowFilling", base::FEATURE_DISABLED_BY_DEFAULT}; +// Enables support of sending additional votes on username first flow. The votes +// are sent on single password forms and contain information about preceding +// single username forms. +const base::Feature kUsernameFirstFlowFallbackCrowdsourcing = { + "UsernameFirstFlowFallbackCrowdsourcing", + base::FEATURE_DISABLED_BY_DEFAULT}; + // Field trial identifier for password generation requirements. const char kGenerationRequirementsFieldTrial[] = "PasswordGenerationRequirements";
diff --git a/components/password_manager/core/common/password_manager_features.h b/components/password_manager/core/common/password_manager_features.h index e957455b5..0dd8722 100644 --- a/components/password_manager/core/common/password_manager_features.h +++ b/components/password_manager/core/common/password_manager_features.h
@@ -43,6 +43,7 @@ extern const base::Feature kUnifiedPasswordManagerAndroid; extern const base::Feature kUsernameFirstFlow; extern const base::Feature kUsernameFirstFlowFilling; +extern const base::Feature kUsernameFirstFlowFallbackCrowdsourcing; // Field trial and corresponding parameters. // To manually override this, start Chrome with the following parameters:
diff --git a/components/permissions/android/java/src/org/chromium/components/permissions/BluetoothChooserDialog.java b/components/permissions/android/java/src/org/chromium/components/permissions/BluetoothChooserDialog.java index d0a5d90..6cc0296 100644 --- a/components/permissions/android/java/src/org/chromium/components/permissions/BluetoothChooserDialog.java +++ b/components/permissions/android/java/src/org/chromium/components/permissions/BluetoothChooserDialog.java
@@ -74,6 +74,10 @@ // not GC'ed. final Activity mActivity; + // Always equal to mWindowAndroid.getContext().get(), but stored separately to make sure it's + // not GC'ed. + final Context mContext; + // The dialog to show to let the user pick a device. @VisibleForTesting(otherwise = VisibleForTesting.PRIVATE) public ItemChooserDialog mItemChooserDialog; @@ -147,6 +151,8 @@ mWindowAndroid = windowAndroid; mActivity = windowAndroid.getActivity().get(); assert mActivity != null; + mContext = windowAndroid.getContext().get(); + assert mContext != null; mOrigin = origin; mSecurityLevel = securityLevel; mDelegate = delegate; @@ -155,7 +161,7 @@ // Initialize icons. mConnectedIcon = getIconWithRowIconColorStateList(R.drawable.ic_bluetooth_connected); - mConnectedIconDescription = mActivity.getString(R.string.bluetooth_device_connected); + mConnectedIconDescription = mContext.getString(R.string.bluetooth_device_connected); mSignalStrengthLevelIcon = new Drawable[] { getIconWithRowIconColorStateList(R.drawable.ic_signal_cellular_0_bar), @@ -168,17 +174,17 @@ Log.i(TAG, "BluetoothChooserDialog: Default Bluetooth adapter not found."); } mAdapterOffStatus = SpanApplier.applySpans( - mActivity.getString(R.string.bluetooth_adapter_off_help), + mContext.getString(R.string.bluetooth_adapter_off_help), new SpanInfo("<link>", "</link>", createLinkSpan(LinkType.ADAPTER_OFF_HELP))); } private Drawable getIconWithRowIconColorStateList(int icon) { - Resources res = mActivity.getResources(); + Resources res = mContext.getResources(); - Drawable drawable = VectorDrawableCompat.create(res, icon, mActivity.getTheme()); + Drawable drawable = VectorDrawableCompat.create(res, icon, mContext.getTheme()); DrawableCompat.setTintList(drawable, AppCompatResources.getColorStateList( - mActivity, R.color.item_chooser_row_icon_color)); + mContext, R.color.item_chooser_row_icon_color)); return drawable; } @@ -189,29 +195,29 @@ public void show() { SpannableString origin = new SpannableString(mOrigin); - final boolean useDarkColors = !ColorUtils.inNightMode(mActivity); + final boolean useDarkColors = !ColorUtils.inNightMode(mContext); AutocompleteSchemeClassifier autocompleteSchemeClassifier = mDelegate.createAutocompleteSchemeClassifier(); - OmniboxUrlEmphasizer.emphasizeUrl(origin, mActivity.getResources(), + OmniboxUrlEmphasizer.emphasizeUrl(origin, mContext.getResources(), autocompleteSchemeClassifier, mSecurityLevel, false, useDarkColors, true); autocompleteSchemeClassifier.destroy(); // Construct a full string and replace the origin text with emphasized version. SpannableString title = - new SpannableString(mActivity.getString(R.string.bluetooth_dialog_title, mOrigin)); + new SpannableString(mContext.getString(R.string.bluetooth_dialog_title, mOrigin)); int start = title.toString().indexOf(mOrigin); TextUtils.copySpansFrom(origin, 0, origin.length(), Object.class, title, start); - String noneFound = mActivity.getString(R.string.bluetooth_not_found); + String noneFound = mContext.getString(R.string.bluetooth_not_found); SpannableString searching = SpanApplier.applySpans( - mActivity.getString(R.string.bluetooth_searching), + mContext.getString(R.string.bluetooth_searching), new SpanInfo("<link>", "</link>", createLinkSpan(LinkType.EXPLAIN_BLUETOOTH))); - String positiveButton = mActivity.getString(R.string.bluetooth_confirm_button); + String positiveButton = mContext.getString(R.string.bluetooth_confirm_button); SpannableString statusIdleNoneFound = SpanApplier.applySpans( - mActivity.getString(R.string.bluetooth_not_seeing_it_idle), + mContext.getString(R.string.bluetooth_not_seeing_it_idle), new SpanInfo("<link1>", "</link1>", createLinkSpan(LinkType.EXPLAIN_BLUETOOTH)), new SpanInfo("<link2>", "</link2>", createLinkSpan(LinkType.RESTART_SEARCH))); @@ -222,7 +228,7 @@ ItemChooserDialog.ItemChooserLabels labels = new ItemChooserDialog.ItemChooserLabels(title, searching, noneFound, statusActive, statusIdleNoneFound, statusIdleSomeFound, positiveButton); - mItemChooserDialog = new ItemChooserDialog(mActivity, this, labels); + mItemChooserDialog = new ItemChooserDialog(mContext, mActivity.getWindow(), this, labels); mActivity.registerReceiver(mLocationModeBroadcastReceiver, new IntentFilter(LocationManager.MODE_CHANGED_ACTION)); @@ -293,7 +299,7 @@ if (havePermission) { if (needsLocationServices) { needPermissionMessage = SpanApplier.applySpans( - mActivity.getString(R.string.bluetooth_need_location_services_on), + mContext.getString(R.string.bluetooth_need_location_services_on), servicesSpan); } else { // We don't need to request anything. @@ -302,7 +308,7 @@ } else { if (needsLocationServices) { needPermissionMessage = SpanApplier.applySpans( - mActivity.getString( + mContext.getString( R.string.bluetooth_need_location_permission_and_services_on), permissionSpan, servicesSpan); } else { @@ -310,18 +316,18 @@ // compiling against the S SDK. if (BuildInfo.targetsAtLeastS() && BuildInfo.isAtLeastS()) { needPermissionMessage = SpanApplier.applySpans( - mActivity.getString(R.string.bluetooth_need_nearby_devices_permission), + mContext.getString(R.string.bluetooth_need_nearby_devices_permission), permissionSpan); } else { needPermissionMessage = SpanApplier.applySpans( - mActivity.getString(R.string.bluetooth_need_location_permission), + mContext.getString(R.string.bluetooth_need_location_permission), permissionSpan); } } } SpannableString needPermissionStatus = SpanApplier.applySpans( - mActivity.getString(R.string.bluetooth_need_location_permission_help), + mContext.getString(R.string.bluetooth_need_location_permission_help), new SpanInfo("<link>", "</link>", createLinkSpan(LinkType.NEED_LOCATION_PERMISSION_HELP))); @@ -331,7 +337,7 @@ private NoUnderlineClickableSpan createLinkSpan(@LinkType int linkType) { return new NoUnderlineClickableSpan( - mActivity.getResources(), (view) -> onBluetoothLinkClick(view, linkType)); + mContext.getResources(), (view) -> onBluetoothLinkClick(view, linkType)); } private void onBluetoothLinkClick(View view, @LinkType int linkType) { @@ -350,7 +356,7 @@ mItemChooserDialog.signalInitializingAdapter(); } else { String unableToTurnOnAdapter = - mActivity.getString(R.string.bluetooth_unable_to_turn_on_adapter); + mContext.getString(R.string.bluetooth_unable_to_turn_on_adapter); mItemChooserDialog.setErrorState(unableToTurnOnAdapter, mAdapterOffStatus); } break; @@ -446,7 +452,7 @@ iconDescription = mConnectedIconDescription; } else if (signalStrengthLevel != -1) { icon = mSignalStrengthLevelIcon[signalStrengthLevel].getConstantState().newDrawable(); - iconDescription = mActivity.getResources().getQuantityString( + iconDescription = mContext.getResources().getQuantityString( R.plurals.signal_strength_level_n_bars, signalStrengthLevel, signalStrengthLevel); } @@ -465,7 +471,7 @@ @CalledByNative public void notifyAdapterTurnedOff() { SpannableString adapterOffMessage = - SpanApplier.applySpans(mActivity.getString(R.string.bluetooth_adapter_off), + SpanApplier.applySpans(mContext.getString(R.string.bluetooth_adapter_off), new SpanInfo("<link>", "</link>", createLinkSpan(LinkType.ADAPTER_OFF))); mItemChooserDialog.setErrorState(adapterOffMessage, mAdapterOffStatus);
diff --git a/components/permissions/android/java/src/org/chromium/components/permissions/BluetoothScanningPermissionDialog.java b/components/permissions/android/java/src/org/chromium/components/permissions/BluetoothScanningPermissionDialog.java index de571e08..4348464a 100644 --- a/components/permissions/android/java/src/org/chromium/components/permissions/BluetoothScanningPermissionDialog.java +++ b/components/permissions/android/java/src/org/chromium/components/permissions/BluetoothScanningPermissionDialog.java
@@ -6,6 +6,7 @@ import android.app.Activity; import android.app.Dialog; +import android.content.Context; import android.graphics.Color; import android.graphics.drawable.ColorDrawable; import android.text.SpannableString; @@ -61,6 +62,10 @@ // not GC'ed. private final Activity mActivity; + // Always equal to mWindowAndroid.getContext().get(), but stored separately to make sure it's + // not GC'ed. + private final Context mContext; + // The dialog this class encapsulates. private Dialog mDialog; @@ -98,16 +103,18 @@ mWindowAndroid = windowAndroid; mActivity = windowAndroid.getActivity().get(); assert mActivity != null; + mContext = windowAndroid.getContext().get(); + assert mContext != null; mDelegate = delegate; mNativeBluetoothScanningPermissionDialogPtr = nativeBluetoothScanningPermissionDialogPtr; // Emphasize the origin. SpannableString originSpannableString = new SpannableString(origin); - final boolean useDarkColors = !ColorUtils.inNightMode(mActivity); + final boolean useDarkColors = !ColorUtils.inNightMode(mContext); AutocompleteSchemeClassifier autocompleteSchemeClassifier = mDelegate.createAutocompleteSchemeClassifier(); - OmniboxUrlEmphasizer.emphasizeUrl(originSpannableString, mActivity.getResources(), + OmniboxUrlEmphasizer.emphasizeUrl(originSpannableString, mContext.getResources(), autocompleteSchemeClassifier, securityLevel, /*isInternalPage=*/false, useDarkColors, /*emphasizeScheme=*/true); @@ -116,19 +123,19 @@ // Construct a full string and replace the |originSpannableString| text with emphasized // version. SpannableString title = new SpannableString( - mActivity.getString(R.string.bluetooth_scanning_prompt_origin, origin)); + mContext.getString(R.string.bluetooth_scanning_prompt_origin, origin)); int start = title.toString().indexOf(origin); TextUtils.copySpansFrom(originSpannableString, 0, originSpannableString.length(), Object.class, title, start); String noneFound = - mActivity.getString(R.string.bluetooth_scanning_prompt_no_devices_found_prompt); + mContext.getString(R.string.bluetooth_scanning_prompt_no_devices_found_prompt); String blockButtonText = - mActivity.getString(R.string.bluetooth_scanning_prompt_block_button_text); + mContext.getString(R.string.bluetooth_scanning_prompt_block_button_text); String allowButtonText = - mActivity.getString(R.string.bluetooth_scanning_prompt_allow_button_text); + mContext.getString(R.string.bluetooth_scanning_prompt_allow_button_text); - LinearLayout dialogContainer = (LinearLayout) LayoutInflater.from(mActivity).inflate( + LinearLayout dialogContainer = (LinearLayout) LayoutInflater.from(mContext).inflate( R.layout.bluetooth_scanning_permission_dialog, null); TextViewWithClickableSpans dialogTitle = @@ -143,7 +150,7 @@ emptyMessage.setVisibility(View.VISIBLE); mListView = (ListView) dialogContainer.findViewById(R.id.items); - mItemAdapter = new DeviceItemAdapter(mActivity, /*itemsSelectable=*/false, + mItemAdapter = new DeviceItemAdapter(mContext, /*itemsSelectable=*/false, R.layout.bluetooth_scanning_permission_dialog_row); mItemAdapter.setNotifyOnChange(true); mListView.setAdapter(mItemAdapter); @@ -184,7 +191,7 @@ listViewContainer.setLayoutParams(new LinearLayout.LayoutParams( LayoutParams.MATCH_PARENT, getListHeight(mActivity.getWindow().getDecorView().getHeight(), - mActivity.getResources().getDisplayMetrics().density))); + mContext.getResources().getDisplayMetrics().density))); } }); } @@ -203,7 +210,7 @@ @CalledByNative public void addOrUpdateDevice(String deviceId, String deviceName) { if (TextUtils.isEmpty(deviceName)) { - deviceName = mActivity.getString(R.string.bluetooth_scanning_device_unknown, deviceId); + deviceName = mContext.getString(R.string.bluetooth_scanning_device_unknown, deviceId); } mItemAdapter.addOrUpdate(deviceId, deviceName, /*icon=*/null, /*iconDescription=*/null); mListView.setVisibility(View.VISIBLE); @@ -226,7 +233,7 @@ } private void showDialogForView(View view) { - mDialog = new Dialog(mActivity) { + mDialog = new Dialog(mContext) { @Override public void onWindowFocusChanged(boolean hasFocus) { super.onWindowFocusChanged(hasFocus); @@ -242,7 +249,7 @@ mDialog.setOnCancelListener(dialog -> finishDialog(Event.CANCELED)); Window window = mDialog.getWindow(); - if (!DeviceFormFactor.isNonMultiDisplayContextOnTablet(mActivity)) { + if (!DeviceFormFactor.isNonMultiDisplayContextOnTablet(mContext)) { // On smaller screens, make the dialog fill the width of the screen, // and appear at the top. window.setBackgroundDrawable(new ColorDrawable(Color.WHITE));
diff --git a/components/permissions/android/java/src/org/chromium/components/permissions/DeviceItemAdapter.java b/components/permissions/android/java/src/org/chromium/components/permissions/DeviceItemAdapter.java index 065a684..14411c9d 100644 --- a/components/permissions/android/java/src/org/chromium/components/permissions/DeviceItemAdapter.java +++ b/components/permissions/android/java/src/org/chromium/components/permissions/DeviceItemAdapter.java
@@ -81,7 +81,7 @@ /** * Creates a device item adapter which can show a list of items. * - * @param context The context of the application. + * @param context The context used for layout inflation and resource loading. * @param rowLayoutResource The resource identifier for the item row. */ public DeviceItemAdapter(
diff --git a/components/permissions/android/java/src/org/chromium/components/permissions/ItemChooserDialog.java b/components/permissions/android/java/src/org/chromium/components/permissions/ItemChooserDialog.java index efb550e..f6b131e 100644 --- a/components/permissions/android/java/src/org/chromium/components/permissions/ItemChooserDialog.java +++ b/components/permissions/android/java/src/org/chromium/components/permissions/ItemChooserDialog.java
@@ -4,8 +4,8 @@ package org.chromium.components.permissions; -import android.app.Activity; import android.app.Dialog; +import android.content.Context; import android.graphics.Color; import android.graphics.drawable.ColorDrawable; import android.graphics.drawable.Drawable; @@ -102,7 +102,8 @@ int DISCOVERY_IDLE = 3; } - private Activity mActivity; + private Context mContext; + private Window mWindow; // The dialog this class encapsulates. private Dialog mDialog; @@ -138,19 +139,21 @@ private boolean mIgnorePendingWindowFocusChangeForClose; /** - * Creates the ItemChooserPopup and displays it (and starts waiting for data). + * Creates the ItemChooserDialog and displays it (and starts waiting for data). * - * @param activity Activity which is used for launching a dialog. + * @param context The context used for layout inflation and resource loading. + * @param window The window used to determine the list height. * @param callback The callback used to communicate back what was selected. * @param labels The labels to show in the dialog. */ - public ItemChooserDialog( - Activity activity, ItemSelectedCallback callback, ItemChooserLabels labels) { - mActivity = activity; + public ItemChooserDialog(Context context, Window window, ItemSelectedCallback callback, + ItemChooserLabels labels) { + mContext = context; + mWindow = window; mItemSelectedCallback = callback; mLabels = labels; - LinearLayout dialogContainer = (LinearLayout) LayoutInflater.from(mActivity).inflate( + LinearLayout dialogContainer = (LinearLayout) LayoutInflater.from(mContext).inflate( R.layout.item_chooser_dialog, null); mListView = (ListView) dialogContainer.findViewById(R.id.items); @@ -180,7 +183,7 @@ }; mItemAdapter = new DeviceItemAdapter( - mActivity, /*itemsSelectable=*/true, R.layout.item_chooser_dialog_row); + mContext, /*itemsSelectable=*/true, R.layout.item_chooser_dialog_row); mItemAdapter.setNotifyOnChange(true); mItemAdapter.setObserver(this); @@ -205,8 +208,8 @@ View listViewContainer = dialogContainer.findViewById(R.id.container); listViewContainer.setLayoutParams(new LinearLayout.LayoutParams( LayoutParams.MATCH_PARENT, - getListHeight(mActivity.getWindow().getDecorView().getHeight(), - mActivity.getResources().getDisplayMetrics().density))); + getListHeight(mWindow.getDecorView().getHeight(), + mContext.getResources().getDisplayMetrics().density))); } }); } @@ -240,7 +243,7 @@ } private void showDialogForView(View view) { - mDialog = new Dialog(mActivity) { + mDialog = new Dialog(mContext) { @Override public void onWindowFocusChanged(boolean hasFocus) { super.onWindowFocusChanged(hasFocus); @@ -256,7 +259,7 @@ mDialog.setOnCancelListener(dialog -> mItemSelectedCallback.onItemSelected("")); Window window = mDialog.getWindow(); - if (!DeviceFormFactor.isNonMultiDisplayContextOnTablet(mActivity)) { + if (!DeviceFormFactor.isNonMultiDisplayContextOnTablet(mContext)) { // On smaller screens, make the dialog fill the width of the screen, // and appear at the top. window.setBackgroundDrawable(new ColorDrawable(Color.WHITE));
diff --git a/components/policy/core/browser/policy_pref_mapping_test.cc b/components/policy/core/browser/policy_pref_mapping_test.cc index c928e90..f903a4e 100644 --- a/components/policy/core/browser/policy_pref_mapping_test.cc +++ b/components/policy/core/browser/policy_pref_mapping_test.cc
@@ -74,9 +74,6 @@ return policy_name_decorated; } -// TODO(https://crbug.com/1192629): Revisit it after all chromeos policies -// touching lacros will get their handlers in place. -#if !BUILDFLAG(IS_CHROMEOS_LACROS) PrefService* GetPrefServiceForLocation(PrefLocation location, PrefService* local_state, PrefService* user_prefs, @@ -141,8 +138,6 @@ CheckPrefHasValue(pref, expected_value); } -#endif // BUILDFLAG(IS_CHROMEOS_LACROS) - // Contains the testing details for a single pref affected by one or multiple // policies. This is part of the data loaded from // chrome/test/data/policy/policy_test_cases.json. @@ -332,8 +327,10 @@ bool IsOsSupported() const { #if defined(OS_ANDROID) const std::string os("android"); -#elif defined(OS_CHROMEOS) - const std::string os("chromeos"); +#elif BUILDFLAG(IS_CHROMEOS_ASH) + const std::string os("chromeos_ash"); +#elif BUILDFLAG(IS_CHROMEOS_LACROS) + const std::string os("chromeos_lacros"); #elif defined(OS_IOS) const std::string os("ios"); #elif defined(OS_LINUX) @@ -348,6 +345,15 @@ return base::Contains(supported_os_, os); } + bool IsOsCovered() const { +#if defined(OS_CHROMEOS) + return base::Contains(supported_os_, "chromeos_ash") || + base::Contains(supported_os_, "chromeos_lacros"); +#else + return IsOsSupported(); +#endif + } + bool IsSupported() const { #if !BUILDFLAG(GOOGLE_CHROME_BRANDING) if (is_official_only()) @@ -422,9 +428,6 @@ PolicyTestCaseMap policy_test_cases_; }; -// TODO(https://crbug.com/1192629): Revisit it after all chromeos policies -// touching lacros will get their handlers in place. -#if !BUILDFLAG(IS_CHROMEOS_LACROS) struct PolicySettings { PolicySource source = PolicySource::POLICY_SOURCE_CLOUD; PolicyScope scope = PolicyScope::POLICY_SCOPE_USER; @@ -491,7 +494,6 @@ } provider->UpdateChromePolicy(policy_map); } -#endif // BUILDFLAG(IS_CHROMEOS_LACROS) absl::optional<base::flat_set<std::string>> GetTestFilter() { if (!base::CommandLine::ForCurrentProcess()->HasSwitch( @@ -539,12 +541,11 @@ "tests or use reason_for_missing_test."; if (test_case->HasSupportedOs()) { - has_test_case_or_reason_for_this_os |= test_case->IsOsSupported(); + has_test_case_or_reason_for_this_os |= test_case->IsOsCovered(); } else { has_reason_for_all_os |= test_case->has_reason_for_missing_test(); } } - EXPECT_TRUE(has_test_case_or_reason_for_this_os || has_reason_for_all_os) << "Policy " << policy->first << " should either provide a test case for all supported operating " @@ -592,9 +593,6 @@ continue; } -// TODO(https://crbug.com/1192629): Revisit it after all chromeos policies -// touching lacros will get their handlers in place. -#if !BUILDFLAG(IS_CHROMEOS_LACROS) for (size_t i = 0; i < test_case->policy_pref_mapping_tests().size(); ++i) { const auto& pref_mapping = test_case->policy_pref_mapping_tests()[i]; @@ -680,7 +678,6 @@ } } } -#endif // BUILDFLAG(IS_CHROMEOS_LACROS) } } }
diff --git a/components/policy/core/common/policy_loader_lacros.cc b/components/policy/core/common/policy_loader_lacros.cc index 11ecb51..933f27f 100644 --- a/components/policy/core/common/policy_loader_lacros.cc +++ b/components/policy/core/common/policy_loader_lacros.cc
@@ -88,7 +88,16 @@ DecodeProtoFields(*(validator.payload()), external_data_manager, PolicySource::POLICY_SOURCE_CLOUD_FROM_ASH, PolicyScope::POLICY_SCOPE_USER, &policy_map, per_profile_); - SetEnterpriseUsersSystemWideDefaults(&policy_map); + switch (per_profile_) { + case PolicyPerProfileFilter::kTrue: + SetEnterpriseUsersProfileDefaults(&policy_map); + break; + case PolicyPerProfileFilter::kFalse: + SetEnterpriseUsersSystemWideDefaults(&policy_map); + break; + case PolicyPerProfileFilter::kAny: + NOTREACHED(); + } bundle->Get(PolicyNamespace(POLICY_DOMAIN_CHROME, std::string())) .MergeFrom(policy_map); return bundle;
diff --git a/components/policy/core/common/policy_loader_lacros_unittest.cc b/components/policy/core/common/policy_loader_lacros_unittest.cc index 8b31f1c..a12f860 100644 --- a/components/policy/core/common/policy_loader_lacros_unittest.cc +++ b/components/policy/core/common/policy_loader_lacros_unittest.cc
@@ -43,25 +43,9 @@ return data; } -const PolicyMap* GetChromePolicyMap(PolicyBundle* bundle) { +const PolicyMap& GetChromePolicyMap(PolicyBundle* bundle) { PolicyNamespace ns = PolicyNamespace(POLICY_DOMAIN_CHROME, std::string()); - return &(bundle->Get(ns)); -} - -std::vector<uint8_t> GetValidPolicyFetchResponseWithPerProfilePolicy() { - em::CloudPolicySettings policy_proto; - // HomepageLocation is a per_profile:True policy. See policy_templates.json - // for details. - policy_proto.mutable_homepagelocation()->set_value("http://chromium.org"); - return GetValidPolicyFetchResponse(policy_proto); -} - -std::vector<uint8_t> GetValidPolicyFetchResponseWithSystemWidePolicy() { - em::CloudPolicySettings policy_proto; - // TaskManagerEndProcessEnabled is a per_profile:True policy. See - // policy_templates.json for details. - policy_proto.mutable_taskmanagerendprocessenabled()->set_value(false); - return GetValidPolicyFetchResponse(policy_proto); + return bundle->Get(ns); } std::vector<uint8_t> GetValidPolicyFetchResponseWithAllPolicy() { @@ -83,103 +67,114 @@ PolicyLoaderLacrosTest() = default; ~PolicyLoaderLacrosTest() override {} - void SetPolicy(std::vector<uint8_t> data) { + void SetPolicy() { + std::vector<uint8_t> data = GetValidPolicyFetchResponseWithAllPolicy(); auto init_params = crosapi::mojom::BrowserInitParams::New(); init_params->device_account_policy = data; chromeos::LacrosService::Get()->SetInitParamsForTests( std::move(init_params)); } - void SetSystemWidePolicy() { - std::vector<uint8_t> data = - GetValidPolicyFetchResponseWithSystemWidePolicy(); - system_wide_policies_set_ = true; - SetPolicy(data); - } - - void SetProfilePolicy() { - std::vector<uint8_t> data = - GetValidPolicyFetchResponseWithPerProfilePolicy(); - SetPolicy(data); - } - - void SetAllPolicy() { - std::vector<uint8_t> data = GetValidPolicyFetchResponseWithAllPolicy(); - system_wide_policies_set_ = true; - SetPolicy(data); - } - - void CheckOnlySystemWidePoliciesAreSet(PolicyBundle* bundle) { - const PolicyMap* policy_map = GetChromePolicyMap(bundle); - // Profile policies. - EXPECT_EQ(nullptr, policy_map->GetValue(key::kHomepageLocation)); - EXPECT_EQ(nullptr, policy_map->GetValue(key::kAllowDinosaurEasterEgg)); - - // System-wide policies. - if (system_wide_policies_set_) { - EXPECT_FALSE( - policy_map->GetValue(key::kTaskManagerEndProcessEnabled)->GetBool()); + void CheckProfilePolicies(const PolicyMap& policy_map) const { + if (per_profile_ == PolicyPerProfileFilter::kFalse) { + EXPECT_EQ(nullptr, policy_map.GetValue(key::kHomepageLocation)); + EXPECT_EQ(nullptr, policy_map.GetValue(key::kAllowDinosaurEasterEgg)); + } else { + EXPECT_EQ("http://chromium.org", + policy_map.GetValue(key::kHomepageLocation)->GetString()); + // Enterprise default. + EXPECT_EQ(false, + policy_map.GetValue(key::kAllowDinosaurEasterEgg)->GetBool()); } - // Enterprise default. - EXPECT_FALSE( - policy_map->GetValue(key::kPinUnlockAutosubmitEnabled)->GetBool()); + } + + void CheckSystemWidePolicies(const PolicyMap& policy_map) const { + if (per_profile_ == PolicyPerProfileFilter::kTrue) { + EXPECT_EQ(nullptr, + policy_map.GetValue(key::kTaskManagerEndProcessEnabled)); + EXPECT_EQ(nullptr, policy_map.GetValue(key::kPinUnlockAutosubmitEnabled)); + } else { + EXPECT_FALSE( + policy_map.GetValue(key::kTaskManagerEndProcessEnabled)->GetBool()); + // Enterprise default. + EXPECT_FALSE( + policy_map.GetValue(key::kPinUnlockAutosubmitEnabled)->GetBool()); + } + } + + void CheckCorrectPoliciesAreSet(PolicyBundle* bundle) const { + const PolicyMap& policy_map = GetChromePolicyMap(bundle); + CheckProfilePolicies(policy_map); + CheckSystemWidePolicies(policy_map); } SchemaRegistry schema_registry_; - bool system_wide_policies_set_ = false; + PolicyPerProfileFilter per_profile_ = PolicyPerProfileFilter::kFalse; chromeos::ScopedLacrosServiceTestHelper test_helper_; }; -TEST_F(PolicyLoaderLacrosTest, BasicTest) { - SetSystemWidePolicy(); +TEST_F(PolicyLoaderLacrosTest, BasicTestSystemWidePolicies) { + per_profile_ = PolicyPerProfileFilter::kFalse; + SetPolicy(); PolicyLoaderLacros loader(task_environment_.GetMainThreadTaskRunner(), - PolicyPerProfileFilter::kFalse); + per_profile_); base::RunLoop().RunUntilIdle(); - CheckOnlySystemWidePoliciesAreSet(loader.Load().get()); + CheckCorrectPoliciesAreSet(loader.Load().get()); } -TEST_F(PolicyLoaderLacrosTest, BasicTestPerProfile) { - SetProfilePolicy(); +TEST_F(PolicyLoaderLacrosTest, BasicTestProfilePolicies) { + per_profile_ = PolicyPerProfileFilter::kTrue; + SetPolicy(); PolicyLoaderLacros loader(task_environment_.GetMainThreadTaskRunner(), - PolicyPerProfileFilter::kFalse); + per_profile_); base::RunLoop().RunUntilIdle(); - CheckOnlySystemWidePoliciesAreSet(loader.Load().get()); + CheckCorrectPoliciesAreSet(loader.Load().get()); } -TEST_F(PolicyLoaderLacrosTest, UpdateTest) { +TEST_F(PolicyLoaderLacrosTest, UpdateTestProfilePolicies) { + per_profile_ = PolicyPerProfileFilter::kTrue; auto init_params = crosapi::mojom::BrowserInitParams::New(); - // chromeos::ScopedLacrosServiceTestHelper test_helper; chromeos::LacrosService::Get()->SetInitParamsForTests(std::move(init_params)); - PolicyLoaderLacros* loader = - new PolicyLoaderLacros(task_environment_.GetMainThreadTaskRunner(), - PolicyPerProfileFilter::kFalse); + PolicyLoaderLacros* loader = new PolicyLoaderLacros( + task_environment_.GetMainThreadTaskRunner(), per_profile_); AsyncPolicyProvider provider(&schema_registry_, std::unique_ptr<AsyncPolicyLoader>(loader)); provider.Init(&schema_registry_); base::RunLoop().RunUntilIdle(); - EXPECT_EQ(GetChromePolicyMap(loader->Load().get())->size(), (unsigned int)0); + EXPECT_EQ(GetChromePolicyMap(loader->Load().get()).size(), (unsigned int)0); - std::vector<uint8_t> data = GetValidPolicyFetchResponseWithSystemWidePolicy(); - system_wide_policies_set_ = true; + std::vector<uint8_t> data = GetValidPolicyFetchResponseWithAllPolicy(); loader->OnPolicyUpdated(data); base::RunLoop().RunUntilIdle(); - EXPECT_GT(GetChromePolicyMap(loader->Load().get())->size(), + EXPECT_GT(GetChromePolicyMap(loader->Load().get()).size(), static_cast<unsigned int>(0)); provider.Shutdown(); } -TEST_F(PolicyLoaderLacrosTest, EnterpriseDefaultsTest) { - SetAllPolicy(); +TEST_F(PolicyLoaderLacrosTest, UpdateTestSystemWidePolicies) { + per_profile_ = PolicyPerProfileFilter::kFalse; + auto init_params = crosapi::mojom::BrowserInitParams::New(); - PolicyLoaderLacros loader(task_environment_.GetMainThreadTaskRunner(), - PolicyPerProfileFilter::kFalse); + chromeos::LacrosService::Get()->SetInitParamsForTests(std::move(init_params)); + + PolicyLoaderLacros* loader = new PolicyLoaderLacros( + task_environment_.GetMainThreadTaskRunner(), per_profile_); + AsyncPolicyProvider provider(&schema_registry_, + std::unique_ptr<AsyncPolicyLoader>(loader)); + provider.Init(&schema_registry_); base::RunLoop().RunUntilIdle(); + EXPECT_EQ(GetChromePolicyMap(loader->Load().get()).size(), (unsigned int)0); - CheckOnlySystemWidePoliciesAreSet(loader.Load().get()); + std::vector<uint8_t> data = GetValidPolicyFetchResponseWithAllPolicy(); + loader->OnPolicyUpdated(data); + base::RunLoop().RunUntilIdle(); + EXPECT_GT(GetChromePolicyMap(loader->Load().get()).size(), + static_cast<unsigned int>(0)); + provider.Shutdown(); } } // namespace policy
diff --git a/components/policy/core/common/policy_service_impl.cc b/components/policy/core/common/policy_service_impl.cc index a7ac585..8d95230d 100644 --- a/components/policy/core/common/policy_service_impl.cc +++ b/components/policy/core/common/policy_service_impl.cc
@@ -113,9 +113,11 @@ {policy::key::kNativeMessagingWhitelist, policy::key::kNativeMessagingAllowlist}, #endif // BUILDFLAG(ENABLE_EXTENSIONS) -#if BUILDFLAG(IS_CHROMEOS_ASH) +#if defined(OS_CHROMEOS) {policy::key::kAttestationExtensionWhitelist, policy::key::kAttestationExtensionAllowlist}, +#endif // defined(OS_CHROMEOS) +#if BUILDFLAG(IS_CHROMEOS_ASH) {policy::key::kExternalPrintServersWhitelist, policy::key::kExternalPrintServersAllowlist}, {policy::key::kNativePrintersBulkBlacklist,
diff --git a/components/safe_browsing/content/browser/safe_browsing_navigation_observer_manager.cc b/components/safe_browsing/content/browser/safe_browsing_navigation_observer_manager.cc index bb8451e..5816c3b 100644 --- a/components/safe_browsing/content/browser/safe_browsing_navigation_observer_manager.cc +++ b/components/safe_browsing/content/browser/safe_browsing_navigation_observer_manager.cc
@@ -462,6 +462,11 @@ DCHECK(omit_non_user_gestures_is_enabled || out_referrer_chain->size() <= kReferrerChainMaxLength); if (omit_non_user_gestures_is_enabled) { + int extra_entries = out_referrer_chain->size() - kReferrerChainMaxLength; + UMA_HISTOGRAM_COUNTS_1000( + "SafeBrowsing.NavigationObserver.DroppedReferrerChainEntries." + "ClientRedirect", + extra_entries); MaybeRemoveNonUserGestureReferrerEntries(out_referrer_chain, kReferrerChainMaxLength); } @@ -496,6 +501,11 @@ DCHECK(omit_non_user_gestures_is_enabled || out_referrer_chain->size() <= kReferrerChainMaxLength); if (omit_non_user_gestures_is_enabled) { + int extra_entries = out_referrer_chain->size() - kReferrerChainMaxLength; + UMA_HISTOGRAM_COUNTS_1000( + "SafeBrowsing.NavigationObserver.DroppedReferrerChainEntries." + "ClientRedirect", + extra_entries); MaybeRemoveNonUserGestureReferrerEntries(out_referrer_chain, kReferrerChainMaxLength); } @@ -565,6 +575,11 @@ DCHECK(omit_non_user_gestures_is_enabled || out_referrer_chain->size() <= kReferrerChainMaxLength); if (omit_non_user_gestures_is_enabled) { + int extra_entries = out_referrer_chain->size() - kReferrerChainMaxLength; + UMA_HISTOGRAM_COUNTS_1000( + "SafeBrowsing.NavigationObserver.DroppedReferrerChainEntries." + "ClientRedirect", + extra_entries); MaybeRemoveNonUserGestureReferrerEntries(out_referrer_chain, kReferrerChainMaxLength); } @@ -672,6 +687,11 @@ DCHECK(omit_non_user_gestures_is_enabled || (size_t)navigation_chain.size() <= recent_navigation_count); if (omit_non_user_gestures_is_enabled) { + int extra_entries = navigation_chain.size() - recent_navigation_count; + UMA_HISTOGRAM_COUNTS_1000( + "SafeBrowsing.NavigationObserver.DroppedReferrerChainEntries." + "RecentNavigation", + extra_entries); MaybeRemoveNonUserGestureReferrerEntries(&navigation_chain, recent_navigation_count); }
diff --git a/components/safe_browsing/content/browser/safe_browsing_navigation_observer_manager_util.cc b/components/safe_browsing/content/browser/safe_browsing_navigation_observer_manager_util.cc index 1318064..bcab825 100644 --- a/components/safe_browsing/content/browser/safe_browsing_navigation_observer_manager_util.cc +++ b/components/safe_browsing/content/browser/safe_browsing_navigation_observer_manager_util.cc
@@ -11,7 +11,6 @@ void MaybeRemoveNonUserGestureReferrerEntries(ReferrerChain* referrer_chain, int max_allowed_length) { int extra_entries = referrer_chain->size() - max_allowed_length; - // TODO(bdea): Log number of extra entries of the referrer chain. if (extra_entries > 0) { RemoveNonUserGestureReferrerEntries(referrer_chain, max_allowed_length); }
diff --git a/components/signin/internal/identity_manager/account_fetcher_service.cc b/components/signin/internal/identity_manager/account_fetcher_service.cc index 8718a2c..41a5e58 100644 --- a/components/signin/internal/identity_manager/account_fetcher_service.cc +++ b/components/signin/internal/identity_manager/account_fetcher_service.cc
@@ -109,12 +109,6 @@ return account_capabilities_requests_.empty(); } -void AccountFetcherService::ForceRefreshOfAccountInfo( - const CoreAccountId& account_id) { - DCHECK(network_fetches_enabled_); - RefreshAccountInfo(account_id, /*only_fetch_if_invalid=*/false); -} - void AccountFetcherService::OnNetworkInitialized() { DCHECK(!network_initialized_); DCHECK(!network_fetches_enabled_); @@ -154,6 +148,12 @@ // single account. This is possible since we only support a single account to be // a child anyway. #if defined(OS_ANDROID) +void AccountFetcherService::RefreshAccountInfoIfStale( + const CoreAccountId& account_id) { + DCHECK(network_fetches_enabled_); + RefreshAccountInfo(account_id, /*only_fetch_if_invalid=*/false); +} + void AccountFetcherService::UpdateChildInfo() { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); std::vector<CoreAccountId> accounts = token_service_->GetAccounts();
diff --git a/components/signin/internal/identity_manager/account_fetcher_service.h b/components/signin/internal/identity_manager/account_fetcher_service.h index 47e3279..f153f33 100644 --- a/components/signin/internal/identity_manager/account_fetcher_service.h +++ b/components/signin/internal/identity_manager/account_fetcher_service.h
@@ -73,8 +73,6 @@ virtual bool IsAllUserInfoFetched() const; virtual bool AreAllAccountCapabilitiesFetched() const; - void ForceRefreshOfAccountInfo(const CoreAccountId& account_id); - AccountTrackerService* account_tracker_service() const { return account_tracker_service_; } @@ -100,6 +98,9 @@ void EnableAccountCapabilitiesFetcherForTest(bool enabled); #if defined(OS_ANDROID) + // Refresh the AccountInfo if the existing one is stale + void RefreshAccountInfoIfStale(const CoreAccountId& account_id); + // Called by ChildAccountInfoFetcherAndroid. void SetIsChildAccount(const CoreAccountId& account_id, bool is_child_account);
diff --git a/components/signin/public/android/java/src/org/chromium/components/signin/identitymanager/IdentityManager.java b/components/signin/public/android/java/src/org/chromium/components/signin/identitymanager/IdentityManager.java index 7ed5ba7d..fd3d451 100644 --- a/components/signin/public/android/java/src/org/chromium/components/signin/identitymanager/IdentityManager.java +++ b/components/signin/public/android/java/src/org/chromium/components/signin/identitymanager/IdentityManager.java
@@ -165,12 +165,12 @@ } /** - * Forces refreshing extended {@link AccountInfo} with image for the given - * list of {@link CoreAccountInfo}. + * Refreshes extended {@link AccountInfo} with image for the given + * list of {@link CoreAccountInfo} if the existing ones are stale. */ - public void forceRefreshOfExtendedAccountInfo(List<CoreAccountInfo> accountInfos) { + public void refreshAccountInfoIfStale(List<CoreAccountInfo> accountInfos) { for (CoreAccountInfo accountInfo : accountInfos) { - IdentityManagerJni.get().forceRefreshOfExtendedAccountInfo( + IdentityManagerJni.get().refreshAccountInfoIfStale( mNativeIdentityManager, accountInfo.getId()); } } @@ -208,7 +208,6 @@ @Nullable AccountInfo findExtendedAccountInfoByEmailAddress(long nativeIdentityManager, String email); CoreAccountInfo[] getAccountsWithRefreshTokens(long nativeIdentityManager); - void forceRefreshOfExtendedAccountInfo( - long nativeIdentityManager, CoreAccountId coreAccountId); + void refreshAccountInfoIfStale(long nativeIdentityManager, CoreAccountId coreAccountId); } }
diff --git a/components/signin/public/android/java/src/org/chromium/components/signin/identitymanager/ProfileOAuth2TokenServiceDelegateTest.java b/components/signin/public/android/java/src/org/chromium/components/signin/identitymanager/ProfileOAuth2TokenServiceDelegateTest.java index 7024b3f8..5e181697 100644 --- a/components/signin/public/android/java/src/org/chromium/components/signin/identitymanager/ProfileOAuth2TokenServiceDelegateTest.java +++ b/components/signin/public/android/java/src/org/chromium/components/signin/identitymanager/ProfileOAuth2TokenServiceDelegateTest.java
@@ -33,6 +33,7 @@ import org.chromium.components.signin.AccessTokenData; import org.chromium.components.signin.AccountManagerFacadeProvider; import org.chromium.components.signin.AccountUtils; +import org.chromium.components.signin.AuthException; import org.chromium.components.signin.test.util.FakeAccountManagerFacade; import java.util.List; @@ -109,7 +110,7 @@ @Test @SmallTest - public void testGetOAuth2AccessTokenOnSuccess() { + public void testGetOAuth2AccessTokenOnSuccess() throws AuthException { final String scope = "oauth2:http://example.com/scope"; mAccountManagerFacade.addAccount(ACCOUNT); final AccessTokenData expectedToken = mAccountManagerFacade.getAccessToken(ACCOUNT, scope); @@ -121,7 +122,7 @@ @Test @SmallTest - public void testGetOAuth2AccessTokenOnFailure() { + public void testGetOAuth2AccessTokenOnFailure() throws AuthException { final String scope = "oauth2:http://example.com/scope"; mAccountManagerFacade.addAccount(ACCOUNT); doReturn(null).when(mAccountManagerFacade).getAccessToken(any(Account.class), anyString());
diff --git a/components/signin/public/android/java/src/org/chromium/components/signin/test/util/FakeAccountManagerFacade.java b/components/signin/public/android/java/src/org/chromium/components/signin/test/util/FakeAccountManagerFacade.java index dd67f4f..db8b5f3 100644 --- a/components/signin/public/android/java/src/org/chromium/components/signin/test/util/FakeAccountManagerFacade.java +++ b/components/signin/public/android/java/src/org/chromium/components/signin/test/util/FakeAccountManagerFacade.java
@@ -20,6 +20,7 @@ import org.chromium.components.signin.AccessTokenData; import org.chromium.components.signin.AccountManagerFacade; import org.chromium.components.signin.AccountsChangeObserver; +import org.chromium.components.signin.AuthException; import java.util.ArrayList; import java.util.LinkedHashSet; @@ -74,7 +75,7 @@ } @Override - public AccessTokenData getAccessToken(Account account, String scope) { + public AccessTokenData getAccessToken(Account account, String scope) throws AuthException { synchronized (mLock) { AccountHolder accountHolder = getAccountHolder(account); if (accountHolder.getAuthToken(scope) == null) { @@ -150,13 +151,19 @@ } @GuardedBy("mLock") - private AccountHolder getAccountHolder(Account account) { + private AccountHolder getAccountHolder(Account account) throws AuthException { for (AccountHolder accountHolder : mAccountHolders) { if (accountHolder.getAccount().equals(account)) { return accountHolder; } } - throw new IllegalArgumentException("Cannot find account:" + account); + // Since token requests are asynchronous, sometimes they arrive after the account has been + // removed. Thus, throwing an unchecked exception here would cause test failures (see + // https://crbug.com/1205346 for details). On the other hand, AuthException thrown here + // will be caught by ProfileOAuth2TokenServiceDelegate and reported as a token request + // failure (which matches the behavior of the production code in the situation when a token + // is requested for an account that doesn't exist or has been removed). + throw new AuthException(/* isTransientError = */ false, "Cannot find account:" + account); } @MainThread
diff --git a/components/signin/public/identity_manager/access_token_constants.cc b/components/signin/public/identity_manager/access_token_constants.cc index a968b43..25d16ea 100644 --- a/components/signin/public/identity_manager/access_token_constants.cc +++ b/components/signin/public/identity_manager/access_token_constants.cc
@@ -50,13 +50,8 @@ // Required by Permission Request Creator. GaiaConstants::kClassifyUrlKidPermissionOAuth2Scope, -#if defined(OS_IOS) - // TODO(1234406): Confirm why auth/android_checkin is needed for iOS. - GaiaConstants::kGCMGroupServerOAuth2Scope, - GaiaConstants::kGCMCheckinServerOAuth2Scope - // Required by ChromeOS only. -#elif BUILDFLAG(IS_CHROMEOS_ASH) +#if BUILDFLAG(IS_CHROMEOS_ASH) GaiaConstants::kAccountsReauthOAuth2Scope, GaiaConstants::kAssistantOAuth2Scope, GaiaConstants::kAuditRecordingOAuth2Scope,
diff --git a/components/signin/public/identity_manager/identity_manager.cc b/components/signin/public/identity_manager/identity_manager.cc index 9e689f2..ecbae67 100644 --- a/components/signin/public/identity_manager/identity_manager.cc +++ b/components/signin/public/identity_manager/identity_manager.cc
@@ -445,7 +445,7 @@ identity_mutator_.GetJavaObject()); } -void IdentityManager::ForceRefreshOfExtendedAccountInfo( +void IdentityManager::RefreshAccountInfoIfStale( const CoreAccountId& account_id) { DCHECK(HasAccountWithRefreshToken(account_id)); AccountInfo account_info = @@ -453,13 +453,13 @@ if (account_info.account_image.IsEmpty()) { account_info_fetch_start_times_[account_id] = base::TimeTicks::Now(); } - account_fetcher_service_->ForceRefreshOfAccountInfo(account_id); + account_fetcher_service_->RefreshAccountInfoIfStale(account_id); } -void IdentityManager::ForceRefreshOfExtendedAccountInfo( +void IdentityManager::RefreshAccountInfoIfStale( JNIEnv* env, const base::android::JavaParamRef<jobject>& j_core_account_id) { - ForceRefreshOfExtendedAccountInfo( + RefreshAccountInfoIfStale( ConvertFromJavaCoreAccountId(env, j_core_account_id)); }
diff --git a/components/signin/public/identity_manager/identity_manager.h b/components/signin/public/identity_manager/identity_manager.h index 864ef79..6545030 100644 --- a/components/signin/public/identity_manager/identity_manager.h +++ b/components/signin/public/identity_manager/identity_manager.h
@@ -443,11 +443,12 @@ // Provide the reference on the java IdentityMutator. base::android::ScopedJavaLocalRef<jobject> GetIdentityMutatorJavaObject(); - // This method has the contractual assumption that the account is a known - // account and has as its semantics that it fetches the account info for the - // account, triggering an OnExtendedAccountInfoUpdated() callback if the info - // was successfully fetched. - void ForceRefreshOfExtendedAccountInfo(const CoreAccountId& account_id); + // This method refreshes the AccountInfo associated with |account_id|, + // when the existing account info is stale, otherwise it doesn't fetch the + // account info if it is valid. + // This method triggers an OnExtendedAccountInfoUpdated() + // callback if the info was successfully fetched. + void RefreshAccountInfoIfStale(const CoreAccountId& account_id); // Overloads for calls from java: bool HasPrimaryAccount(JNIEnv* env) const; @@ -467,9 +468,8 @@ base::android::ScopedJavaLocalRef<jobjectArray> GetAccountsWithRefreshTokens( JNIEnv* env) const; - // Forces refreshing extended account info with image for the given - // core account id. - void ForceRefreshOfExtendedAccountInfo( + // Refreshes account info with image for the given core account id. + void RefreshAccountInfoIfStale( JNIEnv* env, const base::android::JavaParamRef<jobject>& j_core_account_id); #endif @@ -594,8 +594,7 @@ FRIEND_TEST_ALL_PREFIXES(IdentityManagerTest, CallbackSentOnAccountsCookieDeletedByUserAction); FRIEND_TEST_ALL_PREFIXES(IdentityManagerTest, OnNetworkInitialized); - FRIEND_TEST_ALL_PREFIXES(IdentityManagerTest, - ForceRefreshOfExtendedAccountInfo); + FRIEND_TEST_ALL_PREFIXES(IdentityManagerTest, RefreshAccountInfoIfStale); FRIEND_TEST_ALL_PREFIXES(IdentityManagerTest, FindExtendedPrimaryAccountInfo); // Only caller to FindExtendedPrimaryAccountInfo().
diff --git a/components/signin/public/identity_manager/identity_manager_unittest.cc b/components/signin/public/identity_manager/identity_manager_unittest.cc index 431ee30..8611333 100644 --- a/components/signin/public/identity_manager/identity_manager_unittest.cc +++ b/components/signin/public/identity_manager/identity_manager_unittest.cc
@@ -2439,7 +2439,7 @@ } #if defined(OS_ANDROID) -TEST_F(IdentityManagerTest, ForceRefreshOfExtendedAccountInfo) { +TEST_F(IdentityManagerTest, RefreshAccountInfoIfStale) { // The flow of this test results in an interaction with // ChildAccountInfoFetcherAndroid, which requires initialization of // AccountManagerFacade in java code to avoid a crash. @@ -2448,8 +2448,7 @@ identity_manager()->GetAccountFetcherService()->OnNetworkInitialized(); AccountInfo account_info = MakeAccountAvailable(identity_manager(), kTestEmail2); - identity_manager()->ForceRefreshOfExtendedAccountInfo( - account_info.account_id); + identity_manager()->RefreshAccountInfoIfStale(account_info.account_id); SimulateSuccessfulFetchOfAccountInfo( identity_manager(), account_info.account_id, account_info.email,
diff --git a/components/sync/driver/data_type_controller.h b/components/sync/driver/data_type_controller.h index 58dcfb3..2e86d16 100644 --- a/components/sync/driver/data_type_controller.h +++ b/components/sync/driver/data_type_controller.h
@@ -41,8 +41,8 @@ FAILED // The controller was started but encountered an error. }; - // Returned from ActivateDataType. - enum ActivateDataTypeResult { + // Returned from Connect. + enum ConnectResult { // Indicates that the initial download for this type is already complete, or // wasn't needed in the first place (e.g. for proxy types). TYPE_ALREADY_DOWNLOADED, @@ -79,12 +79,11 @@ // Called by DataTypeManager once the local model has loaded, but before // downloading initial data (if necessary). Returns whether the initial // download for this type is already complete. - virtual ActivateDataTypeResult ActivateDataType( - ModelTypeConfigurer* configurer) = 0; + virtual ConnectResult Connect(ModelTypeConfigurer* configurer) = 0; - // Called by DataTypeManager to deactivate the controlled data type. + // Called by DataTypeManager to disconnect the controlled data type. // See comments for ModelAssociationManager::OnSingleDataTypeWillStop. - virtual void DeactivateDataType(ModelTypeConfigurer* configurer) = 0; + virtual void Disconnect(ModelTypeConfigurer* configurer) = 0; // Stops the data type. If LoadModels() has not completed it will enter // STOPPING state first and eventually STOPPED. Once stopped, |callback| will
diff --git a/components/sync/driver/data_type_manager_impl.cc b/components/sync/driver/data_type_manager_impl.cc index 3450046..2208c138 100644 --- a/components/sync/driver/data_type_manager_impl.cc +++ b/components/sync/driver/data_type_manager_impl.cc
@@ -188,18 +188,18 @@ Restart(); } -void DataTypeManagerImpl::ActivateDataTypes() { +void DataTypeManagerImpl::ConnectDataTypes() { for (ModelType type : last_enabled_types_) { const auto& dtc_iter = controllers_->find(type); if (dtc_iter == controllers_->end()) continue; DataTypeController* dtc = dtc_iter->second.get(); if (dtc->state() == DataTypeController::MODEL_LOADED) { - // Only call ActivateDataType for types that completed LoadModels + // Only call Connect() for types that completed LoadModels() // successfully. Such types shouldn't be in an error state at the same // time. DCHECK(!data_type_status_table_.GetFailedTypes().Has(dtc->type())); - switch (dtc->ActivateDataType(configurer_)) { + switch (dtc->Connect(configurer_)) { case DataTypeController::TYPE_ALREADY_DOWNLOADED: // Proxy types (as opposed to protocol types) don't actually have any // data, so keep proxy types out of |downloaded_types_|. @@ -338,7 +338,7 @@ // TODO(pavely): By now some of datatypes in |configuration_types_queue_| // could have failed loading and should be excluded from configuration. I need // to adjust |configuration_types_queue_| for such types. - ActivateDataTypes(); + ConnectDataTypes(); StartNextConfiguration(/*higher_priority_types_before=*/ModelTypeSet()); } @@ -621,7 +621,7 @@ auto c_it = controllers_->find(type); DCHECK(c_it != controllers_->end()); // Delegate deactivation to the controller. - c_it->second->DeactivateDataType(configurer_); + c_it->second->Disconnect(configurer_); if (error.IsSet()) { data_type_status_table_.UpdateFailedDataType(type, error); @@ -629,7 +629,7 @@ last_requested_context_.reason = GetReasonForProgrammaticReconfigure(last_requested_context_.reason); // Do this asynchronously so the ModelLoadManager has a chance to - // finish stopping this type, otherwise DeactivateDataType() and Stop() + // finish stopping this type, otherwise Disconnect() and Stop() // end up getting called twice on the controller. base::SequencedTaskRunnerHandle::Get()->PostTask( FROM_HERE, base::BindOnce(&DataTypeManagerImpl::ProcessReconfigure,
diff --git a/components/sync/driver/data_type_manager_impl.h b/components/sync/driver/data_type_manager_impl.h index fef7c41..7cb9f4a 100644 --- a/components/sync/driver/data_type_manager_impl.h +++ b/components/sync/driver/data_type_manager_impl.h
@@ -137,8 +137,8 @@ void ConfigureImpl(ModelTypeSet desired_types, const ConfigureContext& context); - // Calls data type controllers of requested types to activate. - void ActivateDataTypes(); + // Calls data type controllers of requested types to connect. + void ConnectDataTypes(); DataTypeConfigStateMap BuildDataTypeConfigStateMap( const ModelTypeSet& types_being_configured) const;
diff --git a/components/sync/driver/data_type_manager_impl_unittest.cc b/components/sync/driver/data_type_manager_impl_unittest.cc index 2a6b5b00..204cc66 100644 --- a/components/sync/driver/data_type_manager_impl_unittest.cc +++ b/components/sync/driver/data_type_manager_impl_unittest.cc
@@ -77,14 +77,14 @@ last_params_ = std::move(params); } - void ActivateDataType(ModelType type, - std::unique_ptr<DataTypeActivationResponse> - activation_response) override { - activated_types_.Put(type); + void ConnectDataType(ModelType type, + std::unique_ptr<DataTypeActivationResponse> + activation_response) override { + connected_types_.Put(type); } - void DeactivateDataType(ModelType type) override { - activated_types_.Remove(type); + void DisconnectDataType(ModelType type) override { + connected_types_.Remove(type); } void SetProxyTabsDatatypeEnabled(bool enabled) override {} @@ -97,14 +97,14 @@ failed_download_types); } - const ModelTypeSet activated_types() { return activated_types_; } + const ModelTypeSet connected_types() { return connected_types_; } int configure_call_count() const { return configure_call_count_; } const ConfigureParams& last_params() const { return last_params_; } private: - ModelTypeSet activated_types_; + ModelTypeSet connected_types_; int configure_call_count_ = 0; ConfigureParams last_params_; }; @@ -321,7 +321,7 @@ Configure(ModelTypeSet(BOOKMARKS)); EXPECT_EQ(DataTypeManager::CONFIGURING, dtm_->state()); - EXPECT_EQ(ModelTypeSet(BOOKMARKS), configurer_.activated_types()); + EXPECT_EQ(ModelTypeSet(BOOKMARKS), configurer_.connected_types()); // Once configuration is finished, the debug info listener should be notified, // including the implicitly-enabled NIGORI and the newly-downloaded BOOKMARKS. @@ -335,7 +335,7 @@ FinishDownload(ModelTypeSet(), ModelTypeSet()); // control types FinishDownload(ModelTypeSet(BOOKMARKS), ModelTypeSet()); EXPECT_EQ(DataTypeManager::CONFIGURED, dtm_->state()); - EXPECT_EQ(1U, configurer_.activated_types().Size()); + EXPECT_EQ(1U, configurer_.connected_types().Size()); // The debug info listener is called through a WeakHandle, which posts a task. // So wait for that to actually get executed. @@ -343,7 +343,7 @@ dtm_->Stop(ShutdownReason::STOP_SYNC_AND_KEEP_DATA); EXPECT_EQ(DataTypeManager::STOPPED, dtm_->state()); - EXPECT_TRUE(configurer_.activated_types().Empty()); + EXPECT_TRUE(configurer_.connected_types().Empty()); EXPECT_EQ(0, GetController(BOOKMARKS)->model()->clear_metadata_call_count()); } @@ -360,15 +360,15 @@ Configure(ModelTypeSet(BOOKMARKS)); EXPECT_EQ(DataTypeManager::CONFIGURING, dtm_->state()); - EXPECT_EQ(ModelTypeSet(BOOKMARKS), configurer_.activated_types()); + EXPECT_EQ(ModelTypeSet(BOOKMARKS), configurer_.connected_types()); dtm_->Stop(ShutdownReason::STOP_SYNC_AND_KEEP_DATA); EXPECT_EQ(DataTypeManager::STOPPED, dtm_->state()); - EXPECT_TRUE(configurer_.activated_types().Empty()); + EXPECT_TRUE(configurer_.connected_types().Empty()); } FinishDownloadWhileStopped(ModelTypeSet(BOOKMARKS), ModelTypeSet()); - EXPECT_TRUE(configurer_.activated_types().Empty()); + EXPECT_TRUE(configurer_.connected_types().Empty()); } // Set up a DTM with a single controller, configure it, finish @@ -391,14 +391,14 @@ dtm_->Stop(ShutdownReason::STOP_SYNC_AND_KEEP_DATA); EXPECT_EQ(DataTypeManager::STOPPED, dtm_->state()); - EXPECT_TRUE(configurer_.activated_types().Empty()); + EXPECT_TRUE(configurer_.connected_types().Empty()); dtm_.reset(); } EXPECT_EQ(DataTypeController::STOPPING, GetController(BOOKMARKS)->state()); GetController(BOOKMARKS)->model()->SimulateModelStartFinished(); ASSERT_EQ(DataTypeController::NOT_RUNNING, GetController(BOOKMARKS)->state()); - EXPECT_TRUE(configurer_.activated_types().Empty()); + EXPECT_TRUE(configurer_.connected_types().Empty()); } // Set up a DTM with a single controller. Then: @@ -484,7 +484,7 @@ // Step 1. Configure(ModelTypeSet(BOOKMARKS)); EXPECT_EQ(DataTypeManager::CONFIGURING, dtm_->state()); - EXPECT_EQ(ModelTypeSet(BOOKMARKS), configurer_.activated_types()); + EXPECT_EQ(ModelTypeSet(BOOKMARKS), configurer_.connected_types()); // Step 2. FinishDownload(ModelTypeSet(), ModelTypeSet()); // control types @@ -499,7 +499,7 @@ Configure(ModelTypeSet(BOOKMARKS, PREFERENCES)); EXPECT_EQ(DataTypeManager::CONFIGURING, dtm_->state()); EXPECT_EQ(ModelTypeSet(BOOKMARKS, PREFERENCES), - configurer_.activated_types()); + configurer_.connected_types()); EXPECT_EQ(0, GetController(BOOKMARKS)->model()->clear_metadata_call_count()); // Step 4. @@ -510,7 +510,7 @@ // Step 5. dtm_->Stop(ShutdownReason::STOP_SYNC_AND_KEEP_DATA); EXPECT_EQ(DataTypeManager::STOPPED, dtm_->state()); - EXPECT_TRUE(configurer_.activated_types().Empty()); + EXPECT_TRUE(configurer_.connected_types().Empty()); } // Set up a DTM with two controllers. Then: @@ -530,7 +530,7 @@ // Step 1. Configure(ModelTypeSet(BOOKMARKS)); EXPECT_EQ(DataTypeManager::CONFIGURING, dtm_->state()); - EXPECT_EQ(ModelTypeSet(BOOKMARKS), configurer_.activated_types()); + EXPECT_EQ(ModelTypeSet(BOOKMARKS), configurer_.connected_types()); // Step 2. FinishDownload(ModelTypeSet(), ModelTypeSet()); // control types @@ -544,7 +544,7 @@ // Step 3. Configure(ModelTypeSet(PREFERENCES)); EXPECT_EQ(DataTypeManager::CONFIGURING, dtm_->state()); - EXPECT_EQ(ModelTypeSet(PREFERENCES), configurer_.activated_types()); + EXPECT_EQ(ModelTypeSet(PREFERENCES), configurer_.connected_types()); EXPECT_EQ(1, GetController(BOOKMARKS)->model()->clear_metadata_call_count()); // Step 4. @@ -555,7 +555,7 @@ // Step 5. dtm_->Stop(ShutdownReason::STOP_SYNC_AND_KEEP_DATA); EXPECT_EQ(DataTypeManager::STOPPED, dtm_->state()); - EXPECT_TRUE(configurer_.activated_types().Empty()); + EXPECT_TRUE(configurer_.connected_types().Empty()); } TEST_F(SyncDataTypeManagerImplTest, ConfigureModelLoading) { @@ -571,7 +571,7 @@ // Step 1: Configure with first controller (model stays loading). Configure(ModelTypeSet(BOOKMARKS)); EXPECT_EQ(DataTypeManager::CONFIGURING, dtm_->state()); - EXPECT_TRUE(configurer_.activated_types().Empty()); + EXPECT_TRUE(configurer_.connected_types().Empty()); // Step 2: Configure with both controllers, which gets postponed because // there's an ongoing configuration that cannot complete before the @@ -599,12 +599,12 @@ FinishDownload(ModelTypeSet(BOOKMARKS, PREFERENCES), ModelTypeSet()); EXPECT_EQ(DataTypeManager::CONFIGURED, dtm_->state()); EXPECT_EQ(ModelTypeSet(BOOKMARKS, PREFERENCES), - configurer_.activated_types()); + configurer_.connected_types()); // Step 5: Stop the DTM. dtm_->Stop(ShutdownReason::STOP_SYNC_AND_KEEP_DATA); EXPECT_EQ(DataTypeManager::STOPPED, dtm_->state()); - EXPECT_TRUE(configurer_.activated_types().Empty()); + EXPECT_TRUE(configurer_.connected_types().Empty()); } // Set up a DTM with one controller. Then configure and start the controller @@ -622,7 +622,7 @@ Configure(ModelTypeSet(BOOKMARKS)); EXPECT_EQ(DataTypeManager::CONFIGURING, dtm_->state()); - EXPECT_TRUE(configurer_.activated_types().Empty()); + EXPECT_TRUE(configurer_.connected_types().Empty()); ASSERT_EQ(DataTypeController::MODEL_STARTING, GetController(BOOKMARKS)->state()); @@ -633,7 +633,7 @@ // This should be CONFIGURED but is not properly handled in // DataTypeManagerImpl::OnAllDataTypesReadyForConfigure(). EXPECT_EQ(DataTypeManager::CONFIGURING, dtm_->state()); - EXPECT_TRUE(configurer_.activated_types().Empty()); + EXPECT_TRUE(configurer_.connected_types().Empty()); } // Set up a DTM with two controllers. Then: @@ -653,7 +653,7 @@ // Step 1. Configure(ModelTypeSet(BOOKMARKS)); EXPECT_EQ(DataTypeManager::CONFIGURING, dtm_->state()); - EXPECT_EQ(ModelTypeSet(BOOKMARKS), configurer_.activated_types()); + EXPECT_EQ(ModelTypeSet(BOOKMARKS), configurer_.connected_types()); // Step 2. Configure(ModelTypeSet(BOOKMARKS, PREFERENCES)); @@ -668,12 +668,12 @@ FinishDownload(ModelTypeSet(BOOKMARKS, PREFERENCES), ModelTypeSet()); EXPECT_EQ(DataTypeManager::CONFIGURED, dtm_->state()); EXPECT_EQ(ModelTypeSet(BOOKMARKS, PREFERENCES), - configurer_.activated_types()); + configurer_.connected_types()); // Step 5. dtm_->Stop(ShutdownReason::STOP_SYNC_AND_KEEP_DATA); EXPECT_EQ(DataTypeManager::STOPPED, dtm_->state()); - EXPECT_TRUE(configurer_.activated_types().Empty()); + EXPECT_TRUE(configurer_.connected_types().Empty()); } // Set up a DTM with two controllers. Then: @@ -696,7 +696,7 @@ Configure(ModelTypeSet(BOOKMARKS)); FinishDownload(ModelTypeSet(), ModelTypeSet()); // control types EXPECT_EQ(DataTypeManager::CONFIGURING, dtm_->state()); - EXPECT_EQ(ModelTypeSet(BOOKMARKS), configurer_.activated_types()); + EXPECT_EQ(ModelTypeSet(BOOKMARKS), configurer_.connected_types()); // Step 2. Configure(ModelTypeSet(BOOKMARKS, PREFERENCES)); @@ -711,12 +711,12 @@ FinishDownload(ModelTypeSet(BOOKMARKS, PREFERENCES), ModelTypeSet()); EXPECT_EQ(DataTypeManager::CONFIGURED, dtm_->state()); EXPECT_EQ(ModelTypeSet(BOOKMARKS, PREFERENCES), - configurer_.activated_types()); + configurer_.connected_types()); // Step 5. dtm_->Stop(ShutdownReason::STOP_SYNC_AND_KEEP_DATA); EXPECT_EQ(DataTypeManager::STOPPED, dtm_->state()); - EXPECT_TRUE(configurer_.activated_types().Empty()); + EXPECT_TRUE(configurer_.connected_types().Empty()); } // Tests a Purge then Configure. This is similar to the sequence of @@ -996,7 +996,7 @@ FinishDownload(ModelTypeSet(), ModelTypeSet()); // control types EXPECT_EQ(DataTypeController::NOT_RUNNING, GetController(BOOKMARKS)->state()); EXPECT_EQ(DataTypeManager::CONFIGURED, dtm_->state()); - EXPECT_EQ(0U, configurer_.activated_types().Size()); + EXPECT_EQ(0U, configurer_.connected_types().Size()); observer_.ResetExpectations(); // Bookmarks should start normally now. @@ -1009,7 +1009,7 @@ FinishDownload(ModelTypeSet(), ModelTypeSet()); // control types FinishDownload(ModelTypeSet(BOOKMARKS), ModelTypeSet()); EXPECT_EQ(DataTypeManager::CONFIGURED, dtm_->state()); - EXPECT_EQ(1U, configurer_.activated_types().Size()); + EXPECT_EQ(1U, configurer_.connected_types().Size()); // Should do nothing. observer_.ResetExpectations(); @@ -1017,7 +1017,7 @@ dtm_->Stop(ShutdownReason::STOP_SYNC_AND_KEEP_DATA); EXPECT_EQ(DataTypeManager::STOPPED, dtm_->state()); - EXPECT_TRUE(configurer_.activated_types().Empty()); + EXPECT_TRUE(configurer_.connected_types().Empty()); } // Tests that unready types are not started after ResetDataTypeErrors and @@ -1046,7 +1046,7 @@ FinishDownload(ModelTypeSet(), ModelTypeSet()); // regular types EXPECT_EQ(DataTypeController::NOT_RUNNING, GetController(BOOKMARKS)->state()); EXPECT_EQ(DataTypeManager::CONFIGURED, dtm_->state()); - EXPECT_EQ(0U, configurer_.activated_types().Size()); + EXPECT_EQ(0U, configurer_.connected_types().Size()); } TEST_F(SyncDataTypeManagerImplTest, UnreadyTypeLaterReady) { @@ -1064,7 +1064,7 @@ FinishDownload(ModelTypeSet(), ModelTypeSet()); // control types ASSERT_EQ(DataTypeController::NOT_RUNNING, GetController(BOOKMARKS)->state()); ASSERT_EQ(DataTypeManager::CONFIGURED, dtm_->state()); - ASSERT_EQ(0U, configurer_.activated_types().Size()); + ASSERT_EQ(0U, configurer_.connected_types().Size()); // Bookmarks should start normally now. GetController(BOOKMARKS)->SetPreconditionState( @@ -1080,7 +1080,7 @@ FinishDownload(ModelTypeSet(BOOKMARKS), ModelTypeSet()); EXPECT_EQ(DataTypeManager::CONFIGURED, dtm_->state()); - EXPECT_EQ(1U, configurer_.activated_types().Size()); + EXPECT_EQ(1U, configurer_.connected_types().Size()); } TEST_F(SyncDataTypeManagerImplTest, @@ -1106,7 +1106,7 @@ ASSERT_EQ(DataTypeController::NOT_RUNNING, GetController(PREFERENCES)->state()); ASSERT_EQ(DataTypeManager::CONFIGURED, dtm_->state()); - ASSERT_EQ(0U, configurer_.activated_types().Size()); + ASSERT_EQ(0U, configurer_.connected_types().Size()); // Both types should start normally now. GetController(BOOKMARKS)->SetPreconditionState( @@ -1130,7 +1130,7 @@ FinishDownload(ModelTypeSet(BOOKMARKS, PREFERENCES), ModelTypeSet()); EXPECT_EQ(DataTypeManager::CONFIGURED, dtm_->state()); - EXPECT_EQ(2U, configurer_.activated_types().Size()); + EXPECT_EQ(2U, configurer_.connected_types().Size()); } TEST_F(SyncDataTypeManagerImplTest, MultipleUnreadyTypesLaterOneOfThemReady) { @@ -1155,7 +1155,7 @@ ASSERT_EQ(DataTypeController::NOT_RUNNING, GetController(PREFERENCES)->state()); ASSERT_EQ(DataTypeManager::CONFIGURED, dtm_->state()); - ASSERT_EQ(0U, configurer_.activated_types().Size()); + ASSERT_EQ(0U, configurer_.connected_types().Size()); // Bookmarks should start normally now. Preferences should still not start. GetController(BOOKMARKS)->SetPreconditionState( @@ -1176,7 +1176,7 @@ FinishDownload(ModelTypeSet(BOOKMARKS), ModelTypeSet()); EXPECT_EQ(DataTypeManager::CONFIGURED, dtm_->state()); - EXPECT_EQ(1U, configurer_.activated_types().Size()); + EXPECT_EQ(1U, configurer_.connected_types().Size()); } TEST_F(SyncDataTypeManagerImplTest, @@ -1195,7 +1195,7 @@ FinishDownload(ModelTypeSet(), ModelTypeSet()); // control types ASSERT_EQ(DataTypeController::NOT_RUNNING, GetController(BOOKMARKS)->state()); ASSERT_EQ(DataTypeManager::CONFIGURED, dtm_->state()); - ASSERT_EQ(0U, configurer_.activated_types().Size()); + ASSERT_EQ(0U, configurer_.connected_types().Size()); // Bookmarks is still unready so DataTypePreconditionChanged() should be // ignored. @@ -1242,7 +1242,7 @@ EXPECT_EQ(DataTypeManager::CONFIGURED, dtm_->state()); EXPECT_EQ(DataTypeController::FAILED, GetController(BOOKMARKS)->state()); - EXPECT_EQ(0U, configurer_.activated_types().Size()); + EXPECT_EQ(0U, configurer_.connected_types().Size()); } // Checks that DTM handles the case when a controller is already in a FAILED @@ -1330,11 +1330,11 @@ ASSERT_EQ(3, configurer_.configure_call_count()); // Not increased. EXPECT_EQ(DataTypeManager::CONFIGURED, dtm_->state()); - EXPECT_EQ(2U, configurer_.activated_types().Size()); + EXPECT_EQ(2U, configurer_.connected_types().Size()); dtm_->Stop(ShutdownReason::STOP_SYNC_AND_KEEP_DATA); EXPECT_EQ(DataTypeManager::STOPPED, dtm_->state()); - EXPECT_TRUE(configurer_.activated_types().Empty()); + EXPECT_TRUE(configurer_.connected_types().Empty()); } // Test that DataTypeManagerImpl delays configuration until all data types @@ -1361,12 +1361,12 @@ FinishDownload(ModelTypeSet(), ModelTypeSet()); // control types FinishDownload(ModelTypeSet(BOOKMARKS), ModelTypeSet()); EXPECT_EQ(DataTypeManager::CONFIGURED, dtm_->state()); - EXPECT_EQ(1U, configurer_.activated_types().Size()); + EXPECT_EQ(1U, configurer_.connected_types().Size()); } // Test that when encryption fails for a given type, the corresponding // data type is not activated. -TEST_F(SyncDataTypeManagerImplTest, ActivateDataTypeOnEncryptionError) { +TEST_F(SyncDataTypeManagerImplTest, ConnectDataTypeOnEncryptionError) { AddController(BOOKMARKS); AddController(PASSWORDS); GetController(BOOKMARKS)->model()->EnableManualModelStart(); @@ -1387,9 +1387,9 @@ EXPECT_EQ(1, GetController(PASSWORDS)->activate_call_count()); } -// Test that ActivateDataType is not called for datatypes that failed +// Test that Connect is not called for datatypes that failed // LoadModels(). -TEST_F(SyncDataTypeManagerImplTest, ActivateDataTypeAfterLoadModelsError) { +TEST_F(SyncDataTypeManagerImplTest, ConnectDataTypeAfterLoadModelsError) { // Initiate configuration for two datatypes but block them at LoadModels. AddController(BOOKMARKS); AddController(PASSWORDS); @@ -1407,7 +1407,7 @@ ModelError(FROM_HERE, "test error")); GetController(PASSWORDS)->model()->SimulateModelStartFinished(); - // ActivateDataType should be called for passwords, but not bookmarks. + // Connect should be called for passwords, but not bookmarks. EXPECT_EQ(0, GetController(BOOKMARKS)->activate_call_count()); EXPECT_EQ(1, GetController(PASSWORDS)->activate_call_count()); } @@ -1424,7 +1424,7 @@ dtm_->Stop(ShutdownReason::DISABLE_SYNC_AND_CLEAR_DATA); EXPECT_EQ(DataTypeManager::STOPPED, dtm_->state()); - EXPECT_TRUE(configurer_.activated_types().Empty()); + EXPECT_TRUE(configurer_.connected_types().Empty()); EXPECT_EQ(1, GetController(BOOKMARKS)->model()->clear_metadata_call_count()); } @@ -1442,12 +1442,12 @@ FinishDownload(ModelTypeSet(), ModelTypeSet()); // control types FinishDownload(ModelTypeSet(BOOKMARKS, AUTOFILL_WALLET_DATA), ModelTypeSet()); ASSERT_EQ(DataTypeManager::CONFIGURED, dtm_->state()); - ASSERT_EQ(2U, configurer_.activated_types().Size()); + ASSERT_EQ(2U, configurer_.connected_types().Size()); // The user temporarily turns off Sync. dtm_->Stop(ShutdownReason::STOP_SYNC_AND_KEEP_DATA); ASSERT_EQ(DataTypeManager::STOPPED, dtm_->state()); - ASSERT_TRUE(configurer_.activated_types().Empty()); + ASSERT_TRUE(configurer_.connected_types().Empty()); ASSERT_EQ(0, GetController(BOOKMARKS)->model()->clear_metadata_call_count()); // Now we restart with a reduced set of data types. @@ -1459,7 +1459,7 @@ FinishDownload(ModelTypeSet(), ModelTypeSet()); // control types FinishDownload(ModelTypeSet(AUTOFILL_WALLET_DATA), ModelTypeSet()); ASSERT_EQ(DataTypeManager::CONFIGURED, dtm_->state()); - ASSERT_EQ(1U, configurer_.activated_types().Size()); + ASSERT_EQ(1U, configurer_.connected_types().Size()); // This should have purged the data for the excluded type. EXPECT_TRUE(last_configure_params().to_purge.Has(BOOKMARKS)); @@ -1485,12 +1485,12 @@ FinishDownload(ModelTypeSet(), ModelTypeSet()); // control types FinishDownload(ModelTypeSet(BOOKMARKS, AUTOFILL_WALLET_DATA), ModelTypeSet()); ASSERT_EQ(DataTypeManager::CONFIGURED, dtm_->state()); - ASSERT_EQ(2U, configurer_.activated_types().Size()); + ASSERT_EQ(2U, configurer_.connected_types().Size()); // The user temporarily turns off Sync. dtm_->Stop(ShutdownReason::STOP_SYNC_AND_KEEP_DATA); ASSERT_EQ(DataTypeManager::STOPPED, dtm_->state()); - ASSERT_TRUE(configurer_.activated_types().Empty()); + ASSERT_TRUE(configurer_.connected_types().Empty()); ASSERT_EQ(0, GetController(BOOKMARKS)->model()->clear_metadata_call_count()); // Now we restart in ephemeral mode, with a reduced set of data types. @@ -1502,7 +1502,7 @@ FinishDownload(ModelTypeSet(), ModelTypeSet()); // control types FinishDownload(ModelTypeSet(AUTOFILL_WALLET_DATA), ModelTypeSet()); ASSERT_EQ(DataTypeManager::CONFIGURED, dtm_->state()); - ASSERT_EQ(1U, configurer_.activated_types().Size()); + ASSERT_EQ(1U, configurer_.connected_types().Size()); // This should *not* have purged the data for the excluded type. EXPECT_TRUE(last_configure_params().to_purge.Empty()); @@ -1525,7 +1525,7 @@ FinishDownload(ModelTypeSet(), ModelTypeSet()); // control types FinishDownload(ModelTypeSet(BOOKMARKS, AUTOFILL_WALLET_DATA), ModelTypeSet()); ASSERT_EQ(DataTypeManager::CONFIGURED, dtm_->state()); - ASSERT_EQ(2U, configurer_.activated_types().Size()); + ASSERT_EQ(2U, configurer_.connected_types().Size()); // Now we reconfigure with a reduced set of data types. SetConfigureStartExpectation(); @@ -1536,7 +1536,7 @@ FinishDownload(ModelTypeSet(), ModelTypeSet()); // control types FinishDownload(ModelTypeSet(AUTOFILL_WALLET_DATA), ModelTypeSet()); ASSERT_EQ(DataTypeManager::CONFIGURED, dtm_->state()); - ASSERT_EQ(1U, configurer_.activated_types().Size()); + ASSERT_EQ(1U, configurer_.connected_types().Size()); // This should have purged the data for the excluded type. EXPECT_TRUE(last_configure_params().to_purge.Has(BOOKMARKS)); @@ -1561,7 +1561,7 @@ FinishDownload(ModelTypeSet(), ModelTypeSet()); // control types FinishDownload(ModelTypeSet(BOOKMARKS, AUTOFILL_WALLET_DATA), ModelTypeSet()); ASSERT_EQ(DataTypeManager::CONFIGURED, dtm_->state()); - ASSERT_EQ(2U, configurer_.activated_types().Size()); + ASSERT_EQ(2U, configurer_.connected_types().Size()); // Now we reconfigure into ephemeral mode, with a reduced set of data types. SetConfigureStartExpectation(); @@ -1572,7 +1572,7 @@ FinishDownload(ModelTypeSet(), ModelTypeSet()); // control types FinishDownload(ModelTypeSet(AUTOFILL_WALLET_DATA), ModelTypeSet()); ASSERT_EQ(DataTypeManager::CONFIGURED, dtm_->state()); - ASSERT_EQ(1U, configurer_.activated_types().Size()); + ASSERT_EQ(1U, configurer_.connected_types().Size()); // This should *not* have cleared the data for the excluded type. EXPECT_TRUE(last_configure_params().to_purge.Empty());
diff --git a/components/sync/driver/fake_data_type_controller.cc b/components/sync/driver/fake_data_type_controller.cc index 24b14eb9..51df1d4 100644 --- a/components/sync/driver/fake_data_type_controller.cc +++ b/components/sync/driver/fake_data_type_controller.cc
@@ -39,10 +39,10 @@ return precondition_state_; } -DataTypeController::ActivateDataTypeResult -FakeDataTypeController::ActivateDataType(ModelTypeConfigurer* configurer) { +DataTypeController::ConnectResult FakeDataTypeController::Connect( + ModelTypeConfigurer* configurer) { ++activate_call_count_; - return ModelTypeController::ActivateDataType(configurer); + return ModelTypeController::Connect(configurer); } } // namespace syncer
diff --git a/components/sync/driver/fake_data_type_controller.h b/components/sync/driver/fake_data_type_controller.h index 3562597b..206a6b80 100644 --- a/components/sync/driver/fake_data_type_controller.h +++ b/components/sync/driver/fake_data_type_controller.h
@@ -29,8 +29,7 @@ // ModelTypeController overrides. PreconditionState GetPreconditionState() const override; - ActivateDataTypeResult ActivateDataType( - ModelTypeConfigurer* configurer) override; + ConnectResult Connect(ModelTypeConfigurer* configurer) override; private: PreconditionState precondition_state_ = PreconditionState::kPreconditionsMet;
diff --git a/components/sync/driver/glue/sync_engine_backend.cc b/components/sync/driver/glue/sync_engine_backend.cc index 8fbcbdd6..6ae99db 100644 --- a/components/sync/driver/glue/sync_engine_backend.cc +++ b/components/sync/driver/glue/sync_engine_backend.cc
@@ -406,7 +406,7 @@ DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); // Update the enabled types for the bridge and sync manager. - const ModelTypeSet enabled_types = sync_manager_->GetEnabledTypes(); + const ModelTypeSet enabled_types = sync_manager_->GetConnectedTypes(); DCHECK(Intersection(enabled_types, ProxyTypes()).Empty()); const ModelTypeSet failed_types =
diff --git a/components/sync/driver/glue/sync_engine_impl.cc b/components/sync/driver/glue/sync_engine_impl.cc index a7694a3f..48448e7 100644 --- a/components/sync/driver/glue/sync_engine_impl.cc +++ b/components/sync/driver/glue/sync_engine_impl.cc
@@ -344,14 +344,14 @@ std::move(params))); } -void SyncEngineImpl::ActivateDataType( +void SyncEngineImpl::ConnectDataType( ModelType type, std::unique_ptr<DataTypeActivationResponse> activation_response) { DCHECK(!IsProxyType(type)); model_type_connector_->ConnectDataType(type, std::move(activation_response)); } -void SyncEngineImpl::DeactivateDataType(ModelType type) { +void SyncEngineImpl::DisconnectDataType(ModelType type) { DCHECK(!IsProxyType(type)); model_type_connector_->DisconnectDataType(type); }
diff --git a/components/sync/driver/glue/sync_engine_impl.h b/components/sync/driver/glue/sync_engine_impl.h index 0b17cf5..0d9eab05 100644 --- a/components/sync/driver/glue/sync_engine_impl.h +++ b/components/sync/driver/glue/sync_engine_impl.h
@@ -82,9 +82,9 @@ void StopSyncingForShutdown() override; void Shutdown(ShutdownReason reason) override; void ConfigureDataTypes(ConfigureParams params) override; - void ActivateDataType(ModelType type, - std::unique_ptr<DataTypeActivationResponse>) override; - void DeactivateDataType(ModelType type) override; + void ConnectDataType(ModelType type, + std::unique_ptr<DataTypeActivationResponse>) override; + void DisconnectDataType(ModelType type) override; void SetProxyTabsDatatypeEnabled(bool enabled) override; const Status& GetDetailedStatus() const override; void HasUnsyncedItemsForTest(
diff --git a/components/sync/driver/glue/sync_engine_impl_unittest.cc b/components/sync/driver/glue/sync_engine_impl_unittest.cc index 54795f9..98c18b0 100644 --- a/components/sync/driver/glue/sync_engine_impl_unittest.cc +++ b/components/sync/driver/glue/sync_engine_impl_unittest.cc
@@ -246,7 +246,7 @@ if (expect_success) { EXPECT_TRUE(engine_types_.Empty()); - engine_types_ = fake_manager_->GetEnabledTypes(); + engine_types_ = fake_manager_->GetConnectedTypes(); } } @@ -583,8 +583,8 @@ TEST_F(SyncEngineImplTest, ModelTypeConnectorValidDuringShutdown) { InitializeBackend(); backend_->StopSyncingForShutdown(); - // Verify that call to DeactivateDataType doesn't assert. - backend_->DeactivateDataType(AUTOFILL); + // Verify that call to DisconnectDataType doesn't assert. + backend_->DisconnectDataType(AUTOFILL); backend_->Shutdown(ShutdownReason::STOP_SYNC_AND_KEEP_DATA); backend_.reset(); }
diff --git a/components/sync/driver/model_type_controller.cc b/components/sync/driver/model_type_controller.cc index 43a153f..e50545d 100644 --- a/components/sync/driver/model_type_controller.cc +++ b/components/sync/driver/model_type_controller.cc
@@ -122,8 +122,8 @@ base::AsWeakPtr(this))); } -DataTypeController::ActivateDataTypeResult -ModelTypeController::ActivateDataType(ModelTypeConfigurer* configurer) { +DataTypeController::ConnectResult ModelTypeController::Connect( + ModelTypeConfigurer* configurer) { DCHECK(CalledOnValidThread()); DCHECK(configurer); DCHECK(activation_response_); @@ -133,7 +133,7 @@ activation_response_->model_type_state.initial_sync_done(); // Pass activation context to ModelTypeRegistry, where ModelTypeWorker gets // created and connected with the delegate (processor). - configurer->ActivateDataType(type(), std::move(activation_response_)); + configurer->ConnectDataType(type(), std::move(activation_response_)); state_ = RUNNING; DVLOG(1) << "Sync running for " << ModelTypeToString(type()); @@ -141,11 +141,11 @@ return initial_sync_done ? TYPE_ALREADY_DOWNLOADED : TYPE_NOT_YET_DOWNLOADED; } -void ModelTypeController::DeactivateDataType(ModelTypeConfigurer* configurer) { +void ModelTypeController::Disconnect(ModelTypeConfigurer* configurer) { DCHECK(CalledOnValidThread()); DCHECK(configurer); if (state_ == RUNNING) { - configurer->DeactivateDataType(type()); + configurer->DisconnectDataType(type()); state_ = MODEL_LOADED; } } @@ -310,7 +310,7 @@ break; case MODEL_STARTING: DCHECK(model_stop_callbacks_.empty()); - // Hold on to the activation context until ActivateDataType is called. + // Hold on to the activation context until Connect is called. activation_response_ = std::move(activation_response); state_ = MODEL_LOADED; DVLOG(1) << "Sync start completed for " << ModelTypeToString(type());
diff --git a/components/sync/driver/model_type_controller.h b/components/sync/driver/model_type_controller.h index 33e4f9d..f5c8a6ed6 100644 --- a/components/sync/driver/model_type_controller.h +++ b/components/sync/driver/model_type_controller.h
@@ -40,16 +40,15 @@ // Steals the activation response, only used for Nigori. // TODO(crbug.com/967677): Once all datatypes are in USS, we should redesign - // or remove ActivateDataType, and expose the activation response via + // or remove Connect, and expose the activation response via // LoadModels(), which is more natural in USS. std::unique_ptr<DataTypeActivationResponse> ActivateManuallyForNigori(); // DataTypeController implementation. void LoadModels(const ConfigureContext& configure_context, const ModelLoadCallback& model_load_callback) override; - ActivateDataTypeResult ActivateDataType( - ModelTypeConfigurer* configurer) override; - void DeactivateDataType(ModelTypeConfigurer* configurer) override; + ConnectResult Connect(ModelTypeConfigurer* configurer) override; + void Disconnect(ModelTypeConfigurer* configurer) override; void Stop(ShutdownReason reason, StopCallback callback) override; State state() const override; bool ShouldRunInTransportOnlyMode() const override; @@ -104,7 +103,7 @@ // Controller receives |activation_response_| from // ClientTagBasedModelTypeProcessor callback and must temporarily own it until - // ActivateDataType is called. + // Connect is called. std::unique_ptr<DataTypeActivationResponse> activation_response_; DISALLOW_COPY_AND_ASSIGN(ModelTypeController);
diff --git a/components/sync/driver/model_type_controller_unittest.cc b/components/sync/driver/model_type_controller_unittest.cc index c80c2b3..745da74 100644 --- a/components/sync/driver/model_type_controller_unittest.cc +++ b/components/sync/driver/model_type_controller_unittest.cc
@@ -100,16 +100,16 @@ NOTREACHED() << "Not implemented."; } - void ActivateDataType(ModelType type, - std::unique_ptr<DataTypeActivationResponse> - activation_response) override { + void ConnectDataType(ModelType type, + std::unique_ptr<DataTypeActivationResponse> + activation_response) override { DCHECK_EQ(kTestModelType, type); DCHECK(!processor_); processor_ = std::move(activation_response->type_processor); processor_->ConnectSync(nullptr); } - void DeactivateDataType(ModelType type) override { + void DisconnectDataType(ModelType type) override { DCHECK_EQ(kTestModelType, type); DCHECK(processor_); processor_->DisconnectSync(); @@ -186,11 +186,11 @@ return true; } - void ActivateDataType(bool expect_downloaded) { + void Connect(bool expect_downloaded) { auto result = expect_downloaded ? DataTypeController::TYPE_ALREADY_DOWNLOADED : DataTypeController::TYPE_NOT_YET_DOWNLOADED; - EXPECT_EQ(result, controller_.ActivateDataType(&configurer_)); + EXPECT_EQ(result, controller_.Connect(&configurer_)); // ModelTypeProcessorProxy does posting of tasks. base::RunLoop().RunUntilIdle(); } @@ -203,8 +203,8 @@ loop.Run(); } - void DeactivateDataTypeAndStop(ShutdownReason shutdown_reason) { - controller_.DeactivateDataType(&configurer_); + void DisconnectAndStop(ShutdownReason shutdown_reason) { + controller_.Disconnect(&configurer_); StopAndWait(shutdown_reason); } @@ -249,7 +249,7 @@ base::HistogramTester histogram_tester; ASSERT_TRUE(LoadModels()); EXPECT_EQ(DataTypeController::MODEL_LOADED, controller()->state()); - ActivateDataType(/*expect_downloaded=*/false); + Connect(/*expect_downloaded=*/false); EXPECT_TRUE(processor()->is_connected()); EXPECT_EQ(DataTypeController::RUNNING, controller()->state()); histogram_tester.ExpectTotalCount(kStartFailuresHistogram, 0); @@ -259,7 +259,7 @@ base::HistogramTester histogram_tester; ASSERT_TRUE(LoadModels(/*initial_sync_done=*/true)); EXPECT_EQ(DataTypeController::MODEL_LOADED, controller()->state()); - ActivateDataType(/*expect_downloaded=*/true); + Connect(/*expect_downloaded=*/true); EXPECT_TRUE(processor()->is_connected()); histogram_tester.ExpectTotalCount(kStartFailuresHistogram, 0); } @@ -293,9 +293,9 @@ TEST_F(ModelTypeControllerTest, Stop) { ASSERT_TRUE(LoadModels()); - ActivateDataType(/*expect_downloaded=*/false); + Connect(/*expect_downloaded=*/false); EXPECT_TRUE(processor()->is_connected()); - DeactivateDataTypeAndStop(ShutdownReason::STOP_SYNC_AND_KEEP_DATA); + DisconnectAndStop(ShutdownReason::STOP_SYNC_AND_KEEP_DATA); EXPECT_EQ(DataTypeController::NOT_RUNNING, controller()->state()); } @@ -305,7 +305,7 @@ // Ensures that metadata was not cleared. EXPECT_CALL(*delegate(), OnSyncStopping(KEEP_METADATA)); - DeactivateDataTypeAndStop(ShutdownReason::STOP_SYNC_AND_KEEP_DATA); + DisconnectAndStop(ShutdownReason::STOP_SYNC_AND_KEEP_DATA); EXPECT_EQ(DataTypeController::NOT_RUNNING, controller()->state()); EXPECT_FALSE(processor()->is_connected()); } @@ -316,7 +316,7 @@ ASSERT_TRUE(LoadModels()); EXPECT_CALL(*delegate(), OnSyncStopping(CLEAR_METADATA)); - DeactivateDataTypeAndStop(ShutdownReason::DISABLE_SYNC_AND_CLEAR_DATA); + DisconnectAndStop(ShutdownReason::DISABLE_SYNC_AND_CLEAR_DATA); EXPECT_EQ(DataTypeController::NOT_RUNNING, controller()->state()); EXPECT_FALSE(processor()->is_connected()); } @@ -667,7 +667,7 @@ std::move(start_callback).Run(std::move(activation_response)); ASSERT_EQ(DataTypeController::MODEL_LOADED, controller()->state()); - ActivateDataType(/*expect_downloaded=*/false); + Connect(/*expect_downloaded=*/false); ASSERT_EQ(DataTypeController::RUNNING, controller()->state()); // Now trigger the run-time error.
diff --git a/components/sync/driver/sync_service_impl.cc b/components/sync/driver/sync_service_impl.cc index 126f2e7..2a8414c 100644 --- a/components/sync/driver/sync_service_impl.cc +++ b/components/sync/driver/sync_service_impl.cc
@@ -48,10 +48,6 @@ #include "components/sync/model/type_entities_count.h" #include "services/network/public/cpp/shared_url_loader_factory.h" -#if BUILDFLAG(IS_CHROMEOS_ASH) -#include "ash/constants/ash_features.h" -#endif // BUILDFLAG(IS_CHROMEOS_ASH) - namespace syncer { namespace { @@ -262,24 +258,6 @@ #endif // defined(OS_ANDROID) } -#if BUILDFLAG(IS_CHROMEOS_ASH) - // For Chrome OS, sync auto-starts and `IsFirstSetupComplete` is marked as - // true automatically in the first run. Below code is needed to disable sync - // for minor mode users (e.g. under age of 18) when consent flow is abandoned - // (due to crash or system shutdown) as sync should not auto-starts for minor - // users. At the time when below is called, we are not sure whether user is in - // minor mode. Thus we turn off data types for all users, and turn back on - // when we are certain the user is not in minor mode in `SyncConsentScreen` - // during OOBE. Below code could be removed after launch of - // `SplitSettingsSync`, when sync won't be started automatically. - if (chromeos::features::IsMinorModeRestrictionEnabled() && - !chromeos::features::IsSplitSettingsSyncEnabled() && - !user_settings_->IsFirstSetupComplete()) { - UserSelectableTypeSet empty_set; - user_settings_->SetSelectedTypes(/*sync_everything=*/false, empty_set); - } -#endif - // Auto-start means the first time the profile starts up, sync should start up // immediately. Since IsSyncRequested() is false by default and nobody else // will set it, we need to set it here.
diff --git a/components/sync/driver/sync_service_impl_unittest.cc b/components/sync/driver/sync_service_impl_unittest.cc index 932038b..b70c997 100644 --- a/components/sync/driver/sync_service_impl_unittest.cc +++ b/components/sync/driver/sync_service_impl_unittest.cc
@@ -48,10 +48,6 @@ #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" -#if BUILDFLAG(IS_CHROMEOS_ASH) -#include "ash/constants/ash_features.h" -#endif // BUILDFLAG(IS_CHROMEOS_ASH) - using testing::_; using testing::AnyNumber; using testing::ByMove; @@ -1122,31 +1118,6 @@ EXPECT_FALSE(service()->GetDisableReasons().Empty()); } -#if BUILDFLAG(IS_CHROMEOS_ASH) -TEST_F(SyncServiceImplTest, ShouldDisableAllDataTypesForMinorsOnFirstSync) { - base::test::ScopedFeatureList feature_list; - feature_list.InitAndEnableFeature(ash::features::kMinorModeRestriction); - SignIn(); - - // All data types should be disabled for first sync. - CreateService(SyncServiceImpl::AUTO_START); - InitializeForFirstSync(); - EXPECT_FALSE(service()->GetUserSettings()->IsSyncEverythingEnabled()); - EXPECT_TRUE(service()->GetUserSettings()->GetSelectedTypes().Empty()); -} - -TEST_F(SyncServiceImplTest, ShouldNotDisableDataTypesForMinorsOnNthSync) { - base::test::ScopedFeatureList feature_list; - feature_list.InitAndEnableFeature(ash::features::kMinorModeRestriction); - SignIn(); - - // Data types should not be disabled for Nth sync. - CreateService(SyncServiceImpl::AUTO_START); - InitializeForNthSync(); - EXPECT_TRUE(service()->GetUserSettings()->IsSyncEverythingEnabled()); -} -#endif - #if defined(OS_ANDROID) TEST_F(SyncServiceImplTest, DecoupleFromMasterSyncIfInitializedSignedOut) { base::test::ScopedFeatureList feature_list;
diff --git a/components/sync/engine/cycle/sync_cycle_context.cc b/components/sync/engine/cycle/sync_cycle_context.cc index 01e38ff2..4b1a3eab 100644 --- a/components/sync/engine/cycle/sync_cycle_context.cc +++ b/components/sync/engine/cycle/sync_cycle_context.cc
@@ -41,8 +41,8 @@ SyncCycleContext::~SyncCycleContext() = default; -ModelTypeSet SyncCycleContext::GetEnabledTypes() const { - return model_type_registry_->GetEnabledTypes(); +ModelTypeSet SyncCycleContext::GetConnectedTypes() const { + return model_type_registry_->GetConnectedTypes(); } bool SyncCycleContext::proxy_tabs_datatype_enabled() const {
diff --git a/components/sync/engine/cycle/sync_cycle_context.h b/components/sync/engine/cycle/sync_cycle_context.h index 744fefce..3aeaef8 100644 --- a/components/sync/engine/cycle/sync_cycle_context.h +++ b/components/sync/engine/cycle/sync_cycle_context.h
@@ -54,7 +54,7 @@ ServerConnectionManager* connection_manager() { return connection_manager_; } - ModelTypeSet GetEnabledTypes() const; + ModelTypeSet GetConnectedTypes() const; bool proxy_tabs_datatype_enabled() const;
diff --git a/components/sync/engine/model_type_configurer.h b/components/sync/engine/model_type_configurer.h index f362ec4..25f9e43 100644 --- a/components/sync/engine/model_type_configurer.h +++ b/components/sync/engine/model_type_configurer.h
@@ -47,14 +47,17 @@ // Changes the set of data types that are currently being synced. virtual void ConfigureDataTypes(ConfigureParams params) = 0; - // Activates change processing for the given data type. - // This must be called before initial sync for data type. - virtual void ActivateDataType( + // Connects the datatype |type|, which means the sync engine will propagate + // changes between the server and datatype's processor, as provided in + // |activation_response|. This must be called before requesting the initial + // download of a datatype via ConfigureDataTypes(). + virtual void ConnectDataType( ModelType type, std::unique_ptr<DataTypeActivationResponse> activation_response) = 0; - // Deactivates change processing for the given data type. - virtual void DeactivateDataType(ModelType type) = 0; + // Opposite of the above: stops treating |type| as a datatype that is + // propagating changes between the server and the processor. + virtual void DisconnectDataType(ModelType type) = 0; // Propagates whether PROXY_TABS is enabled, which influences a bit exposed to // the server during commits.
diff --git a/components/sync/engine/model_type_registry.cc b/components/sync/engine/model_type_registry.cc index b56ea4a6..04f87d4c 100644 --- a/components/sync/engine/model_type_registry.cc +++ b/components/sync/engine/model_type_registry.cc
@@ -85,12 +85,12 @@ proxy_tabs_datatype_enabled_ = enabled; } -ModelTypeSet ModelTypeRegistry::GetEnabledTypes() const { - ModelTypeSet enabled_types; +ModelTypeSet ModelTypeRegistry::GetConnectedTypes() const { + ModelTypeSet types; for (const auto& worker : connected_model_type_workers_) { - enabled_types.Put(worker->GetModelType()); + types.Put(worker->GetModelType()); } - return enabled_types; + return types; } bool ModelTypeRegistry::proxy_tabs_datatype_enabled() const {
diff --git a/components/sync/engine/model_type_registry.h b/components/sync/engine/model_type_registry.h index be5556586..754ed88 100644 --- a/components/sync/engine/model_type_registry.h +++ b/components/sync/engine/model_type_registry.h
@@ -64,8 +64,10 @@ void OnPassphraseTypeChanged(PassphraseType type, base::Time passphrase_time) override; - // Gets the set of enabled types. - ModelTypeSet GetEnabledTypes() const; + // Gets the set of connected types, which is essentially the set of types that + // the sync engine cares about. For each of these, a worker exists to + // propagate changes between the server and the local model's processor. + ModelTypeSet GetConnectedTypes() const; bool proxy_tabs_datatype_enabled() const;
diff --git a/components/sync/engine/model_type_registry_unittest.cc b/components/sync/engine/model_type_registry_unittest.cc index e50d074..8fa34ab 100644 --- a/components/sync/engine/model_type_registry_unittest.cc +++ b/components/sync/engine/model_type_registry_unittest.cc
@@ -59,19 +59,19 @@ }; TEST_F(ModelTypeRegistryTest, ConnectDataTypes) { - EXPECT_TRUE(registry()->GetEnabledTypes().Empty()); + EXPECT_TRUE(registry()->GetConnectedTypes().Empty()); registry()->ConnectDataType(THEMES, MakeDataTypeActivationResponse( MakeInitialModelTypeState(THEMES))); - EXPECT_EQ(ModelTypeSet(THEMES), registry()->GetEnabledTypes()); + EXPECT_EQ(ModelTypeSet(THEMES), registry()->GetConnectedTypes()); registry()->ConnectDataType( SESSIONS, MakeDataTypeActivationResponse(MakeInitialModelTypeState(SESSIONS))); - EXPECT_EQ(ModelTypeSet(THEMES, SESSIONS), registry()->GetEnabledTypes()); + EXPECT_EQ(ModelTypeSet(THEMES, SESSIONS), registry()->GetConnectedTypes()); registry()->DisconnectDataType(THEMES); - EXPECT_EQ(ModelTypeSet(SESSIONS), registry()->GetEnabledTypes()); + EXPECT_EQ(ModelTypeSet(SESSIONS), registry()->GetConnectedTypes()); // Allow ModelTypeRegistry destruction to delete the // Sessions' ModelTypeSyncWorker.
diff --git a/components/sync/engine/sync_manager.h b/components/sync/engine/sync_manager.h index 98f4bbeb..c6eadeb 100644 --- a/components/sync/engine/sync_manager.h +++ b/components/sync/engine/sync_manager.h
@@ -133,7 +133,7 @@ virtual ModelTypeSet InitialSyncEndedTypes() = 0; - virtual ModelTypeSet GetEnabledTypes() = 0; + virtual ModelTypeSet GetConnectedTypes() = 0; // Update tokens that we're using in Sync. Email must stay the same. virtual void UpdateCredentials(const SyncCredentials& credentials) = 0;
diff --git a/components/sync/engine/sync_manager_impl.cc b/components/sync/engine/sync_manager_impl.cc index 2483839..91981ad 100644 --- a/components/sync/engine/sync_manager_impl.cc +++ b/components/sync/engine/sync_manager_impl.cc
@@ -98,9 +98,9 @@ return model_type_registry_->GetInitialSyncEndedTypes(); } -ModelTypeSet SyncManagerImpl::GetEnabledTypes() { +ModelTypeSet SyncManagerImpl::GetConnectedTypes() { DCHECK(initialized_); - return model_type_registry_->GetEnabledTypes(); + return model_type_registry_->GetConnectedTypes(); } void SyncManagerImpl::ConfigureSyncer(ConfigureReason reason, @@ -444,7 +444,7 @@ DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); const ModelTypeSet types_to_refresh = - Intersection(types, model_type_registry_->GetEnabledTypes()); + Intersection(types, model_type_registry_->GetConnectedTypes()); if (!types.Empty()) { scheduler_->ScheduleLocalRefreshRequest(types_to_refresh);
diff --git a/components/sync/engine/sync_manager_impl.h b/components/sync/engine/sync_manager_impl.h index 60bb38e..a9e012e5 100644 --- a/components/sync/engine/sync_manager_impl.h +++ b/components/sync/engine/sync_manager_impl.h
@@ -53,7 +53,7 @@ // SyncManager implementation. void Init(InitArgs* args) override; ModelTypeSet InitialSyncEndedTypes() override; - ModelTypeSet GetEnabledTypes() override; + ModelTypeSet GetConnectedTypes() override; void UpdateCredentials(const SyncCredentials& credentials) override; void InvalidateCredentials() override; void StartSyncingNormally(base::Time last_poll_time) override;
diff --git a/components/sync/engine/sync_scheduler_impl.cc b/components/sync/engine/sync_scheduler_impl.cc index 88bc640d..c998baa6 100644 --- a/components/sync/engine/sync_scheduler_impl.cc +++ b/components/sync/engine/sync_scheduler_impl.cc
@@ -221,7 +221,7 @@ } ModelTypeSet SyncSchedulerImpl::GetEnabledAndUnblockedTypes() { - ModelTypeSet enabled_types = cycle_context_->GetEnabledTypes(); + ModelTypeSet enabled_types = cycle_context_->GetConnectedTypes(); ModelTypeSet enabled_protocol_types = Intersection(ProtocolTypes(), enabled_types); ModelTypeSet blocked_types = nudge_tracker_.GetBlockedTypes(); @@ -294,7 +294,7 @@ return false; } - const ModelTypeSet enabled_types = cycle_context_->GetEnabledTypes(); + const ModelTypeSet enabled_types = cycle_context_->GetConnectedTypes(); if (nudge_tracker_.GetBlockedTypes().HasAll(enabled_types)) { SDVLOG(1) << "Not running a nudge because we're fully type throttled or " "backed off.";
diff --git a/components/sync/engine/sync_scheduler_impl_unittest.cc b/components/sync/engine/sync_scheduler_impl_unittest.cc index 2104200a..2b61893 100644 --- a/components/sync/engine/sync_scheduler_impl_unittest.cc +++ b/components/sync/engine/sync_scheduler_impl_unittest.cc
@@ -532,7 +532,7 @@ // The user enables a custom passphrase at this point, so // HISTORY_DELETE_DIRECTIVES gets disabled. DisconnectDataType(HISTORY_DELETE_DIRECTIVES); - ASSERT_FALSE(context()->GetEnabledTypes().Has(HISTORY_DELETE_DIRECTIVES)); + ASSERT_FALSE(context()->GetConnectedTypes().Has(HISTORY_DELETE_DIRECTIVES)); // There should be no sync cycle. EXPECT_CALL(*syncer(), NormalSyncShare).Times(0);
diff --git a/components/sync/engine/syncer.cc b/components/sync/engine/syncer.cc index b5d7d31..e4177b24 100644 --- a/components/sync/engine/syncer.cc +++ b/components/sync/engine/syncer.cc
@@ -73,7 +73,7 @@ // it happens we should adjust set of types to download to only include // registered types. ModelTypeSet still_enabled_types = - Intersection(request_types, cycle->context()->GetEnabledTypes()); + Intersection(request_types, cycle->context()->GetConnectedTypes()); VLOG(1) << "Configuring types " << ModelTypeSetToString(still_enabled_types); HandleCycleBegin(cycle); DownloadAndApplyUpdates(&still_enabled_types, cycle, @@ -146,7 +146,7 @@ // However, it doesn't hurt to check it anyway. while (!ExitRequested()) { std::unique_ptr<Commit> commit(Commit::Init( - cycle->context()->GetEnabledTypes(), + cycle->context()->GetConnectedTypes(), cycle->context()->proxy_tabs_datatype_enabled(), cycle->context()->max_commit_batch_size(), cycle->context()->account_name(), cycle->context()->cache_guid(),
diff --git a/components/sync/engine/syncer_unittest.cc b/components/sync/engine/syncer_unittest.cc index 9c78fc1..2caa234 100644 --- a/components/sync/engine/syncer_unittest.cc +++ b/components/sync/engine/syncer_unittest.cc
@@ -141,12 +141,12 @@ // Pretend we've seen a local change, to make the nudge_tracker look normal. nudge_tracker_.RecordLocalChange(BOOKMARKS); - return syncer_->NormalSyncShare(context_->GetEnabledTypes(), + return syncer_->NormalSyncShare(context_->GetConnectedTypes(), &nudge_tracker_, cycle_.get()); } bool SyncShareConfigure() { - return SyncShareConfigureTypes(context_->GetEnabledTypes()); + return SyncShareConfigureTypes(context_->GetConnectedTypes()); } bool SyncShareConfigureTypes(ModelTypeSet types) { @@ -277,17 +277,17 @@ // Sync without enabling bookmarks. mock_server_->ExpectGetUpdatesRequestTypes( - Difference(context_->GetEnabledTypes(), throttled_types)); + Difference(context_->GetConnectedTypes(), throttled_types)); ResetCycle(); syncer_->NormalSyncShare( - Difference(context_->GetEnabledTypes(), throttled_types), &nudge_tracker_, - cycle_.get()); + Difference(context_->GetConnectedTypes(), throttled_types), + &nudge_tracker_, cycle_.get()); // Nothing should have been committed as bookmarks is throttled. EXPECT_EQ(0, GetProcessor(BOOKMARKS)->GetLocalChangesCallCount()); // Sync again with bookmarks enabled. - mock_server_->ExpectGetUpdatesRequestTypes(context_->GetEnabledTypes()); + mock_server_->ExpectGetUpdatesRequestTypes(context_->GetConnectedTypes()); EXPECT_TRUE(SyncShareNudge()); EXPECT_EQ(1, GetProcessor(BOOKMARKS)->GetLocalChangesCallCount()); }
diff --git a/components/sync/test/engine/fake_sync_engine.cc b/components/sync/test/engine/fake_sync_engine.cc index caf1bbee..358f1f8 100644 --- a/components/sync/test/engine/fake_sync_engine.cc +++ b/components/sync/test/engine/fake_sync_engine.cc
@@ -98,11 +98,11 @@ /*failed_configuration_types=*/ModelTypeSet()); } -void FakeSyncEngine::ActivateDataType( +void FakeSyncEngine::ConnectDataType( ModelType type, std::unique_ptr<DataTypeActivationResponse> activation_response) {} -void FakeSyncEngine::DeactivateDataType(ModelType type) {} +void FakeSyncEngine::DisconnectDataType(ModelType type) {} void FakeSyncEngine::SetProxyTabsDatatypeEnabled(bool enabled) {}
diff --git a/components/sync/test/engine/fake_sync_engine.h b/components/sync/test/engine/fake_sync_engine.h index 563f038c..1763335 100644 --- a/components/sync/test/engine/fake_sync_engine.h +++ b/components/sync/test/engine/fake_sync_engine.h
@@ -80,9 +80,9 @@ void ConfigureDataTypes(ConfigureParams params) override; - void ActivateDataType(ModelType type, - std::unique_ptr<DataTypeActivationResponse>) override; - void DeactivateDataType(ModelType type) override; + void ConnectDataType(ModelType type, + std::unique_ptr<DataTypeActivationResponse>) override; + void DisconnectDataType(ModelType type) override; void SetProxyTabsDatatypeEnabled(bool enabled) override;
diff --git a/components/sync/test/engine/fake_sync_manager.cc b/components/sync/test/engine/fake_sync_manager.cc index 0696e56..a932da96 100644 --- a/components/sync/test/engine/fake_sync_manager.cc +++ b/components/sync/test/engine/fake_sync_manager.cc
@@ -75,7 +75,7 @@ return initial_sync_ended_types_; } -ModelTypeSet FakeSyncManager::GetEnabledTypes() { +ModelTypeSet FakeSyncManager::GetConnectedTypes() { return progress_marker_types_; }
diff --git a/components/sync/test/engine/fake_sync_manager.h b/components/sync/test/engine/fake_sync_manager.h index 56f4decb..e582a67 100644 --- a/components/sync/test/engine/fake_sync_manager.h +++ b/components/sync/test/engine/fake_sync_manager.h
@@ -68,7 +68,7 @@ // loop for purposes of callbacks. void Init(InitArgs* args) override; ModelTypeSet InitialSyncEndedTypes() override; - ModelTypeSet GetEnabledTypes() override; + ModelTypeSet GetConnectedTypes() override; void UpdateCredentials(const SyncCredentials& credentials) override; void InvalidateCredentials() override; void StartSyncingNormally(base::Time last_poll_time) override;
diff --git a/components/sync/test/engine/mock_sync_engine.h b/components/sync/test/engine/mock_sync_engine.h index 8ddea1c9..fbefa8b 100644 --- a/components/sync/test/engine/mock_sync_engine.h +++ b/components/sync/test/engine/mock_sync_engine.h
@@ -28,10 +28,10 @@ // ModelTypeConfigurer: MOCK_METHOD(void, ConfigureDataTypes, (ConfigureParams), (override)); MOCK_METHOD(void, - ActivateDataType, + ConnectDataType, (ModelType, std::unique_ptr<DataTypeActivationResponse>), (override)); - MOCK_METHOD(void, DeactivateDataType, (ModelType), (override)); + MOCK_METHOD(void, DisconnectDataType, (ModelType), (override)); MOCK_METHOD(void, SetProxyTabsDatatypeEnabled, (bool), (override)); // SyncEngine:
diff --git a/components/sync_sessions/proxy_tabs_data_type_controller.cc b/components/sync_sessions/proxy_tabs_data_type_controller.cc index 2e99162..2a8a8a25 100644 --- a/components/sync_sessions/proxy_tabs_data_type_controller.cc +++ b/components/sync_sessions/proxy_tabs_data_type_controller.cc
@@ -32,8 +32,7 @@ model_load_callback.Run(type(), syncer::SyncError()); } -syncer::DataTypeController::ActivateDataTypeResult -ProxyTabsDataTypeController::ActivateDataType( +syncer::DataTypeController::ConnectResult ProxyTabsDataTypeController::Connect( syncer::ModelTypeConfigurer* configurer) { DCHECK(configurer); DCHECK_EQ(MODEL_LOADED, state_); @@ -66,7 +65,7 @@ return false; } -void ProxyTabsDataTypeController::DeactivateDataType( +void ProxyTabsDataTypeController::Disconnect( syncer::ModelTypeConfigurer* configurer) { if (state_ == RUNNING) { configurer->SetProxyTabsDatatypeEnabled(false);
diff --git a/components/sync_sessions/proxy_tabs_data_type_controller.h b/components/sync_sessions/proxy_tabs_data_type_controller.h index 5af823f..1f89115d2 100644 --- a/components/sync_sessions/proxy_tabs_data_type_controller.h +++ b/components/sync_sessions/proxy_tabs_data_type_controller.h
@@ -23,13 +23,12 @@ // DataTypeController interface. void LoadModels(const syncer::ConfigureContext& configure_context, const ModelLoadCallback& model_load_callback) override; - ActivateDataTypeResult ActivateDataType( - syncer::ModelTypeConfigurer* configurer) override; + ConnectResult Connect(syncer::ModelTypeConfigurer* configurer) override; void Stop(syncer::ShutdownReason shutdown_reason, StopCallback callback) override; State state() const override; bool ShouldRunInTransportOnlyMode() const override; - void DeactivateDataType(syncer::ModelTypeConfigurer* configurer) override; + void Disconnect(syncer::ModelTypeConfigurer* configurer) override; void GetAllNodes(AllNodesCallback callback) override; void GetTypeEntitiesCount( base::OnceCallback<void(const syncer::TypeEntitiesCount&)> callback)
diff --git a/components/ukm/ukm_service.h b/components/ukm/ukm_service.h index c34ca81..0d9d2eb 100644 --- a/components/ukm/ukm_service.h +++ b/components/ukm/ukm_service.h
@@ -7,7 +7,6 @@ #include <stddef.h> #include <memory> -#include <vector> #include "base/feature_list.h" #include "base/gtest_prod_util.h"
diff --git a/components/variations/android/variations_seed_bridge.cc b/components/variations/android/variations_seed_bridge.cc index 21e85a7..202add6 100644 --- a/components/variations/android/variations_seed_bridge.cc +++ b/components/variations/android/variations_seed_bridge.cc
@@ -6,7 +6,6 @@ #include <jni.h> #include <stdint.h> -#include <vector> #include "base/android/jni_android.h" #include "base/android/jni_array.h"
diff --git a/components/variations/entropy_provider.cc b/components/variations/entropy_provider.cc index ba1285f..36381abd 100644 --- a/components/variations/entropy_provider.cc +++ b/components/variations/entropy_provider.cc
@@ -6,7 +6,6 @@ #include <algorithm> #include <limits> -#include <vector> #include "base/check_op.h" #include "base/hash/sha1.h"
diff --git a/components/variations/entropy_provider.h b/components/variations/entropy_provider.h index 8cd0109..ff719cd 100644 --- a/components/variations/entropy_provider.h +++ b/components/variations/entropy_provider.h
@@ -11,7 +11,6 @@ #include <functional> #include <random> #include <string> -#include <vector> #include "base/compiler_specific.h" #include "base/component_export.h"
diff --git a/components/variations/net/omnibox_http_headers.h b/components/variations/net/omnibox_http_headers.h index ce051fa..992334e 100644 --- a/components/variations/net/omnibox_http_headers.h +++ b/components/variations/net/omnibox_http_headers.h
@@ -7,7 +7,6 @@ #include <memory> #include <string> -#include <vector> #include "base/component_export.h" #include "base/feature_list.h"
diff --git a/components/variations/variations_associated_data.h b/components/variations/variations_associated_data.h index 21da1ca..cfb892b1 100644 --- a/components/variations/variations_associated_data.h +++ b/components/variations/variations_associated_data.h
@@ -8,7 +8,6 @@ #include <map> #include <memory> #include <string> -#include <vector> #include "base/metrics/field_trial.h" #include "components/variations/active_field_trials.h"
diff --git a/components/variations/variations_seed_processor.h b/components/variations/variations_seed_processor.h index 763ac56..4d79d600 100644 --- a/components/variations/variations_seed_processor.h +++ b/components/variations/variations_seed_processor.h
@@ -8,7 +8,6 @@ #include <stdint.h> #include <string> -#include <vector> #include "base/callback_forward.h" #include "base/compiler_specific.h"
diff --git a/components/variations/variations_seed_processor_unittest.cc b/components/variations/variations_seed_processor_unittest.cc index 3312e95..5c1326a 100644 --- a/components/variations/variations_seed_processor_unittest.cc +++ b/components/variations/variations_seed_processor_unittest.cc
@@ -10,7 +10,6 @@ #include <map> #include <memory> #include <utility> -#include <vector> #include "base/bind.h" #include "base/callback_helpers.h"
diff --git a/components/viz/common/frame_sinks/begin_frame_args.cc b/components/viz/common/frame_sinks/begin_frame_args.cc index 8eaf5b4..00f0119 100644 --- a/components/viz/common/frame_sinks/begin_frame_args.cc +++ b/components/viz/common/frame_sinks/begin_frame_args.cc
@@ -6,6 +6,7 @@ #include <utility> +#include "base/trace_event/interned_args_helper.h" #include "base/trace_event/traced_value.h" #include "third_party/perfetto/protos/perfetto/trace/track_event/chrome_compositor_scheduler_state.pbzero.h" #include "third_party/perfetto/protos/perfetto/trace/track_event/source_location.pbzero.h" @@ -152,6 +153,7 @@ } void BeginFrameArgs::AsProtozeroInto( + perfetto::EventContext& ctx, perfetto::protos::pbzero::BeginFrameArgs* state) const { state->set_type(TypeToProtozeroEnum(type)); state->set_source_id(frame_id.source_id); @@ -165,16 +167,8 @@ state->set_on_critical_path(on_critical_path); state->set_animate_only(animate_only); #ifndef NDEBUG - auto* src_loc = state->set_source_location(); - if (created_from.file_name()) { - src_loc->set_file_name(created_from.file_name()); - } - if (created_from.function_name()) { - src_loc->set_function_name(created_from.function_name()); - } - if (created_from.line_number() != -1) { - src_loc->set_line_number(created_from.line_number()); - } + state->set_source_location_iid(base::trace_event::InternedSourceLocation::Get( + &ctx, base::trace_event::TraceSourceLocation(created_from))); #endif }
diff --git a/components/viz/common/frame_sinks/begin_frame_args.h b/components/viz/common/frame_sinks/begin_frame_args.h index 61481ff..eb1c3f9 100644 --- a/components/viz/common/frame_sinks/begin_frame_args.h +++ b/components/viz/common/frame_sinks/begin_frame_args.h
@@ -16,6 +16,7 @@ #include "components/viz/common/viz_common_export.h" namespace perfetto { +class EventContext; namespace protos { namespace pbzero { class BeginFrameArgs; @@ -149,7 +150,8 @@ // these base::trace_event json dictionary functions. std::unique_ptr<base::trace_event::ConvertableToTraceFormat> AsValue() const; void AsValueInto(base::trace_event::TracedValue* dict) const; - void AsProtozeroInto(perfetto::protos::pbzero::BeginFrameArgs* args) const; + void AsProtozeroInto(perfetto::EventContext& ctx, + perfetto::protos::pbzero::BeginFrameArgs* args) const; std::string ToString() const;
diff --git a/components/viz/common/frame_sinks/begin_frame_source.cc b/components/viz/common/frame_sinks/begin_frame_source.cc index f2f2b5e5..fc7b7f11 100644 --- a/components/viz/common/frame_sinks/begin_frame_source.cc +++ b/components/viz/common/frame_sinks/begin_frame_source.cc
@@ -97,10 +97,12 @@ } void BeginFrameObserverBase::AsProtozeroInto( + perfetto::EventContext& ctx, perfetto::protos::pbzero::BeginFrameObserverState* state) const { state->set_dropped_begin_frame_args(dropped_begin_frame_args_); - last_begin_frame_args_.AsProtozeroInto(state->set_last_begin_frame_args()); + last_begin_frame_args_.AsProtozeroInto(ctx, + state->set_last_begin_frame_args()); } BeginFrameArgs @@ -186,6 +188,7 @@ } void BeginFrameSource::AsProtozeroInto( + perfetto::EventContext&, perfetto::protos::pbzero::BeginFrameSourceState* state) const { // The lower 32 bits of source_id are the interesting piece of |source_id_|. state->set_source_id(static_cast<uint32_t>(source_id_)); @@ -375,12 +378,14 @@ } void ExternalBeginFrameSource::AsProtozeroInto( + perfetto::EventContext& ctx, perfetto::protos::pbzero::BeginFrameSourceState* state) const { - BeginFrameSource::AsProtozeroInto(state); + BeginFrameSource::AsProtozeroInto(ctx, state); state->set_paused(paused_); state->set_num_observers(observers_.size()); - last_begin_frame_args_.AsProtozeroInto(state->set_last_begin_frame_args()); + last_begin_frame_args_.AsProtozeroInto(ctx, + state->set_last_begin_frame_args()); } void ExternalBeginFrameSource::AddObserver(BeginFrameObserver* obs) {
diff --git a/components/viz/common/frame_sinks/begin_frame_source.h b/components/viz/common/frame_sinks/begin_frame_source.h index 4b1b40c..d639e05 100644 --- a/components/viz/common/frame_sinks/begin_frame_source.h +++ b/components/viz/common/frame_sinks/begin_frame_source.h
@@ -18,6 +18,7 @@ #include "components/viz/common/frame_sinks/delay_based_time_source.h" namespace perfetto { +class EventContext; namespace protos { namespace pbzero { class BeginFrameObserverState; @@ -108,6 +109,7 @@ virtual bool OnBeginFrameDerivedImpl(const BeginFrameArgs& args) = 0; void AsProtozeroInto( + perfetto::EventContext& ctx, perfetto::protos::pbzero::BeginFrameObserverState* state) const; BeginFrameArgs last_begin_frame_args_; @@ -192,6 +194,7 @@ virtual void RemoveObserver(BeginFrameObserver* obs) = 0; virtual void AsProtozeroInto( + perfetto::EventContext& ctx, perfetto::protos::pbzero::BeginFrameSourceState* state) const; protected: @@ -351,6 +354,7 @@ void RemoveObserver(BeginFrameObserver* obs) override; void DidFinishFrame(BeginFrameObserver* obs) override {} void AsProtozeroInto( + perfetto::EventContext& ctx, perfetto::protos::pbzero::BeginFrameSourceState* state) const override; void OnGpuNoLongerBusy() override;
diff --git a/components/wifi/wifi_service_win.cc b/components/wifi/wifi_service_win.cc index 12b7fa44..9ad293c 100644 --- a/components/wifi/wifi_service_win.cc +++ b/components/wifi/wifi_service_win.cc
@@ -891,8 +891,8 @@ if (created_profile->GetString(kProfileXmlKey, &tkip_profile_xml) && created_profile->GetBoolean(kProfileSharedKey, &shared)) { // Remove TKIP profile xml, so it will not be tried again. - created_profile->Remove(kProfileXmlKey, nullptr); - created_profile->Remove(kProfileSharedKey, nullptr); + created_profile->RemoveKey(kProfileXmlKey); + created_profile->RemoveKey(kProfileSharedKey); DWORD error_code = SetProfile(shared, tkip_profile_xml, true); if (error_code == ERROR_SUCCESS) { // Try to connect with new profile.
diff --git a/content/browser/accessibility/captioning_controller.cc b/content/browser/accessibility/captioning_controller.cc index 11390e7..3e17b68 100644 --- a/content/browser/accessibility/captioning_controller.cc +++ b/content/browser/accessibility/captioning_controller.cc
@@ -63,8 +63,7 @@ if (old_host) { old_pid = GetRenderProcessIdFromRenderViewHost(old_host); } - int new_pid = - GetRenderProcessIdFromRenderViewHost(web_contents()->GetRenderViewHost()); + int new_pid = GetRenderProcessIdFromRenderViewHost(new_host); if (new_pid != old_pid) { JNIEnv* env = AttachCurrentThread(); ScopedJavaLocalRef<jobject> obj = java_ref_.get(env);
diff --git a/content/browser/devtools/protocol/service_worker_handler.cc b/content/browser/devtools/protocol/service_worker_handler.cc index a29dd725..7cee288 100644 --- a/content/browser/devtools/protocol/service_worker_handler.cc +++ b/content/browser/devtools/protocol/service_worker_handler.cc
@@ -264,7 +264,7 @@ if (!context_) return CreateContextErrorResponse(); context_->StartActiveServiceWorker( - GURL(scope_url), blink::StorageKey::CreateFromStringForTesting(scope_url), + GURL(scope_url), blink::StorageKey(url::Origin::Create(GURL(scope_url))), base::DoNothing()); return Response::Success(); } @@ -275,8 +275,7 @@ if (!context_) return CreateContextErrorResponse(); context_->SkipWaitingWorker( - GURL(scope_url), - blink::StorageKey::CreateFromStringForTesting(scope_url)); + GURL(scope_url), blink::StorageKey(url::Origin::Create(GURL(scope_url)))); return Response::Success(); } @@ -315,8 +314,7 @@ if (!context_) return CreateContextErrorResponse(); context_->UpdateRegistration( - GURL(scope_url), - blink::StorageKey::CreateFromStringForTesting(scope_url)); + GURL(scope_url), blink::StorageKey(url::Origin::Create(GURL(scope_url)))); return Response::Success(); }
diff --git a/content/browser/loader/navigation_url_loader_impl.cc b/content/browser/loader/navigation_url_loader_impl.cc index 9e01ff17..78afd60 100644 --- a/content/browser/loader/navigation_url_loader_impl.cc +++ b/content/browser/loader/navigation_url_loader_impl.cc
@@ -287,15 +287,22 @@ handled_externally ? net::ERR_ABORTED : net::ERR_UNKNOWN_URL_SCHEME)); } -uint32_t GetURLLoaderOptions(bool is_main_frame) { +uint32_t GetURLLoaderOptions(bool is_main_frame, bool is_in_fenced_frame_tree) { uint32_t options = network::mojom::kURLLoadOptionNone; // Ensure that Mime sniffing works. options |= network::mojom::kURLLoadOptionSniffMimeType; - if (is_main_frame) { - // SSLInfo is not needed on subframe responses because users can inspect - // only the certificate for the main frame when using the info bubble. + if (is_in_fenced_frame_tree) { + // Fenced frames cannot have any credentialed requests. + // TODO(crbug.com/1229638): Once cookies partitioning is in place, consider + // using a unique partition for those cookies instead of blocking. For + // unpartitioned cookies though, we will continue to block them. + options |= network::mojom::kURLLoadOptionBlockAllCookies; + } else if (is_main_frame) { + // SSLInfo is not needed on subframe or fenced frame responses because users + // can inspect only the certificate for the main frame when using the info + // bubble. options |= network::mojom::kURLLoadOptionSendSSLInfoWithResponse; } @@ -684,7 +691,9 @@ url_chain_.push_back(resource_request_->url); *out_options = GetURLLoaderOptions( resource_request_->resource_type == - static_cast<int>(blink::mojom::ResourceType::kMainFrame)); + static_cast<int>(blink::mojom::ResourceType::kMainFrame), + FrameTreeNode::GloballyFindByID(frame_tree_node_id_) + ->IsInFencedFrameTree()); return factory; } @@ -1062,8 +1071,11 @@ // unretained |this|, because the passed callback will be used by a // SignedExchangeHandler which is indirectly owned by |this| until its // header is verified and parsed, that's where the getter is used. + FrameTreeNode* frame_tree_node = + FrameTreeNode::GloballyFindByID(frame_tree_node_id_); return std::make_unique<SignedExchangeRequestHandler>( - GetURLLoaderOptions(request_info.is_main_frame), + GetURLLoaderOptions(request_info.is_main_frame, + frame_tree_node->IsInFencedFrameTree()), request_info.frame_tree_node_id, request_info.devtools_navigation_token, std::move(url_loader_factory), base::BindRepeating(&NavigationURLLoaderImpl::CreateURLLoaderThrottles,
diff --git a/content/browser/native_io/native_io_file_host.h b/content/browser/native_io/native_io_file_host.h index 65ee4760..6d998f8 100644 --- a/content/browser/native_io/native_io_file_host.h +++ b/content/browser/native_io/native_io_file_host.h
@@ -8,6 +8,7 @@ #include <string> #include "base/sequence_checker.h" +#include "base/thread_annotations.h" #include "build/build_config.h" #include "mojo/public/cpp/bindings/receiver.h" #include "third_party/blink/public/mojom/native_io/native_io.mojom.h" @@ -57,6 +58,8 @@ // Called when the receiver is disconnected. void OnReceiverDisconnect(); + SEQUENCE_CHECKER(sequence_checker_); + // Raw pointer use is safe because NativeIOHost owns this NativeIOFileHost, // and therefore is guaranteed to outlive it. NativeIOHost* const origin_host_; @@ -70,9 +73,8 @@ // As long as the receiver is connected, the renderer has an exclusive lock on // the file represented by this host. - mojo::Receiver<blink::mojom::NativeIOFileHost> receiver_; - - SEQUENCE_CHECKER(sequence_checker_); + mojo::Receiver<blink::mojom::NativeIOFileHost> receiver_ + GUARDED_BY_CONTEXT(sequence_checker_); }; } // namespace content
diff --git a/content/browser/native_io/native_io_host.cc b/content/browser/native_io/native_io_host.cc index 4350a20..58cdc86 100644 --- a/content/browser/native_io/native_io_host.cc +++ b/content/browser/native_io/native_io_host.cc
@@ -15,6 +15,7 @@ #include "base/files/file_path.h" #include "base/files/file_util.h" #include "base/memory/scoped_refptr.h" +#include "base/sequence_checker.h" #include "base/sequenced_task_runner.h" #include "base/task/post_task.h" #include "base/task/task_traits.h" @@ -193,14 +194,6 @@ return {enumeration_error, std::move(result)}; } -// Reports the result of the file I/O work in GetAllFileNames(). -void DidGetAllFileNames( - blink::mojom::NativeIOHost::GetAllFileNamesCallback callback, - GetAllFileNamesResult result) { - std::move(callback).Run(result.first == base::File::FILE_OK, - std::move(result.second)); -} - // Performs the file I/O work in RenameFile(). NativeIOErrorPtr DoRenameFile(const base::FilePath& root_path, const std::string& old_name, @@ -261,8 +254,8 @@ file_task_runner_(CreateFileTaskRunner()) { DCHECK(manager != nullptr); - // base::Unretained is safe here because this NativeIOHost owns |receivers_|. - // So, the unretained NativeIOHost is guaranteed to outlive |receivers_| and + // base::Unretained is safe here because this NativeIOHost owns `receivers_`. + // So, the unretained NativeIOHost is guaranteed to outlive `receivers_` and // the closure that it uses. receivers_.set_disconnect_handler(base::BindRepeating( &NativeIOHost::OnReceiverDisconnect, base::Unretained(this))); @@ -284,6 +277,7 @@ mojo::PendingReceiver<blink::mojom::NativeIOFileHost> file_host_receiver, OpenFileCallback callback) { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); + DCHECK(callback); if (is_incognito_mode()) { std::move(callback).Run( @@ -336,6 +330,7 @@ void NativeIOHost::DeleteFile(const std::string& name, DeleteFileCallback callback) { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); + DCHECK(callback); if (is_incognito_mode()) { std::move(callback).Run( @@ -392,6 +387,7 @@ void NativeIOHost::GetAllFileNames(GetAllFileNamesCallback callback) { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); + DCHECK(callback); if (is_incognito_mode()) { std::move(callback).Run(false, {}); @@ -408,13 +404,20 @@ file_task_runner_->PostTaskAndReplyWithResult( FROM_HERE, base::BindOnce(&DoGetAllFileNames, root_path_), - base::BindOnce(&DidGetAllFileNames, std::move(callback))); + base::BindOnce( + [](blink::mojom::NativeIOHost::GetAllFileNamesCallback callback, + GetAllFileNamesResult result) { + std::move(callback).Run(result.first == base::File::FILE_OK, + std::move(result.second)); + }, + std::move(callback))); } void NativeIOHost::RenameFile(const std::string& old_name, const std::string& new_name, RenameFileCallback callback) { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); + DCHECK(callback); if (is_incognito_mode()) { std::move(callback).Run( @@ -475,6 +478,9 @@ void NativeIOHost::RequestCapacityChange( int64_t capacity_delta, RequestCapacityChangeCallback callback) { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); + DCHECK(callback); + if (is_incognito_mode()) { std::move(callback).Run(0); return; @@ -490,6 +496,7 @@ } void NativeIOHost::OnFileClose(NativeIOFileHost* file_host) { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); DCHECK(open_file_hosts_.count(file_host->file_name()) > 0); DCHECK_EQ(open_file_hosts_[file_host->file_name()].get(), file_host); @@ -497,6 +504,9 @@ } void NativeIOHost::DeleteAllData(DeleteAllDataCallback callback) { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); + DCHECK(callback); + delete_all_data_callbacks_.push_back(std::move(callback)); if (delete_all_data_callbacks_.size() > 1) { return; @@ -523,8 +533,10 @@ mojo::PendingReceiver<blink::mojom::NativeIOFileHost> file_host_receiver, OpenFileCallback callback, std::pair<base::File, int64_t> result) { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); DCHECK(io_pending_files_.count(name)); DCHECK(!open_file_hosts_.count(name)); + base::File file = std::move(result.first); int64_t length = result.second; io_pending_files_.erase(name); @@ -566,8 +578,10 @@ const std::string& name, DeleteFileCallback callback, std::pair<blink::mojom::NativeIOErrorPtr, int64_t> delete_result) { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); DCHECK(io_pending_files_.count(name)); DCHECK(!open_file_hosts_.count(name)); + io_pending_files_.erase(name); manager_->quota_manager_proxy()->NotifyStorageModified( @@ -582,10 +596,12 @@ const std::string& new_name, RenameFileCallback callback, NativeIOErrorPtr rename_error) { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); DCHECK(io_pending_files_.count(old_name)); DCHECK(!open_file_hosts_.count(old_name)); DCHECK(io_pending_files_.count(new_name)); DCHECK(!open_file_hosts_.count(new_name)); + io_pending_files_.erase(old_name); io_pending_files_.erase(new_name); @@ -598,8 +614,10 @@ } void NativeIOHost::DidDeleteAllData(base::File::Error error) { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); + // Moving callbacks to a local variable to avoid race conditions if the vector - // is accessed concurrently. + // is accessed during callback execution. std::vector<DeleteAllDataCallback> callbacks = std::move(delete_all_data_callbacks_); delete_all_data_callbacks_.clear();
diff --git a/content/browser/native_io/native_io_host.h b/content/browser/native_io/native_io_host.h index 8ac285a..d6f4974 100644 --- a/content/browser/native_io/native_io_host.h +++ b/content/browser/native_io/native_io_host.h
@@ -6,12 +6,16 @@ #include <map> #include <memory> +#include <set> #include <string> +#include <vector> #include "base/files/file_path.h" #include "base/memory/scoped_refptr.h" #include "base/memory/weak_ptr.h" #include "base/sequence_checker.h" +#include "base/thread_annotations.h" +#include "base/threading/thread_checker.h" #include "build/build_config.h" #include "mojo/public/cpp/bindings/pending_receiver.h" #include "mojo/public/cpp/bindings/receiver_set.h" @@ -64,13 +68,17 @@ // // The NativeIOManager that owns this host is expected to destroy the host // when it isn't serving any receivers. - bool has_empty_receiver_set() const { return receivers_.empty(); } + bool has_empty_receiver_set() const { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); + return receivers_.empty(); + } // The storage key served by this host. const blink::StorageKey& storage_key() const { return storage_key_; } // True if this host's data is currently being deleted. bool delete_all_data_in_progress() const { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); return !delete_all_data_callbacks_.empty(); } @@ -92,6 +100,8 @@ // Removes all data stored for the host's storage key from disk. All mojo // connections for open files are closed. + // + // `callback` will only be called while this NativeIOHost instance is alive. void DeleteAllData(DeleteAllDataCallback callback); // Called when one of the open files for this storage key closes. @@ -130,11 +140,6 @@ // The storage key served by this host. const blink::StorageKey storage_key_; - // Deletion requests issued during an ongoing deletion are coalesced with that - // deletion request. All coalesced callbacks are stored and invoked - // together. - std::vector<DeleteAllDataCallback> delete_all_data_callbacks_; - // The directory holding all the files for this storage key. const base::FilePath root_path_; @@ -144,26 +149,35 @@ // Raw pointer use is safe because NativeIOManager owns this NativeIOHost, and // therefore is guaranteed to outlive it. - NativeIOManager* const manager_; + NativeIOManager* const manager_ GUARDED_BY_CONTEXT(sequence_checker_); // Schedules all operations involving file I/O done by this NativeIOHost. const scoped_refptr<base::TaskRunner> file_task_runner_; + // Deletion requests issued during an ongoing deletion are coalesced with that + // deletion request. All coalesced callbacks are stored and invoked + // together. + std::vector<DeleteAllDataCallback> delete_all_data_callbacks_ + GUARDED_BY_CONTEXT(sequence_checker_); + // All receivers for frames and workers whose storage key is `storage_key_` // associated with the StoragePartition that owns `manager_`. - mojo::ReceiverSet<blink::mojom::NativeIOHost> receivers_; + mojo::ReceiverSet<blink::mojom::NativeIOHost> receivers_ + GUARDED_BY_CONTEXT(sequence_checker_); // The names of files that have pending I/O tasks. // // This set's contents must not overlap with the keys in |open_file_hosts_|. - std::set<std::string> io_pending_files_; + std::set<std::string> io_pending_files_ GUARDED_BY_CONTEXT(sequence_checker_); // Maps open file names to their corresponding receivers. // // This map's keys must not overlap with the contents of |io_pending_files_|. - std::map<std::string, std::unique_ptr<NativeIOFileHost>> open_file_hosts_; + std::map<std::string, std::unique_ptr<NativeIOFileHost>> open_file_hosts_ + GUARDED_BY_CONTEXT(sequence_checker_); - base::WeakPtrFactory<NativeIOHost> weak_factory_{this}; + base::WeakPtrFactory<NativeIOHost> weak_factory_ + GUARDED_BY_CONTEXT(sequence_checker_){this}; }; } // namespace content
diff --git a/content/browser/native_io/native_io_manager.cc b/content/browser/native_io/native_io_manager.cc index f8f0673..a0dafd6b 100644 --- a/content/browser/native_io/native_io_manager.cc +++ b/content/browser/native_io/native_io_manager.cc
@@ -10,8 +10,10 @@ #include "base/files/file_enumerator.h" #include "base/files/file_path.h" #include "base/files/file_util.h" +#include "base/sequence_checker.h" #include "base/task/task_traits.h" #include "base/task/thread_pool.h" +#include "base/threading/thread_checker.h" #include "build/build_config.h" #include "components/services/storage/public/mojom/quota_client.mojom.h" #include "content/browser/native_io/native_io_host.h" @@ -186,6 +188,7 @@ base::File::Error result, NativeIOHost* host) { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); + MaybeDeleteHost(host); blink::mojom::QuotaStatusCode quota_result = result == base::File::FILE_OK ? blink::mojom::QuotaStatusCode::kOk @@ -196,6 +199,9 @@ void NativeIOManager::DeleteStorageKeyData( const blink::StorageKey& storage_key, storage::mojom::QuotaClient::DeleteStorageKeyDataCallback callback) { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); + DCHECK(callback); + auto it = hosts_.find(storage_key); if (it == hosts_.end()) { // TODO(rstz): Consider turning these checks into DCHECKS when NativeIO is @@ -228,9 +234,11 @@ DCHECK(insert_succeeded); } - // base::Unretained is safe here because this NativeIOManager owns the - // NativeIOHost. So, the unretained NativeIOManager is guaranteed to outlive - // the NativeIOHost and the closure that it uses. + // base::Unretained is safe here NativeIOHost::DeleteAllData() guarantees that + // the callback will only be called while the NativeIOHost is alive, and this + // NativeIOManager owns the NativeIOHost. So, the unretained NativeIOManager + // will only be referenced if the NativeIOHost is still alive, which implies + // that this NativeIOManager is still alive. it->second->DeleteAllData( base::BindOnce(&NativeIOManager::OnDeleteStorageKeyDataCompleted, base::Unretained(this), std::move(callback))); @@ -239,10 +247,10 @@ void NativeIOManager::GetStorageKeysForType( blink::mojom::StorageType type, storage::mojom::QuotaClient::GetStorageKeysForTypeCallback callback) { - if (type != blink::mojom::StorageType::kTemporary) { - std::move(callback).Run({}); - return; - } + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); + DCHECK_EQ(type, blink::mojom::StorageType::kTemporary); + DCHECK(callback); + base::ThreadPool::PostTaskAndReplyWithResult( FROM_HERE, { @@ -257,18 +265,16 @@ // move to CONTINUE_ON_SHUTDOWN after very careful analysis. base::TaskShutdownBehavior::SKIP_ON_SHUTDOWN, }, - base::BindOnce(&DoGetStorageKeys, root_path_), - base::BindOnce(&NativeIOManager::DidGetStorageKeysForType, - weak_factory_.GetWeakPtr(), std::move(callback))); + base::BindOnce(&DoGetStorageKeys, root_path_), std::move(callback)); } + void NativeIOManager::GetStorageKeysForHost( blink::mojom::StorageType type, const std::string& host, storage::mojom::QuotaClient::GetStorageKeysForHostCallback callback) { - if (type != blink::mojom::StorageType::kTemporary) { - std::move(callback).Run({}); - return; - } + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); + DCHECK_EQ(type, blink::mojom::StorageType::kTemporary); + DCHECK(callback); base::ThreadPool::PostTaskAndReplyWithResult( FROM_HERE, @@ -285,19 +291,28 @@ base::TaskShutdownBehavior::SKIP_ON_SHUTDOWN, }, base::BindOnce(&DoGetStorageKeys, root_path_), - base::BindOnce(&NativeIOManager::DidGetStorageKeysForHost, - weak_factory_.GetWeakPtr(), std::move(callback), - std::move(host))); + base::BindOnce( + [](const std::string& host, + storage::mojom::QuotaClient::GetStorageKeysForTypeCallback + callback, + std::vector<blink::StorageKey> storage_keys) { + std::vector<blink::StorageKey> host_storage_keys; + for (blink::StorageKey& storage_key : storage_keys) { + if (host == storage_key.origin().host()) + host_storage_keys.push_back(std::move(storage_key)); + } + std::move(callback).Run(std::move(host_storage_keys)); + }, + host, std::move(callback))); } void NativeIOManager::GetStorageKeyUsage( const blink::StorageKey& storage_key, blink::mojom::StorageType type, storage::mojom::QuotaClient::GetStorageKeyUsageCallback callback) { - if (type != blink::mojom::StorageType::kTemporary) { - std::move(callback).Run(0); - return; - } + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); + DCHECK_EQ(type, blink::mojom::StorageType::kTemporary); + DCHECK(callback); base::FilePath storage_key_root = RootPathForStorageKey(storage_key); @@ -316,13 +331,15 @@ base::TaskShutdownBehavior::SKIP_ON_SHUTDOWN, }, base::BindOnce(&DoGetStorageKeyUsage, storage_key_root), - base::BindOnce(&NativeIOManager::DidGetStorageKeyUsage, - weak_factory_.GetWeakPtr(), std::move(callback))); + std::move(callback)); } void NativeIOManager::GetStorageKeyUsageMap( base::OnceCallback<void(const std::map<blink::StorageKey, int64_t>&)> callback) { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); + DCHECK(callback); + base::ThreadPool::PostTaskAndReplyWithResult( FROM_HERE, { @@ -337,39 +354,7 @@ base::TaskShutdownBehavior::SKIP_ON_SHUTDOWN, }, base::BindOnce(&DoGetStorageKeyUsageMap, root_path_), - base::BindOnce(&NativeIOManager::DidGetStorageKeyUsageMap, - weak_factory_.GetWeakPtr(), std::move(callback))); -} - -void NativeIOManager::DidGetStorageKeysForType( - storage::mojom::QuotaClient::GetStorageKeysForTypeCallback callback, - std::vector<blink::StorageKey> storage_keys) { - std::move(callback).Run(storage_keys); -} - -void NativeIOManager::DidGetStorageKeysForHost( - storage::mojom::QuotaClient::GetStorageKeysForTypeCallback callback, - const std::string& host, - std::vector<blink::StorageKey> storage_keys) { - std::vector<blink::StorageKey> out_storage_keys; - for (const blink::StorageKey& storage_key : storage_keys) { - if (host == storage_key.origin().host()) - out_storage_keys.push_back(storage_key); - } - std::move(callback).Run(std::move(out_storage_keys)); -} - -void NativeIOManager::DidGetStorageKeyUsage( - storage::mojom::QuotaClient::GetStorageKeyUsageCallback callback, - int64_t usage) { - std::move(callback).Run(usage); -} - -void NativeIOManager::DidGetStorageKeyUsageMap( - base::OnceCallback<void(const std::map<blink::StorageKey, int64_t>&)> - callback, - const std::map<blink::StorageKey, int64_t>& usage_map) { - std::move(callback).Run(usage_map); + std::move(callback)); } base::FilePath NativeIOManager::RootPathForStorageKey(
diff --git a/content/browser/native_io/native_io_manager.h b/content/browser/native_io/native_io_manager.h index 742745e..8a6cc6c1 100644 --- a/content/browser/native_io/native_io_manager.h +++ b/content/browser/native_io/native_io_manager.h
@@ -7,11 +7,14 @@ #include <map> #include <memory> +#include <string> #include "base/files/file.h" #include "base/files/file_path.h" +#include "base/memory/scoped_refptr.h" #include "base/memory/weak_ptr.h" #include "base/sequence_checker.h" +#include "base/thread_annotations.h" #include "build/build_config.h" #include "components/services/storage/public/mojom/quota_client.mojom-forward.h" #include "content/browser/native_io/native_io_quota_client.h" @@ -133,34 +136,12 @@ } private: - SEQUENCE_CHECKER(sequence_checker_); - // Deletes the NativeIOHost if it serves no further purpose. // // `host` must be owned by this manager. void MaybeDeleteHost(NativeIOHost* host); - // Called after the I/O part of GetStorageKeysForType() completed. - void DidGetStorageKeysForType( - storage::mojom::QuotaClient::GetStorageKeysForTypeCallback callback, - std::vector<blink::StorageKey> storage_keys); - - // Called after the I/O part of GetStorageKeysForHost() completed. - void DidGetStorageKeysForHost( - storage::mojom::QuotaClient::GetStorageKeysForTypeCallback callback, - const std::string& host, - std::vector<blink::StorageKey> storage_keys); - - // Called after the I/O part of GetStorageKeyUsage() completed. - void DidGetStorageKeyUsage( - storage::mojom::QuotaClient::GetStorageKeyUsageCallback callback, - int64_t usage); - - // Called after the I/O part of GetStorageKeyUsageMap() completed. - void DidGetStorageKeyUsageMap( - base::OnceCallback<void(const std::map<blink::StorageKey, int64_t>&)> - callback, - const std::map<blink::StorageKey, int64_t>& usage_map); + SEQUENCE_CHECKER(sequence_checker_); // Points to the root directory for NativeIO files. // @@ -176,18 +157,18 @@ const scoped_refptr<storage::QuotaManagerProxy> quota_manager_proxy_; - std::map<blink::StorageKey, std::unique_ptr<NativeIOHost>> hosts_; + std::map<blink::StorageKey, std::unique_ptr<NativeIOHost>> hosts_ + GUARDED_BY_CONTEXT(sequence_checker_); - NativeIOQuotaClient quota_client_; + NativeIOQuotaClient quota_client_ GUARDED_BY_CONTEXT(sequence_checker_); // Once the QuotaClient receiver is destroyed, the underlying mojo connection // is closed. Callbacks associated with mojo calls received over this // connection may only be dropped after the connection is closed. For this // reason, it's preferable to have the receiver be destroyed as early as // possible during the NativeIOManager destruction process. - mojo::Receiver<storage::mojom::QuotaClient> quota_client_receiver_; - - base::WeakPtrFactory<NativeIOManager> weak_factory_{this}; + mojo::Receiver<storage::mojom::QuotaClient> quota_client_receiver_ + GUARDED_BY_CONTEXT(sequence_checker_); }; } // namespace content
diff --git a/content/browser/native_io/native_io_manager_unittest.cc b/content/browser/native_io/native_io_manager_unittest.cc index d6622949..d39407a 100644 --- a/content/browser/native_io/native_io_manager_unittest.cc +++ b/content/browser/native_io/native_io_manager_unittest.cc
@@ -819,29 +819,6 @@ example_file_host.Close(); } -TEST_P(NativeIOManagerTest, - GetStorageKeysByType_EmptyForUnimplementedStorageTypes) { - mojo::Remote<blink::mojom::NativeIOFileHost> example_host_remote; - base::File example_file = - example_host_ - ->OpenFile("test_file", - example_host_remote.BindNewPipeAndPassReceiver()) - .file; - example_file.Close(); - NativeIOFileHostSync example_file_host(example_host_remote.get()); - example_file_host.Close(); - - std::vector<StorageKey> storage_keys = sync_manager_->GetStorageKeysForType( - blink::mojom::StorageType::kPersistent); - EXPECT_EQ(0u, storage_keys.size()); - storage_keys = sync_manager_->GetStorageKeysForType( - blink::mojom::StorageType::kSyncable); - EXPECT_EQ(0u, storage_keys.size()); - storage_keys = sync_manager_->GetStorageKeysForType( - blink::mojom::StorageType::kQuotaNotManaged); - EXPECT_EQ(0u, storage_keys.size()); -} - TEST_P(NativeIOManagerTest, GetStorageKeysByHost_ReturnsActiveStorageKeys) { mojo::Remote<blink::mojom::NativeIOFileHost> example_file_host_remote; base::File example_file =
diff --git a/content/browser/native_io/native_io_quota_client.h b/content/browser/native_io/native_io_quota_client.h index 02fb001b..3afa4e9 100644 --- a/content/browser/native_io/native_io_quota_client.h +++ b/content/browser/native_io/native_io_quota_client.h
@@ -6,6 +6,7 @@ #define CONTENT_BROWSER_NATIVE_IO_NATIVE_IO_QUOTA_CLIENT_H_ #include "base/sequence_checker.h" +#include "base/thread_annotations.h" #include "components/services/storage/public/cpp/storage_key_quota_client.h" #include "content/common/content_export.h" #include "storage/browser/quota/quota_client_type.h" @@ -47,9 +48,9 @@ PerformStorageCleanupCallback callback) override; private: - NativeIOManager* manager_; - SEQUENCE_CHECKER(sequence_checker_); + + NativeIOManager* const manager_ GUARDED_BY_CONTEXT(sequence_checker_); }; } // namespace content
diff --git a/content/browser/renderer_host/frame_tree_browsertest.cc b/content/browser/renderer_host/frame_tree_browsertest.cc index 8bcc8ed..e3bee0b 100644 --- a/content/browser/renderer_host/frame_tree_browsertest.cc +++ b/content/browser/renderer_host/frame_tree_browsertest.cc
@@ -5,6 +5,7 @@ #include "base/command_line.h" #include "base/macros.h" #include "base/strings/stringprintf.h" +#include "base/synchronization/lock.h" #include "base/test/scoped_feature_list.h" #include "build/build_config.h" #include "content/browser/fenced_frame/fenced_frame_url_mapping.h" @@ -13,6 +14,7 @@ #include "content/browser/renderer_host/render_frame_host_impl.h" #include "content/browser/renderer_host/render_view_host_impl.h" #include "content/browser/web_contents/web_contents_impl.h" +#include "content/public/browser/browser_thread.h" #include "content/public/browser/notification_service.h" #include "content/public/browser/notification_types.h" #include "content/public/browser/site_isolation_policy.h" @@ -30,8 +32,10 @@ #include "content/shell/browser/shell.h" #include "content/shell/common/shell_switches.h" #include "content/test/content_browser_test_utils_internal.h" +#include "content/test/resource_load_observer.h" #include "net/dns/mock_host_resolver.h" #include "net/test/embedded_test_server/embedded_test_server.h" +#include "net/test/embedded_test_server/http_request.h" #include "services/network/public/cpp/web_sandbox_flags.h" #include "services/network/public/mojom/web_sandbox_flags.mojom-shared.h" #include "third_party/blink/public/common/chrome_debug_urls.h" @@ -815,19 +819,72 @@ // as well, once the supporting code lands. } + void SetUpOnMainThread() override { + // Set up the host resolver to allow serving separate sites, so we can + // perform cross-process navigation. + host_resolver()->AddRule("*", "127.0.0.1"); + + // Fenced frames require potentially trustworthy URLs so creating an https + // server. + https_server_.RegisterRequestMonitor( + base::BindRepeating(&FencedFrameTreeBrowserTest::ObserveRequestHeaders, + base::Unretained(this))); + https_server_.ServeFilesFromSourceDirectory(GetTestDataFilePath()); + https_server_.SetSSLConfig(net::EmbeddedTestServer::CERT_TEST_NAMES); + ASSERT_TRUE(https_server_.Start()); + } + + // Invoked on "EmbeddedTestServer IO Thread". + void ObserveRequestHeaders(const net::test_server::HttpRequest& request) { + base::AutoLock auto_lock(requests_lock_); + std::string val = request.headers.find("Cookie") != request.headers.end() + ? request.headers.at("Cookie").c_str() + : ""; + cookie_headers_map_.insert(std::make_pair(request.GetURL().path(), val)); + } + + // Returns true if the cookie header was present in the last request received + // by the server with the same `url.path()`. Also asserts that the cookie + // header value matches that given in `expected_value`, if it exists. Also + // clears the value that was just checked by the method invocation. + bool CheckAndClearCookieHeader( + const GURL& url, + const std::string expected_value = "", + base::Location from_here = base::Location::Current()) { + base::AutoLock auto_lock(requests_lock_); + SCOPED_TRACE(from_here.ToString()); + DCHECK_CURRENTLY_ON(BrowserThread::UI); + std::string file_name = url.path(); + CHECK(cookie_headers_map_.find(file_name) != cookie_headers_map_.end()); + std::string header = cookie_headers_map_[file_name]; + EXPECT_EQ(expected_value, header); + cookie_headers_map_.erase(file_name); + return !header.empty(); + } + net::EmbeddedTestServer* https_server() { return &https_server_; } + ~FencedFrameTreeBrowserTest() override { + // Shutdown the server explicitly so that there is no race with the + // destruction of cookie_headers_map_ and invocation of RequestMonitor. + EXPECT_TRUE(https_server_.ShutdownAndWaitUntilComplete()); + } + private: base::test::ScopedFeatureList scoped_feature_list_; + base::Lock requests_lock_; + std::map<std::string, std::string> cookie_headers_map_ + GUARDED_BY(requests_lock_); net::EmbeddedTestServer https_server_; }; // Tests that the fenced frame gets navigated to an actual url given a urn:uuid. IN_PROC_BROWSER_TEST_F(FencedFrameTreeBrowserTest, CheckFencedFrameNavigationWithUUID) { - GURL main_url(embedded_test_server()->GetURL("/hello.html")); + // Create an a.test main page and set a cookie. Then create a same-origin + // fenced frame. It's request should not carry the cookie that was set. + GURL main_url = https_server()->GetURL("b.test", "/hello.html"); EXPECT_TRUE(NavigateToURL(shell(), main_url)); - // It is safe to obtain the root frame tree node here, as it doesn't change. FrameTreeNode* root = static_cast<WebContentsImpl*>(shell()->web_contents()) ->GetFrameTree() @@ -843,10 +900,6 @@ EXPECT_TRUE(root->child_at(0)->IsFencedFrame()); EXPECT_TRUE(root->child_at(0)->IsInFencedFrameTree()); - https_server()->ServeFilesFromSourceDirectory(GetTestDataFilePath()); - https_server()->SetSSLConfig(net::EmbeddedTestServer::CERT_TEST_NAMES); - ASSERT_TRUE(https_server()->Start()); - GURL https_url(https_server()->GetURL("a.test", "/title1.html")); FencedFrameURLMapping& url_mapping = root->current_frame_host()->GetPage().fenced_frame_urls_map(); @@ -875,10 +928,100 @@ EXPECT_EQ(0, EvalJs(root, "window.frames.length")); } +IN_PROC_BROWSER_TEST_F(FencedFrameTreeBrowserTest, CheckFencedFrameNoCookies) { + // Create an a.test main page and set cookies. Then create a same-origin + // fenced frame. Its request should not carry the cookies that were set. + GURL main_url = https_server()->GetURL("a.test", "/hello.html"); + EXPECT_TRUE(NavigateToURL(shell(), main_url)); + + // It is safe to obtain the root frame tree node here, as it doesn't change. + RenderFrameHostImpl* root_rfh = + static_cast<WebContentsImpl*>(shell()->web_contents()) + ->GetFrameTree() + ->root() + ->current_frame_host(); + + // Set SameSite=Lax and SameSite=None cookies and retrieve them. + EXPECT_TRUE(ExecJs(root_rfh, + "document.cookie = 'B=2; SameSite=Lax';" + "document.cookie = 'C=2; SameSite=None; Secure';")); + EXPECT_EQ("B=2; C=2", EvalJs(root_rfh, "document.cookie;")); + + // Test the fenced frame. + EXPECT_TRUE(ExecJs(root_rfh, + "var f = document.createElement('fencedframe');" + "document.body.appendChild(f);")); + EXPECT_EQ(1U, root_rfh->child_count()); + + FrameTreeNode* fenced_frame = root_rfh->child_at(0); + + EXPECT_TRUE(fenced_frame->IsFencedFrame()); + EXPECT_TRUE(fenced_frame->IsInFencedFrameTree()); + + GURL https_url(https_server()->GetURL("a.test", "/title1.html")); + FencedFrameURLMapping& url_mapping = + root_rfh->GetPage().fenced_frame_urls_map(); + GURL urn_uuid = url_mapping.AddFencedFrameURL(https_url); + EXPECT_TRUE(urn_uuid.is_valid()); + + std::string navigate_urn_script = JsReplace("f.src = $1;", urn_uuid.spec()); + + { + // Navigate the fenced frame. + TestFrameNavigationObserver observer(root_rfh->child_at(0)); + EXPECT_EQ(urn_uuid.spec(), EvalJs(root_rfh, navigate_urn_script)); + observer.Wait(); + } + + EXPECT_EQ(https_url, + fenced_frame->current_frame_host()->GetLastCommittedURL()); + EXPECT_EQ(url::Origin::Create(https_url), + fenced_frame->current_frame_host()->GetLastCommittedOrigin()); + + EXPECT_FALSE(CheckAndClearCookieHeader(https_url)); + + // Run the same test for an iframe inside the fenced frame. It shouldn't be + // able to send cookies either. + // Add a nested iframe inside the fenced frame. + EXPECT_TRUE(ExecJs(fenced_frame, + "var f1 = document.createElement('iframe');" + "document.body.appendChild(f1);")); + EXPECT_EQ(1U, fenced_frame->child_count()); + EXPECT_FALSE(fenced_frame->child_at(0)->IsFencedFrame()); + EXPECT_TRUE(fenced_frame->child_at(0)->IsInFencedFrameTree()); + std::string navigate_script = JsReplace("f1.src = $1;", main_url.spec()); + + { + TestFrameNavigationObserver observer(fenced_frame->child_at(0)); + EXPECT_EQ(main_url.spec(), EvalJs(fenced_frame, navigate_script)); + observer.Wait(); + } + EXPECT_EQ( + main_url, + fenced_frame->child_at(0)->current_frame_host()->GetLastCommittedURL()); + EXPECT_EQ(url::Origin::Create(main_url), fenced_frame->child_at(0) + ->current_frame_host() + ->GetLastCommittedOrigin()); + EXPECT_FALSE(CheckAndClearCookieHeader(main_url)); + + // Check that a subresource request from the main document should have the + // cookies since that is outside the fenced frame tree. + ResourceLoadObserver observer(shell()); + GURL image_url = https_server()->GetURL("a.test", "/image.jpg"); + EXPECT_TRUE( + ExecJs(root_rfh, JsReplace("var img = document.createElement('img');" + "document.body.appendChild(img);", + image_url))); + std::string load_script = JsReplace("img.src = $1;", image_url.spec()); + EXPECT_EQ(image_url.spec(), EvalJs(root_rfh, load_script)); + observer.WaitForResourceCompletion(image_url); + EXPECT_TRUE(CheckAndClearCookieHeader(image_url, "B=2; C=2")); +} + // Tests when a frame is considered a fenced frame or being inside a fenced // frame tree. IN_PROC_BROWSER_TEST_F(FencedFrameTreeBrowserTest, CheckIsFencedFrame) { - GURL main_url(embedded_test_server()->GetURL("/hello.html")); + GURL main_url(https_server()->GetURL("a.test", "/hello.html")); EXPECT_TRUE(NavigateToURL(shell(), main_url)); // It is safe to obtain the root frame tree node here, as it doesn't change.
diff --git a/content/browser/renderer_host/render_widget_host_view_mac.mm b/content/browser/renderer_host/render_widget_host_view_mac.mm index a56581a..cdbfdb7b 100644 --- a/content/browser/renderer_host/render_widget_host_view_mac.mm +++ b/content/browser/renderer_host/render_widget_host_view_mac.mm
@@ -13,7 +13,6 @@ #include "base/auto_reset.h" #include "base/bind.h" #include "base/command_line.h" -#include "base/debug/dump_without_crashing.h" #include "base/feature_list.h" #include "base/logging.h" #include "base/mac/mac_util.h" @@ -1875,15 +1874,7 @@ GetFocusedWidget(), requested_range); // TODO(thakis): Pipe |actualRange| through TextInputClientMac machinery. *actual_range = requested_range; - - // It seems that only the Pepper-PDF would reach here while - // an ordinary webpage always retrieves the rect from the cache. - // After fixing crbug.com/601322, we should have fixed the PDF code and so - // this block can be removed. To be prudent, track if there is any usage - // in the wild before we do that. - base::debug::DumpWithoutCrashing(); } - return true; }
diff --git a/content/browser/webrtc/webrtc_browsertest.cc b/content/browser/webrtc/webrtc_browsertest.cc index f1dc3be..9b1e12f 100644 --- a/content/browser/webrtc/webrtc_browsertest.cc +++ b/content/browser/webrtc/webrtc_browsertest.cc
@@ -115,9 +115,16 @@ MakeTypicalPeerConnectionCall(javascript); } - +#if defined(OS_MAC) +// TODO(https://crbug.com/1235254): This test is flakey on macOS. +#define MAYBE_CanSetupVideoCallWith4To3AspectRatio \ + DISABLED_CanSetupVideoCallWith4To3AspectRatio +#else +#define MAYBE_CanSetupVideoCallWith4To3AspectRatio \ + CanSetupVideoCallWith4To3AspectRatio +#endif IN_PROC_BROWSER_TEST_F(MAYBE_WebRtcBrowserTest, - CanSetupVideoCallWith4To3AspectRatio) { + MAYBE_CanSetupVideoCallWith4To3AspectRatio) { const std::string javascript = "callAndExpectResolution({video: {mandatory: { minWidth: 320," "maxWidth: 320, minAspectRatio: 1.333, maxAspectRatio: 1.333}}}, 320,"
diff --git a/content/browser/webrtc/webrtc_video_capture_browsertest.cc b/content/browser/webrtc/webrtc_video_capture_browsertest.cc index 7c69f2a..c9c5f68 100644 --- a/content/browser/webrtc/webrtc_video_capture_browsertest.cc +++ b/content/browser/webrtc/webrtc_video_capture_browsertest.cc
@@ -62,8 +62,16 @@ DISALLOW_COPY_AND_ASSIGN(WebRtcVideoCaptureBrowserTest); }; +#if defined(OS_MAC) +// TODO(https://crbug.com/1235254): This test is flakey on macOS. +#define MAYBE_RecoverFromCrashInVideoCaptureProcess \ + DISABLED_RecoverFromCrashInVideoCaptureProcess +#else +#define MAYBE_RecoverFromCrashInVideoCaptureProcess \ + RecoverFromCrashInVideoCaptureProcess +#endif IN_PROC_BROWSER_TEST_F(WebRtcVideoCaptureBrowserTest, - RecoverFromCrashInVideoCaptureProcess) { + MAYBE_RecoverFromCrashInVideoCaptureProcess) { // This test only makes sense if the video capture service runs in a // separate process. if (!features::IsVideoCaptureServiceEnabledForOutOfProcess())
diff --git a/content/browser/webrtc/webrtc_video_capture_service_browsertest.cc b/content/browser/webrtc/webrtc_video_capture_service_browsertest.cc index cf83d05..811d0d2 100644 --- a/content/browser/webrtc/webrtc_video_capture_service_browsertest.cc +++ b/content/browser/webrtc/webrtc_video_capture_service_browsertest.cc
@@ -552,9 +552,17 @@ run_loop.Run(); } +#if defined(OS_MAC) +// TODO(https://crbug.com/1235254): This test is flakey on macOS. +#define MAYBE_FramesSentThroughSharedMemoryVirtualDeviceGetDisplayedOnPage \ + DISABLED_FramesSentThroughSharedMemoryVirtualDeviceGetDisplayedOnPage +#else +#define MAYBE_FramesSentThroughSharedMemoryVirtualDeviceGetDisplayedOnPage \ + FramesSentThroughSharedMemoryVirtualDeviceGetDisplayedOnPage +#endif IN_PROC_BROWSER_TEST_F( WebRtcVideoCaptureServiceBrowserTest, - FramesSentThroughSharedMemoryVirtualDeviceGetDisplayedOnPage) { + MAYBE_FramesSentThroughSharedMemoryVirtualDeviceGetDisplayedOnPage) { Initialize(); auto device_exerciser = std::make_unique<SharedMemoryDeviceExerciser>(); device_exerciser->Initialize(); @@ -569,9 +577,17 @@ run_loop.Run(); } +#if defined(OS_MAC) +// TODO(https://crbug.com/1235254): This test is flakey on macOS. +#define MAYBE_PaddedI420FramesSentThroughSharedMemoryVirtualDeviceGetDisplayedOnPage \ + DISABLED_PaddedI420FramesSentThroughSharedMemoryVirtualDeviceGetDisplayedOnPage +#else +#define MAYBE_PaddedI420FramesSentThroughSharedMemoryVirtualDeviceGetDisplayedOnPage \ + PaddedI420FramesSentThroughSharedMemoryVirtualDeviceGetDisplayedOnPage +#endif IN_PROC_BROWSER_TEST_F( WebRtcVideoCaptureServiceBrowserTest, - PaddedI420FramesSentThroughSharedMemoryVirtualDeviceGetDisplayedOnPage) { + MAYBE_PaddedI420FramesSentThroughSharedMemoryVirtualDeviceGetDisplayedOnPage) { Initialize(); auto device_exerciser = std::make_unique<SharedMemoryDeviceExerciser>( media::mojom::PlaneStrides::New(
diff --git a/content/renderer/pepper/pepper_plugin_instance_impl.cc b/content/renderer/pepper/pepper_plugin_instance_impl.cc index d18a11a..8dadbd9 100644 --- a/content/renderer/pepper/pepper_plugin_instance_impl.cc +++ b/content/renderer/pepper/pepper_plugin_instance_impl.cc
@@ -2575,11 +2575,7 @@ const PP_Rect& bounding_box) { if (!render_frame_) return; - PP_Rect caret_dip(caret), bounding_box_dip(bounding_box); - ConvertRectToDIP(&caret_dip); - ConvertRectToDIP(&bounding_box_dip); - TextInputCaretInfo info = {PP_ToGfxRect(caret_dip), - PP_ToGfxRect(bounding_box_dip)}; + TextInputCaretInfo info = {PP_ToGfxRect(caret), PP_ToGfxRect(bounding_box)}; text_input_caret_info_ = std::move(info); render_frame_->PepperCaretPositionChanged(this); }
diff --git a/content/renderer/v8_value_converter_impl_unittest.cc b/content/renderer/v8_value_converter_impl_unittest.cc index 40912d9..bd9538e2 100644 --- a/content/renderer/v8_value_converter_impl_unittest.cc +++ b/content/renderer/v8_value_converter_impl_unittest.cc
@@ -279,9 +279,8 @@ converter.ToV8Value(original_root.get(), context).As<v8::Object>(); ASSERT_FALSE(v8_object.IsEmpty()); - EXPECT_EQ( - static_cast<const base::DictionaryValue&>(*original_root).DictSize(), - v8_object->GetPropertyNames(context).ToLocalChecked()->Length()); + EXPECT_EQ(original_root->DictSize(), + v8_object->GetPropertyNames(context).ToLocalChecked()->Length()); EXPECT_TRUE( v8_object ->Get(context, v8::String::NewFromUtf8(
diff --git a/content/services/auction_worklet/auction_v8_helper.cc b/content/services/auction_worklet/auction_v8_helper.cc index cdf6755..92812f4 100644 --- a/content/services/auction_worklet/auction_v8_helper.cc +++ b/content/services/auction_worklet/auction_v8_helper.cc
@@ -331,7 +331,7 @@ v8::MaybeLocal<v8::Value> AuctionV8Helper::RunScript( v8::Local<v8::Context> context, v8::Local<v8::UnboundScript> script, - base::StringPiece script_name, + base::StringPiece function_name, base::span<v8::Local<v8::Value>> args, std::vector<std::string>& error_out) { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); @@ -340,8 +340,8 @@ ScopedConsoleTarget direct_console( this, FormatValue(isolate(), script->GetScriptName()), &error_out); - v8::Local<v8::String> v8_script_name; - if (!CreateUtf8String(script_name).ToLocal(&v8_script_name)) + v8::Local<v8::String> v8_function_name; + if (!CreateUtf8String(function_name).ToLocal(&v8_function_name)) return v8::MaybeLocal<v8::Value>(); v8::Local<v8::Script> local_script = script->BindToCurrentContext(); @@ -367,17 +367,17 @@ return v8::MaybeLocal<v8::Value>(); v8::Local<v8::Value> function; - if (!context->Global()->Get(context, v8_script_name).ToLocal(&function)) { + if (!context->Global()->Get(context, v8_function_name).ToLocal(&function)) { error_out.push_back( base::StrCat({FormatValue(isolate(), script->GetScriptName()), - " function `", script_name, "` not found."})); + " function `", function_name, "` not found."})); return v8::MaybeLocal<v8::Value>(); } if (!function->IsFunction()) { error_out.push_back( base::StrCat({FormatValue(isolate(), script->GetScriptName()), " `", - script_name, "` is not a function."})); + function_name, "` is not a function."})); return v8::MaybeLocal<v8::Value>(); } @@ -386,7 +386,7 @@ if (try_catch.HasTerminated()) { error_out.push_back( base::StrCat({FormatValue(isolate(), script->GetScriptName()), - " execution of `", script_name, "` timed out."})); + " execution of `", function_name, "` timed out."})); return v8::MaybeLocal<v8::Value>(); } if (try_catch.HasCaught()) {
diff --git a/content/services/auction_worklet/auction_v8_helper.h b/content/services/auction_worklet/auction_v8_helper.h index 375a1d3..3ac7d94 100644 --- a/content/services/auction_worklet/auction_v8_helper.h +++ b/content/services/auction_worklet/auction_v8_helper.h
@@ -151,7 +151,7 @@ // In case of an error or console output sets `error_out`. v8::MaybeLocal<v8::Value> RunScript(v8::Local<v8::Context> context, v8::Local<v8::UnboundScript> script, - base::StringPiece script_name, + base::StringPiece function_name, base::span<v8::Local<v8::Value>> args, std::vector<std::string>& error_out);
diff --git a/content/test/data/forms/form_controls_browsertest_checkbox_android.png b/content/test/data/forms/form_controls_browsertest_checkbox_android.png index 258b74f3..d819a9b 100644 --- a/content/test/data/forms/form_controls_browsertest_checkbox_android.png +++ b/content/test/data/forms/form_controls_browsertest_checkbox_android.png Binary files differ
diff --git a/content/test/data/forms/form_controls_browsertest_multi_select_android.png b/content/test/data/forms/form_controls_browsertest_multi_select_android.png index edaf6cb..c166623 100644 --- a/content/test/data/forms/form_controls_browsertest_multi_select_android.png +++ b/content/test/data/forms/form_controls_browsertest_multi_select_android.png Binary files differ
diff --git a/content/test/data/forms/form_controls_browsertest_select_android.png b/content/test/data/forms/form_controls_browsertest_select_android.png index 0225ac4..16c390a 100644 --- a/content/test/data/forms/form_controls_browsertest_select_android.png +++ b/content/test/data/forms/form_controls_browsertest_select_android.png Binary files differ
diff --git a/content/test/data/gpu/webgpu-domain-blocking-page1.html b/content/test/data/gpu/webgpu-domain-blocking-page1.html new file mode 100644 index 0000000..031e83db --- /dev/null +++ b/content/test/data/gpu/webgpu-domain-blocking-page1.html
@@ -0,0 +1,41 @@ +<script type="text/javascript"> +function reportProgress(msg) { + if (window.domAutomationController) { + window.domAutomationController.send(msg); + } + console.log(msg); +} + +async function init() +{ + const adapter = await navigator.gpu.requestAdapter(); + if (!adapter) { + console.log('TEST FAILED - Could not get a GPUAdapter'); + reportProgress('FAILED'); + return; + } + + let device; + try { + device = await adapter.requestDevice(); + } catch { + console.log('TEST FAILED - Could not get a GPUDevice'); + reportProgress('FAILED'); + return; + } + + + reportProgress('LOADED'); + + console.log('Waiting for a GPU crash to cause device loss'); + const {reason} = await device.lost; + if (reason !== undefined) { + console.log('TEST FAILED - Expected undefined device lost reason'); + reportProgress('FAILED'); + } + + window.location.href = 'webgpu-domain-blocking-page2.html'; +} + +init(); +</script>
diff --git a/content/test/data/gpu/webgpu-domain-blocking-page2.html b/content/test/data/gpu/webgpu-domain-blocking-page2.html new file mode 100644 index 0000000..24622df --- /dev/null +++ b/content/test/data/gpu/webgpu-domain-blocking-page2.html
@@ -0,0 +1,15 @@ +<script type="text/javascript"> +var initFinished = false; +var gotAdapter = false; + +async function init() +{ + const adapter = await navigator.gpu.requestAdapter(); + if (adapter !== null) { + gotAdapter = true; + } + initFinished = true; +} + +init(); +</script>
diff --git a/content/test/data/gpu/webgpu-domain-not-blocked.html b/content/test/data/gpu/webgpu-domain-not-blocked.html new file mode 100644 index 0000000..498ab5a --- /dev/null +++ b/content/test/data/gpu/webgpu-domain-not-blocked.html
@@ -0,0 +1,55 @@ +<script type="text/javascript"> +function reportProgress(msg) { + if (window.domAutomationController) { + window.domAutomationController.send(msg); + } + console.log(msg); +} + +async function requestDevice() { + const adapter = await navigator.gpu.requestAdapter(); + if (!adapter) { + reportProgress('FAILED'); + console.log('TEST FAILED - Could not get a GPUAdapter'); + return null; + } + + try { + return await adapter.requestDevice(); + } catch { + reportProgress('FAILED'); + console.log('TEST FAILED - Could not get a GPUDevice'); + return null; + } +} + +async function init() { + const device = await requestDevice(); + + reportProgress('LOADED'); + + // The test runner forces the GPU process to terminate normally. This should + // NOT result in the domain being blocked. + console.log('Waiting for GPU termination to cause device loss'); + const {reason} = await device.lost; + if (reason !== undefined) { + console.log('TEST FAILED - Expected undefined device lost reason'); + reportProgress('FAILED'); + return; + } + + try { + const newDevice = await requestDevice(); + if (newDevice) { + reportProgress('SUCCESS'); + return; + } + } catch { + } + + reportProgress('FAILED'); + console.log('TEST FAILED - Could not get a new GPUDevice'); +} + +init(); +</script>
diff --git a/content/test/data/gpu/webgpu-domain-unblocking.html b/content/test/data/gpu/webgpu-domain-unblocking.html new file mode 100644 index 0000000..81b2fc1c --- /dev/null +++ b/content/test/data/gpu/webgpu-domain-unblocking.html
@@ -0,0 +1,63 @@ +<script type="text/javascript"> +var deviceLostReceived = false; + +function reportProgress(msg) { + if (window.domAutomationController) { + window.domAutomationController.send(msg); + } + console.log(msg); +} + +async function init() +{ + const adapter = await navigator.gpu.requestAdapter(); + if (!adapter) { + reportProgress('FAILED'); + console.log('TEST FAILED - requestAdapter() failed unexpectedly'); + return; + } + + let device; + try { + device = await adapter.requestDevice(); + } catch { + reportProgress('FAILED'); + console.log('TEST FAILED - requestDevice() failed unexpectedly'); + return; + } + + reportProgress('SUCCESS'); + reportProgress('LOADED'); + + console.log('Waiting for a GPU crash to cause device loss'); + const {reason} = await device.lost; + if (reason !== undefined) { + console.log('TEST FAILED - Expected undefined device lost reason'); + reportProgress('FAILED'); + return; + } + + try { + // First check that the previously acquired adapter can't get another device. + // This should throw an exception. + await adapter.requestDevice(); + reportProgress('FAILED'); + console.log('TEST FAILED - WebGPU device request should have failed on ' + + 'stale GPUAdapter'); + } catch { + console.log('Device request failed as expected'); + } + + // Also check that we can't get another adapter. + const newAdapter = await navigator.gpu.requestAdapter(); + if (newAdapter !== null) { + reportProgress('FAILED'); + console.log( + 'TEST FAILED - WebGPU adapter request should have been blocked'); + } + + deviceLostReceived = true; +} + +init(); +</script>
diff --git a/content/test/gpu/gpu_tests/context_lost_integration_test.py b/content/test/gpu/gpu_tests/context_lost_integration_test.py index 1ddbbfd..6fd44ee 100644 --- a/content/test/gpu/gpu_tests/context_lost_integration_test.py +++ b/content/test/gpu/gpu_tests/context_lost_integration_test.py
@@ -180,7 +180,13 @@ ('ContextLost_MacWebGLPreserveDBHighPowerSwitchLosesContext', 'webgl2-preserve-db-high-power-switch-loses-context.html'), ('GpuCrash_InfoForHardwareGpu', 'simple.html'), - ('GpuCrash_InfoForDualHardwareGpus', 'webgl-high-perf.html')) + ('GpuCrash_InfoForDualHardwareGpus', 'webgl-high-perf.html'), + ('ContextLost_WebGPUBlockedAfterJSNavigation', + 'webgpu-domain-blocking-page1.html'), + ('ContextLost_WebGPUUnblockedAfterUserInitiatedReload', + 'webgpu-domain-unblocking.html'), + ('GpuNormalTermination_WebGPUNotBlocked', + 'webgpu-domain-not-blocked.html')) for t in tests: yield (t[0], t[1], ('_' + t[0])) @@ -307,9 +313,9 @@ tab.Close() return vid - def _WaitForTabAndCheckCompletion(self): + def _WaitForTabAndCheckCompletion(self, timeout=wait_timeout): tab = self.tab - completed = _WaitForPageToFinish(tab) + completed = _WaitForPageToFinish(tab, timeout=timeout) if not completed: self.fail('Test didn\'t complete (no context lost / restored event?)') if not tab.EvaluateJavaScript('window.domAutomationController._succeeded'): @@ -339,9 +345,13 @@ '--enable-unsafe-webgpu', ]) self._NavigateAndWaitForLoad(test_path) + self.tab.EvaluateJavaScript( + 'chrome.gpuBenchmarking.terminateGpuProcessNormally()') + # The gpu startup sometimes takes longer on the bots. # Increasing the timeout for this test as it times out before completion - self._KillGPUProcess(1, False, timeout=180) + self._WaitForTabAndCheckCompletion(timeout=180) + self._RestartBrowser('must restart after tests that kill the GPU process') def _ContextLost_WebGLContextLostFromLoseContextExtension(self, test_path): @@ -592,6 +602,73 @@ (new_active_vendor_id, active_vendor_id_for_hardware_gpu)) self._RestartBrowser('must restart after tests that kill the GPU process') + def _ContextLost_WebGPUBlockedAfterJSNavigation(self, test_path): + self.RestartBrowserIfNecessaryWithArgs([ + '--enable-unsafe-webgpu', + ]) + self._NavigateAndWaitForLoad(test_path) + + tab = self.tab + if tab.EvaluateJavaScript('window.domAutomationController._finished'): + # This means the test failed for some reason. + if tab.EvaluateJavaScript('window.domAutomationController._succeeded'): + self.fail('Initial page claimed to succeed early') + else: + self.fail('Initial page failed to get a WebGPU device') + + # Kill the GPU process in order to get WebGPU blocked. + tab.EvaluateJavaScript('chrome.gpuBenchmarking.crashGpuProcess()') + + # The original tab will navigate to a new page. Wait for it to + # finish running its onload handler. + tab.WaitForJavaScriptCondition('window.initFinished', timeout=wait_timeout) + + ## Make sure the page failed to get a WebGPU adapter. + if tab.EvaluateJavaScript('window.gotAdapter'): + self.fail( + 'Page should have been blocked from getting a new WebGPU device') + self._RestartBrowser('must restart after tests that kill the GPU process') + + def _ContextLost_WebGPUUnblockedAfterUserInitiatedReload(self, test_path): + self.RestartBrowserIfNecessaryWithArgs([ + '--enable-unsafe-webgpu', + ]) + self._NavigateAndWaitForLoad(test_path) + + tab = self.tab + # Make sure the tab initially got a WebGPU device. + if not tab.EvaluateJavaScript('window.domAutomationController._succeeded'): + self.fail('Tab failed to get an initial WebGPU device') + # Kill the GPU process in order to get WebGL blocked. + tab.EvaluateJavaScript('chrome.gpuBenchmarking.crashGpuProcess()') + + # Wait for the page to receive a device loss event. + tab.WaitForJavaScriptCondition('window.deviceLostReceived', + timeout=wait_timeout) + # Make sure WebGL is still blocked. + if not tab.EvaluateJavaScript('window.domAutomationController._succeeded'): + self.fail('WebGPU should have been blocked after a device loss') + # Reload the page via Telemetry / DevTools. This is treated as a + # user-initiated navigation, so WebGPU is unblocked. + self._NavigateAndWaitForLoad(test_path) + # Ensure WebGPU is unblocked. + if not tab.EvaluateJavaScript('window.domAutomationController._succeeded'): + self.fail( + 'WebGPU should have been unblocked after a user-initiated navigation') + self._RestartBrowser('must restart after tests that kill the GPU process') + + def _GpuNormalTermination_WebGPUNotBlocked(self, test_path): + self.RestartBrowserIfNecessaryWithArgs([ + '--enable-unsafe-webgpu', + ]) + self._NavigateAndWaitForLoad(test_path) + + tab = self.tab + tab.EvaluateJavaScript( + 'chrome.gpuBenchmarking.terminateGpuProcessNormally()') + self._WaitForTabAndCheckCompletion() + self._RestartBrowser('must restart after tests that kill the GPU process') + @classmethod def GetPlatformTags(cls, browser): tags = super(ContextLostIntegrationTest, cls).GetPlatformTags(browser)
diff --git a/content/test/gpu/gpu_tests/test_expectations/context_lost_expectations.txt b/content/test/gpu/gpu_tests/test_expectations/context_lost_expectations.txt index 184b96a3..02f952b 100644 --- a/content/test/gpu/gpu_tests/test_expectations/context_lost_expectations.txt +++ b/content/test/gpu/gpu_tests/test_expectations/context_lost_expectations.txt
@@ -121,9 +121,21 @@ # Webgpu not fully supported on Linux, Android, ChromeOS, and Fuchsia [ linux ] ContextLost_WebGPUContextLostFromGPUProcessExit [ Skip ] +[ linux ] ContextLost_WebGPUBlockedAfterJSNavigation [ Skip ] +[ linux ] ContextLost_WebGPUUnblockedAfterUserInitiatedReload [ Skip ] +[ linux ] GpuNormalTermination_WebGPUNotBlocked [ Skip ] [ fuchsia ] ContextLost_WebGPUContextLostFromGPUProcessExit [ Skip ] +[ fuchsia ] ContextLost_WebGPUBlockedAfterJSNavigation [ Skip ] +[ fuchsia ] ContextLost_WebGPUUnblockedAfterUserInitiatedReload [ Skip ] +[ fuchsia ] GpuNormalTermination_WebGPUNotBlocked [ Skip ] [ android ] ContextLost_WebGPUContextLostFromGPUProcessExit [ Skip ] +[ android ] ContextLost_WebGPUBlockedAfterJSNavigation [ Skip ] +[ android ] ContextLost_WebGPUUnblockedAfterUserInitiatedReload [ Skip ] +[ android ] GpuNormalTermination_WebGPUNotBlocked [ Skip ] [ chromeos ] ContextLost_WebGPUContextLostFromGPUProcessExit [ Skip ] +[ chromeos ] ContextLost_WebGPUBlockedAfterJSNavigation [ Skip ] +[ chromeos ] ContextLost_WebGPUUnblockedAfterUserInitiatedReload [ Skip ] +[ chromeos ] GpuNormalTermination_WebGPUNotBlocked [ Skip ] # Flakily not getting WebGL blocked on context loss crbug.com/1143774 [ chromeos chromeos-board-kevin ] ContextLost_WebGLUnblockedAfterUserInitiatedReload [ RetryOnFailure ]
diff --git a/device/bluetooth/bluez/bluetooth_bluez_unittest.cc b/device/bluetooth/bluez/bluetooth_bluez_unittest.cc index 71849be..b197156 100644 --- a/device/bluetooth/bluez/bluetooth_bluez_unittest.cc +++ b/device/bluetooth/bluez/bluetooth_bluez_unittest.cc
@@ -94,6 +94,14 @@ kBackgroundScanningDeviceFoundTimeout, kBackgroundScanningDeviceLostTimeout, {pattern}); } + +bluez::FakeBluetoothAdvertisementMonitorApplicationServiceProvider* +GetAdvertisementMonitorApplicationManger() { + return static_cast<bluez::FakeBluetoothAdvertisementMonitorManagerClient*>( + bluez::BluezDBusManager::Get() + ->GetBluetoothAdvertisementMonitorManagerClient()) + ->application_provider(); +} #endif // #if BUILDFLAG(IS_CHROMEOS_ASH) namespace bluez { @@ -165,19 +173,63 @@ void OnSessionStarted( device::BluetoothLowEnergyScanSession* scan_session, absl::optional<device::BluetoothLowEnergyScanSession::ErrorCode> - error_code) override {} + error_code) override { + sessions_started_.push_back(std::make_pair(scan_session, error_code)); + } void OnDeviceFound(device::BluetoothLowEnergyScanSession* scan_session, - device::BluetoothDevice* device) override {} + device::BluetoothDevice* device) override { + devices_found_.push_back(std::make_pair(scan_session, device)); + } void OnDeviceLost(device::BluetoothLowEnergyScanSession* scan_session, - device::BluetoothDevice* device) override {} + device::BluetoothDevice* device) override { + devices_lost_.push_back(std::make_pair(scan_session, device)); + } void OnSessionInvalidated( - device::BluetoothLowEnergyScanSession* scan_session) override {} + device::BluetoothLowEnergyScanSession* scan_session) override { + sessions_invalidated_.push_back(scan_session); + } + + const std::vector<std::pair< + device::BluetoothLowEnergyScanSession*, + absl::optional<device::BluetoothLowEnergyScanSession::ErrorCode>>>& + sessions_started() const { + return sessions_started_; + } + + const std::vector<std::pair<device::BluetoothLowEnergyScanSession*, + device::BluetoothDevice*>>& + devices_found() const { + return devices_found_; + } + + const std::vector<std::pair<device::BluetoothLowEnergyScanSession*, + device::BluetoothDevice*>>& + devices_lost() const { + return devices_lost_; + } + + const std::vector<device::BluetoothLowEnergyScanSession*>& + sessions_invalidated() const { + return sessions_invalidated_; + } base::WeakPtr<FakeBluetoothLowEnergyScanSessionDelegate> GetWeakPtr() { return weak_ptr_factory_.GetWeakPtr(); } private: + std::vector<std::pair< + device::BluetoothLowEnergyScanSession*, + absl::optional<device::BluetoothLowEnergyScanSession::ErrorCode>>> + sessions_started_; + std::vector<std::pair<device::BluetoothLowEnergyScanSession*, + device::BluetoothDevice*>> + devices_found_; + std::vector<std::pair<device::BluetoothLowEnergyScanSession*, + device::BluetoothDevice*>> + devices_lost_; + std::vector<device::BluetoothLowEnergyScanSession*> sessions_invalidated_; + base::WeakPtrFactory<FakeBluetoothLowEnergyScanSessionDelegate> weak_ptr_factory_{this}; }; @@ -4657,11 +4709,7 @@ GetAdapter(); FakeBluetoothAdvertisementMonitorApplicationServiceProvider* - application_manager = - static_cast<FakeBluetoothAdvertisementMonitorManagerClient*>( - bluez::BluezDBusManager::Get() - ->GetBluetoothAdvertisementMonitorManagerClient()) - ->application_provider(); + application_manager = GetAdvertisementMonitorApplicationManger(); auto filter = CreateLowEnergyScanFilter(); FakeBluetoothLowEnergyScanSessionDelegate delegate; @@ -4684,11 +4732,7 @@ ASSERT_FALSE(adapter_->IsPresent()); FakeBluetoothAdvertisementMonitorApplicationServiceProvider* - application_manager = - static_cast<FakeBluetoothAdvertisementMonitorManagerClient*>( - bluez::BluezDBusManager::Get() - ->GetBluetoothAdvertisementMonitorManagerClient()) - ->application_provider(); + application_manager = GetAdvertisementMonitorApplicationManger(); auto filter = CreateLowEnergyScanFilter(); @@ -4717,11 +4761,7 @@ fake_bluetooth_adapter_client_->SetPresent(false); FakeBluetoothAdvertisementMonitorApplicationServiceProvider* - application_manager = - static_cast<FakeBluetoothAdvertisementMonitorManagerClient*>( - bluez::BluezDBusManager::Get() - ->GetBluetoothAdvertisementMonitorManagerClient()) - ->application_provider(); + application_manager = GetAdvertisementMonitorApplicationManger(); auto filter = CreateLowEnergyScanFilter(); FakeBluetoothLowEnergyScanSessionDelegate delegate; @@ -4740,6 +4780,144 @@ // becomes present. ASSERT_EQ(1u, application_manager->AdvertisementMonitorsCount()); } + +TEST_F(BluetoothBlueZTest, BluetoothLowEnergyScanSessionBlueZDeviceFound) { + GetAdapter(); + ASSERT_TRUE(adapter_->IsPresent()); + + FakeBluetoothAdvertisementMonitorApplicationServiceProvider* + application_manager = GetAdvertisementMonitorApplicationManger(); + FakeBluetoothLowEnergyScanSessionDelegate delegate; + auto background_scan_session = adapter_->StartLowEnergyScanSession( + CreateLowEnergyScanFilter(), /*delegate=*/delegate.GetWeakPtr()); + + // Check that advertisement monitor was added to d-bus layer. + EXPECT_EQ(1u, application_manager->AdvertisementMonitorsCount()); + + // Get advertisement fake advertisement monitor to forward events to + // BluetoothLowEnergyScanSessionBlueZ. + FakeBluetoothAdvertisementMonitorServiceProvider* advertisement_monitor = + application_manager->GetLastAddedAdvertisementMonitorServiceProvider(); + ASSERT_TRUE(advertisement_monitor); + + // Simulate a device found event. + advertisement_monitor->delegate()->OnDeviceFound( + dbus::ObjectPath(bluez::FakeBluetoothDeviceClient::kPairedDevicePath)); + EXPECT_EQ(1u, delegate.devices_found().size()); + + std::pair<device::BluetoothLowEnergyScanSession*, device::BluetoothDevice*> + devices_found_pair = delegate.devices_found()[0]; + EXPECT_EQ(background_scan_session.get(), devices_found_pair.first); + EXPECT_EQ(adapter_->GetDevice( + bluez::FakeBluetoothDeviceClient::kPairedDeviceAddress), + devices_found_pair.second); +} + +TEST_F(BluetoothBlueZTest, BluetoothLowEnergyScanSessionBlueZDeviceLost) { + GetAdapter(); + ASSERT_TRUE(adapter_->IsPresent()); + + FakeBluetoothAdvertisementMonitorApplicationServiceProvider* + application_manager = GetAdvertisementMonitorApplicationManger(); + FakeBluetoothLowEnergyScanSessionDelegate delegate; + auto background_scan_session = adapter_->StartLowEnergyScanSession( + CreateLowEnergyScanFilter(), /*delegate=*/delegate.GetWeakPtr()); + + // Check that advertisement monitor was added to d-bus layer. + EXPECT_EQ(1u, application_manager->AdvertisementMonitorsCount()); + + // Get advertisement fake advertisement monitor to forward events to + // BluetoothLowEnergyScanSessionBlueZ. + FakeBluetoothAdvertisementMonitorServiceProvider* advertisement_monitor = + application_manager->GetLastAddedAdvertisementMonitorServiceProvider(); + ASSERT_TRUE(advertisement_monitor); + + // Simulate a device lost event. + advertisement_monitor->delegate()->OnDeviceLost( + dbus::ObjectPath(bluez::FakeBluetoothDeviceClient::kPairedDevicePath)); + EXPECT_EQ(1u, delegate.devices_lost().size()); + + std::pair<device::BluetoothLowEnergyScanSession*, device::BluetoothDevice*> + devices_lost_pair = delegate.devices_lost()[0]; + EXPECT_EQ(background_scan_session.get(), devices_lost_pair.first); + EXPECT_EQ(adapter_->GetDevice( + bluez::FakeBluetoothDeviceClient::kPairedDeviceAddress), + devices_lost_pair.second); +} + +TEST_F(BluetoothBlueZTest, + BluetoothLowEnergyScanSessionBlueZStartThenInvalidate) { + GetAdapter(); + ASSERT_TRUE(adapter_->IsPresent()); + + FakeBluetoothAdvertisementMonitorApplicationServiceProvider* + application_manager = GetAdvertisementMonitorApplicationManger(); + FakeBluetoothLowEnergyScanSessionDelegate delegate; + auto background_scan_session = adapter_->StartLowEnergyScanSession( + CreateLowEnergyScanFilter(), /*delegate=*/delegate.GetWeakPtr()); + + // Check that advertisement monitor was added to d-bus layer. + EXPECT_EQ(1u, application_manager->AdvertisementMonitorsCount()); + + // Get advertisement fake advertisement monitor to forward events to + // BluetoothLowEnergyScanSessionBlueZ. + FakeBluetoothAdvertisementMonitorServiceProvider* advertisement_monitor = + application_manager->GetLastAddedAdvertisementMonitorServiceProvider(); + ASSERT_TRUE(advertisement_monitor); + + // Successfully start scan session. + advertisement_monitor->delegate()->OnActivate(); + EXPECT_EQ(1u, delegate.sessions_started().size()); + std::pair<device::BluetoothLowEnergyScanSession*, + absl::optional<device::BluetoothLowEnergyScanSession::ErrorCode>> + session_started_pair = delegate.sessions_started()[0]; + + // Check that the correct scan session is started. + EXPECT_EQ(background_scan_session.get(), session_started_pair.first); + + // Check that there was no error when starting the scan session. + EXPECT_FALSE(session_started_pair.second.has_value()); + + // Invalidate scan session after successful start. + advertisement_monitor->delegate()->OnRelease(); + EXPECT_EQ(1u, delegate.sessions_invalidated().size()); + EXPECT_EQ(background_scan_session.get(), + delegate.sessions_invalidated().front()); +} + +TEST_F(BluetoothBlueZTest, BluetoothLowEnergyScanSessionBlueZFailsToStart) { + GetAdapter(); + ASSERT_TRUE(adapter_->IsPresent()); + + FakeBluetoothAdvertisementMonitorApplicationServiceProvider* + application_manager = GetAdvertisementMonitorApplicationManger(); + FakeBluetoothLowEnergyScanSessionDelegate delegate; + auto background_scan_session = adapter_->StartLowEnergyScanSession( + CreateLowEnergyScanFilter(), /*delegate=*/delegate.GetWeakPtr()); + + // Check that advertisement monitor was added to d-bus layer. + EXPECT_EQ(1u, application_manager->AdvertisementMonitorsCount()); + + // Get advertisement fake advertisement monitor to forward events to + // BluetoothLowEnergyScanSessionBlueZ. + FakeBluetoothAdvertisementMonitorServiceProvider* advertisement_monitor = + application_manager->GetLastAddedAdvertisementMonitorServiceProvider(); + ASSERT_TRUE(advertisement_monitor); + + // Scan session failed to start. + advertisement_monitor->delegate()->OnRelease(); + EXPECT_EQ(1u, delegate.sessions_started().size()); + + std::pair<device::BluetoothLowEnergyScanSession*, + absl::optional<device::BluetoothLowEnergyScanSession::ErrorCode>> + session_started_pair = delegate.sessions_started()[0]; + + // Check that the correct scan session. + EXPECT_EQ(background_scan_session.get(), session_started_pair.first); + + // Check that there was an error indicating failure to start. + EXPECT_TRUE(session_started_pair.second.has_value()); +} #endif } // namespace bluez
diff --git a/device/bluetooth/dbus/fake_bluetooth_advertisement_monitor_application_service_provider.cc b/device/bluetooth/dbus/fake_bluetooth_advertisement_monitor_application_service_provider.cc index d93d6d6..c940962 100644 --- a/device/bluetooth/dbus/fake_bluetooth_advertisement_monitor_application_service_provider.cc +++ b/device/bluetooth/dbus/fake_bluetooth_advertisement_monitor_application_service_provider.cc
@@ -4,8 +4,10 @@ #include "device/bluetooth/dbus/fake_bluetooth_advertisement_monitor_application_service_provider.h" +#include "base/containers/contains.h" #include "device/bluetooth/dbus/bluez_dbus_manager.h" #include "device/bluetooth/dbus/fake_bluetooth_advertisement_monitor_manager_client.h" +#include "device/bluetooth/dbus/fake_bluetooth_advertisement_monitor_service_provider.h" namespace bluez { @@ -28,6 +30,9 @@ void FakeBluetoothAdvertisementMonitorApplicationServiceProvider::AddMonitor( std::unique_ptr<BluetoothAdvertisementMonitorServiceProvider> advertisement_monitor_service_provider) { + last_added_advertisement_monitor_provider_path_ = + advertisement_monitor_service_provider->object_path().value(); + advertisement_monitor_providers_.insert(std::make_pair( advertisement_monitor_service_provider->object_path().value(), std::move(advertisement_monitor_service_provider))); @@ -43,4 +48,18 @@ return advertisement_monitor_providers_.size(); } +FakeBluetoothAdvertisementMonitorServiceProvider* +FakeBluetoothAdvertisementMonitorApplicationServiceProvider:: + GetLastAddedAdvertisementMonitorServiceProvider() { + if (!base::Contains(advertisement_monitor_providers_, + last_added_advertisement_monitor_provider_path_)) { + return nullptr; + } + + return static_cast<FakeBluetoothAdvertisementMonitorServiceProvider*>( + advertisement_monitor_providers_ + [last_added_advertisement_monitor_provider_path_] + .get()); +} + } // namespace bluez
diff --git a/device/bluetooth/dbus/fake_bluetooth_advertisement_monitor_application_service_provider.h b/device/bluetooth/dbus/fake_bluetooth_advertisement_monitor_application_service_provider.h index 6968596..04379cc 100644 --- a/device/bluetooth/dbus/fake_bluetooth_advertisement_monitor_application_service_provider.h +++ b/device/bluetooth/dbus/fake_bluetooth_advertisement_monitor_application_service_provider.h
@@ -40,11 +40,16 @@ size_t AdvertisementMonitorsCount() const; + FakeBluetoothAdvertisementMonitorServiceProvider* + GetLastAddedAdvertisementMonitorServiceProvider(); + private: // Key is the object path of the AdvertisementMonitorServiceProvider std::map<std::string, std::unique_ptr<BluetoothAdvertisementMonitorServiceProvider>> advertisement_monitor_providers_; + + std::string last_added_advertisement_monitor_provider_path_; }; } // namespace bluez
diff --git a/device/bluetooth/dbus/fake_bluetooth_advertisement_monitor_service_provider.h b/device/bluetooth/dbus/fake_bluetooth_advertisement_monitor_service_provider.h index c9323dcb..9ec9609 100644 --- a/device/bluetooth/dbus/fake_bluetooth_advertisement_monitor_service_provider.h +++ b/device/bluetooth/dbus/fake_bluetooth_advertisement_monitor_service_provider.h
@@ -29,6 +29,10 @@ // BluetoothAdvertisementMonitorServiceProvider override: const dbus::ObjectPath& object_path() const override; + BluetoothAdvertisementMonitorServiceProvider::Delegate* delegate() { + return delegate_.get(); + } + private: dbus::ObjectPath object_path_;
diff --git a/docs/clang_sheriffing.md b/docs/clang_sheriffing.md index ce9ee4b..c15297d 100644 --- a/docs/clang_sheriffing.md +++ b/docs/clang_sheriffing.md
@@ -186,7 +186,9 @@ Miscompiles tend to result in crashes, so if you see a test with the CRASHED status, this is probably what you want to do. -1. Bisect object files to find the object with the code that changed. +1. Bisect object files to find the object with the code that changed. LLVM + contains `llvm/utils/rsp_bisect.py` which may be useful for bisecting object + files using an rsp file. 1. Debug it with a traditional debugger ## Linker error
diff --git a/docs/enterprise/policy_pref_mapping_test.md b/docs/enterprise/policy_pref_mapping_test.md index 17a7597..d5fc2c3 100644 --- a/docs/enterprise/policy_pref_mapping_test.md +++ b/docs/enterprise/policy_pref_mapping_test.md
@@ -52,7 +52,7 @@ { ... "IdleAction": { - "os": ["chromeos"], + "os": ["chromeos_ash"], "policy_pref_mapping_tests": [ { "note": "Check default values (no policies set)", @@ -142,7 +142,8 @@ - `win` - `linux` - `mac` -- `chromeos` +- `chromeos_ash` +- `chromeos_lacros` - `android` - `ios` (tested via separate [policy_test_cases.json](https://cs.chromium.org/chromium/src/ios/chrome/test/data/policy/policy_test_cases.json)) @@ -249,7 +250,7 @@ ``` { "${policy_name}[.optionalTestNameSuffix]": { - "os": array<string>, // subset of ["win", "linux", "mac", "chromeos", "android", "ios"] + "os": array<string>, // subset of ["win", "linux", "mac", "chromeos_ash", "chromeos_lacros", "android", "ios"] "official_only": boolean, // optional, defaults to false "can_be_recommended": boolean, // optional, defaults to false "reason_for_missing_test": string // optional, should be only field then
diff --git a/extensions/browser/api/device_permissions_manager.cc b/extensions/browser/api/device_permissions_manager.cc index 6010536..064d4ec 100644 --- a/extensions/browser/api/device_permissions_manager.cc +++ b/extensions/browser/api/device_permissions_manager.cc
@@ -188,13 +188,14 @@ scoped_refptr<DevicePermissionEntry> ReadDevicePermissionEntry( const base::DictionaryValue* entry) { absl::optional<int> vendor_id = entry->FindIntKey(kDeviceVendorId); - if (!vendor_id || vendor_id.value() < 0 || vendor_id.value() > UINT16_MAX) { + if (!vendor_id || vendor_id.value() < 0 || + vendor_id.value() > static_cast<int>(UINT16_MAX)) { return nullptr; } absl::optional<int> product_id = entry->FindIntKey(kDeviceProductId); if (!product_id || product_id.value() < 0 || - product_id.value() > UINT16_MAX) { + product_id.value() > static_cast<int>(UINT16_MAX)) { return nullptr; }
diff --git a/extensions/browser/api/system_cpu/BUILD.gn b/extensions/browser/api/system_cpu/BUILD.gn index 9f907cf..38b7f36 100644 --- a/extensions/browser/api/system_cpu/BUILD.gn +++ b/extensions/browser/api/system_cpu/BUILD.gn
@@ -22,6 +22,10 @@ "//extensions/common/api", ] + if (is_fuchsia) { + sources += [ "cpu_info_provider_fuchsia.cc" ] + } + if (is_mac) { sources += [ "cpu_info_provider_mac.cc" ] }
diff --git a/extensions/browser/api/system_cpu/cpu_info_provider_fuchsia.cc b/extensions/browser/api/system_cpu/cpu_info_provider_fuchsia.cc new file mode 100644 index 0000000..f50885c9 --- /dev/null +++ b/extensions/browser/api/system_cpu/cpu_info_provider_fuchsia.cc
@@ -0,0 +1,17 @@ +// Copyright 2021 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "extensions/browser/api/system_cpu/cpu_info_provider.h" + +namespace extensions { + +bool CpuInfoProvider::QueryCpuTimePerProcessor( + std::vector<api::system_cpu::ProcessorInfo>* infos) { + DCHECK(infos); + // TODO(crbug.com/1233555): Integrate with platform APIs, when available. + NOTIMPLEMENTED_LOG_ONCE(); + return false; +} + +} // namespace extensions
diff --git a/extensions/browser/extension_function_histogram_value.h b/extensions/browser/extension_function_histogram_value.h index 6e74a48..dd8d27fb 100644 --- a/extensions/browser/extension_function_histogram_value.h +++ b/extensions/browser/extension_function_histogram_value.h
@@ -1626,6 +1626,7 @@ AUTOTESTPRIVATE_SETSHELFICONPIN = 1563, SCRIPTING_GETREGISTEREDCONTENTSCRIPTS = 1564, OS_TELEMETRY_GETVPDINFO = 1565, + ACCESSIBILITY_PRIVATE_MAGNIFIERCENTERONPOINT = 1566, // Last entry: Add new entries above, then run: // python tools/metrics/histograms/update_extension_histograms.py ENUM_BOUNDARY
diff --git a/gpu/ipc/service/gpu_init.cc b/gpu/ipc/service/gpu_init.cc index 2b551d53..0ea793136 100644 --- a/gpu/ipc/service/gpu_init.cc +++ b/gpu/ipc/service/gpu_init.cc
@@ -887,15 +887,6 @@ // Histogram GPU.SupportsVulkan and GPU.VulkanVersion were marked as expired. // TODO(magchen): Add back these two histograms here and re-enable them in // histograms.xml when we start Vulkan finch on Windows. - if (!vulkan_use_swiftshader) { - const bool supports_vulkan = !!vulkan_implementation_; - uint32_t vulkan_version = 0; - if (supports_vulkan) { - const auto& vulkan_info = - vulkan_implementation_->GetVulkanInstance()->vulkan_info(); - vulkan_version = vulkan_info.used_api_version; - } - } if (!vulkan_implementation_) return false;
diff --git a/infra/config/generated/commit-queue.cfg b/infra/config/generated/commit-queue.cfg index 90139ca..3bca9f1e1 100644 --- a/infra/config/generated/commit-queue.cfg +++ b/infra/config/generated/commit-queue.cfg
@@ -1225,7 +1225,7 @@ } builders { name: "chromium/try/linux-rel-orchestrator" - experiment_percentage: 20 + experiment_percentage: 100 location_regexp: ".*" location_regexp_exclude: ".+/[+]/docs/.+" location_regexp_exclude: ".+/[+]/infra/config/.+"
diff --git a/infra/config/generated/cq-builders.md b/infra/config/generated/cq-builders.md index 57137e5a..b511b17 100644 --- a/infra/config/generated/cq-builders.md +++ b/infra/config/generated/cq-builders.md
@@ -460,7 +460,7 @@ * [`//services/tracing/.+`](https://cs.chromium.org/chromium/src/services/tracing/) * [linux-rel-orchestrator](https://ci.chromium.org/p/chromium/builders/try/linux-rel-orchestrator) ([definition](https://cs.chromium.org/search?q=package:%5Echromium$+file:/cq.star$+-file:/beta/+-file:/stable/+linux-rel-orchestrator)) ([matching builders](https://cs.chromium.org/search?q=+file:trybots.py+linux-rel-orchestrator)) - * Experiment percentage: 20.0 + * Experiment percentage: 100.0 * [linux-rel-reclient](https://ci.chromium.org/p/chromium/builders/try/linux-rel-reclient) ([definition](https://cs.chromium.org/search?q=package:%5Echromium$+file:/cq.star$+-file:/beta/+-file:/stable/+linux-rel-reclient)) ([matching builders](https://cs.chromium.org/search?q=+file:trybots.py+linux-rel-reclient)) * Experiment percentage: 10.0
diff --git a/infra/config/generated/cr-buildbucket.cfg b/infra/config/generated/cr-buildbucket.cfg index 833b36f..eacdbe9 100644 --- a/infra/config/generated/cr-buildbucket.cfg +++ b/infra/config/generated/cr-buildbucket.cfg
@@ -36272,6 +36272,111 @@ } } builders { + name: "chromeos-amd64-generic-rel (reclient compare)" + swarming_host: "chromium-swarm.appspot.com" + swarming_tags: "vpython:native-python-wrapper" + dimensions: "builderless:1" + dimensions: "cores:8" + dimensions: "cpu:x86-64" + dimensions: "os:Ubuntu-18.04" + dimensions: "pool:luci.chromium.ci" + dimensions: "ssd:0" + exe { + cipd_package: "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build" + cipd_version: "refs/heads/master" + cmd: "luciexe" + } + properties: + '{' + ' "$build/reclient": {' + ' "instance": "rbe-chromium-trusted",' + ' "metrics_project": "chromium-reclient-metrics",' + ' "rewrapper_env": {' + ' "RBE_compare": "true"' + ' }' + ' },' + ' "$kitchen": {' + ' "devshell": true,' + ' "emulate_gce": true,' + ' "git_auth": true' + ' },' + ' "$recipe_engine/isolated": {' + ' "server": "https://isolateserver.appspot.com"' + ' },' + ' "$recipe_engine/resultdb/test_presentation": {' + ' "column_keys": [],' + ' "grouping_keys": [' + ' "status",' + ' "v.test_suite"' + ' ]' + ' },' + ' "builder_group": "chromium.fyi",' + ' "recipe": "chromium"' + '}' + execution_timeout_secs: 36000 + build_numbers: YES + service_account: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com" + experiments { + key: "chromium.resultdb.result_sink" + value: 100 + } + experiments { + key: "chromium.resultdb.result_sink.gtests_local" + value: 100 + } + experiments { + key: "chromium.resultdb.result_sink.junit_tests" + value: 100 + } + experiments { + key: "luci.use_realms" + value: 100 + } + resultdb { + enable: true + bq_exports { + project: "luci-resultdb" + dataset: "chromium" + table: "ci_test_results" + test_results {} + } + bq_exports { + project: "luci-resultdb" + dataset: "chromium" + table: "gpu_ci_test_results" + test_results { + predicate { + test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" + } + } + } + bq_exports { + project: "chrome-luci-data" + dataset: "chromium" + table: "gpu_ci_test_results" + test_results { + predicate { + test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)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/.+" + } + } + } + history_options { + use_invocation_timestamp: true + } + } + description_html: "verify artifacts. removed after the migration. crbug.com/1235218" + } + builders { name: "chromeos-amd64-generic-rel (reclient)" swarming_host: "chromium-swarm.appspot.com" swarming_tags: "vpython:native-python-wrapper" @@ -54156,6 +54261,108 @@ } } builders { + name: "win10-updater-tester-dbg-uac" + swarming_host: "chromium-swarm.appspot.com" + swarming_tags: "vpython:native-python-wrapper" + dimensions: "builderless:1" + dimensions: "cores:8" + dimensions: "cpu:x86-64" + dimensions: "os:Ubuntu-18.04" + dimensions: "pool:luci.chromium.ci" + dimensions: "ssd:0" + exe { + cipd_package: "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build" + cipd_version: "refs/heads/master" + cmd: "luciexe" + } + properties: + '{' + ' "$build/goma": {' + ' "enable_ats": true,' + ' "rpc_extra_params": "?prod",' + ' "server_host": "goma.chromium.org",' + ' "use_luci_auth": true' + ' },' + ' "$kitchen": {' + ' "devshell": true,' + ' "git_auth": true' + ' },' + ' "$recipe_engine/isolated": {' + ' "server": "https://isolateserver.appspot.com"' + ' },' + ' "$recipe_engine/resultdb/test_presentation": {' + ' "column_keys": [],' + ' "grouping_keys": [' + ' "status",' + ' "v.test_suite"' + ' ]' + ' },' + ' "builder_group": "chromium.updater",' + ' "recipe": "chromium"' + '}' + execution_timeout_secs: 10800 + build_numbers: YES + service_account: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com" + experiments { + key: "chromium.resultdb.result_sink" + value: 100 + } + experiments { + key: "chromium.resultdb.result_sink.gtests_local" + value: 100 + } + experiments { + key: "chromium.resultdb.result_sink.junit_tests" + value: 100 + } + experiments { + key: "luci.use_realms" + value: 100 + } + resultdb { + enable: true + bq_exports { + project: "luci-resultdb" + dataset: "chromium" + table: "ci_test_results" + test_results {} + } + bq_exports { + project: "luci-resultdb" + dataset: "chromium" + table: "gpu_ci_test_results" + test_results { + predicate { + test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test[^/]*/.+" + } + } + } + bq_exports { + project: "chrome-luci-data" + dataset: "chromium" + table: "gpu_ci_test_results" + test_results { + predicate { + test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)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/.+" + } + } + } + history_options { + use_invocation_timestamp: true + } + } + } + builders { name: "win10-updater-tester-rel" swarming_host: "chromium-swarm.appspot.com" swarming_tags: "vpython:native-python-wrapper"
diff --git a/infra/config/generated/luci-milo.cfg b/infra/config/generated/luci-milo.cfg index 5089ff2..9a1175f9 100644 --- a/infra/config/generated/luci-milo.cfg +++ b/infra/config/generated/luci-milo.cfg
@@ -6419,6 +6419,11 @@ short_name: "cgc" } builders { + name: "buildbucket/luci.chromium.ci/chromeos-amd64-generic-rel (reclient compare)" + category: "cros x64" + short_name: "cmp" + } + builders { name: "buildbucket/luci.chromium.ci/linux-lacros-version-skew-fyi" category: "default" } @@ -11051,6 +11056,11 @@ short_name: "7" } builders { + name: "buildbucket/luci.chromium.ci/win10-updater-tester-dbg-uac" + category: "debug|win (64)" + short_name: "UAC" + } + builders { name: "buildbucket/luci.chromium.ci/win-updater-builder-dbg" category: "debug|win (64)" short_name: "bld"
diff --git a/infra/config/generated/luci-scheduler.cfg b/infra/config/generated/luci-scheduler.cfg index 7e07bafba..202a4a7 100644 --- a/infra/config/generated/luci-scheduler.cfg +++ b/infra/config/generated/luci-scheduler.cfg
@@ -4946,6 +4946,16 @@ } } job { + id: "chromeos-amd64-generic-rel (reclient compare)" + realm: "ci" + acl_sets: "ci" + buildbucket { + server: "cr-buildbucket.appspot.com" + bucket: "luci.chromium.ci" + builder: "chromeos-amd64-generic-rel (reclient compare)" + } +} +job { id: "chromeos-amd64-generic-rel (reclient)" realm: "ci" acl_sets: "ci" @@ -6987,6 +6997,20 @@ } } job { + id: "win10-updater-tester-dbg-uac" + 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: "luci.chromium.ci" + builder: "win10-updater-tester-dbg-uac" + } +} +job { id: "win10-updater-tester-rel" realm: "ci" acls { @@ -7401,6 +7425,7 @@ triggers: "chromeos-amd64-generic-lacros-dbg" triggers: "chromeos-amd64-generic-rel" triggers: "chromeos-amd64-generic-rel (goma cache silo)" + triggers: "chromeos-amd64-generic-rel (reclient compare)" triggers: "chromeos-amd64-generic-rel (reclient)" triggers: "chromeos-amd64-generic-rel-dchecks" triggers: "chromeos-arm-generic-dbg"
diff --git a/infra/config/subprojects/chromium/ci.star b/infra/config/subprojects/chromium/ci.star index 69f522e..54d5e782 100644 --- a/infra/config/subprojects/chromium/ci.star +++ b/infra/config/subprojects/chromium/ci.star
@@ -3757,6 +3757,16 @@ ) ci.updater_builder( + name = "win10-updater-tester-dbg-uac", + console_view_entry = consoles.console_view_entry( + category = "debug|win (64)", + short_name = "UAC", + ), + tree_closing = False, + triggered_by = ["win-updater-builder-dbg"], +) + +ci.updater_builder( name = "win10-updater-tester-rel", console_view_entry = consoles.console_view_entry( category = "release|win (64)", @@ -4221,6 +4231,22 @@ reclient_rewrapper_env = {"RBE_cache_silo": "chromeos-amd64-generic-rel (reclient)"}, ) +# TODO(crbug.com/1235218): remove after the migration. +ci.fyi_builder( + name = "chromeos-amd64-generic-rel (reclient compare)", + console_view_entry = consoles.console_view_entry( + category = "cros x64", + short_name = "cmp", + ), + goma_backend = None, + reclient_instance = rbe_instance.DEFAULT, + configure_kitchen = True, + kitchen_emulate_gce = True, + os = os.LINUX_BIONIC_REMOVE, + reclient_rewrapper_env = {"RBE_compare": "true"}, + description_html = "verify artifacts. removed after the migration. crbug.com/1235218", +) + ci.fyi_builder( name = "lacros-amd64-generic-rel (goma cache silo)", console_view_entry = consoles.console_view_entry(
diff --git a/infra/config/subprojects/chromium/try.star b/infra/config/subprojects/chromium/try.star index 53ccc6b0..594c58a7 100644 --- a/infra/config/subprojects/chromium/try.star +++ b/infra/config/subprojects/chromium/try.star
@@ -1289,7 +1289,7 @@ }, service_account = "chromium-mini-orchestrator@chops-service-accounts.iam.gserviceaccount.com", tryjob = try_.job( - experiment_percentage = 20, + experiment_percentage = 100, ), )
diff --git a/ios/chrome/app/application_delegate/metrics_mediator.mm b/ios/chrome/app/application_delegate/metrics_mediator.mm index 1f641ad9..f064d10 100644 --- a/ios/chrome/app/application_delegate/metrics_mediator.mm +++ b/ios/chrome/app/application_delegate/metrics_mediator.mm
@@ -105,6 +105,10 @@ @"IOS.CredentialExtension.FetchPasswordFailure", app_group::kCredentialExtensionFetchPasswordNilArgumentCount : @"IOS.CredentialExtension.FetchPasswordNilArgument", + app_group::kCredentialExtensionKeychainSavePasswordFailureCount : + @"IOS.CredentialExtension.KeychainSavePasswordFailureCount", + app_group::kCredentialExtensionSaveCredentialFailureCount : + @"IOS.CredentialExtension.SaveCredentialFailureCount", }; NSUserDefaults* shared_defaults = app_group::GetGroupUserDefaults();
diff --git a/ios/chrome/app/strings/ios_chromium_strings.grd b/ios/chrome/app/strings/ios_chromium_strings.grd index 256d668..5619edb6 100644 --- a/ios/chrome/app/strings/ios_chromium_strings.grd +++ b/ios/chrome/app/strings/ios_chromium_strings.grd
@@ -248,7 +248,7 @@ Help improve Chromium by sending usage statistics and crash reports to Google </message> <message name="IDS_IOS_FIRST_RUN_WELCOME_SCREEN_TITLE_ENTERPRISE" desc="The title of the welcome screen presented to the user on First Run when the browser is managed [iOS only]"> - Get more done with Chromium + Get More Done with Chromium </message> <message name="IDS_IOS_FIRST_RUN_WELCOME_SCREEN_SUBTITLE" desc="The subtitle of the welcome screen presented to the user on First Run [iOS only]"> Get more done with a simple, secure and faster-than-ever Chromium
diff --git a/ios/chrome/app/strings/ios_chromium_strings_grd/IDS_IOS_FIRST_RUN_WELCOME_SCREEN_TITLE_ENTERPRISE.png.sha1 b/ios/chrome/app/strings/ios_chromium_strings_grd/IDS_IOS_FIRST_RUN_WELCOME_SCREEN_TITLE_ENTERPRISE.png.sha1 index cdcb0af..acf44f0 100644 --- a/ios/chrome/app/strings/ios_chromium_strings_grd/IDS_IOS_FIRST_RUN_WELCOME_SCREEN_TITLE_ENTERPRISE.png.sha1 +++ b/ios/chrome/app/strings/ios_chromium_strings_grd/IDS_IOS_FIRST_RUN_WELCOME_SCREEN_TITLE_ENTERPRISE.png.sha1
@@ -1 +1 @@ -97fc733ecba3665821f12569c5ebb9f8648ef94d \ No newline at end of file +fceec4744069440900440e6e9072384ce6275156 \ No newline at end of file
diff --git a/ios/chrome/app/strings/ios_google_chrome_strings.grd b/ios/chrome/app/strings/ios_google_chrome_strings.grd index 149ee98..5a7fbdc 100644 --- a/ios/chrome/app/strings/ios_google_chrome_strings.grd +++ b/ios/chrome/app/strings/ios_google_chrome_strings.grd
@@ -248,7 +248,7 @@ Help improve Chrome by sending usage statistics and crash reports to Google </message> <message name="IDS_IOS_FIRST_RUN_WELCOME_SCREEN_TITLE_ENTERPRISE" desc="The title of the welcome screen presented to the user on First Run when the browser is managed [iOS only]"> - Get more done with Chrome + Get More Done with Chrome </message> <message name="IDS_IOS_FIRST_RUN_WELCOME_SCREEN_SUBTITLE" desc="The subtitle of the welcome screen presented to the user on First Run [iOS only]"> Get more done with a simple, secure and faster-than-ever Google Chrome
diff --git a/ios/chrome/app/strings/ios_google_chrome_strings_grd/IDS_IOS_FIRST_RUN_WELCOME_SCREEN_TITLE_ENTERPRISE.png.sha1 b/ios/chrome/app/strings/ios_google_chrome_strings_grd/IDS_IOS_FIRST_RUN_WELCOME_SCREEN_TITLE_ENTERPRISE.png.sha1 index 818c952..e4c3a412 100644 --- a/ios/chrome/app/strings/ios_google_chrome_strings_grd/IDS_IOS_FIRST_RUN_WELCOME_SCREEN_TITLE_ENTERPRISE.png.sha1 +++ b/ios/chrome/app/strings/ios_google_chrome_strings_grd/IDS_IOS_FIRST_RUN_WELCOME_SCREEN_TITLE_ENTERPRISE.png.sha1
@@ -1 +1 @@ -66dcda3a980a4013a303616b838e00b684b2e50b \ No newline at end of file +d3941ea3bef92b80be1f8467cf2752cfa77c8294 \ No newline at end of file
diff --git a/ios/chrome/app/strings/ios_strings.grd b/ios/chrome/app/strings/ios_strings.grd index 0786088..c01896c 100644 --- a/ios/chrome/app/strings/ios_strings.grd +++ b/ios/chrome/app/strings/ios_strings.grd
@@ -931,10 +931,10 @@ By continuing, you agree to the <ph name="BEGIN_LINK">BEGIN_LINK</ph>Terms of Service<ph name="END_LINK">END_LINK</ph> </message> <message name="IDS_IOS_FIRST_RUN_WELCOME_SCREEN_TITLE_IPAD" desc="The title of the welcome screen presented to the user on First Run when on iPad [iOS only]"> - Built for your iPad + Built for Your iPad </message> <message name="IDS_IOS_FIRST_RUN_WELCOME_SCREEN_TITLE_IPHONE" desc="The title of the welcome screen presented to the user on First Run when on iPhone [iOS only]"> - Built for your iPhone + Built for Your iPhone </message> <message name="IDS_IOS_FIRST_RUN_WELCOME_SCREEN_MANAGED" desc="The disclaimer that the browser is managed on the welcome screen presented to the user on First Run when the browser is managed [iOS only]"> Your administrator has control over Chrome and can access its data
diff --git a/ios/chrome/app/strings/ios_strings_grd/IDS_IOS_FIRST_RUN_WELCOME_SCREEN_TITLE_IPAD.png.sha1 b/ios/chrome/app/strings/ios_strings_grd/IDS_IOS_FIRST_RUN_WELCOME_SCREEN_TITLE_IPAD.png.sha1 index 164f403..fdfbc5f 100644 --- a/ios/chrome/app/strings/ios_strings_grd/IDS_IOS_FIRST_RUN_WELCOME_SCREEN_TITLE_IPAD.png.sha1 +++ b/ios/chrome/app/strings/ios_strings_grd/IDS_IOS_FIRST_RUN_WELCOME_SCREEN_TITLE_IPAD.png.sha1
@@ -1 +1 @@ -b79993768dba15db65f754488e9049e214d3becb \ No newline at end of file +c5634dbef5cf527cba81471fb7d32d605a5b3576 \ No newline at end of file
diff --git a/ios/chrome/app/strings/ios_strings_grd/IDS_IOS_FIRST_RUN_WELCOME_SCREEN_TITLE_IPHONE.png.sha1 b/ios/chrome/app/strings/ios_strings_grd/IDS_IOS_FIRST_RUN_WELCOME_SCREEN_TITLE_IPHONE.png.sha1 index 9dc1fcd..86a157d 100644 --- a/ios/chrome/app/strings/ios_strings_grd/IDS_IOS_FIRST_RUN_WELCOME_SCREEN_TITLE_IPHONE.png.sha1 +++ b/ios/chrome/app/strings/ios_strings_grd/IDS_IOS_FIRST_RUN_WELCOME_SCREEN_TITLE_IPHONE.png.sha1
@@ -1 +1 @@ -de500fd36939845095fd3c3a211584f57bc5fa97 \ No newline at end of file +f7364a141c612cf8e506b773716e52b42d5d673a \ No newline at end of file
diff --git a/ios/chrome/browser/browser_state/browser_state_info_cache.cc b/ios/chrome/browser/browser_state/browser_state_info_cache.cc index d633e4d..42e982e02 100644 --- a/ios/chrome/browser/browser_state/browser_state_info_cache.cc +++ b/ios/chrome/browser/browser_state/browser_state_info_cache.cc
@@ -82,7 +82,7 @@ DictionaryPrefUpdate update(prefs_, prefs::kBrowserStateInfoCache); base::DictionaryValue* cache = update.Get(); std::string key = CacheKeyFromBrowserStatePath(browser_state_path); - cache->Remove(key, nullptr); + cache->RemoveKey(key); sorted_keys_.erase(std::find(sorted_keys_.begin(), sorted_keys_.end(), key)); for (auto& observer : observer_list_)
diff --git a/ios/chrome/browser/crash_report/crash_report_multi_parameter.mm b/ios/chrome/browser/crash_report/crash_report_multi_parameter.mm index f2f8704..bbc4a78 100644 --- a/ios/chrome/browser/crash_report/crash_report_multi_parameter.mm +++ b/ios/chrome/browser/crash_report/crash_report_multi_parameter.mm
@@ -39,7 +39,7 @@ } - (void)removeValue:(NSString*)key { - _dictionary->Remove(base::SysNSStringToUTF8(key).c_str(), nullptr); + _dictionary->RemoveKey(base::SysNSStringToUTF8(key).c_str()); [self updateCrashReport]; } @@ -64,7 +64,7 @@ std::string utf8_string = base::SysNSStringToUTF8(key); if (_dictionary->GetInteger(utf8_string.c_str(), &value)) { if (value <= 1) { - _dictionary->Remove(utf8_string.c_str(), nullptr); + _dictionary->RemoveKey(utf8_string.c_str()); } else { _dictionary->SetInteger(utf8_string.c_str(), value - 1); }
diff --git a/ios/chrome/browser/optimization_guide/BUILD.gn b/ios/chrome/browser/optimization_guide/BUILD.gn index bf67f24..1060f532 100644 --- a/ios/chrome/browser/optimization_guide/BUILD.gn +++ b/ios/chrome/browser/optimization_guide/BUILD.gn
@@ -15,7 +15,6 @@ "//components/keyed_service/ios", "//ios/chrome/browser", "//ios/chrome/browser/browser_state", - "//ios/chrome/browser/google", "//ios/web", ] }
diff --git a/ios/chrome/browser/passwords/ios_chrome_password_check_manager_unittest.mm b/ios/chrome/browser/passwords/ios_chrome_password_check_manager_unittest.mm index 316f637..153f6a4 100644 --- a/ios/chrome/browser/passwords/ios_chrome_password_check_manager_unittest.mm +++ b/ios/chrome/browser/passwords/ios_chrome_password_check_manager_unittest.mm
@@ -16,9 +16,11 @@ #include "base/strings/string_util.h" #include "base/strings/utf_string_conversions.h" #include "base/test/bind.h" +#include "base/time/time.h" #include "components/password_manager/core/browser/bulk_leak_check_service.h" #include "components/password_manager/core/browser/mock_bulk_leak_check_service.h" #include "components/password_manager/core/browser/mock_password_store.h" +#include "components/password_manager/core/browser/password_form.h" #include "components/password_manager/core/browser/password_manager_test_utils.h" #include "components/password_manager/core/browser/test_password_store.h" #include "components/password_manager/core/common/password_manager_pref_names.h" @@ -104,16 +106,6 @@ }))); } -InsecureCredential MakeInsecureCredential( - base::StringPiece signon_realm, - base::StringPiece16 username, - base::TimeDelta time_since_creation = base::TimeDelta(), - InsecureType compromise_type = InsecureType::kLeaked) { - return InsecureCredential(std::string(signon_realm), std::u16string(username), - base::Time::Now() - time_since_creation, - compromise_type, password_manager::IsMuted(false)); -} - PasswordForm MakeSavedPassword( base::StringPiece signon_realm, base::StringPiece16 username, @@ -133,6 +125,15 @@ return form; } +void AddIssueToForm(PasswordForm* form, + InsecureType type = InsecureType::kLeaked, + base::TimeDelta time_since_creation = base::TimeDelta()) { + form->password_issues->insert_or_assign( + type, password_manager::InsecurityMetadata( + base::Time::Now() - time_since_creation, + password_manager::IsMuted(false))); +} + // Creates matcher for a given compromised credential auto ExpectCompromisedCredential(const std::string& signon_realm, const base::StringPiece16& username, @@ -194,12 +195,11 @@ // Sets up the password store with a password and compromised // credential. Verifies that the result is matching expectation. TEST_F(IOSChromePasswordCheckManagerTest, GetCompromisedCredentials) { - store().AddLogin(MakeSavedPassword(kExampleCom, kUsername116)); - - store().AddInsecureCredential(MakeInsecureCredential( - kExampleCom, kUsername116, base::TimeDelta::FromMinutes(1), - InsecureType::kLeaked)); + PasswordForm form = MakeSavedPassword(kExampleCom, kUsername116); + AddIssueToForm(&form, InsecureType::kLeaked, base::TimeDelta::FromMinutes(1)); + store().AddLogin(form); RunUntilIdle(); + EXPECT_THAT(manager().GetCompromisedCredentials(), ElementsAre(ExpectCompromisedCredential( kExampleCom, kUsername116, kPassword116, @@ -277,9 +277,10 @@ // Tests whether adding and removing an observer works as expected. TEST_F(IOSChromePasswordCheckManagerTest, NotifyObserversAboutCompromisedCredentialChanges) { - store().AddLogin(MakeSavedPassword(kExampleCom, kUsername116)); - + PasswordForm form = MakeSavedPassword(kExampleCom, kUsername116); + store().AddLogin(form); RunUntilIdle(); + StrictMock<MockPasswordCheckManagerObserver> observer; manager().AddObserver(&observer); @@ -291,16 +292,16 @@ kExampleCom, kUsername116, kPassword116, base::TimeDelta::FromMinutes(1), InsecureCredentialTypeFlags::kCredentialLeaked)))); - store().AddInsecureCredential(MakeInsecureCredential( - kExampleCom, kUsername116, base::TimeDelta::FromMinutes(1))); + AddIssueToForm(&form, InsecureType::kLeaked, base::TimeDelta::FromMinutes(1)); + store().UpdateLogin(form); RunUntilIdle(); // After an observer is removed it should no longer receive notifications. manager().RemoveObserver(&observer); EXPECT_CALL(observer, CompromisedCredentialsChanged).Times(0); - store().AddInsecureCredential(MakeInsecureCredential( - kExampleCom, kUsername116, base::TimeDelta::FromMinutes(1), - InsecureType::kPhished)); + AddIssueToForm(&form, InsecureType::kPhished, + base::TimeDelta::FromMinutes(1)); + store().UpdateLogin(form); RunUntilIdle(); } @@ -330,13 +331,10 @@ // Tests password deleted. TEST_F(IOSChromePasswordCheckManagerTest, DeletePassword) { PasswordForm form = MakeSavedPassword(kExampleCom, kUsername116); + AddIssueToForm(&form, InsecureType::kLeaked, base::TimeDelta::FromMinutes(1)); store().AddLogin(form); RunUntilIdle(); - store().AddInsecureCredential(MakeInsecureCredential( - kExampleCom, kUsername116, base::TimeDelta::FromMinutes(1), - InsecureType::kLeaked)); - RunUntilIdle(); EXPECT_THAT(manager().GetCompromisedCredentials(), ElementsAre(ExpectCompromisedCredential( kExampleCom, kUsername116, kPassword116, @@ -413,14 +411,10 @@ // Tests compromised password value is updated properly. TEST_F(IOSChromePasswordCheckManagerTest, EditCompromisedPassword) { PasswordForm form = MakeSavedPassword(kExampleCom, kUsername116); + AddIssueToForm(&form, InsecureType::kLeaked, base::TimeDelta::FromMinutes(1)); store().AddLogin(form); RunUntilIdle(); - store().AddInsecureCredential(MakeInsecureCredential( - kExampleCom, kUsername116, base::TimeDelta::FromMinutes(1), - InsecureType::kLeaked)); - RunUntilIdle(); - manager().EditCompromisedPasswordForm(form, kPassword2); RunUntilIdle();
diff --git a/ios/chrome/browser/ui/authentication/BUILD.gn b/ios/chrome/browser/ui/authentication/BUILD.gn index a60df3b..aa98765 100644 --- a/ios/chrome/browser/ui/authentication/BUILD.gn +++ b/ios/chrome/browser/ui/authentication/BUILD.gn
@@ -230,6 +230,7 @@ "//ios/chrome/browser/ui/authentication/unified_consent:constants", "//ios/chrome/browser/ui/authentication/views:views_constants", "//ios/chrome/browser/ui/recent_tabs:recent_tabs_ui_constants", + "//ios/chrome/browser/ui/settings:constants", "//ios/chrome/browser/ui/settings/google_services:constants", "//ios/chrome/test:eg_test_support+eg2", "//ios/chrome/test/earl_grey:eg_test_support+eg2",
diff --git a/ios/chrome/browser/ui/authentication/signin/advanced_settings_signin/advanced_settings_signin_egtest.mm b/ios/chrome/browser/ui/authentication/signin/advanced_settings_signin/advanced_settings_signin_egtest.mm index 27b7b8e2..90dd4962 100644 --- a/ios/chrome/browser/ui/authentication/signin/advanced_settings_signin/advanced_settings_signin_egtest.mm +++ b/ios/chrome/browser/ui/authentication/signin/advanced_settings_signin/advanced_settings_signin_egtest.mm
@@ -3,6 +3,7 @@ // found in the LICENSE file. #include "base/ios/ios_util.h" +#import "base/test/ios/wait_util.h" #import "components/signin/public/base/account_consistency_method.h" #import "ios/chrome/browser/ui/authentication/signin/advanced_settings_signin/advanced_settings_signin_constants.h" #import "ios/chrome/browser/ui/authentication/signin_earl_grey.h" @@ -34,6 +35,8 @@ using chrome_test_util::SyncSettingsConfirmButton; using l10n_util::GetNSString; using testing::ButtonWithAccessibilityLabel; +using base::test::ios::WaitUntilConditionOrTimeout; +using base::test::ios::kWaitForUIElementTimeout; namespace { @@ -214,10 +217,18 @@ // Test the sync error message is visible. [[EarlGrey selectElementWithMatcher:GoogleServicesSettingsButton()] performAction:grey_tap()]; - [[EarlGrey - selectElementWithMatcher:grey_accessibilityLabel(l10n_util::GetNSString( - IDS_IOS_SYNC_ERROR_TITLE))] - assertWithMatcher:grey_sufficientlyVisible()]; + + ConditionBlock condition = ^{ + NSError* error = nil; + [[EarlGrey + selectElementWithMatcher:grey_accessibilityLabel(l10n_util::GetNSString( + IDS_IOS_SYNC_ERROR_TITLE))] + assertWithMatcher:grey_sufficientlyVisible() + error:&error]; + return error == nil; + }; + GREYAssert(WaitUntilConditionOrTimeout(kWaitForUIElementTimeout, condition), + @"Could not find the Sync Error text"); } // Verifies that advanced sign-in shows an alert dialog when being swiped to
diff --git a/ios/chrome/browser/ui/authentication/signin/signin_coordinator_mice_egtest.mm b/ios/chrome/browser/ui/authentication/signin/signin_coordinator_mice_egtest.mm index 6f5b364d..b2f2c0fe 100644 --- a/ios/chrome/browser/ui/authentication/signin/signin_coordinator_mice_egtest.mm +++ b/ios/chrome/browser/ui/authentication/signin/signin_coordinator_mice_egtest.mm
@@ -9,6 +9,7 @@ #import "ios/chrome/browser/ui/authentication/signin_earl_grey.h" #import "ios/chrome/browser/ui/authentication/signin_earl_grey_ui.h" #import "ios/chrome/browser/ui/content_suggestions/content_suggestions_feature.h" +#import "ios/chrome/browser/ui/settings/google_services/google_services_settings_constants.h" #import "ios/chrome/browser/ui/settings/google_services/manage_sync_settings_constants.h" #import "ios/chrome/browser/ui/settings/settings_table_view_controller_constants.h" #include "ios/chrome/grit/ios_strings.h" @@ -35,6 +36,10 @@ using chrome_test_util::SettingsMenuPrivacyButton; using chrome_test_util::SettingsCollectionView; +namespace { +NSString* const kPassphrase = @"hello"; +} + // Sign-in interaction tests that work with |kMobileIdentityConsistency| // enabled. @interface SigninCoordinatorMICETestCase : ChromeTestCase @@ -239,4 +244,44 @@ [SigninEarlGrey verifySignedOut]; } +// Tests that Sync is on when introducing passphrase from settings, after +// logging in. +- (void)testSyncOnWhenPassphraseIntroducedAfterSignIn { + [ChromeEarlGrey addBookmarkWithSyncPassphrase:kPassphrase]; + FakeChromeIdentity* fakeIdentity = [SigninEarlGrey fakeIdentity1]; + [SigninEarlGrey addFakeIdentity:fakeIdentity]; + + [ChromeEarlGreyUI openSettingsMenu]; + [ChromeEarlGreyUI tapSettingsMenuButton:PrimarySignInButton()]; + [SigninEarlGreyUI tapSigninConfirmationDialog]; + + [[EarlGrey + selectElementWithMatcher: + grey_allOf(grey_accessibilityValue(l10n_util::GetNSString( + IDS_IOS_SYNC_ENCRYPTION_DESCRIPTION)), + grey_accessibilityID(kSettingsGoogleSyncAndServicesCellId), + nil)] performAction:grey_tap()]; + + // Scroll to bottom of Manage Sync Settings, if necessary. + [[EarlGrey selectElementWithMatcher: + grey_allOf(grey_accessibilityID( + kManageSyncTableViewAccessibilityIdentifier), + grey_sufficientlyVisible(), nil)] + performAction:grey_scrollToContentEdge(kGREYContentEdgeBottom)]; + + // Select Encryption item. + [[EarlGrey selectElementWithMatcher:ButtonWithAccessibilityLabelId( + IDS_IOS_MANAGE_SYNC_ENCRYPTION)] + performAction:grey_tap()]; + + // Type and submit the sync passphrase. + [SigninEarlGreyUI submitSyncPassphrase:kPassphrase]; + + [[EarlGrey selectElementWithMatcher:SettingsDoneButton()] + performAction:grey_tap()]; + [ChromeEarlGreyUI openSettingsMenu]; + + // Check Sync On label is visible. + [SigninEarlGrey verifySyncUIEnabled:YES]; +} @end
diff --git a/ios/chrome/browser/ui/authentication/signin_earl_grey.h b/ios/chrome/browser/ui/authentication/signin_earl_grey.h index 78a7202..138ba79f 100644 --- a/ios/chrome/browser/ui/authentication/signin_earl_grey.h +++ b/ios/chrome/browser/ui/authentication/signin_earl_grey.h
@@ -54,6 +54,9 @@ // Induces a GREYAssert if there are no signed-in identities. - (void)verifyAuthenticated; +// Induces a GREYAssert if the Sync state does not match |enabled|. +- (void)verifySyncUIEnabled:(BOOL)enabled; + // Triggers the reauth dialog. This is done through SigninEarlGreyAppInterface, // with ShowSigninCommand sent to SceneController, without any UI interaction // to open the dialog.
diff --git a/ios/chrome/browser/ui/authentication/signin_earl_grey.mm b/ios/chrome/browser/ui/authentication/signin_earl_grey.mm index b4fa80f3..42b41c9 100644 --- a/ios/chrome/browser/ui/authentication/signin_earl_grey.mm +++ b/ios/chrome/browser/ui/authentication/signin_earl_grey.mm
@@ -6,8 +6,11 @@ #import "base/test/ios/wait_util.h" #import "ios/chrome/browser/ui/authentication/signin_earl_grey_app_interface.h" +#import "ios/chrome/browser/ui/settings/settings_table_view_controller_constants.h" +#include "ios/chrome/grit/ios_strings.h" #import "ios/public/provider/chrome/browser/signin/fake_chrome_identity.h" #import "ios/testing/earl_grey/earl_grey_test.h" +#include "ui/base/l10n/l10n_util_mac.h" #if !defined(__has_feature) || !__has_feature(objc_arc) #error "This file requires ARC support." @@ -96,6 +99,19 @@ @"User is not signed in"); } +- (void)verifySyncUIEnabled:(BOOL)enabled { + NSString* accessibilityString = + enabled ? l10n_util::GetNSString(IDS_IOS_SETTING_ON) + : l10n_util::GetNSString(IDS_IOS_SETTING_OFF); + + id<GREYMatcher> GetSettingsGoogleSyncAndServicesCellMatcher = grey_allOf( + grey_accessibilityValue(accessibilityString), + grey_accessibilityID(kSettingsGoogleSyncAndServicesCellId), nil); + + [[EarlGrey + selectElementWithMatcher:GetSettingsGoogleSyncAndServicesCellMatcher] + assertWithMatcher:grey_sufficientlyVisible()]; +} - (void)triggerReauthDialogWithFakeIdentity:(FakeChromeIdentity*)identity { [SigninEarlGreyAppInterface triggerReauthDialogWithFakeIdentity:identity]; GREYWaitForAppToIdle(@"App failed to idle");
diff --git a/ios/chrome/browser/ui/authentication/signin_earl_grey_ui.h b/ios/chrome/browser/ui/authentication/signin_earl_grey_ui.h index 2b5aab5..5588a1c 100644 --- a/ios/chrome/browser/ui/authentication/signin_earl_grey_ui.h +++ b/ios/chrome/browser/ui/authentication/signin_earl_grey_ui.h
@@ -100,6 +100,9 @@ // Checks that the web sign-in consistency sheet visibility matches |isVisible|. + (void)verifyWebSigninIsVisible:(BOOL)isVisible; +// Submits encryption passphrase, if the user is on the Encryption page. ++ (void)submitSyncPassphrase:(NSString*)passphrase; + @end #endif // IOS_CHROME_BROWSER_UI_AUTHENTICATION_SIGNIN_EARL_GREY_UI_H_
diff --git a/ios/chrome/browser/ui/authentication/signin_earl_grey_ui.mm b/ios/chrome/browser/ui/authentication/signin_earl_grey_ui.mm index 760eb14..e4564ea 100644 --- a/ios/chrome/browser/ui/authentication/signin_earl_grey_ui.mm +++ b/ios/chrome/browser/ui/authentication/signin_earl_grey_ui.mm
@@ -15,6 +15,7 @@ #import "ios/chrome/browser/ui/authentication/views/views_constants.h" #import "ios/chrome/browser/ui/recent_tabs/recent_tabs_constants.h" #import "ios/chrome/browser/ui/settings/google_services/accounts_table_view_controller_constants.h" +#import "ios/chrome/browser/ui/settings/google_services/google_services_settings_constants.h" #include "ios/chrome/grit/ios_strings.h" #import "ios/chrome/test/earl_grey/chrome_earl_grey.h" #import "ios/chrome/test/earl_grey/chrome_earl_grey_ui.h" @@ -315,6 +316,20 @@ assertWithMatcher:visibilityMatcher]; } ++ (void)submitSyncPassphrase:(NSString*)passphrase { + [[EarlGrey selectElementWithMatcher: + grey_accessibilityID( + kSyncEncryptionPassphraseTextFieldAccessibilityIdentifier)] + performAction:grey_typeText(passphrase)]; + + [[EarlGrey + selectElementWithMatcher:grey_allOf( + grey_kindOfClassName(@"_UIButtonBarButton"), + ButtonWithAccessibilityLabel( + l10n_util::GetNSString( + IDS_IOS_SYNC_DECRYPT_BUTTON)), + nil)] performAction:grey_tap()]; +} #pragma mark - Private + (void)signOutWithButton:(id<GREYMatcher>)buttonMatcher
diff --git a/ios/chrome/browser/ui/browser_view/browser_view_controller.mm b/ios/chrome/browser/ui/browser_view/browser_view_controller.mm index 4cce1cd..7fb7478 100644 --- a/ios/chrome/browser/ui/browser_view/browser_view_controller.mm +++ b/ios/chrome/browser/ui/browser_view/browser_view_controller.mm
@@ -3778,17 +3778,20 @@ if (web::UrlHasWebScheme(link)) { // Open in New Tab. + UrlLoadParams loadParams = UrlLoadParams::InNewTab(link); + loadParams.SetInBackground(YES); + loadParams.in_incognito = self.isOffTheRecord; + loadParams.append_to = kCurrentTab; + loadParams.web_params.referrer = referrer; + loadParams.origin_point = [params.view convertPoint:params.location + toView:nil]; UIAction* openNewTab = [actionFactory actionToOpenInNewTabWithBlock:^{ BrowserViewController* strongSelf = weakSelf; if (!strongSelf) return; - UrlLoadParams params = UrlLoadParams::InNewTab(link); - params.SetInBackground(YES); - params.in_incognito = strongSelf.isOffTheRecord; - params.append_to = kCurrentTab; - UrlLoadingBrowserAgent::FromBrowser(strongSelf.browser)->Load(params); + UrlLoadingBrowserAgent::FromBrowser(strongSelf.browser) + ->Load(loadParams); }]; - [menuElements addObject:openNewTab]; if (!_isOffTheRecord) {
diff --git a/ios/chrome/browser/ui/browser_view/hider/browser_view_hider_view_controller.mm b/ios/chrome/browser/ui/browser_view/hider/browser_view_hider_view_controller.mm index 4515f37..58d8bd5 100644 --- a/ios/chrome/browser/ui/browser_view/hider/browser_view_hider_view_controller.mm +++ b/ios/chrome/browser/ui/browser_view/hider/browser_view_hider_view_controller.mm
@@ -45,7 +45,7 @@ self.steadyView.translatesAutoresizingMaskIntoConstraints = NO; [self.view addSubview:self.steadyView]; self.steadyView.colorScheme = - [LocationBarSteadyViewColorScheme incognitoScheme]; + [LocationBarSteadyViewColorScheme standardScheme]; self.steadyView.locationButton.enabled = NO; }
diff --git a/ios/chrome/browser/ui/first_run/signin/signin_screen_view_controller.mm b/ios/chrome/browser/ui/first_run/signin/signin_screen_view_controller.mm index 58d92974..2eef5c7b 100644 --- a/ios/chrome/browser/ui/first_run/signin/signin_screen_view_controller.mm +++ b/ios/chrome/browser/ui/first_run/signin/signin_screen_view_controller.mm
@@ -19,6 +19,7 @@ namespace { // Width of the identity control if nothing is contraining it. const CGFloat kIdentityControlMaxWidth = 327; +const CGFloat kIdentityTopMargin = 16; } // namespace @interface SigninScreenViewController () @@ -62,7 +63,8 @@ [NSLayoutConstraint activateConstraints:@[ [self.identityControl.topAnchor - constraintEqualToAnchor:self.specificContentView.topAnchor], + constraintEqualToAnchor:self.specificContentView.topAnchor + constant:kIdentityTopMargin], [self.identityControl.centerXAnchor constraintEqualToAnchor:self.specificContentView.centerXAnchor], [self.identityControl.widthAnchor
diff --git a/ios/chrome/browser/ui/location_bar/location_bar_steady_view.h b/ios/chrome/browser/ui/location_bar/location_bar_steady_view.h index 9c4f046..60ff89a 100644 --- a/ios/chrome/browser/ui/location_bar/location_bar_steady_view.h +++ b/ios/chrome/browser/ui/location_bar/location_bar_steady_view.h
@@ -18,7 +18,6 @@ @property(nonatomic, strong) UIColor* trailingButtonColor; + (LocationBarSteadyViewColorScheme*)standardScheme; -+ (LocationBarSteadyViewColorScheme*)incognitoScheme; @end
diff --git a/ios/chrome/browser/ui/location_bar/location_bar_steady_view.mm b/ios/chrome/browser/ui/location_bar/location_bar_steady_view.mm index def7ec8..51a60ef0 100644 --- a/ios/chrome/browser/ui/location_bar/location_bar_steady_view.mm +++ b/ios/chrome/browser/ui/location_bar/location_bar_steady_view.mm
@@ -100,20 +100,6 @@ return scheme; } -+ (instancetype)incognitoScheme { - LocationBarSteadyViewColorScheme* scheme = - [[LocationBarSteadyViewColorScheme alloc] init]; - - // In iOS 12, the overridePreferredInterfaceStyle API is unavailable, so - // incognito colors need to be set specifically. - // TODO(crbug.com/981889): Clean up after iOS 12 support is dropped. - scheme.fontColor = [UIColor colorNamed:kTextPrimaryDarkColor]; - scheme.placeholderColor = [UIColor colorNamed:kTextfieldPlaceholderDarkColor]; - scheme.trailingButtonColor = [UIColor colorNamed:kToolbarButtonDarkColor]; - - return scheme; -} - @end #pragma mark - LocationBarSteadyButton
diff --git a/ios/chrome/browser/ui/location_bar/location_bar_view_controller.mm b/ios/chrome/browser/ui/location_bar/location_bar_view_controller.mm index 1144ae6..4bbc83a 100644 --- a/ios/chrome/browser/ui/location_bar/location_bar_view_controller.mm +++ b/ios/chrome/browser/ui/location_bar/location_bar_view_controller.mm
@@ -142,8 +142,7 @@ - (void)setIncognito:(BOOL)incognito { _incognito = incognito; self.locationBarSteadyView.colorScheme = - incognito ? [LocationBarSteadyViewColorScheme incognitoScheme] - : [LocationBarSteadyViewColorScheme standardScheme]; + [LocationBarSteadyViewColorScheme standardScheme]; } - (void)setDispatcher:(id<ActivityServiceCommands,
diff --git a/ios/chrome/browser/ui/menu/tab_context_menu_delegate.h b/ios/chrome/browser/ui/menu/tab_context_menu_delegate.h index 5bdc748..9d7560a 100644 --- a/ios/chrome/browser/ui/menu/tab_context_menu_delegate.h +++ b/ios/chrome/browser/ui/menu/tab_context_menu_delegate.h
@@ -45,6 +45,9 @@ // Tells the delegate to edit the bookmark for |URL|. - (void)editBookmarkWithURL:(const GURL&)URL; +// Tells the delegate to open the tab grid selection mode. +- (void)selectTabs; + // Tells the delegate to close the tab with the item identifier |identifier|. - (void)closeTabWithIdentifier:(NSString*)identifier incognito:(BOOL)incognito;
diff --git a/ios/chrome/browser/ui/overscroll_actions/overscroll_actions_view.mm b/ios/chrome/browser/ui/overscroll_actions/overscroll_actions_view.mm index 9ebe999..fc5d219 100644 --- a/ios/chrome/browser/ui/overscroll_actions/overscroll_actions_view.mm +++ b/ios/chrome/browser/ui/overscroll_actions/overscroll_actions_view.mm
@@ -922,32 +922,13 @@ [self updateLayerColors]; } -// CGColor doesn't support iOS 13 dynamic colors, so those must be resolved -// more often. +// Updates the colors based on the current trait collection. CGColor doesn't +// support iOS 13 dynamic colors, so those must be resolved more often. - (void)updateLayerColors { - if (@available(iOS 13, *)) { - [self.traitCollection performAsCurrentTraitCollection:^{ - _selectionCircleLayer.fillColor = - [UIColor colorNamed:kTextfieldBackgroundColor].CGColor; - }]; - return; - } - - // Fallback for iOS 12. - if (self.incognito) { - UIColor* buttonColor = [UIColor colorNamed:kToolbarButtonDarkColor]; - _addTabActionImageView.tintColor = buttonColor; - _reloadActionImageView.tintColor = buttonColor; - _closeTabActionImageView.tintColor = buttonColor; - _addTabLabel.textColor = buttonColor; - _reloadLabel.textColor = buttonColor; - _closeTabLabel.textColor = buttonColor; - _selectionCircleLayer.fillColor = - [UIColor colorNamed:kTextfieldBackgroundDarkColor].CGColor; - } else { + [self.traitCollection performAsCurrentTraitCollection:^{ _selectionCircleLayer.fillColor = [UIColor colorNamed:kTextfieldBackgroundColor].CGColor; - } + }]; } - (OverscrollAction)actionAtLocation:(CGPoint)location {
diff --git a/ios/chrome/browser/ui/settings/google_services/manage_sync_settings_mediator.mm b/ios/chrome/browser/ui/settings/google_services/manage_sync_settings_mediator.mm index 2f6c552e..4c5e4d9 100644 --- a/ios/chrome/browser/ui/settings/google_services/manage_sync_settings_mediator.mm +++ b/ios/chrome/browser/ui/settings/google_services/manage_sync_settings_mediator.mm
@@ -619,6 +619,7 @@ syncErrorItem.text = GetNSString(IDS_IOS_SYNC_ERROR_TITLE); syncErrorItem.detailText = GetSyncErrorDescriptionForSyncSetupService(self.syncSetupService); + syncErrorItem.accessoryType = UITableViewCellAccessoryDisclosureIndicator; switch (itemType) { case ShowPassphraseDialogErrorItemType: // Special case only for the sync passphrase error message. The regular
diff --git a/ios/chrome/browser/ui/settings/password/password_issues_mediator_unittest.mm b/ios/chrome/browser/ui/settings/password/password_issues_mediator_unittest.mm index 31b1d84..e290dac 100644 --- a/ios/chrome/browser/ui/settings/password/password_issues_mediator_unittest.mm +++ b/ios/chrome/browser/ui/settings/password/password_issues_mediator_unittest.mm
@@ -38,7 +38,6 @@ using password_manager::PasswordForm; using password_manager::InsecureCredential; -using password_manager::InsecureType; using password_manager::TestPasswordStore; // Sets test password store and returns pointer to it. @@ -53,14 +52,6 @@ .get())); } -// Returns compromised credential structure. -InsecureCredential MakeInsecureCredential(base::StringPiece signon_realm, - base::StringPiece username) { - return InsecureCredential(std::string(signon_realm), - base::ASCIIToUTF16(username), base::Time::Now(), - InsecureType::kLeaked, - password_manager::IsMuted(false)); -} } // namespace // Test class that conforms to PasswordIssuesConsumer in order to test the @@ -114,13 +105,11 @@ form.url = GURL(website + "/login"); form.action = GURL(website + "/action"); form.username_element = u"email"; - // TODO(crbug.com/1223022): Once all places that operate changes on forms - // via UpdateLogin properly set |password_issues|, setting them to an empty - // map should be part of the default constructor. - form.password_issues = - base::flat_map<InsecureType, password_manager::InsecurityMetadata>(); + form.password_issues = { + {password_manager::InsecureType::kLeaked, + password_manager::InsecurityMetadata( + base::Time::Now(), password_manager::IsMuted(false))}}; store()->AddLogin(form); - store()->AddInsecureCredential(MakeInsecureCredential(website, username)); } TestPasswordStore* store() { return store_.get(); }
diff --git a/ios/chrome/browser/ui/settings/password/passwords_table_view_controller_unittest.mm b/ios/chrome/browser/ui/settings/password/passwords_table_view_controller_unittest.mm index fb4bc58..1499719 100644 --- a/ios/chrome/browser/ui/settings/password/passwords_table_view_controller_unittest.mm +++ b/ios/chrome/browser/ui/settings/password/passwords_table_view_controller_unittest.mm
@@ -49,6 +49,7 @@ #endif using password_manager::InsecureType; +using password_manager::PasswordForm; using password_manager::TestPasswordStore; using password_manager::MockBulkLeakCheckService; using ::testing::Return; @@ -149,7 +150,14 @@ void ChangePasswordCheckState(PasswordCheckUIState state) { PasswordsTableViewController* passwords_controller = static_cast<PasswordsTableViewController*>(controller()); - NSInteger count = GetTestStore().insecure_credentials().size(); + NSInteger count = 0; + for (const auto& signon_realm_forms : GetTestStore().stored_passwords()) { + count += base::ranges::count_if(signon_realm_forms.second, + [](const PasswordForm& form) { + return !form.password_issues->empty(); + }); + } + [passwords_controller setPasswordCheckUIState:state compromisedPasswordsCount:count]; } @@ -160,8 +168,9 @@ RunUntilIdle(); } - // Creates and adds a saved password form. - void AddSavedForm1() { + // Creates and adds a saved password form. If `is_leakd` is true it marks the + // credential as leaked. + void AddSavedForm1(bool is_leaked = false) { auto form = std::make_unique<password_manager::PasswordForm>(); form->url = GURL("http://www.example.com/accounts/LoginAuth"); form->action = GURL("http://www.example.com/accounts/Login"); @@ -173,11 +182,19 @@ form->signon_realm = "http://www.example.com/"; form->scheme = password_manager::PasswordForm::Scheme::kHtml; form->blocked_by_user = false; - // TODO(crbug.com/1223022): Once all places that operate changes on forms - // via UpdateLogin properly set |password_issues|, setting them to an empty - // map should be part of the default constructor. - form->password_issues = - base::flat_map<InsecureType, password_manager::InsecurityMetadata>(); + + if (is_leaked) { + form->password_issues = { + {InsecureType::kLeaked, + password_manager::InsecurityMetadata( + base::Time::Now(), password_manager::IsMuted(false))}}; + } else { + // TODO(crbug.com/1223022): Once all places that operate changes on forms + // via UpdateLogin properly set |password_issues|, setting them to an + // empty map should be part of the default constructor. + form->password_issues = + base::flat_map<InsecureType, password_manager::InsecurityMetadata>(); + } AddPasswordForm(std::move(form)); } @@ -246,13 +263,6 @@ AddPasswordForm(std::move(form)); } - void AddCompromisedCredential() { - GetTestStore().AddInsecureCredential(password_manager::InsecureCredential( - "http://www.example.com/", u"test@egmail.com", base::Time::Now(), - InsecureType::kLeaked, password_manager::IsMuted(false))); - RunUntilIdle(); - } - // Deletes the item at (row, section) and wait util idle. void deleteItemAndWait(int section, int row) { PasswordsTableViewController* passwords_controller = @@ -640,8 +650,7 @@ // Test verifies unsafe state of password check cell. TEST_F(PasswordsTableViewControllerTest, PasswordCheckStateUnSafe) { - AddSavedForm1(); - AddCompromisedCredential(); + AddSavedForm1(/*has_password_issues=*/true); ChangePasswordCheckState(PasswordCheckStateUnSafe); CheckTextCellTextWithId(IDS_IOS_CHECK_PASSWORDS_NOW_BUTTON,
diff --git a/ios/chrome/browser/ui/settings/safety_check/safety_check_mediator_unittest.mm b/ios/chrome/browser/ui/settings/safety_check/safety_check_mediator_unittest.mm index 58757f5..037f04d 100644 --- a/ios/chrome/browser/ui/settings/safety_check/safety_check_mediator_unittest.mm +++ b/ios/chrome/browser/ui/settings/safety_check/safety_check_mediator_unittest.mm
@@ -177,8 +177,9 @@ [defaults removeObjectForKey:kIOSChromeUpgradeURLKey]; } - // Creates and adds a saved password form. - void AddSavedForm() { + // Creates and adds a saved password form. If `is_leaked` is true it marks the + // credential as leaked. + void AddSavedForm(bool is_leaked = false) { auto form = std::make_unique<password_manager::PasswordForm>(); form->url = GURL("http://www.example.com/accounts/LoginAuth"); form->action = GURL("http://www.example.com/accounts/Login"); @@ -190,11 +191,18 @@ form->signon_realm = "http://www.example.com/"; form->scheme = password_manager::PasswordForm::Scheme::kHtml; form->blocked_by_user = false; - // TODO(crbug.com/1223022): Once all places that operate changes on forms - // via UpdateLogin properly set |password_issues|, setting them to an empty - // map should be part of the default constructor. - form->password_issues = - base::flat_map<InsecureType, password_manager::InsecurityMetadata>(); + if (is_leaked) { + form->password_issues = { + {InsecureType::kLeaked, + password_manager::InsecurityMetadata( + base::Time::Now(), password_manager::IsMuted(false))}}; + } else { + // TODO(crbug.com/1223022): Once all places that operate changes on forms + // via UpdateLogin properly set |password_issues|, setting them to an + // empty map should be part of the default constructor. + form->password_issues = + base::flat_map<InsecureType, password_manager::InsecurityMetadata>(); + } AddPasswordForm(std::move(form)); } @@ -205,13 +213,6 @@ .get()); } - void AddCompromisedCredential() { - GetTestStore().AddInsecureCredential(password_manager::InsecureCredential( - "http://www.example.com/", u"test@egmail.com", base::Time::Now(), - InsecureType::kLeaked, password_manager::IsMuted(false))); - RunUntilIdle(); - } - protected: web::WebTaskEnvironment environment_; std::unique_ptr<TestChromeBrowserState> browser_state_; @@ -376,16 +377,14 @@ } TEST_F(SafetyCheckMediatorTest, PasswordCheckUnSafeCheck) { - AddSavedForm(); - AddCompromisedCredential(); + AddSavedForm(/*is_leaked=*/true); mediator_.currentPasswordCheckState = PasswordCheckState::kRunning; [mediator_ passwordCheckStateDidChange:PasswordCheckState::kIdle]; EXPECT_EQ(mediator_.passwordCheckRowState, PasswordCheckRowStateUnSafe); } TEST_F(SafetyCheckMediatorTest, PasswordCheckUnSafeUI) { - AddSavedForm(); - AddCompromisedCredential(); + AddSavedForm(/*is_leaked=*/true); mediator_.passwordCheckRowState = PasswordCheckRowStateUnSafe; [mediator_ reconfigurePasswordCheckItem]; EXPECT_NSEQ(mediator_.passwordCheckItem.detailText,
diff --git a/ios/chrome/browser/ui/settings/sync/BUILD.gn b/ios/chrome/browser/ui/settings/sync/BUILD.gn index 992e8a2..b66ca64 100644 --- a/ios/chrome/browser/ui/settings/sync/BUILD.gn +++ b/ios/chrome/browser/ui/settings/sync/BUILD.gn
@@ -114,6 +114,7 @@ "//components/strings:components_strings_grit", "//ios/chrome/app/strings", "//ios/chrome/browser/ui/authentication:eg_test_support+eg2", + "//ios/chrome/browser/ui/settings:constants", "//ios/chrome/browser/ui/settings/google_services:constants", "//ios/chrome/test/earl_grey:eg_test_support+eg2", "//ios/testing/earl_grey:eg_test_support+eg2",
diff --git a/ios/chrome/browser/ui/settings/sync/sync_encryption_passphrase_table_view_controller_egtest.mm b/ios/chrome/browser/ui/settings/sync/sync_encryption_passphrase_table_view_controller_egtest.mm index 5eb9edf..765fa27 100644 --- a/ios/chrome/browser/ui/settings/sync/sync_encryption_passphrase_table_view_controller_egtest.mm +++ b/ios/chrome/browser/ui/settings/sync/sync_encryption_passphrase_table_view_controller_egtest.mm
@@ -8,6 +8,7 @@ #import "ios/chrome/browser/ui/authentication/signin_earl_grey_ui.h" #import "ios/chrome/browser/ui/settings/google_services/google_services_settings_constants.h" #import "ios/chrome/browser/ui/settings/google_services/manage_sync_settings_constants.h" +#import "ios/chrome/browser/ui/settings/settings_table_view_controller_constants.h" #import "ios/chrome/grit/ios_strings.h" #import "ios/chrome/test/earl_grey/chrome_earl_grey.h" #import "ios/chrome/test/earl_grey/chrome_earl_grey_ui.h" @@ -29,6 +30,10 @@ using chrome_test_util::SyncSettingsConfirmButton; using chrome_test_util::PrimarySignInButton; +namespace { +NSString* const kPassphrase = @"hello"; +} + @interface SyncEncryptionPassphraseTestCase : ChromeTestCase @end @@ -36,7 +41,7 @@ // Tests to open the sync passphrase view, and to close it. - (void)testShowSyncPassphraseAndDismiss { - [ChromeEarlGrey addBookmarkWithSyncPassphrase:@"hello"]; + [ChromeEarlGrey addBookmarkWithSyncPassphrase:kPassphrase]; // Signin. FakeChromeIdentity* fakeIdentity = [SigninEarlGrey fakeIdentity1]; [SigninEarlGreyUI signinWithFakeIdentity:fakeIdentity]; @@ -56,7 +61,7 @@ if (![ChromeEarlGrey areMultipleWindowsSupported]) EARL_GREY_TEST_DISABLED(@"Multiple windows can't be opened."); - [ChromeEarlGrey addBookmarkWithSyncPassphrase:@"hello"]; + [ChromeEarlGrey addBookmarkWithSyncPassphrase:kPassphrase]; // Signin. FakeChromeIdentity* fakeIdentity = [SigninEarlGrey fakeIdentity1]; [SigninEarlGreyUI signinWithFakeIdentity:fakeIdentity]; @@ -85,7 +90,7 @@ // Tests entering sync passphrase from the sign-in flow. - (void)testEnterSyncPassphraseInSignIn { - [ChromeEarlGrey addBookmarkWithSyncPassphrase:@"hello"]; + [ChromeEarlGrey addBookmarkWithSyncPassphrase:kPassphrase]; // Access advanced settings sign-in. FakeChromeIdentity* fakeIdentity = [SigninEarlGrey fakeIdentity1]; [SigninEarlGrey addFakeIdentity:fakeIdentity]; @@ -105,18 +110,9 @@ IDS_IOS_MANAGE_SYNC_ENCRYPTION)] performAction:grey_tap()]; - [[EarlGrey selectElementWithMatcher: - grey_accessibilityID( - kSyncEncryptionPassphraseTextFieldAccessibilityIdentifier)] - performAction:grey_typeText(@"hello")]; + // Type and submit the sync passphrase. + [SigninEarlGreyUI submitSyncPassphrase:kPassphrase]; - [[EarlGrey - selectElementWithMatcher:grey_allOf( - grey_kindOfClassName(@"_UIButtonBarButton"), - ButtonWithAccessibilityLabel( - l10n_util::GetNSString( - IDS_IOS_SYNC_DECRYPT_BUTTON)), - nil)] performAction:grey_tap()]; [[EarlGrey selectElementWithMatcher:SyncSettingsConfirmButton()] performAction:grey_tap()]; @@ -124,4 +120,23 @@ [SigninEarlGrey verifySignedInWithFakeIdentity:fakeIdentity]; } +// Tests Sync is on after opening settings from the Infobar and entering the +// passphrase. +- (void)testShowAddSyncPassphrphrase { + [ChromeEarlGrey addBookmarkWithSyncPassphrase:kPassphrase]; + // Signin. + FakeChromeIdentity* fakeIdentity = [SigninEarlGrey fakeIdentity1]; + [SigninEarlGreyUI signinWithFakeIdentity:fakeIdentity]; + [ChromeEarlGrey openNewTab]; + [[EarlGrey selectElementWithMatcher:ButtonWithAccessibilityLabelId( + IDS_IOS_SYNC_ENTER_PASSPHRASE_BUTTON)] + performAction:grey_tap()]; + + // Type and submit the sync passphrase. + [SigninEarlGreyUI submitSyncPassphrase:kPassphrase]; + [ChromeEarlGreyUI openSettingsMenu]; + // Check Sync On label is visible and user is signed in. + [SigninEarlGrey verifySignedInWithFakeIdentity:fakeIdentity]; + [SigninEarlGrey verifySyncUIEnabled:YES]; +} @end
diff --git a/ios/chrome/browser/ui/tab_switcher/tab_grid/grid/grid_cell.mm b/ios/chrome/browser/ui/tab_switcher/tab_grid/grid/grid_cell.mm index 5c404ed..d6858d4e 100644 --- a/ios/chrome/browser/ui/tab_switcher/tab_grid/grid/grid_cell.mm +++ b/ios/chrome/browser/ui/tab_switcher/tab_grid/grid/grid_cell.mm
@@ -191,7 +191,13 @@ } - (NSArray*)accessibilityCustomActions { - // Each cell has 2 custom actions, which is accessible through swiping. The + if (IsTabsBulkActionsEnabled() && self.isInSelectionMode) { + // If the cell is in tab grid selection mode, only allow toggling the + // selection state. + return nil; + } + + // In normal cell mode, there are 2 actions, accessible through swiping. The // default is to select the cell. Another is to close the cell. return @[ [[UIAccessibilityCustomAction alloc] initWithName:l10n_util::GetNSString(IDS_IOS_TAB_SWITCHER_CLOSE_TAB)
diff --git a/ios/chrome/browser/ui/tab_switcher/tab_grid/grid/grid_context_menu_helper.mm b/ios/chrome/browser/ui/tab_switcher/tab_grid/grid/grid_context_menu_helper.mm index 1e8ca56..a5c2c4f6 100644 --- a/ios/chrome/browser/ui/tab_switcher/tab_grid/grid/grid_context_menu_helper.mm +++ b/ios/chrome/browser/ui/tab_switcher/tab_grid/grid/grid_context_menu_helper.mm
@@ -141,6 +141,12 @@ } if ([weakSelf.contextMenuDelegate + respondsToSelector:@selector(selectTabs)]) { + [menuElements addObject:[actionFactory actionToSelectTabsWithBlock:^{ + [weakSelf.contextMenuDelegate selectTabs]; + }]]; + } + if ([weakSelf.contextMenuDelegate respondsToSelector:@selector(closeTabWithIdentifier: incognito:)]) { [menuElements addObject:[actionFactory actionToCloseTabWithBlock:^{
diff --git a/ios/chrome/browser/ui/tab_switcher/tab_grid/tab_grid_coordinator.mm b/ios/chrome/browser/ui/tab_switcher/tab_grid/tab_grid_coordinator.mm index 90d57e4..ec51ab1 100644 --- a/ios/chrome/browser/ui/tab_switcher/tab_grid/tab_grid_coordinator.mm +++ b/ios/chrome/browser/ui/tab_switcher/tab_grid/tab_grid_coordinator.mm
@@ -1025,6 +1025,12 @@ } } +- (void)selectTabs { + base::RecordAction( + base::UserMetricsAction("MobileTabGridTabContextMenuSelectTabs")); + self.baseViewController.tabGridMode = TabGridModeSelection; +} + - (void)removeSessionAtTableSectionWithIdentifier:(NSInteger)sectionIdentifier { [self.baseViewController.remoteTabsViewController removeSessionAtTableSectionWithIdentifier:sectionIdentifier];
diff --git a/ios/chrome/browser/ui/tab_switcher/tab_grid/tab_grid_mediator.mm b/ios/chrome/browser/ui/tab_switcher/tab_grid/tab_grid_mediator.mm index edd4c68e..6a4b157 100644 --- a/ios/chrome/browser/ui/tab_switcher/tab_grid/tab_grid_mediator.mm +++ b/ios/chrome/browser/ui/tab_switcher/tab_grid/tab_grid_mediator.mm
@@ -9,6 +9,7 @@ #include <memory> #include "base/bind.h" +#include "base/metrics/histogram_functions.h" #include "base/metrics/histogram_macros.h" #include "base/metrics/user_metrics.h" #include "base/metrics/user_metrics_action.h" @@ -370,6 +371,8 @@ - (void)closeItemsWithIDs:(NSArray<NSString*>*)itemIDs { __block bool allTabsClosed = true; + base::UmaHistogramCounts100("IOS.TabGrid.Selection.CloseTabs", itemIDs.count); + self.webStateList->PerformBatchOperation( base::BindOnce(^(WebStateList* list) { for (NSString* itemID in itemIDs) { @@ -470,7 +473,9 @@ title:item.title]; [URLs addObject:URL]; } - + base::RecordAction( + base::UserMetricsAction("MobileTabGridSelectionShareTabs")); + base::UmaHistogramCounts100("IOS.TabGrid.Selection.ShareTabs", items.count); [self.delegate tabGridMediator:self shareURLs:URLs anchor:buttonAnchor]; } @@ -738,6 +743,8 @@ if (!_readingListHandler) { return; } + base::UmaHistogramCounts100("IOS.TabGrid.Selection.AddToReadingList", + items.count); NSArray<URLWithTitle*>* URLs = [self urlsWithTitleFromItemIDs:items]; @@ -753,6 +760,8 @@ if (!bookmarkHandler) { return; } + base::UmaHistogramCounts100("IOS.TabGrid.Selection.AddToBookmarks", + items.count); NSArray<URLWithTitle*>* URLs = [self urlsWithTitleFromItemIDs:items];
diff --git a/ios/chrome/common/app_group/app_group_metrics.h b/ios/chrome/common/app_group/app_group_metrics.h index 7ce9738..6509197 100644 --- a/ios/chrome/common/app_group/app_group_metrics.h +++ b/ios/chrome/common/app_group/app_group_metrics.h
@@ -70,6 +70,13 @@ // for a password with a nil argument. extern NSString* const kCredentialExtensionFetchPasswordNilArgumentCount; +// An app_group key for the number of times saving a newly generated password +// to the keychain failed. +extern NSString* const kCredentialExtensionKeychainSavePasswordFailureCount; + +// An app_group key for the number of times saving a new credential failed. +extern NSString* const kCredentialExtensionSaveCredentialFailureCount; + // Offsets the sessionID to avoid collision. The sessionID is limited to 1<<23. int AppGroupSessionID(int sessionID, AppGroupApplications application);
diff --git a/ios/chrome/common/app_group/app_group_metrics.mm b/ios/chrome/common/app_group/app_group_metrics.mm index f9c9ac1..dd37a60 100644 --- a/ios/chrome/common/app_group/app_group_metrics.mm +++ b/ios/chrome/common/app_group/app_group_metrics.mm
@@ -53,6 +53,12 @@ NSString* const kCredentialExtensionFetchPasswordNilArgumentCount = @"CredentialExtensionFetchPasswordNilArgumentCount"; +NSString* const kCredentialExtensionKeychainSavePasswordFailureCount = + @"CredentialExtensionKeychainSavePasswordFailureCount"; + +NSString* const kCredentialExtensionSaveCredentialFailureCount = + @"CredentialExtensionSaveCredentialFailureCount"; + // To avoid collision between session_ids from chrome or external // components, the session ID is offset depending on the application. int AppGroupSessionID(int session_id, AppGroupApplications application) {
diff --git a/ios/chrome/common/ui/colors/resources/BUILD.gn b/ios/chrome/common/ui/colors/resources/BUILD.gn index 815f931..cb8d303 100644 --- a/ios/chrome/common/ui/colors/resources/BUILD.gn +++ b/ios/chrome/common/ui/colors/resources/BUILD.gn
@@ -7,16 +7,12 @@ group("resources") { deps = [ ":background_color", - ":background_dark_color", ":blue_color", - ":blue_dark_color", ":blue_halo_color", ":close_button_color", - ":close_button_dark_color", ":disabled_tint_color", ":favicon_background_color", ":green_color", - ":green_dark_color", ":grey_100_color", ":grey_200_color", ":grey_300_color", @@ -34,27 +30,18 @@ ":placeholder_image_tint_color", ":primary_background_color", ":red_color", - ":red_dark_color", ":scrim_background_color", ":secondary_background_color", - ":secondary_background_dark_color", ":separator_color", ":solid_button_text_color", ":table_view_row_highlight_color", - ":table_view_row_highlight_dark_color", ":tertiary_background_color", - ":tertiary_background_dark_color", ":text_primary_color", - ":text_primary_dark_color", ":text_secondary_color", - ":text_secondary_dark_color", ":text_tertiary_color", ":textfield_background_color", - ":textfield_background_dark_color", ":textfield_placeholder_color", - ":textfield_placeholder_dark_color", ":toolbar_button_color", - ":toolbar_button_dark_color", ":toolbar_shadow_color", ] } @@ -63,18 +50,10 @@ sources = [ "background_color.colorset/Contents.json" ] } -colorset("background_dark_color") { - sources = [ "background_dark_color.colorset/Contents.json" ] -} - colorset("blue_color") { sources = [ "blue_color.colorset/Contents.json" ] } -colorset("blue_dark_color") { - sources = [ "blue_dark_color.colorset/Contents.json" ] -} - colorset("blue_halo_color") { sources = [ "blue_halo_color.colorset/Contents.json" ] } @@ -83,10 +62,6 @@ sources = [ "close_button_color.colorset/Contents.json" ] } -colorset("close_button_dark_color") { - sources = [ "close_button_dark_color.colorset/Contents.json" ] -} - colorset("disabled_tint_color") { sources = [ "disabled_tint_color.colorset/Contents.json" ] } @@ -99,10 +74,6 @@ sources = [ "green_color.colorset/Contents.json" ] } -colorset("green_dark_color") { - sources = [ "green_dark_color.colorset/Contents.json" ] -} - colorset("grey_50_color") { sources = [ "grey_50_color.colorset/Contents.json" ] } @@ -147,10 +118,6 @@ sources = [ "red_color.colorset/Contents.json" ] } -colorset("red_dark_color") { - sources = [ "red_dark_color.colorset/Contents.json" ] -} - colorset("mdc_ink_color") { sources = [ "mdc_ink_color.colorset/Contents.json" ] } @@ -179,18 +146,10 @@ sources = [ "table_view_row_highlight_color.colorset/Contents.json" ] } -colorset("table_view_row_highlight_dark_color") { - sources = [ "table_view_row_highlight_dark_color.colorset/Contents.json" ] -} - colorset("tertiary_background_color") { sources = [ "tertiary_background_color.colorset/Contents.json" ] } -colorset("tertiary_background_dark_color") { - sources = [ "tertiary_background_dark_color.colorset/Contents.json" ] -} - colorset("text_tertiary_color") { sources = [ "text_tertiary_color.colorset/Contents.json" ] } @@ -199,42 +158,22 @@ sources = [ "text_primary_color.colorset/Contents.json" ] } -colorset("text_primary_dark_color") { - sources = [ "text_primary_dark_color.colorset/Contents.json" ] -} - colorset("text_secondary_color") { sources = [ "text_secondary_color.colorset/Contents.json" ] } -colorset("text_secondary_dark_color") { - sources = [ "text_secondary_dark_color.colorset/Contents.json" ] -} - colorset("textfield_placeholder_color") { sources = [ "textfield_placeholder_color.colorset/Contents.json" ] } -colorset("textfield_placeholder_dark_color") { - sources = [ "textfield_placeholder_dark_color.colorset/Contents.json" ] -} - colorset("textfield_background_color") { sources = [ "textfield_background_color.colorset/Contents.json" ] } -colorset("textfield_background_dark_color") { - sources = [ "textfield_background_dark_color.colorset/Contents.json" ] -} - colorset("toolbar_button_color") { sources = [ "toolbar_button_color.colorset/Contents.json" ] } -colorset("toolbar_button_dark_color") { - sources = [ "toolbar_button_dark_color.colorset/Contents.json" ] -} - colorset("toolbar_shadow_color") { sources = [ "toolbar_shadow_color.colorset/Contents.json" ] } @@ -243,10 +182,6 @@ sources = [ "secondary_background_color.colorset/Contents.json" ] } -colorset("secondary_background_dark_color") { - sources = [ "secondary_background_dark_color.colorset/Contents.json" ] -} - colorset("primary_background_color") { sources = [ "primary_background_color.colorset/Contents.json" ] }
diff --git a/ios/chrome/common/ui/colors/resources/background_color.colorset/Contents.json b/ios/chrome/common/ui/colors/resources/background_color.colorset/Contents.json index 0da6db5..241c3635 100644 --- a/ios/chrome/common/ui/colors/resources/background_color.colorset/Contents.json +++ b/ios/chrome/common/ui/colors/resources/background_color.colorset/Contents.json
@@ -9,10 +9,10 @@ "color" : { "color-space" : "display-p3", "components" : { - "red" : "1.000", "alpha" : "1.000", - "blue" : "1.000", - "green" : "1.000" + "red" : "1.000", + "green" : "1.000", + "blue" : "1.000" } } }, @@ -27,10 +27,10 @@ "color" : { "color-space" : "display-p3", "components" : { - "red" : "0.208", "alpha" : "1.000", - "blue" : "0.227", - "green" : "0.216" + "red" : "0.208", + "green" : "0.216", + "blue" : "0.227" } } }
diff --git a/ios/chrome/common/ui/colors/resources/background_dark_color.colorset/Contents.json b/ios/chrome/common/ui/colors/resources/background_dark_color.colorset/Contents.json deleted file mode 100644 index 4fa1733..0000000 --- a/ios/chrome/common/ui/colors/resources/background_dark_color.colorset/Contents.json +++ /dev/null
@@ -1,20 +0,0 @@ -{ - "info" : { - "version" : 1, - "author" : "xcode" - }, - "colors" : [ - { - "idiom" : "universal", - "color" : { - "color-space" : "display-p3", - "components" : { - "red" : "0.208", - "alpha" : "1.000", - "blue" : "0.227", - "green" : "0.216" - } - } - } - ] -}
diff --git a/ios/chrome/common/ui/colors/resources/blue_color.colorset/Contents.json b/ios/chrome/common/ui/colors/resources/blue_color.colorset/Contents.json index b094de8..45d81e3 100644 --- a/ios/chrome/common/ui/colors/resources/blue_color.colorset/Contents.json +++ b/ios/chrome/common/ui/colors/resources/blue_color.colorset/Contents.json
@@ -9,10 +9,10 @@ "color" : { "color-space" : "display-p3", "components" : { - "red" : "0x1A", "alpha" : "1.000", - "blue" : "0xE8", - "green" : "0x73" + "red" : "0x1A", + "green" : "0x73", + "blue" : "0xE8" } } }, @@ -27,10 +27,10 @@ "color" : { "color-space" : "display-p3", "components" : { - "red" : "0x8A", "alpha" : "1.000", - "blue" : "0xF8", - "green" : "0xB4" + "red" : "0x8A", + "green" : "0xB4", + "blue" : "0xF8" } } }
diff --git a/ios/chrome/common/ui/colors/resources/blue_dark_color.colorset/Contents.json b/ios/chrome/common/ui/colors/resources/blue_dark_color.colorset/Contents.json deleted file mode 100644 index a1400f73..0000000 --- a/ios/chrome/common/ui/colors/resources/blue_dark_color.colorset/Contents.json +++ /dev/null
@@ -1,20 +0,0 @@ -{ - "info" : { - "version" : 1, - "author" : "xcode" - }, - "colors" : [ - { - "idiom" : "universal", - "color" : { - "color-space" : "display-p3", - "components" : { - "red" : "0x8A", - "alpha" : "1.000", - "blue" : "0xF8", - "green" : "0xB4" - } - } - } - ] -}
diff --git a/ios/chrome/common/ui/colors/resources/blue_halo_color.colorset/Contents.json b/ios/chrome/common/ui/colors/resources/blue_halo_color.colorset/Contents.json index 3da42cb..a0afa05e 100644 --- a/ios/chrome/common/ui/colors/resources/blue_halo_color.colorset/Contents.json +++ b/ios/chrome/common/ui/colors/resources/blue_halo_color.colorset/Contents.json
@@ -9,10 +9,10 @@ "color" : { "color-space" : "display-p3", "components" : { - "red" : "0xE8", "alpha" : "1.000", - "blue" : "0xFE", - "green" : "0xF0" + "red" : "0xE8", + "green" : "0xF0", + "blue" : "0xFE" } } }, @@ -27,12 +27,12 @@ "color" : { "color-space" : "display-p3", "components" : { - "red" : "0x8A", "alpha" : "0.240", - "blue" : "0xF9", - "green" : "0xB4" + "red" : "0x8A", + "green" : "0xB4", + "blue" : "0xF9" } } } ] -} \ No newline at end of file +}
diff --git a/ios/chrome/common/ui/colors/resources/close_button_color.colorset/Contents.json b/ios/chrome/common/ui/colors/resources/close_button_color.colorset/Contents.json index ebc0872..d4be10e 100644 --- a/ios/chrome/common/ui/colors/resources/close_button_color.colorset/Contents.json +++ b/ios/chrome/common/ui/colors/resources/close_button_color.colorset/Contents.json
@@ -9,10 +9,10 @@ "color" : { "color-space" : "display-p3", "components" : { - "red" : "0x5F", "alpha" : "1.000", - "blue" : "0x67", - "green" : "0x63" + "red" : "0x5F", + "green" : "0x63", + "blue" : "0x67" } } }, @@ -27,12 +27,12 @@ "color" : { "color-space" : "display-p3", "components" : { - "red" : "0xBD", "alpha" : "1.000", - "blue" : "0xC5", - "green" : "0xC1" + "red" : "0xBD", + "green" : "0xC1", + "blue" : "0xC5" } } } ] -} \ No newline at end of file +}
diff --git a/ios/chrome/common/ui/colors/resources/close_button_dark_color.colorset/Contents.json b/ios/chrome/common/ui/colors/resources/close_button_dark_color.colorset/Contents.json deleted file mode 100644 index bcadcb8..0000000 --- a/ios/chrome/common/ui/colors/resources/close_button_dark_color.colorset/Contents.json +++ /dev/null
@@ -1,20 +0,0 @@ -{ - "info" : { - "version" : 1, - "author" : "xcode" - }, - "colors" : [ - { - "idiom" : "universal", - "color" : { - "color-space" : "display-p3", - "components" : { - "red" : "0.855", - "alpha" : "1.000", - "blue" : "0.878", - "green" : "0.863" - } - } - } - ] -}
diff --git a/ios/chrome/common/ui/colors/resources/disabled_tint_color.colorset/Contents.json b/ios/chrome/common/ui/colors/resources/disabled_tint_color.colorset/Contents.json index e80d39e..8d46b73 100644 --- a/ios/chrome/common/ui/colors/resources/disabled_tint_color.colorset/Contents.json +++ b/ios/chrome/common/ui/colors/resources/disabled_tint_color.colorset/Contents.json
@@ -9,10 +9,10 @@ "color" : { "color-space" : "display-p3", "components" : { - "red" : "0xA0", "alpha" : "1.000", - "blue" : "0xA0", - "green" : "0xA0" + "red" : "0xA0", + "green" : "0xA0", + "blue" : "0xA0" } } }, @@ -27,12 +27,12 @@ "color" : { "color-space" : "display-p3", "components" : { - "red" : "0x70", "alpha" : "1.000", - "blue" : "0x70", - "green" : "0x70" + "red" : "0x70", + "green" : "0x70", + "blue" : "0x70" } } } ] -} \ No newline at end of file +}
diff --git a/ios/chrome/common/ui/colors/resources/favicon_background_color.colorset/Contents.json b/ios/chrome/common/ui/colors/resources/favicon_background_color.colorset/Contents.json index cdaf02a..27917399 100644 --- a/ios/chrome/common/ui/colors/resources/favicon_background_color.colorset/Contents.json +++ b/ios/chrome/common/ui/colors/resources/favicon_background_color.colorset/Contents.json
@@ -9,10 +9,10 @@ "color" : { "color-space" : "display-p3", "components" : { - "red" : "0xF1", "alpha" : "1.000", - "blue" : "0xF4", - "green" : "0xF3" + "red" : "0xF1", + "green" : "0xF3", + "blue" : "0xF4" } } }, @@ -27,12 +27,12 @@ "color" : { "color-space" : "display-p3", "components" : { - "red" : "0x33", "alpha" : "1.000", - "blue" : "0x33", - "green" : "0x33" + "red" : "0x33", + "green" : "0x33", + "blue" : "0x33" } } } ] -} \ No newline at end of file +}
diff --git a/ios/chrome/common/ui/colors/resources/green_color.colorset/Contents.json b/ios/chrome/common/ui/colors/resources/green_color.colorset/Contents.json index ca15f7d..4ee737fa 100644 --- a/ios/chrome/common/ui/colors/resources/green_color.colorset/Contents.json +++ b/ios/chrome/common/ui/colors/resources/green_color.colorset/Contents.json
@@ -9,10 +9,10 @@ "color" : { "color-space" : "display-p3", "components" : { - "red" : "0x16", "alpha" : "1.000", - "blue" : "0x37", - "green" : "0x80" + "red" : "0x16", + "green" : "0x80", + "blue" : "0x37" } } }, @@ -27,12 +27,12 @@ "color" : { "color-space" : "display-p3", "components" : { - "red" : "0x5B", "alpha" : "1.000", - "blue" : "0x74", - "green" : "0xB9" + "red" : "0x5B", + "green" : "0xB9", + "blue" : "0x74" } } } ] -} \ No newline at end of file +}
diff --git a/ios/chrome/common/ui/colors/resources/green_dark_color.colorset/Contents.json b/ios/chrome/common/ui/colors/resources/green_dark_color.colorset/Contents.json deleted file mode 100644 index 60a05784..0000000 --- a/ios/chrome/common/ui/colors/resources/green_dark_color.colorset/Contents.json +++ /dev/null
@@ -1,20 +0,0 @@ -{ - "info" : { - "version" : 1, - "author" : "xcode" - }, - "colors" : [ - { - "idiom" : "universal", - "color" : { - "color-space" : "display-p3", - "components" : { - "red" : "0x5B", - "alpha" : "1.000", - "blue" : "0x74", - "green" : "0xB9" - } - } - } - ] -}
diff --git a/ios/chrome/common/ui/colors/resources/grey_100_color.colorset/Contents.json b/ios/chrome/common/ui/colors/resources/grey_100_color.colorset/Contents.json index 0184abb..57af440 100644 --- a/ios/chrome/common/ui/colors/resources/grey_100_color.colorset/Contents.json +++ b/ios/chrome/common/ui/colors/resources/grey_100_color.colorset/Contents.json
@@ -9,10 +9,10 @@ "color": { "color-space": "display-p3", "components": { - "red": "0xF1", "alpha": "1.000", - "blue": "0xF4", - "green": "0xF3" + "red": "0xF1", + "green": "0xF3", + "blue": "0xF4" } } }, @@ -27,12 +27,12 @@ "color": { "color-space": "display-p3", "components": { - "red": "0x46", "alpha": "1.000", - "blue": "0x4E", - "green": "0x4B" + "red": "0x46", + "green": "0x4B", + "blue": "0x4E" } } } ] -} \ No newline at end of file +}
diff --git a/ios/chrome/common/ui/colors/resources/grey_200_color.colorset/Contents.json b/ios/chrome/common/ui/colors/resources/grey_200_color.colorset/Contents.json index 759844c..d9f11df 100644 --- a/ios/chrome/common/ui/colors/resources/grey_200_color.colorset/Contents.json +++ b/ios/chrome/common/ui/colors/resources/grey_200_color.colorset/Contents.json
@@ -9,10 +9,10 @@ "color" : { "color-space" : "display-p3", "components" : { - "red" : "0xE8", "alpha" : "1.000", - "blue" : "0xED", - "green" : "0xEA" + "red" : "0xE8", + "green" : "0xEA", + "blue" : "0xED" } } }, @@ -27,12 +27,12 @@ "color" : { "color-space" : "display-p3", "components" : { - "red" : "0x5F", "alpha" : "1.000", - "blue" : "0x67", - "green" : "0x63" + "red" : "0x5F", + "green" : "0x63", + "blue" : "0x67" } } } ] -} \ No newline at end of file +}
diff --git a/ios/chrome/common/ui/colors/resources/grey_300_color.colorset/Contents.json b/ios/chrome/common/ui/colors/resources/grey_300_color.colorset/Contents.json index edc3511..d4d2c3a 100644 --- a/ios/chrome/common/ui/colors/resources/grey_300_color.colorset/Contents.json +++ b/ios/chrome/common/ui/colors/resources/grey_300_color.colorset/Contents.json
@@ -9,10 +9,10 @@ "color" : { "color-space" : "display-p3", "components" : { - "red" : "0xDA", "alpha" : "1.000", - "blue" : "0xE0", - "green" : "0xDC" + "red" : "0xDA", + "green" : "0xDC", + "blue" : "0xE0" } } }, @@ -27,12 +27,12 @@ "color" : { "color-space" : "display-p3", "components" : { - "red" : "0x80", "alpha" : "1.000", - "blue" : "0x8A", - "green" : "0x86" + "red" : "0x80", + "green" : "0x86", + "blue" : "0x8A" } } } ] -} \ No newline at end of file +}
diff --git a/ios/chrome/common/ui/colors/resources/grey_400_color.colorset/Contents.json b/ios/chrome/common/ui/colors/resources/grey_400_color.colorset/Contents.json index 6ec34fe..38a84ba 100644 --- a/ios/chrome/common/ui/colors/resources/grey_400_color.colorset/Contents.json +++ b/ios/chrome/common/ui/colors/resources/grey_400_color.colorset/Contents.json
@@ -9,10 +9,10 @@ "color" : { "color-space" : "display-p3", "components" : { - "red" : "0xBD", "alpha" : "1.000", - "blue" : "0xC5", - "green" : "0xC1" + "red" : "0xBD", + "green" : "0xC1", + "blue" : "0xC5" } } }, @@ -27,12 +27,12 @@ "color" : { "color-space" : "display-p3", "components" : { - "red" : "0x9A", "alpha" : "1.000", - "blue" : "0xA6", - "green" : "0xA0" + "red" : "0x9A", + "green" : "0xA0", + "blue" : "0xA6" } } } ] -} \ No newline at end of file +}
diff --git a/ios/chrome/common/ui/colors/resources/grey_500_color.colorset/Contents.json b/ios/chrome/common/ui/colors/resources/grey_500_color.colorset/Contents.json index 5517055..5129798 100644 --- a/ios/chrome/common/ui/colors/resources/grey_500_color.colorset/Contents.json +++ b/ios/chrome/common/ui/colors/resources/grey_500_color.colorset/Contents.json
@@ -9,10 +9,10 @@ "color" : { "color-space" : "display-p3", "components" : { - "red" : "0x9A", "alpha" : "1.000", - "blue" : "0xA6", - "green" : "0xA0" + "red" : "0x9A", + "green" : "0xA0", + "blue" : "0xA6" } } }, @@ -27,12 +27,12 @@ "color" : { "color-space" : "display-p3", "components" : { - "red" : "0xBD", "alpha" : "1.000", - "blue" : "0xC5", - "green" : "0xC1" + "red" : "0xBD", + "green" : "0xC1", + "blue" : "0xC5" } } } ] -} \ No newline at end of file +}
diff --git a/ios/chrome/common/ui/colors/resources/grey_50_color.colorset/Contents.json b/ios/chrome/common/ui/colors/resources/grey_50_color.colorset/Contents.json index 2811f9c..a9a6780 100644 --- a/ios/chrome/common/ui/colors/resources/grey_50_color.colorset/Contents.json +++ b/ios/chrome/common/ui/colors/resources/grey_50_color.colorset/Contents.json
@@ -9,10 +9,10 @@ "color" : { "color-space" : "display-p3", "components" : { - "red" : "0xF8", "alpha" : "1.000", - "blue" : "0xFA", - "green" : "0xF9" + "red" : "0xF8", + "green" : "0xF9", + "blue" : "0xFA" } } }, @@ -27,12 +27,12 @@ "color" : { "color-space" : "display-p3", "components" : { - "red" : "0x3C", "alpha" : "1.000", - "blue" : "0x43", - "green" : "0x40" + "red" : "0x3C", + "green" : "0x40", + "blue" : "0x43" } } } ] -} \ No newline at end of file +}
diff --git a/ios/chrome/common/ui/colors/resources/grey_600_color.colorset/Contents.json b/ios/chrome/common/ui/colors/resources/grey_600_color.colorset/Contents.json index dd9f456..12e5711 100644 --- a/ios/chrome/common/ui/colors/resources/grey_600_color.colorset/Contents.json +++ b/ios/chrome/common/ui/colors/resources/grey_600_color.colorset/Contents.json
@@ -9,10 +9,10 @@ "color" : { "color-space" : "display-p3", "components" : { - "red" : "0x80", "alpha" : "1.000", - "blue" : "0x8A", - "green" : "0x86" + "red" : "0x80", + "green" : "0x86", + "blue" : "0x8A" } } }, @@ -27,12 +27,12 @@ "color" : { "color-space" : "display-p3", "components" : { - "red" : "0xDA", "alpha" : "1.000", - "blue" : "0xE0", - "green" : "0xDC" + "red" : "0xDA", + "green" : "0xDC", + "blue" : "0xE0" } } } ] -} \ No newline at end of file +}
diff --git a/ios/chrome/common/ui/colors/resources/grey_700_color.colorset/Contents.json b/ios/chrome/common/ui/colors/resources/grey_700_color.colorset/Contents.json index da9b166..cd11e70 100644 --- a/ios/chrome/common/ui/colors/resources/grey_700_color.colorset/Contents.json +++ b/ios/chrome/common/ui/colors/resources/grey_700_color.colorset/Contents.json
@@ -9,10 +9,10 @@ "color" : { "color-space" : "display-p3", "components" : { - "red" : "0x5F", "alpha" : "1.000", - "blue" : "0x67", - "green" : "0x63" + "red" : "0x5F", + "green" : "0x63", + "blue" : "0x67" } } }, @@ -27,12 +27,12 @@ "color" : { "color-space" : "display-p3", "components" : { - "red" : "0xE8", "alpha" : "1.000", - "blue" : "0xED", - "green" : "0xEA" + "red" : "0xE8", + "green" : "0xEA", + "blue" : "0xED" } } } ] -} \ No newline at end of file +}
diff --git a/ios/chrome/common/ui/colors/resources/grey_800_color.colorset/Contents.json b/ios/chrome/common/ui/colors/resources/grey_800_color.colorset/Contents.json index 6d0be7f..8780345 100644 --- a/ios/chrome/common/ui/colors/resources/grey_800_color.colorset/Contents.json +++ b/ios/chrome/common/ui/colors/resources/grey_800_color.colorset/Contents.json
@@ -9,10 +9,10 @@ "color" : { "color-space" : "display-p3", "components" : { - "red" : "0x3C", "alpha" : "1.000", - "blue" : "0x43", - "green" : "0x40" + "red" : "0x3C", + "green" : "0x40", + "blue" : "0x43" } } }, @@ -27,12 +27,12 @@ "color" : { "color-space" : "display-p3", "components" : { - "red" : "0xF1", "alpha" : "1.000", - "blue" : "0xF4", - "green" : "0xF3" + "red" : "0xF1", + "green" : "0xF3", + "blue" : "0xF4" } } } ] -} \ No newline at end of file +}
diff --git a/ios/chrome/common/ui/colors/resources/grey_900_color.colorset/Contents.json b/ios/chrome/common/ui/colors/resources/grey_900_color.colorset/Contents.json index 53a771e..544b98f 100644 --- a/ios/chrome/common/ui/colors/resources/grey_900_color.colorset/Contents.json +++ b/ios/chrome/common/ui/colors/resources/grey_900_color.colorset/Contents.json
@@ -9,10 +9,10 @@ "color" : { "color-space" : "display-p3", "components" : { - "red" : "0x20", "alpha" : "1.000", - "blue" : "0x24", - "green" : "0x21" + "red" : "0x20", + "green" : "0x21", + "blue" : "0x24" } } }, @@ -27,12 +27,12 @@ "color" : { "color-space" : "display-p3", "components" : { - "red" : "0xF8", "alpha" : "1.000", - "blue" : "0xFA", - "green" : "0xF9" + "red" : "0xF8", + "green" : "0xF9", + "blue" : "0xFA" } } } ] -} \ No newline at end of file +}
diff --git a/ios/chrome/common/ui/colors/resources/grouped_primary_background_color.colorset/Contents.json b/ios/chrome/common/ui/colors/resources/grouped_primary_background_color.colorset/Contents.json index f1f5bfa..cb96176 100644 --- a/ios/chrome/common/ui/colors/resources/grouped_primary_background_color.colorset/Contents.json +++ b/ios/chrome/common/ui/colors/resources/grouped_primary_background_color.colorset/Contents.json
@@ -9,10 +9,10 @@ "color": { "color-space": "display-p3", "components": { - "red": "0xF1", "alpha": "1.000", - "blue": "0xF4", - "green": "0xF3" + "red": "0xF1", + "green": "0xF3", + "blue": "0xF4" } } }, @@ -27,12 +27,12 @@ "color": { "color-space": "display-p3", "components": { - "red": "0x20", "alpha": "1.000", - "blue": "0x24", - "green": "0x21" + "red": "0x20", + "green": "0x21", + "blue": "0x24" } } } ] -} \ No newline at end of file +}
diff --git a/ios/chrome/common/ui/colors/resources/grouped_secondary_background_color.colorset/Contents.json b/ios/chrome/common/ui/colors/resources/grouped_secondary_background_color.colorset/Contents.json index 0d5ff736..011aa719 100644 --- a/ios/chrome/common/ui/colors/resources/grouped_secondary_background_color.colorset/Contents.json +++ b/ios/chrome/common/ui/colors/resources/grouped_secondary_background_color.colorset/Contents.json
@@ -9,10 +9,10 @@ "color": { "color-space": "display-p3", "components": { - "red": "0xFF", "alpha": "1.000", - "blue": "0xFF", - "green": "0xFF" + "red": "0xFF", + "green": "0xFF", + "blue": "0xFF" } } }, @@ -27,12 +27,12 @@ "color": { "color-space": "display-p3", "components": { - "red": "0x35", "alpha": "1.000", - "blue": "0x39", - "green": "0x37" + "red": "0x35", + "green": "0x37", + "blue": "0x39" } } } ] -} \ No newline at end of file +}
diff --git a/ios/chrome/common/ui/colors/resources/mdc_ink_color.colorset/Contents.json b/ios/chrome/common/ui/colors/resources/mdc_ink_color.colorset/Contents.json index a5fefee..fc0cb9e 100644 --- a/ios/chrome/common/ui/colors/resources/mdc_ink_color.colorset/Contents.json +++ b/ios/chrome/common/ui/colors/resources/mdc_ink_color.colorset/Contents.json
@@ -9,10 +9,10 @@ "color" : { "color-space" : "display-p3", "components" : { - "red" : "0xFF", "alpha" : "0.200", - "blue" : "0xFF", - "green" : "0xFF" + "red" : "0xFF", + "green" : "0xFF", + "blue" : "0xFF" } } }
diff --git a/ios/chrome/common/ui/colors/resources/mdc_secondary_ink_color.colorset/Contents.json b/ios/chrome/common/ui/colors/resources/mdc_secondary_ink_color.colorset/Contents.json index 0c7d5e9..945f190a 100644 --- a/ios/chrome/common/ui/colors/resources/mdc_secondary_ink_color.colorset/Contents.json +++ b/ios/chrome/common/ui/colors/resources/mdc_secondary_ink_color.colorset/Contents.json
@@ -9,10 +9,10 @@ "color" : { "color-space" : "display-p3", "components" : { - "red" : "0x00", "alpha" : "0.06", - "blue" : "0x00", - "green" : "0x00" + "red" : "0x00", + "green" : "0x00", + "blue" : "0x00" } } }, @@ -27,10 +27,10 @@ "color" : { "color-space" : "display-p3", "components" : { - "red" : "0xFF", "alpha" : "0.06", - "blue" : "0xFF", - "green" : "0xFF" + "red" : "0xFF", + "green" : "0xFF", + "blue" : "0xFF" } } }
diff --git a/ios/chrome/common/ui/colors/resources/placeholder_image_tint_color.colorset/Contents.json b/ios/chrome/common/ui/colors/resources/placeholder_image_tint_color.colorset/Contents.json index 510d42f..9ecc3e99 100644 --- a/ios/chrome/common/ui/colors/resources/placeholder_image_tint_color.colorset/Contents.json +++ b/ios/chrome/common/ui/colors/resources/placeholder_image_tint_color.colorset/Contents.json
@@ -9,10 +9,10 @@ "color" : { "color-space" : "display-p3", "components" : { - "red" : "0xBD", "alpha" : "1.000", - "blue" : "0xC5", - "green" : "0xC1" + "red" : "0xBD", + "green" : "0xC1", + "blue" : "0xC5" } } }, @@ -27,10 +27,10 @@ "color" : { "color-space" : "display-p3", "components" : { - "red" : "0x5F", "alpha" : "1.000", - "blue" : "0x67", - "green" : "0x63" + "red" : "0x5F", + "green" : "0x63", + "blue" : "0x67" } } }
diff --git a/ios/chrome/common/ui/colors/resources/primary_background_color.colorset/Contents.json b/ios/chrome/common/ui/colors/resources/primary_background_color.colorset/Contents.json index a66621c8..50d871a6 100644 --- a/ios/chrome/common/ui/colors/resources/primary_background_color.colorset/Contents.json +++ b/ios/chrome/common/ui/colors/resources/primary_background_color.colorset/Contents.json
@@ -9,10 +9,10 @@ "color": { "color-space": "display-p3", "components": { - "red": "0xFF", "alpha": "1.000", - "blue": "0xFF", - "green": "0xFF" + "red": "0xFF", + "green": "0xFF", + "blue": "0xFF" } } }, @@ -27,12 +27,12 @@ "color": { "color-space": "display-p3", "components": { - "red": "0x20", "alpha": "1.000", - "blue": "0x24", - "green": "0x21" + "red": "0x20", + "green": "0x21", + "blue": "0x24" } } } ] -} \ No newline at end of file +}
diff --git a/ios/chrome/common/ui/colors/resources/red_color.colorset/Contents.json b/ios/chrome/common/ui/colors/resources/red_color.colorset/Contents.json index f534a807..6aa231d 100644 --- a/ios/chrome/common/ui/colors/resources/red_color.colorset/Contents.json +++ b/ios/chrome/common/ui/colors/resources/red_color.colorset/Contents.json
@@ -9,10 +9,10 @@ "color" : { "color-space" : "display-p3", "components" : { - "red" : "0xD9", "alpha" : "1.000", - "blue" : "0x25", - "green" : "0x30" + "red" : "0xD9", + "green" : "0x30", + "blue" : "0x25" } } }, @@ -27,12 +27,12 @@ "color" : { "color-space" : "display-p3", "components" : { - "red" : "0xF2", "alpha" : "1.000", - "blue" : "0x82", - "green" : "0x8B" + "red" : "0xF2", + "green" : "0x8B", + "blue" : "0x82" } } } ] -} \ No newline at end of file +}
diff --git a/ios/chrome/common/ui/colors/resources/red_dark_color.colorset/Contents.json b/ios/chrome/common/ui/colors/resources/red_dark_color.colorset/Contents.json deleted file mode 100644 index 39e898e..0000000 --- a/ios/chrome/common/ui/colors/resources/red_dark_color.colorset/Contents.json +++ /dev/null
@@ -1,20 +0,0 @@ -{ - "info" : { - "version" : 1, - "author" : "xcode" - }, - "colors" : [ - { - "idiom" : "universal", - "color" : { - "color-space" : "display-p3", - "components" : { - "red" : "0xF2", - "alpha" : "1.000", - "blue" : "0x82", - "green" : "0x8B" - } - } - } - ] -}
diff --git a/ios/chrome/common/ui/colors/resources/scrim_background_color.colorset/Contents.json b/ios/chrome/common/ui/colors/resources/scrim_background_color.colorset/Contents.json index 3f60141..a3da89db 100644 --- a/ios/chrome/common/ui/colors/resources/scrim_background_color.colorset/Contents.json +++ b/ios/chrome/common/ui/colors/resources/scrim_background_color.colorset/Contents.json
@@ -9,10 +9,10 @@ "color" : { "color-space" : "display-p3", "components" : { - "red" : "0x00", "alpha" : "0.400", - "blue" : "0x00", - "green" : "0x00" + "red" : "0x00", + "green" : "0x00", + "blue" : "0x00" } } }
diff --git a/ios/chrome/common/ui/colors/resources/secondary_background_color.colorset/Contents.json b/ios/chrome/common/ui/colors/resources/secondary_background_color.colorset/Contents.json index 44e7ad3f..e098fc0 100644 --- a/ios/chrome/common/ui/colors/resources/secondary_background_color.colorset/Contents.json +++ b/ios/chrome/common/ui/colors/resources/secondary_background_color.colorset/Contents.json
@@ -9,10 +9,10 @@ "color": { "color-space": "display-p3", "components": { - "red": "0xF1", "alpha": "1.000", - "blue": "0xF4", - "green": "0xF3" + "red": "0xF1", + "green": "0xF3", + "blue": "0xF4" } } }, @@ -27,10 +27,10 @@ "color": { "color-space": "display-p3", "components": { - "red": "0x35", "alpha": "1.000", - "blue": "0x39", - "green": "0x37" + "red": "0x35", + "green": "0x37", + "blue": "0x39" } } }
diff --git a/ios/chrome/common/ui/colors/resources/secondary_background_dark_color.colorset/Contents.json b/ios/chrome/common/ui/colors/resources/secondary_background_dark_color.colorset/Contents.json deleted file mode 100644 index 7485f772..0000000 --- a/ios/chrome/common/ui/colors/resources/secondary_background_dark_color.colorset/Contents.json +++ /dev/null
@@ -1,20 +0,0 @@ -{ - "info": { - "version": 1, - "author": "xcode" - }, - "colors": [ - { - "idiom": "universal", - "color": { - "color-space": "display-p3", - "components": { - "red": "0x20", - "alpha": "1.000", - "blue": "0x24", - "green": "0x21" - } - } - } - ] -}
diff --git a/ios/chrome/common/ui/colors/resources/separator_color.colorset/Contents.json b/ios/chrome/common/ui/colors/resources/separator_color.colorset/Contents.json index 5c1e209..79ecbac 100644 --- a/ios/chrome/common/ui/colors/resources/separator_color.colorset/Contents.json +++ b/ios/chrome/common/ui/colors/resources/separator_color.colorset/Contents.json
@@ -9,10 +9,10 @@ "color" : { "color-space" : "display-p3", "components" : { - "red" : "0xE8", "alpha" : "1.000", - "blue" : "0xEC", - "green" : "0xEA" + "red" : "0xE8", + "green" : "0xEA", + "blue" : "0xEC" } } }, @@ -27,12 +27,12 @@ "color" : { "color-space" : "display-p3", "components" : { - "red" : "0x47", "alpha" : "1.000", - "blue" : "0x50", - "green" : "0x4C" + "red" : "0x47", + "green" : "0x4C", + "blue" : "0x50" } } } ] -} \ No newline at end of file +}
diff --git a/ios/chrome/common/ui/colors/resources/solid_button_text_color.colorset/Contents.json b/ios/chrome/common/ui/colors/resources/solid_button_text_color.colorset/Contents.json index c6bef79..200ab8b 100644 --- a/ios/chrome/common/ui/colors/resources/solid_button_text_color.colorset/Contents.json +++ b/ios/chrome/common/ui/colors/resources/solid_button_text_color.colorset/Contents.json
@@ -9,10 +9,10 @@ "color" : { "color-space" : "display-p3", "components" : { - "red" : "0xFF", "alpha" : "1.000", - "blue" : "0xFF", - "green" : "0xFF" + "red" : "0xFF", + "green" : "0xFF", + "blue" : "0xFF" } } }, @@ -27,12 +27,12 @@ "color" : { "color-space" : "display-p3", "components" : { - "red" : "0x20", "alpha" : "1.000", - "blue" : "0x24", - "green" : "0x21" + "red" : "0x20", + "green" : "0x21", + "blue" : "0x24" } } } ] -} \ No newline at end of file +}
diff --git a/ios/chrome/common/ui/colors/resources/table_view_row_highlight_color.colorset/Contents.json b/ios/chrome/common/ui/colors/resources/table_view_row_highlight_color.colorset/Contents.json index 6032667..d905593 100644 --- a/ios/chrome/common/ui/colors/resources/table_view_row_highlight_color.colorset/Contents.json +++ b/ios/chrome/common/ui/colors/resources/table_view_row_highlight_color.colorset/Contents.json
@@ -9,10 +9,10 @@ "color" : { "color-space" : "display-p3", "components" : { - "red" : "0xF1", "alpha" : "1.000", - "blue" : "0xF4", - "green" : "0xF3" + "red" : "0xF1", + "green" : "0xF3", + "blue" : "0xF4" } } }, @@ -27,10 +27,10 @@ "color" : { "color-space" : "display-p3", "components" : { - "red" : "0xFF", "alpha" : "0.050", - "blue" : "0xFF", - "green" : "0xFF" + "red" : "0xFF", + "green" : "0xFF", + "blue" : "0xFF" } } }
diff --git a/ios/chrome/common/ui/colors/resources/table_view_row_highlight_dark_color.colorset/Contents.json b/ios/chrome/common/ui/colors/resources/table_view_row_highlight_dark_color.colorset/Contents.json deleted file mode 100644 index 183981e..0000000 --- a/ios/chrome/common/ui/colors/resources/table_view_row_highlight_dark_color.colorset/Contents.json +++ /dev/null
@@ -1,20 +0,0 @@ -{ - "info" : { - "version" : 1, - "author" : "xcode" - }, - "colors" : [ - { - "idiom" : "universal", - "color" : { - "color-space" : "display-p3", - "components" : { - "red" : "0xFF", - "alpha" : "0.050", - "blue" : "0xFF", - "green" : "0xFF" - } - } - } - ] -} \ No newline at end of file
diff --git a/ios/chrome/common/ui/colors/resources/tertiary_background_color.colorset/Contents.json b/ios/chrome/common/ui/colors/resources/tertiary_background_color.colorset/Contents.json index 7b47a4a..d2fa96c 100644 --- a/ios/chrome/common/ui/colors/resources/tertiary_background_color.colorset/Contents.json +++ b/ios/chrome/common/ui/colors/resources/tertiary_background_color.colorset/Contents.json
@@ -9,10 +9,10 @@ "color": { "color-space": "display-p3", "components": { - "red": "0xF1", "alpha": "1.000", - "blue": "0xF4", - "green": "0xF3" + "red": "0xF1", + "green": "0xF3", + "blue": "0xF4" } } }, @@ -27,10 +27,10 @@ "color": { "color-space": "display-p3", "components": { - "red": "0x46", "alpha": "1.000", - "blue": "0x4E", - "green": "0x4A" + "red": "0x46", + "green": "0x4A", + "blue": "0x4E" } } }
diff --git a/ios/chrome/common/ui/colors/resources/tertiary_background_dark_color.colorset/Contents.json b/ios/chrome/common/ui/colors/resources/tertiary_background_dark_color.colorset/Contents.json deleted file mode 100644 index d601f496b..0000000 --- a/ios/chrome/common/ui/colors/resources/tertiary_background_dark_color.colorset/Contents.json +++ /dev/null
@@ -1,20 +0,0 @@ -{ - "info": { - "version": 1, - "author": "xcode" - }, - "colors": [ - { - "idiom": "universal", - "color": { - "color-space": "display-p3", - "components": { - "red": "0x46", - "alpha": "1.000", - "blue": "0x4E", - "green": "0x4A" - } - } - } - ] -}
diff --git a/ios/chrome/common/ui/colors/resources/text_primary_color.colorset/Contents.json b/ios/chrome/common/ui/colors/resources/text_primary_color.colorset/Contents.json index 3f7c94b8..1087615 100644 --- a/ios/chrome/common/ui/colors/resources/text_primary_color.colorset/Contents.json +++ b/ios/chrome/common/ui/colors/resources/text_primary_color.colorset/Contents.json
@@ -9,10 +9,10 @@ "color" : { "color-space" : "display-p3", "components" : { - "red" : "0x20", "alpha" : "1.000", - "blue" : "0x24", - "green" : "0x21" + "red" : "0x20", + "green" : "0x21", + "blue" : "0x24" } } }, @@ -27,12 +27,12 @@ "color" : { "color-space" : "display-p3", "components" : { - "red" : "0xE8", "alpha" : "1.000", - "blue" : "0xED", - "green" : "0xEA" + "red" : "0xE8", + "green" : "0xEA", + "blue" : "0xED" } } } ] -} \ No newline at end of file +}
diff --git a/ios/chrome/common/ui/colors/resources/text_primary_dark_color.colorset/Contents.json b/ios/chrome/common/ui/colors/resources/text_primary_dark_color.colorset/Contents.json deleted file mode 100644 index f8fc14c8..0000000 --- a/ios/chrome/common/ui/colors/resources/text_primary_dark_color.colorset/Contents.json +++ /dev/null
@@ -1,20 +0,0 @@ -{ - "info" : { - "version" : 1, - "author" : "xcode" - }, - "colors" : [ - { - "idiom" : "universal", - "color" : { - "color-space" : "display-p3", - "components" : { - "red" : "0xE8", - "alpha" : "1.000", - "blue" : "0xED", - "green" : "0xEA" - } - } - } - ] -}
diff --git a/ios/chrome/common/ui/colors/resources/text_secondary_color.colorset/Contents.json b/ios/chrome/common/ui/colors/resources/text_secondary_color.colorset/Contents.json index 66368757..3b46075 100644 --- a/ios/chrome/common/ui/colors/resources/text_secondary_color.colorset/Contents.json +++ b/ios/chrome/common/ui/colors/resources/text_secondary_color.colorset/Contents.json
@@ -9,10 +9,10 @@ "color" : { "color-space" : "display-p3", "components" : { - "red" : "0x73", "alpha" : "1.000", - "blue" : "0x7B", - "green" : "0x77" + "red" : "0x73", + "green" : "0x77", + "blue" : "0x7B" } } }, @@ -27,12 +27,12 @@ "color" : { "color-space" : "display-p3", "components" : { - "red" : "0x9A", "alpha" : "1.000", - "blue" : "0xA6", - "green" : "0x9F" + "red" : "0x9A", + "green" : "0x9F", + "blue" : "0xA6" } } } ] -} \ No newline at end of file +}
diff --git a/ios/chrome/common/ui/colors/resources/text_secondary_dark_color.colorset/Contents.json b/ios/chrome/common/ui/colors/resources/text_secondary_dark_color.colorset/Contents.json deleted file mode 100644 index 2ea5221e..0000000 --- a/ios/chrome/common/ui/colors/resources/text_secondary_dark_color.colorset/Contents.json +++ /dev/null
@@ -1,20 +0,0 @@ -{ - "info" : { - "version" : 1, - "author" : "xcode" - }, - "colors" : [ - { - "idiom" : "universal", - "color" : { - "color-space" : "display-p3", - "components" : { - "red" : "0x9A", - "alpha" : "1.000", - "blue" : "0xA6", - "green" : "0x9F" - } - } - } - ] -}
diff --git a/ios/chrome/common/ui/colors/resources/text_tertiary_color.colorset/Contents.json b/ios/chrome/common/ui/colors/resources/text_tertiary_color.colorset/Contents.json index bbef72f..65cc8b4 100644 --- a/ios/chrome/common/ui/colors/resources/text_tertiary_color.colorset/Contents.json +++ b/ios/chrome/common/ui/colors/resources/text_tertiary_color.colorset/Contents.json
@@ -9,10 +9,10 @@ "color": { "color-space": "display-p3", "components": { - "red": "0x3C", "alpha": "0.3", - "blue": "0x43", - "green": "0x3C" + "red": "0x3C", + "green": "0x3C", + "blue": "0x43" } } }, @@ -27,10 +27,10 @@ "color": { "color-space": "display-p3", "components": { - "red": "0xEB", "alpha": "0.3", - "blue": "0xF5", - "green": "0xEB" + "red": "0xEB", + "green": "0xEB", + "blue": "0xF5" } } }
diff --git a/ios/chrome/common/ui/colors/resources/textfield_background_color.colorset/Contents.json b/ios/chrome/common/ui/colors/resources/textfield_background_color.colorset/Contents.json index 759844c..d9f11df 100644 --- a/ios/chrome/common/ui/colors/resources/textfield_background_color.colorset/Contents.json +++ b/ios/chrome/common/ui/colors/resources/textfield_background_color.colorset/Contents.json
@@ -9,10 +9,10 @@ "color" : { "color-space" : "display-p3", "components" : { - "red" : "0xE8", "alpha" : "1.000", - "blue" : "0xED", - "green" : "0xEA" + "red" : "0xE8", + "green" : "0xEA", + "blue" : "0xED" } } }, @@ -27,12 +27,12 @@ "color" : { "color-space" : "display-p3", "components" : { - "red" : "0x5F", "alpha" : "1.000", - "blue" : "0x67", - "green" : "0x63" + "red" : "0x5F", + "green" : "0x63", + "blue" : "0x67" } } } ] -} \ No newline at end of file +}
diff --git a/ios/chrome/common/ui/colors/resources/textfield_background_dark_color.colorset/Contents.json b/ios/chrome/common/ui/colors/resources/textfield_background_dark_color.colorset/Contents.json deleted file mode 100644 index e0dc4c76..0000000 --- a/ios/chrome/common/ui/colors/resources/textfield_background_dark_color.colorset/Contents.json +++ /dev/null
@@ -1,20 +0,0 @@ -{ - "info" : { - "version" : 1, - "author" : "xcode" - }, - "colors" : [ - { - "idiom" : "universal", - "color" : { - "color-space" : "display-p3", - "components" : { - "red" : "0x5F", - "alpha" : "1.000", - "blue" : "0x67", - "green" : "0x63" - } - } - } - ] -}
diff --git a/ios/chrome/common/ui/colors/resources/textfield_placeholder_color.colorset/Contents.json b/ios/chrome/common/ui/colors/resources/textfield_placeholder_color.colorset/Contents.json index 52d7bbaa..b744521 100644 --- a/ios/chrome/common/ui/colors/resources/textfield_placeholder_color.colorset/Contents.json +++ b/ios/chrome/common/ui/colors/resources/textfield_placeholder_color.colorset/Contents.json
@@ -9,10 +9,10 @@ "color" : { "color-space" : "display-p3", "components" : { - "red" : "0x80", "alpha" : "1.000", - "blue" : "0x8A", - "green" : "0x86" + "red" : "0x80", + "green" : "0x86", + "blue" : "0x8A" } } }, @@ -27,12 +27,12 @@ "color" : { "color-space" : "display-p3", "components" : { - "red" : "0xBD", "alpha" : "1.000", - "blue" : "0xC5", - "green" : "0xC1" + "red" : "0xBD", + "green" : "0xC1", + "blue" : "0xC5" } } } ] -} \ No newline at end of file +}
diff --git a/ios/chrome/common/ui/colors/resources/textfield_placeholder_dark_color.colorset/Contents.json b/ios/chrome/common/ui/colors/resources/textfield_placeholder_dark_color.colorset/Contents.json deleted file mode 100644 index baa3fb1..0000000 --- a/ios/chrome/common/ui/colors/resources/textfield_placeholder_dark_color.colorset/Contents.json +++ /dev/null
@@ -1,20 +0,0 @@ -{ - "info" : { - "version" : 1, - "author" : "xcode" - }, - "colors" : [ - { - "idiom" : "universal", - "color" : { - "color-space" : "display-p3", - "components" : { - "red" : "0xBD", - "alpha" : "1.000", - "blue" : "0xC5", - "green" : "0xC1" - } - } - } - ] -}
diff --git a/ios/chrome/common/ui/colors/resources/tint_dark_color.colorset/Contents.json b/ios/chrome/common/ui/colors/resources/tint_dark_color.colorset/Contents.json deleted file mode 100644 index 2f40cc2..0000000 --- a/ios/chrome/common/ui/colors/resources/tint_dark_color.colorset/Contents.json +++ /dev/null
@@ -1,20 +0,0 @@ -{ - "info" : { - "version" : 1, - "author" : "xcode" - }, - "colors" : [ - { - "idiom" : "universal", - "color" : { - "color-space" : "display-p3", - "components" : { - "red" : "0x8A", - "alpha" : "1.000", - "blue" : "0xF9", - "green" : "0xB4" - } - } - } - ] -}
diff --git a/ios/chrome/common/ui/colors/resources/toolbar_button_color.colorset/Contents.json b/ios/chrome/common/ui/colors/resources/toolbar_button_color.colorset/Contents.json index 4b476100..a8812187 100644 --- a/ios/chrome/common/ui/colors/resources/toolbar_button_color.colorset/Contents.json +++ b/ios/chrome/common/ui/colors/resources/toolbar_button_color.colorset/Contents.json
@@ -9,10 +9,10 @@ "color" : { "color-space" : "display-p3", "components" : { - "red" : "0x80", "alpha" : "1.000", - "blue" : "0x8A", - "green" : "0x86" + "red" : "0x80", + "green" : "0x86", + "blue" : "0x8A" } } }, @@ -27,10 +27,10 @@ "color" : { "color-space" : "display-p3", "components" : { - "red" : "0xE8", "alpha" : "1.000", - "blue" : "0xED", - "green" : "0xEA" + "red" : "0xE8", + "green" : "0xEA", + "blue" : "0xED" } } }
diff --git a/ios/chrome/common/ui/colors/resources/toolbar_button_dark_color.colorset/Contents.json b/ios/chrome/common/ui/colors/resources/toolbar_button_dark_color.colorset/Contents.json deleted file mode 100644 index f8fc14c8..0000000 --- a/ios/chrome/common/ui/colors/resources/toolbar_button_dark_color.colorset/Contents.json +++ /dev/null
@@ -1,20 +0,0 @@ -{ - "info" : { - "version" : 1, - "author" : "xcode" - }, - "colors" : [ - { - "idiom" : "universal", - "color" : { - "color-space" : "display-p3", - "components" : { - "red" : "0xE8", - "alpha" : "1.000", - "blue" : "0xED", - "green" : "0xEA" - } - } - } - ] -}
diff --git a/ios/chrome/common/ui/colors/resources/toolbar_shadow_color.colorset/Contents.json b/ios/chrome/common/ui/colors/resources/toolbar_shadow_color.colorset/Contents.json index 8752f64..0dbeea7 100644 --- a/ios/chrome/common/ui/colors/resources/toolbar_shadow_color.colorset/Contents.json +++ b/ios/chrome/common/ui/colors/resources/toolbar_shadow_color.colorset/Contents.json
@@ -9,10 +9,10 @@ "color" : { "color-space" : "display-p3", "components" : { - "red" : "0x00", "alpha" : "0.200", - "blue" : "0x00", - "green" : "0x00" + "red" : "0x00", + "green" : "0x00", + "blue" : "0x00" } } }, @@ -27,10 +27,10 @@ "color" : { "color-space" : "display-p3", "components" : { - "red" : "0x00", "alpha" : "0.900", - "blue" : "0x00", - "green" : "0x00" + "red" : "0x00", + "green" : "0x00", + "blue" : "0x00" } } }
diff --git a/ios/chrome/common/ui/colors/semantic_color_names.h b/ios/chrome/common/ui/colors/semantic_color_names.h index cf21fa5..d7b6965 100644 --- a/ios/chrome/common/ui/colors/semantic_color_names.h +++ b/ios/chrome/common/ui/colors/semantic_color_names.h
@@ -71,24 +71,4 @@ extern NSString* const kGrey800Color; extern NSString* const kGrey900Color; -// Temporary colors for iOS 12. Because overridePreferredInterfaceStyle isn't -// available in iOS 12, any views that should always be dark (e.g. incognito) -// need to use colorsets that always use the dark variant. -// TODO(crbug.com/981889): Clean up after iOS 12 support is dropped. - -extern NSString* const kBackgroundDarkColor; -extern NSString* const kSecondaryBackgroundDarkColor; -extern NSString* const kTertiaryBackgroundDarkColor; -extern NSString* const kCloseButtonDarkColor; -extern NSString* const kTableViewRowHighlightDarkColor; -extern NSString* const kTextPrimaryDarkColor; -extern NSString* const kTextSecondaryDarkColor; -extern NSString* const kTextfieldBackgroundDarkColor; -extern NSString* const kTextfieldPlaceholderDarkColor; -extern NSString* const kToolbarButtonDarkColor; - -extern NSString* const kBlueDarkColor; -extern NSString* const kGreenDarkColor; -extern NSString* const kRedDarkColor; - #endif // IOS_CHROME_COMMON_UI_COLORS_SEMANTIC_COLOR_NAMES_H_
diff --git a/ios/chrome/common/ui/colors/semantic_color_names.mm b/ios/chrome/common/ui/colors/semantic_color_names.mm index 3c87515..e6ad0dc 100644 --- a/ios/chrome/common/ui/colors/semantic_color_names.mm +++ b/ios/chrome/common/ui/colors/semantic_color_names.mm
@@ -52,25 +52,3 @@ NSString* const kGrey700Color = @"grey_700_color"; NSString* const kGrey800Color = @"grey_800_color"; NSString* const kGrey900Color = @"grey_900_color"; - -// Temporary for iOS 12 - -NSString* const kBackgroundDarkColor = @"background_dark_color"; -NSString* const kSecondaryBackgroundDarkColor = - @"secondary_background_dark_color"; -NSString* const kTertiaryBackgroundDarkColor = - @"tertiary_background_dark_color"; -NSString* const kCloseButtonDarkColor = @"close_button_dark_color"; -NSString* const kTableViewRowHighlightDarkColor = - @"table_view_row_highlight_dark_color"; -NSString* const kTextPrimaryDarkColor = @"text_primary_dark_color"; -NSString* const kTextSecondaryDarkColor = @"text_secondary_dark_color"; -NSString* const kTextfieldBackgroundDarkColor = - @"textfield_background_dark_color"; -NSString* const kTextfieldPlaceholderDarkColor = - @"textfield_placeholder_dark_color"; -NSString* const kToolbarButtonDarkColor = @"toolbar_button_dark_color"; - -NSString* const kBlueDarkColor = @"blue_dark_color"; -NSString* const kGreenDarkColor = @"green_dark_color"; -NSString* const kRedDarkColor = @"red_dark_color";
diff --git a/ios/chrome/credential_provider_extension/credential_provider_extension_localize_strings_config.plist b/ios/chrome/credential_provider_extension/credential_provider_extension_localize_strings_config.plist index aa2941a0..df2bca4 100644 --- a/ios/chrome/credential_provider_extension/credential_provider_extension_localize_strings_config.plist +++ b/ios/chrome/credential_provider_extension/credential_provider_extension_localize_strings_config.plist
@@ -30,6 +30,8 @@ <string>IDS_IOS_CREDENTIAL_PROVIDER_ENTER</string> <string>IDS_IOS_CREDENTIAL_PROVIDER_EXTENSION_CANCEL</string> <string>IDS_IOS_CREDENTIAL_PROVIDER_HELP_ACCESSIBILITY_LABEL</string> + <string>IDS_IOS_CREDENTIAL_PROVIDER_NEW_PASSWORD_ERROR_MESSAGE</string> + <string>IDS_IOS_CREDENTIAL_PROVIDER_NEW_PASSWORD_ERROR_TITLE</string> <string>IDS_IOS_CREDENTIAL_PROVIDER_NEW_PASSWORD_FOOTER</string> <string>IDS_IOS_CREDENTIAL_PROVIDER_NEW_PASSWORD_FOOTER_NO_EMAIL</string> <string>IDS_IOS_CREDENTIAL_PROVIDER_NEW_PASSWORD_SUGGEST_STRONG_PASSWORD</string>
diff --git a/ios/chrome/credential_provider_extension/password_util.h b/ios/chrome/credential_provider_extension/password_util.h index d35e63fb..d47d7d5e 100644 --- a/ios/chrome/credential_provider_extension/password_util.h +++ b/ios/chrome/credential_provider_extension/password_util.h
@@ -10,4 +10,8 @@ // Queries Keychain Services for the passed identifier password. NSString* PasswordWithKeychainIdentifier(NSString* identifier); +// Stores |password| in Keychain Services using |identifier| as its identifier +// for later query. Returns |YES| if saving was successful and |NO| otherwise. +BOOL StorePasswordInKeychain(NSString* password, NSString* identifier); + #endif // IOS_CHROME_CREDENTIAL_PROVIDER_EXTENSION_PASSWORD_UTIL_H_
diff --git a/ios/chrome/credential_provider_extension/password_util.mm b/ios/chrome/credential_provider_extension/password_util.mm index 4faf39f..f587cfb 100644 --- a/ios/chrome/credential_provider_extension/password_util.mm +++ b/ios/chrome/credential_provider_extension/password_util.mm
@@ -39,3 +39,28 @@ DLOG(ERROR) << "Error retrieving password, OSStatus: " << status; return @""; } + +BOOL StorePasswordInKeychain(NSString* password, NSString* identifier) { + if (!identifier || identifier.length == 0) { + return NO; + } + + NSData* passwordData = [password dataUsingEncoding:NSUTF8StringEncoding]; + + NSDictionary* query = @{ + (__bridge id)kSecClass : (__bridge id)kSecClassGenericPassword, + (__bridge id) + kSecAttrAccessible : (__bridge id)kSecAttrAccessibleWhenUnlocked, + (__bridge id)kSecValueData : passwordData, + (__bridge id)kSecAttrAccount : identifier, + }; + + OSStatus status = SecItemAdd((__bridge CFDictionaryRef)query, NULL); + + if (status != errSecSuccess) { + UpdateUMACountForKey( + app_group::kCredentialExtensionKeychainSavePasswordFailureCount); + } + + return status == errSecSuccess; +}
diff --git a/ios/chrome/credential_provider_extension/password_util_unittest.mm b/ios/chrome/credential_provider_extension/password_util_unittest.mm index 6e8a500..ddad5a7 100644 --- a/ios/chrome/credential_provider_extension/password_util_unittest.mm +++ b/ios/chrome/credential_provider_extension/password_util_unittest.mm
@@ -112,4 +112,26 @@ ASSERT_TRUE([PasswordWithKeychainIdentifier(nil) isEqualToString:@""]); } +// Tests storing passwords with StorePassword. +TEST_F(PasswordUtilKeychainTest, CheckSavingPasswords) { + EXPECT_TRUE(StorePasswordInKeychain(kCredentialPassword1, + KeyWithPrefix(kCredentialKey1))); + EXPECT_TRUE(StorePasswordInKeychain(kCredentialPassword2, + KeyWithPrefix(kCredentialKey2))); + + ASSERT_TRUE([PasswordWithKeychainIdentifier(KeyWithPrefix(kCredentialKey2)) + isEqualToString:kCredentialPassword2]); + ASSERT_TRUE([PasswordWithKeychainIdentifier(KeyWithPrefix(kCredentialKey1)) + isEqualToString:kCredentialPassword1]); + RemovePasswordForKey(kCredentialKey1); + ASSERT_TRUE([PasswordWithKeychainIdentifier(KeyWithPrefix(kCredentialKey2)) + isEqualToString:kCredentialPassword2]); + RemovePasswordForKey(kCredentialKey2); +} + +// Tests storing a password with an empty identifier +TEST_F(PasswordUtilKeychainTest, StoreEmptyIdentifier) { + EXPECT_FALSE(StorePasswordInKeychain(kCredentialPassword1, @"")); +} + } // credential_provider_extension
diff --git a/ios/chrome/credential_provider_extension/strings/ios_credential_provider_extension_strings.grd b/ios/chrome/credential_provider_extension/strings/ios_credential_provider_extension_strings.grd index 325d4e370..a264aa71 100644 --- a/ios/chrome/credential_provider_extension/strings/ios_credential_provider_extension_strings.grd +++ b/ios/chrome/credential_provider_extension/strings/ios_credential_provider_extension_strings.grd
@@ -212,6 +212,12 @@ <message name="IDS_IOS_CREDENTIAL_PROVIDER_HELP_ACCESSIBILITY_LABEL" desc="Used as the accessibility label read by screen readers for a Help button." meaning="[iOS only][CHAR_LIMIT=30]"> Help </message> + <message name="IDS_IOS_CREDENTIAL_PROVIDER_NEW_PASSWORD_ERROR_MESSAGE" desc="Message for error message if password saving fails"> + Something went wrong. Try again later. + </message> + <message name="IDS_IOS_CREDENTIAL_PROVIDER_NEW_PASSWORD_ERROR_TITLE" desc="Title for error message if password saving fails"> + Can't Save Password + </message> <message name="IDS_IOS_CREDENTIAL_PROVIDER_NEW_PASSWORD_FOOTER" desc="Disclaimer telling users what will happen to their passwords"> Your password will be saved in your Google Account (<ph name="EMAIL">$1<ex>example@google.com</ex></ph>) when you come back to Chrome </message>
diff --git a/ios/chrome/credential_provider_extension/strings/ios_credential_provider_extension_strings_grd/IDS_IOS_CREDENTIAL_PROVIDER_NEW_PASSWORD_ERROR_MESSAGE.png.sha1 b/ios/chrome/credential_provider_extension/strings/ios_credential_provider_extension_strings_grd/IDS_IOS_CREDENTIAL_PROVIDER_NEW_PASSWORD_ERROR_MESSAGE.png.sha1 new file mode 100644 index 0000000..24e930f1 --- /dev/null +++ b/ios/chrome/credential_provider_extension/strings/ios_credential_provider_extension_strings_grd/IDS_IOS_CREDENTIAL_PROVIDER_NEW_PASSWORD_ERROR_MESSAGE.png.sha1
@@ -0,0 +1 @@ +267741fa283975c069b6d373eb2d43d0eaae20f2 \ No newline at end of file
diff --git a/ios/chrome/credential_provider_extension/strings/ios_credential_provider_extension_strings_grd/IDS_IOS_CREDENTIAL_PROVIDER_NEW_PASSWORD_ERROR_TITLE.png.sha1 b/ios/chrome/credential_provider_extension/strings/ios_credential_provider_extension_strings_grd/IDS_IOS_CREDENTIAL_PROVIDER_NEW_PASSWORD_ERROR_TITLE.png.sha1 new file mode 100644 index 0000000..24e930f1 --- /dev/null +++ b/ios/chrome/credential_provider_extension/strings/ios_credential_provider_extension_strings_grd/IDS_IOS_CREDENTIAL_PROVIDER_NEW_PASSWORD_ERROR_TITLE.png.sha1
@@ -0,0 +1 @@ +267741fa283975c069b6d373eb2d43d0eaae20f2 \ No newline at end of file
diff --git a/ios/chrome/credential_provider_extension/ui/credential_list_coordinator.mm b/ios/chrome/credential_provider_extension/ui/credential_list_coordinator.mm index 5c7734a..49b3b73b 100644 --- a/ios/chrome/credential_provider_extension/ui/credential_list_coordinator.mm +++ b/ios/chrome/credential_provider_extension/ui/credential_list_coordinator.mm
@@ -173,7 +173,8 @@ - (void)showCreateNewPasswordUI { self.createPasswordCoordinator = [[NewPasswordCoordinator alloc] initWithBaseViewController:self.viewController - context:self.context]; + context:self.context + serviceIdentifiers:self.serviceIdentifiers]; [self.createPasswordCoordinator start]; }
diff --git a/ios/chrome/credential_provider_extension/ui/new_password_coordinator.h b/ios/chrome/credential_provider_extension/ui/new_password_coordinator.h index 8453a21..02346d67 100644 --- a/ios/chrome/credential_provider_extension/ui/new_password_coordinator.h +++ b/ios/chrome/credential_provider_extension/ui/new_password_coordinator.h
@@ -8,6 +8,7 @@ #import <UIKit/UIKit.h> @class ASCredentialProviderExtensionContext; +@class ASCredentialServiceIdentifier; // The coordinator for the new password feature. @interface NewPasswordCoordinator : NSObject @@ -17,6 +18,8 @@ - (instancetype) initWithBaseViewController:(UIViewController*)baseViewController context:(ASCredentialProviderExtensionContext*)context + serviceIdentifiers: + (NSArray<ASCredentialServiceIdentifier*>*)serviceIdentifiers NS_DESIGNATED_INITIALIZER; - (instancetype)init NS_UNAVAILABLE;
diff --git a/ios/chrome/credential_provider_extension/ui/new_password_coordinator.mm b/ios/chrome/credential_provider_extension/ui/new_password_coordinator.mm index 98fa0bb..dadaf99 100644 --- a/ios/chrome/credential_provider_extension/ui/new_password_coordinator.mm +++ b/ios/chrome/credential_provider_extension/ui/new_password_coordinator.mm
@@ -4,6 +4,11 @@ #import "ios/chrome/credential_provider_extension/ui/new_password_coordinator.h" +#import <AuthenticationServices/AuthenticationServices.h> + +#import "ios/chrome/common/credential_provider/credential.h" +#import "ios/chrome/credential_provider_extension/password_util.h" +#import "ios/chrome/credential_provider_extension/ui/new_password_mediator.h" #import "ios/chrome/credential_provider_extension/ui/new_password_view_controller.h" #if !defined(__has_feature) || !__has_feature(objc_arc) @@ -21,25 +26,39 @@ // The extension context for the credential provider. @property(nonatomic, weak) ASCredentialProviderExtensionContext* context; +// The mediator for this coordinator. +@property(nonatomic, strong) NewPasswordMediator* mediator; + +// The service identifiers this password is being created for. +@property(nonatomic, strong) + NSArray<ASCredentialServiceIdentifier*>* serviceIdentifiers; + @end @implementation NewPasswordCoordinator - (instancetype) initWithBaseViewController:(UIViewController*)baseViewController - context:(ASCredentialProviderExtensionContext*)context { + context:(ASCredentialProviderExtensionContext*)context + serviceIdentifiers: + (NSArray<ASCredentialServiceIdentifier*>*)serviceIdentifiers { self = [super init]; if (self) { _baseViewController = baseViewController; _context = context; + _serviceIdentifiers = serviceIdentifiers; } return self; } - (void)start { + self.mediator = [[NewPasswordMediator alloc] + initWithServiceIdentifier:self.serviceIdentifiers.firstObject]; + NewPasswordViewController* newPasswordViewController = [[NewPasswordViewController alloc] init]; newPasswordViewController.delegate = self; + newPasswordViewController.credentialHandler = self.mediator; self.viewController = [[UINavigationController alloc] initWithRootViewController:newPasswordViewController]; [self.baseViewController presentViewController:self.viewController @@ -61,4 +80,14 @@ [self.baseViewController dismissViewControllerAnimated:YES completion:nil]; } +- (void)userSelectedCredential:(id<Credential>)credential { + NSString* password = + PasswordWithKeychainIdentifier(credential.keychainIdentifier); + ASPasswordCredential* ASCredential = + [ASPasswordCredential credentialWithUser:credential.user + password:password]; + [self.context completeRequestWithSelectedCredential:ASCredential + completionHandler:nil]; +} + @end
diff --git a/ios/chrome/credential_provider_extension/ui/new_password_mediator.h b/ios/chrome/credential_provider_extension/ui/new_password_mediator.h index be34ab4..2fefa747 100644 --- a/ios/chrome/credential_provider_extension/ui/new_password_mediator.h +++ b/ios/chrome/credential_provider_extension/ui/new_password_mediator.h
@@ -7,9 +7,18 @@ #import <Foundation/Foundation.h> +#import "ios/chrome/credential_provider_extension/ui/new_password_view_controller.h" + +@class ASCredentialServiceIdentifier; + // This mediator fetches requirements and saves new credentials for its // consumer. -@interface NewPasswordMediator : NSObject +@interface NewPasswordMediator : NSObject <NewCredentialHandler> + +- (instancetype)initWithServiceIdentifier: + (ASCredentialServiceIdentifier*)serviceIdentifier NS_DESIGNATED_INITIALIZER; + +- (instancetype)init NS_UNAVAILABLE; @end #endif // IOS_CHROME_CREDENTIAL_PROVIDER_EXTENSION_UI_NEW_PASSWORD_MEDIATOR_H_
diff --git a/ios/chrome/credential_provider_extension/ui/new_password_mediator.mm b/ios/chrome/credential_provider_extension/ui/new_password_mediator.mm index e25ed1e..4bab35859 100644 --- a/ios/chrome/credential_provider_extension/ui/new_password_mediator.mm +++ b/ios/chrome/credential_provider_extension/ui/new_password_mediator.mm
@@ -4,9 +4,72 @@ #import "ios/chrome/credential_provider_extension/ui/new_password_mediator.h" +#import <AuthenticationServices/AuthenticationServices.h> + +#include "ios/chrome/common/app_group/app_group_constants.h" +#import "ios/chrome/common/credential_provider/archivable_credential.h" +#import "ios/chrome/common/credential_provider/constants.h" +#import "ios/chrome/common/credential_provider/user_defaults_credential_store.h" +#import "ios/chrome/credential_provider_extension/password_util.h" + #if !defined(__has_feature) || !__has_feature(objc_arc) #error "This file requires ARC support." #endif +@interface NewPasswordMediator () + +// The service identifier the password is being created for, +@property(nonatomic, strong) ASCredentialServiceIdentifier* serviceIdentifier; + +@end + @implementation NewPasswordMediator + +- (instancetype)initWithServiceIdentifier: + (ASCredentialServiceIdentifier*)serviceIdentifier { + self = [super init]; + if (self) { + _serviceIdentifier = serviceIdentifier; + } + return self; +} + +#pragma mark - NewCredentialHandler + +- (ArchivableCredential*)createNewCredentialWithUsername:(NSString*)username + password:(NSString*)password { + NSString* uuid = [[NSUUID UUID] UUIDString]; + if (!StorePasswordInKeychain(password, uuid)) { + return nil; + } + + NSURL* url = [NSURL URLWithString:self.serviceIdentifier.identifier]; + NSString* recordIdentifier = + [NSString stringWithFormat:@"CPE|%@|%@|%@", url.host, username, + self.serviceIdentifier.identifier]; + NSString* validationIdentifier = + AppGroupUserDefaultsCredentialProviderUserID(); + + return [[ArchivableCredential alloc] + initWithFavicon:nil + keychainIdentifier:uuid + rank:1 + recordIdentifier:recordIdentifier + serviceIdentifier:self.serviceIdentifier.identifier + serviceName:url.host + user:username + validationIdentifier:validationIdentifier]; +} + +- (void)saveNewCredential:(ArchivableCredential*)credential + completion:(void (^)(NSError* error))completion { + NSString* key = AppGroupUserDefaultsCredentialProviderNewCredentials(); + UserDefaultsCredentialStore* store = [[UserDefaultsCredentialStore alloc] + initWithUserDefaults:app_group::GetGroupUserDefaults() + key:key]; + + [store addCredential:credential]; + [store saveDataWithCompletion:completion]; +} + @end
diff --git a/ios/chrome/credential_provider_extension/ui/new_password_table_cell.h b/ios/chrome/credential_provider_extension/ui/new_password_table_cell.h index 616322d9..0289fe2 100644 --- a/ios/chrome/credential_provider_extension/ui/new_password_table_cell.h +++ b/ios/chrome/credential_provider_extension/ui/new_password_table_cell.h
@@ -14,6 +14,15 @@ NewPasswordTableCellTypeNumRows, }; +@class NewPasswordTableCell; + +@protocol NewPasswordTableCellDelegate + +// Alerts the delegate every time the text field changes in this cell. +- (void)textFieldDidChangeInCell:(NewPasswordTableCell*)cell; + +@end + @interface NewPasswordTableCell : UITableViewCell // Reuse ID for registering this class in table views. @@ -22,6 +31,9 @@ // Field that holds the user-entered text. @property(nonatomic, strong) UITextField* textField; +// Delegate for this cell. +@property(nonatomic, weak) id<NewPasswordTableCellDelegate> delegate; + // Sets the cell up to show the given type. - (void)setCellType:(NewPasswordTableCellType)cellType;
diff --git a/ios/chrome/credential_provider_extension/ui/new_password_table_cell.mm b/ios/chrome/credential_provider_extension/ui/new_password_table_cell.mm index ed4b3d9..b453166 100644 --- a/ios/chrome/credential_provider_extension/ui/new_password_table_cell.mm +++ b/ios/chrome/credential_provider_extension/ui/new_password_table_cell.mm
@@ -86,6 +86,9 @@ _textField.hidden = YES; _textField.font = [UIFont preferredFontForTextStyle:UIFontTextStyleBody]; _textField.textColor = [UIColor colorNamed:kTextPrimaryColor]; + [_textField addTarget:self + action:@selector(textFieldDidChange:) + forControlEvents:UIControlEventEditingChanged]; _hidePasswordButton = [UIButton buttonWithType:UIButtonTypeSystem]; _hidePasswordButton.translatesAutoresizingMaskIntoConstraints = NO; @@ -141,6 +144,8 @@ - (void)prepareForReuse { [super prepareForReuse]; + self.delegate = nil; + self.titleLabel.text = @""; self.titleLabel.textColor = [UIColor colorNamed:kTextPrimaryColor]; self.textField.hidden = YES; @@ -180,6 +185,10 @@ self.passwordHidden = !self.passwordHidden; } +- (void)textFieldDidChange:(id)sender { + [self.delegate textFieldDidChangeInCell:self]; +} + #pragma mark - Accessors - (UIImage*)hidePasswordImage {
diff --git a/ios/chrome/credential_provider_extension/ui/new_password_view_controller.h b/ios/chrome/credential_provider_extension/ui/new_password_view_controller.h index ccde1ce..e56f544 100644 --- a/ios/chrome/credential_provider_extension/ui/new_password_view_controller.h +++ b/ios/chrome/credential_provider_extension/ui/new_password_view_controller.h
@@ -7,6 +7,8 @@ #import <UIKit/UIKit.h> +@class ArchivableCredential; +@protocol Credential; @class NewPasswordViewController; @protocol NewPasswordViewControllerDelegate <NSObject> @@ -15,6 +17,22 @@ - (void)navigationCancelButtonWasPressedInNewPasswordViewController: (NewPasswordViewController*)viewController; +// Called when the user selects a given credential +- (void)userSelectedCredential:(id<Credential>)credential; + +@end + +@protocol NewCredentialHandler + +// Called when the user wants to create a new credential. +- (ArchivableCredential*)createNewCredentialWithUsername:(NSString*)username + password:(NSString*)password; + +// Saves the given credential to disk and calls |completion| once the operation +// is finished. +- (void)saveNewCredential:(ArchivableCredential*)credential + completion:(void (^)(NSError* error))completion; + @end // View Controller where a user can create a new credential and use a suggested @@ -23,6 +41,8 @@ @property(nonatomic, weak) id<NewPasswordViewControllerDelegate> delegate; +@property(nonatomic, weak) id<NewCredentialHandler> credentialHandler; + @end #endif // IOS_CHROME_CREDENTIAL_PROVIDER_EXTENSION_UI_NEW_PASSWORD_VIEW_CONTROLLER_H_
diff --git a/ios/chrome/credential_provider_extension/ui/new_password_view_controller.mm b/ios/chrome/credential_provider_extension/ui/new_password_view_controller.mm index fcccd4dc..ae31844 100644 --- a/ios/chrome/credential_provider_extension/ui/new_password_view_controller.mm +++ b/ios/chrome/credential_provider_extension/ui/new_password_view_controller.mm
@@ -5,14 +5,18 @@ #import "ios/chrome/credential_provider_extension/ui/new_password_view_controller.h" #include "base/notreached.h" +#include "ios/chrome/common/app_group/app_group_metrics.h" +#import "ios/chrome/common/credential_provider/archivable_credential.h" #import "ios/chrome/common/ui/colors/semantic_color_names.h" +#import "ios/chrome/credential_provider_extension/metrics_util.h" #import "ios/chrome/credential_provider_extension/ui/new_password_table_cell.h" #if !defined(__has_feature) || !__has_feature(objc_arc) #error "This file requires ARC support." #endif -@interface NewPasswordViewController () <UITableViewDataSource> +@interface NewPasswordViewController () <UITableViewDataSource, + NewPasswordTableCellDelegate> @end @implementation NewPasswordViewController @@ -78,6 +82,7 @@ } [cell setCellType:cellType]; + cell.delegate = self; return cell; } @@ -121,18 +126,42 @@ didSelectRowAtIndexPath:(NSIndexPath*)indexPath { // There is no need to check which cell has been selected because all the // other cells are unselectable from |-tableView:willSelectRowAtIndexPath:|. - NSIndexPath* passwordIndexPath = - [NSIndexPath indexPathForRow:NewPasswordTableCellTypePassword - inSection:0]; - NewPasswordTableCell* passwordCell = - [tableView cellForRowAtIndexPath:passwordIndexPath]; + + NewPasswordTableCell* passwordCell = [self passwordCell]; // TODO(crbug.com/1224986): Generate password and fill it in. passwordCell.textField.text = @""; + [self updateSaveButtonState]; + [tableView deselectRowAtIndexPath:indexPath animated:YES]; } +- (NewPasswordTableCell*)passwordCell { + NSIndexPath* passwordIndexPath = + [NSIndexPath indexPathForRow:NewPasswordTableCellTypePassword + inSection:0]; + NewPasswordTableCell* passwordCell = + [self.tableView cellForRowAtIndexPath:passwordIndexPath]; + + return passwordCell; +} + +#pragma mark - NewPasswordTableCellDelegate + +- (void)textFieldDidChangeInCell:(NewPasswordTableCell*)cell { + if (cell == [self passwordCell]) { + [self updateSaveButtonState]; + } +} + +// Updates the save button state based on whether there is text in the password +// cell. +- (void)updateSaveButtonState { + self.navigationItem.rightBarButtonItem.enabled = + [self passwordCell].textField.text.length > 0; +} + #pragma mark - Private // Action for cancel button. @@ -141,6 +170,66 @@ navigationCancelButtonWasPressedInNewPasswordViewController:self]; } +// Action for save button. +- (void)saveButtonWasPressed { + NSIndexPath* usernameIndexPath = + [NSIndexPath indexPathForRow:NewPasswordTableCellTypeUsername + inSection:0]; + NewPasswordTableCell* usernameCell = + [self.tableView cellForRowAtIndexPath:usernameIndexPath]; + NSString* username = usernameCell.textField.text; + + NSIndexPath* passwordIndexPath = + [NSIndexPath indexPathForRow:NewPasswordTableCellTypePassword + inSection:0]; + NewPasswordTableCell* passwordCell = + [self.tableView cellForRowAtIndexPath:passwordIndexPath]; + NSString* password = passwordCell.textField.text; + + ArchivableCredential* credential = + [self.credentialHandler createNewCredentialWithUsername:username + password:password]; + + if (!credential) { + [self savePasswordFailed]; + return; + } + + [self.credentialHandler + saveNewCredential:credential + completion:^(NSError* error) { + if (error) { + UpdateUMACountForKey( + app_group::kCredentialExtensionSaveCredentialFailureCount); + [self savePasswordFailed]; + return; + } + [self.delegate userSelectedCredential:credential]; + }]; +} + +// Alerts the user that saving their password failed. +- (void)savePasswordFailed { + UIAlertController* ac = [UIAlertController + alertControllerWithTitle: + NSLocalizedString( + @"IDS_IOS_CREDENTIAL_PROVIDER_NEW_PASSWORD_ERROR_TITLE", + @"Title for password save error") + message:NSLocalizedString( + @"IDS_IOS_CREDENTIAL_PROVIDER_NEW_PASSWORD_" + @"ERROR_MESSAGE", + @"Message for password save error") + preferredStyle:UIAlertControllerStyleAlert]; + UIAlertAction* defaultAction = [UIAlertAction + actionWithTitle:NSLocalizedString(@"IDS_IOS_CREDENTIAL_PROVIDER_OK", + @"OK") + style:UIAlertActionStyleDefault + handler:^(UIAlertAction* action){ + }]; + [ac addAction:defaultAction]; + [self presentViewController:ac animated:YES completion:nil]; +} + // Returns a new cancel button for the navigation bar. - (UIBarButtonItem*)navigationCancelButton { UIBarButtonItem* cancelButton = [[UIBarButtonItem alloc] @@ -153,12 +242,15 @@ // Returns a new save button for the navigation bar. - (UIBarButtonItem*)navigationSaveButton { - UIBarButtonItem* cancelButton = [[UIBarButtonItem alloc] + UIBarButtonItem* saveButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemSave - target:nil - action:nil]; - cancelButton.tintColor = [UIColor colorNamed:kBlueColor]; - return cancelButton; + target:self + action:@selector(saveButtonWasPressed)]; + saveButton.tintColor = [UIColor colorNamed:kBlueColor]; + + // Save button should start disabled because no password has been entered. + saveButton.enabled = NO; + return saveButton; } @end
diff --git a/ios/web/web_state/ui/crw_context_menu_controller.mm b/ios/web/web_state/ui/crw_context_menu_controller.mm index d7aed08..8d136d3 100644 --- a/ios/web/web_state/ui/crw_context_menu_controller.mm +++ b/ios/web/web_state/ui/crw_context_menu_controller.mm
@@ -4,6 +4,7 @@ #import "ios/web/web_state/ui/crw_context_menu_controller.h" +#import "base/values.h" #import "ios/web/js_features/context_menu/context_menu_params_utils.h" #import "ios/web/public/ui/context_menu_params.h" #import "ios/web/public/web_state.h" @@ -20,8 +21,6 @@ @interface CRWContextMenuController () <UIContextMenuInteractionDelegate> -@property(nonatomic, assign) web::ContextMenuParams params; - // The context menu responsible for the interaction. @property(nonatomic, strong) UIContextMenuInteraction* contextMenu; @@ -39,7 +38,12 @@ @end -@implementation CRWContextMenuController +@implementation CRWContextMenuController { + // This is an ivar instead of a property. As a property, the struct gets + // copied whenever an inner field is to be changed. The change happens in the + // copy, which is then dropped right after, leaving the original intact. + absl::optional<web::ContextMenuParams> _contextMenuParams; +} @synthesize highlightView = _highlightView; @synthesize dismissView = _dismissView; @@ -103,8 +107,7 @@ // Clear params in case elementFetcher fails, which would lead to a popping // a context menu with the previous context menu params. - self.params.link_url = GURL(); - self.params.src_url = GURL(); + _contextMenuParams.reset(); __weak __typeof(self) weakSelf = self; [self.elementFetcher @@ -112,7 +115,9 @@ completionHandler:^(const web::ContextMenuParams& params) { __typeof(self) strongSelf = weakSelf; javascriptEvaluationComplete = YES; - strongSelf.params = params; + if (!strongSelf) + return; + strongSelf->_contextMenuParams = params; if (isRunLoopNested) { CFRunLoopStop(CFRunLoopGetCurrent()); } @@ -144,8 +149,10 @@ isRunLoopComplete = YES; - if (!web::CanShowContextMenuForParams(self.params)) + if (!_contextMenuParams.has_value() || + !web::CanShowContextMenuForParams(_contextMenuParams.value())) { return nil; + } // Adding the highlight/dismiss view here so they can be used in the // delegate's methods. @@ -154,12 +161,12 @@ self.highlightView.center = location; self.dismissView.center = location; - self.params.location = [self.webView convertPoint:location - fromView:interaction.view]; + _contextMenuParams.value().location = + [self.webView convertPoint:location fromView:interaction.view]; __block UIContextMenuConfiguration* configuration; self.webState->GetDelegate()->ContextMenuConfiguration( - self.webState, self.params, /*preview_provider=*/nil, + self.webState, _contextMenuParams.value(), /*preview_provider=*/nil, ^(UIContextMenuConfiguration* conf) { configuration = conf; });
diff --git a/media/gpu/mac/vt_video_decode_accelerator_mac.cc b/media/gpu/mac/vt_video_decode_accelerator_mac.cc index 428dd4e8..89d91a1 100644 --- a/media/gpu/mac/vt_video_decode_accelerator_mac.cc +++ b/media/gpu/mac/vt_video_decode_accelerator_mac.cc
@@ -1586,13 +1586,22 @@ gl_params.is_cleared = true; gpu::SharedImageBackingGLCommon::UnpackStateAttribs gl_attribs; + // A GL texture id is needed to create the legacy mailbox, which requires + // that the GL context be made current. + const bool kCreateLegacyMailbox = true; + if (!gl_client_.make_context_current.Run()) { + DLOG(ERROR) << "Failed to make context current"; + NotifyError(PLATFORM_FAILURE, SFT_PLATFORM_ERROR); + return false; + } + auto shared_image = std::make_unique<gpu::SharedImageBackingGLImage>( gl_image, mailbox, viz_resource_format, plane_size, color_space, kTopLeft_GrSurfaceOrigin, kOpaque_SkAlphaType, shared_image_usage, gl_params, gl_attribs, gl_client_.is_passthrough); const bool success = shared_image_stub->factory()->RegisterBacking( - std::move(shared_image), /*allow_legacy_mailbox=*/false); + std::move(shared_image), kCreateLegacyMailbox); if (!success) { DLOG(ERROR) << "Failed to register shared image"; NotifyError(PLATFORM_FAILURE, SFT_PLATFORM_ERROR);
diff --git a/media/video/gpu_memory_buffer_video_frame_pool.cc b/media/video/gpu_memory_buffer_video_frame_pool.cc index efc4ea22..71a0372d 100644 --- a/media/video/gpu_memory_buffer_video_frame_pool.cc +++ b/media/video/gpu_memory_buffer_video_frame_pool.cc
@@ -50,7 +50,7 @@ bool GpuMemoryBufferVideoFramePool::MultiPlaneVideoSharedImagesEnabled() { #if defined(OS_MAC) - return base::mac::IsAtMostOS10_15(); + return true; #else return false; #endif
diff --git a/native_client_sdk/src/libraries/nacl_io/ostermios.h b/native_client_sdk/src/libraries/nacl_io/ostermios.h index f0fc5f6..44a506a 100644 --- a/native_client_sdk/src/libraries/nacl_io/ostermios.h +++ b/native_client_sdk/src/libraries/nacl_io/ostermios.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 LIBRARIES_NACL_IO_OSTERMIOS_H -#define LIBRARIES_NACL_IO_OSTERMIOS_H +#ifndef LIBRARIES_NACL_IO_OSTERMIOS_H_ +#define LIBRARIES_NACL_IO_OSTERMIOS_H_ #if defined(WIN32) @@ -39,4 +39,4 @@ #endif -#endif /* LIBRARIES_NACL_IO_OSTERMIOS_H */ +#endif // LIBRARIES_NACL_IO_OSTERMIOS_H_
diff --git a/native_client_sdk/src/libraries/nacl_io/ostime.h b/native_client_sdk/src/libraries/nacl_io/ostime.h index 5ae8397f..a0087866 100644 --- a/native_client_sdk/src/libraries/nacl_io/ostime.h +++ b/native_client_sdk/src/libraries/nacl_io/ostime.h
@@ -36,4 +36,4 @@ #endif -#endif /* LIBRARIES_NACL_IO_OSUNISTD_H_ */ +#endif // LIBRARIES_NACL_IO_OSTIME_H_
diff --git a/native_client_sdk/src/libraries/nacl_io/ostypes.h b/native_client_sdk/src/libraries/nacl_io/ostypes.h index cc9b6de..e27fc8d 100644 --- a/native_client_sdk/src/libraries/nacl_io/ostypes.h +++ b/native_client_sdk/src/libraries/nacl_io/ostypes.h
@@ -18,4 +18,4 @@ #endif -#endif /* LIBRARIES_NACL_IO_OSTYPES_H_ */ +#endif // LIBRARIES_NACL_IO_OSTYPES_H_
diff --git a/native_client_sdk/src/libraries/nacl_io/osunistd.h b/native_client_sdk/src/libraries/nacl_io/osunistd.h index 9c0dbca5..a285a181 100644 --- a/native_client_sdk/src/libraries/nacl_io/osunistd.h +++ b/native_client_sdk/src/libraries/nacl_io/osunistd.h
@@ -18,4 +18,4 @@ #endif -#endif /* LIBRARIES_NACL_IO_OSUNISTD_H_ */ +#endif // LIBRARIES_NACL_IO_OSUNISTD_H_
diff --git a/native_client_sdk/src/libraries/nacl_io/osutime.h b/native_client_sdk/src/libraries/nacl_io/osutime.h index 8e849d7..df48bd5 100644 --- a/native_client_sdk/src/libraries/nacl_io/osutime.h +++ b/native_client_sdk/src/libraries/nacl_io/osutime.h
@@ -11,4 +11,4 @@ struct utimbuf; -#endif /* LIBRARIES_NACL_IO_OSUTIME_H_ */ +#endif // LIBRARIES_NACL_IO_OSUTIME_H_
diff --git a/native_client_sdk/src/libraries/nacl_io/path.h b/native_client_sdk/src/libraries/nacl_io/path.h index 737e8f1..2f552e9 100644 --- a/native_client_sdk/src/libraries/nacl_io/path.h +++ b/native_client_sdk/src/libraries/nacl_io/path.h
@@ -61,4 +61,4 @@ } // namespace nacl_io -#endif // PACKAGES_LIBRARIES_NACL_IO_PATH_H_ +#endif // LIBRARIES_NACL_IO_PATH_H_
diff --git a/native_client_sdk/src/libraries/nacl_io/socket/fifo_packet.h b/native_client_sdk/src/libraries/nacl_io/socket/fifo_packet.h index 30a25a9..2b0f485 100644 --- a/native_client_sdk/src/libraries/nacl_io/socket/fifo_packet.h +++ b/native_client_sdk/src/libraries/nacl_io/socket/fifo_packet.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 LIBRARIES_NACL_IO_FIFO_PACKET_H_ -#define LIBRARIES_NACL_IO_FIFO_PACKET_H_ +#ifndef LIBRARIES_NACL_IO_SOCKET_FIFO_PACKET_H_ +#define LIBRARIES_NACL_IO_SOCKET_FIFO_PACKET_H_ #include <stdint.h> #include <string.h> @@ -62,4 +62,4 @@ } // namespace nacl_io -#endif // LIBRARIES_NACL_IO_FIFO_PACKET_H_ +#endif // LIBRARIES_NACL_IO_SOCKET_FIFO_PACKET_H_
diff --git a/native_client_sdk/src/libraries/nacl_io/stream/stream_fs.h b/native_client_sdk/src/libraries/nacl_io/stream/stream_fs.h index c4c40fe..ec562176 100644 --- a/native_client_sdk/src/libraries/nacl_io/stream/stream_fs.h +++ b/native_client_sdk/src/libraries/nacl_io/stream/stream_fs.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 LIBRARIES_NACL_IO_STREAM_STREAM_H_ -#define LIBRARIES_NACL_IO_STREAM_STREAM_H_ +#ifndef LIBRARIES_NACL_IO_STREAM_STREAM_FS_H_ +#define LIBRARIES_NACL_IO_STREAM_STREAM_FS_H_ #include "nacl_io/filesystem.h" @@ -75,4 +75,4 @@ } // namespace nacl_io -#endif // LIBRARIES_NACL_IO_STREAM_STREAM_H_ +#endif // LIBRARIES_NACL_IO_STREAM_STREAM_FS_H_
diff --git a/native_client_sdk/src/libraries/ppapi_simple/ps.h b/native_client_sdk/src/libraries/ppapi_simple/ps.h index c1030f74..bf1446eb 100644 --- a/native_client_sdk/src/libraries/ppapi_simple/ps.h +++ b/native_client_sdk/src/libraries/ppapi_simple/ps.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 PPAPI_SIMPLE_PS_H_ -#define PPAPI_SIMPLE_PS_H_ +#ifndef LIBRARIES_PPAPI_SIMPLE_PS_H_ +#define LIBRARIES_PPAPI_SIMPLE_PS_H_ #include "ppapi/c/pp_instance.h" #include "sdk_util/macros.h" @@ -55,4 +55,4 @@ EXTERN_C_END -#endif /* PPAPI_SIMPLE_PS_H_ */ +#endif // LIBRARIES_PPAPI_SIMPLE_PS_H_
diff --git a/native_client_sdk/src/libraries/ppapi_simple/ps_context_2d.h b/native_client_sdk/src/libraries/ppapi_simple/ps_context_2d.h index 74541ec..3b2e902 100644 --- a/native_client_sdk/src/libraries/ppapi_simple/ps_context_2d.h +++ b/native_client_sdk/src/libraries/ppapi_simple/ps_context_2d.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 PPAPI_SIMPLE_PS_CONTEXT_2D_H_ -#define PPAPI_SIMPLE_PS_CONTEXT_2D_H_ +#ifndef LIBRARIES_PPAPI_SIMPLE_PS_CONTEXT_2D_H_ +#define LIBRARIES_PPAPI_SIMPLE_PS_CONTEXT_2D_H_ #include "ppapi/c/pp_resource.h" #include "ppapi/c/ppb_graphics_2d.h" @@ -71,4 +71,4 @@ EXTERN_C_END -#endif /* PPAPI_SIMPLE_PS_CONTEXT_2D_H_ */ +#endif // LIBRARIES_PPAPI_SIMPLE_PS_CONTEXT_2D_H_
diff --git a/native_client_sdk/src/libraries/ppapi_simple/ps_event.h b/native_client_sdk/src/libraries/ppapi_simple/ps_event.h index 7c2f0d4d..4c079433 100644 --- a/native_client_sdk/src/libraries/ppapi_simple/ps_event.h +++ b/native_client_sdk/src/libraries/ppapi_simple/ps_event.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 PPAPI_SIMPLE_PS_EVENT_H_ -#define PPAPI_SIMPLE_PS_EVENT_H_ +#ifndef LIBRARIES_PPAPI_SIMPLE_PS_EVENT_H_ +#define LIBRARIES_PPAPI_SIMPLE_PS_EVENT_H_ #include "ppapi/c/pp_bool.h" #include "ppapi/c/pp_resource.h" @@ -122,4 +122,4 @@ EXTERN_C_END -#endif /* PPAPI_SIMPLE_PS_EVENT_H_ */ +#endif // LIBRARIES_PPAPI_SIMPLE_PS_EVENT_H_
diff --git a/native_client_sdk/src/libraries/ppapi_simple/ps_instance.h b/native_client_sdk/src/libraries/ppapi_simple/ps_instance.h index 0def929..585ef1c 100644 --- a/native_client_sdk/src/libraries/ppapi_simple/ps_instance.h +++ b/native_client_sdk/src/libraries/ppapi_simple/ps_instance.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 PPAPI_SIMPLE_PS_INSTANCE_H_ -#define PPAPI_SIMPLE_PS_INSTANCE_H_ +#ifndef LIBRARIES_PPAPI_SIMPLE_PS_INSTANCE_H_ +#define LIBRARIES_PPAPI_SIMPLE_PS_INSTANCE_H_ #include <stdarg.h> @@ -31,4 +31,4 @@ EXTERN_C_END -#endif /* PPAPI_SIMPLE_PS_INSTANCE_H_ */ +#endif // LIBRARIES_PPAPI_SIMPLE_PS_INSTANCE_H_
diff --git a/native_client_sdk/src/libraries/ppapi_simple/ps_interface.h b/native_client_sdk/src/libraries/ppapi_simple/ps_interface.h index 53ba836..74a1ee77 100644 --- a/native_client_sdk/src/libraries/ppapi_simple/ps_interface.h +++ b/native_client_sdk/src/libraries/ppapi_simple/ps_interface.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 PPAPI_SIMPLE_PS_INTERFACE_H_ -#define PPAPI_SIMPLE_PS_INTERFACE_H_ +#ifndef LIBRARIES_PPAPI_SIMPLE_PS_INTERFACE_H_ +#define LIBRARIES_PPAPI_SIMPLE_PS_INTERFACE_H_ #include "ppapi/c/pp_bool.h" #include "ppapi/c/pp_resource.h" @@ -75,4 +75,4 @@ EXTERN_C_END -#endif /* PPAPI_SIMPLE_PS_INTERFACE_H */ +#endif // LIBRARIES_PPAPI_SIMPLE_PS_INTERFACE_H_
diff --git a/native_client_sdk/src/libraries/ppapi_simple/ps_internal.h b/native_client_sdk/src/libraries/ppapi_simple/ps_internal.h index 360b1193..65854ca 100644 --- a/native_client_sdk/src/libraries/ppapi_simple/ps_internal.h +++ b/native_client_sdk/src/libraries/ppapi_simple/ps_internal.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 PPAPI_SIMPLE_PS_INTERNAL_H_ -#define PPAPI_SIMPLE_PS_INTERNAL_H_ +#ifndef LIBRARIES_PPAPI_SIMPLE_PS_INTERNAL_H_ +#define LIBRARIES_PPAPI_SIMPLE_PS_INTERNAL_H_ #include "ppapi/c/ppb.h" @@ -15,4 +15,4 @@ EXTERN_C_END -#endif /* PPAPI_SIMPLE_PS_INTERNAL_H_ */ +#endif // LIBRARIES_PPAPI_SIMPLE_PS_INTERNAL_H_
diff --git a/native_client_sdk/src/libraries/ppapi_simple/ps_main.h b/native_client_sdk/src/libraries/ppapi_simple/ps_main.h index 22975ca..19f3bbf 100644 --- a/native_client_sdk/src/libraries/ppapi_simple/ps_main.h +++ b/native_client_sdk/src/libraries/ppapi_simple/ps_main.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 PPAPI_SIMPLE_PS_MAIN_H_ -#define PPAPI_SIMPLE_PS_MAIN_H_ +#ifndef LIBRARIES_PPAPI_SIMPLE_PS_MAIN_H_ +#define LIBRARIES_PPAPI_SIMPLE_PS_MAIN_H_ #include "ppapi_simple/ps.h" #include "ppapi_simple/ps_event.h" @@ -35,4 +35,4 @@ EXTERN_C_END -#endif /* PPAPI_SIMPLE_PS_MAIN_H_ */ +#endif // LIBRARIES_PPAPI_SIMPLE_PS_MAIN_H_
diff --git a/native_client_sdk/src/libraries/sdk_util/atomicops.h b/native_client_sdk/src/libraries/sdk_util/atomicops.h index 5a0c019..f2e1160 100644 --- a/native_client_sdk/src/libraries/sdk_util/atomicops.h +++ b/native_client_sdk/src/libraries/sdk_util/atomicops.h
@@ -106,4 +106,4 @@ #endif // ifndef WIN32 -#endif /* LIBRARIES_SDK_UTIL_ATOMICOPS_H_ */ +#endif // LIBRARIES_SDK_UTIL_ATOMICOPS_H_
diff --git a/native_client_sdk/src/libraries/sdk_util/macros.h b/native_client_sdk/src/libraries/sdk_util/macros.h index 1f50340..3263abd9 100644 --- a/native_client_sdk/src/libraries/sdk_util/macros.h +++ b/native_client_sdk/src/libraries/sdk_util/macros.h
@@ -46,4 +46,4 @@ #define PRINTF_LIKE(a, b) #endif -#endif /* LIBRARIES_SDK_UTIL_MACROS_H_ */ +#endif // LIBRARIES_SDK_UTIL_MACROS_H_
diff --git a/native_client_sdk/src/libraries/sdk_util/ref_object.h b/native_client_sdk/src/libraries/sdk_util/ref_object.h index 707a335e..30d88328 100644 --- a/native_client_sdk/src/libraries/sdk_util/ref_object.h +++ b/native_client_sdk/src/libraries/sdk_util/ref_object.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 LIBRARIES_SDK_UTIL_REF_OBJECT -#define LIBRARIES_SDK_UTIL_REF_OBJECT +#ifndef LIBRARIES_SDK_UTIL_REF_OBJECT_H_ +#define LIBRARIES_SDK_UTIL_REF_OBJECT_H_ #include <stdlib.h> #include "pthread.h" @@ -70,5 +70,5 @@ } // namespace sdk_util -#endif // LIBRARIES_SDK_UTIL_REF_OBJECT +#endif // LIBRARIES_SDK_UTIL_REF_OBJECT_H_
diff --git a/native_client_sdk/src/libraries/xray/xray.h b/native_client_sdk/src/libraries/xray/xray.h index 32feed0..2b62e88 100644 --- a/native_client_sdk/src/libraries/xray/xray.h +++ b/native_client_sdk/src/libraries/xray/xray.h
@@ -114,4 +114,4 @@ } #endif -#endif /* LIBRARIES_XRAY_XRAY_H_ */ +#endif // LIBRARIES_XRAY_XRAY_H_
diff --git a/native_client_sdk/src/libraries/xray/xray_priv.h b/native_client_sdk/src/libraries/xray/xray_priv.h index 714c91d..c9b300d 100644 --- a/native_client_sdk/src/libraries/xray/xray_priv.h +++ b/native_client_sdk/src/libraries/xray/xray_priv.h
@@ -204,4 +204,4 @@ } #endif -#endif /* LIBRARIES_XRAY_XRAY_PRIV_H_ */ +#endif // LIBRARIES_XRAY_XRAY_PRIV_H_
diff --git a/native_client_sdk/src/tests/nacl_io_socket_test/echo_server.h b/native_client_sdk/src/tests/nacl_io_socket_test/echo_server.h index 435160d4..c8f633a 100644 --- a/native_client_sdk/src/tests/nacl_io_socket_test/echo_server.h +++ b/native_client_sdk/src/tests/nacl_io_socket_test/echo_server.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 ECHO_SERVER_H_ -#define ECHO_SERVER_H_ +#ifndef TESTS_NACL_IO_SOCKET_TEST_ECHO_SERVER_H_ +#define TESTS_NACL_IO_SOCKET_TEST_ECHO_SERVER_H_ #include "ppapi/cpp/instance.h" #include "ppapi/cpp/tcp_socket.h" @@ -62,4 +62,4 @@ LogFunction log_function_; }; -#endif // ECHO_SERVER_H_ +#endif // TESTS_NACL_IO_SOCKET_TEST_ECHO_SERVER_H_
diff --git a/native_client_sdk/src/tests/nacl_io_test/fake_ppapi/fake_core_interface.h b/native_client_sdk/src/tests/nacl_io_test/fake_ppapi/fake_core_interface.h index acab5b9..6579862f 100644 --- a/native_client_sdk/src/tests/nacl_io_test/fake_ppapi/fake_core_interface.h +++ b/native_client_sdk/src/tests/nacl_io_test/fake_ppapi/fake_core_interface.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 TESTS_NACL_IO_TEST_FAKE_CORE_INTERFACE_H_ -#define TESTS_NACL_IO_TEST_FAKE_CORE_INTERFACE_H_ +#ifndef TESTS_NACL_IO_TEST_FAKE_PPAPI_FAKE_CORE_INTERFACE_H_ +#define TESTS_NACL_IO_TEST_FAKE_PPAPI_FAKE_CORE_INTERFACE_H_ #include "fake_ppapi/fake_resource_manager.h" #include "nacl_io/pepper_interface.h" @@ -25,4 +25,4 @@ DISALLOW_COPY_AND_ASSIGN(FakeCoreInterface); }; -#endif // TESTS_NACL_IO_TEST_FAKE_CORE_INTERFACE_H_ +#endif // TESTS_NACL_IO_TEST_FAKE_PPAPI_FAKE_CORE_INTERFACE_H_
diff --git a/native_client_sdk/src/tests/nacl_io_test/fake_ppapi/fake_file_io_interface.h b/native_client_sdk/src/tests/nacl_io_test/fake_ppapi/fake_file_io_interface.h index cc5beda3..ad6d713 100644 --- a/native_client_sdk/src/tests/nacl_io_test/fake_ppapi/fake_file_io_interface.h +++ b/native_client_sdk/src/tests/nacl_io_test/fake_ppapi/fake_file_io_interface.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 LIBRARIES_NACL_IO_TEST_FAKE_FILE_IO_INTERFACE_H_ -#define LIBRARIES_NACL_IO_TEST_FAKE_FILE_IO_INTERFACE_H_ +#ifndef TESTS_NACL_IO_TEST_FAKE_PPAPI_FAKE_FILE_IO_INTERFACE_H_ +#define TESTS_NACL_IO_TEST_FAKE_PPAPI_FAKE_FILE_IO_INTERFACE_H_ #include "fake_ppapi/fake_core_interface.h" #include "sdk_util/macros.h" @@ -42,4 +42,4 @@ DISALLOW_COPY_AND_ASSIGN(FakeFileIoInterface); }; -#endif // LIBRARIES_NACL_IO_TEST_FAKE_FILE_IO_INTERFACE_H_ +#endif // TESTS_NACL_IO_TEST_FAKE_PPAPI_FAKE_FILE_IO_INTERFACE_H_
diff --git a/native_client_sdk/src/tests/nacl_io_test/fake_ppapi/fake_file_ref_interface.h b/native_client_sdk/src/tests/nacl_io_test/fake_ppapi/fake_file_ref_interface.h index cb8dc36..86322b1 100644 --- a/native_client_sdk/src/tests/nacl_io_test/fake_ppapi/fake_file_ref_interface.h +++ b/native_client_sdk/src/tests/nacl_io_test/fake_ppapi/fake_file_ref_interface.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 LIBRARIES_NACL_IO_TEST_FAKE_FILE_REF_INTERFACE_H_ -#define LIBRARIES_NACL_IO_TEST_FAKE_FILE_REF_INTERFACE_H_ +#ifndef TESTS_NACL_IO_TEST_FAKE_PPAPI_FAKE_FILE_REF_INTERFACE_H_ +#define TESTS_NACL_IO_TEST_FAKE_PPAPI_FAKE_FILE_REF_INTERFACE_H_ #include "fake_ppapi/fake_core_interface.h" #include "fake_ppapi/fake_var_interface.h" @@ -39,4 +39,4 @@ DISALLOW_COPY_AND_ASSIGN(FakeFileRefInterface); }; -#endif // LIBRARIES_NACL_IO_TEST_FAKE_FILE_REF_INTERFACE_H_ +#endif // TESTS_NACL_IO_TEST_FAKE_PPAPI_FAKE_FILE_REF_INTERFACE_H_
diff --git a/native_client_sdk/src/tests/nacl_io_test/fake_ppapi/fake_file_system_interface.h b/native_client_sdk/src/tests/nacl_io_test/fake_ppapi/fake_file_system_interface.h index 3284734..d51fea0 100644 --- a/native_client_sdk/src/tests/nacl_io_test/fake_ppapi/fake_file_system_interface.h +++ b/native_client_sdk/src/tests/nacl_io_test/fake_ppapi/fake_file_system_interface.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 LIBRARIES_NACL_IO_TEST_FAKE_FILE_SYSTEM_INTERFACE_H_ -#define LIBRARIES_NACL_IO_TEST_FAKE_FILE_SYSTEM_INTERFACE_H_ +#ifndef TESTS_NACL_IO_TEST_FAKE_PPAPI_FAKE_FILE_SYSTEM_INTERFACE_H_ +#define TESTS_NACL_IO_TEST_FAKE_PPAPI_FAKE_FILE_SYSTEM_INTERFACE_H_ #include "fake_ppapi/fake_core_interface.h" #include "sdk_util/macros.h" @@ -24,4 +24,4 @@ DISALLOW_COPY_AND_ASSIGN(FakeFileSystemInterface); }; -#endif // LIBRARIES_NACL_IO_TEST_FAKE_FILE_SYSTEM_INTERFACE_H_ +#endif // TESTS_NACL_IO_TEST_FAKE_PPAPI_FAKE_FILE_SYSTEM_INTERFACE_H_
diff --git a/native_client_sdk/src/tests/nacl_io_test/fake_ppapi/fake_filesystem.h b/native_client_sdk/src/tests/nacl_io_test/fake_ppapi/fake_filesystem.h index 15c24892..a63ac4c2 100644 --- a/native_client_sdk/src/tests/nacl_io_test/fake_ppapi/fake_filesystem.h +++ b/native_client_sdk/src/tests/nacl_io_test/fake_ppapi/fake_filesystem.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 LIBRARIES_NACL_IO_TEST_FAKE_FILESYSTEM_H_ -#define LIBRARIES_NACL_IO_TEST_FAKE_FILESYSTEM_H_ +#ifndef TESTS_NACL_IO_TEST_FAKE_PPAPI_FAKE_FILESYSTEM_H_ +#define TESTS_NACL_IO_TEST_FAKE_PPAPI_FAKE_FILESYSTEM_H_ #include <map> #include <string> @@ -50,4 +50,4 @@ PP_FileSystemType filesystem_type_; }; -#endif // LIBRARIES_NACL_IO_TEST_FAKE_FILESYSTEM_H_ +#endif // TESTS_NACL_IO_TEST_FAKE_PPAPI_FAKE_FILESYSTEM_H_
diff --git a/native_client_sdk/src/tests/nacl_io_test/fake_ppapi/fake_host_resolver_interface.h b/native_client_sdk/src/tests/nacl_io_test/fake_ppapi/fake_host_resolver_interface.h index 1c838901..abe9931 100644 --- a/native_client_sdk/src/tests/nacl_io_test/fake_ppapi/fake_host_resolver_interface.h +++ b/native_client_sdk/src/tests/nacl_io_test/fake_ppapi/fake_host_resolver_interface.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 TESTS_NACL_IO_TEST_FAKE_HOST_RESOLVER_INTERFACE_H_ -#define TESTS_NACL_IO_TEST_FAKE_HOST_RESOLVER_INTERFACE_H_ +#ifndef TESTS_NACL_IO_TEST_FAKE_PPAPI_FAKE_HOST_RESOLVER_INTERFACE_H_ +#define TESTS_NACL_IO_TEST_FAKE_PPAPI_FAKE_HOST_RESOLVER_INTERFACE_H_ #include <ppapi/c/ppb_host_resolver.h> @@ -42,4 +42,4 @@ DISALLOW_COPY_AND_ASSIGN(FakeHostResolverInterface); }; -#endif // TESTS_NACL_IO_TEST_FAKE_HOST_RESOLVER_INTERFACE_H_ +#endif // TESTS_NACL_IO_TEST_FAKE_PPAPI_FAKE_HOST_RESOLVER_INTERFACE_H_
diff --git a/native_client_sdk/src/tests/nacl_io_test/fake_ppapi/fake_messaging_interface.h b/native_client_sdk/src/tests/nacl_io_test/fake_ppapi/fake_messaging_interface.h index 8ae42d5..e7fca89 100644 --- a/native_client_sdk/src/tests/nacl_io_test/fake_ppapi/fake_messaging_interface.h +++ b/native_client_sdk/src/tests/nacl_io_test/fake_ppapi/fake_messaging_interface.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 TESTS_NACL_IO_TEST_FAKE_MESSAGING_INTERFACE_H_ -#define TESTS_NACL_IO_TEST_FAKE_MESSAGING_INTERFACE_H_ +#ifndef TESTS_NACL_IO_TEST_FAKE_PPAPI_FAKE_MESSAGING_INTERFACE_H_ +#define TESTS_NACL_IO_TEST_FAKE_PPAPI_FAKE_MESSAGING_INTERFACE_H_ #include <string> #include <vector> @@ -31,4 +31,4 @@ DISALLOW_COPY_AND_ASSIGN(FakeMessagingInterface); }; -#endif // TESTS_NACL_IO_TEST_FAKE_MESSAGING_INTERFACE_H_ +#endif // TESTS_NACL_IO_TEST_FAKE_PPAPI_FAKE_MESSAGING_INTERFACE_H_
diff --git a/native_client_sdk/src/tests/nacl_io_test/fake_ppapi/fake_net_address_interface.h b/native_client_sdk/src/tests/nacl_io_test/fake_ppapi/fake_net_address_interface.h index 1ff29c1..6ec872f 100644 --- a/native_client_sdk/src/tests/nacl_io_test/fake_ppapi/fake_net_address_interface.h +++ b/native_client_sdk/src/tests/nacl_io_test/fake_ppapi/fake_net_address_interface.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 TESTS_NACL_IO_TEST_FAKE_NET_ADDRESS_INTERFACE_H_ -#define TESTS_NACL_IO_TEST_FAKE_NET_ADDRESS_INTERFACE_H_ +#ifndef TESTS_NACL_IO_TEST_FAKE_PPAPI_FAKE_NET_ADDRESS_INTERFACE_H_ +#define TESTS_NACL_IO_TEST_FAKE_PPAPI_FAKE_NET_ADDRESS_INTERFACE_H_ #include <ppapi/c/ppb_host_resolver.h> @@ -30,4 +30,4 @@ DISALLOW_COPY_AND_ASSIGN(FakeNetAddressInterface); }; -#endif // TESTS_NACL_IO_TEST_FAKE_NET_ADDRESS_INTERFACE_H_ +#endif // TESTS_NACL_IO_TEST_FAKE_PPAPI_FAKE_NET_ADDRESS_INTERFACE_H_
diff --git a/native_client_sdk/src/tests/nacl_io_test/fake_ppapi/fake_node.h b/native_client_sdk/src/tests/nacl_io_test/fake_ppapi/fake_node.h index 9afc3fa..73dcdde 100644 --- a/native_client_sdk/src/tests/nacl_io_test/fake_ppapi/fake_node.h +++ b/native_client_sdk/src/tests/nacl_io_test/fake_ppapi/fake_node.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 LIBRARIES_NACL_IO_TEST_FAKE_NODE_H_ -#define LIBRARIES_NACL_IO_TEST_FAKE_NODE_H_ +#ifndef TESTS_NACL_IO_TEST_FAKE_PPAPI_FAKE_NODE_H_ +#define TESTS_NACL_IO_TEST_FAKE_PPAPI_FAKE_NODE_H_ #include <string> #include <vector> @@ -37,4 +37,4 @@ std::vector<uint8_t> contents_; }; -#endif // LIBRARIES_NACL_IO_TEST_FAKE_NODE_H_ +#endif // TESTS_NACL_IO_TEST_FAKE_PPAPI_FAKE_NODE_H_
diff --git a/native_client_sdk/src/tests/nacl_io_test/fake_ppapi/fake_pepper_interface.h b/native_client_sdk/src/tests/nacl_io_test/fake_ppapi/fake_pepper_interface.h index 1e6786c..3693619 100644 --- a/native_client_sdk/src/tests/nacl_io_test/fake_ppapi/fake_pepper_interface.h +++ b/native_client_sdk/src/tests/nacl_io_test/fake_ppapi/fake_pepper_interface.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 TESTS_NACL_IO_TEST_FAKE_PEPPER_INTERFACE_H_ -#define TESTS_NACL_IO_TEST_FAKE_PEPPER_INTERFACE_H_ +#ifndef TESTS_NACL_IO_TEST_FAKE_PPAPI_FAKE_PEPPER_INTERFACE_H_ +#define TESTS_NACL_IO_TEST_FAKE_PPAPI_FAKE_PEPPER_INTERFACE_H_ #include "fake_ppapi/fake_core_interface.h" #include "fake_ppapi/fake_host_resolver_interface.h" @@ -52,4 +52,4 @@ DISALLOW_COPY_AND_ASSIGN(FakePepperInterface); }; -#endif // TESTS_NACL_IO_TEST_FAKE_PEPPER_INTERFACE_H_ +#endif // TESTS_NACL_IO_TEST_FAKE_PPAPI_FAKE_PEPPER_INTERFACE_H_
diff --git a/native_client_sdk/src/tests/nacl_io_test/fake_ppapi/fake_pepper_interface_googledrivefs.h b/native_client_sdk/src/tests/nacl_io_test/fake_ppapi/fake_pepper_interface_googledrivefs.h index 1a36d82..df59b08 100644 --- a/native_client_sdk/src/tests/nacl_io_test/fake_ppapi/fake_pepper_interface_googledrivefs.h +++ b/native_client_sdk/src/tests/nacl_io_test/fake_ppapi/fake_pepper_interface_googledrivefs.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 LIBRARIES_NACL_IO_TEST_FAKE_PEPPER_INTERFACE_GOOGLEDRIVEFS_H_ -#define LIBRARIES_NACL_IO_TEST_FAKE_PEPPER_INTERFACE_GOOGLEDRIVEFS_H_ +#ifndef TESTS_NACL_IO_TEST_FAKE_PPAPI_FAKE_PEPPER_INTERFACE_GOOGLEDRIVEFS_H_ +#define TESTS_NACL_IO_TEST_FAKE_PPAPI_FAKE_PEPPER_INTERFACE_GOOGLEDRIVEFS_H_ #include <string> @@ -130,4 +130,4 @@ DISALLOW_COPY_AND_ASSIGN(FakePepperInterfaceGoogleDriveFs); }; -#endif // LIBRARIES_NACL_IO_TEST_FAKE_PEPPER_INTERFACE_GOOGLEDRIVEFS_H_ +#endif // TESTS_NACL_IO_TEST_FAKE_PPAPI_FAKE_PEPPER_INTERFACE_GOOGLEDRIVEFS_H_
diff --git a/native_client_sdk/src/tests/nacl_io_test/fake_ppapi/fake_pepper_interface_html5_fs.h b/native_client_sdk/src/tests/nacl_io_test/fake_ppapi/fake_pepper_interface_html5_fs.h index 15bbf714..f4b29692 100644 --- a/native_client_sdk/src/tests/nacl_io_test/fake_ppapi/fake_pepper_interface_html5_fs.h +++ b/native_client_sdk/src/tests/nacl_io_test/fake_ppapi/fake_pepper_interface_html5_fs.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 LIBRARIES_NACL_IO_TEST_FAKE_PEPPER_INTERFACE_HTML5_FS_H_ -#define LIBRARIES_NACL_IO_TEST_FAKE_PEPPER_INTERFACE_HTML5_FS_H_ +#ifndef TESTS_NACL_IO_TEST_FAKE_PPAPI_FAKE_PEPPER_INTERFACE_HTML5_FS_H_ +#define TESTS_NACL_IO_TEST_FAKE_PPAPI_FAKE_PEPPER_INTERFACE_HTML5_FS_H_ #include "fake_ppapi/fake_core_interface.h" #include "fake_ppapi/fake_file_io_interface.h" @@ -59,4 +59,4 @@ DISALLOW_COPY_AND_ASSIGN(FakePepperInterfaceHtml5Fs); }; -#endif // LIBRARIES_NACL_IO_TEST_FAKE_PEPPER_INTERFACE_HTML5_FS_H_ +#endif // TESTS_NACL_IO_TEST_FAKE_PPAPI_FAKE_PEPPER_INTERFACE_HTML5_FS_H_
diff --git a/native_client_sdk/src/tests/nacl_io_test/fake_ppapi/fake_pepper_interface_url_loader.h b/native_client_sdk/src/tests/nacl_io_test/fake_ppapi/fake_pepper_interface_url_loader.h index fd22c78..0cab8a54 100644 --- a/native_client_sdk/src/tests/nacl_io_test/fake_ppapi/fake_pepper_interface_url_loader.h +++ b/native_client_sdk/src/tests/nacl_io_test/fake_ppapi/fake_pepper_interface_url_loader.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 TESTS_NACL_IO_TEST_FAKE_PEPPER_INTERFACE_URL_LOADER_H_ -#define TESTS_NACL_IO_TEST_FAKE_PEPPER_INTERFACE_URL_LOADER_H_ +#ifndef TESTS_NACL_IO_TEST_FAKE_PPAPI_FAKE_PEPPER_INTERFACE_URL_LOADER_H_ +#define TESTS_NACL_IO_TEST_FAKE_PPAPI_FAKE_PEPPER_INTERFACE_URL_LOADER_H_ #include <map> #include <string> @@ -180,4 +180,4 @@ DISALLOW_COPY_AND_ASSIGN(FakePepperInterfaceURLLoader); }; -#endif // TESTS_NACL_IO_TEST_FAKE_PEPPER_INTERFACE_URL_LOADER_H_ +#endif // TESTS_NACL_IO_TEST_FAKE_PPAPI_FAKE_PEPPER_INTERFACE_URL_LOADER_H_
diff --git a/native_client_sdk/src/tests/nacl_io_test/fake_ppapi/fake_resource_manager.h b/native_client_sdk/src/tests/nacl_io_test/fake_ppapi/fake_resource_manager.h index 2ddd468..9f47da40 100644 --- a/native_client_sdk/src/tests/nacl_io_test/fake_ppapi/fake_resource_manager.h +++ b/native_client_sdk/src/tests/nacl_io_test/fake_ppapi/fake_resource_manager.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 TESTS_NACL_IO_TEST_FAKE_RESOURCE_MANAGER_H_ -#define TESTS_NACL_IO_TEST_FAKE_RESOURCE_MANAGER_H_ +#ifndef TESTS_NACL_IO_TEST_FAKE_PPAPI_FAKE_RESOURCE_MANAGER_H_ +#define TESTS_NACL_IO_TEST_FAKE_PPAPI_FAKE_RESOURCE_MANAGER_H_ #include <map> @@ -113,4 +113,4 @@ #define CREATE_RESOURCE(MANAGER, TYPE, RESOURCE) \ (MANAGER)->Create((RESOURCE), #TYPE, __FILE__, __LINE__) -#endif // TESTS_NACL_IO_TEST_FAKE_RESOURCE_MANAGER_H_ +#endif // TESTS_NACL_IO_TEST_FAKE_PPAPI_FAKE_RESOURCE_MANAGER_H_
diff --git a/native_client_sdk/src/tests/nacl_io_test/fake_ppapi/fake_util.h b/native_client_sdk/src/tests/nacl_io_test/fake_ppapi/fake_util.h index 0e77fd1..c9a2278 100644 --- a/native_client_sdk/src/tests/nacl_io_test/fake_ppapi/fake_util.h +++ b/native_client_sdk/src/tests/nacl_io_test/fake_ppapi/fake_util.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 LIBRARIES_NACL_IO_TEST_FAKE_UTIL_H_ -#define LIBRARIES_NACL_IO_TEST_FAKE_UTIL_H_ +#ifndef TESTS_NACL_IO_TEST_FAKE_PPAPI_FAKE_UTIL_H_ +#define TESTS_NACL_IO_TEST_FAKE_PPAPI_FAKE_UTIL_H_ #include <string> @@ -72,4 +72,4 @@ const std::string& value, std::string* out_headers); -#endif // LIBRARIES_NACL_IO_TEST_FAKE_UTIL_H_ +#endif // TESTS_NACL_IO_TEST_FAKE_PPAPI_FAKE_UTIL_H_
diff --git a/native_client_sdk/src/tests/nacl_io_test/fake_ppapi/fake_var_array_buffer_interface.h b/native_client_sdk/src/tests/nacl_io_test/fake_ppapi/fake_var_array_buffer_interface.h index 8f0d23e..5d53e66d 100644 --- a/native_client_sdk/src/tests/nacl_io_test/fake_ppapi/fake_var_array_buffer_interface.h +++ b/native_client_sdk/src/tests/nacl_io_test/fake_ppapi/fake_var_array_buffer_interface.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 TESTS_NACL_IO_TEST_FAKE_VAR_ARRAY_BUFFER_INTERFACE_H_ -#define TESTS_NACL_IO_TEST_FAKE_VAR_ARRAY_BUFFER_INTERFACE_H_ +#ifndef TESTS_NACL_IO_TEST_FAKE_PPAPI_FAKE_VAR_ARRAY_BUFFER_INTERFACE_H_ +#define TESTS_NACL_IO_TEST_FAKE_PPAPI_FAKE_VAR_ARRAY_BUFFER_INTERFACE_H_ #include "nacl_io/pepper_interface.h" #include "sdk_util/macros.h" @@ -25,4 +25,4 @@ DISALLOW_COPY_AND_ASSIGN(FakeVarArrayBufferInterface); }; -#endif // TESTS_NACL_IO_TEST_FAKE_VAR_ARRAY_BUFFER_INTERFACE_H_ +#endif // TESTS_NACL_IO_TEST_FAKE_PPAPI_FAKE_VAR_ARRAY_BUFFER_INTERFACE_H_
diff --git a/native_client_sdk/src/tests/nacl_io_test/fake_ppapi/fake_var_array_interface.h b/native_client_sdk/src/tests/nacl_io_test/fake_ppapi/fake_var_array_interface.h index 1c815833..0c021f3 100644 --- a/native_client_sdk/src/tests/nacl_io_test/fake_ppapi/fake_var_array_interface.h +++ b/native_client_sdk/src/tests/nacl_io_test/fake_ppapi/fake_var_array_interface.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 TESTS_NACL_IO_TEST_FAKE_VAR_ARRAY_INTERFACE_H_ -#define TESTS_NACL_IO_TEST_FAKE_VAR_ARRAY_INTERFACE_H_ +#ifndef TESTS_NACL_IO_TEST_FAKE_PPAPI_FAKE_VAR_ARRAY_INTERFACE_H_ +#define TESTS_NACL_IO_TEST_FAKE_PPAPI_FAKE_VAR_ARRAY_INTERFACE_H_ #include "nacl_io/pepper_interface.h" #include "sdk_util/macros.h" @@ -26,4 +26,4 @@ DISALLOW_COPY_AND_ASSIGN(FakeVarArrayInterface); }; -#endif // TESTS_NACL_IO_TEST_FAKE_VAR_ARRAY_INTERFACE_H_ +#endif // TESTS_NACL_IO_TEST_FAKE_PPAPI_FAKE_VAR_ARRAY_INTERFACE_H_
diff --git a/native_client_sdk/src/tests/nacl_io_test/fake_ppapi/fake_var_dictionary_interface.h b/native_client_sdk/src/tests/nacl_io_test/fake_ppapi/fake_var_dictionary_interface.h index 5199863..11f39b9 100644 --- a/native_client_sdk/src/tests/nacl_io_test/fake_ppapi/fake_var_dictionary_interface.h +++ b/native_client_sdk/src/tests/nacl_io_test/fake_ppapi/fake_var_dictionary_interface.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 TESTS_NACL_IO_TEST_FAKE_VAR_DICTIONARY_INTERFACE_H_ -#define TESTS_NACL_IO_TEST_FAKE_VAR_DICTIONARY_INTERFACE_H_ +#ifndef TESTS_NACL_IO_TEST_FAKE_PPAPI_FAKE_VAR_DICTIONARY_INTERFACE_H_ +#define TESTS_NACL_IO_TEST_FAKE_PPAPI_FAKE_VAR_DICTIONARY_INTERFACE_H_ #include "nacl_io/pepper_interface.h" #include "sdk_util/macros.h" @@ -31,4 +31,4 @@ DISALLOW_COPY_AND_ASSIGN(FakeVarDictionaryInterface); }; -#endif // TESTS_NACL_IO_TEST_FAKE_VAR_DICTIONARY_INTERFACE_H_ +#endif // TESTS_NACL_IO_TEST_FAKE_PPAPI_FAKE_VAR_DICTIONARY_INTERFACE_H_
diff --git a/native_client_sdk/src/tests/nacl_io_test/fake_ppapi/fake_var_interface.h b/native_client_sdk/src/tests/nacl_io_test/fake_ppapi/fake_var_interface.h index c6dd4ea..d5b7702 100644 --- a/native_client_sdk/src/tests/nacl_io_test/fake_ppapi/fake_var_interface.h +++ b/native_client_sdk/src/tests/nacl_io_test/fake_ppapi/fake_var_interface.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 TESTS_NACL_IO_TEST_FAKE_VAR_INTERFACE_H_ -#define TESTS_NACL_IO_TEST_FAKE_VAR_INTERFACE_H_ +#ifndef TESTS_NACL_IO_TEST_FAKE_PPAPI_FAKE_VAR_INTERFACE_H_ +#define TESTS_NACL_IO_TEST_FAKE_PPAPI_FAKE_VAR_INTERFACE_H_ #include "nacl_io/pepper_interface.h" #include "sdk_util/macros.h" @@ -25,4 +25,4 @@ DISALLOW_COPY_AND_ASSIGN(FakeVarInterface); }; -#endif // TESTS_NACL_IO_TEST_FAKE_VAR_INTERFACE_H_ +#endif // TESTS_NACL_IO_TEST_FAKE_PPAPI_FAKE_VAR_INTERFACE_H_
diff --git a/native_client_sdk/src/tests/nacl_io_test/fake_ppapi/fake_var_manager.h b/native_client_sdk/src/tests/nacl_io_test/fake_ppapi/fake_var_manager.h index 5c7909f8..5186363 100644 --- a/native_client_sdk/src/tests/nacl_io_test/fake_ppapi/fake_var_manager.h +++ b/native_client_sdk/src/tests/nacl_io_test/fake_ppapi/fake_var_manager.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 TESTS_NACL_IO_TEST_FAKE_VAR_MANAGER_H_ -#define TESTS_NACL_IO_TEST_FAKE_VAR_MANAGER_H_ +#ifndef TESTS_NACL_IO_TEST_FAKE_PPAPI_FAKE_VAR_MANAGER_H_ +#define TESTS_NACL_IO_TEST_FAKE_PPAPI_FAKE_VAR_MANAGER_H_ #include <map> #include <ppapi/c/pp_var.h> @@ -56,4 +56,4 @@ DISALLOW_COPY_AND_ASSIGN(FakeVarManager); }; -#endif // TESTS_NACL_IO_TEST_FAKE_VAR_MANAGER_H_ +#endif // TESTS_NACL_IO_TEST_FAKE_PPAPI_FAKE_VAR_MANAGER_H_
diff --git a/net/spdy/spdy_session.cc b/net/spdy/spdy_session.cc index 8520d2e..7b48eb1 100644 --- a/net/spdy/spdy_session.cc +++ b/net/spdy/spdy_session.cc
@@ -3279,7 +3279,9 @@ base::StringPiece debug_data) { CHECK(in_io_loop_); - // TODO(jgraettinger): UMA histogram on |error_code|. + // Use sparse histogram to record the unlikely case that a server sends + // an unknown error code. + base::UmaHistogramSparse("Net.SpdySession.GoAwayReceived", error_code); net_log_.AddEvent( NetLogEventType::HTTP2_SESSION_RECV_GOAWAY,
diff --git a/pdf/pdfium/pdfium_engine.cc b/pdf/pdfium/pdfium_engine.cc index 7b9c54de..7364a6f 100644 --- a/pdf/pdfium/pdfium_engine.cc +++ b/pdf/pdfium/pdfium_engine.cc
@@ -592,11 +592,12 @@ void PDFiumEngine::ScrolledToXPosition(int position) { CancelPaints(); - gfx::Vector2d diff(position_.x() - position, 0); + int old_x = position_.x(); position_.set_x(position); CalculateVisiblePages(); - client_->DidScroll(diff); + gfx::Vector2d diff(position - old_x, 0); + client_->DidScroll(-diff); caret_rect_ += diff; client_->CaretChanged(caret_rect_); @@ -606,11 +607,12 @@ void PDFiumEngine::ScrolledToYPosition(int position) { CancelPaints(); - gfx::Vector2d diff(0, position_.y() - position); + int old_y = position_.y(); position_.set_y(position); CalculateVisiblePages(); - client_->DidScroll(diff); + gfx::Vector2d diff(0, position - old_y); + client_->DidScroll(-diff); caret_rect_ += diff; client_->CaretChanged(caret_rect_); @@ -3933,12 +3935,7 @@ rect_screen.y() - position_.y(), rect_screen.width(), rect_screen.height()); - // The caret rect will be cached in `TextInputManager`. client_->CaretChanged(caret_rect_); - // We need to explicitly clear the selected text, otherwise the selection - // range will be an InvalidRange, which does not match the cache in - // `TextInputManager`. - client_->SetSelectedText(""); } }
diff --git a/remoting/host/pairing_registry_delegate_win.cc b/remoting/host/pairing_registry_delegate_win.cc index 0f85af0..258ab4a 100644 --- a/remoting/host/pairing_registry_delegate_win.cc +++ b/remoting/host/pairing_registry_delegate_win.cc
@@ -218,11 +218,13 @@ std::unique_ptr<base::DictionaryValue> pairing_json = pairing.ToValue(); // Extract the shared secret to a separate dictionary. - std::unique_ptr<base::Value> secret_key; - CHECK(pairing_json->Remove(PairingRegistry::kSharedSecretKey, &secret_key)); + absl::optional<base::Value> secret_key = + pairing_json->ExtractKey(PairingRegistry::kSharedSecretKey); + CHECK(secret_key.has_value()); std::unique_ptr<base::DictionaryValue> secret_json( new base::DictionaryValue()); - secret_json->Set(PairingRegistry::kSharedSecretKey, std::move(secret_key)); + secret_json->SetKey(PairingRegistry::kSharedSecretKey, + std::move(*secret_key)); // presubmit: allow wstring std::wstring value_name = base::UTF8ToWide(pairing.client_id());
diff --git a/remoting/host/policy_watcher_unittest.cc b/remoting/host/policy_watcher_unittest.cc index 77e01f0..659afaa 100644 --- a/remoting/host/policy_watcher_unittest.cc +++ b/remoting/host/policy_watcher_unittest.cc
@@ -79,31 +79,31 @@ policy_watcher_default_values_ = PolicyWatcher::GetDefaultPolicies(); base::ListValue host_domain; - host_domain.AppendString(kHostDomain); + host_domain.Append(kHostDomain); base::ListValue client_domain; - client_domain.AppendString(kClientDomain); + client_domain.Append(kClientDomain); base::ListValue multiple_host_domains; - multiple_host_domains.AppendString("a.com"); - multiple_host_domains.AppendString("b.com"); - multiple_host_domains.AppendString("c.com"); + multiple_host_domains.Append("a.com"); + multiple_host_domains.Append("b.com"); + multiple_host_domains.Append("c.com"); base::ListValue multiple_client_domains; - multiple_client_domains.AppendString("d.com"); - multiple_client_domains.AppendString("e.com"); - multiple_client_domains.AppendString("f.com"); + multiple_client_domains.Append("d.com"); + multiple_client_domains.Append("e.com"); + multiple_client_domains.Append("f.com"); - nat_true_.SetBoolean(key::kRemoteAccessHostFirewallTraversal, true); - nat_false_.SetBoolean(key::kRemoteAccessHostFirewallTraversal, false); - nat_one_.SetInteger(key::kRemoteAccessHostFirewallTraversal, 1); - nat_one_domain_full_.SetInteger(key::kRemoteAccessHostFirewallTraversal, 1); + nat_true_.SetBoolKey(key::kRemoteAccessHostFirewallTraversal, true); + nat_false_.SetBoolKey(key::kRemoteAccessHostFirewallTraversal, false); + nat_one_.SetIntKey(key::kRemoteAccessHostFirewallTraversal, 1); + nat_one_domain_full_.SetIntKey(key::kRemoteAccessHostFirewallTraversal, 1); nat_one_domain_full_.SetKey(key::kRemoteAccessHostDomainList, host_domain.Clone()); domain_empty_.SetKey(key::kRemoteAccessHostDomainList, base::ListValue()); domain_full_.SetKey(key::kRemoteAccessHostDomainList, host_domain.Clone()); SetDefaults(nat_true_others_default_); - nat_true_others_default_.SetBoolean(key::kRemoteAccessHostFirewallTraversal, + nat_true_others_default_.SetBoolKey(key::kRemoteAccessHostFirewallTraversal, true); SetDefaults(nat_false_others_default_); - nat_false_others_default_.SetBoolean( + nat_false_others_default_.SetBoolKey( key::kRemoteAccessHostFirewallTraversal, false); SetDefaults(domain_empty_others_default_); domain_empty_others_default_.SetKey(key::kRemoteAccessHostDomainList, @@ -111,70 +111,72 @@ SetDefaults(domain_full_others_default_); domain_full_others_default_.SetKey(key::kRemoteAccessHostDomainList, host_domain.Clone()); - nat_true_domain_empty_.SetBoolean(key::kRemoteAccessHostFirewallTraversal, + nat_true_domain_empty_.SetBoolKey(key::kRemoteAccessHostFirewallTraversal, true); nat_true_domain_empty_.SetKey(key::kRemoteAccessHostDomainList, base::ListValue()); - nat_true_domain_full_.SetBoolean(key::kRemoteAccessHostFirewallTraversal, + nat_true_domain_full_.SetBoolKey(key::kRemoteAccessHostFirewallTraversal, true); nat_true_domain_full_.SetKey(key::kRemoteAccessHostDomainList, host_domain.Clone()); - nat_false_domain_empty_.SetBoolean(key::kRemoteAccessHostFirewallTraversal, + nat_false_domain_empty_.SetBoolKey(key::kRemoteAccessHostFirewallTraversal, false); nat_false_domain_empty_.SetKey(key::kRemoteAccessHostDomainList, base::ListValue()); - nat_false_domain_full_.SetBoolean(key::kRemoteAccessHostFirewallTraversal, + nat_false_domain_full_.SetBoolKey(key::kRemoteAccessHostFirewallTraversal, false); nat_false_domain_full_.SetKey(key::kRemoteAccessHostDomainList, host_domain.Clone()); SetDefaults(nat_true_domain_empty_others_default_); - nat_true_domain_empty_others_default_.SetBoolean( + nat_true_domain_empty_others_default_.SetBoolKey( key::kRemoteAccessHostFirewallTraversal, true); nat_true_domain_empty_others_default_.SetKey( key::kRemoteAccessHostDomainList, base::ListValue()); - unknown_policies_.SetString("UnknownPolicyOne", std::string()); - unknown_policies_.SetString("UnknownPolicyTwo", std::string()); - unknown_policies_.SetBoolean("RemoteAccessHostUnknownPolicyThree", true); + unknown_policies_.SetStringKey("UnknownPolicyOne", std::string()); + unknown_policies_.SetStringKey("UnknownPolicyTwo", std::string()); + unknown_policies_.SetBoolKey("RemoteAccessHostUnknownPolicyThree", true); - pairing_true_.SetBoolean(key::kRemoteAccessHostAllowClientPairing, true); - pairing_false_.SetBoolean(key::kRemoteAccessHostAllowClientPairing, false); - gnubby_auth_true_.SetBoolean(key::kRemoteAccessHostAllowGnubbyAuth, true); - gnubby_auth_false_.SetBoolean(key::kRemoteAccessHostAllowGnubbyAuth, false); - relay_true_.SetBoolean(key::kRemoteAccessHostAllowRelayedConnection, true); - relay_false_.SetBoolean(key::kRemoteAccessHostAllowRelayedConnection, + pairing_true_.SetBoolKey(key::kRemoteAccessHostAllowClientPairing, true); + pairing_false_.SetBoolKey(key::kRemoteAccessHostAllowClientPairing, false); + gnubby_auth_true_.SetBoolKey(key::kRemoteAccessHostAllowGnubbyAuth, true); + gnubby_auth_false_.SetBoolKey(key::kRemoteAccessHostAllowGnubbyAuth, false); + relay_true_.SetBoolKey(key::kRemoteAccessHostAllowRelayedConnection, true); + relay_false_.SetBoolKey(key::kRemoteAccessHostAllowRelayedConnection, false); - port_range_full_.SetString(key::kRemoteAccessHostUdpPortRange, kPortRange); - port_range_empty_.SetString(key::kRemoteAccessHostUdpPortRange, - std::string()); - port_range_malformed_.SetString(key::kRemoteAccessHostUdpPortRange, - "malformed"); + port_range_full_.SetStringKey(key::kRemoteAccessHostUdpPortRange, + kPortRange); + port_range_empty_.SetStringKey(key::kRemoteAccessHostUdpPortRange, + std::string()); + port_range_malformed_.SetStringKey(key::kRemoteAccessHostUdpPortRange, + "malformed"); port_range_malformed_domain_full_.MergeDictionary(&port_range_malformed_); port_range_malformed_domain_full_.SetKey(key::kRemoteAccessHostDomainList, host_domain.Clone()); - curtain_true_.SetBoolean(key::kRemoteAccessHostRequireCurtain, true); - curtain_false_.SetBoolean(key::kRemoteAccessHostRequireCurtain, false); - username_true_.SetBoolean(key::kRemoteAccessHostMatchUsername, true); - username_false_.SetBoolean(key::kRemoteAccessHostMatchUsername, false); - third_party_auth_partial_.SetString(key::kRemoteAccessHostTokenUrl, - "https://token.com"); - third_party_auth_partial_.SetString( + curtain_true_.SetBoolKey(key::kRemoteAccessHostRequireCurtain, true); + curtain_false_.SetBoolKey(key::kRemoteAccessHostRequireCurtain, false); + username_true_.SetBoolKey(key::kRemoteAccessHostMatchUsername, true); + username_false_.SetBoolKey(key::kRemoteAccessHostMatchUsername, false); + third_party_auth_partial_.SetStringKey(key::kRemoteAccessHostTokenUrl, + "https://token.com"); + third_party_auth_partial_.SetStringKey( key::kRemoteAccessHostTokenValidationUrl, "https://validation.com"); third_party_auth_full_.MergeDictionary(&third_party_auth_partial_); - third_party_auth_full_.SetString( + third_party_auth_full_.SetStringKey( key::kRemoteAccessHostTokenValidationCertificateIssuer, "certificate subject"); third_party_auth_cert_empty_.MergeDictionary(&third_party_auth_partial_); - third_party_auth_cert_empty_.SetString( + third_party_auth_cert_empty_.SetStringKey( key::kRemoteAccessHostTokenValidationCertificateIssuer, ""); - remote_assistance_uiaccess_true_.SetBoolean( + remote_assistance_uiaccess_true_.SetBoolKey( key::kRemoteAccessHostAllowUiAccessForRemoteAssistance, true); - remote_assistance_uiaccess_false_.SetBoolean( + remote_assistance_uiaccess_false_.SetBoolKey( key::kRemoteAccessHostAllowUiAccessForRemoteAssistance, false); - deprecated_policies_.SetString(key::kRemoteAccessHostDomain, kHostDomain); - deprecated_policies_.SetString(key::kRemoteAccessHostClientDomain, - kClientDomain); + deprecated_policies_.SetStringKey(key::kRemoteAccessHostDomain, + kHostDomain); + deprecated_policies_.SetStringKey(key::kRemoteAccessHostClientDomain, + kClientDomain); // Deprecated policies should get converted if new ones aren't present. SetDefaults(deprecated_policies_expected_); deprecated_policies_expected_.SetKey(key::kRemoteAccessHostDomainList, @@ -182,10 +184,10 @@ deprecated_policies_expected_.SetKey(key::kRemoteAccessHostClientDomainList, client_domain.Clone()); - deprecated_and_new_policies_.SetString(key::kRemoteAccessHostDomain, - kHostDomain); - deprecated_and_new_policies_.SetString(key::kRemoteAccessHostClientDomain, - kClientDomain); + deprecated_and_new_policies_.SetStringKey(key::kRemoteAccessHostDomain, + kHostDomain); + deprecated_and_new_policies_.SetStringKey( + key::kRemoteAccessHostClientDomain, kClientDomain); deprecated_and_new_policies_.SetKey(key::kRemoteAccessHostDomainList, multiple_host_domains.Clone()); deprecated_and_new_policies_.SetKey(key::kRemoteAccessHostClientDomainList, @@ -199,8 +201,9 @@ multiple_client_domains.Clone()); // Empty strings should be treated as not set. - deprecated_empty_strings_.SetString(key::kRemoteAccessHostDomain, ""); - deprecated_empty_strings_.SetString(key::kRemoteAccessHostClientDomain, ""); + deprecated_empty_strings_.SetStringKey(key::kRemoteAccessHostDomain, ""); + deprecated_empty_strings_.SetStringKey(key::kRemoteAccessHostClientDomain, + ""); } void TearDown() override { @@ -301,25 +304,26 @@ private: void SetDefaults(base::DictionaryValue& dict) { - dict.SetBoolean(key::kRemoteAccessHostFirewallTraversal, true); - dict.SetBoolean(key::kRemoteAccessHostAllowRelayedConnection, true); - dict.SetString(key::kRemoteAccessHostUdpPortRange, ""); + dict.SetBoolKey(key::kRemoteAccessHostFirewallTraversal, true); + dict.SetBoolKey(key::kRemoteAccessHostAllowRelayedConnection, true); + dict.SetStringKey(key::kRemoteAccessHostUdpPortRange, ""); dict.SetKey(key::kRemoteAccessHostClientDomainList, base::ListValue()); dict.SetKey(key::kRemoteAccessHostDomainList, base::ListValue()); - dict.SetBoolean(key::kRemoteAccessHostMatchUsername, false); - dict.SetBoolean(key::kRemoteAccessHostRequireCurtain, false); - dict.SetString(key::kRemoteAccessHostTokenUrl, ""); - dict.SetString(key::kRemoteAccessHostTokenValidationUrl, ""); - dict.SetString(key::kRemoteAccessHostTokenValidationCertificateIssuer, ""); - dict.SetBoolean(key::kRemoteAccessHostAllowClientPairing, true); - dict.SetBoolean(key::kRemoteAccessHostAllowGnubbyAuth, true); - dict.SetBoolean(key::kRemoteAccessHostAllowUiAccessForRemoteAssistance, + dict.SetBoolKey(key::kRemoteAccessHostMatchUsername, false); + dict.SetBoolKey(key::kRemoteAccessHostRequireCurtain, false); + dict.SetStringKey(key::kRemoteAccessHostTokenUrl, ""); + dict.SetStringKey(key::kRemoteAccessHostTokenValidationUrl, ""); + dict.SetStringKey(key::kRemoteAccessHostTokenValidationCertificateIssuer, + ""); + dict.SetBoolKey(key::kRemoteAccessHostAllowClientPairing, true); + dict.SetBoolKey(key::kRemoteAccessHostAllowGnubbyAuth, true); + dict.SetBoolKey(key::kRemoteAccessHostAllowUiAccessForRemoteAssistance, false); #if !BUILDFLAG(IS_CHROMEOS_ASH) - dict.SetBoolean(key::kRemoteAccessHostAllowFileTransfer, true); - dict.SetBoolean(key::kRemoteAccessHostEnableUserInterface, true); - dict.SetBoolean(key::kRemoteAccessHostAllowRemoteAccessConnections, true); - dict.SetInteger(key::kRemoteAccessHostMaximumSessionDurationMinutes, 0); + dict.SetBoolKey(key::kRemoteAccessHostAllowFileTransfer, true); + dict.SetBoolKey(key::kRemoteAccessHostEnableUserInterface, true); + dict.SetBoolKey(key::kRemoteAccessHostAllowRemoteAccessConnections, true); + dict.SetIntKey(key::kRemoteAccessHostMaximumSessionDurationMinutes, 0); #endif ASSERT_THAT(&dict, IsPolicies(&GetDefaultValues())) @@ -515,7 +519,7 @@ OnPolicyUpdatePtr(IsPolicies(&nat_true_others_default_))); base::DictionaryValue misspelled_policies; - misspelled_policies.SetString(misspelled_policy_name, "some test value"); + misspelled_policies.SetStringKey(misspelled_policy_name, "some test value"); mock_log.StartCapturingLogs(); SetPolicies(misspelled_policies);
diff --git a/remoting/protocol/mouse_input_filter.cc b/remoting/protocol/mouse_input_filter.cc index 787b400f..e4fa4aa 100644 --- a/remoting/protocol/mouse_input_filter.cc +++ b/remoting/protocol/mouse_input_filter.cc
@@ -43,13 +43,15 @@ int x = out_event.x(); if (x_output_ != x_input_) x = ((x * x_output_) + (x_input_ / 2)) / x_input_; - out_event.set_x(output_offset_.x() + base::clamp(x, 0, x_output_)); + out_event.set_x(output_offset_.x() + + base::clamp(x, 0, std::max(x_output_, 0))); } if (out_event.has_y()) { int y = out_event.y(); if (y_output_ != y_input_) y = ((y * y_output_) + (y_input_ / 2)) / y_input_; - out_event.set_y(output_offset_.y() + base::clamp(y, 0, y_output_)); + out_event.set_y(output_offset_.y() + + base::clamp(y, 0, std::max(y_output_, 0))); } InputFilter::InjectMouseEvent(out_event); }
diff --git a/services/device/generic_sensor/platform_sensor_chromeos.cc b/services/device/generic_sensor/platform_sensor_chromeos.cc index 97f48fe..104fc4b 100644 --- a/services/device/generic_sensor/platform_sensor_chromeos.cc +++ b/services/device/generic_sensor/platform_sensor_chromeos.cc
@@ -100,6 +100,7 @@ break; case mojom::SensorType::ACCELEROMETER: + case mojom::SensorType::GRAVITY: DCHECK_EQ(channel_indices_.size(), 4u); reading.accel.x = GetScaledValue(sample.at(channel_indices_[0])); reading.accel.y = GetScaledValue(sample.at(channel_indices_[1])); @@ -299,6 +300,10 @@ axes_prefix = chromeos::sensors::mojom::kMagnetometerChannel; break; + case mojom::SensorType::GRAVITY: + axes_prefix = chromeos::sensors::mojom::kGravityChannel; + break; + default: break; }
diff --git a/services/device/generic_sensor/platform_sensor_chromeos_unittest.cc b/services/device/generic_sensor/platform_sensor_chromeos_unittest.cc index f13c50f..7c547693 100644 --- a/services/device/generic_sensor/platform_sensor_chromeos_unittest.cc +++ b/services/device/generic_sensor/platform_sensor_chromeos_unittest.cc
@@ -29,6 +29,7 @@ constexpr char kGyroscopeChannels[][10] = {"anglvel_x", "anglvel_y", "anglvel_z"}; constexpr char kMagnetometerChannels[][10] = {"magn_x", "magn_y", "magn_z"}; +constexpr char kGravityChannels[][10] = {"gravity_x", "gravity_y", "gravity_z"}; constexpr double kScaleValue = 10.0; @@ -279,6 +280,7 @@ SensorReadingXYZ& GetSensorReadingXYZ(SensorReading& reading) { switch (GetParam().first) { case mojom::SensorType::ACCELEROMETER: + case mojom::SensorType::GRAVITY: return reading.accel; case mojom::SensorType::GYROSCOPE: return reading.gyro; @@ -299,6 +301,7 @@ switch (GetParam().first) { case mojom::SensorType::ACCELEROMETER: + case mojom::SensorType::GRAVITY: RoundAccelerometerReading(reading_xyz); break; case mojom::SensorType::GYROSCOPE: @@ -387,11 +390,11 @@ INSTANTIATE_TEST_SUITE_P( PlatformSensorChromeOSAxesTestRun, PlatformSensorChromeOSAxesTest, - ::testing::Values(std::make_pair(mojom::SensorType::ACCELEROMETER, - kAccelerometerChannels), - std::make_pair(mojom::SensorType::GYROSCOPE, - kGyroscopeChannels), - std::make_pair(mojom::SensorType::MAGNETOMETER, - kMagnetometerChannels))); + ::testing::Values( + std::make_pair(mojom::SensorType::ACCELEROMETER, + kAccelerometerChannels), + std::make_pair(mojom::SensorType::GYROSCOPE, kGyroscopeChannels), + std::make_pair(mojom::SensorType::MAGNETOMETER, kMagnetometerChannels), + std::make_pair(mojom::SensorType::GRAVITY, kGravityChannels))); } // namespace device
diff --git a/services/device/generic_sensor/platform_sensor_provider_chromeos.cc b/services/device/generic_sensor/platform_sensor_provider_chromeos.cc index 255ecdd..4aa19a93 100644 --- a/services/device/generic_sensor/platform_sensor_provider_chromeos.cc +++ b/services/device/generic_sensor/platform_sensor_provider_chromeos.cc
@@ -39,6 +39,9 @@ case chromeos::sensors::mojom::DeviceType::MAGN: return mojom::SensorType::MAGNETOMETER; + case chromeos::sensors::mojom::DeviceType::GRAVITY: + return mojom::SensorType::GRAVITY; + default: return absl::nullopt; } @@ -51,6 +54,7 @@ case mojom::SensorType::ACCELEROMETER: case mojom::SensorType::GYROSCOPE: case mojom::SensorType::MAGNETOMETER: + case mojom::SensorType::GRAVITY: return true; default: break; @@ -151,6 +155,21 @@ DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); } +bool PlatformSensorProviderChromeOS::IsFusionSensorType( + mojom::SensorType type) const { + // Let iioservice provide the Gravity sensor. + switch (type) { + case mojom::SensorType::LINEAR_ACCELERATION: + case mojom::SensorType::ABSOLUTE_ORIENTATION_EULER_ANGLES: + case mojom::SensorType::ABSOLUTE_ORIENTATION_QUATERNION: + case mojom::SensorType::RELATIVE_ORIENTATION_EULER_ANGLES: + case mojom::SensorType::RELATIVE_ORIENTATION_QUATERNION: + return true; + default: + return false; + } +} + bool PlatformSensorProviderChromeOS::IsSensorTypeAvailable( mojom::SensorType type) const { DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); @@ -449,6 +468,15 @@ break; } + case mojom::SensorType::GRAVITY: { + auto& motion_sensor_info = motion_sensor_location_info[location]; + // Don't need to increase |motion_sensor_info.count|, as gravity + // sensors shouldn't influence the decision. + motion_sensor_info.sensor_info_pairs.push_back( + std::make_pair(sensor.first, type)); + break; + } + default: break; }
diff --git a/services/device/generic_sensor/platform_sensor_provider_chromeos.h b/services/device/generic_sensor/platform_sensor_provider_chromeos.h index 22b9aa0..2ded9d0 100644 --- a/services/device/generic_sensor/platform_sensor_provider_chromeos.h +++ b/services/device/generic_sensor/platform_sensor_provider_chromeos.h
@@ -50,6 +50,8 @@ SensorReadingSharedBuffer* reading_buffer, CreateSensorCallback callback) override; void FreeResources() override; + + bool IsFusionSensorType(mojom::SensorType type) const override; bool IsSensorTypeAvailable(mojom::SensorType type) const override; private:
diff --git a/services/device/generic_sensor/platform_sensor_provider_linux_base.cc b/services/device/generic_sensor/platform_sensor_provider_linux_base.cc index 1529adf..071b83d 100644 --- a/services/device/generic_sensor/platform_sensor_provider_linux_base.cc +++ b/services/device/generic_sensor/platform_sensor_provider_linux_base.cc
@@ -17,9 +17,8 @@ namespace device { -// static bool PlatformSensorProviderLinuxBase::IsFusionSensorType( - mojom::SensorType type) { + mojom::SensorType type) const { switch (type) { case mojom::SensorType::LINEAR_ACCELERATION: case mojom::SensorType::GRAVITY:
diff --git a/services/device/generic_sensor/platform_sensor_provider_linux_base.h b/services/device/generic_sensor/platform_sensor_provider_linux_base.h index 338f712..f0d8148 100644 --- a/services/device/generic_sensor/platform_sensor_provider_linux_base.h +++ b/services/device/generic_sensor/platform_sensor_provider_linux_base.h
@@ -11,7 +11,7 @@ class PlatformSensorProviderLinuxBase : public PlatformSensorProvider { protected: - static bool IsFusionSensorType(mojom::SensorType type); + virtual bool IsFusionSensorType(mojom::SensorType type) const; void CreateFusionSensor(mojom::SensorType type, SensorReadingSharedBuffer* reading_buffer,
diff --git a/services/proxy_resolver/proxy_resolver_v8_tracing_unittest.cc b/services/proxy_resolver/proxy_resolver_v8_tracing_unittest.cc index 4393815..57829c8 100644 --- a/services/proxy_resolver/proxy_resolver_v8_tracing_unittest.cc +++ b/services/proxy_resolver/proxy_resolver_v8_tracing_unittest.cc
@@ -189,9 +189,7 @@ EXPECT_TRUE(mock_bindings.GetErrors().empty()); } -// TODO(pthier, v8:11365): Update error message and re-enable test once -// https://crrev.com/c/2979599 is rolled into chromium. -TEST_F(ProxyResolverV8TracingTest, DISABLED_JavascriptError) { +TEST_F(ProxyResolverV8TracingTest, JavascriptError) { MockProxyHostResolver host_resolver; MockBindings mock_bindings(&host_resolver); @@ -215,8 +213,9 @@ EXPECT_EQ("Prepare to DIE!", mock_bindings.GetAlerts()[0]); ASSERT_EQ(1u, mock_bindings.GetErrors().size()); EXPECT_EQ(5, mock_bindings.GetErrors()[0].first); - EXPECT_EQ("Uncaught TypeError: Cannot read property 'split' of null", - mock_bindings.GetErrors()[0].second); + EXPECT_EQ( + "Uncaught TypeError: Cannot read properties of null (reading 'split')", + mock_bindings.GetErrors()[0].second); } TEST_F(ProxyResolverV8TracingTest, TooManyAlerts) {
diff --git a/services/tracing/public/cpp/perfetto/trace_event_data_source_unittest.cc b/services/tracing/public/cpp/perfetto/trace_event_data_source_unittest.cc index 5795106a..b13b44f2 100644 --- a/services/tracing/public/cpp/perfetto/trace_event_data_source_unittest.cc +++ b/services/tracing/public/cpp/perfetto/trace_event_data_source_unittest.cc
@@ -523,9 +523,21 @@ return packet_index; } + struct StringOrIid { + // implicit + StringOrIid(uint32_t iid) : iid(iid) {} + // implicit + StringOrIid(std::string value) : value(value) {} + // implicit + StringOrIid(const char* value) : value(value) {} + + std::string value; + uint32_t iid = 0; + }; + void ExpectTraceEvent(const perfetto::protos::TracePacket* packet, uint32_t category_iid, - uint32_t name_iid, + StringOrIid name, char phase, uint32_t flags = 0, uint64_t id = 0, @@ -611,8 +623,10 @@ EXPECT_EQ(packet->track_event().category_iids_size(), 0); } - if (name_iid > 0) { - EXPECT_EQ(packet->track_event().name_iid(), name_iid); + if (name.iid > 0) { + EXPECT_EQ(packet->track_event().name_iid(), name.iid); + } else if (!name.value.empty()) { + EXPECT_EQ(packet->track_event().name(), name.value); } TrackEvent::Type track_event_type; @@ -770,7 +784,7 @@ #endif } - void ExpectEventNames( + void ExpectInternedEventNames( const perfetto::protos::TracePacket* packet, std::initializer_list<std::pair<uint32_t, std::string>> entries, base::Location from_here = base::Location::Current()) { @@ -778,7 +792,7 @@ from_here); } - void ExpectDebugAnnotationNames( + void ExpectInternedDebugAnnotationNames( const perfetto::protos::TracePacket* packet, std::initializer_list<std::pair<uint32_t, std::string>> entries, base::Location from_here = base::Location::Current()) { @@ -791,6 +805,7 @@ const google::protobuf::RepeatedPtrField<T>& field, std::initializer_list<std::pair<uint32_t, std::string>> expected_entries, base::Location from_here = base::Location::Current()) { + SCOPED_TRACE(from_here.ToString()); std::vector<std::pair<uint32_t, std::string>> entries; for (int i = 0; i < field.size(); ++i) { entries.emplace_back(field[i].iid(), field[i].name()); @@ -1007,7 +1022,7 @@ TRACE_EVENT_PHASE_BEGIN); ExpectEventCategories(e_packet, {{1u, kCategoryGroup}}); - ExpectEventNames(e_packet, {{1u, "bar"}}); + ExpectInternedEventNames(e_packet, {{1u, "bar"}}); } TEST_F(TraceEventDataSourceTest, TimestampedTraceEvent) { @@ -1032,7 +1047,7 @@ perfetto::ThreadTrack::ForThread(4242)); ExpectEventCategories(e_packet, {{1u, kCategoryGroup}}); - ExpectEventNames(e_packet, {{1u, "bar"}}); + ExpectInternedEventNames(e_packet, {{1u, "bar"}}); } TEST_F(TraceEventDataSourceTest, InstantTraceEvent) { @@ -1047,7 +1062,7 @@ TRACE_EVENT_PHASE_INSTANT, TRACE_EVENT_SCOPE_THREAD); ExpectEventCategories(e_packet, {{1u, kCategoryGroup}}); - ExpectEventNames(e_packet, {{1u, "bar"}}); + ExpectInternedEventNames(e_packet, {{1u, "bar"}}); } TEST_F(TraceEventDataSourceTest, InstantTraceEventOnOtherThread) { @@ -1075,7 +1090,7 @@ perfetto::ThreadTrack::ForThread(1)); ExpectEventCategories(e_packet, {{1u, kCategoryGroup}}); - ExpectEventNames(e_packet, {{1u, "bar"}}); + ExpectInternedEventNames(e_packet, {{1u, "bar"}}); } TEST_F(TraceEventDataSourceTest, EventWithStringArgs) { @@ -1098,8 +1113,9 @@ EXPECT_EQ(annotations[1].string_value(), "arg2_val"); ExpectEventCategories(e_packet, {{1u, kCategoryGroup}}); - ExpectEventNames(e_packet, {{1u, "bar"}}); - ExpectDebugAnnotationNames(e_packet, {{1u, "arg1_name"}, {2u, "arg2_name"}}); + ExpectInternedEventNames(e_packet, {{1u, "bar"}}); + ExpectInternedDebugAnnotationNames(e_packet, + {{1u, "arg1_name"}, {2u, "arg2_name"}}); } TEST_F(TraceEventDataSourceTest, EventWithCopiedStrings) { @@ -1112,20 +1128,20 @@ size_t packet_index = ExpectStandardPreamble(); auto* e_packet = GetFinalizedPacket(packet_index++); - ExpectTraceEvent(e_packet, /*category_iid=*/1u, /*name_iid=*/1u, + ExpectTraceEvent(e_packet, /*category_iid=*/1u, /*name=*/"bar", TRACE_EVENT_PHASE_INSTANT, TRACE_EVENT_SCOPE_THREAD | TRACE_EVENT_FLAG_COPY); + EXPECT_EQ(e_packet->track_event().name(), "bar"); + const auto& annotations = e_packet->track_event().debug_annotations(); EXPECT_EQ(annotations.size(), 2); - EXPECT_EQ(annotations[0].name_iid(), 1u); + EXPECT_EQ(annotations[0].name(), "arg1_name"); EXPECT_EQ(annotations[0].string_value(), "arg1_val"); - EXPECT_EQ(annotations[1].name_iid(), 2u); + EXPECT_EQ(annotations[1].name(), "arg2_name"); EXPECT_EQ(annotations[1].string_value(), "arg2_val"); ExpectEventCategories(e_packet, {{1u, kCategoryGroup}}); - ExpectEventNames(e_packet, {{1u, "bar"}}); - ExpectDebugAnnotationNames(e_packet, {{1u, "arg1_name"}, {2u, "arg2_name"}}); } TEST_F(TraceEventDataSourceTest, EventWithUIntArgs) { @@ -1181,7 +1197,7 @@ EXPECT_TRUE(annotations[0].has_bool_value()); EXPECT_EQ(annotations[0].bool_value(), true); EXPECT_TRUE(annotations[1].has_bool_value()); - EXPECT_EQ(annotations[1].int_value(), false); + EXPECT_EQ(annotations[1].bool_value(), false); } TEST_F(TraceEventDataSourceTest, EventWithDoubleArgs) { @@ -1534,7 +1550,7 @@ /*absolute_timestamp=*/0, /*tid_override=*/0, track); ExpectEventCategories(b_packet, {{1u, "browser"}}); - ExpectEventNames(b_packet, {{1u, "bar"}}); + ExpectInternedEventNames(b_packet, {{1u, "bar"}}); #if !BUILDFLAG(USE_PERFETTO_CLIENT_LIBRARY) auto* t_packet = GetFinalizedPacket(packet_index++); @@ -1543,7 +1559,7 @@ auto* e_packet = GetFinalizedPacket(packet_index++); - ExpectTraceEvent(e_packet, /*category_iid=*/0, /*name_iid=*/0, + ExpectTraceEvent(e_packet, /*category_iid=*/0, /*name_iid=*/0u, TRACE_EVENT_PHASE_END, /*flags=*/0, /*id=*/0, /*absolute_timestamp=*/0, /*tid_override=*/0, track); } @@ -1570,7 +1586,7 @@ /*absolute_timestamp=*/0, /*tid_override=*/0, track); ExpectEventCategories(b_packet, {{1u, "browser"}}); - ExpectEventNames(b_packet, {{1u, "bar"}}); + ExpectInternedEventNames(b_packet, {{1u, "bar"}}); #if !BUILDFLAG(USE_PERFETTO_CLIENT_LIBRARY) auto* t_packet = GetFinalizedPacket(packet_index++); @@ -1579,7 +1595,7 @@ auto* e_packet = GetFinalizedPacket(packet_index++); - ExpectTraceEvent(e_packet, /*category_iid=*/0, /*name_iid=*/0, + ExpectTraceEvent(e_packet, /*category_iid=*/0, /*name_iid=*/0u, TRACE_EVENT_PHASE_END, /*flags=*/0, /*id=*/0, /*absolute_timestamp=*/0, /*tid_override=*/0, track); } @@ -1609,7 +1625,7 @@ /*tid_override=*/0, track); ExpectEventCategories(b_packet, {{1u, "browser"}}); - ExpectEventNames(b_packet, {{1u, "bar"}}); + ExpectInternedEventNames(b_packet, {{1u, "bar"}}); } TEST_F(TraceEventDataSourceTest, TrackSupportWithTimestampAndLambda) { @@ -1641,7 +1657,7 @@ /*tid_override=*/0, track); ExpectEventCategories(b_packet, {{1u, "browser"}}); - ExpectEventNames(b_packet, {{1u, "bar"}}); + ExpectInternedEventNames(b_packet, {{1u, "bar"}}); } // TODO(ddrone): following tests should be re-enabled once we figure out how @@ -1661,10 +1677,10 @@ /*absolute_timestamp=*/0, /*tid_override=*/0, track); ExpectEventCategories(b_packet, {{1u, "browser"}}); - ExpectEventNames(b_packet, {{1u, "bar"}}); + ExpectInternedEventNames(b_packet, {{1u, "bar"}}); auto* e_packet = GetFinalizedPacket(packet_index++); - ExpectTraceEvent(e_packet, /*category_iid=*/0, /*name_iid=*/0, + ExpectTraceEvent(e_packet, /*category_iid=*/0, /*name_iid=*/0u, TRACE_EVENT_PHASE_END, /*flags=*/0, /*id=*/0, /*absolute_timestamp=*/0, /*tid_override=*/0, track); } @@ -1690,10 +1706,10 @@ /*absolute_timestamp=*/0, /*tid_override=*/0, track); ExpectEventCategories(b_packet, {{1u, "browser"}}); - ExpectEventNames(b_packet, {{1u, "bar"}}); + ExpectInternedEventNames(b_packet, {{1u, "bar"}}); auto* e_packet = GetFinalizedPacket(packet_index++); - ExpectTraceEvent(e_packet, /*category_iid=*/0, /*name_iid=*/0, + ExpectTraceEvent(e_packet, /*category_iid=*/0, /*name_iid=*/0u, TRACE_EVENT_PHASE_END, /*flags=*/0, /*id=*/0, /*absolute_timestamp=*/0, /*tid_override=*/0, track); } @@ -1726,8 +1742,8 @@ EXPECT_EQ(annotations1[0].int_value(), 4); ExpectEventCategories(e_packet1, {{1u, "browser"}}); - ExpectEventNames(e_packet1, {{1u, "e1"}}); - ExpectDebugAnnotationNames(e_packet1, {{1u, "arg1"}}); + ExpectInternedEventNames(e_packet1, {{1u, "e1"}}); + ExpectInternedDebugAnnotationNames(e_packet1, {{1u, "arg1"}}); // Second packet refers to the interning entries from packet 1. auto* e_packet2 = GetFinalizedPacket(packet_index++); @@ -1740,8 +1756,8 @@ EXPECT_EQ(annotations2[0].int_value(), 2); ExpectEventCategories(e_packet2, {}); - ExpectEventNames(e_packet2, {}); - ExpectDebugAnnotationNames(e_packet2, {}); + ExpectInternedEventNames(e_packet2, {}); + ExpectInternedDebugAnnotationNames(e_packet2, {}); // Third packet uses different names, so emits new entries. auto* e_packet3 = GetFinalizedPacket(packet_index++); @@ -1754,8 +1770,8 @@ EXPECT_EQ(annotations3[0].int_value(), 1); ExpectEventCategories(e_packet3, {{2u, "ui"}}); - ExpectEventNames(e_packet3, {{2u, "e2"}}); - ExpectDebugAnnotationNames(e_packet3, {{2u, "arg2"}}); + ExpectInternedEventNames(e_packet3, {{2u, "e2"}}); + ExpectInternedDebugAnnotationNames(e_packet3, {{2u, "arg2"}}); // Resetting the interning state causes ThreadDescriptor and interning // entries to be emitted again, with the same interning IDs. @@ -1785,8 +1801,8 @@ TRACE_EVENT_PHASE_BEGIN); ExpectEventCategories(e_packet, {{1u, kCategoryGroup}}); - ExpectEventNames(e_packet, {{1u, "bar"}}); - ExpectDebugAnnotationNames(e_packet, {}); + ExpectInternedEventNames(e_packet, {{1u, "bar"}}); + ExpectInternedDebugAnnotationNames(e_packet, {}); } TEST_F(TraceEventDataSourceTest, FilteringEventWithArgs) { @@ -1806,8 +1822,8 @@ EXPECT_EQ(annotations.size(), 0); ExpectEventCategories(e_packet, {{1u, kCategoryGroup}}); - ExpectEventNames(e_packet, {{1u, "bar"}}); - ExpectDebugAnnotationNames(e_packet, {}); + ExpectInternedEventNames(e_packet, {{1u, "bar"}}); + ExpectInternedDebugAnnotationNames(e_packet, {}); } TEST_F(TraceEventDataSourceTest, FilteringEventWithFlagCopy) { @@ -1825,25 +1841,23 @@ /*privacy_filtering_enabled=*/true); auto* e_packet = GetFinalizedPacket(packet_index++); - ExpectTraceEvent(e_packet, /*category_iid=*/1u, /*name_iid=*/1u, + ExpectTraceEvent(e_packet, /*category_iid=*/1u, "PRIVACY_FILTERED", TRACE_EVENT_PHASE_INSTANT, TRACE_EVENT_SCOPE_THREAD); const auto& annotations = e_packet->track_event().debug_annotations(); EXPECT_EQ(annotations.size(), 0); ExpectEventCategories(e_packet, {{1u, kCategoryGroup}}); - ExpectEventNames(e_packet, {{1u, "PRIVACY_FILTERED"}}); - ExpectDebugAnnotationNames(e_packet, {}); + ExpectInternedDebugAnnotationNames(e_packet, {}); e_packet = GetFinalizedPacket(packet_index++); - ExpectTraceEvent(e_packet, /*category_iid=*/1u, /*name_iid=*/2u, + ExpectTraceEvent(e_packet, /*category_iid=*/1u, "javaName", TRACE_EVENT_PHASE_INSTANT, TRACE_EVENT_SCOPE_THREAD); const auto& annotations2 = e_packet->track_event().debug_annotations(); EXPECT_EQ(annotations2.size(), 0); - ExpectEventNames(e_packet, {{2u, "javaName"}}); - ExpectDebugAnnotationNames(e_packet, {}); + ExpectInternedDebugAnnotationNames(e_packet, {}); } #endif // !BUILDFLAG(USE_PERFETTO_CLIENT_LIBRARY) @@ -1936,8 +1950,8 @@ EXPECT_EQ(annotations1[0].int_value(), 4); ExpectEventCategories(e_packet1, {{1u, "browser"}}); - ExpectEventNames(e_packet1, {{1u, "e1"}}); - ExpectDebugAnnotationNames(e_packet1, {{1u, "arg1"}}); + ExpectInternedEventNames(e_packet1, {{1u, "e1"}}); + ExpectInternedDebugAnnotationNames(e_packet1, {{1u, "arg1"}}); // Second packet reemits the entries the same way. auto* e_packet2 = GetFinalizedPacket(packet_index++); @@ -1950,8 +1964,8 @@ EXPECT_EQ(annotations2[0].int_value(), 2); ExpectEventCategories(e_packet1, {{1u, "browser"}}); - ExpectEventNames(e_packet1, {{1u, "e1"}}); - ExpectDebugAnnotationNames(e_packet1, {{1u, "arg1"}}); + ExpectInternedEventNames(e_packet1, {{1u, "e1"}}); + ExpectInternedDebugAnnotationNames(e_packet1, {{1u, "arg1"}}); // Third packet emits entries with the same IDs but different strings. auto* e_packet3 = GetFinalizedPacket(packet_index++); @@ -1964,8 +1978,8 @@ EXPECT_EQ(annotations3[0].int_value(), 1); ExpectEventCategories(e_packet3, {{1u, "ui"}}); - ExpectEventNames(e_packet3, {{1u, "e2"}}); - ExpectDebugAnnotationNames(e_packet3, {{1u, "arg2"}}); + ExpectInternedEventNames(e_packet3, {{1u, "e2"}}); + ExpectInternedDebugAnnotationNames(e_packet3, {{1u, "arg2"}}); } #if BUILDFLAG(USE_PERFETTO_CLIENT_LIBRARY) @@ -2084,7 +2098,7 @@ TRACE_EVENT_PHASE_BEGIN); ExpectEventCategories(e_packet, {{1u, "browser"}}); - ExpectEventNames(e_packet, {{1u, "bar"}}); + ExpectInternedEventNames(e_packet, {{1u, "bar"}}); ASSERT_TRUE(e_packet->track_event().has_log_message()); EXPECT_EQ(e_packet->track_event().log_message().body_iid(), 42u); } @@ -2128,7 +2142,7 @@ TRACE_EVENT_PHASE_BEGIN); ExpectEventCategories(e_packet, {{1u, "browser"}}); - ExpectEventNames(e_packet, {{1u, "bar"}}); + ExpectInternedEventNames(e_packet, {{1u, "bar"}}); ASSERT_TRUE(e_packet->track_event().has_log_message()); EXPECT_EQ(e_packet->track_event().log_message().body_iid(), 42u); @@ -2154,7 +2168,7 @@ TRACE_EVENT_PHASE_INSTANT, TRACE_EVENT_SCOPE_THREAD); ExpectEventCategories(e_packet, {{1u, "browser"}}); - ExpectEventNames(e_packet, {{1u, "bar"}}); + ExpectInternedEventNames(e_packet, {{1u, "bar"}}); ASSERT_TRUE(e_packet->track_event().has_log_message()); EXPECT_EQ(e_packet->track_event().log_message().body_iid(), 42u); } @@ -2177,7 +2191,7 @@ TRACE_EVENT_PHASE_BEGIN); ExpectEventCategories(e_packet, {{1u, "browser"}}); - ExpectEventNames(e_packet, {{1u, "bar"}}); + ExpectInternedEventNames(e_packet, {{1u, "bar"}}); ASSERT_TRUE(e_packet->track_event().has_log_message()); EXPECT_EQ(e_packet->track_event().log_message().body_iid(), 42u); @@ -2206,7 +2220,7 @@ TRACE_EVENT_PHASE_BEGIN); ExpectEventCategories(e_packet, {{1u, "browser"}}); - ExpectEventNames(e_packet, {{1u, "bar"}}); + ExpectInternedEventNames(e_packet, {{1u, "bar"}}); ASSERT_TRUE(e_packet->track_event().has_log_message()); EXPECT_EQ(e_packet->track_event().log_message().body_iid(), 42u); @@ -2238,7 +2252,7 @@ TRACE_EVENT_PHASE_BEGIN); ExpectEventCategories(e_packet, {{1u, "browser"}}); - ExpectEventNames(e_packet, {{1u, "bar"}}); + ExpectInternedEventNames(e_packet, {{1u, "bar"}}); ASSERT_TRUE(e_packet->track_event().has_log_message()); EXPECT_EQ(e_packet->track_event().log_message().body_iid(), 42u); @@ -2275,7 +2289,7 @@ ExpectEventCategories(e_packet, {{1u, TRACE_DISABLED_BY_DEFAULT("histogram_samples")}}); - ExpectEventNames(e_packet, {{1u, "HistogramSample"}}); + ExpectInternedEventNames(e_packet, {{1u, "HistogramSample"}}); ASSERT_TRUE(e_packet->track_event().has_chrome_histogram_sample()); EXPECT_EQ(e_packet->track_event().chrome_histogram_sample().sample(), 1u); ASSERT_TRUE(e_packet->has_interned_data()); @@ -2303,7 +2317,7 @@ ExpectEventCategories(e_packet, {{1u, TRACE_DISABLED_BY_DEFAULT("histogram_samples")}}); - ExpectEventNames(e_packet, {{1u, "HistogramSample"}}); + ExpectInternedEventNames(e_packet, {{1u, "HistogramSample"}}); ASSERT_TRUE(e_packet->track_event().has_chrome_histogram_sample()); EXPECT_EQ(e_packet->track_event().chrome_histogram_sample().name_hash(), base::HashMetricName("Foo1.Bar1")); @@ -2316,7 +2330,7 @@ e_packet = GetFinalizedPacket(packet_index++); ExpectEventCategories(e_packet, {}); - ExpectEventNames(e_packet, {}); + ExpectInternedEventNames(e_packet, {}); ASSERT_TRUE(e_packet->track_event().has_chrome_histogram_sample()); EXPECT_EQ(e_packet->track_event().chrome_histogram_sample().name_hash(), base::HashMetricName("Foo3.Bar3")); @@ -2346,7 +2360,7 @@ ExpectEventCategories( e_packet, {{1u, TRACE_DISABLED_BY_DEFAULT("user_action_samples")}}); - ExpectEventNames(e_packet, {{1u, "UserAction"}}); + ExpectInternedEventNames(e_packet, {{1u, "UserAction"}}); ASSERT_TRUE(e_packet->track_event().has_chrome_user_event()); EXPECT_EQ(e_packet->track_event().chrome_user_event().action_hash(), base::HashMetricName("Test_Action")); @@ -2383,7 +2397,7 @@ auto* e_packet = GetFinalizedPacket(packet_index++); ExpectEventCategories(e_packet, {{1u, "browser"}}); - ExpectEventNames(e_packet, {{1u, "bar"}}); + ExpectInternedEventNames(e_packet, {{1u, "bar"}}); ASSERT_TRUE(e_packet->track_event().has_log_message()); ASSERT_TRUE(e_packet->has_interned_data()); EXPECT_EQ(e_packet->track_event().log_message().body_iid(), @@ -2403,13 +2417,13 @@ auto* e_packet1 = GetFinalizedPacket(packet_index++); ExpectEventCategories(e_packet1, {{1u, "browser"}}); - ExpectEventNames(e_packet1, {{1u, "Event1"}}); - ExpectDebugAnnotationNames(e_packet1, {{1u, "arg1"}}); + ExpectInternedEventNames(e_packet1, {{1u, "Event1"}}); + ExpectInternedDebugAnnotationNames(e_packet1, {{1u, "arg1"}}); auto* e_packet2 = GetFinalizedPacket(packet_index++); - ExpectEventNames(e_packet2, {{2u, "Event2"}}); - ExpectDebugAnnotationNames(e_packet2, {{2u, "arg2"}}); + ExpectInternedEventNames(e_packet2, {{2u, "Event2"}}); + ExpectInternedDebugAnnotationNames(e_packet2, {{2u, "arg2"}}); } // TODO(eseckler): Add startup tracing unittests.
diff --git a/services/tracing/public/cpp/perfetto/track_event_thread_local_event_sink.cc b/services/tracing/public/cpp/perfetto/track_event_thread_local_event_sink.cc index 7c660bc..8e88885f 100644 --- a/services/tracing/public/cpp/perfetto/track_event_thread_local_event_sink.cc +++ b/services/tracing/public/cpp/perfetto/track_event_thread_local_event_sink.cc
@@ -42,6 +42,7 @@ using perfetto::protos::pbzero::ChromeThreadDescriptor; using perfetto::protos::pbzero::ClockSnapshot; using perfetto::protos::pbzero::CounterDescriptor; +using perfetto::protos::pbzero::DebugAnnotation; using perfetto::protos::pbzero::InternedData; using perfetto::protos::pbzero::ThreadDescriptor; using perfetto::protos::pbzero::TracePacket; @@ -85,54 +86,47 @@ annotation->set_legacy_json_value(json.c_str()); } -void WriteDebugAnnotations(base::trace_event::TraceEvent* trace_event, - TrackEvent* track_event, - InterningID* current_packet_interning_entries) { - for (size_t i = 0; i < trace_event->arg_size() && trace_event->arg_name(i); - ++i) { - auto type = trace_event->arg_type(i); - auto* annotation = track_event->add_debug_annotations(); +void WriteDebugAnnotationValue(base::trace_event::TraceEvent* trace_event, + size_t arg_index, + DebugAnnotation* annotation) { + auto type = trace_event->arg_type(arg_index); - annotation->set_name_iid(current_packet_interning_entries[i]); + if (type == TRACE_VALUE_TYPE_CONVERTABLE) { + AddConvertableToTraceFormat(trace_event->arg_convertible_value(arg_index), + annotation); + return; + } - if (type == TRACE_VALUE_TYPE_CONVERTABLE) { - AddConvertableToTraceFormat(trace_event->arg_convertible_value(i), - annotation); - continue; - } + auto& value = trace_event->arg_value(arg_index); + switch (type) { + case TRACE_VALUE_TYPE_BOOL: + annotation->set_bool_value(value.as_bool); + break; + case TRACE_VALUE_TYPE_UINT: + annotation->set_uint_value(value.as_uint); + break; + case TRACE_VALUE_TYPE_INT: + annotation->set_int_value(value.as_int); + break; + case TRACE_VALUE_TYPE_DOUBLE: + annotation->set_double_value(value.as_double); + break; + case TRACE_VALUE_TYPE_POINTER: + annotation->set_pointer_value( + static_cast<uint64_t>(reinterpret_cast<uintptr_t>(value.as_pointer))); + break; + case TRACE_VALUE_TYPE_STRING: + case TRACE_VALUE_TYPE_COPY_STRING: + annotation->set_string_value(value.as_string ? value.as_string : "NULL"); + break; + case TRACE_VALUE_TYPE_PROTO: { + auto data = value.as_proto->SerializeAsArray(); + annotation->AppendRawProtoBytes(data.data(), data.size()); + } break; - auto& value = trace_event->arg_value(i); - switch (type) { - case TRACE_VALUE_TYPE_BOOL: - annotation->set_bool_value(value.as_bool); - break; - case TRACE_VALUE_TYPE_UINT: - annotation->set_uint_value(value.as_uint); - break; - case TRACE_VALUE_TYPE_INT: - annotation->set_int_value(value.as_int); - break; - case TRACE_VALUE_TYPE_DOUBLE: - annotation->set_double_value(value.as_double); - break; - case TRACE_VALUE_TYPE_POINTER: - annotation->set_pointer_value(static_cast<uint64_t>( - reinterpret_cast<uintptr_t>(value.as_pointer))); - break; - case TRACE_VALUE_TYPE_STRING: - case TRACE_VALUE_TYPE_COPY_STRING: - annotation->set_string_value(value.as_string ? value.as_string - : "NULL"); - break; - case TRACE_VALUE_TYPE_PROTO: { - auto data = value.as_proto->SerializeAsArray(); - annotation->AppendRawProtoBytes(data.data(), data.size()); - } break; - - default: - NOTREACHED() << "Don't know how to serialize this value"; - break; - } + default: + NOTREACHED() << "Don't know how to serialize this value"; + break; } } @@ -166,13 +160,6 @@ std::atomic<uint32_t> TrackEventThreadLocalEventSink::incremental_state_reset_id_{0}; -TrackEventThreadLocalEventSink::IndexData::IndexData(const char* str) - : str_piece(str) {} - -TrackEventThreadLocalEventSink::IndexData::IndexData( - std::tuple<const char*, const char*, int>&& src) - : src_loc(std::move(src)) {} - TrackEventThreadLocalEventSink::TrackEventThreadLocalEventSink( std::unique_ptr<perfetto::TraceWriter> trace_writer, uint32_t session_id, @@ -243,15 +230,6 @@ void TrackEventThreadLocalEventSink::WriteInternedDataIntoTracePacket( TracePacket* packet) { auto& serialized_interned_data = incremental_state_.serialized_interned_data; - if (!pending_interning_updates_.empty()) { - // TODO(skyostil): Combine |pending_interning_updates_| and - // |serialized_interned_data| so we don't need to merge the two here. - if (!serialized_interned_data.empty()) { - EmitStoredInternedData(serialized_interned_data.get()); - } else { - EmitStoredInternedData(packet->set_interned_data()); - } - } // When the track event is finalized (i.e., the context is destroyed), we // should flush any newly seen interned data to the trace. The data has @@ -390,7 +368,7 @@ protozero::MessageHandle<TracePacket>* trace_packet) { // Each event's updates to InternedData are flushed at the end of // AddTraceEvent(). - DCHECK(pending_interning_updates_.empty()); + DCHECK(incremental_state_.serialized_interned_data.empty()); char phase = trace_event->phase(); @@ -425,59 +403,48 @@ TrackEvent* track_event = (*trace_packet)->set_track_event(); perfetto::EventContext event_context(track_event, &incremental_state_); + // TODO(eseckler): Split comma-separated category strings. const char* category_name = TraceLog::GetCategoryGroupName(trace_event->category_group_enabled()); - InterningIndexEntry interned_category{}; // No need to write the category for sync end events. Trace processor will // match them without, provided event nesting is correct. For async end // events, event ID matching includes the category, so we have to emit the // category for the time being. if (!is_sync_end) { - interned_category = interned_event_categories_.LookupOrAdd(category_name); + track_event->add_category_iids( + perfetto::internal::InternedEventCategory::Get( + &event_context, category_name, strlen(category_name))); } - - InterningIndexEntry interned_name{}; - const size_t kMaxSize = base::trace_event::TraceArguments::kMaxSize; - InterningID interned_annotation_names[kMaxSize] = {}; - // No need to write the event name for end events (sync or nestable async). // Trace processor will match them without, provided event nesting is correct. // Legacy async events (TRACE_EVENT_ASYNC*) are only pass-through in trace // processor, so we still have to emit names for these. const char* trace_event_name = trace_event->name(); if (!is_sync_end && !is_nestable_async_end) { + bool filter_name = + copy_strings && !is_java_event && privacy_filtering_enabled_; + if (filter_name) + trace_event_name = kPrivacyFiltered; if (copy_strings) { - if (!is_java_event && privacy_filtering_enabled_) { - trace_event_name = kPrivacyFiltered; - interned_name = interned_event_names_.LookupOrAdd(trace_event_name); - } else { - interned_name = - interned_event_names_.LookupOrAdd(std::string(trace_event_name)); - } + track_event->set_name(trace_event_name); } else { - interned_name = interned_event_names_.LookupOrAdd(trace_event->name()); + track_event->set_name_iid(perfetto::internal::InternedEventName::Get( + &event_context, trace_event->name())); } } - if (copy_strings || is_java_event) { - if (!privacy_filtering_enabled_) { - for (size_t i = 0; - i < trace_event->arg_size() && trace_event->arg_name(i); ++i) { - interned_annotation_names[i] = + if (!privacy_filtering_enabled_) { + for (size_t i = 0; i < trace_event->arg_size() && trace_event->arg_name(i); + ++i) { + auto* debug_annotation = track_event->add_debug_annotations(); + if (copy_strings) { + debug_annotation->set_name(trace_event->arg_name(i)); + } else { + debug_annotation->set_name_iid( perfetto::internal::InternedDebugAnnotationName::Get( - &event_context, CopyString(trace_event->arg_name(i))); + &event_context, trace_event->arg_name(i))); } - } - } else { - if (flags & TRACE_EVENT_FLAG_TYPED_PROTO_ARGS) { - NOTREACHED(); - } else if (!privacy_filtering_enabled_) { - for (size_t i = 0; - i < trace_event->arg_size() && trace_event->arg_name(i); ++i) { - interned_annotation_names[i] = - perfetto::internal::InternedDebugAnnotationName::Get( - &event_context, trace_event->arg_name(i)); - } + WriteDebugAnnotationValue(trace_event, i, debug_annotation); } } @@ -540,19 +507,6 @@ } } - // TODO(eseckler): Split comma-separated category strings. - if (interned_category.id) { - track_event->add_category_iids(interned_category.id); - } - - if (!privacy_filtering_enabled_) { - WriteDebugAnnotations(trace_event, track_event, interned_annotation_names); - } - - if (interned_name.id) { - track_event->set_name_iid(interned_name.id); - } - // Only set the |legacy_event| field of the TrackEvent if we need to emit any // of the legacy fields. BEWARE: Do not set any other TrackEvent fields in // between calls to |legacy_event.GetOrCreate()|. @@ -698,66 +652,13 @@ legacy_event.GetOrCreate()->set_bind_to_enclosing(true); } - if (interned_category.id && !interned_category.was_emitted) { - pending_interning_updates_.push_back( - std::make_tuple(IndexType::kCategory, IndexData{category_name}, - std::move(interned_category))); - } - if (interned_name.id && !interned_name.was_emitted) { - pending_interning_updates_.push_back( - std::make_tuple(IndexType::kName, IndexData{trace_event_name}, - std::move(interned_name))); - } - if (disable_interning_) { - interned_event_categories_.Clear(); - interned_event_names_.Clear(); - interned_source_locations_.Clear(); - interned_log_message_bodies_.Clear(); incremental_state_.interned_data_indices = {}; - copied_strings_.clear(); } return track_event; } -void TrackEventThreadLocalEventSink::EmitStoredInternedData( - perfetto::protos::pbzero::InternedData* interned_data) { - DCHECK(interned_data); - for (const auto& update : pending_interning_updates_) { - IndexType type = std::get<0>(update); - IndexData data = std::get<1>(update); - InterningIndexEntry entry = std::get<2>(update); - if (type == IndexType::kName) { - auto* name_entry = interned_data->add_event_names(); - name_entry->set_iid(entry.id); - name_entry->set_name(data.str_piece); - } else if (type == IndexType::kCategory) { - auto* category_entry = interned_data->add_event_categories(); - category_entry->set_iid(entry.id); - category_entry->set_name(data.str_piece); - } else if (type == IndexType::kLogMessage) { - auto* log_message_entry = interned_data->add_log_message_body(); - log_message_entry->set_iid(entry.id); - log_message_entry->set_body(data.str_piece); - } else if (type == IndexType::kSourceLocation) { - auto* source_location_entry = interned_data->add_source_locations(); - source_location_entry->set_iid(entry.id); - source_location_entry->set_file_name(std::get<0>(data.src_loc)); - - if (std::get<1>(data.src_loc)) { - source_location_entry->set_function_name(std::get<1>(data.src_loc)); - } - if (std::get<2>(data.src_loc)) { - source_location_entry->set_line_number(std::get<2>(data.src_loc)); - } - } else { - DLOG(FATAL) << "Unhandled type: " << static_cast<int>(type); - } - } - pending_interning_updates_.clear(); -} - void TrackEventThreadLocalEventSink::UpdateDuration( const unsigned char* category_group_enabled, const char* name, @@ -860,14 +761,9 @@ void TrackEventThreadLocalEventSink::DoResetIncrementalState( base::trace_event::TraceEvent* trace_event, bool explicit_timestamp) { - interned_event_categories_.ResetEmittedState(); - interned_event_names_.ResetEmittedState(); - interned_source_locations_.ResetEmittedState(); - interned_log_message_bodies_.ResetEmittedState(); extra_emitted_track_descriptor_uuids_.clear(); incremental_state_.interned_data_indices = {}; incremental_state_.seen_tracks.clear(); - copied_strings_.clear(); // Reset the reference timestamp. base::TimeTicks timestamp; @@ -958,11 +854,4 @@ last_timestamp_ = timestamp; } -const char* TrackEventThreadLocalEventSink::CopyString(const std::string& str) { - auto it = copied_strings_.insert(str); - // Adding new elements into the std::set does not invalidate the old - // iterators, so |c_str| will remain the same. - return it.first->c_str(); -} - } // namespace tracing
diff --git a/services/tracing/public/cpp/perfetto/track_event_thread_local_event_sink.h b/services/tracing/public/cpp/perfetto/track_event_thread_local_event_sink.h index b9cbb5269..25ba727 100644 --- a/services/tracing/public/cpp/perfetto/track_event_thread_local_event_sink.h +++ b/services/tracing/public/cpp/perfetto/track_event_thread_local_event_sink.h
@@ -35,30 +35,6 @@ public base::trace_event::TrackEventHandle::CompletionListener, public base::trace_event::TracePacketHandle::CompletionListener { public: - enum class IndexType { - kName = 0, - kCategory = 1, - kSourceLocation = 3, - kLogMessage = 4 - }; - // IndexData is a temporary storage location for passing long updates to the - // interning indexes. Everything stored in it must have a lifetime that is - // at least as long as AddTraceEvent. - // - // In most cases this is easy since the provided |trace_event| is the source - // of most const char*s. - // - // This is important because when TRACE_EVENT_FLAG_COPY is set, the - // InternedIndexesUpdates are cleared within the same call to AddTraceEvent(). - union IndexData { - const char* str_piece; - std::tuple<const char*, const char*, int> src_loc; - explicit IndexData(const char* str); - explicit IndexData(std::tuple<const char*, const char*, int>&& src); - }; - using InternedIndexesUpdates = - std::vector<std::tuple<IndexType, IndexData, InterningIndexEntry>>; - TrackEventThreadLocalEventSink( std::unique_ptr<perfetto::TraceWriter> trace_writer, uint32_t session_id, @@ -118,11 +94,6 @@ protozero::MessageHandle<perfetto::protos::pbzero::TracePacket>* trace_packet); - // Given a list of updates to the indexes will fill in |interned_data| to - // reflect them. - void EmitStoredInternedData( - perfetto::protos::pbzero::InternedData* interned_data); - void EmitThreadTrackDescriptor(base::trace_event::TraceEvent* trace_event, base::TimeTicks timestamp, const char* maybe_new_name = nullptr); @@ -145,32 +116,12 @@ // is valid until |copied_strings_| are cleared. const char* CopyString(const std::string& value); - // TODO(eseckler): Make it possible to register new indexes for use from - // TRACE_EVENT macros. - InterningIndex<TypeList<const char*>, SizeList<128>> - interned_event_categories_; - InterningIndex<TypeList<const char*, std::string>, SizeList<512, 64>> - interned_event_names_; - InterningIndex<TypeList<std::tuple<const char*, const char*, int>>, - SizeList<512>> - interned_source_locations_; - InterningIndex<TypeList<std::string>, SizeList<128>> - interned_log_message_bodies_; - InternedIndexesUpdates pending_interning_updates_; - - // Master copies of the interned strings. Stored here to ensure that a stable - // const char* pointer is available to be used in TrackEventInternedDataIndex. - // TODO(altimin): Stop interning copied strings and write them into the proto - // directly. - std::set<std::string> copied_strings_; - // Write interned data (both from |incremental_state_| and interned indexes // into the given packet. void WriteInternedDataIntoTracePacket( perfetto::protos::pbzero::TracePacket* packet); // Track event interning state. - // TODO(skyostil): Merge the above interning indices into this. perfetto::internal::TrackEventIncrementalState incremental_state_; std::vector<uint64_t> extra_emitted_track_descriptor_uuids_;
diff --git a/services/tracing/public/cpp/stack_sampling/tracing_sampler_profiler.cc b/services/tracing/public/cpp/stack_sampling/tracing_sampler_profiler.cc index 4db5290..5b6f05c 100644 --- a/services/tracing/public/cpp/stack_sampling/tracing_sampler_profiler.cc +++ b/services/tracing/public/cpp/stack_sampling/tracing_sampler_profiler.cc
@@ -606,14 +606,12 @@ module_id->resize(32, '0'); } - if (module_id->size() >= 32) { - *module_id = - base::StrCat({module_id->substr(6, 2), module_id->substr(4, 2), - module_id->substr(2, 2), module_id->substr(0, 2), - module_id->substr(10, 2), module_id->substr(8, 2), - module_id->substr(14, 2), module_id->substr(12, 2), - module_id->substr(16, 16), "0"}); - } + *module_id = + base::StrCat({module_id->substr(6, 2), module_id->substr(4, 2), + module_id->substr(2, 2), module_id->substr(0, 2), + module_id->substr(10, 2), module_id->substr(8, 2), + module_id->substr(14, 2), module_id->substr(12, 2), + module_id->substr(16, 16), "0"}); #endif }
diff --git a/skia/config/SkUserConfig.h b/skia/config/SkUserConfig.h index 39478f04..ec33324 100644 --- a/skia/config/SkUserConfig.h +++ b/skia/config/SkUserConfig.h
@@ -207,6 +207,8 @@ #define SK_SUPPORT_LEGACY_AAA_CHOICE +#define SK_DISABLE_ATLAS_PATH_RENDERER_WITH_COVERAGE_AA + #define SK_SUPPORT_LEGACY_DRAWLOOPER #define SK_SUPPORT_LEGACY_RUNTIME_EFFECTS
diff --git a/testing/buildbot/chromium.android.fyi.json b/testing/buildbot/chromium.android.fyi.json index 58052747..84393dc 100644 --- a/testing/buildbot/chromium.android.fyi.json +++ b/testing/buildbot/chromium.android.fyi.json
@@ -25,7 +25,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -86,7 +87,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -155,7 +157,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -226,7 +229,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -295,7 +299,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -359,7 +364,8 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -420,7 +426,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -489,7 +496,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -558,7 +566,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -627,7 +636,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -696,7 +706,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -767,7 +778,8 @@ }, "name": "webkit_unit_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -837,7 +849,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -906,7 +919,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -975,7 +989,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -1045,7 +1060,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -1114,7 +1130,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -1184,7 +1201,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -1253,7 +1271,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -1332,7 +1351,8 @@ "--buildbucket-id=${buildbucket_build_id}" ], "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -1411,7 +1431,8 @@ "--buildbucket-id=${buildbucket_build_id}" ], "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -1480,7 +1501,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -1551,7 +1573,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -1622,7 +1645,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -1694,7 +1718,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -1764,7 +1789,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -1835,7 +1861,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -1904,7 +1931,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -1973,7 +2001,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -2042,7 +2071,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -2111,7 +2141,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -2180,7 +2211,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -2249,7 +2281,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -2318,7 +2351,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -2390,7 +2424,8 @@ }, "name": "gl_tests_validating", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -2459,7 +2494,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -2528,7 +2564,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -2597,7 +2634,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -2666,7 +2704,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -2735,7 +2774,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -2804,7 +2844,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -2873,7 +2914,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -2942,7 +2984,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -3011,7 +3054,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -3081,7 +3125,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -3150,7 +3195,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -3219,7 +3265,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -3288,7 +3335,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -3357,7 +3405,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -3426,7 +3475,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -3495,7 +3545,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -3565,7 +3616,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -3635,7 +3687,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -3705,7 +3758,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -3774,7 +3828,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -3843,7 +3898,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -3912,7 +3968,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -3981,7 +4038,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -4050,7 +4108,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -4119,7 +4178,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -4188,7 +4248,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -4257,7 +4318,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -4327,7 +4389,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -4397,7 +4460,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -4467,7 +4531,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -4537,7 +4602,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -4606,7 +4672,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -4676,7 +4743,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -4746,7 +4814,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -4815,7 +4884,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -4888,7 +4958,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -4957,7 +5028,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -5027,7 +5099,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -5096,7 +5169,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -5160,7 +5234,8 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -5220,7 +5295,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -5289,7 +5365,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -5358,7 +5435,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -5427,7 +5505,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -5496,7 +5575,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -5566,7 +5646,8 @@ }, "name": "webkit_unit_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -5636,7 +5717,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -5705,7 +5787,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -5774,7 +5857,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -5844,7 +5928,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -5913,7 +5998,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -5982,7 +6068,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -6051,7 +6138,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -6127,7 +6215,8 @@ "--buildbucket-id=${buildbucket_build_id}" ], "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -6205,7 +6294,8 @@ "--buildbucket-id=${buildbucket_build_id}" ], "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -6274,7 +6364,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -6343,7 +6434,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -6413,7 +6505,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -6483,7 +6576,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -6553,7 +6647,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -6623,7 +6718,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -6692,7 +6788,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -6761,7 +6858,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -6830,7 +6928,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -6899,7 +6998,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -6968,7 +7068,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -7037,7 +7138,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -7106,7 +7208,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -7177,7 +7280,8 @@ }, "name": "gl_tests_validating", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -7246,7 +7350,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -7315,7 +7420,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -7384,7 +7490,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -7453,7 +7560,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -7522,7 +7630,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -7591,7 +7700,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -7660,7 +7770,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -7729,7 +7840,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -7798,7 +7910,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -7867,7 +7980,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -7936,7 +8050,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -8005,7 +8120,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -8074,7 +8190,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -8143,7 +8260,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -8212,7 +8330,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -8281,7 +8400,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -8350,7 +8470,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -8420,7 +8541,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -8489,7 +8611,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -8558,7 +8681,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -8627,7 +8751,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -8696,7 +8821,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -8765,7 +8891,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -8834,7 +8961,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -8903,7 +9031,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -8972,7 +9101,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -9041,7 +9171,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -9110,7 +9241,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -9179,7 +9311,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -9249,7 +9382,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -9318,7 +9452,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -9387,7 +9522,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -9456,7 +9592,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -9525,7 +9662,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -9594,7 +9732,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -9663,7 +9802,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -9732,7 +9872,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -9807,7 +9948,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -9877,7 +10019,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -9946,7 +10089,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -10015,7 +10159,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -10088,7 +10233,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -10147,7 +10293,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -10206,7 +10353,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -10265,7 +10413,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -10324,7 +10473,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -10383,7 +10533,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -10430,7 +10581,8 @@ "args": [ "--gs-results-bucket=chromium-result-details", "--recover-devices", - "--avd-config=../../tools/android/avd/proto/generic_android29.textpb" + "--avd-config=../../tools/android/avd/proto/generic_android29.textpb", + "--test-launcher-filter-file=../../testing/buildbot/filters/android.emulator_10.net_unittests.filter" ], "merge": { "args": [ @@ -10442,7 +10594,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -10500,7 +10653,8 @@ }, "name": "system_webview_wpt", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "results_handler": "layout tests", "swarming": { @@ -10538,7 +10692,8 @@ }, "name": "weblayer_shell_wpt", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "results_handler": "layout tests", "swarming": { @@ -10583,7 +10738,8 @@ }, "name": "chrome_public_wpt", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "results_handler": "layout tests", "swarming": { @@ -10651,7 +10807,8 @@ }, "name": "weblayer_instrumentation_test_apk_ToT_Tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -10731,7 +10888,8 @@ }, "name": "weblayer_skew_tests_with_client_from_91", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -10817,7 +10975,8 @@ }, "name": "weblayer_skew_tests_with_client_from_92", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -10903,7 +11062,8 @@ }, "name": "weblayer_skew_tests_with_client_from_93", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -10989,7 +11149,8 @@ }, "name": "weblayer_skew_tests_with_impl_from_91", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -11075,7 +11236,8 @@ }, "name": "weblayer_skew_tests_with_impl_from_92", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -11161,7 +11323,8 @@ }, "name": "weblayer_skew_tests_with_impl_from_93", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -11237,7 +11400,8 @@ }, "name": "weblayer_shell_wpt", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "results_handler": "layout tests", "swarming": { @@ -11302,7 +11466,8 @@ }, "name": "weblayer_shell_wpt", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "results_handler": "layout tests", "swarming": { @@ -11366,7 +11531,8 @@ }, "name": "system_webview_wpt", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "results_handler": "layout tests", "swarming": {
diff --git a/testing/buildbot/chromium.android.json b/testing/buildbot/chromium.android.json index 7f31004..e769bdc 100644 --- a/testing/buildbot/chromium.android.json +++ b/testing/buildbot/chromium.android.json
@@ -23,7 +23,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -74,7 +75,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -133,7 +135,8 @@ }, "name": "webview_cts_tests_no_field_trial", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -190,7 +193,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -243,7 +247,8 @@ }, "name": "webview_ui_test_app_test_apk_no_field_trial", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -298,7 +303,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -348,7 +354,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -406,7 +413,8 @@ }, "name": "webview_cts_tests_no_field_trial", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -462,7 +470,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -514,7 +523,8 @@ }, "name": "webview_ui_test_app_test_apk_no_field_trial", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -568,7 +578,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -619,7 +630,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -670,7 +682,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -729,7 +742,8 @@ }, "name": "webview_cts_tests_no_field_trial", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -786,7 +800,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -840,7 +855,8 @@ }, "name": "webview_instrumentation_test_apk_no_field_trial", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -892,7 +908,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -945,7 +962,8 @@ }, "name": "webview_ui_test_app_test_apk_no_field_trial", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -1000,7 +1018,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -1051,7 +1070,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -1102,7 +1122,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -1161,7 +1182,8 @@ }, "name": "webview_cts_tests_no_field_trial", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -1218,7 +1240,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -1272,7 +1295,8 @@ }, "name": "webview_instrumentation_test_apk_no_field_trial", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -1324,7 +1348,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -1377,7 +1402,8 @@ }, "name": "webview_ui_test_app_test_apk_no_field_trial", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -1432,7 +1458,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -1482,7 +1509,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -1532,7 +1560,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -1590,7 +1619,8 @@ }, "name": "webview_cts_tests_no_field_trial", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -1646,7 +1676,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -1699,7 +1730,8 @@ }, "name": "webview_instrumentation_test_apk_no_field_trial", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -1750,7 +1782,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -1802,7 +1835,8 @@ }, "name": "webview_ui_test_app_test_apk_no_field_trial", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -2033,7 +2067,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -2083,7 +2118,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -2134,7 +2170,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -2184,7 +2221,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -2229,7 +2267,8 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -2270,7 +2309,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -2320,7 +2360,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -2370,7 +2411,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -2420,7 +2462,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -2470,7 +2513,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -2521,7 +2565,8 @@ }, "name": "webkit_unit_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -2572,7 +2617,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -2622,7 +2668,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -2672,7 +2719,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -2723,7 +2771,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -2773,7 +2822,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -2823,7 +2873,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -2873,7 +2924,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -2923,7 +2975,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -2973,7 +3026,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -3029,7 +3083,8 @@ "--buildbucket-id=${buildbucket_build_id}" ], "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -3080,7 +3135,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -3130,7 +3186,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -3181,7 +3238,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -3232,7 +3290,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -3283,7 +3342,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -3334,7 +3394,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -3384,7 +3445,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -3434,7 +3496,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -3484,7 +3547,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -3534,7 +3598,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -3584,7 +3649,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -3634,7 +3700,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -3684,7 +3751,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -3736,7 +3804,8 @@ }, "name": "gl_tests_validating", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -3786,7 +3855,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -3836,7 +3906,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -3886,7 +3957,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -3936,7 +4008,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -3986,7 +4059,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -4036,7 +4110,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -4086,7 +4161,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -4136,7 +4212,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -4186,7 +4263,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -4236,7 +4314,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -4286,7 +4365,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -4336,7 +4416,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -4386,7 +4467,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -4436,7 +4518,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -4488,7 +4571,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -4538,7 +4622,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -4588,7 +4673,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -4638,7 +4724,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -4688,7 +4775,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -4738,7 +4826,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -4788,7 +4877,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -4838,7 +4928,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -4888,7 +4979,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -4938,7 +5030,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -4989,7 +5082,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -5039,7 +5133,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -5089,7 +5184,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -5139,7 +5235,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -5189,7 +5286,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -5239,7 +5337,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -5289,7 +5388,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -5339,7 +5439,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -5389,7 +5490,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -5439,7 +5541,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -5489,7 +5592,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -5540,7 +5644,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -5590,7 +5695,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -5644,7 +5750,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -5694,7 +5801,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -5745,7 +5853,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -5795,7 +5904,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -5840,7 +5950,8 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -5881,7 +5992,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -5931,7 +6043,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -5981,7 +6094,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -6031,7 +6145,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -6081,7 +6196,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -6132,7 +6248,8 @@ }, "name": "webkit_unit_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -6183,7 +6300,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -6233,7 +6351,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -6283,7 +6402,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -6334,7 +6454,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -6384,7 +6505,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -6434,7 +6556,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -6484,7 +6607,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -6534,7 +6658,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -6584,7 +6709,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -6640,7 +6766,8 @@ "--buildbucket-id=${buildbucket_build_id}" ], "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -6691,7 +6818,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -6741,7 +6869,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -6793,7 +6922,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -6844,7 +6974,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -6895,7 +7026,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -6946,7 +7078,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -6996,7 +7129,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -7046,7 +7180,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -7096,7 +7231,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -7146,7 +7282,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -7196,7 +7333,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -7246,7 +7384,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -7296,7 +7435,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -7348,7 +7488,8 @@ }, "name": "gl_tests_validating", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -7398,7 +7539,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -7448,7 +7590,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -7498,7 +7641,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -7548,7 +7692,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -7598,7 +7743,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -7648,7 +7794,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -7698,7 +7845,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -7748,7 +7896,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -7798,7 +7947,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -7848,7 +7998,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -7898,7 +8049,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -7948,7 +8100,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -7998,7 +8151,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -8048,7 +8202,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -8099,7 +8254,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -8149,7 +8305,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -8199,7 +8356,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -8249,7 +8407,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -8299,7 +8458,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -8349,7 +8509,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -8399,7 +8560,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -8449,7 +8611,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -8499,7 +8662,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -8549,7 +8713,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -8600,7 +8765,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -8650,7 +8816,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -8700,7 +8867,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -8750,7 +8918,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -8800,7 +8969,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -8850,7 +9020,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -8900,7 +9071,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -8950,7 +9122,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -9000,7 +9173,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -9050,7 +9224,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -9100,7 +9275,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -9151,7 +9327,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -9201,7 +9378,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -9255,7 +9433,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -9304,7 +9483,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -9354,7 +9534,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -9403,7 +9584,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -9447,7 +9629,8 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -9487,7 +9670,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -9536,7 +9720,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -9585,7 +9770,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -9634,7 +9820,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -9683,7 +9870,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -9733,7 +9921,8 @@ }, "name": "webkit_unit_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -9784,7 +9973,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -9833,7 +10023,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -9882,7 +10073,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -9932,7 +10124,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -9981,7 +10174,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -10030,7 +10224,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -10079,7 +10274,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -10128,7 +10324,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -10177,7 +10374,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -10232,7 +10430,8 @@ "--buildbucket-id=${buildbucket_build_id}" ], "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -10284,7 +10483,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -10334,7 +10534,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -10383,7 +10584,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -10433,7 +10635,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -10483,7 +10686,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -10533,7 +10737,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -10583,7 +10788,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -10632,7 +10838,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -10681,7 +10888,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -10730,7 +10938,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -10779,7 +10988,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -10828,7 +11038,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -10877,7 +11088,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -10926,7 +11138,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -10977,7 +11190,8 @@ }, "name": "gl_tests_validating", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -11026,7 +11240,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -11075,7 +11290,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -11124,7 +11340,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -11173,7 +11390,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -11222,7 +11440,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -11271,7 +11490,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -11320,7 +11540,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -11369,7 +11590,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -11418,7 +11640,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -11467,7 +11690,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -11516,7 +11740,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -11565,7 +11790,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -11614,7 +11840,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -11663,7 +11890,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -11713,7 +11941,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -11762,7 +11991,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -11811,7 +12041,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -11860,7 +12091,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -11909,7 +12141,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -11958,7 +12191,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -12007,7 +12241,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -12056,7 +12291,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -12105,7 +12341,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -12154,7 +12391,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -12204,7 +12442,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -12253,7 +12492,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -12302,7 +12542,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -12351,7 +12592,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -12400,7 +12642,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -12449,7 +12692,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -12498,7 +12742,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -12547,7 +12792,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -12596,7 +12842,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -12645,7 +12892,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -12694,7 +12942,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -12744,7 +12993,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -12793,7 +13043,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -12846,7 +13097,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -12896,7 +13148,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -12947,7 +13200,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -12997,7 +13251,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -13042,7 +13297,8 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -13083,7 +13339,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -13133,7 +13390,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -13183,7 +13441,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -13233,7 +13492,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -13283,7 +13543,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -13334,7 +13595,8 @@ }, "name": "webkit_unit_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -13385,7 +13647,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -13435,7 +13698,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -13485,7 +13749,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -13536,7 +13801,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -13586,7 +13852,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -13636,7 +13903,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -13686,7 +13954,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -13736,7 +14005,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -13786,7 +14056,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -13844,7 +14115,8 @@ "--buildbucket-id=${buildbucket_build_id}" ], "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -13895,7 +14167,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -13945,7 +14218,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -13997,7 +14271,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -14048,7 +14323,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -14099,7 +14375,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -14150,7 +14427,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -14200,7 +14478,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -14250,7 +14529,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -14300,7 +14580,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -14350,7 +14631,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -14400,7 +14682,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -14450,7 +14733,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -14500,7 +14784,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -14552,7 +14837,8 @@ }, "name": "gl_tests_validating", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -14602,7 +14888,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -14652,7 +14939,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -14702,7 +14990,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -14752,7 +15041,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -14802,7 +15092,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -14852,7 +15143,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -14902,7 +15194,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -14952,7 +15245,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -15002,7 +15296,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -15052,7 +15347,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -15102,7 +15398,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -15152,7 +15449,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -15202,7 +15500,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -15252,7 +15551,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -15303,7 +15603,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -15353,7 +15654,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -15403,7 +15705,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -15453,7 +15756,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -15503,7 +15807,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -15553,7 +15858,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -15603,7 +15909,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -15653,7 +15960,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -15703,7 +16011,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -15753,7 +16062,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -15804,7 +16114,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -15854,7 +16165,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -15904,7 +16216,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -15954,7 +16267,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -16004,7 +16318,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -16054,7 +16369,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -16104,7 +16420,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -16154,7 +16471,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -16204,7 +16522,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -16254,7 +16573,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -16304,7 +16624,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -16355,7 +16676,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -16405,7 +16727,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -16459,7 +16782,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -16503,7 +16827,8 @@ }, "name": "chrome_public_test_vr_apk-ddready-cardboard", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -16555,7 +16880,8 @@ "--buildbucket-id=${buildbucket_build_id}" ], "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -16603,7 +16929,8 @@ }, "name": "chrome_public_test_vr_apk-ddready-don-enabled", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -16643,7 +16970,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -16683,7 +17011,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -16723,7 +17052,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -16764,7 +17094,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -16804,7 +17135,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -16848,7 +17180,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -16904,7 +17237,8 @@ "--buildbucket-id=${buildbucket_build_id}" ], "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -16958,7 +17292,8 @@ }, "name": "chrome_public_test_vr_apk-ddready-cardboard", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -17019,7 +17354,8 @@ "--buildbucket-id=${buildbucket_build_id}" ], "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -17076,7 +17412,8 @@ }, "name": "chrome_public_test_vr_apk-ddready-don-enabled", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -17125,7 +17462,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -17174,7 +17512,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -17223,7 +17562,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -17273,7 +17613,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -17322,7 +17663,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -17372,7 +17714,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -17431,7 +17774,8 @@ }, "name": "chrome_public_test_vr_apk-ddready-cardboard", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -17493,7 +17837,8 @@ "--buildbucket-id=${buildbucket_build_id}" ], "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -17551,7 +17896,8 @@ }, "name": "chrome_public_test_vr_apk-ddready-don-enabled", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -17603,7 +17949,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -17653,7 +18000,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -17703,7 +18051,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -17753,7 +18102,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -17810,7 +18160,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -17859,7 +18210,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -17909,7 +18261,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -17958,7 +18311,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -18002,7 +18356,8 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -18042,7 +18397,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -18091,7 +18447,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -18140,7 +18497,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -18189,7 +18547,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -18238,7 +18597,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -18288,7 +18648,8 @@ }, "name": "webkit_unit_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -18338,7 +18699,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -18387,7 +18749,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -18436,7 +18799,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -18486,7 +18850,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -18535,7 +18900,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -18584,7 +18950,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -18633,7 +19000,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -18682,7 +19050,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -18731,7 +19100,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -18786,7 +19156,8 @@ "--buildbucket-id=${buildbucket_build_id}" ], "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -18838,7 +19209,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -18888,7 +19260,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -18937,7 +19310,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -18987,7 +19361,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -19037,7 +19412,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -19087,7 +19463,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -19137,7 +19514,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -19186,7 +19564,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -19235,7 +19614,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -19284,7 +19664,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -19333,7 +19714,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -19382,7 +19764,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -19431,7 +19814,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -19480,7 +19864,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -19531,7 +19916,8 @@ }, "name": "gl_tests_validating", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -19580,7 +19966,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -19629,7 +20016,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -19678,7 +20066,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -19727,7 +20116,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -19776,7 +20166,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -19825,7 +20216,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -19874,7 +20266,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -19923,7 +20316,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -19972,7 +20366,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -20021,7 +20416,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -20070,7 +20466,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -20119,7 +20516,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -20168,7 +20566,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -20217,7 +20616,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -20267,7 +20667,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -20316,7 +20717,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -20365,7 +20767,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -20414,7 +20817,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -20463,7 +20867,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -20512,7 +20917,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -20561,7 +20967,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -20610,7 +21017,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -20659,7 +21067,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -20708,7 +21117,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -20758,7 +21168,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -20807,7 +21218,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -20856,7 +21268,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -20905,7 +21318,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -20954,7 +21368,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -21003,7 +21418,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -21052,7 +21468,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -21101,7 +21518,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -21150,7 +21568,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -21199,7 +21618,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -21248,7 +21668,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -21298,7 +21719,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -21347,7 +21769,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -21391,7 +21814,8 @@ }, "name": "monochrome_public_apk_checker", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -21417,7 +21841,8 @@ { "name": "android_webview_junit_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": {}, "test": "android_webview_junit_tests", @@ -21426,7 +21851,8 @@ { "name": "base_junit_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": {}, "test": "base_junit_tests", @@ -21435,7 +21861,8 @@ { "name": "chrome_java_test_pagecontroller_junit_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": {}, "test": "chrome_java_test_pagecontroller_junit_tests", @@ -21444,7 +21871,8 @@ { "name": "chrome_junit_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": {}, "test": "chrome_junit_tests", @@ -21453,7 +21881,8 @@ { "name": "components_junit_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": {}, "test": "components_junit_tests", @@ -21462,7 +21891,8 @@ { "name": "content_junit_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": {}, "test": "content_junit_tests", @@ -21471,7 +21901,8 @@ { "name": "device_junit_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": {}, "test": "device_junit_tests", @@ -21480,7 +21911,8 @@ { "name": "junit_unit_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": {}, "test": "junit_unit_tests", @@ -21489,7 +21921,8 @@ { "name": "keyboard_accessory_junit_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": {}, "test": "keyboard_accessory_junit_tests", @@ -21498,7 +21931,8 @@ { "name": "media_base_junit_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": {}, "test": "media_base_junit_tests", @@ -21507,7 +21941,8 @@ { "name": "module_installer_junit_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": {}, "test": "module_installer_junit_tests", @@ -21516,7 +21951,8 @@ { "name": "net_junit_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": {}, "test": "net_junit_tests", @@ -21525,7 +21961,8 @@ { "name": "paint_preview_junit_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": {}, "test": "paint_preview_junit_tests", @@ -21534,7 +21971,8 @@ { "name": "password_check_junit_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": {}, "test": "password_check_junit_tests", @@ -21543,7 +21981,8 @@ { "name": "password_manager_junit_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": {}, "test": "password_manager_junit_tests", @@ -21552,7 +21991,8 @@ { "name": "services_junit_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": {}, "test": "services_junit_tests", @@ -21561,7 +22001,8 @@ { "name": "touch_to_fill_junit_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": {}, "test": "touch_to_fill_junit_tests", @@ -21570,7 +22011,8 @@ { "name": "ui_junit_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": {}, "test": "ui_junit_tests", @@ -21579,7 +22021,8 @@ { "name": "webapk_client_junit_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": {}, "test": "webapk_client_junit_tests", @@ -21588,7 +22031,8 @@ { "name": "webapk_shell_apk_h2o_junit_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": {}, "test": "webapk_shell_apk_h2o_junit_tests", @@ -21597,7 +22041,8 @@ { "name": "webapk_shell_apk_junit_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": {}, "test": "webapk_shell_apk_junit_tests", @@ -21607,7 +22052,8 @@ "experiment_percentage": 100, "name": "weblayer_junit_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": {}, "test": "weblayer_junit_tests", @@ -21634,7 +22080,8 @@ }, "name": "bf_cache_android_browsertests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -21691,7 +22138,8 @@ "--buildbucket-id=${buildbucket_build_id}" ], "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -21743,7 +22191,8 @@ }, "name": "bf_cache_content_browsertests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -21795,7 +22244,8 @@ }, "name": "bf_cache_content_shell_test_apk", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -21847,7 +22297,8 @@ }, "name": "bf_cache_content_unittests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -21900,7 +22351,8 @@ }, "name": "bf_cache_unit_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -21958,7 +22410,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -22007,7 +22460,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -22056,7 +22510,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -22105,7 +22560,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -22154,7 +22610,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -22203,7 +22660,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -22252,7 +22710,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -22296,7 +22755,8 @@ }, "name": "cronet_sizes", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -22388,7 +22848,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -22437,7 +22898,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -22486,7 +22948,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -22535,7 +22998,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -22584,7 +23048,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -22633,7 +23098,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -22682,7 +23148,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -22736,7 +23203,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -22785,7 +23253,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -22834,7 +23303,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -22883,7 +23353,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -22932,7 +23403,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -22981,7 +23453,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -23030,7 +23503,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -23182,7 +23656,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -23231,7 +23706,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -23280,7 +23756,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -23329,7 +23806,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -23378,7 +23856,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -23427,7 +23906,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -23476,7 +23956,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -23534,7 +24015,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -23583,7 +24065,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -23632,7 +24115,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -23681,7 +24165,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -23730,7 +24215,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -23779,7 +24265,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -23828,7 +24315,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -23882,7 +24370,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -23931,7 +24420,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -23980,7 +24470,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -24029,7 +24520,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -24078,7 +24570,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -24127,7 +24620,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -24176,7 +24670,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -24329,7 +24824,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -24385,7 +24881,8 @@ "--buildbucket-id=${buildbucket_build_id}" ], "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -24435,7 +24932,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -24493,7 +24991,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -24537,7 +25036,8 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -24577,7 +25077,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -24626,7 +25127,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -24675,7 +25177,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -24724,7 +25227,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -24773,7 +25277,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -24822,7 +25327,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -24871,7 +25377,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -24920,7 +25427,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -24970,7 +25478,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -25019,7 +25528,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -25068,7 +25578,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -25117,7 +25628,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -25166,7 +25678,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -25215,7 +25728,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -25265,7 +25779,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -25315,7 +25830,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -25365,7 +25881,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -25414,7 +25931,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -25463,7 +25981,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -25512,7 +26031,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -25561,7 +26081,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -25610,7 +26131,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -25659,7 +26181,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -25708,7 +26231,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -25759,7 +26283,8 @@ }, "name": "gl_tests_validating", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -25808,7 +26333,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -25857,7 +26383,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -25906,7 +26433,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -25955,7 +26483,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -26004,7 +26533,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -26053,7 +26583,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -26102,7 +26633,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -26151,7 +26683,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -26200,7 +26733,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -26249,7 +26783,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -26298,7 +26833,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -26347,7 +26883,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -26396,7 +26933,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -26445,7 +26983,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -26496,7 +27035,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -26545,7 +27085,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -26594,7 +27135,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -26643,7 +27185,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -26692,7 +27235,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -26741,7 +27285,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -26790,7 +27335,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -26839,7 +27385,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -26888,7 +27435,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -26937,7 +27485,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -26987,7 +27536,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -27036,7 +27586,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -27085,7 +27636,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -27134,7 +27686,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -27183,7 +27736,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -27232,7 +27786,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -27271,7 +27826,8 @@ { "name": "incremental_javac_junit_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": {}, "test": "incremental_javac_junit_tests", @@ -27301,7 +27857,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -27351,7 +27908,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -27401,7 +27959,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -27446,7 +28005,8 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -27487,7 +28047,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -27537,7 +28098,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -27587,7 +28149,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -27637,7 +28200,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -27687,7 +28251,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -27737,7 +28302,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -27787,7 +28353,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -27837,7 +28404,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -27888,7 +28456,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -27938,7 +28507,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -27988,7 +28558,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -28040,7 +28611,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -28091,7 +28663,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -28141,7 +28714,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -28192,7 +28766,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -28243,7 +28818,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -28293,7 +28869,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -28343,7 +28920,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -28393,7 +28971,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -28443,7 +29022,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -28493,7 +29073,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -28543,7 +29124,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -28593,7 +29175,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -28645,7 +29228,8 @@ }, "name": "gl_tests_validating", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -28695,7 +29279,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -28745,7 +29330,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -28795,7 +29381,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -28845,7 +29432,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -28895,7 +29483,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -28945,7 +29534,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -28995,7 +29585,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -29045,7 +29636,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -29095,7 +29687,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -29145,7 +29738,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -29195,7 +29789,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -29245,7 +29840,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -29295,7 +29891,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -29345,7 +29942,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -29396,7 +29994,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -29446,7 +30045,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -29496,7 +30096,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -29546,7 +30147,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -29596,7 +30198,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -29646,7 +30249,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -29696,7 +30300,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -29746,7 +30351,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -29796,7 +30402,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -29846,7 +30453,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -29896,7 +30504,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -29946,7 +30555,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -29996,7 +30606,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -30046,7 +30657,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -30096,7 +30708,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -30146,7 +30759,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -30196,7 +30810,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -30246,7 +30861,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -30296,7 +30912,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -30346,7 +30963,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -30396,7 +31014,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -30446,7 +31065,8 @@ }, "name": "components_perftests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -30481,7 +31101,8 @@ }, "name": "content_shell_crash_test", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -30520,7 +31141,8 @@ }, "name": "telemetry_chromium_minidump_unittests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -30549,7 +31171,8 @@ "isolate_profile_data": true, "name": "android_webview_junit_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": {}, "test": "android_webview_junit_tests", @@ -30559,7 +31182,8 @@ "isolate_profile_data": true, "name": "base_junit_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": {}, "test": "base_junit_tests", @@ -30569,7 +31193,8 @@ "isolate_profile_data": true, "name": "chrome_java_test_pagecontroller_junit_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": {}, "test": "chrome_java_test_pagecontroller_junit_tests", @@ -30579,7 +31204,8 @@ "isolate_profile_data": true, "name": "chrome_junit_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": {}, "test": "chrome_junit_tests", @@ -30589,7 +31215,8 @@ "isolate_profile_data": true, "name": "components_junit_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": {}, "test": "components_junit_tests", @@ -30599,7 +31226,8 @@ "isolate_profile_data": true, "name": "content_junit_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": {}, "test": "content_junit_tests", @@ -30609,7 +31237,8 @@ "isolate_profile_data": true, "name": "device_junit_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": {}, "test": "device_junit_tests", @@ -30619,7 +31248,8 @@ "isolate_profile_data": true, "name": "junit_unit_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": {}, "test": "junit_unit_tests", @@ -30629,7 +31259,8 @@ "isolate_profile_data": true, "name": "keyboard_accessory_junit_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": {}, "test": "keyboard_accessory_junit_tests", @@ -30639,7 +31270,8 @@ "isolate_profile_data": true, "name": "media_base_junit_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": {}, "test": "media_base_junit_tests", @@ -30649,7 +31281,8 @@ "isolate_profile_data": true, "name": "module_installer_junit_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": {}, "test": "module_installer_junit_tests", @@ -30659,7 +31292,8 @@ "isolate_profile_data": true, "name": "net_junit_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": {}, "test": "net_junit_tests", @@ -30669,7 +31303,8 @@ "isolate_profile_data": true, "name": "paint_preview_junit_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": {}, "test": "paint_preview_junit_tests", @@ -30679,7 +31314,8 @@ "isolate_profile_data": true, "name": "password_check_junit_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": {}, "test": "password_check_junit_tests", @@ -30689,7 +31325,8 @@ "isolate_profile_data": true, "name": "password_manager_junit_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": {}, "test": "password_manager_junit_tests", @@ -30699,7 +31336,8 @@ "isolate_profile_data": true, "name": "services_junit_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": {}, "test": "services_junit_tests", @@ -30709,7 +31347,8 @@ "isolate_profile_data": true, "name": "touch_to_fill_junit_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": {}, "test": "touch_to_fill_junit_tests", @@ -30719,7 +31358,8 @@ "isolate_profile_data": true, "name": "ui_junit_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": {}, "test": "ui_junit_tests", @@ -30729,7 +31369,8 @@ "isolate_profile_data": true, "name": "webapk_client_junit_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": {}, "test": "webapk_client_junit_tests", @@ -30739,7 +31380,8 @@ "isolate_profile_data": true, "name": "webapk_shell_apk_h2o_junit_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": {}, "test": "webapk_shell_apk_h2o_junit_tests", @@ -30749,7 +31391,8 @@ "isolate_profile_data": true, "name": "webapk_shell_apk_junit_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": {}, "test": "webapk_shell_apk_junit_tests", @@ -30760,7 +31403,8 @@ "isolate_profile_data": true, "name": "weblayer_junit_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": {}, "test": "weblayer_junit_tests", @@ -30787,7 +31431,8 @@ }, "name": "webkit_unit_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -30863,7 +31508,8 @@ "--buildbucket-id=${buildbucket_build_id}" ], "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -30932,7 +31578,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -31001,7 +31648,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -31070,7 +31718,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -31147,7 +31796,8 @@ "--buildbucket-id=${buildbucket_build_id}" ], "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -31217,7 +31867,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -31284,7 +31935,8 @@ }, "name": "monochrome_public_apk_checker", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -31346,7 +31998,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -31415,7 +32068,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -31485,7 +32139,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -31554,7 +32209,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -31618,7 +32274,8 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -31678,7 +32335,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -31747,7 +32405,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -31816,7 +32475,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -31885,7 +32545,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -31954,7 +32615,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -32023,7 +32685,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -32092,7 +32755,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -32161,7 +32825,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -32231,7 +32896,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -32300,7 +32966,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -32370,7 +33037,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -32439,7 +33107,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -32508,7 +33177,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -32579,7 +33249,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -32650,7 +33321,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -32720,7 +33392,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -32790,7 +33463,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -32859,7 +33533,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -32928,7 +33603,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -32997,7 +33673,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -33066,7 +33743,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -33135,7 +33813,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -33204,7 +33883,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -33273,7 +33953,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -33345,7 +34026,8 @@ }, "name": "gl_tests_validating", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -33414,7 +34096,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -33483,7 +34166,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -33552,7 +34236,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -33621,7 +34306,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -33690,7 +34376,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -33759,7 +34446,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -33828,7 +34516,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -33897,7 +34586,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -33966,7 +34656,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -34036,7 +34727,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -34105,7 +34797,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -34174,7 +34867,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -34243,7 +34937,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -34313,7 +35008,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -34384,7 +35080,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -34453,7 +35150,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -34522,7 +35220,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -34591,7 +35290,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -34660,7 +35360,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -34729,7 +35430,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -34798,7 +35500,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -34867,7 +35570,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -34936,7 +35640,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -35005,7 +35710,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -35075,7 +35781,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -35144,7 +35851,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -35213,7 +35921,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -35282,7 +35991,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -35351,7 +36061,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -35421,7 +36132,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -35490,7 +36202,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -35559,7 +36272,8 @@ }, "name": "components_perftests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -35624,7 +36338,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -35673,7 +36388,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -35723,7 +36439,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -35772,7 +36489,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -35816,7 +36534,8 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -35856,7 +36575,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -35905,7 +36625,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -35954,7 +36675,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -36003,7 +36725,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -36053,7 +36776,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -36103,7 +36827,8 @@ }, "name": "webkit_unit_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -36153,7 +36878,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -36202,7 +36928,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -36251,7 +36978,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -36301,7 +37029,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -36350,7 +37079,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -36399,7 +37129,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -36448,7 +37179,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -36497,7 +37229,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -36546,7 +37279,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -36601,7 +37335,8 @@ "--buildbucket-id=${buildbucket_build_id}" ], "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -36655,7 +37390,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -36705,7 +37441,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -36754,7 +37491,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -36805,7 +37543,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -36855,7 +37594,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -36905,7 +37645,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -36955,7 +37696,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -37004,7 +37746,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -37053,7 +37796,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -37102,7 +37846,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -37151,7 +37896,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -37200,7 +37946,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -37249,7 +37996,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -37298,7 +38046,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -37349,7 +38098,8 @@ }, "name": "gl_tests_validating", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -37398,7 +38148,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -37447,7 +38198,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -37496,7 +38248,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -37545,7 +38298,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -37594,7 +38348,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -37643,7 +38398,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -37692,7 +38448,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -37741,7 +38498,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -37790,7 +38548,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -37839,7 +38598,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -37888,7 +38648,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -37937,7 +38698,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -37986,7 +38748,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -38035,7 +38798,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -38084,7 +38848,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -38133,7 +38898,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -38182,7 +38948,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -38232,7 +38999,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -38282,7 +39050,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -38331,7 +39100,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -38380,7 +39150,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -38429,7 +39200,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -38478,7 +39250,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -38527,7 +39300,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -38576,7 +39350,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -38625,7 +39400,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -38674,7 +39450,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -38723,7 +39500,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -38773,7 +39551,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -38822,7 +39601,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -38871,7 +39651,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -38920,7 +39701,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -38969,7 +39751,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -39018,7 +39801,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -39067,7 +39851,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -39116,7 +39901,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -39165,7 +39951,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -39214,7 +40001,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -39263,7 +40051,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -39313,7 +40102,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -39362,7 +40152,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -39411,7 +40202,8 @@ }, "name": "components_perftests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -39445,7 +40237,8 @@ }, "name": "content_shell_crash_test", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -39483,7 +40276,8 @@ }, "name": "telemetry_chromium_minidump_unittests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -39521,7 +40315,8 @@ }, "name": "telemetry_monochrome_minidump_unittests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -39567,7 +40362,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -39618,7 +40414,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -39670,7 +40467,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -39721,7 +40519,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -39767,7 +40566,8 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -39809,7 +40609,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -39860,7 +40661,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -39911,7 +40713,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -39962,7 +40765,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -40013,7 +40817,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -40065,7 +40870,8 @@ }, "name": "webkit_unit_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -40117,7 +40923,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -40168,7 +40975,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -40219,7 +41027,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -40271,7 +41080,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -40322,7 +41132,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -40373,7 +41184,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -40424,7 +41236,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -40475,7 +41288,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -40527,7 +41341,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -40579,7 +41394,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -40631,7 +41447,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -40682,7 +41499,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -40733,7 +41551,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -40784,7 +41603,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -40835,7 +41655,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -40886,7 +41707,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -40937,7 +41759,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -40988,7 +41811,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -41041,7 +41865,8 @@ }, "name": "gl_tests_validating", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -41092,7 +41917,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -41143,7 +41969,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -41194,7 +42021,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -41245,7 +42073,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -41296,7 +42125,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -41347,7 +42177,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -41398,7 +42229,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -41449,7 +42281,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -41500,7 +42333,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -41551,7 +42385,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -41602,7 +42437,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -41653,7 +42489,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -41704,7 +42541,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -41756,7 +42594,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -41807,7 +42646,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -41858,7 +42698,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -41909,7 +42750,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -41960,7 +42802,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -42011,7 +42854,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -42062,7 +42906,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -42113,7 +42958,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -42164,7 +43010,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -42215,7 +43062,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -42267,7 +43115,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -42318,7 +43167,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -42369,7 +43219,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -42420,7 +43271,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -42471,7 +43323,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -42522,7 +43375,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -42573,7 +43427,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -42627,7 +43482,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -42677,7 +43533,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -42727,7 +43584,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -42781,7 +43639,8 @@ }, "name": "chrome_public_test_vr_apk-ddready-cardboard", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -42843,7 +43702,8 @@ "--buildbucket-id=${buildbucket_build_id}" ], "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -42901,7 +43761,8 @@ }, "name": "chrome_public_test_vr_apk-ddready-don-enabled", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -42951,7 +43812,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -43001,7 +43863,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -43051,7 +43914,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -43103,7 +43967,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -43153,7 +44018,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -43203,7 +44069,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -43263,7 +44130,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -43314,7 +44182,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -43364,7 +44233,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -43414,7 +44284,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -43464,7 +44335,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -43522,7 +44394,8 @@ "--buildbucket-id=${buildbucket_build_id}" ], "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -43573,7 +44446,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -43624,7 +44498,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -43674,7 +44549,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -43724,7 +44600,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -43774,7 +44651,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -43824,7 +44702,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -43874,7 +44753,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -43924,7 +44804,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -43974,7 +44855,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -44030,7 +44912,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -44081,7 +44964,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -44136,7 +45020,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -44206,7 +45091,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -44277,7 +45163,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -44346,7 +45233,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -44410,7 +45298,8 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -44470,7 +45359,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -44539,7 +45429,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -44608,7 +45499,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -44677,7 +45569,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -44746,7 +45639,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -44816,7 +45710,8 @@ }, "name": "webkit_unit_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -44886,7 +45781,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -44955,7 +45851,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -45024,7 +45921,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -45094,7 +45992,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -45163,7 +46062,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -45233,7 +46133,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -45302,7 +46203,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -45371,7 +46273,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -45440,7 +46343,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -45517,7 +46421,8 @@ "--buildbucket-id=${buildbucket_build_id}" ], "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -45596,7 +46501,8 @@ "--buildbucket-id=${buildbucket_build_id}" ], "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -45665,7 +46571,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -45734,7 +46641,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -45805,7 +46713,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -45876,7 +46785,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -45946,7 +46856,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -46016,7 +46927,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -46085,7 +46997,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -46154,7 +47067,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -46223,7 +47137,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -46292,7 +47207,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -46361,7 +47277,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -46430,7 +47347,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -46499,7 +47417,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -46571,7 +47490,8 @@ }, "name": "gl_tests_validating", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -46640,7 +47560,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -46709,7 +47630,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -46778,7 +47700,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -46847,7 +47770,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -46916,7 +47840,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -46985,7 +47910,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -47054,7 +47980,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -47123,7 +48050,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -47192,7 +48120,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -47262,7 +48191,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -47331,7 +48261,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -47400,7 +48331,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -47469,7 +48401,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -47538,7 +48471,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -47607,7 +48541,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -47676,7 +48611,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -47746,7 +48682,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -47817,7 +48754,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -47886,7 +48824,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -47955,7 +48894,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -48024,7 +48964,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -48093,7 +49034,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -48162,7 +49104,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -48231,7 +49174,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -48300,7 +49244,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -48369,7 +49314,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -48438,7 +49384,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -48507,7 +49454,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -48577,7 +49525,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -48647,7 +49596,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -48716,7 +49666,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -48785,7 +49736,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -48854,7 +49806,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -48923,7 +49876,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -48992,7 +49946,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -49061,7 +50016,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -49137,7 +50093,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -49207,7 +50164,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -49276,7 +50234,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -49345,7 +50304,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -49430,7 +50390,8 @@ }, "name": "weblayer_skew_tests_with_chrome_with_client_from_91", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -49517,7 +50478,8 @@ }, "name": "weblayer_skew_tests_with_chrome_with_client_from_92", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -49604,7 +50566,8 @@ }, "name": "weblayer_skew_tests_with_chrome_with_client_from_93", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -49691,7 +50654,8 @@ }, "name": "weblayer_skew_tests_with_chrome_with_impl_from_91", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -49778,7 +50742,8 @@ }, "name": "weblayer_skew_tests_with_chrome_with_impl_from_92", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -49865,7 +50830,8 @@ }, "name": "weblayer_skew_tests_with_chrome_with_impl_from_93", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -49945,7 +50911,8 @@ }, "name": "weblayer_instrumentation_test_apk_ToT_Tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -50025,7 +50992,8 @@ }, "name": "weblayer_skew_tests_with_client_from_91", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -50111,7 +51079,8 @@ }, "name": "weblayer_skew_tests_with_client_from_92", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -50197,7 +51166,8 @@ }, "name": "weblayer_skew_tests_with_client_from_93", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -50283,7 +51253,8 @@ }, "name": "weblayer_skew_tests_with_impl_from_91", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -50369,7 +51340,8 @@ }, "name": "weblayer_skew_tests_with_impl_from_92", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -50455,7 +51427,8 @@ }, "name": "weblayer_skew_tests_with_impl_from_93", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -50535,7 +51508,8 @@ }, "name": "weblayer_instrumentation_test_apk_ToT_Tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -50615,7 +51589,8 @@ }, "name": "weblayer_skew_tests_with_client_from_91", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -50701,7 +51676,8 @@ }, "name": "weblayer_skew_tests_with_client_from_92", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -50787,7 +51763,8 @@ }, "name": "weblayer_skew_tests_with_client_from_93", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -50873,7 +51850,8 @@ }, "name": "weblayer_skew_tests_with_impl_from_91", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -50959,7 +51937,8 @@ }, "name": "weblayer_skew_tests_with_impl_from_92", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -51045,7 +52024,8 @@ }, "name": "weblayer_skew_tests_with_impl_from_93", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true,
diff --git a/testing/buildbot/chromium.angle.json b/testing/buildbot/chromium.angle.json index a52e759..94fa110e 100644 --- a/testing/buildbot/chromium.angle.json +++ b/testing/buildbot/chromium.angle.json
@@ -16,7 +16,8 @@ }, "name": "angle_deqp_egl_gles_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -55,7 +56,8 @@ }, "name": "angle_deqp_gles2_gles_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -94,7 +96,8 @@ }, "name": "angle_deqp_gles3_gles_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -133,7 +136,8 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -170,7 +174,8 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -218,7 +223,8 @@ }, "name": "webgl_conformance_gles_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -278,7 +284,8 @@ }, "name": "angle_end2end_tests_iPhone X 14.4", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -336,7 +343,8 @@ }, "name": "angle_white_box_tests_iPhone X 14.4", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -452,7 +460,8 @@ }, "name": "info_collection_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -486,7 +495,8 @@ }, "name": "trace_test", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -522,7 +532,8 @@ }, "name": "webgl2_conformance_gl_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -558,7 +569,8 @@ }, "name": "webgl_conformance_gl_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -655,7 +667,8 @@ }, "name": "info_collection_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -689,7 +702,8 @@ }, "name": "trace_test", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -725,7 +739,8 @@ }, "name": "webgl2_conformance_gl_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -761,7 +776,8 @@ }, "name": "webgl_conformance_gl_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -2012,7 +2028,8 @@ }, "name": "info_collection_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -2051,7 +2068,8 @@ }, "name": "webgl2_conformance_gl_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -2090,7 +2108,8 @@ }, "name": "webgl_conformance_gl_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -2129,7 +2148,8 @@ }, "name": "webgl_conformance_metal_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -2168,7 +2188,8 @@ }, "name": "webgl_conformance_swangle_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -2206,7 +2227,8 @@ }, "name": "webgl_conformance_validating_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -2307,7 +2329,8 @@ }, "name": "info_collection_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -2344,7 +2367,8 @@ }, "name": "webgl2_conformance_gl_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -2381,7 +2405,8 @@ }, "name": "webgl_conformance_gl_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -2418,7 +2443,8 @@ }, "name": "webgl_conformance_metal_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -2455,7 +2481,8 @@ }, "name": "webgl_conformance_swangle_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -2491,7 +2518,8 @@ }, "name": "webgl_conformance_validating_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -2824,7 +2852,8 @@ }, "name": "info_collection_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -2860,7 +2889,8 @@ }, "name": "webgl2_conformance_d3d11_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -2896,7 +2926,8 @@ }, "name": "webgl_conformance_d3d11_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -2932,7 +2963,8 @@ }, "name": "webgl_conformance_d3d9_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -2968,7 +3000,8 @@ }, "name": "webgl_conformance_gl_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -3003,7 +3036,8 @@ }, "name": "webgl_conformance_vulkan_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -3046,7 +3080,8 @@ }, "name": "info_collection_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -3082,7 +3117,8 @@ }, "name": "webgl2_conformance_d3d11_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -3118,7 +3154,8 @@ }, "name": "webgl_conformance_d3d11_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -3154,7 +3191,8 @@ }, "name": "webgl_conformance_d3d9_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -3190,7 +3228,8 @@ }, "name": "webgl_conformance_gl_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -3225,7 +3264,8 @@ }, "name": "webgl_conformance_vulkan_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -4088,7 +4128,8 @@ }, "name": "webgl_conformance_d3d11_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -4124,7 +4165,8 @@ }, "name": "webgl_conformance_d3d9_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -4159,7 +4201,8 @@ }, "name": "webgl_conformance_vulkan_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": {
diff --git a/testing/buildbot/chromium.chromiumos.json b/testing/buildbot/chromium.chromiumos.json index 0159eec..f6ecf54 100644 --- a/testing/buildbot/chromium.chromiumos.json +++ b/testing/buildbot/chromium.chromiumos.json
@@ -1087,7 +1087,8 @@ }, "name": "webgl_conformance_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": {
diff --git a/testing/buildbot/chromium.clang.json b/testing/buildbot/chromium.clang.json index a2c3081..37710e5a 100644 --- a/testing/buildbot/chromium.clang.json +++ b/testing/buildbot/chromium.clang.json
@@ -3209,6 +3209,11 @@ "test_id_prefix": "ninja://chrome/test:unit_tests/" }, { + "args": [ + "--test-launcher-timeout=90000", + "--ui-test-action-max-timeout=45000", + "--ui-test-action-timeout=40000" + ], "merge": { "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" @@ -4938,6 +4943,11 @@ "test_id_prefix": "ninja://chrome/test:unit_tests/" }, { + "args": [ + "--test-launcher-timeout=90000", + "--ui-test-action-max-timeout=45000", + "--ui-test-action-timeout=40000" + ], "merge": { "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" @@ -5175,7 +5185,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -5224,7 +5235,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -5274,7 +5286,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -5323,7 +5336,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -5367,7 +5381,8 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -5407,7 +5422,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -5456,7 +5472,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -5505,7 +5522,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -5554,7 +5572,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -5603,7 +5622,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -5653,7 +5673,8 @@ }, "name": "webkit_unit_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -5703,7 +5724,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -5752,7 +5774,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -5801,7 +5824,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -5851,7 +5875,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -5900,7 +5925,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -5949,7 +5975,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -5998,7 +6025,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -6053,7 +6081,8 @@ "--buildbucket-id=${buildbucket_build_id}" ], "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -6103,7 +6132,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -6152,7 +6182,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -6202,7 +6233,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -6252,7 +6284,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -6302,7 +6335,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -6352,7 +6386,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -6401,7 +6436,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -6450,7 +6486,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -6499,7 +6536,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -6548,7 +6586,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -6597,7 +6636,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -6646,7 +6686,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -6695,7 +6736,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -6746,7 +6788,8 @@ }, "name": "gl_tests_validating", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -6795,7 +6838,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -6844,7 +6888,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -6893,7 +6938,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -6942,7 +6988,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -6991,7 +7038,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -7040,7 +7088,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -7089,7 +7138,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -7138,7 +7188,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -7187,7 +7238,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -7236,7 +7288,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -7285,7 +7338,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -7334,7 +7388,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -7383,7 +7438,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -7432,7 +7488,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -7482,7 +7539,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -7531,7 +7589,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -7580,7 +7639,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -7629,7 +7689,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -7678,7 +7739,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -7727,7 +7789,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -7776,7 +7839,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -7825,7 +7889,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -7874,7 +7939,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -7923,7 +7989,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -7973,7 +8040,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -8022,7 +8090,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -8071,7 +8140,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -8120,7 +8190,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -8169,7 +8240,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -8218,7 +8290,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -8267,7 +8340,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -8313,7 +8387,8 @@ }, "name": "chrome_sizes", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -8342,7 +8417,8 @@ }, "name": "monochrome_public_apk_checker", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -8368,7 +8444,8 @@ { "name": "android_webview_junit_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": {}, "test": "android_webview_junit_tests", @@ -8377,7 +8454,8 @@ { "name": "base_junit_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": {}, "test": "base_junit_tests", @@ -8386,7 +8464,8 @@ { "name": "chrome_java_test_pagecontroller_junit_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": {}, "test": "chrome_java_test_pagecontroller_junit_tests", @@ -8395,7 +8474,8 @@ { "name": "chrome_junit_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": {}, "test": "chrome_junit_tests", @@ -8404,7 +8484,8 @@ { "name": "components_junit_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": {}, "test": "components_junit_tests", @@ -8413,7 +8494,8 @@ { "name": "content_junit_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": {}, "test": "content_junit_tests", @@ -8422,7 +8504,8 @@ { "name": "device_junit_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": {}, "test": "device_junit_tests", @@ -8431,7 +8514,8 @@ { "name": "junit_unit_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": {}, "test": "junit_unit_tests", @@ -8440,7 +8524,8 @@ { "name": "keyboard_accessory_junit_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": {}, "test": "keyboard_accessory_junit_tests", @@ -8449,7 +8534,8 @@ { "name": "media_base_junit_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": {}, "test": "media_base_junit_tests", @@ -8458,7 +8544,8 @@ { "name": "module_installer_junit_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": {}, "test": "module_installer_junit_tests", @@ -8467,7 +8554,8 @@ { "name": "net_junit_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": {}, "test": "net_junit_tests", @@ -8476,7 +8564,8 @@ { "name": "paint_preview_junit_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": {}, "test": "paint_preview_junit_tests", @@ -8485,7 +8574,8 @@ { "name": "password_check_junit_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": {}, "test": "password_check_junit_tests", @@ -8494,7 +8584,8 @@ { "name": "password_manager_junit_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": {}, "test": "password_manager_junit_tests", @@ -8503,7 +8594,8 @@ { "name": "services_junit_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": {}, "test": "services_junit_tests", @@ -8512,7 +8604,8 @@ { "name": "touch_to_fill_junit_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": {}, "test": "touch_to_fill_junit_tests", @@ -8521,7 +8614,8 @@ { "name": "ui_junit_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": {}, "test": "ui_junit_tests", @@ -8530,7 +8624,8 @@ { "name": "webapk_client_junit_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": {}, "test": "webapk_client_junit_tests", @@ -8539,7 +8634,8 @@ { "name": "webapk_shell_apk_h2o_junit_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": {}, "test": "webapk_shell_apk_h2o_junit_tests", @@ -8548,7 +8644,8 @@ { "name": "webapk_shell_apk_junit_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": {}, "test": "webapk_shell_apk_junit_tests", @@ -8558,7 +8655,8 @@ "experiment_percentage": 100, "name": "weblayer_junit_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": {}, "test": "weblayer_junit_tests", @@ -8633,7 +8731,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -8672,7 +8771,8 @@ { "name": "base_junit_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": {}, "test": "base_junit_tests", @@ -10120,7 +10220,8 @@ }, "name": "context_lost_validating_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -10152,7 +10253,8 @@ }, "name": "depth_capture_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -10184,7 +10286,8 @@ }, "name": "gpu_process_launch_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -10216,7 +10319,8 @@ }, "name": "hardware_accelerated_feature_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -10252,7 +10356,8 @@ }, "name": "info_collection_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -10290,7 +10395,8 @@ "--buildbucket-id=${buildbucket_build_id}" ], "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -10322,7 +10428,8 @@ }, "name": "mediapipe_validating_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -10360,7 +10467,8 @@ "--buildbucket-id=${buildbucket_build_id}" ], "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -10392,7 +10500,8 @@ }, "name": "screenshot_sync_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -10424,7 +10533,8 @@ }, "name": "trace_test", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -10456,7 +10566,8 @@ }, "name": "webgl_conformance_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -23787,6 +23898,11 @@ "test_id_prefix": "ninja://chrome/test:unit_tests/" }, { + "args": [ + "--test-launcher-timeout=90000", + "--ui-test-action-max-timeout=45000", + "--ui-test-action-timeout=40000" + ], "merge": { "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" @@ -25843,6 +25959,9 @@ }, { "args": [ + "--test-launcher-timeout=90000", + "--ui-test-action-max-timeout=45000", + "--ui-test-action-timeout=40000", "--test-launcher-print-test-stdio=always" ], "merge": { @@ -27488,6 +27607,11 @@ "test_id_prefix": "ninja://chrome/test:unit_tests/" }, { + "args": [ + "--test-launcher-timeout=90000", + "--ui-test-action-max-timeout=45000", + "--ui-test-action-timeout=40000" + ], "merge": { "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" @@ -29101,6 +29225,11 @@ "test_id_prefix": "ninja://chrome/test:unit_tests/" }, { + "args": [ + "--test-launcher-timeout=90000", + "--ui-test-action-max-timeout=45000", + "--ui-test-action-timeout=40000" + ], "merge": { "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" @@ -30383,6 +30512,11 @@ "test_id_prefix": "ninja://chrome/test:unit_tests/" }, { + "args": [ + "--test-launcher-timeout=90000", + "--ui-test-action-max-timeout=45000", + "--ui-test-action-timeout=40000" + ], "merge": { "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" @@ -31633,6 +31767,11 @@ "test_id_prefix": "ninja://chrome/test:unit_tests/" }, { + "args": [ + "--test-launcher-timeout=90000", + "--ui-test-action-max-timeout=45000", + "--ui-test-action-timeout=40000" + ], "merge": { "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" @@ -33431,6 +33570,11 @@ "test_id_prefix": "ninja://chrome/test:unit_tests/" }, { + "args": [ + "--test-launcher-timeout=90000", + "--ui-test-action-max-timeout=45000", + "--ui-test-action-timeout=40000" + ], "merge": { "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" @@ -35315,6 +35459,11 @@ "test_id_prefix": "ninja://chrome/test:unit_tests/" }, { + "args": [ + "--test-launcher-timeout=90000", + "--ui-test-action-max-timeout=45000", + "--ui-test-action-timeout=40000" + ], "merge": { "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" @@ -37199,6 +37348,11 @@ "test_id_prefix": "ninja://chrome/test:unit_tests/" }, { + "args": [ + "--test-launcher-timeout=90000", + "--ui-test-action-max-timeout=45000", + "--ui-test-action-timeout=40000" + ], "merge": { "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" @@ -39116,6 +39270,11 @@ "test_id_prefix": "ninja://chrome/test:unit_tests/" }, { + "args": [ + "--test-launcher-timeout=90000", + "--ui-test-action-max-timeout=45000", + "--ui-test-action-timeout=40000" + ], "merge": { "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" @@ -40383,6 +40542,11 @@ "test_id_prefix": "ninja://chrome/test:unit_tests/" }, { + "args": [ + "--test-launcher-timeout=90000", + "--ui-test-action-max-timeout=45000", + "--ui-test-action-timeout=40000" + ], "merge": { "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" @@ -42166,6 +42330,11 @@ "test_id_prefix": "ninja://chrome/test:unit_tests/" }, { + "args": [ + "--test-launcher-timeout=90000", + "--ui-test-action-max-timeout=45000", + "--ui-test-action-timeout=40000" + ], "merge": { "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" @@ -44050,6 +44219,11 @@ "test_id_prefix": "ninja://chrome/test:unit_tests/" }, { + "args": [ + "--test-launcher-timeout=90000", + "--ui-test-action-max-timeout=45000", + "--ui-test-action-timeout=40000" + ], "merge": { "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" @@ -44354,7 +44528,8 @@ }, "name": "absl_hardening_tests_iPhone 6s 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -44404,7 +44579,8 @@ }, "name": "base_unittests_iPhone 6s 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -44454,7 +44630,8 @@ }, "name": "boringssl_crypto_tests_iPhone 6s 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -44504,7 +44681,8 @@ }, "name": "boringssl_ssl_tests_iPhone 6s 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -44554,7 +44732,8 @@ }, "name": "components_unittests_iPhone 6s 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -44604,7 +44783,8 @@ }, "name": "crypto_unittests_iPhone 6s 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -44654,7 +44834,8 @@ }, "name": "gfx_unittests_iPhone 6s 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -44704,7 +44885,8 @@ }, "name": "google_apis_unittests_iPhone 6s 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -44754,7 +44936,8 @@ }, "name": "ios_chrome_unittests_iPhone 6s 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -44804,7 +44987,8 @@ }, "name": "ios_net_unittests_iPhone 6s 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -44854,7 +45038,8 @@ }, "name": "ios_web_inttests_iPhone 6s 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -44904,7 +45089,8 @@ }, "name": "ios_web_unittests_iPhone 6s 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -44954,7 +45140,8 @@ }, "name": "ios_web_view_inttests_iPhone 6s 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -45004,7 +45191,8 @@ }, "name": "net_unittests_iPhone 6s 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -45054,7 +45242,8 @@ }, "name": "skia_unittests_iPhone 6s 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -45104,7 +45293,8 @@ }, "name": "sql_unittests_iPhone 6s 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -45154,7 +45344,8 @@ }, "name": "ui_base_unittests_iPhone 6s 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -45204,7 +45395,8 @@ }, "name": "url_unittests_iPhone 6s 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -45274,7 +45466,8 @@ }, "name": "absl_hardening_tests_iPhone 6S 12.3.1", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -45319,7 +45512,8 @@ }, "name": "base_unittests_iPhone 6S 12.3.1", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -45364,7 +45558,8 @@ }, "name": "boringssl_crypto_tests_iPhone 6S 12.3.1", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -45409,7 +45604,8 @@ }, "name": "boringssl_ssl_tests_iPhone 6S 12.3.1", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -45454,7 +45650,8 @@ }, "name": "components_unittests_iPhone 6S 12.3.1", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -45499,7 +45696,8 @@ }, "name": "crypto_unittests_iPhone 6S 12.3.1", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -45544,7 +45742,8 @@ }, "name": "gfx_unittests_iPhone 6S 12.3.1", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -45589,7 +45788,8 @@ }, "name": "google_apis_unittests_iPhone 6S 12.3.1", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -45634,7 +45834,8 @@ }, "name": "ios_chrome_unittests_iPhone 6S 12.3.1", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -45679,7 +45880,8 @@ }, "name": "ios_net_unittests_iPhone 6S 12.3.1", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -45724,7 +45926,8 @@ }, "name": "ios_web_inttests_iPhone 6S 12.3.1", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -45769,7 +45972,8 @@ }, "name": "ios_web_unittests_iPhone 6S 12.3.1", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -45814,7 +46018,8 @@ }, "name": "ios_web_view_inttests_iPhone 6S 12.3.1", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -45859,7 +46064,8 @@ }, "name": "net_unittests_iPhone 6S 12.3.1", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -45904,7 +46110,8 @@ }, "name": "skia_unittests_iPhone 6S 12.3.1", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -45949,7 +46156,8 @@ }, "name": "sql_unittests_iPhone 6S 12.3.1", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -45994,7 +46202,8 @@ }, "name": "ui_base_unittests_iPhone 6S 12.3.1", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -46039,7 +46248,8 @@ }, "name": "url_unittests_iPhone 6S 12.3.1", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -47551,6 +47761,11 @@ "test_id_prefix": "ninja://chrome/test:unit_tests/" }, { + "args": [ + "--test-launcher-timeout=90000", + "--ui-test-action-max-timeout=45000", + "--ui-test-action-timeout=40000" + ], "merge": { "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py"
diff --git a/testing/buildbot/chromium.dawn.json b/testing/buildbot/chromium.dawn.json index 81c771d2..93e39c3 100644 --- a/testing/buildbot/chromium.dawn.json +++ b/testing/buildbot/chromium.dawn.json
@@ -251,8 +251,7 @@ }, { "args": [ - "--jobs=1", - "--order=natural", + "--initialize-webgpu-adapter-at-startup", "--additional-driver-flag=--disable-dawn-features=disallow_unsafe_apis", "--additional-driver-flag=--use-gpu-in-tests", "--additional-driver-flag=--enable-dawn-features=use_tint_generator", @@ -279,14 +278,14 @@ "pool": "chromium.tests.gpu" } ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", + "shards": 4 }, "test_id_prefix": "ninja://:webgpu_blink_web_tests/" }, { "args": [ - "--jobs=1", - "--order=natural", + "--initialize-webgpu-adapter-at-startup", "--additional-driver-flag=--enable-dawn-backend-validation", "--additional-driver-flag=--disable-dawn-features=disallow_unsafe_apis", "--additional-driver-flag=--use-gpu-in-tests", @@ -315,7 +314,8 @@ "pool": "chromium.tests.gpu" } ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", + "shards": 4 }, "test_id_prefix": "ninja://:webgpu_blink_web_tests/" } @@ -569,8 +569,7 @@ }, { "args": [ - "--jobs=1", - "--order=natural", + "--initialize-webgpu-adapter-at-startup", "--additional-driver-flag=--disable-dawn-features=disallow_unsafe_apis", "--additional-driver-flag=--use-gpu-in-tests", "--additional-driver-flag=--enable-dawn-features=use_tint_generator", @@ -597,14 +596,14 @@ "pool": "chromium.tests.gpu" } ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", + "shards": 4 }, "test_id_prefix": "ninja://:webgpu_blink_web_tests/" }, { "args": [ - "--jobs=1", - "--order=natural", + "--initialize-webgpu-adapter-at-startup", "--additional-driver-flag=--enable-dawn-backend-validation", "--additional-driver-flag=--disable-dawn-features=disallow_unsafe_apis", "--additional-driver-flag=--use-gpu-in-tests", @@ -633,7 +632,8 @@ "pool": "chromium.tests.gpu" } ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", + "shards": 4 }, "test_id_prefix": "ninja://:webgpu_blink_web_tests/" } @@ -887,8 +887,7 @@ }, { "args": [ - "--jobs=1", - "--order=natural", + "--initialize-webgpu-adapter-at-startup", "--additional-driver-flag=--disable-dawn-features=disallow_unsafe_apis", "--additional-driver-flag=--use-gpu-in-tests", "--additional-driver-flag=--enable-dawn-features=use_tint_generator", @@ -915,14 +914,14 @@ "pool": "chromium.tests.gpu" } ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", + "shards": 4 }, "test_id_prefix": "ninja://:webgpu_blink_web_tests/" }, { "args": [ - "--jobs=1", - "--order=natural", + "--initialize-webgpu-adapter-at-startup", "--additional-driver-flag=--enable-dawn-backend-validation", "--additional-driver-flag=--disable-dawn-features=disallow_unsafe_apis", "--additional-driver-flag=--use-gpu-in-tests", @@ -951,7 +950,8 @@ "pool": "chromium.tests.gpu" } ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", + "shards": 4 }, "test_id_prefix": "ninja://:webgpu_blink_web_tests/" } @@ -1205,8 +1205,7 @@ }, { "args": [ - "--jobs=1", - "--order=natural", + "--initialize-webgpu-adapter-at-startup", "--additional-driver-flag=--disable-dawn-features=disallow_unsafe_apis", "--additional-driver-flag=--use-gpu-in-tests", "--additional-driver-flag=--enable-dawn-features=use_tint_generator", @@ -1233,14 +1232,14 @@ "pool": "chromium.tests.gpu" } ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", + "shards": 4 }, "test_id_prefix": "ninja://:webgpu_blink_web_tests/" }, { "args": [ - "--jobs=1", - "--order=natural", + "--initialize-webgpu-adapter-at-startup", "--additional-driver-flag=--enable-dawn-backend-validation", "--additional-driver-flag=--disable-dawn-features=disallow_unsafe_apis", "--additional-driver-flag=--use-gpu-in-tests", @@ -1269,7 +1268,8 @@ "pool": "chromium.tests.gpu" } ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", + "shards": 4 }, "test_id_prefix": "ninja://:webgpu_blink_web_tests/" } @@ -1542,8 +1542,7 @@ }, { "args": [ - "--jobs=1", - "--order=natural", + "--initialize-webgpu-adapter-at-startup", "--additional-driver-flag=--disable-dawn-features=disallow_unsafe_apis", "--additional-driver-flag=--use-gpu-in-tests", "--additional-driver-flag=--enable-dawn-features=use_tint_generator", @@ -1572,14 +1571,14 @@ "pool": "chromium.tests.gpu" } ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", + "shards": 4 }, "test_id_prefix": "ninja://:webgpu_blink_web_tests/" }, { "args": [ - "--jobs=1", - "--order=natural", + "--initialize-webgpu-adapter-at-startup", "--additional-driver-flag=--enable-dawn-backend-validation", "--additional-driver-flag=--disable-dawn-features=disallow_unsafe_apis", "--additional-driver-flag=--use-gpu-in-tests", @@ -1610,7 +1609,8 @@ "pool": "chromium.tests.gpu" } ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", + "shards": 4 }, "test_id_prefix": "ninja://:webgpu_blink_web_tests/" } @@ -1863,8 +1863,7 @@ }, { "args": [ - "--jobs=1", - "--order=natural", + "--initialize-webgpu-adapter-at-startup", "--additional-driver-flag=--disable-dawn-features=disallow_unsafe_apis", "--additional-driver-flag=--use-gpu-in-tests", "--additional-driver-flag=--enable-dawn-features=use_tint_generator", @@ -1891,14 +1890,14 @@ "os": "Mac-10.15.7" } ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", + "shards": 4 }, "test_id_prefix": "ninja://:webgpu_blink_web_tests/" }, { "args": [ - "--jobs=1", - "--order=natural", + "--initialize-webgpu-adapter-at-startup", "--additional-driver-flag=--enable-dawn-backend-validation", "--additional-driver-flag=--disable-dawn-features=disallow_unsafe_apis", "--additional-driver-flag=--use-gpu-in-tests", @@ -1927,7 +1926,8 @@ "os": "Mac-10.15.7" } ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", + "shards": 4 }, "test_id_prefix": "ninja://:webgpu_blink_web_tests/" } @@ -2207,8 +2207,7 @@ }, { "args": [ - "--jobs=1", - "--order=natural", + "--initialize-webgpu-adapter-at-startup", "--additional-driver-flag=--disable-dawn-features=disallow_unsafe_apis", "--additional-driver-flag=--use-gpu-in-tests", "--additional-driver-flag=--enable-dawn-features=use_tint_generator", @@ -2238,14 +2237,14 @@ } ], "expiration": 21600, - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", + "shards": 4 }, "test_id_prefix": "ninja://:webgpu_blink_web_tests/" }, { "args": [ - "--jobs=1", - "--order=natural", + "--initialize-webgpu-adapter-at-startup", "--additional-driver-flag=--enable-dawn-backend-validation", "--additional-driver-flag=--disable-dawn-features=disallow_unsafe_apis", "--additional-driver-flag=--use-gpu-in-tests", @@ -2277,7 +2276,8 @@ } ], "expiration": 21600, - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", + "shards": 4 }, "test_id_prefix": "ninja://:webgpu_blink_web_tests/" } @@ -2548,8 +2548,7 @@ }, { "args": [ - "--jobs=1", - "--order=natural", + "--initialize-webgpu-adapter-at-startup", "--additional-driver-flag=--disable-dawn-features=disallow_unsafe_apis", "--additional-driver-flag=--use-gpu-in-tests", "--additional-driver-flag=--enable-dawn-features=use_tint_generator", @@ -2578,14 +2577,14 @@ "pool": "chromium.tests.gpu" } ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", + "shards": 4 }, "test_id_prefix": "ninja://:webgpu_blink_web_tests/" }, { "args": [ - "--jobs=1", - "--order=natural", + "--initialize-webgpu-adapter-at-startup", "--additional-driver-flag=--enable-dawn-backend-validation", "--additional-driver-flag=--disable-dawn-features=disallow_unsafe_apis", "--additional-driver-flag=--use-gpu-in-tests", @@ -2616,7 +2615,8 @@ "pool": "chromium.tests.gpu" } ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", + "shards": 4 }, "test_id_prefix": "ninja://:webgpu_blink_web_tests/" } @@ -2869,8 +2869,7 @@ }, { "args": [ - "--jobs=1", - "--order=natural", + "--initialize-webgpu-adapter-at-startup", "--additional-driver-flag=--disable-dawn-features=disallow_unsafe_apis", "--additional-driver-flag=--use-gpu-in-tests", "--additional-driver-flag=--enable-dawn-features=use_tint_generator", @@ -2897,14 +2896,14 @@ "os": "Mac-10.15.7" } ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", + "shards": 4 }, "test_id_prefix": "ninja://:webgpu_blink_web_tests/" }, { "args": [ - "--jobs=1", - "--order=natural", + "--initialize-webgpu-adapter-at-startup", "--additional-driver-flag=--enable-dawn-backend-validation", "--additional-driver-flag=--disable-dawn-features=disallow_unsafe_apis", "--additional-driver-flag=--use-gpu-in-tests", @@ -2933,7 +2932,8 @@ "os": "Mac-10.15.7" } ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", + "shards": 4 }, "test_id_prefix": "ninja://:webgpu_blink_web_tests/" } @@ -3160,8 +3160,7 @@ }, { "args": [ - "--jobs=1", - "--order=natural", + "--initialize-webgpu-adapter-at-startup", "--additional-driver-flag=--disable-dawn-features=disallow_unsafe_apis", "--additional-driver-flag=--use-gpu-in-tests", "--additional-driver-flag=--enable-dawn-features=use_tint_generator", @@ -3193,7 +3192,8 @@ "pool": "chromium.tests.gpu" } ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", + "shards": 4 }, "test_id_prefix": "ninja://:webgpu_blink_web_tests/" } @@ -3441,8 +3441,7 @@ }, { "args": [ - "--jobs=1", - "--order=natural", + "--initialize-webgpu-adapter-at-startup", "--additional-driver-flag=--disable-dawn-features=disallow_unsafe_apis", "--additional-driver-flag=--use-gpu-in-tests", "--additional-driver-flag=--enable-dawn-features=use_tint_generator", @@ -3468,14 +3467,14 @@ "pool": "chromium.tests.gpu" } ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", + "shards": 4 }, "test_id_prefix": "ninja://:webgpu_blink_web_tests/" }, { "args": [ - "--jobs=1", - "--order=natural", + "--initialize-webgpu-adapter-at-startup", "--additional-driver-flag=--enable-dawn-backend-validation=partial", "--additional-driver-flag=--disable-dawn-features=disallow_unsafe_apis", "--additional-driver-flag=--use-gpu-in-tests", @@ -3503,7 +3502,8 @@ "pool": "chromium.tests.gpu" } ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", + "shards": 4 }, "test_id_prefix": "ninja://:webgpu_blink_web_tests/" } @@ -3749,8 +3749,7 @@ }, { "args": [ - "--jobs=1", - "--order=natural", + "--initialize-webgpu-adapter-at-startup", "--additional-driver-flag=--disable-dawn-features=disallow_unsafe_apis", "--additional-driver-flag=--use-gpu-in-tests", "--additional-driver-flag=--enable-dawn-features=use_tint_generator", @@ -3776,14 +3775,14 @@ "pool": "chromium.tests.gpu" } ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", + "shards": 4 }, "test_id_prefix": "ninja://:webgpu_blink_web_tests/" }, { "args": [ - "--jobs=1", - "--order=natural", + "--initialize-webgpu-adapter-at-startup", "--additional-driver-flag=--enable-dawn-backend-validation=partial", "--additional-driver-flag=--disable-dawn-features=disallow_unsafe_apis", "--additional-driver-flag=--use-gpu-in-tests", @@ -3811,7 +3810,8 @@ "pool": "chromium.tests.gpu" } ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", + "shards": 4 }, "test_id_prefix": "ninja://:webgpu_blink_web_tests/" } @@ -4057,8 +4057,7 @@ }, { "args": [ - "--jobs=1", - "--order=natural", + "--initialize-webgpu-adapter-at-startup", "--additional-driver-flag=--disable-dawn-features=disallow_unsafe_apis", "--additional-driver-flag=--use-gpu-in-tests", "--additional-driver-flag=--enable-dawn-features=use_tint_generator", @@ -4084,14 +4083,14 @@ "pool": "chromium.tests.gpu" } ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", + "shards": 4 }, "test_id_prefix": "ninja://:webgpu_blink_web_tests/" }, { "args": [ - "--jobs=1", - "--order=natural", + "--initialize-webgpu-adapter-at-startup", "--additional-driver-flag=--enable-dawn-backend-validation=partial", "--additional-driver-flag=--disable-dawn-features=disallow_unsafe_apis", "--additional-driver-flag=--use-gpu-in-tests", @@ -4119,7 +4118,8 @@ "pool": "chromium.tests.gpu" } ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", + "shards": 4 }, "test_id_prefix": "ninja://:webgpu_blink_web_tests/" } @@ -4365,8 +4365,7 @@ }, { "args": [ - "--jobs=1", - "--order=natural", + "--initialize-webgpu-adapter-at-startup", "--additional-driver-flag=--disable-dawn-features=disallow_unsafe_apis", "--additional-driver-flag=--use-gpu-in-tests", "--additional-driver-flag=--enable-dawn-features=use_tint_generator", @@ -4392,14 +4391,14 @@ "pool": "chromium.tests.gpu" } ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", + "shards": 4 }, "test_id_prefix": "ninja://:webgpu_blink_web_tests/" }, { "args": [ - "--jobs=1", - "--order=natural", + "--initialize-webgpu-adapter-at-startup", "--additional-driver-flag=--enable-dawn-backend-validation=partial", "--additional-driver-flag=--disable-dawn-features=disallow_unsafe_apis", "--additional-driver-flag=--use-gpu-in-tests", @@ -4427,7 +4426,8 @@ "pool": "chromium.tests.gpu" } ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", + "shards": 4 }, "test_id_prefix": "ninja://:webgpu_blink_web_tests/" } @@ -4675,8 +4675,7 @@ }, { "args": [ - "--jobs=1", - "--order=natural", + "--initialize-webgpu-adapter-at-startup", "--additional-driver-flag=--disable-dawn-features=disallow_unsafe_apis", "--additional-driver-flag=--use-gpu-in-tests", "--additional-driver-flag=--enable-dawn-features=use_tint_generator" @@ -4701,14 +4700,14 @@ "pool": "chromium.tests.gpu" } ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", + "shards": 4 }, "test_id_prefix": "ninja://:webgpu_blink_web_tests/" }, { "args": [ - "--jobs=1", - "--order=natural", + "--initialize-webgpu-adapter-at-startup", "--additional-driver-flag=--enable-dawn-backend-validation=partial", "--additional-driver-flag=--disable-dawn-features=disallow_unsafe_apis", "--additional-driver-flag=--use-gpu-in-tests", @@ -4735,7 +4734,8 @@ "pool": "chromium.tests.gpu" } ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", + "shards": 4 }, "test_id_prefix": "ninja://:webgpu_blink_web_tests/" } @@ -4981,8 +4981,7 @@ }, { "args": [ - "--jobs=1", - "--order=natural", + "--initialize-webgpu-adapter-at-startup", "--additional-driver-flag=--disable-dawn-features=disallow_unsafe_apis", "--additional-driver-flag=--use-gpu-in-tests", "--additional-driver-flag=--enable-dawn-features=use_tint_generator" @@ -5007,14 +5006,14 @@ "pool": "chromium.tests.gpu" } ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", + "shards": 4 }, "test_id_prefix": "ninja://:webgpu_blink_web_tests/" }, { "args": [ - "--jobs=1", - "--order=natural", + "--initialize-webgpu-adapter-at-startup", "--additional-driver-flag=--enable-dawn-backend-validation=partial", "--additional-driver-flag=--disable-dawn-features=disallow_unsafe_apis", "--additional-driver-flag=--use-gpu-in-tests", @@ -5041,7 +5040,8 @@ "pool": "chromium.tests.gpu" } ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", + "shards": 4 }, "test_id_prefix": "ninja://:webgpu_blink_web_tests/" } @@ -5287,8 +5287,7 @@ }, { "args": [ - "--jobs=1", - "--order=natural", + "--initialize-webgpu-adapter-at-startup", "--additional-driver-flag=--disable-dawn-features=disallow_unsafe_apis", "--additional-driver-flag=--use-gpu-in-tests", "--additional-driver-flag=--enable-dawn-features=use_tint_generator" @@ -5313,14 +5312,14 @@ "pool": "chromium.tests.gpu" } ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", + "shards": 4 }, "test_id_prefix": "ninja://:webgpu_blink_web_tests/" }, { "args": [ - "--jobs=1", - "--order=natural", + "--initialize-webgpu-adapter-at-startup", "--additional-driver-flag=--enable-dawn-backend-validation=partial", "--additional-driver-flag=--disable-dawn-features=disallow_unsafe_apis", "--additional-driver-flag=--use-gpu-in-tests", @@ -5347,7 +5346,8 @@ "pool": "chromium.tests.gpu" } ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", + "shards": 4 }, "test_id_prefix": "ninja://:webgpu_blink_web_tests/" } @@ -5593,8 +5593,7 @@ }, { "args": [ - "--jobs=1", - "--order=natural", + "--initialize-webgpu-adapter-at-startup", "--additional-driver-flag=--disable-dawn-features=disallow_unsafe_apis", "--additional-driver-flag=--use-gpu-in-tests", "--additional-driver-flag=--enable-dawn-features=use_tint_generator" @@ -5619,14 +5618,14 @@ "pool": "chromium.tests.gpu" } ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", + "shards": 4 }, "test_id_prefix": "ninja://:webgpu_blink_web_tests/" }, { "args": [ - "--jobs=1", - "--order=natural", + "--initialize-webgpu-adapter-at-startup", "--additional-driver-flag=--enable-dawn-backend-validation=partial", "--additional-driver-flag=--disable-dawn-features=disallow_unsafe_apis", "--additional-driver-flag=--use-gpu-in-tests", @@ -5653,7 +5652,8 @@ "pool": "chromium.tests.gpu" } ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", + "shards": 4 }, "test_id_prefix": "ninja://:webgpu_blink_web_tests/" }
diff --git a/testing/buildbot/chromium.dev.json b/testing/buildbot/chromium.dev.json index f95e1c5..2da8f7c 100644 --- a/testing/buildbot/chromium.dev.json +++ b/testing/buildbot/chromium.dev.json
@@ -18,7 +18,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -68,7 +69,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -118,7 +120,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -168,7 +171,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -222,7 +226,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -272,7 +277,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -322,7 +328,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -372,7 +379,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true,
diff --git a/testing/buildbot/chromium.fyi.json b/testing/buildbot/chromium.fyi.json index 961df19..90b8b169 100644 --- a/testing/buildbot/chromium.fyi.json +++ b/testing/buildbot/chromium.fyi.json
@@ -200,7 +200,8 @@ }, "name": "site_per_process_android_browsertests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -232,7 +233,8 @@ "--buildbucket-id=${buildbucket_build_id}" ], "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -259,7 +261,8 @@ }, "name": "site_per_process_components_browsertests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -285,7 +288,8 @@ }, "name": "site_per_process_components_unittests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -313,7 +317,8 @@ }, "name": "site_per_process_content_browsertests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -340,7 +345,8 @@ }, "name": "site_per_process_content_shell_test_apk", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -367,7 +373,8 @@ }, "name": "site_per_process_content_unittests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -393,7 +400,8 @@ }, "name": "site_per_process_unit_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -468,7 +476,8 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -495,7 +504,8 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -515,7 +525,8 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -1619,6 +1630,11 @@ "test_id_prefix": "ninja://chrome/test:unit_tests/" }, { + "args": [ + "--test-launcher-timeout=90000", + "--ui-test-action-max-timeout=45000", + "--ui-test-action-timeout=40000" + ], "merge": { "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" @@ -3541,6 +3557,11 @@ "test_id_prefix": "ninja://chrome/test:unit_tests/" }, { + "args": [ + "--test-launcher-timeout=90000", + "--ui-test-action-max-timeout=45000", + "--ui-test-action-timeout=40000" + ], "isolate_profile_data": true, "merge": { "args": [], @@ -4156,7 +4177,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -4206,7 +4228,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -4257,7 +4280,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -4307,7 +4331,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -4352,7 +4377,8 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -4393,7 +4419,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -4443,7 +4470,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -4493,7 +4521,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -4543,7 +4572,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -4593,7 +4623,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -4644,7 +4675,8 @@ }, "name": "webkit_unit_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -4695,7 +4727,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -4745,7 +4778,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -4795,7 +4829,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -4846,7 +4881,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -4896,7 +4932,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -4946,7 +4983,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -4996,7 +5034,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -5052,7 +5091,8 @@ "--buildbucket-id=${buildbucket_build_id}" ], "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -5105,7 +5145,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -5156,7 +5197,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -5206,7 +5248,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -5257,7 +5300,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -5308,7 +5352,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -5359,7 +5404,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -5410,7 +5456,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -5460,7 +5507,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -5510,7 +5558,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -5560,7 +5609,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -5610,7 +5660,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -5660,7 +5711,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -5710,7 +5762,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -5760,7 +5813,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -5812,7 +5866,8 @@ }, "name": "gl_tests_validating", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -5862,7 +5917,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -5912,7 +5968,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -5962,7 +6019,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -6012,7 +6070,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -6062,7 +6121,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -6112,7 +6172,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -6162,7 +6223,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -6212,7 +6274,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -6262,7 +6325,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -6312,7 +6376,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -6362,7 +6427,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -6412,7 +6478,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -6462,7 +6529,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -6512,7 +6580,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -6563,7 +6632,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -6613,7 +6683,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -6663,7 +6734,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -6713,7 +6785,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -6763,7 +6836,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -6813,7 +6887,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -6863,7 +6938,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -6913,7 +6989,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -6963,7 +7040,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -7013,7 +7091,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -7063,7 +7142,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -7114,7 +7194,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -7164,7 +7245,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -7214,7 +7296,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -7264,7 +7347,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -7314,7 +7398,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -7364,7 +7449,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -7415,7 +7501,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -7465,7 +7552,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -7519,7 +7607,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -7569,7 +7658,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -7620,7 +7710,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -7670,7 +7761,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -7715,7 +7807,8 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -7756,7 +7849,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -7806,7 +7900,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -7856,7 +7951,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -7906,7 +8002,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -7956,7 +8053,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -8007,7 +8105,8 @@ }, "name": "webkit_unit_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -8058,7 +8157,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -8108,7 +8208,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -8158,7 +8259,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -8209,7 +8311,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -8259,7 +8362,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -8309,7 +8413,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -8359,7 +8464,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -8415,7 +8521,8 @@ "--buildbucket-id=${buildbucket_build_id}" ], "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -8468,7 +8575,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -8519,7 +8627,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -8569,7 +8678,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -8620,7 +8730,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -8671,7 +8782,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -8722,7 +8834,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -8773,7 +8886,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -8823,7 +8937,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -8873,7 +8988,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -8923,7 +9039,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -8973,7 +9090,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -9023,7 +9141,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -9073,7 +9192,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -9123,7 +9243,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -9175,7 +9296,8 @@ }, "name": "gl_tests_validating", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -9225,7 +9347,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -9275,7 +9398,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -9325,7 +9449,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -9375,7 +9500,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -9425,7 +9551,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -9475,7 +9602,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -9525,7 +9653,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -9575,7 +9704,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -9625,7 +9755,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -9675,7 +9806,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -9725,7 +9857,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -9775,7 +9908,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -9825,7 +9959,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -9875,7 +10010,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -9926,7 +10062,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -9976,7 +10113,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -10026,7 +10164,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -10076,7 +10215,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -10126,7 +10266,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -10176,7 +10317,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -10226,7 +10368,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -10276,7 +10419,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -10326,7 +10470,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -10376,7 +10521,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -10426,7 +10572,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -10477,7 +10624,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -10527,7 +10675,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -10577,7 +10726,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -10627,7 +10777,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -10677,7 +10828,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -10727,7 +10879,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -10778,7 +10931,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -10828,7 +10982,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -10883,7 +11038,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -10933,7 +11089,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -10984,7 +11141,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -11034,7 +11192,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -11079,7 +11238,8 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -11120,7 +11280,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -11170,7 +11331,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -11220,7 +11382,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -11270,7 +11433,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -11320,7 +11484,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -11371,7 +11536,8 @@ }, "name": "webkit_unit_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -11422,7 +11588,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -11472,7 +11639,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -11522,7 +11690,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -11573,7 +11742,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -11623,7 +11793,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -11673,7 +11844,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -11723,7 +11895,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -11773,7 +11946,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -11823,7 +11997,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -11879,7 +12054,8 @@ "--buildbucket-id=${buildbucket_build_id}" ], "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -11932,7 +12108,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -11983,7 +12160,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -12033,7 +12211,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -12084,7 +12263,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -12135,7 +12315,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -12186,7 +12367,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -12237,7 +12419,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -12287,7 +12470,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -12337,7 +12521,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -12387,7 +12572,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -12437,7 +12623,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -12487,7 +12674,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -12537,7 +12725,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -12587,7 +12776,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -12639,7 +12829,8 @@ }, "name": "gl_tests_validating", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -12689,7 +12880,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -12739,7 +12931,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -12789,7 +12982,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -12839,7 +13033,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -12889,7 +13084,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -12939,7 +13135,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -12989,7 +13186,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -13039,7 +13237,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -13089,7 +13288,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -13139,7 +13339,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -13189,7 +13390,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -13239,7 +13441,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -13289,7 +13492,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -13339,7 +13543,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -13390,7 +13595,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -13440,7 +13646,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -13490,7 +13697,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -13540,7 +13748,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -13590,7 +13799,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -13640,7 +13850,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -13690,7 +13901,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -13740,7 +13952,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -13790,7 +14003,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -13840,7 +14054,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -13891,7 +14106,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -13941,7 +14157,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -13991,7 +14208,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -14041,7 +14259,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -14091,7 +14310,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -14141,7 +14361,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -14191,7 +14412,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -14241,7 +14463,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -14291,7 +14514,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -14341,7 +14565,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -14391,7 +14616,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -14447,7 +14673,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -14498,7 +14725,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -14548,7 +14776,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -14598,7 +14827,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -14638,7 +14868,8 @@ "isolate_profile_data": true, "name": "android_webview_junit_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": {}, "test": "android_webview_junit_tests", @@ -14648,7 +14879,8 @@ "isolate_profile_data": true, "name": "base_junit_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": {}, "test": "base_junit_tests", @@ -14658,7 +14890,8 @@ "isolate_profile_data": true, "name": "chrome_java_test_pagecontroller_junit_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": {}, "test": "chrome_java_test_pagecontroller_junit_tests", @@ -14668,7 +14901,8 @@ "isolate_profile_data": true, "name": "chrome_junit_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": {}, "test": "chrome_junit_tests", @@ -14678,7 +14912,8 @@ "isolate_profile_data": true, "name": "components_junit_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": {}, "test": "components_junit_tests", @@ -14688,7 +14923,8 @@ "isolate_profile_data": true, "name": "content_junit_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": {}, "test": "content_junit_tests", @@ -14698,7 +14934,8 @@ "isolate_profile_data": true, "name": "device_junit_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": {}, "test": "device_junit_tests", @@ -14708,7 +14945,8 @@ "isolate_profile_data": true, "name": "junit_unit_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": {}, "test": "junit_unit_tests", @@ -14718,7 +14956,8 @@ "isolate_profile_data": true, "name": "keyboard_accessory_junit_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": {}, "test": "keyboard_accessory_junit_tests", @@ -14728,7 +14967,8 @@ "isolate_profile_data": true, "name": "media_base_junit_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": {}, "test": "media_base_junit_tests", @@ -14738,7 +14978,8 @@ "isolate_profile_data": true, "name": "module_installer_junit_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": {}, "test": "module_installer_junit_tests", @@ -14748,7 +14989,8 @@ "isolate_profile_data": true, "name": "net_junit_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": {}, "test": "net_junit_tests", @@ -14758,7 +15000,8 @@ "isolate_profile_data": true, "name": "paint_preview_junit_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": {}, "test": "paint_preview_junit_tests", @@ -14768,7 +15011,8 @@ "isolate_profile_data": true, "name": "password_check_junit_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": {}, "test": "password_check_junit_tests", @@ -14778,7 +15022,8 @@ "isolate_profile_data": true, "name": "password_manager_junit_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": {}, "test": "password_manager_junit_tests", @@ -14788,7 +15033,8 @@ "isolate_profile_data": true, "name": "services_junit_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": {}, "test": "services_junit_tests", @@ -14798,7 +15044,8 @@ "isolate_profile_data": true, "name": "touch_to_fill_junit_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": {}, "test": "touch_to_fill_junit_tests", @@ -14808,7 +15055,8 @@ "isolate_profile_data": true, "name": "ui_junit_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": {}, "test": "ui_junit_tests", @@ -14818,7 +15066,8 @@ "isolate_profile_data": true, "name": "webapk_client_junit_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": {}, "test": "webapk_client_junit_tests", @@ -14828,7 +15077,8 @@ "isolate_profile_data": true, "name": "webapk_shell_apk_h2o_junit_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": {}, "test": "webapk_shell_apk_h2o_junit_tests", @@ -14838,7 +15088,8 @@ "isolate_profile_data": true, "name": "webapk_shell_apk_junit_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": {}, "test": "webapk_shell_apk_junit_tests", @@ -14849,7 +15100,8 @@ "isolate_profile_data": true, "name": "weblayer_junit_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": {}, "test": "weblayer_junit_tests", @@ -14875,7 +15127,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -14926,7 +15179,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -14978,7 +15232,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -15029,7 +15284,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -15075,7 +15331,8 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -15117,7 +15374,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -15168,7 +15426,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -15219,7 +15478,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -15270,7 +15530,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -15321,7 +15582,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -15373,7 +15635,8 @@ }, "name": "webkit_unit_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -15425,7 +15688,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -15476,7 +15740,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -15527,7 +15792,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -15579,7 +15845,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -15630,7 +15897,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -15681,7 +15949,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -15732,7 +16001,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -15783,7 +16053,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -15835,7 +16106,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -15887,7 +16159,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -15939,7 +16212,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -15990,7 +16264,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -16041,7 +16316,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -16092,7 +16368,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -16143,7 +16420,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -16194,7 +16472,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -16245,7 +16524,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -16296,7 +16576,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -16349,7 +16630,8 @@ }, "name": "gl_tests_validating", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -16400,7 +16682,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -16451,7 +16734,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -16502,7 +16786,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -16553,7 +16838,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -16604,7 +16890,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -16655,7 +16942,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -16706,7 +16994,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -16757,7 +17046,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -16808,7 +17098,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -16859,7 +17150,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -16910,7 +17202,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -16961,7 +17254,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -17012,7 +17306,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -17064,7 +17359,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -17115,7 +17411,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -17166,7 +17463,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -17217,7 +17515,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -17268,7 +17567,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -17319,7 +17619,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -17370,7 +17671,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -17421,7 +17723,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -17472,7 +17775,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -17523,7 +17827,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -17575,7 +17880,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -17626,7 +17932,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -17677,7 +17984,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -17728,7 +18036,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -17779,7 +18088,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -17830,7 +18140,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -17881,7 +18192,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -18951,7 +19263,8 @@ }, "name": "webgl_conformance_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -18985,6 +19298,11 @@ } ] }, + "chromeos-amd64-generic-rel (reclient compare)": { + "additional_compile_targets": [ + "chromiumos_preflight" + ] + }, "chromeos-amd64-generic-rel (reclient)": { "additional_compile_targets": [ "chromiumos_preflight" @@ -20018,7 +20336,8 @@ }, "name": "webgl_conformance_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -21085,7 +21404,8 @@ }, "name": "webgl_conformance_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -25329,7 +25649,8 @@ }, "name": "context_lost_validating_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -25363,7 +25684,8 @@ }, "name": "depth_capture_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -25397,7 +25719,8 @@ }, "name": "gpu_process_launch_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -25431,7 +25754,8 @@ }, "name": "hardware_accelerated_feature_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -25469,7 +25793,8 @@ }, "name": "info_collection_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -25509,7 +25834,8 @@ "--buildbucket-id=${buildbucket_build_id}" ], "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -25543,7 +25869,8 @@ }, "name": "mediapipe_validating_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -25583,7 +25910,8 @@ "--buildbucket-id=${buildbucket_build_id}" ], "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -25617,7 +25945,8 @@ }, "name": "screenshot_sync_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -25651,7 +25980,8 @@ }, "name": "trace_test", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -25685,7 +26015,8 @@ }, "name": "webgl_conformance_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -27311,7 +27642,8 @@ }, "name": "context_lost_validating_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -27343,7 +27675,8 @@ }, "name": "depth_capture_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -27375,7 +27708,8 @@ }, "name": "gpu_process_launch_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -27407,7 +27741,8 @@ }, "name": "hardware_accelerated_feature_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -27443,7 +27778,8 @@ }, "name": "info_collection_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -27481,7 +27817,8 @@ "--buildbucket-id=${buildbucket_build_id}" ], "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -27513,7 +27850,8 @@ }, "name": "mediapipe_validating_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -27551,7 +27889,8 @@ "--buildbucket-id=${buildbucket_build_id}" ], "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -27583,7 +27922,8 @@ }, "name": "screenshot_sync_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -27615,7 +27955,8 @@ }, "name": "trace_test", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -27647,7 +27988,8 @@ }, "name": "webgl_conformance_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -27687,7 +28029,8 @@ }, "name": "absl_hardening_tests_iPad Air 2 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -27737,7 +28080,8 @@ }, "name": "absl_hardening_tests_iPhone X 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -27787,7 +28131,8 @@ }, "name": "base_unittests_iPad Air 2 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -27837,7 +28182,8 @@ }, "name": "base_unittests_iPhone X 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -27887,7 +28233,8 @@ }, "name": "boringssl_crypto_tests_iPad Air 2 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -27937,7 +28284,8 @@ }, "name": "boringssl_crypto_tests_iPhone X 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -27987,7 +28335,8 @@ }, "name": "boringssl_ssl_tests_iPad Air 2 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -28037,7 +28386,8 @@ }, "name": "boringssl_ssl_tests_iPhone X 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -28087,7 +28437,8 @@ }, "name": "components_unittests_iPad Air 2 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -28137,7 +28488,8 @@ }, "name": "components_unittests_iPhone X 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -28187,7 +28539,8 @@ }, "name": "crypto_unittests_iPad Air 2 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -28237,7 +28590,8 @@ }, "name": "crypto_unittests_iPhone X 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -28287,7 +28641,8 @@ }, "name": "gfx_unittests_iPad Air 2 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -28337,7 +28692,8 @@ }, "name": "gfx_unittests_iPhone X 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -28387,7 +28743,8 @@ }, "name": "google_apis_unittests_iPad Air 2 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -28437,7 +28794,8 @@ }, "name": "google_apis_unittests_iPhone X 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -28487,7 +28845,8 @@ }, "name": "ios_chrome_unittests_iPad Air 2 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -28537,7 +28896,8 @@ }, "name": "ios_chrome_unittests_iPhone X 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -28587,7 +28947,8 @@ }, "name": "ios_components_unittests_iPad Air 2 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -28637,7 +28998,8 @@ }, "name": "ios_components_unittests_iPhone X 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -28687,7 +29049,8 @@ }, "name": "ios_net_unittests_iPad Air 2 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -28737,7 +29100,8 @@ }, "name": "ios_net_unittests_iPhone X 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -28787,7 +29151,8 @@ }, "name": "ios_remoting_unittests_iPad Air 2 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -28837,7 +29202,8 @@ }, "name": "ios_remoting_unittests_iPhone X 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -28887,7 +29253,8 @@ }, "name": "ios_testing_unittests_iPad Air 2 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -28937,7 +29304,8 @@ }, "name": "ios_testing_unittests_iPhone X 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -28987,7 +29355,8 @@ }, "name": "ios_web_inttests_iPad Air 2 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -29037,7 +29406,8 @@ }, "name": "ios_web_inttests_iPhone X 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -29087,7 +29457,8 @@ }, "name": "ios_web_unittests_iPad Air 2 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -29137,7 +29508,8 @@ }, "name": "ios_web_unittests_iPhone X 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -29187,7 +29559,8 @@ }, "name": "ios_web_view_inttests_iPad Air 2 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -29237,7 +29610,8 @@ }, "name": "ios_web_view_inttests_iPhone X 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -29287,7 +29661,8 @@ }, "name": "ios_web_view_unittests_iPad Air 2 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -29337,7 +29712,8 @@ }, "name": "ios_web_view_unittests_iPhone X 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -29387,7 +29763,8 @@ }, "name": "net_unittests_iPad Air 2 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -29437,7 +29814,8 @@ }, "name": "net_unittests_iPhone X 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -29487,7 +29865,8 @@ }, "name": "services_unittests_iPad Air 2 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -29537,7 +29916,8 @@ }, "name": "services_unittests_iPhone X 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -29587,7 +29967,8 @@ }, "name": "skia_unittests_iPad Air 2 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -29637,7 +30018,8 @@ }, "name": "skia_unittests_iPhone X 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -29687,7 +30069,8 @@ }, "name": "sql_unittests_iPad Air 2 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -29737,7 +30120,8 @@ }, "name": "sql_unittests_iPhone X 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -29787,7 +30171,8 @@ }, "name": "ui_base_unittests_iPad Air 2 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -29837,7 +30222,8 @@ }, "name": "ui_base_unittests_iPhone X 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -29887,7 +30273,8 @@ }, "name": "url_unittests_iPad Air 2 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -29937,7 +30324,8 @@ }, "name": "url_unittests_iPhone X 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -29994,7 +30382,8 @@ }, "name": "absl_hardening_tests_iPhone 6s 14.4", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -30047,7 +30436,8 @@ }, "name": "absl_hardening_tests_iPhone 6s 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -30100,7 +30490,8 @@ }, "name": "base_unittests_iPad Air 2 14.4", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -30153,7 +30544,8 @@ }, "name": "base_unittests_iPad Air 2 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -30206,7 +30598,8 @@ }, "name": "base_unittests_iPhone 6s 14.4", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -30259,7 +30652,8 @@ }, "name": "base_unittests_iPhone 6s 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -30312,7 +30706,8 @@ }, "name": "base_unittests_iPhone 6s Plus 14.4", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -30365,7 +30760,8 @@ }, "name": "base_unittests_iPhone 6s Plus 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -30418,7 +30814,8 @@ }, "name": "base_unittests_iPhone SE (1st generation) 14.4", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -30471,7 +30868,8 @@ }, "name": "base_unittests_iPhone SE (1st generation) 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -30524,7 +30922,8 @@ }, "name": "boringssl_crypto_tests_iPhone 6s 14.4", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -30577,7 +30976,8 @@ }, "name": "boringssl_crypto_tests_iPhone 6s 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -30630,7 +31030,8 @@ }, "name": "boringssl_ssl_tests_iPhone 6s 14.4", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -30683,7 +31084,8 @@ }, "name": "boringssl_ssl_tests_iPhone 6s 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -30736,7 +31138,8 @@ }, "name": "components_unittests_iPad Air 2 14.4", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -30789,7 +31192,8 @@ }, "name": "components_unittests_iPad Air 2 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -30842,7 +31246,8 @@ }, "name": "components_unittests_iPhone 6s 14.4", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -30895,7 +31300,8 @@ }, "name": "components_unittests_iPhone 6s 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -30948,7 +31354,8 @@ }, "name": "components_unittests_iPhone 6s Plus 14.4", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -31001,7 +31408,8 @@ }, "name": "components_unittests_iPhone 6s Plus 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -31054,7 +31462,8 @@ }, "name": "components_unittests_iPhone SE (1st generation) 14.4", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -31107,7 +31516,8 @@ }, "name": "components_unittests_iPhone SE (1st generation) 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -31160,7 +31570,8 @@ }, "name": "crypto_unittests_iPhone 6s 14.4", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -31213,7 +31624,8 @@ }, "name": "crypto_unittests_iPhone 6s 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -31266,7 +31678,8 @@ }, "name": "gfx_unittests_iPad Air 2 14.4", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -31319,7 +31732,8 @@ }, "name": "gfx_unittests_iPad Air 2 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -31372,7 +31786,8 @@ }, "name": "gfx_unittests_iPhone 6s 14.4", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -31425,7 +31840,8 @@ }, "name": "gfx_unittests_iPhone 6s 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -31478,7 +31894,8 @@ }, "name": "gfx_unittests_iPhone 6s Plus 14.4", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -31531,7 +31948,8 @@ }, "name": "gfx_unittests_iPhone 6s Plus 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -31584,7 +32002,8 @@ }, "name": "gfx_unittests_iPhone SE (1st generation) 14.4", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -31637,7 +32056,8 @@ }, "name": "gfx_unittests_iPhone SE (1st generation) 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -31690,7 +32110,8 @@ }, "name": "google_apis_unittests_iPhone 6s 14.4", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -31743,7 +32164,8 @@ }, "name": "google_apis_unittests_iPhone 6s 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -31797,7 +32219,8 @@ }, "name": "ios_chrome_bookmarks_eg2tests_module_iPad Air 2 14.4", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -31851,7 +32274,8 @@ }, "name": "ios_chrome_bookmarks_eg2tests_module_iPad Air 2 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -31905,7 +32329,8 @@ }, "name": "ios_chrome_bookmarks_eg2tests_module_iPhone 7 14.4", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -31959,7 +32384,8 @@ }, "name": "ios_chrome_bookmarks_eg2tests_module_iPhone 7 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -32013,7 +32439,8 @@ }, "name": "ios_chrome_bookmarks_eg2tests_module_iPhone X 14.4", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -32067,7 +32494,8 @@ }, "name": "ios_chrome_bookmarks_eg2tests_module_iPhone X 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -32121,7 +32549,8 @@ }, "name": "ios_chrome_integration_eg2tests_module_iPad Air 2 14.4", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -32176,7 +32605,8 @@ }, "name": "ios_chrome_integration_eg2tests_module_iPad Air 2 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -32231,7 +32661,8 @@ }, "name": "ios_chrome_integration_eg2tests_module_iPhone 6s 14.4", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -32286,7 +32717,8 @@ }, "name": "ios_chrome_integration_eg2tests_module_iPhone 6s 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -32341,7 +32773,8 @@ }, "name": "ios_chrome_integration_eg2tests_module_iPhone 7 14.4", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -32396,7 +32829,8 @@ }, "name": "ios_chrome_integration_eg2tests_module_iPhone 7 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -32451,7 +32885,8 @@ }, "name": "ios_chrome_settings_eg2tests_module_iPad Air 2 14.4", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -32506,7 +32941,8 @@ }, "name": "ios_chrome_settings_eg2tests_module_iPad Air 2 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -32561,7 +32997,8 @@ }, "name": "ios_chrome_settings_eg2tests_module_iPhone 7 14.4", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -32616,7 +33053,8 @@ }, "name": "ios_chrome_settings_eg2tests_module_iPhone 7 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -32671,7 +33109,8 @@ }, "name": "ios_chrome_settings_eg2tests_module_iPhone X 14.4", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -32726,7 +33165,8 @@ }, "name": "ios_chrome_settings_eg2tests_module_iPhone X 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -32781,7 +33221,8 @@ }, "name": "ios_chrome_signin_eg2tests_module_iPad Air 2 14.4", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -32835,7 +33276,8 @@ }, "name": "ios_chrome_signin_eg2tests_module_iPad Air 2 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -32889,7 +33331,8 @@ }, "name": "ios_chrome_signin_eg2tests_module_iPhone 6s 14.4", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -32943,7 +33386,8 @@ }, "name": "ios_chrome_signin_eg2tests_module_iPhone 6s 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -32997,7 +33441,8 @@ }, "name": "ios_chrome_signin_eg2tests_module_iPhone 7 14.4", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -33051,7 +33496,8 @@ }, "name": "ios_chrome_signin_eg2tests_module_iPhone 7 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -33105,7 +33551,8 @@ }, "name": "ios_chrome_smoke_eg2tests_module_iPad Air 2 14.4", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -33159,7 +33606,8 @@ }, "name": "ios_chrome_smoke_eg2tests_module_iPad Air 2 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -33213,7 +33661,8 @@ }, "name": "ios_chrome_smoke_eg2tests_module_iPhone 7 14.4", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -33267,7 +33716,8 @@ }, "name": "ios_chrome_smoke_eg2tests_module_iPhone 7 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -33321,7 +33771,8 @@ }, "name": "ios_chrome_smoke_eg2tests_module_iPhone X 14.4", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -33375,7 +33826,8 @@ }, "name": "ios_chrome_smoke_eg2tests_module_iPhone X 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -33429,7 +33881,8 @@ }, "name": "ios_chrome_ui_eg2tests_module_iPad Air 2 14.4", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -33484,7 +33937,8 @@ }, "name": "ios_chrome_ui_eg2tests_module_iPad Air 2 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -33539,7 +33993,8 @@ }, "name": "ios_chrome_ui_eg2tests_module_iPhone 6s 14.4", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -33594,7 +34049,8 @@ }, "name": "ios_chrome_ui_eg2tests_module_iPhone 6s 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -33649,7 +34105,8 @@ }, "name": "ios_chrome_ui_eg2tests_module_iPhone 7 14.4", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -33704,7 +34161,8 @@ }, "name": "ios_chrome_ui_eg2tests_module_iPhone 7 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -33758,7 +34216,8 @@ }, "name": "ios_chrome_unittests_iPad Air 2 14.4", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -33811,7 +34270,8 @@ }, "name": "ios_chrome_unittests_iPad Air 2 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -33864,7 +34324,8 @@ }, "name": "ios_chrome_unittests_iPhone 6s 14.4", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -33917,7 +34378,8 @@ }, "name": "ios_chrome_unittests_iPhone 6s 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -33970,7 +34432,8 @@ }, "name": "ios_chrome_unittests_iPhone 6s Plus 14.4", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -34023,7 +34486,8 @@ }, "name": "ios_chrome_unittests_iPhone 6s Plus 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -34076,7 +34540,8 @@ }, "name": "ios_chrome_unittests_iPhone SE (1st generation) 14.4", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -34129,7 +34594,8 @@ }, "name": "ios_chrome_unittests_iPhone SE (1st generation) 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -34183,7 +34649,8 @@ }, "name": "ios_chrome_web_eg2tests_module_iPad Air 2 14.4", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -34237,7 +34704,8 @@ }, "name": "ios_chrome_web_eg2tests_module_iPad Air 2 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -34291,7 +34759,8 @@ }, "name": "ios_chrome_web_eg2tests_module_iPhone 7 14.4", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -34345,7 +34814,8 @@ }, "name": "ios_chrome_web_eg2tests_module_iPhone 7 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -34399,7 +34869,8 @@ }, "name": "ios_chrome_web_eg2tests_module_iPhone X 14.4", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -34453,7 +34924,8 @@ }, "name": "ios_chrome_web_eg2tests_module_iPhone X 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -34506,7 +34978,8 @@ }, "name": "ios_components_unittests_iPhone 6s 14.4", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -34559,7 +35032,8 @@ }, "name": "ios_components_unittests_iPhone 6s 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -34612,7 +35086,8 @@ }, "name": "ios_net_unittests_iPhone 6s 14.4", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -34665,7 +35140,8 @@ }, "name": "ios_net_unittests_iPhone 6s 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -34718,7 +35194,8 @@ }, "name": "ios_remoting_unittests_iPhone 6s 14.4", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -34771,7 +35248,8 @@ }, "name": "ios_remoting_unittests_iPhone 6s 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -34825,7 +35303,8 @@ }, "name": "ios_showcase_eg2tests_module_iPad Air 2 14.4", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -34879,7 +35358,8 @@ }, "name": "ios_showcase_eg2tests_module_iPad Air 2 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -34933,7 +35413,8 @@ }, "name": "ios_showcase_eg2tests_module_iPhone 7 14.4", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -34987,7 +35468,8 @@ }, "name": "ios_showcase_eg2tests_module_iPhone 7 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -35041,7 +35523,8 @@ }, "name": "ios_showcase_eg2tests_module_iPhone X 14.4", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -35095,7 +35578,8 @@ }, "name": "ios_showcase_eg2tests_module_iPhone X 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -35148,7 +35632,8 @@ }, "name": "ios_testing_unittests_iPhone 6s 14.4", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -35201,7 +35686,8 @@ }, "name": "ios_testing_unittests_iPhone 6s 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -35254,7 +35740,8 @@ }, "name": "ios_web_inttests_iPad Air 2 14.4", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -35307,7 +35794,8 @@ }, "name": "ios_web_inttests_iPad Air 2 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -35360,7 +35848,8 @@ }, "name": "ios_web_inttests_iPhone 6s 14.4", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -35413,7 +35902,8 @@ }, "name": "ios_web_inttests_iPhone 6s 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -35466,7 +35956,8 @@ }, "name": "ios_web_inttests_iPhone 6s Plus 14.4", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -35519,7 +36010,8 @@ }, "name": "ios_web_inttests_iPhone 6s Plus 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -35572,7 +36064,8 @@ }, "name": "ios_web_inttests_iPhone SE (1st generation) 14.4", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -35625,7 +36118,8 @@ }, "name": "ios_web_inttests_iPhone SE (1st generation) 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -35679,7 +36173,8 @@ }, "name": "ios_web_shell_eg2tests_module_iPad Air 2 14.4", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -35733,7 +36228,8 @@ }, "name": "ios_web_shell_eg2tests_module_iPad Air 2 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -35787,7 +36283,8 @@ }, "name": "ios_web_shell_eg2tests_module_iPhone 6s 14.4", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -35841,7 +36338,8 @@ }, "name": "ios_web_shell_eg2tests_module_iPhone 6s 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -35895,7 +36393,8 @@ }, "name": "ios_web_shell_eg2tests_module_iPhone 7 14.4", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -35949,7 +36448,8 @@ }, "name": "ios_web_shell_eg2tests_module_iPhone 7 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -36002,7 +36502,8 @@ }, "name": "ios_web_unittests_iPad Air 2 14.4", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -36055,7 +36556,8 @@ }, "name": "ios_web_unittests_iPad Air 2 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -36108,7 +36610,8 @@ }, "name": "ios_web_unittests_iPhone 6s 14.4", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -36161,7 +36664,8 @@ }, "name": "ios_web_unittests_iPhone 6s 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -36214,7 +36718,8 @@ }, "name": "ios_web_unittests_iPhone 6s Plus 14.4", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -36267,7 +36772,8 @@ }, "name": "ios_web_unittests_iPhone 6s Plus 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -36320,7 +36826,8 @@ }, "name": "ios_web_unittests_iPhone SE (1st generation) 14.4", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -36373,7 +36880,8 @@ }, "name": "ios_web_unittests_iPhone SE (1st generation) 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -36426,7 +36934,8 @@ }, "name": "ios_web_view_inttests_iPad Air 2 14.4", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -36479,7 +36988,8 @@ }, "name": "ios_web_view_inttests_iPad Air 2 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -36532,7 +37042,8 @@ }, "name": "ios_web_view_inttests_iPhone 6s 14.4", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -36585,7 +37096,8 @@ }, "name": "ios_web_view_inttests_iPhone 6s 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -36638,7 +37150,8 @@ }, "name": "ios_web_view_inttests_iPhone 6s Plus 14.4", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -36691,7 +37204,8 @@ }, "name": "ios_web_view_inttests_iPhone 6s Plus 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -36744,7 +37258,8 @@ }, "name": "ios_web_view_inttests_iPhone SE (1st generation) 14.4", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -36797,7 +37312,8 @@ }, "name": "ios_web_view_inttests_iPhone SE (1st generation) 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -36850,7 +37366,8 @@ }, "name": "ios_web_view_unittests_iPad Air 2 14.4", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -36903,7 +37420,8 @@ }, "name": "ios_web_view_unittests_iPad Air 2 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -36956,7 +37474,8 @@ }, "name": "ios_web_view_unittests_iPhone 6s 14.4", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -37009,7 +37528,8 @@ }, "name": "ios_web_view_unittests_iPhone 6s 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -37062,7 +37582,8 @@ }, "name": "ios_web_view_unittests_iPhone 6s Plus 14.4", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -37115,7 +37636,8 @@ }, "name": "ios_web_view_unittests_iPhone 6s Plus 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -37168,7 +37690,8 @@ }, "name": "ios_web_view_unittests_iPhone SE (1st generation) 14.4", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -37221,7 +37744,8 @@ }, "name": "ios_web_view_unittests_iPhone SE (1st generation) 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -37274,7 +37798,8 @@ }, "name": "net_unittests_iPhone 6s 14.4", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -37327,7 +37852,8 @@ }, "name": "net_unittests_iPhone 6s 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -37380,7 +37906,8 @@ }, "name": "services_unittests_iPhone 6s 14.4", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -37433,7 +37960,8 @@ }, "name": "services_unittests_iPhone 6s 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -37486,7 +38014,8 @@ }, "name": "skia_unittests_iPad Air 2 14.4", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -37539,7 +38068,8 @@ }, "name": "skia_unittests_iPad Air 2 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -37592,7 +38122,8 @@ }, "name": "skia_unittests_iPhone 6s 14.4", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -37645,7 +38176,8 @@ }, "name": "skia_unittests_iPhone 6s 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -37698,7 +38230,8 @@ }, "name": "skia_unittests_iPhone 6s Plus 14.4", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -37751,7 +38284,8 @@ }, "name": "skia_unittests_iPhone 6s Plus 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -37804,7 +38338,8 @@ }, "name": "skia_unittests_iPhone SE (1st generation) 14.4", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -37857,7 +38392,8 @@ }, "name": "skia_unittests_iPhone SE (1st generation) 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -37910,7 +38446,8 @@ }, "name": "sql_unittests_iPhone 6s 14.4", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -37963,7 +38500,8 @@ }, "name": "sql_unittests_iPhone 6s 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -38016,7 +38554,8 @@ }, "name": "ui_base_unittests_iPad Air 2 14.4", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -38069,7 +38608,8 @@ }, "name": "ui_base_unittests_iPad Air 2 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -38122,7 +38662,8 @@ }, "name": "ui_base_unittests_iPhone 6s 14.4", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -38175,7 +38716,8 @@ }, "name": "ui_base_unittests_iPhone 6s 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -38228,7 +38770,8 @@ }, "name": "ui_base_unittests_iPhone 6s Plus 14.4", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -38281,7 +38824,8 @@ }, "name": "ui_base_unittests_iPhone 6s Plus 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -38334,7 +38878,8 @@ }, "name": "ui_base_unittests_iPhone SE (1st generation) 14.4", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -38387,7 +38932,8 @@ }, "name": "ui_base_unittests_iPhone SE (1st generation) 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -38440,7 +38986,8 @@ }, "name": "url_unittests_iPhone 6s 14.4", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -38493,7 +39040,8 @@ }, "name": "url_unittests_iPhone 6s 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -38547,7 +39095,8 @@ }, "name": "cronet_test_iPhone X 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -38601,7 +39150,8 @@ }, "name": "absl_hardening_tests_iPad Air 2 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -38651,7 +39201,8 @@ }, "name": "base_unittests_iPad Air 2 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -38701,7 +39252,8 @@ }, "name": "boringssl_crypto_tests_iPad Air 2 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -38751,7 +39303,8 @@ }, "name": "boringssl_ssl_tests_iPad Air 2 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -38801,7 +39354,8 @@ }, "name": "components_unittests_iPad Air 2 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -38851,7 +39405,8 @@ }, "name": "crypto_unittests_iPad Air 2 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -38901,7 +39456,8 @@ }, "name": "gfx_unittests_iPad Air 2 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -38951,7 +39507,8 @@ }, "name": "google_apis_unittests_iPad Air 2 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -39002,7 +39559,8 @@ }, "name": "ios_chrome_bookmarks_eg2tests_module_iPad Air 2 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -39053,7 +39611,8 @@ }, "name": "ios_chrome_integration_eg2tests_module_iPad Air 2 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -39105,7 +39664,8 @@ }, "name": "ios_chrome_settings_eg2tests_module_iPad Air 2 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -39157,7 +39717,8 @@ }, "name": "ios_chrome_signin_eg2tests_module_iPad Air 2 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -39208,7 +39769,8 @@ }, "name": "ios_chrome_smoke_eg2tests_module_iPad Air 2 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -39259,7 +39821,8 @@ }, "name": "ios_chrome_ui_eg2tests_module_iPad Air 2 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -39310,7 +39873,8 @@ }, "name": "ios_chrome_unittests_iPad Air 2 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -39361,7 +39925,8 @@ }, "name": "ios_chrome_web_eg2tests_module_iPad Air 2 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -39411,7 +39976,8 @@ }, "name": "ios_components_unittests_iPad Air 2 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -39461,7 +40027,8 @@ }, "name": "ios_net_unittests_iPad Air 2 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -39511,7 +40078,8 @@ }, "name": "ios_remoting_unittests_iPad Air 2 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -39562,7 +40130,8 @@ }, "name": "ios_showcase_eg2tests_module_iPad Air 2 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -39612,7 +40181,8 @@ }, "name": "ios_testing_unittests_iPad Air 2 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -39662,7 +40232,8 @@ }, "name": "ios_web_inttests_iPad Air 2 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -39713,7 +40284,8 @@ }, "name": "ios_web_shell_eg2tests_module_iPad Air 2 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -39763,7 +40335,8 @@ }, "name": "ios_web_unittests_iPad Air 2 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -39813,7 +40386,8 @@ }, "name": "ios_web_view_inttests_iPad Air 2 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -39863,7 +40437,8 @@ }, "name": "ios_web_view_unittests_iPad Air 2 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -39913,7 +40488,8 @@ }, "name": "net_unittests_iPad Air 2 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -39963,7 +40539,8 @@ }, "name": "services_unittests_iPad Air 2 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -40013,7 +40590,8 @@ }, "name": "skia_unittests_iPad Air 2 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -40063,7 +40641,8 @@ }, "name": "sql_unittests_iPad Air 2 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -40113,7 +40692,8 @@ }, "name": "ui_base_unittests_iPad Air 2 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -40163,7 +40743,8 @@ }, "name": "url_unittests_iPad Air 2 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -40219,7 +40800,8 @@ }, "name": "absl_hardening_tests_iPad Air 2 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -40271,7 +40853,8 @@ }, "name": "absl_hardening_tests_iPhone X 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -40323,7 +40906,8 @@ }, "name": "base_unittests_iPad Air 2 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -40375,7 +40959,8 @@ }, "name": "base_unittests_iPhone X 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -40427,7 +41012,8 @@ }, "name": "boringssl_crypto_tests_iPad Air 2 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -40479,7 +41065,8 @@ }, "name": "boringssl_crypto_tests_iPhone X 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -40531,7 +41118,8 @@ }, "name": "boringssl_ssl_tests_iPad Air 2 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -40583,7 +41171,8 @@ }, "name": "boringssl_ssl_tests_iPhone X 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -40635,7 +41224,8 @@ }, "name": "components_unittests_iPad Air 2 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -40687,7 +41277,8 @@ }, "name": "components_unittests_iPhone X 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -40739,7 +41330,8 @@ }, "name": "crypto_unittests_iPad Air 2 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -40791,7 +41383,8 @@ }, "name": "crypto_unittests_iPhone X 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -40843,7 +41436,8 @@ }, "name": "gfx_unittests_iPad Air 2 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -40895,7 +41489,8 @@ }, "name": "gfx_unittests_iPhone X 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -40947,7 +41542,8 @@ }, "name": "google_apis_unittests_iPad Air 2 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -40999,7 +41595,8 @@ }, "name": "google_apis_unittests_iPhone X 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -41052,7 +41649,8 @@ }, "name": "ios_chrome_bookmarks_eg2tests_module_iPad Air 2 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -41105,7 +41703,8 @@ }, "name": "ios_chrome_bookmarks_eg2tests_module_iPhone X 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -41158,7 +41757,8 @@ }, "name": "ios_chrome_integration_eg2tests_module_iPad Air 2 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -41212,7 +41812,8 @@ }, "name": "ios_chrome_integration_eg2tests_module_iPhone X 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -41266,7 +41867,8 @@ }, "name": "ios_chrome_settings_eg2tests_module_iPad Air 2 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -41320,7 +41922,8 @@ }, "name": "ios_chrome_settings_eg2tests_module_iPhone X 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -41374,7 +41977,8 @@ }, "name": "ios_chrome_signin_eg2tests_module_iPad Air 2 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -41427,7 +42031,8 @@ }, "name": "ios_chrome_signin_eg2tests_module_iPhone X 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -41480,7 +42085,8 @@ }, "name": "ios_chrome_smoke_eg2tests_module_iPad Air 2 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -41533,7 +42139,8 @@ }, "name": "ios_chrome_smoke_eg2tests_module_iPhone X 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -41586,7 +42193,8 @@ }, "name": "ios_chrome_ui_eg2tests_module_iPad Air 2 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -41640,7 +42248,8 @@ }, "name": "ios_chrome_ui_eg2tests_module_iPhone X 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -41693,7 +42302,8 @@ }, "name": "ios_chrome_unittests_iPad Air 2 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -41745,7 +42355,8 @@ }, "name": "ios_chrome_unittests_iPhone X 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -41798,7 +42409,8 @@ }, "name": "ios_chrome_web_eg2tests_module_iPad Air 2 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -41851,7 +42463,8 @@ }, "name": "ios_chrome_web_eg2tests_module_iPhone X 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -41903,7 +42516,8 @@ }, "name": "ios_components_unittests_iPad Air 2 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -41955,7 +42569,8 @@ }, "name": "ios_components_unittests_iPhone X 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -42007,7 +42622,8 @@ }, "name": "ios_net_unittests_iPad Air 2 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -42059,7 +42675,8 @@ }, "name": "ios_net_unittests_iPhone X 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -42111,7 +42728,8 @@ }, "name": "ios_remoting_unittests_iPad Air 2 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -42163,7 +42781,8 @@ }, "name": "ios_remoting_unittests_iPhone X 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -42216,7 +42835,8 @@ }, "name": "ios_showcase_eg2tests_module_iPad Air 2 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -42269,7 +42889,8 @@ }, "name": "ios_showcase_eg2tests_module_iPhone X 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -42321,7 +42942,8 @@ }, "name": "ios_testing_unittests_iPad Air 2 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -42373,7 +42995,8 @@ }, "name": "ios_testing_unittests_iPhone X 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -42425,7 +43048,8 @@ }, "name": "ios_web_inttests_iPad Air 2 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -42477,7 +43101,8 @@ }, "name": "ios_web_inttests_iPhone X 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -42530,7 +43155,8 @@ }, "name": "ios_web_shell_eg2tests_module_iPad Air 2 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -42583,7 +43209,8 @@ }, "name": "ios_web_shell_eg2tests_module_iPhone X 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -42635,7 +43262,8 @@ }, "name": "ios_web_unittests_iPad Air 2 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -42687,7 +43315,8 @@ }, "name": "ios_web_unittests_iPhone X 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -42739,7 +43368,8 @@ }, "name": "ios_web_view_inttests_iPad Air 2 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -42791,7 +43421,8 @@ }, "name": "ios_web_view_inttests_iPhone X 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -42843,7 +43474,8 @@ }, "name": "ios_web_view_unittests_iPad Air 2 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -42895,7 +43527,8 @@ }, "name": "ios_web_view_unittests_iPhone X 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -42947,7 +43580,8 @@ }, "name": "net_unittests_iPad Air 2 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -42999,7 +43633,8 @@ }, "name": "net_unittests_iPhone X 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -43051,7 +43686,8 @@ }, "name": "services_unittests_iPad Air 2 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -43103,7 +43739,8 @@ }, "name": "services_unittests_iPhone X 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -43155,7 +43792,8 @@ }, "name": "skia_unittests_iPad Air 2 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -43207,7 +43845,8 @@ }, "name": "skia_unittests_iPhone X 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -43259,7 +43898,8 @@ }, "name": "sql_unittests_iPad Air 2 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -43311,7 +43951,8 @@ }, "name": "sql_unittests_iPhone X 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -43363,7 +44004,8 @@ }, "name": "ui_base_unittests_iPad Air 2 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -43415,7 +44057,8 @@ }, "name": "ui_base_unittests_iPhone X 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -43467,7 +44110,8 @@ }, "name": "url_unittests_iPad Air 2 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -43519,7 +44163,8 @@ }, "name": "url_unittests_iPhone X 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -43576,7 +44221,8 @@ }, "name": "absl_hardening_tests_iPhone X 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -43626,7 +44272,8 @@ }, "name": "base_unittests_iPad Air 2 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -43676,7 +44323,8 @@ }, "name": "base_unittests_iPhone 6s Plus 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -43726,7 +44374,8 @@ }, "name": "base_unittests_iPhone X 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -43776,7 +44425,8 @@ }, "name": "boringssl_crypto_tests_iPhone X 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -43826,7 +44476,8 @@ }, "name": "boringssl_ssl_tests_iPhone X 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -43876,7 +44527,8 @@ }, "name": "components_unittests_iPad Air 2 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -43926,7 +44578,8 @@ }, "name": "components_unittests_iPhone 6s Plus 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -43976,7 +44629,8 @@ }, "name": "components_unittests_iPhone X 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -44026,7 +44680,8 @@ }, "name": "crypto_unittests_iPhone X 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -44076,7 +44731,8 @@ }, "name": "gfx_unittests_iPad Air 2 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -44126,7 +44782,8 @@ }, "name": "gfx_unittests_iPhone 6s Plus 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -44176,7 +44833,8 @@ }, "name": "gfx_unittests_iPhone X 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -44226,7 +44884,8 @@ }, "name": "google_apis_unittests_iPhone X 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -44277,7 +44936,8 @@ }, "name": "ios_chrome_bookmarks_eg2tests_module_iPad (6th generation) 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -44328,7 +44988,8 @@ }, "name": "ios_chrome_bookmarks_eg2tests_module_iPad Air (3rd generation) 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -44379,7 +45040,8 @@ }, "name": "ios_chrome_bookmarks_eg2tests_module_iPhone 7 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -44430,7 +45092,8 @@ }, "name": "ios_chrome_bookmarks_eg2tests_module_iPhone X 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -44481,7 +45144,8 @@ }, "name": "ios_chrome_integration_eg2tests_module_iPad (6th generation) 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -44533,7 +45197,8 @@ }, "name": "ios_chrome_integration_eg2tests_module_iPad Pro (12.9-inch) (2nd generation) 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -44585,7 +45250,8 @@ }, "name": "ios_chrome_integration_eg2tests_module_iPhone 7 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -44637,7 +45303,8 @@ }, "name": "ios_chrome_integration_eg2tests_module_iPhone X 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -44689,7 +45356,8 @@ }, "name": "ios_chrome_settings_eg2tests_module_iPad (6th generation) 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -44741,7 +45409,8 @@ }, "name": "ios_chrome_settings_eg2tests_module_iPad Air (3rd generation) 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -44793,7 +45462,8 @@ }, "name": "ios_chrome_settings_eg2tests_module_iPhone 7 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -44845,7 +45515,8 @@ }, "name": "ios_chrome_settings_eg2tests_module_iPhone X 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -44897,7 +45568,8 @@ }, "name": "ios_chrome_signin_eg2tests_module_iPad (6th generation) 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -44948,7 +45620,8 @@ }, "name": "ios_chrome_signin_eg2tests_module_iPad Pro (12.9-inch) (2nd generation) 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -44999,7 +45672,8 @@ }, "name": "ios_chrome_signin_eg2tests_module_iPhone 7 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -45050,7 +45724,8 @@ }, "name": "ios_chrome_signin_eg2tests_module_iPhone X 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -45101,7 +45776,8 @@ }, "name": "ios_chrome_smoke_eg2tests_module_iPad (6th generation) 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -45152,7 +45828,8 @@ }, "name": "ios_chrome_smoke_eg2tests_module_iPad Air (3rd generation) 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -45203,7 +45880,8 @@ }, "name": "ios_chrome_smoke_eg2tests_module_iPhone 7 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -45254,7 +45932,8 @@ }, "name": "ios_chrome_smoke_eg2tests_module_iPhone X 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -45305,7 +45984,8 @@ }, "name": "ios_chrome_ui_eg2tests_module_iPad (6th generation) 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -45357,7 +46037,8 @@ }, "name": "ios_chrome_ui_eg2tests_module_iPad Pro (12.9-inch) (2nd generation) 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -45409,7 +46090,8 @@ }, "name": "ios_chrome_ui_eg2tests_module_iPhone 7 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -45461,7 +46143,8 @@ }, "name": "ios_chrome_ui_eg2tests_module_iPhone X 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -45512,7 +46195,8 @@ }, "name": "ios_chrome_unittests_iPad Air 2 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -45562,7 +46246,8 @@ }, "name": "ios_chrome_unittests_iPhone 6s Plus 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -45612,7 +46297,8 @@ }, "name": "ios_chrome_unittests_iPhone X 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -45663,7 +46349,8 @@ }, "name": "ios_chrome_web_eg2tests_module_iPad (6th generation) 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -45714,7 +46401,8 @@ }, "name": "ios_chrome_web_eg2tests_module_iPad Air (3rd generation) 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -45765,7 +46453,8 @@ }, "name": "ios_chrome_web_eg2tests_module_iPhone 7 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -45816,7 +46505,8 @@ }, "name": "ios_chrome_web_eg2tests_module_iPhone X 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -45866,7 +46556,8 @@ }, "name": "ios_components_unittests_iPhone X 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -45916,7 +46607,8 @@ }, "name": "ios_net_unittests_iPhone X 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -45966,7 +46658,8 @@ }, "name": "ios_remoting_unittests_iPhone X 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -46017,7 +46710,8 @@ }, "name": "ios_showcase_eg2tests_module_iPad (6th generation) 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -46068,7 +46762,8 @@ }, "name": "ios_showcase_eg2tests_module_iPad Air (3rd generation) 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -46119,7 +46814,8 @@ }, "name": "ios_showcase_eg2tests_module_iPhone 7 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -46170,7 +46866,8 @@ }, "name": "ios_showcase_eg2tests_module_iPhone X 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -46220,7 +46917,8 @@ }, "name": "ios_testing_unittests_iPhone X 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -46270,7 +46968,8 @@ }, "name": "ios_web_inttests_iPad Air 2 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -46320,7 +47019,8 @@ }, "name": "ios_web_inttests_iPhone 6s Plus 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -46370,7 +47070,8 @@ }, "name": "ios_web_inttests_iPhone X 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -46421,7 +47122,8 @@ }, "name": "ios_web_shell_eg2tests_module_iPad (6th generation) 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -46472,7 +47174,8 @@ }, "name": "ios_web_shell_eg2tests_module_iPad Pro (12.9-inch) (2nd generation) 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -46523,7 +47226,8 @@ }, "name": "ios_web_shell_eg2tests_module_iPhone 7 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -46574,7 +47278,8 @@ }, "name": "ios_web_shell_eg2tests_module_iPhone X 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -46624,7 +47329,8 @@ }, "name": "ios_web_unittests_iPad Air 2 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -46674,7 +47380,8 @@ }, "name": "ios_web_unittests_iPhone 6s Plus 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -46724,7 +47431,8 @@ }, "name": "ios_web_unittests_iPhone X 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -46774,7 +47482,8 @@ }, "name": "ios_web_view_inttests_iPad Air 2 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -46824,7 +47533,8 @@ }, "name": "ios_web_view_inttests_iPhone 6s Plus 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -46874,7 +47584,8 @@ }, "name": "ios_web_view_inttests_iPhone X 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -46924,7 +47635,8 @@ }, "name": "ios_web_view_unittests_iPad Air 2 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -46974,7 +47686,8 @@ }, "name": "ios_web_view_unittests_iPhone 6s Plus 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -47024,7 +47737,8 @@ }, "name": "ios_web_view_unittests_iPhone X 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -47074,7 +47788,8 @@ }, "name": "net_unittests_iPhone X 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -47124,7 +47839,8 @@ }, "name": "services_unittests_iPhone X 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -47174,7 +47890,8 @@ }, "name": "skia_unittests_iPad Air 2 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -47224,7 +47941,8 @@ }, "name": "skia_unittests_iPhone 6s Plus 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -47274,7 +47992,8 @@ }, "name": "skia_unittests_iPhone X 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -47324,7 +48043,8 @@ }, "name": "sql_unittests_iPhone X 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -47374,7 +48094,8 @@ }, "name": "ui_base_unittests_iPad Air 2 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -47424,7 +48145,8 @@ }, "name": "ui_base_unittests_iPhone 6s Plus 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -47474,7 +48196,8 @@ }, "name": "ui_base_unittests_iPhone X 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -47524,7 +48247,8 @@ }, "name": "url_unittests_iPhone X 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -47581,7 +48305,8 @@ }, "name": "absl_hardening_tests_iPhone 6s 13.6", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -47631,7 +48356,8 @@ }, "name": "absl_hardening_tests_iPhone 6s 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -47681,7 +48407,8 @@ }, "name": "base_unittests_iPad Air 2 13.6", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -47731,7 +48458,8 @@ }, "name": "base_unittests_iPad Air 2 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -47781,7 +48509,8 @@ }, "name": "base_unittests_iPhone 6s 13.6", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -47831,7 +48560,8 @@ }, "name": "base_unittests_iPhone 6s 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -47881,7 +48611,8 @@ }, "name": "base_unittests_iPhone 6s Plus 13.6", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -47931,7 +48662,8 @@ }, "name": "base_unittests_iPhone 6s Plus 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -47981,7 +48713,8 @@ }, "name": "base_unittests_iPhone SE (1st generation) 13.6", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -48031,7 +48764,8 @@ }, "name": "base_unittests_iPhone SE (1st generation) 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -48081,7 +48815,8 @@ }, "name": "boringssl_crypto_tests_iPhone 6s 13.6", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -48131,7 +48866,8 @@ }, "name": "boringssl_crypto_tests_iPhone 6s 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -48181,7 +48917,8 @@ }, "name": "boringssl_ssl_tests_iPhone 6s 13.6", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -48231,7 +48968,8 @@ }, "name": "boringssl_ssl_tests_iPhone 6s 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -48281,7 +49019,8 @@ }, "name": "components_unittests_iPad Air 2 13.6", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -48331,7 +49070,8 @@ }, "name": "components_unittests_iPad Air 2 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -48381,7 +49121,8 @@ }, "name": "components_unittests_iPhone 6s 13.6", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -48431,7 +49172,8 @@ }, "name": "components_unittests_iPhone 6s 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -48481,7 +49223,8 @@ }, "name": "components_unittests_iPhone 6s Plus 13.6", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -48531,7 +49274,8 @@ }, "name": "components_unittests_iPhone 6s Plus 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -48581,7 +49325,8 @@ }, "name": "components_unittests_iPhone SE (1st generation) 13.6", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -48631,7 +49376,8 @@ }, "name": "components_unittests_iPhone SE (1st generation) 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -48681,7 +49427,8 @@ }, "name": "crypto_unittests_iPhone 6s 13.6", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -48731,7 +49478,8 @@ }, "name": "crypto_unittests_iPhone 6s 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -48781,7 +49529,8 @@ }, "name": "gfx_unittests_iPad Air 2 13.6", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -48831,7 +49580,8 @@ }, "name": "gfx_unittests_iPad Air 2 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -48881,7 +49631,8 @@ }, "name": "gfx_unittests_iPhone 6s 13.6", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -48931,7 +49682,8 @@ }, "name": "gfx_unittests_iPhone 6s 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -48981,7 +49733,8 @@ }, "name": "gfx_unittests_iPhone 6s Plus 13.6", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -49031,7 +49784,8 @@ }, "name": "gfx_unittests_iPhone 6s Plus 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -49081,7 +49835,8 @@ }, "name": "gfx_unittests_iPhone SE (1st generation) 13.6", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -49131,7 +49886,8 @@ }, "name": "gfx_unittests_iPhone SE (1st generation) 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -49181,7 +49937,8 @@ }, "name": "google_apis_unittests_iPhone 6s 13.6", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -49231,7 +49988,8 @@ }, "name": "google_apis_unittests_iPhone 6s 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -49282,7 +50040,8 @@ }, "name": "ios_chrome_bookmarks_eg2tests_module_iPad Air 2 13.6", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -49333,7 +50092,8 @@ }, "name": "ios_chrome_bookmarks_eg2tests_module_iPad Air 2 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -49384,7 +50144,8 @@ }, "name": "ios_chrome_bookmarks_eg2tests_module_iPhone 7 13.6", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -49435,7 +50196,8 @@ }, "name": "ios_chrome_bookmarks_eg2tests_module_iPhone 7 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -49486,7 +50248,8 @@ }, "name": "ios_chrome_bookmarks_eg2tests_module_iPhone X 13.6", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -49537,7 +50300,8 @@ }, "name": "ios_chrome_bookmarks_eg2tests_module_iPhone X 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -49588,7 +50352,8 @@ }, "name": "ios_chrome_integration_eg2tests_module_iPad Air 2 13.6", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -49640,7 +50405,8 @@ }, "name": "ios_chrome_integration_eg2tests_module_iPad Air 2 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -49692,7 +50458,8 @@ }, "name": "ios_chrome_integration_eg2tests_module_iPad Pro (12.9-inch) (2nd generation) 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -49744,7 +50511,8 @@ }, "name": "ios_chrome_integration_eg2tests_module_iPhone 6s 13.6", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -49796,7 +50564,8 @@ }, "name": "ios_chrome_integration_eg2tests_module_iPhone 7 13.6", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -49848,7 +50617,8 @@ }, "name": "ios_chrome_integration_eg2tests_module_iPhone X 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -49900,7 +50670,8 @@ }, "name": "ios_chrome_settings_eg2tests_module_iPad Air 2 13.6", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -49952,7 +50723,8 @@ }, "name": "ios_chrome_settings_eg2tests_module_iPad Air 2 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -50004,7 +50776,8 @@ }, "name": "ios_chrome_settings_eg2tests_module_iPhone 7 13.6", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -50056,7 +50829,8 @@ }, "name": "ios_chrome_settings_eg2tests_module_iPhone 7 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -50108,7 +50882,8 @@ }, "name": "ios_chrome_settings_eg2tests_module_iPhone X 13.6", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -50160,7 +50935,8 @@ }, "name": "ios_chrome_settings_eg2tests_module_iPhone X 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -50212,7 +50988,8 @@ }, "name": "ios_chrome_signin_eg2tests_module_iPad Air 2 13.6", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -50263,7 +51040,8 @@ }, "name": "ios_chrome_signin_eg2tests_module_iPad Air 2 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -50314,7 +51092,8 @@ }, "name": "ios_chrome_signin_eg2tests_module_iPad Pro (12.9-inch) (2nd generation) 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -50365,7 +51144,8 @@ }, "name": "ios_chrome_signin_eg2tests_module_iPhone 6s 13.6", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -50416,7 +51196,8 @@ }, "name": "ios_chrome_signin_eg2tests_module_iPhone 7 13.6", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -50467,7 +51248,8 @@ }, "name": "ios_chrome_signin_eg2tests_module_iPhone X 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -50518,7 +51300,8 @@ }, "name": "ios_chrome_smoke_eg2tests_module_iPad Air 2 13.6", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -50569,7 +51352,8 @@ }, "name": "ios_chrome_smoke_eg2tests_module_iPad Air 2 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -50620,7 +51404,8 @@ }, "name": "ios_chrome_smoke_eg2tests_module_iPhone 7 13.6", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -50671,7 +51456,8 @@ }, "name": "ios_chrome_smoke_eg2tests_module_iPhone 7 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -50722,7 +51508,8 @@ }, "name": "ios_chrome_smoke_eg2tests_module_iPhone X 13.6", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -50773,7 +51560,8 @@ }, "name": "ios_chrome_smoke_eg2tests_module_iPhone X 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -50824,7 +51612,8 @@ }, "name": "ios_chrome_ui_eg2tests_module_iPad Air 2 13.6", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -50876,7 +51665,8 @@ }, "name": "ios_chrome_ui_eg2tests_module_iPad Air 2 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -50928,7 +51718,8 @@ }, "name": "ios_chrome_ui_eg2tests_module_iPad Pro (12.9-inch) (2nd generation) 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -50980,7 +51771,8 @@ }, "name": "ios_chrome_ui_eg2tests_module_iPhone 6s 13.6", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -51032,7 +51824,8 @@ }, "name": "ios_chrome_ui_eg2tests_module_iPhone 7 13.6", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -51084,7 +51877,8 @@ }, "name": "ios_chrome_ui_eg2tests_module_iPhone X 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -51135,7 +51929,8 @@ }, "name": "ios_chrome_unittests_iPad Air 2 13.6", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -51185,7 +51980,8 @@ }, "name": "ios_chrome_unittests_iPad Air 2 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -51235,7 +52031,8 @@ }, "name": "ios_chrome_unittests_iPhone 6s 13.6", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -51285,7 +52082,8 @@ }, "name": "ios_chrome_unittests_iPhone 6s 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -51335,7 +52133,8 @@ }, "name": "ios_chrome_unittests_iPhone 6s Plus 13.6", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -51385,7 +52184,8 @@ }, "name": "ios_chrome_unittests_iPhone 6s Plus 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -51435,7 +52235,8 @@ }, "name": "ios_chrome_unittests_iPhone SE (1st generation) 13.6", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -51485,7 +52286,8 @@ }, "name": "ios_chrome_unittests_iPhone SE (1st generation) 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -51536,7 +52338,8 @@ }, "name": "ios_chrome_web_eg2tests_module_iPad Air 2 13.6", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -51587,7 +52390,8 @@ }, "name": "ios_chrome_web_eg2tests_module_iPad Air 2 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -51638,7 +52442,8 @@ }, "name": "ios_chrome_web_eg2tests_module_iPhone 7 13.6", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -51689,7 +52494,8 @@ }, "name": "ios_chrome_web_eg2tests_module_iPhone 7 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -51740,7 +52546,8 @@ }, "name": "ios_chrome_web_eg2tests_module_iPhone X 13.6", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -51791,7 +52598,8 @@ }, "name": "ios_chrome_web_eg2tests_module_iPhone X 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -51841,7 +52649,8 @@ }, "name": "ios_components_unittests_iPhone 6s 13.6", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -51891,7 +52700,8 @@ }, "name": "ios_components_unittests_iPhone 6s 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -51941,7 +52751,8 @@ }, "name": "ios_net_unittests_iPhone 6s 13.6", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -51991,7 +52802,8 @@ }, "name": "ios_net_unittests_iPhone 6s 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -52041,7 +52853,8 @@ }, "name": "ios_remoting_unittests_iPhone 6s 13.6", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -52091,7 +52904,8 @@ }, "name": "ios_remoting_unittests_iPhone 6s 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -52142,7 +52956,8 @@ }, "name": "ios_showcase_eg2tests_module_iPad Air 2 13.6", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -52193,7 +53008,8 @@ }, "name": "ios_showcase_eg2tests_module_iPad Air 2 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -52244,7 +53060,8 @@ }, "name": "ios_showcase_eg2tests_module_iPhone 7 13.6", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -52295,7 +53112,8 @@ }, "name": "ios_showcase_eg2tests_module_iPhone 7 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -52346,7 +53164,8 @@ }, "name": "ios_showcase_eg2tests_module_iPhone X 13.6", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -52397,7 +53216,8 @@ }, "name": "ios_showcase_eg2tests_module_iPhone X 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -52447,7 +53267,8 @@ }, "name": "ios_testing_unittests_iPhone 6s 13.6", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -52497,7 +53318,8 @@ }, "name": "ios_testing_unittests_iPhone 6s 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -52547,7 +53369,8 @@ }, "name": "ios_web_inttests_iPad Air 2 13.6", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -52597,7 +53420,8 @@ }, "name": "ios_web_inttests_iPad Air 2 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -52647,7 +53471,8 @@ }, "name": "ios_web_inttests_iPhone 6s 13.6", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -52697,7 +53522,8 @@ }, "name": "ios_web_inttests_iPhone 6s 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -52747,7 +53573,8 @@ }, "name": "ios_web_inttests_iPhone 6s Plus 13.6", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -52797,7 +53624,8 @@ }, "name": "ios_web_inttests_iPhone 6s Plus 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -52847,7 +53675,8 @@ }, "name": "ios_web_inttests_iPhone SE (1st generation) 13.6", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -52897,7 +53726,8 @@ }, "name": "ios_web_inttests_iPhone SE (1st generation) 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -52948,7 +53778,8 @@ }, "name": "ios_web_shell_eg2tests_module_iPad Air 2 13.6", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -52999,7 +53830,8 @@ }, "name": "ios_web_shell_eg2tests_module_iPad Air 2 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -53050,7 +53882,8 @@ }, "name": "ios_web_shell_eg2tests_module_iPad Pro (12.9-inch) (2nd generation) 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -53101,7 +53934,8 @@ }, "name": "ios_web_shell_eg2tests_module_iPhone 6s 13.6", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -53152,7 +53986,8 @@ }, "name": "ios_web_shell_eg2tests_module_iPhone 7 13.6", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -53203,7 +54038,8 @@ }, "name": "ios_web_shell_eg2tests_module_iPhone X 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -53253,7 +54089,8 @@ }, "name": "ios_web_unittests_iPad Air 2 13.6", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -53303,7 +54140,8 @@ }, "name": "ios_web_unittests_iPad Air 2 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -53353,7 +54191,8 @@ }, "name": "ios_web_unittests_iPhone 6s 13.6", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -53403,7 +54242,8 @@ }, "name": "ios_web_unittests_iPhone 6s 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -53453,7 +54293,8 @@ }, "name": "ios_web_unittests_iPhone 6s Plus 13.6", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -53503,7 +54344,8 @@ }, "name": "ios_web_unittests_iPhone 6s Plus 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -53553,7 +54395,8 @@ }, "name": "ios_web_unittests_iPhone SE (1st generation) 13.6", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -53603,7 +54446,8 @@ }, "name": "ios_web_unittests_iPhone SE (1st generation) 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -53653,7 +54497,8 @@ }, "name": "ios_web_view_inttests_iPad Air 2 13.6", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -53703,7 +54548,8 @@ }, "name": "ios_web_view_inttests_iPad Air 2 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -53753,7 +54599,8 @@ }, "name": "ios_web_view_inttests_iPhone 6s 13.6", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -53803,7 +54650,8 @@ }, "name": "ios_web_view_inttests_iPhone 6s 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -53853,7 +54701,8 @@ }, "name": "ios_web_view_inttests_iPhone 6s Plus 13.6", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -53903,7 +54752,8 @@ }, "name": "ios_web_view_inttests_iPhone 6s Plus 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -53953,7 +54803,8 @@ }, "name": "ios_web_view_inttests_iPhone SE (1st generation) 13.6", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -54003,7 +54854,8 @@ }, "name": "ios_web_view_inttests_iPhone SE (1st generation) 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -54053,7 +54905,8 @@ }, "name": "ios_web_view_unittests_iPad Air 2 13.6", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -54103,7 +54956,8 @@ }, "name": "ios_web_view_unittests_iPad Air 2 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -54153,7 +55007,8 @@ }, "name": "ios_web_view_unittests_iPhone 6s 13.6", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -54203,7 +55058,8 @@ }, "name": "ios_web_view_unittests_iPhone 6s 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -54253,7 +55109,8 @@ }, "name": "ios_web_view_unittests_iPhone 6s Plus 13.6", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -54303,7 +55160,8 @@ }, "name": "ios_web_view_unittests_iPhone 6s Plus 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -54353,7 +55211,8 @@ }, "name": "ios_web_view_unittests_iPhone SE (1st generation) 13.6", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -54403,7 +55262,8 @@ }, "name": "ios_web_view_unittests_iPhone SE (1st generation) 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -54453,7 +55313,8 @@ }, "name": "net_unittests_iPhone 6s 13.6", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -54503,7 +55364,8 @@ }, "name": "net_unittests_iPhone 6s 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -54553,7 +55415,8 @@ }, "name": "services_unittests_iPhone 6s 13.6", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -54603,7 +55466,8 @@ }, "name": "services_unittests_iPhone 6s 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -54653,7 +55517,8 @@ }, "name": "skia_unittests_iPad Air 2 13.6", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -54703,7 +55568,8 @@ }, "name": "skia_unittests_iPad Air 2 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -54753,7 +55619,8 @@ }, "name": "skia_unittests_iPhone 6s 13.6", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -54803,7 +55670,8 @@ }, "name": "skia_unittests_iPhone 6s 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -54853,7 +55721,8 @@ }, "name": "skia_unittests_iPhone 6s Plus 13.6", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -54903,7 +55772,8 @@ }, "name": "skia_unittests_iPhone 6s Plus 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -54953,7 +55823,8 @@ }, "name": "skia_unittests_iPhone SE (1st generation) 13.6", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -55003,7 +55874,8 @@ }, "name": "skia_unittests_iPhone SE (1st generation) 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -55053,7 +55925,8 @@ }, "name": "sql_unittests_iPhone 6s 13.6", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -55103,7 +55976,8 @@ }, "name": "sql_unittests_iPhone 6s 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -55153,7 +56027,8 @@ }, "name": "ui_base_unittests_iPad Air 2 13.6", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -55203,7 +56078,8 @@ }, "name": "ui_base_unittests_iPad Air 2 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -55253,7 +56129,8 @@ }, "name": "ui_base_unittests_iPhone 6s 13.6", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -55303,7 +56180,8 @@ }, "name": "ui_base_unittests_iPhone 6s 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -55353,7 +56231,8 @@ }, "name": "ui_base_unittests_iPhone 6s Plus 13.6", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -55403,7 +56282,8 @@ }, "name": "ui_base_unittests_iPhone 6s Plus 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -55453,7 +56333,8 @@ }, "name": "ui_base_unittests_iPhone SE (1st generation) 13.6", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -55503,7 +56384,8 @@ }, "name": "ui_base_unittests_iPhone SE (1st generation) 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -55553,7 +56435,8 @@ }, "name": "url_unittests_iPhone 6s 13.6", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -55603,7 +56486,8 @@ }, "name": "url_unittests_iPhone 6s 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -55660,7 +56544,8 @@ }, "name": "absl_hardening_tests_iPhone 6s 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -55710,7 +56595,8 @@ }, "name": "absl_hardening_tests_iPhone 6s 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -55760,7 +56646,8 @@ }, "name": "base_unittests_iPad Air 2 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -55810,7 +56697,8 @@ }, "name": "base_unittests_iPad Air 2 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -55860,7 +56748,8 @@ }, "name": "base_unittests_iPhone 6s 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -55910,7 +56799,8 @@ }, "name": "base_unittests_iPhone 6s 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -55960,7 +56850,8 @@ }, "name": "base_unittests_iPhone 6s Plus 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -56010,7 +56901,8 @@ }, "name": "base_unittests_iPhone 6s Plus 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -56060,7 +56952,8 @@ }, "name": "base_unittests_iPhone SE (1st generation) 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -56110,7 +57003,8 @@ }, "name": "base_unittests_iPhone SE (1st generation) 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -56160,7 +57054,8 @@ }, "name": "boringssl_crypto_tests_iPhone 6s 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -56210,7 +57105,8 @@ }, "name": "boringssl_crypto_tests_iPhone 6s 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -56260,7 +57156,8 @@ }, "name": "boringssl_ssl_tests_iPhone 6s 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -56310,7 +57207,8 @@ }, "name": "boringssl_ssl_tests_iPhone 6s 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -56360,7 +57258,8 @@ }, "name": "components_unittests_iPad Air 2 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -56410,7 +57309,8 @@ }, "name": "components_unittests_iPad Air 2 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -56460,7 +57360,8 @@ }, "name": "components_unittests_iPhone 6s 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -56510,7 +57411,8 @@ }, "name": "components_unittests_iPhone 6s 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -56560,7 +57462,8 @@ }, "name": "components_unittests_iPhone 6s Plus 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -56610,7 +57513,8 @@ }, "name": "components_unittests_iPhone 6s Plus 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -56660,7 +57564,8 @@ }, "name": "components_unittests_iPhone SE (1st generation) 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -56710,7 +57615,8 @@ }, "name": "components_unittests_iPhone SE (1st generation) 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -56760,7 +57666,8 @@ }, "name": "crypto_unittests_iPhone 6s 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -56810,7 +57717,8 @@ }, "name": "crypto_unittests_iPhone 6s 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -56860,7 +57768,8 @@ }, "name": "gfx_unittests_iPad Air 2 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -56910,7 +57819,8 @@ }, "name": "gfx_unittests_iPad Air 2 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -56960,7 +57870,8 @@ }, "name": "gfx_unittests_iPhone 6s 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -57010,7 +57921,8 @@ }, "name": "gfx_unittests_iPhone 6s 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -57060,7 +57972,8 @@ }, "name": "gfx_unittests_iPhone 6s Plus 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -57110,7 +58023,8 @@ }, "name": "gfx_unittests_iPhone 6s Plus 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -57160,7 +58074,8 @@ }, "name": "gfx_unittests_iPhone SE (1st generation) 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -57210,7 +58125,8 @@ }, "name": "gfx_unittests_iPhone SE (1st generation) 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -57260,7 +58176,8 @@ }, "name": "google_apis_unittests_iPhone 6s 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -57310,7 +58227,8 @@ }, "name": "google_apis_unittests_iPhone 6s 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -57361,7 +58279,8 @@ }, "name": "ios_chrome_bookmarks_eg2tests_module_iPad Air 2 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -57412,7 +58331,8 @@ }, "name": "ios_chrome_bookmarks_eg2tests_module_iPad Air 2 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -57463,7 +58383,8 @@ }, "name": "ios_chrome_bookmarks_eg2tests_module_iPhone 7 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -57514,7 +58435,8 @@ }, "name": "ios_chrome_bookmarks_eg2tests_module_iPhone 7 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -57565,7 +58487,8 @@ }, "name": "ios_chrome_bookmarks_eg2tests_module_iPhone X 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -57616,7 +58539,8 @@ }, "name": "ios_chrome_bookmarks_eg2tests_module_iPhone X 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -57667,7 +58591,8 @@ }, "name": "ios_chrome_integration_eg2tests_module_iPad Air 2 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -57719,7 +58644,8 @@ }, "name": "ios_chrome_integration_eg2tests_module_iPad Air 2 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -57771,7 +58697,8 @@ }, "name": "ios_chrome_integration_eg2tests_module_iPhone 7 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -57823,7 +58750,8 @@ }, "name": "ios_chrome_integration_eg2tests_module_iPhone 7 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -57875,7 +58803,8 @@ }, "name": "ios_chrome_integration_eg2tests_module_iPhone X 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -57927,7 +58856,8 @@ }, "name": "ios_chrome_integration_eg2tests_module_iPhone X 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -57979,7 +58909,8 @@ }, "name": "ios_chrome_settings_eg2tests_module_iPad Air 2 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -58031,7 +58962,8 @@ }, "name": "ios_chrome_settings_eg2tests_module_iPad Air 2 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -58083,7 +59015,8 @@ }, "name": "ios_chrome_settings_eg2tests_module_iPhone 7 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -58135,7 +59068,8 @@ }, "name": "ios_chrome_settings_eg2tests_module_iPhone 7 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -58187,7 +59121,8 @@ }, "name": "ios_chrome_settings_eg2tests_module_iPhone X 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -58239,7 +59174,8 @@ }, "name": "ios_chrome_settings_eg2tests_module_iPhone X 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -58291,7 +59227,8 @@ }, "name": "ios_chrome_signin_eg2tests_module_iPad Air 2 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -58342,7 +59279,8 @@ }, "name": "ios_chrome_signin_eg2tests_module_iPad Air 2 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -58393,7 +59331,8 @@ }, "name": "ios_chrome_signin_eg2tests_module_iPhone 7 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -58444,7 +59383,8 @@ }, "name": "ios_chrome_signin_eg2tests_module_iPhone 7 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -58495,7 +59435,8 @@ }, "name": "ios_chrome_signin_eg2tests_module_iPhone X 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -58546,7 +59487,8 @@ }, "name": "ios_chrome_signin_eg2tests_module_iPhone X 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -58597,7 +59539,8 @@ }, "name": "ios_chrome_smoke_eg2tests_module_iPad Air 2 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -58648,7 +59591,8 @@ }, "name": "ios_chrome_smoke_eg2tests_module_iPad Air 2 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -58699,7 +59643,8 @@ }, "name": "ios_chrome_smoke_eg2tests_module_iPhone 7 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -58750,7 +59695,8 @@ }, "name": "ios_chrome_smoke_eg2tests_module_iPhone 7 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -58801,7 +59747,8 @@ }, "name": "ios_chrome_smoke_eg2tests_module_iPhone X 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -58852,7 +59799,8 @@ }, "name": "ios_chrome_smoke_eg2tests_module_iPhone X 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -58903,7 +59851,8 @@ }, "name": "ios_chrome_ui_eg2tests_module_iPad Air 2 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -58955,7 +59904,8 @@ }, "name": "ios_chrome_ui_eg2tests_module_iPad Air 2 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -59007,7 +59957,8 @@ }, "name": "ios_chrome_ui_eg2tests_module_iPhone 7 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -59059,7 +60010,8 @@ }, "name": "ios_chrome_ui_eg2tests_module_iPhone 7 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -59111,7 +60063,8 @@ }, "name": "ios_chrome_ui_eg2tests_module_iPhone X 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -59163,7 +60116,8 @@ }, "name": "ios_chrome_ui_eg2tests_module_iPhone X 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -59214,7 +60168,8 @@ }, "name": "ios_chrome_unittests_iPad Air 2 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -59264,7 +60219,8 @@ }, "name": "ios_chrome_unittests_iPad Air 2 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -59314,7 +60270,8 @@ }, "name": "ios_chrome_unittests_iPhone 6s 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -59364,7 +60321,8 @@ }, "name": "ios_chrome_unittests_iPhone 6s 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -59414,7 +60372,8 @@ }, "name": "ios_chrome_unittests_iPhone 6s Plus 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -59464,7 +60423,8 @@ }, "name": "ios_chrome_unittests_iPhone 6s Plus 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -59514,7 +60474,8 @@ }, "name": "ios_chrome_unittests_iPhone SE (1st generation) 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -59564,7 +60525,8 @@ }, "name": "ios_chrome_unittests_iPhone SE (1st generation) 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -59615,7 +60577,8 @@ }, "name": "ios_chrome_web_eg2tests_module_iPad Air 2 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -59666,7 +60629,8 @@ }, "name": "ios_chrome_web_eg2tests_module_iPad Air 2 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -59717,7 +60681,8 @@ }, "name": "ios_chrome_web_eg2tests_module_iPhone 7 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -59768,7 +60733,8 @@ }, "name": "ios_chrome_web_eg2tests_module_iPhone 7 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -59819,7 +60785,8 @@ }, "name": "ios_chrome_web_eg2tests_module_iPhone X 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -59870,7 +60837,8 @@ }, "name": "ios_chrome_web_eg2tests_module_iPhone X 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -59920,7 +60888,8 @@ }, "name": "ios_components_unittests_iPhone 6s 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -59970,7 +60939,8 @@ }, "name": "ios_components_unittests_iPhone 6s 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -60020,7 +60990,8 @@ }, "name": "ios_net_unittests_iPhone 6s 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -60070,7 +61041,8 @@ }, "name": "ios_net_unittests_iPhone 6s 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -60120,7 +61092,8 @@ }, "name": "ios_remoting_unittests_iPhone 6s 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -60170,7 +61143,8 @@ }, "name": "ios_remoting_unittests_iPhone 6s 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -60221,7 +61195,8 @@ }, "name": "ios_showcase_eg2tests_module_iPad Air 2 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -60272,7 +61247,8 @@ }, "name": "ios_showcase_eg2tests_module_iPad Air 2 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -60323,7 +61299,8 @@ }, "name": "ios_showcase_eg2tests_module_iPhone 7 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -60374,7 +61351,8 @@ }, "name": "ios_showcase_eg2tests_module_iPhone 7 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -60425,7 +61403,8 @@ }, "name": "ios_showcase_eg2tests_module_iPhone X 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -60476,7 +61455,8 @@ }, "name": "ios_showcase_eg2tests_module_iPhone X 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -60526,7 +61506,8 @@ }, "name": "ios_testing_unittests_iPhone 6s 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -60576,7 +61557,8 @@ }, "name": "ios_testing_unittests_iPhone 6s 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -60626,7 +61608,8 @@ }, "name": "ios_web_inttests_iPad Air 2 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -60676,7 +61659,8 @@ }, "name": "ios_web_inttests_iPad Air 2 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -60726,7 +61710,8 @@ }, "name": "ios_web_inttests_iPhone 6s 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -60776,7 +61761,8 @@ }, "name": "ios_web_inttests_iPhone 6s 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -60826,7 +61812,8 @@ }, "name": "ios_web_inttests_iPhone 6s Plus 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -60876,7 +61863,8 @@ }, "name": "ios_web_inttests_iPhone 6s Plus 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -60926,7 +61914,8 @@ }, "name": "ios_web_inttests_iPhone SE (1st generation) 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -60976,7 +61965,8 @@ }, "name": "ios_web_inttests_iPhone SE (1st generation) 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -61027,7 +62017,8 @@ }, "name": "ios_web_shell_eg2tests_module_iPad Air 2 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -61078,7 +62069,8 @@ }, "name": "ios_web_shell_eg2tests_module_iPad Air 2 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -61129,7 +62121,8 @@ }, "name": "ios_web_shell_eg2tests_module_iPhone 7 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -61180,7 +62173,8 @@ }, "name": "ios_web_shell_eg2tests_module_iPhone 7 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -61231,7 +62225,8 @@ }, "name": "ios_web_shell_eg2tests_module_iPhone X 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -61282,7 +62277,8 @@ }, "name": "ios_web_shell_eg2tests_module_iPhone X 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -61332,7 +62328,8 @@ }, "name": "ios_web_unittests_iPad Air 2 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -61382,7 +62379,8 @@ }, "name": "ios_web_unittests_iPad Air 2 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -61432,7 +62430,8 @@ }, "name": "ios_web_unittests_iPhone 6s 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -61482,7 +62481,8 @@ }, "name": "ios_web_unittests_iPhone 6s 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -61532,7 +62532,8 @@ }, "name": "ios_web_unittests_iPhone 6s Plus 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -61582,7 +62583,8 @@ }, "name": "ios_web_unittests_iPhone 6s Plus 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -61632,7 +62634,8 @@ }, "name": "ios_web_unittests_iPhone SE (1st generation) 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -61682,7 +62685,8 @@ }, "name": "ios_web_unittests_iPhone SE (1st generation) 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -61732,7 +62736,8 @@ }, "name": "ios_web_view_inttests_iPad Air 2 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -61782,7 +62787,8 @@ }, "name": "ios_web_view_inttests_iPad Air 2 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -61832,7 +62838,8 @@ }, "name": "ios_web_view_inttests_iPhone 6s 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -61882,7 +62889,8 @@ }, "name": "ios_web_view_inttests_iPhone 6s 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -61932,7 +62940,8 @@ }, "name": "ios_web_view_inttests_iPhone 6s Plus 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -61982,7 +62991,8 @@ }, "name": "ios_web_view_inttests_iPhone 6s Plus 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -62032,7 +63042,8 @@ }, "name": "ios_web_view_inttests_iPhone SE (1st generation) 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -62082,7 +63093,8 @@ }, "name": "ios_web_view_inttests_iPhone SE (1st generation) 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -62132,7 +63144,8 @@ }, "name": "ios_web_view_unittests_iPad Air 2 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -62182,7 +63195,8 @@ }, "name": "ios_web_view_unittests_iPad Air 2 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -62232,7 +63246,8 @@ }, "name": "ios_web_view_unittests_iPhone 6s 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -62282,7 +63297,8 @@ }, "name": "ios_web_view_unittests_iPhone 6s 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -62332,7 +63348,8 @@ }, "name": "ios_web_view_unittests_iPhone 6s Plus 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -62382,7 +63399,8 @@ }, "name": "ios_web_view_unittests_iPhone 6s Plus 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -62432,7 +63450,8 @@ }, "name": "ios_web_view_unittests_iPhone SE (1st generation) 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -62482,7 +63501,8 @@ }, "name": "ios_web_view_unittests_iPhone SE (1st generation) 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -62532,7 +63552,8 @@ }, "name": "net_unittests_iPhone 6s 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -62582,7 +63603,8 @@ }, "name": "net_unittests_iPhone 6s 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -62632,7 +63654,8 @@ }, "name": "services_unittests_iPhone 6s 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -62682,7 +63705,8 @@ }, "name": "services_unittests_iPhone 6s 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -62732,7 +63756,8 @@ }, "name": "skia_unittests_iPad Air 2 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -62782,7 +63807,8 @@ }, "name": "skia_unittests_iPad Air 2 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -62832,7 +63858,8 @@ }, "name": "skia_unittests_iPhone 6s 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -62882,7 +63909,8 @@ }, "name": "skia_unittests_iPhone 6s 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -62932,7 +63960,8 @@ }, "name": "skia_unittests_iPhone 6s Plus 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -62982,7 +64011,8 @@ }, "name": "skia_unittests_iPhone 6s Plus 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -63032,7 +64062,8 @@ }, "name": "skia_unittests_iPhone SE (1st generation) 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -63082,7 +64113,8 @@ }, "name": "skia_unittests_iPhone SE (1st generation) 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -63132,7 +64164,8 @@ }, "name": "sql_unittests_iPhone 6s 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -63182,7 +64215,8 @@ }, "name": "sql_unittests_iPhone 6s 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -63232,7 +64266,8 @@ }, "name": "ui_base_unittests_iPad Air 2 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -63282,7 +64317,8 @@ }, "name": "ui_base_unittests_iPad Air 2 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -63332,7 +64368,8 @@ }, "name": "ui_base_unittests_iPhone 6s 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -63382,7 +64419,8 @@ }, "name": "ui_base_unittests_iPhone 6s 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -63432,7 +64470,8 @@ }, "name": "ui_base_unittests_iPhone 6s Plus 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -63482,7 +64521,8 @@ }, "name": "ui_base_unittests_iPhone 6s Plus 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -63532,7 +64572,8 @@ }, "name": "ui_base_unittests_iPhone SE (1st generation) 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -63582,7 +64623,8 @@ }, "name": "ui_base_unittests_iPhone SE (1st generation) 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -63632,7 +64674,8 @@ }, "name": "url_unittests_iPhone 6s 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -63682,7 +64725,8 @@ }, "name": "url_unittests_iPhone 6s 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -63744,7 +64788,8 @@ }, "name": "absl_hardening_tests_iPhone 6s 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -63794,7 +64839,8 @@ }, "name": "absl_hardening_tests_iPhone 6s 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -63844,7 +64890,8 @@ }, "name": "base_unittests_iPad Air 2 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -63894,7 +64941,8 @@ }, "name": "base_unittests_iPad Air 2 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -63944,7 +64992,8 @@ }, "name": "base_unittests_iPhone 6s 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -63994,7 +65043,8 @@ }, "name": "base_unittests_iPhone 6s 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -64044,7 +65094,8 @@ }, "name": "base_unittests_iPhone 6s Plus 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -64094,7 +65145,8 @@ }, "name": "base_unittests_iPhone 6s Plus 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -64144,7 +65196,8 @@ }, "name": "base_unittests_iPhone SE (1st generation) 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -64194,7 +65247,8 @@ }, "name": "base_unittests_iPhone SE (1st generation) 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -64244,7 +65298,8 @@ }, "name": "boringssl_crypto_tests_iPhone 6s 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -64294,7 +65349,8 @@ }, "name": "boringssl_crypto_tests_iPhone 6s 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -64344,7 +65400,8 @@ }, "name": "boringssl_ssl_tests_iPhone 6s 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -64394,7 +65451,8 @@ }, "name": "boringssl_ssl_tests_iPhone 6s 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -64444,7 +65502,8 @@ }, "name": "components_unittests_iPad Air 2 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -64494,7 +65553,8 @@ }, "name": "components_unittests_iPad Air 2 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -64544,7 +65604,8 @@ }, "name": "components_unittests_iPhone 6s 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -64594,7 +65655,8 @@ }, "name": "components_unittests_iPhone 6s 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -64644,7 +65706,8 @@ }, "name": "components_unittests_iPhone 6s Plus 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -64694,7 +65757,8 @@ }, "name": "components_unittests_iPhone 6s Plus 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -64744,7 +65808,8 @@ }, "name": "components_unittests_iPhone SE (1st generation) 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -64794,7 +65859,8 @@ }, "name": "components_unittests_iPhone SE (1st generation) 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -64844,7 +65910,8 @@ }, "name": "crypto_unittests_iPhone 6s 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -64894,7 +65961,8 @@ }, "name": "crypto_unittests_iPhone 6s 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -64944,7 +66012,8 @@ }, "name": "gfx_unittests_iPad Air 2 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -64994,7 +66063,8 @@ }, "name": "gfx_unittests_iPad Air 2 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -65044,7 +66114,8 @@ }, "name": "gfx_unittests_iPhone 6s 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -65094,7 +66165,8 @@ }, "name": "gfx_unittests_iPhone 6s 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -65144,7 +66216,8 @@ }, "name": "gfx_unittests_iPhone 6s Plus 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -65194,7 +66267,8 @@ }, "name": "gfx_unittests_iPhone 6s Plus 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -65244,7 +66318,8 @@ }, "name": "gfx_unittests_iPhone SE (1st generation) 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -65294,7 +66369,8 @@ }, "name": "gfx_unittests_iPhone SE (1st generation) 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -65344,7 +66420,8 @@ }, "name": "google_apis_unittests_iPhone 6s 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -65394,7 +66471,8 @@ }, "name": "google_apis_unittests_iPhone 6s 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -65445,7 +66523,8 @@ }, "name": "ios_chrome_bookmarks_eg2tests_module_iPad Air 2 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -65496,7 +66575,8 @@ }, "name": "ios_chrome_bookmarks_eg2tests_module_iPad Air 2 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -65547,7 +66627,8 @@ }, "name": "ios_chrome_bookmarks_eg2tests_module_iPhone 7 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -65598,7 +66679,8 @@ }, "name": "ios_chrome_bookmarks_eg2tests_module_iPhone 7 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -65649,7 +66731,8 @@ }, "name": "ios_chrome_bookmarks_eg2tests_module_iPhone X 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -65700,7 +66783,8 @@ }, "name": "ios_chrome_bookmarks_eg2tests_module_iPhone X 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -65751,7 +66835,8 @@ }, "name": "ios_chrome_integration_eg2tests_module_iPad Air 2 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -65803,7 +66888,8 @@ }, "name": "ios_chrome_integration_eg2tests_module_iPad Air 2 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -65855,7 +66941,8 @@ }, "name": "ios_chrome_integration_eg2tests_module_iPhone 7 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -65907,7 +66994,8 @@ }, "name": "ios_chrome_integration_eg2tests_module_iPhone 7 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -65959,7 +67047,8 @@ }, "name": "ios_chrome_integration_eg2tests_module_iPhone X 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -66011,7 +67100,8 @@ }, "name": "ios_chrome_integration_eg2tests_module_iPhone X 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -66063,7 +67153,8 @@ }, "name": "ios_chrome_settings_eg2tests_module_iPad Air 2 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -66115,7 +67206,8 @@ }, "name": "ios_chrome_settings_eg2tests_module_iPad Air 2 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -66167,7 +67259,8 @@ }, "name": "ios_chrome_settings_eg2tests_module_iPhone 7 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -66219,7 +67312,8 @@ }, "name": "ios_chrome_settings_eg2tests_module_iPhone 7 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -66271,7 +67365,8 @@ }, "name": "ios_chrome_settings_eg2tests_module_iPhone X 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -66323,7 +67418,8 @@ }, "name": "ios_chrome_settings_eg2tests_module_iPhone X 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -66375,7 +67471,8 @@ }, "name": "ios_chrome_signin_eg2tests_module_iPad Air 2 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -66426,7 +67523,8 @@ }, "name": "ios_chrome_signin_eg2tests_module_iPad Air 2 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -66477,7 +67575,8 @@ }, "name": "ios_chrome_signin_eg2tests_module_iPhone 7 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -66528,7 +67627,8 @@ }, "name": "ios_chrome_signin_eg2tests_module_iPhone 7 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -66579,7 +67679,8 @@ }, "name": "ios_chrome_signin_eg2tests_module_iPhone X 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -66630,7 +67731,8 @@ }, "name": "ios_chrome_signin_eg2tests_module_iPhone X 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -66681,7 +67783,8 @@ }, "name": "ios_chrome_smoke_eg2tests_module_iPad Air 2 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -66732,7 +67835,8 @@ }, "name": "ios_chrome_smoke_eg2tests_module_iPad Air 2 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -66783,7 +67887,8 @@ }, "name": "ios_chrome_smoke_eg2tests_module_iPhone 7 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -66834,7 +67939,8 @@ }, "name": "ios_chrome_smoke_eg2tests_module_iPhone 7 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -66885,7 +67991,8 @@ }, "name": "ios_chrome_smoke_eg2tests_module_iPhone X 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -66936,7 +68043,8 @@ }, "name": "ios_chrome_smoke_eg2tests_module_iPhone X 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -66987,7 +68095,8 @@ }, "name": "ios_chrome_ui_eg2tests_module_iPad Air 2 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -67039,7 +68148,8 @@ }, "name": "ios_chrome_ui_eg2tests_module_iPad Air 2 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -67091,7 +68201,8 @@ }, "name": "ios_chrome_ui_eg2tests_module_iPhone 7 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -67143,7 +68254,8 @@ }, "name": "ios_chrome_ui_eg2tests_module_iPhone 7 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -67195,7 +68307,8 @@ }, "name": "ios_chrome_ui_eg2tests_module_iPhone X 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -67247,7 +68360,8 @@ }, "name": "ios_chrome_ui_eg2tests_module_iPhone X 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -67298,7 +68412,8 @@ }, "name": "ios_chrome_unittests_iPad Air 2 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -67348,7 +68463,8 @@ }, "name": "ios_chrome_unittests_iPad Air 2 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -67398,7 +68514,8 @@ }, "name": "ios_chrome_unittests_iPhone 6s 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -67448,7 +68565,8 @@ }, "name": "ios_chrome_unittests_iPhone 6s 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -67498,7 +68616,8 @@ }, "name": "ios_chrome_unittests_iPhone 6s Plus 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -67548,7 +68667,8 @@ }, "name": "ios_chrome_unittests_iPhone 6s Plus 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -67598,7 +68718,8 @@ }, "name": "ios_chrome_unittests_iPhone SE (1st generation) 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -67648,7 +68769,8 @@ }, "name": "ios_chrome_unittests_iPhone SE (1st generation) 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -67699,7 +68821,8 @@ }, "name": "ios_chrome_web_eg2tests_module_iPad Air 2 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -67750,7 +68873,8 @@ }, "name": "ios_chrome_web_eg2tests_module_iPad Air 2 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -67801,7 +68925,8 @@ }, "name": "ios_chrome_web_eg2tests_module_iPhone 7 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -67852,7 +68977,8 @@ }, "name": "ios_chrome_web_eg2tests_module_iPhone 7 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -67903,7 +69029,8 @@ }, "name": "ios_chrome_web_eg2tests_module_iPhone X 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -67954,7 +69081,8 @@ }, "name": "ios_chrome_web_eg2tests_module_iPhone X 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -68004,7 +69132,8 @@ }, "name": "ios_components_unittests_iPhone 6s 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -68054,7 +69183,8 @@ }, "name": "ios_components_unittests_iPhone 6s 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -68104,7 +69234,8 @@ }, "name": "ios_net_unittests_iPhone 6s 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -68154,7 +69285,8 @@ }, "name": "ios_net_unittests_iPhone 6s 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -68204,7 +69336,8 @@ }, "name": "ios_remoting_unittests_iPhone 6s 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -68254,7 +69387,8 @@ }, "name": "ios_remoting_unittests_iPhone 6s 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -68305,7 +69439,8 @@ }, "name": "ios_showcase_eg2tests_module_iPad Air 2 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -68356,7 +69491,8 @@ }, "name": "ios_showcase_eg2tests_module_iPad Air 2 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -68407,7 +69543,8 @@ }, "name": "ios_showcase_eg2tests_module_iPhone 7 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -68458,7 +69595,8 @@ }, "name": "ios_showcase_eg2tests_module_iPhone 7 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -68509,7 +69647,8 @@ }, "name": "ios_showcase_eg2tests_module_iPhone X 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -68560,7 +69699,8 @@ }, "name": "ios_showcase_eg2tests_module_iPhone X 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -68610,7 +69750,8 @@ }, "name": "ios_testing_unittests_iPhone 6s 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -68660,7 +69801,8 @@ }, "name": "ios_testing_unittests_iPhone 6s 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -68710,7 +69852,8 @@ }, "name": "ios_web_inttests_iPad Air 2 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -68760,7 +69903,8 @@ }, "name": "ios_web_inttests_iPad Air 2 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -68810,7 +69954,8 @@ }, "name": "ios_web_inttests_iPhone 6s 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -68860,7 +70005,8 @@ }, "name": "ios_web_inttests_iPhone 6s 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -68910,7 +70056,8 @@ }, "name": "ios_web_inttests_iPhone 6s Plus 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -68960,7 +70107,8 @@ }, "name": "ios_web_inttests_iPhone 6s Plus 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -69010,7 +70158,8 @@ }, "name": "ios_web_inttests_iPhone SE (1st generation) 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -69060,7 +70209,8 @@ }, "name": "ios_web_inttests_iPhone SE (1st generation) 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -69111,7 +70261,8 @@ }, "name": "ios_web_shell_eg2tests_module_iPad Air 2 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -69162,7 +70313,8 @@ }, "name": "ios_web_shell_eg2tests_module_iPad Air 2 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -69213,7 +70365,8 @@ }, "name": "ios_web_shell_eg2tests_module_iPhone 7 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -69264,7 +70417,8 @@ }, "name": "ios_web_shell_eg2tests_module_iPhone 7 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -69315,7 +70469,8 @@ }, "name": "ios_web_shell_eg2tests_module_iPhone X 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -69366,7 +70521,8 @@ }, "name": "ios_web_shell_eg2tests_module_iPhone X 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -69416,7 +70572,8 @@ }, "name": "ios_web_unittests_iPad Air 2 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -69466,7 +70623,8 @@ }, "name": "ios_web_unittests_iPad Air 2 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -69516,7 +70674,8 @@ }, "name": "ios_web_unittests_iPhone 6s 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -69566,7 +70725,8 @@ }, "name": "ios_web_unittests_iPhone 6s 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -69616,7 +70776,8 @@ }, "name": "ios_web_unittests_iPhone 6s Plus 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -69666,7 +70827,8 @@ }, "name": "ios_web_unittests_iPhone 6s Plus 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -69716,7 +70878,8 @@ }, "name": "ios_web_unittests_iPhone SE (1st generation) 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -69766,7 +70929,8 @@ }, "name": "ios_web_unittests_iPhone SE (1st generation) 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -69816,7 +70980,8 @@ }, "name": "ios_web_view_inttests_iPad Air 2 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -69866,7 +71031,8 @@ }, "name": "ios_web_view_inttests_iPad Air 2 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -69916,7 +71082,8 @@ }, "name": "ios_web_view_inttests_iPhone 6s 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -69966,7 +71133,8 @@ }, "name": "ios_web_view_inttests_iPhone 6s 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -70016,7 +71184,8 @@ }, "name": "ios_web_view_inttests_iPhone 6s Plus 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -70066,7 +71235,8 @@ }, "name": "ios_web_view_inttests_iPhone 6s Plus 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -70116,7 +71286,8 @@ }, "name": "ios_web_view_inttests_iPhone SE (1st generation) 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -70166,7 +71337,8 @@ }, "name": "ios_web_view_inttests_iPhone SE (1st generation) 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -70216,7 +71388,8 @@ }, "name": "ios_web_view_unittests_iPad Air 2 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -70266,7 +71439,8 @@ }, "name": "ios_web_view_unittests_iPad Air 2 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -70316,7 +71490,8 @@ }, "name": "ios_web_view_unittests_iPhone 6s 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -70366,7 +71541,8 @@ }, "name": "ios_web_view_unittests_iPhone 6s 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -70416,7 +71592,8 @@ }, "name": "ios_web_view_unittests_iPhone 6s Plus 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -70466,7 +71643,8 @@ }, "name": "ios_web_view_unittests_iPhone 6s Plus 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -70516,7 +71694,8 @@ }, "name": "ios_web_view_unittests_iPhone SE (1st generation) 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -70566,7 +71745,8 @@ }, "name": "ios_web_view_unittests_iPhone SE (1st generation) 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -70616,7 +71796,8 @@ }, "name": "net_unittests_iPhone 6s 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -70666,7 +71847,8 @@ }, "name": "net_unittests_iPhone 6s 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -70716,7 +71898,8 @@ }, "name": "services_unittests_iPhone 6s 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -70766,7 +71949,8 @@ }, "name": "services_unittests_iPhone 6s 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -70816,7 +72000,8 @@ }, "name": "skia_unittests_iPad Air 2 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -70866,7 +72051,8 @@ }, "name": "skia_unittests_iPad Air 2 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -70916,7 +72102,8 @@ }, "name": "skia_unittests_iPhone 6s 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -70966,7 +72153,8 @@ }, "name": "skia_unittests_iPhone 6s 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -71016,7 +72204,8 @@ }, "name": "skia_unittests_iPhone 6s Plus 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -71066,7 +72255,8 @@ }, "name": "skia_unittests_iPhone 6s Plus 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -71116,7 +72306,8 @@ }, "name": "skia_unittests_iPhone SE (1st generation) 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -71166,7 +72357,8 @@ }, "name": "skia_unittests_iPhone SE (1st generation) 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -71216,7 +72408,8 @@ }, "name": "sql_unittests_iPhone 6s 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -71266,7 +72459,8 @@ }, "name": "sql_unittests_iPhone 6s 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -71316,7 +72510,8 @@ }, "name": "ui_base_unittests_iPad Air 2 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -71366,7 +72561,8 @@ }, "name": "ui_base_unittests_iPad Air 2 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -71416,7 +72612,8 @@ }, "name": "ui_base_unittests_iPhone 6s 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -71466,7 +72663,8 @@ }, "name": "ui_base_unittests_iPhone 6s 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -71516,7 +72714,8 @@ }, "name": "ui_base_unittests_iPhone 6s Plus 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -71566,7 +72765,8 @@ }, "name": "ui_base_unittests_iPhone 6s Plus 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -71616,7 +72816,8 @@ }, "name": "ui_base_unittests_iPhone SE (1st generation) 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -71666,7 +72867,8 @@ }, "name": "ui_base_unittests_iPhone SE (1st generation) 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -71716,7 +72918,8 @@ }, "name": "url_unittests_iPhone 6s 14.5", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -71766,7 +72969,8 @@ }, "name": "url_unittests_iPhone 6s 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -71825,7 +73029,8 @@ }, "name": "aura_unittests_amd64-generic", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -71852,7 +73057,8 @@ }, "name": "aura_unittests_eve", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -71881,7 +73087,8 @@ }, "name": "cc_unittests_amd64-generic", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -71908,7 +73115,8 @@ }, "name": "cc_unittests_eve", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -71937,7 +73145,8 @@ }, "name": "interactive_ui_tests_amd64-generic", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -71964,7 +73173,8 @@ }, "name": "interactive_ui_tests_eve", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -71993,7 +73203,8 @@ }, "name": "lacros_fyi_tast_tests_amd64-generic", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -72021,7 +73232,8 @@ }, "name": "lacros_fyi_tast_tests_eve", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -72051,7 +73263,8 @@ }, "name": "ozone_unittests_amd64-generic", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -72078,7 +73291,8 @@ }, "name": "ozone_unittests_eve", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -90917,6 +92131,11 @@ "test_id_prefix": "ninja://chrome/test:unit_tests/" }, { + "args": [ + "--test-launcher-timeout=90000", + "--ui-test-action-max-timeout=45000", + "--ui-test-action-timeout=40000" + ], "isolate_profile_data": true, "merge": { "args": [], @@ -92511,6 +93730,11 @@ "test_id_prefix": "ninja://chrome/test:unit_tests/" }, { + "args": [ + "--test-launcher-timeout=90000", + "--ui-test-action-max-timeout=45000", + "--ui-test-action-timeout=40000" + ], "merge": { "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" @@ -93887,6 +95111,11 @@ "test_id_prefix": "ninja://chrome/test:unit_tests/" }, { + "args": [ + "--test-launcher-timeout=90000", + "--ui-test-action-max-timeout=45000", + "--ui-test-action-timeout=40000" + ], "merge": { "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" @@ -94853,6 +96082,11 @@ "test_id_prefix": "ninja://chrome/test:unit_tests/" }, { + "args": [ + "--test-launcher-timeout=90000", + "--ui-test-action-max-timeout=45000", + "--ui-test-action-timeout=40000" + ], "merge": { "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" @@ -96768,6 +98002,11 @@ "test_id_prefix": "ninja://chrome/test:unit_tests/" }, { + "args": [ + "--test-launcher-timeout=90000", + "--ui-test-action-max-timeout=45000", + "--ui-test-action-timeout=40000" + ], "merge": { "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" @@ -98355,6 +99594,11 @@ "test_id_prefix": "ninja://chrome/test:unit_tests/" }, { + "args": [ + "--test-launcher-timeout=90000", + "--ui-test-action-max-timeout=45000", + "--ui-test-action-timeout=40000" + ], "isolate_profile_data": true, "merge": { "args": [],
diff --git a/testing/buildbot/chromium.gpu.fyi.json b/testing/buildbot/chromium.gpu.fyi.json index 9f6ce08e..9b896ec 100644 --- a/testing/buildbot/chromium.gpu.fyi.json +++ b/testing/buildbot/chromium.gpu.fyi.json
@@ -15,7 +15,8 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -52,7 +53,8 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -97,7 +99,8 @@ }, "name": "webgl_conformance_gles_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -302,7 +305,8 @@ }, "name": "info_collection_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -336,7 +340,8 @@ }, "name": "trace_test", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -372,7 +377,8 @@ }, "name": "webgl2_conformance_gl_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -408,7 +414,8 @@ }, "name": "webgl_conformance_gl_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -605,7 +612,8 @@ }, "name": "info_collection_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -639,7 +647,8 @@ }, "name": "trace_test", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -675,7 +684,8 @@ }, "name": "webgl2_conformance_gl_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -711,7 +721,8 @@ }, "name": "webgl_conformance_gl_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -744,7 +755,8 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -783,7 +795,8 @@ }, "name": "gl_tests_validating", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -829,7 +842,8 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -875,7 +889,8 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -929,7 +944,8 @@ }, "name": "context_lost_validating_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -972,7 +988,8 @@ }, "name": "depth_capture_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -1015,7 +1032,8 @@ }, "name": "gpu_process_launch_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -1058,7 +1076,8 @@ }, "name": "hardware_accelerated_feature_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -1105,7 +1124,8 @@ }, "name": "info_collection_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -1157,7 +1177,8 @@ "--buildbucket-id=${buildbucket_build_id}" ], "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -1209,7 +1230,8 @@ "--buildbucket-id=${buildbucket_build_id}" ], "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -1253,7 +1275,8 @@ }, "name": "screenshot_sync_validating_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -1296,7 +1319,8 @@ }, "name": "trace_test", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -1340,7 +1364,8 @@ }, "name": "webgl_conformance_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -1382,7 +1407,8 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -1421,7 +1447,8 @@ }, "name": "gl_tests_validating", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -1467,7 +1494,8 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -1513,7 +1541,8 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -1567,7 +1596,8 @@ }, "name": "context_lost_validating_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -1610,7 +1640,8 @@ }, "name": "depth_capture_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -1653,7 +1684,8 @@ }, "name": "gpu_process_launch_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -1696,7 +1728,8 @@ }, "name": "hardware_accelerated_feature_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -1743,7 +1776,8 @@ }, "name": "info_collection_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -1795,7 +1829,8 @@ "--buildbucket-id=${buildbucket_build_id}" ], "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -1847,7 +1882,8 @@ "--buildbucket-id=${buildbucket_build_id}" ], "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -1891,7 +1927,8 @@ }, "name": "screenshot_sync_validating_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -1934,7 +1971,8 @@ }, "name": "trace_test", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -1978,7 +2016,8 @@ }, "name": "webgl_conformance_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -2022,7 +2061,8 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -2059,7 +2099,8 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -2121,7 +2162,8 @@ "--buildbucket-id=${buildbucket_build_id}" ], "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -2163,7 +2205,8 @@ }, "name": "context_lost_validating_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -2205,7 +2248,8 @@ }, "name": "depth_capture_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -2247,7 +2291,8 @@ }, "name": "gpu_process_launch_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -2289,7 +2334,8 @@ }, "name": "hardware_accelerated_feature_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -2335,7 +2381,8 @@ }, "name": "info_collection_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -2386,7 +2433,8 @@ "--buildbucket-id=${buildbucket_build_id}" ], "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -2428,7 +2476,8 @@ }, "name": "mediapipe_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -2470,7 +2519,8 @@ }, "name": "mediapipe_validating_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -2521,7 +2571,8 @@ "--buildbucket-id=${buildbucket_build_id}" ], "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -2560,7 +2611,8 @@ }, "name": "rendering_representative_perf_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -2601,7 +2653,8 @@ }, "name": "screenshot_sync_validating_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -2643,7 +2696,8 @@ }, "name": "trace_test", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -2685,7 +2739,8 @@ }, "name": "webcodecs_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -2728,7 +2783,8 @@ }, "name": "webgl_conformance_gles_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -2772,7 +2828,8 @@ }, "name": "webgl_conformance_validating_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -2813,7 +2870,8 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -2852,7 +2910,8 @@ }, "name": "gl_tests_validating", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -2898,7 +2957,8 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -2944,7 +3004,8 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -2998,7 +3059,8 @@ }, "name": "context_lost_validating_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -3041,7 +3103,8 @@ }, "name": "depth_capture_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -3084,7 +3147,8 @@ }, "name": "gpu_process_launch_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -3127,7 +3191,8 @@ }, "name": "hardware_accelerated_feature_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -3174,7 +3239,8 @@ }, "name": "info_collection_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -3226,7 +3292,8 @@ "--buildbucket-id=${buildbucket_build_id}" ], "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -3278,7 +3345,8 @@ "--buildbucket-id=${buildbucket_build_id}" ], "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -3322,7 +3390,8 @@ }, "name": "screenshot_sync_validating_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -3365,7 +3434,8 @@ }, "name": "trace_test", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -3409,7 +3479,8 @@ }, "name": "webgl_conformance_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -3451,7 +3522,8 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -3490,7 +3562,8 @@ }, "name": "gl_tests_validating", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -3536,7 +3609,8 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -3582,7 +3656,8 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -3636,7 +3711,8 @@ }, "name": "context_lost_validating_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -3679,7 +3755,8 @@ }, "name": "depth_capture_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -3722,7 +3799,8 @@ }, "name": "gpu_process_launch_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -3765,7 +3843,8 @@ }, "name": "hardware_accelerated_feature_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -3812,7 +3891,8 @@ }, "name": "info_collection_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -3864,7 +3944,8 @@ "--buildbucket-id=${buildbucket_build_id}" ], "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -3916,7 +3997,8 @@ "--buildbucket-id=${buildbucket_build_id}" ], "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -3960,7 +4042,8 @@ }, "name": "screenshot_sync_validating_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -4003,7 +4086,8 @@ }, "name": "trace_test", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -4047,7 +4131,8 @@ }, "name": "webgl_conformance_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -4104,7 +4189,8 @@ "--buildbucket-id=${buildbucket_build_id}" ], "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -4148,7 +4234,8 @@ }, "name": "screenshot_sync_validating_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -4193,7 +4280,8 @@ }, "name": "webgl2_conformance_gles_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -4239,7 +4327,8 @@ }, "name": "webgl2_conformance_validating_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -4296,7 +4385,8 @@ "--buildbucket-id=${buildbucket_build_id}" ], "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -4339,7 +4429,8 @@ }, "name": "context_lost_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -4382,7 +4473,8 @@ }, "name": "context_lost_validating_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -4425,7 +4517,8 @@ }, "name": "depth_capture_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -4468,7 +4561,8 @@ }, "name": "gpu_process_launch_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -4511,7 +4605,8 @@ }, "name": "hardware_accelerated_feature_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -4558,7 +4653,8 @@ }, "name": "info_collection_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -4610,7 +4706,8 @@ "--buildbucket-id=${buildbucket_build_id}" ], "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -4662,7 +4759,8 @@ "--buildbucket-id=${buildbucket_build_id}" ], "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -4705,7 +4803,8 @@ }, "name": "mediapipe_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -4748,7 +4847,8 @@ }, "name": "mediapipe_validating_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -4800,7 +4900,8 @@ "--buildbucket-id=${buildbucket_build_id}" ], "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -4852,7 +4953,8 @@ "--buildbucket-id=${buildbucket_build_id}" ], "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -4896,7 +4998,8 @@ }, "name": "screenshot_sync_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -4940,7 +5043,8 @@ }, "name": "screenshot_sync_validating_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -4983,7 +5087,8 @@ }, "name": "trace_test", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -5026,7 +5131,8 @@ }, "name": "webcodecs_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -5071,7 +5177,8 @@ }, "name": "webgl2_conformance_gles_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -5117,7 +5224,8 @@ }, "name": "webgl2_conformance_validating_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -5162,7 +5270,8 @@ }, "name": "webgl_conformance_gles_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -5207,7 +5316,8 @@ }, "name": "webgl_conformance_validating_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -5264,7 +5374,8 @@ "--buildbucket-id=${buildbucket_build_id}" ], "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -5309,7 +5420,8 @@ }, "name": "vulkan_content_browsertests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -5373,7 +5485,8 @@ "--buildbucket-id=${buildbucket_build_id}" ], "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -5538,7 +5651,8 @@ }, "name": "context_lost_validating_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -5588,7 +5702,8 @@ }, "name": "depth_capture_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -5638,7 +5753,8 @@ }, "name": "gpu_process_launch_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -5688,7 +5804,8 @@ }, "name": "hardware_accelerated_feature_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -5742,7 +5859,8 @@ }, "name": "info_collection_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -5801,7 +5919,8 @@ "--buildbucket-id=${buildbucket_build_id}" ], "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -5851,7 +5970,8 @@ }, "name": "mediapipe_validating_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -5910,7 +6030,8 @@ "--buildbucket-id=${buildbucket_build_id}" ], "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -5961,7 +6082,8 @@ }, "name": "screenshot_sync_validating_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -6011,7 +6133,8 @@ }, "name": "trace_test", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -6109,7 +6232,8 @@ }, "name": "webgl_conformance_validating_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -6167,7 +6291,8 @@ }, "name": "context_lost_validating_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -6206,7 +6331,8 @@ }, "name": "depth_capture_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -6245,7 +6371,8 @@ }, "name": "gpu_process_launch_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -6284,7 +6411,8 @@ }, "name": "hardware_accelerated_feature_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -6327,7 +6455,8 @@ }, "name": "info_collection_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -6375,7 +6504,8 @@ "--buildbucket-id=${buildbucket_build_id}" ], "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -6414,7 +6544,8 @@ }, "name": "mediapipe_validating_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -6462,7 +6593,8 @@ "--buildbucket-id=${buildbucket_build_id}" ], "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -6502,7 +6634,8 @@ }, "name": "screenshot_sync_validating_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -6541,7 +6674,8 @@ }, "name": "trace_test", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -6617,7 +6751,8 @@ }, "name": "webgl_conformance_validating_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -6716,7 +6851,8 @@ }, "name": "context_lost_validating_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -6754,7 +6890,8 @@ }, "name": "depth_capture_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -6792,7 +6929,8 @@ }, "name": "gpu_process_launch_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -6830,7 +6968,8 @@ }, "name": "hardware_accelerated_feature_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -6872,7 +7011,8 @@ }, "name": "info_collection_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -6919,7 +7059,8 @@ "--buildbucket-id=${buildbucket_build_id}" ], "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -6957,7 +7098,8 @@ }, "name": "mediapipe_validating_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -7004,7 +7146,8 @@ "--buildbucket-id=${buildbucket_build_id}" ], "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -7043,7 +7186,8 @@ }, "name": "screenshot_sync_validating_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -7081,7 +7225,8 @@ }, "name": "trace_test", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -7151,7 +7296,8 @@ }, "name": "webgl_conformance_validating_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -7336,7 +7482,8 @@ }, "name": "context_lost_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -7370,7 +7517,8 @@ }, "name": "depth_capture_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -7404,7 +7552,8 @@ }, "name": "gpu_process_launch_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -7438,7 +7587,8 @@ }, "name": "hardware_accelerated_feature_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -7476,7 +7626,8 @@ }, "name": "info_collection_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -7519,7 +7670,8 @@ "--buildbucket-id=${buildbucket_build_id}" ], "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -7562,7 +7714,8 @@ "--buildbucket-id=${buildbucket_build_id}" ], "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -7597,7 +7750,8 @@ }, "name": "screenshot_sync_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -7631,7 +7785,8 @@ }, "name": "trace_test", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -7666,7 +7821,8 @@ }, "name": "webgl_conformance_gl_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -7915,7 +8071,8 @@ }, "name": "context_lost_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -7950,7 +8107,8 @@ }, "name": "depth_capture_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -7985,7 +8143,8 @@ }, "name": "gpu_process_launch_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -8020,7 +8179,8 @@ }, "name": "hardware_accelerated_feature_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -8059,7 +8219,8 @@ }, "name": "info_collection_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -8103,7 +8264,8 @@ "--buildbucket-id=${buildbucket_build_id}" ], "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -8138,7 +8300,8 @@ }, "name": "mediapipe_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -8182,7 +8345,8 @@ "--buildbucket-id=${buildbucket_build_id}" ], "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -8218,7 +8382,8 @@ }, "name": "screenshot_sync_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -8253,7 +8418,8 @@ }, "name": "trace_test", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -8290,7 +8456,8 @@ }, "name": "webgl2_conformance_gl_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -8327,7 +8494,8 @@ }, "name": "webgl_conformance_gl_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -8693,7 +8861,8 @@ }, "name": "context_lost_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -8728,7 +8897,8 @@ }, "name": "depth_capture_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -8763,7 +8933,8 @@ }, "name": "gpu_process_launch_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -8798,7 +8969,8 @@ }, "name": "hardware_accelerated_feature_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -8837,7 +9009,8 @@ }, "name": "info_collection_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -8881,7 +9054,8 @@ "--buildbucket-id=${buildbucket_build_id}" ], "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -8916,7 +9090,8 @@ }, "name": "mediapipe_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -8960,7 +9135,8 @@ "--buildbucket-id=${buildbucket_build_id}" ], "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -8996,7 +9172,8 @@ }, "name": "screenshot_sync_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -9031,7 +9208,8 @@ }, "name": "trace_test", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -9068,7 +9246,8 @@ }, "name": "webgl2_conformance_gl_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -9105,7 +9284,8 @@ }, "name": "webgl_conformance_gl_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -9531,7 +9711,8 @@ }, "name": "context_lost_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -9566,7 +9747,8 @@ }, "name": "depth_capture_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -9601,7 +9783,8 @@ }, "name": "gpu_process_launch_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -9636,7 +9819,8 @@ }, "name": "hardware_accelerated_feature_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -9675,7 +9859,8 @@ }, "name": "info_collection_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -9719,7 +9904,8 @@ "--buildbucket-id=${buildbucket_build_id}" ], "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -9754,7 +9940,8 @@ }, "name": "mediapipe_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -9798,7 +9985,8 @@ "--buildbucket-id=${buildbucket_build_id}" ], "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -9834,7 +10022,8 @@ }, "name": "screenshot_sync_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -9869,7 +10058,8 @@ }, "name": "trace_test", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -9906,7 +10096,8 @@ }, "name": "webgl2_conformance_gl_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -9943,7 +10134,8 @@ }, "name": "webgl_conformance_gl_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -10157,7 +10349,8 @@ }, "name": "context_lost_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -10191,7 +10384,8 @@ }, "name": "depth_capture_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -10225,7 +10419,8 @@ }, "name": "gpu_process_launch_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -10259,7 +10454,8 @@ }, "name": "hardware_accelerated_feature_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -10297,7 +10493,8 @@ }, "name": "info_collection_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -10340,7 +10537,8 @@ "--buildbucket-id=${buildbucket_build_id}" ], "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -10374,7 +10572,8 @@ }, "name": "mediapipe_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -10417,7 +10616,8 @@ "--buildbucket-id=${buildbucket_build_id}" ], "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -10452,7 +10652,8 @@ }, "name": "screenshot_sync_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -10486,7 +10687,8 @@ }, "name": "trace_test", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -10522,7 +10724,8 @@ }, "name": "webgl2_conformance_gl_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -10558,7 +10761,8 @@ }, "name": "webgl_conformance_gl_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -10807,7 +11011,8 @@ }, "name": "context_lost_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -10842,7 +11047,8 @@ }, "name": "depth_capture_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -10877,7 +11083,8 @@ }, "name": "gpu_process_launch_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -10912,7 +11119,8 @@ }, "name": "hardware_accelerated_feature_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -10951,7 +11159,8 @@ }, "name": "info_collection_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -10995,7 +11204,8 @@ "--buildbucket-id=${buildbucket_build_id}" ], "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -11030,7 +11240,8 @@ }, "name": "mediapipe_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -11074,7 +11285,8 @@ "--buildbucket-id=${buildbucket_build_id}" ], "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -11110,7 +11322,8 @@ }, "name": "screenshot_sync_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -11145,7 +11358,8 @@ }, "name": "trace_test", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -11182,7 +11396,8 @@ }, "name": "webgl2_conformance_gl_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -11219,7 +11434,8 @@ }, "name": "webgl_conformance_gl_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -11433,7 +11649,8 @@ }, "name": "context_lost_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -11467,7 +11684,8 @@ }, "name": "depth_capture_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -11501,7 +11719,8 @@ }, "name": "gpu_process_launch_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -11535,7 +11754,8 @@ }, "name": "hardware_accelerated_feature_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -11573,7 +11793,8 @@ }, "name": "info_collection_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -11616,7 +11837,8 @@ "--buildbucket-id=${buildbucket_build_id}" ], "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -11650,7 +11872,8 @@ }, "name": "mediapipe_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -11693,7 +11916,8 @@ "--buildbucket-id=${buildbucket_build_id}" ], "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -11728,7 +11952,8 @@ }, "name": "screenshot_sync_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -11762,7 +11987,8 @@ }, "name": "trace_test", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -11798,7 +12024,8 @@ }, "name": "webgl2_conformance_gl_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -11834,7 +12061,8 @@ }, "name": "webgl_conformance_gl_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -11932,7 +12160,8 @@ "--buildbucket-id=${buildbucket_build_id}" ], "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -11968,7 +12197,8 @@ }, "name": "screenshot_sync_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -12071,7 +12301,8 @@ }, "name": "context_lost_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -12105,7 +12336,8 @@ }, "name": "depth_capture_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -12139,7 +12371,8 @@ }, "name": "gpu_process_launch_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -12173,7 +12406,8 @@ }, "name": "hardware_accelerated_feature_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -12216,7 +12450,8 @@ "--buildbucket-id=${buildbucket_build_id}" ], "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -12251,7 +12486,8 @@ }, "name": "screenshot_sync_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -12330,7 +12566,8 @@ "--buildbucket-id=${buildbucket_build_id}" ], "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -12410,7 +12647,8 @@ "--buildbucket-id=${buildbucket_build_id}" ], "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -12513,7 +12751,8 @@ }, "name": "context_lost_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -12547,7 +12786,8 @@ }, "name": "depth_capture_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -12581,7 +12821,8 @@ }, "name": "gpu_process_launch_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -12615,7 +12856,8 @@ }, "name": "hardware_accelerated_feature_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -12658,7 +12900,8 @@ "--buildbucket-id=${buildbucket_build_id}" ], "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -12693,7 +12936,8 @@ }, "name": "screenshot_sync_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -12772,7 +13016,8 @@ "--buildbucket-id=${buildbucket_build_id}" ], "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -12852,7 +13097,8 @@ "--buildbucket-id=${buildbucket_build_id}" ], "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -13625,7 +13871,8 @@ }, "name": "context_lost_validating_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -13660,7 +13907,8 @@ }, "name": "depth_capture_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -13695,7 +13943,8 @@ }, "name": "gpu_process_launch_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -13730,7 +13979,8 @@ }, "name": "hardware_accelerated_feature_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -13769,7 +14019,8 @@ }, "name": "info_collection_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -13813,7 +14064,8 @@ "--buildbucket-id=${buildbucket_build_id}" ], "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -13857,7 +14109,8 @@ "--buildbucket-id=${buildbucket_build_id}" ], "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -13893,7 +14146,8 @@ }, "name": "screenshot_sync_validating_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -13928,7 +14182,8 @@ }, "name": "trace_test", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -13964,7 +14219,8 @@ }, "name": "webgl_conformance_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -14299,7 +14555,8 @@ }, "name": "context_lost_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -14337,7 +14594,8 @@ }, "name": "context_lost_validating_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -14375,7 +14633,8 @@ }, "name": "depth_capture_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -14413,7 +14672,8 @@ }, "name": "gl_renderer_context_lost_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -14451,7 +14711,8 @@ }, "name": "gl_renderer_depth_capture_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -14489,7 +14750,8 @@ }, "name": "gl_renderer_gpu_process_launch_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -14527,7 +14789,8 @@ }, "name": "gl_renderer_hardware_accelerated_feature_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -14574,7 +14837,8 @@ "--buildbucket-id=${buildbucket_build_id}" ], "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -14621,7 +14885,8 @@ "--buildbucket-id=${buildbucket_build_id}" ], "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -14660,7 +14925,8 @@ }, "name": "gl_renderer_screenshot_sync_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -14698,7 +14964,8 @@ }, "name": "gpu_process_launch_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -14736,7 +15003,8 @@ }, "name": "hardware_accelerated_feature_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -14778,7 +15046,8 @@ }, "name": "info_collection_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -14825,7 +15094,8 @@ "--buildbucket-id=${buildbucket_build_id}" ], "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -14872,7 +15142,8 @@ "--buildbucket-id=${buildbucket_build_id}" ], "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -14910,7 +15181,8 @@ }, "name": "mediapipe_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -14948,7 +15220,8 @@ }, "name": "mediapipe_validating_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -14995,7 +15268,8 @@ "--buildbucket-id=${buildbucket_build_id}" ], "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -15042,7 +15316,8 @@ "--buildbucket-id=${buildbucket_build_id}" ], "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -15110,7 +15385,8 @@ }, "name": "screenshot_sync_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -15149,7 +15425,8 @@ }, "name": "screenshot_sync_validating_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -15187,7 +15464,8 @@ }, "name": "trace_test", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -15227,7 +15505,8 @@ }, "name": "webgl2_conformance_gl_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -15268,7 +15547,8 @@ }, "name": "webgl2_conformance_validating_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -15308,7 +15588,8 @@ }, "name": "webgl_conformance_gl_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -15348,7 +15629,8 @@ }, "name": "webgl_conformance_metal_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -15388,7 +15670,8 @@ }, "name": "webgl_conformance_swangle_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -15427,7 +15710,8 @@ }, "name": "webgl_conformance_validating_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -15842,7 +16126,8 @@ }, "name": "context_lost_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -15886,7 +16171,8 @@ }, "name": "context_lost_validating_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -15929,7 +16215,8 @@ }, "name": "depth_capture_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -15972,7 +16259,8 @@ }, "name": "gl_renderer_context_lost_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -16015,7 +16303,8 @@ }, "name": "gl_renderer_depth_capture_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -16058,7 +16347,8 @@ }, "name": "gl_renderer_gpu_process_launch_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -16101,7 +16391,8 @@ }, "name": "gl_renderer_hardware_accelerated_feature_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -16153,7 +16444,8 @@ "--buildbucket-id=${buildbucket_build_id}" ], "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -16205,7 +16497,8 @@ "--buildbucket-id=${buildbucket_build_id}" ], "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -16249,7 +16542,8 @@ }, "name": "gl_renderer_screenshot_sync_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -16292,7 +16586,8 @@ }, "name": "gpu_process_launch_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -16335,7 +16630,8 @@ }, "name": "hardware_accelerated_feature_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -16387,7 +16683,8 @@ "--buildbucket-id=${buildbucket_build_id}" ], "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -16439,7 +16736,8 @@ "--buildbucket-id=${buildbucket_build_id}" ], "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -16482,7 +16780,8 @@ }, "name": "mediapipe_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -16525,7 +16824,8 @@ }, "name": "mediapipe_validating_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -16577,7 +16877,8 @@ "--buildbucket-id=${buildbucket_build_id}" ], "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -16629,7 +16930,8 @@ "--buildbucket-id=${buildbucket_build_id}" ], "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -16673,7 +16975,8 @@ }, "name": "screenshot_sync_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -16717,7 +17020,8 @@ }, "name": "screenshot_sync_validating_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -16760,7 +17064,8 @@ }, "name": "trace_test", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -16805,7 +17110,8 @@ }, "name": "webgl2_conformance_gl_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -16852,7 +17158,8 @@ }, "name": "webgl2_conformance_validating_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -16897,7 +17204,8 @@ }, "name": "webgl_conformance_gl_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -16942,7 +17250,8 @@ }, "name": "webgl_conformance_metal_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -16987,7 +17296,8 @@ }, "name": "webgl_conformance_swangle_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -17032,7 +17342,8 @@ }, "name": "webgl_conformance_validating_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -17332,7 +17643,8 @@ }, "name": "context_lost_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -17367,7 +17679,8 @@ }, "name": "context_lost_validating_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -17402,7 +17715,8 @@ }, "name": "depth_capture_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -17437,7 +17751,8 @@ }, "name": "gl_renderer_context_lost_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -17472,7 +17787,8 @@ }, "name": "gl_renderer_depth_capture_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -17507,7 +17823,8 @@ }, "name": "gl_renderer_gpu_process_launch_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -17542,7 +17859,8 @@ }, "name": "gl_renderer_hardware_accelerated_feature_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -17586,7 +17904,8 @@ "--buildbucket-id=${buildbucket_build_id}" ], "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -17630,7 +17949,8 @@ "--buildbucket-id=${buildbucket_build_id}" ], "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -17666,7 +17986,8 @@ }, "name": "gl_renderer_screenshot_sync_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -17701,7 +18022,8 @@ }, "name": "gpu_process_launch_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -17736,7 +18058,8 @@ }, "name": "hardware_accelerated_feature_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -17775,7 +18098,8 @@ }, "name": "info_collection_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -17819,7 +18143,8 @@ "--buildbucket-id=${buildbucket_build_id}" ], "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -17863,7 +18188,8 @@ "--buildbucket-id=${buildbucket_build_id}" ], "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -17898,7 +18224,8 @@ }, "name": "mediapipe_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -17933,7 +18260,8 @@ }, "name": "mediapipe_validating_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -17977,7 +18305,8 @@ "--buildbucket-id=${buildbucket_build_id}" ], "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -18021,7 +18350,8 @@ "--buildbucket-id=${buildbucket_build_id}" ], "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -18083,7 +18413,8 @@ }, "name": "screenshot_sync_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -18119,7 +18450,8 @@ }, "name": "screenshot_sync_validating_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -18154,7 +18486,8 @@ }, "name": "trace_test", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -18191,7 +18524,8 @@ }, "name": "webgl2_conformance_gl_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -18229,7 +18563,8 @@ }, "name": "webgl2_conformance_validating_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -18266,7 +18601,8 @@ }, "name": "webgl_conformance_gl_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -18303,7 +18639,8 @@ }, "name": "webgl_conformance_metal_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -18340,7 +18677,8 @@ }, "name": "webgl_conformance_swangle_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -18376,7 +18714,8 @@ }, "name": "webgl_conformance_validating_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -18668,7 +19007,8 @@ }, "name": "context_lost_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -18703,7 +19043,8 @@ }, "name": "context_lost_validating_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -18738,7 +19079,8 @@ }, "name": "depth_capture_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -18773,7 +19115,8 @@ }, "name": "gl_renderer_context_lost_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -18808,7 +19151,8 @@ }, "name": "gl_renderer_depth_capture_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -18843,7 +19187,8 @@ }, "name": "gl_renderer_gpu_process_launch_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -18878,7 +19223,8 @@ }, "name": "gl_renderer_hardware_accelerated_feature_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -18922,7 +19268,8 @@ "--buildbucket-id=${buildbucket_build_id}" ], "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -18966,7 +19313,8 @@ "--buildbucket-id=${buildbucket_build_id}" ], "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -19002,7 +19350,8 @@ }, "name": "gl_renderer_screenshot_sync_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -19037,7 +19386,8 @@ }, "name": "gpu_process_launch_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -19072,7 +19422,8 @@ }, "name": "hardware_accelerated_feature_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -19111,7 +19462,8 @@ }, "name": "info_collection_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -19155,7 +19507,8 @@ "--buildbucket-id=${buildbucket_build_id}" ], "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -19199,7 +19552,8 @@ "--buildbucket-id=${buildbucket_build_id}" ], "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -19234,7 +19588,8 @@ }, "name": "mediapipe_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -19269,7 +19624,8 @@ }, "name": "mediapipe_validating_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -19313,7 +19669,8 @@ "--buildbucket-id=${buildbucket_build_id}" ], "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -19357,7 +19714,8 @@ "--buildbucket-id=${buildbucket_build_id}" ], "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -19419,7 +19777,8 @@ }, "name": "screenshot_sync_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -19455,7 +19814,8 @@ }, "name": "screenshot_sync_validating_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -19490,7 +19850,8 @@ }, "name": "trace_test", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -19527,7 +19888,8 @@ }, "name": "webgl2_conformance_gl_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -19565,7 +19927,8 @@ }, "name": "webgl2_conformance_validating_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -19602,7 +19965,8 @@ }, "name": "webgl_conformance_gl_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -19639,7 +20003,8 @@ }, "name": "webgl_conformance_metal_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -19676,7 +20041,8 @@ }, "name": "webgl_conformance_swangle_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -19712,7 +20078,8 @@ }, "name": "webgl_conformance_validating_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -19994,7 +20361,8 @@ }, "name": "context_lost_validating_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -20031,7 +20399,8 @@ }, "name": "depth_capture_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -20068,7 +20437,8 @@ }, "name": "gpu_process_launch_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -20105,7 +20475,8 @@ }, "name": "hardware_accelerated_feature_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -20146,7 +20517,8 @@ }, "name": "info_collection_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -20192,7 +20564,8 @@ "--buildbucket-id=${buildbucket_build_id}" ], "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -20238,7 +20611,8 @@ "--buildbucket-id=${buildbucket_build_id}" ], "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -20276,7 +20650,8 @@ }, "name": "screenshot_sync_validating_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -20313,7 +20688,8 @@ }, "name": "trace_test", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -20351,7 +20727,8 @@ }, "name": "webgl_conformance_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -20635,7 +21012,8 @@ }, "name": "context_lost_validating_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -20672,7 +21050,8 @@ }, "name": "depth_capture_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -20709,7 +21088,8 @@ }, "name": "gpu_process_launch_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -20746,7 +21126,8 @@ }, "name": "hardware_accelerated_feature_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -20787,7 +21168,8 @@ }, "name": "info_collection_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -20833,7 +21215,8 @@ "--buildbucket-id=${buildbucket_build_id}" ], "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -20879,7 +21262,8 @@ "--buildbucket-id=${buildbucket_build_id}" ], "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -20917,7 +21301,8 @@ }, "name": "screenshot_sync_validating_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -20954,7 +21339,8 @@ }, "name": "trace_test", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -21267,7 +21653,8 @@ }, "name": "context_lost_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -21304,7 +21691,8 @@ }, "name": "context_lost_validating_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -21341,7 +21729,8 @@ }, "name": "depth_capture_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -21378,7 +21767,8 @@ }, "name": "gl_renderer_context_lost_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -21415,7 +21805,8 @@ }, "name": "gl_renderer_depth_capture_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -21452,7 +21843,8 @@ }, "name": "gl_renderer_gpu_process_launch_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -21489,7 +21881,8 @@ }, "name": "gl_renderer_hardware_accelerated_feature_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -21535,7 +21928,8 @@ "--buildbucket-id=${buildbucket_build_id}" ], "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -21581,7 +21975,8 @@ "--buildbucket-id=${buildbucket_build_id}" ], "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -21619,7 +22014,8 @@ }, "name": "gl_renderer_screenshot_sync_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -21656,7 +22052,8 @@ }, "name": "gpu_process_launch_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -21693,7 +22090,8 @@ }, "name": "hardware_accelerated_feature_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -21734,7 +22132,8 @@ }, "name": "info_collection_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -21780,7 +22179,8 @@ "--buildbucket-id=${buildbucket_build_id}" ], "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -21826,7 +22226,8 @@ "--buildbucket-id=${buildbucket_build_id}" ], "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -21863,7 +22264,8 @@ }, "name": "mediapipe_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -21900,7 +22302,8 @@ }, "name": "mediapipe_validating_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -21946,7 +22349,8 @@ "--buildbucket-id=${buildbucket_build_id}" ], "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -21992,7 +22396,8 @@ "--buildbucket-id=${buildbucket_build_id}" ], "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -22058,7 +22463,8 @@ }, "name": "screenshot_sync_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -22096,7 +22502,8 @@ }, "name": "screenshot_sync_validating_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -22133,7 +22540,8 @@ }, "name": "trace_test", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -22172,7 +22580,8 @@ }, "name": "webgl2_conformance_gl_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -22212,7 +22621,8 @@ }, "name": "webgl2_conformance_validating_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -22251,7 +22661,8 @@ }, "name": "webgl_conformance_gl_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -22290,7 +22701,8 @@ }, "name": "webgl_conformance_metal_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -22329,7 +22741,8 @@ }, "name": "webgl_conformance_swangle_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -22367,7 +22780,8 @@ }, "name": "webgl_conformance_validating_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -22681,7 +23095,8 @@ }, "name": "context_lost_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -22718,7 +23133,8 @@ }, "name": "context_lost_validating_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -22755,7 +23171,8 @@ }, "name": "depth_capture_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -22792,7 +23209,8 @@ }, "name": "gl_renderer_context_lost_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -22829,7 +23247,8 @@ }, "name": "gl_renderer_depth_capture_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -22866,7 +23285,8 @@ }, "name": "gl_renderer_gpu_process_launch_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -22903,7 +23323,8 @@ }, "name": "gl_renderer_hardware_accelerated_feature_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -22949,7 +23370,8 @@ "--buildbucket-id=${buildbucket_build_id}" ], "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -22995,7 +23417,8 @@ "--buildbucket-id=${buildbucket_build_id}" ], "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -23033,7 +23456,8 @@ }, "name": "gl_renderer_screenshot_sync_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -23070,7 +23494,8 @@ }, "name": "gpu_process_launch_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -23107,7 +23532,8 @@ }, "name": "hardware_accelerated_feature_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -23148,7 +23574,8 @@ }, "name": "info_collection_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -23194,7 +23621,8 @@ "--buildbucket-id=${buildbucket_build_id}" ], "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -23240,7 +23668,8 @@ "--buildbucket-id=${buildbucket_build_id}" ], "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -23277,7 +23706,8 @@ }, "name": "mediapipe_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -23314,7 +23744,8 @@ }, "name": "mediapipe_validating_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -23360,7 +23791,8 @@ "--buildbucket-id=${buildbucket_build_id}" ], "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -23406,7 +23838,8 @@ "--buildbucket-id=${buildbucket_build_id}" ], "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -23444,7 +23877,8 @@ }, "name": "screenshot_sync_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -23482,7 +23916,8 @@ }, "name": "screenshot_sync_validating_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -23519,7 +23954,8 @@ }, "name": "trace_test", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -23558,7 +23994,8 @@ }, "name": "webgl2_conformance_validating_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -23597,7 +24034,8 @@ }, "name": "webgl_conformance_gl_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -23636,7 +24074,8 @@ }, "name": "webgl_conformance_swangle_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -23674,7 +24113,8 @@ }, "name": "webgl_conformance_validating_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -23968,7 +24408,8 @@ }, "name": "context_lost_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -24003,7 +24444,8 @@ }, "name": "context_lost_validating_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -24038,7 +24480,8 @@ }, "name": "depth_capture_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -24073,7 +24516,8 @@ }, "name": "gl_renderer_context_lost_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -24108,7 +24552,8 @@ }, "name": "gl_renderer_depth_capture_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -24143,7 +24588,8 @@ }, "name": "gl_renderer_gpu_process_launch_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -24178,7 +24624,8 @@ }, "name": "gl_renderer_hardware_accelerated_feature_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -24222,7 +24669,8 @@ "--buildbucket-id=${buildbucket_build_id}" ], "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -24266,7 +24714,8 @@ "--buildbucket-id=${buildbucket_build_id}" ], "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -24302,7 +24751,8 @@ }, "name": "gl_renderer_screenshot_sync_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -24337,7 +24787,8 @@ }, "name": "gpu_process_launch_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -24372,7 +24823,8 @@ }, "name": "hardware_accelerated_feature_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -24411,7 +24863,8 @@ }, "name": "info_collection_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -24455,7 +24908,8 @@ "--buildbucket-id=${buildbucket_build_id}" ], "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -24499,7 +24953,8 @@ "--buildbucket-id=${buildbucket_build_id}" ], "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -24534,7 +24989,8 @@ }, "name": "mediapipe_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -24569,7 +25025,8 @@ }, "name": "mediapipe_validating_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -24613,7 +25070,8 @@ "--buildbucket-id=${buildbucket_build_id}" ], "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -24657,7 +25115,8 @@ "--buildbucket-id=${buildbucket_build_id}" ], "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -24719,7 +25178,8 @@ }, "name": "screenshot_sync_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -24755,7 +25215,8 @@ }, "name": "screenshot_sync_validating_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -24790,7 +25251,8 @@ }, "name": "trace_test", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -24827,7 +25289,8 @@ }, "name": "webgl2_conformance_gl_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -24865,7 +25328,8 @@ }, "name": "webgl2_conformance_validating_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -24902,7 +25366,8 @@ }, "name": "webgl_conformance_gl_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -24939,7 +25404,8 @@ }, "name": "webgl_conformance_metal_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -24976,7 +25442,8 @@ }, "name": "webgl_conformance_swangle_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -25012,7 +25479,8 @@ }, "name": "webgl_conformance_validating_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -25274,7 +25742,8 @@ }, "name": "context_lost_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -25311,7 +25780,8 @@ }, "name": "context_lost_validating_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -25348,7 +25818,8 @@ }, "name": "depth_capture_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -25385,7 +25856,8 @@ }, "name": "gpu_process_launch_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -25422,7 +25894,8 @@ }, "name": "hardware_accelerated_feature_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -25463,7 +25936,8 @@ }, "name": "info_collection_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -25509,7 +25983,8 @@ "--buildbucket-id=${buildbucket_build_id}" ], "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -25555,7 +26030,8 @@ "--buildbucket-id=${buildbucket_build_id}" ], "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -25601,7 +26077,8 @@ "--buildbucket-id=${buildbucket_build_id}" ], "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -25647,7 +26124,8 @@ "--buildbucket-id=${buildbucket_build_id}" ], "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -25685,7 +26163,8 @@ }, "name": "screenshot_sync_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -25723,7 +26202,8 @@ }, "name": "screenshot_sync_validating_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -25760,7 +26240,8 @@ }, "name": "trace_test", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -25799,7 +26280,8 @@ }, "name": "webgl2_conformance_validating_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -25838,7 +26320,8 @@ }, "name": "webgl_conformance_gl_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -25890,7 +26373,8 @@ "--buildbucket-id=${buildbucket_build_id}" ], "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -25933,7 +26417,8 @@ }, "name": "context_lost_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -25976,7 +26461,8 @@ }, "name": "context_lost_validating_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -26019,7 +26505,8 @@ }, "name": "depth_capture_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -26062,7 +26549,8 @@ }, "name": "gpu_process_launch_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -26105,7 +26593,8 @@ }, "name": "hardware_accelerated_feature_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -26152,7 +26641,8 @@ }, "name": "info_collection_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -26204,7 +26694,8 @@ "--buildbucket-id=${buildbucket_build_id}" ], "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -26256,7 +26747,8 @@ "--buildbucket-id=${buildbucket_build_id}" ], "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -26299,7 +26791,8 @@ }, "name": "mediapipe_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -26342,7 +26835,8 @@ }, "name": "mediapipe_validating_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -26394,7 +26888,8 @@ "--buildbucket-id=${buildbucket_build_id}" ], "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -26446,7 +26941,8 @@ "--buildbucket-id=${buildbucket_build_id}" ], "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -26490,7 +26986,8 @@ }, "name": "screenshot_sync_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -26534,7 +27031,8 @@ }, "name": "screenshot_sync_validating_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -26577,7 +27075,8 @@ }, "name": "trace_test", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -26620,7 +27119,8 @@ }, "name": "webcodecs_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -26665,7 +27165,8 @@ }, "name": "webgl2_conformance_gles_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -26711,7 +27212,8 @@ }, "name": "webgl2_conformance_validating_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -26756,7 +27258,8 @@ }, "name": "webgl_conformance_gles_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -26801,7 +27304,8 @@ }, "name": "webgl_conformance_validating_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -26951,7 +27455,8 @@ }, "name": "info_collection_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -26985,7 +27490,8 @@ }, "name": "mediapipe_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -27019,7 +27525,8 @@ }, "name": "trace_test", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -27086,7 +27593,8 @@ }, "name": "webgl2_conformance_gl_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -27122,7 +27630,8 @@ }, "name": "webgl_conformance_gl_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -27263,7 +27772,8 @@ }, "name": "info_collection_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -27297,7 +27807,8 @@ }, "name": "mediapipe_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -27331,7 +27842,8 @@ }, "name": "trace_test", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -27398,7 +27910,8 @@ }, "name": "webgl2_conformance_gl_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -27434,7 +27947,8 @@ }, "name": "webgl_conformance_gl_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -27594,7 +28108,8 @@ }, "name": "context_lost_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -27629,7 +28144,8 @@ }, "name": "depth_capture_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -27664,7 +28180,8 @@ }, "name": "gpu_process_launch_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -27699,7 +28216,8 @@ }, "name": "hardware_accelerated_feature_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -27738,7 +28256,8 @@ }, "name": "info_collection_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -27782,7 +28301,8 @@ "--buildbucket-id=${buildbucket_build_id}" ], "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -27817,7 +28337,8 @@ }, "name": "mediapipe_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -27852,7 +28373,8 @@ }, "name": "mediapipe_validating_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -27896,7 +28418,8 @@ "--buildbucket-id=${buildbucket_build_id}" ], "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -27932,7 +28455,8 @@ }, "name": "screenshot_sync_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -27967,7 +28491,8 @@ }, "name": "trace_test", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -28036,7 +28561,8 @@ }, "name": "webgl2_conformance_validating_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -28073,7 +28599,8 @@ }, "name": "webgl_conformance_gl_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -28110,7 +28637,8 @@ }, "name": "webgl_conformance_metal_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -28147,7 +28675,8 @@ }, "name": "webgl_conformance_swangle_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -28317,7 +28846,8 @@ }, "name": "context_lost_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -28354,7 +28884,8 @@ }, "name": "depth_capture_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -28391,7 +28922,8 @@ }, "name": "gpu_process_launch_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -28428,7 +28960,8 @@ }, "name": "hardware_accelerated_feature_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -28469,7 +29002,8 @@ }, "name": "info_collection_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -28515,7 +29049,8 @@ "--buildbucket-id=${buildbucket_build_id}" ], "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -28552,7 +29087,8 @@ }, "name": "mediapipe_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -28589,7 +29125,8 @@ }, "name": "mediapipe_validating_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -28635,7 +29172,8 @@ "--buildbucket-id=${buildbucket_build_id}" ], "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -28673,7 +29211,8 @@ }, "name": "screenshot_sync_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -28710,7 +29249,8 @@ }, "name": "trace_test", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -28783,7 +29323,8 @@ }, "name": "webgl2_conformance_validating_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -28822,7 +29363,8 @@ }, "name": "webgl_conformance_gl_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -28861,7 +29403,8 @@ }, "name": "webgl_conformance_metal_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -28900,7 +29443,8 @@ }, "name": "webgl_conformance_swangle_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -29076,7 +29620,8 @@ }, "name": "info_collection_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -29113,7 +29658,8 @@ }, "name": "mediapipe_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -29150,7 +29696,8 @@ }, "name": "mediapipe_validating_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -29187,7 +29734,8 @@ }, "name": "trace_test", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -29462,7 +30010,8 @@ }, "name": "info_collection_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -29496,7 +30045,8 @@ }, "name": "mediapipe_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -29530,7 +30080,8 @@ }, "name": "power_measurement_test", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -29564,7 +30115,8 @@ }, "name": "trace_test", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -29631,7 +30183,8 @@ }, "name": "webgl2_conformance_d3d11_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -29667,7 +30220,8 @@ }, "name": "webgl_conformance_d3d11_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -29703,7 +30257,8 @@ }, "name": "webgl_conformance_d3d9_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -29739,7 +30294,8 @@ }, "name": "webgl_conformance_gl_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -29774,7 +30330,8 @@ }, "name": "webgl_conformance_vulkan_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -30009,7 +30566,8 @@ }, "name": "info_collection_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -30043,7 +30601,8 @@ }, "name": "mediapipe_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -30108,7 +30667,8 @@ }, "name": "trace_test", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -30175,7 +30735,8 @@ }, "name": "webgl2_conformance_d3d11_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -30211,7 +30772,8 @@ }, "name": "webgl_conformance_d3d11_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -30247,7 +30809,8 @@ }, "name": "webgl_conformance_d3d9_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -30282,7 +30845,8 @@ }, "name": "webgl_conformance_fast_call_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -30318,7 +30882,8 @@ }, "name": "webgl_conformance_gl_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -30353,7 +30918,8 @@ }, "name": "webgl_conformance_vulkan_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -30777,7 +31343,8 @@ }, "name": "context_lost_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -30811,7 +31378,8 @@ }, "name": "depth_capture_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -30845,7 +31413,8 @@ }, "name": "gpu_process_launch_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -30879,7 +31448,8 @@ }, "name": "hardware_accelerated_feature_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -30917,7 +31487,8 @@ }, "name": "info_collection_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -30960,7 +31531,8 @@ "--buildbucket-id=${buildbucket_build_id}" ], "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -31003,7 +31575,8 @@ "--buildbucket-id=${buildbucket_build_id}" ], "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -31038,7 +31611,8 @@ }, "name": "screenshot_sync_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -31072,7 +31646,8 @@ }, "name": "trace_test", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -31107,7 +31682,8 @@ }, "name": "webgl_conformance_d3d11_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -31143,7 +31719,8 @@ }, "name": "webgl_conformance_d3d9_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -31179,7 +31756,8 @@ }, "name": "webgl_conformance_gl_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -31214,7 +31792,8 @@ }, "name": "webgl_conformance_vulkan_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -31611,7 +32190,8 @@ }, "name": "context_lost_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -31646,7 +32226,8 @@ }, "name": "depth_capture_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -31681,7 +32262,8 @@ }, "name": "gpu_process_launch_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -31716,7 +32298,8 @@ }, "name": "hardware_accelerated_feature_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -31757,7 +32340,8 @@ }, "name": "info_collection_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -31801,7 +32385,8 @@ "--buildbucket-id=${buildbucket_build_id}" ], "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -31836,7 +32421,8 @@ }, "name": "mediapipe_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -31880,7 +32466,8 @@ "--buildbucket-id=${buildbucket_build_id}" ], "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -31915,7 +32502,8 @@ }, "name": "power_measurement_test", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -31978,7 +32566,8 @@ }, "name": "screenshot_sync_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -32013,7 +32602,8 @@ }, "name": "trace_test", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -32082,7 +32672,8 @@ }, "name": "webgl2_conformance_d3d11_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -32119,7 +32710,8 @@ }, "name": "webgl_conformance_d3d11_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -32156,7 +32748,8 @@ }, "name": "webgl_conformance_d3d9_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -32193,7 +32786,8 @@ }, "name": "webgl_conformance_gl_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -32229,7 +32823,8 @@ }, "name": "webgl_conformance_vulkan_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -32625,7 +33220,8 @@ }, "name": "context_lost_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -32660,7 +33256,8 @@ }, "name": "depth_capture_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -32695,7 +33292,8 @@ }, "name": "gpu_process_launch_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -32730,7 +33328,8 @@ }, "name": "hardware_accelerated_feature_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -32769,7 +33368,8 @@ }, "name": "info_collection_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -32813,7 +33413,8 @@ "--buildbucket-id=${buildbucket_build_id}" ], "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -32889,7 +33490,8 @@ "--buildbucket-id=${buildbucket_build_id}" ], "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -32952,7 +33554,8 @@ }, "name": "screenshot_sync_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -32987,7 +33590,8 @@ }, "name": "trace_test", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -33024,7 +33628,8 @@ }, "name": "webgl2_conformance_d3d11_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -33061,7 +33666,8 @@ }, "name": "webgl_conformance_d3d11_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -33098,7 +33704,8 @@ }, "name": "webgl_conformance_d3d9_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -33134,7 +33741,8 @@ }, "name": "webgl_conformance_fast_call_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -33171,7 +33779,8 @@ }, "name": "webgl_conformance_gl_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -33207,7 +33816,8 @@ }, "name": "webgl_conformance_vulkan_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -33603,7 +34213,8 @@ }, "name": "context_lost_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -33638,7 +34249,8 @@ }, "name": "depth_capture_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -33673,7 +34285,8 @@ }, "name": "gpu_process_launch_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -33708,7 +34321,8 @@ }, "name": "hardware_accelerated_feature_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -33747,7 +34361,8 @@ }, "name": "info_collection_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -33791,7 +34406,8 @@ "--buildbucket-id=${buildbucket_build_id}" ], "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -33826,7 +34442,8 @@ }, "name": "mediapipe_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -33870,7 +34487,8 @@ "--buildbucket-id=${buildbucket_build_id}" ], "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -33933,7 +34551,8 @@ }, "name": "screenshot_sync_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -33968,7 +34587,8 @@ }, "name": "trace_test", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -34037,7 +34657,8 @@ }, "name": "webgl2_conformance_d3d11_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -34074,7 +34695,8 @@ }, "name": "webgl_conformance_d3d11_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -34111,7 +34733,8 @@ }, "name": "webgl_conformance_d3d9_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -34147,7 +34770,8 @@ }, "name": "webgl_conformance_vulkan_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -34531,7 +35155,8 @@ }, "name": "context_lost_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -34565,7 +35190,8 @@ }, "name": "depth_capture_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -34599,7 +35225,8 @@ }, "name": "gpu_process_launch_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -34633,7 +35260,8 @@ }, "name": "hardware_accelerated_feature_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -34673,7 +35301,8 @@ }, "name": "info_collection_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -34716,7 +35345,8 @@ "--buildbucket-id=${buildbucket_build_id}" ], "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -34750,7 +35380,8 @@ }, "name": "mediapipe_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -34793,7 +35424,8 @@ "--buildbucket-id=${buildbucket_build_id}" ], "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -34827,7 +35459,8 @@ }, "name": "power_measurement_test", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -34888,7 +35521,8 @@ }, "name": "screenshot_sync_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -34922,7 +35556,8 @@ }, "name": "trace_test", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -34989,7 +35624,8 @@ }, "name": "webgl2_conformance_d3d11_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -35025,7 +35661,8 @@ }, "name": "webgl_conformance_d3d11_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -35061,7 +35698,8 @@ }, "name": "webgl_conformance_d3d9_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -35097,7 +35735,8 @@ }, "name": "webgl_conformance_gl_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -35132,7 +35771,8 @@ }, "name": "webgl_conformance_vulkan_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -35527,7 +36167,8 @@ }, "name": "context_lost_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -35562,7 +36203,8 @@ }, "name": "depth_capture_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -35597,7 +36239,8 @@ }, "name": "gpu_process_launch_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -35632,7 +36275,8 @@ }, "name": "hardware_accelerated_feature_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -35671,7 +36315,8 @@ }, "name": "info_collection_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -35715,7 +36360,8 @@ "--buildbucket-id=${buildbucket_build_id}" ], "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -35759,7 +36405,8 @@ "--buildbucket-id=${buildbucket_build_id}" ], "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -35795,7 +36442,8 @@ }, "name": "screenshot_sync_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -35830,7 +36478,8 @@ }, "name": "trace_test", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -35867,7 +36516,8 @@ }, "name": "webgl2_conformance_d3d11_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -35904,7 +36554,8 @@ }, "name": "webgl_conformance_d3d11_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -35941,7 +36592,8 @@ }, "name": "webgl_conformance_d3d9_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -35977,7 +36629,8 @@ }, "name": "webgl_conformance_fast_call_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -36014,7 +36667,8 @@ }, "name": "webgl_conformance_gl_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -36050,7 +36704,8 @@ }, "name": "webgl_conformance_vulkan_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -36432,7 +37087,8 @@ }, "name": "context_lost_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -36466,7 +37122,8 @@ }, "name": "depth_capture_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -36500,7 +37157,8 @@ }, "name": "gpu_process_launch_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -36534,7 +37192,8 @@ }, "name": "hardware_accelerated_feature_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -36572,7 +37231,8 @@ }, "name": "info_collection_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -36615,7 +37275,8 @@ "--buildbucket-id=${buildbucket_build_id}" ], "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -36689,7 +37350,8 @@ "--buildbucket-id=${buildbucket_build_id}" ], "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -36750,7 +37412,8 @@ }, "name": "screenshot_sync_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -36784,7 +37447,8 @@ }, "name": "trace_test", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -36820,7 +37484,8 @@ }, "name": "webgl2_conformance_d3d11_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -36856,7 +37521,8 @@ }, "name": "webgl_conformance_d3d11_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -36892,7 +37558,8 @@ }, "name": "webgl_conformance_d3d9_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -36927,7 +37594,8 @@ }, "name": "webgl_conformance_fast_call_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -36963,7 +37631,8 @@ }, "name": "webgl_conformance_gl_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -36998,7 +37667,8 @@ }, "name": "webgl_conformance_vulkan_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -37120,7 +37790,8 @@ "--buildbucket-id=${buildbucket_build_id}" ], "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -37156,7 +37827,8 @@ }, "name": "screenshot_sync_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -37536,7 +38208,8 @@ }, "name": "context_lost_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -37570,7 +38243,8 @@ }, "name": "depth_capture_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -37604,7 +38278,8 @@ }, "name": "gpu_process_launch_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -37638,7 +38313,8 @@ }, "name": "hardware_accelerated_feature_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -37676,7 +38352,8 @@ }, "name": "info_collection_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -37719,7 +38396,8 @@ "--buildbucket-id=${buildbucket_build_id}" ], "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -37793,7 +38471,8 @@ "--buildbucket-id=${buildbucket_build_id}" ], "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -37853,7 +38532,8 @@ }, "name": "screenshot_sync_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -37887,7 +38567,8 @@ }, "name": "trace_test", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -37923,7 +38604,8 @@ }, "name": "webgl2_conformance_d3d11_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -37959,7 +38641,8 @@ }, "name": "webgl_conformance_d3d11_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -37995,7 +38678,8 @@ }, "name": "webgl_conformance_d3d9_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -38030,7 +38714,8 @@ }, "name": "webgl_conformance_fast_call_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -38066,7 +38751,8 @@ }, "name": "webgl_conformance_gl_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -38101,7 +38787,8 @@ }, "name": "webgl_conformance_vulkan_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -38448,7 +39135,8 @@ }, "name": "context_lost_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -38483,7 +39171,8 @@ }, "name": "depth_capture_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -38518,7 +39207,8 @@ }, "name": "gpu_process_launch_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -38553,7 +39243,8 @@ }, "name": "hardware_accelerated_feature_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -38592,7 +39283,8 @@ }, "name": "info_collection_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -38636,7 +39328,8 @@ "--buildbucket-id=${buildbucket_build_id}" ], "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -38680,7 +39373,8 @@ "--buildbucket-id=${buildbucket_build_id}" ], "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -38716,7 +39410,8 @@ }, "name": "screenshot_sync_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -38751,7 +39446,8 @@ }, "name": "trace_test", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -38820,7 +39516,8 @@ }, "name": "webgl2_conformance_d3d11_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -38857,7 +39554,8 @@ }, "name": "webgl_conformance_d3d11_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -38894,7 +39592,8 @@ }, "name": "webgl_conformance_d3d9_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -38930,7 +39629,8 @@ }, "name": "webgl_conformance_vulkan_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -39277,7 +39977,8 @@ }, "name": "context_lost_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -39312,7 +40013,8 @@ }, "name": "depth_capture_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -39347,7 +40049,8 @@ }, "name": "gpu_process_launch_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -39382,7 +40085,8 @@ }, "name": "hardware_accelerated_feature_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -39421,7 +40125,8 @@ }, "name": "info_collection_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -39465,7 +40170,8 @@ "--buildbucket-id=${buildbucket_build_id}" ], "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -39509,7 +40215,8 @@ "--buildbucket-id=${buildbucket_build_id}" ], "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -39545,7 +40252,8 @@ }, "name": "screenshot_sync_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -39580,7 +40288,8 @@ }, "name": "trace_test", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -39649,7 +40358,8 @@ }, "name": "webgl2_conformance_d3d11_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -39686,7 +40396,8 @@ }, "name": "webgl_conformance_d3d11_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -39723,7 +40434,8 @@ }, "name": "webgl_conformance_d3d9_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -39760,7 +40472,8 @@ }, "name": "webgl_conformance_gl_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -39796,7 +40509,8 @@ }, "name": "webgl_conformance_vulkan_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -40143,7 +40857,8 @@ }, "name": "context_lost_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -40178,7 +40893,8 @@ }, "name": "depth_capture_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -40213,7 +40929,8 @@ }, "name": "gpu_process_launch_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -40248,7 +40965,8 @@ }, "name": "hardware_accelerated_feature_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -40287,7 +41005,8 @@ }, "name": "info_collection_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -40331,7 +41050,8 @@ "--buildbucket-id=${buildbucket_build_id}" ], "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -40375,7 +41095,8 @@ "--buildbucket-id=${buildbucket_build_id}" ], "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -40411,7 +41132,8 @@ }, "name": "screenshot_sync_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -40446,7 +41168,8 @@ }, "name": "trace_test", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -40515,7 +41238,8 @@ }, "name": "webgl2_conformance_d3d11_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -40552,7 +41276,8 @@ }, "name": "webgl_conformance_d3d11_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -40589,7 +41314,8 @@ }, "name": "webgl_conformance_d3d9_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -40626,7 +41352,8 @@ }, "name": "webgl_conformance_gl_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -40662,7 +41389,8 @@ }, "name": "webgl_conformance_vulkan_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": {
diff --git a/testing/buildbot/chromium.gpu.json b/testing/buildbot/chromium.gpu.json index 4fc5c02..6070d74 100644 --- a/testing/buildbot/chromium.gpu.json +++ b/testing/buildbot/chromium.gpu.json
@@ -19,7 +19,8 @@ }, "name": "context_lost_validating_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -61,7 +62,8 @@ }, "name": "depth_capture_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -103,7 +105,8 @@ }, "name": "gpu_process_launch_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -145,7 +148,8 @@ }, "name": "hardware_accelerated_feature_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -191,7 +195,8 @@ }, "name": "info_collection_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -242,7 +247,8 @@ "--buildbucket-id=${buildbucket_build_id}" ], "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -293,7 +299,8 @@ "--buildbucket-id=${buildbucket_build_id}" ], "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -371,7 +378,8 @@ }, "name": "screenshot_sync_validating_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -413,7 +421,8 @@ }, "name": "trace_test", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -456,7 +465,8 @@ }, "name": "webgl_conformance_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -585,7 +595,8 @@ }, "name": "context_lost_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -619,7 +630,8 @@ }, "name": "depth_capture_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -654,7 +666,8 @@ }, "name": "gl_renderer_screenshot_sync_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -688,7 +701,8 @@ }, "name": "gpu_process_launch_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -722,7 +736,8 @@ }, "name": "hardware_accelerated_feature_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -760,7 +775,8 @@ }, "name": "info_collection_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -803,7 +819,8 @@ "--buildbucket-id=${buildbucket_build_id}" ], "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -846,7 +863,8 @@ "--buildbucket-id=${buildbucket_build_id}" ], "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -881,7 +899,8 @@ }, "name": "screenshot_sync_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -915,7 +934,8 @@ }, "name": "trace_test", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -950,7 +970,8 @@ }, "name": "webgl_conformance_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -1067,7 +1088,8 @@ }, "name": "context_lost_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -1101,7 +1123,8 @@ }, "name": "depth_capture_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -1136,7 +1159,8 @@ }, "name": "gl_renderer_screenshot_sync_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -1170,7 +1194,8 @@ }, "name": "gpu_process_launch_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -1204,7 +1229,8 @@ }, "name": "hardware_accelerated_feature_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -1242,7 +1268,8 @@ }, "name": "info_collection_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -1285,7 +1312,8 @@ "--buildbucket-id=${buildbucket_build_id}" ], "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -1328,7 +1356,8 @@ "--buildbucket-id=${buildbucket_build_id}" ], "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -1363,7 +1392,8 @@ }, "name": "screenshot_sync_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -1397,7 +1427,8 @@ }, "name": "trace_test", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -1432,7 +1463,8 @@ }, "name": "webgl_conformance_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -1576,7 +1608,8 @@ }, "name": "context_lost_validating_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -1611,7 +1644,8 @@ }, "name": "depth_capture_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -1646,7 +1680,8 @@ }, "name": "gpu_process_launch_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -1681,7 +1716,8 @@ }, "name": "hardware_accelerated_feature_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -1720,7 +1756,8 @@ }, "name": "info_collection_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -1764,7 +1801,8 @@ "--buildbucket-id=${buildbucket_build_id}" ], "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -1808,7 +1846,8 @@ "--buildbucket-id=${buildbucket_build_id}" ], "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -1844,7 +1883,8 @@ }, "name": "screenshot_sync_validating_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -1879,7 +1919,8 @@ }, "name": "trace_test", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -1915,7 +1956,8 @@ }, "name": "webgl_conformance_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -2088,7 +2130,8 @@ }, "name": "context_lost_validating_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -2123,7 +2166,8 @@ }, "name": "depth_capture_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -2158,7 +2202,8 @@ }, "name": "gpu_process_launch_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -2193,7 +2238,8 @@ }, "name": "hardware_accelerated_feature_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -2232,7 +2278,8 @@ }, "name": "info_collection_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -2276,7 +2323,8 @@ "--buildbucket-id=${buildbucket_build_id}" ], "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -2320,7 +2368,8 @@ "--buildbucket-id=${buildbucket_build_id}" ], "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -2382,7 +2431,8 @@ }, "name": "screenshot_sync_validating_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -2417,7 +2467,8 @@ }, "name": "trace_test", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -2453,7 +2504,8 @@ }, "name": "webgl_conformance_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -2606,7 +2658,8 @@ }, "name": "context_lost_validating_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -2643,7 +2696,8 @@ }, "name": "depth_capture_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -2680,7 +2734,8 @@ }, "name": "gpu_process_launch_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -2717,7 +2772,8 @@ }, "name": "hardware_accelerated_feature_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -2758,7 +2814,8 @@ }, "name": "info_collection_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -2804,7 +2861,8 @@ "--buildbucket-id=${buildbucket_build_id}" ], "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -2850,7 +2908,8 @@ "--buildbucket-id=${buildbucket_build_id}" ], "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -2888,7 +2947,8 @@ }, "name": "screenshot_sync_validating_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -2925,7 +2985,8 @@ }, "name": "trace_test", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -2963,7 +3024,8 @@ }, "name": "webgl_conformance_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -3148,7 +3210,8 @@ }, "name": "context_lost_validating_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -3185,7 +3248,8 @@ }, "name": "depth_capture_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -3222,7 +3286,8 @@ }, "name": "gpu_process_launch_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -3259,7 +3324,8 @@ }, "name": "hardware_accelerated_feature_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -3300,7 +3366,8 @@ }, "name": "info_collection_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -3346,7 +3413,8 @@ "--buildbucket-id=${buildbucket_build_id}" ], "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -3392,7 +3460,8 @@ "--buildbucket-id=${buildbucket_build_id}" ], "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -3458,7 +3527,8 @@ }, "name": "screenshot_sync_validating_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -3495,7 +3565,8 @@ }, "name": "trace_test", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -3533,7 +3604,8 @@ }, "name": "webgl_conformance_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -3702,7 +3774,8 @@ }, "name": "context_lost_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -3736,7 +3809,8 @@ }, "name": "depth_capture_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -3770,7 +3844,8 @@ }, "name": "gpu_process_launch_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -3804,7 +3879,8 @@ }, "name": "hardware_accelerated_feature_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -3842,7 +3918,8 @@ }, "name": "info_collection_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -3885,7 +3962,8 @@ "--buildbucket-id=${buildbucket_build_id}" ], "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -3928,7 +4006,8 @@ "--buildbucket-id=${buildbucket_build_id}" ], "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -3963,7 +4042,8 @@ }, "name": "screenshot_sync_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -3997,7 +4077,8 @@ }, "name": "trace_test", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -4032,7 +4113,8 @@ }, "name": "webgl_conformance_d3d11_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -4198,7 +4280,8 @@ }, "name": "context_lost_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -4232,7 +4315,8 @@ }, "name": "depth_capture_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -4266,7 +4350,8 @@ }, "name": "gpu_process_launch_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -4300,7 +4385,8 @@ }, "name": "hardware_accelerated_feature_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -4338,7 +4424,8 @@ }, "name": "info_collection_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -4381,7 +4468,8 @@ "--buildbucket-id=${buildbucket_build_id}" ], "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -4424,7 +4512,8 @@ "--buildbucket-id=${buildbucket_build_id}" ], "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -4485,7 +4574,8 @@ }, "name": "screenshot_sync_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -4519,7 +4609,8 @@ }, "name": "trace_test", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -4554,7 +4645,8 @@ }, "name": "webgl_conformance_d3d11_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": {
diff --git a/testing/buildbot/chromium.linux.json b/testing/buildbot/chromium.linux.json index bf14e26..7a01081 100644 --- a/testing/buildbot/chromium.linux.json +++ b/testing/buildbot/chromium.linux.json
@@ -4720,7 +4720,8 @@ }, "name": "context_lost_validating_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -4752,7 +4753,8 @@ }, "name": "depth_capture_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -4784,7 +4786,8 @@ }, "name": "gpu_process_launch_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -4816,7 +4819,8 @@ }, "name": "hardware_accelerated_feature_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -4852,7 +4856,8 @@ }, "name": "info_collection_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -4890,7 +4895,8 @@ "--buildbucket-id=${buildbucket_build_id}" ], "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -4922,7 +4928,8 @@ }, "name": "screenshot_sync_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -4954,7 +4961,8 @@ }, "name": "trace_test", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -4986,7 +4994,8 @@ }, "name": "webgl_conformance_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": {
diff --git a/testing/buildbot/chromium.mac.json b/testing/buildbot/chromium.mac.json index e291986..dc4ff10 100644 --- a/testing/buildbot/chromium.mac.json +++ b/testing/buildbot/chromium.mac.json
@@ -1341,6 +1341,11 @@ "test_id_prefix": "ninja://chrome/test:unit_tests/" }, { + "args": [ + "--test-launcher-timeout=90000", + "--ui-test-action-max-timeout=45000", + "--ui-test-action-timeout=40000" + ], "merge": { "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" @@ -3057,6 +3062,11 @@ "test_id_prefix": "ninja://chrome/test:unit_tests/" }, { + "args": [ + "--test-launcher-timeout=90000", + "--ui-test-action-max-timeout=45000", + "--ui-test-action-timeout=40000" + ], "merge": { "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" @@ -3217,6 +3227,36 @@ }, { "args": [ + "--num-retries=3" + ], + "isolate_name": "blink_web_tests", + "merge": { + "args": [ + "--verbose" + ], + "script": "//third_party/blink/tools/merge_web_test_results.py" + }, + "name": "blink_web_tests", + "resultdb": { + "enable": true + }, + "results_handler": "layout tests", + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "gpu": "8086:0a2e", + "os": "Mac-10.12.6" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", + "shards": 25 + }, + "test_id_prefix": "ninja://:blink_web_tests/" + }, + { + "args": [ "--test-type=integration" ], "isolate_name": "chromedriver_py_tests", @@ -4765,6 +4805,11 @@ "test_id_prefix": "ninja://chrome/test:unit_tests/" }, { + "args": [ + "--test-launcher-timeout=90000", + "--ui-test-action-max-timeout=45000", + "--ui-test-action-timeout=40000" + ], "merge": { "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" @@ -6508,6 +6553,11 @@ "test_id_prefix": "ninja://chrome/test:unit_tests/" }, { + "args": [ + "--test-launcher-timeout=90000", + "--ui-test-action-max-timeout=45000", + "--ui-test-action-timeout=40000" + ], "merge": { "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" @@ -8333,6 +8383,11 @@ "test_id_prefix": "ninja://chrome/test:unit_tests/" }, { + "args": [ + "--test-launcher-timeout=90000", + "--ui-test-action-max-timeout=45000", + "--ui-test-action-timeout=40000" + ], "isolate_profile_data": true, "merge": { "args": [], @@ -10113,6 +10168,11 @@ "test_id_prefix": "ninja://chrome/test:unit_tests/" }, { + "args": [ + "--test-launcher-timeout=90000", + "--ui-test-action-max-timeout=45000", + "--ui-test-action-timeout=40000" + ], "merge": { "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" @@ -11779,6 +11839,11 @@ "test_id_prefix": "ninja://chrome/test:unit_tests/" }, { + "args": [ + "--test-launcher-timeout=90000", + "--ui-test-action-max-timeout=45000", + "--ui-test-action-timeout=40000" + ], "merge": { "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" @@ -12269,7 +12334,8 @@ }, "name": "absl_hardening_tests_iPhone 6s 14.4", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -12320,7 +12386,8 @@ }, "name": "absl_hardening_tests_iPhone 6s 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -12371,7 +12438,8 @@ }, "name": "base_unittests_iPad Air 2 14.4", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -12422,7 +12490,8 @@ }, "name": "base_unittests_iPad Air 2 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -12473,7 +12542,8 @@ }, "name": "base_unittests_iPhone 6s 14.4", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -12524,7 +12594,8 @@ }, "name": "base_unittests_iPhone 6s 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -12575,7 +12646,8 @@ }, "name": "base_unittests_iPhone 6s Plus 14.4", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -12626,7 +12698,8 @@ }, "name": "base_unittests_iPhone 6s Plus 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -12677,7 +12750,8 @@ }, "name": "base_unittests_iPhone SE (1st generation) 14.4", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -12728,7 +12802,8 @@ }, "name": "base_unittests_iPhone SE (1st generation) 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -12779,7 +12854,8 @@ }, "name": "boringssl_crypto_tests_iPhone 6s 14.4", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -12830,7 +12906,8 @@ }, "name": "boringssl_crypto_tests_iPhone 6s 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -12881,7 +12958,8 @@ }, "name": "boringssl_ssl_tests_iPhone 6s 14.4", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -12932,7 +13010,8 @@ }, "name": "boringssl_ssl_tests_iPhone 6s 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -12983,7 +13062,8 @@ }, "name": "components_unittests_iPad Air 2 14.4", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -13034,7 +13114,8 @@ }, "name": "components_unittests_iPad Air 2 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -13085,7 +13166,8 @@ }, "name": "components_unittests_iPhone 6s 14.4", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -13136,7 +13218,8 @@ }, "name": "components_unittests_iPhone 6s 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -13187,7 +13270,8 @@ }, "name": "components_unittests_iPhone 6s Plus 14.4", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -13238,7 +13322,8 @@ }, "name": "components_unittests_iPhone 6s Plus 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -13289,7 +13374,8 @@ }, "name": "components_unittests_iPhone SE (1st generation) 14.4", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -13340,7 +13426,8 @@ }, "name": "components_unittests_iPhone SE (1st generation) 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -13391,7 +13478,8 @@ }, "name": "crypto_unittests_iPhone 6s 14.4", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -13442,7 +13530,8 @@ }, "name": "crypto_unittests_iPhone 6s 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -13493,7 +13582,8 @@ }, "name": "gfx_unittests_iPad Air 2 14.4", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -13544,7 +13634,8 @@ }, "name": "gfx_unittests_iPad Air 2 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -13595,7 +13686,8 @@ }, "name": "gfx_unittests_iPhone 6s 14.4", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -13646,7 +13738,8 @@ }, "name": "gfx_unittests_iPhone 6s 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -13697,7 +13790,8 @@ }, "name": "gfx_unittests_iPhone 6s Plus 14.4", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -13748,7 +13842,8 @@ }, "name": "gfx_unittests_iPhone 6s Plus 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -13799,7 +13894,8 @@ }, "name": "gfx_unittests_iPhone SE (1st generation) 14.4", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -13850,7 +13946,8 @@ }, "name": "gfx_unittests_iPhone SE (1st generation) 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -13901,7 +13998,8 @@ }, "name": "google_apis_unittests_iPhone 6s 14.4", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -13952,7 +14050,8 @@ }, "name": "google_apis_unittests_iPhone 6s 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -14004,7 +14103,8 @@ }, "name": "ios_chrome_integration_eg2tests_module_iPhone 6s 14.4", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -14057,7 +14157,8 @@ }, "name": "ios_chrome_integration_eg2tests_module_iPhone 6s 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -14110,7 +14211,8 @@ }, "name": "ios_chrome_signin_eg2tests_module_iPhone 6s 14.4", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -14162,7 +14264,8 @@ }, "name": "ios_chrome_signin_eg2tests_module_iPhone 6s 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -14214,7 +14317,8 @@ }, "name": "ios_chrome_ui_eg2tests_module_iPhone 6s 14.4", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -14267,7 +14371,8 @@ }, "name": "ios_chrome_ui_eg2tests_module_iPhone 6s 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -14319,7 +14424,8 @@ }, "name": "ios_chrome_unittests_iPad Air 2 14.4", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -14370,7 +14476,8 @@ }, "name": "ios_chrome_unittests_iPad Air 2 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -14421,7 +14528,8 @@ }, "name": "ios_chrome_unittests_iPhone 6s 14.4", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -14472,7 +14580,8 @@ }, "name": "ios_chrome_unittests_iPhone 6s 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -14523,7 +14632,8 @@ }, "name": "ios_chrome_unittests_iPhone 6s Plus 14.4", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -14574,7 +14684,8 @@ }, "name": "ios_chrome_unittests_iPhone 6s Plus 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -14625,7 +14736,8 @@ }, "name": "ios_chrome_unittests_iPhone SE (1st generation) 14.4", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -14676,7 +14788,8 @@ }, "name": "ios_chrome_unittests_iPhone SE (1st generation) 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -14727,7 +14840,8 @@ }, "name": "ios_components_unittests_iPhone 6s 14.4", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -14778,7 +14892,8 @@ }, "name": "ios_components_unittests_iPhone 6s 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -14829,7 +14944,8 @@ }, "name": "ios_net_unittests_iPhone 6s 14.4", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -14880,7 +14996,8 @@ }, "name": "ios_net_unittests_iPhone 6s 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -14931,7 +15048,8 @@ }, "name": "ios_remoting_unittests_iPhone 6s 14.4", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -14982,7 +15100,8 @@ }, "name": "ios_remoting_unittests_iPhone 6s 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -15033,7 +15152,8 @@ }, "name": "ios_testing_unittests_iPhone 6s 14.4", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -15084,7 +15204,8 @@ }, "name": "ios_testing_unittests_iPhone 6s 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -15135,7 +15256,8 @@ }, "name": "ios_web_inttests_iPad Air 2 14.4", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -15186,7 +15308,8 @@ }, "name": "ios_web_inttests_iPad Air 2 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -15237,7 +15360,8 @@ }, "name": "ios_web_inttests_iPhone 6s 14.4", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -15288,7 +15412,8 @@ }, "name": "ios_web_inttests_iPhone 6s 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -15339,7 +15464,8 @@ }, "name": "ios_web_inttests_iPhone 6s Plus 14.4", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -15390,7 +15516,8 @@ }, "name": "ios_web_inttests_iPhone 6s Plus 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -15441,7 +15568,8 @@ }, "name": "ios_web_inttests_iPhone SE (1st generation) 14.4", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -15492,7 +15620,8 @@ }, "name": "ios_web_inttests_iPhone SE (1st generation) 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -15544,7 +15673,8 @@ }, "name": "ios_web_shell_eg2tests_module_iPhone 6s 14.4", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -15596,7 +15726,8 @@ }, "name": "ios_web_shell_eg2tests_module_iPhone 6s 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -15647,7 +15778,8 @@ }, "name": "ios_web_unittests_iPad Air 2 14.4", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -15698,7 +15830,8 @@ }, "name": "ios_web_unittests_iPad Air 2 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -15749,7 +15882,8 @@ }, "name": "ios_web_unittests_iPhone 6s 14.4", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -15800,7 +15934,8 @@ }, "name": "ios_web_unittests_iPhone 6s 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -15851,7 +15986,8 @@ }, "name": "ios_web_unittests_iPhone 6s Plus 14.4", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -15902,7 +16038,8 @@ }, "name": "ios_web_unittests_iPhone 6s Plus 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -15953,7 +16090,8 @@ }, "name": "ios_web_unittests_iPhone SE (1st generation) 14.4", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -16004,7 +16142,8 @@ }, "name": "ios_web_unittests_iPhone SE (1st generation) 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -16055,7 +16194,8 @@ }, "name": "ios_web_view_inttests_iPad Air 2 14.4", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -16106,7 +16246,8 @@ }, "name": "ios_web_view_inttests_iPad Air 2 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -16157,7 +16298,8 @@ }, "name": "ios_web_view_inttests_iPhone 6s 14.4", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -16208,7 +16350,8 @@ }, "name": "ios_web_view_inttests_iPhone 6s 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -16259,7 +16402,8 @@ }, "name": "ios_web_view_inttests_iPhone 6s Plus 14.4", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -16310,7 +16454,8 @@ }, "name": "ios_web_view_inttests_iPhone 6s Plus 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -16361,7 +16506,8 @@ }, "name": "ios_web_view_inttests_iPhone SE (1st generation) 14.4", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -16412,7 +16558,8 @@ }, "name": "ios_web_view_inttests_iPhone SE (1st generation) 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -16463,7 +16610,8 @@ }, "name": "ios_web_view_unittests_iPad Air 2 14.4", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -16514,7 +16662,8 @@ }, "name": "ios_web_view_unittests_iPad Air 2 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -16565,7 +16714,8 @@ }, "name": "ios_web_view_unittests_iPhone 6s 14.4", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -16616,7 +16766,8 @@ }, "name": "ios_web_view_unittests_iPhone 6s 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -16667,7 +16818,8 @@ }, "name": "ios_web_view_unittests_iPhone 6s Plus 14.4", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -16718,7 +16870,8 @@ }, "name": "ios_web_view_unittests_iPhone 6s Plus 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -16769,7 +16922,8 @@ }, "name": "ios_web_view_unittests_iPhone SE (1st generation) 14.4", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -16820,7 +16974,8 @@ }, "name": "ios_web_view_unittests_iPhone SE (1st generation) 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -16871,7 +17026,8 @@ }, "name": "net_unittests_iPhone 6s 14.4", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -16922,7 +17078,8 @@ }, "name": "net_unittests_iPhone 6s 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -16973,7 +17130,8 @@ }, "name": "services_unittests_iPhone 6s 14.4", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -17024,7 +17182,8 @@ }, "name": "services_unittests_iPhone 6s 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -17075,7 +17234,8 @@ }, "name": "skia_unittests_iPad Air 2 14.4", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -17126,7 +17286,8 @@ }, "name": "skia_unittests_iPad Air 2 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -17177,7 +17338,8 @@ }, "name": "skia_unittests_iPhone 6s 14.4", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -17228,7 +17390,8 @@ }, "name": "skia_unittests_iPhone 6s 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -17279,7 +17442,8 @@ }, "name": "skia_unittests_iPhone 6s Plus 14.4", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -17330,7 +17494,8 @@ }, "name": "skia_unittests_iPhone 6s Plus 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -17381,7 +17546,8 @@ }, "name": "skia_unittests_iPhone SE (1st generation) 14.4", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -17432,7 +17598,8 @@ }, "name": "skia_unittests_iPhone SE (1st generation) 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -17483,7 +17650,8 @@ }, "name": "sql_unittests_iPhone 6s 14.4", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -17534,7 +17702,8 @@ }, "name": "sql_unittests_iPhone 6s 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -17585,7 +17754,8 @@ }, "name": "ui_base_unittests_iPad Air 2 14.4", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -17636,7 +17806,8 @@ }, "name": "ui_base_unittests_iPad Air 2 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -17687,7 +17858,8 @@ }, "name": "ui_base_unittests_iPhone 6s 14.4", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -17738,7 +17910,8 @@ }, "name": "ui_base_unittests_iPhone 6s 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -17789,7 +17962,8 @@ }, "name": "ui_base_unittests_iPhone 6s Plus 14.4", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -17840,7 +18014,8 @@ }, "name": "ui_base_unittests_iPhone 6s Plus 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -17891,7 +18066,8 @@ }, "name": "ui_base_unittests_iPhone SE (1st generation) 14.4", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -17942,7 +18118,8 @@ }, "name": "ui_base_unittests_iPhone SE (1st generation) 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -17993,7 +18170,8 @@ }, "name": "url_unittests_iPhone 6s 14.4", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -18044,7 +18222,8 @@ }, "name": "url_unittests_iPhone 6s 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -18103,7 +18282,8 @@ }, "name": "ios_chrome_bookmarks_eg2tests_module_iPad Air 2 14.4", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -18155,7 +18335,8 @@ }, "name": "ios_chrome_bookmarks_eg2tests_module_iPad Air 2 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -18207,7 +18388,8 @@ }, "name": "ios_chrome_bookmarks_eg2tests_module_iPhone 7 14.4", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -18259,7 +18441,8 @@ }, "name": "ios_chrome_bookmarks_eg2tests_module_iPhone 7 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -18311,7 +18494,8 @@ }, "name": "ios_chrome_bookmarks_eg2tests_module_iPhone X 14.4", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -18363,7 +18547,8 @@ }, "name": "ios_chrome_bookmarks_eg2tests_module_iPhone X 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -18415,7 +18600,8 @@ }, "name": "ios_chrome_integration_eg2tests_module_iPad Air 2 14.4", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -18468,7 +18654,8 @@ }, "name": "ios_chrome_integration_eg2tests_module_iPad Air 2 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -18521,7 +18708,8 @@ }, "name": "ios_chrome_integration_eg2tests_module_iPhone 7 14.4", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -18574,7 +18762,8 @@ }, "name": "ios_chrome_integration_eg2tests_module_iPhone 7 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -18627,7 +18816,8 @@ }, "name": "ios_chrome_settings_eg2tests_module_iPad Air 2 14.4", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -18680,7 +18870,8 @@ }, "name": "ios_chrome_settings_eg2tests_module_iPad Air 2 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -18733,7 +18924,8 @@ }, "name": "ios_chrome_settings_eg2tests_module_iPhone 7 14.4", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -18786,7 +18978,8 @@ }, "name": "ios_chrome_settings_eg2tests_module_iPhone 7 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -18839,7 +19032,8 @@ }, "name": "ios_chrome_settings_eg2tests_module_iPhone X 14.4", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -18892,7 +19086,8 @@ }, "name": "ios_chrome_settings_eg2tests_module_iPhone X 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -18945,7 +19140,8 @@ }, "name": "ios_chrome_signin_eg2tests_module_iPad Air 2 14.4", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -18997,7 +19193,8 @@ }, "name": "ios_chrome_signin_eg2tests_module_iPad Air 2 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -19049,7 +19246,8 @@ }, "name": "ios_chrome_signin_eg2tests_module_iPhone 7 14.4", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -19101,7 +19299,8 @@ }, "name": "ios_chrome_signin_eg2tests_module_iPhone 7 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -19153,7 +19352,8 @@ }, "name": "ios_chrome_smoke_eg2tests_module_iPad Air 2 14.4", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -19205,7 +19405,8 @@ }, "name": "ios_chrome_smoke_eg2tests_module_iPad Air 2 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -19257,7 +19458,8 @@ }, "name": "ios_chrome_smoke_eg2tests_module_iPhone 7 14.4", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -19309,7 +19511,8 @@ }, "name": "ios_chrome_smoke_eg2tests_module_iPhone 7 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -19361,7 +19564,8 @@ }, "name": "ios_chrome_smoke_eg2tests_module_iPhone X 14.4", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -19413,7 +19617,8 @@ }, "name": "ios_chrome_smoke_eg2tests_module_iPhone X 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -19465,7 +19670,8 @@ }, "name": "ios_chrome_ui_eg2tests_module_iPad Air 2 14.4", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -19518,7 +19724,8 @@ }, "name": "ios_chrome_ui_eg2tests_module_iPad Air 2 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -19571,7 +19778,8 @@ }, "name": "ios_chrome_ui_eg2tests_module_iPhone 7 14.4", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -19624,7 +19832,8 @@ }, "name": "ios_chrome_ui_eg2tests_module_iPhone 7 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -19677,7 +19886,8 @@ }, "name": "ios_chrome_web_eg2tests_module_iPad Air 2 14.4", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -19729,7 +19939,8 @@ }, "name": "ios_chrome_web_eg2tests_module_iPad Air 2 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -19781,7 +19992,8 @@ }, "name": "ios_chrome_web_eg2tests_module_iPhone 7 14.4", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -19833,7 +20045,8 @@ }, "name": "ios_chrome_web_eg2tests_module_iPhone 7 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -19885,7 +20098,8 @@ }, "name": "ios_chrome_web_eg2tests_module_iPhone X 14.4", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -19937,7 +20151,8 @@ }, "name": "ios_chrome_web_eg2tests_module_iPhone X 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -19989,7 +20204,8 @@ }, "name": "ios_showcase_eg2tests_module_iPad Air 2 14.4", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -20041,7 +20257,8 @@ }, "name": "ios_showcase_eg2tests_module_iPad Air 2 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -20093,7 +20310,8 @@ }, "name": "ios_showcase_eg2tests_module_iPhone 7 14.4", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -20145,7 +20363,8 @@ }, "name": "ios_showcase_eg2tests_module_iPhone 7 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -20197,7 +20416,8 @@ }, "name": "ios_showcase_eg2tests_module_iPhone X 14.4", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -20249,7 +20469,8 @@ }, "name": "ios_showcase_eg2tests_module_iPhone X 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -20301,7 +20522,8 @@ }, "name": "ios_web_shell_eg2tests_module_iPad Air 2 14.4", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -20353,7 +20575,8 @@ }, "name": "ios_web_shell_eg2tests_module_iPad Air 2 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -20405,7 +20628,8 @@ }, "name": "ios_web_shell_eg2tests_module_iPhone 7 14.4", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -20457,7 +20681,8 @@ }, "name": "ios_web_shell_eg2tests_module_iPhone 7 15.0", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -20514,7 +20739,8 @@ }, "name": "absl_hardening_tests_iPhone 6s 14.4", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -20564,7 +20790,8 @@ }, "name": "boringssl_crypto_tests_iPhone 6s 14.4", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -20614,7 +20841,8 @@ }, "name": "boringssl_ssl_tests_iPhone 6s 14.4", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -20664,7 +20892,8 @@ }, "name": "crypto_unittests_iPhone 6s 14.4", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -20714,7 +20943,8 @@ }, "name": "google_apis_unittests_iPhone 6s 14.4", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -20765,7 +20995,8 @@ }, "name": "ios_chrome_bookmarks_eg2tests_module_iPhone 6s 14.4", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -20816,7 +21047,8 @@ }, "name": "ios_chrome_integration_eg2tests_module_iPad Air 2 14.4", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -20868,7 +21100,8 @@ }, "name": "ios_chrome_integration_eg2tests_module_iPhone 6s 14.4", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -20920,7 +21153,8 @@ }, "name": "ios_chrome_integration_eg2tests_module_iPhone 6s Plus 14.4", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -20972,7 +21206,8 @@ }, "name": "ios_chrome_integration_eg2tests_module_iPhone SE (1st generation) 14.4", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -21024,7 +21259,8 @@ }, "name": "ios_chrome_settings_eg2tests_module_iPhone 6s 14.4", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -21076,7 +21312,8 @@ }, "name": "ios_chrome_signin_eg2tests_module_iPad Air 2 14.4", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -21127,7 +21364,8 @@ }, "name": "ios_chrome_signin_eg2tests_module_iPhone 6s 14.4", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -21178,7 +21416,8 @@ }, "name": "ios_chrome_signin_eg2tests_module_iPhone 6s Plus 14.4", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -21229,7 +21468,8 @@ }, "name": "ios_chrome_signin_eg2tests_module_iPhone SE (1st generation) 14.4", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -21280,7 +21520,8 @@ }, "name": "ios_chrome_smoke_eg2tests_module_iPhone 6s 14.4", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -21331,7 +21572,8 @@ }, "name": "ios_chrome_ui_eg2tests_module_iPad Air 2 14.4", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -21383,7 +21625,8 @@ }, "name": "ios_chrome_ui_eg2tests_module_iPhone 6s 14.4", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -21435,7 +21678,8 @@ }, "name": "ios_chrome_ui_eg2tests_module_iPhone 6s Plus 14.4", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -21487,7 +21731,8 @@ }, "name": "ios_chrome_ui_eg2tests_module_iPhone SE (1st generation) 14.4", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -21539,7 +21784,8 @@ }, "name": "ios_chrome_web_eg2tests_module_iPhone 6s 14.4", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -21589,7 +21835,8 @@ }, "name": "ios_components_unittests_iPhone 6s 14.4", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -21639,7 +21886,8 @@ }, "name": "ios_net_unittests_iPhone 6s 14.4", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -21689,7 +21937,8 @@ }, "name": "ios_remoting_unittests_iPhone 6s 14.4", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -21740,7 +21989,8 @@ }, "name": "ios_showcase_eg2tests_module_iPhone 6s 14.4", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -21790,7 +22040,8 @@ }, "name": "ios_testing_unittests_iPhone 6s 14.4", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -21841,7 +22092,8 @@ }, "name": "ios_web_shell_eg2tests_module_iPad Air 2 14.4", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -21892,7 +22144,8 @@ }, "name": "ios_web_shell_eg2tests_module_iPhone 6s 14.4", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -21943,7 +22196,8 @@ }, "name": "ios_web_shell_eg2tests_module_iPhone 6s Plus 14.4", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -21994,7 +22248,8 @@ }, "name": "ios_web_shell_eg2tests_module_iPhone SE (1st generation) 14.4", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -22044,7 +22299,8 @@ }, "name": "net_unittests_iPhone 6s 14.4", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -22094,7 +22350,8 @@ }, "name": "services_unittests_iPhone 6s 14.4", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -22144,7 +22401,8 @@ }, "name": "sql_unittests_iPhone 6s 14.4", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -22194,7 +22452,8 @@ }, "name": "url_unittests_iPhone 6s 14.4", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -23506,6 +23765,11 @@ "test_id_prefix": "ninja://chrome/test:unit_tests/" }, { + "args": [ + "--test-launcher-timeout=90000", + "--ui-test-action-max-timeout=45000", + "--ui-test-action-timeout=40000" + ], "merge": { "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py"
diff --git a/testing/buildbot/chromium.memory.json b/testing/buildbot/chromium.memory.json index 1351d24..a26580f 100644 --- a/testing/buildbot/chromium.memory.json +++ b/testing/buildbot/chromium.memory.json
@@ -12794,6 +12794,9 @@ }, { "args": [ + "--test-launcher-timeout=90000", + "--ui-test-action-max-timeout=45000", + "--ui-test-action-timeout=40000", "--test-launcher-print-test-stdio=always" ], "merge": { @@ -13076,7 +13079,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -13125,7 +13129,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -13175,7 +13180,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -13224,7 +13230,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -13273,7 +13280,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -13322,7 +13330,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -13371,7 +13380,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -13420,7 +13430,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -13469,7 +13480,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -13519,7 +13531,8 @@ }, "name": "webkit_unit_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -13569,7 +13582,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -13618,7 +13632,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -13668,7 +13683,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -13718,7 +13734,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -13767,7 +13784,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -13816,7 +13834,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -13865,7 +13884,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -13914,7 +13934,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -13963,7 +13984,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -14014,7 +14036,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -14064,7 +14087,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -14114,7 +14138,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -14163,7 +14188,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -14212,7 +14238,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -14261,7 +14288,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -14310,7 +14338,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -14359,7 +14388,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -14408,7 +14438,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -14457,7 +14488,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -14508,7 +14540,8 @@ }, "name": "gl_tests_validating", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -14557,7 +14590,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -14606,7 +14640,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -14655,7 +14690,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -14704,7 +14740,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -14753,7 +14790,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -14803,7 +14841,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -14852,7 +14891,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -14901,7 +14941,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -14950,7 +14991,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -14999,7 +15041,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -15048,7 +15091,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -15097,7 +15141,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -15146,7 +15191,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -15196,7 +15242,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -15246,7 +15293,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -15295,7 +15343,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -15344,7 +15393,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -15393,7 +15443,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -15442,7 +15493,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -15491,7 +15543,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -15540,7 +15593,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -15589,7 +15643,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -15639,7 +15694,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -15689,7 +15745,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -15738,7 +15795,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -15787,7 +15845,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -15836,7 +15895,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -15885,7 +15945,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -15934,7 +15995,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -15983,7 +16045,8 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -19130,6 +19193,11 @@ "test_id_prefix": "ninja://chrome/test:unit_tests/" }, { + "args": [ + "--test-launcher-timeout=90000", + "--ui-test-action-max-timeout=45000", + "--ui-test-action-timeout=40000" + ], "merge": { "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py"
diff --git a/testing/buildbot/chromium.swangle.json b/testing/buildbot/chromium.swangle.json index a86b69a..5cdb7008 100644 --- a/testing/buildbot/chromium.swangle.json +++ b/testing/buildbot/chromium.swangle.json
@@ -21,7 +21,8 @@ }, "name": "webgl_conformance_swangle_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -57,7 +58,8 @@ }, "name": "webgl_conformance_swiftshader_validating_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -1374,7 +1376,8 @@ }, "name": "webgl_conformance_swangle_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -1411,7 +1414,8 @@ }, "name": "webgl_conformance_swiftshader_validating_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -1452,7 +1456,8 @@ }, "name": "webgl_conformance_swangle_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -1487,7 +1492,8 @@ }, "name": "webgl_conformance_swiftshader_validating_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": {
diff --git a/testing/buildbot/chromium.updater.json b/testing/buildbot/chromium.updater.json index 4c00530..93ab6c2c 100644 --- a/testing/buildbot/chromium.updater.json +++ b/testing/buildbot/chromium.updater.json
@@ -4,6 +4,11 @@ "mac-arm64-updater-tester-dbg": { "gtest_tests": [ { + "args": [ + "--test-launcher-timeout=90000", + "--ui-test-action-max-timeout=45000", + "--ui-test-action-timeout=40000" + ], "merge": { "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" @@ -27,6 +32,11 @@ "mac-arm64-updater-tester-rel": { "gtest_tests": [ { + "args": [ + "--test-launcher-timeout=90000", + "--ui-test-action-max-timeout=45000", + "--ui-test-action-timeout=40000" + ], "merge": { "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" @@ -50,6 +60,11 @@ "mac10.11-updater-tester-dbg": { "gtest_tests": [ { + "args": [ + "--test-launcher-timeout=90000", + "--ui-test-action-max-timeout=45000", + "--ui-test-action-timeout=40000" + ], "merge": { "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" @@ -73,6 +88,11 @@ "mac10.11-updater-tester-rel": { "gtest_tests": [ { + "args": [ + "--test-launcher-timeout=90000", + "--ui-test-action-max-timeout=45000", + "--ui-test-action-timeout=40000" + ], "merge": { "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" @@ -96,6 +116,11 @@ "mac10.12-updater-tester-dbg": { "gtest_tests": [ { + "args": [ + "--test-launcher-timeout=90000", + "--ui-test-action-max-timeout=45000", + "--ui-test-action-timeout=40000" + ], "merge": { "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" @@ -119,6 +144,11 @@ "mac10.12-updater-tester-rel": { "gtest_tests": [ { + "args": [ + "--test-launcher-timeout=90000", + "--ui-test-action-max-timeout=45000", + "--ui-test-action-timeout=40000" + ], "merge": { "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" @@ -142,6 +172,11 @@ "mac10.13-updater-tester-dbg": { "gtest_tests": [ { + "args": [ + "--test-launcher-timeout=90000", + "--ui-test-action-max-timeout=45000", + "--ui-test-action-timeout=40000" + ], "merge": { "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" @@ -165,6 +200,11 @@ "mac10.13-updater-tester-rel": { "gtest_tests": [ { + "args": [ + "--test-launcher-timeout=90000", + "--ui-test-action-max-timeout=45000", + "--ui-test-action-timeout=40000" + ], "merge": { "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" @@ -188,6 +228,11 @@ "mac10.14-updater-tester-dbg": { "gtest_tests": [ { + "args": [ + "--test-launcher-timeout=90000", + "--ui-test-action-max-timeout=45000", + "--ui-test-action-timeout=40000" + ], "merge": { "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" @@ -211,6 +256,11 @@ "mac10.14-updater-tester-rel": { "gtest_tests": [ { + "args": [ + "--test-launcher-timeout=90000", + "--ui-test-action-max-timeout=45000", + "--ui-test-action-timeout=40000" + ], "merge": { "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" @@ -234,6 +284,11 @@ "mac10.15-updater-tester-dbg": { "gtest_tests": [ { + "args": [ + "--test-launcher-timeout=90000", + "--ui-test-action-max-timeout=45000", + "--ui-test-action-timeout=40000" + ], "merge": { "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" @@ -257,6 +312,11 @@ "mac10.15-updater-tester-rel": { "gtest_tests": [ { + "args": [ + "--test-launcher-timeout=90000", + "--ui-test-action-max-timeout=45000", + "--ui-test-action-timeout=40000" + ], "merge": { "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" @@ -276,6 +336,11 @@ "test_id_prefix": "ninja://chrome/updater:updater_tests/" }, { + "args": [ + "--test-launcher-timeout=90000", + "--ui-test-action-max-timeout=45000", + "--ui-test-action-timeout=40000" + ], "merge": { "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" @@ -299,6 +364,11 @@ "mac11.0-updater-tester-dbg": { "gtest_tests": [ { + "args": [ + "--test-launcher-timeout=90000", + "--ui-test-action-max-timeout=45000", + "--ui-test-action-timeout=40000" + ], "merge": { "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" @@ -322,6 +392,11 @@ "mac11.0-updater-tester-rel": { "gtest_tests": [ { + "args": [ + "--test-launcher-timeout=90000", + "--ui-test-action-max-timeout=45000", + "--ui-test-action-timeout=40000" + ], "merge": { "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" @@ -345,6 +420,11 @@ "win10-updater-tester-dbg": { "gtest_tests": [ { + "args": [ + "--test-launcher-timeout=90000", + "--ui-test-action-max-timeout=45000", + "--ui-test-action-timeout=40000" + ], "merge": { "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" @@ -365,9 +445,42 @@ } ] }, + "win10-updater-tester-dbg-uac": { + "gtest_tests": [ + { + "args": [ + "--test-launcher-timeout=90000", + "--ui-test-action-max-timeout=45000", + "--ui-test-action-timeout=40000" + ], + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Windows-10-18363", + "pool": "chromium.win.uac" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "updater_tests", + "test_id_prefix": "ninja://chrome/updater:updater_tests/" + } + ] + }, "win10-updater-tester-rel": { "gtest_tests": [ { + "args": [ + "--test-launcher-timeout=90000", + "--ui-test-action-max-timeout=45000", + "--ui-test-action-timeout=40000" + ], "merge": { "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" @@ -391,6 +504,11 @@ "win7(32)-updater-tester-dbg": { "gtest_tests": [ { + "args": [ + "--test-launcher-timeout=90000", + "--ui-test-action-max-timeout=45000", + "--ui-test-action-timeout=40000" + ], "merge": { "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" @@ -414,6 +532,11 @@ "win7(32)-updater-tester-rel": { "gtest_tests": [ { + "args": [ + "--test-launcher-timeout=90000", + "--ui-test-action-max-timeout=45000", + "--ui-test-action-timeout=40000" + ], "merge": { "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" @@ -437,6 +560,11 @@ "win7-updater-tester-dbg": { "gtest_tests": [ { + "args": [ + "--test-launcher-timeout=90000", + "--ui-test-action-max-timeout=45000", + "--ui-test-action-timeout=40000" + ], "merge": { "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" @@ -460,6 +588,11 @@ "win7-updater-tester-rel": { "gtest_tests": [ { + "args": [ + "--test-launcher-timeout=90000", + "--ui-test-action-max-timeout=45000", + "--ui-test-action-timeout=40000" + ], "merge": { "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py"
diff --git a/testing/buildbot/chromium.win.json b/testing/buildbot/chromium.win.json index b53fb1f1..03ff06bf 100644 --- a/testing/buildbot/chromium.win.json +++ b/testing/buildbot/chromium.win.json
@@ -1105,6 +1105,11 @@ "test_id_prefix": "ninja://chrome/test:unit_tests/" }, { + "args": [ + "--test-launcher-timeout=90000", + "--ui-test-action-max-timeout=45000", + "--ui-test-action-timeout=40000" + ], "merge": { "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" @@ -3289,6 +3294,11 @@ "test_id_prefix": "ninja://chrome/test:unit_tests/" }, { + "args": [ + "--test-launcher-timeout=90000", + "--ui-test-action-max-timeout=45000", + "--ui-test-action-timeout=40000" + ], "isolate_profile_data": true, "merge": { "args": [], @@ -5494,6 +5504,11 @@ "test_id_prefix": "ninja://chrome/test:unit_tests/" }, { + "args": [ + "--test-launcher-timeout=90000", + "--ui-test-action-max-timeout=45000", + "--ui-test-action-timeout=40000" + ], "merge": { "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" @@ -7123,6 +7138,11 @@ "test_id_prefix": "ninja://chrome/test:unit_tests/" }, { + "args": [ + "--test-launcher-timeout=90000", + "--ui-test-action-max-timeout=45000", + "--ui-test-action-timeout=40000" + ], "merge": { "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" @@ -8627,6 +8647,11 @@ "test_id_prefix": "ninja://chrome/test:unit_tests/" }, { + "args": [ + "--test-launcher-timeout=90000", + "--ui-test-action-max-timeout=45000", + "--ui-test-action-timeout=40000" + ], "merge": { "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py"
diff --git a/testing/buildbot/client.v8.fyi.json b/testing/buildbot/client.v8.fyi.json index 07b6b8cb..84e4a40 100644 --- a/testing/buildbot/client.v8.fyi.json +++ b/testing/buildbot/client.v8.fyi.json
@@ -19,7 +19,8 @@ }, "name": "context_lost_validating_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -60,7 +61,8 @@ }, "name": "depth_capture_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -101,7 +103,8 @@ }, "name": "gpu_process_launch_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -142,7 +145,8 @@ }, "name": "hardware_accelerated_feature_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -192,7 +196,8 @@ "--buildbucket-id=${buildbucket_build_id}" ], "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -242,7 +247,8 @@ "--buildbucket-id=${buildbucket_build_id}" ], "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -284,7 +290,8 @@ }, "name": "screenshot_sync_validating_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -325,7 +332,8 @@ }, "name": "trace_test", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -367,7 +375,8 @@ }, "name": "webgl_conformance_gles_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -410,7 +419,8 @@ }, "name": "webgl_conformance_validating_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -463,7 +473,8 @@ }, "name": "context_lost_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -496,7 +507,8 @@ }, "name": "depth_capture_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -529,7 +541,8 @@ }, "name": "gpu_process_launch_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -562,7 +575,8 @@ }, "name": "hardware_accelerated_feature_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -604,7 +618,8 @@ "--buildbucket-id=${buildbucket_build_id}" ], "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -646,7 +661,8 @@ "--buildbucket-id=${buildbucket_build_id}" ], "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -680,7 +696,8 @@ }, "name": "screenshot_sync_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -713,7 +730,8 @@ }, "name": "trace_test", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -748,7 +766,8 @@ }, "name": "webgl2_conformance_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -783,7 +802,8 @@ }, "name": "webgl_conformance_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -821,7 +841,8 @@ }, "name": "context_lost_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -854,7 +875,8 @@ }, "name": "depth_capture_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -887,7 +909,8 @@ }, "name": "gpu_process_launch_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -920,7 +943,8 @@ }, "name": "hardware_accelerated_feature_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -962,7 +986,8 @@ "--buildbucket-id=${buildbucket_build_id}" ], "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -1004,7 +1029,8 @@ "--buildbucket-id=${buildbucket_build_id}" ], "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -1038,7 +1064,8 @@ }, "name": "screenshot_sync_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -1071,7 +1098,8 @@ }, "name": "trace_test", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -1106,7 +1134,8 @@ }, "name": "webgl2_conformance_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -1141,7 +1170,8 @@ }, "name": "webgl_conformance_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -1179,7 +1209,8 @@ }, "name": "context_lost_validating_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -1213,7 +1244,8 @@ }, "name": "depth_capture_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -1247,7 +1279,8 @@ }, "name": "gpu_process_launch_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -1281,7 +1314,8 @@ }, "name": "hardware_accelerated_feature_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -1324,7 +1358,8 @@ "--buildbucket-id=${buildbucket_build_id}" ], "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -1367,7 +1402,8 @@ "--buildbucket-id=${buildbucket_build_id}" ], "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -1402,7 +1438,8 @@ }, "name": "screenshot_sync_validating_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -1436,7 +1473,8 @@ }, "name": "trace_test", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -1472,7 +1510,8 @@ }, "name": "webgl2_conformance_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -1508,7 +1547,8 @@ }, "name": "webgl_conformance_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -1868,7 +1908,8 @@ }, "name": "context_lost_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -1901,7 +1942,8 @@ }, "name": "depth_capture_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -1934,7 +1976,8 @@ }, "name": "gpu_process_launch_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -1967,7 +2010,8 @@ }, "name": "hardware_accelerated_feature_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -2009,7 +2053,8 @@ "--buildbucket-id=${buildbucket_build_id}" ], "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -2051,7 +2096,8 @@ "--buildbucket-id=${buildbucket_build_id}" ], "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -2085,7 +2131,8 @@ }, "name": "screenshot_sync_passthrough_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -2118,7 +2165,8 @@ }, "name": "trace_test", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -2153,7 +2201,8 @@ }, "name": "webgl2_conformance_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": { @@ -2188,7 +2237,8 @@ }, "name": "webgl_conformance_tests", "resultdb": { - "enable": true + "enable": true, + "has_native_resultdb_integration": true }, "should_retry_with_patch": false, "swarming": {
diff --git a/testing/buildbot/filters/BUILD.gn b/testing/buildbot/filters/BUILD.gn index b26e559..a07cfd3 100644 --- a/testing/buildbot/filters/BUILD.gn +++ b/testing/buildbot/filters/BUILD.gn
@@ -224,6 +224,7 @@ source_set("net_unittests_filters") { data = [ "//testing/buildbot/filters/android.emulator.net_unittests.filter", + "//testing/buildbot/filters/android.emulator_10.net_unittests.filter", "//testing/buildbot/filters/android.emulator_11.net_unittests.filter", ] }
diff --git a/testing/buildbot/filters/android.emulator_10.net_unittests.filter b/testing/buildbot/filters/android.emulator_10.net_unittests.filter new file mode 100644 index 0000000..4cd573672 --- /dev/null +++ b/testing/buildbot/filters/android.emulator_10.net_unittests.filter
@@ -0,0 +1,5 @@ +# crbug.com/1191793 +-MimeUtilTest.ExtensionTest + +# crbug.com/1191795 +-All/CertVerifyProcInternalWithNetFetchingTest.Sha1IntermediateButAIAHasSha256/CertVerifyProcAndroid
diff --git a/testing/buildbot/mixins.pyl b/testing/buildbot/mixins.pyl index f8e2dd5..0619139 100644 --- a/testing/buildbot/mixins.pyl +++ b/testing/buildbot/mixins.pyl
@@ -372,11 +372,6 @@ }, }, }, - 'enable_resultdb': { - 'resultdb': { - 'enable': True, - }, - }, 'femu-additional-ram': { '$mixin_append': { 'args': [ @@ -455,6 +450,9 @@ 'has_native_resultdb_integration': { 'resultdb': { 'enable': True, + # TODO(crbug.com/1163797): Remove the 'enable' field in favor of + # 'has_native_resultdb_integration'. + 'has_native_resultdb_integration': True, }, }, 'intel_iris_5100': {
diff --git a/testing/buildbot/test_suite_exceptions.pyl b/testing/buildbot/test_suite_exceptions.pyl index 2382231..16891b4 100644 --- a/testing/buildbot/test_suite_exceptions.pyl +++ b/testing/buildbot/test_suite_exceptions.pyl
@@ -223,7 +223,6 @@ 'remove_from': [ 'mac-arm64-rel-tests', # TODO(https://crbug.com/1169240): Enable 'Mac10.11 Tests', - 'Mac10.12 Tests', 'Win 7 Tests x64 (1)', # 64-bit win is unsupported by the layout tests. 'Win10 Tests x64 (dbg)', ], @@ -249,6 +248,11 @@ 'shards': 30, }, }, + 'Mac10.12 Tests': { + 'swarming': { + 'shards': 25, + }, + }, 'Mac10.13 Tests': { 'swarming': { 'dimension_sets': [ @@ -2188,6 +2192,11 @@ '--test-launcher-filter-file=../../testing/buildbot/filters/android.emulator_11.net_unittests.filter', ], }, + 'android-cronet-x86-dbg-10-tests': { + 'args': [ + '--test-launcher-filter-file=../../testing/buildbot/filters/android.emulator_10.net_unittests.filter', + ], + }, 'android-marshmallow-x86-rel-non-cq': { # crbug.com/1046060 'args': [
diff --git a/testing/buildbot/test_suites.pyl b/testing/buildbot/test_suites.pyl index 12be872..9e89c110 100644 --- a/testing/buildbot/test_suites.pyl +++ b/testing/buildbot/test_suites.pyl
@@ -3976,12 +3976,8 @@ # TODO(crbug.com/816629) - Move these args into //BUILD.gn. 'name': 'webgpu_blink_web_tests_with_backend_validation', 'args': [ - # Disable parallel jobs to work around consistent test timeout flakes. - # Also, the first test is always flaky due to startup time, so force - # the order so we can suppress it. - # TODO(crbug.com/953991): Solve this and remove the workaround. - '--jobs=1', - '--order=natural', + # crbug.com/953991 Ensure WebGPU is ready before running tests + '--initialize-webgpu-adapter-at-startup', '--additional-driver-flag=--enable-dawn-backend-validation', # Make Dawn allow "Unsafe APIs" so they can be tested with the WebGPU CTS. '--additional-driver-flag=--disable-dawn-features=disallow_unsafe_apis', @@ -4013,6 +4009,9 @@ 'resultdb': { 'enable': True, }, + 'swarming': { + 'shards': 4, + }, }, }, @@ -4021,12 +4020,8 @@ # TODO(crbug.com/816629) - Move these args into //BUILD.gn. 'name': 'webgpu_blink_web_tests', 'args': [ - # Disable parallel jobs to work around consistent test timeout flakes. - # Also, the first test is always flaky due to startup time, so force - # the order so we can suppress it. - # TODO(crbug.com/953991): Solve this and remove the workaround. - '--jobs=1', - '--order=natural', + # crbug.com/953991 Ensure WebGPU is ready before running tests + '--initialize-webgpu-adapter-at-startup', # Make Dawn allow "Unsafe APIs" so they can be tested with the WebGPU CTS. '--additional-driver-flag=--disable-dawn-features=disallow_unsafe_apis', # We need this flag to initialize ANGLE so that we can explicitly tell @@ -4055,6 +4050,9 @@ 'resultdb': { 'enable': True, }, + 'swarming': { + 'shards': 4, + }, }, }, @@ -4065,12 +4063,8 @@ # TODO(crbug.com/816629) - Move these args into //BUILD.gn. 'name': 'webgpu_blink_web_tests_with_backend_validation', 'args': [ - # Disable parallel jobs to work around consistent test timeout flakes. - # Also, the first test is always flaky due to startup time, so force - # the order so we can suppress it. - # TODO(crbug.com/953991): Solve this and remove the workaround. - '--jobs=1', - '--order=natural', + # crbug.com/953991 Ensure WebGPU is ready before running tests + '--initialize-webgpu-adapter-at-startup', '--additional-driver-flag=--enable-dawn-backend-validation=partial', # Make Dawn allow "Unsafe APIs" so they can be tested with the WebGPU CTS. '--additional-driver-flag=--disable-dawn-features=disallow_unsafe_apis', @@ -4102,6 +4096,9 @@ 'resultdb': { 'enable': True, }, + 'swarming': { + 'shards': 4, + }, }, }, @@ -4488,7 +4485,14 @@ 'mac_specific_chromium_gtests': { 'sandbox_mac_unittests': {}, - 'updater_tests': {}, + 'updater_tests': { + 'args': [ + # Timeouts based on empirical observations of test runtimes, 2021-07. + '--test-launcher-timeout=90000', + '--ui-test-action-max-timeout=45000', + '--ui-test-action-timeout=40000', + ], + }, 'xr_browser_tests': { 'test': 'xr_browser_tests', }, @@ -5144,11 +5148,24 @@ }, 'updater_gtests': { - 'updater_tests': {}, + 'updater_tests': { + 'args': [ + # Timeouts based on empirical observations of test runtimes, 2021-07. + '--test-launcher-timeout=90000', + '--ui-test-action-max-timeout=45000', + '--ui-test-action-timeout=40000', + ], + }, }, 'updater_system_gtests': { 'updater_tests_system': { + 'args': [ + # Timeouts based on empirical observations of test runtimes, 2021-07. + '--test-launcher-timeout=90000', + '--ui-test-action-max-timeout=45000', + '--ui-test-action-timeout=40000', + ], 'swarming': { 'dimension_sets': [ { @@ -5523,7 +5540,14 @@ ], }, }, - 'updater_tests': {}, + 'updater_tests': { + 'args': [ + # Timeouts based on empirical observations of test runtimes, 2021-07. + '--test-launcher-timeout=90000', + '--ui-test-action-max-timeout=45000', + '--ui-test-action-timeout=40000', + ], + }, 'zucchini_unittests': {}, },
diff --git a/testing/buildbot/waterfalls.pyl b/testing/buildbot/waterfalls.pyl index fbb2f2a3..b3caf64 100644 --- a/testing/buildbot/waterfalls.pyl +++ b/testing/buildbot/waterfalls.pyl
@@ -319,7 +319,7 @@ 'gtest_tests': 'webview_bot_system_gtests', }, 'mixins': [ - 'enable_resultdb' + 'has_native_resultdb_integration' ], 'swarming': { 'dimension_sets': [ @@ -341,7 +341,7 @@ 'gtest_tests': 'webview_bot_system_gtests', }, 'mixins': [ - 'enable_resultdb' + 'has_native_resultdb_integration' ], 'swarming': { 'dimension_sets': [ @@ -362,7 +362,7 @@ 'gtest_tests': 'webview_bot_all_gtests', }, 'mixins': [ - 'enable_resultdb' + 'has_native_resultdb_integration' ], 'swarming': { 'dimension_sets': [ @@ -381,7 +381,7 @@ }, 'Android WebView O (dbg)': { 'mixins': [ - 'enable_resultdb', + 'has_native_resultdb_integration', 'oreo_fleet', 'walleye', ], @@ -396,7 +396,7 @@ }, 'Android WebView P (dbg)': { 'mixins': [ - 'enable_resultdb', + 'has_native_resultdb_integration', 'pie_fleet', 'walleye', ], @@ -445,7 +445,7 @@ 'gtest_tests': 'android_lollipop_marshmallow_gtests', }, 'mixins': [ - 'enable_resultdb' + 'has_native_resultdb_integration' ], 'swarming': { 'dimension_sets': [ @@ -465,7 +465,7 @@ 'gtest_tests': 'android_lollipop_marshmallow_gtests', }, 'mixins': [ - 'enable_resultdb' + 'has_native_resultdb_integration' ], 'swarming': { 'dimension_sets': [ @@ -481,7 +481,7 @@ }, 'Marshmallow 64 bit Tester': { 'mixins': [ - 'enable_resultdb', + 'has_native_resultdb_integration', 'marshmallow', 'bullhead', ], @@ -495,7 +495,7 @@ 'gtest_tests': 'android_lollipop_marshmallow_gtests', }, 'mixins': [ - 'enable_resultdb' + 'has_native_resultdb_integration' ], 'swarming': { 'dimension_sets': [ @@ -514,7 +514,7 @@ 'gtest_tests': 'android_nougat_gtests', }, 'mixins': [ - 'enable_resultdb' + 'has_native_resultdb_integration' ], 'swarming': { 'dimension_sets': [ @@ -544,7 +544,7 @@ 'gtest_tests': 'android_oreo_gtests', }, 'mixins': [ - 'enable_resultdb', + 'has_native_resultdb_integration', ], }, 'android-10-arm64-rel': { @@ -564,7 +564,7 @@ 'use_swarming': True, 'os_type': 'android', 'mixins': [ - 'enable_resultdb' + 'has_native_resultdb_integration' ], }, 'android-arm64-proguard-rel': { @@ -572,7 +572,7 @@ 'all', ], 'mixins': [ - 'enable_resultdb', + 'has_native_resultdb_integration', 'marshmallow', 'bullhead', ], @@ -585,7 +585,7 @@ }, 'android-bfcache-rel': { 'mixins': [ - 'enable_resultdb', + 'has_native_resultdb_integration', 'lollipop', 'hammerhead', ], @@ -596,7 +596,7 @@ }, 'android-cronet-arm-dbg': { 'mixins': [ - 'enable_resultdb', + 'has_native_resultdb_integration', 'lollipop', 'hammerhead', ], @@ -620,7 +620,7 @@ }, 'android-cronet-arm-rel-kitkat-tests': { 'mixins': [ - 'enable_resultdb', + 'has_native_resultdb_integration', 'kitkat', 'hammerhead', ], @@ -631,7 +631,7 @@ }, 'android-cronet-arm-rel-lollipop-tests': { 'mixins': [ - 'enable_resultdb', + 'has_native_resultdb_integration', 'lollipop', 'hammerhead', ], @@ -674,7 +674,7 @@ }, 'android-cronet-arm64-rel-marshmallow-tests': { 'mixins': [ - 'enable_resultdb', + 'has_native_resultdb_integration', 'marshmallow', 'bullhead', ], @@ -685,7 +685,7 @@ }, 'android-cronet-asan-arm-rel': { 'mixins': [ - 'enable_resultdb', + 'has_native_resultdb_integration', 'bullhead', 'marshmallow', ], @@ -700,7 +700,7 @@ }, 'android-cronet-marshmallow-arm64-rel': { 'mixins': [ - 'enable_resultdb', + 'has_native_resultdb_integration', 'marshmallow', 'bullhead', ], @@ -746,7 +746,7 @@ 'gtest_tests': 'android_incremental_tests', }, 'mixins': [ - 'enable_resultdb' + 'has_native_resultdb_integration' ], 'swarming': { 'dimension_sets': [ @@ -761,7 +761,7 @@ }, 'android-lollipop-arm-rel': { 'mixins': [ - 'enable_resultdb', + 'has_native_resultdb_integration', 'hammerhead', 'lollipop', ], @@ -778,7 +778,7 @@ }, 'android-marshmallow-arm64-rel': { 'mixins': [ - 'enable_resultdb', + 'has_native_resultdb_integration', 'bullhead', 'isolate_profile_data', 'marshmallow', @@ -796,7 +796,7 @@ }, 'android-marshmallow-x86-rel': { 'mixins': [ - 'enable_resultdb', + 'has_native_resultdb_integration', 'marshmallow-x86-emulator', 'emulator-4-cores', 'linux-xenial-or-bionic', @@ -810,7 +810,7 @@ }, 'android-marshmallow-x86-rel-non-cq': { 'mixins': [ - 'enable_resultdb', + 'has_native_resultdb_integration', 'marshmallow-x86-emulator', 'emulator-4-cores', 'linux-xenial-or-bionic', @@ -824,7 +824,7 @@ }, 'android-nougat-arm64-rel': { 'mixins': [ - 'enable_resultdb', + 'has_native_resultdb_integration', 'nougat', 'sailfish', ], @@ -840,7 +840,7 @@ }, 'android-pie-arm64-coverage-experimental-rel': { 'mixins': [ - 'enable_resultdb', + 'has_native_resultdb_integration', 'isolate_profile_data', 'pie_fleet', 'walleye', @@ -859,7 +859,7 @@ }, 'android-pie-arm64-dbg': { 'mixins': [ - 'enable_resultdb', + 'has_native_resultdb_integration', 'pie_fleet', 'walleye', ], @@ -870,7 +870,7 @@ }, 'android-pie-arm64-rel': { 'mixins': [ - 'enable_resultdb', + 'has_native_resultdb_integration', 'pie_fleet', 'walleye', ], @@ -890,7 +890,7 @@ }, 'android-pie-x86-rel': { 'mixins': [ - 'enable_resultdb', + 'has_native_resultdb_integration', 'pie-x86-emulator', 'emulator-4-cores', 'linux-xenial-or-bionic', @@ -903,7 +903,7 @@ }, 'android-weblayer-marshmallow-x86-rel-tests': { 'mixins': [ - 'enable_resultdb', + 'has_native_resultdb_integration', 'marshmallow-x86-emulator', 'emulator-4-cores', 'linux-xenial-or-bionic', @@ -916,7 +916,7 @@ }, 'android-weblayer-oreo-x86-rel-tests': { 'mixins': [ - 'enable_resultdb', + 'has_native_resultdb_integration', 'oreo-x86-emulator', 'emulator-4-cores', 'linux-xenial-or-bionic', @@ -929,7 +929,7 @@ }, 'android-weblayer-pie-x86-rel-tests': { 'mixins': [ - 'enable_resultdb', + 'has_native_resultdb_integration', 'pie-x86-emulator', 'emulator-4-cores', 'linux-xenial-or-bionic', @@ -953,7 +953,7 @@ }, 'Android WebView P FYI (rel)': { 'mixins': [ - 'enable_resultdb', + 'has_native_resultdb_integration', 'pie_fleet', 'walleye', ], @@ -972,7 +972,7 @@ 'mixins': [ '11-x86-emulator', 'emulator-4-cores', - 'enable_resultdb', + 'has_native_resultdb_integration', 'linux-xenial-or-bionic', 'x86-64', ], @@ -985,7 +985,7 @@ 'mixins': [ '12-x64-emulator', 'emulator-4-cores', - 'enable_resultdb', + 'has_native_resultdb_integration', 'linux-xenial-or-bionic', 'x86-64', ], @@ -996,7 +996,7 @@ }, 'android-cronet-x86-dbg-10-tests': { 'mixins': [ - 'enable_resultdb', + 'has_native_resultdb_integration', '10-x86-emulator', ], 'test_suites': { @@ -1006,7 +1006,7 @@ }, 'android-pie-arm64-wpt-rel-non-cq': { 'mixins': [ - 'enable_resultdb', + 'has_native_resultdb_integration', 'pie_fleet', 'walleye', ], @@ -1018,7 +1018,7 @@ }, 'android-web-platform-pie-x86-fyi-rel': { 'mixins': [ - 'enable_resultdb', + 'has_native_resultdb_integration', 'pie-x86-emulator', 'emulator-8-cores', 'linux-xenial-or-bionic', @@ -1032,7 +1032,7 @@ }, 'android-weblayer-10-x86-rel-tests': { 'mixins': [ - 'enable_resultdb', + 'has_native_resultdb_integration', '10-x86-emulator', 'emulator-4-cores', 'linux-xenial-or-bionic', @@ -1045,7 +1045,7 @@ }, 'android-weblayer-pie-x86-wpt-fyi-rel': { 'mixins': [ - 'enable_resultdb', + 'has_native_resultdb_integration', 'pie-x86-emulator', 'emulator-8-cores', 'linux-xenial-or-bionic', @@ -1059,7 +1059,7 @@ }, 'android-weblayer-pie-x86-wpt-smoketest': { 'mixins': [ - 'enable_resultdb', + 'has_native_resultdb_integration', 'pie-x86-emulator', 'emulator-8-cores', 'linux-xenial-or-bionic', @@ -1073,7 +1073,7 @@ }, 'android-webview-pie-x86-wpt-fyi-rel': { 'mixins': [ - 'enable_resultdb', + 'has_native_resultdb_integration', 'pie-x86-emulator', 'emulator-8-cores', 'linux-xenial-or-bionic', @@ -1099,7 +1099,7 @@ 'android-angle-arm64-nexus5x': { 'os_type': 'android', 'mixins': [ - 'enable_resultdb', + 'has_native_resultdb_integration', 'marshmallow', 'bullhead', ], @@ -1112,7 +1112,7 @@ 'browser_config': 'android-chromium', 'os_type': 'android', 'mixins': [ - 'enable_resultdb', + 'has_native_resultdb_integration', 'marshmallow', 'bullhead', ], @@ -1131,7 +1131,7 @@ 'os_type': 'mac', 'mixins': [ 'mac_mini_intel_gpu_stable', - 'enable_resultdb', + 'has_native_resultdb_integration', 'isolate_profile_data', 'mac_toolchain', 'out_dir_arg', @@ -1554,7 +1554,7 @@ }, 'ToTAndroid': { 'mixins': [ - 'enable_resultdb', + 'has_native_resultdb_integration', 'lollipop', 'hammerhead', ], @@ -1609,7 +1609,7 @@ 'junit_tests': 'chromium_android_asan_junit_tests', }, 'mixins': [ - 'enable_resultdb' + 'has_native_resultdb_integration' ], 'swarming': { 'dimension_sets': [ @@ -1972,7 +1972,7 @@ 'all' ], 'mixins': [ - 'enable_resultdb', + 'has_native_resultdb_integration', 'mac_11_x64', 'mac_toolchain', 'out_dir_arg', @@ -2004,7 +2004,7 @@ 'url_unittests' ], 'mixins': [ - 'enable_resultdb', + 'has_native_resultdb_integration', 'ios_restart_device', 'limited_capacity_bot', 'mac_10.15', @@ -2252,7 +2252,7 @@ 'mixins': [ 'lollipop', 'hammerhead', - 'enable_resultdb', + 'has_native_resultdb_integration', ], 'test_suites': { 'gtest_tests': 'chromium_swarm_android_gtests', @@ -2264,7 +2264,7 @@ }, 'android-marshmallow-arm64-rel-swarming': { 'mixins': [ - 'enable_resultdb', + 'has_native_resultdb_integration', ], 'test_suites': { 'gtest_tests': 'chromium_swarm_android_gtests', @@ -2557,7 +2557,7 @@ 'gtest_tests': 'site_isolation_android_fyi_gtests', }, 'mixins': [ - 'enable_resultdb' + 'has_native_resultdb_integration' ], }, 'TSAN Debug (reclient)': { @@ -2607,7 +2607,7 @@ }, 'VR Linux': { 'mixins': [ - 'enable_resultdb', + 'has_native_resultdb_integration', 'linux-bionic', ], 'additional_compile_targets': [ @@ -2619,7 +2619,7 @@ }, 'VR Linux (reclient)': { 'mixins': [ - 'enable_resultdb', + 'has_native_resultdb_integration', 'linux-bionic', ], 'additional_compile_targets': [ @@ -2700,7 +2700,7 @@ 'gtest_tests': 'chromium_android_gtests', }, 'mixins': [ - 'enable_resultdb', + 'has_native_resultdb_integration', 'pie_fleet', 'walleye', ], @@ -2711,7 +2711,7 @@ 'gtest_tests': 'chromium_android_gtests', }, 'mixins': [ - 'enable_resultdb', + 'has_native_resultdb_integration', 'pie_fleet', 'walleye', ], @@ -2719,7 +2719,7 @@ }, 'android-code-coverage': { 'mixins': [ - 'enable_resultdb', + 'has_native_resultdb_integration', 'bullhead', 'isolate_profile_data', 'marshmallow', @@ -2732,7 +2732,7 @@ }, 'android-code-coverage-native': { 'mixins': [ - 'enable_resultdb', + 'has_native_resultdb_integration', 'isolate_profile_data', 'pie_fleet', 'walleye', @@ -2758,6 +2758,17 @@ 'isolated_scripts': 'chromeos_isolated_scripts', }, }, + # TODO(crbug.com/1235218): remove after the migration. + 'chromeos-amd64-generic-rel (reclient compare)': { + 'additional_compile_targets': [ + 'chromiumos_preflight', + ], + 'browser_config': 'cros-chrome', + 'mixins': [ + 'chromeos-amd64-generic', + ], + 'os_type': 'chromeos', + }, 'chromeos-amd64-generic-rel (reclient)': { 'additional_compile_targets': [ 'chromiumos_preflight', @@ -2886,7 +2897,7 @@ }, 'ios-asan': { 'mixins': [ - 'enable_resultdb', + 'has_native_resultdb_integration', 'mac_11_x64', 'mac_toolchain', 'out_dir_arg', @@ -2899,7 +2910,7 @@ }, 'ios-simulator-code-coverage': { 'mixins': [ - 'enable_resultdb', + 'has_native_resultdb_integration', 'ios_output_disabled_tests', 'isolate_profile_data', 'mac_11_x64', @@ -2914,7 +2925,7 @@ }, 'ios-simulator-cronet': { 'mixins': [ - 'enable_resultdb', + 'has_native_resultdb_integration', 'mac_11_x64', 'mac_toolchain', 'out_dir_arg', @@ -2927,7 +2938,7 @@ }, 'ios-simulator-multi-window': { 'mixins': [ - 'enable_resultdb', + 'has_native_resultdb_integration', 'mac_11_x64', 'mac_toolchain', 'out_dir_arg', @@ -2940,7 +2951,7 @@ }, 'ios-webkit-tot': { 'mixins': [ - 'enable_resultdb', + 'has_native_resultdb_integration', 'ios_custom_webkit', 'mac_11_x64', 'mac_toolchain', @@ -2959,7 +2970,7 @@ 'all', ], 'mixins': [ - 'enable_resultdb', + 'has_native_resultdb_integration', 'mac_11_x64', 'mac_toolchain', 'out_dir_arg', @@ -2977,7 +2988,7 @@ 'all', ], 'mixins': [ - 'enable_resultdb', + 'has_native_resultdb_integration', 'mac_11_arm64', 'mac_toolchain', 'out_dir_arg', @@ -2993,7 +3004,7 @@ 'all', ], 'mixins': [ - 'enable_resultdb', + 'has_native_resultdb_integration', 'mac_11_x64', 'mac_toolchain', 'out_dir_arg', @@ -3014,7 +3025,7 @@ 'all', ], 'mixins': [ - 'enable_resultdb', + 'has_native_resultdb_integration', 'mac_11_x64', 'mac_toolchain', 'out_dir_arg', @@ -3042,7 +3053,7 @@ 'chrome', ], 'mixins': [ - 'enable_resultdb', + 'has_native_resultdb_integration', ], 'test_suites': { 'gtest_tests': 'lacros_device_or_vm_tests_fyi', @@ -3907,7 +3918,7 @@ 'mixins': [ 'marshmallow', 'bullhead', - 'enable_resultdb', + 'has_native_resultdb_integration', ], 'test_suites': { 'gtest_tests': 'gpu_angle_gtests', @@ -3942,7 +3953,7 @@ 'os_type': 'android', 'skip_merge_script': True, 'mixins': [ - 'enable_resultdb', + 'has_native_resultdb_integration', 'foster', 'gpu-swarming-pool', 'nougat_generic', @@ -3957,7 +3968,7 @@ 'os_type': 'android', 'skip_merge_script': True, 'mixins': [ - 'enable_resultdb', + 'has_native_resultdb_integration', 'gpu-swarming-pool', 'hammerhead', 'lollipop_generic', @@ -3972,7 +3983,7 @@ 'os_type': 'android', 'skip_merge_script': True, 'mixins': [ - 'enable_resultdb', + 'has_native_resultdb_integration', 'marshmallow', 'bullhead', ], @@ -3988,7 +3999,7 @@ 'os_type': 'android', 'skip_merge_script': True, 'mixins': [ - 'enable_resultdb', + 'has_native_resultdb_integration', 'gpu-swarming-pool', 'lollipop_generic', 'shamu', @@ -4003,7 +4014,7 @@ 'os_type': 'android', 'skip_merge_script': True, 'mixins': [ - 'enable_resultdb', + 'has_native_resultdb_integration', 'flounder', 'gpu-swarming-pool', 'marshmallow_generic', @@ -4018,7 +4029,7 @@ 'os_type': 'android', 'skip_merge_script': True, 'mixins': [ - 'enable_resultdb', + 'has_native_resultdb_integration', 'pie_fleet', 'walleye', ], @@ -4034,7 +4045,7 @@ 'skip_merge_script': True, 'mixins': [ 'android_r', - 'enable_resultdb', + 'has_native_resultdb_integration', 'flame', 'gpu-swarming-pool', ], @@ -4048,7 +4059,7 @@ 'browser_config': 'android-chromium', 'skip_merge_script': True, 'mixins': [ - 'enable_resultdb', + 'has_native_resultdb_integration', 'marshmallow', 'bullhead', ], @@ -4061,7 +4072,7 @@ 'browser_config': 'android-chromium', 'skip_merge_script': True, 'mixins': [ - 'enable_resultdb', + 'has_native_resultdb_integration', 'pie_fleet', 'walleye', ], @@ -4489,7 +4500,7 @@ 'skip_merge_script': True, 'mixins': [ 'android_r', - 'enable_resultdb', + 'has_native_resultdb_integration', 'flame', 'gpu-swarming-pool', ], @@ -5117,7 +5128,7 @@ 'all', ], 'mixins': [ - 'enable_resultdb', + 'has_native_resultdb_integration', 'isolate_profile_data', 'mac_11_x64', 'mac_toolchain', @@ -5134,7 +5145,7 @@ 'all' ], 'mixins': [ - 'enable_resultdb', + 'has_native_resultdb_integration', 'isolate_profile_data', 'mac_11_x64', 'mac_toolchain', @@ -5151,7 +5162,7 @@ 'all' ], 'mixins': [ - 'enable_resultdb', + 'has_native_resultdb_integration', 'mac_11_x64', 'mac_toolchain', 'out_dir_arg', @@ -5303,7 +5314,7 @@ 'gtest_tests': 'chromium_android_gtests', }, 'mixins': [ - 'enable_resultdb', + 'has_native_resultdb_integration', 'bullhead', 'marshmallow', ], @@ -5752,6 +5763,22 @@ ] }, }, + 'win10-updater-tester-dbg-uac': { + 'mixins': [ + 'win10', + 'x86-64', + ], + 'test_suites': { + 'gtest_tests': 'updater_gtests', + }, + 'swarming': { + 'dimension_sets': [ + { + 'pool': 'chromium.win.uac', + } + ] + }, + }, 'win10-updater-tester-rel': { 'mixins': [ 'win10',
diff --git a/testing/variations/fieldtrial_testing_config.json b/testing/variations/fieldtrial_testing_config.json index 2469504..dbd0808 100644 --- a/testing/variations/fieldtrial_testing_config.json +++ b/testing/variations/fieldtrial_testing_config.json
@@ -7396,6 +7396,25 @@ ] } ], + "SafeBrowsingCTDownloadWarning": [ + { + "platforms": [ + "chromeos", + "chromeos_lacros", + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "SafeBrowsingCTDownloadWarning" + ] + } + ] + } + ], "SafeBrowsingCsdComponentVersion25": [ { "platforms": [
diff --git a/third_party/blink/public/devtools_protocol/browser_protocol.pdl b/third_party/blink/public/devtools_protocol/browser_protocol.pdl index 542c2f249..c207537 100644 --- a/third_party/blink/public/devtools_protocol/browser_protocol.pdl +++ b/third_party/blink/public/devtools_protocol/browser_protocol.pdl
@@ -2635,6 +2635,16 @@ # The container node for the given node, or null if not found. optional NodeId nodeId + # Returns the descendants of a container query container that have + # container queries against this container. + experimental command getQueryingDescendantsForContainer + parameters + # Id of the container node to find querying descendants from. + NodeId nodeId + returns + # Descendant nodes with container queries against the given container. + array of NodeId nodeIds + # Fired when `Element`'s attribute is modified. event attributeModified parameters
diff --git a/third_party/blink/renderer/bindings/core/v8/v8_wasm_response_extensions.cc b/third_party/blink/renderer/bindings/core/v8/v8_wasm_response_extensions.cc index 244e576..8240b4c4 100644 --- a/third_party/blink/renderer/bindings/core/v8/v8_wasm_response_extensions.cc +++ b/third_party/blink/renderer/bindings/core/v8/v8_wasm_response_extensions.cc
@@ -6,6 +6,7 @@ #include "base/macros.h" #include "base/memory/scoped_refptr.h" +#include "third_party/blink/public/mojom/loader/code_cache.mojom.h" #include "third_party/blink/public/platform/platform.h" #include "third_party/blink/renderer/bindings/core/v8/script_promise.h" #include "third_party/blink/renderer/bindings/core/v8/script_promise_resolver.h" @@ -16,6 +17,9 @@ #include "third_party/blink/renderer/core/fetch/fetch_data_loader.h" #include "third_party/blink/renderer/core/frame/local_dom_window.h" #include "third_party/blink/renderer/core/frame/local_frame.h" +#include "third_party/blink/renderer/core/workers/worker_backing_thread.h" +#include "third_party/blink/renderer/core/workers/worker_or_worklet_global_scope.h" +#include "third_party/blink/renderer/core/workers/worker_thread.h" #include "third_party/blink/renderer/platform/bindings/exception_state.h" #include "third_party/blink/renderer/platform/bindings/script_state.h" #include "third_party/blink/renderer/platform/bindings/v8_per_isolate_data.h" @@ -24,6 +28,8 @@ #include "third_party/blink/renderer/platform/instrumentation/tracing/trace_event.h" #include "third_party/blink/renderer/platform/loader/fetch/cached_metadata.h" #include "third_party/blink/renderer/platform/loader/fetch/script_cached_metadata_handler.h" +#include "third_party/blink/renderer/platform/scheduler/public/thread.h" +#include "third_party/blink/renderer/platform/wtf/cross_thread_functional.h" namespace blink { @@ -204,18 +210,34 @@ DISALLOW_COPY_AND_ASSIGN(ExceptionToAbortStreamingScope); }; +void SendCachedData(String response_url, + base::Time response_time, + blink::mojom::CodeCacheHost* code_cache_host, + Vector<uint8_t> serialized_module) { + scoped_refptr<CachedMetadata> cached_metadata = + CachedMetadata::CreateFromSerializedData(std::move(serialized_module)); + + base::span<const uint8_t> serialized_data = cached_metadata->SerializedData(); + CachedMetadataSender::SendToCodeCacheHost( + code_cache_host, mojom::blink::CodeCacheType::kWebAssembly, response_url, + response_time, serialized_data.data(), serialized_data.size()); +} + class WasmStreamingClient : public v8::WasmStreaming::Client { public: WasmStreamingClient(const String& response_url, - const base::Time& response_time) + const base::Time& response_time, + scoped_refptr<base::SingleThreadTaskRunner> task_runner, + blink::mojom::CodeCacheHost* code_cache_host) : response_url_(response_url.IsolatedCopy()), - response_time_(response_time) {} + response_time_(response_time), + main_thread_task_runner_(std::move(task_runner)), + code_cache_host_(code_cache_host) {} void OnModuleCompiled(v8::CompiledWasmModule compiled_module) override { TRACE_EVENT_INSTANT1(TRACE_DISABLED_BY_DEFAULT("devtools.timeline"), "v8.wasm.compiledModule", TRACE_EVENT_SCOPE_THREAD, "url", response_url_.Utf8()); - v8::MemorySpan<const uint8_t> wire_bytes = compiled_module.GetWireBytesRef(); // Our heuristic for whether it's worthwhile to cache is that the module @@ -239,28 +261,28 @@ // The resources needed for caching may have been GC'ed, but we should still // save the compiled module. Use the platform API directly. - scoped_refptr<CachedMetadata> cached_metadata = CachedMetadata::Create( + Vector<uint8_t> serialized_data = CachedMetadata::GetSerializedData( kWasmModuleTag, reinterpret_cast<const uint8_t*>(serialized_module.buffer.get()), serialized_module.size); - base::span<const uint8_t> serialized_data = - cached_metadata->SerializedData(); // Make sure the data could be copied. if (serialized_data.size() < serialized_module.size) return; - // TODO(mythria): Also support using context specific code cache host here. - // When we pass nullptr for CodeCacheHost we use per-process interface. - // Currently this code is run on a thread started via a Platform::PostJob. - // So it isn't safe to use CodeCacheHost interface that was bound on the - // frame / worker threads. We should instead post a task back to the frame / - // worker threads with the required data which can then write to generated - // code caches. - CachedMetadataSender::SendToCodeCacheHost( - /*code_cache_host*/ nullptr, mojom::blink::CodeCacheType::kWebAssembly, - response_url_, response_time_, serialized_data.data(), - serialized_data.size()); + // TODO(mythria): Add support for worklets and remove this code that uses + // per-process interface. + if (!main_thread_task_runner_.get()) { + SendCachedData(response_url_, response_time_, nullptr, + std::move(serialized_data)); + return; + } + + main_thread_task_runner_->PostTask( + FROM_HERE, ConvertToBaseOnceCallback(WTF::CrossThreadBindOnce( + &SendCachedData, response_url_, response_time_, + WTF::CrossThreadUnretained(code_cache_host_), + std::move(serialized_data)))); } void SetBuffer(scoped_refptr<CachedMetadata> cached_module) { @@ -271,10 +293,31 @@ String response_url_; base::Time response_time_; scoped_refptr<CachedMetadata> cached_module_; + scoped_refptr<base::SingleThreadTaskRunner> main_thread_task_runner_; + blink::mojom::CodeCacheHost* code_cache_host_; DISALLOW_COPY_AND_ASSIGN(WasmStreamingClient); }; +scoped_refptr<base::SingleThreadTaskRunner> GetContextTaskRunner( + ExecutionContext& execution_context) { + if (execution_context.IsWorkerGlobalScope()) { + WorkerOrWorkletGlobalScope& global_scope = + To<WorkerOrWorkletGlobalScope>(execution_context); + return global_scope.GetThread() + ->GetWorkerBackingThread() + .BackingThread() + .GetTaskRunner(); + } + + if (execution_context.IsWindow()) { + return Thread::MainThread()->GetTaskRunner(); + } + + DCHECK(execution_context.IsWorkletGlobalScope()); + return nullptr; +} + void StreamFromResponseCallback( const v8::FunctionCallbackInfo<v8::Value>& args) { TRACE_EVENT_INSTANT0(TRACE_DISABLED_BY_DEFAULT("devtools.timeline"), @@ -336,8 +379,13 @@ streaming->SetUrl(url_utf8.c_str(), url_utf8.size()); if (auto* cache_handler = response->BodyBuffer()->GetCachedMetadataHandler()) { + auto* execution_context = ExecutionContext::From(script_state); + DCHECK_NE(execution_context, nullptr); + auto client = std::make_shared<WasmStreamingClient>( - url, response->GetResponse()->InternalResponse()->ResponseTime()); + url, response->GetResponse()->InternalResponse()->ResponseTime(), + GetContextTaskRunner(*execution_context), + ExecutionContext::GetCodeCacheHostFromContext(execution_context)); streaming->SetClient(client); scoped_refptr<CachedMetadata> cached_module = cache_handler->GetCachedMetadata(kWasmModuleTag);
diff --git a/third_party/blink/renderer/core/animation/css/css_animations.cc b/third_party/blink/renderer/core/animation/css/css_animations.cc index 1aecd89c..6ae82948 100644 --- a/third_party/blink/renderer/core/animation/css/css_animations.cc +++ b/third_party/blink/renderer/core/animation/css/css_animations.cc
@@ -1113,24 +1113,14 @@ // Lazy evaluation of the before change style. We only need to update where // we are transitioning from if the final destination is changing. if (!state.before_change_style) { - ElementAnimations* element_animations = - state.animating_element.GetElementAnimations(); - if (element_animations) { - const ComputedStyle* base_style = element_animations->BaseComputedStyle(); - if (base_style) { - state.before_change_style = - CalculateBeforeChangeStyle(state.animating_element, *base_style); - } - } - // Use the style from the previous frame if no base style is found. - // Elements that have not been animated will not have a base style. - // Elements that were previously animated, but where all previously running - // animations have stopped may also be missing a base style. In both cases, - // the old style is equivalent to the base computed style. - if (!state.before_change_style) { - state.before_change_style = - CalculateBeforeChangeStyle(state.animating_element, state.old_style); - } + // By calling GetBaseComputedStyleOrThis, we're using the style from the + // previous frame if no base style is found. Elements that have not been + // animated will not have a base style. Elements that were previously + // animated, but where all previously running animations have stopped may + // also be missing a base style. In both cases, the old style is equivalent + // to the base computed style. + state.before_change_style = CalculateBeforeChangeStyle( + state.animating_element, *state.old_style.GetBaseComputedStyleOrThis()); } if (ComputedValuesEqual(property, *state.before_change_style, state.style)) {
diff --git a/third_party/blink/renderer/core/animation/element_animations.cc b/third_party/blink/renderer/core/animation/element_animations.cc index fa1b980..7447df77 100644 --- a/third_party/blink/renderer/core/animation/element_animations.cc +++ b/third_party/blink/renderer/core/animation/element_animations.cc
@@ -124,29 +124,6 @@ visitor->Trace(worklet_animations_); } -const ComputedStyle* ElementAnimations::BaseComputedStyle() const { - return base_computed_style_.get(); -} - -const CSSBitset* ElementAnimations::BaseImportantSet() const { - if (IsAnimationStyleChange()) - return base_important_set_.get(); - return nullptr; -} - -void ElementAnimations::UpdateBaseComputedStyle( - const ComputedStyle* computed_style, - std::unique_ptr<CSSBitset> base_important_set) { - DCHECK(computed_style); - base_computed_style_ = ComputedStyle::Clone(*computed_style); - base_important_set_ = std::move(base_important_set); -} - -void ElementAnimations::ClearBaseComputedStyle() { - base_computed_style_ = nullptr; - base_important_set_ = nullptr; -} - bool ElementAnimations::UpdateBoxSizeAndCheckTransformAxisAlignment( const FloatSize& box_size) { bool preserves_axis_alignment = true;
diff --git a/third_party/blink/renderer/core/animation/element_animations.h b/third_party/blink/renderer/core/animation/element_animations.h index debe9bc..e6e2cf4 100644 --- a/third_party/blink/renderer/core/animation/element_animations.h +++ b/third_party/blink/renderer/core/animation/element_animations.h
@@ -83,12 +83,6 @@ } bool IsAnimationStyleChange() const { return animation_style_change_; } - const ComputedStyle* BaseComputedStyle() const; - const CSSBitset* BaseImportantSet() const; - void UpdateBaseComputedStyle(const ComputedStyle*, - std::unique_ptr<CSSBitset> base_important_set); - void ClearBaseComputedStyle(); - bool UpdateBoxSizeAndCheckTransformAxisAlignment(const FloatSize& box_size); bool IsIdentityOrTranslation() const; @@ -106,22 +100,9 @@ // style, we store a cached value of the 'base' computed style (e.g. with no // change from the running animations) and use that during style recalc, // applying only the animation changes on top of it. + // + // See also StyleBaseData. bool animation_style_change_; - scoped_refptr<ComputedStyle> base_computed_style_; - // Keeps track of the !important declarations used to build the base - // computed style. These declarations must not be overwritten by animation - // effects, hence we have to disable the base computed style optimization when - // !important declarations conflict with active animations. - // - // If there were no !important declarations in the base style, this field - // will be nullptr. - // - // TODO(andruud): We should be able to simply skip applying the animation - // for properties in this set instead of disabling the optimization. - // However, we currently need the cascade to handle the case where - // an !important declaration appears in a :visited selector. - // See https://crbug.com/1062217. - std::unique_ptr<CSSBitset> base_important_set_; FRIEND_TEST_ALL_PREFIXES(StyleEngineTest, PseudoElementBaseComputedStyle); };
diff --git a/third_party/blink/renderer/core/css/css_container_rule.h b/third_party/blink/renderer/core/css/css_container_rule.h index 506bb0a..0215b53 100644 --- a/third_party/blink/renderer/core/css/css_container_rule.h +++ b/third_party/blink/renderer/core/css/css_container_rule.h
@@ -27,6 +27,7 @@ private: // TODO(crbug.com/1214810): Don't lean on MediaList. friend class InspectorCSSAgent; + friend class InspectorDOMAgent; friend class InspectorStyleSheet; CSSRule::Type GetType() const override { return kContainerRule; }
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 241fa39..cb4b09e 100644 --- a/third_party/blink/renderer/core/css/resolver/style_resolver.cc +++ b/third_party/blink/renderer/core/css/resolver/style_resolver.cc
@@ -140,6 +140,12 @@ state.GetAnimatingElement()->HasAnimations()); } +bool IsAnimationStyleChange(Element& element) { + if (auto* element_animations = element.GetElementAnimations()) + return element_animations->IsAnimationStyleChange(); + return false; +} + bool ShouldComputeBaseComputedStyle(const ComputedStyle* base_computed_style) { #if DCHECK_IS_ON() // The invariant in the base computed style optimization is that as long as @@ -210,6 +216,25 @@ #endif // DCHECK_IS_ON() } +void PreserveTextAutosizingMultiplierIfNeeded( + StyleResolverState& state, + const StyleRequest& style_request) { + const ComputedStyle* old_style = state.GetElement().GetComputedStyle(); + if (!style_request.IsPseudoStyleRequest() && old_style) { + state.Style()->SetTextAutosizingMultiplier( + old_style->TextAutosizingMultiplier()); + } +} + +bool TextAutosizingMultiplierChanged(const StyleResolverState& state, + const ComputedStyle& base_computed_style) { + // Note that |old_style| can be a style replaced by + // TextAutosizer::ApplyMultiplier. + const ComputedStyle* old_style = state.GetElement().GetComputedStyle(); + return old_style && (old_style->TextAutosizingMultiplier() != + base_computed_style.TextAutosizingMultiplier()); +} + } // namespace static CSSPropertyValueSet* LeftToRightDeclaration() { @@ -701,40 +726,19 @@ return state.GetAnimatingElement()->GetElementAnimations(); } -static const ComputedStyle* CachedAnimationBaseComputedStyle( - StyleResolverState& state) { - ElementAnimations* element_animations = GetElementAnimations(state); - if (!element_animations) +static StyleBaseData* GetBaseData(const StyleResolverState& state) { + Element* animating_element = state.GetAnimatingElement(); + if (!animating_element) return nullptr; - - return element_animations->BaseComputedStyle(); + auto* old_style = animating_element->GetComputedStyle(); + return old_style ? old_style->BaseData().get() : nullptr; } -static void UpdateAnimationBaseComputedStyle(StyleResolverState& state, - StyleCascade& cascade, - bool forced_update) { - if (!state.GetAnimatingElement()) - return; - - if (!state.CanCacheBaseStyle()) - return; - - if (forced_update) - state.GetAnimatingElement()->EnsureElementAnimations(); - - ElementAnimations* element_animations = - state.GetAnimatingElement()->GetElementAnimations(); - if (!element_animations) - return; - - if (element_animations->IsAnimationStyleChange() && - element_animations->BaseComputedStyle()) { - return; - } - - std::unique_ptr<CSSBitset> important_set = cascade.GetImportantSet(); - element_animations->UpdateBaseComputedStyle(state.Style(), - std::move(important_set)); +static const ComputedStyle* CachedAnimationBaseComputedStyle( + StyleResolverState& state) { + if (auto* base_data = GetBaseData(state)) + return base_data->GetBaseComputedStyle(); + return nullptr; } static void IncrementResolvedStyleCounters(const StyleRequest& style_request, @@ -985,16 +989,11 @@ return; } - if (!style_request.IsPseudoStyleRequest() && element->GetComputedStyle() && - element->GetComputedStyle()->TextAutosizingMultiplier() != - state.Style()->TextAutosizingMultiplier()) { - // Preserve the text autosizing multiplier on style recalc. Autosizer will - // update it during layout if needed. - // NOTE: this must occur before ApplyMatchedProperties for correct - // computation of font-relative lengths. - state.Style()->SetTextAutosizingMultiplier( - element->GetComputedStyle()->TextAutosizingMultiplier()); - } + // Preserve the text autosizing multiplier on style recalc. Autosizer will + // update it during layout if needed. + // NOTE: This must occur before CascadeAndApplyMatchedProperties for correct + // computation of font-relative lengths. + PreserveTextAutosizingMultiplierIfNeeded(state, style_request); CascadeAndApplyMatchedProperties(state, cascade); @@ -1016,6 +1015,8 @@ if (base_is_usable) { DCHECK(animation_base_computed_style); state.SetStyle(ComputedStyle::Clone(*animation_base_computed_style)); + state.StyleRef().SetBaseData( + scoped_refptr<StyleBaseData>(GetBaseData(state))); state.Style()->SetStyleType(style_request.pseudo_id); if (!state.ParentStyle()) { state.SetParentStyle(InitialStyleForElement()); @@ -1268,12 +1269,13 @@ DCHECK(animating_element == &element || animating_element->ParentOrShadowHostElement() == element); - if (!HasAnimationsOrTransitions(state)) { - // Ensure that the base computed style is not stale even if not currently - // running an animation or transition. This ensures that any new transitions - // use the correct starting point based on the "before change" style. - UpdateAnimationBaseComputedStyle(state, cascade, false); + if (!HasAnimationsOrTransitions(state)) return false; + + if (!IsAnimationStyleChange(*animating_element) || + !state.StyleRef().BaseData()) { + state.StyleRef().SetBaseData(StyleBaseData::Create( + ComputedStyle::Clone(state.StyleRef()), cascade.GetImportantSet())); } CSSAnimations::CalculateAnimationUpdate( @@ -1288,10 +1290,7 @@ CSSAnimations::SnapshotCompositorKeyframes( element, state.AnimationUpdate(), *state.Style(), state.ParentStyle()); - bool has_update = !state.AnimationUpdate().IsEmpty(); - UpdateAnimationBaseComputedStyle(state, cascade, has_update); - - if (!has_update) + if (state.AnimationUpdate().IsEmpty()) return false; const ActiveInterpolationsMap& animations = @@ -1463,10 +1462,11 @@ return false; ElementAnimations* element_animations = GetElementAnimations(state); - if (!element_animations || !element_animations->BaseComputedStyle()) + if (!element_animations || !element_animations->IsAnimationStyleChange()) return false; - if (!element_animations->IsAnimationStyleChange()) + StyleBaseData* base_data = GetBaseData(state); + if (!base_data || !base_data->GetBaseComputedStyle()) return false; // Animating a custom property can have side effects on other properties @@ -1484,10 +1484,8 @@ // animation. We cannot use the base computed style optimization in such // cases. if (CSSAnimations::IsAnimatingFontAffectingProperties(element_animations)) { - if (element_animations->BaseComputedStyle() && - element_animations->BaseComputedStyle()->HasFontRelativeUnits()) { + if (base_data->GetBaseComputedStyle()->HasFontRelativeUnits()) return false; - } } // Normally, we apply all active animation effects on top of the style created @@ -1497,11 +1495,16 @@ // style, we disable the base computed style optimization. // [1] https://drafts.csswg.org/css-cascade-4/#cascade-origin if (CSSAnimations::IsAnimatingStandardProperties( - element_animations, element_animations->BaseImportantSet(), + element_animations, base_data->GetBaseImportantSet(), KeyframeEffect::kDefaultPriority)) { return false; } + if (TextAutosizingMultiplierChanged(state, + *base_data->GetBaseComputedStyle())) { + return false; + } + return true; } @@ -1873,15 +1876,14 @@ // Overflow { const ComputedStyle* overflow_style = document_element_style; - if (body_style && - document_element_style->IsOverflowVisibleAlongBothAxes()) { - overflow_style = body_style; - - // The body element has its own scrolling box, independent from the - // viewport. This is a bit of a weird edge case in the CSS spec that we - // might want to try to eliminate some day (eg. for ScrollTopLeftInterop - // - see http://crbug.com/157855). - if (body_style && body_style->IsScrollContainer()) { + if (body_style) { + if (document_element_style->IsOverflowVisibleAlongBothAxes()) { + overflow_style = body_style; + } else if (body_style->IsScrollContainer()) { + // The body element has its own scrolling box, independent from the + // viewport. This is a bit of a weird edge case in the CSS spec that + // we might want to try to eliminate some day (e.g. for + // ScrollTopLeftInterop - see http://crbug.com/157855). UseCounter::Count(GetDocument(), WebFeature::kBodyScrollsInAdditionToViewport); }
diff --git a/third_party/blink/renderer/core/css/resolver/style_resolver_test.cc b/third_party/blink/renderer/core/css/resolver/style_resolver_test.cc index a169fdd..7e35c1f 100644 --- a/third_party/blink/renderer/core/css/resolver/style_resolver_test.cc +++ b/third_party/blink/renderer/core/css/resolver/style_resolver_test.cc
@@ -88,13 +88,14 @@ animations.SetAnimationStyleChange(true); StyleResolver& resolver = GetStyleEngine().GetStyleResolver(); - ASSERT_TRUE(resolver.ResolveStyle(div, StyleRecalcContext())); - EXPECT_EQ(20, resolver.ResolveStyle(div, StyleRecalcContext())->FontSize()); - ASSERT_TRUE(animations.BaseComputedStyle()); - EXPECT_EQ(20, animations.BaseComputedStyle()->FontSize()); + auto style1 = resolver.ResolveStyle(div, StyleRecalcContext()); + ASSERT_TRUE(style1); + EXPECT_EQ(20, style1->FontSize()); + ASSERT_TRUE(style1->GetBaseComputedStyle()); + EXPECT_EQ(20, style1->GetBaseComputedStyle()->FontSize()); - // Getting style with customized parent style should not affect cached - // animation base computed style. + // Getting style with customized parent style should not affect previously + // produced animation base computed style. const ComputedStyle* parent_style = GetDocument().documentElement()->GetComputedStyle(); StyleRequest style_request; @@ -102,8 +103,8 @@ style_request.layout_parent_override = parent_style; EXPECT_EQ(10, resolver.ResolveStyle(div, StyleRecalcContext(), style_request) ->FontSize()); - ASSERT_TRUE(animations.BaseComputedStyle()); - EXPECT_EQ(20, animations.BaseComputedStyle()->FontSize()); + ASSERT_TRUE(style1->GetBaseComputedStyle()); + EXPECT_EQ(20, style1->GetBaseComputedStyle()->FontSize()); EXPECT_EQ(20, resolver.ResolveStyle(div, StyleRecalcContext())->FontSize()); } @@ -134,9 +135,6 @@ GetDocument().Lifecycle().AdvanceTo(DocumentLifecycle::kInStyleRecalc); StyleForId("div"); - ASSERT_TRUE(div->GetElementAnimations()); - EXPECT_TRUE(div->GetElementAnimations()->BaseComputedStyle()); - StyleResolverState state(GetDocument(), *div); EXPECT_TRUE(StyleResolver::CanReuseBaseComputedStyle(state)); } @@ -164,13 +162,12 @@ div->SetNeedsAnimationStyleRecalc(); GetDocument().Lifecycle().AdvanceTo(DocumentLifecycle::kInStyleRecalc); - StyleForId("div"); + auto style = StyleForId("div"); - ASSERT_TRUE(div->GetElementAnimations()); - const CSSBitset* bitset = div->GetElementAnimations()->BaseImportantSet(); + const CSSBitset* bitset = style->GetBaseImportantSet(); EXPECT_FALSE(CSSAnimations::IsAnimatingStandardProperties( div->GetElementAnimations(), bitset, KeyframeEffect::kDefaultPriority)); - EXPECT_TRUE(div->GetElementAnimations()->BaseComputedStyle()); + EXPECT_TRUE(style->GetBaseComputedStyle()); EXPECT_FALSE(bitset && bitset->Has(CSSPropertyID::kWidth)); EXPECT_TRUE(bitset && bitset->Has(CSSPropertyID::kHeight)); } @@ -235,11 +232,10 @@ div->SetNeedsAnimationStyleRecalc(); GetDocument().Lifecycle().AdvanceTo(DocumentLifecycle::kInStyleRecalc); - StyleForId("div"); + auto style = StyleForId("div"); - ASSERT_TRUE(div->GetElementAnimations()); - EXPECT_TRUE(div->GetElementAnimations()->BaseComputedStyle()); - EXPECT_TRUE(div->GetElementAnimations()->BaseImportantSet()); + EXPECT_TRUE(style->GetBaseComputedStyle()); + EXPECT_TRUE(style->GetBaseImportantSet()); StyleResolverState state(GetDocument(), *div); EXPECT_FALSE(StyleResolver::CanReuseBaseComputedStyle(state)); @@ -294,53 +290,6 @@ ComputedValue("font-size", *StyleForId("target"))); } -TEST_F(StyleResolverTest, NonCachableStyleCheckDoesNotAffectBaseComputedStyle) { - GetDocument().documentElement()->setInnerHTML(R"HTML( - <style> - .adjust { color: rgb(0, 0, 0); } - </style> - <div> - <div style="color: rgb(0, 128, 0)"> - <div id="target" style="transition: color 1s linear"></div> - </div> - </div> - )HTML"); - UpdateAllLifecyclePhasesForTest(); - - Element* target = GetDocument().getElementById("target"); - - EXPECT_EQ("rgb(0, 128, 0)", ComputedValue("color", *StyleForId("target"))); - - // Trigger a transition on an inherited property. - target->setAttribute(html_names::kClassAttr, "adjust"); - UpdateAllLifecyclePhasesForTest(); - ElementAnimations* element_animations = target->GetElementAnimations(); - EXPECT_TRUE(element_animations); - Animation* transition = (*element_animations->Animations().begin()).key; - EXPECT_TRUE(transition); - - // Advance to the midpoint of the transition. - transition->setCurrentTime(MakeGarbageCollected<V8CSSNumberish>(500), - ASSERT_NO_EXCEPTION); - UpdateAllLifecyclePhasesForTest(); - EXPECT_EQ("rgb(0, 64, 0)", ComputedValue("color", *StyleForId("target"))); - EXPECT_TRUE(element_animations->BaseComputedStyle()); - - element_animations->ClearBaseComputedStyle(); - - // Perform a non-cacheable style resolution, and ensure that the base computed - // style is not updated. - StyleRequest style_request; - style_request.matching_behavior = kMatchAllRulesExcludingSMIL; - GetStyleEngine().GetStyleResolver().ResolveStyle(target, StyleRecalcContext(), - style_request); - EXPECT_FALSE(element_animations->BaseComputedStyle()); - - // Computing the style with default args updates the base computed style. - EXPECT_EQ("rgb(0, 64, 0)", ComputedValue("color", *StyleForId("target"))); - EXPECT_TRUE(element_animations->BaseComputedStyle()); -} - class StyleResolverFontRelativeUnitTest : public testing::WithParamInterface<const char*>, public StyleResolverTest {}; @@ -363,8 +312,7 @@ auto computed_style = StyleForId("div"); EXPECT_TRUE(computed_style->HasFontRelativeUnits()); - ASSERT_TRUE(div->GetElementAnimations()); - EXPECT_TRUE(div->GetElementAnimations()->BaseComputedStyle()); + EXPECT_TRUE(computed_style->GetBaseComputedStyle()); StyleResolverState state(GetDocument(), *div); EXPECT_FALSE(StyleResolver::CanReuseBaseComputedStyle(state)); @@ -388,8 +336,7 @@ auto computed_style = StyleForId("div"); EXPECT_TRUE(computed_style->HasFontRelativeUnits()); - ASSERT_TRUE(div->GetElementAnimations()); - EXPECT_TRUE(div->GetElementAnimations()->BaseComputedStyle()); + EXPECT_TRUE(computed_style->GetBaseComputedStyle()); StyleResolverState state(GetDocument(), *div); EXPECT_TRUE(StyleResolver::CanReuseBaseComputedStyle(state));
diff --git a/third_party/blink/renderer/core/css/style_engine_test.cc b/third_party/blink/renderer/core/css/style_engine_test.cc index 151a26a..7ede4db6 100644 --- a/third_party/blink/renderer/core/css/style_engine_test.cc +++ b/third_party/blink/renderer/core/css/style_engine_test.cc
@@ -2504,18 +2504,21 @@ before->SetNeedsAnimationStyleRecalc(); UpdateAllLifecyclePhases(); - scoped_refptr<ComputedStyle> base_computed_style = - animations->base_computed_style_; + ASSERT_TRUE(before->GetComputedStyle()); + const ComputedStyle* base_computed_style = + before->GetComputedStyle()->GetBaseComputedStyle(); EXPECT_TRUE(base_computed_style); before->SetNeedsAnimationStyleRecalc(); UpdateAllLifecyclePhases(); - EXPECT_TRUE(animations->base_computed_style_); + ASSERT_TRUE(before->GetComputedStyle()); + EXPECT_TRUE(before->GetComputedStyle()->GetBaseComputedStyle()); #if !DCHECK_IS_ON() // When DCHECK is enabled, BaseComputedStyle() returns null and we repeatedly // create new instances which means the pointers will be different here. - EXPECT_EQ(base_computed_style, animations->base_computed_style_); + EXPECT_EQ(base_computed_style, + before->GetComputedStyle()->GetBaseComputedStyle()); #endif }
diff --git a/third_party/blink/renderer/core/dom/element.cc b/third_party/blink/renderer/core/dom/element.cc index 85e7221..b24ee228 100644 --- a/third_party/blink/renderer/core/dom/element.cc +++ b/third_party/blink/renderer/core/dom/element.cc
@@ -2784,7 +2784,6 @@ element_animations->CssAnimations().Cancel(); element_animations->SetAnimationStyleChange(false); } - element_animations->ClearBaseComputedStyle(); } }
diff --git a/third_party/blink/renderer/core/dom/element.h b/third_party/blink/renderer/core/dom/element.h index c840668..85a3388 100644 --- a/third_party/blink/renderer/core/dom/element.h +++ b/third_party/blink/renderer/core/dom/element.h
@@ -384,6 +384,9 @@ bool HasTagName(const HTMLQualifiedName& tag_name) const { return ContainerNode::HasTagName(tag_name); } + bool HasTagName(const MathMLQualifiedName& tag_name) const { + return ContainerNode::HasTagName(tag_name); + } bool HasTagName(const SVGQualifiedName& tag_name) const { return ContainerNode::HasTagName(tag_name); }
diff --git a/third_party/blink/renderer/core/html/html_element.cc b/third_party/blink/renderer/core/html/html_element.cc index fe26ab4..4b0c4e3 100644 --- a/third_party/blink/renderer/core/html/html_element.cc +++ b/third_party/blink/renderer/core/html/html_element.cc
@@ -79,6 +79,7 @@ #include "third_party/blink/renderer/core/layout/layout_box.h" #include "third_party/blink/renderer/core/layout/layout_box_model_object.h" #include "third_party/blink/renderer/core/layout/layout_object.h" +#include "third_party/blink/renderer/core/mathml/mathml_element.h" #include "third_party/blink/renderer/core/mathml_names.h" #include "third_party/blink/renderer/core/page/spatial_navigation.h" #include "third_party/blink/renderer/core/paint/paint_layer_scrollable_area.h" @@ -140,10 +141,9 @@ return true; if (IsA<SVGSVGElement>(node)) return true; - auto* element = DynamicTo<Element>(node); - if (element && element->HasTagName(mathml_names::kMathTag)) - return true; - return !element && node.parentNode()->IsHTMLElement(); + if (auto* mathml_element = DynamicTo<MathMLElement>(node)) + return mathml_element->HasTagName(mathml_names::kMathTag); + return !IsA<Element>(node) && node.parentNode()->IsHTMLElement(); } const WebFeature kNoWebFeature = static_cast<WebFeature>(0);
diff --git a/third_party/blink/renderer/core/html/parser/html_document_parser.cc b/third_party/blink/renderer/core/html/parser/html_document_parser.cc index c3976a7..c7bc38d 100644 --- a/third_party/blink/renderer/core/html/parser/html_document_parser.cc +++ b/third_party/blink/renderer/core/html/parser/html_document_parser.cc
@@ -145,6 +145,7 @@ end_if_delayed_forbidden_(0), should_complete_(0), should_attempt_to_end_on_eof_(0), + times_yielded_(0), needs_link_header_dispatch_(true), have_seen_first_byte_(false) {} @@ -198,6 +199,9 @@ } ParserSynchronizationPolicy GetMode() const { return mode_; } + void MarkYield() { times_yielded_++; } + int TimesYielded() const { return times_yielded_; } + void SetSeenCSPMetaTag(const bool seen) { if (meta_csp_state_ == MetaCSPTokenState::kUnenforceable) return; @@ -240,6 +244,7 @@ // Set to non-zero if Document::Finish has been called and we're operating // asynchronously. int should_attempt_to_end_on_eof_; + int times_yielded_; bool needs_link_header_dispatch_; bool have_seen_first_byte_; }; @@ -385,15 +390,6 @@ context_element, report_errors, options_)); } -namespace { -int GetMaxTokenizationBudget() { - static int max = base::GetFieldTrialParamByFeatureAsInt( - features::kForceSynchronousHTMLParsing, "MaxTokenizationBudget", - kDefaultMaxTokenizationBudget); - return max; -} -} // namespace - HTMLDocumentParser::HTMLDocumentParser(Document& document, ParserContentPolicy content_policy, ParserSynchronizationPolicy sync_policy, @@ -451,8 +447,6 @@ document.UkmSourceID(), document.UkmRecorder()); } - max_tokenization_budget_ = GetMaxTokenizationBudget(); - // Don't create preloader for parsing clipboard content. if (content_policy == kDisallowScriptingAndPluginContent) return; @@ -501,7 +495,8 @@ DocumentParser::Detach(); if (script_runner_) script_runner_->Detach(); - tree_builder_->Detach(); + if (tree_builder_) + tree_builder_->Detach(); // FIXME: It seems wrong that we would have a preload scanner here. Yet during // fast/dom/HTMLScriptElement/script-load-events.html we do. preload_scanner_.reset(); @@ -1044,7 +1039,13 @@ bool should_yield = false; bool should_pause_async_script_execution = false; - int budget = max_tokenization_budget_; + // If we've yielded more than 2 times, then set the budget to a very large + // number, to attempt to consume all available tokens in one go. This + // heuristic is intended to allow a quick first contentful paint, followed by + // a larger rendering lifecycle that processes the remainder of the page. + int budget = (task_runner_state_->TimesYielded() <= 2) + ? kDefaultMaxTokenizationBudget + : 1e7; base::ElapsedTimer chunk_parsing_timer_; unsigned tokens_parsed = 0; @@ -1138,6 +1139,8 @@ // should_run_until_completion implies that we should not yield CHECK(!should_run_until_completion || !should_yield); + if (should_yield) + task_runner_state_->MarkYield(); return should_yield; }
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 4e50c78..9f651d0a 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
@@ -150,10 +150,6 @@ void Flush() final; void SetDecoder(std::unique_ptr<TextResourceDecoder>) final; - void SetMaxTokenizationBudgetForTesting(int budget) { - max_tokenization_budget_ = budget; - } - protected: void insert(const String&) final; void Append(const String&) override; @@ -292,7 +288,6 @@ // would require keeping track of token positions of preload requests. CompactHTMLToken* pending_csp_meta_token_; - int max_tokenization_budget_; bool can_parse_asynchronously_; bool end_was_delayed_; bool have_background_parser_;
diff --git a/third_party/blink/renderer/core/html/parser/html_document_parser_test.cc b/third_party/blink/renderer/core/html/parser/html_document_parser_test.cc index b730ff6..8d25695f 100644 --- a/third_party/blink/renderer/core/html/parser/html_document_parser_test.cc +++ b/third_party/blink/renderer/core/html/parser/html_document_parser_test.cc
@@ -34,8 +34,7 @@ class HTMLDocumentParserTest : public PageTestBase, - public testing::WithParamInterface< - testing::tuple<ParserSynchronizationPolicy, int>>, + public testing::WithParamInterface<ParserSynchronizationPolicy>, private ScopedForceSynchronousHTMLParsingForTest { protected: HTMLDocumentParserTest() @@ -59,9 +58,8 @@ } HTMLDocumentParser* CreateParser(HTMLDocument& document) { - auto* parser = MakeGarbageCollected<HTMLDocumentParser>( - document, testing::get<0>(GetParam())); - parser->SetMaxTokenizationBudgetForTesting(testing::get<1>(GetParam())); + auto* parser = + MakeGarbageCollected<HTMLDocumentParser>(document, GetParam()); std::unique_ptr<TextResourceDecoder> decoder( BuildTextResourceDecoderFor(&document, "text/html", g_null_atom)); parser->SetDecoder(std::move(decoder)); @@ -69,21 +67,17 @@ } private: - ParserSynchronizationPolicy Policy() const { - return testing::get<0>(GetParam()); - } + ParserSynchronizationPolicy Policy() const { return GetParam(); } bool original_threaded_parsing_; }; } // namespace -INSTANTIATE_TEST_SUITE_P( - HTMLDocumentParserTest, - HTMLDocumentParserTest, - testing::Combine(testing::Values(kForceSynchronousParsing, - kAllowDeferredParsing), - testing::Values(250, 500, 1000))); +INSTANTIATE_TEST_SUITE_P(HTMLDocumentParserTest, + HTMLDocumentParserTest, + testing::Values(kForceSynchronousParsing, + kAllowDeferredParsing)); TEST_P(HTMLDocumentParserTest, StopThenPrepareToStopShouldNotCrash) { auto& document = To<HTMLDocument>(GetDocument()); @@ -165,7 +159,7 @@ HTMLParserScriptRunnerHost* script_runner_host = parser->AsHTMLParserScriptRunnerHostForTesting(); EXPECT_EQ(script_runner_host->HasPreloadScanner(), - testing::get<0>(GetParam()) == kAllowDeferredParsing); + GetParam() == kAllowDeferredParsing); EXPECT_EQ(HTMLTokenizer::kTagNameState, parser->Tokenizer()->GetState()); // Cancel any pending work to make sure that RuntimeFeatures DCHECKs do not // fire.
diff --git a/third_party/blink/renderer/core/inspector/inspector_dom_agent.cc b/third_party/blink/renderer/core/inspector/inspector_dom_agent.cc index 802b0d0..809b180 100644 --- a/third_party/blink/renderer/core/inspector/inspector_dom_agent.cc +++ b/third_party/blink/renderer/core/inspector/inspector_dom_agent.cc
@@ -37,6 +37,7 @@ #include "third_party/blink/renderer/bindings/core/v8/v8_file.h" #include "third_party/blink/renderer/bindings/core/v8/v8_node.h" #include "third_party/blink/renderer/core/css/css_computed_style_declaration.h" +#include "third_party/blink/renderer/core/css/css_container_rule.h" #include "third_party/blink/renderer/core/css/css_property_name.h" #include "third_party/blink/renderer/core/dom/attr.h" #include "third_party/blink/renderer/core/dom/character_data.h" @@ -72,6 +73,7 @@ #include "third_party/blink/renderer/core/inspector/dom_patch_support.h" #include "third_party/blink/renderer/core/inspector/identifiers_factory.h" #include "third_party/blink/renderer/core/inspector/inspected_frames.h" +#include "third_party/blink/renderer/core/inspector/inspector_css_agent.h" #include "third_party/blink/renderer/core/inspector/inspector_highlight.h" #include "third_party/blink/renderer/core/inspector/inspector_history.h" #include "third_party/blink/renderer/core/inspector/resolve_node.h" @@ -1558,6 +1560,56 @@ return Response::Success(); } +Response InspectorDOMAgent::getQueryingDescendantsForContainer( + int node_id, + std::unique_ptr<protocol::Array<int>>* node_ids) { + Element* container = nullptr; + Response response = AssertElement(node_id, container); + if (!response.IsSuccess()) + return response; + + // This won't work for edge cases with display locking + // (https://crbug.com/1235306). + container->GetDocument().UpdateStyleAndLayoutTreeForSubtree(container); + + *node_ids = std::make_unique<protocol::Array<int>>(); + NodeToIdMap* nodes_map = document_node_to_id_map_.Get(); + for (Element& element : ElementTraversal::DescendantsOf(*container)) { + if (ContainerQueriedByElement(container, &element)) { + int id = PushNodePathToFrontend(&element, nodes_map); + (*node_ids)->push_back(id); + } + } + + return Response::Success(); +} + +bool InspectorDOMAgent::ContainerQueriedByElement(Element* container, + Element* element) { + const ComputedStyle* style = element->GetComputedStyle(); + if (!style || !style->DependsOnContainerQueries()) + return false; + + StyleResolver& style_resolver = element->GetDocument().GetStyleResolver(); + RuleIndexList* matched_rules = + style_resolver.CssRulesForElement(element, StyleResolver::kAllCSSRules); + for (auto it = matched_rules->rbegin(); it != matched_rules->rend(); ++it) { + CSSRule* parent_rule = it->first; + while (parent_rule) { + auto* container_rule = DynamicTo<CSSContainerRule>(parent_rule); + if (container_rule) { + if (container == style_resolver.FindContainerForElement( + element, container_rule->Name())) + return true; + } + + parent_rule = parent_rule->parentRule(); + } + } + + return false; +} + // static String InspectorDOMAgent::DocumentURLString(Document* document) { if (!document || document->Url().IsNull())
diff --git a/third_party/blink/renderer/core/inspector/inspector_dom_agent.h b/third_party/blink/renderer/core/inspector/inspector_dom_agent.h index 785547e7..14eccfe 100644 --- a/third_party/blink/renderer/core/inspector/inspector_dom_agent.h +++ b/third_party/blink/renderer/core/inspector/inspector_dom_agent.h
@@ -258,6 +258,9 @@ int node_id, protocol::Maybe<String> container_name, protocol::Maybe<int>* container_node_id) override; + protocol::Response getQueryingDescendantsForContainer( + int node_id, + std::unique_ptr<protocol::Array<int>>* node_ids) override; bool Enabled() const; void ReleaseDanglingNodes(); @@ -373,6 +376,8 @@ std::unique_ptr<protocol::Array<protocol::DOM::BackendNode>> BuildDistributedNodesForSlot(HTMLSlotElement*); + bool ContainerQueriedByElement(Element* container, Element* element); + Node* NodeForPath(const String& path); void DiscardFrontendBindings();
diff --git a/third_party/blink/renderer/core/layout/geometry/logical_offset.h b/third_party/blink/renderer/core/layout/geometry/logical_offset.h index 5c9d96f2..5142d95 100644 --- a/third_party/blink/renderer/core/layout/geometry/logical_offset.h +++ b/third_party/blink/renderer/core/layout/geometry/logical_offset.h
@@ -5,6 +5,8 @@ #ifndef THIRD_PARTY_BLINK_RENDERER_CORE_LAYOUT_GEOMETRY_LOGICAL_OFFSET_H_ #define THIRD_PARTY_BLINK_RENDERER_CORE_LAYOUT_GEOMETRY_LOGICAL_OFFSET_H_ +#include <tuple> + #include "third_party/blink/renderer/core/core_export.h" #include "third_party/blink/renderer/platform/geometry/layout_unit.h" #include "third_party/blink/renderer/platform/text/writing_direction_mode.h"
diff --git a/third_party/blink/renderer/core/layout/layout_object.cc b/third_party/blink/renderer/core/layout/layout_object.cc index df0ba81..64e159f 100644 --- a/third_party/blink/renderer/core/layout/layout_object.cc +++ b/third_party/blink/renderer/core/layout/layout_object.cc
@@ -2817,16 +2817,6 @@ } } -void LayoutObject::ClearBaseComputedStyle() { - NOT_DESTROYED(); - auto* element = DynamicTo<Element>(GetNode()); - if (!element) - return; - - if (ElementAnimations* animations = element->GetElementAnimations()) - animations->ClearBaseComputedStyle(); -} - static bool AreNonIdenticalCursorListsEqual(const ComputedStyle* a, const ComputedStyle* b) { DCHECK_NE(a->Cursors(), b->Cursors());
diff --git a/third_party/blink/renderer/core/layout/layout_object.h b/third_party/blink/renderer/core/layout/layout_object.h index 0b8f195..930ce9f 100644 --- a/third_party/blink/renderer/core/layout/layout_object.h +++ b/third_party/blink/renderer/core/layout/layout_object.h
@@ -2272,8 +2272,6 @@ void SetModifiedStyleOutsideStyleRecalc(scoped_refptr<const ComputedStyle>, ApplyStyleChanges); - void ClearBaseComputedStyle(); - // This function returns an enclosing non-anonymous LayoutBlock for this // element. This function is not always returning the containing block as // defined by CSS. In particular:
diff --git a/third_party/blink/renderer/core/layout/ng/inline/ng_inline_box_state.cc b/third_party/blink/renderer/core/layout/ng/inline/ng_inline_box_state.cc index 502812f..8af4586 100644 --- a/third_party/blink/renderer/core/layout/ng/inline/ng_inline_box_state.cc +++ b/third_party/blink/renderer/core/layout/ng/inline/ng_inline_box_state.cc
@@ -704,48 +704,64 @@ void NGInlineLayoutStateStack::ApplyRelativePositioning( const NGConstraintSpace& space, - NGLogicalLineItems* line_box) { + NGLogicalLineItems* line_box, + Vector<LogicalOffset, 32>* oof_relative_offsets) { if (box_data_list_.IsEmpty()) return; + DCHECK(oof_relative_offsets); + DCHECK_EQ(oof_relative_offsets->size(), box_data_list_.size()); + // The final position of any inline boxes, (<span>, etc) are stored on // |BoxData::rect|. As we don't have a mapping from |NGLogicalLineItem| to // |BoxData| we store the accumulated relative offsets, and then apply the // final adjustment at the end of this function. Vector<LogicalOffset, 32> accumulated_offsets(line_box->size()); + Vector<LogicalOffset, 32> oof_accumulated_offsets(line_box->size()); for (BoxData& box_data : box_data_list_) { unsigned start = box_data.fragment_start; unsigned end = box_data.fragment_end; const LogicalOffset relative_offset = ComputeRelativeOffsetForInline(space, *box_data.item->Style()); + const LogicalOffset relative_offset_for_oof = + ComputeRelativeOffsetForOOFInInline(space, *box_data.item->Style()); // Move all children for this box. for (unsigned index = start; index < end; index++) { auto& child = (*line_box)[index]; child.rect.offset += relative_offset; accumulated_offsets[index] += relative_offset; + oof_accumulated_offsets[index] += relative_offset_for_oof; } } // Apply the final accumulated relative position offset for each box. - for (BoxData& box_data : box_data_list_) + for (wtf_size_t i = 0; i < box_data_list_.size(); i++) { + BoxData& box_data = box_data_list_[i]; box_data.rect.offset += accumulated_offsets[box_data.fragment_start]; + (*oof_relative_offsets)[i] = + oof_accumulated_offsets[box_data.fragment_start]; + } } void NGInlineLayoutStateStack::CreateBoxFragments( const NGConstraintSpace& space, - NGLogicalLineItems* line_box) { + NGLogicalLineItems* line_box, + Vector<LogicalOffset, 32>* oof_relative_offsets) { DCHECK(!box_data_list_.IsEmpty()); + DCHECK(oof_relative_offsets); + DCHECK_EQ(oof_relative_offsets->size(), box_data_list_.size()); - for (BoxData& box_data : box_data_list_) { + for (wtf_size_t i = 0; i < box_data_list_.size(); i++) { + BoxData& box_data = box_data_list_[i]; unsigned start = box_data.fragment_start; unsigned end = box_data.fragment_end; DCHECK_GT(end, start); NGLogicalLineItem* child = &(*line_box)[start]; DCHECK(box_data.item->ShouldCreateBoxFragment()); scoped_refptr<const NGLayoutResult> box_fragment = - box_data.CreateBoxFragment(space, line_box); + box_data.CreateBoxFragment(space, line_box, (*oof_relative_offsets)[i]); if (child->IsPlaceholder()) { child->layout_result = std::move(box_fragment); child->rect = box_data.rect; @@ -766,7 +782,8 @@ scoped_refptr<const NGLayoutResult> NGInlineLayoutStateStack::BoxData::CreateBoxFragment( const NGConstraintSpace& space, - NGLogicalLineItems* line_box) { + NGLogicalLineItems* line_box, + LogicalOffset oof_relative_offset) { DCHECK(item); DCHECK(item->Style()); const ComputedStyle& style = *item->Style(); @@ -790,11 +807,6 @@ // supported today. box.SetSidesToInclude({true, has_line_right_edge, true, has_line_left_edge}); - // We don't use ComputeRelativeOffsetForInline() when storing the relative - // offset for OOF descendants to avoid any line-logical conversions. - const LogicalOffset relative_offset = ComputeRelativeOffset( - style, space.GetWritingDirection(), space.AvailableSize()); - for (unsigned i = fragment_start; i < fragment_end; i++) { NGLogicalLineItem& child = (*line_box)[i]; @@ -811,6 +823,7 @@ // this as a child of an inline level fragment, we adjust the static // position to be relative to this fragment. LogicalOffset static_offset = child.rect.offset - rect.offset; + static_offset += oof_relative_offset; box.AddOutOfFlowInlineChildCandidate(oof_box, static_offset, child.container_direction); @@ -820,8 +833,14 @@ // Propagate any OOF-positioned descendants from any atomic-inlines, etc. if (child.layout_result) { + // An accumulated relative offset is applied to an OOF once it reaches its + // inline container. Subtract out the relative offset to avoid adding it + // twice. box.PropagateChildData(child.layout_result->PhysicalFragment(), - child.rect.offset - rect.offset, relative_offset); + child.rect.offset - rect.offset - + ComputeRelativeOffsetForInline( + space, child.PhysicalFragment()->Style()), + /* relative_offset */ LogicalOffset()); } // |NGFragmentItems| has a flat list of all descendants, except @@ -833,7 +852,7 @@ // invalidations. item->GetLayoutObject()->SetShouldDoFullPaintInvalidation(); - box.MoveOutOfFlowDescendantCandidatesToDescendants(relative_offset); + box.MoveOutOfFlowDescendantCandidatesToDescendants(oof_relative_offset); return box.ToInlineBoxFragment(); }
diff --git a/third_party/blink/renderer/core/layout/ng/inline/ng_inline_box_state.h b/third_party/blink/renderer/core/layout/ng/inline/ng_inline_box_state.h index 558ae99..901c6207 100644 --- a/third_party/blink/renderer/core/layout/ng/inline/ng_inline_box_state.h +++ b/third_party/blink/renderer/core/layout/ng/inline/ng_inline_box_state.h
@@ -174,6 +174,8 @@ bool HasBoxFragments() const { return !box_data_list_.IsEmpty(); } + wtf_size_t NumBoxFragments() const { return box_data_list_.size(); } + // Notify when child is inserted at |index| to adjust child indexes. void ChildInserted(unsigned index); @@ -190,11 +192,17 @@ // Compute inline positions of fragments and boxes. LayoutUnit ComputeInlinePositions(NGLogicalLineItems*, LayoutUnit position); - void ApplyRelativePositioning(const NGConstraintSpace&, NGLogicalLineItems*); - + // |oof_relative_offsets| is an output variable for the accumulated + // relative positioning offsets to be applied to OOF positioned descendants. + void ApplyRelativePositioning( + const NGConstraintSpace&, + NGLogicalLineItems*, + Vector<LogicalOffset, 32>* oof_relative_offsets); // Create box fragments. This function turns a flat list of children into // a box tree. - void CreateBoxFragments(const NGConstraintSpace&, NGLogicalLineItems*); + void CreateBoxFragments(const NGConstraintSpace&, + NGLogicalLineItems*, + Vector<LogicalOffset, 32>* oof_relative_offsets); #if DCHECK_IS_ON() void CheckSame(const NGInlineLayoutStateStack&) const; @@ -283,7 +291,8 @@ scoped_refptr<const NGLayoutResult> CreateBoxFragment( const NGConstraintSpace&, - NGLogicalLineItems*); + NGLogicalLineItems*, + LogicalOffset oof_relative_offset = LogicalOffset()); }; // Update start/end of the first BoxData found at |index|.
diff --git a/third_party/blink/renderer/core/layout/ng/inline/ng_inline_layout_algorithm.cc b/third_party/blink/renderer/core/layout/ng/inline/ng_inline_layout_algorithm.cc index 94b3f070..f9bdf1e1 100644 --- a/third_party/blink/renderer/core/layout/ng/inline/ng_inline_layout_algorithm.cc +++ b/third_party/blink/renderer/core/layout/ng/inline/ng_inline_layout_algorithm.cc
@@ -407,15 +407,20 @@ PlaceRelativePositionedItems(line_box); // Apply any relative positioned offsets to any boxes (and their children). - box_states_->ApplyRelativePositioning(ConstraintSpace(), line_box); + Vector<LogicalOffset, 32> oof_relative_offsets( + box_states_->NumBoxFragments()); + box_states_->ApplyRelativePositioning(ConstraintSpace(), line_box, + &oof_relative_offsets); // Create box fragments if needed. After this point forward, |line_box| is a // tree structure. // The individual children don't move position within the |line_box|, rather // the children have their layout_result, fragment, (or similar) set to null, // creating a "hole" in the array. - if (box_states_->HasBoxFragments()) - box_states_->CreateBoxFragments(ConstraintSpace(), line_box); + if (box_states_->HasBoxFragments()) { + box_states_->CreateBoxFragments(ConstraintSpace(), line_box, + &oof_relative_offsets); + } // Update item index of the box states in the context. context_->SetItemIndex(line_info->ItemsData().items, @@ -428,12 +433,8 @@ // Even if we have something in-flow, it may just be empty items that // shouldn't trigger creation of a line. Exit now if that's the case. - if (line_info->IsEmptyLine()) { - container_builder_.SetIsSelfCollapsing(); - container_builder_.SetIsEmptyLineBox(); - container_builder_.SetBaseDirection(line_info->BaseDirection()); + if (line_info->IsEmptyLine()) return; - } DCHECK(!line_box_metrics.IsEmpty()); @@ -458,7 +459,6 @@ if (line_info->UseFirstLineStyle()) container_builder_.SetStyleVariant(NGStyleVariant::kFirstLine); - container_builder_.SetBaseDirection(line_info->BaseDirection()); if (UNLIKELY(Node().IsTextCombine())) { // The effective size of combined text is 1em square[1] // [1] https://drafts.csswg.org/css-writing-modes-3/#text-combine-layout @@ -1219,6 +1219,7 @@ // Success! container_builder_.SetBreakToken(line_breaker.CreateBreakToken(line_info)); + container_builder_.SetBaseDirection(line_info.BaseDirection()); // Propagate any break tokens for floats that we fragmented before or inside // to the block container. @@ -1226,8 +1227,12 @@ line_breaker.PropagatedBreakTokens()) context_->PropagateBreakToken(std::move(float_break_token)); - if (is_empty_inline) { - DCHECK_EQ(container_builder_.BlockSize(), 0); + if (line_info.IsEmptyLine()) { + DCHECK_EQ(container_builder_.BlockSize(), LayoutUnit()); + DCHECK(!container_builder_.BfcBlockOffset()); + + container_builder_.SetIsSelfCollapsing(); + container_builder_.SetIsEmptyLineBox(); // Margins should collapse across "certain zero-height line boxes". // https://drafts.csswg.org/css2/box.html#collapsing-margins
diff --git a/third_party/blink/renderer/core/layout/ng/inline/ng_line_box_fragment_builder.cc b/third_party/blink/renderer/core/layout/ng/inline/ng_line_box_fragment_builder.cc index 378fb20..2da16bc 100644 --- a/third_party/blink/renderer/core/layout/ng/inline/ng_line_box_fragment_builder.cc +++ b/third_party/blink/renderer/core/layout/ng/inline/ng_line_box_fragment_builder.cc
@@ -14,6 +14,7 @@ #include "third_party/blink/renderer/core/layout/ng/ng_layout_result.h" #include "third_party/blink/renderer/core/layout/ng/ng_physical_box_fragment.h" #include "third_party/blink/renderer/core/layout/ng/ng_positioned_float.h" +#include "third_party/blink/renderer/core/layout/ng/ng_relative_utils.h" namespace blink { @@ -24,6 +25,8 @@ oof_positioned_candidates_.Shrink(0); unpositioned_list_marker_ = NGUnpositionedListMarker(); + bfc_block_offset_.reset(); + size_.inline_size = LayoutUnit(); metrics_ = FontHeight::Empty(); line_box_type_ = NGPhysicalLineBoxFragment::kNormalLineBox; @@ -43,9 +46,15 @@ for (unsigned index = 0; index < children.size(); ++index) { auto& child = children[index]; if (child.layout_result) { - PropagateChildData(child.layout_result->PhysicalFragment(), - child.Offset(), - /* relative_offset */ LogicalOffset()); + // An accumulated relative offset is applied to an OOF once it reaches its + // inline container. Subtract out the relative offset to avoid adding it + // twice. + PropagateChildData( + child.layout_result->PhysicalFragment(), + child.Offset() - + ComputeRelativeOffsetForInline(*ConstraintSpace(), + child.PhysicalFragment()->Style()), + /* reltaive_offset */ LogicalOffset()); // Skip over any children, the information should have already been // propagated into this layout result.
diff --git a/third_party/blink/renderer/core/layout/ng/ng_container_fragment_builder.cc b/third_party/blink/renderer/core/layout/ng/ng_container_fragment_builder.cc index 96e9e97..978a659 100644 --- a/third_party/blink/renderer/core/layout/ng/ng_container_fragment_builder.cc +++ b/third_party/blink/renderer/core/layout/ng/ng_container_fragment_builder.cc
@@ -305,12 +305,7 @@ LayoutUnit containing_block_adjustment, const NGContainingBlock<LogicalOffset>* fixedpos_containing_block, LogicalOffset additional_fixedpos_offset) { - LogicalOffset adjusted_offset = offset + offset_adjustment; - - // The relative offset is already applied for inlines, so don't include it - // in the |adjusted_offset|, as well. - if (!fragment.IsInlineBox()) - adjusted_offset += relative_offset; + LogicalOffset adjusted_offset = offset + offset_adjustment + relative_offset; // Collect the child's out of flow descendants. const WritingModeConverter converter(GetWritingDirection(), fragment.Size()); @@ -347,6 +342,12 @@ additional_fixedpos_offset != LogicalOffset()) && node.Style().GetPosition() == EPosition::kFixed) { static_position.offset += additional_fixedpos_offset; + // Relative offsets should be applied after fragmentation. However, if + // there is any relative offset that occurrend before the fixedpos reached + // its containing block, that relative offset should be applied to the + // static position (before fragmentation). + static_position.offset += + relative_offset - fixedpos_containing_block->relative_offset; if (fixedpos_containing_block && fixedpos_containing_block->fragment) { AddOutOfFlowFragmentainerDescendant( {node, static_position, new_inline_container,
diff --git a/third_party/blink/renderer/core/layout/ng/ng_length_utils.cc b/third_party/blink/renderer/core/layout/ng/ng_length_utils.cc index 60f36622..359fba0 100644 --- a/third_party/blink/renderer/core/layout/ng/ng_length_utils.cc +++ b/third_party/blink/renderer/core/layout/ng/ng_length_utils.cc
@@ -870,7 +870,7 @@ const LayoutUnit min_max_percentage_resolution_size = node.GetDocument().InQuirksMode() ? space.AvailableSize().block_size - : space.PercentageResolutionBlockSize(); + : space.ReplacedPercentageResolutionBlockSize(); block_min_max_sizes = { ResolveMinBlockLength(
diff --git a/third_party/blink/renderer/core/layout/ng/ng_relative_utils.cc b/third_party/blink/renderer/core/layout/ng/ng_relative_utils.cc index 26b0822..23112e2 100644 --- a/third_party/blink/renderer/core/layout/ng/ng_relative_utils.cc +++ b/third_party/blink/renderer/core/layout/ng/ng_relative_utils.cc
@@ -142,4 +142,31 @@ return relative_offset; } +LogicalOffset ComputeRelativeOffsetForOOFInInline( + const NGConstraintSpace& space, + const ComputedStyle& child_style) { + if (child_style.GetPosition() != EPosition::kRelative) + return LogicalOffset(); + + // The confliction resolution rules work based off the block's writing-mode + // and direction, not the child's container. E.g. + // <span style="direction: rtl;"> + // <span style="position: relative; left: 100px; right: -50px;"></span> + // </span> + // In the above example "left" wins. + const WritingDirectionMode writing_direction = space.GetWritingDirection(); + LogicalOffset relative_offset = ComputeRelativeOffset( + child_style, writing_direction, space.AvailableSize()); + + // Lines are built in a line-logical coordinate system: + // https://drafts.csswg.org/css-writing-modes-3/#line-directions + // Reverse the offset direction if we are in a RTL. We skip adjusting for + // flipped writing-mode when applying the relative position to an OOF + // positioned element. + if (writing_direction.IsRtl()) + relative_offset.inline_offset = -relative_offset.inline_offset; + + return relative_offset; +} + } // namespace blink
diff --git a/third_party/blink/renderer/core/layout/ng/ng_relative_utils.h b/third_party/blink/renderer/core/layout/ng/ng_relative_utils.h index 64e93af..e6b1bbd6 100644 --- a/third_party/blink/renderer/core/layout/ng/ng_relative_utils.h +++ b/third_party/blink/renderer/core/layout/ng/ng_relative_utils.h
@@ -33,6 +33,10 @@ ComputeRelativeOffsetForInline(const NGConstraintSpace& space, const ComputedStyle& child_style); +CORE_EXPORT LogicalOffset +ComputeRelativeOffsetForOOFInInline(const NGConstraintSpace& space, + const ComputedStyle& child_style); + } // namespace blink #endif // THIRD_PARTY_BLINK_RENDERER_CORE_LAYOUT_NG_NG_RELATIVE_UTILS_H_
diff --git a/third_party/blink/renderer/core/layout/ng/svg/layout_ng_svg_text.cc b/third_party/blink/renderer/core/layout/ng/svg/layout_ng_svg_text.cc index 7cb575a..8e26abe7 100644 --- a/third_party/blink/renderer/core/layout/ng/svg/layout_ng_svg_text.cc +++ b/third_party/blink/renderer/core/layout/ng/svg/layout_ng_svg_text.cc
@@ -10,6 +10,7 @@ #include "third_party/blink/renderer/core/layout/ng/inline/ng_fragment_item.h" #include "third_party/blink/renderer/core/layout/ng/ng_physical_box_fragment.h" #include "third_party/blink/renderer/core/layout/svg/layout_svg_inline_text.h" +#include "third_party/blink/renderer/core/layout/svg/layout_svg_resource_container.h" #include "third_party/blink/renderer/core/layout/svg/svg_layout_support.h" #include "third_party/blink/renderer/core/layout/svg/svg_resources.h" #include "third_party/blink/renderer/core/layout/svg/transformed_hit_test_location.h" @@ -85,6 +86,7 @@ return; SetNeedsTextMetricsUpdate(); + LayoutSVGResourceContainer::MarkForLayoutAndParentResourceInvalidation(*this); } void LayoutNGSVGText::UpdateFont() {
diff --git a/third_party/blink/renderer/core/layout/ng/table/ng_table_layout_algorithm.cc b/third_party/blink/renderer/core/layout/ng/table/ng_table_layout_algorithm.cc index 980e0fc..1468774 100644 --- a/third_party/blink/renderer/core/layout/ng/table/ng_table_layout_algorithm.cc +++ b/third_party/blink/renderer/core/layout/ng/table/ng_table_layout_algorithm.cc
@@ -898,7 +898,7 @@ grid_converter.ToPhysical(table_grid_rect), border_spacing, column_block_size); - if (Node().GetDOMNode() && IsA<MathMLElement>(Node().GetDOMNode()) && + if (Node().GetDOMNode() && Node().GetDOMNode()->HasTagName(mathml_names::kMtableTag)) table_baseline = MathTableBaseline(Style(), block_offset); if (table_baseline)
diff --git a/third_party/blink/renderer/core/layout/text_autosizer.cc b/third_party/blink/renderer/core/layout/text_autosizer.cc index c37fd886..0f2f89c6 100644 --- a/third_party/blink/renderer/core/layout/text_autosizer.cc +++ b/third_party/blink/renderer/core/layout/text_autosizer.cc
@@ -1266,8 +1266,6 @@ if (multiplier != 1) page_info_.has_autosized_ = true; - - layout_object->ClearBaseComputedStyle(); } bool TextAutosizer::IsWiderOrNarrowerDescendant(Cluster* cluster) {
diff --git a/third_party/blink/renderer/core/style/build.gni b/third_party/blink/renderer/core/style/build.gni index 424a49fc..c8cf135 100644 --- a/third_party/blink/renderer/core/style/build.gni +++ b/third_party/blink/renderer/core/style/build.gni
@@ -60,6 +60,8 @@ "shape_clip_path_operation.h", "shape_value.h", "style_aspect_ratio.h", + "style_base_data.h", + "style_base_data.cc", "style_cached_data.h", "style_content_alignment_data.h", "style_crossfade_image.cc",
diff --git a/third_party/blink/renderer/core/style/computed_style.cc b/third_party/blink/renderer/core/style/computed_style.cc index 8a53d141..d07b987 100644 --- a/third_party/blink/renderer/core/style/computed_style.cc +++ b/third_party/blink/renderer/core/style/computed_style.cc
@@ -102,11 +102,13 @@ struct SameSizeAsComputedStyleBase { SameSizeAsComputedStyleBase() { base::debug::Alias(&data_refs); + base::debug::Alias(&pointers); base::debug::Alias(&bitfields); } private: void* data_refs[8]; + void* pointers[1]; unsigned bitfields[5]; }; @@ -594,6 +596,18 @@ cached_data_->pseudo_element_styles_->clear(); } +const ComputedStyle* ComputedStyle::GetBaseComputedStyle() const { + if (auto* base_data = BaseData().get()) + return base_data->GetBaseComputedStyle(); + return nullptr; +} + +const CSSBitset* ComputedStyle::GetBaseImportantSet() const { + if (auto* base_data = BaseData().get()) + return base_data->GetBaseImportantSet(); + return nullptr; +} + bool ComputedStyle::InheritedEqual(const ComputedStyle& other) const { return IndependentInheritedEqual(other) && NonIndependentInheritedEqual(other); @@ -2110,6 +2124,9 @@ } void ComputedStyle::SetTextAutosizingMultiplier(float multiplier) { + if (TextAutosizingMultiplier() == multiplier) + return; + SetTextAutosizingMultiplierInternal(multiplier); float size = SpecifiedFontSize();
diff --git a/third_party/blink/renderer/core/style/computed_style.h b/third_party/blink/renderer/core/style/computed_style.h index 68e0f9c..04a01d2 100644 --- a/third_party/blink/renderer/core/style/computed_style.h +++ b/third_party/blink/renderer/core/style/computed_style.h
@@ -31,6 +31,7 @@ #include "base/types/pass_key.h" #include "third_party/blink/renderer/core/core_export.h" #include "third_party/blink/renderer/core/css/css_property_names.h" +#include "third_party/blink/renderer/core/css/properties/css_bitset.h" #include "third_party/blink/renderer/core/css/properties/css_property.h" #include "third_party/blink/renderer/core/css/style_auto_color.h" #include "third_party/blink/renderer/core/css/style_color.h" @@ -396,6 +397,22 @@ scoped_refptr<const ComputedStyle>) const; void ClearCachedPseudoElementStyles() const; + // If this ComputedStyle is affected by animation/transitions, then the + // unanimated "base" style can be retrieved with this function. + // + // If this function returns nullptr, then this ComputedStyle is not + // affected by animations, and *is* the base style. + CORE_EXPORT const ComputedStyle* GetBaseComputedStyle() const; + + // Indicates which properties are !important in the base style. + CORE_EXPORT const CSSBitset* GetBaseImportantSet() const; + + CORE_EXPORT const ComputedStyle* GetBaseComputedStyleOrThis() const { + if (auto* base = GetBaseComputedStyle()) + return base; + return this; + } + /** * ComputedStyle properties *
diff --git a/third_party/blink/renderer/core/style/computed_style_extra_fields.json5 b/third_party/blink/renderer/core/style/computed_style_extra_fields.json5 index f4e9d49..e1c1fcb 100644 --- a/third_party/blink/renderer/core/style/computed_style_extra_fields.json5 +++ b/third_party/blink/renderer/core/style/computed_style_extra_fields.json5
@@ -1118,5 +1118,16 @@ field_group: "*", default_value: "false", }, + { + name: "BaseData", + inherited: false, + field_template: "external", + type_name: "StyleBaseData", + include_paths: ["third_party/blink/renderer/core/style/style_base_data.h"], + default_value: "nullptr", + wrapper_pointer_name: "scoped_refptr", + custom_compare: true, + custom_copy: true, + }, ], }
diff --git a/third_party/blink/renderer/core/style/style_base_data.cc b/third_party/blink/renderer/core/style/style_base_data.cc new file mode 100644 index 0000000..476b3a4 --- /dev/null +++ b/third_party/blink/renderer/core/style/style_base_data.cc
@@ -0,0 +1,14 @@ +// Copyright 2021 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "third_party/blink/renderer/core/style/style_base_data.h" +#include "third_party/blink/renderer/core/style/computed_style.h" + +namespace blink { + +StyleBaseData::StyleBaseData(scoped_refptr<const ComputedStyle> style, + std::unique_ptr<CSSBitset> set) + : computed_style_(style), important_set_(std::move(set)) {} + +} // namespace blink
diff --git a/third_party/blink/renderer/core/style/style_base_data.h b/third_party/blink/renderer/core/style/style_base_data.h new file mode 100644 index 0000000..eb547b19 --- /dev/null +++ b/third_party/blink/renderer/core/style/style_base_data.h
@@ -0,0 +1,54 @@ +// Copyright 2021 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef THIRD_PARTY_BLINK_RENDERER_CORE_STYLE_STYLE_BASE_DATA_H_ +#define THIRD_PARTY_BLINK_RENDERER_CORE_STYLE_STYLE_BASE_DATA_H_ + +#include "third_party/blink/renderer/core/css/properties/css_bitset.h" +#include "third_party/blink/renderer/platform/wtf/forward.h" +#include "third_party/blink/renderer/platform/wtf/ref_counted.h" + +namespace blink { + +class ComputedStyle; + +class CORE_EXPORT StyleBaseData : public RefCounted<StyleBaseData> { + USING_FAST_MALLOC(StyleBaseData); + + public: + static scoped_refptr<StyleBaseData> Create( + scoped_refptr<const ComputedStyle> style, + std::unique_ptr<CSSBitset> important_set) { + return base::AdoptRef(new StyleBaseData(style, std::move(important_set))); + } + + const ComputedStyle* GetBaseComputedStyle() const { + return computed_style_.get(); + } + const CSSBitset* GetBaseImportantSet() const { return important_set_.get(); } + + private: + StyleBaseData(scoped_refptr<const ComputedStyle>, std::unique_ptr<CSSBitset>); + + scoped_refptr<const ComputedStyle> computed_style_; + + // Keeps track of the !important declarations used to build the base + // computed style. These declarations must not be overwritten by animation + // effects, hence we have to disable the base computed style optimization when + // !important declarations conflict with active animations. + // + // If there were no !important declarations in the base style, this field + // will be nullptr. + // + // TODO(andruud): We should be able to simply skip applying the animation + // for properties in this set instead of disabling the optimization. + // However, we currently need the cascade to handle the case where + // an !important declaration appears in a :visited selector. + // See https://crbug.com/1062217. + std::unique_ptr<CSSBitset> important_set_; +}; + +} // namespace blink + +#endif // THIRD_PARTY_BLINK_RENDERER_CORE_STYLE_STYLE_BASE_DATA_H_
diff --git a/third_party/blink/renderer/modules/canvas/canvas2d/canvas_path.cc b/third_party/blink/renderer/modules/canvas/canvas2d/canvas_path.cc index 92efd0f0..ea6c949a 100644 --- a/third_party/blink/renderer/modules/canvas/canvas2d/canvas_path.cc +++ b/third_party/blink/renderer/modules/canvas/canvas2d/canvas_path.cc
@@ -48,7 +48,7 @@ // DoublePoint & DoubleRect instead of FloatPoint & FloatRect. void CanvasPath::closePath() { - if (path_.IsEmpty()) + if (UNLIKELY(path_.IsEmpty())) return; path_.CloseSubpath(); } @@ -56,9 +56,9 @@ void CanvasPath::moveTo(double double_x, double double_y) { float x = base::saturated_cast<float>(double_x); float y = base::saturated_cast<float>(double_y); - if (!std::isfinite(x) || !std::isfinite(y)) + if (UNLIKELY(!std::isfinite(x) || !std::isfinite(y))) return; - if (!IsTransformInvertible()) { + if (UNLIKELY(!IsTransformInvertible())) { path_.MoveTo(GetTransform().MapPoint(FloatPoint(x, y))); return; } @@ -68,15 +68,15 @@ void CanvasPath::lineTo(double double_x, double double_y) { float x = base::saturated_cast<float>(double_x); float y = base::saturated_cast<float>(double_y); - if (!std::isfinite(x) || !std::isfinite(y)) + if (UNLIKELY(!std::isfinite(x) || !std::isfinite(y))) return; FloatPoint p1 = FloatPoint(x, y); - if (!IsTransformInvertible()) { + if (UNLIKELY(!IsTransformInvertible())) { p1 = GetTransform().MapPoint(p1); } - if (!path_.HasCurrentPoint()) + if (UNLIKELY(!path_.HasCurrentPoint())) path_.MoveTo(p1); path_.AddLineTo(p1); @@ -91,18 +91,18 @@ float x = base::saturated_cast<float>(double_x); float y = base::saturated_cast<float>(double_y); - if (!std::isfinite(cpx) || !std::isfinite(cpy) || !std::isfinite(x) || - !std::isfinite(y)) + if (UNLIKELY(!std::isfinite(cpx) || !std::isfinite(cpy) || + !std::isfinite(x) || !std::isfinite(y))) return; FloatPoint p1 = FloatPoint(x, y); FloatPoint cp = FloatPoint(cpx, cpy); - if (!IsTransformInvertible()) { + if (UNLIKELY(!IsTransformInvertible())) { p1 = GetTransform().MapPoint(p1); cp = GetTransform().MapPoint(cp); } - if (!path_.HasCurrentPoint()) + if (UNLIKELY(!path_.HasCurrentPoint())) path_.MoveTo(FloatPoint(cpx, cpy)); path_.AddQuadCurveTo(cp, p1); @@ -120,20 +120,21 @@ float cp2y = base::saturated_cast<float>(double_cp2y); float x = base::saturated_cast<float>(double_x); float y = base::saturated_cast<float>(double_y); - if (!std::isfinite(cp1x) || !std::isfinite(cp1y) || !std::isfinite(cp2x) || - !std::isfinite(cp2y) || !std::isfinite(x) || !std::isfinite(y)) + if (UNLIKELY(!std::isfinite(cp1x) || !std::isfinite(cp1y) || + !std::isfinite(cp2x) || !std::isfinite(cp2y) || + !std::isfinite(x) || !std::isfinite(y))) return; FloatPoint p1 = FloatPoint(x, y); FloatPoint cp1 = FloatPoint(cp1x, cp1y); FloatPoint cp2 = FloatPoint(cp2x, cp2y); - if (!IsTransformInvertible()) { + if (UNLIKELY(!IsTransformInvertible())) { p1 = GetTransform().MapPoint(p1); cp1 = GetTransform().MapPoint(cp1); cp2 = GetTransform().MapPoint(cp2); } - if (!path_.HasCurrentPoint()) + if (UNLIKELY(!path_.HasCurrentPoint())) path_.MoveTo(FloatPoint(cp1x, cp1y)); path_.AddBezierCurveTo(cp1, cp2, p1); @@ -150,11 +151,11 @@ float x2 = base::saturated_cast<float>(double_x2); float y2 = base::saturated_cast<float>(double_y2); float r = base::saturated_cast<float>(double_r); - if (!std::isfinite(x1) || !std::isfinite(y1) || !std::isfinite(x2) || - !std::isfinite(y2) || !std::isfinite(r)) + if (UNLIKELY(!std::isfinite(x1) || !std::isfinite(y1) || !std::isfinite(x2) || + !std::isfinite(y2) || !std::isfinite(r))) return; - if (r < 0) { + if (UNLIKELY(r < 0)) { exception_state.ThrowDOMException( DOMExceptionCode::kIndexSizeError, "The radius provided (" + String::Number(r) + ") is negative."); @@ -164,14 +165,14 @@ FloatPoint p1 = FloatPoint(x1, y1); FloatPoint p2 = FloatPoint(x2, y2); - if (!IsTransformInvertible()) { + if (UNLIKELY(!IsTransformInvertible())) { p1 = GetTransform().MapPoint(p1); p2 = GetTransform().MapPoint(p2); } - if (!path_.HasCurrentPoint()) + if (UNLIKELY(!path_.HasCurrentPoint())) path_.MoveTo(p1); - else if (p1 == path_.CurrentPoint() || p1 == p2 || !r) + else if (UNLIKELY(p1 == path_.CurrentPoint() || p1 == p2 || !r)) lineTo(x1, y1); else path_.AddArcTo(p1, p2, r); @@ -309,7 +310,7 @@ // arc. LineToFloatPoint(path, center + rotation_matrix.MapPoint(GetPointOnEllipse( radius_x, radius_y, start_angle))); - if ((!radius_x && !radius_y) || start_angle == end_angle) + if (UNLIKELY((!radius_x && !radius_y) || start_angle == end_angle)) return; if (!anticlockwise) { @@ -350,21 +351,22 @@ float radius = base::saturated_cast<float>(double_radius); float start_angle = base::saturated_cast<float>(double_start_angle); float end_angle = base::saturated_cast<float>(double_end_angle); - if (!std::isfinite(x) || !std::isfinite(y) || !std::isfinite(radius) || - !std::isfinite(start_angle) || !std::isfinite(end_angle)) + if (UNLIKELY(!std::isfinite(x) || !std::isfinite(y) || + !std::isfinite(radius) || !std::isfinite(start_angle) || + !std::isfinite(end_angle))) return; - if (radius < 0) { + if (UNLIKELY(radius < 0)) { exception_state.ThrowDOMException( DOMExceptionCode::kIndexSizeError, "The radius provided (" + String::Number(radius) + ") is negative."); return; } - if (!IsTransformInvertible()) + if (UNLIKELY(!IsTransformInvertible())) return; - if (!radius || start_angle == end_angle) { + if (UNLIKELY(!radius || start_angle == end_angle)) { // The arc is empty but we still need to draw the connecting line. lineTo(x + radius * cosf(start_angle), y + radius * sinf(start_angle)); return; @@ -391,19 +393,20 @@ float rotation = base::saturated_cast<float>(double_rotation); float start_angle = base::saturated_cast<float>(double_start_angle); float end_angle = base::saturated_cast<float>(double_end_angle); - if (!std::isfinite(x) || !std::isfinite(y) || !std::isfinite(radius_x) || - !std::isfinite(radius_y) || !std::isfinite(rotation) || - !std::isfinite(start_angle) || !std::isfinite(end_angle)) + if (UNLIKELY(!std::isfinite(x) || !std::isfinite(y) || + !std::isfinite(radius_x) || !std::isfinite(radius_y) || + !std::isfinite(rotation) || !std::isfinite(start_angle) || + !std::isfinite(end_angle))) return; - if (radius_x < 0) { + if (UNLIKELY(radius_x < 0)) { exception_state.ThrowDOMException(DOMExceptionCode::kIndexSizeError, "The major-axis radius provided (" + String::Number(radius_x) + ") is negative."); return; } - if (radius_y < 0) { + if (UNLIKELY(radius_y < 0)) { exception_state.ThrowDOMException(DOMExceptionCode::kIndexSizeError, "The minor-axis radius provided (" + String::Number(radius_y) + @@ -411,13 +414,13 @@ return; } - if (!IsTransformInvertible()) + if (UNLIKELY(!IsTransformInvertible())) return; CanonicalizeAngle(&start_angle, &end_angle); float adjusted_end_angle = AdjustEndAngle(start_angle, end_angle, anticlockwise); - if (!radius_x || !radius_y || start_angle == adjusted_end_angle) { + if (UNLIKELY(!radius_x || !radius_y || start_angle == adjusted_end_angle)) { // The ellipse is empty but we still need to draw the connecting line to // start point. DegenerateEllipse(this, x, y, radius_x, radius_y, rotation, start_angle, @@ -437,11 +440,11 @@ float y = base::saturated_cast<float>(double_y); float width = base::saturated_cast<float>(double_width); float height = base::saturated_cast<float>(double_height); - if (!IsTransformInvertible()) + if (UNLIKELY(!IsTransformInvertible())) return; - if (!std::isfinite(x) || !std::isfinite(y) || !std::isfinite(width) || - !std::isfinite(height)) + if (UNLIKELY(!std::isfinite(x) || !std::isfinite(y) || + !std::isfinite(width) || !std::isfinite(height))) return; path_.AddRect(FloatRect(x, y, width, height)); @@ -455,7 +458,7 @@ const HeapVector<Member<V8UnionDOMPointInitOrUnrestrictedDouble>>& radii, ExceptionState& exception_state) { const int num_radii = radii.size(); - if (num_radii < 1 || num_radii > 4) { + if (UNLIKELY(num_radii < 1 || num_radii > 4)) { exception_state.ThrowRangeError( String::Number(num_radii) + " radii provided. Between one and four radii are necessary."); @@ -465,11 +468,11 @@ float y = base::saturated_cast<float>(double_y); float width = base::saturated_cast<float>(double_width); float height = base::saturated_cast<float>(double_height); - if (!IsTransformInvertible()) + if (UNLIKELY(!IsTransformInvertible())) return; - if (!std::isfinite(x) || !std::isfinite(y) || !std::isfinite(width) || - !std::isfinite(height)) + if (UNLIKELY(!std::isfinite(x) || !std::isfinite(y) || + !std::isfinite(width) || !std::isfinite(height))) return; FloatSize r[num_radii];
diff --git a/third_party/blink/renderer/modules/webgpu/gpu.cc b/third_party/blink/renderer/modules/webgpu/gpu.cc index fbb3d08..ab48663 100644 --- a/third_party/blink/renderer/modules/webgpu/gpu.cc +++ b/third_party/blink/renderer/modules/webgpu/gpu.cc
@@ -7,9 +7,12 @@ #include <utility> #include "gpu/command_buffer/client/webgpu_interface.h" +#include "mojo/public/cpp/bindings/remote.h" #include "third_party/blink/public/common/privacy_budget/identifiability_metric_builder.h" #include "third_party/blink/public/common/privacy_budget/identifiability_study_settings.h" #include "third_party/blink/public/common/privacy_budget/identifiable_token_builder.h" +#include "third_party/blink/public/common/thread_safe_browser_interface_broker_proxy.h" +#include "third_party/blink/public/mojom/gpu/gpu.mojom-blink.h" #include "third_party/blink/public/platform/platform.h" #include "third_party/blink/public/platform/web_graphics_context_3d_provider.h" #include "third_party/blink/renderer/bindings/core/v8/script_promise_resolver.h" @@ -72,6 +75,20 @@ context_provider = CreateContextProviderOnMainThread(url); } + // Note that we check for API blocking *after* creating the context. This is + // because context creation synchronizes against GpuProcessHost lifetime in + // the browser process, and GpuProcessHost destruction is what updates API + // blocking state on a GPU process crash. See https://crbug.com/1215907#c10 + // for more details. + bool blocked = true; + mojo::Remote<mojom::blink::GpuDataManager> gpu_data_manager; + Platform::Current()->GetBrowserInterfaceBroker()->GetInterface( + gpu_data_manager.BindNewPipeAndPassReceiver()); + gpu_data_manager->Are3DAPIsBlockedForUrl(url, &blocked); + if (blocked) { + return nullptr; + } + // TODO(kainino): we will need a better way of accessing the GPU interface // from multiple threads than BindToCurrentThread et al. if (context_provider && !context_provider->BindToCurrentThread()) {
diff --git a/third_party/blink/renderer/platform/loader/fetch/cached_metadata.cc b/third_party/blink/renderer/platform/loader/fetch/cached_metadata.cc index e0879d1..04141eb 100644 --- a/third_party/blink/renderer/platform/loader/fetch/cached_metadata.cc +++ b/third_party/blink/renderer/platform/loader/fetch/cached_metadata.cc
@@ -62,12 +62,7 @@ DCHECK(data_type_id); DCHECK(data); - vector_.ReserveInitialCapacity(kCachedMetaDataStart + size); - uint32_t marker = CachedMetadataHandler::kSingleEntry; - vector_.Append(reinterpret_cast<const uint8_t*>(&marker), sizeof(uint32_t)); - vector_.Append(reinterpret_cast<const uint8_t*>(&data_type_id), - sizeof(uint32_t)); - vector_.Append(data, size); + vector_ = CachedMetadata::GetSerializedData(data_type_id, data, size); } CachedMetadata::CachedMetadata(mojo_base::BigBuffer data) {
diff --git a/third_party/blink/renderer/platform/loader/fetch/cached_metadata.h b/third_party/blink/renderer/platform/loader/fetch/cached_metadata.h index 66b6bda..9b58818d 100644 --- a/third_party/blink/renderer/platform/loader/fetch/cached_metadata.h +++ b/third_party/blink/renderer/platform/loader/fetch/cached_metadata.h
@@ -34,6 +34,7 @@ #include <stdint.h> #include "base/memory/scoped_refptr.h" #include "mojo/public/cpp/base/big_buffer.h" +#include "third_party/blink/renderer/platform/loader/fetch/url_loader/cached_metadata_handler.h" #include "third_party/blink/renderer/platform/platform_export.h" #include "third_party/blink/renderer/platform/wtf/allocator/allocator.h" #include "third_party/blink/renderer/platform/wtf/ref_counted.h" @@ -62,6 +63,20 @@ new CachedMetadata(data_type_id, data, SafeCast<wtf_size_t>(size))); } + static Vector<uint8_t> GetSerializedData(uint32_t data_type_id, + const uint8_t* data, + size_t size) { + Vector<uint8_t> vector; + vector.ReserveInitialCapacity(kCachedMetaDataStart + + SafeCast<wtf_size_t>(size)); + uint32_t marker = CachedMetadataHandler::kSingleEntry; + vector.Append(reinterpret_cast<const uint8_t*>(&marker), sizeof(uint32_t)); + vector.Append(reinterpret_cast<const uint8_t*>(&data_type_id), + sizeof(uint32_t)); + vector.Append(data, SafeCast<wtf_size_t>(size)); + return vector; + } + static scoped_refptr<CachedMetadata> CreateFromSerializedData( const uint8_t* data, size_t);
diff --git a/third_party/blink/tools/blinkpy/common/config/builders.json b/third_party/blink/tools/blinkpy/common/config/builders.json index 2d28e48..e22e3d6 100644 --- a/third_party/blink/tools/blinkpy/common/config/builders.json +++ b/third_party/blink/tools/blinkpy/common/config/builders.json
@@ -14,6 +14,11 @@ "port_name": "linux-trusty", "specifiers": ["Trusty", "Debug"] }, + "Mac10.12 Tests": { + "master": "chromium.mac", + "port_name": "mac-mac10.12", + "specifiers": ["Mac10.12", "Release"] + }, "Mac10.13 Tests": { "master": "chromium.mac", "port_name": "mac-mac10.13", @@ -84,6 +89,12 @@ "has_webdriver_tests": true, "is_try_builder": true }, + "mac10.12-blink-rel": { + "master": "tryserver.blink", + "port_name": "mac-mac10.12", + "specifiers": ["Mac10.12", "Release"], + "is_try_builder": true + }, "mac10.13-blink-rel": { "master": "tryserver.blink", "port_name": "mac-mac10.13",
diff --git a/third_party/blink/tools/blinkpy/presubmit/audit_non_blink_usage.py b/third_party/blink/tools/blinkpy/presubmit/audit_non_blink_usage.py index b268976..fb073475 100755 --- a/third_party/blink/tools/blinkpy/presubmit/audit_non_blink_usage.py +++ b/third_party/blink/tools/blinkpy/presubmit/audit_non_blink_usage.py
@@ -930,6 +930,7 @@ 'third_party/blink/renderer/core/execution_context/execution_context.cc', 'third_party/blink/renderer/modules/service_worker/service_worker_script_cached_metadata_handler.h', 'third_party/blink/renderer/modules/service_worker/service_worker_script_cached_metadata_handler.cc', + 'third_party/blink/renderer/bindings/core/v8/v8_wasm_response_extensions.cc', ], 'allowed': [ # TODO(mythria): Allow use of non-blink mojo interface. Once
diff --git a/third_party/blink/tools/blinkpy/web_tests/stale_expectation_removal/OWNERS b/third_party/blink/tools/blinkpy/web_tests/stale_expectation_removal/OWNERS new file mode 100644 index 0000000..428f610 --- /dev/null +++ b/third_party/blink/tools/blinkpy/web_tests/stale_expectation_removal/OWNERS
@@ -0,0 +1 @@ +bsheedy@chromium.org
diff --git a/third_party/blink/tools/blinkpy/web_tests/stale_expectation_removal/__init__.py b/third_party/blink/tools/blinkpy/web_tests/stale_expectation_removal/__init__.py new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/third_party/blink/tools/blinkpy/web_tests/stale_expectation_removal/__init__.py
diff --git a/third_party/blink/tools/blinkpy/web_tests/stale_expectation_removal/remove_stale_expectations.py b/third_party/blink/tools/blinkpy/web_tests/stale_expectation_removal/remove_stale_expectations.py new file mode 100644 index 0000000..ffa6fd7 --- /dev/null +++ b/third_party/blink/tools/blinkpy/web_tests/stale_expectation_removal/remove_stale_expectations.py
@@ -0,0 +1,85 @@ +# Copyright 2021 The Chromium Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +import argparse +import logging +import sys + +assert sys.version_info[0] == 3 + + +def ParseArgs(): + parser = argparse.ArgumentParser(description=( + 'Script for finding cases of stale expectations that can be ' + 'removed/modified.')) + parser.add_argument('--large-query-mode', + action='store_true', + default=False, + help=('Run the script in large query mode. This ' + 'incurs a significant performance hit, but ' + 'allows the use of larger sample sizes by ' + 'working around a hard memory limit in ' + 'BigQuery.')) + parser.add_argument('--project', + default='chrome-unexpected-pass-data', + help=('The billing project to use for BigQuery ' + 'queries. Must have access to the ResultDB BQ ' + 'tables, e.g. "chrome-luci-data.chromium.' + 'blink_web_testes_ci_results".')) + parser.add_argument('--num-samples', + type=int, + default=100, + help='The number of recent builds to query.') + parser.add_argument('--output-format', + choices=['html', 'print'], + default='html', + help='How to output script results.') + parser.add_argument('--remove-stale-expectations', + action='store_true', + default=False, + help=('Automatically remove any expectations that are ' + 'determined to be stale from the expectation ' + 'files.')) + parser.add_argument('-v', + '--verbose', + action='count', + default=0, + help=('Increase logging verbosity, can be passed ' + 'multiple times.')) + parser.add_argument('-q', + '--quiet', + action='store_true', + default=False, + help='Disable logging for non-errors.') + + args = parser.parse_args() + if args.quiet: + args.verbose = -1 + SetLoggingVerbosity(args.verbose) + + return args + + +def SetLoggingVerbosity(verbosity_level): + if verbosity_level == -1: + level = logging.ERROR + elif verbosity_level == 0: + level = logging.WARNING + elif verbosity_level == 1: + level = logging.INFO + else: + level = logging.DEBUG + logging.getLogger().setLevel(level) + + +def main(): + args = ParseArgs() + raise RuntimeError( + 'Script is still under active development and not currently functional' + ) + return 0 + + +if __name__ == '__main__': + sys.exit(main())
diff --git a/third_party/blink/tools/remove_stale_expectations.py b/third_party/blink/tools/remove_stale_expectations.py new file mode 100755 index 0000000..79fec6b --- /dev/null +++ b/third_party/blink/tools/remove_stale_expectations.py
@@ -0,0 +1,13 @@ +#!/usr/bin/env vpython3 +# Copyright 2021 The Chromium Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +from blinkpy.web_tests.stale_expectation_removal import ( + remove_stale_expectations) + +import sys + +if __name__ == '__main__': + rc = remove_stale_expectations.main() + sys.exit(rc)
diff --git a/third_party/blink/web_tests/TestExpectations b/third_party/blink/web_tests/TestExpectations index 414e7d6..49f975d 100644 --- a/third_party/blink/web_tests/TestExpectations +++ b/third_party/blink/web_tests/TestExpectations
@@ -1069,6 +1069,7 @@ virtual/layout_ng_block_frag/external/wpt/css/css-break/out-of-flow-in-multicolumn-063.html [ Pass ] virtual/layout_ng_block_frag/external/wpt/css/css-break/out-of-flow-in-multicolumn-065.html [ Pass ] virtual/layout_ng_block_frag/external/wpt/css/css-break/out-of-flow-in-multicolumn-066.html [ Pass ] +virtual/layout_ng_block_frag/external/wpt/css/css-break/out-of-flow-in-multicolumn-073.html [ Pass ] virtual/layout_ng_block_frag/external/wpt/css/css-break/overflow-clip-000.html [ Pass ] virtual/layout_ng_block_frag/external/wpt/css/css-break/overflow-clip-001.html [ Pass ] virtual/layout_ng_block_frag/external/wpt/css/css-break/overflowed-block-with-no-room-after-000.html [ Pass ] @@ -3821,6 +3822,7 @@ crbug.com/829028 external/wpt/css/css-break/out-of-flow-in-multicolumn-063.html [ Failure ] crbug.com/829028 external/wpt/css/css-break/out-of-flow-in-multicolumn-065.html [ Failure ] crbug.com/829028 external/wpt/css/css-break/out-of-flow-in-multicolumn-066.html [ Failure ] +crbug.com/829028 external/wpt/css/css-break/out-of-flow-in-multicolumn-073.html [ Failure ] crbug.com/829028 external/wpt/css/css-break/overflow-clip-000.html [ Failure ] crbug.com/829028 external/wpt/css/css-break/overflow-clip-001.html [ Failure ] crbug.com/829028 external/wpt/css/css-break/overflowed-block-with-no-room-after-001.html [ Failure ] @@ -4122,7 +4124,6 @@ crbug.com/1179585 [ Mac ] virtual/layout_ng_svg_text/paint/invalidation/svg/modify-transferred-listitem-different-attr.html [ Failure ] crbug.com/1179585 [ Mac ] virtual/layout_ng_svg_text/paint/invalidation/svg/repaint-non-scaling-stroke-text.html [ Failure ] crbug.com/1179585 [ Mac ] virtual/layout_ng_svg_text/paint/invalidation/svg/repaint-non-scaling-stroke-text-decoration.html [ Failure ] -crbug.com/1179585 virtual/layout_ng_svg_text/paint/invalidation/svg/text-mask-update.svg [ Failure ] crbug.com/1179585 virtual/layout_ng_svg_text/paint/invalidation/svg/text-match-svg.html [ Failure ] crbug.com/1179585 virtual/layout_ng_svg_text/paint/invalidation/svg/text-rescale.html [ Failure ] crbug.com/1179585 virtual/layout_ng_svg_text/paint/invalidation/svg/text-viewbox-rescale.html [ Failure ] @@ -6045,9 +6046,6 @@ # Sheriff 2020-08-03 crbug.com/1106429 virtual/percent-based-scrolling/max-percent-delta-page-zoom.html [ Failure Pass ] -# Flaky test -crbug.com/1112778 external/wpt/html/semantics/scripting-1/the-script-element/module/dynamic-import/alpha/base-url-worker.sub.html [ Failure Pass ] - # Sheriff 2020-08-05 crbug.com/1113050 fast/borders/border-radius-mask-video-ratio.html [ Failure Pass ] crbug.com/1113127 fast/canvas/downsample-quality.html [ Crash Failure Pass ]
diff --git a/third_party/blink/web_tests/WebGPUExpectations b/third_party/blink/web_tests/WebGPUExpectations index 53be6ef..55e7c95 100644 --- a/third_party/blink/web_tests/WebGPUExpectations +++ b/third_party/blink/web_tests/WebGPUExpectations
@@ -19,6 +19,9 @@ # external/wpt/webgpu/cts.html, as the latter is not run. # **************************************************************************** +# Workaround page loaded when content_shell starts, but not run as a test. +crbug.com/1231599 wpt_internal/webgpu/000_run_me_first.html [ Skip ] + ### ### Slow tests. Please prefer to split tests rather than adding to this section. ### @@ -133,9 +136,6 @@ ### Platform-independent failures ### -# This test runs first, and is often slow due to some browser startup not being complete. -crbug.com/953991 wpt_internal/webgpu/000_run_me_first.html [ Slow ] - crbug.com/dawn/999 wpt_internal/webgpu/cts.html?q=webgpu:api,operation,buffers,map_oom:mappedAtCreation,smaller_getMappedRange:* [ Failure ] crbug.com/dawn/999 wpt_internal/webgpu/cts.html?q=webgpu:api,operation,buffers,map_oom:mappedAtCreation,full_getMappedRange:* [ Failure ]
diff --git a/third_party/blink/web_tests/android/ChromeWPTOverrideExpectations b/third_party/blink/web_tests/android/ChromeWPTOverrideExpectations index 3318d83..cea7580 100644 --- a/third_party/blink/web_tests/android/ChromeWPTOverrideExpectations +++ b/third_party/blink/web_tests/android/ChromeWPTOverrideExpectations
@@ -1054,7 +1054,6 @@ 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-iframe.tentative.html [ Failure Pass ] 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 ]
diff --git a/third_party/blink/web_tests/android/WebLayerWPTOverrideExpectations b/third_party/blink/web_tests/android/WebLayerWPTOverrideExpectations index a2a7b8f..a3449cab 100644 --- a/third_party/blink/web_tests/android/WebLayerWPTOverrideExpectations +++ b/third_party/blink/web_tests/android/WebLayerWPTOverrideExpectations
@@ -1138,7 +1138,6 @@ 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-iframe.tentative.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 ]
diff --git a/third_party/blink/web_tests/android/WebviewWPTExpectations b/third_party/blink/web_tests/android/WebviewWPTExpectations index 044297b4..2111960 100644 --- a/third_party/blink/web_tests/android/WebviewWPTExpectations +++ b/third_party/blink/web_tests/android/WebviewWPTExpectations
@@ -3114,7 +3114,6 @@ crbug.com/1050754 external/wpt/inert/inert-node-is-unfocusable.tentative.html [ Failure ] crbug.com/1050754 external/wpt/inert/inert-node-is-unselectable.tentative.html [ Failure ] crbug.com/1050754 external/wpt/inert/inert-on-slots.tentative.html [ Failure ] -crbug.com/1050754 external/wpt/inert/inert-retargeting-iframe.tentative.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 ]
diff --git a/third_party/blink/web_tests/external/wpt/css/css-break/out-of-flow-in-multicolumn-044.html b/third_party/blink/web_tests/external/wpt/css/css-break/out-of-flow-in-multicolumn-044.html index 4c2b9c9..d06f404 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-break/out-of-flow-in-multicolumn-044.html +++ b/third_party/blink/web_tests/external/wpt/css/css-break/out-of-flow-in-multicolumn-044.html
@@ -11,7 +11,7 @@ column-gap: 0px; height: 100px; width: 100px; - margin-left: -50px; + margin-left: -200px; margin-top: -50px; } .rel { @@ -30,7 +30,8 @@ <p>Test passes if there is a filled green square and <strong>no red</strong>.</p> <div class="multicol"> <div class="rel" style="top: 50px; left: 50px;"> - <div style="transform: translateX(0); height: 200px; background: red;"> + <div style="transform: translateX(0); height: 200px;"> + <div class="abs" style="width: 50px; height: 200px; top: 100px; left: 100px; background: red;"></div> <div class="rel" style="top: 100px; left: 100px;"> <div class="abs"> <div class="abs">
diff --git a/third_party/blink/web_tests/external/wpt/css/css-break/out-of-flow-in-multicolumn-073.html b/third_party/blink/web_tests/external/wpt/css/css-break/out-of-flow-in-multicolumn-073.html new file mode 100644 index 0000000..57093e2 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-break/out-of-flow-in-multicolumn-073.html
@@ -0,0 +1,44 @@ +<!DOCTYPE html> +<title> + Nested fixedpos should be affected by relative positioned offset. +</title> +<link rel="help" href="https://www.w3.org/TR/css-position-3/#abspos-breaking"> +<link rel="match" href="../reference/ref-filled-green-100px-square.xht"> +<style> + .multicol { + columns: 2; + column-fill: auto; + height: 100px; + width: 100px; + column-gap: 0px; + margin-top: -100px; + margin-left: -150px; + } + .box { + width: 50px; + height: 200px; + } + .fixed { + position: fixed; + background: green; + } + .abs { + position: absolute; + } + .rel { + position: relative; + top: 100px; + left: 50px; + } +</style> +<p>Test passes if there is a filled green square and <strong>no red</strong>.</p> +<div class="multicol"> + <div class="rel" style="transform: translateX(0);"> + <div class="abs box" style="background: red; top: 100px; left: 50px;"></div> + <div class="rel"> + <div class="abs"> + <div class="fixed box"></div> + </div> + </div> + </div> +</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-position/multicol/static-position/vlr-ltr-ltr-in-multicol.html b/third_party/blink/web_tests/external/wpt/css/css-position/multicol/static-position/vlr-ltr-ltr-in-multicol.html index 173ba5a7..45de6ff 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-position/multicol/static-position/vlr-ltr-ltr-in-multicol.html +++ b/third_party/blink/web_tests/external/wpt/css/css-position/multicol/static-position/vlr-ltr-ltr-in-multicol.html
@@ -21,7 +21,11 @@ inline-size: 160px; } .red { color: red; } - .cb { position: relative; } + .cb { + position: relative; + inset-block-start: 15px; + inset-inline-start: 20px; + } .rtl { direction: rtl; } .ltr { direction: ltr; } .inline { display: inline; }
diff --git a/third_party/blink/web_tests/external/wpt/css/css-position/multicol/static-position/vlr-ltr-rtl-in-multicol.tentative.html b/third_party/blink/web_tests/external/wpt/css/css-position/multicol/static-position/vlr-ltr-rtl-in-multicol.tentative.html index dc9daf48..9cb6c26 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-position/multicol/static-position/vlr-ltr-rtl-in-multicol.tentative.html +++ b/third_party/blink/web_tests/external/wpt/css/css-position/multicol/static-position/vlr-ltr-rtl-in-multicol.tentative.html
@@ -21,7 +21,11 @@ inline-size: 160px; } .red { color: red; } - .cb { position: relative; } + .cb { + position: relative; + inset-block-start: 15px; + inset-inline-start: 20px; + } .rtl { direction: rtl; } .ltr { direction: ltr; } .inline { display: inline; }
diff --git a/third_party/blink/web_tests/external/wpt/css/css-position/multicol/static-position/vlr-rtl-ltr-in-multicol.tentative.html b/third_party/blink/web_tests/external/wpt/css/css-position/multicol/static-position/vlr-rtl-ltr-in-multicol.tentative.html index 8b30512..5a09498 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-position/multicol/static-position/vlr-rtl-ltr-in-multicol.tentative.html +++ b/third_party/blink/web_tests/external/wpt/css/css-position/multicol/static-position/vlr-rtl-ltr-in-multicol.tentative.html
@@ -21,7 +21,11 @@ inline-size: 160px; } .red { color: red; } - .cb { position: relative; } + .cb { + position: relative; + inset-block-start: 15px; + inset-inline-start: 20px; + } .rtl { direction: rtl; } .ltr { direction: ltr; } .inline { display: inline; }
diff --git a/third_party/blink/web_tests/external/wpt/css/css-position/multicol/static-position/vlr-rtl-rtl-in-multicol.html b/third_party/blink/web_tests/external/wpt/css/css-position/multicol/static-position/vlr-rtl-rtl-in-multicol.html index 6e9702f6..e7c4088 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-position/multicol/static-position/vlr-rtl-rtl-in-multicol.html +++ b/third_party/blink/web_tests/external/wpt/css/css-position/multicol/static-position/vlr-rtl-rtl-in-multicol.html
@@ -21,7 +21,11 @@ inline-size: 160px; } .red { color: red; } - .cb { position: relative; } + .cb { + position: relative; + inset-block-start: 15px; + inset-inline-start: 20px; + } .rtl { direction: rtl; } .ltr { direction: ltr; } .inline { display: inline; }
diff --git a/third_party/blink/web_tests/external/wpt/css/css-position/multicol/static-position/vrl-ltr-ltr-in-multicol.html b/third_party/blink/web_tests/external/wpt/css/css-position/multicol/static-position/vrl-ltr-ltr-in-multicol.html index 8ceae51..ae5059ce 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-position/multicol/static-position/vrl-ltr-ltr-in-multicol.html +++ b/third_party/blink/web_tests/external/wpt/css/css-position/multicol/static-position/vrl-ltr-ltr-in-multicol.html
@@ -21,7 +21,11 @@ inline-size: 160px; } .red { color: red; } - .cb { position: relative; } + .cb { + position: relative; + inset-block-start: 15px; + inset-inline-start: 20px; + } .rtl { direction: rtl; } .ltr { direction: ltr; } .inline { display: inline; }
diff --git a/third_party/blink/web_tests/external/wpt/css/css-position/multicol/static-position/vrl-ltr-rtl-in-multicol.tentative.html b/third_party/blink/web_tests/external/wpt/css/css-position/multicol/static-position/vrl-ltr-rtl-in-multicol.tentative.html index 9d2ef3d7..44bf087 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-position/multicol/static-position/vrl-ltr-rtl-in-multicol.tentative.html +++ b/third_party/blink/web_tests/external/wpt/css/css-position/multicol/static-position/vrl-ltr-rtl-in-multicol.tentative.html
@@ -21,7 +21,11 @@ inline-size: 160px; } .red { color: red; } - .cb { position: relative; } + .cb { + position: relative; + inset-block-start: 15px; + inset-inline-start: 20px; + } .rtl { direction: rtl; } .ltr { direction: ltr; } .inline { display: inline; }
diff --git a/third_party/blink/web_tests/external/wpt/css/css-position/multicol/static-position/vrl-rtl-ltr-in-multicol.tentative.html b/third_party/blink/web_tests/external/wpt/css/css-position/multicol/static-position/vrl-rtl-ltr-in-multicol.tentative.html index 871d755..3cf8e67 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-position/multicol/static-position/vrl-rtl-ltr-in-multicol.tentative.html +++ b/third_party/blink/web_tests/external/wpt/css/css-position/multicol/static-position/vrl-rtl-ltr-in-multicol.tentative.html
@@ -21,7 +21,11 @@ inline-size: 160px; } .red { color: red; } - .cb { position: relative; } + .cb { + position: relative; + inset-block-start: 15px; + inset-inline-start: 20px; + } .rtl { direction: rtl; } .ltr { direction: ltr; } .inline { display: inline; }
diff --git a/third_party/blink/web_tests/external/wpt/css/css-position/multicol/static-position/vrl-rtl-rtl-in-multicol.html b/third_party/blink/web_tests/external/wpt/css/css-position/multicol/static-position/vrl-rtl-rtl-in-multicol.html index e239dc5..a13f1cf3 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-position/multicol/static-position/vrl-rtl-rtl-in-multicol.html +++ b/third_party/blink/web_tests/external/wpt/css/css-position/multicol/static-position/vrl-rtl-rtl-in-multicol.html
@@ -21,7 +21,11 @@ inline-size: 160px; } .red { color: red; } - .cb { position: relative; } + .cb { + position: relative; + inset-block-start: 15px; + inset-inline-start: 20px; + } .rtl { direction: rtl; } .ltr { direction: ltr; } .inline { display: inline; } @@ -41,6 +45,7 @@ <div class="container rtl"> X<span class="rtl cb">X<div class="abs inline">XX</div><span class="red">XX</span></span> </div> + <div class="container rtl"> X<span class="rtl cb">X<div class="abs block">XX</div><br><span class="red">XX</span></span> </div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-position/static-position/vlr-ltr-ltr.html b/third_party/blink/web_tests/external/wpt/css/css-position/static-position/vlr-ltr-ltr.html index aa929a7b..992bb72 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-position/static-position/vlr-ltr-ltr.html +++ b/third_party/blink/web_tests/external/wpt/css/css-position/static-position/vlr-ltr-ltr.html
@@ -13,9 +13,14 @@ border: solid black 3px; height: 400px; margin: 0 16px; + padding: 2px; } .red { color: red; } -.cb { position: relative; } +.cb { + position: relative; + inset-block-start: 2px; + inset-inline-start: 2px; +} .rtl { direction: rtl; } .ltr { direction: ltr; } .inline { display: inline; }
diff --git a/third_party/blink/web_tests/external/wpt/css/css-position/static-position/vlr-ltr-rtl.tentative.html b/third_party/blink/web_tests/external/wpt/css/css-position/static-position/vlr-ltr-rtl.tentative.html index c423d18..9491fb8 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-position/static-position/vlr-ltr-rtl.tentative.html +++ b/third_party/blink/web_tests/external/wpt/css/css-position/static-position/vlr-ltr-rtl.tentative.html
@@ -13,9 +13,14 @@ border: solid black 3px; height: 400px; margin: 0 16px; + padding: 2px; } .red { color: red; } -.cb { position: relative; } +.cb { + position: relative; + inset-block-start: 2px; + inset-inline-start: 2px; +} .rtl { direction: rtl; } .ltr { direction: ltr; } .inline { display: inline; }
diff --git a/third_party/blink/web_tests/external/wpt/css/css-position/static-position/vlr-ref.html b/third_party/blink/web_tests/external/wpt/css/css-position/static-position/vlr-ref.html index 2dc2012..2ab92decd 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-position/static-position/vlr-ref.html +++ b/third_party/blink/web_tests/external/wpt/css/css-position/static-position/vlr-ref.html
@@ -7,6 +7,7 @@ border: solid black 3px; height: 400px; margin: 0 16px; + padding: 2px; } .large { width: 32px; }
diff --git a/third_party/blink/web_tests/external/wpt/css/css-position/static-position/vlr-rtl-ltr.tentative.html b/third_party/blink/web_tests/external/wpt/css/css-position/static-position/vlr-rtl-ltr.tentative.html index 1a0ab00..e334ff7 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-position/static-position/vlr-rtl-ltr.tentative.html +++ b/third_party/blink/web_tests/external/wpt/css/css-position/static-position/vlr-rtl-ltr.tentative.html
@@ -13,9 +13,14 @@ border: solid black 3px; height: 400px; margin: 0 16px; + padding: 2px; } .red { color: red; } -.cb { position: relative; } +.cb { + position: relative; + inset-block-start: 2px; + inset-inline-start: 2px; +} .rtl { direction: rtl; } .ltr { direction: ltr; } .inline { display: inline; }
diff --git a/third_party/blink/web_tests/external/wpt/css/css-position/static-position/vlr-rtl-rtl.html b/third_party/blink/web_tests/external/wpt/css/css-position/static-position/vlr-rtl-rtl.html index ead69bb..45c8aa3c 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-position/static-position/vlr-rtl-rtl.html +++ b/third_party/blink/web_tests/external/wpt/css/css-position/static-position/vlr-rtl-rtl.html
@@ -13,9 +13,14 @@ border: solid black 3px; height: 400px; margin: 0 16px; + padding: 2px; } .red { color: red; } -.cb { position: relative; } +.cb { + position: relative; + inset-block-start: 2px; + inset-inline-start: 2px; +} .rtl { direction: rtl; } .ltr { direction: ltr; } .inline { display: inline; }
diff --git a/third_party/blink/web_tests/external/wpt/css/css-position/static-position/vrl-ltr-ltr.html b/third_party/blink/web_tests/external/wpt/css/css-position/static-position/vrl-ltr-ltr.html index e22bf64..9e3c1306 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-position/static-position/vrl-ltr-ltr.html +++ b/third_party/blink/web_tests/external/wpt/css/css-position/static-position/vrl-ltr-ltr.html
@@ -13,9 +13,14 @@ border: solid black 3px; height: 400px; margin: 0 16px; + padding: 2px; } .red { color: red; } -.cb { position: relative; } +.cb { + position: relative; + inset-block-start: 2px; + inset-inline-start: 2px; +} .rtl { direction: rtl; } .ltr { direction: ltr; } .inline { display: inline; }
diff --git a/third_party/blink/web_tests/external/wpt/css/css-position/static-position/vrl-ltr-rtl.tentative.html b/third_party/blink/web_tests/external/wpt/css/css-position/static-position/vrl-ltr-rtl.tentative.html index f38a90b..a0923f3b 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-position/static-position/vrl-ltr-rtl.tentative.html +++ b/third_party/blink/web_tests/external/wpt/css/css-position/static-position/vrl-ltr-rtl.tentative.html
@@ -13,9 +13,14 @@ border: solid black 3px; height: 400px; margin: 0 16px; + padding: 2px; } .red { color: red; } -.cb { position: relative; } +.cb { + position: relative; + inset-block-start: 2px; + inset-inline-start: 2px; +} .rtl { direction: rtl; } .ltr { direction: ltr; } .inline { display: inline; }
diff --git a/third_party/blink/web_tests/external/wpt/css/css-position/static-position/vrl-ref.html b/third_party/blink/web_tests/external/wpt/css/css-position/static-position/vrl-ref.html index 31be2b5..5e607dbb 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-position/static-position/vrl-ref.html +++ b/third_party/blink/web_tests/external/wpt/css/css-position/static-position/vrl-ref.html
@@ -7,6 +7,7 @@ border: solid black 3px; height: 400px; margin: 0 16px; + padding: 2px; } .large { width: 32px; }
diff --git a/third_party/blink/web_tests/external/wpt/css/css-position/static-position/vrl-rtl-ltr.tentative.html b/third_party/blink/web_tests/external/wpt/css/css-position/static-position/vrl-rtl-ltr.tentative.html index bf95d6bd5..29ae6a5f 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-position/static-position/vrl-rtl-ltr.tentative.html +++ b/third_party/blink/web_tests/external/wpt/css/css-position/static-position/vrl-rtl-ltr.tentative.html
@@ -13,9 +13,14 @@ border: solid black 3px; height: 400px; margin: 0 16px; + padding: 2px; } .red { color: red; } -.cb { position: relative; } +.cb { + position: relative; + inset-block-start: 2px; + inset-inline-start: 2px; +} .rtl { direction: rtl; } .ltr { direction: ltr; } .inline { display: inline; }
diff --git a/third_party/blink/web_tests/external/wpt/css/css-position/static-position/vrl-rtl-rtl.html b/third_party/blink/web_tests/external/wpt/css/css-position/static-position/vrl-rtl-rtl.html index c341531..cfb4118 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-position/static-position/vrl-rtl-rtl.html +++ b/third_party/blink/web_tests/external/wpt/css/css-position/static-position/vrl-rtl-rtl.html
@@ -13,9 +13,14 @@ border: solid black 3px; height: 400px; margin: 0 16px; + padding: 2px; } .red { color: red; } -.cb { position: relative; } +.cb { + position: relative; + inset-block-start: 2px; + inset-inline-start: 2px; +} .rtl { direction: rtl; } .ltr { direction: ltr; } .inline { display: inline; }
diff --git a/third_party/blink/web_tests/external/wpt/css/css-tables/percent-height-replaced-in-percent-cell-002.html b/third_party/blink/web_tests/external/wpt/css/css-tables/percent-height-replaced-in-percent-cell-002.html new file mode 100644 index 0000000..78d4b0b --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-tables/percent-height-replaced-in-percent-cell-002.html
@@ -0,0 +1,7 @@ +<!DOCTYPE html> +<link rel="help" href="http://crbug.com/1234300"> +<link rel="match" href="../reference/ref-filled-green-100px-square-only.html"> +<p>Test passes if there is a filled green square.</p> +<div style="display: table-cell; height: 100px; line-height: 0;"> + <canvas width=200 height=200 style="background: green; max-height: 100%;"></canvas> +</div>
diff --git a/third_party/blink/web_tests/external/wpt/inert/inert-retargeting-iframe.tentative.html b/third_party/blink/web_tests/external/wpt/inert/inert-retargeting-iframe.tentative.html index d363adc..579fc57b 100644 --- a/third_party/blink/web_tests/external/wpt/inert/inert-retargeting-iframe.tentative.html +++ b/third_party/blink/web_tests/external/wpt/inert/inert-retargeting-iframe.tentative.html
@@ -136,7 +136,7 @@ function movePointerTo(x, y) { return new test_driver.Actions() - .pointerMove(x, y, { origin: "viewport" }) + .pointerMove(Math.ceil(x), Math.ceil(y), { origin: "viewport" }) .send(); } @@ -155,7 +155,7 @@ step_timeout(() => { element.removeEventListener(event, f, { capture: true }); reject("did not get " + event + " on " + element.id); - }, 1000); + }, 5000); }); promises.push(promise); })(event, element);
diff --git a/third_party/blink/web_tests/inspector-protocol/dom/container-queries/dom-get-querying-descendants-for-container-expected.txt b/third_party/blink/web_tests/inspector-protocol/dom/container-queries/dom-get-querying-descendants-for-container-expected.txt new file mode 100644 index 0000000..6378c8e --- /dev/null +++ b/third_party/blink/web_tests/inspector-protocol/dom/container-queries/dom-get-querying-descendants-for-container-expected.txt
@@ -0,0 +1,6 @@ +Test CSS.getQueryingDescendantsForContainer method for container query containers +Are the returned nodes the expected descendants for #container-unnamed? +false +Are the returned nodes the expected descendants for #container-named? +false +
diff --git a/third_party/blink/web_tests/inspector-protocol/dom/container-queries/dom-get-querying-descendants-for-container.js b/third_party/blink/web_tests/inspector-protocol/dom/container-queries/dom-get-querying-descendants-for-container.js new file mode 100644 index 0000000..092fb0e --- /dev/null +++ b/third_party/blink/web_tests/inspector-protocol/dom/container-queries/dom-get-querying-descendants-for-container.js
@@ -0,0 +1,39 @@ +(async function (testRunner) { + const { dp } = await testRunner.startURL( + '../resources/dom-get-querying-descendants-for-container.html', + 'Test CSS.getQueryingDescendantsForContainer method for container query containers'); + await dp.DOM.enable(); + + const documentResponse = await dp.DOM.getDocument(); + const documentNodeId = documentResponse.result.root.nodeId; + + const testQueryingDescendantsResult = async (containerSelector, descendantsSelector) => { + // Test unnamed container query descendants. + const containerSelectorResponse = await dp.DOM.querySelector({nodeId: documentNodeId, selector: containerSelector}); + const containerNodeId = containerSelectorResponse.result.nodeId; + + const descendantsQuerySelectorResponse = await dp.DOM.querySelectorAll({nodeId: documentNodeId, selector: descendantsSelector}); + const expectedDescendants = new Set(descendantsQuerySelectorResponse.result.nodeIds); + + const getQueryingDescendantsResponse = await dp.DOM.getQueryingDescendantsForContainer({ + nodeId: containerNodeId, + }); + + const queryingDescendants = getQueryingDescendantsResponse.result.nodeIds; + if (!queryingDescendants) { + testRunner.completeTest(); + return; + } + + testRunner.log(`Are the returned nodes the expected descendants for ${containerSelector}?`); + testRunner.log( + queryingDescendants.length === expectedDescendants.size && + queryingDescendants.every(nodeId => expectedDescendants.has(nodeId)) + ); + } + + await testQueryingDescendantsResult('#container-unnamed', '.desc-unnamed'); + await testQueryingDescendantsResult('#container-named', '.desc-named'); + + testRunner.completeTest(); +});
diff --git a/third_party/blink/web_tests/inspector-protocol/dom/resources/dom-get-querying-descendants-for-container.html b/third_party/blink/web_tests/inspector-protocol/dom/resources/dom-get-querying-descendants-for-container.html new file mode 100644 index 0000000..76b3562 --- /dev/null +++ b/third_party/blink/web_tests/inspector-protocol/dom/resources/dom-get-querying-descendants-for-container.html
@@ -0,0 +1,46 @@ +<!DOCTYPE html> +<style> +#container-unnamed { + container-type: inline-size block-size; + width: 100px; + height: 100px; +} + +#container-named { + container-name: container-named; + container-type: inline-size; + width: 100px; + height: 100px; +} + +@container (min-width: 50px) and (min-height: 50px) { + .query-unnamed { margin-top: 5px; } +} + +@container container-named (min-width: 50px) { + .query-named { margin-top: 10px; } +} + +@container (min-width: 50px) { + .query-unnamed-inline { margin-top: 15px; } +} + +@container container-named-other (min-height: 50px) { + .query-named-other { margin-top: 20px; } +} +</style> +<body> +<div id="container-unnamed"> + <div class="query-unnamed desc-unnamed"></div> + <div class="query-unnamed desc-unnamed" id="container-named"> + <div class="query-named-other"> + <div class="query-unnamed"></div> + <div class="query-unnamed-inline desc-named"></div> + </div> + <div class="query-named desc-named"></div> + </div> + <div> + <div class="query-unnamed desc-unnamed"></div> + </div> +</div> +</body>
diff --git a/third_party/blink/web_tests/platform/fuchsia/fast/css/focus-ring-multiline-expected.png b/third_party/blink/web_tests/platform/fuchsia/fast/css/focus-ring-multiline-expected.png index fc2315dc..b7f621b 100644 --- a/third_party/blink/web_tests/platform/fuchsia/fast/css/focus-ring-multiline-expected.png +++ b/third_party/blink/web_tests/platform/fuchsia/fast/css/focus-ring-multiline-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/fuchsia/fast/css3-text/css3-text-decoration/text-decoration-style-expected.png b/third_party/blink/web_tests/platform/fuchsia/fast/css3-text/css3-text-decoration/text-decoration-style-expected.png index e103866b..67b553b 100644 --- a/third_party/blink/web_tests/platform/fuchsia/fast/css3-text/css3-text-decoration/text-decoration-style-expected.png +++ b/third_party/blink/web_tests/platform/fuchsia/fast/css3-text/css3-text-decoration/text-decoration-style-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/fuchsia/fast/css3-text/css3-text-decoration/text-decoration-style-inherit-expected.png b/third_party/blink/web_tests/platform/fuchsia/fast/css3-text/css3-text-decoration/text-decoration-style-inherit-expected.png index 6a99d77..3ec0aa9 100644 --- a/third_party/blink/web_tests/platform/fuchsia/fast/css3-text/css3-text-decoration/text-decoration-style-inherit-expected.png +++ b/third_party/blink/web_tests/platform/fuchsia/fast/css3-text/css3-text-decoration/text-decoration-style-inherit-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/fuchsia/fast/css3-text/css3-text-decoration/text-decoration-style-inherit-links-expected.png b/third_party/blink/web_tests/platform/fuchsia/fast/css3-text/css3-text-decoration/text-decoration-style-inherit-links-expected.png index 72174737..a431968 100644 --- a/third_party/blink/web_tests/platform/fuchsia/fast/css3-text/css3-text-decoration/text-decoration-style-inherit-links-expected.png +++ b/third_party/blink/web_tests/platform/fuchsia/fast/css3-text/css3-text-decoration/text-decoration-style-inherit-links-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/fuchsia/fast/css3-text/css3-text-decoration/text-decoration-style-inherit-not-propagated-by-out-of-flow-expected.png b/third_party/blink/web_tests/platform/fuchsia/fast/css3-text/css3-text-decoration/text-decoration-style-inherit-not-propagated-by-out-of-flow-expected.png index 438f25d..57a16d8a 100644 --- a/third_party/blink/web_tests/platform/fuchsia/fast/css3-text/css3-text-decoration/text-decoration-style-inherit-not-propagated-by-out-of-flow-expected.png +++ b/third_party/blink/web_tests/platform/fuchsia/fast/css3-text/css3-text-decoration/text-decoration-style-inherit-not-propagated-by-out-of-flow-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/fuchsia/fast/css3-text/css3-text-decoration/text-decoration-style-inherit-simple-underlines-expected.png b/third_party/blink/web_tests/platform/fuchsia/fast/css3-text/css3-text-decoration/text-decoration-style-inherit-simple-underlines-expected.png index 7d109259..fc70a3b 100644 --- a/third_party/blink/web_tests/platform/fuchsia/fast/css3-text/css3-text-decoration/text-decoration-style-inherit-simple-underlines-expected.png +++ b/third_party/blink/web_tests/platform/fuchsia/fast/css3-text/css3-text-decoration/text-decoration-style-inherit-simple-underlines-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/fuchsia/fast/replaced/selection-rect-transform-expected.png b/third_party/blink/web_tests/platform/fuchsia/fast/replaced/selection-rect-transform-expected.png index 16a6ab87..8b5c715 100644 --- a/third_party/blink/web_tests/platform/fuchsia/fast/replaced/selection-rect-transform-expected.png +++ b/third_party/blink/web_tests/platform/fuchsia/fast/replaced/selection-rect-transform-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/fuchsia/paint/invalidation/outline/focus-layers-expected.png b/third_party/blink/web_tests/platform/fuchsia/paint/invalidation/outline/focus-layers-expected.png index ca92d13..d809984 100644 --- a/third_party/blink/web_tests/platform/fuchsia/paint/invalidation/outline/focus-layers-expected.png +++ b/third_party/blink/web_tests/platform/fuchsia/paint/invalidation/outline/focus-layers-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/fuchsia/tables/mozilla/bugs/bug2479-3-expected.png b/third_party/blink/web_tests/platform/fuchsia/tables/mozilla/bugs/bug2479-3-expected.png index 53c1a2ed..bf4d50c 100644 --- a/third_party/blink/web_tests/platform/fuchsia/tables/mozilla/bugs/bug2479-3-expected.png +++ b/third_party/blink/web_tests/platform/fuchsia/tables/mozilla/bugs/bug2479-3-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/gpu-rasterization/images/imagemap-overflowing-polygon-focus-ring-expected.png b/third_party/blink/web_tests/platform/linux/virtual/gpu-rasterization/images/imagemap-overflowing-polygon-focus-ring-expected.png index 2159bd6..335aa2f1 100644 --- a/third_party/blink/web_tests/platform/linux/virtual/gpu-rasterization/images/imagemap-overflowing-polygon-focus-ring-expected.png +++ b/third_party/blink/web_tests/platform/linux/virtual/gpu-rasterization/images/imagemap-overflowing-polygon-focus-ring-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/gpu-rasterization/images/imagemap-polygon-focus-ring-expected.png b/third_party/blink/web_tests/platform/linux/virtual/gpu-rasterization/images/imagemap-polygon-focus-ring-expected.png index 70dfb9d8..9bac769 100644 --- a/third_party/blink/web_tests/platform/linux/virtual/gpu-rasterization/images/imagemap-polygon-focus-ring-expected.png +++ b/third_party/blink/web_tests/platform/linux/virtual/gpu-rasterization/images/imagemap-polygon-focus-ring-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac-arm11.0/fast/canvas/canvas-drawImage-video-reset-expected.png b/third_party/blink/web_tests/platform/mac-mac-arm11.0/fast/canvas/canvas-drawImage-video-reset-expected.png new file mode 100644 index 0000000..0232744 --- /dev/null +++ b/third_party/blink/web_tests/platform/mac-mac-arm11.0/fast/canvas/canvas-drawImage-video-reset-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac-arm11.0/fast/canvas/canvas-pattern-video-expected.png b/third_party/blink/web_tests/platform/mac-mac-arm11.0/fast/canvas/canvas-pattern-video-expected.png new file mode 100644 index 0000000..c3d252a --- /dev/null +++ b/third_party/blink/web_tests/platform/mac-mac-arm11.0/fast/canvas/canvas-pattern-video-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac-arm11.0/virtual/backface-visibility-interop/compositing/geometry/video-fixed-scrolling-expected.png b/third_party/blink/web_tests/platform/mac-mac-arm11.0/virtual/backface-visibility-interop/compositing/geometry/video-fixed-scrolling-expected.png new file mode 100644 index 0000000..bfbe29a --- /dev/null +++ b/third_party/blink/web_tests/platform/mac-mac-arm11.0/virtual/backface-visibility-interop/compositing/geometry/video-fixed-scrolling-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac-arm11.0/virtual/backface-visibility-interop/compositing/geometry/video-opacity-overlay-expected.png b/third_party/blink/web_tests/platform/mac-mac-arm11.0/virtual/backface-visibility-interop/compositing/geometry/video-opacity-overlay-expected.png new file mode 100644 index 0000000..8f9f1ff --- /dev/null +++ b/third_party/blink/web_tests/platform/mac-mac-arm11.0/virtual/backface-visibility-interop/compositing/geometry/video-opacity-overlay-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac-arm11.0/virtual/backface-visibility-interop/compositing/overflow/overflow-compositing-descendant-expected.png b/third_party/blink/web_tests/platform/mac-mac-arm11.0/virtual/backface-visibility-interop/compositing/overflow/overflow-compositing-descendant-expected.png new file mode 100644 index 0000000..9ba062e --- /dev/null +++ b/third_party/blink/web_tests/platform/mac-mac-arm11.0/virtual/backface-visibility-interop/compositing/overflow/overflow-compositing-descendant-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac-arm11.0/virtual/backface-visibility-interop/compositing/overflow/scroll-ancestor-update-expected.png b/third_party/blink/web_tests/platform/mac-mac-arm11.0/virtual/backface-visibility-interop/compositing/overflow/scroll-ancestor-update-expected.png new file mode 100644 index 0000000..919283b --- /dev/null +++ b/third_party/blink/web_tests/platform/mac-mac-arm11.0/virtual/backface-visibility-interop/compositing/overflow/scroll-ancestor-update-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac-arm11.0/virtual/gpu-rasterization/images/imagemap-overflowing-polygon-focus-ring-expected.png b/third_party/blink/web_tests/platform/mac-mac-arm11.0/virtual/gpu-rasterization/images/imagemap-overflowing-polygon-focus-ring-expected.png deleted file mode 100644 index c366218..0000000 --- a/third_party/blink/web_tests/platform/mac-mac-arm11.0/virtual/gpu-rasterization/images/imagemap-overflowing-polygon-focus-ring-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac-arm11.0/virtual/gpu-rasterization/images/imagemap-polygon-focus-ring-expected.png b/third_party/blink/web_tests/platform/mac-mac-arm11.0/virtual/gpu-rasterization/images/imagemap-polygon-focus-ring-expected.png deleted file mode 100644 index be3771d..0000000 --- a/third_party/blink/web_tests/platform/mac-mac-arm11.0/virtual/gpu-rasterization/images/imagemap-polygon-focus-ring-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/gpu/fast/canvas/canvas-composite-video-expected.png b/third_party/blink/web_tests/platform/mac-mac-arm11.0/virtual/gpu/fast/canvas/canvas-composite-video-expected.png similarity index 100% rename from third_party/blink/web_tests/platform/mac-mac10.12/virtual/gpu/fast/canvas/canvas-composite-video-expected.png rename to third_party/blink/web_tests/platform/mac-mac-arm11.0/virtual/gpu/fast/canvas/canvas-composite-video-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac-arm11.0/virtual/gpu/fast/canvas/canvas-composite-video-shadow-expected.png b/third_party/blink/web_tests/platform/mac-mac-arm11.0/virtual/gpu/fast/canvas/canvas-composite-video-shadow-expected.png new file mode 100644 index 0000000..81e5ecf --- /dev/null +++ b/third_party/blink/web_tests/platform/mac-mac-arm11.0/virtual/gpu/fast/canvas/canvas-composite-video-shadow-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac-arm11.0/virtual/gpu/fast/canvas/canvas-drawImage-video-reset-expected.png b/third_party/blink/web_tests/platform/mac-mac-arm11.0/virtual/gpu/fast/canvas/canvas-drawImage-video-reset-expected.png new file mode 100644 index 0000000..0232744 --- /dev/null +++ b/third_party/blink/web_tests/platform/mac-mac-arm11.0/virtual/gpu/fast/canvas/canvas-drawImage-video-reset-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac-arm11.0/virtual/gpu/fast/canvas/canvas-pattern-video-expected.png b/third_party/blink/web_tests/platform/mac-mac-arm11.0/virtual/gpu/fast/canvas/canvas-pattern-video-expected.png new file mode 100644 index 0000000..c3d252a --- /dev/null +++ b/third_party/blink/web_tests/platform/mac-mac-arm11.0/virtual/gpu/fast/canvas/canvas-pattern-video-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac-arm11.0/virtual/no-alloc-direct-call/fast/canvas/canvas-composite-video-expected.png b/third_party/blink/web_tests/platform/mac-mac-arm11.0/virtual/no-alloc-direct-call/fast/canvas/canvas-composite-video-expected.png new file mode 100644 index 0000000..2eeea6d --- /dev/null +++ b/third_party/blink/web_tests/platform/mac-mac-arm11.0/virtual/no-alloc-direct-call/fast/canvas/canvas-composite-video-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac-arm11.0/virtual/no-alloc-direct-call/fast/canvas/canvas-composite-video-shadow-expected.png b/third_party/blink/web_tests/platform/mac-mac-arm11.0/virtual/no-alloc-direct-call/fast/canvas/canvas-composite-video-shadow-expected.png new file mode 100644 index 0000000..01067598 --- /dev/null +++ b/third_party/blink/web_tests/platform/mac-mac-arm11.0/virtual/no-alloc-direct-call/fast/canvas/canvas-composite-video-shadow-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac-arm11.0/virtual/no-alloc-direct-call/fast/canvas/canvas-drawImage-video-expected.png b/third_party/blink/web_tests/platform/mac-mac-arm11.0/virtual/no-alloc-direct-call/fast/canvas/canvas-drawImage-video-expected.png new file mode 100644 index 0000000..0232744 --- /dev/null +++ b/third_party/blink/web_tests/platform/mac-mac-arm11.0/virtual/no-alloc-direct-call/fast/canvas/canvas-drawImage-video-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac-arm11.0/virtual/no-alloc-direct-call/fast/canvas/canvas-drawImage-video-reset-expected.png b/third_party/blink/web_tests/platform/mac-mac-arm11.0/virtual/no-alloc-direct-call/fast/canvas/canvas-drawImage-video-reset-expected.png new file mode 100644 index 0000000..0232744 --- /dev/null +++ b/third_party/blink/web_tests/platform/mac-mac-arm11.0/virtual/no-alloc-direct-call/fast/canvas/canvas-drawImage-video-reset-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac-arm11.0/virtual/no-alloc-direct-call/fast/canvas/canvas-pattern-video-expected.png b/third_party/blink/web_tests/platform/mac-mac-arm11.0/virtual/no-alloc-direct-call/fast/canvas/canvas-pattern-video-expected.png new file mode 100644 index 0000000..c3d252a --- /dev/null +++ b/third_party/blink/web_tests/platform/mac-mac-arm11.0/virtual/no-alloc-direct-call/fast/canvas/canvas-pattern-video-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac-arm11.0/virtual/oopr-canvas2d/fast/canvas/canvas-drawImage-video-expected.png b/third_party/blink/web_tests/platform/mac-mac-arm11.0/virtual/oopr-canvas2d/fast/canvas/canvas-drawImage-video-expected.png new file mode 100644 index 0000000..0232744 --- /dev/null +++ b/third_party/blink/web_tests/platform/mac-mac-arm11.0/virtual/oopr-canvas2d/fast/canvas/canvas-drawImage-video-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac-arm11.0/virtual/oopr-canvas2d/fast/canvas/canvas-drawImage-video-reset-expected.png b/third_party/blink/web_tests/platform/mac-mac-arm11.0/virtual/oopr-canvas2d/fast/canvas/canvas-drawImage-video-reset-expected.png new file mode 100644 index 0000000..0232744 --- /dev/null +++ b/third_party/blink/web_tests/platform/mac-mac-arm11.0/virtual/oopr-canvas2d/fast/canvas/canvas-drawImage-video-reset-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac-arm11.0/virtual/oopr-canvas2d/fast/canvas/canvas-pattern-video-expected.png b/third_party/blink/web_tests/platform/mac-mac-arm11.0/virtual/oopr-canvas2d/fast/canvas/canvas-pattern-video-expected.png new file mode 100644 index 0000000..c3d252a --- /dev/null +++ b/third_party/blink/web_tests/platform/mac-mac-arm11.0/virtual/oopr-canvas2d/fast/canvas/canvas-pattern-video-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac-arm11.0/virtual/transform-interop-disabled/compositing/geometry/video-fixed-scrolling-expected.png b/third_party/blink/web_tests/platform/mac-mac-arm11.0/virtual/transform-interop-disabled/compositing/geometry/video-fixed-scrolling-expected.png new file mode 100644 index 0000000..bfbe29a --- /dev/null +++ b/third_party/blink/web_tests/platform/mac-mac-arm11.0/virtual/transform-interop-disabled/compositing/geometry/video-fixed-scrolling-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac-arm11.0/virtual/transform-interop-disabled/compositing/geometry/video-opacity-overlay-expected.png b/third_party/blink/web_tests/platform/mac-mac-arm11.0/virtual/transform-interop-disabled/compositing/geometry/video-opacity-overlay-expected.png new file mode 100644 index 0000000..8f9f1ff --- /dev/null +++ b/third_party/blink/web_tests/platform/mac-mac-arm11.0/virtual/transform-interop-disabled/compositing/geometry/video-opacity-overlay-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac-arm11.0/virtual/transform-interop-disabled/compositing/overflow/overflow-compositing-descendant-expected.png b/third_party/blink/web_tests/platform/mac-mac-arm11.0/virtual/transform-interop-disabled/compositing/overflow/overflow-compositing-descendant-expected.png new file mode 100644 index 0000000..9ba062e --- /dev/null +++ b/third_party/blink/web_tests/platform/mac-mac-arm11.0/virtual/transform-interop-disabled/compositing/overflow/overflow-compositing-descendant-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac-arm11.0/virtual/transform-interop-disabled/compositing/overflow/scroll-ancestor-update-expected.png b/third_party/blink/web_tests/platform/mac-mac-arm11.0/virtual/transform-interop-disabled/compositing/overflow/scroll-ancestor-update-expected.png new file mode 100644 index 0000000..919283b --- /dev/null +++ b/third_party/blink/web_tests/platform/mac-mac-arm11.0/virtual/transform-interop-disabled/compositing/overflow/scroll-ancestor-update-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/fast/forms/color-scheme/media/video-overlay-menu-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/fast/forms/color-scheme/media/video-overlay-menu-expected.png index 1676cee..b1642de 100644 --- a/third_party/blink/web_tests/platform/mac-mac10.12/fast/forms/color-scheme/media/video-overlay-menu-expected.png +++ b/third_party/blink/web_tests/platform/mac-mac10.12/fast/forms/color-scheme/media/video-overlay-menu-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/fast/forms/color-scheme/media/video-overlay-play-button-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/fast/forms/color-scheme/media/video-overlay-play-button-expected.png index 546ed807..c995328 100644 --- a/third_party/blink/web_tests/platform/mac-mac10.12/fast/forms/color-scheme/media/video-overlay-play-button-expected.png +++ b/third_party/blink/web_tests/platform/mac-mac10.12/fast/forms/color-scheme/media/video-overlay-play-button-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/fast/forms/password/password-eye-icon-zoom-0.5x-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/fast/forms/password/password-eye-icon-zoom-0.5x-expected.png deleted file mode 100644 index 219c631d..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.12/fast/forms/password/password-eye-icon-zoom-0.5x-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/media/controls-after-reload-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/media/controls-after-reload-expected.png index fb7dcf9..110d54d 100644 --- a/third_party/blink/web_tests/platform/mac-mac10.12/media/controls-after-reload-expected.png +++ b/third_party/blink/web_tests/platform/mac-mac10.12/media/controls-after-reload-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/media/controls-strict-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/media/controls-strict-expected.png index 08ea65e..8d3d001 100644 --- a/third_party/blink/web_tests/platform/mac-mac10.12/media/controls-strict-expected.png +++ b/third_party/blink/web_tests/platform/mac-mac10.12/media/controls-strict-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/media/controls-styling-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/media/controls-styling-expected.png index f6bd31a..74e2734 100644 --- a/third_party/blink/web_tests/platform/mac-mac10.12/media/controls-styling-expected.png +++ b/third_party/blink/web_tests/platform/mac-mac10.12/media/controls-styling-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/media/controls-styling-strict-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/media/controls-styling-strict-expected.png index 2ffcfd0..fb22df9d 100644 --- a/third_party/blink/web_tests/platform/mac-mac10.12/media/controls-styling-strict-expected.png +++ b/third_party/blink/web_tests/platform/mac-mac10.12/media/controls-styling-strict-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/media/controls-without-preload-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/media/controls-without-preload-expected.png index 4bca1bd..d527675 100644 --- a/third_party/blink/web_tests/platform/mac-mac10.12/media/controls-without-preload-expected.png +++ b/third_party/blink/web_tests/platform/mac-mac10.12/media/controls-without-preload-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/media/track/track-cue-rendering-horizontal-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/media/track/track-cue-rendering-horizontal-expected.png index e4fe615..3a80aad5 100644 --- a/third_party/blink/web_tests/platform/mac-mac10.12/media/track/track-cue-rendering-horizontal-expected.png +++ b/third_party/blink/web_tests/platform/mac-mac10.12/media/track/track-cue-rendering-horizontal-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/media/video-controls-rendering-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/media/video-controls-rendering-expected.png index e5bf622..93e60a8 100644 --- a/third_party/blink/web_tests/platform/mac-mac10.12/media/video-controls-rendering-expected.png +++ b/third_party/blink/web_tests/platform/mac-mac10.12/media/video-controls-rendering-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/media/video-display-toggle-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/media/video-display-toggle-expected.png index cd748fa..d82ecad 100644 --- a/third_party/blink/web_tests/platform/mac-mac10.12/media/video-display-toggle-expected.png +++ b/third_party/blink/web_tests/platform/mac-mac10.12/media/video-display-toggle-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/media/video-zoom-controls-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/media/video-zoom-controls-expected.png index 22b5f9e..f181b5b 100644 --- a/third_party/blink/web_tests/platform/mac-mac10.12/media/video-zoom-controls-expected.png +++ b/third_party/blink/web_tests/platform/mac-mac10.12/media/video-zoom-controls-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh-hc/fast/forms/color-scheme/media/video-overlay-menu-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh-hc/fast/forms/color-scheme/media/video-overlay-menu-expected.png index 64421fff..f4b05e7 100644 --- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh-hc/fast/forms/color-scheme/media/video-overlay-menu-expected.png +++ b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh-hc/fast/forms/color-scheme/media/video-overlay-menu-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh-hc/fast/forms/color-scheme/media/video-overlay-play-button-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh-hc/fast/forms/color-scheme/media/video-overlay-play-button-expected.png index c5a16b4f3..684e6f5 100644 --- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh-hc/fast/forms/color-scheme/media/video-overlay-play-button-expected.png +++ b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh-hc/fast/forms/color-scheme/media/video-overlay-play-button-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/dark-color-scheme/fast/forms/color-scheme/media/video-overlay-menu-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/dark-color-scheme/fast/forms/color-scheme/media/video-overlay-menu-expected.png index 7c1f2de..1090b5b 100644 --- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/dark-color-scheme/fast/forms/color-scheme/media/video-overlay-menu-expected.png +++ b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/dark-color-scheme/fast/forms/color-scheme/media/video-overlay-menu-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/dark-color-scheme/fast/forms/color-scheme/media/video-overlay-play-button-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/dark-color-scheme/fast/forms/color-scheme/media/video-overlay-play-button-expected.png index b3a4a8e..0aa297f2 100644 --- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/dark-color-scheme/fast/forms/color-scheme/media/video-overlay-play-button-expected.png +++ b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/dark-color-scheme/fast/forms/color-scheme/media/video-overlay-play-button-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/dark-color-scheme/media/video-controls-rendering-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/dark-color-scheme/media/video-controls-rendering-expected.png index 74b35534f..276fb57 100644 --- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/dark-color-scheme/media/video-controls-rendering-expected.png +++ b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/dark-color-scheme/media/video-controls-rendering-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/synchronous_html_parser/media/controls-after-reload-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/synchronous_html_parser/media/controls-after-reload-expected.png index fb7dcf9..110d54d 100644 --- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/synchronous_html_parser/media/controls-after-reload-expected.png +++ b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/synchronous_html_parser/media/controls-after-reload-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/synchronous_html_parser/media/controls-strict-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/synchronous_html_parser/media/controls-strict-expected.png index 08ea65e..8d3d001 100644 --- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/synchronous_html_parser/media/controls-strict-expected.png +++ b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/synchronous_html_parser/media/controls-strict-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/synchronous_html_parser/media/controls-styling-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/synchronous_html_parser/media/controls-styling-expected.png index f6bd31a..74e2734 100644 --- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/synchronous_html_parser/media/controls-styling-expected.png +++ b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/synchronous_html_parser/media/controls-styling-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/synchronous_html_parser/media/controls-styling-strict-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/synchronous_html_parser/media/controls-styling-strict-expected.png index 2ffcfd0..fb22df9d 100644 --- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/synchronous_html_parser/media/controls-styling-strict-expected.png +++ b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/synchronous_html_parser/media/controls-styling-strict-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/synchronous_html_parser/media/controls-without-preload-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/synchronous_html_parser/media/controls-without-preload-expected.png index 4bca1bd..d527675 100644 --- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/synchronous_html_parser/media/controls-without-preload-expected.png +++ b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/synchronous_html_parser/media/controls-without-preload-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/synchronous_html_parser/media/track/track-cue-rendering-horizontal-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/synchronous_html_parser/media/track/track-cue-rendering-horizontal-expected.png index e4fe615..3a80aad5 100644 --- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/synchronous_html_parser/media/track/track-cue-rendering-horizontal-expected.png +++ b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/synchronous_html_parser/media/track/track-cue-rendering-horizontal-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/synchronous_html_parser/media/video-controls-rendering-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/synchronous_html_parser/media/video-controls-rendering-expected.png index e5bf622..93e60a8 100644 --- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/synchronous_html_parser/media/video-controls-rendering-expected.png +++ b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/synchronous_html_parser/media/video-controls-rendering-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/synchronous_html_parser/media/video-display-toggle-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/synchronous_html_parser/media/video-display-toggle-expected.png index cd748fa..d82ecad 100644 --- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/synchronous_html_parser/media/video-display-toggle-expected.png +++ b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/synchronous_html_parser/media/video-display-toggle-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/synchronous_html_parser/media/video-zoom-controls-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/synchronous_html_parser/media/video-zoom-controls-expected.png index 22b5f9e..f181b5b 100644 --- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/synchronous_html_parser/media/video-zoom-controls-expected.png +++ b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/synchronous_html_parser/media/video-zoom-controls-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/compositing/geometry/video-fixed-scrolling-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/compositing/geometry/video-fixed-scrolling-expected.png deleted file mode 100644 index 06b5458..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.13/compositing/geometry/video-fixed-scrolling-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/compositing/geometry/video-opacity-overlay-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/compositing/geometry/video-opacity-overlay-expected.png deleted file mode 100644 index 2c5ced9..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.13/compositing/geometry/video-opacity-overlay-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/compositing/layers-inside-overflow-scroll-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/compositing/layers-inside-overflow-scroll-expected.png deleted file mode 100644 index 74918d8..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.13/compositing/layers-inside-overflow-scroll-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/compositing/overflow/overflow-compositing-descendant-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/compositing/overflow/overflow-compositing-descendant-expected.png deleted file mode 100644 index 071f9ba..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.13/compositing/overflow/overflow-compositing-descendant-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/compositing/overflow/scroll-ancestor-update-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/compositing/overflow/scroll-ancestor-update-expected.png deleted file mode 100644 index ce33a85..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.13/compositing/overflow/scroll-ancestor-update-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/compositing/self-painting-layers-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/compositing/self-painting-layers-expected.png deleted file mode 100644 index 5629ccb..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.13/compositing/self-painting-layers-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/compositing/video/video-controls-squashing-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/compositing/video/video-controls-squashing-expected.png deleted file mode 100644 index 0b38a72..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.13/compositing/video/video-controls-squashing-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/compositing/visibility/visibility-simple-video-layer-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/compositing/visibility/visibility-simple-video-layer-expected.png deleted file mode 100644 index 7d2a82d..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.13/compositing/visibility/visibility-simple-video-layer-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/fast/canvas/canvas-composite-video-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/fast/canvas/canvas-composite-video-expected.png deleted file mode 100644 index 6904a0c..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.13/fast/canvas/canvas-composite-video-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/fast/canvas/canvas-composite-video-shadow-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/fast/canvas/canvas-composite-video-shadow-expected.png deleted file mode 100644 index d28437f..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.13/fast/canvas/canvas-composite-video-shadow-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/fast/canvas/canvas-drawImage-video-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/fast/canvas/canvas-drawImage-video-expected.png deleted file mode 100644 index 87ecfee..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.13/fast/canvas/canvas-drawImage-video-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/fast/canvas/canvas-drawImage-video-reset-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/fast/canvas/canvas-drawImage-video-reset-expected.png deleted file mode 100644 index 88cdfd65..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.13/fast/canvas/canvas-drawImage-video-reset-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/color-scheme/media/video-overlay-menu-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/color-scheme/media/video-overlay-menu-expected.png deleted file mode 100644 index c1c4f39e5..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/color-scheme/media/video-overlay-menu-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/color-scheme/media/video-overlay-play-button-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/color-scheme/media/video-overlay-play-button-expected.png deleted file mode 100644 index 27d9a69..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.13/fast/forms/color-scheme/media/video-overlay-play-button-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/media/color-profile-video-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/media/color-profile-video-expected.png deleted file mode 100644 index 94a9be87..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.13/media/color-profile-video-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/media/color-profile-video-seek-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/media/color-profile-video-seek-expected.png deleted file mode 100644 index bbbfc6d..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.13/media/color-profile-video-seek-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/media/color-profile-video-seek-filter-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/media/color-profile-video-seek-filter-expected.png deleted file mode 100644 index 9ebfd14..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.13/media/color-profile-video-seek-filter-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/media/color-profile-video-seek-object-fit-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/media/color-profile-video-seek-object-fit-expected.png deleted file mode 100644 index f0d3fca..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.13/media/color-profile-video-seek-object-fit-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/media/controls-after-reload-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/media/controls-after-reload-expected.png deleted file mode 100644 index a85412f..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.13/media/controls-after-reload-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/media/controls-strict-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/media/controls-strict-expected.png deleted file mode 100644 index 0282f7c..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.13/media/controls-strict-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/media/controls-styling-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/media/controls-styling-expected.png deleted file mode 100644 index 4d576a99..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.13/media/controls-styling-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/media/controls-styling-strict-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/media/controls-styling-strict-expected.png deleted file mode 100644 index 321055a..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.13/media/controls-styling-strict-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/media/controls-without-preload-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/media/controls-without-preload-expected.png deleted file mode 100644 index 353492c..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.13/media/controls-without-preload-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/media/track/track-cue-rendering-horizontal-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/media/track/track-cue-rendering-horizontal-expected.png deleted file mode 100644 index 1a96aa8..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.13/media/track/track-cue-rendering-horizontal-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/media/track/track-cue-rendering-vertical-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/media/track/track-cue-rendering-vertical-expected.png deleted file mode 100644 index 2d321a90..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.13/media/track/track-cue-rendering-vertical-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/media/video-aspect-ratio-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/media/video-aspect-ratio-expected.png deleted file mode 100644 index 9e64707d..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.13/media/video-aspect-ratio-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/media/video-canvas-alpha-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/media/video-canvas-alpha-expected.png deleted file mode 100644 index fd6a9eba..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.13/media/video-canvas-alpha-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/media/video-controls-rendering-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/media/video-controls-rendering-expected.png deleted file mode 100644 index dc7208f..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.13/media/video-controls-rendering-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/media/video-display-toggle-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/media/video-display-toggle-expected.png deleted file mode 100644 index a42e45b..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.13/media/video-display-toggle-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/media/video-remove-insert-repaints-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/media/video-remove-insert-repaints-expected.png deleted file mode 100644 index 4bbeaaf..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.13/media/video-remove-insert-repaints-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/media/video-replaces-poster-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/media/video-replaces-poster-expected.png deleted file mode 100644 index 3405eb4..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.13/media/video-replaces-poster-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/media/video-zoom-controls-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/media/video-zoom-controls-expected.png deleted file mode 100644 index d41fbdd..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.13/media/video-zoom-controls-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/media/video-zoom-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/media/video-zoom-expected.png deleted file mode 100644 index 8ad3c9a..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.13/media/video-zoom-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/backface-visibility-interop/compositing/geometry/video-fixed-scrolling-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/backface-visibility-interop/compositing/geometry/video-fixed-scrolling-expected.png deleted file mode 100644 index 06b5458..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/backface-visibility-interop/compositing/geometry/video-fixed-scrolling-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/backface-visibility-interop/compositing/geometry/video-opacity-overlay-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/backface-visibility-interop/compositing/geometry/video-opacity-overlay-expected.png deleted file mode 100644 index 2c5ced9..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/backface-visibility-interop/compositing/geometry/video-opacity-overlay-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/backface-visibility-interop/compositing/overflow/overflow-compositing-descendant-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/backface-visibility-interop/compositing/overflow/overflow-compositing-descendant-expected.png deleted file mode 100644 index 071f9ba..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/backface-visibility-interop/compositing/overflow/overflow-compositing-descendant-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/backface-visibility-interop/compositing/overflow/scroll-ancestor-update-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/backface-visibility-interop/compositing/overflow/scroll-ancestor-update-expected.png deleted file mode 100644 index ce33a85..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/backface-visibility-interop/compositing/overflow/scroll-ancestor-update-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/controls-refresh-hc/fast/forms/color-scheme/media/video-overlay-menu-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/controls-refresh-hc/fast/forms/color-scheme/media/video-overlay-menu-expected.png deleted file mode 100644 index a91dd17..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/controls-refresh-hc/fast/forms/color-scheme/media/video-overlay-menu-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/controls-refresh-hc/fast/forms/color-scheme/media/video-overlay-play-button-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/controls-refresh-hc/fast/forms/color-scheme/media/video-overlay-play-button-expected.png deleted file mode 100644 index 6b9a591..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/controls-refresh-hc/fast/forms/color-scheme/media/video-overlay-play-button-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/dark-color-scheme/fast/forms/color-scheme/media/video-overlay-menu-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/dark-color-scheme/fast/forms/color-scheme/media/video-overlay-menu-expected.png deleted file mode 100644 index d179d3c..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/dark-color-scheme/fast/forms/color-scheme/media/video-overlay-menu-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/dark-color-scheme/fast/forms/color-scheme/media/video-overlay-play-button-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/dark-color-scheme/fast/forms/color-scheme/media/video-overlay-play-button-expected.png deleted file mode 100644 index 5c806c3..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/dark-color-scheme/fast/forms/color-scheme/media/video-overlay-play-button-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/dark-color-scheme/media/video-controls-rendering-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/dark-color-scheme/media/video-controls-rendering-expected.png deleted file mode 100644 index 82a8ad6..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/dark-color-scheme/media/video-controls-rendering-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/dark-mode-increase-text-contrast/dark-mode/colors/web-theme-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/dark-mode-increase-text-contrast/dark-mode/colors/web-theme-expected.png deleted file mode 100644 index b581251..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/dark-mode-increase-text-contrast/dark-mode/colors/web-theme-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/gpu/fast/canvas/canvas-composite-video-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/gpu/fast/canvas/canvas-composite-video-expected.png deleted file mode 100644 index 452d917..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/gpu/fast/canvas/canvas-composite-video-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/gpu/fast/canvas/canvas-composite-video-shadow-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/gpu/fast/canvas/canvas-composite-video-shadow-expected.png deleted file mode 100644 index b9f9948..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/gpu/fast/canvas/canvas-composite-video-shadow-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/gpu/fast/canvas/canvas-drawImage-video-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/gpu/fast/canvas/canvas-drawImage-video-expected.png deleted file mode 100644 index 87ecfee..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/gpu/fast/canvas/canvas-drawImage-video-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/gpu/fast/canvas/canvas-drawImage-video-reset-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/gpu/fast/canvas/canvas-drawImage-video-reset-expected.png deleted file mode 100644 index 88cdfd65..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/gpu/fast/canvas/canvas-drawImage-video-reset-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/no-alloc-direct-call/fast/canvas/canvas-composite-video-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/no-alloc-direct-call/fast/canvas/canvas-composite-video-expected.png deleted file mode 100644 index 6904a0c..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/no-alloc-direct-call/fast/canvas/canvas-composite-video-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/no-alloc-direct-call/fast/canvas/canvas-composite-video-shadow-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/no-alloc-direct-call/fast/canvas/canvas-composite-video-shadow-expected.png deleted file mode 100644 index d28437f..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/no-alloc-direct-call/fast/canvas/canvas-composite-video-shadow-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/no-alloc-direct-call/fast/canvas/canvas-drawImage-video-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/no-alloc-direct-call/fast/canvas/canvas-drawImage-video-expected.png deleted file mode 100644 index 87ecfee..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/no-alloc-direct-call/fast/canvas/canvas-drawImage-video-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/no-alloc-direct-call/fast/canvas/canvas-drawImage-video-reset-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/no-alloc-direct-call/fast/canvas/canvas-drawImage-video-reset-expected.png deleted file mode 100644 index 88cdfd65..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/no-alloc-direct-call/fast/canvas/canvas-drawImage-video-reset-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/oopr-canvas2d/fast/canvas/canvas-composite-video-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/oopr-canvas2d/fast/canvas/canvas-composite-video-expected.png deleted file mode 100644 index d64f7d18..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/oopr-canvas2d/fast/canvas/canvas-composite-video-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/oopr-canvas2d/fast/canvas/canvas-composite-video-shadow-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/oopr-canvas2d/fast/canvas/canvas-composite-video-shadow-expected.png deleted file mode 100644 index 800294b..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/oopr-canvas2d/fast/canvas/canvas-composite-video-shadow-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/oopr-canvas2d/fast/canvas/canvas-drawImage-video-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/oopr-canvas2d/fast/canvas/canvas-drawImage-video-expected.png deleted file mode 100644 index 87ecfee..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/oopr-canvas2d/fast/canvas/canvas-drawImage-video-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/oopr-canvas2d/fast/canvas/canvas-drawImage-video-reset-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/oopr-canvas2d/fast/canvas/canvas-drawImage-video-reset-expected.png deleted file mode 100644 index 88cdfd65..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/oopr-canvas2d/fast/canvas/canvas-drawImage-video-reset-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/prefer_compositing_to_lcd_text/compositing/overflow/overflow-compositing-descendant-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/prefer_compositing_to_lcd_text/compositing/overflow/overflow-compositing-descendant-expected.png deleted file mode 100644 index 071f9ba..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/prefer_compositing_to_lcd_text/compositing/overflow/overflow-compositing-descendant-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/prefer_compositing_to_lcd_text/compositing/overflow/scroll-ancestor-update-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/prefer_compositing_to_lcd_text/compositing/overflow/scroll-ancestor-update-expected.png deleted file mode 100644 index ce33a85..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/prefer_compositing_to_lcd_text/compositing/overflow/scroll-ancestor-update-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/synchronous_html_parser/media/color-profile-video-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/synchronous_html_parser/media/color-profile-video-expected.png deleted file mode 100644 index 94a9be87..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/synchronous_html_parser/media/color-profile-video-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/synchronous_html_parser/media/color-profile-video-seek-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/synchronous_html_parser/media/color-profile-video-seek-expected.png deleted file mode 100644 index bbbfc6d..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/synchronous_html_parser/media/color-profile-video-seek-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/synchronous_html_parser/media/color-profile-video-seek-filter-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/synchronous_html_parser/media/color-profile-video-seek-filter-expected.png deleted file mode 100644 index 9ebfd14..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/synchronous_html_parser/media/color-profile-video-seek-filter-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/synchronous_html_parser/media/color-profile-video-seek-object-fit-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/synchronous_html_parser/media/color-profile-video-seek-object-fit-expected.png deleted file mode 100644 index f0d3fca..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/synchronous_html_parser/media/color-profile-video-seek-object-fit-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/synchronous_html_parser/media/controls-after-reload-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/synchronous_html_parser/media/controls-after-reload-expected.png deleted file mode 100644 index a85412f..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/synchronous_html_parser/media/controls-after-reload-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/synchronous_html_parser/media/controls-strict-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/synchronous_html_parser/media/controls-strict-expected.png deleted file mode 100644 index 0282f7c..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/synchronous_html_parser/media/controls-strict-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/synchronous_html_parser/media/controls-styling-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/synchronous_html_parser/media/controls-styling-expected.png deleted file mode 100644 index 4d576a99..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/synchronous_html_parser/media/controls-styling-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/synchronous_html_parser/media/controls-styling-strict-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/synchronous_html_parser/media/controls-styling-strict-expected.png deleted file mode 100644 index 321055a..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/synchronous_html_parser/media/controls-styling-strict-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/synchronous_html_parser/media/controls-without-preload-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/synchronous_html_parser/media/controls-without-preload-expected.png deleted file mode 100644 index 353492c..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/synchronous_html_parser/media/controls-without-preload-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/synchronous_html_parser/media/track/track-cue-rendering-horizontal-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/synchronous_html_parser/media/track/track-cue-rendering-horizontal-expected.png deleted file mode 100644 index 1a96aa8..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/synchronous_html_parser/media/track/track-cue-rendering-horizontal-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/synchronous_html_parser/media/track/track-cue-rendering-vertical-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/synchronous_html_parser/media/track/track-cue-rendering-vertical-expected.png deleted file mode 100644 index 2d321a90..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/synchronous_html_parser/media/track/track-cue-rendering-vertical-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/synchronous_html_parser/media/video-aspect-ratio-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/synchronous_html_parser/media/video-aspect-ratio-expected.png deleted file mode 100644 index 9e64707d..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/synchronous_html_parser/media/video-aspect-ratio-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/synchronous_html_parser/media/video-canvas-alpha-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/synchronous_html_parser/media/video-canvas-alpha-expected.png deleted file mode 100644 index fd6a9eba..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/synchronous_html_parser/media/video-canvas-alpha-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/synchronous_html_parser/media/video-controls-rendering-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/synchronous_html_parser/media/video-controls-rendering-expected.png deleted file mode 100644 index dc7208f..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/synchronous_html_parser/media/video-controls-rendering-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/synchronous_html_parser/media/video-display-toggle-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/synchronous_html_parser/media/video-display-toggle-expected.png deleted file mode 100644 index a42e45b..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/synchronous_html_parser/media/video-display-toggle-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/synchronous_html_parser/media/video-remove-insert-repaints-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/synchronous_html_parser/media/video-remove-insert-repaints-expected.png deleted file mode 100644 index 4bbeaaf..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/synchronous_html_parser/media/video-remove-insert-repaints-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/synchronous_html_parser/media/video-replaces-poster-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/synchronous_html_parser/media/video-replaces-poster-expected.png deleted file mode 100644 index 3405eb4..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/synchronous_html_parser/media/video-replaces-poster-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/synchronous_html_parser/media/video-zoom-controls-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/synchronous_html_parser/media/video-zoom-controls-expected.png deleted file mode 100644 index d41fbdd..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/synchronous_html_parser/media/video-zoom-controls-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/synchronous_html_parser/media/video-zoom-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/synchronous_html_parser/media/video-zoom-expected.png deleted file mode 100644 index 8ad3c9a..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/synchronous_html_parser/media/video-zoom-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/threaded/compositing/visibility/visibility-simple-video-layer-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/threaded/compositing/visibility/visibility-simple-video-layer-expected.png deleted file mode 100644 index 7d2a82d..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/threaded/compositing/visibility/visibility-simple-video-layer-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/transform-interop-disabled/compositing/geometry/video-fixed-scrolling-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/transform-interop-disabled/compositing/geometry/video-fixed-scrolling-expected.png deleted file mode 100644 index 06b5458..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/transform-interop-disabled/compositing/geometry/video-fixed-scrolling-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/transform-interop-disabled/compositing/geometry/video-opacity-overlay-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/transform-interop-disabled/compositing/geometry/video-opacity-overlay-expected.png deleted file mode 100644 index 2c5ced9..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/transform-interop-disabled/compositing/geometry/video-opacity-overlay-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/transform-interop-disabled/compositing/overflow/overflow-compositing-descendant-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/transform-interop-disabled/compositing/overflow/overflow-compositing-descendant-expected.png deleted file mode 100644 index 071f9ba..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/transform-interop-disabled/compositing/overflow/overflow-compositing-descendant-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/transform-interop-disabled/compositing/overflow/scroll-ancestor-update-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/transform-interop-disabled/compositing/overflow/scroll-ancestor-update-expected.png deleted file mode 100644 index ce33a85..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/transform-interop-disabled/compositing/overflow/scroll-ancestor-update-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/compositing/geometry/video-fixed-scrolling-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/compositing/geometry/video-fixed-scrolling-expected.png deleted file mode 100644 index 06b5458..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.14/compositing/geometry/video-fixed-scrolling-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/compositing/geometry/video-opacity-overlay-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/compositing/geometry/video-opacity-overlay-expected.png deleted file mode 100644 index 2c5ced9..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.14/compositing/geometry/video-opacity-overlay-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/compositing/layers-inside-overflow-scroll-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/compositing/layers-inside-overflow-scroll-expected.png deleted file mode 100644 index 74918d8..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.14/compositing/layers-inside-overflow-scroll-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/compositing/overflow/overflow-compositing-descendant-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/compositing/overflow/overflow-compositing-descendant-expected.png deleted file mode 100644 index 071f9ba..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.14/compositing/overflow/overflow-compositing-descendant-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/compositing/overflow/scroll-ancestor-update-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/compositing/overflow/scroll-ancestor-update-expected.png deleted file mode 100644 index ce33a85..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.14/compositing/overflow/scroll-ancestor-update-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/compositing/self-painting-layers-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/compositing/self-painting-layers-expected.png deleted file mode 100644 index 5629ccb..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.14/compositing/self-painting-layers-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/compositing/video/video-controls-squashing-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/compositing/video/video-controls-squashing-expected.png deleted file mode 100644 index 0b38a72..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.14/compositing/video/video-controls-squashing-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/compositing/visibility/visibility-simple-video-layer-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/compositing/visibility/visibility-simple-video-layer-expected.png deleted file mode 100644 index 7d2a82d..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.14/compositing/visibility/visibility-simple-video-layer-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/fast/canvas/canvas-composite-video-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/fast/canvas/canvas-composite-video-expected.png deleted file mode 100644 index 6904a0c..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.14/fast/canvas/canvas-composite-video-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/fast/canvas/canvas-composite-video-shadow-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/fast/canvas/canvas-composite-video-shadow-expected.png deleted file mode 100644 index d28437f..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.14/fast/canvas/canvas-composite-video-shadow-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/fast/canvas/canvas-drawImage-video-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/fast/canvas/canvas-drawImage-video-expected.png deleted file mode 100644 index 87ecfee..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.14/fast/canvas/canvas-drawImage-video-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/fast/canvas/canvas-drawImage-video-reset-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/fast/canvas/canvas-drawImage-video-reset-expected.png deleted file mode 100644 index 88cdfd65..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.14/fast/canvas/canvas-drawImage-video-reset-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/media/color-profile-video-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/media/color-profile-video-expected.png deleted file mode 100644 index 94a9be87..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.14/media/color-profile-video-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/media/color-profile-video-seek-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/media/color-profile-video-seek-expected.png deleted file mode 100644 index bbbfc6d..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.14/media/color-profile-video-seek-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/media/color-profile-video-seek-filter-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/media/color-profile-video-seek-filter-expected.png deleted file mode 100644 index 9ebfd14..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.14/media/color-profile-video-seek-filter-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/media/color-profile-video-seek-object-fit-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/media/color-profile-video-seek-object-fit-expected.png deleted file mode 100644 index f0d3fca..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.14/media/color-profile-video-seek-object-fit-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/media/video-aspect-ratio-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/media/video-aspect-ratio-expected.png deleted file mode 100644 index 9e64707d..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.14/media/video-aspect-ratio-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/media/video-canvas-alpha-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/media/video-canvas-alpha-expected.png deleted file mode 100644 index fd6a9eba..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.14/media/video-canvas-alpha-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/media/video-remove-insert-repaints-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/media/video-remove-insert-repaints-expected.png deleted file mode 100644 index 4bbeaaf..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.14/media/video-remove-insert-repaints-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/media/video-replaces-poster-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/media/video-replaces-poster-expected.png deleted file mode 100644 index 3405eb4..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.14/media/video-replaces-poster-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/media/video-zoom-controls-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/media/video-zoom-controls-expected.png deleted file mode 100644 index d41fbdd..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.14/media/video-zoom-controls-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/media/video-zoom-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/media/video-zoom-expected.png deleted file mode 100644 index 8ad3c9a..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.14/media/video-zoom-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/backface-visibility-interop/compositing/geometry/video-fixed-scrolling-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/virtual/backface-visibility-interop/compositing/geometry/video-fixed-scrolling-expected.png deleted file mode 100644 index 06b5458..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/backface-visibility-interop/compositing/geometry/video-fixed-scrolling-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/backface-visibility-interop/compositing/geometry/video-opacity-overlay-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/virtual/backface-visibility-interop/compositing/geometry/video-opacity-overlay-expected.png deleted file mode 100644 index 2c5ced9..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/backface-visibility-interop/compositing/geometry/video-opacity-overlay-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/backface-visibility-interop/compositing/overflow/overflow-compositing-descendant-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/virtual/backface-visibility-interop/compositing/overflow/overflow-compositing-descendant-expected.png deleted file mode 100644 index 071f9ba..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/backface-visibility-interop/compositing/overflow/overflow-compositing-descendant-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/backface-visibility-interop/compositing/overflow/scroll-ancestor-update-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/virtual/backface-visibility-interop/compositing/overflow/scroll-ancestor-update-expected.png deleted file mode 100644 index ce33a85..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/backface-visibility-interop/compositing/overflow/scroll-ancestor-update-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/dark-mode-increase-text-contrast/dark-mode/colors/web-theme-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/virtual/dark-mode-increase-text-contrast/dark-mode/colors/web-theme-expected.png deleted file mode 100644 index b581251..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/dark-mode-increase-text-contrast/dark-mode/colors/web-theme-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/gpu/fast/canvas/canvas-composite-video-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/virtual/gpu/fast/canvas/canvas-composite-video-expected.png deleted file mode 100644 index 452d917..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/gpu/fast/canvas/canvas-composite-video-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/gpu/fast/canvas/canvas-composite-video-shadow-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/virtual/gpu/fast/canvas/canvas-composite-video-shadow-expected.png deleted file mode 100644 index b9f9948..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/gpu/fast/canvas/canvas-composite-video-shadow-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/gpu/fast/canvas/canvas-drawImage-video-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/virtual/gpu/fast/canvas/canvas-drawImage-video-expected.png deleted file mode 100644 index 87ecfee..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/gpu/fast/canvas/canvas-drawImage-video-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/gpu/fast/canvas/canvas-drawImage-video-reset-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/virtual/gpu/fast/canvas/canvas-drawImage-video-reset-expected.png deleted file mode 100644 index 88cdfd65..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/gpu/fast/canvas/canvas-drawImage-video-reset-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/no-alloc-direct-call/fast/canvas/canvas-composite-video-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/virtual/no-alloc-direct-call/fast/canvas/canvas-composite-video-expected.png deleted file mode 100644 index 6904a0c..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/no-alloc-direct-call/fast/canvas/canvas-composite-video-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/no-alloc-direct-call/fast/canvas/canvas-composite-video-shadow-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/virtual/no-alloc-direct-call/fast/canvas/canvas-composite-video-shadow-expected.png deleted file mode 100644 index d28437f..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/no-alloc-direct-call/fast/canvas/canvas-composite-video-shadow-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/no-alloc-direct-call/fast/canvas/canvas-drawImage-video-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/virtual/no-alloc-direct-call/fast/canvas/canvas-drawImage-video-expected.png deleted file mode 100644 index 87ecfee..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/no-alloc-direct-call/fast/canvas/canvas-drawImage-video-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/no-alloc-direct-call/fast/canvas/canvas-drawImage-video-reset-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/virtual/no-alloc-direct-call/fast/canvas/canvas-drawImage-video-reset-expected.png deleted file mode 100644 index 88cdfd65..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/no-alloc-direct-call/fast/canvas/canvas-drawImage-video-reset-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/oopr-canvas2d/fast/canvas/canvas-composite-video-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/virtual/oopr-canvas2d/fast/canvas/canvas-composite-video-expected.png deleted file mode 100644 index d64f7d18..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/oopr-canvas2d/fast/canvas/canvas-composite-video-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/oopr-canvas2d/fast/canvas/canvas-composite-video-shadow-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/virtual/oopr-canvas2d/fast/canvas/canvas-composite-video-shadow-expected.png deleted file mode 100644 index 800294b..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/oopr-canvas2d/fast/canvas/canvas-composite-video-shadow-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/oopr-canvas2d/fast/canvas/canvas-drawImage-video-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/virtual/oopr-canvas2d/fast/canvas/canvas-drawImage-video-expected.png deleted file mode 100644 index 87ecfee..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/oopr-canvas2d/fast/canvas/canvas-drawImage-video-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/oopr-canvas2d/fast/canvas/canvas-drawImage-video-reset-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/virtual/oopr-canvas2d/fast/canvas/canvas-drawImage-video-reset-expected.png deleted file mode 100644 index 88cdfd65..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/oopr-canvas2d/fast/canvas/canvas-drawImage-video-reset-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/prefer_compositing_to_lcd_text/compositing/overflow/overflow-compositing-descendant-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/virtual/prefer_compositing_to_lcd_text/compositing/overflow/overflow-compositing-descendant-expected.png deleted file mode 100644 index 071f9ba..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/prefer_compositing_to_lcd_text/compositing/overflow/overflow-compositing-descendant-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/prefer_compositing_to_lcd_text/compositing/overflow/scroll-ancestor-update-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/virtual/prefer_compositing_to_lcd_text/compositing/overflow/scroll-ancestor-update-expected.png deleted file mode 100644 index ce33a85..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/prefer_compositing_to_lcd_text/compositing/overflow/scroll-ancestor-update-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/synchronous_html_parser/media/color-profile-video-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/virtual/synchronous_html_parser/media/color-profile-video-expected.png deleted file mode 100644 index 94a9be87..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/synchronous_html_parser/media/color-profile-video-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/synchronous_html_parser/media/color-profile-video-seek-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/virtual/synchronous_html_parser/media/color-profile-video-seek-expected.png deleted file mode 100644 index bbbfc6d..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/synchronous_html_parser/media/color-profile-video-seek-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/synchronous_html_parser/media/color-profile-video-seek-filter-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/virtual/synchronous_html_parser/media/color-profile-video-seek-filter-expected.png deleted file mode 100644 index 9ebfd14..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/synchronous_html_parser/media/color-profile-video-seek-filter-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/synchronous_html_parser/media/color-profile-video-seek-object-fit-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/virtual/synchronous_html_parser/media/color-profile-video-seek-object-fit-expected.png deleted file mode 100644 index f0d3fca..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/synchronous_html_parser/media/color-profile-video-seek-object-fit-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/synchronous_html_parser/media/video-aspect-ratio-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/virtual/synchronous_html_parser/media/video-aspect-ratio-expected.png deleted file mode 100644 index 9e64707d..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/synchronous_html_parser/media/video-aspect-ratio-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/synchronous_html_parser/media/video-canvas-alpha-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/virtual/synchronous_html_parser/media/video-canvas-alpha-expected.png deleted file mode 100644 index fd6a9eba..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/synchronous_html_parser/media/video-canvas-alpha-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/synchronous_html_parser/media/video-remove-insert-repaints-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/virtual/synchronous_html_parser/media/video-remove-insert-repaints-expected.png deleted file mode 100644 index 4bbeaaf..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/synchronous_html_parser/media/video-remove-insert-repaints-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/synchronous_html_parser/media/video-replaces-poster-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/virtual/synchronous_html_parser/media/video-replaces-poster-expected.png deleted file mode 100644 index 3405eb4..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/synchronous_html_parser/media/video-replaces-poster-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/synchronous_html_parser/media/video-zoom-controls-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/virtual/synchronous_html_parser/media/video-zoom-controls-expected.png deleted file mode 100644 index d41fbdd..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/synchronous_html_parser/media/video-zoom-controls-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/synchronous_html_parser/media/video-zoom-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/virtual/synchronous_html_parser/media/video-zoom-expected.png deleted file mode 100644 index 8ad3c9a..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/synchronous_html_parser/media/video-zoom-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/threaded/compositing/visibility/visibility-simple-video-layer-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/virtual/threaded/compositing/visibility/visibility-simple-video-layer-expected.png deleted file mode 100644 index 7d2a82d..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/threaded/compositing/visibility/visibility-simple-video-layer-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/transform-interop-disabled/compositing/geometry/video-fixed-scrolling-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/virtual/transform-interop-disabled/compositing/geometry/video-fixed-scrolling-expected.png deleted file mode 100644 index 06b5458..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/transform-interop-disabled/compositing/geometry/video-fixed-scrolling-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/transform-interop-disabled/compositing/geometry/video-opacity-overlay-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/virtual/transform-interop-disabled/compositing/geometry/video-opacity-overlay-expected.png deleted file mode 100644 index 2c5ced9..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/transform-interop-disabled/compositing/geometry/video-opacity-overlay-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/transform-interop-disabled/compositing/overflow/overflow-compositing-descendant-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/virtual/transform-interop-disabled/compositing/overflow/overflow-compositing-descendant-expected.png deleted file mode 100644 index 071f9ba..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/transform-interop-disabled/compositing/overflow/overflow-compositing-descendant-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/transform-interop-disabled/compositing/overflow/scroll-ancestor-update-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/virtual/transform-interop-disabled/compositing/overflow/scroll-ancestor-update-expected.png deleted file mode 100644 index ce33a85..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/transform-interop-disabled/compositing/overflow/scroll-ancestor-update-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.15/compositing/geometry/video-fixed-scrolling-expected.png b/third_party/blink/web_tests/platform/mac-mac10.15/compositing/geometry/video-fixed-scrolling-expected.png deleted file mode 100644 index 06b5458..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.15/compositing/geometry/video-fixed-scrolling-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.15/compositing/geometry/video-opacity-overlay-expected.png b/third_party/blink/web_tests/platform/mac-mac10.15/compositing/geometry/video-opacity-overlay-expected.png deleted file mode 100644 index 2c5ced9..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.15/compositing/geometry/video-opacity-overlay-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.15/compositing/layers-inside-overflow-scroll-expected.png b/third_party/blink/web_tests/platform/mac-mac10.15/compositing/layers-inside-overflow-scroll-expected.png deleted file mode 100644 index 74918d8..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.15/compositing/layers-inside-overflow-scroll-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.15/compositing/overflow/overflow-compositing-descendant-expected.png b/third_party/blink/web_tests/platform/mac-mac10.15/compositing/overflow/overflow-compositing-descendant-expected.png deleted file mode 100644 index 071f9ba..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.15/compositing/overflow/overflow-compositing-descendant-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.15/compositing/overflow/scroll-ancestor-update-expected.png b/third_party/blink/web_tests/platform/mac-mac10.15/compositing/overflow/scroll-ancestor-update-expected.png deleted file mode 100644 index ce33a85..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.15/compositing/overflow/scroll-ancestor-update-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.15/compositing/self-painting-layers-expected.png b/third_party/blink/web_tests/platform/mac-mac10.15/compositing/self-painting-layers-expected.png deleted file mode 100644 index 5629ccb..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.15/compositing/self-painting-layers-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.15/compositing/video/video-controls-squashing-expected.png b/third_party/blink/web_tests/platform/mac-mac10.15/compositing/video/video-controls-squashing-expected.png deleted file mode 100644 index 0b38a72..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.15/compositing/video/video-controls-squashing-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.15/compositing/visibility/visibility-simple-video-layer-expected.png b/third_party/blink/web_tests/platform/mac-mac10.15/compositing/visibility/visibility-simple-video-layer-expected.png deleted file mode 100644 index 7d2a82d..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.15/compositing/visibility/visibility-simple-video-layer-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.15/fast/canvas/canvas-composite-video-expected.png b/third_party/blink/web_tests/platform/mac-mac10.15/fast/canvas/canvas-composite-video-expected.png deleted file mode 100644 index 6904a0c..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.15/fast/canvas/canvas-composite-video-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.15/fast/canvas/canvas-composite-video-shadow-expected.png b/third_party/blink/web_tests/platform/mac-mac10.15/fast/canvas/canvas-composite-video-shadow-expected.png deleted file mode 100644 index d28437f..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.15/fast/canvas/canvas-composite-video-shadow-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.15/fast/canvas/canvas-drawImage-video-expected.png b/third_party/blink/web_tests/platform/mac-mac10.15/fast/canvas/canvas-drawImage-video-expected.png deleted file mode 100644 index 87ecfee..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.15/fast/canvas/canvas-drawImage-video-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.15/fast/canvas/canvas-drawImage-video-reset-expected.png b/third_party/blink/web_tests/platform/mac-mac10.15/fast/canvas/canvas-drawImage-video-reset-expected.png deleted file mode 100644 index 88cdfd65..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.15/fast/canvas/canvas-drawImage-video-reset-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.15/fast/forms/color-scheme/media/video-overlay-menu-expected.png b/third_party/blink/web_tests/platform/mac-mac10.15/fast/forms/color-scheme/media/video-overlay-menu-expected.png deleted file mode 100644 index 7a28f67f..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.15/fast/forms/color-scheme/media/video-overlay-menu-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.15/fast/forms/color-scheme/media/video-overlay-play-button-expected.png b/third_party/blink/web_tests/platform/mac-mac10.15/fast/forms/color-scheme/media/video-overlay-play-button-expected.png deleted file mode 100644 index 3052bcd..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.15/fast/forms/color-scheme/media/video-overlay-play-button-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.15/media/color-profile-video-expected.png b/third_party/blink/web_tests/platform/mac-mac10.15/media/color-profile-video-expected.png deleted file mode 100644 index 94a9be87..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.15/media/color-profile-video-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.15/media/color-profile-video-seek-expected.png b/third_party/blink/web_tests/platform/mac-mac10.15/media/color-profile-video-seek-expected.png deleted file mode 100644 index bbbfc6d..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.15/media/color-profile-video-seek-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.15/media/color-profile-video-seek-filter-expected.png b/third_party/blink/web_tests/platform/mac-mac10.15/media/color-profile-video-seek-filter-expected.png deleted file mode 100644 index 9ebfd14..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.15/media/color-profile-video-seek-filter-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.15/media/color-profile-video-seek-object-fit-expected.png b/third_party/blink/web_tests/platform/mac-mac10.15/media/color-profile-video-seek-object-fit-expected.png deleted file mode 100644 index f0d3fca..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.15/media/color-profile-video-seek-object-fit-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.15/media/controls-after-reload-expected.png b/third_party/blink/web_tests/platform/mac-mac10.15/media/controls-after-reload-expected.png deleted file mode 100644 index 88fed9a9..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.15/media/controls-after-reload-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.15/media/controls-strict-expected.png b/third_party/blink/web_tests/platform/mac-mac10.15/media/controls-strict-expected.png deleted file mode 100644 index fc4d3c9..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.15/media/controls-strict-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.15/media/controls-styling-expected.png b/third_party/blink/web_tests/platform/mac-mac10.15/media/controls-styling-expected.png deleted file mode 100644 index 9cca21c..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.15/media/controls-styling-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.15/media/controls-styling-strict-expected.png b/third_party/blink/web_tests/platform/mac-mac10.15/media/controls-styling-strict-expected.png deleted file mode 100644 index aaf3dbf2..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.15/media/controls-styling-strict-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.15/media/controls-without-preload-expected.png b/third_party/blink/web_tests/platform/mac-mac10.15/media/controls-without-preload-expected.png deleted file mode 100644 index 171b2f8..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.15/media/controls-without-preload-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.15/media/track/track-cue-rendering-horizontal-expected.png b/third_party/blink/web_tests/platform/mac-mac10.15/media/track/track-cue-rendering-horizontal-expected.png deleted file mode 100644 index c0199be..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.15/media/track/track-cue-rendering-horizontal-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.15/media/track/track-cue-rendering-vertical-expected.png b/third_party/blink/web_tests/platform/mac-mac10.15/media/track/track-cue-rendering-vertical-expected.png deleted file mode 100644 index 3b61e30..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.15/media/track/track-cue-rendering-vertical-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.15/media/video-aspect-ratio-expected.png b/third_party/blink/web_tests/platform/mac-mac10.15/media/video-aspect-ratio-expected.png deleted file mode 100644 index 9e64707d..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.15/media/video-aspect-ratio-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.15/media/video-canvas-alpha-expected.png b/third_party/blink/web_tests/platform/mac-mac10.15/media/video-canvas-alpha-expected.png deleted file mode 100644 index fd6a9eba..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.15/media/video-canvas-alpha-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.15/media/video-controls-rendering-expected.png b/third_party/blink/web_tests/platform/mac-mac10.15/media/video-controls-rendering-expected.png deleted file mode 100644 index 07f01276..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.15/media/video-controls-rendering-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.15/media/video-display-toggle-expected.png b/third_party/blink/web_tests/platform/mac-mac10.15/media/video-display-toggle-expected.png deleted file mode 100644 index bffbb6e..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.15/media/video-display-toggle-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.15/media/video-remove-insert-repaints-expected.png b/third_party/blink/web_tests/platform/mac-mac10.15/media/video-remove-insert-repaints-expected.png deleted file mode 100644 index 4bbeaaf..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.15/media/video-remove-insert-repaints-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.15/media/video-replaces-poster-expected.png b/third_party/blink/web_tests/platform/mac-mac10.15/media/video-replaces-poster-expected.png deleted file mode 100644 index 3405eb4..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.15/media/video-replaces-poster-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.15/media/video-zoom-controls-expected.png b/third_party/blink/web_tests/platform/mac-mac10.15/media/video-zoom-controls-expected.png deleted file mode 100644 index d41fbdd..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.15/media/video-zoom-controls-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.15/media/video-zoom-expected.png b/third_party/blink/web_tests/platform/mac-mac10.15/media/video-zoom-expected.png deleted file mode 100644 index 8ad3c9a..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.15/media/video-zoom-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/backface-visibility-interop/compositing/geometry/video-fixed-scrolling-expected.png b/third_party/blink/web_tests/platform/mac-mac10.15/virtual/backface-visibility-interop/compositing/geometry/video-fixed-scrolling-expected.png deleted file mode 100644 index 06b5458..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/backface-visibility-interop/compositing/geometry/video-fixed-scrolling-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/backface-visibility-interop/compositing/geometry/video-opacity-overlay-expected.png b/third_party/blink/web_tests/platform/mac-mac10.15/virtual/backface-visibility-interop/compositing/geometry/video-opacity-overlay-expected.png deleted file mode 100644 index 2c5ced9..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/backface-visibility-interop/compositing/geometry/video-opacity-overlay-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/backface-visibility-interop/compositing/overflow/overflow-compositing-descendant-expected.png b/third_party/blink/web_tests/platform/mac-mac10.15/virtual/backface-visibility-interop/compositing/overflow/overflow-compositing-descendant-expected.png deleted file mode 100644 index 071f9ba..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/backface-visibility-interop/compositing/overflow/overflow-compositing-descendant-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/backface-visibility-interop/compositing/overflow/scroll-ancestor-update-expected.png b/third_party/blink/web_tests/platform/mac-mac10.15/virtual/backface-visibility-interop/compositing/overflow/scroll-ancestor-update-expected.png deleted file mode 100644 index ce33a85..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/backface-visibility-interop/compositing/overflow/scroll-ancestor-update-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/controls-refresh-hc/fast/forms/color-scheme/media/video-overlay-menu-expected.png b/third_party/blink/web_tests/platform/mac-mac10.15/virtual/controls-refresh-hc/fast/forms/color-scheme/media/video-overlay-menu-expected.png deleted file mode 100644 index 8477d83..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/controls-refresh-hc/fast/forms/color-scheme/media/video-overlay-menu-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/controls-refresh-hc/fast/forms/color-scheme/media/video-overlay-play-button-expected.png b/third_party/blink/web_tests/platform/mac-mac10.15/virtual/controls-refresh-hc/fast/forms/color-scheme/media/video-overlay-play-button-expected.png deleted file mode 100644 index c8a32c9..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/controls-refresh-hc/fast/forms/color-scheme/media/video-overlay-play-button-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/dark-color-scheme/fast/forms/color-scheme/media/video-overlay-menu-expected.png b/third_party/blink/web_tests/platform/mac-mac10.15/virtual/dark-color-scheme/fast/forms/color-scheme/media/video-overlay-menu-expected.png deleted file mode 100644 index 0f2f03a..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/dark-color-scheme/fast/forms/color-scheme/media/video-overlay-menu-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/dark-color-scheme/fast/forms/color-scheme/media/video-overlay-play-button-expected.png b/third_party/blink/web_tests/platform/mac-mac10.15/virtual/dark-color-scheme/fast/forms/color-scheme/media/video-overlay-play-button-expected.png deleted file mode 100644 index 0306a2e2..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/dark-color-scheme/fast/forms/color-scheme/media/video-overlay-play-button-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/dark-color-scheme/media/video-controls-rendering-expected.png b/third_party/blink/web_tests/platform/mac-mac10.15/virtual/dark-color-scheme/media/video-controls-rendering-expected.png deleted file mode 100644 index 11620df..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/dark-color-scheme/media/video-controls-rendering-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/gpu/fast/canvas/canvas-composite-video-expected.png b/third_party/blink/web_tests/platform/mac-mac10.15/virtual/gpu/fast/canvas/canvas-composite-video-expected.png deleted file mode 100644 index 452d917..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/gpu/fast/canvas/canvas-composite-video-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/gpu/fast/canvas/canvas-composite-video-shadow-expected.png b/third_party/blink/web_tests/platform/mac-mac10.15/virtual/gpu/fast/canvas/canvas-composite-video-shadow-expected.png deleted file mode 100644 index b9f9948..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/gpu/fast/canvas/canvas-composite-video-shadow-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/gpu/fast/canvas/canvas-drawImage-video-expected.png b/third_party/blink/web_tests/platform/mac-mac10.15/virtual/gpu/fast/canvas/canvas-drawImage-video-expected.png deleted file mode 100644 index 87ecfee..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/gpu/fast/canvas/canvas-drawImage-video-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/gpu/fast/canvas/canvas-drawImage-video-reset-expected.png b/third_party/blink/web_tests/platform/mac-mac10.15/virtual/gpu/fast/canvas/canvas-drawImage-video-reset-expected.png deleted file mode 100644 index 88cdfd65..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/gpu/fast/canvas/canvas-drawImage-video-reset-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/no-alloc-direct-call/fast/canvas/canvas-composite-video-expected.png b/third_party/blink/web_tests/platform/mac-mac10.15/virtual/no-alloc-direct-call/fast/canvas/canvas-composite-video-expected.png deleted file mode 100644 index 6904a0c..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/no-alloc-direct-call/fast/canvas/canvas-composite-video-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/no-alloc-direct-call/fast/canvas/canvas-composite-video-shadow-expected.png b/third_party/blink/web_tests/platform/mac-mac10.15/virtual/no-alloc-direct-call/fast/canvas/canvas-composite-video-shadow-expected.png deleted file mode 100644 index d28437f..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/no-alloc-direct-call/fast/canvas/canvas-composite-video-shadow-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/no-alloc-direct-call/fast/canvas/canvas-drawImage-video-expected.png b/third_party/blink/web_tests/platform/mac-mac10.15/virtual/no-alloc-direct-call/fast/canvas/canvas-drawImage-video-expected.png deleted file mode 100644 index 87ecfee..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/no-alloc-direct-call/fast/canvas/canvas-drawImage-video-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/no-alloc-direct-call/fast/canvas/canvas-drawImage-video-reset-expected.png b/third_party/blink/web_tests/platform/mac-mac10.15/virtual/no-alloc-direct-call/fast/canvas/canvas-drawImage-video-reset-expected.png deleted file mode 100644 index 88cdfd65..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/no-alloc-direct-call/fast/canvas/canvas-drawImage-video-reset-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/oopr-canvas2d/fast/canvas/canvas-composite-video-expected.png b/third_party/blink/web_tests/platform/mac-mac10.15/virtual/oopr-canvas2d/fast/canvas/canvas-composite-video-expected.png deleted file mode 100644 index d64f7d18..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/oopr-canvas2d/fast/canvas/canvas-composite-video-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/oopr-canvas2d/fast/canvas/canvas-composite-video-shadow-expected.png b/third_party/blink/web_tests/platform/mac-mac10.15/virtual/oopr-canvas2d/fast/canvas/canvas-composite-video-shadow-expected.png deleted file mode 100644 index 800294b..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/oopr-canvas2d/fast/canvas/canvas-composite-video-shadow-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/oopr-canvas2d/fast/canvas/canvas-drawImage-video-expected.png b/third_party/blink/web_tests/platform/mac-mac10.15/virtual/oopr-canvas2d/fast/canvas/canvas-drawImage-video-expected.png deleted file mode 100644 index 87ecfee..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/oopr-canvas2d/fast/canvas/canvas-drawImage-video-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/oopr-canvas2d/fast/canvas/canvas-drawImage-video-reset-expected.png b/third_party/blink/web_tests/platform/mac-mac10.15/virtual/oopr-canvas2d/fast/canvas/canvas-drawImage-video-reset-expected.png deleted file mode 100644 index 88cdfd65..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/oopr-canvas2d/fast/canvas/canvas-drawImage-video-reset-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/prefer_compositing_to_lcd_text/compositing/overflow/overflow-compositing-descendant-expected.png b/third_party/blink/web_tests/platform/mac-mac10.15/virtual/prefer_compositing_to_lcd_text/compositing/overflow/overflow-compositing-descendant-expected.png deleted file mode 100644 index 071f9ba..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/prefer_compositing_to_lcd_text/compositing/overflow/overflow-compositing-descendant-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/prefer_compositing_to_lcd_text/compositing/overflow/scroll-ancestor-update-expected.png b/third_party/blink/web_tests/platform/mac-mac10.15/virtual/prefer_compositing_to_lcd_text/compositing/overflow/scroll-ancestor-update-expected.png deleted file mode 100644 index ce33a85..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/prefer_compositing_to_lcd_text/compositing/overflow/scroll-ancestor-update-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/synchronous_html_parser/media/color-profile-video-expected.png b/third_party/blink/web_tests/platform/mac-mac10.15/virtual/synchronous_html_parser/media/color-profile-video-expected.png deleted file mode 100644 index 94a9be87..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/synchronous_html_parser/media/color-profile-video-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/synchronous_html_parser/media/color-profile-video-seek-expected.png b/third_party/blink/web_tests/platform/mac-mac10.15/virtual/synchronous_html_parser/media/color-profile-video-seek-expected.png deleted file mode 100644 index bbbfc6d..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/synchronous_html_parser/media/color-profile-video-seek-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/synchronous_html_parser/media/color-profile-video-seek-filter-expected.png b/third_party/blink/web_tests/platform/mac-mac10.15/virtual/synchronous_html_parser/media/color-profile-video-seek-filter-expected.png deleted file mode 100644 index 9ebfd14..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/synchronous_html_parser/media/color-profile-video-seek-filter-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/synchronous_html_parser/media/color-profile-video-seek-object-fit-expected.png b/third_party/blink/web_tests/platform/mac-mac10.15/virtual/synchronous_html_parser/media/color-profile-video-seek-object-fit-expected.png deleted file mode 100644 index f0d3fca..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/synchronous_html_parser/media/color-profile-video-seek-object-fit-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/synchronous_html_parser/media/controls-after-reload-expected.png b/third_party/blink/web_tests/platform/mac-mac10.15/virtual/synchronous_html_parser/media/controls-after-reload-expected.png deleted file mode 100644 index 88fed9a9..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/synchronous_html_parser/media/controls-after-reload-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/synchronous_html_parser/media/controls-styling-expected.png b/third_party/blink/web_tests/platform/mac-mac10.15/virtual/synchronous_html_parser/media/controls-styling-expected.png deleted file mode 100644 index 9cca21c..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/synchronous_html_parser/media/controls-styling-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/synchronous_html_parser/media/controls-styling-strict-expected.png b/third_party/blink/web_tests/platform/mac-mac10.15/virtual/synchronous_html_parser/media/controls-styling-strict-expected.png deleted file mode 100644 index aaf3dbf2..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/synchronous_html_parser/media/controls-styling-strict-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/synchronous_html_parser/media/controls-without-preload-expected.png b/third_party/blink/web_tests/platform/mac-mac10.15/virtual/synchronous_html_parser/media/controls-without-preload-expected.png deleted file mode 100644 index 171b2f8..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/synchronous_html_parser/media/controls-without-preload-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/synchronous_html_parser/media/track/track-cue-rendering-horizontal-expected.png b/third_party/blink/web_tests/platform/mac-mac10.15/virtual/synchronous_html_parser/media/track/track-cue-rendering-horizontal-expected.png deleted file mode 100644 index c0199be..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/synchronous_html_parser/media/track/track-cue-rendering-horizontal-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/synchronous_html_parser/media/track/track-cue-rendering-vertical-expected.png b/third_party/blink/web_tests/platform/mac-mac10.15/virtual/synchronous_html_parser/media/track/track-cue-rendering-vertical-expected.png deleted file mode 100644 index 3b61e30..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/synchronous_html_parser/media/track/track-cue-rendering-vertical-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/synchronous_html_parser/media/video-aspect-ratio-expected.png b/third_party/blink/web_tests/platform/mac-mac10.15/virtual/synchronous_html_parser/media/video-aspect-ratio-expected.png deleted file mode 100644 index 9e64707d..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/synchronous_html_parser/media/video-aspect-ratio-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/synchronous_html_parser/media/video-canvas-alpha-expected.png b/third_party/blink/web_tests/platform/mac-mac10.15/virtual/synchronous_html_parser/media/video-canvas-alpha-expected.png deleted file mode 100644 index fd6a9eba..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/synchronous_html_parser/media/video-canvas-alpha-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/synchronous_html_parser/media/video-controls-rendering-expected.png b/third_party/blink/web_tests/platform/mac-mac10.15/virtual/synchronous_html_parser/media/video-controls-rendering-expected.png deleted file mode 100644 index 07f01276..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/synchronous_html_parser/media/video-controls-rendering-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/synchronous_html_parser/media/video-display-toggle-expected.png b/third_party/blink/web_tests/platform/mac-mac10.15/virtual/synchronous_html_parser/media/video-display-toggle-expected.png deleted file mode 100644 index bffbb6e..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/synchronous_html_parser/media/video-display-toggle-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/synchronous_html_parser/media/video-remove-insert-repaints-expected.png b/third_party/blink/web_tests/platform/mac-mac10.15/virtual/synchronous_html_parser/media/video-remove-insert-repaints-expected.png deleted file mode 100644 index 4bbeaaf..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/synchronous_html_parser/media/video-remove-insert-repaints-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/synchronous_html_parser/media/video-replaces-poster-expected.png b/third_party/blink/web_tests/platform/mac-mac10.15/virtual/synchronous_html_parser/media/video-replaces-poster-expected.png deleted file mode 100644 index 3405eb4..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/synchronous_html_parser/media/video-replaces-poster-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/synchronous_html_parser/media/video-zoom-controls-expected.png b/third_party/blink/web_tests/platform/mac-mac10.15/virtual/synchronous_html_parser/media/video-zoom-controls-expected.png deleted file mode 100644 index d41fbdd..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/synchronous_html_parser/media/video-zoom-controls-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/synchronous_html_parser/media/video-zoom-expected.png b/third_party/blink/web_tests/platform/mac-mac10.15/virtual/synchronous_html_parser/media/video-zoom-expected.png deleted file mode 100644 index 8ad3c9a..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/synchronous_html_parser/media/video-zoom-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/threaded/compositing/visibility/visibility-simple-video-layer-expected.png b/third_party/blink/web_tests/platform/mac-mac10.15/virtual/threaded/compositing/visibility/visibility-simple-video-layer-expected.png deleted file mode 100644 index 7d2a82d..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/threaded/compositing/visibility/visibility-simple-video-layer-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/transform-interop-disabled/compositing/geometry/video-opacity-overlay-expected.png b/third_party/blink/web_tests/platform/mac-mac10.15/virtual/transform-interop-disabled/compositing/geometry/video-opacity-overlay-expected.png deleted file mode 100644 index 2c5ced9..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/transform-interop-disabled/compositing/geometry/video-opacity-overlay-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/transform-interop-disabled/compositing/overflow/overflow-compositing-descendant-expected.png b/third_party/blink/web_tests/platform/mac-mac10.15/virtual/transform-interop-disabled/compositing/overflow/overflow-compositing-descendant-expected.png deleted file mode 100644 index 071f9ba..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/transform-interop-disabled/compositing/overflow/overflow-compositing-descendant-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/transform-interop-disabled/compositing/overflow/scroll-ancestor-update-expected.png b/third_party/blink/web_tests/platform/mac-mac10.15/virtual/transform-interop-disabled/compositing/overflow/scroll-ancestor-update-expected.png deleted file mode 100644 index ce33a85..0000000 --- a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/transform-interop-disabled/compositing/overflow/scroll-ancestor-update-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/compositing/geometry/video-fixed-scrolling-expected.png b/third_party/blink/web_tests/platform/mac/compositing/geometry/video-fixed-scrolling-expected.png index 2b8d1e1..06b5458 100644 --- a/third_party/blink/web_tests/platform/mac/compositing/geometry/video-fixed-scrolling-expected.png +++ b/third_party/blink/web_tests/platform/mac/compositing/geometry/video-fixed-scrolling-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/compositing/geometry/video-opacity-overlay-expected.png b/third_party/blink/web_tests/platform/mac/compositing/geometry/video-opacity-overlay-expected.png index 7dbda6b..2c5ced9 100644 --- a/third_party/blink/web_tests/platform/mac/compositing/geometry/video-opacity-overlay-expected.png +++ b/third_party/blink/web_tests/platform/mac/compositing/geometry/video-opacity-overlay-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/compositing/layers-inside-overflow-scroll-expected.png b/third_party/blink/web_tests/platform/mac/compositing/layers-inside-overflow-scroll-expected.png index dc21b2f..74918d8 100644 --- a/third_party/blink/web_tests/platform/mac/compositing/layers-inside-overflow-scroll-expected.png +++ b/third_party/blink/web_tests/platform/mac/compositing/layers-inside-overflow-scroll-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/compositing/overflow/overflow-compositing-descendant-expected.png b/third_party/blink/web_tests/platform/mac/compositing/overflow/overflow-compositing-descendant-expected.png index f922fb7..071f9ba 100644 --- a/third_party/blink/web_tests/platform/mac/compositing/overflow/overflow-compositing-descendant-expected.png +++ b/third_party/blink/web_tests/platform/mac/compositing/overflow/overflow-compositing-descendant-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/compositing/overflow/scroll-ancestor-update-expected.png b/third_party/blink/web_tests/platform/mac/compositing/overflow/scroll-ancestor-update-expected.png index 9cd05e6..ce33a85 100644 --- a/third_party/blink/web_tests/platform/mac/compositing/overflow/scroll-ancestor-update-expected.png +++ b/third_party/blink/web_tests/platform/mac/compositing/overflow/scroll-ancestor-update-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/compositing/self-painting-layers-expected.png b/third_party/blink/web_tests/platform/mac/compositing/self-painting-layers-expected.png index 0ec0172d..5629ccb 100644 --- a/third_party/blink/web_tests/platform/mac/compositing/self-painting-layers-expected.png +++ b/third_party/blink/web_tests/platform/mac/compositing/self-painting-layers-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/compositing/video/video-controls-squashing-expected.png b/third_party/blink/web_tests/platform/mac/compositing/video/video-controls-squashing-expected.png index 4cdeceb..0b38a72 100644 --- a/third_party/blink/web_tests/platform/mac/compositing/video/video-controls-squashing-expected.png +++ b/third_party/blink/web_tests/platform/mac/compositing/video/video-controls-squashing-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/compositing/visibility/visibility-simple-video-layer-expected.png b/third_party/blink/web_tests/platform/mac/compositing/visibility/visibility-simple-video-layer-expected.png index 31a69f6..7d2a82d 100644 --- a/third_party/blink/web_tests/platform/mac/compositing/visibility/visibility-simple-video-layer-expected.png +++ b/third_party/blink/web_tests/platform/mac/compositing/visibility/visibility-simple-video-layer-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/canvas/canvas-composite-video-expected.png b/third_party/blink/web_tests/platform/mac/fast/canvas/canvas-composite-video-expected.png index 04a6f33..6904a0c 100644 --- a/third_party/blink/web_tests/platform/mac/fast/canvas/canvas-composite-video-expected.png +++ b/third_party/blink/web_tests/platform/mac/fast/canvas/canvas-composite-video-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/canvas/canvas-composite-video-shadow-expected.png b/third_party/blink/web_tests/platform/mac/fast/canvas/canvas-composite-video-shadow-expected.png index 98da6ce5..d28437f 100644 --- a/third_party/blink/web_tests/platform/mac/fast/canvas/canvas-composite-video-shadow-expected.png +++ b/third_party/blink/web_tests/platform/mac/fast/canvas/canvas-composite-video-shadow-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/canvas/canvas-drawImage-video-expected.png b/third_party/blink/web_tests/platform/mac/fast/canvas/canvas-drawImage-video-expected.png index 5f36585..87ecfee 100644 --- a/third_party/blink/web_tests/platform/mac/fast/canvas/canvas-drawImage-video-expected.png +++ b/third_party/blink/web_tests/platform/mac/fast/canvas/canvas-drawImage-video-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/canvas/canvas-drawImage-video-reset-expected.png b/third_party/blink/web_tests/platform/mac/fast/canvas/canvas-drawImage-video-reset-expected.png index 0232744..88cdfd65 100644 --- a/third_party/blink/web_tests/platform/mac/fast/canvas/canvas-drawImage-video-reset-expected.png +++ b/third_party/blink/web_tests/platform/mac/fast/canvas/canvas-drawImage-video-reset-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/canvas/canvas-pattern-video-expected.png b/third_party/blink/web_tests/platform/mac/fast/canvas/canvas-pattern-video-expected.png index c3d252a..00357c7 100644 --- a/third_party/blink/web_tests/platform/mac/fast/canvas/canvas-pattern-video-expected.png +++ b/third_party/blink/web_tests/platform/mac/fast/canvas/canvas-pattern-video-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/color-scheme/media/video-overlay-menu-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/color-scheme/media/video-overlay-menu-expected.png index 44afb914..7a28f67f 100644 --- a/third_party/blink/web_tests/platform/mac/fast/forms/color-scheme/media/video-overlay-menu-expected.png +++ b/third_party/blink/web_tests/platform/mac/fast/forms/color-scheme/media/video-overlay-menu-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/color-scheme/media/video-overlay-play-button-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/color-scheme/media/video-overlay-play-button-expected.png index 9bcf75b..3052bcd 100644 --- a/third_party/blink/web_tests/platform/mac/fast/forms/color-scheme/media/video-overlay-play-button-expected.png +++ b/third_party/blink/web_tests/platform/mac/fast/forms/color-scheme/media/video-overlay-play-button-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/media/color-profile-video-expected.png b/third_party/blink/web_tests/platform/mac/media/color-profile-video-expected.png index 7a1dcbc8..94a9be87 100644 --- a/third_party/blink/web_tests/platform/mac/media/color-profile-video-expected.png +++ b/third_party/blink/web_tests/platform/mac/media/color-profile-video-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/media/color-profile-video-seek-expected.png b/third_party/blink/web_tests/platform/mac/media/color-profile-video-seek-expected.png index f0cb84e..bbbfc6d 100644 --- a/third_party/blink/web_tests/platform/mac/media/color-profile-video-seek-expected.png +++ b/third_party/blink/web_tests/platform/mac/media/color-profile-video-seek-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/media/color-profile-video-seek-filter-expected.png b/third_party/blink/web_tests/platform/mac/media/color-profile-video-seek-filter-expected.png index 31b4272..9ebfd14 100644 --- a/third_party/blink/web_tests/platform/mac/media/color-profile-video-seek-filter-expected.png +++ b/third_party/blink/web_tests/platform/mac/media/color-profile-video-seek-filter-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/media/color-profile-video-seek-object-fit-expected.png b/third_party/blink/web_tests/platform/mac/media/color-profile-video-seek-object-fit-expected.png index 88c9e85..f0d3fca 100644 --- a/third_party/blink/web_tests/platform/mac/media/color-profile-video-seek-object-fit-expected.png +++ b/third_party/blink/web_tests/platform/mac/media/color-profile-video-seek-object-fit-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/media/controls-after-reload-expected.png b/third_party/blink/web_tests/platform/mac/media/controls-after-reload-expected.png index cd6e5df..88fed9a9 100644 --- a/third_party/blink/web_tests/platform/mac/media/controls-after-reload-expected.png +++ b/third_party/blink/web_tests/platform/mac/media/controls-after-reload-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/media/controls-strict-expected.png b/third_party/blink/web_tests/platform/mac/media/controls-strict-expected.png index 85b1ea5..fc4d3c9 100644 --- a/third_party/blink/web_tests/platform/mac/media/controls-strict-expected.png +++ b/third_party/blink/web_tests/platform/mac/media/controls-strict-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/media/controls-styling-expected.png b/third_party/blink/web_tests/platform/mac/media/controls-styling-expected.png index 822a692..9cca21c 100644 --- a/third_party/blink/web_tests/platform/mac/media/controls-styling-expected.png +++ b/third_party/blink/web_tests/platform/mac/media/controls-styling-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/media/controls-styling-strict-expected.png b/third_party/blink/web_tests/platform/mac/media/controls-styling-strict-expected.png index 12ef72a..aaf3dbf2 100644 --- a/third_party/blink/web_tests/platform/mac/media/controls-styling-strict-expected.png +++ b/third_party/blink/web_tests/platform/mac/media/controls-styling-strict-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/media/controls-without-preload-expected.png b/third_party/blink/web_tests/platform/mac/media/controls-without-preload-expected.png index 8cbfcad..171b2f8 100644 --- a/third_party/blink/web_tests/platform/mac/media/controls-without-preload-expected.png +++ b/third_party/blink/web_tests/platform/mac/media/controls-without-preload-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/media/track/track-cue-rendering-horizontal-expected.png b/third_party/blink/web_tests/platform/mac/media/track/track-cue-rendering-horizontal-expected.png index 57ca3a7e..c0199be 100644 --- a/third_party/blink/web_tests/platform/mac/media/track/track-cue-rendering-horizontal-expected.png +++ b/third_party/blink/web_tests/platform/mac/media/track/track-cue-rendering-horizontal-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/media/track/track-cue-rendering-vertical-expected.png b/third_party/blink/web_tests/platform/mac/media/track/track-cue-rendering-vertical-expected.png index 006be3aa..3b61e30 100644 --- a/third_party/blink/web_tests/platform/mac/media/track/track-cue-rendering-vertical-expected.png +++ b/third_party/blink/web_tests/platform/mac/media/track/track-cue-rendering-vertical-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/media/video-aspect-ratio-expected.png b/third_party/blink/web_tests/platform/mac/media/video-aspect-ratio-expected.png index 6a98d67..9e64707d 100644 --- a/third_party/blink/web_tests/platform/mac/media/video-aspect-ratio-expected.png +++ b/third_party/blink/web_tests/platform/mac/media/video-aspect-ratio-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/media/video-canvas-alpha-expected.png b/third_party/blink/web_tests/platform/mac/media/video-canvas-alpha-expected.png index c5a5d1f..fd6a9eba 100644 --- a/third_party/blink/web_tests/platform/mac/media/video-canvas-alpha-expected.png +++ b/third_party/blink/web_tests/platform/mac/media/video-canvas-alpha-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/media/video-controls-rendering-expected.png b/third_party/blink/web_tests/platform/mac/media/video-controls-rendering-expected.png index b287b8d..07f01276 100644 --- a/third_party/blink/web_tests/platform/mac/media/video-controls-rendering-expected.png +++ b/third_party/blink/web_tests/platform/mac/media/video-controls-rendering-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/media/video-display-toggle-expected.png b/third_party/blink/web_tests/platform/mac/media/video-display-toggle-expected.png index 89a47c1e..bffbb6e 100644 --- a/third_party/blink/web_tests/platform/mac/media/video-display-toggle-expected.png +++ b/third_party/blink/web_tests/platform/mac/media/video-display-toggle-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/media/video-remove-insert-repaints-expected.png b/third_party/blink/web_tests/platform/mac/media/video-remove-insert-repaints-expected.png index d08573f..4bbeaaf 100644 --- a/third_party/blink/web_tests/platform/mac/media/video-remove-insert-repaints-expected.png +++ b/third_party/blink/web_tests/platform/mac/media/video-remove-insert-repaints-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/media/video-replaces-poster-expected.png b/third_party/blink/web_tests/platform/mac/media/video-replaces-poster-expected.png index a25b1f4b..3405eb4 100644 --- a/third_party/blink/web_tests/platform/mac/media/video-replaces-poster-expected.png +++ b/third_party/blink/web_tests/platform/mac/media/video-replaces-poster-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/media/video-zoom-controls-expected.png b/third_party/blink/web_tests/platform/mac/media/video-zoom-controls-expected.png index 1535bb1..d41fbdd 100644 --- a/third_party/blink/web_tests/platform/mac/media/video-zoom-controls-expected.png +++ b/third_party/blink/web_tests/platform/mac/media/video-zoom-controls-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/media/video-zoom-expected.png b/third_party/blink/web_tests/platform/mac/media/video-zoom-expected.png index 4aad12b..8ad3c9a 100644 --- a/third_party/blink/web_tests/platform/mac/media/video-zoom-expected.png +++ b/third_party/blink/web_tests/platform/mac/media/video-zoom-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh-hc/fast/forms/color-scheme/media/video-overlay-menu-expected.png b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh-hc/fast/forms/color-scheme/media/video-overlay-menu-expected.png index 0344095..8477d83 100644 --- a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh-hc/fast/forms/color-scheme/media/video-overlay-menu-expected.png +++ b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh-hc/fast/forms/color-scheme/media/video-overlay-menu-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh-hc/fast/forms/color-scheme/media/video-overlay-play-button-expected.png b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh-hc/fast/forms/color-scheme/media/video-overlay-play-button-expected.png index 23d8a5c..c8a32c9 100644 --- a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh-hc/fast/forms/color-scheme/media/video-overlay-play-button-expected.png +++ b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh-hc/fast/forms/color-scheme/media/video-overlay-play-button-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/dark-color-scheme/fast/forms/color-scheme/media/video-overlay-menu-expected.png b/third_party/blink/web_tests/platform/mac/virtual/dark-color-scheme/fast/forms/color-scheme/media/video-overlay-menu-expected.png index ddb4cd7..0f2f03a 100644 --- a/third_party/blink/web_tests/platform/mac/virtual/dark-color-scheme/fast/forms/color-scheme/media/video-overlay-menu-expected.png +++ b/third_party/blink/web_tests/platform/mac/virtual/dark-color-scheme/fast/forms/color-scheme/media/video-overlay-menu-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/dark-color-scheme/fast/forms/color-scheme/media/video-overlay-play-button-expected.png b/third_party/blink/web_tests/platform/mac/virtual/dark-color-scheme/fast/forms/color-scheme/media/video-overlay-play-button-expected.png index 906b71b..0306a2e2 100644 --- a/third_party/blink/web_tests/platform/mac/virtual/dark-color-scheme/fast/forms/color-scheme/media/video-overlay-play-button-expected.png +++ b/third_party/blink/web_tests/platform/mac/virtual/dark-color-scheme/fast/forms/color-scheme/media/video-overlay-play-button-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/dark-color-scheme/media/video-controls-rendering-expected.png b/third_party/blink/web_tests/platform/mac/virtual/dark-color-scheme/media/video-controls-rendering-expected.png index d67cd1f..11620df 100644 --- a/third_party/blink/web_tests/platform/mac/virtual/dark-color-scheme/media/video-controls-rendering-expected.png +++ b/third_party/blink/web_tests/platform/mac/virtual/dark-color-scheme/media/video-controls-rendering-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/gpu-rasterization/images/imagemap-overflowing-polygon-focus-ring-expected.png b/third_party/blink/web_tests/platform/mac/virtual/gpu-rasterization/images/imagemap-overflowing-polygon-focus-ring-expected.png index 570ce3d7..c366218 100644 --- a/third_party/blink/web_tests/platform/mac/virtual/gpu-rasterization/images/imagemap-overflowing-polygon-focus-ring-expected.png +++ b/third_party/blink/web_tests/platform/mac/virtual/gpu-rasterization/images/imagemap-overflowing-polygon-focus-ring-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/gpu-rasterization/images/imagemap-polygon-focus-ring-expected.png b/third_party/blink/web_tests/platform/mac/virtual/gpu-rasterization/images/imagemap-polygon-focus-ring-expected.png index 6fa2a8e..be3771d 100644 --- a/third_party/blink/web_tests/platform/mac/virtual/gpu-rasterization/images/imagemap-polygon-focus-ring-expected.png +++ b/third_party/blink/web_tests/platform/mac/virtual/gpu-rasterization/images/imagemap-polygon-focus-ring-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/gpu/fast/canvas/canvas-composite-video-expected.png b/third_party/blink/web_tests/platform/mac/virtual/gpu/fast/canvas/canvas-composite-video-expected.png index b03258f..452d917 100644 --- a/third_party/blink/web_tests/platform/mac/virtual/gpu/fast/canvas/canvas-composite-video-expected.png +++ b/third_party/blink/web_tests/platform/mac/virtual/gpu/fast/canvas/canvas-composite-video-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/gpu/fast/canvas/canvas-composite-video-shadow-expected.png b/third_party/blink/web_tests/platform/mac/virtual/gpu/fast/canvas/canvas-composite-video-shadow-expected.png index 81e5ecf..b9f9948 100644 --- a/third_party/blink/web_tests/platform/mac/virtual/gpu/fast/canvas/canvas-composite-video-shadow-expected.png +++ b/third_party/blink/web_tests/platform/mac/virtual/gpu/fast/canvas/canvas-composite-video-shadow-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/gpu/fast/canvas/canvas-pattern-video-expected.png b/third_party/blink/web_tests/platform/mac/virtual/gpu/fast/canvas/canvas-pattern-video-expected.png index c3d252a..00357c7 100644 --- a/third_party/blink/web_tests/platform/mac/virtual/gpu/fast/canvas/canvas-pattern-video-expected.png +++ b/third_party/blink/web_tests/platform/mac/virtual/gpu/fast/canvas/canvas-pattern-video-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/no-alloc-direct-call/fast/canvas/canvas-pattern-video-expected.png b/third_party/blink/web_tests/platform/mac/virtual/no-alloc-direct-call/fast/canvas/canvas-pattern-video-expected.png new file mode 100644 index 0000000..00357c7 --- /dev/null +++ b/third_party/blink/web_tests/platform/mac/virtual/no-alloc-direct-call/fast/canvas/canvas-pattern-video-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/oopr-canvas2d/fast/canvas/canvas-composite-video-expected.png b/third_party/blink/web_tests/platform/mac/virtual/oopr-canvas2d/fast/canvas/canvas-composite-video-expected.png index a16ba98..d64f7d18 100644 --- a/third_party/blink/web_tests/platform/mac/virtual/oopr-canvas2d/fast/canvas/canvas-composite-video-expected.png +++ b/third_party/blink/web_tests/platform/mac/virtual/oopr-canvas2d/fast/canvas/canvas-composite-video-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/oopr-canvas2d/fast/canvas/canvas-composite-video-shadow-expected.png b/third_party/blink/web_tests/platform/mac/virtual/oopr-canvas2d/fast/canvas/canvas-composite-video-shadow-expected.png index f3fccb8..800294b 100644 --- a/third_party/blink/web_tests/platform/mac/virtual/oopr-canvas2d/fast/canvas/canvas-composite-video-shadow-expected.png +++ b/third_party/blink/web_tests/platform/mac/virtual/oopr-canvas2d/fast/canvas/canvas-composite-video-shadow-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/oopr-canvas2d/fast/canvas/canvas-pattern-video-expected.png b/third_party/blink/web_tests/platform/mac/virtual/oopr-canvas2d/fast/canvas/canvas-pattern-video-expected.png new file mode 100644 index 0000000..00357c7 --- /dev/null +++ b/third_party/blink/web_tests/platform/mac/virtual/oopr-canvas2d/fast/canvas/canvas-pattern-video-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/gpu-rasterization/images/imagemap-overflowing-polygon-focus-ring-expected.png b/third_party/blink/web_tests/platform/win/virtual/gpu-rasterization/images/imagemap-overflowing-polygon-focus-ring-expected.png index 0833ca8..807abd7 100644 --- a/third_party/blink/web_tests/platform/win/virtual/gpu-rasterization/images/imagemap-overflowing-polygon-focus-ring-expected.png +++ b/third_party/blink/web_tests/platform/win/virtual/gpu-rasterization/images/imagemap-overflowing-polygon-focus-ring-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/gpu-rasterization/images/imagemap-polygon-focus-ring-expected.png b/third_party/blink/web_tests/platform/win/virtual/gpu-rasterization/images/imagemap-polygon-focus-ring-expected.png index 9aa08f7..c698a08 100644 --- a/third_party/blink/web_tests/platform/win/virtual/gpu-rasterization/images/imagemap-polygon-focus-ring-expected.png +++ b/third_party/blink/web_tests/platform/win/virtual/gpu-rasterization/images/imagemap-polygon-focus-ring-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/controls-refresh-hc/fast/forms/color-scheme/media/video-overlay-play-button-expected.png b/third_party/blink/web_tests/platform/win7/virtual/controls-refresh-hc/fast/forms/color-scheme/media/video-overlay-play-button-expected.png deleted file mode 100644 index 0eb58da..0000000 --- a/third_party/blink/web_tests/platform/win7/virtual/controls-refresh-hc/fast/forms/color-scheme/media/video-overlay-play-button-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/gpu/fast/canvas/canvas-composite-video-expected.png b/third_party/blink/web_tests/platform/win7/virtual/gpu/fast/canvas/canvas-composite-video-expected.png deleted file mode 100644 index e68ec73e..0000000 --- a/third_party/blink/web_tests/platform/win7/virtual/gpu/fast/canvas/canvas-composite-video-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/virtual/container-queries/inspector-protocol/dom/container-queries/dom-get-querying-descendants-for-container-expected.txt b/third_party/blink/web_tests/virtual/container-queries/inspector-protocol/dom/container-queries/dom-get-querying-descendants-for-container-expected.txt new file mode 100644 index 0000000..c5ed501e --- /dev/null +++ b/third_party/blink/web_tests/virtual/container-queries/inspector-protocol/dom/container-queries/dom-get-querying-descendants-for-container-expected.txt
@@ -0,0 +1,6 @@ +Test CSS.getQueryingDescendantsForContainer method for container query containers +Are the returned nodes the expected descendants for #container-unnamed? +true +Are the returned nodes the expected descendants for #container-named? +true +
diff --git a/third_party/blink/web_tests/wpt_internal/prerender/activate-from-iframe.html b/third_party/blink/web_tests/wpt_internal/prerender/activate-from-iframe.html index 6e8b172..42b8515c 100644 --- a/third_party/blink/web_tests/wpt_internal/prerender/activate-from-iframe.html +++ b/third_party/blink/web_tests/wpt_internal/prerender/activate-from-iframe.html
@@ -7,22 +7,22 @@ <meta name="timeout" content="long"> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> +<script src="resources/utils.js"></script> <script> promise_test(async t => { - const resultChannel = new BroadcastChannel('result-channel'); - t.add_cleanup(_ => resultChannel.close()); + const channel = new BroadcastChannel('result-channel'); + const messageQueue = new BroadcastMessageQueue(channel); + t.add_cleanup(_ => channel.close()); const url = `resources/activate-from-iframe.html?mode=triggering`; window.open(url, '_blank', 'noopener'); - const gotActivationMessage = - await new Promise(r => resultChannel.onmessage = r); - assert_equals(gotActivationMessage.data, + const gotActivationMessage = await messageQueue.nextMessage(); + assert_equals(gotActivationMessage, 'attempting prerender activation'); - const gotReloadMessage = - await new Promise(r => resultChannel.onmessage = r); - assert_equals(gotReloadMessage.data, 'loaded from scratch'); + const gotReloadMessage = await messageQueue.nextMessage(); + assert_equals(gotReloadMessage, 'loaded from scratch'); }, `Navigation on the main frame initiated by window opened by an ` + `iframe opening via window.parent.location should not activate a ` + `prerendered page`);
diff --git a/third_party/blink/web_tests/wpt_internal/prerender/iframe-added-post-activation.html b/third_party/blink/web_tests/wpt_internal/prerender/iframe-added-post-activation.html index b448d65..7f63dd6 100644 --- a/third_party/blink/web_tests/wpt_internal/prerender/iframe-added-post-activation.html +++ b/third_party/blink/web_tests/wpt_internal/prerender/iframe-added-post-activation.html
@@ -10,38 +10,20 @@ <meta name="timeout" content="long"> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> +<script src="resources/utils.js"></script> <body> <script> promise_test(async t => { const channel = new BroadcastChannel('test-channel'); - let messages = []; - let resolves = []; - - channel.addEventListener('message', e => { - if (resolves.length > 0) { - const fn = resolves.shift(); - fn(e.data); - } else { - messages.push(e.data); - } - }); - - function nextMessage() { - return new Promise(resolve => { - if (messages.length > 0) - resolve(messages.shift()) - else - resolves.push(resolve); - }); - } - + const messageQueue = new BroadcastMessageQueue(channel); + t.add_cleanup(_ => channel.close()); // Make the window to start the prerender. const url = `resources/iframe-added-post-activation.html`; window.open(url, '_blank', 'noopener'); // Wait for done. - const msg = await nextMessage(); + const msg = await messageQueue.nextMessage(); assert_equals(msg, 'PASS'); }, 'iframe added after activation has false document.prerendering'); </script>
diff --git a/third_party/blink/web_tests/wpt_internal/prerender/resources/unload-on-prerender-cross-origin-subframe-navigation.html b/third_party/blink/web_tests/wpt_internal/prerender/resources/unload-on-prerender-cross-origin-subframe-navigation.html index a2a5e57c..ed9015e 100644 --- a/third_party/blink/web_tests/wpt_internal/prerender/resources/unload-on-prerender-cross-origin-subframe-navigation.html +++ b/third_party/blink/web_tests/wpt_internal/prerender/resources/unload-on-prerender-cross-origin-subframe-navigation.html
@@ -40,14 +40,7 @@ bc.postMessage(message); bc.postMessage('Done'); } else if (state === 'same-origin-frame') { - // unload handler should be triggered after the frame navigation. - // The deferred cross-origin navigation resumes when the browser process - // starts activation, and when Blink handles the unload event handler, - // document.prerendering state is unstable. - // TODO(https://crbug.com/1222547): Fix this unstable state by waiting for - // DidActivateForPrerendering() before proceeding with the subframe - // navigation. - addEventListeners('same-origin-frame', false); + addEventListeners('same-origin-frame'); // Run a cross-origin navigation. document.location = createCrossOriginTestUrl('cross-origin-frame');
diff --git a/third_party/blink/web_tests/wpt_internal/prerender/resources/unload-on-prerender-remove-subframe.html b/third_party/blink/web_tests/wpt_internal/prerender/resources/unload-on-prerender-remove-subframe.html index 1c4c7e4..227bd75b 100644 --- a/third_party/blink/web_tests/wpt_internal/prerender/resources/unload-on-prerender-remove-subframe.html +++ b/third_party/blink/web_tests/wpt_internal/prerender/resources/unload-on-prerender-remove-subframe.html
@@ -33,7 +33,7 @@ await promise; bc.postMessage('Done'); } else if (state == 'frame') { - addEventListeners('frame', true); + addEventListeners('frame'); bc.postMessage('request removal'); } bc.close();
diff --git a/third_party/blink/web_tests/wpt_internal/prerender/resources/unload-on-prerender-same-origin-subframe-navigation.html b/third_party/blink/web_tests/wpt_internal/prerender/resources/unload-on-prerender-same-origin-subframe-navigation.html index f978010..6c3f2d8 100644 --- a/third_party/blink/web_tests/wpt_internal/prerender/resources/unload-on-prerender-same-origin-subframe-navigation.html +++ b/third_party/blink/web_tests/wpt_internal/prerender/resources/unload-on-prerender-same-origin-subframe-navigation.html
@@ -23,7 +23,7 @@ addFrame(createTestUrl('same-origin-frame1')); } else if (state === 'same-origin-frame1') { // unload handler should be triggered after the frame navigation. - addEventListeners('same-origin-frame1', true); + addEventListeners('same-origin-frame1'); // Run a same-origin navigation. document.location = createTestUrl('same-origin-frame2');
diff --git a/third_party/blink/web_tests/wpt_internal/prerender/resources/unload-utils.js b/third_party/blink/web_tests/wpt_internal/prerender/resources/unload-utils.js index 51089dc..a93c959 100644 --- a/third_party/blink/web_tests/wpt_internal/prerender/resources/unload-utils.js +++ b/third_party/blink/web_tests/wpt_internal/prerender/resources/unload-utils.js
@@ -25,13 +25,12 @@ return frame; } -function addEventListeners(name, checkPrerenderingState) { +function addEventListeners(name) { ['unload', 'pagehide', 'pageshow', 'visibilitychange'].forEach(eventName => { window.addEventListener(eventName, e => { const bc = openChannel(); bc.postMessage(eventName + ' ' + name + - (checkPrerenderingState && document.prerendering ? ' in prerendering' - : '')); + (document.prerendering ? ' in prerendering' : '')); bc.close(); }); });
diff --git a/third_party/blink/web_tests/wpt_internal/prerender/resources/utils.js b/third_party/blink/web_tests/wpt_internal/prerender/resources/utils.js index fb53e73..44e35f6 100644 --- a/third_party/blink/web_tests/wpt_internal/prerender/resources/utils.js +++ b/third_party/blink/web_tests/wpt_internal/prerender/resources/utils.js
@@ -88,3 +88,39 @@ window.close(); }); } + +// Returns messages received from the given BroadcastChannel +// so that callers do not need to add their own event listeners. +// nextMessage() returns a promise which resolves with the next message. +// +// Usage: +// const channel = new BroadcastChannel('channel-name'); +// const messageQueue = new BroadcastMessageQueue(channel); +// const message1 = await messageQueue.nextMessage(); +// const message2 = await messageQueue.nextMessage(); +// message1 and message2 are the messages received. +class BroadcastMessageQueue { + constructor(broadcastChannel) { + this.messages = []; + this.resolveFunctions = []; + this.channel = broadcastChannel; + this.channel.addEventListener('message', e => { + if (this.resolveFunctions.length > 0) { + const fn = this.resolveFunctions.shift(); + fn(e.data); + } else { + this.messages.push(e.data); + } + }); + } + + // Returns a promise that resolves with the next message from this queue. + nextMessage() { + return new Promise(resolve => { + if (this.messages.length > 0) + resolve(this.messages.shift()) + else + this.resolveFunctions.push(resolve); + }); + } +}
diff --git a/third_party/blink/web_tests/wpt_internal/prerender/unload-on-prerender-cross-origin-subframe-navigation.html b/third_party/blink/web_tests/wpt_internal/prerender/unload-on-prerender-cross-origin-subframe-navigation.html index 32a0c91..205d7bd 100644 --- a/third_party/blink/web_tests/wpt_internal/prerender/unload-on-prerender-cross-origin-subframe-navigation.html +++ b/third_party/blink/web_tests/wpt_internal/prerender/unload-on-prerender-cross-origin-subframe-navigation.html
@@ -29,7 +29,7 @@ 'load prerendering', 'load same-origin-frame', 'request activation', - 'visibilitychange same-origin-frame', + 'visibilitychange same-origin-frame in prerendering', 'pagehide same-origin-frame', 'visibilitychange same-origin-frame', 'unload same-origin-frame',
diff --git a/third_party/closure_compiler/externs/accessibility_private.js b/third_party/closure_compiler/externs/accessibility_private.js index 748afdd9..407a5d92 100644 --- a/third_party/closure_compiler/externs/accessibility_private.js +++ b/third_party/closure_compiler/externs/accessibility_private.js
@@ -34,6 +34,15 @@ chrome.accessibilityPrivate.ScreenRect; /** + * Point in global screen coordinates. + * @typedef {{ + * x: number, + * y: number + * }} + */ +chrome.accessibilityPrivate.ScreenPoint; + +/** * @enum {string} */ chrome.accessibilityPrivate.Gesture = { @@ -416,6 +425,12 @@ chrome.accessibilityPrivate.moveMagnifierToRect = function(rect) {}; /** + * Called by the Accessibility Common extension to center magnifier at |point|. + * @param {!chrome.accessibilityPrivate.ScreenPoint} point + */ +chrome.accessibilityPrivate.magnifierCenterOnPoint = function(point) {}; + +/** * Toggles dictation between active and inactive states. */ chrome.accessibilityPrivate.toggleDictation = function() {};
diff --git a/third_party/dav1d/dav1d_generated.gni b/third_party/dav1d/dav1d_generated.gni index 6af524fd..ab2d341 100644 --- a/third_party/dav1d/dav1d_generated.gni +++ b/third_party/dav1d/dav1d_generated.gni
@@ -16,6 +16,7 @@ "libdav1d/src/x86/film_grain_avx2.asm", "libdav1d/src/x86/film_grain_sse.asm", "libdav1d/src/x86/ipred16_avx2.asm", + "libdav1d/src/x86/ipred16_sse.asm", "libdav1d/src/x86/ipred_avx2.asm", "libdav1d/src/x86/ipred_sse.asm", "libdav1d/src/x86/itx16_avx2.asm",
diff --git a/third_party/freetype/README.chromium b/third_party/freetype/README.chromium index 50335a0..f78a33d2 100644 --- a/third_party/freetype/README.chromium +++ b/third_party/freetype/README.chromium
@@ -1,7 +1,7 @@ Name: FreeType URL: http://www.freetype.org/ -Version: VER-2-11-0-13-g47b1a541c -Revision: 47b1a541cb1943d85da3976b93f9a5ed490288e2 +Version: VER-2-11-0-16-g09195a82a +Revision: 09195a82a4a39afb0f8281563f48ce4493455b4e CPEPrefix: cpe:/a:freetype:freetype:2.10.4 License: Custom license "inspired by the BSD, Artistic, and IJG (Independent JPEG Group) licenses"
diff --git a/third_party/libwebp/OWNERS b/third_party/libwebp/OWNERS index 2f08782..8761a39 100644 --- a/third_party/libwebp/OWNERS +++ b/third_party/libwebp/OWNERS
@@ -1,4 +1,7 @@ -fbarchard@chromium.org +# Primary OWNER jzern@chromium.org jzern@google.com -urvang@chromium.org + +# Past project members, please only use when primary is unavailable. +fbarchard@chromium.org # Prefer jzern@ if available. +urvang@chromium.org # Prefer jzern@ if available.
diff --git a/tools/clang/rewrite_raw_ptr_fields/manual-fields-to-ignore.txt b/tools/clang/rewrite_raw_ptr_fields/manual-fields-to-ignore.txt index 76f44a7..f9a7f55 100644 --- a/tools/clang/rewrite_raw_ptr_fields/manual-fields-to-ignore.txt +++ b/tools/clang/rewrite_raw_ptr_fields/manual-fields-to-ignore.txt
@@ -24,6 +24,7 @@ # Populated manually - conflicting types in an initializer list WebUITabStripContainerView::tab_counter_ +DownloadItemView::review_button_ # Populated manually to avoid returning a reference to a temporary T* (result of # implicitly casting CheckedPtr<T> to T*). This covers functions that return @@ -116,9 +117,9 @@ performance_manager::v8_memory::(anonymous namespace)::V8ContextTrackerTest::tracker_ content::(anonymous namespace)::BackForwardCacheMessageFilter::interface_name_ base::trace_event::MemoryDumpProviderInfo::name -content::Navigationrequest::frame_tree_node_ -content::Navigationrequest::rfh_restored_from_back_forward_cache_ -scheduler::FrameSchedulerImpl::blame_context_ +content::NavigationRequest::frame_tree_node_ +content::NavigationRequest::rfh_restored_from_back_forward_cache_ +blink::scheduler::FrameSchedulerImpl::blame_context_ # Populated manually - requires rewriting member pointer type courgette::LabelManagerTest_SimpleIndexAssigner_Test::TestBody()::TestCase::input
diff --git a/tools/gritsettings/resource_ids.spec b/tools/gritsettings/resource_ids.spec index 9921b06a..0ca863b 100644 --- a/tools/gritsettings/resource_ids.spec +++ b/tools/gritsettings/resource_ids.spec
@@ -302,7 +302,7 @@ "META": {"sizes": {"includes": [10]}}, "includes": [2065], }, - "<(SHARED_INTERMEDIATE_DIR)/chrome/browser/resources/download_internals/resources.grd": { + "<(SHARED_INTERMEDIATE_DIR)/components/download/resources/download_internals/resources.grd": { "META": {"sizes": {"includes": [10]}}, "includes": [2070], },
diff --git a/tools/mb/mb_config.pyl b/tools/mb/mb_config.pyl index e0463ba..7da425d 100644 --- a/tools/mb/mb_config.pyl +++ b/tools/mb/mb_config.pyl
@@ -314,6 +314,8 @@ 'android-backuprefptr-arm64-fyi-rel': 'release_trybot_backuprefptr_arm64', 'chromeos-amd64-generic-rel-dchecks': 'chromeos_amd64-generic_use_fake_dbus_clients_dchecks', 'chromeos-amd64-generic-rel (reclient)': 'chromeos_amd64-generic_use_fake_dbus_clients_reclient', + # TODO(crbug.com/1235218): remove after the migration. + 'chromeos-amd64-generic-rel (reclient compare)': 'chromeos_amd64-generic_use_fake_dbus_clients_reclient', 'chromeos-amd64-generic-rel (goma cache silo)': 'chromeos_amd64-generic_use_fake_dbus_clients', 'fuchsia-code-coverage': 'fuchsia_clang_code_coverage', 'fuchsia-fyi-arm64-dbg': 'debug_bot_fuchsia_arm64',
diff --git a/tools/mb/mb_config_expectations/chromium.fyi.json b/tools/mb/mb_config_expectations/chromium.fyi.json index bc6a355..f9b9151d 100644 --- a/tools/mb/mb_config_expectations/chromium.fyi.json +++ b/tools/mb/mb_config_expectations/chromium.fyi.json
@@ -544,6 +544,15 @@ "use_real_dbus_clients": false } }, + "chromeos-amd64-generic-rel (reclient compare)": { + "args_file": "//build/args/chromeos/amd64-generic.gni", + "gn_args": { + "is_chromeos_device": true, + "ozone_platform_headless": true, + "use_rbe": true, + "use_real_dbus_clients": false + } + }, "chromeos-amd64-generic-rel (reclient)": { "args_file": "//build/args/chromeos/amd64-generic.gni", "gn_args": {
diff --git a/tools/metrics/actions/actions.xml b/tools/metrics/actions/actions.xml index bdb7eea..9d7ed52 100644 --- a/tools/metrics/actions/actions.xml +++ b/tools/metrics/actions/actions.xml
@@ -16175,6 +16175,15 @@ </description> </action> +<action name="MobileTabGridSelectionShareTabs"> + <owner>mrefaat@chromium.org</owner> + <owner>michaeldo@chromium.org</owner> + <description> + Users in the iOS tab grid used the share button in the selection mode to + share multiple tabs at once. + </description> +</action> + <action name="MobileTabGridSelectRegularPanel"> <owner>edchin@chromium.org</owner> <owner>marq@chromium.org</owner> @@ -16201,6 +16210,14 @@ </description> </action> +<action name="MobileTabGridTabContextMenuSelectTabs"> + <owner>mrefaat@chromium.org</owner> + <owner>michaeldo@chromium.org</owner> + <description> + User in the iOS tab grid used the tab context menu to enter selection mode. + </description> +</action> + <action name="MobileTabGridUndoCloseAllRegularTabs"> <owner>edchin@chromium.org</owner> <owner>marq@chromium.org</owner>
diff --git a/tools/metrics/histograms/enums.xml b/tools/metrics/histograms/enums.xml index 8ca30ff..5d47a964 100644 --- a/tools/metrics/histograms/enums.xml +++ b/tools/metrics/histograms/enums.xml
@@ -1143,8 +1143,8 @@ <enum name="AccuracyTipInteraction"> <int value="0" label="kNoAction"/> - <int value="1" label="kLearnMorePressed"/> - <int value="2" label="kOptOutPressed"/> + <int value="1" label="kLearnMore"/> + <int value="2" label="kOptOut"/> <int value="3" label="kClosed"/> <int value="4" label="kDisabledByExperiment"/> </enum> @@ -28820,6 +28820,7 @@ <int value="1563" label="AUTOTESTPRIVATE_SETSHELFICONPIN"/> <int value="1564" label="SCRIPTING_GETREGISTEREDCONTENTSCRIPTS"/> <int value="1565" label="OS_TELEMETRY_GETVPDINFO"/> + <int value="1566" label="ACCESSIBILITY_PRIVATE_MAGNIFIERCENTERONPOINT"/> </enum> <enum name="ExtensionIconState"> @@ -40859,6 +40860,27 @@ scheduled."/> </enum> +<enum name="Http2WireErrorCodes"> + <summary> + Error codes defined at + https://www.iana.org/assignments/http2-parameters/http2-parameters.xhtml#error-code + </summary> + <int value="0" label="NO_ERROR"/> + <int value="1" label="PROTOCOL_ERROR"/> + <int value="2" label="INTERNAL_ERROR"/> + <int value="3" label="FLOW_CONTROL_ERROR"/> + <int value="4" label="SETTINGS_TIMEOUT"/> + <int value="5" label="STREAM_CLOSED"/> + <int value="6" label="FRAME_SIZE_ERROR"/> + <int value="7" label="REFUSED_STREAM"/> + <int value="8" label="CANCEL"/> + <int value="9" label="COMPRESSION_ERROR"/> + <int value="10" label="CONNECT_ERROR"/> + <int value="11" label="ENHANCE_YOUR_CALM"/> + <int value="12" label="INADEQUATE_SECURITY"/> + <int value="13" label="HTTP_1_1_REQUIRED"/> +</enum> + <enum name="HttpAuthCount"> <int value="0" label="Basic Start"/> <int value="1" label="Basic Reject"/> @@ -49703,6 +49725,8 @@ <int value="460475728" label="wake-on-wifi-packet"/> <int value="461306840" label="AdaptiveButtonInTopToolbarCustomization:disabled"/> + <int value="461523297" + label="UsernameFirstFlowFallbackCrowdsourcing:enabled"/> <int value="461641589" label="WebAppWindowControlsOverlay:disabled"/> <int value="463582989" label="CompositorThreadedScrollbarScrolling:disabled"/> <int value="464226051" label="CrOSComponent:enabled"/> @@ -50199,6 +50223,8 @@ <int value="857445869" label="enable-captive-portal-bypass-proxy"/> <int value="857716462" label="FeedInteractiveRefresh:enabled"/> <int value="859449217" label="MagnifierPanningImprovements:enabled"/> + <int value="859495772" + label="UsernameFirstFlowFallbackCrowdsourcing:disabled"/> <int value="860336036" label="ChromeModernDesign:enabled"/> <int value="862453793" label="TranslateUI2016Q2:enabled"/> <int value="864024033" label="IsolatePrerendersMustProbeOrigin:enabled"/>
diff --git a/tools/metrics/histograms/metadata/android/histograms.xml b/tools/metrics/histograms/metadata/android/histograms.xml index d578707..c03e66d 100644 --- a/tools/metrics/histograms/metadata/android/histograms.xml +++ b/tools/metrics/histograms/metadata/android/histograms.xml
@@ -3160,6 +3160,9 @@ <histogram name="Android.WebView.CustomDefaultVideoPoster" enum="Boolean" expires_after="2021-08-01"> + <obsolete> + Removed Aug 2021. + </obsolete> <owner>torne@chromium.org</owner> <owner>src/android_webview/OWNERS</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/commerce/histograms.xml b/tools/metrics/histograms/metadata/commerce/histograms.xml index 8b517cc0..3b1dd8c 100644 --- a/tools/metrics/histograms/metadata/commerce/histograms.xml +++ b/tools/metrics/histograms/metadata/commerce/histograms.xml
@@ -21,7 +21,20 @@ <variant name="NavigationComplete" summary="completes a navigation."/> </variants> -<histogram name="Commerce.PriceDrops.{LocationIdentifier}.ContainsPrice" +<variants name="TabUsageStatuses"> + <variant name=""> + <obsolete> + Previous histogram didn't differentiate between Stale and Active Tab. + </obsolete> + </variant> + <variant name="ActiveTab" + summary="Tabs between 0 and 1 day since last usage."/> + <variant name="StaleTab" + summary="Tabs between 1 and 90 days since last usage."/> +</variants> + +<histogram + name="Commerce.PriceDrops.{TabUsageStatus}{LocationIdentifier}.ContainsPrice" enum="BooleanContainsPrice" expires_after="2022-06-07"> <owner>davidjm@chromium.org</owner> <owner>ayman@chromium.org</owner> @@ -30,12 +43,14 @@ Records if a page contains a price, as determined by the commerce data obtained to power the price drop feature. This data is acquired when the user finishes navigating to a page. Recorded when the user - {LocationIdentifier}. + {LocationIdentifier}. Recorded for {TabUsageStatus}. </summary> <token key="LocationIdentifier" variants="LocationIdentifiers"/> + <token key="TabUsageStatus" variants="TabUsageStatuses"/> </histogram> -<histogram name="Commerce.PriceDrops.{LocationIdentifier}.ContainsPriceDrop" +<histogram + name="Commerce.PriceDrops.{TabUsageStatus}{LocationIdentifier}.ContainsPriceDrop" enum="BooleanContainsPriceDrop" expires_after="2022-06-07"> <owner>davidjm@chromium.org</owner> <owner>ayman@chromium.org</owner> @@ -45,11 +60,14 @@ previously seen price for the offer. This is determined by the commerce data obtained to power the price drop feature. The data is acquired when the user finishes navigating to a page. Recorded when the user {LocationIdentifier}. + Recorded for {TabUsageStatus}. </summary> <token key="LocationIdentifier" variants="LocationIdentifiers"/> + <token key="TabUsageStatus" variants="TabUsageStatuses"/> </histogram> -<histogram name="Commerce.PriceDrops.{LocationIdentifier}.IsProductDetailPage" +<histogram + name="Commerce.PriceDrops.{TabUsageStatus}{LocationIdentifier}.IsProductDetailPage" enum="BooleanIsProductDetailPage" expires_after="2022-06-07"> <owner>davidjm@chromium.org</owner> <owner>ayman@chromium.org</owner> @@ -58,9 +76,10 @@ Records if a page is a product detail page, as determined by the commerce data obtained to power the price drop feature. This data is acquired when the user finishes navigating to a page. Recorded when the user - {LocationIdentifier}. + {LocationIdentifier}. Recorded for {TabUsageStatus}. </summary> <token key="LocationIdentifier" variants="LocationIdentifiers"/> + <token key="TabUsageStatus" variants="TabUsageStatuses"/> </histogram> </histograms>
diff --git a/tools/metrics/histograms/metadata/custom_tabs/histograms.xml b/tools/metrics/histograms/metadata/custom_tabs/histograms.xml index 34d11c90..793721fc 100644 --- a/tools/metrics/histograms/metadata/custom_tabs/histograms.xml +++ b/tools/metrics/histograms/metadata/custom_tabs/histograms.xml
@@ -247,10 +247,13 @@ </histogram> <histogram name="CustomTabs.ShareOptionLocation" enum="ShareOptionLocation" - expires_after="M94"> + expires_after="M99"> <owner>sophey@chromium.org</owner> <owner>src/components/send_tab_to_self/OWNERS</owner> - <summary>Records the location of the share option in the Custom Tab.</summary> + <summary> + Records the location of the share option in the Custom Tab. Recorded when + the share option is added while the Custom Tab is being constructed. + </summary> </histogram> <histogram name="CustomTabs.SpareWebContents.Status2"
diff --git a/tools/metrics/histograms/metadata/histogram_suffixes_list.xml b/tools/metrics/histograms/metadata/histogram_suffixes_list.xml index 48ee5fd..164e31a 100644 --- a/tools/metrics/histograms/metadata/histogram_suffixes_list.xml +++ b/tools/metrics/histograms/metadata/histogram_suffixes_list.xml
@@ -76,6 +76,18 @@ <affected-histogram name="Signin.DiceMigrationNotReady.Reason"/> </histogram_suffixes> +<histogram_suffixes name="AccuracyTipInteraction" separator="."> + <suffix name="Closed" + label="The Accuracy Tip was closed by close button or pressing ESC"/> + <suffix name="LearnMore" + label="Learn more button within Accuracy Tip was clicked"/> + <suffix name="NoAction" + label="The accuracy tip was closed without user interaction"/> + <suffix name="OptOut" label="Opt-out button within Accuracy Tip was clicked"/> + <affected-histogram name="Privacy.AccuracyTip.AccuracyTipTimeOpen"/> + <affected-histogram name="Privacy.AccuracyTip.NumDialogsShown"/> +</histogram_suffixes> + <histogram_suffixes name="ActiveNetworkState" separator="_"> <suffix name="Offline" label="network manager thinks that the active network is offline"/>
diff --git a/tools/metrics/histograms/metadata/ios/histograms.xml b/tools/metrics/histograms/metadata/ios/histograms.xml index 592a6d5..a4a72fb 100644 --- a/tools/metrics/histograms/metadata/ios/histograms.xml +++ b/tools/metrics/histograms/metadata/ios/histograms.xml
@@ -182,6 +182,17 @@ </summary> </histogram> +<histogram name="IOS.CredentialExtension.KeychainSavePasswordFailureCount" + units="count" expires_after="2022-03-31"> + <owner>javierrobles@chromium.org</owner> + <owner>rkgibson@google.com</owner> + <summary> + The number of times the Credential Extension failed to save a + newly-generated password into the system Keychain since last Chrome + foregrounding. Reported when Chrome is put in foreground. + </summary> +</histogram> + <histogram name="IOS.CredentialExtension.PasswordUseCount" units="count" expires_after="2021-12-11"> <owner>javierrobles@chromium.org</owner> @@ -215,6 +226,17 @@ </summary> </histogram> +<histogram name="IOS.CredentialExtension.SaveCredentialFailureCount" + units="count" expires_after="2022-03-31"> + <owner>javierrobles@chromium.org</owner> + <owner>rkgibson@google.com</owner> + <summary> + The number of times the Credential Extension failed to save a + newly-generated credential to disk since last Chrome foregrounding. Reported + when Chrome is put in foreground. + </summary> +</histogram> + <histogram name="IOS.CredentialExtension.SearchCount" units="count" expires_after="2021-12-11"> <owner>javierrobles@chromium.org</owner> @@ -1222,8 +1244,30 @@ </summary> </histogram> +<histogram name="IOS.TabGrid.Selection.AddToBookmarks" units="Tabs" + expires_after="2022-01-30"> + <owner>mrefaat@chromium.org</owner> + <owner>michaeldo@chromium.org</owner> + <owner>bling-team@google.com</owner> + <summary> + The number of Tab Grid items bookmarked with a single add to bookmarks + operation from the tab grid selection mode. + </summary> +</histogram> + +<histogram name="IOS.TabGrid.Selection.AddToReadingList" units="Tabs" + expires_after="2022-01-30"> + <owner>mrefaat@chromium.org</owner> + <owner>michaeldo@chromium.org</owner> + <owner>bling-team@google.com</owner> + <summary> + The number of Tab Grid items added to reading list with a single add to + reading list operation from the tab grid selection mode. + </summary> +</histogram> + <histogram name="IOS.TabGrid.Selection.CloseTabs" units="Tabs" - expires_after="M95"> + expires_after="2022-01-30"> <owner>mrefaat@chromium.org</owner> <owner>michaeldo@chromium.org</owner> <owner>bling-team@google.com</owner> @@ -1233,6 +1277,17 @@ </summary> </histogram> +<histogram name="IOS.TabGrid.Selection.ShareTabs" units="Tabs" + expires_after="2022-01-30"> + <owner>mrefaat@chromium.org</owner> + <owner>michaeldo@chromium.org</owner> + <owner>bling-team@google.com</owner> + <summary> + The number of Tab Grid items shared with a single share operation from the + tab grid selection mode. + </summary> +</histogram> + <histogram name="IOS.TabSwitcher.PageChangeInteraction" enum="IOSTabSwitcherPageChangeInteraction" expires_after="M99"> <owner>marq@chromium.org</owner>
diff --git a/tools/metrics/histograms/metadata/net/histograms.xml b/tools/metrics/histograms/metadata/net/histograms.xml index 95c542d..60ecc75 100644 --- a/tools/metrics/histograms/metadata/net/histograms.xml +++ b/tools/metrics/histograms/metadata/net/histograms.xml
@@ -5063,6 +5063,15 @@ <summary>Socket connected status in SpdySession::CreateStream.</summary> </histogram> +<histogram name="Net.SpdySession.GoAwayReceived" enum="Http2WireErrorCodes" + expires_after="2022-07-22"> + <owner>bnc@chromium.org</owner> + <owner>src/net/OWNERS</owner> + <summary> + Records the error code value received in each HTTP/2 GOAWAY frame. + </summary> +</histogram> + <histogram name="Net.SpdySession.PushedAndUnclaimedBytes" units="count" expires_after="2022-05-11"> <owner>dschinazi@chromium.org</owner>
diff --git a/tools/metrics/histograms/metadata/optimization/histograms.xml b/tools/metrics/histograms/metadata/optimization/histograms.xml index d760445..6e27f32 100644 --- a/tools/metrics/histograms/metadata/optimization/histograms.xml +++ b/tools/metrics/histograms/metadata/optimization/histograms.xml
@@ -33,7 +33,7 @@ </variants> <histogram base="true" name="OptimizationGuide.ApplyDecision" - enum="OptimizationGuideOptimizationTypeDecision" expires_after="M94"> + enum="OptimizationGuideOptimizationTypeDecision" expires_after="M106"> <owner>sophiechang@chromium.org</owner> <owner>mcrouse@chromium.org</owner> <summary> @@ -56,7 +56,7 @@ </histogram> <histogram name="OptimizationGuide.ClearFetchedHints.StoreAvailable" - units="BooleanAvailable" expires_after="M94"> + units="BooleanAvailable" expires_after="M106"> <owner>mcrouse@chromium.org</owner> <owner>sophiechang@chromium.org</owner> <summary> @@ -66,7 +66,7 @@ </histogram> <histogram name="OptimizationGuide.ClearHostModelFeatures.StoreAvailable" - units="BooleanAvailable" expires_after="M94"> + units="BooleanAvailable" expires_after="M106"> <owner>mcrouse@chromium.org</owner> <owner>sophiechang@chromium.org</owner> <summary> @@ -76,7 +76,7 @@ </histogram> <histogram name="OptimizationGuide.HintCache.HintType.Loaded" - enum="HintCacheStoreEntryType" expires_after="M94"> + enum="HintCacheStoreEntryType" expires_after="M106"> <owner>mcrouse@chromium.org</owner> <owner>sophiechang@chromium.org</owner> <summary> @@ -87,7 +87,7 @@ <histogram name="OptimizationGuide.HintCacheLevelDBStore.LoadMetadataResult" enum="OptimizationGuideHintCacheLevelDBStoreLoadMetadataResult" - expires_after="M94"> + expires_after="M106"> <owner>mcrouse@chromium.org</owner> <owner>sophiechang@chromium.org</owner> <summary> @@ -97,7 +97,7 @@ </histogram> <histogram name="OptimizationGuide.HintCacheLevelDBStore.Status" - enum="OptimizationGuideHintCacheLevelDBStoreStatus" expires_after="M94"> + enum="OptimizationGuideHintCacheLevelDBStoreStatus" expires_after="M106"> <owner>mcrouse@chromium.org</owner> <owner>sophiechang@chromium.org</owner> <summary> @@ -107,7 +107,7 @@ <histogram base="true" name="OptimizationGuide.HintsFetcher.GetHintsRequest.ActiveRequestCanceled" - units="counts" expires_after="M94"> + units="counts" expires_after="M106"> <owner>sophiechang@chromium.org</owner> <owner>mcrouse@chromium.org</owner> <summary> @@ -127,7 +127,7 @@ </histogram> <histogram name="OptimizationGuide.HintsFetcher.GetHintsRequest.HintCount" - units="units" expires_after="M94"> + units="units" expires_after="M106"> <owner>mcrouse@chromium.org</owner> <owner>sophiechang@chromium.org</owner> <summary> @@ -137,7 +137,7 @@ </histogram> <histogram name="OptimizationGuide.HintsFetcher.GetHintsRequest.HostCount" - units="total host count" expires_after="M94"> + units="total host count" expires_after="M106"> <owner>mcrouse@chromium.org</owner> <owner>sophiechang@chromium.org</owner> <summary> @@ -167,7 +167,7 @@ </histogram> <histogram name="OptimizationGuide.HintsFetcher.GetHintsRequest.UrlCount" - units="total url count" expires_after="M94"> + units="total url count" expires_after="M106"> <owner>mcrouse@chromium.org</owner> <owner>sophiechang@chromium.org</owner> <summary> @@ -177,7 +177,7 @@ </histogram> <histogram name="OptimizationGuide.HintsFetcher.RequestStatus.BatchUpdate" - enum="OptimizationGuideHintsFetcherRequestStatus" expires_after="M94"> + enum="OptimizationGuideHintsFetcherRequestStatus" expires_after="M106"> <owner>mcrouse@chromium.org</owner> <owner>sophiechang@chromium.org</owner> <summary> @@ -188,7 +188,7 @@ </histogram> <histogram name="OptimizationGuide.HintsFetcher.RequestStatus.PageNavigation" - enum="OptimizationGuideHintsFetcherRequestStatus" expires_after="M94"> + enum="OptimizationGuideHintsFetcherRequestStatus" expires_after="M106"> <owner>mcrouse@chromium.org</owner> <owner>sophiechang@chromium.org</owner> <summary> @@ -255,7 +255,7 @@ </histogram> <histogram name="OptimizationGuide.HintsManager.ActiveTabUrlsToFetchFor" - units="counts" expires_after="M94"> + units="counts" expires_after="M106"> <owner>sophiechang@chromium.org</owner> <owner>mcrouse@chromium.org</owner> <summary> @@ -268,7 +268,7 @@ <histogram name="OptimizationGuide.HintsManager.ConcurrentPageNavigationFetches" - units="counts" expires_after="M94"> + units="counts" expires_after="M106"> <owner>sophiechang@chromium.org</owner> <owner>mcrouse@chromium.org</owner> <summary> @@ -280,7 +280,7 @@ <histogram name="OptimizationGuide.HintsManager.PageNavigationHintsReturnedBeforeDataFlushed" - units="BooleanStored" expires_after="M94"> + units="BooleanStored" expires_after="M106"> <owner>sophiechang@chromium.org</owner> <owner>mcrouse@chromium.org</owner> <summary> @@ -304,7 +304,7 @@ </histogram> <histogram name="OptimizationGuide.IsPredictionModelValid" units="BooleanValid" - expires_after="M94"> + expires_after="M106"> <owner>mcrouse@chromium.org</owner> <owner>sophiechang@chromium.org</owner> <summary> @@ -329,7 +329,7 @@ <histogram name="OptimizationGuide.ModelExecutor.ModelAvailableToLoad.{OptimizationTarget}" - enum="BooleanAvailable" expires_after="M94"> + enum="BooleanAvailable" expires_after="M106"> <owner>robertogden@chromium.org</owner> <owner>chrome-intelligence-core@google.com</owner> <summary> @@ -346,7 +346,7 @@ <histogram name="OptimizationGuide.ModelExecutor.ModelLoadingDuration.{OptimizationTarget}" - units="ms" expires_after="M94"> + units="ms" expires_after="M106"> <owner>robertogden@chromium.org</owner> <owner>chrome-intelligence-core@google.com</owner> <summary> @@ -359,7 +359,7 @@ <histogram name="OptimizationGuide.ModelExecutor.ModelLoadingResult.{OptimizationTarget}" - enum="ModelExecutorLoadingState" expires_after="M94"> + enum="ModelExecutorLoadingState" expires_after="M106"> <owner>mcrouse@chromium.org</owner> <owner>chrome-intelligence-core@google.com</owner> <summary> @@ -387,7 +387,7 @@ <histogram name="OptimizationGuide.ModelExecutor.TaskExecutionLatency.{OptimizationTarget}" - units="ms" expires_after="M94"> + units="ms" expires_after="M106"> <owner>mcrouse@chromium.org</owner> <owner>chrome-intelligence-core@google.com</owner> <summary> @@ -400,7 +400,7 @@ <histogram name="OptimizationGuide.ModelExecutor.TaskSchedulingLatency.{OptimizationTarget}" - units="ms" expires_after="M94"> + units="ms" expires_after="M106"> <owner>robertogden@chromium.org</owner> <owner>chrome-intelligence-core@google.com</owner> <summary> @@ -413,7 +413,7 @@ <histogram name="OptimizationGuide.ModelExecutor.TimeSincePreviousRun.{OptimizationTarget}" - units="ms" expires_after="M94"> + units="ms" expires_after="M106"> <owner>robertogden@chromium.org</owner> <owner>chrome-intelligence-core@google.com</owner> <summary> @@ -424,7 +424,7 @@ </histogram> <histogram name="OptimizationGuide.ModelFilesVerified.{OptimizationTarget}" - enum="BooleanValid" expires_after="M94"> + enum="BooleanValid" expires_after="M106"> <owner>robertogden@chromium.org</owner> <owner>chrome-intelligence-core@google.com</owner> <summary> @@ -449,7 +449,7 @@ </histogram> <histogram name="OptimizationGuide.OptimizationHintsComponent.MajorVersion" - units="major version number" expires_after="M94"> + units="major version number" expires_after="M106"> <owner>sophiechang@chromium.org</owner> <owner>mcrouse@chromium.org</owner> <summary> @@ -461,7 +461,7 @@ <histogram name="OptimizationGuide.PageContentAnnotationsService.ContentAnnotated" - enum="BooleanAnnotated" expires_after="M94"> + enum="BooleanAnnotated" expires_after="M106"> <owner>sophiechang@chromium.org</owner> <owner>mcrouse@chromium.org</owner> <summary> @@ -474,7 +474,7 @@ <histogram name="OptimizationGuide.PageContentAnnotationsService.ContentAnnotationsStorageStatus" enum="OptimizationGuidePageContentAnnotationsStorageStatus" - expires_after="M94"> + expires_after="M106"> <owner>sophiechang@chromium.org</owner> <owner>mcrouse@chromium.org</owner> <summary> @@ -486,7 +486,7 @@ <histogram name="OptimizationGuide.PageContentAnnotationsService.ModelAvailable" - enum="BooleanAvailable" expires_after="M94"> + enum="BooleanAvailable" expires_after="M106"> <owner>robertogden@chromium.org</owner> <owner>chrome-intelligence-core@google.com</owner> <summary> @@ -497,7 +497,7 @@ </histogram> <histogram name="OptimizationGuide.PageTextDump.AbandonedRequests" - units="count" expires_after="M94"> + units="count" expires_after="M106"> <owner>robertogden@chromium.org</owner> <owner>chrome-intelligence-core@google.com</owner> <summary> @@ -509,7 +509,7 @@ <histogram name="OptimizationGuide.PageTextDump.FrameDumpLength.{PageTextDumpEvent}" - units="bytes" expires_after="M94"> + units="bytes" expires_after="M106"> <owner>robertogden@chromium.org</owner> <owner>chrome-intelligence-core@google.com</owner> <summary> @@ -528,7 +528,7 @@ <histogram name="OptimizationGuide.PageTextDump.OutstandingRequests.DidFinishLoad" - units="count" expires_after="M94"> + units="count" expires_after="M106"> <owner>robertogden@chromium.org</owner> <owner>chrome-intelligence-core@google.com</owner> <summary> @@ -538,7 +538,7 @@ <histogram name="OptimizationGuide.PageTextDump.TimeUntilFrameDisconnected.{PageTextDumpEvent}" - units="ms" expires_after="M94"> + units="ms" expires_after="M106"> <owner>robertogden@chromium.org</owner> <owner>chrome-intelligence-core@google.com</owner> <summary> @@ -557,7 +557,7 @@ <histogram name="OptimizationGuide.PageTextDump.TimeUntilFrameDumpCompleted.{PageTextDumpEvent}" - units="ms" expires_after="M94"> + units="ms" expires_after="M106"> <owner>robertogden@chromium.org</owner> <owner>chrome-intelligence-core@google.com</owner> <summary> @@ -576,7 +576,7 @@ <histogram name="OptimizationGuide.PredictionManager.DownloadServiceAvailabilityBlockedFetch" - units="BooleanBlocked" expires_after="M94"> + units="BooleanBlocked" expires_after="M106"> <owner>sophiechang@chromium.org</owner> <owner>mcrouse@chromium.org</owner> <summary> @@ -588,7 +588,7 @@ <histogram name="OptimizationGuide.PredictionManager.HasHostModelFeaturesForHost" - enum="Boolean" expires_after="M94"> + enum="Boolean" expires_after="M106"> <owner>mcrouse@chromium.org</owner> <owner>sophiechang@chromium.org</owner> <summary> @@ -598,7 +598,7 @@ </histogram> <histogram name="OptimizationGuide.PredictionManager.HostModelFeaturesMapSize" - units="total host count" expires_after="M94"> + units="total host count" expires_after="M106"> <owner>mcrouse@chromium.org</owner> <owner>sophiechang@chromium.org</owner> <summary> @@ -609,7 +609,7 @@ </histogram> <histogram name="OptimizationGuide.PredictionManager.IsDownloadUrlValid" - units="BooleanValid" expires_after="M94"> + units="BooleanValid" expires_after="M106"> <owner>sophiechang@chromium.org</owner> <owner>mcrouse@chromium.org</owner> <summary> @@ -620,7 +620,7 @@ <histogram base="true" name="OptimizationGuide.PredictionManager.ModelTypeChanged" - units="BooleanChanged" expires_after="M94"> + units="BooleanChanged" expires_after="M106"> <owner>sophiechang@chromium.org</owner> <owner>mcrouse@chromium.org</owner> <summary> @@ -632,7 +632,7 @@ <histogram name="OptimizationGuide.PredictionModelDownloadManager.DownloadStatus" - enum="OptimizationGuidePredictionModelDownloadStatus" expires_after="M94"> + enum="OptimizationGuidePredictionModelDownloadStatus" expires_after="M106"> <owner>sophiechang@chromium.org</owner> <owner>mcrouse@chromium.org</owner> <summary> @@ -643,7 +643,7 @@ <histogram name="OptimizationGuide.PredictionModelDownloadManager.DownloadSucceeded" - units="BooleanSuccess" expires_after="M94"> + units="BooleanSuccess" expires_after="M106"> <owner>sophiechang@chromium.org</owner> <owner>mcrouse@chromium.org</owner> <summary> @@ -654,7 +654,7 @@ <histogram name="OptimizationGuide.PredictionModelDownloadManager.ReplaceFileError" - enum="PlatformFileError" expires_after="M94"> + enum="PlatformFileError" expires_after="M106"> <owner>mcrouse@chromium.org</owner> <owner>sophiechang@chromium.org</owner> <summary> @@ -667,7 +667,7 @@ <histogram base="true" name="OptimizationGuide.PredictionModelEvaluationLatency" units="ms" - expires_after="M94"> + expires_after="M106"> <owner>mcrouse@chromium.org</owner> <owner>sophiechang@chromium.org</owner> <summary> @@ -679,7 +679,7 @@ </histogram> <histogram name="OptimizationGuide.PredictionModelExpired" - units="BooleanExpired" expires_after="M94"> + units="BooleanExpired" expires_after="M106"> <owner>sophiechang@chromium.org</owner> <owner>mcrouse@chromium.org</owner> <summary> @@ -720,7 +720,7 @@ <histogram name="OptimizationGuide.PredictionModelFetcher.GetModelsResponse.NetErrorCode" - enum="NetErrorCodes" expires_after="M94"> + enum="NetErrorCodes" expires_after="M106"> <owner>mcrouse@chromium.org</owner> <owner>sophiechang@chromium.org</owner> <summary> @@ -731,7 +731,7 @@ <histogram name="OptimizationGuide.PredictionModelFetcher.GetModelsResponse.Status" - enum="HttpResponseCode" expires_after="M94"> + enum="HttpResponseCode" expires_after="M106"> <owner>mcrouse@chromium.org</owner> <owner>sophiechang@chromium.org</owner> <summary> @@ -741,7 +741,7 @@ </histogram> <histogram name="OptimizationGuide.PredictionModelLoadedVersion" - units="version number" expires_after="M94"> + units="version number" expires_after="M106"> <owner>mcrouse@chromium.org</owner> <owner>sophiechang@chromium.org</owner> <summary> @@ -753,7 +753,7 @@ <histogram name="OptimizationGuide.PredictionModelStore.HostModelFeaturesLoadMetadataResult" - enum="BooleanLoaded" expires_after="M94"> + enum="BooleanLoaded" expires_after="M106"> <owner>mcrouse@chromium.org</owner> <owner>sophiechang@chromium.org</owner> <summary> @@ -763,7 +763,7 @@ </histogram> <histogram name="OptimizationGuide.PredictionModelUpdateVersion" - units="version number" expires_after="M94"> + units="version number" expires_after="M106"> <owner>mcrouse@chromium.org</owner> <owner>sophiechang@chromium.org</owner> <summary> @@ -773,7 +773,7 @@ </histogram> <histogram name="OptimizationGuide.PredictionModelValidationLatency" units="ms" - expires_after="M94"> + expires_after="M106"> <owner>mcrouse@chromium.org</owner> <owner>sophiechang@chromium.org</owner> <summary> @@ -796,7 +796,7 @@ </histogram> <histogram name="OptimizationGuide.ProcessingComponentAtShutdown" - enum="BooleanYesNo" expires_after="M94"> + enum="BooleanYesNo" expires_after="M106"> <owner>mcrouse@chromium.org</owner> <owner>sophiechang@chromium.org</owner> <summary> @@ -806,7 +806,7 @@ </histogram> <histogram name="OptimizationGuide.PushNotifications.CachedNotificationCount" - units="count" expires_after="M94"> + units="count" expires_after="M106"> <owner>robertogden@chromium.org</owner> <owner>chrome-intelligence-core@google.com</owner> <summary> @@ -818,7 +818,7 @@ <histogram name="OptimizationGuide.PushNotifications.CachedNotificationsHandledSuccessfully" - enum="BooleanSuccess" expires_after="M94"> + enum="BooleanSuccess" expires_after="M106"> <owner>robertogden@chromium.org</owner> <owner>chrome-intelligence-core@google.com</owner> <summary> @@ -828,7 +828,7 @@ </histogram> <histogram name="OptimizationGuide.PushNotifications.DidOverflow" - enum="Boolean" expires_after="M94"> + enum="Boolean" expires_after="M106"> <owner>robertogden@chromium.org</owner> <owner>chrome-intelligence-core@google.com</owner> <summary> @@ -838,7 +838,7 @@ </histogram> <histogram name="OptimizationGuide.PushNotifications.GotPushNotification" - enum="Boolean" expires_after="M94"> + enum="Boolean" expires_after="M106"> <owner>robertogden@chromium.org</owner> <owner>chrome-intelligence-core@google.com</owner> <summary>Records a true sample for every incoming push notification.</summary> @@ -846,7 +846,7 @@ <histogram name="OptimizationGuide.PushNotifications.PushNotificationHandledSuccessfully" - enum="BooleanSuccess" expires_after="M94"> + enum="BooleanSuccess" expires_after="M106"> <owner>robertogden@chromium.org</owner> <owner>chrome-intelligence-core@google.com</owner> <summary> @@ -856,7 +856,7 @@ </histogram> <histogram name="OptimizationGuide.PushNotifications.ReadCacheResult" - enum="OptimizationGuideReadCacheResult" expires_after="M94"> + enum="OptimizationGuideReadCacheResult" expires_after="M106"> <owner>robertogden@chromium.org</owner> <owner>chrome-intelligence-core@google.com</owner> <summary> @@ -880,7 +880,7 @@ <histogram name="OptimizationGuide.ShouldTargetNavigation.PredictionModelStatus" - enum="OptimizationGuidePredictionManagerModelStatus" expires_after="M94"> + enum="OptimizationGuidePredictionManagerModelStatus" expires_after="M106"> <owner>mcrouse@chromium.org</owner> <owner>sophiechang@chromium.org</owner> <summary> @@ -892,7 +892,7 @@ </histogram> <histogram base="true" name="OptimizationGuide.TargetDecision" - enum="OptimizationGuideOptimizationTargetDecision" expires_after="M94"> + enum="OptimizationGuideOptimizationTargetDecision" expires_after="M106"> <owner>sophiechang@chromium.org</owner> <owner>mcrouse@chromium.org</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/others/histograms.xml b/tools/metrics/histograms/metadata/others/histograms.xml index 5f3474df..09850a5 100644 --- a/tools/metrics/histograms/metadata/others/histograms.xml +++ b/tools/metrics/histograms/metadata/others/histograms.xml
@@ -17870,7 +17870,7 @@ </histogram> <histogram name="UpgradeDetector.DaysBeforeUpgrade" units="days" - expires_after="2022-01-02"> + expires_after="2022-05-31"> <owner>emshack@chromium.org</owner> <owner>pbos@chromium.org</owner> <summary> @@ -17883,7 +17883,7 @@ </histogram> <histogram name="UpgradeDetector.HoursBeforeUpgrade" units="hours" - expires_after="M94"> + expires_after="2022-05-31"> <owner>emshack@chromium.org</owner> <owner>pbos@chromium.org</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/safe_browsing/histograms.xml b/tools/metrics/histograms/metadata/safe_browsing/histograms.xml index ce9176a..39419c50 100644 --- a/tools/metrics/histograms/metadata/safe_browsing/histograms.xml +++ b/tools/metrics/histograms/metadata/safe_browsing/histograms.xml
@@ -925,6 +925,30 @@ </histogram> <histogram + name="SafeBrowsing.NavigationObserver.DroppedReferrerChainEntries.ClientRedirect" + units="units" expires_after="2022-07-23"> + <owner>bdea@chromium.org</owner> + <owner>chrome-safebrowsing-alerts@google.com</owner> + <summary> + Logs the number of extra client redirect referrer chain entries that were + cleared. This is logged when the referrer chain is being created for Safe + Browsing pings (i.e. Phishguard, CSD). + </summary> +</histogram> + +<histogram + name="SafeBrowsing.NavigationObserver.DroppedReferrerChainEntries.RecentNavigation" + units="units" expires_after="2022-07-23"> + <owner>bdea@chromium.org</owner> + <owner>chrome-safebrowsing-alerts@google.com</owner> + <summary> + Logs the number of extra recent navigation (non-user gestured) referrer + chain entries that were cleared. This is logged when the referrer chain is + being created for Safe Browsing pings (i.e. Phishguard, CSD). + </summary> +</histogram> + +<histogram name="SafeBrowsing.NavigationObserver.IdentifyReferrerChainByEventURLTime" units="ms" expires_after="2022-01-23"> <owner>xinghuilu@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 610e25f..53d6dbf 100644 --- a/tools/perf/core/perfetto_binary_roller/binary_deps.json +++ b/tools/perf/core/perfetto_binary_roller/binary_deps.json
@@ -1,16 +1,16 @@ { "trace_processor_shell": { "win": { - "hash": "f867daebd5d6e2316a152f243a699e96da699c65", - "remote_path": "perfetto_binaries/trace_processor_shell/win/5d5769f0b54a2a505a62194493f1047dc3b686d1/trace_processor_shell.exe" + "hash": "dfe3ae9820abd756129c53fc0ec7f50c0851723a", + "remote_path": "perfetto_binaries/trace_processor_shell/win/70e408c9bc8610ab9a8484b2ed91461d8416166e/trace_processor_shell.exe" }, "mac": { "hash": "e7000eeeefed60f263b77eea1156606a18304379", - "remote_path": "perfetto_binaries/trace_processor_shell/mac/5d5769f0b54a2a505a62194493f1047dc3b686d1/trace_processor_shell" + "remote_path": "perfetto_binaries/trace_processor_shell/mac/70e408c9bc8610ab9a8484b2ed91461d8416166e/trace_processor_shell" }, "linux": { "hash": "672ed966e2e8072a7d6322367ac35c5fedd1ff9f", - "remote_path": "perfetto_binaries/trace_processor_shell/linux/5d5769f0b54a2a505a62194493f1047dc3b686d1/trace_processor_shell" + "remote_path": "perfetto_binaries/trace_processor_shell/linux/70e408c9bc8610ab9a8484b2ed91461d8416166e/trace_processor_shell" } }, "power_profile.sql": {
diff --git a/tools/traffic_annotation/summary/annotations.xml b/tools/traffic_annotation/summary/annotations.xml index cbdcd11..60531d2 100644 --- a/tools/traffic_annotation/summary/annotations.xml +++ b/tools/traffic_annotation/summary/annotations.xml
@@ -58,9 +58,7 @@ <item id="cloud_print" added_in_milestone="65" hash_code="111712433" type="2" content_hash_code="60926140" os_list="linux,windows" semantics_fields="1,5" policy_fields="-1,3,4" file_path="chrome/service/cloud_print/cloud_print_url_fetcher.cc"/> <item id="cloud_print_backend" added_in_milestone="62" hash_code="71578042" type="1" second_id="111712433" content_hash_code="85425333" os_list="linux,windows" semantics_fields="2,3,4" file_path="chrome/service/cloud_print/cloud_print_proxy_backend.cc"/> <item id="cloud_print_credential_update" added_in_milestone="66" hash_code="137420486" type="0" content_hash_code="1179808" os_list="linux,windows" file_path="chrome/service/cloud_print/cloud_print_proxy_backend.cc"/> - <item id="cloud_print_privet_register" added_in_milestone="62" hash_code="24978481" type="0" content_hash_code="131359002" os_list="linux,windows" file_path="chrome/browser/printing/cloud_print/gcd_api_flow_impl.cc"/> <item id="cloud_print_proxy" added_in_milestone="62" hash_code="50859288" type="1" second_id="111712433" content_hash_code="90868083" os_list="linux,windows" semantics_fields="2,3,4" file_path="chrome/service/cloud_print/cloud_print_proxy.cc"/> - <item id="cloud_print_search" added_in_milestone="62" hash_code="132055347" type="0" content_hash_code="123783474" os_list="linux,windows" file_path="chrome/browser/printing/cloud_print/gcd_api_flow_impl.cc"/> <item id="cloud_speech_recognition" added_in_milestone="85" hash_code="61001455" type="0" content_hash_code="114921835" os_list="linux,windows" file_path="chrome/services/speech/cloud_speech_recognition_client.cc"/> <item id="content_hash_verification_job" added_in_milestone="62" hash_code="64733114" type="0" content_hash_code="127912411" os_list="linux,windows" file_path="extensions/browser/content_hash_fetcher.cc"/> <item id="content_resource_fetcher" added_in_milestone="63" hash_code="70796791" type="0" deprecated="2017-09-16" content_hash_code="135648626" file_path=""/> @@ -257,7 +255,6 @@ <item id="previews_litepage_prober" added_in_milestone="78" hash_code="33813109" type="0" deprecated="2020-04-23" content_hash_code="52572789" file_path="chrome/browser/previews/previews_lite_page_redirect_decider.cc"/> <item id="previews_prober" added_in_milestone="77" hash_code="41010697" type="0" deprecated="2019-07-24" content_hash_code="51581107" file_path=""/> <item id="printer_job_handler" added_in_milestone="62" hash_code="67638271" type="1" second_id="111712433" content_hash_code="75712693" os_list="linux,windows" semantics_fields="2,3,4" file_path="chrome/service/cloud_print/printer_job_handler.cc"/> - <item id="privet_http_impl" added_in_milestone="62" hash_code="71251498" type="0" content_hash_code="107348604" os_list="linux,windows" file_path="chrome/browser/printing/cloud_print/privet_http_impl.cc"/> <item id="profile_avatar" added_in_milestone="62" hash_code="51164680" type="0" content_hash_code="113550845" os_list="linux,windows" file_path="chrome/browser/profiles/profile_avatar_downloader.cc"/> <item id="profile_resetter_upload" added_in_milestone="62" hash_code="105330607" type="0" content_hash_code="129329171" os_list="linux,windows" file_path="chrome/browser/profile_resetter/reset_report_uploader.cc"/> <item id="promo_service" added_in_milestone="72" hash_code="67052219" type="0" content_hash_code="32939033" os_list="linux,windows" file_path="chrome/browser/new_tab_page/promos/promo_service.cc"/>
diff --git a/ui/android/java/res/values/color_palette.xml b/ui/android/java/res/values/color_palette.xml index 238acba..91e8c78 100644 --- a/ui/android/java/res/values/color_palette.xml +++ b/ui/android/java/res/values/color_palette.xml
@@ -29,6 +29,7 @@ <color name="baseline_neutral_0_with_neutral_600_alpha_20_with_primary_600_2" tools:ignore="UnusedResources">#DADBDE</color> <color name="baseline_neutral_50">#F2F2F2</color> <color name="baseline_neutral_100">#E3E3E3</color> + <color name="baseline_neutral_100_alpha_10">#19E3E3E3</color> <color name="baseline_neutral_100_alpha_12">#1EE3E3E3</color> <color name="baseline_neutral_100_alpha_38">#61E3E3E3</color> <color name="baseline_neutral_200">#C7C7C7</color> @@ -41,6 +42,7 @@ <color name="baseline_neutral_800">#303030</color> <color name="baseline_neutral_800_alpha_38">#61303030</color> <color name="baseline_neutral_900">#1F1F1F</color> + <color name="baseline_neutral_900_alpha_10">#191F1F1F</color> <color name="baseline_neutral_900_alpha_12">#1E1F1F1F</color> <color name="baseline_neutral_900_alpha_38">#611F1F1F</color> <color name="baseline_neutral_900_with_neutral_100_alpha_38">#696969</color>
diff --git a/ui/android/java/res/values/semantic_colors_non_adaptive.xml b/ui/android/java/res/values/semantic_colors_non_adaptive.xml index c93bc5b..46245de 100644 --- a/ui/android/java/res/values/semantic_colors_non_adaptive.xml +++ b/ui/android/java/res/values/semantic_colors_non_adaptive.xml
@@ -121,9 +121,10 @@ <!-- Same as ?attr/colorOnSurfaceVariant. --> <color name="default_control_color_normal_light" tools:ignore="UnusedResources">@color/baseline_neutral_variant_700</color> <color name="default_control_color_normal_dark" tools:ignore="UnusedResources">@color/baseline_neutral_variant_200</color> - <!-- TODO(https://crbug/1216642): Figure out how to route this correctly. --> - <color name="default_control_color_highlight_light" tools:ignore="UnusedResources">@color/baseline_neutral_900</color> - <color name="default_control_color_highlight_dark" tools:ignore="UnusedResources">@color/baseline_neutral_100</color> + <!-- TODO(https://crbug/1216642): Rework to route through + ?attr/colorOnSurface with alpha. --> + <color name="default_control_color_highlight_light" tools:ignore="UnusedResources">@color/baseline_neutral_900_alpha_10</color> + <color name="default_control_color_highlight_dark" tools:ignore="UnusedResources">@color/baseline_neutral_100_alpha_10</color> <!-- Filled Button --> <color name="filled_button_bg_color_dark">@color/modern_blue_600</color>
diff --git a/ui/events/ozone/evdev/event_device_info.cc b/ui/events/ozone/evdev/event_device_info.cc index cc2f4f6..bf56271 100644 --- a/ui/events/ozone/evdev/event_device_info.cc +++ b/ui/events/ozone/evdev/event_device_info.cc
@@ -38,11 +38,11 @@ {0x045e, 0x082a}, // Microsoft Pro IntelliMouse {0x045e, 0x082f}, // Microsoft Bluetooth Mouse {0x045e, 0x0b05}, // Xbox One Elite Series 2 gamepad - {0x046d, 0x4069}, // Logitech MX Master 2S (Unifying) + {0x046d, 0x4069}, // Logitech MX Master 2S (Unifying) // nocheck {0x046d, 0xb00d}, // Logitech T630 Ultrathin {0x046d, 0xb011}, // Logitech M558 {0x046d, 0xb016}, // Logitech M535 - {0x046d, 0xb019}, // Logitech MX Master 2S (Bluetooth) + {0x046d, 0xb019}, // Logitech MX Master 2S (Bluetooth) // nocheck {0x046d, 0xb503}, // Logitech Spotlight Presentation Remote (Bluetooth) {0x046d, 0xc093}, // Logitech M500s {0x046d, 0xc53e}, // Logitech Spotlight Presentation Remote (USB dongle) @@ -602,7 +602,7 @@ } kUSBInternalDevices[] = { {0x18d1, 0x502b}, // Google, Hammer PID (soraka) {0x18d1, 0x5030}, // Google, Whiskers PID (nocturne) - {0x18d1, 0x503c}, // Google, Masterball PID (krane) + {0x18d1, 0x503c}, // Google, Masterball PID (krane) // nocheck {0x18d1, 0x503d}, // Google, Magnemite PID (kodama) {0x18d1, 0x5044}, // Google, Moonball PID (kakadu) {0x18d1, 0x504c}, // Google, Zed PID (coachz)
diff --git a/ui/views/BUILD.gn b/ui/views/BUILD.gn index 64ce9a8c..f6050d1 100644 --- a/ui/views/BUILD.gn +++ b/ui/views/BUILD.gn
@@ -1090,6 +1090,7 @@ sources = [ "accessible_pane_view_unittest.cc", + "animation/animation_builder_unittest.cc", "animation/bounds_animator_unittest.cc", "animation/bubble_slide_animator_unittest.cc", "animation/compositor_animation_runner_unittest.cc",
diff --git a/ui/views/animation/animation_builder.cc b/ui/views/animation/animation_builder.cc index 0b8e9fd..29e596a 100644 --- a/ui/views/animation/animation_builder.cc +++ b/ui/views/animation/animation_builder.cc
@@ -4,88 +4,82 @@ #include "ui/views/animation/animation_builder.h" -#include <utility> - #include "ui/compositor/layer.h" -#include "ui/compositor/layer_animation_element.h" #include "ui/compositor/layer_animation_sequence.h" #include "ui/compositor/layer_animator.h" +namespace { +constexpr auto kDefaultDuration = base::TimeDelta::FromMilliseconds(150); +} // namespace + namespace views { AnimationBuilder::AnimationBuilder() = default; AnimationBuilder::~AnimationBuilder() { + // Collect all animations of a view into one vector so we can start them + // together. + std::map<View*, std::vector<ui::LayerAnimationSequence*>> all_animations; for (auto& animation : animation_sequences_) { - View* view = animation.first; + // TODO(elainechien): Change AnimationKey to a struct to avoid this + // confusing syntax. + View* view = animation.first.first; if (!view->layer()) view->SetPaintToLayer(); - std::vector<ui::LayerAnimationSequence*> sequences; - for (auto& s : animation.second) { - sequences.push_back(s.release()); - } - view->layer()->GetAnimator()->StartTogether(sequences); + for (auto& s : animation.second) + all_animations[view].push_back(s.release()); } + for (auto& a : all_animations) + a.first->layer()->GetAnimator()->StartTogether(a.second); } AnimationBuilder& AnimationBuilder::SetDuration(base::TimeDelta duration) { - if (in_sequence_) - old_duration_ = duration_; duration_ = duration; return *this; } AnimationBuilder& AnimationBuilder::SetOpacity(View* view, float target_opacity) { - // Create an entry if it doesn't exist. - if (animation_sequences_.find(view) == animation_sequences_.end()) - CreateNewEntry(view); - - AddAnimation(view, ui::LayerAnimationElement::CreateOpacityElement( - target_opacity, duration_)); + AnimationKey key = {view, ui::LayerAnimationElement::OPACITY}; + AddAnimation(key, ui::LayerAnimationElement::CreateOpacityElement( + target_opacity, duration_)); return *this; } AnimationBuilder& AnimationBuilder::SetRoundedCorners( View* view, gfx::RoundedCornersF& rounded_corners) { - // Create an entry if it doesn't exist. - if (animation_sequences_.find(view) == animation_sequences_.end()) - CreateNewEntry(view); - - AddAnimation(view, ui::LayerAnimationElement::CreateRoundedCornersElement( - rounded_corners, duration_)); + AnimationKey key = {view, ui::LayerAnimationElement::ROUNDED_CORNERS}; + AddAnimation(key, ui::LayerAnimationElement::CreateRoundedCornersElement( + rounded_corners, duration_)); return *this; } AnimationBuilder& AnimationBuilder::Repeat() { // Go through all empty sequences added in StartSequence() and set the correct // repeating behavior. - if (in_sequence_) { - is_sequence_repeating_ = true; - for (auto& animation : animation_sequences_) { - animation_sequences_[animation.first].back()->set_is_repeating( - is_sequence_repeating_); - } + is_sequence_repeating_ = true; + for (auto& animation : animation_sequences_) { + animation_sequences_[animation.first].back()->set_is_repeating( + is_sequence_repeating_); } return *this; } -AnimationBuilder& AnimationBuilder::StartSequence() { - in_sequence_ = true; - // Add an empty sequence for all existing views. +AnimationBuilder& AnimationBuilder::NewSequence() { + // Add an empty sequence for all existing views. If the same property is + // animated at the same time in different sequences PreemptionStrategy will + // determine how the animations are replaced. for (auto& animation : animation_sequences_) { - std::unique_ptr<ui::LayerAnimationSequence> new_sequence = - std::make_unique<ui::LayerAnimationSequence>(); + auto new_sequence = std::make_unique<ui::LayerAnimationSequence>(); animation_sequences_[animation.first].push_back(std::move(new_sequence)); } return *this; } AnimationBuilder& AnimationBuilder::EndSequence() { - in_sequence_ = false; is_sequence_repeating_ = false; - duration_ = old_duration_; + duration_ = kDefaultDuration; // Remove sequences that were not added to. for (auto& animation : animation_sequences_) { if (animation_sequences_[animation.first].back()->size() == 0) { @@ -95,31 +89,21 @@ return *this; } -void AnimationBuilder::CreateNewEntry(View* view) { - animation_sequences_[view] = - std::vector<std::unique_ptr<ui::LayerAnimationSequence>>(); - if (in_sequence_) { - // New empty sequence has not been added in StartSequence yet - std::unique_ptr<ui::LayerAnimationSequence> new_sequence = - std::make_unique<ui::LayerAnimationSequence>(); - new_sequence->set_is_repeating(is_sequence_repeating_); - animation_sequences_[view].push_back(std::move(new_sequence)); - } +void AnimationBuilder::CreateNewEntry(const AnimationKey& key) { + auto new_sequence = std::make_unique<ui::LayerAnimationSequence>(); + new_sequence->set_is_repeating(is_sequence_repeating_); + animation_sequences_[key].push_back(std::move(new_sequence)); } +// TODO(elainechien): Add a DCHECK to make sure in one block we do not add two +// different property changes on the same view. void AnimationBuilder::AddAnimation( - View* view, + const AnimationKey& key, std::unique_ptr<ui::LayerAnimationElement> element) { - if (in_sequence_) { - // Add to existing sequence so that these animations are done sequentially - animation_sequences_[view].back()->AddElement(std::move(element)); - } else { - // Create a new sequence with one element - std::unique_ptr<ui::LayerAnimationSequence> new_sequence = - std::make_unique<ui::LayerAnimationSequence>(); - new_sequence->AddElement(std::move(element)); - animation_sequences_[view].push_back(std::move(new_sequence)); - } + // Create an entry if it doesn't exist. + if (animation_sequences_.find(key) == animation_sequences_.end()) + CreateNewEntry(key); + animation_sequences_[key].back()->AddElement(std::move(element)); } } // namespace views
diff --git a/ui/views/animation/animation_builder.h b/ui/views/animation/animation_builder.h index e406a7ac..d2611ee 100644 --- a/ui/views/animation/animation_builder.h +++ b/ui/views/animation/animation_builder.h
@@ -7,8 +7,10 @@ #include <map> #include <memory> +#include <utility> #include <vector> +#include "ui/compositor/layer_animation_element.h" #include "ui/views/view.h" #include "ui/views/views_export.h" @@ -34,23 +36,27 @@ AnimationBuilder& SetRoundedCorners(views::View* view, gfx::RoundedCornersF& rounded_corners); - // No effect if called before StartSequence(); + // No effect if called before NewSequence(); AnimationBuilder& Repeat(); - // Currently does not support nested sequences - AnimationBuilder& StartSequence(); + AnimationBuilder& NewSequence(); AnimationBuilder& EndSequence(); private: - void CreateNewEntry(View* view); - void AddAnimation(View* view, + // We may want to change this to our own struct. + using AnimationKey = + std::pair<View*, ui::LayerAnimationElement::AnimatableProperty>; + + void CreateNewEntry(const AnimationKey& key); + void AddAnimation(const AnimationKey& key, std::unique_ptr<ui::LayerAnimationElement> element); - std::map<View*, std::vector<std::unique_ptr<ui::LayerAnimationSequence>>> + std::map<AnimationKey, + std::vector<std::unique_ptr<ui::LayerAnimationSequence>>> animation_sequences_; - bool in_sequence_ = false; - bool is_sequence_repeating_ = false; + base::TimeDelta duration_ = base::TimeDelta::FromSeconds(1); - base::TimeDelta old_duration_; + + bool is_sequence_repeating_ = false; }; } // namespace views
diff --git a/ui/views/animation/animation_builder_unittest.cc b/ui/views/animation/animation_builder_unittest.cc new file mode 100644 index 0000000..88836a7 --- /dev/null +++ b/ui/views/animation/animation_builder_unittest.cc
@@ -0,0 +1,106 @@ +// Copyright 2021 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "ui/views/animation/animation_builder.h" + +#include "testing/gtest/include/gtest/gtest.h" +#include "ui/compositor/layer.h" +#include "ui/compositor/layer_animator.h" +#include "ui/compositor/scoped_animation_duration_scale_mode.h" +#include "ui/compositor/test/layer_animator_test_controller.h" +#include "ui/compositor/test/test_layer_animation_delegate.h" +#include "ui/gfx/geometry/rounded_corners_f.h" +#include "ui/views/test/views_test_base.h" +#include "ui/views/view.h" + +namespace views { + +class AnimationBuilderTest : public ViewsTestBase { + public: + AnimationBuilderTest() = default; + + void SetUp() override { + ViewsTestBase::SetUp(); + // Animation durations are set to zero in ViewsTestBase::SetUp. Set to + // normal duration so we can test animation progression. + animation_duration_scale_ = + std::make_unique<ui::ScopedAnimationDurationScaleMode>( + ui::ScopedAnimationDurationScaleMode::NORMAL_DURATION); + } + + private: + std::unique_ptr<ui::ScopedAnimationDurationScaleMode> + animation_duration_scale_; +}; + +// This test builds two animation sequences and checks that the properties are +// animated in the specified durations. + +TEST_F(AnimationBuilderTest, SimpleAnimation) { + auto first_delegate = std::make_unique<ui::TestLayerAnimationDelegate>(); + auto second_delegate = std::make_unique<ui::TestLayerAnimationDelegate>(); + auto first_animating_view = std::make_unique<View>(); + auto second_animating_view = std::make_unique<View>(); + + // Animation Builder will paint to layer automatically, but since we need to + // access the layer, paint first. + first_animating_view->SetPaintToLayer(); + second_animating_view->SetPaintToLayer(); + + ui::LayerAnimator* first_layer_animator = + first_animating_view->layer()->GetAnimator(); + first_layer_animator->set_disable_timer_for_test(true); + first_layer_animator->SetDelegate(first_delegate.get()); + + ui::LayerAnimator* second_layer_animator = + second_animating_view->layer()->GetAnimator(); + second_layer_animator->set_disable_timer_for_test(true); + second_layer_animator->SetDelegate(second_delegate.get()); + + ui::LayerAnimatorTestController first_test_controller(first_layer_animator); + ui::LayerAnimatorTestController second_test_controller(second_layer_animator); + + gfx::RoundedCornersF rounded_corners(12.0f, 12.0f, 12.0f, 12.0f); + constexpr auto kDelay = base::TimeDelta::FromSeconds(3); + + { + AnimationBuilder b; + b.NewSequence() + .SetDuration(kDelay) + .SetOpacity(first_animating_view.get(), 0.4f) + .SetRoundedCorners(first_animating_view.get(), rounded_corners) + .EndSequence() + .NewSequence() + .SetDuration(kDelay * 2) + .SetOpacity(second_animating_view.get(), 0.9f) + .EndSequence(); + } + + // Original value before the animation steps. + EXPECT_TRUE(first_layer_animator->is_animating()); + EXPECT_TRUE(second_layer_animator->is_animating()); + EXPECT_FLOAT_EQ(first_delegate->GetOpacityForAnimation(), 1.0); + EXPECT_FLOAT_EQ(first_delegate->GetRoundedCornersForAnimation().upper_left(), + 0.0); + EXPECT_FLOAT_EQ(second_delegate->GetOpacityForAnimation(), 1.0); + + first_test_controller.StartThreadedAnimationsIfNeeded(); + second_test_controller.StartThreadedAnimationsIfNeeded(); + first_animating_view->layer()->GetAnimator()->Step(base::TimeTicks::Now() + + kDelay); + second_animating_view->layer()->GetAnimator()->Step(base::TimeTicks::Now() + + kDelay); + EXPECT_FLOAT_EQ(first_delegate->GetOpacityForAnimation(), 0.4f); + // Sanity check one of the corners. + EXPECT_FLOAT_EQ(first_delegate->GetRoundedCornersForAnimation().upper_left(), + 12.0f); + // This animation should not be finished yet. The specific value can be tested + // more extensively after tween support is added. + EXPECT_NE(second_delegate->GetOpacityForAnimation(), 0.9f); + base::TimeTicks last_step_time = second_layer_animator->last_step_time(); + second_animating_view->layer()->GetAnimator()->Step(last_step_time + kDelay); + EXPECT_FLOAT_EQ(second_delegate->GetOpacityForAnimation(), 0.9f); +} + +} // namespace views
diff --git a/ui/views/controls/button/toggle_button.cc b/ui/views/controls/button/toggle_button.cc index 86415fa..0715e922 100644 --- a/ui/views/controls/button/toggle_button.cc +++ b/ui/views/controls/button/toggle_button.cc
@@ -153,6 +153,9 @@ }, this)); + // Even though ToggleButton doesn't paint anything, declare us as flipped in + // RTL mode so that FocusRing correctly flips as well. + SetFlipCanvasOnPaintForRTLUI(true); SetInstallFocusRingOnFocus(true); FocusRing::Get(this)->SetPathGenerator( std::make_unique<FocusRingHighlightPathGenerator>());
diff --git a/ui/views/controls/focus_ring.cc b/ui/views/controls/focus_ring.cc index 4e684c25..7eb9d40 100644 --- a/ui/views/controls/focus_ring.cc +++ b/ui/views/controls/focus_ring.cc
@@ -4,6 +4,7 @@ #include "ui/views/controls/focus_ring.h" +#include <algorithm> #include <memory> #include <utility> @@ -158,8 +159,22 @@ // by the time layout happens. This may be due to synchronous Layout() calls. const SkPath path = GetPath(); if (IsPathUsable(path)) { - focus_bounds.Union( - gfx::ToEnclosingRect(gfx::SkRectToRectF(path.getBounds()))); + const gfx::Rect path_bounds = + gfx::ToEnclosingRect(gfx::SkRectToRectF(path.getBounds())); + const gfx::Rect expanded_bounds = + gfx::UnionRects(focus_bounds, path_bounds); + // These insets are how much we need to inset `focus_bounds` to enclose the + // path as well. They'll be either zero or negative (we're effectively + // outsetting). + gfx::Insets expansion_insets = focus_bounds.InsetsFrom(expanded_bounds); + // Make sure we extend the focus-ring bounds symmetrically on the X axis to + // retain the shared center point with parent(). This is required for canvas + // flipping to position the focus-ring path correctly after the RTL flip. + const int min_x_inset = + std::min(expansion_insets.left(), expansion_insets.right()); + expansion_insets.set_left(min_x_inset); + expansion_insets.set_right(min_x_inset); + focus_bounds.Inset(expansion_insets); } focus_bounds.Inset(gfx::Insets(FocusRing::kHaloInset));
diff --git a/ui/views/examples/animation_example.cc b/ui/views/examples/animation_example.cc index 713e19f..7c1f460 100644 --- a/ui/views/examples/animation_example.cc +++ b/ui/views/examples/animation_example.cc
@@ -169,11 +169,15 @@ for (auto* view : container->children()) { // Property setting calls on the builder would be replaced with // view->SetOpacity(..) after animation integration with view::View class - b.SetDuration(base::TimeDelta::FromSeconds(10)) + b.NewSequence() + .SetDuration(base::TimeDelta::FromSeconds(10)) .SetRoundedCorners(view, rounded_corners) - .StartSequence() + .EndSequence() + .NewSequence() .Repeat() .SetDuration(base::TimeDelta::FromSeconds(2)) + // TODO(elainechien): These two opacity changes will be separated by a + // .Then() call as they happen in sequence. .SetOpacity(view, 0.4f) .SetOpacity(view, 0.9f) .EndSequence();
diff --git a/weblayer/browser/android/javatests/src/org/chromium/weblayer/test/BrowserControlsTest.java b/weblayer/browser/android/javatests/src/org/chromium/weblayer/test/BrowserControlsTest.java index 6d3e7f9..80a1ad2 100644 --- a/weblayer/browser/android/javatests/src/org/chromium/weblayer/test/BrowserControlsTest.java +++ b/weblayer/browser/android/javatests/src/org/chromium/weblayer/test/BrowserControlsTest.java
@@ -9,9 +9,11 @@ import static androidx.test.espresso.matcher.ViewMatchers.isDisplayed; import static androidx.test.espresso.matcher.ViewMatchers.withText; +import android.app.Instrumentation; import android.os.Build; import android.os.Bundle; import android.os.RemoteException; +import android.support.test.InstrumentationRegistry; import android.view.View; import android.view.ViewGroup; import android.widget.FrameLayout; @@ -31,6 +33,7 @@ import org.chromium.base.test.util.CriteriaHelper; import org.chromium.base.test.util.MinAndroidSdkLevel; import org.chromium.content_public.browser.test.util.TestThreadUtils; +import org.chromium.content_public.browser.test.util.TestTouchUtils; import org.chromium.weblayer.BrowserControlsOffsetCallback; import org.chromium.weblayer.Tab; import org.chromium.weblayer.TestWebLayer; @@ -102,6 +105,22 @@ mPageHeightWithTopView = getVisiblePageHeight(); } + private View createBottomView() throws Exception { + InstrumentationActivity activity = mActivityTestRule.getActivity(); + View bottomView = TestThreadUtils.runOnUiThreadBlocking(() -> { + TextView view = new TextView(activity); + view.setText("BOTTOM"); + activity.getBrowser().setBottomView(view); + return view; + }); + mBrowserControlsHelper.waitForBrowserControlsViewToBeVisible(bottomView); + int bottomViewHeight = + TestThreadUtils.runOnUiThreadBlocking(() -> { return bottomView.getHeight(); }); + mBrowserControlsHelper.waitForBrowserControlsMetadataState( + mTopViewHeight, bottomViewHeight); + return bottomView; + } + // Disabled on L bots due to unexplained flakes. See crbug.com/1035894. @MinAndroidSdkLevel(Build.VERSION_CODES.M) @Test @@ -248,6 +267,42 @@ }); } + @MinWebLayerVersion(94) + @Test + @SmallTest + public void testEvents() throws Exception { + createActivityWithTopView(); + InstrumentationActivity activity = mActivityTestRule.getActivity(); + Instrumentation instrumentation = InstrumentationRegistry.getInstrumentation(); + View topView = activity.getTopContentsContainer(); + View bottomView = createBottomView(); + + int fragmentHeight = TestThreadUtils.runOnUiThreadBlocking( + () -> { return mActivityTestRule.getFragment().getView().getHeight(); }); + int pageHeight = getVisiblePageHeight(); + + // Record the maximum y position of clicks to detect if we clicked at the top or bottom. + mActivityTestRule.executeScriptSync( + "var max = 0; document.onclick = (e) => { max = Math.max(max, e.pageY); };", + true /* useSeparateIsolate */); + + // Clicks on the bottom view should not propagate to the content layer. + TestTouchUtils.singleClickView(instrumentation, bottomView, 0, 0); + TestTouchUtils.sleepForDoubleTapTimeout(instrumentation); + + // Click below the top view inside the content layer in the middle of the page. + TestTouchUtils.singleClickView( + instrumentation, topView, 0, topView.getHeight() + fragmentHeight / 2); + TestTouchUtils.sleepForDoubleTapTimeout(instrumentation); + + // Wait until we see the click from the middle of the page. + CriteriaHelper.pollInstrumentationThread(() -> { + int max = mActivityTestRule.executeScriptAndExtractInt("max"); + Criteria.checkThat(max, Matchers.greaterThan(pageHeight * 1 / 4)); + Criteria.checkThat(max, Matchers.lessThan(pageHeight * 3 / 4)); + }); + } + // Disabled on L bots due to unexplained flakes. See crbug.com/1035894. @MinAndroidSdkLevel(Build.VERSION_CODES.M) @Test
diff --git a/weblayer/browser/android/javatests/src/org/chromium/weblayer/test/NavigationTest.java b/weblayer/browser/android/javatests/src/org/chromium/weblayer/test/NavigationTest.java index 26cca11..8604fb1 100644 --- a/weblayer/browser/android/javatests/src/org/chromium/weblayer/test/NavigationTest.java +++ b/weblayer/browser/android/javatests/src/org/chromium/weblayer/test/NavigationTest.java
@@ -651,7 +651,7 @@ curRedirectedCount, Arrays.asList(Uri.parse(url), Uri.parse(finalUrl))); } - @MinWebLayerVersion(94) + @MinWebLayerVersion(93) @Test @SmallTest public void testGetPageInOnNavigationCompletedForIncompleteNavigation() throws Exception { @@ -1629,7 +1629,7 @@ assertEquals(2, mCallback.onCompletedCallback.getNavigationEntryOffset()); } - @MinWebLayerVersion(94) + @MinWebLayerVersion(93) @Test @SmallTest public void testOnPageLanguageDetermined() throws Exception {
diff --git a/weblayer/browser/java/org/chromium/weblayer_private/BrowserControlsContainerView.java b/weblayer/browser/java/org/chromium/weblayer_private/BrowserControlsContainerView.java index 9d362324..876b27f 100644 --- a/weblayer/browser/java/org/chromium/weblayer_private/BrowserControlsContainerView.java +++ b/weblayer/browser/java/org/chromium/weblayer_private/BrowserControlsContainerView.java
@@ -7,6 +7,8 @@ import android.annotation.SuppressLint; import android.content.Context; import android.graphics.Rect; +import android.view.DragEvent; +import android.view.MotionEvent; import android.view.View; import android.view.ViewParent; import android.widget.FrameLayout; @@ -431,6 +433,27 @@ cancelDelayedFullscreenRunnable(); } + // Don't forward any events to the ContentView as the BrowserControlsContainerView should be + // considered opaque and shouldn't pass position based events to views below it. Website content + // has been moved to not overlap BrowserControlsContainerView anyway. + @Override + public boolean onDragEvent(DragEvent event) { + return true; + } + @Override + public boolean onGenericMotionEvent(MotionEvent event) { + return true; + } + @Override + public boolean onHoverEvent(MotionEvent event) { + return true; + } + @SuppressLint("ClickableViewAccessibility") + @Override + public boolean onTouchEvent(MotionEvent event) { + return true; + } + /* package */ State getState() { return new State(mControlsOffset, mContentOffset); }
diff --git a/weblayer/browser/java/org/chromium/weblayer_private/NavigationControllerImpl.java b/weblayer/browser/java/org/chromium/weblayer_private/NavigationControllerImpl.java index 340998b2..0216678 100644 --- a/weblayer/browser/java/org/chromium/weblayer_private/NavigationControllerImpl.java +++ b/weblayer/browser/java/org/chromium/weblayer_private/NavigationControllerImpl.java
@@ -303,7 +303,7 @@ @CalledByNative private void onPageLanguageDetermined(PageImpl page, String language) throws RemoteException { - if (WebLayerFactoryImpl.getClientMajorVersion() < 94) return; + if (WebLayerFactoryImpl.getClientMajorVersion() < 93) return; mNavigationControllerClient.onPageLanguageDetermined(page.getClientPage(), language); }
diff --git a/weblayer/browser/java/org/chromium/weblayer_private/interfaces/INavigationControllerClient.aidl b/weblayer/browser/java/org/chromium/weblayer_private/interfaces/INavigationControllerClient.aidl index ff1179f2..5eeeb584 100644 --- a/weblayer/browser/java/org/chromium/weblayer_private/interfaces/INavigationControllerClient.aidl +++ b/weblayer/browser/java/org/chromium/weblayer_private/interfaces/INavigationControllerClient.aidl
@@ -42,6 +42,6 @@ IClientPage createClientPage() = 12; void onPageDestroyed(IClientPage page) = 13; - // Added in M94. + // Added in M93. void onPageLanguageDetermined(IClientPage page, in String language) = 14; }
diff --git a/weblayer/public/java/org/chromium/weblayer/NavigationCallback.java b/weblayer/public/java/org/chromium/weblayer/NavigationCallback.java index 2618a9b..b943616 100644 --- a/weblayer/public/java/org/chromium/weblayer/NavigationCallback.java +++ b/weblayer/public/java/org/chromium/weblayer/NavigationCallback.java
@@ -147,7 +147,7 @@ * Called when the source language for |page| has been determined to be |language|. * Note: |language| is an ISO 639 language code (two letters, except for Chinese where a * localization is necessary). - * @since 94 + * @since 93 */ public void onPageLanguageDetermined(@NonNull Page page, @NonNull String language) {} }