diff --git a/DEPS b/DEPS index 82077ad..57d6e0b 100644 --- a/DEPS +++ b/DEPS
@@ -269,19 +269,19 @@ # Three lines of non-changing comments so that # the commit queue can handle CLs rolling Skia # and whatever else without interference from each other. - 'skia_revision': 'b2e3f57866a04726308e15ef841b16f419cd8ec1', + 'skia_revision': 'c43555b2f910f3e8cbc2d2597fec260fdff4e168', # 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': '793c29855d4eba1d9ae784d5891d26f48bb7aaf1', + 'v8_revision': '8bd4d4ff99cb81c308a98e527a24dff2a0514e38', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling ANGLE # and whatever else without interference from each other. - 'angle_revision': 'f8e8b7cc3415cbd17c8607dccb95891b00726d12', + 'angle_revision': 'ee1894e5fcb85db29a900354b2c7f58a698bd01a', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling SwiftShader # and whatever else without interference from each other. - 'swiftshader_revision': '73679602bc0be54c3fba1caaf2141b05f19aa468', + 'swiftshader_revision': 'e07da52caba554450749a084549608ee347ac3ef', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling PDFium # and whatever else without interference from each other. @@ -296,7 +296,7 @@ # Three lines of non-changing comments so that # the commit queue can handle CLs rolling Fuchsia sdk # and whatever else without interference from each other. - 'fuchsia_version': 'version:8.20220519.3.1', + 'fuchsia_version': 'version:8.20220520.2.1', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling google-toolbox-for-mac # and whatever else without interference from each other. @@ -384,7 +384,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': 'd99af036634c3dc612d18042465bfcc45203fffc', + 'dawn_revision': 'a526167e33e6fdf20b3f9be0d13174b865920896', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling feed # and whatever else without interference from each other. @@ -428,7 +428,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. - 'libcxxabi_revision': '3e4d3831b80ce067b462c09883c9626acada6941', + 'libcxxabi_revision': '4ad92ece12bc053abb6753c5175070c438290ca5', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling feed # and whatever else without interference from each other. @@ -914,7 +914,7 @@ 'packages': [ { 'package': 'chromium/third_party/androidx', - 'version': 'PwPwlC5S7JV4CxubGV0WFH7vyAHBGvqQKWxj83IUPxcC', + 'version': '6UlL8Kfql-lL2RalyoIAmkibNjfUbOy9MP3nUIVQVPYC', }, ], 'condition': 'checkout_android', @@ -1702,10 +1702,10 @@ Var('chromium_git') + '/external/khronosgroup/webgl.git' + '@' + 'd4d598789af1e73a1bdd6c9eec246e75ff43551a', 'src/third_party/webgpu-cts/src': - Var('chromium_git') + '/external/github.com/gpuweb/cts.git' + '@' + 'e48651de0135b8aca607e5f890f06c4649e641ac', + Var('chromium_git') + '/external/github.com/gpuweb/cts.git' + '@' + 'b5cc682434bf84956f9f2bc270e053e6711b9efa', 'src/third_party/webrtc': - Var('webrtc_git') + '/src.git' + '@' + 'ae2f39ca3b3d2cb4b5f2205b2897518abf30fb7c', + Var('webrtc_git') + '/src.git' + '@' + '213d389d567315274c71402526045e2a2a47035e', 'src/third_party/libgifcodec': Var('skia_git') + '/libgifcodec' + '@'+ Var('libgifcodec_revision'), @@ -1778,7 +1778,7 @@ Var('chromium_git') + '/v8/v8.git' + '@' + Var('v8_revision'), 'src-internal': { - 'url': 'https://chrome-internal.googlesource.com/chrome/src-internal.git@6531233258a31843bfb8f12259b96bacc3c510c2', + 'url': 'https://chrome-internal.googlesource.com/chrome/src-internal.git@757a52ccc9e8426cff38944dcb811e73730aa5d1', 'condition': 'checkout_src_internal', },
diff --git a/ash/ambient/ambient_controller.cc b/ash/ambient/ambient_controller.cc index 212e210..3e5c323 100644 --- a/ash/ambient/ambient_controller.cc +++ b/ash/ambient/ambient_controller.cc
@@ -177,6 +177,10 @@ registry->RegisterIntegerPref( ambient::prefs::kAmbientAnimationTheme, static_cast<int>(kDefaultAmbientAnimationTheme)); + + registry->RegisterDoublePref( + ambient::prefs::kAmbientModeAnimationPlaybackSpeed, + kAnimationPlaybackSpeed); } } @@ -586,11 +590,17 @@ base::BindRepeating(&AmbientController::OnAnimationThemePrefChanged, weak_ptr_factory_.GetWeakPtr())); + pref_change_registrar_->Add( + ambient::prefs::kAmbientModeAnimationPlaybackSpeed, + base::BindRepeating(&AmbientController::OnAnimationPlaybackSpeedChanged, + weak_ptr_factory_.GetWeakPtr())); + // Trigger the callbacks manually the first time to init AmbientUiModel. OnLockScreenInactivityTimeoutPrefChanged(); OnLockScreenBackgroundTimeoutPrefChanged(); OnPhotoRefreshIntervalPrefChanged(); OnAnimationThemePrefChanged(); + OnAnimationPlaybackSpeedChanged(); DCHECK(AmbientClient::Get()); ambient_photo_controller_ = std::make_unique<AmbientPhotoController>( @@ -617,7 +627,8 @@ {ambient::prefs::kAmbientModeLockScreenBackgroundTimeoutSeconds, ambient::prefs::kAmbientModeLockScreenInactivityTimeoutSeconds, ambient::prefs::kAmbientModePhotoRefreshIntervalSeconds, - ambient::prefs::kAmbientAnimationTheme}) { + ambient::prefs::kAmbientAnimationTheme, + ambient::prefs::kAmbientModeAnimationPlaybackSpeed}) { if (pref_change_registrar_->IsObserved(pref_name)) pref_change_registrar_->Remove(pref_name); } @@ -711,6 +722,13 @@ } } +void AmbientController::OnAnimationPlaybackSpeedChanged() { + DCHECK(GetPrimaryUserPrefService()); + ambient_ui_model_.set_animation_playback_speed( + GetPrimaryUserPrefService()->GetDouble( + ambient::prefs::kAmbientModeAnimationPlaybackSpeed)); +} + void AmbientController::RequestAccessToken( AmbientAccessTokenController::AccessTokenCallback callback, bool may_refresh_token_on_lock) {
diff --git a/ash/ambient/ambient_controller.h b/ash/ambient/ambient_controller.h index 2915740..6ecb639a 100644 --- a/ash/ambient/ambient_controller.h +++ b/ash/ambient/ambient_controller.h
@@ -190,6 +190,7 @@ void OnLockScreenBackgroundTimeoutPrefChanged(); void OnPhotoRefreshIntervalPrefChanged(); void OnAnimationThemePrefChanged(); + void OnAnimationPlaybackSpeedChanged(); AmbientAccessTokenController* access_token_controller_for_testing() { return &access_token_controller_;
diff --git a/ash/ambient/ui/ambient_animation_player.cc b/ash/ambient/ui/ambient_animation_player.cc index ce0affa8..840b830 100644 --- a/ash/ambient/ui/ambient_animation_player.cc +++ b/ash/ambient/ui/ambient_animation_player.cc
@@ -6,6 +6,7 @@ #include <string> +#include "ash/public/cpp/ambient/ambient_ui_model.h" #include "ash/utility/lottie_util.h" #include "base/check.h" #include "base/logging.h" @@ -68,6 +69,8 @@ DCHECK(cycle_restart_timestamp_.is_zero()); } animation_observation_.Observe(animation); + animation->SetPlaybackSpeed( + AmbientUiModel::Get()->animation_playback_speed()); animated_image_view_->Play(lottie::Animation::Style::kLinear); }
diff --git a/ash/capture_mode/capture_mode_camera_unittests.cc b/ash/capture_mode/capture_mode_camera_unittests.cc index eaf677cc..810a310 100644 --- a/ash/capture_mode/capture_mode_camera_unittests.cc +++ b/ash/capture_mode/capture_mode_camera_unittests.cc
@@ -3135,6 +3135,7 @@ // when capture session is active and when there's a video recording in // progress including drag to snap by mouse and by touch. TEST_P(CaptureModeCameraPreviewTest, CameraPreviewDragToSnap) { + UpdateDisplay("1600x800"); StartCaptureSessionWithParam(); auto* camera_controller = GetCameraController(); AddDefaultCamera();
diff --git a/ash/public/cpp/ambient/ambient_prefs.cc b/ash/public/cpp/ambient/ambient_prefs.cc index e6eca30..948bd95a9 100644 --- a/ash/public/cpp/ambient/ambient_prefs.cc +++ b/ash/public/cpp/ambient/ambient_prefs.cc
@@ -25,6 +25,9 @@ constexpr char kAmbientModeLockScreenBackgroundTimeoutSeconds[] = "ash.ambient.lock_screen_background_timeout"; +constexpr char kAmbientModeAnimationPlaybackSpeed[] = + "ash.ambient.animation_playback_speed"; + constexpr char kAmbientModePhotoRefreshIntervalSeconds[] = "ash.ambient.photo_refresh_interval";
diff --git a/ash/public/cpp/ambient/ambient_prefs.h b/ash/public/cpp/ambient/ambient_prefs.h index 2d63b93..14fd578e 100644 --- a/ash/public/cpp/ambient/ambient_prefs.h +++ b/ash/public/cpp/ambient/ambient_prefs.h
@@ -36,6 +36,10 @@ ASH_PUBLIC_EXPORT extern const char kAmbientModeLockScreenBackgroundTimeoutSeconds[]; +// Float pref for the playback speed of the animation in ambient mode. Currently +// does not apply to slideshow mode. Not displayed to the user in settings. +ASH_PUBLIC_EXPORT extern const char kAmbientModeAnimationPlaybackSpeed[]; + // Integer pref for the interval in seconds to refresh photos. Not displayed to // the user in settings. ASH_PUBLIC_EXPORT extern const char kAmbientModePhotoRefreshIntervalSeconds[];
diff --git a/ash/public/cpp/ambient/ambient_ui_model.h b/ash/public/cpp/ambient/ambient_ui_model.h index 65780ab..6604ada 100644 --- a/ash/public/cpp/ambient/ambient_ui_model.h +++ b/ash/public/cpp/ambient/ambient_ui_model.h
@@ -36,6 +36,9 @@ // The default interval to refresh photos. constexpr base::TimeDelta kPhotoRefreshInterval = base::Seconds(60); +// The default animation playback speed. Not used in slideshow mode. +constexpr float kAnimationPlaybackSpeed = 1.f; + // A checked observer which receives notification of changes to the Ambient Mode // UI model. class ASH_PUBLIC_EXPORT AmbientUiModelObserver : public base::CheckedObserver { @@ -84,6 +87,12 @@ return photo_refresh_interval_; } + void set_animation_playback_speed(float animation_playback_speed) { + animation_playback_speed_ = animation_playback_speed; + } + + float animation_playback_speed() const { return animation_playback_speed_; } + private: void NotifyAmbientUiVisibilityChanged(); @@ -104,6 +113,9 @@ // The interval to refresh photos. base::TimeDelta photo_refresh_interval_ = kPhotoRefreshInterval; + // Animation playback speed. Not used in slideshow mode. + float animation_playback_speed_ = kAnimationPlaybackSpeed; + base::ObserverList<AmbientUiModelObserver> observers_; };
diff --git a/ash/public/cpp/desk_template.cc b/ash/public/cpp/desk_template.cc index 6d0db86..780f6668 100644 --- a/ash/public/cpp/desk_template.cc +++ b/ash/public/cpp/desk_template.cc
@@ -7,6 +7,7 @@ #include "ash/constants/app_types.h" #include "ash/constants/ash_features.h" #include "base/strings/utf_string_conversions.h" +#include "base/values.h" #include "ui/aura/client/aura_constants.h" #include "ui/aura/window.h" @@ -94,4 +95,41 @@ return result; } +std::string DeskTemplate::ToDebugString() const { + std::string result = + "Template name: " + base::UTF16ToUTF8(template_name_) + "\n"; + result += "GUID: " + uuid_.AsLowercaseString() + "\n"; + result += "Source: "; + switch (source_) { + case DeskTemplateSource::kUnknownSource: + result += "unknown\n"; + break; + case DeskTemplateSource::kUser: + result += "user\n"; + break; + case DeskTemplateSource::kPolicy: + result += "policy\n"; + break; + } + result += "Type: "; + switch (type_) { + case DeskTemplateType::kTemplate: + result += "template\n"; + break; + case DeskTemplateType::kSaveAndRecall: + result += "save and recall\n"; + break; + } + result += "Time created: " + base::TimeFormatHTTP(created_time_) + "\n"; + result += "Time updated: " + base::TimeFormatHTTP(updated_time_) + "\n"; + result += "launch id: " + base::NumberToString(launch_id_) + "\n"; + + // Converting to value and printing the debug string may be more + // intensive but gives more complete information which increases + // the utility of this function. + if (desk_restore_data_) + result += desk_restore_data_->ConvertToValue().DebugString(); + return result; +} + } // namespace ash
diff --git a/ash/public/cpp/desk_template.h b/ash/public/cpp/desk_template.h index a3ce1ef6..b118d88 100644 --- a/ash/public/cpp/desk_template.h +++ b/ash/public/cpp/desk_template.h
@@ -113,9 +113,12 @@ // Sets `desk_index` as the desk to launch on for all windows in the template. void SetDeskIndex(int desk_index); - // Returns `this` in string format. Used for debugging and in feedback logs. + // Returns `this` in string format. Used for feedback logs. std::string ToString() const; + // Returns `this` in string format. Used for debugging. + std::string ToDebugString() const; + private: const base::GUID uuid_; // We utilize the string based base::GUID to uniquely // identify the template.
diff --git a/ash/public/cpp/external_arc/message_center/arc_notification_view_unittest.cc b/ash/public/cpp/external_arc/message_center/arc_notification_view_unittest.cc index 4e3e064..303ce142 100644 --- a/ash/public/cpp/external_arc/message_center/arc_notification_view_unittest.cc +++ b/ash/public/cpp/external_arc/message_center/arc_notification_view_unittest.cc
@@ -20,6 +20,7 @@ #include "base/memory/ref_counted.h" #include "base/strings/utf_string_conversions.h" #include "base/test/scoped_feature_list.h" +#include "chromeos/constants/chromeos_features.h" #include "third_party/skia/include/core/SkColor.h" #include "ui/base/ime/dummy_text_input_client.h" #include "ui/base/ime/input_method.h" @@ -73,8 +74,17 @@ // views::ViewsTestBase void SetUp() override { scoped_feature_list_ = std::make_unique<base::test::ScopedFeatureList>(); - scoped_feature_list_->InitWithFeatureState(features::kNotificationsRefresh, - IsNotificationsRefreshEnabled()); + if (IsNotificationsRefreshEnabled()) { + scoped_feature_list_->InitWithFeatures( + /*enabled_features=*/{features::kNotificationsRefresh, + chromeos::features::kDarkLightMode}, + /*disabled_features=*/{}); + } else { + scoped_feature_list_->InitWithFeatures( + /*enabled_features=*/{}, + /*disabled_features=*/{features::kNotificationsRefresh, + chromeos::features::kDarkLightMode}); + } AshTestBase::SetUp();
diff --git a/ash/shelf/login_shelf_view.cc b/ash/shelf/login_shelf_view.cc index 3f36002..e017958 100644 --- a/ash/shelf/login_shelf_view.cc +++ b/ash/shelf/login_shelf_view.cc
@@ -656,16 +656,8 @@ lock_screen_action_background); login_data_dispatcher_observation_.Observe( Shell::Get()->login_screen_controller()->data_dispatcher()); - - // If feature is enabled, update the boolean kiosk_license_mode_. Otherwise, - // it's false by default. - if (features::IsKioskEnrollmentInOobeEnabled()) { - kiosk_license_mode_ = - Shell::Get() - ->system_tray_model() - ->enterprise_domain() - ->management_device_mode() == ManagementDeviceMode::kKioskSku; - } + enterprise_domain_model_observation_.Observe( + Shell::Get()->system_tray_model()->enterprise_domain()); } LoginShelfView::~LoginShelfView() = default; @@ -881,6 +873,21 @@ SetLoginDialogState(state); } +void LoginShelfView::OnDeviceEnterpriseInfoChanged() { + // If feature is enabled, update the boolean kiosk_license_mode_. Otherwise, + // it's false by default. + if (features::IsKioskEnrollmentInOobeEnabled()) { + kiosk_license_mode_ = + Shell::Get() + ->system_tray_model() + ->enterprise_domain() + ->management_device_mode() == ManagementDeviceMode::kKioskSku; + UpdateUi(); + } +} + +void LoginShelfView::OnEnterpriseAccountDomainChanged() {} + void LoginShelfView::HandleLocaleChange() { for (views::View* child : children()) { if (child->GetClassName() == kLoginShelfButtonClassName) {
diff --git a/ash/shelf/login_shelf_view.h b/ash/shelf/login_shelf_view.h index e957a17..a9d8ce3 100644 --- a/ash/shelf/login_shelf_view.h +++ b/ash/shelf/login_shelf_view.h
@@ -19,6 +19,8 @@ #include "ash/shelf/kiosk_app_instruction_bubble.h" #include "ash/shelf/shelf_shutdown_confirmation_bubble.h" #include "ash/shutdown_controller_impl.h" +#include "ash/system/enterprise/enterprise_domain_observer.h" +#include "ash/system/model/enterprise_domain_model.h" #include "ash/tray_action/tray_action.h" #include "ash/tray_action/tray_action_observer.h" #include "base/memory/weak_ptr.h" @@ -47,7 +49,8 @@ public TrayActionObserver, public LockScreenActionBackgroundObserver, public ShutdownControllerImpl::Observer, - public LoginDataDispatcher::Observer { + public LoginDataDispatcher::Observer, + public EnterpriseDomainObserver { public: enum ButtonId { kShutdown = 1, // Shut down the device. @@ -162,6 +165,10 @@ void OnUsersChanged(const std::vector<LoginUserInfo>& users) override; void OnOobeDialogStateChanged(OobeDialogState state) override; + // ash::EnterpriseDomainObserver + void OnDeviceEnterpriseInfoChanged() override; + void OnEnterpriseAccountDomainChanged() override; + // Called when a locale change is detected. Updates the login shelf button // strings. void HandleLocaleChange(); @@ -247,6 +254,9 @@ base::ScopedObservation<LoginDataDispatcher, LoginDataDispatcher::Observer> login_data_dispatcher_observation_{this}; + base::ScopedObservation<EnterpriseDomainModel, EnterpriseDomainObserver> + enterprise_domain_model_observation_{this}; + // The kiosk app button will only be created for the primary display's login // shelf. KioskAppsButton* kiosk_apps_button_ = nullptr;
diff --git a/ash/style/dark_light_mode_nudge_controller.cc b/ash/style/dark_light_mode_nudge_controller.cc index 1d99a532..93ef71f 100644 --- a/ash/style/dark_light_mode_nudge_controller.cc +++ b/ash/style/dark_light_mode_nudge_controller.cc
@@ -60,10 +60,13 @@ if (!chromeos::features::IsDarkLightModeEnabled()) return false; + auto* session_controller = Shell::Get()->session_controller(); + if (!session_controller->IsActiveUserSessionStarted()) + return false; + absl::optional<user_manager::UserType> user_type = - Shell::Get()->session_controller()->GetUserType(); - // This can only be called while a user is logged in, so `user_type` should - // never be empty. + session_controller->GetUserType(); + // Must have a `user_type` because of the active user session check above. DCHECK(user_type); switch (*user_type) { case user_manager::USER_TYPE_REGULAR:
diff --git a/ash/system/message_center/unified_message_list_view_unittest.cc b/ash/system/message_center/unified_message_list_view_unittest.cc index 8f720d4..0de2f8f 100644 --- a/ash/system/message_center/unified_message_list_view_unittest.cc +++ b/ash/system/message_center/unified_message_list_view_unittest.cc
@@ -17,6 +17,7 @@ #include "base/test/scoped_feature_list.h" #include "base/time/time.h" #include "build/build_config.h" +#include "chromeos/constants/chromeos_features.h" #include "ui/compositor/layer.h" #include "ui/compositor/layer_animator.h" #include "ui/message_center/message_center.h" @@ -261,8 +262,17 @@ // AshTestBase: void SetUp() override { scoped_feature_list_ = std::make_unique<base::test::ScopedFeatureList>(); - scoped_feature_list_->InitWithFeatureState(features::kNotificationsRefresh, - IsNotificationsRefreshEnabled()); + if (IsNotificationsRefreshEnabled()) { + scoped_feature_list_->InitWithFeatures( + /*enabled_features=*/{features::kNotificationsRefresh, + chromeos::features::kDarkLightMode}, + /*disabled_features=*/{}); + } else { + scoped_feature_list_->InitWithFeatures( + /*enabled_features=*/{}, + /*disabled_features=*/{features::kNotificationsRefresh, + chromeos::features::kDarkLightMode}); + } UnifiedMessageListViewTest::SetUp(); }
diff --git a/ash/system/time/calendar_event_list_view.cc b/ash/system/time/calendar_event_list_view.cc index 0b339e4..f19d181 100644 --- a/ash/system/time/calendar_event_list_view.cc +++ b/ash/system/time/calendar_event_list_view.cc
@@ -171,9 +171,6 @@ void CalendarEventListView::UpdateListItems() { content_view_->RemoveAllChildViews(); - calendar_view_controller_->MaybeUpdateTimeDifference( - calendar_view_controller_->selected_date().value()); - std::list<google_apis::calendar::CalendarEvent> events = calendar_view_controller_->SelectedDateEvents();
diff --git a/ash/system/time/calendar_model.cc b/ash/system/time/calendar_model.cc index 4c1f68f7..fa66fa3 100644 --- a/ash/system/time/calendar_model.cc +++ b/ash/system/time/calendar_model.cc
@@ -207,16 +207,9 @@ "Ash.Calendar.FetchEvents.TotalCacheSizeMonths", event_months_.size()); } -void CalendarModel::FetchEvents(const std::set<base::Time>& months) { - for (auto& month : months) - MaybeFetchMonth(month.UTCMidnight()); -} - -void CalendarModel::FetchEventsSurrounding(int num_months, - const base::Time day) { - std::set<base::Time> months = - calendar_utils::GetSurroundingMonthsUTC(day, num_months); - FetchEvents(months); +// TODO(https://crbug.com/1327553): Should remove `MaybeFetchMonth` method. +void CalendarModel::FetchEvents(base::Time start_of_month) { + MaybeFetchMonth(start_of_month); } void CalendarModel::CancelFetch(const base::Time& start_of_month) { @@ -411,20 +404,14 @@ base::Time CalendarModel::GetStartTimeAdjusted( const google_apis::calendar::CalendarEvent* event) const { - if (time_difference_minutes_.has_value()) { - return event->start_time().date_time() + - base::Minutes(time_difference_minutes_.value()); - } - return event->start_time().date_time(); + base::Time start_time = event->start_time().date_time(); + return start_time + calendar_utils::GetTimeDifference(start_time); } base::Time CalendarModel::GetEndTimeAdjusted( const google_apis::calendar::CalendarEvent* event) const { - if (time_difference_minutes_.has_value()) { - return event->end_time().date_time() + - base::Minutes(time_difference_minutes_.value()); - } - return event->end_time().date_time(); + base::Time end_time = event->end_time().date_time(); + return end_time + calendar_utils::GetTimeDifference(end_time); } base::Time CalendarModel::GetStartTimeMidnightAdjusted( @@ -585,23 +572,9 @@ VLOG(1) << out.str(); } -void CalendarModel::RedistributeEvents(int time_difference_minutes) { - // Early returns if the time difference is not changed. - if (time_difference_minutes_.has_value() && - time_difference_minutes == time_difference_minutes_.value()) { - return; - } - - // Early returns if the `time_difference_minutes_` is not assigned and the - // difference is 0. - if (!time_difference_minutes_.has_value() && time_difference_minutes == 0) { - time_difference_minutes_ = time_difference_minutes; - return; - } - +void CalendarModel::RedistributeEvents() { // Redistributes all the fetched events to the date map with the - // `time_difference_minutes_`. - time_difference_minutes_ = time_difference_minutes; + // time difference. SingleDayEventList to_be_redistributed_events; for (auto month = event_months_.begin(); month != event_months_.end(); month++) {
diff --git a/ash/system/time/calendar_model.h b/ash/system/time/calendar_model.h index 9638bc6..08964325 100644 --- a/ash/system/time/calendar_model.h +++ b/ash/system/time/calendar_model.h
@@ -86,11 +86,8 @@ // Adds every month in `months` to the set of non-prunable months. void AddNonPrunableMonths(const std::set<base::Time>& months); - // Requests events that fall in `months`. - void FetchEvents(const std::set<base::Time>& months); - - // Requests events that fall in `num_months` months surrounding `day`. - void FetchEventsSurrounding(int num_months, const base::Time day); + // Requests events that of the passed in `start_of_month`. + void FetchEvents(base::Time start_of_month); // Cancels any pending event fetch for `start_of_month`. void CancelFetch(const base::Time& start_of_month); @@ -114,9 +111,8 @@ void DebugDump(); // Redistributes all the fetched events to the date map with the - // `time_difference_minutes_`. This only happens once per calendar view's life - // cycle. - void RedistributeEvents(int time_difference_minutes); + // time difference. This method is only called when there's a timezone change. + void RedistributeEvents(); // Updates the time difference in minutes. void set_time_difference_minutes(int minutes) {
diff --git a/ash/system/time/calendar_model_unittest.cc b/ash/system/time/calendar_model_unittest.cc index 7443972..bfe8965 100644 --- a/ash/system/time/calendar_model_unittest.cc +++ b/ash/system/time/calendar_model_unittest.cc
@@ -15,6 +15,7 @@ #include "ash/calendar/calendar_client.h" #include "ash/calendar/calendar_controller.h" +#include "ash/components/settings/timezone_settings.h" #include "ash/public/cpp/session/session_controller.h" #include "ash/public/cpp/session/session_types.h" #include "ash/public/cpp/session/user_info.h" @@ -80,7 +81,6 @@ std::unique_ptr<google_apis::calendar::EventList> event_list = std::make_unique<google_apis::calendar::EventList>(); - event_list->set_time_zone("America/Los_Angeles"); for (int i = 0; i < num_events; ++i) { base::Time start_time = start_time_base; @@ -454,13 +454,13 @@ // Current date is just `kStartTime`. SetFakeNowFromStr(kStartTime); calendar_model_ = std::make_unique<TestableCalendarModel>(); - std::set<base::Time> months = - calendar_utils::GetSurroundingMonthsUTC(base::Time::Now(), 1); + base::Time month = calendar_utils::GetStartOfMonthUTC(base::Time::Now()); // Set up list of events to inject. std::unique_ptr<google_apis::calendar::EventList> event_list = std::make_unique<google_apis::calendar::EventList>(); - event_list->set_time_zone("America/Los_Angeles"); + // Sets the timezone to "GMT". + ash::system::TimezoneSettings::GetInstance()->SetTimezoneFromID(u"GMT"); std::unique_ptr<google_apis::calendar::CalendarEvent> event = calendar_test_utils::CreateEvent(kId, kSummary, kStartTime, kEndTime); SingleDayEventList events; @@ -475,7 +475,7 @@ // Now fetch the events, which will get all events from the current month, as // well as next/prev months. - calendar_model_->FetchEvents(months); + calendar_model_->FetchEvents(month); // Now we have an event on kStartTime0. EXPECT_EQ(1, EventsNumberOfDay(kStartTime, &events)); @@ -487,13 +487,13 @@ // Current date is just `kStartTime0`. SetFakeNowFromStr(kStartTime0); calendar_model_ = std::make_unique<TestableCalendarModel>(); - std::set<base::Time> months = - calendar_utils::GetSurroundingMonthsUTC(base::Time::Now(), 1); + base::Time month = calendar_utils::GetStartOfMonthUTC(base::Time::Now()); // Get ready to inject two events. std::unique_ptr<google_apis::calendar::EventList> event_list = std::make_unique<google_apis::calendar::EventList>(); - event_list->set_time_zone("America/Los_Angeles"); + // Sets the timezone to "GMT". + ash::system::TimezoneSettings::GetInstance()->SetTimezoneFromID(u"GMT"); std::unique_ptr<google_apis::calendar::CalendarEvent> event0 = calendar_test_utils::CreateEvent(kId0, kSummary0, kStartTime0, kEndTime0); std::unique_ptr<google_apis::calendar::CalendarEvent> event13 = @@ -512,7 +512,7 @@ event_list->InjectItemForTesting(std::move(event0)); event_list->InjectItemForTesting(std::move(event13)); calendar_model_->InjectEvents(std::move(event_list)); - calendar_model_->FetchEvents(months); + calendar_model_->FetchEvents(month); // Now both days should have events. EXPECT_EQ(1, EventsNumberOfDay(kStartTime0, &events)); @@ -525,13 +525,14 @@ // Current date is just `kStartTime0`. SetFakeNowFromStr(kStartTime0); calendar_model_ = std::make_unique<TestableCalendarModel>(); - std::set<base::Time> months = - calendar_utils::GetSurroundingMonthsUTC(base::Time::Now(), 1); + base::Time month = calendar_utils::GetStartOfMonthUTC(base::Time::Now()); // Get ready to inject two events. std::unique_ptr<google_apis::calendar::EventList> event_list = std::make_unique<google_apis::calendar::EventList>(); - event_list->set_time_zone("America/Los_Angeles"); + // Sets the timezone to "America/Los_Angeles". + ash::system::TimezoneSettings::GetInstance()->SetTimezoneFromID( + u"America/Los_Angeles"); std::unique_ptr<google_apis::calendar::CalendarEvent> event0 = calendar_test_utils::CreateEvent(kId0, kSummary0, kStartTime0, kEndTime0); std::unique_ptr<google_apis::calendar::CalendarEvent> event13 = @@ -543,28 +544,39 @@ event_list->InjectItemForTesting(std::move(event0)); event_list->InjectItemForTesting(std::move(event13)); calendar_model_->InjectEvents(std::move(event_list)); - calendar_model_->FetchEvents(months); + calendar_model_->FetchEvents(month); // Based on the tesing timezone "America/Los_Angeles" these 2 events are // distributed into 2 days. Each day has one event. EXPECT_EQ(1, EventsNumberOfDay(kStartTime0, &events)); EXPECT_EQ(1, EventsNumberOfDay(kStartTime13, &events)); - // Adjusts the time with -10 hours. + // Sets the timezone to "Pacific/Honolulu" which has -10 hours time + // difference. + ash::system::TimezoneSettings::GetInstance()->SetTimezoneFromID( + u"Pacific/Honolulu"); + // `kStartTime0` "23 Oct 2009 11:30" -> "23 Oct 2009 1:30". // `kStartTime1` "24 Oct 2009 07:30" -> "23 Oct 2009 21:30" // Both events should be on the 23rd. - calendar_model_->RedistributeEvents(/*time_difference_minutes=*/-10 * 60); + calendar_model_->RedistributeEvents(); EXPECT_EQ(2, EventsNumberOfDay(kStartTime0, &events)); EXPECT_EQ(0, EventsNumberOfDay(kStartTime13, &events)); - // Adjusts the time with +15 hours. - // `kStartTime0` "23 Oct 2009 11:30" -> "24 Oct 2009 2:30". - // `kStartTime1` "24 Oct 2009 07:30" -> "24 Oct 2009 22:30" - // Both events should be on the 24rd. - calendar_model_->RedistributeEvents(/*time_difference_minutes=*/15 * 60); + // Sets the timezone to "Pacific/Kiritimatis" which has +14 hours time + // difference; + ash::system::TimezoneSettings::GetInstance()->SetTimezoneFromID( + u"Pacific/Kiritimati"); + + // `kStartTime0` "23 Oct 2009 11:30" -> "24 Oct 2009 1:30". + // `kStartTime1` "24 Oct 2009 07:30" -> "24 Oct 2009 21:30" + // Both events should be on the 24th. + calendar_model_->RedistributeEvents(); EXPECT_EQ(0, EventsNumberOfDay(kStartTime0, &events)); EXPECT_EQ(2, EventsNumberOfDay(kStartTime13, &events)); + + // Set back to the default timezone. + ash::system::TimezoneSettings::GetInstance()->SetTimezoneFromID(u""); } TEST_F(CalendarModelTest, EventsDifferentMonths) { @@ -573,11 +585,12 @@ calendar_model_ = std::make_unique<TestableCalendarModel>(); std::set<base::Time> months = calendar_utils::GetSurroundingMonthsUTC(base::Time::Now(), 1); - + // Sets the timezone to "GMT". + ash::system::TimezoneSettings::GetInstance()->SetTimezoneFromID(u"GMT"); // Set up list of events to inject. std::unique_ptr<google_apis::calendar::EventList> event_list = std::make_unique<google_apis::calendar::EventList>(); - event_list->set_time_zone("America/Los_Angeles"); + std::unique_ptr<google_apis::calendar::CalendarEvent> event0 = calendar_test_utils::CreateEvent(kId0, kSummary0, kStartTime0, kEndTime0); std::unique_ptr<google_apis::calendar::CalendarEvent> event1 = @@ -601,7 +614,8 @@ calendar_model_->InjectEvents(std::move(event_list)); // Fetch events (user just opened CrOS calendar). - calendar_model_->FetchEvents(months); + for (auto& month : months) + calendar_model_->FetchEvents(month); // Confirm we have all three events. EXPECT_EQ(1, EventsNumberOfDay(kStartTime0, &events)); @@ -624,6 +638,8 @@ // range that sits between a "prefix" range and a "suffix" range. We also verify // the absence of cached events in the "prefix" and "suffix" ranges. TEST_F(CalendarModelTest, PruneEvents_SlidingWindow) { + // Sets the timezone to "GMT". + ash::system::TimezoneSettings::GetInstance()->SetTimezoneFromID(u"GMT"); constexpr int kNumAdditionalMonths = 5; constexpr int kNumEvents = calendar_utils::kMaxNumPrunableMonths + kNumAdditionalMonths; @@ -662,7 +678,8 @@ on_screen_month, calendar_utils::kNumSurroundingMonthsCached); // Fetch events. - calendar_model_->FetchEvents(months); + for (auto& month : months) + calendar_model_->FetchEvents(month); // Construct the testable ranges. SlidingWindowRanges ranges(i, kNumEvents); @@ -725,7 +742,8 @@ calendar_model_->InjectEvents(std::move(event_list)); // Fetch the mon-prunable events. - calendar_model_->FetchEvents(non_prunable_months); + for (auto& month : non_prunable_months) + calendar_model_->FetchEvents(month); // Injecting the list transferred ownership of the first list we got, so get // another one. @@ -743,7 +761,8 @@ on_screen_month, calendar_utils::kNumSurroundingMonthsCached); // Fetch events. - calendar_model_->FetchEvents(months); + for (auto& month : months) + calendar_model_->FetchEvents(month); // Construct the testable ranges. SlidingWindowRanges ranges(i, kNumEvents); @@ -781,7 +800,8 @@ // Set up list of events to inject. std::unique_ptr<google_apis::calendar::EventList> event_list = std::make_unique<google_apis::calendar::EventList>(); - event_list->set_time_zone("America/Los_Angeles"); + // Sets the timezone to "GMT". + ash::system::TimezoneSettings::GetInstance()->SetTimezoneFromID(u"GMT"); std::unique_ptr<google_apis::calendar::CalendarEvent> event = calendar_test_utils::CreateEvent(kId0, kSummary0, kStartTime0, kEndTime0); SingleDayEventList events; @@ -796,7 +816,8 @@ // Now fetch the events, which will get all events from the current month, // as well as next/prev months. - calendar_model_->FetchEvents(months); + for (auto& month : months) + calendar_model_->FetchEvents(month); // We should have recorded "success" for all three fetches (current, prev, // and next months). @@ -820,7 +841,8 @@ // Set up list of events to inject. std::unique_ptr<google_apis::calendar::EventList> event_list = std::make_unique<google_apis::calendar::EventList>(); - event_list->set_time_zone("America/Los_Angeles"); + // Sets the timezone to "GMT". + ash::system::TimezoneSettings::GetInstance()->SetTimezoneFromID(u"GMT"); std::unique_ptr<google_apis::calendar::CalendarEvent> event = calendar_test_utils::CreateEvent(kId0, kSummary0, kStartTime0, kEndTime0); SingleDayEventList events; @@ -840,7 +862,8 @@ // Now fetch the events, which will get all events from the current month, // as well as next/prev months. - calendar_model_->FetchEvents(months); + for (auto& month : months) + calendar_model_->FetchEvents(month); // We should have recorded "success" for no fetches, and one each for the // errors we specified. @@ -868,7 +891,8 @@ // Set up list of events to inject. std::unique_ptr<google_apis::calendar::EventList> event_list = std::make_unique<google_apis::calendar::EventList>(); - event_list->set_time_zone("America/Los_Angeles"); + // Sets the timezone to "GMT". + ash::system::TimezoneSettings::GetInstance()->SetTimezoneFromID(u"GMT"); std::unique_ptr<google_apis::calendar::CalendarEvent> event = calendar_test_utils::CreateEvent(kId0, kSummary0, kStartTime0, kEndTime0); SingleDayEventList events; @@ -883,7 +907,8 @@ // Now fetch the events, which will get all events from the current month, // as well as next/prev months. - calendar_model_->FetchEvents(months); + for (auto& month : months) + calendar_model_->FetchEvents(month); // Now we have an event on kStartTime0. EXPECT_EQ(1, EventsNumberOfDay(kStartTime0, &events)); @@ -917,7 +942,8 @@ // Set up list of events to inject. std::unique_ptr<google_apis::calendar::EventList> event_list = std::make_unique<google_apis::calendar::EventList>(); - event_list->set_time_zone("America/Los_Angeles"); + // Sets the timezone to "GMT". + ash::system::TimezoneSettings::GetInstance()->SetTimezoneFromID(u"GMT"); std::unique_ptr<google_apis::calendar::CalendarEvent> event = calendar_test_utils::CreateEvent(kId0, kSummary0, kStartTime0, kEndTime0); SingleDayEventList events; @@ -932,7 +958,8 @@ // Now fetch the events, which will get all events from the current month, // as well as next/prev months. - calendar_model_->FetchEvents(months); + for (auto& month : months) + calendar_model_->FetchEvents(month); // Now we have an event on kStartTime0. EXPECT_EQ(1, EventsNumberOfDay(kStartTime0, &events)); @@ -962,7 +989,8 @@ calendar_test_utils::CreateEvent(kId5, kSummary5, kStartTime5, kEndTime5); auto event_list = std::make_unique<google_apis::calendar::EventList>(); - event_list->set_time_zone("Greenwich Mean Time"); + // Sets the timezone to "GMT". + ash::system::TimezoneSettings::GetInstance()->SetTimezoneFromID(u"GMT"); event_list->InjectItemForTesting(std::move(event0)); event_list->InjectItemForTesting(std::move(event1)); event_list->InjectItemForTesting(std::move(event2)); @@ -996,7 +1024,8 @@ // Fetch events from today's date and two surrounding months, i.e. the // non-prunable months. - calendar_model_->FetchEvents(months); + for (auto& month : months) + calendar_model_->FetchEvents(month); // Events from non-prunable months should be present, but not the other // months. @@ -1012,7 +1041,8 @@ months = calendar_utils::GetSurroundingMonthsUTC(current_date, 1); // Fetch events for `kStartTime4` and the two surrounding months. - calendar_model_->FetchEvents(months); + for (auto& month : months) + calendar_model_->FetchEvents(month); // Events from all months should now be present. EXPECT_EQ(1, EventsNumberOfDayInternal(kStartTime0, &events)); @@ -1055,7 +1085,8 @@ calendar_utils::GetSurroundingMonthsUTC(base::Time::Now(), 1); std::unique_ptr<EventList> event_list = std::make_unique<EventList>(); - event_list->set_time_zone("America/Los_Angeles"); + // Sets the timezone to "GMT". + ash::system::TimezoneSettings::GetInstance()->SetTimezoneFromID(u"GMT"); SingleDayEventList events; // Haven't injected anything yet, so no events on `kStartTime0`. @@ -1096,7 +1127,8 @@ kEndTime0, std::get<1>(event_to_create), std::get<2>(event_to_create))); } calendar_model_->InjectEvents(std::move(event_list)); - calendar_model_->FetchEvents(months); + for (auto& month : months) + calendar_model_->FetchEvents(month); // Verify that events were filtered by their statuses. EXPECT_EQ(4, EventsNumberOfDay(kStartTime0, &events)); @@ -1189,7 +1221,8 @@ calendar_test_utils::CreateEvent(kId3, kSummary3, kStartTime3, kEndTime3); auto event_list = std::make_unique<google_apis::calendar::EventList>(); - event_list->set_time_zone("Greenwich Mean Time"); + // Sets the timezone to "GMT". + ash::system::TimezoneSettings::GetInstance()->SetTimezoneFromID(u"GMT"); event_list->InjectItemForTesting(std::move(event0)); event_list->InjectItemForTesting(std::move(event1)); event_list->InjectItemForTesting(std::move(event2));
diff --git a/ash/system/time/calendar_month_view.cc b/ash/system/time/calendar_month_view.cc index d659506..62e190b 100644 --- a/ash/system/time/calendar_month_view.cc +++ b/ash/system/time/calendar_month_view.cc
@@ -81,8 +81,7 @@ base::BindRepeating(&CalendarDateCellView::OnDateCellActivated, base::Unretained(this))), calendar_utils::GetDayIntOfMonth( - date + base::Minutes( - calendar_view_controller->time_difference_minutes())), + date + calendar_view_controller->time_difference_minutes()), CONTEXT_CALENDAR_DATE), date_(date), grayed_out_(is_grayed_out_date), @@ -171,8 +170,7 @@ // Sets accessible label. E.g. Calendar, week of July 16th 2021, [selected // date] is currently selected. base::Time local_date = - date_ + - base::Minutes(calendar_view_controller_->time_difference_minutes()); + date_ + calendar_view_controller_->time_difference_minutes(); base::Time::Exploded date_exploded = calendar_utils::GetExplodedUTC(local_date); base::Time first_day_of_week = @@ -324,21 +322,18 @@ SetPaintToLayer(); layer()->SetFillsBoundsOpaquely(false); calendar_utils::SetUpWeekColumns(layout); - calendar_view_controller_->MaybeUpdateTimeDifference(first_day_of_month); + base::TimeDelta const time_difference = + calendar_utils::GetTimeDifference(first_day_of_month); // Using the time difference to get the local `base::Time`, which is used to // generate the exploded. - base::Time first_day_of_month_local = - first_day_of_month + - base::Minutes(calendar_view_controller_->time_difference_minutes()); + base::Time first_day_of_month_local = first_day_of_month + time_difference; base::Time::Exploded first_day_of_month_exploded = calendar_utils::GetExplodedUTC(first_day_of_month_local); // Find the first day of the week. base::Time current_date = calendar_utils::GetFirstDayOfWeekLocalMidnight(first_day_of_month); - base::Time current_date_local = - current_date + - base::Minutes(calendar_view_controller_->time_difference_minutes()); + base::Time current_date_local = current_date + time_difference; base::Time::Exploded current_date_exploded = calendar_utils::GetExplodedUTC(current_date_local); @@ -402,7 +397,7 @@ base::Time end_of_the_last_row_local = calendar_utils::GetFirstDayOfWeekLocalMidnight(current_date) + base::Days(6) + calendar_utils::kDurationForAdjustingDST + - base::Minutes(calendar_view_controller_->time_difference_minutes()); + time_difference; base::Time::Exploded end_of_row_exploded = calendar_utils::GetExplodedUTC(end_of_the_last_row_local); @@ -423,7 +418,7 @@ } void CalendarMonthView::FetchEvents(const base::Time& month) { - calendar_model_->FetchEvents({month}); + calendar_model_->FetchEvents(month); } void CalendarMonthView::OnEventsFetched(
diff --git a/ash/system/time/calendar_month_view_unittest.cc b/ash/system/time/calendar_month_view_unittest.cc index fe3f183e..529fa137 100644 --- a/ash/system/time/calendar_month_view_unittest.cc +++ b/ash/system/time/calendar_month_view_unittest.cc
@@ -69,10 +69,13 @@ AshTestBase::TearDown(); } - void CreateMonthView(base::Time date) { + void CreateMonthView(base::Time date, const std::u16string& timezone) { AccountId user_account = AccountId::FromUserEmail("user@test"); GetSessionControllerClient()->SwitchActiveUser(user_account); calendar_month_view_.reset(); + controller_.reset(); + ash::system::TimezoneSettings::GetInstance()->SetTimezoneFromID(timezone); + controller_ = std::make_unique<CalendarViewController>(); controller_->UpdateMonth(date); calendar_month_view_ = std::make_unique<CalendarMonthView>(date, controller_.get()); @@ -115,7 +118,7 @@ base::Time date; ASSERT_TRUE(base::Time::FromString("1 Aug 2021 10:00 GMT", &date)); - CreateMonthView(date); + CreateMonthView(date, u"America/Los_Angeles"); // Randomly checks some dates in this month view. EXPECT_EQ( @@ -137,7 +140,7 @@ base::Time jun_date; ASSERT_TRUE(base::Time::FromString("1 Jun 2021 10:00 GMT", &jun_date)); - CreateMonthView(jun_date); + CreateMonthView(jun_date, u"America/Los_Angeles"); // Randomly checks some dates in this month view. EXPECT_EQ( @@ -165,9 +168,7 @@ ASSERT_TRUE(base::Time::FromString("1 Mar 2022 10:00 GMT", &date)); // Sets the timezone to "Azore Summer Time"; - ash::system::TimezoneSettings::GetInstance()->SetTimezoneFromID( - u"Atlantic/Azores"); - CreateMonthView(date); + CreateMonthView(date, u"Atlantic/Azores"); base::Time date_without_DST; ASSERT_TRUE( @@ -177,10 +178,11 @@ ASSERT_TRUE(base::Time::FromString("28 Mar 2022 10:00 GMT", &date_with_DST)); // Before daylight saving the time difference is 1 hour. - EXPECT_EQ(-60, calendar_utils::GetTimeDifferenceInMinutes(date_without_DST)); + EXPECT_EQ(base::Minutes(-60), + calendar_utils::GetTimeDifference(date_without_DST)); // After daylight saving the time difference is 0 hours. - EXPECT_EQ(0, calendar_utils::GetTimeDifferenceInMinutes(date_with_DST)); + EXPECT_EQ(base::Minutes(0), calendar_utils::GetTimeDifference(date_with_DST)); // Randomly checks some dates in this month view. EXPECT_EQ( @@ -205,7 +207,7 @@ base::subtle::ScopedTimeClockOverrides time_override( &CalendarMonthViewTest::FakeTimeNow, nullptr, nullptr); - CreateMonthView(date); + CreateMonthView(date, u"America/Los_Angeles"); // Today's row position is not updated. EXPECT_EQ(0, controller()->GetTodayRowTopHeight()); @@ -232,7 +234,7 @@ &CalendarMonthViewTest::FakeTimeNow, /*time_ticks_override=*/nullptr, /*thread_ticks_override=*/nullptr); - CreateMonthView(date); + CreateMonthView(date, u"America/Los_Angeles"); // Today's row position is updated because today is in this month. int top = controller()->GetTodayRowTopHeight(); @@ -257,7 +259,7 @@ &CalendarMonthViewTest::FakeTimeNow, /*time_ticks_override=*/nullptr, /*thread_ticks_override=*/nullptr); - CreateMonthView(date); + CreateMonthView(date, u"America/Los_Angeles"); TriggerPaint(); // Grayed out cell. Sep 2nd is the 33 one in this calendar, which is with @@ -325,9 +327,7 @@ /*thread_ticks_override=*/nullptr); // Sets the timezone to "America/Los_Angeles"; - ash::system::TimezoneSettings::GetInstance()->SetTimezoneFromID(u"PST"); - - CreateMonthView(date); + CreateMonthView(date, u"America/Los_Angeles"); TriggerPaint(); UploadEvents(); month_view()->SchedulePaintChildren(); @@ -335,7 +335,7 @@ // August is before the daylight saving, time difference between UTC and PST // should be 7 hours. - EXPECT_EQ(-420, controller()->time_difference_minutes()); + EXPECT_EQ(base::Minutes(-420), controller()->time_difference_minutes()); EXPECT_EQ(u"18", static_cast<CalendarDateCellView*>(month_view()->children()[17]) @@ -377,7 +377,7 @@ &CalendarMonthViewTest::FakeTimeNow, /*time_ticks_override=*/nullptr, /*thread_ticks_override=*/nullptr); - CreateMonthView(date); + CreateMonthView(date, u"America/Los_Angeles"); TriggerPaint(); UploadEvents(); month_view()->SchedulePaintChildren();
diff --git a/ash/system/time/calendar_utils.cc b/ash/system/time/calendar_utils.cc index 10112de..349df2e2 100644 --- a/ash/system/time/calendar_utils.cc +++ b/ash/system/time/calendar_utils.cc
@@ -200,8 +200,8 @@ !Shell::Get()->session_controller()->IsUserSessionBlocked(); } -int GetTimeDifferenceInMinutes(base::Time date) { - return DateHelper::GetInstance()->GetTimeDifferenceInMinutes(date); +base::TimeDelta GetTimeDifference(base::Time date) { + return DateHelper::GetInstance()->GetTimeDifference(date); } base::Time GetFirstDayOfWeekLocalMidnight(base::Time date) { @@ -214,12 +214,12 @@ ASH_EXPORT const std::pair<base::Time, base::Time> GetFetchStartEndTimes( base::Time start_of_month_local_midnight) { - int diff = DateHelper::GetInstance()->GetTimeDifferenceInMinutes( - start_of_month_local_midnight); - base::Time start = start_of_month_local_midnight - base::Minutes(diff); + base::Time start = start_of_month_local_midnight - + DateHelper::GetInstance()->GetTimeDifference( + start_of_month_local_midnight); base::Time end = - GetStartOfMonthUTC(start_of_month_local_midnight + base::Days(33)) - - base::Minutes(diff); + GetStartOfMonthUTC(start_of_month_local_midnight + base::Days(33)); + end -= DateHelper::GetInstance()->GetTimeDifference(end); return std::make_pair(start, end); }
diff --git a/ash/system/time/calendar_utils.h b/ash/system/time/calendar_utils.h index 9056c10..f3dec1f7 100644 --- a/ash/system/time/calendar_utils.h +++ b/ash/system/time/calendar_utils.h
@@ -174,7 +174,7 @@ // Get the time difference to UTC time based on the time passed in and the // system timezone. Daylight saving is considered. -ASH_EXPORT int GetTimeDifferenceInMinutes(base::Time date); +ASH_EXPORT base::TimeDelta GetTimeDifference(base::Time date); // Gets the first day's local midnight of the week based on the `date`. base::Time GetFirstDayOfWeekLocalMidnight(base::Time date);
diff --git a/ash/system/time/calendar_utils_unittest.cc b/ash/system/time/calendar_utils_unittest.cc index 20c84061..6ce3ec3 100644 --- a/ash/system/time/calendar_utils_unittest.cc +++ b/ash/system/time/calendar_utils_unittest.cc
@@ -23,20 +23,20 @@ ash::system::TimezoneSettings::GetInstance()->SetTimezoneFromID(u"PST"); // Before daylight saving the time difference is 7 hours. - EXPECT_EQ(-420, calendar_utils::GetTimeDifferenceInMinutes(date)); + EXPECT_EQ(base::Minutes(-420), calendar_utils::GetTimeDifference(date)); // Create a date after daylight saving: Dec,1st 2021. base::Time date2; ASSERT_TRUE(base::Time::FromString("1 Dec 2021 10:00 GMT", &date2)); // After daylight saving the time difference is 8 hours. - EXPECT_EQ(-480, calendar_utils::GetTimeDifferenceInMinutes(date2)); + EXPECT_EQ(base::Minutes(-480), calendar_utils::GetTimeDifference(date2)); // Set the timezone to GMT. ash::system::TimezoneSettings::GetInstance()->SetTimezoneFromID(u"GMT"); - EXPECT_EQ(0, calendar_utils::GetTimeDifferenceInMinutes(date)); - EXPECT_EQ(0, calendar_utils::GetTimeDifferenceInMinutes(date2)); + EXPECT_EQ(base::Minutes(0), calendar_utils::GetTimeDifference(date)); + EXPECT_EQ(base::Minutes(0), calendar_utils::GetTimeDifference(date2)); } TEST_F(CalendarUtilsUnittest, DateFormatter) { @@ -186,6 +186,15 @@ EXPECT_EQ(fetch.first, expected_start); EXPECT_EQ(fetch.second, expected_end); + // The month is with DST ended date. The time difference is changed from -7h + // to -8h. + ASSERT_TRUE(base::Time::FromString("01 Nov 2022 00:00 GMT", &date)); + ASSERT_TRUE(base::Time::FromString("01 Nov 2022 07:00 GMT", &expected_start)); + ASSERT_TRUE(base::Time::FromString("01 Dec 2022 08:00 GMT", &expected_end)); + fetch = calendar_utils::GetFetchStartEndTimes(date); + EXPECT_EQ(fetch.first, expected_start); + EXPECT_EQ(fetch.second, expected_end); + // Timezone "Asia/Bangkok" is GMT + 7h. ash::system::TimezoneSettings::GetInstance()->SetTimezoneFromID( u"Asia/Bangkok");
diff --git a/ash/system/time/calendar_view.cc b/ash/system/time/calendar_view.cc index 20b8daa5..a4834b42 100644 --- a/ash/system/time/calendar_view.cc +++ b/ash/system/time/calendar_view.cc
@@ -180,19 +180,15 @@ layer()->SetFillsBoundsOpaquely(false); switch (type) { case PREVIOUS: - date_ = calendar_view_controller->GetPreviousMonthFirstDayLocal(1); month_name_ = calendar_view_controller->GetPreviousMonthName(); break; case CURRENT: - date_ = calendar_view_controller->GetOnScreenMonthFirstDayLocal(); month_name_ = calendar_view_controller->GetOnScreenMonthName(); break; case NEXT: - date_ = calendar_view_controller->GetNextMonthFirstDayLocal(1); month_name_ = calendar_view_controller->GetNextMonthName(); break; case NEXTNEXT: - date_ = calendar_view_controller->GetNextMonthFirstDayLocal(2); month_name_ = calendar_view_controller->GetNextMonthName(/*num_months=*/2); break; @@ -225,10 +221,7 @@ } private: - // This `date_`'s month and year is used to create this view. - base::Time date_; - - // The name of the `date_` month. + // The name of the month. std::u16string month_name_; // The month label in the view.
diff --git a/ash/system/time/calendar_view_controller.cc b/ash/system/time/calendar_view_controller.cc index 3a1e8675..3e6f9e4d 100644 --- a/ash/system/time/calendar_view_controller.cc +++ b/ash/system/time/calendar_view_controller.cc
@@ -25,15 +25,16 @@ CalendarViewController::CalendarViewController() : currently_shown_date_(base::Time::Now()), calendar_open_time_(base::TimeTicks::Now()), - month_dwell_time_(base::TimeTicks::Now()) { + month_dwell_time_(base::TimeTicks::Now()), + time_difference_minutes_( + calendar_utils::GetTimeDifference(currently_shown_date_)) { std::set<base::Time> months = calendar_utils::GetSurroundingMonthsUTC( - base::Time::Now() + base::Minutes(time_difference_minutes_), + base::Time::Now() + time_difference_minutes_, calendar_utils::kNumSurroundingMonthsCached); Shell::Get()->system_tray_model()->calendar_model()->AddNonPrunableMonths( months); Shell::Get()->system_tray_model()->calendar_model()->ResetLifetimeMetrics( currently_shown_date_); - MaybeUpdateTimeDifference(currently_shown_date_); } CalendarViewController::~CalendarViewController() { @@ -80,24 +81,12 @@ } } -void CalendarViewController::MaybeUpdateTimeDifference(base::Time date) { - // Set the time difference, which is used to generate the exploded everywhere, - // since the LocalExplode doesn't use the manually set timezone. - int const new_time_difference = - calendar_utils::GetTimeDifferenceInMinutes(date); - if (time_difference_minutes_ == new_time_difference) - return; - - time_difference_minutes_ = new_time_difference; - Shell::Get()->system_tray_model()->calendar_model()->RedistributeEvents( - time_difference_minutes_); -} - base::Time CalendarViewController::GetOnScreenMonthFirstDayLocal() { - return calendar_utils::GetFirstDayOfMonth( - ApplyTimeDifference(currently_shown_date_)) - - base::Minutes( - calendar_utils::GetTimeDifferenceInMinutes(currently_shown_date_)); + base::TimeDelta time_difference = + calendar_utils::GetTimeDifference(currently_shown_date_); + return calendar_utils::GetFirstDayOfMonth(currently_shown_date_ + + time_difference) - + time_difference; } base::Time CalendarViewController::GetPreviousMonthFirstDayLocal( @@ -111,7 +100,7 @@ prev = calendar_utils::GetStartOfPreviousMonthLocal(current); } - return prev - base::Minutes(calendar_utils::GetTimeDifferenceInMinutes(prev)); + return prev - calendar_utils::GetTimeDifference(prev); } base::Time CalendarViewController::GetNextMonthFirstDayLocal( @@ -125,36 +114,7 @@ next = calendar_utils::GetStartOfNextMonthLocal(current); } - return next - base::Minutes(calendar_utils::GetTimeDifferenceInMinutes(next)); -} - -base::Time CalendarViewController::GetOnScreenMonthFirstDayUTC() const { - return calendar_utils::GetStartOfMonthUTC(currently_shown_date_); -} - -base::Time CalendarViewController::GetPreviousMonthFirstDayUTC( - unsigned int num_months) const { - base::Time prev, current = GetOnScreenMonthFirstDayUTC(); - - DCHECK_GE(num_months, 1UL); - - for (unsigned int i = 0; i < num_months; i++, current = prev) { - prev = calendar_utils::GetStartOfPreviousMonthUTC(current); - } - - return prev; -} - -base::Time CalendarViewController::GetNextMonthFirstDayUTC( - unsigned int num_months) const { - base::Time next, current = GetOnScreenMonthFirstDayUTC(); - - DCHECK_GE(num_months, 1UL); - - for (unsigned int i = 0; i < num_months; i++, current = next) { - next = calendar_utils::GetStartOfNextMonthUTC(current); - } - return next; + return next - calendar_utils::GetTimeDifference(next); } std::u16string CalendarViewController::GetPreviousMonthName() { @@ -182,12 +142,6 @@ return today_row_ * row_height_; } -void CalendarViewController::FetchEvents() { - Shell::Get()->system_tray_model()->calendar_model()->FetchEventsSurrounding( - calendar_utils::kNumSurroundingMonthsCached, - GetOnScreenMonthFirstDayUTC().UTCMidnight()); -} - SingleDayEventList CalendarViewController::SelectedDateEvents() { if (!selected_date_.has_value()) return std::list<google_apis::calendar::CalendarEvent>(); @@ -252,7 +206,7 @@ } base::Time CalendarViewController::ApplyTimeDifference(base::Time date) { - return date + base::Minutes(calendar_utils::GetTimeDifferenceInMinutes(date)); + return date + calendar_utils::GetTimeDifference(date); } } // namespace ash
diff --git a/ash/system/time/calendar_view_controller.h b/ash/system/time/calendar_view_controller.h index 87953a4..a0f0823 100644 --- a/ash/system/time/calendar_view_controller.h +++ b/ash/system/time/calendar_view_controller.h
@@ -52,12 +52,6 @@ // Updates the `currently_shown_date_`. void UpdateMonth(const base::Time current_month_first_date); - // When rendering a view based on a certain date, the time difference might - // change due to daylight savings time. This method will compare the current - // `time_difference_minutes_` with the new time difference and make an update - // if there's a change. - void MaybeUpdateTimeDifference(base::Time date); - // Gets the first day of the `currently_shown_date_`'s month, in local time. base::Time GetOnScreenMonthFirstDayLocal(); @@ -69,17 +63,6 @@ // `currently_shown_date_`'s month, in local time. base::Time GetNextMonthFirstDayLocal(unsigned int num_months); - // Gets the first day of the `currently_shown_date_`'s month, in UTC time. - base::Time GetOnScreenMonthFirstDayUTC() const; - - // Gets the first day of the nth-previous month based on the - // `currently_shown_date_`'s month, in UTC time. - base::Time GetPreviousMonthFirstDayUTC(unsigned int num_months) const; - - // Gets the first day of the nth-next month based on the - // `currently_shown_date_`'s month, in UTC time. - base::Time GetNextMonthFirstDayUTC(unsigned int num_months) const; - // Gets the month name of the `currently_shown_date_`'s month. std::u16string GetOnScreenMonthName() const; @@ -113,15 +96,14 @@ int row_height() const { return row_height_; } void set_row_height(int height) { row_height_ = height; } - int time_difference_minutes() { return time_difference_minutes_; } + base::TimeDelta time_difference_minutes() const { + return time_difference_minutes_; + } // Getters of the today's row position, top and bottom. int GetTodayRowTopHeight() const; int GetTodayRowBottomHeight() const; - // Requests more events as needed. - void FetchEvents(); - // The calendar events of the selected date. SingleDayEventList SelectedDateEvents(); @@ -194,8 +176,8 @@ // The current row index when the event list view is shown. int expanded_row_index_ = 0; - // The time difference between UTC and local time in minutes. - int time_difference_minutes_ = 0; + // The time difference between UTC and local time. + const base::TimeDelta time_difference_minutes_; base::ObserverList<Observer> observers_;
diff --git a/ash/system/time/date_helper.cc b/ash/system/time/date_helper.cc index e40dc4f..57b7e19 100644 --- a/ash/system/time/date_helper.cc +++ b/ash/system/time/date_helper.cc
@@ -4,6 +4,8 @@ #include "ash/system/time/date_helper.h" +#include "ash/shell.h" +#include "ash/system/model/system_tray_model.h" #include "ash/system/time/calendar_utils.h" #include "base/i18n/unicodestring.h" #include "base/time/time.h" @@ -56,11 +58,11 @@ return base::i18n::UnicodeStringToString16(date_string); } -// TODO(https://crbug.com/1316824): Return TimeDelta instead. -int DateHelper::GetTimeDifferenceInMinutes(base::Time date) { +base::TimeDelta DateHelper::GetTimeDifference(base::Time date) const { const icu::TimeZone& time_zone = system::TimezoneSettings::GetInstance()->GetTimezone(); - const int raw_time_diff = time_zone.getRawOffset() / kMillisecondsPerMinute; + const base::TimeDelta raw_time_diff = + base::Minutes(time_zone.getRawOffset() / kMillisecondsPerMinute); // Calculates the time difference adjust by the possible daylight savings // offset. If the status of any step fails, returns the default time @@ -84,12 +86,11 @@ if (day_light) gmt_offset += time_zone.getDSTSavings(); - return gmt_offset / kMillisecondsPerMinute; + return base::Minutes(gmt_offset / kMillisecondsPerMinute); } base::Time DateHelper::GetLocalMidnight(base::Time date) { - base::TimeDelta time_difference = - base::Minutes(GetTimeDifferenceInMinutes(date)); + base::TimeDelta time_difference = GetTimeDifference(date); return (date + time_difference).UTCMidnight() - time_difference; } @@ -168,6 +169,7 @@ ResetFormatters(); gregorian_calendar_->setTimeZone( system::TimezoneSettings::GetInstance()->GetTimezone()); + Shell::Get()->system_tray_model()->calendar_model()->RedistributeEvents(); } } // namespace ash
diff --git a/ash/system/time/date_helper.h b/ash/system/time/date_helper.h index 0ab31fc..1c90806 100644 --- a/ash/system/time/date_helper.h +++ b/ash/system/time/date_helper.h
@@ -37,7 +37,7 @@ // Get the time difference to UTC time based on the time passed in and the // system timezone. Daylight saving is considered. - int GetTimeDifferenceInMinutes(base::Time date); + base::TimeDelta GetTimeDifference(base::Time date) const; // Gets the local midnight in UTC time of the `date`. // e.g. If the `date` is Apr 1st 1:00 (which is Mar 31st 18:00 PST), the
diff --git a/ash/system/time/time_view.cc b/ash/system/time/time_view.cc index bfbed6500..9d5df76 100644 --- a/ash/system/time/time_view.cc +++ b/ash/system/time/time_view.cc
@@ -108,9 +108,7 @@ void VerticalDateView::UpdateText() { const std::u16string new_text = calendar_utils::GetDayIntOfMonth( - base::Time::Now() + - base::Minutes( - calendar_utils::GetTimeDifferenceInMinutes(base::Time::Now()))); + base::Time::Now() + calendar_utils::GetTimeDifference(base::Time::Now())); if (text_label_->GetText() == new_text) return; text_label_->SetText(new_text);
diff --git a/ash/webui/personalization_app/resources/trusted/ambient/ambient_subpage_element.html b/ash/webui/personalization_app/resources/trusted/ambient/ambient_subpage_element.html index 5af8c16..4d276495 100644 --- a/ash/webui/personalization_app/resources/trusted/ambient/ambient_subpage_element.html +++ b/ash/webui/personalization_app/resources/trusted/ambient/ambient_subpage_element.html
@@ -59,6 +59,9 @@ overflow: hidden; width: 100%; } + .animation-placeholder-list { + width: 516px; + } .animation-placeholder-container { box-sizing: border-box; overflow: hidden; @@ -68,21 +71,13 @@ * parent width. */ width: calc(100% / 3 - 0.34px); } - @media(min-width: 720px) { - .animation-placeholder-container { - /* Subtract 0.25px to fix subpixel rounding issues with iron-list. This - * ensures all grid items in a row add up to at least 1px smaller than the - * parent width. */ - width: calc(100% / 4 - 0.25px) !important; - } - } .animation-item-placeholder { align-items: center; border-radius: var(--personalization-app-grid-item-border-radius); box-sizing: border-box; display: flex; flex-direction: column; - height: 156px; + height: 120px; justify-content: center; overflow: hidden; position: relative; @@ -144,7 +139,7 @@ <h3 id="animationTitle" class="ambient-subpage-element-title" aria-hidden="true"> $i18n{ambientModeAnimationTitle} </h3> - <iron-list items="[[getPlaceholders_(3)]]" grid> + <iron-list class="animation-placeholder-list" items="[[getPlaceholders_(3)]]" grid> <template> <div class="animation-placeholder-container"> <div class="animation-item-placeholder placeholder"></div>
diff --git a/ash/webui/personalization_app/resources/trusted/personalization_theme_element.ts b/ash/webui/personalization_app/resources/trusted/personalization_theme_element.ts index 00446cf0..550a775 100644 --- a/ash/webui/personalization_app/resources/trusted/personalization_theme_element.ts +++ b/ash/webui/personalization_app/resources/trusted/personalization_theme_element.ts
@@ -143,12 +143,11 @@ } private onClickAutoModeButton_(event: Event) { - if (!isSelectionEvent(event)) { + if (!isSelectionEvent(event) || this.colorModeAutoScheduleEnabled_) { return; } setColorModeAutoSchedule( - !this.colorModeAutoScheduleEnabled_, getThemeProvider(), - this.getStore()); + /*enabled=*/ true, getThemeProvider(), this.getStore()); } }
diff --git a/ash/webui/personalization_app/resources/untrusted/collections_grid.html b/ash/webui/personalization_app/resources/untrusted/collections_grid.html index 5e26557..4030ce5 100644 --- a/ash/webui/personalization_app/resources/untrusted/collections_grid.html +++ b/ash/webui/personalization_app/resources/untrusted/collections_grid.html
@@ -167,7 +167,7 @@ </template> <template is="dom-if" if="[[isEmptyTile_(item)]]"> <div tabindex$="[[tabIndex]]" role="button" - aria-disabled$="[[!isSelectableTile_(item)]]" + aria-disabled$="[[getTileAriaDisabled_(item)]]" class$="[[getClassForEmptyTile_(item)]]" managed$="[[isManagedTile_(item)]]" selectable$="[[isSelectableTile_(item)]]"
diff --git a/ash/webui/personalization_app/resources/untrusted/collections_grid.ts b/ash/webui/personalization_app/resources/untrusted/collections_grid.ts index 14a880d..20d7a70 100644 --- a/ash/webui/personalization_app/resources/untrusted/collections_grid.ts +++ b/ash/webui/personalization_app/resources/untrusted/collections_grid.ts
@@ -452,6 +452,10 @@ this.isImageTile_(item); } + private getTileAriaDisabled_(item: Tile|null): string { + return (!this.isSelectableTile_(item)).toString(); + } + /** * Make the text and background gradient visible again after the image has * finished loading. This is called for both on-load and on-error, as either
diff --git a/base/allocator/partition_allocator/address_pool_manager.h b/base/allocator/partition_allocator/address_pool_manager.h index 77c82ab4..93be971 100644 --- a/base/allocator/partition_allocator/address_pool_manager.h +++ b/base/allocator/partition_allocator/address_pool_manager.h
@@ -11,6 +11,7 @@ #include "base/allocator/partition_allocator/address_pool_manager_bitmap.h" #include "base/allocator/partition_allocator/address_pool_manager_types.h" #include "base/allocator/partition_allocator/partition_address_space.h" +#include "base/allocator/partition_allocator/partition_alloc_base/compiler_specific.h" #include "base/allocator/partition_allocator/partition_alloc_check.h" #include "base/allocator/partition_allocator/partition_alloc_config.h" #include "base/allocator/partition_allocator/partition_alloc_constants.h" @@ -151,7 +152,7 @@ #endif }; - ALWAYS_INLINE Pool* GetPool(pool_handle handle) { + PA_ALWAYS_INLINE Pool* GetPool(pool_handle handle) { PA_DCHECK(0 < handle && handle <= kNumPools); return &pools_[handle - 1]; } @@ -169,15 +170,15 @@ friend struct base::LazyInstanceTraitsBase<AddressPoolManager>; }; -ALWAYS_INLINE pool_handle GetRegularPool() { +PA_ALWAYS_INLINE pool_handle GetRegularPool() { return kRegularPoolHandle; } -ALWAYS_INLINE pool_handle GetBRPPool() { +PA_ALWAYS_INLINE pool_handle GetBRPPool() { return kBRPPoolHandle; } -ALWAYS_INLINE pool_handle GetConfigurablePool() { +PA_ALWAYS_INLINE pool_handle GetConfigurablePool() { PA_DCHECK(IsConfigurablePoolAvailable()); return kConfigurablePoolHandle; }
diff --git a/base/allocator/partition_allocator/address_pool_manager_bitmap.h b/base/allocator/partition_allocator/address_pool_manager_bitmap.h index 2edc357..a26eb08 100644 --- a/base/allocator/partition_allocator/address_pool_manager_bitmap.h +++ b/base/allocator/partition_allocator/address_pool_manager_bitmap.h
@@ -11,6 +11,7 @@ #include <limits> #include "base/allocator/buildflags.h" +#include "base/allocator/partition_allocator/partition_alloc_base/compiler_specific.h" #include "base/allocator/partition_allocator/partition_alloc_check.h" #include "base/allocator/partition_allocator/partition_alloc_config.h" #include "base/allocator/partition_allocator/partition_alloc_constants.h" @@ -145,7 +146,7 @@ } // namespace internal // Returns false for nullptr. -ALWAYS_INLINE bool IsManagedByPartitionAlloc(uintptr_t address) { +PA_ALWAYS_INLINE bool IsManagedByPartitionAlloc(uintptr_t address) { // When USE_BACKUP_REF_PTR is off, BRP pool isn't used. // No need to add IsManagedByConfigurablePool, because Configurable Pool // doesn't exist on 32-bit. @@ -160,23 +161,23 @@ } // Returns false for nullptr. -ALWAYS_INLINE bool IsManagedByPartitionAllocRegularPool(uintptr_t address) { +PA_ALWAYS_INLINE bool IsManagedByPartitionAllocRegularPool(uintptr_t address) { return internal::AddressPoolManagerBitmap::IsManagedByRegularPool(address); } // Returns false for nullptr. -ALWAYS_INLINE bool IsManagedByPartitionAllocBRPPool(uintptr_t address) { +PA_ALWAYS_INLINE bool IsManagedByPartitionAllocBRPPool(uintptr_t address) { return internal::AddressPoolManagerBitmap::IsManagedByBRPPool(address); } // Returns false for nullptr. -ALWAYS_INLINE bool IsManagedByPartitionAllocConfigurablePool( +PA_ALWAYS_INLINE bool IsManagedByPartitionAllocConfigurablePool( uintptr_t address) { // The Configurable Pool is only available on 64-bit builds. return false; } -ALWAYS_INLINE bool IsConfigurablePoolAvailable() { +PA_ALWAYS_INLINE bool IsConfigurablePoolAvailable() { // The Configurable Pool is only available on 64-bit builds. return false; }
diff --git a/base/allocator/partition_allocator/page_allocator_constants.h b/base/allocator/partition_allocator/page_allocator_constants.h index 2ab8fc1..5ed440c 100644 --- a/base/allocator/partition_allocator/page_allocator_constants.h +++ b/base/allocator/partition_allocator/page_allocator_constants.h
@@ -7,7 +7,7 @@ #include <stddef.h> -#include "base/compiler_specific.h" +#include "base/allocator/partition_allocator/partition_alloc_base/compiler_specific.h" #include "build/build_config.h" #if BUILDFLAG(IS_APPLE) && defined(ARCH_CPU_64_BITS) @@ -64,10 +64,10 @@ namespace partition_alloc::internal { // Forward declaration, implementation below -PAGE_ALLOCATOR_CONSTANTS_DECLARE_CONSTEXPR ALWAYS_INLINE size_t +PAGE_ALLOCATOR_CONSTANTS_DECLARE_CONSTEXPR PA_ALWAYS_INLINE size_t PageAllocationGranularity(); -PAGE_ALLOCATOR_CONSTANTS_DECLARE_CONSTEXPR ALWAYS_INLINE size_t +PAGE_ALLOCATOR_CONSTANTS_DECLARE_CONSTEXPR PA_ALWAYS_INLINE size_t PageAllocationGranularityShift() { #if BUILDFLAG(IS_WIN) || defined(ARCH_CPU_PPC64) // Modern ppc64 systems support 4kB (shift = 12) and 64kB (shift = 16) page @@ -83,7 +83,7 @@ // arm64 supports 4kb (shift = 12), 16kb (shift = 14), and 64kb (shift = 16) // page sizes. Retrieve from or initialize cache. int shift = page_characteristics.shift.load(std::memory_order_relaxed); - if (UNLIKELY(shift == 0)) { + if (PA_UNLIKELY(shift == 0)) { shift = __builtin_ctz((int)PageAllocationGranularity()); page_characteristics.shift.store(shift, std::memory_order_relaxed); } @@ -93,7 +93,7 @@ #endif } -PAGE_ALLOCATOR_CONSTANTS_DECLARE_CONSTEXPR ALWAYS_INLINE size_t +PAGE_ALLOCATOR_CONSTANTS_DECLARE_CONSTEXPR PA_ALWAYS_INLINE size_t PageAllocationGranularity() { #if BUILDFLAG(IS_APPLE) && defined(ARCH_CPU_64_BITS) // This is literally equivalent to |1 << PageAllocationGranularityShift()| @@ -103,7 +103,7 @@ // arm64 supports 4kb, 16kb, and 64kb page sizes. Retrieve from or // initialize cache. int size = page_characteristics.size.load(std::memory_order_relaxed); - if (UNLIKELY(size == 0)) { + if (PA_UNLIKELY(size == 0)) { size = getpagesize(); page_characteristics.size.store(size, std::memory_order_relaxed); } @@ -113,17 +113,17 @@ #endif } -PAGE_ALLOCATOR_CONSTANTS_DECLARE_CONSTEXPR ALWAYS_INLINE size_t +PAGE_ALLOCATOR_CONSTANTS_DECLARE_CONSTEXPR PA_ALWAYS_INLINE size_t PageAllocationGranularityOffsetMask() { return PageAllocationGranularity() - 1; } -PAGE_ALLOCATOR_CONSTANTS_DECLARE_CONSTEXPR ALWAYS_INLINE size_t +PAGE_ALLOCATOR_CONSTANTS_DECLARE_CONSTEXPR PA_ALWAYS_INLINE size_t PageAllocationGranularityBaseMask() { return ~PageAllocationGranularityOffsetMask(); } -PAGE_ALLOCATOR_CONSTANTS_DECLARE_CONSTEXPR ALWAYS_INLINE size_t +PAGE_ALLOCATOR_CONSTANTS_DECLARE_CONSTEXPR PA_ALWAYS_INLINE size_t SystemPageShift() { // On Windows allocation granularity is higher than the page size. This comes // into play when reserving address space range (allocation granularity), @@ -135,7 +135,7 @@ #endif } -PAGE_ALLOCATOR_CONSTANTS_DECLARE_CONSTEXPR ALWAYS_INLINE size_t +PAGE_ALLOCATOR_CONSTANTS_DECLARE_CONSTEXPR PA_ALWAYS_INLINE size_t SystemPageSize() { #if (BUILDFLAG(IS_APPLE) && defined(ARCH_CPU_64_BITS)) || \ (BUILDFLAG(IS_LINUX) && defined(ARCH_CPU_ARM64)) @@ -148,12 +148,12 @@ #endif } -PAGE_ALLOCATOR_CONSTANTS_DECLARE_CONSTEXPR ALWAYS_INLINE size_t +PAGE_ALLOCATOR_CONSTANTS_DECLARE_CONSTEXPR PA_ALWAYS_INLINE size_t SystemPageOffsetMask() { return SystemPageSize() - 1; } -PAGE_ALLOCATOR_CONSTANTS_DECLARE_CONSTEXPR ALWAYS_INLINE size_t +PAGE_ALLOCATOR_CONSTANTS_DECLARE_CONSTEXPR PA_ALWAYS_INLINE size_t SystemPageBaseMask() { return ~SystemPageOffsetMask(); }
diff --git a/base/allocator/partition_allocator/partition_alloc_base/bits.h b/base/allocator/partition_allocator/partition_alloc_base/bits.h index cee1f400..82cb152 100644 --- a/base/allocator/partition_allocator/partition_alloc_base/bits.h +++ b/base/allocator/partition_allocator/partition_alloc_base/bits.h
@@ -12,9 +12,9 @@ #include <cstdint> #include <type_traits> +#include "base/allocator/partition_allocator/partition_alloc_base/compiler_specific.h" #include "base/allocator/partition_allocator/partition_alloc_base/migration_adapter.h" #include "base/allocator/partition_allocator/partition_alloc_check.h" -#include "base/compiler_specific.h" #include "build/build_config.h" #if defined(COMPILER_MSVC) @@ -81,19 +81,19 @@ #if defined(COMPILER_MSVC) && !defined(__clang__) template <typename T, unsigned bits = sizeof(T) * 8> -ALWAYS_INLINE +PA_ALWAYS_INLINE typename std::enable_if<std::is_unsigned<T>::value && sizeof(T) <= 4, unsigned>::type CountLeadingZeroBits(T x) { static_assert(bits > 0, "invalid instantiation"); unsigned long index; - return LIKELY(_BitScanReverse(&index, static_cast<uint32_t>(x))) + return PA_LIKELY(_BitScanReverse(&index, static_cast<uint32_t>(x))) ? (31 - index - (32 - bits)) : bits; } template <typename T, unsigned bits = sizeof(T) * 8> -ALWAYS_INLINE +PA_ALWAYS_INLINE typename std::enable_if<std::is_unsigned<T>::value && sizeof(T) == 8, unsigned>::type CountLeadingZeroBits(T x) { @@ -101,16 +101,16 @@ unsigned long index; // MSVC only supplies _BitScanReverse64 when building for a 64-bit target. #if defined(ARCH_CPU_64_BITS) - return LIKELY(_BitScanReverse64(&index, static_cast<uint64_t>(x))) + return PA_LIKELY(_BitScanReverse64(&index, static_cast<uint64_t>(x))) ? (63 - index) : 64; #else uint32_t left = static_cast<uint32_t>(x >> 32); - if (LIKELY(_BitScanReverse(&index, left))) + if (PA_LIKELY(_BitScanReverse(&index, left))) return 31 - index; uint32_t right = static_cast<uint32_t>(x); - if (LIKELY(_BitScanReverse(&index, right))) + if (PA_LIKELY(_BitScanReverse(&index, right))) return 63 - index; return 64; @@ -118,18 +118,18 @@ } template <typename T, unsigned bits = sizeof(T) * 8> -ALWAYS_INLINE +PA_ALWAYS_INLINE typename std::enable_if<std::is_unsigned<T>::value && sizeof(T) <= 4, unsigned>::type CountTrailingZeroBits(T x) { static_assert(bits > 0, "invalid instantiation"); unsigned long index; - return LIKELY(_BitScanForward(&index, static_cast<uint32_t>(x))) ? index - : bits; + return PA_LIKELY(_BitScanForward(&index, static_cast<uint32_t>(x))) ? index + : bits; } template <typename T, unsigned bits = sizeof(T) * 8> -ALWAYS_INLINE +PA_ALWAYS_INLINE typename std::enable_if<std::is_unsigned<T>::value && sizeof(T) == 8, unsigned>::type CountTrailingZeroBits(T x) { @@ -137,26 +137,26 @@ unsigned long index; // MSVC only supplies _BitScanForward64 when building for a 64-bit target. #if defined(ARCH_CPU_64_BITS) - return LIKELY(_BitScanForward64(&index, static_cast<uint64_t>(x))) ? index - : 64; + return PA_LIKELY(_BitScanForward64(&index, static_cast<uint64_t>(x))) ? index + : 64; #else uint32_t right = static_cast<uint32_t>(x); - if (LIKELY(_BitScanForward(&index, right))) + if (PA_LIKELY(_BitScanForward(&index, right))) return index; uint32_t left = static_cast<uint32_t>(x >> 32); - if (LIKELY(_BitScanForward(&index, left))) + if (PA_LIKELY(_BitScanForward(&index, left))) return 32 + index; return 64; #endif } -ALWAYS_INLINE uint32_t CountLeadingZeroBits32(uint32_t x) { +PA_ALWAYS_INLINE uint32_t CountLeadingZeroBits32(uint32_t x) { return CountLeadingZeroBits(x); } -ALWAYS_INLINE uint64_t CountLeadingZeroBits64(uint64_t x) { +PA_ALWAYS_INLINE uint64_t CountLeadingZeroBits64(uint64_t x) { return CountLeadingZeroBits(x); } @@ -167,12 +167,12 @@ // instructions have defined behaviour for 0. We could drop to raw __asm__ to // do better, but we'll avoid doing that unless we see proof that we need to. template <typename T, unsigned bits = sizeof(T) * 8> -ALWAYS_INLINE constexpr +PA_ALWAYS_INLINE constexpr typename std::enable_if<std::is_unsigned<T>::value && sizeof(T) <= 8, unsigned>::type CountLeadingZeroBits(T value) { static_assert(bits > 0, "invalid instantiation"); - return LIKELY(value) + return PA_LIKELY(value) ? bits == 64 ? __builtin_clzll(static_cast<uint64_t>(value)) : __builtin_clz(static_cast<uint32_t>(value)) - (32 - bits) @@ -180,31 +180,31 @@ } template <typename T, unsigned bits = sizeof(T) * 8> -ALWAYS_INLINE constexpr +PA_ALWAYS_INLINE constexpr typename std::enable_if<std::is_unsigned<T>::value && sizeof(T) <= 8, unsigned>::type CountTrailingZeroBits(T value) { - return LIKELY(value) ? bits == 64 - ? __builtin_ctzll(static_cast<uint64_t>(value)) - : __builtin_ctz(static_cast<uint32_t>(value)) - : bits; + return PA_LIKELY(value) ? bits == 64 + ? __builtin_ctzll(static_cast<uint64_t>(value)) + : __builtin_ctz(static_cast<uint32_t>(value)) + : bits; } -ALWAYS_INLINE constexpr uint32_t CountLeadingZeroBits32(uint32_t x) { +PA_ALWAYS_INLINE constexpr uint32_t CountLeadingZeroBits32(uint32_t x) { return CountLeadingZeroBits(x); } -ALWAYS_INLINE constexpr uint64_t CountLeadingZeroBits64(uint64_t x) { +PA_ALWAYS_INLINE constexpr uint64_t CountLeadingZeroBits64(uint64_t x) { return CountLeadingZeroBits(x); } #endif -ALWAYS_INLINE constexpr size_t CountLeadingZeroBitsSizeT(size_t x) { +PA_ALWAYS_INLINE constexpr size_t CountLeadingZeroBitsSizeT(size_t x) { return CountLeadingZeroBits(x); } -ALWAYS_INLINE constexpr size_t CountTrailingZeroBitsSizeT(size_t x) { +PA_ALWAYS_INLINE constexpr size_t CountTrailingZeroBitsSizeT(size_t x) { return CountTrailingZeroBits(x); }
diff --git a/base/allocator/partition_allocator/partition_alloc_base/debug/alias.cc b/base/allocator/partition_allocator/partition_alloc_base/debug/alias.cc index 059ead1..12049a6 100644 --- a/base/allocator/partition_allocator/partition_alloc_base/debug/alias.cc +++ b/base/allocator/partition_allocator/partition_alloc_base/debug/alias.cc
@@ -4,12 +4,12 @@ #include "base/allocator/partition_allocator/partition_alloc_base/debug/alias.h" -#include "base/compiler_specific.h" +#include "base/allocator/partition_allocator/partition_alloc_base/compiler_specific.h" namespace partition_alloc::internal::base::debug { // This file/function should be excluded from LTO/LTCG to ensure that the // compiler can't see this function's implementation when compiling calls to it. -NOINLINE void Alias(const void* var) {} +PA_NOINLINE void Alias(const void* var) {} } // namespace partition_alloc::internal::base::debug
diff --git a/base/allocator/partition_allocator/partition_alloc_base/logging.h b/base/allocator/partition_allocator/partition_alloc_base/logging.h index 26db92d..2699f2ed 100644 --- a/base/allocator/partition_allocator/partition_alloc_base/logging.h +++ b/base/allocator/partition_allocator/partition_alloc_base/logging.h
@@ -12,10 +12,10 @@ #include <sstream> #include <string> +#include "base/allocator/partition_allocator/partition_alloc_base/compiler_specific.h" #include "base/allocator/partition_allocator/partition_alloc_base/migration_adapter.h" #include "base/allocator/partition_allocator/partition_alloc_base/scoped_clear_last_error.h" #include "base/base_export.h" -#include "base/compiler_specific.h" #include "base/dcheck_is_on.h" #include "build/build_config.h" @@ -315,8 +315,8 @@ // TODO(akalin): Add more VLOG variants, e.g. VPLOG. -#define PA_LOG_ASSERT(condition) \ - PA_LOG_IF(FATAL, !(ANALYZER_ASSUME_TRUE(condition))) \ +#define PA_LOG_ASSERT(condition) \ + PA_LOG_IF(FATAL, !(PA_ANALYZER_ASSUME_TRUE(condition))) \ << "Assert failed: " #condition ". " #if BUILDFLAG(IS_WIN)
diff --git a/base/allocator/partition_allocator/partition_alloc_base/memory/ref_counted.h b/base/allocator/partition_allocator/partition_alloc_base/memory/ref_counted.h index 674c4fd..630ede2 100644 --- a/base/allocator/partition_allocator/partition_alloc_base/memory/ref_counted.h +++ b/base/allocator/partition_allocator/partition_alloc_base/memory/ref_counted.h
@@ -6,11 +6,11 @@ #define BASE_ALLOCATOR_PARTITION_ALLOCATOR_PARTITION_ALLOC_BASE_MEMORY_REF_COUNTED_H_ #include "base/allocator/partition_allocator/partition_alloc_base/atomic_ref_count.h" +#include "base/allocator/partition_allocator/partition_alloc_base/compiler_specific.h" #include "base/allocator/partition_allocator/partition_alloc_base/memory/scoped_refptr.h" #include "base/base_export.h" #include "base/check.h" #include "base/check_op.h" -#include "base/compiler_specific.h" #include "base/dcheck_is_on.h" #include "build/build_config.h" @@ -66,7 +66,7 @@ #endif } - ALWAYS_INLINE void AddRefImpl() const { + PA_ALWAYS_INLINE void AddRefImpl() const { #if DCHECK_IS_ON() DCHECK(!in_dtor_); // This RefCounted object is created with non-zero reference count. @@ -77,7 +77,7 @@ ref_count_.Increment(); } - ALWAYS_INLINE void AddRefWithCheckImpl() const { + PA_ALWAYS_INLINE void AddRefWithCheckImpl() const { #if DCHECK_IS_ON() DCHECK(!in_dtor_); // This RefCounted object is created with non-zero reference count. @@ -88,7 +88,7 @@ CHECK_GT(ref_count_.Increment(), 0); } - ALWAYS_INLINE bool ReleaseImpl() const { + PA_ALWAYS_INLINE bool ReleaseImpl() const { #if DCHECK_IS_ON() DCHECK(!in_dtor_); DCHECK(!ref_count_.IsZero()); @@ -159,7 +159,7 @@ void Release() const { if (subtle::RefCountedThreadSafeBase::Release()) { - ANALYZER_SKIP_THIS_PATH(); + PA_ANALYZER_SKIP_THIS_PATH(); Traits::Destruct(static_cast<const T*>(this)); } }
diff --git a/base/allocator/partition_allocator/partition_alloc_base/memory/scoped_refptr.h b/base/allocator/partition_allocator/partition_alloc_base/memory/scoped_refptr.h index 50b39a72..b7d417e0 100644 --- a/base/allocator/partition_allocator/partition_alloc_base/memory/scoped_refptr.h +++ b/base/allocator/partition_allocator/partition_alloc_base/memory/scoped_refptr.h
@@ -11,8 +11,8 @@ #include <type_traits> #include <utility> +#include "base/allocator/partition_allocator/partition_alloc_base/compiler_specific.h" #include "base/check.h" -#include "base/compiler_specific.h" namespace partition_alloc::internal { @@ -170,7 +170,7 @@ // to another component (if a component merely needs to use t on the stack // without keeping a ref: pass t as a raw T*). template <class T> -class TRIVIAL_ABI scoped_refptr { +class PA_TRIVIAL_ABI scoped_refptr { public: typedef T element_type;
diff --git a/base/allocator/partition_allocator/partition_alloc_base/rand_util_posix.cc b/base/allocator/partition_allocator/partition_alloc_base/rand_util_posix.cc index 4124751..859cb0d5 100644 --- a/base/allocator/partition_allocator/partition_alloc_base/rand_util_posix.cc +++ b/base/allocator/partition_allocator/partition_alloc_base/rand_util_posix.cc
@@ -11,11 +11,11 @@ #include <unistd.h> #include <sstream> +#include "base/allocator/partition_allocator/partition_alloc_base/compiler_specific.h" #include "base/allocator/partition_allocator/partition_alloc_base/files/file_util.h" #include "base/allocator/partition_allocator/partition_alloc_base/no_destructor.h" #include "base/allocator/partition_allocator/partition_alloc_base/posix/eintr_wrapper.h" #include "base/check.h" -#include "base/compiler_specific.h" #include "build/build_config.h" #if (BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS)) && !BUILDFLAG(IS_NACL) @@ -77,7 +77,7 @@ // Return success only on total success. In case errno == ENOSYS (or any other // error), we'll fall through to reading from urandom below. if (output_length == static_cast<size_t>(r)) { - MSAN_UNPOISON(output, output_length); + PA_MSAN_UNPOISON(output, output_length); return; } #elif BUILDFLAG(IS_MAC)
diff --git a/base/allocator/partition_allocator/partition_alloc_forward.h b/base/allocator/partition_allocator/partition_alloc_forward.h index 70b456e..ea7ce72 100644 --- a/base/allocator/partition_allocator/partition_alloc_forward.h +++ b/base/allocator/partition_allocator/partition_alloc_forward.h
@@ -9,8 +9,8 @@ #include <cstddef> #include "base/allocator/buildflags.h" +#include "base/allocator/partition_allocator/partition_alloc_base/compiler_specific.h" #include "base/base_export.h" -#include "base/compiler_specific.h" #include "base/dcheck_is_on.h" namespace partition_alloc { @@ -77,22 +77,18 @@ // Note that it doesn't apply to realloc()-type functions, as they can return // the same pointer as the one passed as a parameter, as noted in e.g. stdlib.h // on Linux systems. -#if defined(__has_attribute) - -#if __has_attribute(malloc) +#if PA_HAS_ATTRIBUTE(malloc) #define PA_MALLOC_FN __attribute__((malloc)) #endif // Allows the compiler to assume that the return value is aligned on a // kAlignment boundary. This is useful for e.g. using aligned vector // instructions in the constructor for zeroing. -#if __has_attribute(assume_aligned) +#if PA_HAS_ATTRIBUTE(assume_aligned) #define PA_MALLOC_ALIGNED \ __attribute__((assume_aligned(::partition_alloc::internal::kAlignment))) #endif -#endif // defined(__has_attribute) - #if !defined(PA_MALLOC_FN) #define PA_MALLOC_FN #endif
diff --git a/base/strings/string_util.cc b/base/strings/string_util.cc index 2ff7cec..7dd66abc 100644 --- a/base/strings/string_util.cc +++ b/base/strings/string_util.cc
@@ -90,16 +90,6 @@ return internal::CompareCaseInsensitiveASCIIT(a, b); } -bool EqualsCaseInsensitiveASCII(StringPiece a, StringPiece b) { - return a.size() == b.size() && - internal::CompareCaseInsensitiveASCIIT(a, b) == 0; -} - -bool EqualsCaseInsensitiveASCII(StringPiece16 a, StringPiece16 b) { - return a.size() == b.size() && - internal::CompareCaseInsensitiveASCIIT(a, b) == 0; -} - const std::string& EmptyString() { static const base::NoDestructor<std::string> s; return *s;
diff --git a/base/strings/string_util.h b/base/strings/string_util.h index 5aa4f0c..c99d0d37 100644 --- a/base/strings/string_util.h +++ b/base/strings/string_util.h
@@ -12,6 +12,7 @@ #include <stddef.h> #include <stdint.h> +#include <algorithm> #include <initializer_list> #include <string> #include <type_traits> @@ -158,11 +159,32 @@ BASE_EXPORT int CompareCaseInsensitiveASCII(StringPiece a, StringPiece b); BASE_EXPORT int CompareCaseInsensitiveASCII(StringPiece16 a, StringPiece16 b); +namespace internal { +template <typename CharT, typename CharU> +inline bool EqualsCaseInsensitiveASCIIT(BasicStringPiece<CharT> a, + BasicStringPiece<CharU> b) { + return std::equal(a.begin(), a.end(), b.begin(), b.end(), + [](auto lhs, auto rhs) { + return ToLowerASCII(lhs) == ToLowerASCII(rhs); + }); +} +} // namespace internal + // Equality for ASCII case-insensitive comparisons. For full Unicode support, // use base::i18n::ToLower or base::i18h::FoldCase and then compare with either // == or !=. -BASE_EXPORT bool EqualsCaseInsensitiveASCII(StringPiece a, StringPiece b); -BASE_EXPORT bool EqualsCaseInsensitiveASCII(StringPiece16 a, StringPiece16 b); +inline bool EqualsCaseInsensitiveASCII(StringPiece a, StringPiece b) { + return internal::EqualsCaseInsensitiveASCIIT(a, b); +} +inline bool EqualsCaseInsensitiveASCII(StringPiece16 a, StringPiece16 b) { + return internal::EqualsCaseInsensitiveASCIIT(a, b); +} +inline bool EqualsCaseInsensitiveASCII(StringPiece16 a, StringPiece b) { + return internal::EqualsCaseInsensitiveASCIIT(a, b); +} +inline bool EqualsCaseInsensitiveASCII(StringPiece a, StringPiece16 b) { + return internal::EqualsCaseInsensitiveASCIIT(a, b); +} // These threadsafe functions return references to globally unique empty // strings.
diff --git a/base/strings/string_util_unittest.cc b/base/strings/string_util_unittest.cc index e0a3f76..7304421 100644 --- a/base/strings/string_util_unittest.cc +++ b/base/strings/string_util_unittest.cc
@@ -1472,6 +1472,39 @@ EXPECT_TRUE(EqualsCaseInsensitiveASCII("Asdf", "aSDF")); EXPECT_FALSE(EqualsCaseInsensitiveASCII("bsdf", "aSDF")); EXPECT_FALSE(EqualsCaseInsensitiveASCII("Asdf", "aSDFz")); + + EXPECT_TRUE(EqualsCaseInsensitiveASCII(u"", u"")); + EXPECT_TRUE(EqualsCaseInsensitiveASCII(u"Asdf", u"aSDF")); + EXPECT_FALSE(EqualsCaseInsensitiveASCII(u"bsdf", u"aSDF")); + EXPECT_FALSE(EqualsCaseInsensitiveASCII(u"Asdf", u"aSDFz")); + + EXPECT_TRUE(EqualsCaseInsensitiveASCII(u"", "")); + EXPECT_TRUE(EqualsCaseInsensitiveASCII(u"Asdf", "aSDF")); + EXPECT_FALSE(EqualsCaseInsensitiveASCII(u"bsdf", "aSDF")); + EXPECT_FALSE(EqualsCaseInsensitiveASCII(u"Asdf", "aSDFz")); + + EXPECT_TRUE(EqualsCaseInsensitiveASCII("", u"")); + EXPECT_TRUE(EqualsCaseInsensitiveASCII("Asdf", u"aSDF")); + EXPECT_FALSE(EqualsCaseInsensitiveASCII("bsdf", u"aSDF")); + EXPECT_FALSE(EqualsCaseInsensitiveASCII("Asdf", u"aSDFz")); + + // The `WStringPiece` overloads are only defined on Windows. +#if BUILDFLAG(IS_WIN) + EXPECT_TRUE(EqualsCaseInsensitiveASCII(L"", L"")); + EXPECT_TRUE(EqualsCaseInsensitiveASCII(L"Asdf", L"aSDF")); + EXPECT_FALSE(EqualsCaseInsensitiveASCII(L"bsdf", L"aSDF")); + EXPECT_FALSE(EqualsCaseInsensitiveASCII(L"Asdf", L"aSDFz")); + + EXPECT_TRUE(EqualsCaseInsensitiveASCII(L"", "")); + EXPECT_TRUE(EqualsCaseInsensitiveASCII(L"Asdf", "aSDF")); + EXPECT_FALSE(EqualsCaseInsensitiveASCII(L"bsdf", "aSDF")); + EXPECT_FALSE(EqualsCaseInsensitiveASCII(L"Asdf", "aSDFz")); + + EXPECT_TRUE(EqualsCaseInsensitiveASCII("", L"")); + EXPECT_TRUE(EqualsCaseInsensitiveASCII("Asdf", L"aSDF")); + EXPECT_FALSE(EqualsCaseInsensitiveASCII("bsdf", L"aSDF")); + EXPECT_FALSE(EqualsCaseInsensitiveASCII("Asdf", L"aSDFz")); +#endif } TEST(StringUtilTest, IsUnicodeWhitespace) {
diff --git a/base/strings/string_util_win.cc b/base/strings/string_util_win.cc index 72a0403c..139ea47 100644 --- a/base/strings/string_util_win.cc +++ b/base/strings/string_util_win.cc
@@ -24,11 +24,6 @@ return internal::CompareCaseInsensitiveASCIIT(a, b); } -bool EqualsCaseInsensitiveASCII(WStringPiece a, WStringPiece b) { - return a.size() == b.size() && - internal::CompareCaseInsensitiveASCIIT(a, b) == 0; -} - bool RemoveChars(WStringPiece input, WStringPiece remove_chars, std::wstring* output) {
diff --git a/base/strings/string_util_win.h b/base/strings/string_util_win.h index bd8ba738..dc2d824c 100644 --- a/base/strings/string_util_win.h +++ b/base/strings/string_util_win.h
@@ -117,7 +117,15 @@ BASE_EXPORT int CompareCaseInsensitiveASCII(WStringPiece a, WStringPiece b); -BASE_EXPORT bool EqualsCaseInsensitiveASCII(WStringPiece a, WStringPiece b); +inline bool EqualsCaseInsensitiveASCII(WStringPiece a, WStringPiece b) { + return internal::EqualsCaseInsensitiveASCIIT(a, b); +} +inline bool EqualsCaseInsensitiveASCII(WStringPiece a, StringPiece b) { + return internal::EqualsCaseInsensitiveASCIIT(a, b); +} +inline bool EqualsCaseInsensitiveASCII(StringPiece a, WStringPiece b) { + return internal::EqualsCaseInsensitiveASCIIT(a, b); +} BASE_EXPORT bool RemoveChars(WStringPiece input, WStringPiece remove_chars,
diff --git a/base/values.cc b/base/values.cc index e8576200..279b0ab 100644 --- a/base/values.cc +++ b/base/values.cc
@@ -1818,10 +1818,6 @@ index, const_cast<const DictionaryValue**>(out_value)); } -void ListValue::Append(std::unique_ptr<Value> in_value) { - list().push_back(std::move(*in_value)); -} - void ListValue::Append(base::Value::Dict in_dict) { list().emplace_back(std::move(in_dict)); }
diff --git a/base/values.h b/base/values.h index 98fa9cc..ddb8aa10 100644 --- a/base/values.h +++ b/base/values.h
@@ -1348,8 +1348,6 @@ // Appends a Value to the end of the list. // DEPRECATED: prefer `Value::List::Append()`. using Value::Append; - // DEPRECATED: prefer `Value::List::Append()`. - void Append(std::unique_ptr<Value> in_value); // DEPRECATED: prefer `Value::List::Append()`. Provided to simplify // incremental migration and intentionally only defined on ListValue and not // Value.
diff --git a/base/values_unittest.cc b/base/values_unittest.cc index 5f9766d5..90f1485 100644 --- a/base/values_unittest.cc +++ b/base/values_unittest.cc
@@ -1538,8 +1538,8 @@ TEST(ValuesTest, ListDeletion) { ListValue list; - list.Append(std::make_unique<Value>()); - EXPECT_FALSE(list.GetListDeprecated().empty()); + list.Append(Value()); + EXPECT_FALSE(list.GetList().empty()); list.ClearList(); EXPECT_TRUE(list.GetListDeprecated().empty()); } @@ -1775,8 +1775,8 @@ EXPECT_EQ(dv, *copy); std::unique_ptr<ListValue> list(new ListValue); - list->Append(std::make_unique<Value>()); - list->Append(std::make_unique<DictionaryValue>()); + list->Append(Value()); + list->Append(Value(Value::Type::DICTIONARY)); Value list_copy(list->Clone()); ListValue* list_weak = dv.SetList("f", std::move(list)); @@ -1784,7 +1784,7 @@ copy->SetKey("f", std::move(list_copy)); EXPECT_EQ(dv, *copy); - list_weak->Append(std::make_unique<Value>(true)); + list_weak->Append(true); EXPECT_NE(dv, *copy); // Check if Equals detects differences in only the keys. @@ -1996,8 +1996,8 @@ } { ListValue inner; - inner.Append(std::make_unique<DictionaryValue>()); - inner.Append(std::make_unique<ListValue>()); + inner.Append(Value(Value::Type::DICTIONARY)); + inner.Append(Value(Value::Type::LIST)); root->SetKey("list_with_empty_children", std::move(inner)); root = root->DeepCopyWithoutEmptyChildren(); EXPECT_EQ(2U, root->DictSize()); @@ -2006,8 +2006,8 @@ // Nested with siblings. { ListValue inner; - inner.Append(std::make_unique<DictionaryValue>()); - inner.Append(std::make_unique<ListValue>()); + inner.Append(Value(Value::Type::DICTIONARY)); + inner.Append(Value(Value::Type::LIST)); root->SetKey("list_with_empty_children", std::move(inner)); DictionaryValue inner2; inner2.SetKey("empty_dict", DictionaryValue()); @@ -2020,9 +2020,9 @@ // Make sure nested values don't get pruned. { ListValue inner; - auto inner2 = std::make_unique<ListValue>(); - inner2->Append(std::make_unique<Value>("hello")); - inner.Append(std::make_unique<DictionaryValue>()); + ListValue inner2; + inner2.Append("hello"); + inner.Append(Value(Value::Type::DICTIONARY)); inner.Append(std::move(inner2)); root->SetKey("list_with_empty_children", std::move(inner)); root = root->DeepCopyWithoutEmptyChildren(); @@ -2227,13 +2227,13 @@ main_dict.SetKey("dict", dict_value.Clone()); main_dict.SetKey("list", list_value.Clone()); - main_list.Append(std::make_unique<Value>(bool_value.Clone())); - main_list.Append(std::make_unique<Value>(int_value.Clone())); - main_list.Append(std::make_unique<Value>(double_value.Clone())); - main_list.Append(std::make_unique<Value>(string_value.Clone())); - main_list.Append(std::make_unique<Value>(binary_value.Clone())); - main_list.Append(std::make_unique<Value>(dict_value.Clone())); - main_list.Append(std::make_unique<Value>(list_value.Clone())); + main_list.Append(bool_value.Clone()); + main_list.Append(int_value.Clone()); + main_list.Append(double_value.Clone()); + main_list.Append(string_value.Clone()); + main_list.Append(binary_value.Clone()); + main_list.Append(dict_value.Clone()); + main_list.Append(list_value.Clone()); EXPECT_TRUE(main_dict.Get("bool", nullptr)); EXPECT_TRUE(main_dict.Get("int", nullptr));
diff --git a/cc/metrics/compositor_timing_history.cc b/cc/metrics/compositor_timing_history.cc index 2d64b32..1e05bdd 100644 --- a/cc/metrics/compositor_timing_history.cc +++ b/cc/metrics/compositor_timing_history.cc
@@ -635,17 +635,17 @@ void CompositorTimingHistory::NotifyReadyToCommit() { DCHECK_NE(begin_main_frame_start_time_, base::TimeTicks()); + base::TimeTicks begin_main_frame_end_time = Now(); begin_main_frame_start_to_ready_to_commit_duration_history_.InsertSample( - Now() - begin_main_frame_start_time_); + begin_main_frame_end_time - begin_main_frame_start_time_); if (duration_estimates_enabled_) { - bmf_start_to_activate_duration_ = Now() - begin_main_frame_start_time_; if (begin_main_frame_on_critical_path_) { bmf_start_to_ready_to_commit_critical_history_.InsertSample( - (Now() - begin_main_frame_start_time_) + + (begin_main_frame_end_time - begin_main_frame_start_time_) + begin_main_frame_queue_duration_); } else { bmf_start_to_ready_to_commit_not_critical_history_.InsertSample( - (Now() - begin_main_frame_start_time_) + + (begin_main_frame_end_time - begin_main_frame_start_time_) + begin_main_frame_queue_duration_); } } @@ -660,18 +660,16 @@ DCHECK_EQ(pending_tree_creation_time_, base::TimeTicks()); DCHECK_NE(commit_start_time_, base::TimeTicks()); - base::TimeTicks begin_main_frame_end_time = Now(); - DidBeginMainFrame(begin_main_frame_end_time); - commit_duration_history_.InsertSample(begin_main_frame_end_time - - commit_start_time_); - + base::TimeTicks commit_end_time = Now(); if (enabled_ && duration_estimates_enabled_) { - // TODO(szager): This omits commit queueing time - bmf_start_to_activate_duration_ += - begin_main_frame_end_time - commit_start_time_; + bmf_start_to_ready_to_activate_duration_ = + commit_end_time - begin_main_frame_start_time_; } + DidBeginMainFrame(commit_end_time); + commit_duration_history_.InsertSample(commit_end_time - commit_start_time_); + pending_tree_is_impl_side_ = false; - pending_tree_creation_time_ = begin_main_frame_end_time; + pending_tree_creation_time_ = commit_end_time; } void CompositorTimingHistory::DidBeginMainFrame( @@ -766,7 +764,7 @@ commit_to_ready_to_activate_duration_history_.InsertSample( time_since_commit); if (duration_estimates_enabled_) - bmf_start_to_activate_duration_ += time_since_commit; + bmf_start_to_ready_to_activate_duration_ += time_since_commit; } } } @@ -778,12 +776,14 @@ pending_tree_is_impl_side_ = false; pending_tree_creation_time_ = base::TimeTicks(); - pending_tree_ready_to_activate_time_ = base::TimeTicks(); } void CompositorTimingHistory::DidActivate() { DCHECK_NE(base::TimeTicks(), activate_start_time_); - base::TimeDelta activate_duration = Now() - activate_start_time_; + // TODO(szager): uncomment this DCHECK after fixing cc_unittests + // DCHECK_NE(base::TimeTicks(), pending_tree_ready_to_activate_time_); + base::TimeTicks activate_end_time = Now(); + base::TimeDelta activate_duration = activate_end_time - activate_start_time_; if (enabled_) { activate_duration_history_.InsertSample(activate_duration); @@ -792,17 +792,19 @@ // TODO(szager): MFBA means begin_main_frame_on_critical_path_ may have // been overwritten by a call to WillBeginMainFrame(). if (begin_main_frame_on_critical_path_) { - // TODO(szager): MFBA means bmf_start_to_activate_duration_ may have - // been overwritten by a call to NotifyReadyToCommit(). // TODO(szager): MFBA means begin_main_frame_queue_duration_ may have // been overwritten by a call to BeginMainFrameAborted(). + base::TimeDelta time_since_ready_to_activate = + activate_end_time - pending_tree_ready_to_activate_time_; bmf_queue_to_activate_critical_history_.InsertSample( - bmf_start_to_activate_duration_ + activate_duration + - begin_main_frame_queue_duration_); + bmf_start_to_ready_to_activate_duration_ + + time_since_ready_to_activate + begin_main_frame_queue_duration_); } + bmf_start_to_ready_to_activate_duration_ = base::TimeDelta(); } } + pending_tree_ready_to_activate_time_ = base::TimeTicks(); activate_start_time_ = base::TimeTicks(); }
diff --git a/cc/metrics/compositor_timing_history.h b/cc/metrics/compositor_timing_history.h index d8ad8df..1b8a821 100644 --- a/cc/metrics/compositor_timing_history.h +++ b/cc/metrics/compositor_timing_history.h
@@ -143,7 +143,7 @@ double bmf_queue_to_activate_critical_percentile_; base::TimeDelta begin_main_frame_queue_duration_; - base::TimeDelta bmf_start_to_activate_duration_; + base::TimeDelta bmf_start_to_ready_to_activate_duration_; bool begin_main_frame_on_critical_path_; base::TimeTicks begin_main_frame_sent_time_;
diff --git a/cc/metrics/compositor_timing_history_unittest.cc b/cc/metrics/compositor_timing_history_unittest.cc index ee60812f..7a61b2e 100644 --- a/cc/metrics/compositor_timing_history_unittest.cc +++ b/cc/metrics/compositor_timing_history_unittest.cc
@@ -6,7 +6,9 @@ #include "base/logging.h" #include "base/memory/raw_ptr.h" +#include "base/test/scoped_feature_list.h" #include "base/time/time.h" +#include "cc/base/features.h" #include "cc/debug/rendering_stats_instrumentation.h" #include "cc/metrics/dropped_frame_counter.h" #include "testing/gtest/include/gtest/gtest.h" @@ -27,6 +29,11 @@ TestCompositorTimingHistory& operator=(const TestCompositorTimingHistory&) = delete; + const RollingTimeDeltaHistory& bmf_queue_to_activate_critical_history() + const { + return bmf_queue_to_activate_critical_history_; + } + protected: base::TimeTicks Now() const override; @@ -36,7 +43,8 @@ class CompositorTimingHistoryTest : public testing::Test { public: CompositorTimingHistoryTest() - : rendering_stats_(RenderingStatsInstrumentation::Create()), + : feature_list(features::kDurationEstimatesInCompositorTimingHistory), + rendering_stats_(RenderingStatsInstrumentation::Create()), timing_history_(this, rendering_stats_.get()) { AdvanceNowBy(base::Milliseconds(1)); timing_history_.SetRecordingEnabled(true); @@ -47,6 +55,7 @@ base::TimeTicks Now() { return now_; } protected: + base::test::ScopedFeatureList feature_list; std::unique_ptr<RenderingStatsInstrumentation> rendering_stats_; TestCompositorTimingHistory timing_history_; base::TimeTicks now_; @@ -276,5 +285,30 @@ timing_history_.BeginMainFrameQueueDurationNotCriticalEstimate()); } +TEST_F(CompositorTimingHistoryTest, BeginMainFrameToActivateDuration) { + viz::BeginFrameArgs args_ = GetFakeBeginFrameArg(true); + timing_history_.WillBeginMainFrame(args_); + AdvanceNowBy(base::Milliseconds(1)); + timing_history_.BeginMainFrameStarted(Now()); + AdvanceNowBy(base::Milliseconds(2)); + timing_history_.NotifyReadyToCommit(); + AdvanceNowBy(base::Milliseconds(3)); + timing_history_.WillCommit(); + AdvanceNowBy(base::Milliseconds(4)); + timing_history_.DidCommit(); + AdvanceNowBy(base::Milliseconds(5)); + timing_history_.ReadyToActivate(); + AdvanceNowBy(base::Milliseconds(6)); + timing_history_.WillActivate(); + AdvanceNowBy(base::Milliseconds(7)); + timing_history_.DidActivate(); + EXPECT_EQ( + 1u, + timing_history_.bmf_queue_to_activate_critical_history().sample_count()); + EXPECT_EQ( + base::Milliseconds(1 + 2 + 3 + 4 + 5 + 6 + 7), + timing_history_.bmf_queue_to_activate_critical_history().Percentile(0.)); +} + } // namespace } // namespace cc
diff --git a/cc/scheduler/scheduler.cc b/cc/scheduler/scheduler.cc index 7ed5a6f..d507b056 100644 --- a/cc/scheduler/scheduler.cc +++ b/cc/scheduler/scheduler.cc
@@ -74,11 +74,13 @@ void Scheduler::SetNeedsImplSideInvalidation( bool needs_first_draw_on_activation) { - TRACE_EVENT1(TRACE_DISABLED_BY_DEFAULT("cc.debug.scheduler"), - "Scheduler::SetNeedsImplSideInvalidation", - "needs_first_draw_on_activation", - needs_first_draw_on_activation); - state_machine_.SetNeedsImplSideInvalidation(needs_first_draw_on_activation); + { + TRACE_EVENT1(TRACE_DISABLED_BY_DEFAULT("cc.debug.scheduler"), + "Scheduler::SetNeedsImplSideInvalidation", + "needs_first_draw_on_activation", + needs_first_draw_on_activation); + state_machine_.SetNeedsImplSideInvalidation(needs_first_draw_on_activation); + } ProcessScheduledActions(); } @@ -209,23 +211,27 @@ void Scheduler::NotifyReadyToCommit( std::unique_ptr<BeginMainFrameMetrics> details) { - TRACE_EVENT0("cc", "Scheduler::NotifyReadyToCommit"); - compositor_timing_history_->NotifyReadyToCommit(); - compositor_frame_reporting_controller_->NotifyReadyToCommit( - std::move(details)); - state_machine_.NotifyReadyToCommit(); + { + TRACE_EVENT0("cc", "Scheduler::NotifyReadyToCommit"); + compositor_timing_history_->NotifyReadyToCommit(); + compositor_frame_reporting_controller_->NotifyReadyToCommit( + std::move(details)); + state_machine_.NotifyReadyToCommit(); + } ProcessScheduledActions(); } void Scheduler::BeginMainFrameAborted(CommitEarlyOutReason reason) { - TRACE_EVENT1("cc", "Scheduler::BeginMainFrameAborted", "reason", - CommitEarlyOutReasonToString(reason)); - compositor_timing_history_->BeginMainFrameAborted(); - auto frame_id = last_dispatched_begin_main_frame_args_.frame_id; - compositor_frame_reporting_controller_->BeginMainFrameAborted(frame_id, - reason); + { + TRACE_EVENT1("cc", "Scheduler::BeginMainFrameAborted", "reason", + CommitEarlyOutReasonToString(reason)); + compositor_timing_history_->BeginMainFrameAborted(); + auto frame_id = last_dispatched_begin_main_frame_args_.frame_id; + compositor_frame_reporting_controller_->BeginMainFrameAborted(frame_id, + reason); - state_machine_.BeginMainFrameAborted(reason); + state_machine_.BeginMainFrameAborted(reason); + } ProcessScheduledActions(); } @@ -246,18 +252,22 @@ } void Scheduler::DidLoseLayerTreeFrameSink() { - TRACE_EVENT0("cc", "Scheduler::DidLoseLayerTreeFrameSink"); - state_machine_.DidLoseLayerTreeFrameSink(); - UpdateCompositorTimingHistoryRecordingEnabled(); + { + TRACE_EVENT0("cc", "Scheduler::DidLoseLayerTreeFrameSink"); + state_machine_.DidLoseLayerTreeFrameSink(); + UpdateCompositorTimingHistoryRecordingEnabled(); + } ProcessScheduledActions(); } void Scheduler::DidCreateAndInitializeLayerTreeFrameSink() { - TRACE_EVENT0("cc", "Scheduler::DidCreateAndInitializeLayerTreeFrameSink"); - DCHECK(!observing_begin_frame_source_); - DCHECK(!begin_impl_frame_deadline_timer_.IsRunning()); - state_machine_.DidCreateAndInitializeLayerTreeFrameSink(); - UpdateCompositorTimingHistoryRecordingEnabled(); + { + TRACE_EVENT0("cc", "Scheduler::DidCreateAndInitializeLayerTreeFrameSink"); + DCHECK(!observing_begin_frame_source_); + DCHECK(!begin_impl_frame_deadline_timer_.IsRunning()); + state_machine_.DidCreateAndInitializeLayerTreeFrameSink(); + UpdateCompositorTimingHistoryRecordingEnabled(); + } ProcessScheduledActions(); } @@ -355,9 +365,11 @@ void Scheduler::OnBeginFrameSourcePausedChanged(bool paused) { if (state_machine_.begin_frame_source_paused() == paused) return; - TRACE_EVENT_INSTANT1("cc", "Scheduler::SetBeginFrameSourcePaused", - TRACE_EVENT_SCOPE_THREAD, "paused", paused); - state_machine_.SetBeginFrameSourcePaused(paused); + { + TRACE_EVENT_INSTANT1("cc", "Scheduler::SetBeginFrameSourcePaused", + TRACE_EVENT_SCOPE_THREAD, "paused", paused); + state_machine_.SetBeginFrameSourcePaused(paused); + } ProcessScheduledActions(); } @@ -762,24 +774,26 @@ } void Scheduler::OnBeginImplFrameDeadline() { - TRACE_EVENT0("cc,benchmark", "Scheduler::OnBeginImplFrameDeadline"); - begin_impl_frame_deadline_timer_.Stop(); - // We split the deadline actions up into two phases so the state machine - // has a chance to trigger actions that should occur durring and after - // the deadline separately. For example: - // * Sending the BeginMainFrame will not occur after the deadline in - // order to wait for more user-input before starting the next commit. - // * Creating a new OuputSurface will not occur during the deadline in - // order to allow the state machine to "settle" first. - compositor_timing_history_->RecordDeadlineMode(deadline_mode_); - if (!settings_.using_synchronous_renderer_compositor) { - compositor_timing_history_->WillFinishImplFrame( - state_machine_.needs_redraw()); - compositor_frame_reporting_controller_->OnFinishImplFrame( - begin_main_frame_args_.frame_id); - } + { + TRACE_EVENT0("cc,benchmark", "Scheduler::OnBeginImplFrameDeadline"); + begin_impl_frame_deadline_timer_.Stop(); + // We split the deadline actions up into two phases so the state machine + // has a chance to trigger actions that should occur during and after + // the deadline separately. For example: + // * Sending the BeginMainFrame will not occur after the deadline in + // order to wait for more user-input before starting the next commit. + // * Creating a new OutputSurface will not occur during the deadline in + // order to allow the state machine to "settle" first. + compositor_timing_history_->RecordDeadlineMode(deadline_mode_); + if (!settings_.using_synchronous_renderer_compositor) { + compositor_timing_history_->WillFinishImplFrame( + state_machine_.needs_redraw()); + compositor_frame_reporting_controller_->OnFinishImplFrame( + begin_main_frame_args_.frame_id); + } - state_machine_.OnBeginImplFrameDeadline(); + state_machine_.OnBeginImplFrameDeadline(); + } ProcessScheduledActions(); if (settings_.using_synchronous_renderer_compositor) @@ -816,6 +830,13 @@ bool drawing_with_new_active_tree = state_machine_.active_tree_needs_first_draw() && !state_machine_.previous_pending_tree_was_impl_side(); + if (drawing_with_new_active_tree) { + TRACE_EVENT_WITH_FLOW1( + "viz,benchmark", "Graphics.Pipeline.DrawForced", + TRACE_ID_GLOBAL(last_activate_origin_frame_args().trace_id), + TRACE_EVENT_FLAG_FLOW_IN | TRACE_EVENT_FLAG_FLOW_OUT, "trace_id", + last_activate_origin_frame_args().trace_id); + } compositor_timing_history_->WillDraw(); state_machine_.WillDraw(); DrawResult result = client_->ScheduledActionDrawForced(); @@ -825,9 +846,11 @@ } void Scheduler::SetDeferBeginMainFrame(bool defer_begin_main_frame) { - TRACE_EVENT1("cc", "Scheduler::SetDeferBeginMainFrame", - "defer_begin_main_frame", defer_begin_main_frame); - state_machine_.SetDeferBeginMainFrame(defer_begin_main_frame); + { + TRACE_EVENT1("cc", "Scheduler::SetDeferBeginMainFrame", + "defer_begin_main_frame", defer_begin_main_frame); + state_machine_.SetDeferBeginMainFrame(defer_begin_main_frame); + } ProcessScheduledActions(); } @@ -915,12 +938,11 @@ case SchedulerStateMachine::Action::DRAW_FORCED: DrawForced(); break; - case SchedulerStateMachine::Action::DRAW_ABORT: { + case SchedulerStateMachine::Action::DRAW_ABORT: // No action is actually performed, but this allows the state machine to // drain the pipeline without actually drawing. state_machine_.AbortDraw(); break; - } case SchedulerStateMachine::Action::BEGIN_LAYER_TREE_FRAME_SINK_CREATION: state_machine_.WillBeginLayerTreeFrameSinkCreation(); client_->ScheduledActionBeginLayerTreeFrameSinkCreation(); @@ -929,12 +951,11 @@ state_machine_.WillPrepareTiles(); client_->ScheduledActionPrepareTiles(); break; - case SchedulerStateMachine::Action::INVALIDATE_LAYER_TREE_FRAME_SINK: { + case SchedulerStateMachine::Action::INVALIDATE_LAYER_TREE_FRAME_SINK: state_machine_.WillInvalidateLayerTreeFrameSink(); client_->ScheduledActionInvalidateLayerTreeFrameSink( state_machine_.RedrawPending()); break; - } } } while (action != SchedulerStateMachine::Action::NONE);
diff --git a/cc/scheduler/scheduler.h b/cc/scheduler/scheduler.h index d56b14f..bf83e84 100644 --- a/cc/scheduler/scheduler.h +++ b/cc/scheduler/scheduler.h
@@ -178,6 +178,10 @@ // new tree can be activated. void SetNeedsImplSideInvalidation(bool needs_first_draw_on_activation); + bool pending_tree_is_ready_for_activation() const { + return state_machine_.pending_tree_is_ready_for_activation(); + } + // Drawing should result in submitting a CompositorFrame to the // LayerTreeFrameSink and then calling this. void DidSubmitCompositorFrame(uint32_t frame_token, @@ -263,6 +267,9 @@ const viz::BeginFrameArgs& last_dispatched_begin_main_frame_args() const { return last_dispatched_begin_main_frame_args_; } + const viz::BeginFrameArgs& last_commit_origin_frame_args() const { + return last_commit_origin_frame_args_; + } const viz::BeginFrameArgs& last_activate_origin_frame_args() const { return last_activate_origin_frame_args_; }
diff --git a/cc/scheduler/scheduler_state_machine.h b/cc/scheduler/scheduler_state_machine.h index b0eaf6c..1b33c1b8 100644 --- a/cc/scheduler/scheduler_state_machine.h +++ b/cc/scheduler/scheduler_state_machine.h
@@ -358,6 +358,10 @@ return aborted_begin_main_frame_count_; } + bool pending_tree_is_ready_for_activation() const { + return pending_tree_is_ready_for_activation_; + } + protected: bool BeginFrameRequiredForAction() const; bool BeginFrameNeededForVideo() const;
diff --git a/cc/test/fake_layer_tree_host.cc b/cc/test/fake_layer_tree_host.cc index 5e08391..02eedf2 100644 --- a/cc/test/fake_layer_tree_host.cc +++ b/cc/test/fake_layer_tree_host.cc
@@ -104,7 +104,8 @@ // layer_tree_host_->ActivateCommitState() and the second argument would come // from layer_tree_host_->active_commit_state(); we use pending_commit_state() // just to keep the test code simple. - host_impl_->BeginCommit(pending_commit_state()->source_frame_number); + host_impl_->BeginCommit(pending_commit_state()->source_frame_number, + pending_commit_state()->trace_id); TreeSynchronizer::SynchronizeTrees( *pending_commit_state(), thread_unsafe_commit_state(), active_tree()); active_tree()->SetPropertyTrees(*property_trees());
diff --git a/cc/test/layer_tree_test.cc b/cc/test/layer_tree_test.cc index 813a39d..2c9748c5 100644 --- a/cc/test/layer_tree_test.cc +++ b/cc/test/layer_tree_test.cc
@@ -229,8 +229,8 @@ test_hooks_->ReadyToCommitOnThread(this); } - void BeginCommit(int source_frame_number) override { - LayerTreeHostImpl::BeginCommit(source_frame_number); + void BeginCommit(int source_frame_number, uint64_t trace_id) override { + LayerTreeHostImpl::BeginCommit(source_frame_number, trace_id); test_hooks_->BeginCommitOnThread(this); }
diff --git a/cc/trees/commit_state.h b/cc/trees/commit_state.h index 5be59ff..914cd6c 100644 --- a/cc/trees/commit_state.h +++ b/cc/trees/commit_state.h
@@ -122,6 +122,7 @@ bool new_local_surface_id_request = false; bool next_commit_forces_recalculate_raster_scales = false; bool next_commit_forces_redraw = false; + uint64_t trace_id = 0; EventMetrics::List event_metrics; // Latency information for work done in ProxyMain::BeginMainFrame. The // unique_ptr is allocated in RequestMainFrameUpdate, and passed to Blink's
diff --git a/cc/trees/layer_tree_host_impl.cc b/cc/trees/layer_tree_host_impl.cc index bae9dd70..61bc842 100644 --- a/cc/trees/layer_tree_host_impl.cc +++ b/cc/trees/layer_tree_host_impl.cc
@@ -588,12 +588,14 @@ } } -void LayerTreeHostImpl::BeginCommit(int source_frame_number) { +void LayerTreeHostImpl::BeginCommit(int source_frame_number, + uint64_t trace_id) { TRACE_EVENT0("cc", "LayerTreeHostImpl::BeginCommit"); if (!CommitToActiveTree()) CreatePendingTree(); sync_tree()->set_source_frame_number(source_frame_number); + sync_tree()->set_trace_id(trace_id); } // This function commits the LayerTreeHost, as represented by CommitState, to an @@ -2480,9 +2482,15 @@ } base::TimeTicks submit_time = base::TimeTicks::Now(); - layer_tree_frame_sink_->SubmitCompositorFrame( - std::move(compositor_frame), - /*hit_test_data_changed=*/false); + { + TRACE_EVENT_WITH_FLOW0( + "viz,benchmark", "MainFrame.SubmitCompositorFrame", + TRACE_ID_GLOBAL(active_tree()->trace_id()), + TRACE_EVENT_FLAG_FLOW_IN | TRACE_EVENT_FLAG_FLOW_OUT); + layer_tree_frame_sink_->SubmitCompositorFrame( + std::move(compositor_frame), + /*hit_test_data_changed=*/false); + } #if DCHECK_IS_ON() if (!doing_sync_draw_) { @@ -2558,6 +2566,7 @@ TRACE_ID_GLOBAL(CurrentBeginFrameArgs().trace_id), TRACE_EVENT_FLAG_FLOW_IN | TRACE_EVENT_FLAG_FLOW_OUT, "step", "GenerateCompositorFrame"); + rendering_stats_instrumentation_->IncrementFrameCount(1); memory_history_->SaveEntry(tile_manager_.memory_stats_from_last_assign());
diff --git a/cc/trees/layer_tree_host_impl.h b/cc/trees/layer_tree_host_impl.h index 53a0ded1..7361275 100644 --- a/cc/trees/layer_tree_host_impl.h +++ b/cc/trees/layer_tree_host_impl.h
@@ -331,7 +331,7 @@ const viz::BeginFrameArgs& commit_args, const BeginMainFrameMetrics* begin_main_frame_metrics, bool commit_timeout = false); - virtual void BeginCommit(int source_frame_number); + virtual void BeginCommit(int source_frame_number, uint64_t trace_id); virtual void FinishCommit(CommitState& commit_state, const ThreadUnsafeCommitState& unsafe_state); virtual void CommitComplete();
diff --git a/cc/trees/layer_tree_host_impl_unittest.cc b/cc/trees/layer_tree_host_impl_unittest.cc index 249eebb..f24d489b 100644 --- a/cc/trees/layer_tree_host_impl_unittest.cc +++ b/cc/trees/layer_tree_host_impl_unittest.cc
@@ -679,7 +679,7 @@ FakeRasterSource::CreateFromRecordingSource(recording_source.get()); // Create the pending tree. - host_impl_->BeginCommit(0); + host_impl_->BeginCommit(0, /*trace_id=*/1); LayerTreeImpl* pending_tree = host_impl_->pending_tree(); LayerImpl* root = SetupRootLayer<FakePictureLayerImpl>( pending_tree, layer_size, raster_source); @@ -16173,7 +16173,7 @@ host_impl_->WillBeginImplFrame(begin_frame_args); // Create the pending tree. - host_impl_->BeginCommit(0); + host_impl_->BeginCommit(0, /*trace_id=*/1); LayerTreeImpl* pending_tree = host_impl_->pending_tree(); auto* root = SetupRootLayer<FakePictureLayerImpl>(pending_tree, layer_size, raster_source);
diff --git a/cc/trees/layer_tree_impl.cc b/cc/trees/layer_tree_impl.cc index fd9a8a5..af9a0dbe 100644 --- a/cc/trees/layer_tree_impl.cc +++ b/cc/trees/layer_tree_impl.cc
@@ -845,6 +845,7 @@ // This should match the property synchronization in // LayerTreeHost::finishCommitOnImplThread(). target_tree->set_source_frame_number(source_frame_number()); + target_tree->set_trace_id(trace_id()); target_tree->set_background_color(background_color()); target_tree->set_have_scroll_event_handlers(have_scroll_event_handlers()); target_tree->set_event_listener_properties(
diff --git a/cc/trees/layer_tree_impl.h b/cc/trees/layer_tree_impl.h index 4d3b10e..d3f2bbf 100644 --- a/cc/trees/layer_tree_impl.h +++ b/cc/trees/layer_tree_impl.h
@@ -284,6 +284,9 @@ source_frame_number_ = frame_number; } + uint64_t trace_id() const { return trace_id_; } + void set_trace_id(uint64_t val) { trace_id_ = val; } + bool is_first_frame_after_commit() const { return source_frame_number_ != is_first_frame_after_commit_tracker_; } @@ -822,6 +825,7 @@ raw_ptr<LayerTreeHostImpl> host_impl_; int source_frame_number_; + uint64_t trace_id_ = 0; int is_first_frame_after_commit_tracker_; raw_ptr<HeadsUpDisplayLayerImpl> hud_layer_; PropertyTrees property_trees_;
diff --git a/cc/trees/proxy_common.h b/cc/trees/proxy_common.h index d8b8725..a1d9117 100644 --- a/cc/trees/proxy_common.h +++ b/cc/trees/proxy_common.h
@@ -31,6 +31,7 @@ ActiveFrameSequenceTrackers active_sequence_trackers = 0; bool evicted_ui_resources = false; std::vector<uint32_t> finished_transition_request_sequence_ids; + uint64_t trace_id = 0; }; } // namespace cc
diff --git a/cc/trees/proxy_impl.cc b/cc/trees/proxy_impl.cc index 6bc47a6..db40235 100644 --- a/cc/trees/proxy_impl.cc +++ b/cc/trees/proxy_impl.cc
@@ -225,7 +225,6 @@ } void ProxyImpl::SetNeedsCommitOnImpl() { - DCHECK(IsImplThread()); SetNeedsCommitOnImplThread(); } @@ -319,7 +318,12 @@ const viz::BeginFrameArgs& commit_args, CommitTimestamps* commit_timestamps, bool commit_timeout) { - TRACE_EVENT0("cc", "ProxyImpl::NotifyReadyToCommitOnImpl"); + { + TRACE_EVENT_WITH_FLOW0( + "viz,benchmark", "MainFrame.NotifyReadyToCommitOnImpl", + TRACE_ID_LOCAL(commit_state->trace_id), + TRACE_EVENT_FLAG_FLOW_IN | TRACE_EVENT_FLAG_FLOW_OUT); + } DCHECK(!data_for_commit_.get()); DCHECK(IsImplThread()); DCHECK(base::FeatureList::IsEnabled(features::kNonBlockingCommit) || @@ -405,7 +409,13 @@ } void ProxyImpl::NotifyReadyToActivate() { - TRACE_EVENT0("cc", "ProxyImpl::NotifyReadyToActivate"); + if (host_impl_->sync_tree() && + !scheduler_->pending_tree_is_ready_for_activation()) { + TRACE_EVENT_WITH_FLOW0( + "viz,benchmark", "MainFrame.NotifyReadyToActivate", + TRACE_ID_LOCAL(host_impl_->sync_tree()->trace_id()), + TRACE_EVENT_FLAG_FLOW_IN | TRACE_EVENT_FLAG_FLOW_OUT); + } DCHECK(IsImplThread()); scheduler_->NotifyReadyToActivate(); } @@ -694,7 +704,20 @@ host_impl_->FrameSequenceTrackerActiveTypes(); begin_main_frame_state->evicted_ui_resources = host_impl_->EvictedUIResourcesExist(); + begin_main_frame_state->trace_id = + (0x1llu << 51) | // Signature bit chosen at random to avoid collisions + (args.frame_id.source_id << 32) | + (args.frame_id.sequence_number & 0xffffffff); host_impl_->WillSendBeginMainFrame(); + { + TRACE_EVENT_WITH_FLOW1( + "viz,benchmark", "Graphics.Pipeline", TRACE_ID_GLOBAL(args.trace_id), + TRACE_EVENT_FLAG_FLOW_IN, "step", "SendBeginMainFrame"); + TRACE_EVENT_WITH_FLOW0("viz,benchmark", + "MainFrame.SendBeginMainFrameOnImpl", + TRACE_ID_LOCAL(begin_main_frame_state->trace_id), + TRACE_EVENT_FLAG_FLOW_OUT); + } MainThreadTaskRunner()->PostTask( FROM_HERE, base::BindOnce(&ProxyMain::BeginMainFrame, proxy_main_weak_ptr_, @@ -722,7 +745,12 @@ } void ProxyImpl::ScheduledActionCommit() { - TRACE_EVENT0("cc", "ProxyImpl::ScheduledActionCommit"); + { + TRACE_EVENT_WITH_FLOW0( + "viz,benchmark", "MainFrame.BeginCommit", + TRACE_ID_LOCAL(data_for_commit_->commit_state->trace_id), + TRACE_EVENT_FLAG_FLOW_IN | TRACE_EVENT_FLAG_FLOW_OUT); + } DCHECK(IsImplThread()); DCHECK(base::FeatureList::IsEnabled(features::kNonBlockingCommit) || IsMainThreadBlocked()); @@ -737,7 +765,8 @@ auto* commit_state = data_for_commit_->commit_state.get(); auto* unsafe_state = data_for_commit_->unsafe_state; - host_impl_->BeginCommit(commit_state->source_frame_number); + host_impl_->BeginCommit(commit_state->source_frame_number, + commit_state->trace_id); host_impl_->FinishCommit(*commit_state, *unsafe_state); base::TimeTicks finish_time = base::TimeTicks::Now(); if (data_for_commit_->commit_timestamps) @@ -757,8 +786,10 @@ } void ProxyImpl::ScheduledActionPostCommit() { - TRACE_EVENT0("cc", "ProxyImpl::ScheduledActionPostCommit"); DCHECK(IsImplThread()); + TRACE_EVENT_WITH_FLOW0("viz,benchmark", "MainFrame.CommitComplete", + TRACE_ID_LOCAL(host_impl_->sync_tree()->trace_id()), + TRACE_EVENT_FLAG_FLOW_IN | TRACE_EVENT_FLAG_FLOW_OUT); // This is run as a separate step from commit because it can be time-consuming // and ought not delay sending the next BeginMainFrame. @@ -768,7 +799,14 @@ } void ProxyImpl::ScheduledActionActivateSyncTree() { - TRACE_EVENT0("cc", "ProxyImpl::ScheduledActionActivateSyncTree"); + if (host_impl_->sync_tree() && + host_impl_->sync_tree()->source_frame_number() != + host_impl_->active_tree()->source_frame_number()) { + TRACE_EVENT_WITH_FLOW0( + "viz,benchmark", "MainFrame.Activate", + TRACE_ID_LOCAL(host_impl_->sync_tree()->trace_id()), + TRACE_EVENT_FLAG_FLOW_IN | TRACE_EVENT_FLAG_FLOW_OUT); + } DCHECK(IsImplThread()); host_impl_->ActivateSyncTree(); } @@ -819,6 +857,10 @@ DCHECK(IsImplThread()); DCHECK(host_impl_.get()); + TRACE_EVENT_WITH_FLOW0("viz,benchmark", "MainFrame.Draw", + TRACE_ID_LOCAL(host_impl_->active_tree()->trace_id()), + TRACE_EVENT_FLAG_FLOW_IN | TRACE_EVENT_FLAG_FLOW_OUT); + base::AutoReset<bool> mark_inside(&inside_draw_, true); // This method is called on a forced draw, regardless of whether we are able
diff --git a/cc/trees/proxy_main.cc b/cc/trees/proxy_main.cc index 93607be..9d04e0d1e 100644 --- a/cc/trees/proxy_main.cc +++ b/cc/trees/proxy_main.cc
@@ -131,11 +131,19 @@ DCHECK_EQ(NO_PIPELINE_STAGE, current_pipeline_stage_); DCHECK(!layer_tree_host_->in_commit()); + { + TRACE_EVENT_WITH_FLOW0( + "viz,benchmark", "MainFrame.BeginMainFrameOnMain", + TRACE_ID_LOCAL(begin_main_frame_state->trace_id), + TRACE_EVENT_FLAG_FLOW_IN | TRACE_EVENT_FLAG_FLOW_OUT); + } base::TimeTicks begin_main_frame_start_time = base::TimeTicks::Now(); + const viz::BeginFrameArgs& frame_args = + begin_main_frame_state->begin_frame_args; benchmark_instrumentation::ScopedBeginFrameTask begin_frame_task( benchmark_instrumentation::kDoBeginFrame, - begin_main_frame_state->begin_frame_args.frame_id.sequence_number); + frame_args.frame_id.sequence_number); // This needs to run unconditionally, so do it before any early-returns. if (layer_tree_host_->scheduling_client()) @@ -156,6 +164,10 @@ if (!layer_tree_host_->IsVisible()) { TRACE_EVENT_INSTANT0("cc", "EarlyOut_NotVisible", TRACE_EVENT_SCOPE_THREAD); + TRACE_EVENT_WITH_FLOW1( + "viz,benchmark", "MainFrame.BeginMainFrameAbortedOnMain", + TRACE_ID_LOCAL(begin_main_frame_state->trace_id), + TRACE_EVENT_FLAG_FLOW_IN, "reason", "ABORTED_NOT_VISIBLE"); // In this case, since the commit is deferred to a later time, gathered // events metrics are not discarded so that they can be reported if the // commit happens in the future. @@ -180,6 +192,11 @@ if (defer_main_frame_update_) { TRACE_EVENT_INSTANT0("cc", "EarlyOut_DeferCommit", TRACE_EVENT_SCOPE_THREAD); + TRACE_EVENT_WITH_FLOW1("viz,benchmark", + "MainFrame.BeginMainFrameAbortedOnMain", + TRACE_ID_LOCAL(begin_main_frame_state->trace_id), + TRACE_EVENT_FLAG_FLOW_IN, "reason", + "ABORTED_DEFERRED_MAIN_FRAME_UPDATE"); // In this case, since the commit is deferred to a later time, gathered // events metrics are not discarded so that they can be reported if the // commit happens in the future. @@ -243,12 +260,11 @@ // See LayerTreeHostClient::BeginMainFrame for more documentation on // what this does. - layer_tree_host_->BeginMainFrame(begin_main_frame_state->begin_frame_args); + layer_tree_host_->BeginMainFrame(frame_args); // Updates cc animations on the main-thread. This is necessary in order // to track animation states such that they are cleaned up properly. - layer_tree_host_->AnimateLayers( - begin_main_frame_state->begin_frame_args.frame_time); + layer_tree_host_->AnimateLayers(frame_args.frame_time); // Recreates all UI resources if the compositor thread evicted UI resources // because it became invisible or there was a lost context when the compositor @@ -269,13 +285,17 @@ // When we don't need to produce a CompositorFrame, there's also no need to // commit our updates. We still need to run layout and paint though, as it can // have side effects on page loading behavior. - skip_commit |= begin_main_frame_state->begin_frame_args.animate_only; + skip_commit |= frame_args.animate_only; if (skip_commit) { current_pipeline_stage_ = NO_PIPELINE_STAGE; layer_tree_host_->DidBeginMainFrame(); TRACE_EVENT_INSTANT0("cc", "EarlyOut_DeferCommit_InsideBeginMainFrame", TRACE_EVENT_SCOPE_THREAD); + TRACE_EVENT_WITH_FLOW1( + "viz,benchmark", "MainFrame.BeginMainFrameAbortedOnMain", + TRACE_ID_LOCAL(begin_main_frame_state->trace_id), + TRACE_EVENT_FLAG_FLOW_IN, "reason", "ABORTED_DEFERRED_COMMIT"); layer_tree_host_->RecordEndOfFrameMetrics( begin_main_frame_start_time, begin_main_frame_state->active_sequence_trackers); @@ -324,8 +344,7 @@ final_pipeline_stage_ = COMMIT_PIPELINE_STAGE; commit_trace_ = std::make_unique<devtools_instrumentation::ScopedCommitTrace>( - layer_tree_host_->GetId(), - begin_main_frame_state->begin_frame_args.frame_id.sequence_number); + layer_tree_host_->GetId(), frame_args.frame_id.sequence_number); auto completion_event_ptr = std::make_unique<CompletionEvent>( base::WaitableEvent::ResetPolicy::MANUAL); @@ -336,6 +355,12 @@ std::unique_ptr<CommitState> commit_state = layer_tree_host_->WillCommit( std::move(completion_event_ptr), has_updates); DCHECK_EQ(has_updates, (bool)commit_state.get()); + if (commit_state.get()) { + commit_state->trace_id = + (0x1llu << 52) | // Signature bit chosen at random to avoid collisions + (frame_args.frame_id.source_id << 32) | + (commit_state->source_frame_number & 0xffffffff); + } current_pipeline_stage_ = COMMIT_PIPELINE_STAGE; if (!has_updates) { @@ -344,6 +369,10 @@ layer_tree_host_->DidBeginMainFrame(); TRACE_EVENT_INSTANT0("cc,raf_investigation", "EarlyOut_NoUpdates", TRACE_EVENT_SCOPE_THREAD); + TRACE_EVENT_WITH_FLOW1( + "viz,benchmark", "MainFrame.BeginMainFrameAbortedOnMain", + TRACE_ID_LOCAL(begin_main_frame_state->trace_id), + TRACE_EVENT_FLAG_FLOW_IN, "reason", "FINISHED_NO_UPDATES"); std::vector<std::unique_ptr<SwapPromise>> swap_promises = layer_tree_host_->GetSwapPromiseManager()->TakeSwapPromises(); @@ -383,6 +412,15 @@ CommitTimestamps commit_timestamps; bool blocking = !base::FeatureList::IsEnabled(features::kNonBlockingCommit); { + TRACE_EVENT_WITH_FLOW0("viz,benchmark", + "MainFrame.NotifyReadyToCommitOnMain", + TRACE_ID_LOCAL(begin_main_frame_state->trace_id), + TRACE_EVENT_FLAG_FLOW_IN); + TRACE_EVENT_WITH_FLOW0( + "viz,benchmark", "MainFrame.NotifyReadyToCommitOnMain", + TRACE_ID_LOCAL(commit_state->trace_id), TRACE_EVENT_FLAG_FLOW_OUT) + } + { TRACE_EVENT0("cc,raf_investigation", "ProxyMain::BeginMainFrame::commit"); absl::optional<DebugScopedSetMainThreadBlocked> main_thread_blocked; @@ -390,13 +428,13 @@ main_thread_blocked.emplace(task_runner_provider_); ImplThreadTaskRunner()->PostTask( - FROM_HERE, base::BindOnce(&ProxyImpl::NotifyReadyToCommitOnImpl, - base::Unretained(proxy_impl_.get()), - completion_event, std::move(commit_state), - &unsafe_state, begin_main_frame_start_time, - begin_main_frame_state->begin_frame_args, - blocking ? &commit_timestamps : nullptr, - commit_timeout)); + FROM_HERE, + base::BindOnce(&ProxyImpl::NotifyReadyToCommitOnImpl, + base::Unretained(proxy_impl_.get()), completion_event, + std::move(commit_state), &unsafe_state, + begin_main_frame_start_time, frame_args, + blocking ? &commit_timestamps : nullptr, + commit_timeout)); if (blocking) layer_tree_host_->WaitForProtectedSequenceCompletion(); }
diff --git a/cc/trees/single_thread_proxy.cc b/cc/trees/single_thread_proxy.cc index ffcc223..15f1bf4 100644 --- a/cc/trees/single_thread_proxy.cc +++ b/cc/trees/single_thread_proxy.cc
@@ -233,7 +233,8 @@ DebugScopedSetMainThreadBlocked main_thread_blocked(task_runner_provider_); DebugScopedSetImplThread impl(task_runner_provider_); - host_impl_->BeginCommit(commit_state->source_frame_number); + host_impl_->BeginCommit(commit_state->source_frame_number, + commit_state->trace_id); host_impl_->FinishCommit(*commit_state, unsafe_state); commit_state.reset();
diff --git a/chrome/android/chrome_java_resources.gni b/chrome/android/chrome_java_resources.gni index 957aaf1..cdfe5fb1 100644 --- a/chrome/android/chrome_java_resources.gni +++ b/chrome/android/chrome_java_resources.gni
@@ -564,7 +564,6 @@ "java/res/layout/long_screenshots_area_selection_dialog.xml", "java/res/layout/manage_space_activity.xml", "java/res/layout/manage_sync_settings_bottom_bar.xml", - "java/res/layout/managed_by_menu_item.xml", "java/res/layout/material_tooltip.xml", "java/res/layout/multiline_spinner_item.xml", "java/res/layout/mv_tiles_carousel.xml",
diff --git a/chrome/android/chrome_java_sources.gni b/chrome/android/chrome_java_sources.gni index e4b9b12b..ebf4a04 100644 --- a/chrome/android/chrome_java_sources.gni +++ b/chrome/android/chrome_java_sources.gni
@@ -68,7 +68,6 @@ "java/src/org/chromium/chrome/browser/app/appmenu/AppMenuPropertiesDelegateImpl.java", "java/src/org/chromium/chrome/browser/app/appmenu/DividerLineMenuItemViewBinder.java", "java/src/org/chromium/chrome/browser/app/appmenu/IncognitoMenuItemViewBinder.java", - "java/src/org/chromium/chrome/browser/app/appmenu/ManagedByMenuItemViewBinder.java", "java/src/org/chromium/chrome/browser/app/appmenu/UpdateMenuItemViewBinder.java", "java/src/org/chromium/chrome/browser/app/bluetooth/BluetoothNotificationServiceImpl.java", "java/src/org/chromium/chrome/browser/app/download/DownloadMessageUiDelegate.java",
diff --git a/chrome/android/java/res/layout/managed_by_menu_item.xml b/chrome/android/java/res/layout/managed_by_menu_item.xml deleted file mode 100644 index 8b6844e..0000000 --- a/chrome/android/java/res/layout/managed_by_menu_item.xml +++ /dev/null
@@ -1,34 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- Copyright 2020 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. ---> - -<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:app="http://schemas.android.com/apk/res-auto" - style="@style/AppMenuItem" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:orientation="vertical" > - - <View style="@style/HorizontalDivider" - android:layout_width="match_parent" - android:background="@macro/divider_line_bg_color" /> - - <org.chromium.components.browser_ui.widget.text.TextViewWithCompoundDrawables - android:id="@+id/menu_item_text" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:minHeight="@dimen/overflow_menu_managed_by_min_height" - android:paddingVertical="12dp" - android:text="@string/managed" - android:textAppearance="@style/TextAppearance.TextMedium.Secondary" - android:singleLine="true" - android:drawableStart="@drawable/ic_business" - android:drawablePadding="12dp" - app:chromeDrawableTint="@macro/default_icon_color_secondary" - android:tintMode="src_in" - app:drawableWidth="20dp" - app:drawableHeight="20dp"/> - -</LinearLayout> \ No newline at end of file
diff --git a/chrome/android/java/res/values/dimens.xml b/chrome/android/java/res/values/dimens.xml index 41bc3e50..f88557d 100644 --- a/chrome/android/java/res/values/dimens.xml +++ b/chrome/android/java/res/values/dimens.xml
@@ -378,8 +378,6 @@ <!-- Overflow Menu Dimensions --> <dimen name="overflow_menu_divider_line_padding">5dp</dimen> - <!-- top padding(12dp) + icon size(20dp) + bottom padding(12dp) --> - <dimen name="overflow_menu_managed_by_min_height">44dp</dimen> <dimen name="overflow_menu_update_min_height">40sp</dimen> <dimen name="overflow_menu_update_padding">12dp</dimen>
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/app/appmenu/AppMenuPropertiesDelegateImpl.java b/chrome/android/java/src/org/chromium/chrome/browser/app/appmenu/AppMenuPropertiesDelegateImpl.java index 692f26d..948482c 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/app/appmenu/AppMenuPropertiesDelegateImpl.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/app/appmenu/AppMenuPropertiesDelegateImpl.java
@@ -233,7 +233,6 @@ public @Nullable List<CustomViewBinder> getCustomViewBinders() { List<CustomViewBinder> customViewBinders = new ArrayList<>(); customViewBinders.add(new UpdateMenuItemViewBinder()); - customViewBinders.add(new ManagedByMenuItemViewBinder()); customViewBinders.add(new IncognitoMenuItemViewBinder()); customViewBinders.add(new DividerLineMenuItemViewBinder()); return customViewBinders;
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/app/appmenu/ManagedByMenuItemViewBinder.java b/chrome/android/java/src/org/chromium/chrome/browser/app/appmenu/ManagedByMenuItemViewBinder.java deleted file mode 100644 index 6993e95..0000000 --- a/chrome/android/java/src/org/chromium/chrome/browser/app/appmenu/ManagedByMenuItemViewBinder.java +++ /dev/null
@@ -1,66 +0,0 @@ -// Copyright 2020 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.app.appmenu; - -import android.content.Context; -import android.view.View; - -import org.chromium.chrome.R; -import org.chromium.chrome.browser.ui.appmenu.AppMenuItemProperties; -import org.chromium.chrome.browser.ui.appmenu.AppMenuUtil; -import org.chromium.chrome.browser.ui.appmenu.CustomViewBinder; -import org.chromium.ui.modelutil.PropertyKey; -import org.chromium.ui.modelutil.PropertyModel; - -/** A custom binder used to bind the managed by menu item. */ -class ManagedByMenuItemViewBinder implements CustomViewBinder { - private static final int MANAGED_BY_ITEM_VIEW_TYPE = 0; - - @Override - public int getViewTypeCount() { - return 1; - } - - @Override - public int getItemViewType(int id) { - return id == R.id.managed_by_menu_id ? MANAGED_BY_ITEM_VIEW_TYPE - : CustomViewBinder.NOT_HANDLED; - } - - @Override - public int getLayoutId(int viewType) { - if (viewType == MANAGED_BY_ITEM_VIEW_TYPE) { - return R.layout.managed_by_menu_item; - } - return CustomViewBinder.NOT_HANDLED; - } - - @Override - public void bind(PropertyModel model, View view, PropertyKey key) { - AppMenuUtil.bindStandardItemEnterAnimation(model, view, key); - - if (key == AppMenuItemProperties.MENU_ITEM_ID) { - int id = model.get(AppMenuItemProperties.MENU_ITEM_ID); - assert id == R.id.managed_by_menu_id; - - view.setId(id); - } - } - - @Override - public boolean supportsEnterAnimation(int id) { - return true; - } - - @Override - public int getPixelHeight(Context context) { - // TODO(crbug.com/1124607): Update this menu item for new app menu. - int dividerLineHeight = - context.getResources().getDimensionPixelSize(R.dimen.divider_height); - int itemSize = context.getResources().getDimensionPixelSize( - R.dimen.overflow_menu_managed_by_min_height); - return dividerLineHeight + itemSize; - } -}
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/suggestions/tile/MostVisitedTilesCoordinator.java b/chrome/android/java/src/org/chromium/chrome/browser/suggestions/tile/MostVisitedTilesCoordinator.java index 4fc5381..a39fad7a 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/suggestions/tile/MostVisitedTilesCoordinator.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/suggestions/tile/MostVisitedTilesCoordinator.java
@@ -91,10 +91,10 @@ mModelChangeProcessor = PropertyModelChangeProcessor.create(propertyModel, new MostVisitedTilesViewBinder.ViewHolder(mvTilesContainerLayout, tilesLayout), MostVisitedTilesViewBinder::bind); - mRenderer = - new TileRenderer(mActivity, SuggestionsConfig.TileStyle.MODERN, TITLE_LINES, null); + mRenderer = new TileRenderer( + mActivity, SuggestionsConfig.getTileStyle(mUiConfig), TITLE_LINES, null); - mMediator = new MostVisitedTilesMediator(activity.getResources(), tilesLayout, + mMediator = new MostVisitedTilesMediator(activity.getResources(), mUiConfig, tilesLayout, mvTilesContainerLayout.findViewById(R.id.tile_grid_placeholder_stub), mRenderer, propertyModel, shouldShowSkeletonUIPreNative && isScrollableMVTEnabled, isScrollableMVTEnabled,
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/suggestions/tile/MostVisitedTilesMediator.java b/chrome/android/java/src/org/chromium/chrome/browser/suggestions/tile/MostVisitedTilesMediator.java index e86fefb..b0ac607 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/suggestions/tile/MostVisitedTilesMediator.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/suggestions/tile/MostVisitedTilesMediator.java
@@ -24,6 +24,7 @@ import org.chromium.chrome.browser.suggestions.SiteSuggestion; import org.chromium.chrome.browser.suggestions.SuggestionsUiDelegate; import org.chromium.chrome.browser.suggestions.mostvisited.MostVisitedSitesMetadataUtils; +import org.chromium.components.browser_ui.widget.displaystyle.UiConfig; import org.chromium.components.search_engines.TemplateUrlService.TemplateUrlServiceObserver; import org.chromium.ui.modelutil.PropertyModel; @@ -42,6 +43,7 @@ private static final int MAX_RESULTS = 12; private final Resources mResources; + private final UiConfig mUiConfig; private final ViewGroup mMvTilesLayout; private final ViewStub mNoMvPlaceholderStub; private final PropertyModel mModel; @@ -57,12 +59,13 @@ private TileGroup mTileGroup; private boolean mInitializationComplete; - public MostVisitedTilesMediator(Resources resources, ViewGroup mvTilesLayout, + public MostVisitedTilesMediator(Resources resources, UiConfig uiConfig, ViewGroup mvTilesLayout, ViewStub noMvPlaceholderStub, TileRenderer renderer, PropertyModel propertyModel, boolean shouldShowSkeletonUIPreNative, boolean isScrollableMVTEnabled, boolean isTablet, @Nullable Runnable snapshotTileGridChangedRunnable, @Nullable Runnable tileCountChangedRunnable) { mResources = resources; + mUiConfig = uiConfig; mRenderer = renderer; mModel = propertyModel; mIsScrollableMVTEnabled = isScrollableMVTEnabled; @@ -211,12 +214,16 @@ if (mIsTablet) { mTileViewPortraitIntervalPadding = mTileViewPortraitEdgePadding; } else { + boolean isSmallDevice = mUiConfig.getCurrentDisplayStyle().isSmall(); int screenWidth = mResources.getDisplayMetrics().widthPixels; - int tileViewWidth = mResources.getDimensionPixelOffset(R.dimen.tile_view_width); + int tileViewWidth = mResources.getDimensionPixelOffset( + isSmallDevice ? R.dimen.tile_view_width_condensed : R.dimen.tile_view_width); // We want to show four and a half tile view to make users know the MV tiles are - // scrollable. - mTileViewPortraitIntervalPadding = - (int) ((screenWidth - mTileViewPortraitEdgePadding - tileViewWidth * 4.5) / 4); + // scrollable. But the padding should be equal to or larger than tile_view_padding, + // otherwise the titles among tiles would be overlapped. + mTileViewPortraitIntervalPadding = Integer.max( + -mResources.getDimensionPixelOffset(R.dimen.tile_view_padding), + (int) ((screenWidth - mTileViewPortraitEdgePadding - tileViewWidth * 4.5) / 4)); } }
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/history_clusters/HistoryClustersMediatorTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/history_clusters/HistoryClustersMediatorTest.java index fde788f..dbf11d13 100644 --- a/chrome/android/junit/src/org/chromium/chrome/browser/history_clusters/HistoryClustersMediatorTest.java +++ b/chrome/android/junit/src/org/chromium/chrome/browser/history_clusters/HistoryClustersMediatorTest.java
@@ -14,6 +14,7 @@ import android.content.Intent; import android.content.res.Resources; import android.graphics.drawable.Drawable; +import android.view.View; import androidx.annotation.ColorRes; import androidx.annotation.DrawableRes; @@ -50,6 +51,7 @@ import java.util.ArrayList; import java.util.Arrays; +import java.util.List; /** Unit tests for HistoryClustersMediator. */ @RunWith(BaseRobolectricTestRunner.class) @@ -146,11 +148,20 @@ fulfillPromise(promise, mHistoryClustersResultWithQuery); - assertEquals(mModelList.size(), 3); - ListItem item = mModelList.get(0); - assertEquals(item.type, ItemType.VISIT); - PropertyModel model = item.model; - assertTrue(model.getAllSetProperties().containsAll( + assertEquals(mModelList.size(), 5); + ListItem clusterItem = mModelList.get(0); + assertEquals(clusterItem.type, ItemType.CLUSTER); + PropertyModel clusterModel = clusterItem.model; + assertTrue(clusterModel.getAllSetProperties().containsAll(Arrays.asList( + HistoryClustersItemProperties.CLICK_HANDLER, HistoryClustersItemProperties.LABEL, + HistoryClustersItemProperties.END_BUTTON_DRAWABLE))); + assertEquals( + clusterModel.get(HistoryClustersItemProperties.END_BUTTON_DRAWABLE), mDrawable); + + ListItem visitItem = mModelList.get(1); + assertEquals(visitItem.type, ItemType.VISIT); + PropertyModel visitModel = visitItem.model; + assertTrue(visitModel.getAllSetProperties().containsAll( Arrays.asList(HistoryClustersItemProperties.CLICK_HANDLER, HistoryClustersItemProperties.TITLE, HistoryClustersItemProperties.URL))); } @@ -233,6 +244,25 @@ verify(mContext).startActivity(mIntent); } + @Test + public void testToggleClusterVisibility() { + PropertyModel clusterModel = new PropertyModel(HistoryClustersItemProperties.ALL_KEYS); + PropertyModel visitModel1 = new PropertyModel(HistoryClustersItemProperties.ALL_KEYS); + PropertyModel visitModel2 = new PropertyModel(HistoryClustersItemProperties.ALL_KEYS); + List<ListItem> visitItems = Arrays.asList(new ListItem(ItemType.VISIT, visitModel1), + new ListItem(ItemType.VISIT, visitModel2)); + + mMediator.hideCluster(mCluster1, clusterModel, visitItems); + + assertEquals(visitModel1.get(HistoryClustersItemProperties.VISIBILITY), View.GONE); + assertEquals(visitModel2.get(HistoryClustersItemProperties.VISIBILITY), View.GONE); + + mMediator.showCluster(mCluster1, clusterModel, visitItems); + + assertEquals(visitModel1.get(HistoryClustersItemProperties.VISIBILITY), View.VISIBLE); + assertEquals(visitModel2.get(HistoryClustersItemProperties.VISIBILITY), View.VISIBLE); + } + private <T> void fulfillPromise(Promise<T> promise, T result) { promise.fulfill(result); ShadowLooper.idleMainLooper();
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/suggestions/tile/MostVisitedMediatorUnitTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/suggestions/tile/MostVisitedMediatorUnitTest.java index a0f2deb..526b47ea 100644 --- a/chrome/android/junit/src/org/chromium/chrome/browser/suggestions/tile/MostVisitedMediatorUnitTest.java +++ b/chrome/android/junit/src/org/chromium/chrome/browser/suggestions/tile/MostVisitedMediatorUnitTest.java
@@ -42,6 +42,10 @@ import org.chromium.chrome.browser.suggestions.SuggestionsUiDelegate; import org.chromium.chrome.browser.suggestions.mostvisited.MostVisitedSites; import org.chromium.chrome.test.util.browser.suggestions.mostvisited.FakeMostVisitedSites; +import org.chromium.components.browser_ui.widget.displaystyle.HorizontalDisplayStyle; +import org.chromium.components.browser_ui.widget.displaystyle.UiConfig; +import org.chromium.components.browser_ui.widget.displaystyle.UiConfig.DisplayStyle; +import org.chromium.components.browser_ui.widget.displaystyle.VerticalDisplayStyle; import org.chromium.components.search_engines.TemplateUrlService; import org.chromium.ui.modelutil.PropertyModel; import org.chromium.url.JUnitTestGURLs; @@ -58,6 +62,8 @@ @Mock Configuration mConfiguration; @Mock + UiConfig mUiConfig; + @Mock DisplayMetrics mDisplayMetrics; @Mock ViewGroup mMvTilesLayout; @@ -104,6 +110,10 @@ when(mResources.getDimensionPixelSize(R.dimen.tile_view_padding_landscape)).thenReturn(16); when(mResources.getDimensionPixelOffset(R.dimen.tile_view_width)).thenReturn(80); + when(mUiConfig.getCurrentDisplayStyle()) + .thenReturn(new DisplayStyle( + HorizontalDisplayStyle.REGULAR, VerticalDisplayStyle.REGULAR)); + when(mTileView.getData()).thenReturn(mData); when(mTile.getData()).thenReturn(mData); @@ -210,7 +220,7 @@ } @Test - public void testSetPortraitPaddings_ScrollableMVT() { + public void testSetPortraitPaddings_ScrollableMVT_NotSmallDevice() { mConfiguration.orientation = Configuration.ORIENTATION_PORTRAIT; createMediator(); mMediator.onTileDataChanged(); @@ -226,6 +236,28 @@ } @Test + public void testSetPortraitPaddings_ScrollableMVT_SmallDevice() { + mConfiguration.orientation = Configuration.ORIENTATION_PORTRAIT; + when(mUiConfig.getCurrentDisplayStyle()) + .thenReturn( + new DisplayStyle(HorizontalDisplayStyle.NARROW, VerticalDisplayStyle.FLAT)); + createMediator(); + mMediator.onTileDataChanged(); + + Assert.assertEquals( + mResources.getDimensionPixelSize(R.dimen.tile_view_padding_edge_portrait), + (int) (mModel.get(HORIZONTAL_EDGE_PADDINGS))); + Assert.assertEquals( + Integer.max(0, + (int) ((mDisplayMetrics.widthPixels - mModel.get(HORIZONTAL_EDGE_PADDINGS) + - mResources.getDimensionPixelOffset( + R.dimen.tile_view_width_condensed) + * 4.5) + / 4)), + (int) (mModel.get(HORIZONTAL_INTERVAL_PADDINGS))); + } + + @Test public void testSetPortraitPaddings_NonScrollableMVT() { mConfiguration.orientation = Configuration.ORIENTATION_PORTRAIT; createMediator(/*isScrollableMVTEnabled=*/false); @@ -260,8 +292,8 @@ } private void createMediator(boolean isScrollableMVTEnabled) { - mMediator = new MostVisitedTilesMediator(mResources, mMvTilesLayout, mNoMvPlaceholderStub, - mTileRenderer, mModel, false, isScrollableMVTEnabled, false, + mMediator = new MostVisitedTilesMediator(mResources, mUiConfig, mMvTilesLayout, + mNoMvPlaceholderStub, mTileRenderer, mModel, false, isScrollableMVTEnabled, false, mSnapshotTileGridChangedRunnable, mTileCountChangedRunnable); mMediator.initWithNative(mSuggestionsUiDelegate, mContextMenuManager, mTileGroupDelegate, mOfflinePageBridge, mTileRenderer);
diff --git a/chrome/app/chrome_main_delegate.cc b/chrome/app/chrome_main_delegate.cc index f20e97d..be62a1d 100644 --- a/chrome/app/chrome_main_delegate.cc +++ b/chrome/app/chrome_main_delegate.cc
@@ -573,8 +573,7 @@ case crosapi::mojom::BuildFlag::kUnknown: break; case crosapi::mojom::BuildFlag::kEnablePlatformEncryptedHevc: - base::CommandLine::ForCurrentProcess()->AppendSwitch( - switches::kLacrosEnablePlatformEncryptedHevc); + // This was deprecated. break; case crosapi::mojom::BuildFlag::kEnablePlatformHevc: base::CommandLine::ForCurrentProcess()->AppendSwitch(
diff --git a/chrome/app/chromeos_strings.grdp b/chrome/app/chromeos_strings.grdp index 872fb63..7fbcde91 100644 --- a/chrome/app/chromeos_strings.grdp +++ b/chrome/app/chromeos_strings.grdp
@@ -964,7 +964,19 @@ Choose your demo preferences </message> <message name="IDS_OOBE_DEMO_SETUP_PREFERENCES_SCREEN_NEXT_BUTTON_LABEL" desc="The label of the button that is shown on preferences screen and that confirms chosen configuration and shows next demo setup screen."> - OK + Continue + </message> + <message name="IDS_OOBE_DEMO_SETUP_PREFERENCES_RETAILER_ID_INPUT_LABEL" desc="Label for retailer id input field on the demo mode setup screen. User should provide the retailer id if assigned."> + Retailer-store ID code (optional) + </message> + <message name="IDS_OOBE_DEMO_SETUP_PREFERENCES_RETAILER_ID_INPUT_PLACEHOLDER" desc="Placeholder for retailer id input field on the demo mode setup screen."> + Retailer-store ID code + </message> + <message name="IDS_OOBE_DEMO_SETUP_PREFERENCES_RETAILER_ID_INPUT_ERROR_TEXT" desc="Help text for retailer id input field on the demo mode setup screen."> + Invalid ID. The format you entered is incorrect. Please check the instructions you received to ensure you are entering the ID in the correct format. If you’re unable to resolve this issue, please leave the field blank and continue with installation. + </message> + <message name="IDS_OOBE_DEMO_SETUP_PREFERENCES_RETAILER_ID_INPUT_HELP_TEXT" desc="Help text for retailer id input field on the demo mode setup screen."> + Retailer-store ID is ABC-1234 format </message> <message name="IDS_OOBE_DEMO_SETUP_PREFERENCES_SCREEN_COUNTRY_NOT_SELECTED_TITLE" desc="The title of country not selected option for demo mode preference screen."> Please select a country
diff --git a/chrome/app/chromeos_strings_grdp/IDS_OOBE_DEMO_SETUP_PREFERENCES_RETAILER_ID_INPUT_ERROR_TEXT.png.sha1 b/chrome/app/chromeos_strings_grdp/IDS_OOBE_DEMO_SETUP_PREFERENCES_RETAILER_ID_INPUT_ERROR_TEXT.png.sha1 new file mode 100644 index 0000000..35486d2 --- /dev/null +++ b/chrome/app/chromeos_strings_grdp/IDS_OOBE_DEMO_SETUP_PREFERENCES_RETAILER_ID_INPUT_ERROR_TEXT.png.sha1
@@ -0,0 +1 @@ +0010e36248684f522d7f227271eae4acfb8a9608 \ No newline at end of file
diff --git a/chrome/app/chromeos_strings_grdp/IDS_OOBE_DEMO_SETUP_PREFERENCES_RETAILER_ID_INPUT_HELP_TEXT.png.sha1 b/chrome/app/chromeos_strings_grdp/IDS_OOBE_DEMO_SETUP_PREFERENCES_RETAILER_ID_INPUT_HELP_TEXT.png.sha1 new file mode 100644 index 0000000..8b974a8 --- /dev/null +++ b/chrome/app/chromeos_strings_grdp/IDS_OOBE_DEMO_SETUP_PREFERENCES_RETAILER_ID_INPUT_HELP_TEXT.png.sha1
@@ -0,0 +1 @@ +6fca0dae9655bbd99859de81cfbcc4f4e6808f6a \ No newline at end of file
diff --git a/chrome/app/chromeos_strings_grdp/IDS_OOBE_DEMO_SETUP_PREFERENCES_RETAILER_ID_INPUT_LABEL.png.sha1 b/chrome/app/chromeos_strings_grdp/IDS_OOBE_DEMO_SETUP_PREFERENCES_RETAILER_ID_INPUT_LABEL.png.sha1 new file mode 100644 index 0000000..106532f --- /dev/null +++ b/chrome/app/chromeos_strings_grdp/IDS_OOBE_DEMO_SETUP_PREFERENCES_RETAILER_ID_INPUT_LABEL.png.sha1
@@ -0,0 +1 @@ +78288bfd987cbde7fe9dab2f85bd4f111f8e9886 \ No newline at end of file
diff --git a/chrome/app/chromeos_strings_grdp/IDS_OOBE_DEMO_SETUP_PREFERENCES_RETAILER_ID_INPUT_PLACEHOLDER.png.sha1 b/chrome/app/chromeos_strings_grdp/IDS_OOBE_DEMO_SETUP_PREFERENCES_RETAILER_ID_INPUT_PLACEHOLDER.png.sha1 new file mode 100644 index 0000000..ed2aa30 --- /dev/null +++ b/chrome/app/chromeos_strings_grdp/IDS_OOBE_DEMO_SETUP_PREFERENCES_RETAILER_ID_INPUT_PLACEHOLDER.png.sha1
@@ -0,0 +1 @@ +3c536cceeb38cd775ddde4cbd4fabd85524dded3 \ No newline at end of file
diff --git a/chrome/app/chromeos_strings_grdp/IDS_OOBE_DEMO_SETUP_PREFERENCES_SCREEN_NEXT_BUTTON_LABEL.png.sha1 b/chrome/app/chromeos_strings_grdp/IDS_OOBE_DEMO_SETUP_PREFERENCES_SCREEN_NEXT_BUTTON_LABEL.png.sha1 new file mode 100644 index 0000000..1e57313 --- /dev/null +++ b/chrome/app/chromeos_strings_grdp/IDS_OOBE_DEMO_SETUP_PREFERENCES_SCREEN_NEXT_BUTTON_LABEL.png.sha1
@@ -0,0 +1 @@ +8edf36ead4608d88edcedda9dcad5d33ad1e0f86 \ No newline at end of file
diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources.grd index 5511012..5a1c38d 100644 --- a/chrome/app/generated_resources.grd +++ b/chrome/app/generated_resources.grd
@@ -1424,7 +1424,7 @@ <message name="IDS_HELP_MENU" desc="The text label of the Help sub-menu item in the wrench menu"> H&elp </message> - <message name="IDS_MANAGED" desc="The text label of the 'Managed by' UI in the app menu, for enterprise users" formatter_data="android_java"> + <message name="IDS_MANAGED" desc="The text label of the 'Managed by' UI in the app menu, for enterprise users"> Managed by your organization </message> <message name="IDS_MANAGED_BY" desc="The text label of the 'Managed by' UI in the app menu, for enterprise users. MANAGER can be a domain or an email address.">
diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn index b4927c3..b6f985a 100644 --- a/chrome/browser/BUILD.gn +++ b/chrome/browser/BUILD.gn
@@ -7699,7 +7699,6 @@ deps = [ "//chrome/browser/media:mojo_bindings_js", "//chrome/browser/resources/accessibility:build_ts", - "//chrome/browser/resources/local_state:build", "//chrome/browser/resources/memory_internals:build_ts", "//chrome/browser/resources/predictors:build_ts", "//chrome/browser/ui/webui/internals/user_education:mojo_bindings_js",
diff --git a/chrome/browser/DEPS b/chrome/browser/DEPS index fb3b0d3..b66fcba 100644 --- a/chrome/browser/DEPS +++ b/chrome/browser/DEPS
@@ -189,6 +189,7 @@ "+components/leveldb_proto/public", "+components/leveldb_proto/testing", "+components/live_caption", + "+components/local_state", "+components/location/android", "+components/lookalikes/core", "+components/login",
diff --git a/chrome/browser/ash/accessibility/accessibility_extension_api_browsertest.cc b/chrome/browser/ash/accessibility/accessibility_extension_api_browsertest.cc index b2f62d7d..b74489d 100644 --- a/chrome/browser/ash/accessibility/accessibility_extension_api_browsertest.cc +++ b/chrome/browser/ash/accessibility/accessibility_extension_api_browsertest.cc
@@ -218,13 +218,15 @@ // This test requires some back and forth communication between C++ and JS. // Use message listeners to force the synchronicity of this test. - ExtensionTestMessageListener standby_listener("Standby", /*will_reply=*/true); + ExtensionTestMessageListener standby_listener("Standby", + ReplyBehavior::kWillReply); ExtensionTestMessageListener show_text_listener("Show text", - /*will_reply=*/true); - ExtensionTestMessageListener macro_success_listener("Show macro success", - /*will_reply=*/true); - ExtensionTestMessageListener reset_listener("Reset", /*will_reply=*/true); - ExtensionTestMessageListener hide_listener("Hide", /*will_reply=*/false); + ReplyBehavior::kWillReply); + ExtensionTestMessageListener macro_success_listener( + "Show macro success", ReplyBehavior::kWillReply); + ExtensionTestMessageListener reset_listener("Reset", + ReplyBehavior::kWillReply); + ExtensionTestMessageListener hide_listener("Hide"); extensions::ResultCatcher result_catcher; ASSERT_TRUE(RunSubtest("testUpdateDictationBubble")) << message_; @@ -269,9 +271,9 @@ IN_PROC_BROWSER_TEST_P(AccessibilityPrivateApiTest, UpdateDictationBubbleWithHints) { Shell::Get()->accessibility_controller()->dictation().SetEnabled(true); - ExtensionTestMessageListener show_listener("Some hints", /*will_reply=*/true); - ExtensionTestMessageListener no_hints_listener("No hints", - /*will_reply=*/false); + ExtensionTestMessageListener show_listener("Some hints", + ReplyBehavior::kWillReply); + ExtensionTestMessageListener no_hints_listener("No hints"); extensions::ResultCatcher result_catcher; ASSERT_TRUE(RunSubtest("testUpdateDictationBubbleWithHints")) << message_;
diff --git a/chrome/browser/ash/app_mode/kiosk_app_update_service_browsertest.cc b/chrome/browser/ash/app_mode/kiosk_app_update_service_browsertest.cc index 0b0cd43b..31fff42 100644 --- a/chrome/browser/ash/app_mode/kiosk_app_update_service_browsertest.cc +++ b/chrome/browser/ash/app_mode/kiosk_app_update_service_browsertest.cc
@@ -173,7 +173,7 @@ IN_PROC_BROWSER_TEST_F(KioskAppUpdateServiceTest, AppUpdate) { CreateKioskAppUpdateService(); - ExtensionTestMessageListener listener("app_update", false); + ExtensionTestMessageListener listener("app_update"); FireAppUpdateAvailable(); EXPECT_TRUE(listener.WaitUntilSatisfied()); } @@ -185,7 +185,7 @@ CreateKioskAppUpdateService(); g_browser_process->local_state()->SetBoolean(prefs::kRebootAfterUpdate, true); - ExtensionTestMessageListener listener("os_update", false); + ExtensionTestMessageListener listener("os_update"); FireUpdatedNeedReboot(); EXPECT_TRUE(listener.WaitUntilSatisfied()); } @@ -195,7 +195,7 @@ IN_PROC_BROWSER_TEST_F(KioskAppUpdateServiceTest, Periodic) { CreateKioskAppUpdateService(); - ExtensionTestMessageListener listener("periodic", false); + ExtensionTestMessageListener listener("periodic"); RequestPeriodicReboot(); EXPECT_TRUE(listener.WaitUntilSatisfied()); } @@ -207,7 +207,7 @@ g_browser_process->local_state()->SetBoolean(prefs::kRebootAfterUpdate, true); FireUpdatedNeedReboot(); - ExtensionTestMessageListener listener("os_update", false); + ExtensionTestMessageListener listener("os_update"); CreateKioskAppUpdateService(); EXPECT_TRUE(listener.WaitUntilSatisfied()); } @@ -217,7 +217,7 @@ IN_PROC_BROWSER_TEST_F(KioskAppUpdateServiceTest, StartAfterPeriodic) { RequestPeriodicReboot(); - ExtensionTestMessageListener listener("periodic", false); + ExtensionTestMessageListener listener("periodic"); CreateKioskAppUpdateService(); EXPECT_TRUE(listener.WaitUntilSatisfied()); }
diff --git a/chrome/browser/ash/certificate_provider/test_certificate_provider_extension.cc b/chrome/browser/ash/certificate_provider/test_certificate_provider_extension.cc index 75586f7a..480adc1 100644 --- a/chrome/browser/ash/certificate_provider/test_certificate_provider_extension.cc +++ b/chrome/browser/ash/certificate_provider/test_certificate_provider_extension.cc
@@ -194,7 +194,7 @@ certificate_(GetCertificate()), private_key_(LoadPrivateKeyFromFile(net::GetTestCertsDirectory().Append( FILE_PATH_LITERAL("client_1.pk8")))), - message_listener_(/*will_reply=*/true) { + message_listener_(ReplyBehavior::kWillReply) { DCHECK(browser_context_); CHECK(certificate_); CHECK(private_key_);
diff --git a/chrome/browser/ash/crosapi/crosapi_util.cc b/chrome/browser/ash/crosapi/crosapi_util.cc index 186e20a7..dbe38931 100644 --- a/chrome/browser/ash/crosapi/crosapi_util.cc +++ b/chrome/browser/ash/crosapi/crosapi_util.cc
@@ -417,10 +417,6 @@ // Add any BUILDFLAGs we use to pass our per-platform/ build configuration to // lacros for runtime handling instead. std::vector<crosapi::mojom::BuildFlag> build_flags; -#if BUILDFLAG(ENABLE_PLATFORM_ENCRYPTED_HEVC) - build_flags.emplace_back( - crosapi::mojom::BuildFlag::kEnablePlatformEncryptedHevc); -#endif // BUILDFLAG(ENABLE_PLATFORM_ENCRYPTED_HEVC) #if BUILDFLAG(ENABLE_PLATFORM_HEVC) build_flags.emplace_back(crosapi::mojom::BuildFlag::kEnablePlatformHevc); #endif // BUILDFLAG(ENABLE_PLATFORM_HEVC)
diff --git a/chrome/browser/ash/input_method/input_method_engine_browsertests.cc b/chrome/browser/ash/input_method/input_method_engine_browsertests.cc index bef4f58..7ddadfc 100644 --- a/chrome/browser/ash/input_method/input_method_engine_browsertests.cc +++ b/chrome/browser/ash/input_method/input_method_engine_browsertests.cc
@@ -88,8 +88,7 @@ protected: void LoadTestInputMethod() { // This will load "chrome/test/data/extensions/input_ime" - ExtensionTestMessageListener ime_ready_listener("ReadyToUseImeEvent", - false); + ExtensionTestMessageListener ime_ready_listener("ReadyToUseImeEvent"); extension_ = LoadExtensionWithType("input_ime", GetParam()); ASSERT_TRUE(extension_); ASSERT_TRUE(ime_ready_listener.WaitUntilSatisfied()); @@ -214,14 +213,14 @@ ASSERT_TRUE(engine_handler); // onActivate event should be fired if Enable function is called. - ExtensionTestMessageListener activated_listener("onActivate", false); + ExtensionTestMessageListener activated_listener("onActivate"); engine_handler->Enable("IdentityIME"); ASSERT_TRUE(activated_listener.WaitUntilSatisfied()); ASSERT_TRUE(activated_listener.was_satisfied()); // onFocus event should be fired if FocusIn function is called. ExtensionTestMessageListener focus_listener( - "onFocus:text:true:true:true:false", false); + "onFocus:text:true:true:true:false"); const auto context = CreateInputContextWithInputType(ui::TEXT_INPUT_TYPE_TEXT); engine_handler->FocusIn(context); @@ -230,7 +229,7 @@ // onKeyEvent should be fired if ProcessKeyEvent is called. KeyEventDoneCallback callback(false); // EchoBackIME doesn't consume keys. - ExtensionTestMessageListener keyevent_listener("onKeyEvent", false); + ExtensionTestMessageListener keyevent_listener("onKeyEvent"); ui::KeyEvent key_event(ui::ET_KEY_PRESSED, ui::VKEY_A, ui::EF_NONE); ui::IMEEngineHandlerInterface::KeyEventDoneCallback keyevent_callback = base::BindOnce(&KeyEventDoneCallback::Run, base::Unretained(&callback)); @@ -241,7 +240,7 @@ // onSurroundingTextChange should be fired if SetSurroundingText is called. ExtensionTestMessageListener surrounding_text_listener( - "onSurroundingTextChanged", false); + "onSurroundingTextChanged"); engine_handler->SetSurroundingText(u"text", // Surrounding text. 0, // focused position. 1, // anchor position. @@ -250,25 +249,25 @@ ASSERT_TRUE(surrounding_text_listener.was_satisfied()); // onMenuItemActivated should be fired if PropertyActivate is called. - ExtensionTestMessageListener property_listener("onMenuItemActivated", false); + ExtensionTestMessageListener property_listener("onMenuItemActivated"); engine_handler->PropertyActivate("property_name"); ASSERT_TRUE(property_listener.WaitUntilSatisfied()); ASSERT_TRUE(property_listener.was_satisfied()); // onReset should be fired if Reset is called. - ExtensionTestMessageListener reset_listener("onReset", false); + ExtensionTestMessageListener reset_listener("onReset"); engine_handler->Reset(); ASSERT_TRUE(reset_listener.WaitUntilSatisfied()); ASSERT_TRUE(reset_listener.was_satisfied()); // onBlur should be fired if FocusOut is called. - ExtensionTestMessageListener blur_listener("onBlur", false); + ExtensionTestMessageListener blur_listener("onBlur"); engine_handler->FocusOut(); ASSERT_TRUE(blur_listener.WaitUntilSatisfied()); ASSERT_TRUE(blur_listener.was_satisfied()); // onDeactivated should be fired if Disable is called. - ExtensionTestMessageListener disabled_listener("onDeactivated", false); + ExtensionTestMessageListener disabled_listener("onDeactivated"); engine_handler->Disable(); ASSERT_TRUE(disabled_listener.WaitUntilSatisfied()); ASSERT_TRUE(disabled_listener.was_satisfied()); @@ -315,7 +314,7 @@ KeyEventDoneCallback callback(false); const std::string expected_value = "onKeyEvent::true:keydown:a:KeyA:false:false:false:false:false"; - ExtensionTestMessageListener keyevent_listener(expected_value, false); + ExtensionTestMessageListener keyevent_listener(expected_value); ui::KeyEvent key_event( ui::ET_KEY_PRESSED, ui::VKEY_A, ui::DomCode::US_A, ui::EF_NONE); @@ -331,7 +330,7 @@ KeyEventDoneCallback callback(false); const std::string expected_value = "onKeyEvent::true:keydown:a:KeyA:true:false:false:false:false"; - ExtensionTestMessageListener keyevent_listener(expected_value, false); + ExtensionTestMessageListener keyevent_listener(expected_value); ui::KeyEvent key_event(ui::ET_KEY_PRESSED, ui::VKEY_A, @@ -349,7 +348,7 @@ KeyEventDoneCallback callback(false); const std::string expected_value = "onKeyEvent::true:keydown:a:KeyA:false:true:false:false:false"; - ExtensionTestMessageListener keyevent_listener(expected_value, false); + ExtensionTestMessageListener keyevent_listener(expected_value); ui::KeyEvent key_event(ui::ET_KEY_PRESSED, ui::VKEY_A, @@ -367,7 +366,7 @@ KeyEventDoneCallback callback(false); const std::string expected_value = "onKeyEvent::true:keydown:A:KeyA:false:false:false:true:false"; - ExtensionTestMessageListener keyevent_listener(expected_value, false); + ExtensionTestMessageListener keyevent_listener(expected_value); ui::KeyEvent key_event(ui::ET_KEY_PRESSED, ui::VKEY_A, @@ -385,7 +384,7 @@ KeyEventDoneCallback callback(false); const std::string expected_value = "onKeyEvent::true:keydown:A:KeyA:false:false:false:false:true"; - ExtensionTestMessageListener keyevent_listener(expected_value, false); + ExtensionTestMessageListener keyevent_listener(expected_value); ui::KeyEvent key_event(ui::ET_KEY_PRESSED, ui::VKEY_A, ui::DomCode::US_A, ui::EF_CAPS_LOCK_ON); @@ -401,7 +400,7 @@ KeyEventDoneCallback callback(false); const std::string expected_value = "onKeyEvent::true:keydown:a:KeyA:true:true:false:false:false"; - ExtensionTestMessageListener keyevent_listener(expected_value, false); + ExtensionTestMessageListener keyevent_listener(expected_value); ui::KeyEvent key_event(ui::ET_KEY_PRESSED, ui::VKEY_A, @@ -419,7 +418,7 @@ KeyEventDoneCallback callback(false); const std::string expected_value = "onKeyEvent::true:keydown:a:KeyA:false:false:false:true:true"; - ExtensionTestMessageListener keyevent_listener(expected_value, false); + ExtensionTestMessageListener keyevent_listener(expected_value); ui::KeyEvent key_event(ui::ET_KEY_PRESSED, ui::VKEY_A, ui::DomCode::US_A, ui::EF_SHIFT_DOWN | ui::EF_CAPS_LOCK_ON); @@ -435,7 +434,7 @@ KeyEventDoneCallback callback(false); const std::string expected_value = "onKeyEvent::true:keydown:a:KeyA:false:false:true:false:false"; - ExtensionTestMessageListener keyevent_listener(expected_value, false); + ExtensionTestMessageListener keyevent_listener(expected_value); ui::KeyEvent key_event(ui::ET_KEY_PRESSED, ui::VKEY_A, ui::DomCode::US_A, ui::EF_ALTGR_DOWN); @@ -481,7 +480,7 @@ const std::string expected_value = base::StringPrintf( "onKeyEvent::true:keydown:%s:%s:false:false:false:false:false", kMediaKeyCases[i].key, kMediaKeyCases[i].code); - ExtensionTestMessageListener keyevent_listener(expected_value, false); + ExtensionTestMessageListener keyevent_listener(expected_value); ui::KeyEvent key_event( ui::ET_KEY_PRESSED, @@ -737,7 +736,7 @@ assistive_window_controller->GetUndoWindowForTesting(); ASSERT_TRUE(undo_window); ExtensionTestMessageListener button_listener( - "undo button in undo window clicked", false); + "undo button in undo window clicked"); aura::Window* window = browser()->window()->GetNativeWindow(); ui::test::EventGenerator event_generator(window->GetRootWindow()); @@ -1194,7 +1193,7 @@ { ExtensionTestMessageListener focus_listener( - "onFocus:text:true:true:true:false", false); + "onFocus:text:true:true:true:false"); const auto context = CreateInputContextWithInputType(ui::TEXT_INPUT_TYPE_TEXT); engine_handler->FocusIn(context); @@ -1203,7 +1202,7 @@ } { ExtensionTestMessageListener focus_listener( - "onFocus:search:true:true:true:false", false); + "onFocus:search:true:true:true:false"); const auto context = CreateInputContextWithInputType(ui::TEXT_INPUT_TYPE_SEARCH); engine_handler->FocusIn(context); @@ -1212,7 +1211,7 @@ } { ExtensionTestMessageListener focus_listener( - "onFocus:tel:true:true:true:false", false); + "onFocus:tel:true:true:true:false"); const auto context = CreateInputContextWithInputType(ui::TEXT_INPUT_TYPE_TELEPHONE); engine_handler->FocusIn(context); @@ -1221,7 +1220,7 @@ } { ExtensionTestMessageListener focus_listener( - "onFocus:url:true:true:true:false", false); + "onFocus:url:true:true:true:false"); const auto context = CreateInputContextWithInputType(ui::TEXT_INPUT_TYPE_URL); engine_handler->FocusIn(context); @@ -1230,7 +1229,7 @@ } { ExtensionTestMessageListener focus_listener( - "onFocus:email:true:true:true:false", false); + "onFocus:email:true:true:true:false"); const auto context = CreateInputContextWithInputType(ui::TEXT_INPUT_TYPE_EMAIL); engine_handler->FocusIn(context); @@ -1239,7 +1238,7 @@ } { ExtensionTestMessageListener focus_listener( - "onFocus:number:true:true:true:false", false); + "onFocus:number:true:true:true:false"); const auto context = CreateInputContextWithInputType(ui::TEXT_INPUT_TYPE_NUMBER); engine_handler->FocusIn(context); @@ -1348,7 +1347,7 @@ SCOPED_TRACE("Text"); ExtensionTestMessageListener focus_listener( - "onFocus:text:false:false:false:false", false); + "onFocus:text:false:false:false:false"); const auto context = CreateInputContextWithInputType(ui::TEXT_INPUT_TYPE_TEXT); engine_handler->FocusIn(context); @@ -1359,7 +1358,7 @@ SCOPED_TRACE("Password"); ExtensionTestMessageListener focus_listener( - "onFocus:password:false:false:false:false", false); + "onFocus:password:false:false:false:false"); const auto context = CreateInputContextWithInputType(ui::TEXT_INPUT_TYPE_PASSWORD); engine_handler->FocusIn(context); @@ -1370,7 +1369,7 @@ SCOPED_TRACE("URL"); ExtensionTestMessageListener focus_listener( - "onFocus:url:false:false:false:false", false); + "onFocus:url:false:false:false:false"); const auto context = CreateInputContextWithInputType(ui::TEXT_INPUT_TYPE_URL); engine_handler->FocusIn(context); @@ -1381,7 +1380,7 @@ SCOPED_TRACE("Search"); ExtensionTestMessageListener focus_listener( - "onFocus:search:false:false:false:false", false); + "onFocus:search:false:false:false:false"); const auto context = CreateInputContextWithInputType(ui::TEXT_INPUT_TYPE_SEARCH); engine_handler->FocusIn(context); @@ -1392,7 +1391,7 @@ SCOPED_TRACE("Email"); ExtensionTestMessageListener focus_listener( - "onFocus:email:false:false:false:false", false); + "onFocus:email:false:false:false:false"); const auto context = CreateInputContextWithInputType(ui::TEXT_INPUT_TYPE_EMAIL); engine_handler->FocusIn(context); @@ -1403,7 +1402,7 @@ SCOPED_TRACE("Number"); ExtensionTestMessageListener focus_listener( - "onFocus:number:false:false:false:false", false); + "onFocus:number:false:false:false:false"); const auto context = CreateInputContextWithInputType(ui::TEXT_INPUT_TYPE_NUMBER); engine_handler->FocusIn(context); @@ -1414,7 +1413,7 @@ SCOPED_TRACE("Telephone"); ExtensionTestMessageListener focus_listener( - "onFocus:tel:false:false:false:false", false); + "onFocus:tel:false:false:false:false"); const auto context = CreateInputContextWithInputType(ui::TEXT_INPUT_TYPE_TELEPHONE); engine_handler->FocusIn(context); @@ -1447,7 +1446,7 @@ // onFocus event should be fired if FocusIn function is called. ExtensionTestMessageListener focus_listener( - "onFocus:text:true:true:true:true", false); + "onFocus:text:true:true:true:true"); auto context = CreateInputContextWithInputType(ui::TEXT_INPUT_TYPE_TEXT); context.should_do_learning = true; engine_handler->FocusIn(context); @@ -1471,7 +1470,7 @@ { SCOPED_TRACE("Verifies onFocus event."); ExtensionTestMessageListener focus_listener( - "onFocus:text:true:true:true:true", false); + "onFocus:text:true:true:true:true"); im->SetFocusedTextInputClient(&tic); @@ -1482,7 +1481,7 @@ { SCOPED_TRACE("Verifies onKeyEvent event."); ExtensionTestMessageListener keydown_listener( - "onKeyEvent::true:keydown:a:KeyA:false:false:false:false:false", false); + "onKeyEvent::true:keydown:a:KeyA:false:false:false:false:false"); EXPECT_TRUE(ui_test_utils::SendKeyPressSync(browser(), ui::VKEY_A, false, false, false, false)); @@ -1509,7 +1508,7 @@ { SCOPED_TRACE("Verifies onBlur event"); - ExtensionTestMessageListener blur_listener("onBlur", false); + ExtensionTestMessageListener blur_listener("onBlur"); ui::FakeTextInputClient dtic(ui::TEXT_INPUT_TYPE_TEXT); im->SetFocusedTextInputClient(&dtic);
diff --git a/chrome/browser/ash/lock_screen_apps/note_taking_browsertest.cc b/chrome/browser/ash/lock_screen_apps/note_taking_browsertest.cc index fa15207fa..9a8cafc 100644 --- a/chrome/browser/ash/lock_screen_apps/note_taking_browsertest.cc +++ b/chrome/browser/ash/lock_screen_apps/note_taking_browsertest.cc
@@ -144,7 +144,7 @@ // The test should reply to this message in order for the app window to // close itself. ExtensionTestMessageListener ready_to_close("readyToClose", - true /* will_reply */); + ReplyBehavior::kWillReply); lock_screen_apps::StateController::Get()->RequestNewLockScreenNote( ash::mojom::LockScreenNoteOrigin::kLockScreenButtonTap); @@ -286,7 +286,7 @@ lock_screen_apps::StateController::Get()->GetLockScreenNoteState()); ExtensionTestMessageListener expected_action_data("getExpectedActionData", - true /* will_reply */); + ReplyBehavior::kWillReply); ASSERT_TRUE(expected_action_data.WaitUntilSatisfied()); expected_action_data.Reply(R"({"actionType": "new_note",
diff --git a/chrome/browser/ash/login/app_mode/test/auto_launched_kiosk_browsertest.cc b/chrome/browser/ash/login/app_mode/test/auto_launched_kiosk_browsertest.cc index 3778cc6..0a25b49 100644 --- a/chrome/browser/ash/login/app_mode/test/auto_launched_kiosk_browsertest.cc +++ b/chrome/browser/ash/login/app_mode/test/auto_launched_kiosk_browsertest.cc
@@ -191,8 +191,7 @@ // Listeners created in IN_PROC_BROWSER_TEST might miss the messages sent // from the kiosk app. app_window_loaded_listener_ = - std::make_unique<ExtensionTestMessageListener>("appWindowLoaded", - false); + std::make_unique<ExtensionTestMessageListener>("appWindowLoaded"); termination_observer_ = std::make_unique<TerminationObserver>(); InProcessBrowserTest::PreRunTestOnMainThread(); } @@ -388,7 +387,7 @@ EXPECT_TRUE(IsKioskAppAutoLaunched(kTestNonKioskEnabledApp)); - ExtensionTestMessageListener listener("launchRequested", false); + ExtensionTestMessageListener listener("launchRequested"); content::WindowedNotificationObserver termination_waiter( chrome::NOTIFICATION_APP_TERMINATING,
diff --git a/chrome/browser/ash/login/app_mode/test/kiosk_base_test.cc b/chrome/browser/ash/login/app_mode/test/kiosk_base_test.cc index b8e3aec..ca986cf 100644 --- a/chrome/browser/ash/login/app_mode/test/kiosk_base_test.cc +++ b/chrome/browser/ash/login/app_mode/test/kiosk_base_test.cc
@@ -252,7 +252,7 @@ bool terminate_app, bool keep_app_open) { ExtensionTestMessageListener launch_data_check_listener( - "launchData.isKioskSession = true", false); + "launchData.isKioskSession = true"); // Wait for the Kiosk App to launch. KioskSessionInitializedWaiter().Wait();
diff --git a/chrome/browser/ash/login/app_mode/test/kiosk_device_owned_browsertest.cc b/chrome/browser/ash/login/app_mode/test/kiosk_device_owned_browsertest.cc index 249cabf..18a4cea3 100644 --- a/chrome/browser/ash/login/app_mode/test/kiosk_device_owned_browsertest.cc +++ b/chrome/browser/ash/login/app_mode/test/kiosk_device_owned_browsertest.cc
@@ -139,8 +139,7 @@ // This test case is to cover crbug.com/1235334. IN_PROC_BROWSER_TEST_F(KioskDeviceOwnedTest, WindowViewsBounds) { - ExtensionTestMessageListener app_window_loaded_listener("appWindowLoaded", - false); + ExtensionTestMessageListener app_window_loaded_listener("appWindowLoaded"); // Start app launch with network portal state. StartAppLaunchFromLoginScreen( @@ -191,8 +190,7 @@ } IN_PROC_BROWSER_TEST_F(KioskDeviceOwnedTest, HiddenShelf) { - ExtensionTestMessageListener app_window_loaded_listener("appWindowLoaded", - false); + ExtensionTestMessageListener app_window_loaded_listener("appWindowLoaded"); StartAppLaunchFromLoginScreen( NetworkPortalDetector::CAPTIVE_PORTAL_STATUS_ONLINE); EXPECT_TRUE(app_window_loaded_listener.WaitUntilSatisfied()); @@ -225,8 +223,7 @@ } IN_PROC_BROWSER_TEST_F(KioskDeviceOwnedTest, ZoomSupport) { - ExtensionTestMessageListener app_window_loaded_listener("appWindowLoaded", - false); + ExtensionTestMessageListener app_window_loaded_listener("appWindowLoaded"); StartAppLaunchFromLoginScreen( NetworkPortalDetector::CAPTIVE_PORTAL_STATUS_ONLINE); EXPECT_TRUE(app_window_loaded_listener.WaitUntilSatisfied());
diff --git a/chrome/browser/ash/login/demo_mode/demo_session.cc b/chrome/browser/ash/login/demo_mode/demo_session.cc index 4a26e75..2200dab 100644 --- a/chrome/browser/ash/login/demo_mode/demo_session.cc +++ b/chrome/browser/ash/login/demo_mode/demo_session.cc
@@ -396,6 +396,8 @@ void DemoSession::RegisterLocalStatePrefs(PrefRegistrySimple* registry) { registry->RegisterStringPref(prefs::kDemoModeDefaultLocale, std::string()); registry->RegisterStringPref(prefs::kDemoModeCountry, kSupportedCountries[0]); + registry->RegisterStringPref(prefs::kDemoModeRetailerAndStoreIdInput, + std::string()); } void DemoSession::EnsureResourcesLoaded(base::OnceClosure load_callback) {
diff --git a/chrome/browser/ash/login/demo_mode/demo_setup_controller.h b/chrome/browser/ash/login/demo_mode/demo_setup_controller.h index 709a547..4e51e45 100644 --- a/chrome/browser/ash/login/demo_mode/demo_setup_controller.h +++ b/chrome/browser/ash/login/demo_mode/demo_setup_controller.h
@@ -198,6 +198,16 @@ demo_config_ = demo_config; } + std::string& get_retailer_store_id_input() { + return retailer_store_id_input_; + } + + // Sets demo mode retailer id input by the user. It will be saved as local + // prefs when enrollment completes. + void set_retailer_store_id_input(const std::string& retailer_store_id_input) { + retailer_store_id_input_ = retailer_store_id_input; + } + // Initiates enrollment that sets up the device in the demo mode domain. The // `enrollment_type_` determines whether online or offline setup will be // performed and it should be set with set_enrollment_type() before calling @@ -260,6 +270,8 @@ // setup. int num_setup_retries_ = 0; + std::string retailer_store_id_input_; + // Demo mode configuration type that will be setup when Enroll() is called. // Should be set explicitly. DemoSession::DemoModeConfig demo_config_ = DemoSession::DemoModeConfig::kNone;
diff --git a/chrome/browser/ash/login/screens/demo_preferences_screen.cc b/chrome/browser/ash/login/screens/demo_preferences_screen.cc index eea6b0b..86e5b8b 100644 --- a/chrome/browser/ash/login/screens/demo_preferences_screen.cc +++ b/chrome/browser/ash/login/screens/demo_preferences_screen.cc
@@ -8,6 +8,7 @@ #include "base/values.h" #include "chrome/browser/ash/login/demo_mode/demo_session.h" #include "chrome/browser/ash/login/screens/welcome_screen.h" +#include "chrome/browser/ash/login/wizard_controller.h" #include "chrome/browser/browser_process.h" #include "chrome/browser/ui/webui/chromeos/login/demo_preferences_screen_handler.h" #include "chrome/browser/ui/webui/chromeos/login/welcome_screen_handler.h" @@ -52,6 +53,13 @@ input_method::InputMethodManager::Get()->RemoveObserver(this); } +void DemoPreferencesScreen::SetDemoModeRetailerAndStoreIdInput( + const std::string& retailer_store_id_input) { + WizardController::default_controller() + ->demo_setup_controller() + ->set_retailer_store_id_input(retailer_store_id_input); +} + void DemoPreferencesScreen::ShowImpl() { if (view_) view_->Show(); @@ -62,11 +70,16 @@ void DemoPreferencesScreen::OnUserAction(const base::Value::List& args) { const std::string& action_id = args[0].GetString(); if (action_id == kUserActionContinue) { + CHECK_EQ(args.size(), 2); std::string country( g_browser_process->local_state()->GetString(prefs::kDemoModeCountry)); if (country == DemoSession::kCountryNotSelectedId) { return; } + // Set retailer store input string regardless of pattern, let server decide + // what action take when it is invalid. + const std::string& retailer_store_id_input = args[1].GetString(); + SetDemoModeRetailerAndStoreIdInput(retailer_store_id_input); exit_callback_.Run(Result::COMPLETED); } else if (action_id == kUserActionClose) { exit_callback_.Run(Result::CANCELED);
diff --git a/chrome/browser/ash/login/screens/demo_preferences_screen.h b/chrome/browser/ash/login/screens/demo_preferences_screen.h index d2e6bb70..d9244d7 100644 --- a/chrome/browser/ash/login/screens/demo_preferences_screen.h +++ b/chrome/browser/ash/login/screens/demo_preferences_screen.h
@@ -37,6 +37,8 @@ ~DemoPreferencesScreen() override; void SetDemoModeCountry(const std::string& country_id); + void SetDemoModeRetailerAndStoreIdInput( + const std::string& retailer_store_id_input); protected: // BaseScreen:
diff --git a/chrome/browser/ash/login/signin/oauth2_browsertest.cc b/chrome/browser/ash/login/signin/oauth2_browsertest.cc index dc67b85..2020c20 100644 --- a/chrome/browser/ash/login/signin/oauth2_browsertest.cc +++ b/chrome/browser/ash/login/signin/oauth2_browsertest.cc
@@ -1045,7 +1045,7 @@ extensions::ResultCatcher catcher; std::unique_ptr<ExtensionTestMessageListener> non_google_xhr_listener( - new ExtensionTestMessageListener("non-google-xhr-received", false)); + new ExtensionTestMessageListener("non-google-xhr-received")); // Load extension with a background page. The background page will // attempt to load `fake_google_page_url_` via XHR. @@ -1059,7 +1059,7 @@ non_google_page_url_.spec().c_str(), BoolToString(do_async_xhr()), BoolToString(/*should_throttle=*/true))); - ExtensionTestMessageListener listener("Both XHR's Opened", false); + ExtensionTestMessageListener listener("Both XHR's Opened"); ASSERT_TRUE(listener.WaitUntilSatisfied()); // Verify that we've sent XHR request from the extension side (async)... @@ -1114,7 +1114,7 @@ extensions::ResultCatcher catcher; std::unique_ptr<ExtensionTestMessageListener> non_google_xhr_listener( - new ExtensionTestMessageListener("non-google-xhr-received", false)); + new ExtensionTestMessageListener("non-google-xhr-received")); // Load extension with a background page. The background page will // attempt to load `fake_google_page_url_` via XHR. @@ -1187,7 +1187,7 @@ extensions::ResultCatcher catcher; std::unique_ptr<ExtensionTestMessageListener> non_google_xhr_listener( - new ExtensionTestMessageListener("non-google-xhr-received", false)); + new ExtensionTestMessageListener("non-google-xhr-received")); // Load extension with a background page. The background page will // attempt to load `fake_google_page_url_` via XHR.
diff --git a/chrome/browser/ash/os_feedback/chrome_os_feedback_delegate.cc b/chrome/browser/ash/os_feedback/chrome_os_feedback_delegate.cc index 6fc99895..858b098 100644 --- a/chrome/browser/ash/os_feedback/chrome_os_feedback_delegate.cc +++ b/chrome/browser/ash/os_feedback/chrome_os_feedback_delegate.cc
@@ -6,6 +6,7 @@ #include <string> #include <utility> +#include <vector> #include "ash/shell.h" #include "ash/webui/os_feedback_ui/mojom/os_feedback_ui.mojom.h" @@ -15,6 +16,7 @@ #include "base/memory/ref_counted_memory.h" #include "base/strings/utf_string_conversions.h" #include "base/time/time.h" +#include "chrome/browser/ash/os_feedback/os_feedback_screenshot_manager.h" #include "chrome/browser/browser_process.h" #include "chrome/browser/feedback/feedback_dialog_utils.h" #include "chrome/browser/feedback/feedback_uploader_chrome.h" @@ -47,13 +49,12 @@ return feedback::FeedbackUploaderFactoryChrome::GetForBrowserContext(context); } -void TakeScreenshot( - base::OnceCallback<void(scoped_refptr<base::RefCountedMemory>)> callback) { - aura::Window* primary_window = ash::Shell::GetPrimaryRootWindow(); - if (primary_window) { - gfx::Rect rect = primary_window->bounds(); - ui::GrabWindowSnapshotAsyncPNG(primary_window, rect, std::move(callback)); +scoped_refptr<base::RefCountedMemory> GetScreenshotData() { + auto* screenshot_manager = OsFeedbackScreenshotManager::GetIfExists(); + if (screenshot_manager) { + return screenshot_manager->GetScreenshotData(); } + return nullptr; } } // namespace @@ -72,10 +73,6 @@ Profile* profile, scoped_refptr<extensions::FeedbackService> feedback_service) : profile_(profile), feedback_service_(feedback_service) { - // TODO(xiangdongkong): Take screenshot first, then open the feedback app. - TakeScreenshot(base::BindOnce(&ChromeOsFeedbackDelegate::OnScreenshotTaken, - weak_ptr_factory_.GetWeakPtr())); - Browser* browser = BrowserList::GetInstance()->GetLastActive(); if (browser) { // Save the last active page url before opening the feedback tool. @@ -84,7 +81,12 @@ } } -ChromeOsFeedbackDelegate::~ChromeOsFeedbackDelegate() = default; +ChromeOsFeedbackDelegate::~ChromeOsFeedbackDelegate() { + auto* screenshot_manager = OsFeedbackScreenshotManager::GetIfExists(); + if (screenshot_manager) { + screenshot_manager->DeleteScreenshotData(); + } +} std::string ChromeOsFeedbackDelegate::GetApplicationLocale() { return g_browser_process->GetApplicationLocale(); @@ -106,10 +108,10 @@ void ChromeOsFeedbackDelegate::GetScreenshotPng( GetScreenshotPngCallback callback) { - if (screenshot_png_data_ && screenshot_png_data_.get()) { - std::vector<uint8_t> data( - screenshot_png_data_->data(), - screenshot_png_data_->data() + screenshot_png_data_->size()); + scoped_refptr<base::RefCountedMemory> png_data = GetScreenshotData(); + if (png_data && png_data.get()) { + std::vector<uint8_t> data(png_data->data(), + png_data->data() + png_data->size()); std::move(callback).Run(data); } else { std::vector<uint8_t> empty_data; @@ -142,10 +144,10 @@ feedback_data->set_page_url(feedback_context->page_url.value().spec()); } - if (report->include_screenshot && screenshot_png_data_ && - screenshot_png_data_.get()) { - feedback_data->set_image(std::string(screenshot_png_data_->front_as<char>(), - screenshot_png_data_->size())); + scoped_refptr<base::RefCountedMemory> png_data = GetScreenshotData(); + if (report->include_screenshot && png_data && png_data.get()) { + feedback_data->set_image( + std::string(png_data->front_as<char>(), png_data->size())); } feedback_service_->SendFeedback( @@ -161,13 +163,4 @@ std::move(callback).Run(send_status); } -void ChromeOsFeedbackDelegate::OnScreenshotTaken( - scoped_refptr<base::RefCountedMemory> data) { - if (data && data.get()) { - screenshot_png_data_ = std::move(data); - } else { - LOG(ERROR) << "failed to take screenshot."; - } -} - } // namespace ash
diff --git a/chrome/browser/ash/os_feedback/chrome_os_feedback_delegate.h b/chrome/browser/ash/os_feedback/chrome_os_feedback_delegate.h index bac37ec..cf36e4af 100644 --- a/chrome/browser/ash/os_feedback/chrome_os_feedback_delegate.h +++ b/chrome/browser/ash/os_feedback/chrome_os_feedback_delegate.h
@@ -17,10 +17,6 @@ class Profile; -namespace base { -class RefCountedMemory; -} // namespace base - namespace extensions { class FeedbackService; } // namespace extensions @@ -46,20 +42,14 @@ void SendReport(os_feedback_ui::mojom::ReportPtr report, SendReportCallback callback) override; - void SetPngDataForTesting(scoped_refptr<base::RefCountedMemory> png_data) { - screenshot_png_data_ = std::move(png_data); - } - private: void OnSendFeedbackDone(SendReportCallback callback, bool status); - void OnScreenshotTaken(scoped_refptr<base::RefCountedMemory> data); // TODO(xiangdongkong): make sure the profile_ cannot be destroyed while // operations are pending. raw_ptr<Profile> profile_; scoped_refptr<extensions::FeedbackService> feedback_service_; absl::optional<GURL> page_url_; - scoped_refptr<base::RefCountedMemory> screenshot_png_data_; base::WeakPtrFactory<ChromeOsFeedbackDelegate> weak_ptr_factory_{this}; };
diff --git a/chrome/browser/ash/os_feedback/chrome_os_feedback_delegate_browsertest.cc b/chrome/browser/ash/os_feedback/chrome_os_feedback_delegate_browsertest.cc index a098ea18..e2ccb0a0 100644 --- a/chrome/browser/ash/os_feedback/chrome_os_feedback_delegate_browsertest.cc +++ b/chrome/browser/ash/os_feedback/chrome_os_feedback_delegate_browsertest.cc
@@ -6,6 +6,7 @@ #include <memory> #include <utility> +#include <vector> #include "base/bind.h" #include "base/files/scoped_temp_dir.h" @@ -15,6 +16,7 @@ #include "base/strings/utf_string_conversions.h" #include "base/test/bind.h" #include "base/test/test_future.h" +#include "chrome/browser/ash/os_feedback/os_feedback_screenshot_manager.h" #include "chrome/browser/browser_process.h" #include "chrome/browser/signin/identity_manager_factory.h" #include "chrome/browser/signin/identity_test_environment_profile_adaptor.h" @@ -90,19 +92,19 @@ auto feedback_delegate_ = std::make_unique<ChromeOsFeedbackDelegate>(profile_, std::move(mock)); - scoped_refptr<base::RefCountedMemory> fake_png_data; - { - const unsigned char kData[] = {12, 11, 99}; - fake_png_data = - base::MakeRefCounted<base::RefCountedBytes>(kData, std::size(kData)); - } - feedback_delegate_->SetPngDataForTesting(std::move(fake_png_data)); + OsFeedbackScreenshotManager::GetInstance()->SetPngDataForTesting( + CreateFakePngData()); base::test::TestFuture<SendReportStatus> future; feedback_delegate_->SendReport(std::move(report), future.GetCallback()); EXPECT_NE(SendReportStatus::kUnknown, future.Get()); } + + scoped_refptr<base::RefCountedMemory> CreateFakePngData() { + const unsigned char kData[] = {12, 11, 99}; + return base::MakeRefCounted<base::RefCountedBytes>(kData, std::size(kData)); + } }; // Test GetApplicationLocale returns a valid locale. @@ -194,4 +196,29 @@ EXPECT_EQ("", feedback_data->image()); } +// Test GetScreenshot returns correct data when there is a screenshot. +IN_PROC_BROWSER_TEST_F(ChromeOsFeedbackDelegateTest, HasScreenshot) { + ChromeOsFeedbackDelegate feedback_delegate_(browser()->profile()); + + OsFeedbackScreenshotManager::GetInstance()->SetPngDataForTesting( + CreateFakePngData()); + + base::test::TestFuture<const std::vector<uint8_t>&> future; + feedback_delegate_.GetScreenshotPng(future.GetCallback()); + + const std::vector<uint8_t> expected{12, 11, 99}; + const std::vector<uint8_t> result = future.Get(); + EXPECT_EQ(expected, result); +} + +// Test GetScreenshot returns empty array when there is not a screenshot. +IN_PROC_BROWSER_TEST_F(ChromeOsFeedbackDelegateTest, NoScreenshot) { + ChromeOsFeedbackDelegate feedback_delegate_(browser()->profile()); + base::test::TestFuture<const std::vector<uint8_t>&> future; + feedback_delegate_.GetScreenshotPng(future.GetCallback()); + + const std::vector<uint8_t> result = future.Get(); + EXPECT_EQ(0, result.size()); +} + } // namespace ash
diff --git a/chrome/browser/ash/os_feedback/os_feedback_screenshot_manager.cc b/chrome/browser/ash/os_feedback/os_feedback_screenshot_manager.cc new file mode 100644 index 0000000..c8f828e --- /dev/null +++ b/chrome/browser/ash/os_feedback/os_feedback_screenshot_manager.cc
@@ -0,0 +1,77 @@ +// Copyright 2022 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "chrome/browser/ash/os_feedback/os_feedback_screenshot_manager.h" + +#include <utility> + +#include "ash/shell.h" +#include "base/bind.h" +#include "base/logging.h" +#include "base/memory/ref_counted.h" +#include "base/memory/ref_counted_memory.h" +#include "base/memory/singleton.h" +#include "ui/aura/window.h" +#include "ui/snapshot/snapshot.h" + +namespace ash { + +OsFeedbackScreenshotManager::OsFeedbackScreenshotManager() = default; +OsFeedbackScreenshotManager::~OsFeedbackScreenshotManager() = default; + +// Static. +OsFeedbackScreenshotManager* OsFeedbackScreenshotManager::GetInstance() { + return base::Singleton<OsFeedbackScreenshotManager>::get(); +} + +OsFeedbackScreenshotManager* OsFeedbackScreenshotManager::GetIfExists() { + return base::Singleton<OsFeedbackScreenshotManager>::GetIfExists(); +} + +void OsFeedbackScreenshotManager::TakeScreenshot(ScreenshotCallback callback) { + // Skip taking if one has been taken already. Although the feedback tool only + // allows one instance, the user could request it multiple times while one + // instance is still running. + if (screenshot_png_data_ != nullptr) { + std::move(callback).Run(false); + return; + } + + // In unit tests, shell is not created. + aura::Window* primary_window = + ash::Shell::HasInstance() ? ash::Shell::GetPrimaryRootWindow() : nullptr; + if (primary_window == nullptr) { + std::move(callback).Run(false); + return; + } + gfx::Rect rect = primary_window->bounds(); + ui::GrabWindowSnapshotAsyncPNG( + primary_window, rect, + base::BindOnce(&OsFeedbackScreenshotManager::OnScreenshotTaken, + weak_ptr_factory_.GetWeakPtr(), std::move(callback))); +} + +scoped_refptr<base::RefCountedMemory> +OsFeedbackScreenshotManager::GetScreenshotData() { + return screenshot_png_data_; +} + +void OsFeedbackScreenshotManager::OnScreenshotTaken( + ScreenshotCallback callback, + scoped_refptr<base::RefCountedMemory> data) { + if (data && data.get()) { + screenshot_png_data_ = std::move(data); + std::move(callback).Run(true); + } else { + LOG(ERROR) << "failed to take screenshot."; + std::move(callback).Run(false); + } +} + +void OsFeedbackScreenshotManager::DeleteScreenshotData() { + // TODO(xiangdongkong): See whether we can delete this. + screenshot_png_data_ = nullptr; +} + +} // namespace ash
diff --git a/chrome/browser/ash/os_feedback/os_feedback_screenshot_manager.h b/chrome/browser/ash/os_feedback/os_feedback_screenshot_manager.h new file mode 100644 index 0000000..faead9a4 --- /dev/null +++ b/chrome/browser/ash/os_feedback/os_feedback_screenshot_manager.h
@@ -0,0 +1,74 @@ +// Copyright 2022 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef CHROME_BROWSER_ASH_OS_FEEDBACK_OS_FEEDBACK_SCREENSHOT_MANAGER_H_ +#define CHROME_BROWSER_ASH_OS_FEEDBACK_OS_FEEDBACK_SCREENSHOT_MANAGER_H_ + +#include "base/callback.h" +#include "base/memory/scoped_refptr.h" +#include "base/memory/singleton.h" +#include "base/memory/weak_ptr.h" + +namespace base { +class RefCountedMemory; +} // namespace base + +namespace ash { + +// This is a singleton class used to manage screenshot taking and cleanup. +// +// The reasons it is needed are as the followings: +// 1) We wanted to take a screenshot first before launching the feedback SWA. +// 2) Currently, SWA factory does not accept a custom object reference specific +// to a SWA. +// +// If we start a thread to take screenshot while the SWA is being launched, we +// may run into a race condition such that the screenshot may include the UI of +// the feedback SWA itself which is not desirable. +// +// With this class, we can intercept the launching process of the feedback SWA, +// hide it, take a screenshot, and when done, show the SWA. The SWA can +// retrieve the screenshot any time and clean it up upon exits. +class OsFeedbackScreenshotManager { + public: + OsFeedbackScreenshotManager(const OsFeedbackScreenshotManager&) = delete; + OsFeedbackScreenshotManager& operator=(const OsFeedbackScreenshotManager&) = + delete; + + using ScreenshotCallback = base::OnceCallback<void(bool)>; + + // Get the instance of this class. If not exists, will create one first. + static OsFeedbackScreenshotManager* GetInstance(); + // Return null if not exists. Otherwise, return the instance. + static OsFeedbackScreenshotManager* GetIfExists(); + // Take a screenshot of the primary display if any and persist the data in a + // field. + // Returns true in callback if screenshot is taken. + // Returns false in callback if screenshot is not taken or failed. + void TakeScreenshot(ScreenshotCallback callback); + // Return the screenshot png data or nullptr if screenshot can't be taken. + scoped_refptr<base::RefCountedMemory> GetScreenshotData(); + // Remove the screenshot data. It is expected to be called when the feedback + // SWA exits. + void DeleteScreenshotData(); + + void SetPngDataForTesting(scoped_refptr<base::RefCountedMemory> png_data) { + screenshot_png_data_ = std::move(png_data); + } + + private: + OsFeedbackScreenshotManager(); + ~OsFeedbackScreenshotManager(); + friend struct base::DefaultSingletonTraits<OsFeedbackScreenshotManager>; + + void OnScreenshotTaken(ScreenshotCallback callback, + scoped_refptr<base::RefCountedMemory> data); + + scoped_refptr<base::RefCountedMemory> screenshot_png_data_; + base::WeakPtrFactory<OsFeedbackScreenshotManager> weak_ptr_factory_{this}; +}; + +} // namespace ash + +#endif // CHROME_BROWSER_ASH_OS_FEEDBACK_OS_FEEDBACK_SCREENSHOT_MANAGER_H_
diff --git a/chrome/browser/ash/os_feedback/os_feedback_screenshot_manager_unittest.cc b/chrome/browser/ash/os_feedback/os_feedback_screenshot_manager_unittest.cc new file mode 100644 index 0000000..fa4ae84 --- /dev/null +++ b/chrome/browser/ash/os_feedback/os_feedback_screenshot_manager_unittest.cc
@@ -0,0 +1,81 @@ +// Copyright 2022 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "chrome/browser/ash/os_feedback/os_feedback_screenshot_manager.h" + +#include <utility> + +#include "base/bind.h" +#include "base/memory/ref_counted.h" +#include "base/memory/ref_counted_memory.h" +#include "base/test/task_environment.h" +#include "base/test/test_future.h" +#include "testing/gtest/include/gtest/gtest.h" + +namespace ash { + +class OsFeedbackScreenshotManagerTest : public ::testing::Test { + public: + OsFeedbackScreenshotManagerTest() = default; + ~OsFeedbackScreenshotManagerTest() override = default; + + protected: + void SetTestPngData() { + OsFeedbackScreenshotManager::GetInstance()->SetPngDataForTesting( + CreateFakePngData()); + } + + scoped_refptr<base::RefCountedMemory> CreateFakePngData() { + const unsigned char kData[] = {12, 11, 99}; + return base::MakeRefCounted<base::RefCountedBytes>(kData, std::size(kData)); + } +}; + +// Test that OsFeedbackScreenshotManager is a Singleton. +TEST_F(OsFeedbackScreenshotManagerTest, Singleton) { + EXPECT_EQ(nullptr, OsFeedbackScreenshotManager::GetIfExists()); + auto* manager = OsFeedbackScreenshotManager::GetInstance(); + + EXPECT_EQ(manager, OsFeedbackScreenshotManager::GetInstance()); + EXPECT_EQ(manager, OsFeedbackScreenshotManager::GetIfExists()); +} + +// Test that DeleteScreenshotData removes the screenshot data. +TEST_F(OsFeedbackScreenshotManagerTest, DeleteScreenshotData) { + auto* manager = OsFeedbackScreenshotManager::GetInstance(); + SetTestPngData(); + EXPECT_NE(nullptr, manager->GetScreenshotData()); + + manager->DeleteScreenshotData(); + + EXPECT_EQ(nullptr, manager->GetScreenshotData()); +} + +// Test that TakeScreenshot will skip if a screenshot exists already. +TEST_F(OsFeedbackScreenshotManagerTest, DoNotTakeScreenshotIfExists) { + base::test::SingleThreadTaskEnvironment task_environment; + base::test::TestFuture<bool> future; + auto* manager = OsFeedbackScreenshotManager::GetInstance(); + SetTestPngData(); + EXPECT_NE(nullptr, manager->GetScreenshotData()); + EXPECT_EQ(3, manager->GetScreenshotData()->size()); + + manager->TakeScreenshot(future.GetCallback()); + + EXPECT_FALSE(future.Get()); + EXPECT_EQ(3, manager->GetScreenshotData()->size()); +} + +// Test that TakeScreenshot will skip if there is not a window/display. +TEST_F(OsFeedbackScreenshotManagerTest, DoNotTakeScreenshotIfNoWindow) { + base::test::SingleThreadTaskEnvironment task_environment; + base::test::TestFuture<bool> future; + auto* manager = OsFeedbackScreenshotManager::GetInstance(); + + manager->TakeScreenshot(future.GetCallback()); + + EXPECT_FALSE(future.Get()); +} + +} // namespace ash
diff --git a/chrome/browser/ash/policy/active_directory/component_active_directory_policy_browsertest.cc b/chrome/browser/ash/policy/active_directory/component_active_directory_policy_browsertest.cc index 852cba22..c8ce742c 100644 --- a/chrome/browser/ash/policy/active_directory/component_active_directory_policy_browsertest.cc +++ b/chrome/browser/ash/policy/active_directory/component_active_directory_policy_browsertest.cc
@@ -95,9 +95,9 @@ ExtensionBrowserTest::SetUpOnMainThread(); // Install the initial extension. - ExtensionTestMessageListener ready_listener("ready", false); - event_listener_ = - std::make_unique<ExtensionTestMessageListener>("event", true); + ExtensionTestMessageListener ready_listener("ready"); + event_listener_ = std::make_unique<ExtensionTestMessageListener>( + "event", ReplyBehavior::kWillReply); extension_ = LoadExtension(kTestExtensionPath); ASSERT_TRUE(extension_.get()); ASSERT_EQ(kTestExtensionId, extension_->id()); @@ -168,7 +168,7 @@ IN_PROC_BROWSER_TEST_F(ComponentActiveDirectoryPolicyTest, FetchExtensionPolicy) { // Read the initial policy. - ExtensionTestMessageListener policy_listener(kTestPolicyJSON, false); + ExtensionTestMessageListener policy_listener(kTestPolicyJSON); event_listener_->Reply("get-policy-Name"); EXPECT_TRUE(policy_listener.WaitUntilSatisfied()); } @@ -185,11 +185,12 @@ EXPECT_TRUE(event_listener_->WaitUntilSatisfied()); // This policy was removed. - ExtensionTestMessageListener policy_listener1(kEmptyPolicy, true); + ExtensionTestMessageListener policy_listener1(kEmptyPolicy, + ReplyBehavior::kWillReply); event_listener_->Reply("get-policy-Name"); EXPECT_TRUE(policy_listener1.WaitUntilSatisfied()); - ExtensionTestMessageListener policy_listener2(kTestPolicy2JSON, false); + ExtensionTestMessageListener policy_listener2(kTestPolicy2JSON); policy_listener1.Reply("get-policy-Another"); EXPECT_TRUE(policy_listener2.WaitUntilSatisfied()); } @@ -204,7 +205,7 @@ // Installing a new extension should trigger a schema update, which should // trigger a policy refresh. - ExtensionTestMessageListener result_listener("ok", false); + ExtensionTestMessageListener result_listener("ok"); result_listener.set_failure_message("fail"); scoped_refptr<const extensions::Extension> extension2 = LoadExtension(kTestExtension2Path);
diff --git a/chrome/browser/ash/remote_apps/remote_apps_impl_browsertest.cc b/chrome/browser/ash/remote_apps/remote_apps_impl_browsertest.cc index dbf3e93c0..49333be9 100644 --- a/chrome/browser/ash/remote_apps/remote_apps_impl_browsertest.cc +++ b/chrome/browser/ash/remote_apps/remote_apps_impl_browsertest.cc
@@ -219,8 +219,7 @@ IN_PROC_BROWSER_TEST_F(RemoteAppsImplBrowsertest, OnRemoteAppLaunched) { extensions::ResultCatcher catcher; - ExtensionTestMessageListener listener("Remote app added", - /*will_reply=*/false); + ExtensionTestMessageListener listener("Remote app added"); listener.set_extension_id(kExtensionId); LoadExtensionAndRunTest("OnRemoteAppLaunched"); ASSERT_TRUE(listener.WaitUntilSatisfied());
diff --git a/chrome/browser/ash/scanning/chrome_scanning_app_delegate.cc b/chrome/browser/ash/scanning/chrome_scanning_app_delegate.cc index 353a2ba..dbd36d3 100644 --- a/chrome/browser/ash/scanning/chrome_scanning_app_delegate.cc +++ b/chrome/browser/ash/scanning/chrome_scanning_app_delegate.cc
@@ -13,6 +13,7 @@ #include "base/feature_list.h" #include "base/files/file_util.h" #include "base/memory/scoped_refptr.h" +#include "base/memory/weak_ptr.h" #include "base/task/sequenced_task_runner.h" #include "base/task/task_traits.h" #include "base/task/thread_pool.h" @@ -122,7 +123,7 @@ task_runner_->PostTaskAndReplyWithResult( FROM_HERE, base::BindOnce(&base::PathExists, path_to_file), base::BindOnce(&ChromeScanningAppDelegate::OnPathExists, - base::Unretained(this), path_to_file, + weak_ptr_factory_.GetWeakPtr(), path_to_file, std::move(callback))); }
diff --git a/chrome/browser/ash/scanning/chrome_scanning_app_delegate.h b/chrome/browser/ash/scanning/chrome_scanning_app_delegate.h index 5903159..e51ec01 100644 --- a/chrome/browser/ash/scanning/chrome_scanning_app_delegate.h +++ b/chrome/browser/ash/scanning/chrome_scanning_app_delegate.h
@@ -13,6 +13,7 @@ #include "base/callback_forward.h" #include "base/files/file_path.h" #include "base/memory/scoped_refptr.h" +#include "base/memory/weak_ptr.h" #include "chrome/browser/ash/scanning/scanning_file_path_helper.h" class PrefService; @@ -82,6 +83,8 @@ // Task runner for the I/O function base::PathExists(). scoped_refptr<base::SequencedTaskRunner> task_runner_; + + base::WeakPtrFactory<ChromeScanningAppDelegate> weak_ptr_factory_{this}; }; } // namespace ash
diff --git a/chrome/browser/ash/scanning/scan_service.cc b/chrome/browser/ash/scanning/scan_service.cc index f6b16610..a87631d 100644 --- a/chrome/browser/ash/scanning/scan_service.cc +++ b/chrome/browser/ash/scanning/scan_service.cc
@@ -16,6 +16,7 @@ #include "base/feature_list.h" #include "base/files/file_util.h" #include "base/location.h" +#include "base/memory/weak_ptr.h" #include "base/metrics/histogram_functions.h" #include "base/notreached.h" #include "base/strings/stringprintf.h" @@ -247,12 +248,11 @@ mojo::PendingRemote<scanning::mojom::MultiPageScanController> pending_remote = multi_page_controller_receiver_.BindNewPipeAndPassRemote(); - // Unretained is safe here, because `this` owns - // `multi_page_controller_receiver_`, and no endpoints will be invoked once - // the mojo::Receiver is destroyed. This allows a multi-page scan session to - // be cancelled by resetting the message pipe. - multi_page_controller_receiver_.set_disconnect_handler(base::BindOnce( - &ScanService::ResetMultiPageScanController, base::Unretained(this))); + // This allows a multi-page scan session to be cancelled by resetting the + // message pipe. + multi_page_controller_receiver_.set_disconnect_handler( + base::BindOnce(&ScanService::ResetMultiPageScanController, + weak_ptr_factory_.GetWeakPtr())); std::move(callback).Run(std::move(pending_remote)); multi_page_start_time_ = base::TimeTicks::Now(); @@ -607,10 +607,8 @@ mojo::PendingRemote<mojo_ipc::ScanJobObserver> observer) { scan_job_observer_.reset(); scan_job_observer_.Bind(std::move(observer)); - // Unretained is safe here, because `this` owns `scan_job_observer_`, and no - // reply callbacks will be invoked once the mojo::Remote is destroyed. scan_job_observer_.set_disconnect_handler( - base::BindOnce(&ScanService::CancelScan, base::Unretained(this))); + base::BindOnce(&ScanService::CancelScan, weak_ptr_factory_.GetWeakPtr())); } void ScanService::ResetMultiPageScanController() {
diff --git a/chrome/browser/ash/web_applications/os_feedback_app_integration_browsertest.cc b/chrome/browser/ash/web_applications/os_feedback_app_integration_browsertest.cc index 4ce8ec4..be72546 100644 --- a/chrome/browser/ash/web_applications/os_feedback_app_integration_browsertest.cc +++ b/chrome/browser/ash/web_applications/os_feedback_app_integration_browsertest.cc
@@ -13,9 +13,11 @@ #include "chrome/browser/ui/browser_finder.h" #include "chrome/browser/ui/browser_window.h" #include "chrome/browser/ui/web_applications/system_web_app_ui_utils.h" +#include "chrome/browser/ui/web_applications/test/web_app_browsertest_util.h" #include "chrome/browser/web_applications/system_web_apps/system_web_app_manager.h" #include "chrome/browser/web_applications/system_web_apps/test/system_web_app_browsertest_base.h" #include "chrome/common/pref_names.h" +#include "chrome/test/base/interactive_test_utils.h" #include "chrome/test/base/ui_test_utils.h" #include "components/webapps/browser/install_result_code.h" #include "content/public/browser/notification_types.h" @@ -31,53 +33,96 @@ public: OSFeedbackAppIntegrationTest() { scoped_feature_list_.InitWithFeatures({ash::features::kOsFeedback}, {}); + feedback_url_ = GURL(ash::kChromeUIOSFeedbackUrl); } protected: + // Find the url of the active tab of the browser if any. + GURL FindActiveUrl(Browser* browser) { + if (browser) { + return browser->tab_strip_model()->GetActiveWebContents()->GetURL(); + } + return GURL(); + } + + Browser* FindFeedbackAppBrowser() { + return web_app::FindSystemWebAppBrowser(browser()->profile(), + ash::SystemWebAppType::OS_FEEDBACK); + } + + // Launch the Feedback SWA and wait for launching is completed. + // Returns the browser of the Feedback SWA if exists. + Browser* LaunchAndWait() { + WaitForTestSystemAppInstall(); + + content::TestNavigationObserver navigation_observer(feedback_url_); + navigation_observer.StartWatchingNewWebContents(); + ui_test_utils::SendToOmniboxAndSubmit(browser(), feedback_url_.spec()); + navigation_observer.Wait(); + + return FindFeedbackAppBrowser(); + } + + Browser* ExpectFeedbackAppLaunched(const GURL& old_url) { + // browser() tab contents should be unaffected. + EXPECT_EQ(1, browser()->tab_strip_model()->count()); + EXPECT_EQ(old_url, FindActiveUrl(browser())); + + // We now have two browsers, one for the chrome window, one for the Feedback + // app. + EXPECT_EQ(2u, chrome::GetTotalBrowserCount()); + Browser* app_browser = FindFeedbackAppBrowser(); + EXPECT_TRUE(app_browser); + EXPECT_EQ(feedback_url_, FindActiveUrl(app_browser)); + + return app_browser; + } + + void ExpectNoFeedbackAppLaunched(const GURL& old_url) { + // browser() tab contents should be unaffected. + EXPECT_EQ(1, browser()->tab_strip_model()->count()); + EXPECT_EQ(old_url, FindActiveUrl(browser())); + + // We now still have one browser. + EXPECT_EQ(1u, chrome::GetTotalBrowserCount()); + + EXPECT_EQ(nullptr, FindFeedbackAppBrowser()); + } + + void SendKeyPressAltShiftI(Browser* browser) { + ASSERT_TRUE(ui_test_utils::SendKeyPressSync( + browser, ui::VKEY_I, /* control= */ false, /* shift= */ true, + /* alt= */ true, /* command= */ false)); + } + + GURL feedback_url_; base::HistogramTester histogram_tester_; private: base::test::ScopedFeatureList scoped_feature_list_; }; -// Test that the Feedback App installs and launches correctly by -// running some spot checks on the manifest. -IN_PROC_BROWSER_TEST_P(OSFeedbackAppIntegrationTest, OSFeedbackAppInLauncher) { - const GURL url(ash::kChromeUIOSFeedbackUrl); - EXPECT_NO_FATAL_FAILURE(ExpectSystemWebAppValid( - ash::SystemWebAppType::OS_FEEDBACK, url, "Feedback")); - - histogram_tester_.ExpectBucketCount( - "Webapp.InstallResult.System.Apps.OSFeedback", - webapps::InstallResultCode::kSuccessOfflineOnlyInstall, 1); -} - // This test verifies that the Feedback app is opened in a new browser window. IN_PROC_BROWSER_TEST_P(OSFeedbackAppIntegrationTest, NavigateToFeedback) { WaitForTestSystemAppInstall(); + GURL old_url = FindActiveUrl(browser()); - GURL main_feedback_url(ash::kChromeUIOSFeedbackUrl); - GURL old_url = browser()->tab_strip_model()->GetActiveWebContents()->GetURL(); - { - content::WindowedNotificationObserver observer( - content::NOTIFICATION_LOAD_STOP, - content::NotificationService::AllSources()); - ui_test_utils::SendToOmniboxAndSubmit(browser(), main_feedback_url.spec()); - observer.Wait(); - } + LaunchAndWait(); + ExpectFeedbackAppLaunched(old_url); +} - // browser() tab contents should be unaffected. - EXPECT_EQ(1, browser()->tab_strip_model()->count()); - EXPECT_EQ(old_url, - browser()->tab_strip_model()->GetActiveWebContents()->GetURL()); +// This test verifies that the Feedback app is opened in a new browser window. +IN_PROC_BROWSER_TEST_P(OSFeedbackAppIntegrationTest, OpenFeedbackByHotKey) { + WaitForTestSystemAppInstall(); + GURL old_url = FindActiveUrl(browser()); - // We now have two browsers, one for the chrome window, one for the Feedback - // app. - EXPECT_EQ(2u, chrome::GetTotalBrowserCount()); - EXPECT_EQ(main_feedback_url, chrome::FindLastActive() - ->tab_strip_model() - ->GetActiveWebContents() - ->GetVisibleURL()); + content::TestNavigationObserver navigation_observer(feedback_url_); + navigation_observer.StartWatchingNewWebContents(); + // Try to press keyboard shortcut to open Feedback app. + SendKeyPressAltShiftI(browser()); + navigation_observer.Wait(); + + ExpectFeedbackAppLaunched(old_url); } // This test verifies that the Feedback app is not opened when @@ -87,23 +132,19 @@ browser()->profile()->GetPrefs()->SetBoolean(prefs::kUserFeedbackAllowed, false); + GURL old_url = FindActiveUrl(browser()); - GURL main_feedback_url(ash::kChromeUIOSFeedbackUrl); - GURL old_url = browser()->tab_strip_model()->GetActiveWebContents()->GetURL(); - ui_test_utils::SendToOmniboxAndSubmit(browser(), main_feedback_url.spec()); + // Try to navigate to the feedback app in the browser. + ui_test_utils::SendToOmniboxAndSubmit(browser(), feedback_url_.spec()); web_app::FlushSystemWebAppLaunchesForTesting(browser()->profile()); - // browser() tab contents should be unaffected. - EXPECT_EQ(1, browser()->tab_strip_model()->count()); - EXPECT_EQ(old_url, - browser()->tab_strip_model()->GetActiveWebContents()->GetURL()); + ExpectNoFeedbackAppLaunched(old_url); - // We now still have one browser. - EXPECT_EQ(1u, chrome::GetTotalBrowserCount()); - EXPECT_EQ(old_url, chrome::FindLastActive() - ->tab_strip_model() - ->GetActiveWebContents() - ->GetVisibleURL()); + // Try to press keyboard shortcut to open Feedback app. + SendKeyPressAltShiftI(browser()); + web_app::FlushSystemWebAppLaunchesForTesting(browser()->profile()); + + ExpectNoFeedbackAppLaunched(old_url); } // Test that the Feedback App has a default bounds of 640(height)x600(width) @@ -113,9 +154,8 @@ ash::Shell::Get()->display_manager()); display_manager_test.UpdateDisplay("1000x2000"); - WaitForTestSystemAppInstall(); - Browser* browser; - LaunchApp(ash::SystemWebAppType::OS_FEEDBACK, &browser); + Browser* app_browser = LaunchAndWait(); + EXPECT_TRUE(app_browser); gfx::Rect work_area = display::Screen::GetScreen()->GetDisplayForNewWindows().work_area(); @@ -125,7 +165,7 @@ int x = (work_area.width() - expected_width) / 2; int y = (work_area.height() - expected_height) / 2; EXPECT_EQ(gfx::Rect(x, y, expected_width, expected_height), - browser->window()->GetBounds()); + app_browser->window()->GetBounds()); } // Test that when the policy UserFeedbackAllowed is true, the Feedback App
diff --git a/chrome/browser/ash/web_applications/os_feedback_system_web_app_info.cc b/chrome/browser/ash/web_applications/os_feedback_system_web_app_info.cc index 0ad8837f..2b9f05d 100644 --- a/chrome/browser/ash/web_applications/os_feedback_system_web_app_info.cc +++ b/chrome/browser/ash/web_applications/os_feedback_system_web_app_info.cc
@@ -9,7 +9,12 @@ #include "ash/constants/ash_features.h" #include "ash/webui/grit/ash_os_feedback_resources.h" #include "ash/webui/os_feedback_ui/url_constants.h" +#include "chrome/browser/apps/app_service/app_launch_params.h" +#include "chrome/browser/ash/os_feedback/os_feedback_screenshot_manager.h" #include "chrome/browser/ash/web_applications/system_web_app_install_utils.h" +#include "chrome/browser/ui/ash/multi_user/multi_user_util.h" +#include "chrome/browser/ui/browser.h" +#include "chrome/browser/ui/browser_window.h" #include "chrome/browser/web_applications/user_display_mode.h" #include "chrome/browser/web_applications/web_app_install_info.h" #include "chrome/browser/web_applications/web_app_provider.h" @@ -18,6 +23,7 @@ #include "components/prefs/pref_service.h" #include "third_party/blink/public/mojom/manifest/display_mode.mojom.h" #include "ui/base/l10n/l10n_util.h" +#include "ui/display/scoped_display_for_new_windows.h" #include "ui/display/screen.h" namespace { @@ -65,6 +71,8 @@ GURL(ash::kChromeUIOSFeedbackUrl), profile) {} +OSFeedbackAppDelegate::~OSFeedbackAppDelegate() = default; + std::unique_ptr<WebAppInstallInfo> OSFeedbackAppDelegate::GetWebAppInfo() const { return CreateWebAppInfoForOSFeedbackSystemWebApp(); @@ -105,10 +113,51 @@ const apps::AppLaunchParams& params) const { // This check is needed to enforce the policy no matter how and from where the // feedback tool is to be launched. - if (!IsUserFeedbackAllowed(profile)) { - return nullptr; + if (IsUserFeedbackAllowed(profile)) { + apps::AppLaunchParams app_params( + params.app_id, params.container, params.disposition, + params.launch_source, params.display_id, params.launch_files, + params.intent ? params.intent.Clone() : nullptr); + // Take a screenshot and launch the app afterward. + ash::OsFeedbackScreenshotManager::GetInstance()->TakeScreenshot( + base::BindOnce(&OSFeedbackAppDelegate::OnScreenshotTaken, + weak_ptr_factory_.GetWeakPtr(), profile, provider, url, + std::move(app_params))); } - // TODO(xiangdongkong): Take a screenshot and launch the app afterward. - return SystemWebAppDelegate::LaunchAndNavigateSystemWebApp(profile, provider, - url, params); + // Return nullptr to tell the rest of the code SWA aborted the launch so that + // the Feedback can use a customized launch process, i.e., take a screenshot + // async, then launch afterward. + return nullptr; +} + +void OSFeedbackAppDelegate::OnScreenshotTaken(Profile* profile, + web_app::WebAppProvider* provider, + GURL url, + apps::AppLaunchParams params, + bool status) const { + // Exit early if we can't create browser windows (e.g. when browser is + // shutting down, or a wrong profile is given). + if (Browser::GetCreationStatusForProfile(profile) != + Browser::CreationStatus::kOk) { + return; + } + + // Place new windows on the specified display. + display::ScopedDisplayForNewWindows scoped_display(params.display_id); + + Browser* browser = SystemWebAppDelegate::LaunchAndNavigateSystemWebApp( + profile, provider, url, params); + if (!browser) { + return; + } + + // LaunchSystemWebAppImpl may be called with a profile associated with an + // inactive (background) desktop (e.g. when multiple users are logged in). + // Here we move the newly created browser window (or the existing one on the + // inactive desktop) to the current active (visible) desktop, so the user + // always sees the launched app. + multi_user_util::MoveWindowToCurrentDesktop( + browser->window()->GetNativeWindow()); + + browser->window()->Show(); }
diff --git a/chrome/browser/ash/web_applications/os_feedback_system_web_app_info.h b/chrome/browser/ash/web_applications/os_feedback_system_web_app_info.h index 1239c45..fdea0fbf 100644 --- a/chrome/browser/ash/web_applications/os_feedback_system_web_app_info.h +++ b/chrome/browser/ash/web_applications/os_feedback_system_web_app_info.h
@@ -7,6 +7,7 @@ #include <memory> +#include "base/memory/weak_ptr.h" #include "chrome/browser/ash/system_web_apps/types/system_web_app_delegate.h" #include "chrome/browser/ash/system_web_apps/types/system_web_app_type.h" #include "chrome/browser/profiles/profile.h" @@ -22,6 +23,7 @@ class OSFeedbackAppDelegate : public ash::SystemWebAppDelegate { public: explicit OSFeedbackAppDelegate(Profile* profile); + ~OSFeedbackAppDelegate() override; // ash::SystemWebAppDelegate overrides: std::unique_ptr<WebAppInstallInfo> GetWebAppInfo() const override; @@ -38,6 +40,15 @@ web_app::WebAppProvider* provider, const GURL& url, const apps::AppLaunchParams& params) const override; + + private: + void OnScreenshotTaken(Profile* profile, + web_app::WebAppProvider* provider, + GURL url, + apps::AppLaunchParams params, + bool status) const; + + base::WeakPtrFactory<OSFeedbackAppDelegate> weak_ptr_factory_{this}; }; // Returns a WebAppInstallInfo used to install the app.
diff --git a/chrome/browser/chromeos/BUILD.gn b/chrome/browser/chromeos/BUILD.gn index 1b97d69f..fb46d80 100644 --- a/chrome/browser/chromeos/BUILD.gn +++ b/chrome/browser/chromeos/BUILD.gn
@@ -1957,6 +1957,8 @@ "../ash/notifications/update_required_notification.h", "../ash/os_feedback/chrome_os_feedback_delegate.cc", "../ash/os_feedback/chrome_os_feedback_delegate.h", + "../ash/os_feedback/os_feedback_screenshot_manager.cc", + "../ash/os_feedback/os_feedback_screenshot_manager.h", "../ash/ownership/fake_owner_settings_service.cc", "../ash/ownership/fake_owner_settings_service.h", "../ash/ownership/owner_settings_service_ash.cc", @@ -4047,6 +4049,7 @@ "../ash/notifications/mock_adb_sideloading_policy_change_notification.h", "../ash/notifications/request_system_proxy_credentials_view_unittest.cc", "../ash/notifications/update_required_notification_unittest.cc", + "../ash/os_feedback/os_feedback_screenshot_manager_unittest.cc", "../ash/ownership/owner_settings_service_ash_unittest.cc", "../ash/pcie_peripheral/ash_usb_detector_unittest.cc", "../ash/phonehub/browser_tabs_metadata_fetcher_impl_unittest.cc",
diff --git a/chrome/browser/chromeos/extensions/action_handlers/action_handlers_apitest.cc b/chrome/browser/chromeos/extensions/action_handlers/action_handlers_apitest.cc index 1e2e2f5..93cc197 100644 --- a/chrome/browser/chromeos/extensions/action_handlers/action_handlers_apitest.cc +++ b/chrome/browser/chromeos/extensions/action_handlers/action_handlers_apitest.cc
@@ -16,7 +16,7 @@ IN_PROC_BROWSER_TEST_F(ActionHandlersBrowserTest, LaunchAppWithNewNote) { // Load the app. Make sure to wait until it is done loading. - ExtensionTestMessageListener loader("loaded", false); + ExtensionTestMessageListener loader("loaded"); base::FilePath path = test_data_dir_.AppendASCII("action_handlers").AppendASCII("new_note"); const extensions::Extension* app = LoadExtension(path); @@ -26,7 +26,7 @@ EXPECT_TRUE(loader.WaitUntilSatisfied()); // Fire a "new_note" action type, assert that app has received it. - ExtensionTestMessageListener new_note("hasNewNote = true", false); + ExtensionTestMessageListener new_note("hasNewNote = true"); auto action_data = std::make_unique<app_runtime::ActionData>(); action_data->action_type = app_runtime::ActionType::ACTION_TYPE_NEW_NOTE; apps::LaunchPlatformAppWithAction(profile(), app, std::move(action_data));
diff --git a/chrome/browser/chromeos/extensions/input_method_apitest_chromeos.cc b/chrome/browser/chromeos/extensions/input_method_apitest_chromeos.cc index 284e95dd..316b9ac6 100644 --- a/chrome/browser/chromeos/extensions/input_method_apitest_chromeos.cc +++ b/chrome/browser/chromeos/extensions/input_method_apitest_chromeos.cc
@@ -118,9 +118,9 @@ IN_PROC_BROWSER_TEST_F(ExtensionInputMethodApiTest, ImeMenuActivation) { // Listener for IME menu initial state ready. - ExtensionTestMessageListener config_listener("config_ready", false); + ExtensionTestMessageListener config_listener("config_ready"); // Listener for IME menu event ready. - ExtensionTestMessageListener event_listener("event_ready", false); + ExtensionTestMessageListener event_listener("event_ready"); browser()->profile()->GetPrefs()->SetBoolean(prefs::kLanguageImeMenuActivated, true); @@ -138,11 +138,10 @@ } IN_PROC_BROWSER_TEST_F(ExtensionInputMethodApiTest, ImeMenuAPITest) { - ExtensionTestMessageListener activated_listener("activated", false); - ExtensionTestMessageListener menu_listener("get_menu_update", false); - ExtensionTestMessageListener item_activated_listenter("get_menu_activated", - false); - ExtensionTestMessageListener list_listenter("list_change", false); + ExtensionTestMessageListener activated_listener("activated"); + ExtensionTestMessageListener menu_listener("get_menu_update"); + ExtensionTestMessageListener item_activated_listenter("get_menu_activated"); + ExtensionTestMessageListener list_listenter("list_change"); browser()->profile()->GetPrefs()->SetBoolean(prefs::kLanguageImeMenuActivated, true); ASSERT_TRUE(
diff --git a/chrome/browser/chromeos/extensions/login_screen/login/login_apitest.cc b/chrome/browser/chromeos/extensions/login_screen/login/login_apitest.cc index b60b9ca..ccb6a94 100644 --- a/chrome/browser/chromeos/extensions/login_screen/login/login_apitest.cc +++ b/chrome/browser/chromeos/extensions/login_screen/login/login_apitest.cc
@@ -297,10 +297,10 @@ ClearTestListeners(); extensions::ResultCatcher catcher; ExtensionTestMessageListener login_screen_listener(listener_message(), - /*will_reply=*/true); + ReplyBehavior::kWillReply); login_screen_listener.set_extension_id(extension_id()); ExtensionTestMessageListener in_session_listener(listener_message(), - /*will_reply=*/true); + ReplyBehavior::kWillReply); in_session_listener.set_extension_id(kInSessionExtensionId); SetUpInSessionExtension(); @@ -351,13 +351,13 @@ ClearTestListeners(); ExtensionTestMessageListener in_session_listener(listener_message(), - /*will_reply=*/true); + ReplyBehavior::kWillReply); in_session_listener.set_extension_id(kInSessionExtensionId); SetUpInSessionExtension(); ExtensionTestMessageListener login_screen_listener(listener_message(), - /*will_reply=*/true); + ReplyBehavior::kWillReply); login_screen_listener.set_extension_id(extension_id()); LockScreen(); @@ -366,8 +366,7 @@ // Set up a `login.onRequestExternalLogout` listener on the in-session // extension. ExtensionTestMessageListener in_session_message_listener( - kOnRequestExternalLogoutInSessionMessage, - /*will_reply=*/false); + kOnRequestExternalLogoutInSessionMessage); in_session_message_listener.set_extension_id(kInSessionExtensionId); ASSERT_TRUE(in_session_listener.WaitUntilSatisfied()); in_session_listener.Reply(kInSessionLoginOnRequestExternalLogout); @@ -388,13 +387,13 @@ ClearTestListeners(); ExtensionTestMessageListener in_session_listener(listener_message(), - /*will_reply=*/true); + ReplyBehavior::kWillReply); in_session_listener.set_extension_id(kInSessionExtensionId); SetUpInSessionExtension(); ExtensionTestMessageListener login_screen_listener(listener_message(), - /*will_reply=*/true); + ReplyBehavior::kWillReply); login_screen_listener.set_extension_id(extension_id()); LockScreen(); @@ -403,8 +402,7 @@ // Set up a `login.onExternalLogoutDone` listener on the login screen // extension. ExtensionTestMessageListener login_screen_message_listener( - kOnExternalLogoutDoneLoginScreenMessage, - /*will_reply=*/false); + kOnExternalLogoutDoneLoginScreenMessage); login_screen_message_listener.set_extension_id(extension_id()); ASSERT_TRUE(login_screen_listener.WaitUntilSatisfied()); login_screen_listener.Reply(kLoginOnExternalLogoutDone);
diff --git a/chrome/browser/chromeos/extensions/login_screen/login_screen_apitest_base.cc b/chrome/browser/chromeos/extensions/login_screen/login_screen_apitest_base.cc index 3a8e962..a3db205 100644 --- a/chrome/browser/chromeos/extensions/login_screen/login_screen_apitest_base.cc +++ b/chrome/browser/chromeos/extensions/login_screen/login_screen_apitest_base.cc
@@ -35,9 +35,8 @@ void LoginScreenApitestBase::SetUpTestListeners() { catcher_ = std::make_unique<extensions::ResultCatcher>(); - listener_ = - std::make_unique<ExtensionTestMessageListener>(listener_message_, - /*will_reply=*/true); + listener_ = std::make_unique<ExtensionTestMessageListener>( + listener_message_, ReplyBehavior::kWillReply); } void LoginScreenApitestBase::ClearTestListeners() {
diff --git a/chrome/browser/chromeos/extensions/login_screen/login_screen_storage/login_screen_storage_apitest.cc b/chrome/browser/chromeos/extensions/login_screen/login_screen_storage/login_screen_storage_apitest.cc index 3e4934f..09350fb 100644 --- a/chrome/browser/chromeos/extensions/login_screen/login_screen_storage/login_screen_storage_apitest.cc +++ b/chrome/browser/chromeos/extensions/login_screen/login_screen_storage/login_screen_storage_apitest.cc
@@ -79,9 +79,8 @@ void RunTest(const std::string& test_name) { catcher_ = std::make_unique<extensions::ResultCatcher>(); - listener_ = - std::make_unique<ExtensionTestMessageListener>(kListenerMessage, - /* will_reply= */ true); + listener_ = std::make_unique<ExtensionTestMessageListener>( + kListenerMessage, ReplyBehavior::kWillReply); extensions::ExtensionId extension_id; EXPECT_TRUE(extension_force_install_mixin_.ForceInstallFromCrx(
diff --git a/chrome/browser/chromeos/extensions/login_screen/login_state/session_state_changed_event_dispatcher_ash_apitest.cc b/chrome/browser/chromeos/extensions/login_screen/login_state/session_state_changed_event_dispatcher_ash_apitest.cc index 61d3dc6..4aef710b 100644 --- a/chrome/browser/chromeos/extensions/login_screen/login_state/session_state_changed_event_dispatcher_ash_apitest.cc +++ b/chrome/browser/chromeos/extensions/login_screen/login_state/session_state_changed_event_dispatcher_ash_apitest.cc
@@ -38,7 +38,7 @@ }; for (const auto& test : kTestCases) { - ExtensionTestMessageListener listener(test.expected, /*will_reply=*/false); + ExtensionTestMessageListener listener(test.expected); session_manager->SetSessionState(test.session_state); ASSERT_TRUE(listener.WaitUntilSatisfied()); }
diff --git a/chrome/browser/chromeos/extensions/speech/speech_recognition_private_apitest.cc b/chrome/browser/chromeos/extensions/speech/speech_recognition_private_apitest.cc index 3809712..1fac053 100644 --- a/chrome/browser/chromeos/extensions/speech/speech_recognition_private_apitest.cc +++ b/chrome/browser/chromeos/extensions/speech/speech_recognition_private_apitest.cc
@@ -56,11 +56,10 @@ IN_PROC_BROWSER_TEST_P(SpeechRecognitionPrivateApiTest, StartResultStop) { // This test requires some back and forth communication between C++ and JS. // Use message listeners to force the synchronicity of this test. - ExtensionTestMessageListener start_listener("Started", false); - ExtensionTestMessageListener first_result_listener("Received first result", - false); - ExtensionTestMessageListener second_result_listener("Received second result", - true); + ExtensionTestMessageListener start_listener("Started"); + ExtensionTestMessageListener first_result_listener("Received first result"); + ExtensionTestMessageListener second_result_listener( + "Received second result", ReplyBehavior::kWillReply); // Load the extension and wait for speech recognition to start. ResultCatcher result_catcher; @@ -84,7 +83,7 @@ // An end-to-end test that starts speech recognition, fires a fake error, then // waits for the extension to handle both an onError and an onStop event. IN_PROC_BROWSER_TEST_P(SpeechRecognitionPrivateApiTest, StartErrorStop) { - ExtensionTestMessageListener start_listener("Started", false); + ExtensionTestMessageListener start_listener("Started"); ResultCatcher result_catcher; const Extension* extension = LoadExtensionAsComponent("start_error_stop");
diff --git a/chrome/browser/chromeos/extensions/speech/speech_recognition_private_manager_browsertest.cc b/chrome/browser/chromeos/extensions/speech/speech_recognition_private_manager_browsertest.cc index d15756e..0a45e7a 100644 --- a/chrome/browser/chromeos/extensions/speech/speech_recognition_private_manager_browsertest.cc +++ b/chrome/browser/chromeos/extensions/speech/speech_recognition_private_manager_browsertest.cc
@@ -184,7 +184,7 @@ {kCorrectExtensionIdAndClientId, kProcessingEvent}}; for (const auto& test : kTestCases) { - ExtensionTestMessageListener listener(test.expected, false); + ExtensionTestMessageListener listener(test.expected); DispatchOnStopEvent(test.key); ASSERT_TRUE(listener.WaitUntilSatisfied()); } @@ -216,10 +216,9 @@ for (const auto& test : kTestCases) { // For each onResult event, verify that it was successfully handled in one // listener and dropped in the other (there are only two listeners). - ExtensionTestMessageListener success_listener(test.expected_success_message, - false); - ExtensionTestMessageListener skip_listener(test.expected_skip_message, - false); + ExtensionTestMessageListener success_listener( + test.expected_success_message); + ExtensionTestMessageListener skip_listener(test.expected_skip_message); DispatchOnResultEvent(test.key, test.transcript, test.is_final); ASSERT_TRUE(success_listener.WaitUntilSatisfied()); ASSERT_TRUE(skip_listener.WaitUntilSatisfied()); @@ -231,7 +230,7 @@ IN_PROC_BROWSER_TEST_P(SpeechRecognitionPrivateManagerTest, DispatchOnErrorEvent) { ResultCatcher result_catcher; - ExtensionTestMessageListener listener("Proceed", false); + ExtensionTestMessageListener listener("Proceed"); const Extension* extension = LoadExtensionAsComponent("onerror_event"); ASSERT_TRUE(extension);
diff --git a/chrome/browser/chromeos/extensions/telemetry/api/telemetry_extension_capabilities_browser_test.cc b/chrome/browser/chromeos/extensions/telemetry/api/telemetry_extension_capabilities_browser_test.cc index b8b6d161..a238761 100644 --- a/chrome/browser/chromeos/extensions/telemetry/api/telemetry_extension_capabilities_browser_test.cc +++ b/chrome/browser/chromeos/extensions/telemetry/api/telemetry_extension_capabilities_browser_test.cc
@@ -52,7 +52,7 @@ IN_PROC_BROWSER_TEST_F(TelemetryExtensionCapabilitiesBrowserTest, CanReceiveMessageExternal) { // Start listening on the extension. - ExtensionTestMessageListener listener(/*will_reply=*/false); + ExtensionTestMessageListener listener; // Must outlive the extension. extensions::TestExtensionDir test_dir_receiver; @@ -108,7 +108,7 @@ IN_PROC_BROWSER_TEST_F(TelemetryExtensionCapabilitiesBrowserTest, CanNavigateToOptionsPage) { // Start listening on the extension. - ExtensionTestMessageListener listener(/*will_reply=*/false); + ExtensionTestMessageListener listener; // Must outlive the extension. extensions::TestExtensionDir test_dir; @@ -178,7 +178,7 @@ ASSERT_TRUE(ui_test_utils::NavigateToURL(browser(), GURL(kPwaPageUrl))); // Start listening on the extension. - ExtensionTestMessageListener listener(/*will_reply=*/false); + ExtensionTestMessageListener listener; // Must outlive the extension. extensions::TestExtensionDir test_dir_receiver;
diff --git a/chrome/browser/chromeos/extensions/wallpaper_manager_browsertest.cc b/chrome/browser/chromeos/extensions/wallpaper_manager_browsertest.cc index d7704ef..bc657bd 100644 --- a/chrome/browser/chromeos/extensions/wallpaper_manager_browsertest.cc +++ b/chrome/browser/chromeos/extensions/wallpaper_manager_browsertest.cc
@@ -52,8 +52,8 @@ void WallpaperManagerBrowserTest::VerifyWallpaperManagerLoaded() { ExtensionTestMessageListener window_created_listener( - "wallpaper-window-created", false); - ExtensionTestMessageListener launched_listener("launched", false); + "wallpaper-window-created"); + ExtensionTestMessageListener launched_listener("launched"); LoadAndLaunchWallpaperManager(); EXPECT_TRUE(window_created_listener.WaitUntilSatisfied()) << "Wallpaper picker window was not created.";
diff --git a/chrome/browser/chromeos/policy/dlp/dlp_content_tab_helper_browsertest.cc b/chrome/browser/chromeos/policy/dlp/dlp_content_tab_helper_browsertest.cc index c062c6c..d07ab5c 100644 --- a/chrome/browser/chromeos/policy/dlp/dlp_content_tab_helper_browsertest.cc +++ b/chrome/browser/chromeos/policy/dlp/dlp_content_tab_helper_browsertest.cc
@@ -54,7 +54,7 @@ IN_PROC_BROWSER_TEST_F(DlpContentTabHelperBrowserTest, PlatformApp) { ASSERT_TRUE(embedded_test_server()->Start()); - ExtensionTestMessageListener launched_listener("Launched", false); + ExtensionTestMessageListener launched_listener("Launched"); // Install Platform App content::WindowedNotificationObserver app_loaded_observer(
diff --git a/chrome/browser/component_updater/desktop_sharing_hub_component_installer.cc b/chrome/browser/component_updater/desktop_sharing_hub_component_installer.cc index 448bfd6..bdab4de 100644 --- a/chrome/browser/component_updater/desktop_sharing_hub_component_installer.cc +++ b/chrome/browser/component_updater/desktop_sharing_hub_component_installer.cc
@@ -17,9 +17,11 @@ #include "base/memory/ref_counted.h" #include "base/path_service.h" #include "base/task/thread_pool.h" +#include "base/threading/thread_task_runner_handle.h" #include "base/version.h" #include "chrome/browser/share/core/share_targets.h" #include "components/component_updater/component_updater_paths.h" +#include "content/public/browser/browser_thread.h" using component_updater::ComponentUpdateService; @@ -37,9 +39,10 @@ const char kDesktopSharingHubManifestName[] = "Desktop Sharing Hub"; -void LoadShareTargetsFromDisk(const base::FilePath& pb_path) { +absl::optional<std::string> LoadShareTargetsFromDisk( + const base::FilePath& pb_path) { if (pb_path.empty()) - return; + return absl::nullopt; VLOG(1) << "Reading Download File Types from file: " << pb_path.value(); std::string binary_pb; @@ -47,9 +50,16 @@ // ComponentReady will only be called when there is some installation of the // component ready, so it would be correct to consider this an error. LOG(ERROR) << "Failed reading from " << pb_path.value(); - return; + return absl::nullopt; } - sharing::ShareTargets::GetInstance()->PopulateFromDynamicUpdate(binary_pb); + + return binary_pb; +} + +void OnLoadShareTargetsFromDiskDone(absl::optional<std::string> binary_pb) { + DCHECK_CURRENTLY_ON(content::BrowserThread::UI); + if (binary_pb) + sharing::ShareTargets::GetInstance()->PopulateFromDynamicUpdate(*binary_pb); } } // namespace @@ -84,12 +94,18 @@ const base::Version& version, const base::FilePath& install_dir, base::Value manifest) { + DCHECK_CURRENTLY_ON(content::BrowserThread::UI); + VLOG(1) << "Component ready, version " << version.GetString() << " in " << install_dir.value(); - base::ThreadPool::PostTask( + // The actual disk read is done on a worker thread, but as soon as the read is + // done the binary protobuf should be posted back to the main thread to + // maintain the invariant that ShareTargets is only used from the main thread. + base::ThreadPool::PostTaskAndReplyWithResult( FROM_HERE, {base::MayBlock(), base::TaskPriority::BEST_EFFORT}, - base::BindOnce(&LoadShareTargetsFromDisk, GetInstalledPath(install_dir))); + base::BindOnce(&LoadShareTargetsFromDisk, GetInstalledPath(install_dir)), + base::BindOnce(&OnLoadShareTargetsFromDiskDone)); } // Called during startup and installation before ComponentReady().
diff --git a/chrome/browser/dev_ui_browser_resources.grd b/chrome/browser/dev_ui_browser_resources.grd index 4889cf9..b03040e 100644 --- a/chrome/browser/dev_ui_browser_resources.grd +++ b/chrome/browser/dev_ui_browser_resources.grd
@@ -32,8 +32,6 @@ <include name="IDR_DOMAIN_RELIABILITY_INTERNALS_HTML" file="resources\domain_reliability_internals\domain_reliability_internals.html" type="BINDATA" /> <include name="IDR_DOMAIN_RELIABILITY_INTERNALS_CSS" file="resources\domain_reliability_internals\domain_reliability_internals.css" type="BINDATA" /> <include name="IDR_DOMAIN_RELIABILITY_INTERNALS_JS" file="resources\domain_reliability_internals\domain_reliability_internals.js" type="BINDATA" /> - <include name="IDR_LOCAL_STATE_HTML" file="resources\local_state\local_state.html" type="BINDATA" /> - <include name="IDR_LOCAL_STATE_JS" file="${root_gen_dir}\chrome\browser\resources\local_state\local_state.js" use_base_dir="false" type="BINDATA" /> <include name="IDR_MEMORY_INTERNALS_HTML" file="resources\memory_internals\memory_internals.html" type="BINDATA" /> <include name="IDR_MEMORY_INTERNALS_JS" file="${root_gen_dir}\chrome\browser\resources\memory_internals\tsc\memory_internals.js" use_base_dir="false" type="BINDATA" /> <include name="IDR_PREDICTORS_AUTOCOMPLETE_ACTION_PREDICTOR_JS" file="${root_gen_dir}\chrome\browser\resources\predictors\autocomplete_action_predictor.js" use_base_dir="false" type="BINDATA" />
diff --git a/chrome/browser/extensions/api/settings_private/prefs_util.cc b/chrome/browser/extensions/api/settings_private/prefs_util.cc index 6a2ed1c..2a8d004 100644 --- a/chrome/browser/extensions/api/settings_private/prefs_util.cc +++ b/chrome/browser/extensions/api/settings_private/prefs_util.cc
@@ -583,6 +583,8 @@ settings_api::PrefType::PREF_TYPE_NUMBER; (*s_allowlist)[ash::ambient::prefs::kAmbientModePhotoRefreshIntervalSeconds] = settings_api::PrefType::PREF_TYPE_NUMBER; + (*s_allowlist)[ash::ambient::prefs::kAmbientModeAnimationPlaybackSpeed] = + settings_api::PrefType::PREF_TYPE_NUMBER; // Dark Mode. (*s_allowlist)[ash::prefs::kColorModeThemed] =
diff --git a/chrome/browser/extensions/api/web_request/web_request_apitest.cc b/chrome/browser/extensions/api/web_request/web_request_apitest.cc index 95aace1..9736be94 100644 --- a/chrome/browser/extensions/api/web_request/web_request_apitest.cc +++ b/chrome/browser/extensions/api/web_request/web_request_apitest.cc
@@ -1089,9 +1089,7 @@ EXPECT_EQ(BLOCKED_ACTION_WEB_REQUEST, runner->GetBlockedActions(extension)); // Grant activeTab permission. - runner->set_default_bubble_close_action_for_testing( - base::WrapUnique(new ToolbarActionsBarBubbleDelegate::CloseAction( - ToolbarActionsBarBubbleDelegate::CLOSE_EXECUTE))); + runner->accept_bubble_for_testing(true); runner->RunAction(extension, true); base::RunLoop().RunUntilIdle(); EXPECT_TRUE(content::WaitForLoadStop(web_contents)); @@ -1192,9 +1190,7 @@ // a.com), it should still see the request. This is necessary for extensions // with webRequest to work with runtime host permissions. // https://crbug.com/851722. - runner->set_default_bubble_close_action_for_testing( - base::WrapUnique(new ToolbarActionsBarBubbleDelegate::CloseAction( - ToolbarActionsBarBubbleDelegate::CLOSE_EXECUTE))); + runner->accept_bubble_for_testing(true); runner->RunAction(extension, true /* grant tab permissions */); base::RunLoop().RunUntilIdle(); EXPECT_TRUE(content::WaitForLoadStop(web_contents)); @@ -2352,9 +2348,7 @@ // Only records ACCESS_WITHHELD, not ACCESS_DENIED, this is why it matches // BLOCKED_ACTION_NONE. EXPECT_EQ(BLOCKED_ACTION_NONE, runner->GetBlockedActions(extension)); - runner->set_default_bubble_close_action_for_testing( - base::WrapUnique(new ToolbarActionsBarBubbleDelegate::CloseAction( - ToolbarActionsBarBubbleDelegate::CLOSE_EXECUTE))); + runner->accept_bubble_for_testing(true); runner->RunAction(extension, true); base::RunLoop().RunUntilIdle(); EXPECT_TRUE(content::WaitForLoadStop(web_contents));
diff --git a/chrome/browser/extensions/extension_action_runner.cc b/chrome/browser/extensions/extension_action_runner.cc index e03a91d..1c228ad 100644 --- a/chrome/browser/extensions/extension_action_runner.cc +++ b/chrome/browser/extensions/extension_action_runner.cc
@@ -362,19 +362,17 @@ if (!extensions_container) return; - // TODO(crbug.com/1319555): Remove the use of - // ToolbarActionsBarBubbleDelegate::CloseAction, that is still used in tests. - // Previously it was needed to differentiate between callback calls, but now - // callback is only called when the page needs to be refreshed - // (CLOSE_EXECUTE). - if (default_bubble_close_action_for_testing_ && - *default_bubble_close_action_for_testing_ == - ToolbarActionsBarBubbleDelegate::CLOSE_EXECUTE) { - base::ThreadTaskRunnerHandle::Get()->PostTask( - FROM_HERE, base::BindOnce(std::move(callback))); - } else { - ShowBlockedActionDialog(browser, extension->id(), std::move(callback)); + // For testing, simulate the bubble being accepted by directly invoking the + // callback, or rejected by skipping the callback. + if (accept_bubble_for_testing_.has_value()) { + if (*accept_bubble_for_testing_) { + base::ThreadTaskRunnerHandle::Get()->PostTask( + FROM_HERE, base::BindOnce(std::move(callback))); + } + return; } + + ShowBlockedActionDialog(browser, extension->id(), std::move(callback)); } void ExtensionActionRunner::OnBlockedActionBubbleForRunActionClosed(
diff --git a/chrome/browser/extensions/extension_action_runner.h b/chrome/browser/extensions/extension_action_runner.h index 3c1a15e..aec4535d 100644 --- a/chrome/browser/extensions/extension_action_runner.h +++ b/chrome/browser/extensions/extension_action_runner.h
@@ -17,7 +17,6 @@ #include "base/memory/weak_ptr.h" #include "base/scoped_observation.h" #include "chrome/browser/extensions/site_permissions_helper.h" -#include "chrome/browser/ui/toolbar/toolbar_actions_bar_bubble_delegate.h" #include "content/public/browser/web_contents_observer.h" #include "extensions/browser/blocked_action_type.h" #include "extensions/browser/extension_action.h" @@ -28,6 +27,7 @@ #include "extensions/common/mojom/run_location.mojom-shared.h" #include "extensions/common/permissions/permissions_data.h" #include "extensions/common/user_script.h" +#include "third_party/abseil-cpp/absl/types/optional.h" namespace content { class BrowserContext; @@ -95,10 +95,10 @@ int num_page_requests() const { return num_page_requests_; } - void set_default_bubble_close_action_for_testing( - std::unique_ptr<ToolbarActionsBarBubbleDelegate::CloseAction> action) { - default_bubble_close_action_for_testing_ = std::move(action); + void accept_bubble_for_testing(bool accept_bubble) { + accept_bubble_for_testing_ = accept_bubble; } + void set_observer_for_testing(TestObserver* observer) { test_observer_ = observer; } @@ -247,9 +247,9 @@ // actions. bool ignore_active_tab_granted_; - // If non-null, the bubble action to simulate for testing. - std::unique_ptr<ToolbarActionsBarBubbleDelegate::CloseAction> - default_bubble_close_action_for_testing_; + // If true, immediately accept the blocked action dialog by running the + // callback. + absl::optional<bool> accept_bubble_for_testing_; raw_ptr<TestObserver> test_observer_;
diff --git a/chrome/browser/extensions/extension_action_runner_browsertest.cc b/chrome/browser/extensions/extension_action_runner_browsertest.cc index 8bce31e8..f87c821 100644 --- a/chrome/browser/extensions/extension_action_runner_browsertest.cc +++ b/chrome/browser/extensions/extension_action_runner_browsertest.cc
@@ -424,9 +424,7 @@ // Wire up the runner to automatically accept the bubble to prompt for page // refresh. - runner->set_default_bubble_close_action_for_testing( - std::make_unique<ToolbarActionsBarBubbleDelegate::CloseAction>( - ToolbarActionsBarBubbleDelegate::CLOSE_EXECUTE)); + runner->accept_bubble_for_testing(true); content::NavigationEntry* entry = web_contents->GetController().GetLastCommittedEntry(); @@ -454,15 +452,13 @@ web_contents->GetController().Reload(content::ReloadType::NORMAL, true); EXPECT_TRUE(content::WaitForLoadStop(web_contents)); - // The extension should again want to run. Automatically dismiss the bubble - // that pops up prompting for page refresh. + // The extension should again want to run. Don't automatically accept the + // bubble that pops up prompting for page refresh. EXPECT_TRUE(runner->WantsToRun(extension)); EXPECT_EQ("undefined", GetValue(web_contents)); const int next_nav_id = web_contents->GetController().GetLastCommittedEntry()->GetUniqueID(); - runner->set_default_bubble_close_action_for_testing( - std::make_unique<ToolbarActionsBarBubbleDelegate::CloseAction>( - ToolbarActionsBarBubbleDelegate::CLOSE_DISMISS_USER_ACTION)); + runner->accept_bubble_for_testing(false); // Try running the extension. Nothing should happen, because the user // didn't agree to refresh the page. The extension should still want to run. @@ -473,18 +469,6 @@ EXPECT_EQ( next_nav_id, web_contents->GetController().GetLastCommittedEntry()->GetUniqueID()); - - // Repeat with a dismissal from bubble deactivation - same story. - runner->set_default_bubble_close_action_for_testing( - std::make_unique<ToolbarActionsBarBubbleDelegate::CloseAction>( - ToolbarActionsBarBubbleDelegate::CLOSE_DISMISS_DEACTIVATION)); - runner->RunAction(extension, true); - base::RunLoop().RunUntilIdle(); - EXPECT_TRUE(content::WaitForLoadStop(web_contents)); - EXPECT_EQ("undefined", GetValue(web_contents)); - EXPECT_EQ( - next_nav_id, - web_contents->GetController().GetLastCommittedEntry()->GetUniqueID()); } // If we don't withhold permissions, extensions should execute normally. @@ -562,9 +546,7 @@ ExtensionActionRunner::GetForWebContents(web_contents); ASSERT_TRUE(runner); - runner->set_default_bubble_close_action_for_testing( - std::make_unique<ToolbarActionsBarBubbleDelegate::CloseAction>( - ToolbarActionsBarBubbleDelegate::CLOSE_EXECUTE)); + runner->accept_bubble_for_testing(true); content::NavigationEntry* entry = web_contents->GetController().GetLastCommittedEntry();
diff --git a/chrome/browser/history_clusters/java/src/org/chromium/chrome/browser/history_clusters/HistoryClusterView.java b/chrome/browser/history_clusters/java/src/org/chromium/chrome/browser/history_clusters/HistoryClusterView.java index 3fc194f1..c70af5c 100644 --- a/chrome/browser/history_clusters/java/src/org/chromium/chrome/browser/history_clusters/HistoryClusterView.java +++ b/chrome/browser/history_clusters/java/src/org/chromium/chrome/browser/history_clusters/HistoryClusterView.java
@@ -34,4 +34,9 @@ void setIconDrawable(Drawable drawable) { mStartIconView.setImageDrawable(drawable); } + + void setEndButtonDrawable(Drawable drawable) { + mEndButtonView.setVisibility(VISIBLE); + mEndButtonView.setImageDrawable(drawable); + } }
diff --git a/chrome/browser/history_clusters/java/src/org/chromium/chrome/browser/history_clusters/HistoryClustersItemProperties.java b/chrome/browser/history_clusters/java/src/org/chromium/chrome/browser/history_clusters/HistoryClustersItemProperties.java index 7949611..ba91fa2 100644 --- a/chrome/browser/history_clusters/java/src/org/chromium/chrome/browser/history_clusters/HistoryClustersItemProperties.java +++ b/chrome/browser/history_clusters/java/src/org/chromium/chrome/browser/history_clusters/HistoryClustersItemProperties.java
@@ -10,6 +10,7 @@ import androidx.annotation.IntDef; import org.chromium.ui.modelutil.PropertyKey; +import org.chromium.ui.modelutil.PropertyModel.WritableIntPropertyKey; import org.chromium.ui.modelutil.PropertyModel.WritableObjectPropertyKey; import java.lang.annotation.Retention; @@ -18,13 +19,17 @@ class HistoryClustersItemProperties { static final WritableObjectPropertyKey<OnClickListener> CLICK_HANDLER = new WritableObjectPropertyKey<>(); + static final WritableObjectPropertyKey<Drawable> END_BUTTON_DRAWABLE = + new WritableObjectPropertyKey<>(); static final WritableObjectPropertyKey<Drawable> ICON_DRAWABLE = new WritableObjectPropertyKey<>(); static final WritableObjectPropertyKey<String> LABEL = new WritableObjectPropertyKey<>(); static final WritableObjectPropertyKey<String> TITLE = new WritableObjectPropertyKey<>(); static final WritableObjectPropertyKey<String> URL = new WritableObjectPropertyKey<>(); + static final WritableIntPropertyKey VISIBILITY = new WritableIntPropertyKey(); - static final PropertyKey[] ALL_KEYS = {CLICK_HANDLER, ICON_DRAWABLE, LABEL, TITLE, URL}; + static final PropertyKey[] ALL_KEYS = { + CLICK_HANDLER, END_BUTTON_DRAWABLE, ICON_DRAWABLE, LABEL, TITLE, URL, VISIBILITY}; @IntDef({HistoryClustersItemProperties.ItemType.VISIT, ItemType.CLUSTER}) @Retention(RetentionPolicy.SOURCE)
diff --git a/chrome/browser/history_clusters/java/src/org/chromium/chrome/browser/history_clusters/HistoryClustersMediator.java b/chrome/browser/history_clusters/java/src/org/chromium/chrome/browser/history_clusters/HistoryClustersMediator.java index fa304a49..1a7224620 100644 --- a/chrome/browser/history_clusters/java/src/org/chromium/chrome/browser/history_clusters/HistoryClustersMediator.java +++ b/chrome/browser/history_clusters/java/src/org/chromium/chrome/browser/history_clusters/HistoryClustersMediator.java
@@ -10,6 +10,7 @@ import android.graphics.Bitmap; import android.graphics.drawable.Drawable; import android.net.Uri; +import android.view.View; import androidx.annotation.NonNull; import androidx.annotation.Nullable; @@ -36,6 +37,9 @@ import org.chromium.ui.modelutil.PropertyModel; import org.chromium.url.GURL; +import java.util.ArrayList; +import java.util.List; + class HistoryClustersMediator implements SearchDelegate { private final HistoryClustersBridge mHistoryClustersBridge; private final Context mContext; @@ -144,20 +148,20 @@ private void queryComplete(HistoryClustersResult result) { boolean isQueryless = result.getQuery().isEmpty(); for (HistoryCluster cluster : result.getClusters()) { + PropertyModel clusterModel = new PropertyModel(HistoryClustersItemProperties.ALL_KEYS); + clusterModel.set(HistoryClustersItemProperties.LABEL, cluster.getLabel()); + Drawable journeysDrawable = UiUtils.getTintedDrawable( + mContext, R.drawable.ic_journeys, R.color.default_icon_color_tint_list); + clusterModel.set(HistoryClustersItemProperties.ICON_DRAWABLE, journeysDrawable); + ListItem clusterItem = new ListItem(ItemType.CLUSTER, clusterModel); + mModelList.add(clusterItem); if (isQueryless) { - PropertyModel clusterModel = - new PropertyModel(HistoryClustersItemProperties.ALL_KEYS); - clusterModel.set(HistoryClustersItemProperties.LABEL, cluster.getLabel()); clusterModel.set(HistoryClustersItemProperties.CLICK_HANDLER, (v) -> startSearch(cluster.getLabel())); - Drawable journeysDrawable = UiUtils.getTintedDrawable( - mContext, R.drawable.ic_journeys, R.color.default_icon_color_tint_list); - clusterModel.set(HistoryClustersItemProperties.ICON_DRAWABLE, journeysDrawable); - ListItem visitItem = new ListItem(ItemType.CLUSTER, clusterModel); - mModelList.add(visitItem); continue; } + List<ListItem> visitItems = new ArrayList<>(cluster.getVisits().size()); for (ClusterVisit visit : cluster.getVisits()) { PropertyModel visitModel = new PropertyModel(HistoryClustersItemProperties.ALL_KEYS); @@ -177,9 +181,42 @@ }); } - ListItem visitItem = new ListItem(ItemType.VISIT, visitModel); - mModelList.add(visitItem); + visitItems.add(new ListItem(ItemType.VISIT, visitModel)); } + + mModelList.addAll(visitItems); + clusterModel.set(HistoryClustersItemProperties.CLICK_HANDLER, + (v) -> hideCluster(cluster, clusterModel, visitItems)); + Drawable chevron = UiUtils.getTintedDrawable(mContext, + R.drawable.ic_expand_more_black_24dp, R.color.default_icon_color_tint_list); + clusterModel.set(HistoryClustersItemProperties.END_BUTTON_DRAWABLE, chevron); + } + } + + @VisibleForTesting + void hideCluster( + HistoryCluster cluster, PropertyModel clusterModel, List<ListItem> visitItems) { + clusterModel.set(HistoryClustersItemProperties.CLICK_HANDLER, + (v) -> showCluster(cluster, clusterModel, visitItems)); + Drawable chevron = UiUtils.getTintedDrawable(mContext, R.drawable.ic_expand_less_black_24dp, + R.color.default_icon_color_tint_list); + clusterModel.set(HistoryClustersItemProperties.END_BUTTON_DRAWABLE, chevron); + + for (ListItem item : visitItems) { + item.model.set(HistoryClustersItemProperties.VISIBILITY, View.GONE); + } + } + + @VisibleForTesting + void showCluster( + HistoryCluster cluster, PropertyModel clusterModel, List<ListItem> visitItems) { + clusterModel.set(HistoryClustersItemProperties.CLICK_HANDLER, + (v) -> hideCluster(cluster, clusterModel, visitItems)); + Drawable chevron = UiUtils.getTintedDrawable(mContext, R.drawable.ic_expand_more_black_24dp, + R.color.default_icon_color_tint_list); + clusterModel.set(HistoryClustersItemProperties.END_BUTTON_DRAWABLE, chevron); + for (ListItem item : visitItems) { + item.model.set(HistoryClustersItemProperties.VISIBILITY, View.VISIBLE); } }
diff --git a/chrome/browser/history_clusters/java/src/org/chromium/chrome/browser/history_clusters/HistoryClustersViewBinder.java b/chrome/browser/history_clusters/java/src/org/chromium/chrome/browser/history_clusters/HistoryClustersViewBinder.java index d3ef035e..9e504fd 100644 --- a/chrome/browser/history_clusters/java/src/org/chromium/chrome/browser/history_clusters/HistoryClustersViewBinder.java +++ b/chrome/browser/history_clusters/java/src/org/chromium/chrome/browser/history_clusters/HistoryClustersViewBinder.java
@@ -24,6 +24,8 @@ itemView.setTitleText(model.get(HistoryClustersItemProperties.TITLE)); } else if (key == HistoryClustersItemProperties.URL) { itemView.setHostText(model.get(HistoryClustersItemProperties.URL)); + } else if (key == HistoryClustersItemProperties.VISIBILITY) { + itemView.setVisibility(model.get(HistoryClustersItemProperties.VISIBILITY)); } } @@ -56,6 +58,9 @@ HistoryClusterView clusterView = (HistoryClusterView) view; if (key == HistoryClustersItemProperties.CLICK_HANDLER) { clusterView.setOnClickListener(model.get(HistoryClustersItemProperties.CLICK_HANDLER)); + } else if (key == HistoryClustersItemProperties.END_BUTTON_DRAWABLE) { + clusterView.setEndButtonDrawable( + model.get(HistoryClustersItemProperties.END_BUTTON_DRAWABLE)); } else if (key == HistoryClustersItemProperties.ICON_DRAWABLE) { clusterView.setIconDrawable(model.get(HistoryClustersItemProperties.ICON_DRAWABLE)); } else if (key == HistoryClustersItemProperties.LABEL) {
diff --git a/chrome/browser/media/encrypted_media_supported_types_browsertest.cc b/chrome/browser/media/encrypted_media_supported_types_browsertest.cc index 94d29a1..7fb1e99 100644 --- a/chrome/browser/media/encrypted_media_supported_types_browsertest.cc +++ b/chrome/browser/media/encrypted_media_supported_types_browsertest.cc
@@ -817,7 +817,12 @@ audio_mp4_flac_codecs())); EXPECT_ECK_PROPRIETARY(IsSupportedByKeySystem( kExternalClearKey, kVideoMP4MimeType, video_mp4_codecs())); -#if BUILDFLAG(ENABLE_PLATFORM_ENCRYPTED_HEVC) + + // On Windows platforms, HEVC support is detected through the GPU capabilities + // which won't indicate support when running the tests. + // TODO(crbug/1327470): Fix this so that we can inject HEVC support on + // Windows. +#if BUILDFLAG(ENABLE_PLATFORM_HEVC_DECODING) && !BUILDFLAG(IS_WIN) EXPECT_ECK_PROPRIETARY(IsSupportedByKeySystem( kExternalClearKey, kVideoMP4MimeType, video_mp4_hevc_codecs())); #else @@ -933,7 +938,11 @@ // Valid video types. EXPECT_ECK_PROPRIETARY(IsSupportedByKeySystem( kExternalClearKey, kVideoMP4MimeType, video_mp4_codecs())); -#if BUILDFLAG(ENABLE_PLATFORM_ENCRYPTED_HEVC) + // On Windows platforms, HEVC support is detected through the GPU capabilities + // which won't indicate support when running the tests. + // TODO(crbug/1327470): Fix this so that we can inject HEVC support on + // Windows. +#if BUILDFLAG(ENABLE_PLATFORM_HEVC_DECODING) && !BUILDFLAG(IS_WIN) EXPECT_ECK_PROPRIETARY(IsSupportedByKeySystem( kExternalClearKey, kVideoMP4MimeType, video_mp4_hevc_codecs())); #else
diff --git a/chrome/browser/page_load_metrics/observers/omnibox_suggestion_used_page_load_metrics_observer.cc b/chrome/browser/page_load_metrics/observers/omnibox_suggestion_used_page_load_metrics_observer.cc index e7db3aac..a059645 100644 --- a/chrome/browser/page_load_metrics/observers/omnibox_suggestion_used_page_load_metrics_observer.cc +++ b/chrome/browser/page_load_metrics/observers/omnibox_suggestion_used_page_load_metrics_observer.cc
@@ -8,6 +8,7 @@ #include "components/page_load_metrics/browser/page_load_metrics_util.h" #include "content/public/browser/navigation_handle.h" +#include "ui/base/page_transition_types.h" namespace { @@ -54,6 +55,9 @@ OmniboxSuggestionUsedMetricsObserver::OnCommit( content::NavigationHandle* navigation_handle) { transition_type_ = navigation_handle->GetPageTransition(); + if (!ui::PageTransitionIsNewNavigation(transition_type_)) { + return STOP_OBSERVING; + } return (transition_type_ & ui::PAGE_TRANSITION_FROM_ADDRESS_BAR) != 0 ? CONTINUE_OBSERVING : STOP_OBSERVING;
diff --git a/chrome/browser/resources/chromeos/login/screens/oobe/demo_preferences.html b/chrome/browser/resources/chromeos/login/screens/oobe/demo_preferences.html index 4721fbee..f33a2a4 100644 --- a/chrome/browser/resources/chromeos/login/screens/oobe/demo_preferences.html +++ b/chrome/browser/resources/chromeos/login/screens/oobe/demo_preferences.html
@@ -25,17 +25,33 @@ --oobe-dialog-list-item-border: 1px solid rgb(235,235,235); /*#EBEBEB*/ --oobe-a11y-dialog-list-item-border: 1px solid var(--google-grey-200); } + + cr-input { + --cr-input-width: 240px; /*Same width as country selection dropdown.*/ + } + #demoPreferencesDialog .language-selection-entry { border-top: var(--oobe-dialog-list-item-border); min-height: 60px; } - #demoPreferencesDialog .language-selection-entry:last-of-type { - border-bottom: var(--oobe-dialog-list-item-border); - } #demoPreferencesDialog .language-selection-title { color: var(--google-grey-900); font-size: 13px; } + #retailer-id-input-display-text { + color: var(--cros-text-color-secondary); + display: var(--cr-input-error-display, block); + font-size: 10px; + height: var(--cr-form-field-label-height); + line-height: var(--cr-form-field-label-line-height); + margin-inline-start: 55%; + visibility: visible; + white-space: var(--cr-input-error-white-space); + } + :host([is_input_invalid_]) #retailer-id-input-display-text { + color: var(--cros-textfield-label-color-error); + } + </style> <oobe-adaptive-dialog id="demoPreferencesDialog" role="dialog" aria-label$="[[i18nDynamic(locale, 'demoPreferencesScreenTitle')]]"> @@ -55,6 +71,26 @@ on-select-item="onCountrySelected_"> </oobe-i18n-dropdown> </div> + <div class="flex layout center horizontal + justified language-selection-entry"> + <div class="language-selection-title layout vertical + center-justified"> + <span>[[i18nDynamic(locale, 'retailerIdInputLabel')]]</span> + </div> + <cr-input class="language-selection-title layout horizontal + center-justified" + slot="input" id="retailerIdInput" + value="{{retailer_id_input_}}" + on-keydown="onKeydownRetailerIdInput_" + placeholder= + "[[i18nDynamic(locale, 'retailerIdInputPlaceholder')]]" + aria-label= + "[[i18nDynamic(locale, 'retailerIdInputPlaceholder')]]"> + </cr-input> + </div> + <div id="retailer-id-input-display-text"> + [[getRetailerIdInputDisplayText_(locale, is_input_invalid_)]] + </div> </div> <div slot="back-navigation"> <oobe-back-button on-click="onBackClicked_"></oobe-back-button>
diff --git a/chrome/browser/resources/chromeos/login/screens/oobe/demo_preferences.js b/chrome/browser/resources/chromeos/login/screens/oobe/demo_preferences.js index 8516bc5..1bb352a6 100644 --- a/chrome/browser/resources/chromeos/login/screens/oobe/demo_preferences.js +++ b/chrome/browser/resources/chromeos/login/screens/oobe/demo_preferences.js
@@ -58,6 +58,24 @@ type: Boolean, value: false, }, + + is_input_invalid_: { + type: Boolean, + value: false, + reflectToAttribute: true, + }, + + retailer_id_input_: { + type: String, + value: '', + observer: 'retailerIdObserver_', + }, + + retailer_id_input_pattern_: { + type: String, + value: '[a-zA-Z]{3}-[0-9]{4}$', + }, + }; } @@ -191,6 +209,22 @@ } } + getRetailerIdInputDisplayText_() { + if (this.is_input_invalid_) { + return this.i18n('retailerIdInputErrorText'); + } + return this.i18n('retailerIdInputHelpText'); + } + + retailerIdObserver_() { + if (!this.retailer_id_input_) { + this.is_input_invalid_ = false; + } else { + this.is_input_invalid_ = !RegExp(this.retailer_id_input_pattern_) + .test(this.retailer_id_input_); + } + } + /** * Handle country selection. * @param {!CustomEvent<!OobeTypes.DemoCountryDsc>} event @@ -202,6 +236,12 @@ event.detail.value !== this.country_not_selected_id_; } + onKeydownRetailerIdInput_(e) { + if (e.key == 'Enter') { + this.onNextClicked_(); + } + } + /** * Back button click handler. * @private @@ -215,7 +255,7 @@ * @private */ onNextClicked_() { - this.userActed('continue-setup'); + this.userActed(['continue-setup', this.retailer_id_input_]); } }
diff --git a/chrome/browser/resources/history/constants.ts b/chrome/browser/resources/history/constants.ts index 452e036..cf2911399 100644 --- a/chrome/browser/resources/history/constants.ts +++ b/chrome/browser/resources/history/constants.ts
@@ -11,21 +11,6 @@ export const BROWSING_GAP_TIME = 15 * 60 * 1000; /** - * The largest bucket value for UMA histogram, based on entry ID. All entries - * with IDs greater than this will be included in this bucket. - * Keep consistent with the UMA constants on the Android history page - * (see HistoryManager.java). - */ -export const UMA_MAX_BUCKET_VALUE = 1000; - -/** - * The largest bucket value for a UMA histogram that is a subset of above. - * Keep consistent with the UMA constants on the Android history page - * (see HistoryManager.java). - */ -export const UMA_MAX_SUBSET_BUCKET_VALUE = 100; - -/** * Histogram buckets for UMA tracking of which view is being shown to the user. * Keep this in sync with the HistoryPageView enum in histograms.xml. * This enum is append-only.
diff --git a/chrome/browser/resources/history/history_item.ts b/chrome/browser/resources/history/history_item.ts index 3f6eaa6..a8d9740 100644 --- a/chrome/browser/resources/history/history_item.ts +++ b/chrome/browser/resources/history/history_item.ts
@@ -20,7 +20,6 @@ import {afterNextRender, mixinBehaviors, PolymerElement} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js'; import {BrowserServiceImpl} from './browser_service.js'; -import {UMA_MAX_BUCKET_VALUE, UMA_MAX_SUBSET_BUCKET_VALUE} from './constants.js'; import {HistoryEntry} from './externs.js'; import {getTemplate} from './history_item.html.js'; @@ -296,34 +295,6 @@ if (this.searchTerm) { browserService.recordAction('SearchResultClick'); } - - if (this.index === undefined) { - return; - } - - const ageInDays = Math.ceil( - (new Date().getTime() - new Date(this.item.time).getTime()) / - 1000 /* s/ms */ / 60 /* m/s */ / 60 /* h/m */ / 24 /* d/h */); - - browserService.recordHistogram( - 'HistoryPage.ClickPosition', Math.min(this.index, UMA_MAX_BUCKET_VALUE), - UMA_MAX_BUCKET_VALUE); - - browserService.recordHistogram( - 'HistoryPage.ClickAgeInDays', Math.min(ageInDays, UMA_MAX_BUCKET_VALUE), - UMA_MAX_BUCKET_VALUE); - - if (this.index <= UMA_MAX_SUBSET_BUCKET_VALUE) { - browserService.recordHistogram( - 'HistoryPage.ClickPositionSubset', this.index, - UMA_MAX_SUBSET_BUCKET_VALUE); - } - - if (ageInDays <= UMA_MAX_SUBSET_BUCKET_VALUE) { - browserService.recordHistogram( - 'HistoryPage.ClickAgeInDaysSubset', ageInDays, - UMA_MAX_SUBSET_BUCKET_VALUE); - } } onLinkRightClick_() {
diff --git a/chrome/browser/resources/history/history_list.ts b/chrome/browser/resources/history/history_list.ts index 6fb88c0..5acefb8 100644 --- a/chrome/browser/resources/history/history_list.ts +++ b/chrome/browser/resources/history/history_list.ts
@@ -23,7 +23,7 @@ import {PolymerElement} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js'; import {BrowserServiceImpl} from './browser_service.js'; -import {BROWSING_GAP_TIME, UMA_MAX_BUCKET_VALUE, UMA_MAX_SUBSET_BUCKET_VALUE} from './constants.js'; +import {BROWSING_GAP_TIME} from './constants.js'; import {HistoryEntry, HistoryQuery, QueryState} from './externs.js'; import {HistoryItemElement, searchResultsTitle} from './history_item.js'; import {getTemplate} from './history_list.html.js'; @@ -480,16 +480,6 @@ } }, 1); } - - const browserService = BrowserServiceImpl.getInstance(); - browserService.recordHistogram( - 'HistoryPage.RemoveEntryPosition', - Math.min(index, UMA_MAX_BUCKET_VALUE), UMA_MAX_BUCKET_VALUE); - if (index <= UMA_MAX_SUBSET_BUCKET_VALUE) { - browserService.recordHistogram( - 'HistoryPage.RemoveEntryPositionSubset', index, - UMA_MAX_SUBSET_BUCKET_VALUE); - } }); this.closeMenu_(); }
diff --git a/chrome/browser/resources/local_state/BUILD.gn b/chrome/browser/resources/local_state/BUILD.gn deleted file mode 100644 index a8877f5..0000000 --- a/chrome/browser/resources/local_state/BUILD.gn +++ /dev/null
@@ -1,10 +0,0 @@ -# Copyright 2019 The Chromium Authors. All rights reserved. -# Use of this source code is governed by a BSD-style license that can be -# found in the LICENSE file. - -import("//tools/typescript/ts_library.gni") - -ts_library("build") { - in_files = [ "local_state.ts" ] - deps = [ "//ui/webui/resources:library" ] -}
diff --git a/chrome/browser/resources/settings/chromeos/internet_page/cellular_roaming_toggle_button.html b/chrome/browser/resources/settings/chromeos/internet_page/cellular_roaming_toggle_button.html index a9603ba9..c921df916 100644 --- a/chrome/browser/resources/settings/chromeos/internet_page/cellular_roaming_toggle_button.html +++ b/chrome/browser/resources/settings/chromeos/internet_page/cellular_roaming_toggle_button.html
@@ -1,40 +1,25 @@ -<style include="internet-shared iron-flex"> - cr-policy-indicator { - margin-inline-end: 24px; +<style include="settings-shared"> + #cellularRoamingToggle { + display: flex; + justify-content: center; + min-height: var(--cr-section-two-line-min-height); } - #cellularRoamingToggleContainer:hover { + #cellularRoamingToggle:not([disabled]):hover { background-color: var(--cr-hover-background-color); } - #cellularRoamingToggleContainer:active { + #cellularRoamingToggle:not([disabled]):active { background-color: var(--cr-active-background-color); } </style> <template is="dom-if" if="[[showPerNetworkAllowRoamingToggle_(isRoamingAllowedForNetwork_)]]"> - <div id="cellularRoamingToggleContainer" - class="settings-box" - on-click="onCellularRoamingRowClicked_" - actionable$="[[!isPerNetworkToggleDisabled_(disabled, prefs.cros.signed.data_roaming_enabled)]]"> - <div class="flex" id="labelWrapper"> - <div id="cellularRoamingToggleLabel" aria-hidden="true" class="label"> - $i18n{networkAllowDataRoaming} - </div> - <div id="cellularRoamingToggleSubLabel" aria-hidden="true" - class="secondary label"> - [[getRoamingDetails_(managedProperties, prefs.cros.signed.data_roaming_enabled)]] - </div> - </div> - <template is="dom-if" - if="[[isRoamingProhibitedByPolicy_(prefs.cros.signed.data_roaming_enabled)]]"> - <cr-policy-indicator indicator-type="devicePolicy" on-click="doNothing_"> - </cr-policy-indicator> - </template> - <cr-toggle id="control" checked="{{isRoamingAllowedForNetwork_}}" - disabled="[[isPerNetworkToggleDisabled_(disabled, prefs.cros.signed.data_roaming_enabled)]]" - aria-labelledby="cellularRoamingToggleLabel" - aria-describedby="cellularRoamingToggleSubLabel"> - </cr-toggle> - </div> + <network-config-toggle id="cellularRoamingToggle" class="settings-box" policy-on-left + property="[[managedProperties.typeProperties.cellular.allowRoaming]]" + label="$i18n{networkAllowDataRoaming}" + sub-label="[[getRoamingDetails_(managedProperties.typeProperties.cellular.allowRoaming.*, prefs.cros.signed.data_roaming_enabled)]]" + checked="{{isRoamingAllowedForNetwork_}}" + disabled="[[isPerNetworkToggleDisabled_(managedProperties.typeProperties.cellular.allowRoaming.*, disabled, prefs.cros.signed.data_roaming_enabled)]]"> + </network-config-toggle> </template>
diff --git a/chrome/browser/resources/settings/chromeos/internet_page/cellular_roaming_toggle_button.js b/chrome/browser/resources/settings/chromeos/internet_page/cellular_roaming_toggle_button.js index f67eb30..7aa5204d 100644 --- a/chrome/browser/resources/settings/chromeos/internet_page/cellular_roaming_toggle_button.js +++ b/chrome/browser/resources/settings/chromeos/internet_page/cellular_roaming_toggle_button.js
@@ -10,11 +10,12 @@ */ import '../../prefs/prefs.js'; -import './internet_shared_css.js'; -import '//resources/polymer/v3_0/iron-flex-layout/iron-flex-layout-classes.js'; -import '//resources/cr_elements/policy/cr_policy_indicator.m.js'; +import '../../settings_shared_css.js'; import '//resources/cr_elements/cr_toggle/cr_toggle.m.js'; +import '//resources/cr_elements/policy/cr_policy_indicator.m.js'; +import '//resources/polymer/v3_0/iron-flex-layout/iron-flex-layout-classes.js'; +import {CrPolicyNetworkBehaviorMojo} from '//resources/cr_components/chromeos/network/cr_policy_network_behavior_mojo.m.js'; import {MojoInterfaceProvider, MojoInterfaceProviderImpl} from '//resources/cr_components/chromeos/network/mojo_interface_provider.m.js'; import {OncMojo} from '//resources/cr_components/chromeos/network/onc_mojo.m.js'; import {assert} from '//resources/js/assert.m.js'; @@ -38,12 +39,12 @@ disabled: { type: Boolean, value: false, + reflectToAttribute: true, }, /** @type {!chromeos.networkConfig.mojom.ManagedProperties|undefined} */ managedProperties: { type: Object, - observer: 'managedPropertiesChanged_', }, prefs: { @@ -58,9 +59,16 @@ isRoamingAllowedForNetwork_: { type: Boolean, observer: 'isRoamingAllowedForNetworkChanged_', + notify: true, }, }, + observers: [ + `managedPropertiesChanged_( + prefs.cros.signed.data_roaming_enabled.*, + managedProperties.*)`, + ], + /** @private {?chromeos.networkConfig.mojom.CrosNetworkConfigRemote} */ networkConfig_: null, @@ -71,19 +79,11 @@ }, /** - * Returns the text sub-label for testing. - * @return {string} - */ - getSubLabelForTesting() { - return this.$$('#cellularRoamingToggleSubLabel').innerText; - }, - - /** * Returns the child element responsible for controlling cellular roaming. * @return {?CrToggleElement} */ getCellularRoamingToggle() { - return /** @type {?CrToggleElement} */ (this.$$('#control')); + return /** @type {?CrToggleElement} */ (this.$$('#cellularRoamingToggle')); }, /** @private */ @@ -142,6 +142,15 @@ !this.managedProperties.typeProperties.cellular.allowRoaming) { return; } + + // We override the enforcement of the managed property here so that we can + // have the toggle show the policy enforcement icon when the global policy + // prohibits roaming. + if (this.isRoamingProhibitedByPolicy_()) { + this.set( + 'managedProperties.typeProperties.cellular.allowRoaming.policySource', + chromeos.networkConfig.mojom.PolicySource.kDevicePolicyEnforced); + } this.isRoamingAllowedForNetwork_ = this.getRoamingAllowedForNetwork_(); }, @@ -164,7 +173,9 @@ /** @private */ isPerNetworkToggleDisabled_() { - return this.disabled || this.isRoamingProhibitedByPolicy_(); + return this.disabled || this.isRoamingProhibitedByPolicy_() || + CrPolicyNetworkBehaviorMojo.isNetworkPolicyEnforced( + this.managedProperties.typeProperties.cellular.allowRoaming); }, /** @private */
diff --git a/chrome/browser/resources/settings/chromeos/os_settings_search_box/os_search_result_row.js b/chrome/browser/resources/settings/chromeos/os_settings_search_box/os_search_result_row.js index ab061c5..f08caee 100644 --- a/chrome/browser/resources/settings/chromeos/os_settings_search_box/os_search_result_row.js +++ b/chrome/browser/resources/settings/chromeos/os_settings_search_box/os_search_result_row.js
@@ -5,22 +5,20 @@ /** * @fileoverview 'os-search-result-row' is the container for one search result. */ -import '//resources/cr_elements/icons.m.js'; +import 'chrome://resources/cr_elements/icons.m.js'; import '../os_icons.js'; import '../../settings_shared_css.js'; -import {assert, assertNotReached} from '//resources/js/assert.m.js'; -import {FocusRowBehavior} from '//resources/js/cr/ui/focus_row_behavior.m.js'; -import {I18nBehavior} from '//resources/js/i18n_behavior.m.js'; -import {loadTimeData} from '//resources/js/load_time_data.m.js'; -import {afterNextRender, flush, html, Polymer, TemplateInstanceBase, Templatizer} from '//resources/polymer/v3_0/polymer/polymer_bundled.min.js'; import {getInstance as getAnnouncerInstance} from 'chrome://resources/cr_elements/cr_a11y_announcer/cr_a11y_announcer.js'; +import {assert, assertNotReached} from 'chrome://resources/js/assert.m.js'; +import {FocusRowBehavior, FocusRowBehaviorInterface} from 'chrome://resources/js/cr/ui/focus_row_behavior.m.js'; +import {I18nBehavior, I18nBehaviorInterface} from 'chrome://resources/js/i18n_behavior.m.js'; +import {loadTimeData} from 'chrome://resources/js/load_time_data.m.js'; +import {html, mixinBehaviors, PolymerElement} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js'; import {OpenWindowProxyImpl} from '../../open_window_proxy.js'; -import {Route, Router} from '../../router.js'; +import {Router} from '../../router.js'; import {SearchResult} from '../combined_search_handler.js'; -import {routes} from '../os_route.js'; -import {RouteObserverBehavior} from '../route_observer_behavior.js'; /** * This solution uses DP and has the complexity of O(M*N), where M and N are @@ -64,91 +62,105 @@ return result && typeof result.relativeUrl === 'string'; } - /** - * Used to locate matches such that the query text omits a hyphen when the - * matching result text contains a hyphen. - * @type {string} - */ - const DELOCALIZED_HYPHEN = '-'; +/** + * Used to locate matches such that the query text omits a hyphen when the + * matching result text contains a hyphen. + * @type {string} + */ +const DELOCALIZED_HYPHEN = '-'; - /** - * A list of hyphens in all languages that will be ignored during the - * tokenization and comparison of search result text. - * Hyphen characters list is taken from here: http://jkorpela.fi/dashes.html. - * U+002D(-), U+007E(~), U+058A(֊), U+05BE(־), U+1806(᠆), U+2010(‐), - * U+2011(‑), U+2012(‒), U+2013(–), U+2014(—), U+2015(―), U+2053(⁓), - * U+207B(⁻), U+208B(₋), U+2212(−), U+2E3A(⸺ ), U+2E3B(⸻ ), U+301C(〜), - * U+3030(〰), U+30A0(゠), U+FE58(﹘), U+FE63(﹣), U+FF0D(-). - * @type {!Array<string>} - */ - const HYPHENS = [ - '-', '~', '֊', '־', '᠆', '‐', '‑', '‒', '–', '—', '―', '⁓', - '⁻', '₋', '−', '⸺', '⸻', '〜', '〰', '゠', '﹘', '﹣', '-' - ]; +/** + * A list of hyphens in all languages that will be ignored during the + * tokenization and comparison of search result text. + * Hyphen characters list is taken from here: http://jkorpela.fi/dashes.html. + * U+002D(-), U+007E(~), U+058A(֊), U+05BE(־), U+1806(᠆), U+2010(‐), + * U+2011(‑), U+2012(‒), U+2013(–), U+2014(—), U+2015(―), U+2053(⁓), + * U+207B(⁻), U+208B(₋), U+2212(−), U+2E3A(⸺ ), U+2E3B(⸻ ), U+301C(〜), + * U+3030(〰), U+30A0(゠), U+FE58(﹘), U+FE63(﹣), U+FF0D(-). + * @type {!Array<string>} + */ +const HYPHENS = [ + '-', '~', '֊', '־', '᠆', '‐', '‑', '‒', '–', '—', '―', '⁓', + '⁻', '₋', '−', '⸺', '⸻', '〜', '〰', '゠', '﹘', '﹣', '-' +]; - /** - * String form of the regexp expressing hyphen chars. - * @type {string} - */ - const HYPHENS_REGEX_STR = `[${HYPHENS.join('')}]`; +/** + * String form of the regexp expressing hyphen chars. + * @type {string} + */ +const HYPHENS_REGEX_STR = `[${HYPHENS.join('')}]`; - /** - * Regexp expressing hyphen chars. - * @type {!RegExp} - */ - const HYPHENS_REGEX = new RegExp(HYPHENS_REGEX_STR, 'g'); +/** + * Regexp expressing hyphen chars. + * @type {!RegExp} + */ +const HYPHENS_REGEX = new RegExp(HYPHENS_REGEX_STR, 'g'); - /** - * @param {string} sourceString The string to be modified. - * @return {string} The sourceString lowercased with accents in the range - * \u0300 - \u036f removed. - */ - function removeAccents(sourceString) { - return sourceString.toLocaleLowerCase().normalize('NFD').replace( - /[\u0300-\u036f]/g, ''); +/** + * @param {string} sourceString The string to be modified. + * @return {string} The sourceString lowercased with accents in the range + * \u0300 - \u036f removed. + */ +function removeAccents(sourceString) { + return sourceString.toLocaleLowerCase().normalize('NFD').replace( + /[\u0300-\u036f]/g, ''); +} + +/** + * Used to convert the query and result into the same format without hyphens + * and accents so that easy string comparisons can be performed. e.g. + * |sourceString| = 'BRÛLÉE' returns "brulee" + * @param {string} sourceString The string to be normalized. + * @return {string} The sourceString lowercased with accents in the range + * \u0300 - \u036f removed, and with hyphens removed. + */ +function normalizeString(sourceString) { + return removeAccents(sourceString).replace(HYPHENS_REGEX, ''); +} + +/** + * Bolds all strings in |substringsToBold| that occur in |sourceString|, + * regardless of case. + * e.g. |sourceString| = "Turn on Wi-Fi" + * |substringsToBold| = ['o', 'wi-f', 'ur'] + * returns 'T<b>ur</b>n <b>o</b>n <b>Wi-F</b>i' + * @param {string} sourceString The case sensitive string to be bolded. + * @param {?Array<string>} substringsToBold The case-insensitive substrings + * that will be bolded in the |sourceString|, if they are html substrings + * of the |sourceString|. + * @return {string} An innerHTML string of |sourceString| with any + * |substringsToBold| regardless of case bolded. + */ +function boldSubStrings(sourceString, substringsToBold) { + if (!substringsToBold || !substringsToBold.length) { + return sourceString; + } + const subStrRegex = + new RegExp('(\)(' + substringsToBold.join('|') + ')(\)', 'ig'); + return sourceString.replace(subStrRegex, (match) => match.bold()); +} + +/** + * @constructor + * @extends {PolymerElement} + * @implements {I18nBehaviorInterface} + * @implements {FocusRowBehaviorInterface} + */ +const OsSearchResultRowElementBase = + mixinBehaviors([I18nBehavior, FocusRowBehavior], PolymerElement); + +/** @polymer */ +export class OsSearchResultRowElement extends OsSearchResultRowElementBase { + static get is() { + return 'os-search-result-row'; } - /** - * Used to convert the query and result into the same format without hyphens - * and accents so that easy string comparisons can be performed. e.g. - * |sourceString| = 'BRÛLÉE' returns "brulee" - * @param {string} sourceString The string to be normalized. - * @return {string} The sourceString lowercased with accents in the range - * \u0300 - \u036f removed, and with hyphens removed. - */ - function normalizeString(sourceString) { - return removeAccents(sourceString).replace(HYPHENS_REGEX, ''); + static get template() { + return html`{__html_template__}`; } - /** - * Bolds all strings in |substringsToBold| that occur in |sourceString|, - * regardless of case. - * e.g. |sourceString| = "Turn on Wi-Fi" - * |substringsToBold| = ['o', 'wi-f', 'ur'] - * returns 'T<b>ur</b>n <b>o</b>n <b>Wi-F</b>i' - * @param {string} sourceString The case sensitive string to be bolded. - * @param {?Array<string>} substringsToBold The case-insensitive substrings - * that will be bolded in the |sourceString|, if they are html substrings - * of the |sourceString|. - * @return {string} An innerHTML string of |sourceString| with any - * |substringsToBold| regardless of case bolded. - */ - function boldSubStrings(sourceString, substringsToBold) { - if (!substringsToBold || !substringsToBold.length) { - return sourceString; - } - const subStrRegex = - new RegExp('(\)(' + substringsToBold.join('|') + ')(\)', 'ig'); - return sourceString.replace(subStrRegex, (match) => match.bold()); - } - - Polymer({ - _template: html`{__html_template__}`, - is: 'os-search-result-row', - - behaviors: [I18nBehavior, FocusRowBehavior], - - properties: { + static get properties() { + return { /** Whether the search result row is selected. */ selected: { type: Boolean, @@ -177,566 +189,570 @@ type: String, computed: 'computeResultText_(searchResult)', }, - }, + }; + } - /** @private */ - makeA11yAnnouncementIfSelectedAndUnfocused_() { - if (!this.selected || this.lastFocused) { - // Do not alert the user if the result is not selected, or - // the list is focused, defer to aria tags instead. + /** @private */ + makeA11yAnnouncementIfSelectedAndUnfocused_() { + if (!this.selected || this.lastFocused) { + // Do not alert the user if the result is not selected, or + // the list is focused, defer to aria tags instead. + return; + } + + // The selected item is normally not focused when selected, the + // selected search result should be verbalized as it changes. + getAnnouncerInstance().announce(this.ariaLabel); + } + + /** + * @return {string} The result string. + * @private + */ + computeResultText_() { + // The C++ layer stores the text result as an array of 16 bit char codes, + // so it must be converted to a JS String. + return String.fromCharCode.apply(null, this.searchResult.text.data); + } + + /** + * Bolds individual characters in the result text that are characters in the + * search query, regardless of order. Some languages represent words with + * single characters and do not include spaces. In those instances, use + * exact character matching. + * e.g |this.resultText_| = "一二三四" + * |this.searchQuery| = "三一" + * returns "<b>一</b>二<b>三</b>四" + * @return {string} An innerHTML string of |this.resultText_| with any + * character that is in |this.searchQuery| bolded. + * @private + */ + getMatchingIndividualCharsBolded_() { + return boldSubStrings( + /*sourceString=*/ this.resultText_, + /*substringsToBold=*/ this.searchQuery.split('')); + } + + /** + * @param {string} innerHtmlToken A case sensitive segment of the result + * text which may or may not contain hyphens or accents on + * characters, and does not contain blank spaces. + * @param {string} normalizedQuery A lowercased query which does not contain + * hyphens. + * @param {!Array<string>} queryTokens See generateQueryTokens_(). + * @return {string} The innerHtmlToken with <b> tags around segments that + * match queryTokens, but also includes hyphens and accents + * on characters. + * @private + */ + getModifiedInnerHtmlToken_(innerHtmlToken, normalizedQuery, queryTokens) { + // For comparison purposes with query tokens, lowercase the html token to + // be displayed, remove hyphens, and remove accents. The resulting + // |normalizedToken| will not be the displayed token. + const normalizedToken = normalizeString(innerHtmlToken); + if (normalizedQuery.includes(normalizedToken)) { + // Bold the entire html token to be displayed, if the result is a + // substring of the query, regardless of blank spaces that may or + // may not have not been extraneous. + return normalizedToken ? innerHtmlToken.bold() : innerHtmlToken; + } + + // Filters out query tokens that are not substrings of the currently + // processing text token to be displayed. + const queryTokenFilter = (queryToken) => { + return !!queryToken && normalizedToken.includes(queryToken); + }; + + // Maps the queryToken to the segment(s) of the html token that contain + // the queryToken interweaved with any of the hyphens that were + // filtered out during normalization. For example, |innerHtmlToken| = + // 'Wi-Fi-no-blankspsc-WiFi', (i.e. |normalizedToken| = + // 'WiFinoblankspcWiFi') and |queryTokenLowerCaseNoSpecial| = 'wif', the + // resulting mapping would be ['Wi-F', 'WiF']. + const queryTokenToSegment = (queryToken) => { + const regExpStr = queryToken.split('').join(`${HYPHENS_REGEX_STR}*`); + + // Since |queryToken| does not contain accents and |innerHtmlToken| may + // have accents matches must be made without accents on characters. + const innerHtmlTokenNoAccents = removeAccents(innerHtmlToken); + const matchesNoAccents = + innerHtmlTokenNoAccents.match(new RegExp(regExpStr, 'g')); + + // Return matches with original accents restored. + return matchesNoAccents.map( + match => innerHtmlToken.toLocaleLowerCase().substr( + innerHtmlTokenNoAccents.indexOf(match), match.length)); + }; + + // Contains lowercase segments of the innerHtmlToken that may or may not + // contain hyphens and accents on characters. + const matches = + queryTokens.filter(queryTokenFilter).map(queryTokenToSegment).flat(); + + if (!matches.length) { + // No matches, return token to displayed as is. + return innerHtmlToken; + } + + // Get the length of the longest matched substring(s). + const maxStrLen = + matches.reduce((a, b) => a.length > b.length ? a : b).length; + + // Bold the longest substring(s). + const bolded = + matches.filter(sourceString => sourceString.length === maxStrLen); + return boldSubStrings( + /*sourceString=*/ innerHtmlToken, /*substringsToBold=*/ bolded); + } + + /** + * Query tokens are created first by splitting the |normalizedQuery| with + * blankspaces into query segments. Then, each query segment is compared + * to the the normalized result text (result text without hyphens or + * accents). Query tokens are created by finding the longest common + * substring(s) between a query segment and the normalized result text. Each + * query segment is mapped to an array of their query tokens. Finally, the + * longest query token(s) for each query segment are extracted. In the event + * that query segments are more than one character long, query tokens that + * are only one character long are ignored. + * @param {string} normalizedQuery A lowercased query which does not contain + * hyphens or accents. + * @return {!Array<string>} QueryTokens that do not contain + * blankspaces and are substrings of the normalized result text + * @private + */ + generateQueryTokens_(normalizedQuery) { + const normalizedResultText = normalizeString(this.resultText_); + + const segmentToTokenMap = new Map(); + normalizedQuery.split(/\s/).forEach(querySegment => { + const queryTokens = + longestCommonSubstrings(querySegment, normalizedResultText); + if (segmentToTokenMap.has(querySegment)) { + const segmentTokens = + segmentToTokenMap.get(querySegment).concat(queryTokens); + segmentToTokenMap.set(querySegment, segmentTokens); return; } + segmentToTokenMap.set(querySegment, queryTokens); + }); - // The selected item is normally not focused when selected, the - // selected search result should be verbalized as it changes. - getAnnouncerInstance().announce(this.ariaLabel); - }, - - /** - * @return {string} The result string. - * @private - */ - computeResultText_() { - // The C++ layer stores the text result as an array of 16 bit char codes, - // so it must be converted to a JS String. - return String.fromCharCode.apply(null, this.searchResult.text.data); - }, - - /** - * Bolds individual characters in the result text that are characters in the - * search query, regardless of order. Some languages represent words with - * single characters and do not include spaces. In those instances, use - * exact character matching. - * e.g |this.resultText_| = "一二三四" - * |this.searchQuery| = "三一" - * returns "<b>一</b>二<b>三</b>四" - * @return {string} An innerHTML string of |this.resultText_| with any - * character that is in |this.searchQuery| bolded. - * @private - */ - getMatchingIndividualCharsBolded_() { - return boldSubStrings( - /*sourceString=*/this.resultText_, - /*substringsToBold=*/this.searchQuery.split('')); - }, - - /** - * @param {string} innerHtmlToken A case sensitive segment of the result - * text which may or may not contain hyphens or accents on - * characters, and does not contain blank spaces. - * @param {string} normalizedQuery A lowercased query which does not contain - * hyphens. - * @param {!Array<string>} queryTokens See generateQueryTokens_(). - * @return {string} The innerHtmlToken with <b> tags around segments that - * match queryTokens, but also includes hyphens and accents - * on characters. - * @private - */ - getModifiedInnerHtmlToken_(innerHtmlToken, normalizedQuery, queryTokens) { - // For comparison purposes with query tokens, lowercase the html token to - // be displayed, remove hyphens, and remove accents. The resulting - // |normalizedToken| will not be the displayed token. - const normalizedToken = normalizeString(innerHtmlToken); - if (normalizedQuery.includes(normalizedToken)) { - // Bold the entire html token to be displayed, if the result is a - // substring of the query, regardless of blank spaces that may or - // may not have not been extraneous. - return normalizedToken ? innerHtmlToken.bold() : innerHtmlToken; + // For each segment, only return the longest token. For example, in the + // case that |resultText_| is "Search and Assistant", a |querySegment| key + // of "ssistan" will yield a |queryToken| value array containing "ssistan" + // (longest common substring for "Assistant") and "an" (longest common + // substring for "and"). Only the queryToken "ssistan" should be kept + // since it's the longest queryToken. + const getLongestTokensPerSegment = ([querySegment, queryTokens]) => { + // If there are no queryTokens, return none. + // Example: |normalizedResultText| = "search and assistant" + // |normalizedQuery| = "hi goog" + // |querySegment| = "goog" + // |queryTokens| = [] + // Since |querySegment| does not share any substrings with + // |normalizedResultText|, no queryTokens available. + if (!queryTokens.length) { + return []; } - // Filters out query tokens that are not substrings of the currently - // processing text token to be displayed. - const queryTokenFilter = (queryToken) => { - return !!queryToken && normalizedToken.includes(queryToken); - }; + const maxLengthQueryToken = + Math.max(...queryTokens.map(queryToken => queryToken.length)); - // Maps the queryToken to the segment(s) of the html token that contain - // the queryToken interweaved with any of the hyphens that were - // filtered out during normalization. For example, |innerHtmlToken| = - // 'Wi-Fi-no-blankspsc-WiFi', (i.e. |normalizedToken| = - // 'WiFinoblankspcWiFi') and |queryTokenLowerCaseNoSpecial| = 'wif', the - // resulting mapping would be ['Wi-F', 'WiF']. - const queryTokenToSegment = (queryToken) => { - const regExpStr = queryToken.split('').join(`${HYPHENS_REGEX_STR}*`); - - // Since |queryToken| does not contain accents and |innerHtmlToken| may - // have accents matches must be made without accents on characters. - const innerHtmlTokenNoAccents = removeAccents(innerHtmlToken); - const matchesNoAccents = - innerHtmlTokenNoAccents.match(new RegExp(regExpStr, 'g')); - - // Return matches with original accents restored. - return matchesNoAccents.map( - match => innerHtmlToken.toLocaleLowerCase().substr( - innerHtmlTokenNoAccents.indexOf(match), match.length)); - }; - - // Contains lowercase segments of the innerHtmlToken that may or may not - // contain hyphens and accents on characters. - const matches = - queryTokens.filter(queryTokenFilter).map(queryTokenToSegment).flat(); - - if (!matches.length) { - // No matches, return token to displayed as is. - return innerHtmlToken; + // If the |querySegment| is more than one character long and the longest + // queryToken(s) are one character long, discard all queryToken(s). This + // prevents random single characters in in the result text from bolding. + // Example: |normalizedResultText| = "search and assistant" + // |normalizedQuery| = "hi goog" + // |querySegment| = "hi" + // |queryTokens| = ["h", "i"] + // Here, |querySegment| "hi" shares a common substring "h" with + // |normalizedResultText|'s "search" and "i" with + // |normalizedResultText|'s "assistant". Since the queryTokens for + // the length two querySegment are only one character long, discard + // the queryTokens. + if (maxLengthQueryToken === 1 && querySegment.length > 1) { + return []; } - // Get the length of the longest matched substring(s). - const maxStrLen = - matches.reduce((a, b) => a.length > b.length ? a : b).length; + return queryTokens.filter( + queryToken => queryToken.length === maxLengthQueryToken); + }; - // Bold the longest substring(s). - const bolded = - matches.filter(sourceString => sourceString.length === maxStrLen); - return boldSubStrings( - /*sourceString=*/innerHtmlToken, /*substringsToBold=*/bolded); - }, + // A 2D array such that each array contains queryTokens of a querySegment. + // Note that the order of key value pairs is maintained in the + // |segmentToTokenMap| relative to the |normalizedQuery|, and the order + // of the queryTokens within each inner array is also maintained relative + // to the |normalizedQuery|. + const inOrderTokenGroups = + Array.from(segmentToTokenMap).map(getLongestTokensPerSegment); - /** - * Query tokens are created first by splitting the |normalizedQuery| with - * blankspaces into query segments. Then, each query segment is compared - * to the the normalized result text (result text without hyphens or - * accents). Query tokens are created by finding the longest common - * substring(s) between a query segment and the normalized result text. Each - * query segment is mapped to an array of their query tokens. Finally, the - * longest query token(s) for each query segment are extracted. In the event - * that query segments are more than one character long, query tokens that - * are only one character long are ignored. - * @param {string} normalizedQuery A lowercased query which does not contain - * hyphens or accents. - * @return {!Array<string>} QueryTokens that do not contain - * blankspaces and are substrings of the normalized result text - * @private - */ - generateQueryTokens_(normalizedQuery) { - const normalizedResultText = normalizeString(this.resultText_); + // Flatten the 2D |inOrderTokenGroups|, and remove duplicate queryTokens. + // Note that even though joining |inOrderTokens| will always form a + // subsequence of |normalizedQuery|, it will not be a subsequence of + // |normalizedResultText|. + // Example: |this.resultText| = "Touchpad tap-to-click" + // |normalizedResultText| = "touchpad taptoclick" + // |normalizedQuery| = "tap to cli" + // |inOrderTokenGroups| = [['tap']. ['to', 'to']. ['cli']] + // |inOrderTokens| = ['tap', 'to', 'cli'] + // |inOrderTokenGroups| contains an inner array of two 'to's because + // the |querySegment| = 'to' matches with 'touchpad' and 'taptoclick'. + // Duplicate entries are removed in |inOrderTokens| because + // if a |queryToken| is merged to form a compound worded queryToken, it + // should not be used to bold another |resultText| word. In the fictitious + // case that |inOrderTokenGroups| is [['tap']. ['to', 'xy']. ['cli']], + // |inOrderTokens| will be ['tap', 'to', 'xy', 'cli'], and only 'Tap-to' + // will be bolded. This is fine because 'toxy' is a subsequence of a + // |querySegment| the user inputted, and the order of bolding + // will prefer the user's input in these extenuating circumstances. + const inOrderTokens = [...new Set(inOrderTokenGroups.flat())]; + return this.mergeValidTokensToCompounded_(inOrderTokens); + } - const segmentToTokenMap = new Map(); - normalizedQuery.split(/\s/).forEach(querySegment => { - const queryTokens = - longestCommonSubstrings(querySegment, normalizedResultText); - if (segmentToTokenMap.has(querySegment)) { - const segmentTokens = - segmentToTokenMap.get(querySegment).concat(queryTokens); - segmentToTokenMap.set(querySegment, segmentTokens); - return; - } - segmentToTokenMap.set(querySegment, queryTokens); - }); + /** + * Possibly merges costituent queryTokens in |inOrderQueryTokens| to form + * new, longer, valid queryTokens that match with normalized compounded + * words in |this.resultText|. + * @param {!Array<string>} inOrderQueryTokens An array of valid queryTokens + * that do not contain dups. + * @return {!Array<string>} An array of queryTokens of equal or lesser size + * than |inOrderQueryTokens|, each of which do not contain blankspaces + * and are substrings of the normalized result text. + * @private + */ + mergeValidTokensToCompounded_(inOrderQueryTokens) { + // If |this.resultToken| does not contain any hyphens, this will be + // be the same as |inOrderQueryTokens|. + const longestCompoundWordTokens = []; - // For each segment, only return the longest token. For example, in the - // case that |resultText_| is "Search and Assistant", a |querySegment| key - // of "ssistan" will yield a |queryToken| value array containing "ssistan" - // (longest common substring for "Assistant") and "an" (longest common - // substring for "and"). Only the queryToken "ssistan" should be kept - // since it's the longest queryToken. - const getLongestTokensPerSegment = ([querySegment, queryTokens]) => { - // If there are no queryTokens, return none. - // Example: |normalizedResultText| = "search and assistant" - // |normalizedQuery| = "hi goog" - // |querySegment| = "goog" - // |queryTokens| = [] - // Since |querySegment| does not share any substrings with - // |normalizedResultText|, no queryTokens available. - if (!queryTokens.length) { - return []; - } + // Instead of stripping all hyphen as would be the case if the result + // text were normalized, convert all hyphens to |DELOCALIZED_HYPHEN|. This + // string will be compared with compound query tokens to find query tokens + // that are compound substrings longer than the constituent query tokens. + const hyphenatedResultText = + removeAccents(this.resultText_) + .replace(HYPHENS_REGEX, DELOCALIZED_HYPHEN); - const maxLengthQueryToken = - Math.max(...queryTokens.map(queryToken => queryToken.length)); - - // If the |querySegment| is more than one character long and the longest - // queryToken(s) are one character long, discard all queryToken(s). This - // prevents random single characters in in the result text from bolding. - // Example: |normalizedResultText| = "search and assistant" - // |normalizedQuery| = "hi goog" - // |querySegment| = "hi" - // |queryTokens| = ["h", "i"] - // Here, |querySegment| "hi" shares a common substring "h" with - // |normalizedResultText|'s "search" and "i" with - // |normalizedResultText|'s "assistant". Since the queryTokens for - // the length two querySegment are only one character long, discard - // the queryTokens. - if (maxLengthQueryToken === 1 && querySegment.length > 1) { - return []; - } - - return queryTokens.filter( - queryToken => queryToken.length === maxLengthQueryToken); - }; - - // A 2D array such that each array contains queryTokens of a querySegment. - // Note that the order of key value pairs is maintained in the - // |segmentToTokenMap| relative to the |normalizedQuery|, and the order - // of the queryTokens within each inner array is also maintained relative - // to the |normalizedQuery|. - const inOrderTokenGroups = - Array.from(segmentToTokenMap).map(getLongestTokensPerSegment); - - // Flatten the 2D |inOrderTokenGroups|, and remove duplicate queryTokens. - // Note that even though joining |inOrderTokens| will always form a - // subsequence of |normalizedQuery|, it will not be a subsequence of - // |normalizedResultText|. - // Example: |this.resultText| = "Touchpad tap-to-click" - // |normalizedResultText| = "touchpad taptoclick" - // |normalizedQuery| = "tap to cli" - // |inOrderTokenGroups| = [['tap']. ['to', 'to']. ['cli']] - // |inOrderTokens| = ['tap', 'to', 'cli'] - // |inOrderTokenGroups| contains an inner array of two 'to's because - // the |querySegment| = 'to' matches with 'touchpad' and 'taptoclick'. - // Duplicate entries are removed in |inOrderTokens| because - // if a |queryToken| is merged to form a compound worded queryToken, it - // should not be used to bold another |resultText| word. In the fictitious - // case that |inOrderTokenGroups| is [['tap']. ['to', 'xy']. ['cli']], - // |inOrderTokens| will be ['tap', 'to', 'xy', 'cli'], and only 'Tap-to' - // will be bolded. This is fine because 'toxy' is a subsequence of a - // |querySegment| the user inputted, and the order of bolding - // will prefer the user's input in these extenuating circumstances. - const inOrderTokens = [...new Set(inOrderTokenGroups.flat())]; - return this.mergeValidTokensToCompounded_(inOrderTokens); - }, - - /** - * Possibly merges costituent queryTokens in |inOrderQueryTokens| to form - * new, longer, valid queryTokens that match with normalized compounded - * words in |this.resultText|. - * @param {!Array<string>} inOrderQueryTokens An array of valid queryTokens - * that do not contain dups. - * @return {!Array<string>} An array of queryTokens of equal or lesser size - * than |inOrderQueryTokens|, each of which do not contain blankspaces - * and are substrings of the normalized result text. - * @private - */ - mergeValidTokensToCompounded_(inOrderQueryTokens) { - // If |this.resultToken| does not contain any hyphens, this will be - // be the same as |inOrderQueryTokens|. - const longestCompoundWordTokens = []; - - // Instead of stripping all hyphen as would be the case if the result - // text were normalized, convert all hyphens to |DELOCALIZED_HYPHEN|. This - // string will be compared with compound query tokens to find query tokens - // that are compound substrings longer than the constituent query tokens. - const hyphenatedResultText = - removeAccents(this.resultText_) - .replace(HYPHENS_REGEX, DELOCALIZED_HYPHEN); - - // Create the longest combined tokens delimited by |DELOCALIZED_HYPHEN|s - // that are a substrings of |hyphenatedResultText|. Worst case visit each - // token twice. Note that if a token is used to form a compound word, it - // will no longer be present for other words. - // Example: |this.resultText| = "Touchpad tap-to-click" - // |this.searchQuery| = "tap to clic" - // The token "to" will fail to highlight "To" in "Touchpad", and instead - // will be combined with "tap" and "clic" to bold "tap-to-click". - let i = 0; + // Create the longest combined tokens delimited by |DELOCALIZED_HYPHEN|s + // that are a substrings of |hyphenatedResultText|. Worst case visit each + // token twice. Note that if a token is used to form a compound word, it + // will no longer be present for other words. + // Example: |this.resultText| = "Touchpad tap-to-click" + // |this.searchQuery| = "tap to clic" + // The token "to" will fail to highlight "To" in "Touchpad", and instead + // will be combined with "tap" and "clic" to bold "tap-to-click". + let i = 0; + while (i < inOrderQueryTokens.length) { + let prefixToken = inOrderQueryTokens[i]; + i++; while (i < inOrderQueryTokens.length) { - let prefixToken = inOrderQueryTokens[i]; + // Create a compound token with the next token within + // |inOrderQueryTokens|. + const compoundToken = + prefixToken + DELOCALIZED_HYPHEN + inOrderQueryTokens[i]; + + // If the constructed compoundToken from valid queryTokens is not a + // substring of the |hyphenatedResultText|, break from the inner loop + // and set the outer loop to start with the token that broke the + // compounded match. + if (!hyphenatedResultText.includes(compoundToken)) { + break; + } + + prefixToken = compoundToken; i++; - while (i < inOrderQueryTokens.length) { - // Create a compound token with the next token within - // |inOrderQueryTokens|. - const compoundToken = - prefixToken + DELOCALIZED_HYPHEN + inOrderQueryTokens[i]; - - // If the constructed compoundToken from valid queryTokens is not a - // substring of the |hyphenatedResultText|, break from the inner loop - // and set the outer loop to start with the token that broke the - // compounded match. - if (!hyphenatedResultText.includes(compoundToken)) { - break; - } - - prefixToken = compoundToken; - i++; - } - longestCompoundWordTokens.push(prefixToken); } + longestCompoundWordTokens.push(prefixToken); + } - // Normalize the compound tokens that include |DELOCALIZED_HYPHEN|s. - return longestCompoundWordTokens.map(token => normalizeString(token)); - }, + // Normalize the compound tokens that include |DELOCALIZED_HYPHEN|s. + return longestCompoundWordTokens.map(token => normalizeString(token)); + } - /** - * Tokenize the result and query text, and match the tokens even if they - * are out of order. Both the result and query tokens are compared without - * hyphens or accents on characters. Result text is simply tokenized by - * blankspaces. On the other hand, query text is tokenized within - * generateQueryTokens_(). As each result token is processed, it is compared - * with every query token. Bold the segment of the result token that is a - * query token. e.g. Smaller query block: if "wif on" is - * queried, a result text of "Turn on Wi-Fi" should have "on" and "Wi-F" - * bolded. e.g. Larger query block: If "onwifi" is queried, a result text of - * "Turn on Wi-Fi" should have "Wi-Fi" bolded. - * @return {string} Result string with <b> tags around query sub string. - * @private - */ - getTokenizeMatchedBoldTagged_() { - // Lowercase, remove hyphens, and remove accents from the query. - const normalizedQuery = normalizeString(this.searchQuery); + /** + * Tokenize the result and query text, and match the tokens even if they + * are out of order. Both the result and query tokens are compared without + * hyphens or accents on characters. Result text is simply tokenized by + * blankspaces. On the other hand, query text is tokenized within + * generateQueryTokens_(). As each result token is processed, it is compared + * with every query token. Bold the segment of the result token that is a + * query token. e.g. Smaller query block: if "wif on" is + * queried, a result text of "Turn on Wi-Fi" should have "on" and "Wi-F" + * bolded. e.g. Larger query block: If "onwifi" is queried, a result text of + * "Turn on Wi-Fi" should have "Wi-Fi" bolded. + * @return {string} Result string with <b> tags around query sub string. + * @private + */ + getTokenizeMatchedBoldTagged_() { + // Lowercase, remove hyphens, and remove accents from the query. + const normalizedQuery = normalizeString(this.searchQuery); - const queryTokens = this.generateQueryTokens_(normalizedQuery); + const queryTokens = this.generateQueryTokens_(normalizedQuery); - // Get innerHtmlTokens with bold tags around matching segments. - const innerHtmlTokensWithBoldTags = this.resultText_.split(/\s/).map( - innerHtmlToken => this.getModifiedInnerHtmlToken_( - innerHtmlToken, normalizedQuery, queryTokens)); + // Get innerHtmlTokens with bold tags around matching segments. + const innerHtmlTokensWithBoldTags = this.resultText_.split(/\s/).map( + innerHtmlToken => this.getModifiedInnerHtmlToken_( + innerHtmlToken, normalizedQuery, queryTokens)); - // Get all blankspace types. - const blankspaces = this.resultText_.match(/\s/g); + // Get all blankspace types. + const blankspaces = this.resultText_.match(/\s/g); - if (!blankspaces) { - // No blankspaces, return |innterHtmlTokensWithBoldTags| as a string. - return innerHtmlTokensWithBoldTags.join(''); - } + if (!blankspaces) { + // No blankspaces, return |innterHtmlTokensWithBoldTags| as a string. + return innerHtmlTokensWithBoldTags.join(''); + } - // Add blankspaces make to where they were located in the string, and - // form one string to be added to the html. - // e.g |blankspaces| = [' ', '\xa0'] - // |innerHtmlTokensWithBoldTags| = ['a', '<b>b</b>', 'c'] - // returns 'a <b>b</b>&nbps;c' - return innerHtmlTokensWithBoldTags - .map((token, idx) => { - return idx !== blankspaces.length ? token + blankspaces[idx] : - token; - }) - .join(''); - }, + // Add blankspaces make to where they were located in the string, and + // form one string to be added to the html. + // e.g |blankspaces| = [' ', '\xa0'] + // |innerHtmlTokensWithBoldTags| = ['a', '<b>b</b>', 'c'] + // returns 'a <b>b</b>&nbps;c' + return innerHtmlTokensWithBoldTags + .map((token, idx) => { + return idx !== blankspaces.length ? token + blankspaces[idx] : token; + }) + .join(''); + } - /** - * @return {string} The result string with <span> tags around keywords. - * @private - */ - getResultInnerHtml_() { - if (!this.searchResult.wasGeneratedFromTextMatch) { - return this.resultText_; - } + /** + * @return {string} The result string with <span> tags around keywords. + * @private + */ + getResultInnerHtml_() { + if (!this.searchResult.wasGeneratedFromTextMatch) { + return this.resultText_; + } - if (this.resultText_.match(/\s/) || - this.resultText_.toLocaleLowerCase() !== - this.resultText_.toLocaleUpperCase()) { - // If the result text includes blankspaces (as they commonly will in - // languages like Arabic and Hindi), or if the result text includes - // at least one character such that the lowercase is different from - // the uppercase (as they commonly will in languages like English - // and Russian), tokenize the result text by blankspaces, and bold based - // off of matching substrings in the tokens. - return this.getTokenizeMatchedBoldTagged_(); - } + if (this.resultText_.match(/\s/) || + this.resultText_.toLocaleLowerCase() !== + this.resultText_.toLocaleUpperCase()) { + // If the result text includes blankspaces (as they commonly will in + // languages like Arabic and Hindi), or if the result text includes + // at least one character such that the lowercase is different from + // the uppercase (as they commonly will in languages like English + // and Russian), tokenize the result text by blankspaces, and bold based + // off of matching substrings in the tokens. + return this.getTokenizeMatchedBoldTagged_(); + } - // If the result text does not contain blankspaces or characters that - // have upper/lower case differentiation (as they commonly do in languages - // like Chinese and Japanese), bold exact characters that match. - return this.getMatchingIndividualCharsBolded_(); - }, + // If the result text does not contain blankspaces or characters that + // have upper/lower case differentiation (as they commonly do in languages + // like Chinese and Japanese), bold exact characters that match. + return this.getMatchingIndividualCharsBolded_(); + } - /** - * @return {string} Aria label string for ChromeVox to verbalize. - * @private - */ - computeAriaLabel_() { - return this.i18n( - 'searchResultSelected', this.focusRowIndex + 1, this.listLength, - this.computeResultText_()); - }, + /** + * @return {string} Aria label string for ChromeVox to verbalize. + * @private + */ + computeAriaLabel_() { + return this.i18n( + 'searchResultSelected', this.focusRowIndex + 1, this.listLength, + this.computeResultText_()); + } - /** - * Only relevant when the focus-row-control is focus()ed. This keypress - * handler specifies that pressing 'Enter' should cause a route change. - * @param {!KeyboardEvent} e - * @private - */ - onKeyPress_(e) { - if (e.key === 'Enter') { - e.stopPropagation(); - this.onSearchResultSelected(); - } - }, + /** + * Only relevant when the focus-row-control is focus()ed. This keypress + * handler specifies that pressing 'Enter' should cause a route change. + * @param {!KeyboardEvent} e + * @private + */ + onKeyPress_(e) { + if (e.key === 'Enter') { + e.stopPropagation(); + this.onSearchResultSelected(); + } + } - /** @private */ - recordSearchResultMetrics_() { - if (isPersonalizationSearchResult(this.searchResult)) { - chrome.metricsPrivate.recordSparseValue( - 'ChromeOS.Settings.SearchResultPersonalizationSelected', - /** @type {!ash.personalizationApp.mojom.SearchResult} */ - (this.searchResult).searchConceptId); - // Record entry point metric to Personalization Hub through Settings - // search. - chrome.metricsPrivate.recordEnumerationValue( - 'Ash.Personalization.EntryPoint', - loadTimeData.getInteger('settingsSearchEntryPoint'), - loadTimeData.getInteger('entryPointEnumSize')); - return; - } - const SearchResultType = chromeos.settings.mojom.SearchResultType; - + /** @private */ + recordSearchResultMetrics_() { + if (isPersonalizationSearchResult(this.searchResult)) { + chrome.metricsPrivate.recordSparseValue( + 'ChromeOS.Settings.SearchResultPersonalizationSelected', + /** @type {!ash.personalizationApp.mojom.SearchResult} */ + (this.searchResult).searchConceptId); + // Record entry point metric to Personalization Hub through Settings + // search. chrome.metricsPrivate.recordEnumerationValue( - 'ChromeOS.Settings.SearchResultTypeSelected', this.searchResult.type, - SearchResultType.MAX_VALUE); + 'Ash.Personalization.EntryPoint', + loadTimeData.getInteger('settingsSearchEntryPoint'), + loadTimeData.getInteger('entryPointEnumSize')); + return; + } + const SearchResultType = chromeos.settings.mojom.SearchResultType; - const metricArgs = (type, id) => { - switch (type) { - case SearchResultType.kSection: - return { - metricName: 'ChromeOS.Settings.SearchResultSectionSelected', - value: id.section, - }; - case SearchResultType.kSubpage: - return { - metricName: 'ChromeOS.Settings.SearchResultSubpageSelected', - value: id.subpage, - }; - case SearchResultType.kSetting: - return { - metricName: 'ChromeOS.Settings.SearchResultSettingSelected', - value: id.setting, - }; - default: - assertNotReached('Search Result Type not specified.'); - return null; - } - }; + chrome.metricsPrivate.recordEnumerationValue( + 'ChromeOS.Settings.SearchResultTypeSelected', this.searchResult.type, + SearchResultType.MAX_VALUE); - const args = metricArgs(this.searchResult.type, this.searchResult.id); - chrome.metricsPrivate.recordSparseValue(args.metricName, args.value); - }, - - /** - * Navigate to a search result route or launch an external url based on - * the search result's id. - */ - onSearchResultSelected() { - if (isPersonalizationSearchResult(this.searchResult)) { - this.recordSearchResultMetrics_(); - OpenWindowProxyImpl.getInstance().openURL( - loadTimeData.getString('personalizationAppUrl') + - this.searchResult.relativeUrl); - return; - } - assert(this.searchResult.urlPathWithParameters, 'Url path is empty.'); - this.recordSearchResultMetrics_(); - - // |this.searchResult.urlPathWithParameters| separates the path and params - // by a '?' char. - const pathAndOptParams = - this.searchResult.urlPathWithParameters.split('?'); - - // There should be at most 2 items in the array (the path and the params). - assert(pathAndOptParams.length <= 2, 'Path and params format error.'); - - const route = assert( - Router.getInstance().getRouteForPath('/' + pathAndOptParams[0]), - 'Supplied path does not map to an existing route: ' + - pathAndOptParams[0]); - - const paramsString = `search=${encodeURIComponent(this.searchQuery)}` + - (pathAndOptParams.length === 2 ? `&${pathAndOptParams[1]}` : ``); - const params = new URLSearchParams(paramsString); - Router.getInstance().navigateTo(route, params); - this.fire('navigated-to-result-route'); - }, - - /** - * @return {string} The name of the icon to use. - * @private - */ - getResultIcon_() { - if (isPersonalizationSearchResult(this.searchResult)) { - return 'os-settings:paint-brush'; - } - const Icon = chromeos.settings.mojom.SearchResultIcon; - switch (this.searchResult.icon) { - case Icon.kA11y: - return 'os-settings:accessibility'; - case Icon.kAndroid: - return 'os-settings:android'; - case Icon.kAppsGrid: - return 'os-settings:apps'; - case Icon.kAssistant: - return 'os-settings:assistant'; - case Icon.kAuthKey: - return 'os-settings:auth-key'; - case Icon.kAvatar: - return 'cr:person'; - case Icon.kBluetooth: - return 'cr:bluetooth'; - case Icon.kCellular: - return 'os-settings:cellular'; - case Icon.kChrome: - return 'os-settings:chrome'; - case Icon.kClock: - return 'os-settings:access-time'; - case Icon.kDeveloperTags: - return 'os-settings:developer-tags'; - case Icon.kDisplay: - return 'os-settings:display'; - case Icon.kDrive: - return 'os-settings:google-drive'; - case Icon.kEthernet: - return 'os-settings:settings-ethernet'; - case Icon.kFingerprint: - return 'os-settings:fingerprint'; - case Icon.kFolder: - return 'os-settings:folder-outline'; - case Icon.kGlobe: - return 'os-settings:language'; - case Icon.kGooglePlay: - return 'os-settings:google-play'; - case Icon.kHardDrive: - return 'os-settings:hard-drive'; - case Icon.kInstantTethering: - return 'os-settings:magic-tethering'; - case Icon.kKeyboard: - return 'os-settings:keyboard'; - case Icon.kLaptop: - return 'os-settings:laptop-chromebook'; - case Icon.kLock: - return 'os-settings:lock'; - case Icon.kMagnifyingGlass: - return 'cr:search'; - case Icon.kMessages: - return 'os-settings:multidevice-messages'; - case Icon.kMouse: - return 'os-settings:mouse'; - case Icon.kNearbyShare: - return 'os-settings:nearby-share'; - case Icon.kPaintbrush: - return 'os-settings:paint-brush'; - case Icon.kPenguin: - return 'os-settings:crostini-mascot'; - case Icon.kPhone: - return 'os-settings:multidevice-better-together-suite'; - case Icon.kPluginVm: - return 'os-settings:plugin-vm'; - case Icon.kPower: - return 'os-settings:power'; - case Icon.kPrinter: - return 'os-settings:print'; - case Icon.kReset: - return 'os-settings:restore'; - case Icon.kShield: - return 'cr:security'; - case Icon.kStartup: - return 'os-settings:startup'; - case Icon.kStylus: - return 'os-settings:stylus'; - case Icon.kSync: - return 'os-settings:sync'; - case Icon.kWallpaper: - return 'os-settings:wallpaper'; - case Icon.kWifi: - return 'os-settings:network-wifi'; + const metricArgs = (type, id) => { + switch (type) { + case SearchResultType.kSection: + return { + metricName: 'ChromeOS.Settings.SearchResultSectionSelected', + value: id.section, + }; + case SearchResultType.kSubpage: + return { + metricName: 'ChromeOS.Settings.SearchResultSubpageSelected', + value: id.subpage, + }; + case SearchResultType.kSetting: + return { + metricName: 'ChromeOS.Settings.SearchResultSettingSelected', + value: id.setting, + }; default: - return 'os-settings:settings-general'; + assertNotReached('Search Result Type not specified.'); + return null; } - }, + }; - /** - * @return {string} The name of the icon to use. - * @private - */ - getActionTypeIcon_() { - return isPersonalizationSearchResult(this.searchResult) ? - 'cr:open-in-new' : - 'cr:arrow-forward'; - }, - }); + const args = metricArgs(this.searchResult.type, this.searchResult.id); + chrome.metricsPrivate.recordSparseValue(args.metricName, args.value); + } + + /** + * Navigate to a search result route or launch an external url based on + * the search result's id. + */ + onSearchResultSelected() { + if (isPersonalizationSearchResult(this.searchResult)) { + this.recordSearchResultMetrics_(); + OpenWindowProxyImpl.getInstance().openURL( + loadTimeData.getString('personalizationAppUrl') + + this.searchResult.relativeUrl); + return; + } + assert(this.searchResult.urlPathWithParameters, 'Url path is empty.'); + this.recordSearchResultMetrics_(); + + // |this.searchResult.urlPathWithParameters| separates the path and params + // by a '?' char. + const pathAndOptParams = this.searchResult.urlPathWithParameters.split('?'); + + // There should be at most 2 items in the array (the path and the params). + assert(pathAndOptParams.length <= 2, 'Path and params format error.'); + + const route = assert( + Router.getInstance().getRouteForPath('/' + pathAndOptParams[0]), + 'Supplied path does not map to an existing route: ' + + pathAndOptParams[0]); + + const paramsString = `search=${encodeURIComponent(this.searchQuery)}` + + (pathAndOptParams.length === 2 ? `&${pathAndOptParams[1]}` : ``); + const params = new URLSearchParams(paramsString); + Router.getInstance().navigateTo(route, params); + + const event = new CustomEvent( + 'navigated-to-result-route', {bubbles: true, composed: true}); + this.dispatchEvent(event); + } + + /** + * @return {string} The name of the icon to use. + * @private + */ + getResultIcon_() { + if (isPersonalizationSearchResult(this.searchResult)) { + return 'os-settings:paint-brush'; + } + const Icon = chromeos.settings.mojom.SearchResultIcon; + switch (this.searchResult.icon) { + case Icon.kA11y: + return 'os-settings:accessibility'; + case Icon.kAndroid: + return 'os-settings:android'; + case Icon.kAppsGrid: + return 'os-settings:apps'; + case Icon.kAssistant: + return 'os-settings:assistant'; + case Icon.kAuthKey: + return 'os-settings:auth-key'; + case Icon.kAvatar: + return 'cr:person'; + case Icon.kBluetooth: + return 'cr:bluetooth'; + case Icon.kCellular: + return 'os-settings:cellular'; + case Icon.kChrome: + return 'os-settings:chrome'; + case Icon.kClock: + return 'os-settings:access-time'; + case Icon.kDeveloperTags: + return 'os-settings:developer-tags'; + case Icon.kDisplay: + return 'os-settings:display'; + case Icon.kDrive: + return 'os-settings:google-drive'; + case Icon.kEthernet: + return 'os-settings:settings-ethernet'; + case Icon.kFingerprint: + return 'os-settings:fingerprint'; + case Icon.kFolder: + return 'os-settings:folder-outline'; + case Icon.kGlobe: + return 'os-settings:language'; + case Icon.kGooglePlay: + return 'os-settings:google-play'; + case Icon.kHardDrive: + return 'os-settings:hard-drive'; + case Icon.kInstantTethering: + return 'os-settings:magic-tethering'; + case Icon.kKeyboard: + return 'os-settings:keyboard'; + case Icon.kLaptop: + return 'os-settings:laptop-chromebook'; + case Icon.kLock: + return 'os-settings:lock'; + case Icon.kMagnifyingGlass: + return 'cr:search'; + case Icon.kMessages: + return 'os-settings:multidevice-messages'; + case Icon.kMouse: + return 'os-settings:mouse'; + case Icon.kNearbyShare: + return 'os-settings:nearby-share'; + case Icon.kPaintbrush: + return 'os-settings:paint-brush'; + case Icon.kPenguin: + return 'os-settings:crostini-mascot'; + case Icon.kPhone: + return 'os-settings:multidevice-better-together-suite'; + case Icon.kPluginVm: + return 'os-settings:plugin-vm'; + case Icon.kPower: + return 'os-settings:power'; + case Icon.kPrinter: + return 'os-settings:print'; + case Icon.kReset: + return 'os-settings:restore'; + case Icon.kShield: + return 'cr:security'; + case Icon.kStartup: + return 'os-settings:startup'; + case Icon.kStylus: + return 'os-settings:stylus'; + case Icon.kSync: + return 'os-settings:sync'; + case Icon.kWallpaper: + return 'os-settings:wallpaper'; + case Icon.kWifi: + return 'os-settings:network-wifi'; + default: + return 'os-settings:settings-general'; + } + } + + /** + * @return {string} The name of the icon to use. + * @private + */ + getActionTypeIcon_() { + return isPersonalizationSearchResult(this.searchResult) ? + 'cr:open-in-new' : + 'cr:arrow-forward'; + } +} + +customElements.define(OsSearchResultRowElement.is, OsSearchResultRowElement);
diff --git a/chrome/browser/resources/settings/chromeos/os_settings_search_box/os_settings_search_box.js b/chrome/browser/resources/settings/chromeos/os_settings_search_box/os_settings_search_box.js index 7e6f97c..76961aac 100644 --- a/chrome/browser/resources/settings/chromeos/os_settings_search_box/os_settings_search_box.js +++ b/chrome/browser/resources/settings/chromeos/os_settings_search_box/os_settings_search_box.js
@@ -6,27 +6,27 @@ * @fileoverview 'os-settings-search-box' is the container for the search input * and settings search results. */ -import '//resources/cr_elements/cr_toolbar/cr_toolbar_search_field.js'; -import '//resources/js/cr/ui/focus_row.m.js'; -import '//resources/polymer/v3_0/iron-dropdown/iron-dropdown.js'; -import '//resources/polymer/v3_0/iron-list/iron-list.js'; -import './os_search_result_row.js'; +import 'chrome://resources/cr_elements/cr_toolbar/cr_toolbar_search_field.js'; +import 'chrome://resources/js/cr/ui/focus_row.m.js'; +import 'chrome://resources/polymer/v3_0/iron-dropdown/iron-dropdown.js'; +import 'chrome://resources/polymer/v3_0/iron-list/iron-list.js'; import '../../settings_shared_css.js'; -import {assert, assertNotReached} from '//resources/js/assert.m.js'; -import {I18nBehavior} from '//resources/js/i18n_behavior.m.js'; -import {loadTimeData} from '//resources/js/load_time_data.m.js'; -import {afterNextRender, flush, html, Polymer, TemplateInstanceBase, Templatizer} from '//resources/polymer/v3_0/polymer/polymer_bundled.min.js'; import {getInstance as getAnnouncerInstance} from 'chrome://resources/cr_elements/cr_a11y_announcer/cr_a11y_announcer.js'; +import {assert} from 'chrome://resources/js/assert.m.js'; +import {I18nBehavior, I18nBehaviorInterface} from 'chrome://resources/js/i18n_behavior.m.js'; +import {loadTimeData} from 'chrome://resources/js/load_time_data.m.js'; +import {afterNextRender, html, mixinBehaviors, PolymerElement} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js'; -import {Route, Router} from '../../router.js'; +import {Router} from '../../router.js'; import {combinedSearch, SearchResult} from '../combined_search_handler.js'; import {recordSearch} from '../metrics_recorder.js'; import {routes} from '../os_route.js'; import {getPersonalizationSearchHandler} from '../personalization_search_handler.js'; -import {RouteObserverBehavior} from '../route_observer_behavior.js'; import {getSettingsSearchHandler} from '../settings_search_handler.js'; +import {OsSearchResultRowElement} from './os_search_result_row.js'; + const MAX_NUM_SEARCH_RESULTS = 5; const SEARCH_REQUEST_METRIC_NAME = 'ChromeOS.Settings.SearchRequests'; @@ -55,131 +55,148 @@ CLICKED_OUT_OF_SEARCH_BOX: 1, }; - /** - * @implements {ash.personalizationApp.mojom.SearchResultObserverInterface} - * @implements {chromeos.settings.mojom.SearchResultObserverInterface} + * @constructor + * @extends {PolymerElement} + * @implements {I18nBehaviorInterface} */ -Polymer({ - _template: html`{__html_template__}`, - is: 'os-settings-search-box', +const OsSettingsSearchBoxElementBase = + mixinBehaviors([I18nBehavior], PolymerElement); - behaviors: [I18nBehavior], +/** @polymer */ +class OsSettingsSearchBoxElement extends OsSettingsSearchBoxElementBase { + static get is() { + return 'os-settings-search-box'; + } - /** - * Receiver for observing settings search result availability changes. - * @private {?chromeos.settings.mojom.SearchResultsObserverReceiver} - */ - settingsSearchResultObserverReceiver_: null, + static get template() { + return html`{__html_template__}`; + } - /** - * Receiver for observing personalization search result changes. - * @private {?ash.personalizationApp.mojom.SearchResultsObserverReceiver} - */ - personalizationSearchResultObserverReceiver_: null, + static get properties() { + return { + // True when the toolbar is displaying in narrow mode. + // TODO(hsuregan): Change narrow to isNarrow here and associated elements. + narrow: { + type: Boolean, + reflectToAttribute: true, + }, - properties: { - // True when the toolbar is displaying in narrow mode. - // TODO(hsuregan): Change narrow to isNarrow here and associated elements. - narrow: { - type: Boolean, - reflectToAttribute: true, - }, + // Controls whether the search field is shown. + showingSearch: { + type: Boolean, + value: false, + notify: true, + reflectToAttribute: true, + }, - // Controls whether the search field is shown. - showingSearch: { - type: Boolean, - value: false, - notify: true, - reflectToAttribute: true, - }, + hasSearchQuery: { + type: Boolean, + value: false, + reflectToAttribute: true, + }, - hasSearchQuery: { - type: Boolean, - value: false, - reflectToAttribute: true, - }, + // Value is proxied through to cr-toolbar-search-field. When true, + // the search field will show a processing spinner. + spinnerActive: Boolean, - // Value is proxied through to cr-toolbar-search-field. When true, - // the search field will show a processing spinner. - spinnerActive: Boolean, + /** + * The currently selected search result associated with an + * <os-search-result-row>. This property is bound to the <iron-list>. Note + * that when an item is selected, its associated <os-search-result-row> + * is not focus()ed at the same time unless it is explicitly + * clicked/tapped. + * @private {!SearchResult} + */ + selectedItem_: { + type: Object, + }, + + /** + * Prevent user deselection by tracking last item selected. This item must + * only be assigned to an item within |this.$.searchResultList|, and not + * directly to |this.selectedItem_| or an item within + * |this.searchResults_|. + * @private {!SearchResult} + */ + lastSelectedItem_: { + type: Object, + }, + + /** + * Passed into <iron-list>. Exactly one result is the selectedItem_. + * @private {!Array<!SearchResult>} + */ + searchResults_: { + type: Array, + value: [], + observer: 'onSearchResultsChanged_', + }, + + /** @private */ + shouldShowDropdown_: { + type: Boolean, + value: false, + reflectToAttribute: true, + }, + + /** @private */ + searchResultsExist_: { + type: Boolean, + value: false, + computed: 'computeSearchResultsExist_(searchResults_)', + }, + + /** + * Used by FocusRowBehavior to track the last focused element inside a + * <os-search-result-row> with the attribute 'focus-row-control'. + * @private {HTMLElement} + */ + lastFocused_: Object, + + /** + * Used by FocusRowBehavior to track if the list has been blurred. + * @private + */ + listBlurred_: Boolean, + + /** + * The number of searches performed in one lifecycle of the search box. + * @private + */ + searchRequestCount_: { + type: Number, + value: 0, + }, + }; + } + + constructor() { + super(); + + /** @private {?chromeos.settings.mojom.SearchResultsObserverReceiver} */ + this.settingsSearchResultObserverReceiver_ = null; /** - * The currently selected search result associated with an - * <os-search-result-row>. This property is bound to the <iron-list>. Note - * that when an item is selected, its associated <os-search-result-row> - * is not focus()ed at the same time unless it is explicitly clicked/tapped. - * @private {!SearchResult} + * @private {?ash.personalizationApp.mojom.SearchResultsObserverReceiver} */ - selectedItem_: { - type: Object, - }, + this.personalizationSearchResultObserverReceiver_ = null; + } - /** - * Prevent user deselection by tracking last item selected. This item must - * only be assigned to an item within |this.$.searchResultList|, and not - * directly to |this.selectedItem_| or an item within |this.searchResults_|. - * @private {!SearchResult} - */ - lastSelectedItem_: { - type: Object, - }, + ready() { + super.ready(); - /** - * Passed into <iron-list>. Exactly one result is the selectedItem_. - * @private {!Array<!SearchResult>} - */ - searchResults_: { - type: Array, - value: [], - observer: 'onSearchResultsChanged_', - }, - - /** @private */ - shouldShowDropdown_: { - type: Boolean, - value: false, - reflectToAttribute: true, - }, - - /** @private */ - searchResultsExist_: { - type: Boolean, - value: false, - computed: 'computeSearchResultsExist_(searchResults_)', - }, - - /** - * Used by FocusRowBehavior to track the last focused element inside a - * <os-search-result-row> with the attribute 'focus-row-control'. - * @private {HTMLElement} - */ - lastFocused_: Object, - - /** - * Used by FocusRowBehavior to track if the list has been blurred. - * @private - */ - listBlurred_: Boolean, - - /** - * The number of searches performed in one lifecycle of the search box. - * @private - */ - searchRequestCount_: { - type: Number, - value: 0, - }, - }, - - listeners: { - 'blur': 'onBlur_', - 'keydown': 'onKeyDown_', - 'search-changed': 'onSearchChanged_', - }, + this.addEventListener('blur', this.onBlur_); + this.addEventListener( + 'keydown', + (event) => this.onKeyDown_(/** @type {!KeyboardEvent} */ (event))); + this.addEventListener('search-changed', this.onSearchChanged_); + } /** @override */ - attached() { + connectedCallback() { + super.connectedCallback(); + const toolbarSearchField = this.$.search; const searchInput = toolbarSearchField.getSearchInput(); if (Router.getInstance().currentRoute === routes.BASIC) { @@ -232,10 +249,12 @@ getSettingsSearchHandler().observe( this.settingsSearchResultObserverReceiver_.$ .bindNewPipeAndPassRemote()); - }, + } /** @override */ - detached() { + disconnectedCallback() { + super.disconnectedCallback(); + if (loadTimeData.getBoolean('isPersonalizationHubEnabled')) { assert( this.personalizationSearchResultObserverReceiver_ !== null, @@ -243,7 +262,7 @@ this.personalizationSearchResultObserverReceiver_.$.close(); } this.settingsSearchResultObserverReceiver_.$.close(); - }, + } /** * Overrides chromeos.settings.mojom.SearchResultsObserverInterface @@ -251,7 +270,7 @@ */ onSearchResultsChanged() { this.fetchSearchResults_(); - }, + } /** * @return {!OsSearchResultRowElement} The <os-search-result-row> that is @@ -264,7 +283,7 @@ this.$.searchResultList.querySelector( 'os-search-result-row[selected]')), 'No OsSearchResultRow is selected.'); - }, + } /** * @return {string} The current input string. @@ -272,7 +291,7 @@ */ getCurrentQuery_() { return this.$.search.getSearchInput().value; - }, + } /** * @return {boolean} @@ -280,13 +299,13 @@ */ computeSearchResultsExist_() { return this.searchResults_.length !== 0; - }, + } /** @private */ onSearchChanged_() { this.hasSearchQuery = !!this.getCurrentQuery_(); this.fetchSearchResults_(); - }, + } /** @private */ fetchSearchResults_() { @@ -311,7 +330,9 @@ chrome.metricsPrivate.recordTime( 'ChromeOS.Settings.SearchLatency', latencyMs); this.onSearchResultsReceived_(query, response.results); - this.fire('search-results-fetched'); + const event = new CustomEvent( + 'search-results-fetched', {bubbles: true, composed: true}); + this.dispatchEvent(event); }); ++this.searchRequestCount_; @@ -321,7 +342,7 @@ Object.keys(OsSettingSearchRequestTypes).length); chrome.metricsPrivate.recordSparseValue( 'ChromeOS.Settings.NumCharsOfQueries', query.length); - }, + } /** * Updates search results UI when settings search results are fetched. @@ -351,7 +372,7 @@ this.lastFocused_ = null; this.searchResults_ = results; recordSearch(); - }, + } /** @private */ onNavigatedToResultRowRoute_() { @@ -368,7 +389,7 @@ USER_ACTION_ON_SEARCH_RESULTS_SHOWN_METRIC_NAME, OsSettingSearchBoxUserAction.SEARCH_RESULT_CLICKED, Object.keys(OsSettingSearchBoxUserAction).length); - }, + } /** * @param {!Event} e @@ -392,7 +413,7 @@ // Close the dropdown because a region outside the search box was clicked. this.shouldShowDropdown_ = false; - }, + } /** @private */ onSearchInputFocused_() { @@ -405,7 +426,7 @@ } this.fetchSearchResults_(); - }, + } /* @private */ onSearchInputMousedown_() { @@ -421,7 +442,7 @@ const searchInput = this.$.search.getSearchInput(); afterNextRender(this, () => searchInput.select()); } - }, + } /** * @param {!SearchResult} item The search result item in searchResults_. @@ -431,7 +452,7 @@ isItemSelected_(item) { return this.searchResults_.indexOf(item) === this.searchResults_.indexOf(this.selectedItem_); - }, + } /** * @return {number} Length of the search results array. @@ -439,7 +460,7 @@ */ getListLength_() { return this.searchResults_.length; - }, + } /** * Returns the correct tab index since <iron-list>'s default tabIndex property @@ -452,7 +473,7 @@ */ getRowTabIndex_(item) { return this.isItemSelected_(item) && this.shouldShowDropdown_ ? 0 : -1; - }, + } /** @private */ onSearchResultsChanged_() { @@ -473,7 +494,7 @@ getAnnouncerInstance().announce(this.i18n('searchNoResults')); return; } - }, + } /** * |selectedItem| is not changed by the time this is called. The value that @@ -494,7 +515,7 @@ this.$.searchResultList.selectItem(this.lastSelectedItem_); } this.lastSelectedItem_ = this.$.searchResultList.selectedItem; - }, + } /** * @param {string} key The string associated with a key. @@ -521,7 +542,7 @@ // The newly selected item might not be visible because the list needs // to be scrolled. So scroll the dropdown if necessary. this.getSelectedOsSearchResultRow_().scrollIntoViewIfNeeded(); - }, + } /** * Keydown handler to specify how enter-key, arrow-up key, and arrow-down-key @@ -550,7 +571,7 @@ this.selectRowViaKeys_(e.key); return; } - }, + } /* @private */ onSearchIconClicked_() { @@ -558,5 +579,8 @@ if (this.getCurrentQuery_()) { this.shouldShowDropdown_ = true; } - }, -}); + } +} + +customElements.define( + OsSettingsSearchBoxElement.is, OsSettingsSearchBoxElement);
diff --git a/chrome/browser/resources/settings/chromeos/os_settings_ui/os_settings_ui.js b/chrome/browser/resources/settings/chromeos/os_settings_ui/os_settings_ui.js index 53ce5f2..57d1fcd49 100644 --- a/chrome/browser/resources/settings/chromeos/os_settings_ui/os_settings_ui.js +++ b/chrome/browser/resources/settings/chromeos/os_settings_ui/os_settings_ui.js
@@ -10,11 +10,11 @@ * * <settings-ui prefs="{{prefs}}"></settings-ui> */ -import '//resources/polymer/v3_0/iron-icon/iron-icon.js'; -import '//resources/cr_elements/cr_drawer/cr_drawer.js'; -import '//resources/cr_elements/cr_page_host_style.css.js'; -import '//resources/cr_elements/icons.m.js'; -import '//resources/cr_elements/shared_vars_css.m.js'; +import 'chrome://resources/polymer/v3_0/iron-icon/iron-icon.js'; +import 'chrome://resources/cr_elements/cr_drawer/cr_drawer.js'; +import 'chrome://resources/cr_elements/cr_page_host_style.css.js'; +import 'chrome://resources/cr_elements/icons.m.js'; +import 'chrome://resources/cr_elements/shared_vars_css.m.js'; import '../os_settings_menu/os_settings_menu.js'; import '../os_settings_main/os_settings_main.js'; import '../os_toolbar/os_toolbar.js'; @@ -22,22 +22,19 @@ import '../../prefs/prefs.js'; import '../../settings_vars.css.js'; -import {CrContainerShadowBehavior} from '//resources/cr_elements/cr_container_shadow_behavior.m.js'; -import {CrToolbarSearchFieldElement} from '//resources/cr_elements/cr_toolbar/cr_toolbar_search_field.js'; -import {FindShortcutBehavior} from '//resources/cr_elements/find_shortcut_behavior.js'; -import {CrPolicyIndicatorType} from '//resources/cr_elements/policy/cr_policy_indicator_behavior.m.js'; -import {assert, assertNotReached} from '//resources/js/assert.m.js'; -import {HTMLEscape, listenOnce} from '//resources/js/util.m.js'; -import {afterNextRender, flush, html, Polymer, TemplateInstanceBase, Templatizer} from '//resources/polymer/v3_0/polymer/polymer_bundled.min.js'; +import {CrContainerShadowBehavior, CrContainerShadowBehaviorInterface} from 'chrome://resources/cr_elements/cr_container_shadow_behavior.m.js'; +import {FindShortcutBehavior, FindShortcutBehaviorInterface} from 'chrome://resources/cr_elements/find_shortcut_behavior.js'; +import {assert} from 'chrome://resources/js/assert.m.js'; +import {listenOnce} from 'chrome://resources/js/util.m.js'; +import {Debouncer, html, microTask, mixinBehaviors, PolymerElement, timeOut} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js'; import {loadTimeData} from '../../i18n_setup.js'; import {Route, Router} from '../../router.js'; -import {GlobalScrollTargetBehavior, setGlobalScrollTarget} from '../global_scroll_target_behavior.js'; +import {setGlobalScrollTarget} from '../global_scroll_target_behavior.js'; import {recordClick, recordNavigation, recordPageBlur, recordPageFocus, recordSettingChange} from '../metrics_recorder.js'; import {OSPageVisibility, osPageVisibility} from '../os_page_visibility.js'; -import {routes} from '../os_route.js'; import {PrefToSettingMetricConverter} from '../pref_to_setting_metric_converter.js'; -import {RouteObserverBehavior} from '../route_observer_behavior.js'; +import {RouteObserverBehavior, RouteObserverBehaviorInterface} from '../route_observer_behavior.js'; /** Global defined when the main Settings script runs. */ let defaultResourceLoaded = true; // eslint-disable-line prefer-const @@ -46,128 +43,141 @@ !window.settings || !defaultResourceLoaded, 'settings_ui.js run twice. You probably have an invalid import.'); +/** + * @constructor + * @extends {PolymerElement} + * @implements {CrContainerShadowBehaviorInterface} + * @implements {FindShortcutBehaviorInterface} + */ +const OsSettingsUiElementBase = mixinBehaviors( + [ + CrContainerShadowBehavior, FindShortcutBehavior, + // Calls currentRouteChanged() in attached(),so ensure other behaviors + // run their attached() first. + RouteObserverBehavior + ], + PolymerElement); -Polymer({ - _template: html`{__html_template__}`, - is: 'os-settings-ui', +/** @polymer */ +class OsSettingsUiElement extends OsSettingsUiElementBase { + static get is() { + return 'os-settings-ui'; + } - behaviors: [ - CrContainerShadowBehavior, - FindShortcutBehavior, - // Calls currentRouteChanged() in attached(), so ensure other behaviors - // run their attached() first. - RouteObserverBehavior, - ], + static get template() { + return html`{__html_template__}`; + } - properties: { - /** - * Preferences state. - */ - prefs: Object, + static get properties() { + return { + /** + * Preferences state. + */ + prefs: Object, - /** @private */ - advancedOpenedInMain_: { - type: Boolean, - value: false, - notify: true, - observer: 'onAdvancedOpenedInMainChanged_', - }, + /** @private */ + advancedOpenedInMain_: { + type: Boolean, + value: false, + notify: true, + observer: 'onAdvancedOpenedInMainChanged_', + }, - /** @private */ - advancedOpenedInMenu_: { - type: Boolean, - value: false, - notify: true, - observer: 'onAdvancedOpenedInMenuChanged_', - }, + /** @private */ + advancedOpenedInMenu_: { + type: Boolean, + value: false, + notify: true, + observer: 'onAdvancedOpenedInMenuChanged_', + }, - /** @private {boolean} */ - toolbarSpinnerActive_: { - type: Boolean, - value: false, - }, + /** @private {boolean} */ + toolbarSpinnerActive_: { + type: Boolean, + value: false, + }, - /** - * Whether settings is in the narrow state (side nav hidden). Controlled - * by a binding in the os-toolbar element. - */ - isNarrow: { - type: Boolean, - value: false, - readonly: true, - notify: true, - observer: 'onNarrowChanged_', - }, + /** + * Whether settings is in the narrow state (side nav hidden). Controlled + * by a binding in the os-toolbar element. + */ + isNarrow: { + type: Boolean, + value: false, + readonly: true, + notify: true, + observer: 'onNarrowChanged_', + }, - /** - * @private {!OSPageVisibility} - */ - pageVisibility_: {type: Object, value: osPageVisibility}, + /** + * @private {!OSPageVisibility} + */ + pageVisibility_: {type: Object, value: osPageVisibility}, - /** @private */ - havePlayStoreApp_: Boolean, + /** @private */ + havePlayStoreApp_: Boolean, - /** @private */ - showAndroidApps_: Boolean, + /** @private */ + showAndroidApps_: Boolean, - /** @private */ - showArcvmManageUsb_: Boolean, + /** @private */ + showArcvmManageUsb_: Boolean, - /** @private */ - showCrostini_: Boolean, + /** @private */ + showCrostini_: Boolean, - /** @private */ - showToolbar_: Boolean, + /** @private */ + showToolbar_: Boolean, - /** @private */ - showNavMenu_: Boolean, + /** @private */ + showNavMenu_: Boolean, - /** @private */ - showPluginVm_: Boolean, + /** @private */ + showPluginVm_: Boolean, - /** @private */ - showReset_: Boolean, + /** @private */ + showReset_: Boolean, - /** @private */ - showStartup_: Boolean, + /** @private */ + showStartup_: Boolean, - /** @private */ - showKerberosSection_: Boolean, + /** @private */ + showKerberosSection_: Boolean, - /** - * The threshold at which the toolbar will change from normal to narrow - * mode, in px. - * @private {boolean} - */ - narrowThreshold_: { - type: Number, - value: 980, - }, - }, - - listeners: { - 'refresh-pref': 'onRefreshPref_', - 'user-action-setting-change': 'onSettingChange_', - }, - - /** - * The route of the selected element in os-settings-menu. Stored here to - * defer navigation until drawer animation completes. - * @private {Route} - */ - activeRoute_: null, - - /** - * Converts prefs to settings metrics to help record pref changes. - * @private {PrefToSettingMetricConverter} - */ - prefToSettingMetricConverter_: null, + /** + * The threshold at which the toolbar will change from normal to narrow + * mode, in px. + * @private {boolean} + */ + narrowThreshold_: { + type: Number, + value: 980, + }, + }; + } /** @override */ - created() { - Router.getInstance().initializeRouteFromUrl(); + constructor() { + super(); + + /** + * The route of the selected element in os-settings-menu. Stored here to + * defer navigation until drawer animation completes. + * @private {Route} + */ + this.activeRoute_ = null; + + /** + * Converts prefs to settings metrics to help record pref changes. + * @private {!PrefToSettingMetricConverter} + */ this.prefToSettingMetricConverter_ = new PrefToSettingMetricConverter(); - }, + + /** @private {?Debouncer} */ + this.scrollEndDebouncer_ = null; + + Router.getInstance().initializeRouteFromUrl(); + } /** * @override @@ -175,6 +185,8 @@ * ES5 strict mode. */ ready() { + super.ready(); + window.CrPolicyStrings = { controlledSettingExtension: loadTimeData.getString('controlledSettingExtension'), @@ -219,28 +231,40 @@ this.$.container.style.visibility = 'hidden'; }); + this.addEventListener('refresh-pref', (event) => { + this.onRefreshPref_(/** @type {!CustomEvent<string>} */ (event)); + }); + this.addEventListener('user-action-setting-change', (event) => { + this.onSettingChange_( + /** @type {!CustomEvent <!{prefKey: string, prefValue: *}>} */ ( + event)); + }); + // If navigation menu is not shown, do not listen to the drawer. if (!this.showNavMenu_) { return; } - this.async(() => { + microTask.run(() => { // Lazy-create the drawer the first time it is opened or swiped into // view. - const drawer = /** @type {!CrDrawerElement} */ (this.$$('#drawer')); + const drawer = /** @type {!CrDrawerElement} */ ( + this.shadowRoot.querySelector('#drawer')); assert(drawer); listenOnce(drawer, 'cr-drawer-opening', () => { - this.$$('#drawerTemplate').if = true; + this.shadowRoot.querySelector('#drawerTemplate').if = true; }); window.addEventListener('popstate', e => { drawer.cancel(); }); }); - }, + } /** @override */ - attached() { + connectedCallback() { + super.connectedCallback(); + document.documentElement.classList.remove('loading'); setTimeout(function() { @@ -261,10 +285,11 @@ this.$.container.scrollTo({top: top, behavior: 'auto'}); const onScroll = () => { - this.debounce('scrollEnd', () => { - this.$.container.removeEventListener('scroll', onScroll); - resolve(); - }, 75); + this.scrollEndDebouncer_ = Debouncer.debounce( + this.scrollEndDebouncer_, timeOut.after(75), () => { + this.$.container.removeEventListener('scroll', onScroll); + resolve(); + }); }; this.$.container.addEventListener('scroll', onScroll); }); @@ -288,19 +313,21 @@ // Clicks need to be captured because unlike focus/blur to the settings // window, a click's propagation can be stopped by child elements. window.addEventListener('click', recordClick, /*capture=*/ true); - }, + } /** @override */ - detached() { + disconnectedCallback() { + super.disconnectedCallback(); + window.removeEventListener('focus', recordPageFocus); window.removeEventListener('blur', recordPageBlur); window.removeEventListener('click', recordClick); Router.getInstance().resetRouteForTesting(); - }, + } /** * @param {!Route} newRoute - * @param {!Route} oldRoute + * @param {!Route=} oldRoute */ currentRouteChanged(newRoute, oldRoute) { if (oldRoute && newRoute !== oldRoute) { @@ -317,25 +344,30 @@ this.enableShadowBehavior(false); this.showDropShadows(); } - }, + } // Override FindShortcutBehavior methods. handleFindShortcut(modalContextOpen) { if (modalContextOpen || !this.showToolbar_) { return false; } - this.$$('os-toolbar').getSearchField().showAndFocus(); - this.$$('os-toolbar').getSearchField().getSearchInput().select(); + this.shadowRoot.querySelector('os-toolbar').getSearchField().showAndFocus(); + this.shadowRoot.querySelector('os-toolbar') + .getSearchField() + .getSearchInput() + .select(); return true; - }, + } // Override FindShortcutBehavior methods. searchInputHasFocus() { if (!this.showToolbar_) { - return; + return false; } - return this.$$('os-toolbar').getSearchField().isSearchFocused(); - }, + return this.shadowRoot.querySelector('os-toolbar') + .getSearchField() + .isSearchFocused(); + } /** * @param {!CustomEvent<string>} e @@ -343,7 +375,7 @@ */ onRefreshPref_(e) { return /** @type {SettingsPrefsElement} */ (this.$.prefs).refresh(e.detail); - }, + } /** * @param {!CustomEvent<!{prefKey: string, prefValue: *}>} e @@ -366,7 +398,7 @@ const value = /** @type {!chromeos.settings.mojom.SettingChangeValue} */ ( settingMetric.value); recordSettingChange(setting, value); - }, + } /** * Called when a section is selected. @@ -384,19 +416,19 @@ if (this.isNarrow) { // If the onIronActivate event came from the drawer, close the drawer // and wait for the menu to close before navigating to |activeRoute_|. - this.$$('#drawer').close(); + this.shadowRoot.querySelector('#drawer').close(); return; } this.navigateToActiveRoute_(); - }, + } /** @private */ onMenuButtonTap_() { if (!this.showNavMenu_) { return; } - this.$$('#drawer').toggle(); - }, + this.shadowRoot.querySelector('#drawer').toggle(); + } /** * Navigates to |activeRoute_| if set. Used to delay navigation until after @@ -410,7 +442,7 @@ /* removeSearch */ true); this.activeRoute_ = null; } - }, + } /** * When this is called, The drawer animation is finished, and the dialog no @@ -422,7 +454,7 @@ * @private */ onMenuClose_() { - if (!this.$$('#drawer').wasCanceled()) { + if (!this.shadowRoot.querySelector('#drawer').wasCanceled()) { // If a navigation happened, MainPageBehavior#currentRouteChanged // handles focusing the corresponding section when we call // settings.NavigateTo(). @@ -437,7 +469,7 @@ listenOnce(this.$.container, ['blur', 'pointerdown'], () => { this.$.container.removeAttribute('tabindex'); }); - }, + } /** @private */ onAdvancedOpenedInMainChanged_() { @@ -445,7 +477,7 @@ if (this.advancedOpenedInMain_) { this.advancedOpenedInMenu_ = true; } - }, + } /** @private */ onAdvancedOpenedInMenuChanged_() { @@ -453,20 +485,23 @@ if (this.advancedOpenedInMenu_) { this.advancedOpenedInMain_ = true; } - }, + } /** @private */ onNarrowChanged_() { - if (this.showNavMenu_ && this.$$('#drawer').open && !this.isNarrow) { - this.$$('#drawer').close(); + if (this.showNavMenu_ && this.shadowRoot.querySelector('#drawer').open && + !this.isNarrow) { + this.shadowRoot.querySelector('#drawer').close(); } - }, + } /** * Handles a tap on the drawer's icon. * @private */ onDrawerIconClick_() { - this.$$('#drawer').cancel(); - }, -}); + this.shadowRoot.querySelector('#drawer').cancel(); + } +} + +customElements.define(OsSettingsUiElement.is, OsSettingsUiElement);
diff --git a/chrome/browser/share/core/share_targets.cc b/chrome/browser/share/core/share_targets.cc index 9850de3..1ba442a 100644 --- a/chrome/browser/share/core/share_targets.cc +++ b/chrome/browser/share/core/share_targets.cc
@@ -21,8 +21,6 @@ namespace sharing { -using base::AutoLock; - static const char GLOBAL[] = "GLOBAL"; // Our Singleton needs to populate itself when first constructed. @@ -44,13 +42,10 @@ } ShareTargets::ShareTargets() = default; - -ShareTargets::~ShareTargets() { - AutoLock lock(lock_); // DCHECK fail if the lock is held. -} +ShareTargets::~ShareTargets() = default; void ShareTargets::RecordUpdateMetrics(UpdateResult result, UpdateOrigin src) { - lock_.AssertAcquired(); + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); // src_name should be "ResourceBundle" or "DynamicUpdate". if (src == UpdateOrigin::DYNAMIC_UPDATE) { @@ -68,13 +63,14 @@ } void ShareTargets::PopulateFromDynamicUpdate(const std::string& binary_pb) { - AutoLock lock(lock_); + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); + UpdateResult result = PopulateFromBinaryPb(binary_pb); RecordUpdateMetrics(result, UpdateOrigin::DYNAMIC_UPDATE); } void ShareTargets::PopulateFromResourceBundle() { - AutoLock lock(lock_); + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); ui::ResourceBundle& bundle = ui::ResourceBundle::GetSharedInstance(); std::string binary_pb = @@ -85,8 +81,6 @@ ShareTargets::UpdateResult ShareTargets::PopulateFromBinaryPb( const std::string& binary_pb) { - lock_.AssertAcquired(); - // Parse the proto and do some validation on it. if (binary_pb.empty()) { return UpdateResult::FAILED_EMPTY; @@ -112,14 +106,13 @@ } // Looks good. Update our internal list. - SwapTargetsLocked(new_targets); + SwapTargets(new_targets); NotifyShareTargetUpdated(); return UpdateResult::SUCCESS; } -void ShareTargets::SwapTargetsLocked( +void ShareTargets::SwapTargets( std::unique_ptr<mojom::MapLocaleTargets>& new_targets) { - lock_.AssertAcquired(); targets_.swap(new_targets); } @@ -144,6 +137,7 @@ } void ShareTargets::NotifyObserver(ShareTargetsObserver* observer) { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); std::string locale = GetCountryStringFromID(country_codes::GetCurrentCountryID());
diff --git a/chrome/browser/share/core/share_targets.h b/chrome/browser/share/core/share_targets.h index 765c92f..007fbd9 100644 --- a/chrome/browser/share/core/share_targets.h +++ b/chrome/browser/share/core/share_targets.h
@@ -7,7 +7,7 @@ #include "base/gtest_prod_util.h" #include "base/observer_list.h" -#include "base/synchronization/lock.h" +#include "base/sequence_checker.h" #include "chrome/browser/share/proto/share_target.pb.h" namespace sharing { @@ -15,6 +15,10 @@ struct ShareTargetsSingletonTrait; class ShareTargetsObserver; +// An instance of this class represents a set of share targets sourced from a +// protobuf, which has an initial version in the resource bundle and can be +// dynamically updated in response to component changes. This class must only be +// used on the main thread. class ShareTargets { public: ShareTargets(const ShareTargets&) = delete; @@ -71,14 +75,11 @@ virtual void RecordUpdateMetrics(UpdateResult result, UpdateOrigin src_name); // Swap in a different targets. This will rebuild file_type_by_ext_ index. - void SwapTargetsLocked(std::unique_ptr<mojom::MapLocaleTargets>& new_targets); + void SwapTargets(std::unique_ptr<mojom::MapLocaleTargets>& new_targets); // The latest targets we've committed. Starts out null. - // Protected by lock_. std::unique_ptr<mojom::MapLocaleTargets> targets_; - mutable base::Lock lock_; - // Observers ---------------------------------------------------------------- // Notify all ShareTargetsObservers registered that the ShareTargets have been @@ -88,6 +89,8 @@ base::ObserverList<ShareTargetsObserver>::Unchecked observers_; + SEQUENCE_CHECKER(sequence_checker_); + FRIEND_TEST_ALL_PREFIXES(ShareTargetsTest, UnpackResourceBundle); FRIEND_TEST_ALL_PREFIXES(ShareTargetsTest, BadProto); FRIEND_TEST_ALL_PREFIXES(ShareTargetsTest, BadUpdateFromExisting);
diff --git a/chrome/browser/share/core/share_targets_unittest.cc b/chrome/browser/share/core/share_targets_unittest.cc index 4b0b576c..209d69f 100644 --- a/chrome/browser/share/core/share_targets_unittest.cc +++ b/chrome/browser/share/core/share_targets_unittest.cc
@@ -44,7 +44,6 @@ } TEST_F(ShareTargetsTest, BadProto) { - base::AutoLock lock(targets_.lock_); EXPECT_EQ(ShareTargets::UpdateResult::FAILED_EMPTY, targets_.PopulateFromBinaryPb(std::string())); @@ -53,7 +52,6 @@ } TEST_F(ShareTargetsTest, BadUpdateFromExisting) { - base::AutoLock lock(targets_.lock_); // Make a minimum viable config. mojom::MapLocaleTargets mlt; mlt.set_version_id(2);
diff --git a/chrome/browser/sharing_hub/sharing_hub_model.cc b/chrome/browser/sharing_hub/sharing_hub_model.cc index 7aa67b9..7dc207f 100644 --- a/chrome/browser/sharing_hub/sharing_hub_model.cc +++ b/chrome/browser/sharing_hub/sharing_hub_model.cc
@@ -73,11 +73,13 @@ SharingHubModel::SharingHubModel(content::BrowserContext* context) : context_(context) { + DCHECK_CURRENTLY_ON(content::BrowserThread::UI); PopulateFirstPartyActions(); sharing::ShareTargets::GetInstance()->AddObserver(this); } SharingHubModel::~SharingHubModel() { + DCHECK_CURRENTLY_ON(content::BrowserThread::UI); sharing::ShareTargets::GetInstance()->RemoveObserver(this); } @@ -117,6 +119,7 @@ void SharingHubModel::GetThirdPartyActionList( std::vector<SharingHubAction>* list) { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); for (const auto& action : third_party_action_list_) { list->push_back(action); } @@ -126,6 +129,8 @@ const GURL& gurl, const std::u16string& title, int id) { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); + const std::string url = gurl.spec(); auto url_it = third_party_action_urls_.find(id); if (url_it == third_party_action_urls_.end()) @@ -168,37 +173,38 @@ } void SharingHubModel::PopulateFirstPartyActions() { - first_party_action_list_.push_back( - {IDC_COPY_URL, l10n_util::GetStringUTF16(IDS_SHARING_HUB_COPY_LINK_LABEL), - &kCopyIcon, true, gfx::ImageSkia(), - "SharingHubDesktop.CopyURLSelected"}); + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); + + first_party_action_list_.emplace_back( + IDC_COPY_URL, l10n_util::GetStringUTF16(IDS_SHARING_HUB_COPY_LINK_LABEL), + &kCopyIcon, true, gfx::ImageSkia(), "SharingHubDesktop.CopyURLSelected"); if (DesktopScreenshotsFeatureEnabled(context_)) { - first_party_action_list_.push_back( - {IDC_SHARING_HUB_SCREENSHOT, - l10n_util::GetStringUTF16(IDS_SHARING_HUB_SCREENSHOT_LABEL), - &kSharingHubScreenshotIcon, true, gfx::ImageSkia(), - "SharingHubDesktop.ScreenshotSelected"}); + first_party_action_list_.emplace_back( + IDC_SHARING_HUB_SCREENSHOT, + l10n_util::GetStringUTF16(IDS_SHARING_HUB_SCREENSHOT_LABEL), + &kSharingHubScreenshotIcon, true, gfx::ImageSkia(), + "SharingHubDesktop.ScreenshotSelected"); } - first_party_action_list_.push_back( - {IDC_SEND_TAB_TO_SELF, - l10n_util::GetStringUTF16(IDS_CONTEXT_MENU_SEND_TAB_TO_SELF), - &kSendTabToSelfIcon, true, gfx::ImageSkia(), - "SharingHubDesktop.SendTabToSelfSelected"}); + first_party_action_list_.emplace_back( + IDC_SEND_TAB_TO_SELF, + l10n_util::GetStringUTF16(IDS_CONTEXT_MENU_SEND_TAB_TO_SELF), + &kSendTabToSelfIcon, true, gfx::ImageSkia(), + "SharingHubDesktop.SendTabToSelfSelected"); - first_party_action_list_.push_back( - {IDC_QRCODE_GENERATOR, - l10n_util::GetStringUTF16(IDS_SHARING_HUB_GENERATE_QR_CODE_LABEL), - &kQrcodeGeneratorIcon, true, gfx::ImageSkia(), - "SharingHubDesktop.QRCodeSelected"}); + first_party_action_list_.emplace_back( + IDC_QRCODE_GENERATOR, + l10n_util::GetStringUTF16(IDS_SHARING_HUB_GENERATE_QR_CODE_LABEL), + &kQrcodeGeneratorIcon, true, gfx::ImageSkia(), + "SharingHubDesktop.QRCodeSelected"); if (media_router::MediaRouterEnabled(context_)) { - first_party_action_list_.push_back( - {IDC_ROUTE_MEDIA, - l10n_util::GetStringUTF16(IDS_SHARING_HUB_MEDIA_ROUTER_LABEL), - &vector_icons::kMediaRouterIdleIcon, true, gfx::ImageSkia(), - "SharingHubDesktop.CastSelected"}); + first_party_action_list_.emplace_back( + IDC_ROUTE_MEDIA, + l10n_util::GetStringUTF16(IDS_SHARING_HUB_MEDIA_ROUTER_LABEL), + &vector_icons::kMediaRouterIdleIcon, true, gfx::ImageSkia(), + "SharingHubDesktop.CastSelected"); } if (base::FeatureList::IsEnabled(feed::kWebUiFeed)) { @@ -212,14 +218,15 @@ "SharingHubDesktop.UnfollowSelected"); } - first_party_action_list_.push_back( - {IDC_SAVE_PAGE, - l10n_util::GetStringUTF16(IDS_SHARING_HUB_SAVE_PAGE_LABEL), - &kSavePageIcon, true, gfx::ImageSkia(), - "SharingHubDesktop.SavePageSelected"}); + first_party_action_list_.emplace_back( + IDC_SAVE_PAGE, l10n_util::GetStringUTF16(IDS_SHARING_HUB_SAVE_PAGE_LABEL), + &kSavePageIcon, true, gfx::ImageSkia(), + "SharingHubDesktop.SavePageSelected"); } void SharingHubModel::PopulateThirdPartyActions() { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); + // Clear the action list in the case where the action list is repopulated. if (third_party_action_list_.size()) { third_party_action_list_.clear(); @@ -248,15 +255,15 @@ } icon_skia.MakeThreadSafe(); - third_party_action_list_.push_back( - {id, base::ASCIIToUTF16(target.nickname()), - &vector_icons::kEmailIcon, false, std::move(icon_skia), - "SharingHubDesktop.ThirdPartyAppSelected"}); + third_party_action_list_.emplace_back( + id, base::ASCIIToUTF16(target.nickname()), + &vector_icons::kEmailIcon, false, std::move(icon_skia), + "SharingHubDesktop.ThirdPartyAppSelected"); } else { - third_party_action_list_.push_back( - {id, base::ASCIIToUTF16(target.nickname()), - &vector_icons::kEmailIcon, false, gfx::ImageSkia(), - "SharingHubDesktop.ThirdPartyAppSelected"}); + third_party_action_list_.emplace_back( + id, base::ASCIIToUTF16(target.nickname()), + &vector_icons::kEmailIcon, false, gfx::ImageSkia(), + "SharingHubDesktop.ThirdPartyAppSelected"); } third_party_action_urls_[id] = GURL(target.url());
diff --git a/chrome/browser/sharing_hub/sharing_hub_model.h b/chrome/browser/sharing_hub/sharing_hub_model.h index 2bf8710c..ae4bf6d 100644 --- a/chrome/browser/sharing_hub/sharing_hub_model.h +++ b/chrome/browser/sharing_hub/sharing_hub_model.h
@@ -10,6 +10,7 @@ #include <vector> #include "base/memory/raw_ptr.h" +#include "base/sequence_checker.h" #include "chrome/browser/share/core/share_targets_observer.h" #include "ui/gfx/image/image_skia.h" @@ -105,6 +106,8 @@ raw_ptr<content::BrowserContext> context_; std::unique_ptr<sharing::mojom::ShareTargets> third_party_targets_; + + SEQUENCE_CHECKER(sequence_checker_); }; } // namespace sharing_hub
diff --git a/chrome/browser/ssl/ssl_browsertest.cc b/chrome/browser/ssl/ssl_browsertest.cc index 5be642f5..85cc368 100644 --- a/chrome/browser/ssl/ssl_browsertest.cc +++ b/chrome/browser/ssl/ssl_browsertest.cc
@@ -1756,7 +1756,7 @@ // The title will be changed to 'PASS'. ASSERT_TRUE(ui_test_utils::NavigateToURL(browser(), wss_close_url)); const std::u16string result = watcher.WaitAndGetTitle(); - EXPECT_TRUE(base::LowerCaseEqualsASCII(result, "pass")); + EXPECT_TRUE(base::EqualsCaseInsensitiveASCII(result, "pass")); // Close tabs which contains the test page. for (int i = 0; i < 16; ++i) @@ -1792,7 +1792,7 @@ // Test page run a WebSocket wss connection test. The result will be shown // as page title. const std::u16string result = watcher.WaitAndGetTitle(); - EXPECT_TRUE(base::LowerCaseEqualsASCII(result, "pass")); + EXPECT_TRUE(base::EqualsCaseInsensitiveASCII(result, "pass")); } // Data URLs should always be marked as non-secure. @@ -1904,7 +1904,7 @@ // Test page runs a WebSocket wss connection test. The result will be shown // as page title. const std::u16string result = watcher.WaitAndGetTitle(); - EXPECT_TRUE(base::LowerCaseEqualsASCII(result, "pass")); + EXPECT_TRUE(base::EqualsCaseInsensitiveASCII(result, "pass")); } #endif // BUILDFLAG(USE_NSS_CERTS) #endif // !BUILDFLAG(IS_CHROMEOS_LACROS) @@ -3936,7 +3936,7 @@ // Test page run a WebSocket wss connection test. The result will be shown // as page title. const std::u16string result = watcher.WaitAndGetTitle(); - EXPECT_TRUE(base::LowerCaseEqualsASCII(result, "pass")); + EXPECT_TRUE(base::EqualsCaseInsensitiveASCII(result, "pass")); } // Visit a page and establish a WebSocket connection over bad https with @@ -3963,7 +3963,7 @@ // Test page run a WebSocket wss connection test. The result will be shown // as page title. const std::u16string result = watcher.WaitAndGetTitle(); - EXPECT_TRUE(base::LowerCaseEqualsASCII(result, "pass")); + EXPECT_TRUE(base::EqualsCaseInsensitiveASCII(result, "pass")); } #endif // !BUILDFLAG(IS_CHROMEOS_ASH)
diff --git a/chrome/browser/sync/test/integration/two_client_web_apps_integration_test_cros.cc b/chrome/browser/sync/test/integration/two_client_web_apps_integration_test_cros.cc index 84c4945..c8220874 100644 --- a/chrome/browser/sync/test/integration/two_client_web_apps_integration_test_cros.cc +++ b/chrome/browser/sync/test/integration/two_client_web_apps_integration_test_cros.cc
@@ -18,177 +18,6 @@ IN_PROC_BROWSER_TEST_F( TwoClientWebAppsIntegrationTestCros, - WebAppIntegration_30SiteA_24_12SiteA_7SiteA_40Client2_7SiteA_12SiteA_37SiteA_17_20) { - // 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. - helper_.InstallCreateShortcutWindowed(Site::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.SwitchProfileClients(ProfileClient::kClient2); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.NavigateBrowser(Site::kSiteA); - helper_.CheckInstallIconNotShown(); - helper_.CheckLaunchIconShown(); -} - -IN_PROC_BROWSER_TEST_F( - TwoClientWebAppsIntegrationTestCros, - WebAppIntegration_30SiteA_24_12SiteA_7SiteA_40Client2_7SiteA_12SiteA_41_10SiteA_42_12SiteA_7SiteA) { - // 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. - helper_.InstallCreateShortcutWindowed(Site::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.SwitchProfileClients(ProfileClient::kClient2); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.SyncTurnOff(); - helper_.UninstallFromList(Site::kSiteA); - helper_.SyncTurnOn(); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); -} - -IN_PROC_BROWSER_TEST_F( - TwoClientWebAppsIntegrationTestCros, - WebAppIntegration_30SiteA_24_12SiteA_7SiteA_40Client2_7SiteA_12SiteA_10SiteA_15SiteA_40Client1_15SiteA) { - // 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. - helper_.InstallCreateShortcutWindowed(Site::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.SwitchProfileClients(ProfileClient::kClient2); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.UninstallFromList(Site::kSiteA); - helper_.CheckAppNotInList(Site::kSiteA); - helper_.SwitchProfileClients(ProfileClient::kClient1); - helper_.CheckAppNotInList(Site::kSiteA); -} - -IN_PROC_BROWSER_TEST_F( - TwoClientWebAppsIntegrationTestCros, - WebAppIntegration_31SiteA_24_12SiteA_7SiteA_40Client2_7SiteA_12SiteA_37SiteA_17_20) { - // 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. - helper_.InstallOmniboxIcon(InstallableSite::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.SwitchProfileClients(ProfileClient::kClient2); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.NavigateBrowser(Site::kSiteA); - helper_.CheckInstallIconNotShown(); - helper_.CheckLaunchIconShown(); -} - -IN_PROC_BROWSER_TEST_F( - TwoClientWebAppsIntegrationTestCros, - WebAppIntegration_31SiteA_24_12SiteA_7SiteA_40Client2_7SiteA_12SiteA_41_10SiteA_42_12SiteA_7SiteA) { - // 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. - helper_.InstallOmniboxIcon(InstallableSite::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.SwitchProfileClients(ProfileClient::kClient2); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.SyncTurnOff(); - helper_.UninstallFromList(Site::kSiteA); - helper_.SyncTurnOn(); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); -} - -IN_PROC_BROWSER_TEST_F( - TwoClientWebAppsIntegrationTestCros, - WebAppIntegration_31SiteA_24_12SiteA_7SiteA_40Client2_7SiteA_12SiteA_10SiteA_15SiteA_40Client1_15SiteA) { - // 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. - helper_.InstallOmniboxIcon(InstallableSite::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.SwitchProfileClients(ProfileClient::kClient2); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.UninstallFromList(Site::kSiteA); - helper_.CheckAppNotInList(Site::kSiteA); - helper_.SwitchProfileClients(ProfileClient::kClient1); - helper_.CheckAppNotInList(Site::kSiteA); -} - -IN_PROC_BROWSER_TEST_F( - TwoClientWebAppsIntegrationTestCros, - WebAppIntegration_47SiteA_24_12SiteA_7SiteA_40Client2_7SiteA_12SiteA_37SiteA_17_20) { - // 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. - helper_.InstallMenuOption(InstallableSite::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.SwitchProfileClients(ProfileClient::kClient2); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.NavigateBrowser(Site::kSiteA); - helper_.CheckInstallIconNotShown(); - helper_.CheckLaunchIconShown(); -} - -IN_PROC_BROWSER_TEST_F( - TwoClientWebAppsIntegrationTestCros, - WebAppIntegration_47SiteA_24_12SiteA_7SiteA_40Client2_7SiteA_12SiteA_41_10SiteA_42_12SiteA_7SiteA) { - // 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. - helper_.InstallMenuOption(InstallableSite::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.SwitchProfileClients(ProfileClient::kClient2); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.SyncTurnOff(); - helper_.UninstallFromList(Site::kSiteA); - helper_.SyncTurnOn(); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); -} - -IN_PROC_BROWSER_TEST_F( - TwoClientWebAppsIntegrationTestCros, - WebAppIntegration_47SiteA_24_12SiteA_7SiteA_40Client2_7SiteA_12SiteA_10SiteA_15SiteA_40Client1_15SiteA) { - // 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. - helper_.InstallMenuOption(InstallableSite::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.SwitchProfileClients(ProfileClient::kClient2); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.UninstallFromList(Site::kSiteA); - helper_.CheckAppNotInList(Site::kSiteA); - helper_.SwitchProfileClients(ProfileClient::kClient1); - helper_.CheckAppNotInList(Site::kSiteA); -} - -IN_PROC_BROWSER_TEST_F( - TwoClientWebAppsIntegrationTestCros, WebAppIntegration_29SiteA_11SiteA_7SiteA_40Client2_7SiteA_11SiteA_34SiteA_22) { // Test contents are generated by script. Please do not modify! // See `chrome/test/webapps/README.md` for more info. @@ -240,5 +69,185 @@ helper_.CheckAppNotInList(Site::kSiteA); } +IN_PROC_BROWSER_TEST_F( + TwoClientWebAppsIntegrationTestCros, + WebAppIntegration_30SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_7SiteA_12SiteA_10SiteA_15SiteA_40Client1_15SiteA) { + // 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. + helper_.InstallCreateShortcutWindowed(Site::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.SwitchProfileClients(ProfileClient::kClient2); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.UninstallFromList(Site::kSiteA); + helper_.CheckAppNotInList(Site::kSiteA); + helper_.SwitchProfileClients(ProfileClient::kClient1); + helper_.CheckAppNotInList(Site::kSiteA); +} + +IN_PROC_BROWSER_TEST_F( + TwoClientWebAppsIntegrationTestCros, + WebAppIntegration_30SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_7SiteA_12SiteA_37SiteA_17_20) { + // 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. + helper_.InstallCreateShortcutWindowed(Site::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.SwitchProfileClients(ProfileClient::kClient2); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.NavigateBrowser(Site::kSiteA); + helper_.CheckInstallIconNotShown(); + helper_.CheckLaunchIconShown(); +} + +IN_PROC_BROWSER_TEST_F( + TwoClientWebAppsIntegrationTestCros, + WebAppIntegration_30SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_7SiteA_12SiteA_41_10SiteA_42_12SiteA_7SiteA) { + // 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. + helper_.InstallCreateShortcutWindowed(Site::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.SwitchProfileClients(ProfileClient::kClient2); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.SyncTurnOff(); + helper_.UninstallFromList(Site::kSiteA); + helper_.SyncTurnOn(); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); +} + +IN_PROC_BROWSER_TEST_F( + TwoClientWebAppsIntegrationTestCros, + WebAppIntegration_31SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_7SiteA_12SiteA_10SiteA_15SiteA_40Client1_15SiteA) { + // 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. + helper_.InstallOmniboxIcon(InstallableSite::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.SwitchProfileClients(ProfileClient::kClient2); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.UninstallFromList(Site::kSiteA); + helper_.CheckAppNotInList(Site::kSiteA); + helper_.SwitchProfileClients(ProfileClient::kClient1); + helper_.CheckAppNotInList(Site::kSiteA); +} + +IN_PROC_BROWSER_TEST_F( + TwoClientWebAppsIntegrationTestCros, + WebAppIntegration_31SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_7SiteA_12SiteA_37SiteA_17_20) { + // 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. + helper_.InstallOmniboxIcon(InstallableSite::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.SwitchProfileClients(ProfileClient::kClient2); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.NavigateBrowser(Site::kSiteA); + helper_.CheckInstallIconNotShown(); + helper_.CheckLaunchIconShown(); +} + +IN_PROC_BROWSER_TEST_F( + TwoClientWebAppsIntegrationTestCros, + WebAppIntegration_31SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_7SiteA_12SiteA_41_10SiteA_42_12SiteA_7SiteA) { + // 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. + helper_.InstallOmniboxIcon(InstallableSite::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.SwitchProfileClients(ProfileClient::kClient2); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.SyncTurnOff(); + helper_.UninstallFromList(Site::kSiteA); + helper_.SyncTurnOn(); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); +} + +IN_PROC_BROWSER_TEST_F( + TwoClientWebAppsIntegrationTestCros, + WebAppIntegration_47SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_7SiteA_12SiteA_10SiteA_15SiteA_40Client1_15SiteA) { + // 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. + helper_.InstallMenuOption(InstallableSite::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.SwitchProfileClients(ProfileClient::kClient2); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.UninstallFromList(Site::kSiteA); + helper_.CheckAppNotInList(Site::kSiteA); + helper_.SwitchProfileClients(ProfileClient::kClient1); + helper_.CheckAppNotInList(Site::kSiteA); +} + +IN_PROC_BROWSER_TEST_F( + TwoClientWebAppsIntegrationTestCros, + WebAppIntegration_47SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_7SiteA_12SiteA_37SiteA_17_20) { + // 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. + helper_.InstallMenuOption(InstallableSite::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.SwitchProfileClients(ProfileClient::kClient2); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.NavigateBrowser(Site::kSiteA); + helper_.CheckInstallIconNotShown(); + helper_.CheckLaunchIconShown(); +} + +IN_PROC_BROWSER_TEST_F( + TwoClientWebAppsIntegrationTestCros, + WebAppIntegration_47SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_7SiteA_12SiteA_41_10SiteA_42_12SiteA_7SiteA) { + // 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. + helper_.InstallMenuOption(InstallableSite::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.SwitchProfileClients(ProfileClient::kClient2); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.SyncTurnOff(); + helper_.UninstallFromList(Site::kSiteA); + helper_.SyncTurnOn(); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); +} + } // namespace } // namespace web_app::integration_tests
diff --git a/chrome/browser/sync/test/integration/two_client_web_apps_integration_test_mac_win_linux.cc b/chrome/browser/sync/test/integration/two_client_web_apps_integration_test_mac_win_linux.cc index 69318e0..d4bfccd 100644 --- a/chrome/browser/sync/test/integration/two_client_web_apps_integration_test_mac_win_linux.cc +++ b/chrome/browser/sync/test/integration/two_client_web_apps_integration_test_mac_win_linux.cc
@@ -126,861 +126,6 @@ helper_.CheckAppInListNotLocallyInstalled(Site::kSiteC); } -// TODO(crbug.com/1301414): Mac shims failing to launch on Mac debug and ASAN. -#if BUILDFLAG(IS_MAC) -#define MAYBE_WebAppIntegration_30SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_46SiteA_7SiteA_12SiteA_37SiteA_17_20 \ - DISABLED_WebAppIntegration_30SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_46SiteA_7SiteA_12SiteA_37SiteA_17_20 -#else -#define MAYBE_WebAppIntegration_30SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_46SiteA_7SiteA_12SiteA_37SiteA_17_20 \ - WebAppIntegration_30SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_46SiteA_7SiteA_12SiteA_37SiteA_17_20 -#endif -IN_PROC_BROWSER_TEST_F( - TwoClientWebAppsIntegrationTestMacWinLinux, - MAYBE_WebAppIntegration_30SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_46SiteA_7SiteA_12SiteA_37SiteA_17_20) { - // 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. - helper_.InstallCreateShortcutWindowed(Site::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.SwitchProfileClients(ProfileClient::kClient2); - helper_.CheckAppInListNotLocallyInstalled(Site::kSiteA); - helper_.InstallLocally(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.NavigateBrowser(Site::kSiteA); - helper_.CheckInstallIconNotShown(); - helper_.CheckLaunchIconShown(); -} - -// TODO(crbug.com/1301414): Mac shims failing to launch on Mac debug and ASAN. -#if BUILDFLAG(IS_MAC) -#define MAYBE_WebAppIntegration_30SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_46SiteA_7SiteA_12SiteA_69SiteA_24 \ - DISABLED_WebAppIntegration_30SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_46SiteA_7SiteA_12SiteA_69SiteA_24 -#else -#define MAYBE_WebAppIntegration_30SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_46SiteA_7SiteA_12SiteA_69SiteA_24 \ - WebAppIntegration_30SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_46SiteA_7SiteA_12SiteA_69SiteA_24 -#endif -IN_PROC_BROWSER_TEST_F( - TwoClientWebAppsIntegrationTestMacWinLinux, - MAYBE_WebAppIntegration_30SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_46SiteA_7SiteA_12SiteA_69SiteA_24) { - // 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. - helper_.InstallCreateShortcutWindowed(Site::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.SwitchProfileClients(ProfileClient::kClient2); - helper_.CheckAppInListNotLocallyInstalled(Site::kSiteA); - helper_.InstallLocally(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.LaunchFromMenuOption(Site::kSiteA); - helper_.CheckWindowCreated(); -} - -// TODO(crbug.com/1301414): Mac shims failing to launch on Mac debug and ASAN. -#if BUILDFLAG(IS_MAC) -#define MAYBE_WebAppIntegration_30SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_46SiteA_7SiteA_12SiteA_35SiteA_24 \ - DISABLED_WebAppIntegration_30SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_46SiteA_7SiteA_12SiteA_35SiteA_24 -#else -#define MAYBE_WebAppIntegration_30SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_46SiteA_7SiteA_12SiteA_35SiteA_24 \ - WebAppIntegration_30SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_46SiteA_7SiteA_12SiteA_35SiteA_24 -#endif -IN_PROC_BROWSER_TEST_F( - TwoClientWebAppsIntegrationTestMacWinLinux, - MAYBE_WebAppIntegration_30SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_46SiteA_7SiteA_12SiteA_35SiteA_24) { - // 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. - helper_.InstallCreateShortcutWindowed(Site::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.SwitchProfileClients(ProfileClient::kClient2); - helper_.CheckAppInListNotLocallyInstalled(Site::kSiteA); - helper_.InstallLocally(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.LaunchFromLaunchIcon(Site::kSiteA); - helper_.CheckWindowCreated(); -} - -// TODO(crbug.com/1301414): Mac shims failing to launch on Mac debug and ASAN. -// TODO(crbug.com/1325429): Flaky. -IN_PROC_BROWSER_TEST_F( - TwoClientWebAppsIntegrationTestMacWinLinux, - DISABLED_WebAppIntegration_30SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_46SiteA_7SiteA_12SiteA_34SiteA_24) { - // 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. - helper_.InstallCreateShortcutWindowed(Site::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.SwitchProfileClients(ProfileClient::kClient2); - helper_.CheckAppInListNotLocallyInstalled(Site::kSiteA); - helper_.InstallLocally(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.LaunchFromChromeApps(Site::kSiteA); - helper_.CheckWindowCreated(); -} - -// TODO(crbug.com/1301414): Mac shims failing to launch on Mac debug and ASAN. -#if BUILDFLAG(IS_MAC) -#define MAYBE_WebAppIntegration_30SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_46SiteA_7SiteA_12SiteA_1SiteA_24 \ - DISABLED_WebAppIntegration_30SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_46SiteA_7SiteA_12SiteA_1SiteA_24 -#else -#define MAYBE_WebAppIntegration_30SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_46SiteA_7SiteA_12SiteA_1SiteA_24 \ - WebAppIntegration_30SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_46SiteA_7SiteA_12SiteA_1SiteA_24 -#endif -IN_PROC_BROWSER_TEST_F( - TwoClientWebAppsIntegrationTestMacWinLinux, - MAYBE_WebAppIntegration_30SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_46SiteA_7SiteA_12SiteA_1SiteA_24) { - // 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. - helper_.InstallCreateShortcutWindowed(Site::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.SwitchProfileClients(ProfileClient::kClient2); - helper_.CheckAppInListNotLocallyInstalled(Site::kSiteA); - helper_.InstallLocally(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.LaunchFromPlatformShortcut(Site::kSiteA); - helper_.CheckWindowCreated(); -} - -// TODO(crbug.com/1301414): Mac shims failing to launch on Mac debug and ASAN. -#if BUILDFLAG(IS_MAC) -#define MAYBE_WebAppIntegration_30SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_34SiteA_22 \ - DISABLED_WebAppIntegration_30SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_34SiteA_22 -#else -#define MAYBE_WebAppIntegration_30SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_34SiteA_22 \ - WebAppIntegration_30SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_34SiteA_22 -#endif -IN_PROC_BROWSER_TEST_F( - TwoClientWebAppsIntegrationTestMacWinLinux, - MAYBE_WebAppIntegration_30SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_34SiteA_22) { - // 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. - helper_.InstallCreateShortcutWindowed(Site::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.SwitchProfileClients(ProfileClient::kClient2); - helper_.CheckAppInListNotLocallyInstalled(Site::kSiteA); - helper_.LaunchFromChromeApps(Site::kSiteA); - helper_.CheckTabCreated(); -} - -// TODO(crbug.com/1301414): Mac shims failing to launch on Mac debug and ASAN. -#if BUILDFLAG(IS_MAC) -#define MAYBE_WebAppIntegration_30SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_1SiteA_22 \ - DISABLED_WebAppIntegration_30SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_1SiteA_22 -#else -#define MAYBE_WebAppIntegration_30SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_1SiteA_22 \ - WebAppIntegration_30SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_1SiteA_22 -#endif -IN_PROC_BROWSER_TEST_F( - TwoClientWebAppsIntegrationTestMacWinLinux, - MAYBE_WebAppIntegration_30SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_1SiteA_22) { - // 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. - helper_.InstallCreateShortcutWindowed(Site::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.SwitchProfileClients(ProfileClient::kClient2); - helper_.CheckAppInListNotLocallyInstalled(Site::kSiteA); - helper_.LaunchFromPlatformShortcut(Site::kSiteA); - helper_.CheckTabCreated(); -} - -// TODO(crbug.com/1301414): Mac shims failing to launch on Mac debug and ASAN. -#if BUILDFLAG(IS_MAC) -#define MAYBE_WebAppIntegration_30SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_37SiteA_18_19 \ - DISABLED_WebAppIntegration_30SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_37SiteA_18_19 -#else -#define MAYBE_WebAppIntegration_30SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_37SiteA_18_19 \ - WebAppIntegration_30SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_37SiteA_18_19 -#endif -IN_PROC_BROWSER_TEST_F( - TwoClientWebAppsIntegrationTestMacWinLinux, - MAYBE_WebAppIntegration_30SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_37SiteA_18_19) { - // 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. - helper_.InstallCreateShortcutWindowed(Site::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.SwitchProfileClients(ProfileClient::kClient2); - helper_.CheckAppInListNotLocallyInstalled(Site::kSiteA); - helper_.NavigateBrowser(Site::kSiteA); - helper_.CheckInstallIconShown(); - helper_.CheckLaunchIconNotShown(); -} - -// TODO(crbug.com/1301414): Mac shims failing to launch on Mac debug and ASAN. -#if BUILDFLAG(IS_MAC) -#define MAYBE_WebAppIntegration_30SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_41_10SiteA_42_45SiteA \ - DISABLED_WebAppIntegration_30SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_41_10SiteA_42_45SiteA -#else -#define MAYBE_WebAppIntegration_30SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_41_10SiteA_42_45SiteA \ - WebAppIntegration_30SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_41_10SiteA_42_45SiteA -#endif -IN_PROC_BROWSER_TEST_F( - TwoClientWebAppsIntegrationTestMacWinLinux, - MAYBE_WebAppIntegration_30SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_41_10SiteA_42_45SiteA) { - // 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. - helper_.InstallCreateShortcutWindowed(Site::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.SwitchProfileClients(ProfileClient::kClient2); - helper_.CheckAppInListNotLocallyInstalled(Site::kSiteA); - helper_.SyncTurnOff(); - helper_.UninstallFromList(Site::kSiteA); - helper_.SyncTurnOn(); - helper_.CheckAppInListNotLocallyInstalled(Site::kSiteA); -} - -// TODO(crbug.com/1301414): Mac shims failing to launch on Mac debug and ASAN. -#if BUILDFLAG(IS_MAC) -#define MAYBE_WebAppIntegration_30SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_41_43SiteA_42_45SiteA \ - DISABLED_WebAppIntegration_30SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_41_43SiteA_42_45SiteA -#else -#define MAYBE_WebAppIntegration_30SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_41_43SiteA_42_45SiteA \ - WebAppIntegration_30SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_41_43SiteA_42_45SiteA -#endif -IN_PROC_BROWSER_TEST_F( - TwoClientWebAppsIntegrationTestMacWinLinux, - MAYBE_WebAppIntegration_30SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_41_43SiteA_42_45SiteA) { - // 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. - helper_.InstallCreateShortcutWindowed(Site::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.SwitchProfileClients(ProfileClient::kClient2); - helper_.CheckAppInListNotLocallyInstalled(Site::kSiteA); - helper_.SyncTurnOff(); - helper_.UninstallFromMenu(Site::kSiteA); - helper_.SyncTurnOn(); - helper_.CheckAppInListNotLocallyInstalled(Site::kSiteA); -} - -// TODO(crbug.com/1301414): Mac shims failing to launch on Mac debug and ASAN. -#if BUILDFLAG(IS_MAC) -#define MAYBE_WebAppIntegration_30SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_10SiteA_15SiteA_40Client1_15SiteA \ - DISABLED_WebAppIntegration_30SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_10SiteA_15SiteA_40Client1_15SiteA -#else -#define MAYBE_WebAppIntegration_30SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_10SiteA_15SiteA_40Client1_15SiteA \ - WebAppIntegration_30SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_10SiteA_15SiteA_40Client1_15SiteA -#endif -IN_PROC_BROWSER_TEST_F( - TwoClientWebAppsIntegrationTestMacWinLinux, - MAYBE_WebAppIntegration_30SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_10SiteA_15SiteA_40Client1_15SiteA) { - // 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. - helper_.InstallCreateShortcutWindowed(Site::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.SwitchProfileClients(ProfileClient::kClient2); - helper_.CheckAppInListNotLocallyInstalled(Site::kSiteA); - helper_.UninstallFromList(Site::kSiteA); - helper_.CheckAppNotInList(Site::kSiteA); - helper_.SwitchProfileClients(ProfileClient::kClient1); - helper_.CheckAppNotInList(Site::kSiteA); -} - -// TODO(crbug.com/1301414): Mac shims failing to launch on Mac debug and ASAN. -#if BUILDFLAG(IS_MAC) -#define MAYBE_WebAppIntegration_31SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_46SiteA_7SiteA_12SiteA_37SiteA_17_20 \ - DISABLED_WebAppIntegration_31SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_46SiteA_7SiteA_12SiteA_37SiteA_17_20 -#else -#define MAYBE_WebAppIntegration_31SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_46SiteA_7SiteA_12SiteA_37SiteA_17_20 \ - WebAppIntegration_31SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_46SiteA_7SiteA_12SiteA_37SiteA_17_20 -#endif -IN_PROC_BROWSER_TEST_F( - TwoClientWebAppsIntegrationTestMacWinLinux, - MAYBE_WebAppIntegration_31SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_46SiteA_7SiteA_12SiteA_37SiteA_17_20) { - // 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. - helper_.InstallOmniboxIcon(InstallableSite::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.SwitchProfileClients(ProfileClient::kClient2); - helper_.CheckAppInListNotLocallyInstalled(Site::kSiteA); - helper_.InstallLocally(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.NavigateBrowser(Site::kSiteA); - helper_.CheckInstallIconNotShown(); - helper_.CheckLaunchIconShown(); -} - -// TODO(crbug.com/1301414): Mac shims failing to launch on Mac debug and ASAN. -#if BUILDFLAG(IS_MAC) -#define MAYBE_WebAppIntegration_31SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_46SiteA_7SiteA_12SiteA_69SiteA_24 \ - DISABLED_WebAppIntegration_31SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_46SiteA_7SiteA_12SiteA_69SiteA_24 -#else -#define MAYBE_WebAppIntegration_31SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_46SiteA_7SiteA_12SiteA_69SiteA_24 \ - WebAppIntegration_31SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_46SiteA_7SiteA_12SiteA_69SiteA_24 -#endif -IN_PROC_BROWSER_TEST_F( - TwoClientWebAppsIntegrationTestMacWinLinux, - MAYBE_WebAppIntegration_31SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_46SiteA_7SiteA_12SiteA_69SiteA_24) { - // 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. - helper_.InstallOmniboxIcon(InstallableSite::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.SwitchProfileClients(ProfileClient::kClient2); - helper_.CheckAppInListNotLocallyInstalled(Site::kSiteA); - helper_.InstallLocally(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.LaunchFromMenuOption(Site::kSiteA); - helper_.CheckWindowCreated(); -} - -// TODO(crbug.com/1301414): Mac shims failing to launch on Mac debug and ASAN. -#if BUILDFLAG(IS_MAC) -#define MAYBE_WebAppIntegration_31SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_46SiteA_7SiteA_12SiteA_35SiteA_24 \ - DISABLED_WebAppIntegration_31SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_46SiteA_7SiteA_12SiteA_35SiteA_24 -#else -#define MAYBE_WebAppIntegration_31SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_46SiteA_7SiteA_12SiteA_35SiteA_24 \ - WebAppIntegration_31SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_46SiteA_7SiteA_12SiteA_35SiteA_24 -#endif -IN_PROC_BROWSER_TEST_F( - TwoClientWebAppsIntegrationTestMacWinLinux, - MAYBE_WebAppIntegration_31SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_46SiteA_7SiteA_12SiteA_35SiteA_24) { - // 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. - helper_.InstallOmniboxIcon(InstallableSite::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.SwitchProfileClients(ProfileClient::kClient2); - helper_.CheckAppInListNotLocallyInstalled(Site::kSiteA); - helper_.InstallLocally(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.LaunchFromLaunchIcon(Site::kSiteA); - helper_.CheckWindowCreated(); -} - -// TODO(crbug.com/1301414): Mac shims failing to launch on Mac debug and ASAN. -#if BUILDFLAG(IS_MAC) -#define MAYBE_WebAppIntegration_31SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_46SiteA_7SiteA_12SiteA_34SiteA_24 \ - DISABLED_WebAppIntegration_31SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_46SiteA_7SiteA_12SiteA_34SiteA_24 -#else -#define MAYBE_WebAppIntegration_31SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_46SiteA_7SiteA_12SiteA_34SiteA_24 \ - WebAppIntegration_31SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_46SiteA_7SiteA_12SiteA_34SiteA_24 -#endif -IN_PROC_BROWSER_TEST_F( - TwoClientWebAppsIntegrationTestMacWinLinux, - MAYBE_WebAppIntegration_31SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_46SiteA_7SiteA_12SiteA_34SiteA_24) { - // 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. - helper_.InstallOmniboxIcon(InstallableSite::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.SwitchProfileClients(ProfileClient::kClient2); - helper_.CheckAppInListNotLocallyInstalled(Site::kSiteA); - helper_.InstallLocally(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.LaunchFromChromeApps(Site::kSiteA); - helper_.CheckWindowCreated(); -} - -// TODO(crbug.com/1301414): Mac shims failing to launch on Mac debug and ASAN. -#if BUILDFLAG(IS_MAC) -#define MAYBE_WebAppIntegration_31SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_46SiteA_7SiteA_12SiteA_1SiteA_24 \ - DISABLED_WebAppIntegration_31SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_46SiteA_7SiteA_12SiteA_1SiteA_24 -#else -#define MAYBE_WebAppIntegration_31SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_46SiteA_7SiteA_12SiteA_1SiteA_24 \ - WebAppIntegration_31SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_46SiteA_7SiteA_12SiteA_1SiteA_24 -#endif -IN_PROC_BROWSER_TEST_F( - TwoClientWebAppsIntegrationTestMacWinLinux, - MAYBE_WebAppIntegration_31SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_46SiteA_7SiteA_12SiteA_1SiteA_24) { - // 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. - helper_.InstallOmniboxIcon(InstallableSite::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.SwitchProfileClients(ProfileClient::kClient2); - helper_.CheckAppInListNotLocallyInstalled(Site::kSiteA); - helper_.InstallLocally(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.LaunchFromPlatformShortcut(Site::kSiteA); - helper_.CheckWindowCreated(); -} - -// TODO(crbug.com/1301414): Mac shims failing to launch on Mac debug and ASAN. -#if BUILDFLAG(IS_MAC) -#define MAYBE_WebAppIntegration_31SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_34SiteA_22 \ - DISABLED_WebAppIntegration_31SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_34SiteA_22 -#else -#define MAYBE_WebAppIntegration_31SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_34SiteA_22 \ - WebAppIntegration_31SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_34SiteA_22 -#endif -IN_PROC_BROWSER_TEST_F( - TwoClientWebAppsIntegrationTestMacWinLinux, - MAYBE_WebAppIntegration_31SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_34SiteA_22) { - // 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. - helper_.InstallOmniboxIcon(InstallableSite::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.SwitchProfileClients(ProfileClient::kClient2); - helper_.CheckAppInListNotLocallyInstalled(Site::kSiteA); - helper_.LaunchFromChromeApps(Site::kSiteA); - helper_.CheckTabCreated(); -} - -// TODO(crbug.com/1301414): Mac shims failing to launch on Mac debug and ASAN. -#if BUILDFLAG(IS_MAC) -#define MAYBE_WebAppIntegration_31SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_1SiteA_22 \ - DISABLED_WebAppIntegration_31SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_1SiteA_22 -#else -#define MAYBE_WebAppIntegration_31SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_1SiteA_22 \ - WebAppIntegration_31SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_1SiteA_22 -#endif -IN_PROC_BROWSER_TEST_F( - TwoClientWebAppsIntegrationTestMacWinLinux, - MAYBE_WebAppIntegration_31SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_1SiteA_22) { - // 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. - helper_.InstallOmniboxIcon(InstallableSite::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.SwitchProfileClients(ProfileClient::kClient2); - helper_.CheckAppInListNotLocallyInstalled(Site::kSiteA); - helper_.LaunchFromPlatformShortcut(Site::kSiteA); - helper_.CheckTabCreated(); -} - -// TODO(crbug.com/1301414): Mac shims failing to launch on Mac debug and ASAN. -#if BUILDFLAG(IS_MAC) -#define MAYBE_WebAppIntegration_31SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_37SiteA_18_19 \ - DISABLED_WebAppIntegration_31SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_37SiteA_18_19 -#else -#define MAYBE_WebAppIntegration_31SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_37SiteA_18_19 \ - WebAppIntegration_31SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_37SiteA_18_19 -#endif -IN_PROC_BROWSER_TEST_F( - TwoClientWebAppsIntegrationTestMacWinLinux, - MAYBE_WebAppIntegration_31SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_37SiteA_18_19) { - // 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. - helper_.InstallOmniboxIcon(InstallableSite::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.SwitchProfileClients(ProfileClient::kClient2); - helper_.CheckAppInListNotLocallyInstalled(Site::kSiteA); - helper_.NavigateBrowser(Site::kSiteA); - helper_.CheckInstallIconShown(); - helper_.CheckLaunchIconNotShown(); -} - -// TODO(crbug.com/1301414): Mac shims failing to launch on Mac debug and ASAN. -#if BUILDFLAG(IS_MAC) -#define MAYBE_WebAppIntegration_31SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_41_10SiteA_42_45SiteA \ - DISABLED_WebAppIntegration_31SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_41_10SiteA_42_45SiteA -#else -#define MAYBE_WebAppIntegration_31SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_41_10SiteA_42_45SiteA \ - WebAppIntegration_31SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_41_10SiteA_42_45SiteA -#endif -IN_PROC_BROWSER_TEST_F( - TwoClientWebAppsIntegrationTestMacWinLinux, - MAYBE_WebAppIntegration_31SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_41_10SiteA_42_45SiteA) { - // 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. - helper_.InstallOmniboxIcon(InstallableSite::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.SwitchProfileClients(ProfileClient::kClient2); - helper_.CheckAppInListNotLocallyInstalled(Site::kSiteA); - helper_.SyncTurnOff(); - helper_.UninstallFromList(Site::kSiteA); - helper_.SyncTurnOn(); - helper_.CheckAppInListNotLocallyInstalled(Site::kSiteA); -} - -// TODO(crbug.com/1301414): Mac shims failing to launch on Mac debug and ASAN. -#if BUILDFLAG(IS_MAC) -#define MAYBE_WebAppIntegration_31SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_41_43SiteA_42_45SiteA \ - DISABLED_WebAppIntegration_31SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_41_43SiteA_42_45SiteA -#else -#define MAYBE_WebAppIntegration_31SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_41_43SiteA_42_45SiteA \ - WebAppIntegration_31SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_41_43SiteA_42_45SiteA -#endif -IN_PROC_BROWSER_TEST_F( - TwoClientWebAppsIntegrationTestMacWinLinux, - MAYBE_WebAppIntegration_31SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_41_43SiteA_42_45SiteA) { - // 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. - helper_.InstallOmniboxIcon(InstallableSite::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.SwitchProfileClients(ProfileClient::kClient2); - helper_.CheckAppInListNotLocallyInstalled(Site::kSiteA); - helper_.SyncTurnOff(); - helper_.UninstallFromMenu(Site::kSiteA); - helper_.SyncTurnOn(); - helper_.CheckAppInListNotLocallyInstalled(Site::kSiteA); -} - -// TODO(crbug.com/1301414): Mac shims failing to launch on Mac debug and ASAN. -#if BUILDFLAG(IS_MAC) -#define MAYBE_WebAppIntegration_31SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_10SiteA_15SiteA_40Client1_15SiteA \ - DISABLED_WebAppIntegration_31SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_10SiteA_15SiteA_40Client1_15SiteA -#else -#define MAYBE_WebAppIntegration_31SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_10SiteA_15SiteA_40Client1_15SiteA \ - WebAppIntegration_31SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_10SiteA_15SiteA_40Client1_15SiteA -#endif -IN_PROC_BROWSER_TEST_F( - TwoClientWebAppsIntegrationTestMacWinLinux, - MAYBE_WebAppIntegration_31SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_10SiteA_15SiteA_40Client1_15SiteA) { - // 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. - helper_.InstallOmniboxIcon(InstallableSite::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.SwitchProfileClients(ProfileClient::kClient2); - helper_.CheckAppInListNotLocallyInstalled(Site::kSiteA); - helper_.UninstallFromList(Site::kSiteA); - helper_.CheckAppNotInList(Site::kSiteA); - helper_.SwitchProfileClients(ProfileClient::kClient1); - helper_.CheckAppNotInList(Site::kSiteA); -} - -// TODO(crbug.com/1301414): Mac shims failing to launch on Mac debug and ASAN. -#if BUILDFLAG(IS_MAC) -#define MAYBE_WebAppIntegration_47SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_46SiteA_7SiteA_12SiteA_37SiteA_17_20 \ - DISABLED_WebAppIntegration_47SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_46SiteA_7SiteA_12SiteA_37SiteA_17_20 -#else -#define MAYBE_WebAppIntegration_47SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_46SiteA_7SiteA_12SiteA_37SiteA_17_20 \ - WebAppIntegration_47SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_46SiteA_7SiteA_12SiteA_37SiteA_17_20 -#endif -IN_PROC_BROWSER_TEST_F( - TwoClientWebAppsIntegrationTestMacWinLinux, - MAYBE_WebAppIntegration_47SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_46SiteA_7SiteA_12SiteA_37SiteA_17_20) { - // 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. - helper_.InstallMenuOption(InstallableSite::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.SwitchProfileClients(ProfileClient::kClient2); - helper_.CheckAppInListNotLocallyInstalled(Site::kSiteA); - helper_.InstallLocally(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.NavigateBrowser(Site::kSiteA); - helper_.CheckInstallIconNotShown(); - helper_.CheckLaunchIconShown(); -} - -// TODO(crbug.com/1301414): Mac shims failing to launch on Mac debug and ASAN. -#if BUILDFLAG(IS_MAC) -#define MAYBE_WebAppIntegration_47SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_46SiteA_7SiteA_12SiteA_69SiteA_24 \ - DISABLED_WebAppIntegration_47SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_46SiteA_7SiteA_12SiteA_69SiteA_24 -#else -#define MAYBE_WebAppIntegration_47SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_46SiteA_7SiteA_12SiteA_69SiteA_24 \ - WebAppIntegration_47SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_46SiteA_7SiteA_12SiteA_69SiteA_24 -#endif -IN_PROC_BROWSER_TEST_F( - TwoClientWebAppsIntegrationTestMacWinLinux, - MAYBE_WebAppIntegration_47SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_46SiteA_7SiteA_12SiteA_69SiteA_24) { - // 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. - helper_.InstallMenuOption(InstallableSite::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.SwitchProfileClients(ProfileClient::kClient2); - helper_.CheckAppInListNotLocallyInstalled(Site::kSiteA); - helper_.InstallLocally(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.LaunchFromMenuOption(Site::kSiteA); - helper_.CheckWindowCreated(); -} - -// TODO(crbug.com/1301414): Mac shims failing to launch on Mac debug and ASAN. -#if BUILDFLAG(IS_MAC) -#define MAYBE_WebAppIntegration_47SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_46SiteA_7SiteA_12SiteA_35SiteA_24 \ - DISABLED_WebAppIntegration_47SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_46SiteA_7SiteA_12SiteA_35SiteA_24 -#else -#define MAYBE_WebAppIntegration_47SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_46SiteA_7SiteA_12SiteA_35SiteA_24 \ - WebAppIntegration_47SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_46SiteA_7SiteA_12SiteA_35SiteA_24 -#endif -IN_PROC_BROWSER_TEST_F( - TwoClientWebAppsIntegrationTestMacWinLinux, - MAYBE_WebAppIntegration_47SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_46SiteA_7SiteA_12SiteA_35SiteA_24) { - // 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. - helper_.InstallMenuOption(InstallableSite::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.SwitchProfileClients(ProfileClient::kClient2); - helper_.CheckAppInListNotLocallyInstalled(Site::kSiteA); - helper_.InstallLocally(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.LaunchFromLaunchIcon(Site::kSiteA); - helper_.CheckWindowCreated(); -} - -// TODO(crbug.com/1301414): Mac shims failing to launch on Mac debug and ASAN. -#if BUILDFLAG(IS_MAC) -#define MAYBE_WebAppIntegration_47SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_46SiteA_7SiteA_12SiteA_34SiteA_24 \ - DISABLED_WebAppIntegration_47SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_46SiteA_7SiteA_12SiteA_34SiteA_24 -#else -#define MAYBE_WebAppIntegration_47SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_46SiteA_7SiteA_12SiteA_34SiteA_24 \ - WebAppIntegration_47SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_46SiteA_7SiteA_12SiteA_34SiteA_24 -#endif -IN_PROC_BROWSER_TEST_F( - TwoClientWebAppsIntegrationTestMacWinLinux, - MAYBE_WebAppIntegration_47SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_46SiteA_7SiteA_12SiteA_34SiteA_24) { - // 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. - helper_.InstallMenuOption(InstallableSite::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.SwitchProfileClients(ProfileClient::kClient2); - helper_.CheckAppInListNotLocallyInstalled(Site::kSiteA); - helper_.InstallLocally(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.LaunchFromChromeApps(Site::kSiteA); - helper_.CheckWindowCreated(); -} - -// TODO(crbug.com/1301414): Mac shims failing to launch on Mac debug and ASAN. -#if BUILDFLAG(IS_MAC) -#define MAYBE_WebAppIntegration_47SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_46SiteA_7SiteA_12SiteA_1SiteA_24 \ - DISABLED_WebAppIntegration_47SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_46SiteA_7SiteA_12SiteA_1SiteA_24 -#else -#define MAYBE_WebAppIntegration_47SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_46SiteA_7SiteA_12SiteA_1SiteA_24 \ - WebAppIntegration_47SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_46SiteA_7SiteA_12SiteA_1SiteA_24 -#endif -IN_PROC_BROWSER_TEST_F( - TwoClientWebAppsIntegrationTestMacWinLinux, - MAYBE_WebAppIntegration_47SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_46SiteA_7SiteA_12SiteA_1SiteA_24) { - // 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. - helper_.InstallMenuOption(InstallableSite::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.SwitchProfileClients(ProfileClient::kClient2); - helper_.CheckAppInListNotLocallyInstalled(Site::kSiteA); - helper_.InstallLocally(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.LaunchFromPlatformShortcut(Site::kSiteA); - helper_.CheckWindowCreated(); -} - -// TODO(crbug.com/1301414): Mac shims failing to launch on Mac debug and ASAN. -#if BUILDFLAG(IS_MAC) -#define MAYBE_WebAppIntegration_47SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_34SiteA_22 \ - DISABLED_WebAppIntegration_47SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_34SiteA_22 -#else -#define MAYBE_WebAppIntegration_47SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_34SiteA_22 \ - WebAppIntegration_47SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_34SiteA_22 -#endif -IN_PROC_BROWSER_TEST_F( - TwoClientWebAppsIntegrationTestMacWinLinux, - MAYBE_WebAppIntegration_47SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_34SiteA_22) { - // 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. - helper_.InstallMenuOption(InstallableSite::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.SwitchProfileClients(ProfileClient::kClient2); - helper_.CheckAppInListNotLocallyInstalled(Site::kSiteA); - helper_.LaunchFromChromeApps(Site::kSiteA); - helper_.CheckTabCreated(); -} - -// TODO(crbug.com/1301414): Mac shims failing to launch on Mac debug and ASAN. -#if BUILDFLAG(IS_MAC) -#define MAYBE_WebAppIntegration_47SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_1SiteA_22 \ - DISABLED_WebAppIntegration_47SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_1SiteA_22 -#else -#define MAYBE_WebAppIntegration_47SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_1SiteA_22 \ - WebAppIntegration_47SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_1SiteA_22 -#endif -IN_PROC_BROWSER_TEST_F( - TwoClientWebAppsIntegrationTestMacWinLinux, - MAYBE_WebAppIntegration_47SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_1SiteA_22) { - // 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. - helper_.InstallMenuOption(InstallableSite::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.SwitchProfileClients(ProfileClient::kClient2); - helper_.CheckAppInListNotLocallyInstalled(Site::kSiteA); - helper_.LaunchFromPlatformShortcut(Site::kSiteA); - helper_.CheckTabCreated(); -} - -// TODO(crbug.com/1301414): Mac shims failing to launch on Mac debug and ASAN. -#if BUILDFLAG(IS_MAC) -#define MAYBE_WebAppIntegration_47SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_37SiteA_18_19 \ - DISABLED_WebAppIntegration_47SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_37SiteA_18_19 -#else -#define MAYBE_WebAppIntegration_47SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_37SiteA_18_19 \ - WebAppIntegration_47SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_37SiteA_18_19 -#endif -IN_PROC_BROWSER_TEST_F( - TwoClientWebAppsIntegrationTestMacWinLinux, - MAYBE_WebAppIntegration_47SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_37SiteA_18_19) { - // 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. - helper_.InstallMenuOption(InstallableSite::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.SwitchProfileClients(ProfileClient::kClient2); - helper_.CheckAppInListNotLocallyInstalled(Site::kSiteA); - helper_.NavigateBrowser(Site::kSiteA); - helper_.CheckInstallIconShown(); - helper_.CheckLaunchIconNotShown(); -} - -// TODO(crbug.com/1301414): Mac shims failing to launch on Mac debug and ASAN. -#if BUILDFLAG(IS_MAC) -#define MAYBE_WebAppIntegration_47SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_41_10SiteA_42_45SiteA \ - DISABLED_WebAppIntegration_47SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_41_10SiteA_42_45SiteA -#else -#define MAYBE_WebAppIntegration_47SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_41_10SiteA_42_45SiteA \ - WebAppIntegration_47SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_41_10SiteA_42_45SiteA -#endif -IN_PROC_BROWSER_TEST_F( - TwoClientWebAppsIntegrationTestMacWinLinux, - MAYBE_WebAppIntegration_47SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_41_10SiteA_42_45SiteA) { - // 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. - helper_.InstallMenuOption(InstallableSite::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.SwitchProfileClients(ProfileClient::kClient2); - helper_.CheckAppInListNotLocallyInstalled(Site::kSiteA); - helper_.SyncTurnOff(); - helper_.UninstallFromList(Site::kSiteA); - helper_.SyncTurnOn(); - helper_.CheckAppInListNotLocallyInstalled(Site::kSiteA); -} - -// TODO(crbug.com/1301414): Mac shims failing to launch on Mac debug and ASAN. -#if BUILDFLAG(IS_MAC) -#define MAYBE_WebAppIntegration_47SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_41_43SiteA_42_45SiteA \ - DISABLED_WebAppIntegration_47SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_41_43SiteA_42_45SiteA -#else -#define MAYBE_WebAppIntegration_47SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_41_43SiteA_42_45SiteA \ - WebAppIntegration_47SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_41_43SiteA_42_45SiteA -#endif -IN_PROC_BROWSER_TEST_F( - TwoClientWebAppsIntegrationTestMacWinLinux, - MAYBE_WebAppIntegration_47SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_41_43SiteA_42_45SiteA) { - // 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. - helper_.InstallMenuOption(InstallableSite::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.SwitchProfileClients(ProfileClient::kClient2); - helper_.CheckAppInListNotLocallyInstalled(Site::kSiteA); - helper_.SyncTurnOff(); - helper_.UninstallFromMenu(Site::kSiteA); - helper_.SyncTurnOn(); - helper_.CheckAppInListNotLocallyInstalled(Site::kSiteA); -} - -// TODO(crbug.com/1301414): Mac shims failing to launch on Mac debug and ASAN. -#if BUILDFLAG(IS_MAC) -#define MAYBE_WebAppIntegration_47SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_10SiteA_15SiteA_40Client1_15SiteA \ - DISABLED_WebAppIntegration_47SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_10SiteA_15SiteA_40Client1_15SiteA -#else -#define MAYBE_WebAppIntegration_47SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_10SiteA_15SiteA_40Client1_15SiteA \ - WebAppIntegration_47SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_10SiteA_15SiteA_40Client1_15SiteA -#endif -IN_PROC_BROWSER_TEST_F( - TwoClientWebAppsIntegrationTestMacWinLinux, - MAYBE_WebAppIntegration_47SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_10SiteA_15SiteA_40Client1_15SiteA) { - // 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. - helper_.InstallMenuOption(InstallableSite::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.SwitchProfileClients(ProfileClient::kClient2); - helper_.CheckAppInListNotLocallyInstalled(Site::kSiteA); - helper_.UninstallFromList(Site::kSiteA); - helper_.CheckAppNotInList(Site::kSiteA); - helper_.SwitchProfileClients(ProfileClient::kClient1); - helper_.CheckAppNotInList(Site::kSiteA); -} - IN_PROC_BROWSER_TEST_F( TwoClientWebAppsIntegrationTestMacWinLinux, WebAppIntegration_29SiteA_11SiteA_7SiteA_40Client2_45SiteA_46SiteA_7SiteA_11SiteA_37SiteA_18_19) { @@ -1188,15 +333,15 @@ // TODO(crbug.com/1301414): Mac shims failing to launch on Mac debug and ASAN. #if BUILDFLAG(IS_MAC) -#define MAYBE_WebAppIntegration_30SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_40Client1_41_10SiteA_40Client2_102SiteA_107SiteA_46SiteA_106SiteA \ - DISABLED_WebAppIntegration_30SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_40Client1_41_10SiteA_40Client2_102SiteA_107SiteA_46SiteA_106SiteA +#define MAYBE_WebAppIntegration_30SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_40Client1_41_10SiteA_40Client2_102SiteA_107SiteA_46SiteA_106SiteA \ + DISABLED_WebAppIntegration_30SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_40Client1_41_10SiteA_40Client2_102SiteA_107SiteA_46SiteA_106SiteA #else -#define MAYBE_WebAppIntegration_30SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_40Client1_41_10SiteA_40Client2_102SiteA_107SiteA_46SiteA_106SiteA \ - WebAppIntegration_30SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_40Client1_41_10SiteA_40Client2_102SiteA_107SiteA_46SiteA_106SiteA +#define MAYBE_WebAppIntegration_30SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_40Client1_41_10SiteA_40Client2_102SiteA_107SiteA_46SiteA_106SiteA \ + WebAppIntegration_30SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_40Client1_41_10SiteA_40Client2_102SiteA_107SiteA_46SiteA_106SiteA #endif IN_PROC_BROWSER_TEST_F( TwoClientWebAppsIntegrationTestMacWinLinux, - MAYBE_WebAppIntegration_30SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_40Client1_41_10SiteA_40Client2_102SiteA_107SiteA_46SiteA_106SiteA) { + MAYBE_WebAppIntegration_30SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_40Client1_41_10SiteA_40Client2_102SiteA_107SiteA_46SiteA_106SiteA) { // 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. @@ -1204,6 +349,7 @@ helper_.CheckWindowCreated(); helper_.CheckAppInListWindowed(Site::kSiteA); helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); helper_.SwitchProfileClients(ProfileClient::kClient2); helper_.CheckAppInListNotLocallyInstalled(Site::kSiteA); helper_.SwitchProfileClients(ProfileClient::kClient1); @@ -1218,15 +364,15 @@ // TODO(crbug.com/1301414): Mac shims failing to launch on Mac debug and ASAN. #if BUILDFLAG(IS_MAC) -#define MAYBE_WebAppIntegration_30SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_40Client1_41_43SiteA_40Client2_102SiteA_107SiteA_46SiteA_106SiteA \ - DISABLED_WebAppIntegration_30SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_40Client1_41_43SiteA_40Client2_102SiteA_107SiteA_46SiteA_106SiteA +#define MAYBE_WebAppIntegration_30SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_40Client1_41_43SiteA_40Client2_102SiteA_107SiteA_46SiteA_106SiteA \ + DISABLED_WebAppIntegration_30SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_40Client1_41_43SiteA_40Client2_102SiteA_107SiteA_46SiteA_106SiteA #else -#define MAYBE_WebAppIntegration_30SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_40Client1_41_43SiteA_40Client2_102SiteA_107SiteA_46SiteA_106SiteA \ - WebAppIntegration_30SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_40Client1_41_43SiteA_40Client2_102SiteA_107SiteA_46SiteA_106SiteA +#define MAYBE_WebAppIntegration_30SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_40Client1_41_43SiteA_40Client2_102SiteA_107SiteA_46SiteA_106SiteA \ + WebAppIntegration_30SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_40Client1_41_43SiteA_40Client2_102SiteA_107SiteA_46SiteA_106SiteA #endif IN_PROC_BROWSER_TEST_F( TwoClientWebAppsIntegrationTestMacWinLinux, - MAYBE_WebAppIntegration_30SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_40Client1_41_43SiteA_40Client2_102SiteA_107SiteA_46SiteA_106SiteA) { + MAYBE_WebAppIntegration_30SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_40Client1_41_43SiteA_40Client2_102SiteA_107SiteA_46SiteA_106SiteA) { // 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. @@ -1234,6 +380,7 @@ helper_.CheckWindowCreated(); helper_.CheckAppInListWindowed(Site::kSiteA); helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); helper_.SwitchProfileClients(ProfileClient::kClient2); helper_.CheckAppInListNotLocallyInstalled(Site::kSiteA); helper_.SwitchProfileClients(ProfileClient::kClient1); @@ -1248,15 +395,15 @@ // TODO(crbug.com/1301414): Mac shims failing to launch on Mac debug and ASAN. #if BUILDFLAG(IS_MAC) -#define MAYBE_WebAppIntegration_30SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_40Client1_41_98SiteA_40Client2_102SiteA_107SiteA_46SiteA_106SiteA \ - DISABLED_WebAppIntegration_30SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_40Client1_41_98SiteA_40Client2_102SiteA_107SiteA_46SiteA_106SiteA +#define MAYBE_WebAppIntegration_30SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_40Client1_41_98SiteA_40Client2_102SiteA_107SiteA_46SiteA_106SiteA \ + DISABLED_WebAppIntegration_30SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_40Client1_41_98SiteA_40Client2_102SiteA_107SiteA_46SiteA_106SiteA #else -#define MAYBE_WebAppIntegration_30SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_40Client1_41_98SiteA_40Client2_102SiteA_107SiteA_46SiteA_106SiteA \ - WebAppIntegration_30SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_40Client1_41_98SiteA_40Client2_102SiteA_107SiteA_46SiteA_106SiteA +#define MAYBE_WebAppIntegration_30SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_40Client1_41_98SiteA_40Client2_102SiteA_107SiteA_46SiteA_106SiteA \ + WebAppIntegration_30SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_40Client1_41_98SiteA_40Client2_102SiteA_107SiteA_46SiteA_106SiteA #endif IN_PROC_BROWSER_TEST_F( TwoClientWebAppsIntegrationTestMacWinLinux, - MAYBE_WebAppIntegration_30SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_40Client1_41_98SiteA_40Client2_102SiteA_107SiteA_46SiteA_106SiteA) { + MAYBE_WebAppIntegration_30SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_40Client1_41_98SiteA_40Client2_102SiteA_107SiteA_46SiteA_106SiteA) { // 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. @@ -1264,6 +411,7 @@ helper_.CheckWindowCreated(); helper_.CheckAppInListWindowed(Site::kSiteA); helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); helper_.SwitchProfileClients(ProfileClient::kClient2); helper_.CheckAppInListNotLocallyInstalled(Site::kSiteA); helper_.SwitchProfileClients(ProfileClient::kClient1); @@ -1278,15 +426,313 @@ // TODO(crbug.com/1301414): Mac shims failing to launch on Mac debug and ASAN. #if BUILDFLAG(IS_MAC) -#define MAYBE_WebAppIntegration_31SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_40Client1_41_10SiteA_40Client2_102SiteA_107SiteA_46SiteA_106SiteA \ - DISABLED_WebAppIntegration_31SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_40Client1_41_10SiteA_40Client2_102SiteA_107SiteA_46SiteA_106SiteA +#define MAYBE_WebAppIntegration_30SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_46SiteA_7SiteA_12SiteA_37SiteA_17_20 \ + DISABLED_WebAppIntegration_30SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_46SiteA_7SiteA_12SiteA_37SiteA_17_20 #else -#define MAYBE_WebAppIntegration_31SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_40Client1_41_10SiteA_40Client2_102SiteA_107SiteA_46SiteA_106SiteA \ - WebAppIntegration_31SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_40Client1_41_10SiteA_40Client2_102SiteA_107SiteA_46SiteA_106SiteA +#define MAYBE_WebAppIntegration_30SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_46SiteA_7SiteA_12SiteA_37SiteA_17_20 \ + WebAppIntegration_30SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_46SiteA_7SiteA_12SiteA_37SiteA_17_20 #endif IN_PROC_BROWSER_TEST_F( TwoClientWebAppsIntegrationTestMacWinLinux, - MAYBE_WebAppIntegration_31SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_40Client1_41_10SiteA_40Client2_102SiteA_107SiteA_46SiteA_106SiteA) { + MAYBE_WebAppIntegration_30SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_46SiteA_7SiteA_12SiteA_37SiteA_17_20) { + // 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. + helper_.InstallCreateShortcutWindowed(Site::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.SwitchProfileClients(ProfileClient::kClient2); + helper_.CheckAppInListNotLocallyInstalled(Site::kSiteA); + helper_.InstallLocally(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.NavigateBrowser(Site::kSiteA); + helper_.CheckInstallIconNotShown(); + helper_.CheckLaunchIconShown(); +} + +// TODO(crbug.com/1301414): Mac shims failing to launch on Mac debug and ASAN. +#if BUILDFLAG(IS_MAC) +#define MAYBE_WebAppIntegration_30SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_46SiteA_7SiteA_12SiteA_69SiteA_24 \ + DISABLED_WebAppIntegration_30SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_46SiteA_7SiteA_12SiteA_69SiteA_24 +#else +#define MAYBE_WebAppIntegration_30SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_46SiteA_7SiteA_12SiteA_69SiteA_24 \ + WebAppIntegration_30SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_46SiteA_7SiteA_12SiteA_69SiteA_24 +#endif +IN_PROC_BROWSER_TEST_F( + TwoClientWebAppsIntegrationTestMacWinLinux, + MAYBE_WebAppIntegration_30SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_46SiteA_7SiteA_12SiteA_69SiteA_24) { + // 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. + helper_.InstallCreateShortcutWindowed(Site::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.SwitchProfileClients(ProfileClient::kClient2); + helper_.CheckAppInListNotLocallyInstalled(Site::kSiteA); + helper_.InstallLocally(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.LaunchFromMenuOption(Site::kSiteA); + helper_.CheckWindowCreated(); +} + +// TODO(crbug.com/1301414): Mac shims failing to launch on Mac debug and ASAN. +#if BUILDFLAG(IS_MAC) +#define MAYBE_WebAppIntegration_30SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_46SiteA_7SiteA_12SiteA_35SiteA_24 \ + DISABLED_WebAppIntegration_30SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_46SiteA_7SiteA_12SiteA_35SiteA_24 +#else +#define MAYBE_WebAppIntegration_30SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_46SiteA_7SiteA_12SiteA_35SiteA_24 \ + WebAppIntegration_30SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_46SiteA_7SiteA_12SiteA_35SiteA_24 +#endif +IN_PROC_BROWSER_TEST_F( + TwoClientWebAppsIntegrationTestMacWinLinux, + MAYBE_WebAppIntegration_30SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_46SiteA_7SiteA_12SiteA_35SiteA_24) { + // 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. + helper_.InstallCreateShortcutWindowed(Site::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.SwitchProfileClients(ProfileClient::kClient2); + helper_.CheckAppInListNotLocallyInstalled(Site::kSiteA); + helper_.InstallLocally(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.LaunchFromLaunchIcon(Site::kSiteA); + helper_.CheckWindowCreated(); +} + +// TODO(crbug.com/1301414): Mac shims failing to launch on Mac debug and ASAN. +#if BUILDFLAG(IS_MAC) +#define MAYBE_WebAppIntegration_30SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_46SiteA_7SiteA_12SiteA_34SiteA_24 \ + DISABLED_WebAppIntegration_30SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_46SiteA_7SiteA_12SiteA_34SiteA_24 +#else +#define MAYBE_WebAppIntegration_30SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_46SiteA_7SiteA_12SiteA_34SiteA_24 \ + WebAppIntegration_30SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_46SiteA_7SiteA_12SiteA_34SiteA_24 +#endif +IN_PROC_BROWSER_TEST_F( + TwoClientWebAppsIntegrationTestMacWinLinux, + MAYBE_WebAppIntegration_30SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_46SiteA_7SiteA_12SiteA_34SiteA_24) { + // 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. + helper_.InstallCreateShortcutWindowed(Site::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.SwitchProfileClients(ProfileClient::kClient2); + helper_.CheckAppInListNotLocallyInstalled(Site::kSiteA); + helper_.InstallLocally(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.LaunchFromChromeApps(Site::kSiteA); + helper_.CheckWindowCreated(); +} + +// TODO(crbug.com/1301414): Mac shims failing to launch on Mac debug and ASAN. +#if BUILDFLAG(IS_MAC) +#define MAYBE_WebAppIntegration_30SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_46SiteA_7SiteA_12SiteA_1SiteA_24 \ + DISABLED_WebAppIntegration_30SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_46SiteA_7SiteA_12SiteA_1SiteA_24 +#else +#define MAYBE_WebAppIntegration_30SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_46SiteA_7SiteA_12SiteA_1SiteA_24 \ + WebAppIntegration_30SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_46SiteA_7SiteA_12SiteA_1SiteA_24 +#endif +IN_PROC_BROWSER_TEST_F( + TwoClientWebAppsIntegrationTestMacWinLinux, + MAYBE_WebAppIntegration_30SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_46SiteA_7SiteA_12SiteA_1SiteA_24) { + // 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. + helper_.InstallCreateShortcutWindowed(Site::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.SwitchProfileClients(ProfileClient::kClient2); + helper_.CheckAppInListNotLocallyInstalled(Site::kSiteA); + helper_.InstallLocally(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.LaunchFromPlatformShortcut(Site::kSiteA); + helper_.CheckWindowCreated(); +} + +// TODO(crbug.com/1301414): Mac shims failing to launch on Mac debug and ASAN. +#if BUILDFLAG(IS_MAC) +#define MAYBE_WebAppIntegration_30SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_34SiteA_22 \ + DISABLED_WebAppIntegration_30SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_34SiteA_22 +#else +#define MAYBE_WebAppIntegration_30SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_34SiteA_22 \ + WebAppIntegration_30SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_34SiteA_22 +#endif +IN_PROC_BROWSER_TEST_F( + TwoClientWebAppsIntegrationTestMacWinLinux, + MAYBE_WebAppIntegration_30SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_34SiteA_22) { + // 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. + helper_.InstallCreateShortcutWindowed(Site::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.SwitchProfileClients(ProfileClient::kClient2); + helper_.CheckAppInListNotLocallyInstalled(Site::kSiteA); + helper_.LaunchFromChromeApps(Site::kSiteA); + helper_.CheckTabCreated(); +} + +// TODO(crbug.com/1301414): Mac shims failing to launch on Mac debug and ASAN. +#if BUILDFLAG(IS_MAC) +#define MAYBE_WebAppIntegration_30SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_1SiteA_22 \ + DISABLED_WebAppIntegration_30SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_1SiteA_22 +#else +#define MAYBE_WebAppIntegration_30SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_1SiteA_22 \ + WebAppIntegration_30SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_1SiteA_22 +#endif +IN_PROC_BROWSER_TEST_F( + TwoClientWebAppsIntegrationTestMacWinLinux, + MAYBE_WebAppIntegration_30SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_1SiteA_22) { + // 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. + helper_.InstallCreateShortcutWindowed(Site::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.SwitchProfileClients(ProfileClient::kClient2); + helper_.CheckAppInListNotLocallyInstalled(Site::kSiteA); + helper_.LaunchFromPlatformShortcut(Site::kSiteA); + helper_.CheckTabCreated(); +} + +// TODO(crbug.com/1301414): Mac shims failing to launch on Mac debug and ASAN. +#if BUILDFLAG(IS_MAC) +#define MAYBE_WebAppIntegration_30SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_10SiteA_15SiteA_40Client1_15SiteA \ + DISABLED_WebAppIntegration_30SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_10SiteA_15SiteA_40Client1_15SiteA +#else +#define MAYBE_WebAppIntegration_30SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_10SiteA_15SiteA_40Client1_15SiteA \ + WebAppIntegration_30SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_10SiteA_15SiteA_40Client1_15SiteA +#endif +IN_PROC_BROWSER_TEST_F( + TwoClientWebAppsIntegrationTestMacWinLinux, + MAYBE_WebAppIntegration_30SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_10SiteA_15SiteA_40Client1_15SiteA) { + // 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. + helper_.InstallCreateShortcutWindowed(Site::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.SwitchProfileClients(ProfileClient::kClient2); + helper_.CheckAppInListNotLocallyInstalled(Site::kSiteA); + helper_.UninstallFromList(Site::kSiteA); + helper_.CheckAppNotInList(Site::kSiteA); + helper_.SwitchProfileClients(ProfileClient::kClient1); + helper_.CheckAppNotInList(Site::kSiteA); +} + +// TODO(crbug.com/1301414): Mac shims failing to launch on Mac debug and ASAN. +#if BUILDFLAG(IS_MAC) +#define MAYBE_WebAppIntegration_30SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_37SiteA_18_19 \ + DISABLED_WebAppIntegration_30SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_37SiteA_18_19 +#else +#define MAYBE_WebAppIntegration_30SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_37SiteA_18_19 \ + WebAppIntegration_30SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_37SiteA_18_19 +#endif +IN_PROC_BROWSER_TEST_F( + TwoClientWebAppsIntegrationTestMacWinLinux, + MAYBE_WebAppIntegration_30SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_37SiteA_18_19) { + // 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. + helper_.InstallCreateShortcutWindowed(Site::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.SwitchProfileClients(ProfileClient::kClient2); + helper_.CheckAppInListNotLocallyInstalled(Site::kSiteA); + helper_.NavigateBrowser(Site::kSiteA); + helper_.CheckInstallIconShown(); + helper_.CheckLaunchIconNotShown(); +} + +// TODO(crbug.com/1301414): Mac shims failing to launch on Mac debug and ASAN. +#if BUILDFLAG(IS_MAC) +#define MAYBE_WebAppIntegration_30SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_41_10SiteA_42_45SiteA \ + DISABLED_WebAppIntegration_30SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_41_10SiteA_42_45SiteA +#else +#define MAYBE_WebAppIntegration_30SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_41_10SiteA_42_45SiteA \ + WebAppIntegration_30SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_41_10SiteA_42_45SiteA +#endif +IN_PROC_BROWSER_TEST_F( + TwoClientWebAppsIntegrationTestMacWinLinux, + MAYBE_WebAppIntegration_30SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_41_10SiteA_42_45SiteA) { + // 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. + helper_.InstallCreateShortcutWindowed(Site::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.SwitchProfileClients(ProfileClient::kClient2); + helper_.CheckAppInListNotLocallyInstalled(Site::kSiteA); + helper_.SyncTurnOff(); + helper_.UninstallFromList(Site::kSiteA); + helper_.SyncTurnOn(); + helper_.CheckAppInListNotLocallyInstalled(Site::kSiteA); +} + +// TODO(crbug.com/1301414): Mac shims failing to launch on Mac debug and ASAN. +#if BUILDFLAG(IS_MAC) +#define MAYBE_WebAppIntegration_30SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_41_43SiteA_42_45SiteA \ + DISABLED_WebAppIntegration_30SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_41_43SiteA_42_45SiteA +#else +#define MAYBE_WebAppIntegration_30SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_41_43SiteA_42_45SiteA \ + WebAppIntegration_30SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_41_43SiteA_42_45SiteA +#endif +IN_PROC_BROWSER_TEST_F( + TwoClientWebAppsIntegrationTestMacWinLinux, + MAYBE_WebAppIntegration_30SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_41_43SiteA_42_45SiteA) { + // 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. + helper_.InstallCreateShortcutWindowed(Site::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.SwitchProfileClients(ProfileClient::kClient2); + helper_.CheckAppInListNotLocallyInstalled(Site::kSiteA); + helper_.SyncTurnOff(); + helper_.UninstallFromMenu(Site::kSiteA); + helper_.SyncTurnOn(); + helper_.CheckAppInListNotLocallyInstalled(Site::kSiteA); +} + +// TODO(crbug.com/1301414): Mac shims failing to launch on Mac debug and ASAN. +#if BUILDFLAG(IS_MAC) +#define MAYBE_WebAppIntegration_31SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_40Client1_41_10SiteA_40Client2_102SiteA_107SiteA_46SiteA_106SiteA \ + DISABLED_WebAppIntegration_31SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_40Client1_41_10SiteA_40Client2_102SiteA_107SiteA_46SiteA_106SiteA +#else +#define MAYBE_WebAppIntegration_31SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_40Client1_41_10SiteA_40Client2_102SiteA_107SiteA_46SiteA_106SiteA \ + WebAppIntegration_31SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_40Client1_41_10SiteA_40Client2_102SiteA_107SiteA_46SiteA_106SiteA +#endif +IN_PROC_BROWSER_TEST_F( + TwoClientWebAppsIntegrationTestMacWinLinux, + MAYBE_WebAppIntegration_31SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_40Client1_41_10SiteA_40Client2_102SiteA_107SiteA_46SiteA_106SiteA) { // 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. @@ -1294,6 +740,7 @@ helper_.CheckWindowCreated(); helper_.CheckAppInListWindowed(Site::kSiteA); helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); helper_.SwitchProfileClients(ProfileClient::kClient2); helper_.CheckAppInListNotLocallyInstalled(Site::kSiteA); helper_.SwitchProfileClients(ProfileClient::kClient1); @@ -1308,15 +755,15 @@ // TODO(crbug.com/1301414): Mac shims failing to launch on Mac debug and ASAN. #if BUILDFLAG(IS_MAC) -#define MAYBE_WebAppIntegration_31SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_40Client1_41_43SiteA_40Client2_102SiteA_107SiteA_46SiteA_106SiteA \ - DISABLED_WebAppIntegration_31SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_40Client1_41_43SiteA_40Client2_102SiteA_107SiteA_46SiteA_106SiteA +#define MAYBE_WebAppIntegration_31SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_40Client1_41_43SiteA_40Client2_102SiteA_107SiteA_46SiteA_106SiteA \ + DISABLED_WebAppIntegration_31SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_40Client1_41_43SiteA_40Client2_102SiteA_107SiteA_46SiteA_106SiteA #else -#define MAYBE_WebAppIntegration_31SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_40Client1_41_43SiteA_40Client2_102SiteA_107SiteA_46SiteA_106SiteA \ - WebAppIntegration_31SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_40Client1_41_43SiteA_40Client2_102SiteA_107SiteA_46SiteA_106SiteA +#define MAYBE_WebAppIntegration_31SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_40Client1_41_43SiteA_40Client2_102SiteA_107SiteA_46SiteA_106SiteA \ + WebAppIntegration_31SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_40Client1_41_43SiteA_40Client2_102SiteA_107SiteA_46SiteA_106SiteA #endif IN_PROC_BROWSER_TEST_F( TwoClientWebAppsIntegrationTestMacWinLinux, - MAYBE_WebAppIntegration_31SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_40Client1_41_43SiteA_40Client2_102SiteA_107SiteA_46SiteA_106SiteA) { + MAYBE_WebAppIntegration_31SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_40Client1_41_43SiteA_40Client2_102SiteA_107SiteA_46SiteA_106SiteA) { // 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. @@ -1324,6 +771,7 @@ helper_.CheckWindowCreated(); helper_.CheckAppInListWindowed(Site::kSiteA); helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); helper_.SwitchProfileClients(ProfileClient::kClient2); helper_.CheckAppInListNotLocallyInstalled(Site::kSiteA); helper_.SwitchProfileClients(ProfileClient::kClient1); @@ -1338,15 +786,15 @@ // TODO(crbug.com/1301414): Mac shims failing to launch on Mac debug and ASAN. #if BUILDFLAG(IS_MAC) -#define MAYBE_WebAppIntegration_31SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_40Client1_41_98SiteA_40Client2_102SiteA_107SiteA_46SiteA_106SiteA \ - DISABLED_WebAppIntegration_31SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_40Client1_41_98SiteA_40Client2_102SiteA_107SiteA_46SiteA_106SiteA +#define MAYBE_WebAppIntegration_31SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_40Client1_41_98SiteA_40Client2_102SiteA_107SiteA_46SiteA_106SiteA \ + DISABLED_WebAppIntegration_31SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_40Client1_41_98SiteA_40Client2_102SiteA_107SiteA_46SiteA_106SiteA #else -#define MAYBE_WebAppIntegration_31SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_40Client1_41_98SiteA_40Client2_102SiteA_107SiteA_46SiteA_106SiteA \ - WebAppIntegration_31SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_40Client1_41_98SiteA_40Client2_102SiteA_107SiteA_46SiteA_106SiteA +#define MAYBE_WebAppIntegration_31SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_40Client1_41_98SiteA_40Client2_102SiteA_107SiteA_46SiteA_106SiteA \ + WebAppIntegration_31SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_40Client1_41_98SiteA_40Client2_102SiteA_107SiteA_46SiteA_106SiteA #endif IN_PROC_BROWSER_TEST_F( TwoClientWebAppsIntegrationTestMacWinLinux, - MAYBE_WebAppIntegration_31SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_40Client1_41_98SiteA_40Client2_102SiteA_107SiteA_46SiteA_106SiteA) { + MAYBE_WebAppIntegration_31SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_40Client1_41_98SiteA_40Client2_102SiteA_107SiteA_46SiteA_106SiteA) { // 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. @@ -1354,6 +802,7 @@ helper_.CheckWindowCreated(); helper_.CheckAppInListWindowed(Site::kSiteA); helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); helper_.SwitchProfileClients(ProfileClient::kClient2); helper_.CheckAppInListNotLocallyInstalled(Site::kSiteA); helper_.SwitchProfileClients(ProfileClient::kClient1); @@ -1368,15 +817,313 @@ // TODO(crbug.com/1301414): Mac shims failing to launch on Mac debug and ASAN. #if BUILDFLAG(IS_MAC) -#define MAYBE_WebAppIntegration_47SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_40Client1_41_10SiteA_40Client2_102SiteA_107SiteA_46SiteA_106SiteA \ - DISABLED_WebAppIntegration_47SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_40Client1_41_10SiteA_40Client2_102SiteA_107SiteA_46SiteA_106SiteA +#define MAYBE_WebAppIntegration_31SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_46SiteA_7SiteA_12SiteA_37SiteA_17_20 \ + DISABLED_WebAppIntegration_31SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_46SiteA_7SiteA_12SiteA_37SiteA_17_20 #else -#define MAYBE_WebAppIntegration_47SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_40Client1_41_10SiteA_40Client2_102SiteA_107SiteA_46SiteA_106SiteA \ - WebAppIntegration_47SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_40Client1_41_10SiteA_40Client2_102SiteA_107SiteA_46SiteA_106SiteA +#define MAYBE_WebAppIntegration_31SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_46SiteA_7SiteA_12SiteA_37SiteA_17_20 \ + WebAppIntegration_31SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_46SiteA_7SiteA_12SiteA_37SiteA_17_20 #endif IN_PROC_BROWSER_TEST_F( TwoClientWebAppsIntegrationTestMacWinLinux, - MAYBE_WebAppIntegration_47SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_40Client1_41_10SiteA_40Client2_102SiteA_107SiteA_46SiteA_106SiteA) { + MAYBE_WebAppIntegration_31SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_46SiteA_7SiteA_12SiteA_37SiteA_17_20) { + // 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. + helper_.InstallOmniboxIcon(InstallableSite::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.SwitchProfileClients(ProfileClient::kClient2); + helper_.CheckAppInListNotLocallyInstalled(Site::kSiteA); + helper_.InstallLocally(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.NavigateBrowser(Site::kSiteA); + helper_.CheckInstallIconNotShown(); + helper_.CheckLaunchIconShown(); +} + +// TODO(crbug.com/1301414): Mac shims failing to launch on Mac debug and ASAN. +#if BUILDFLAG(IS_MAC) +#define MAYBE_WebAppIntegration_31SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_46SiteA_7SiteA_12SiteA_69SiteA_24 \ + DISABLED_WebAppIntegration_31SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_46SiteA_7SiteA_12SiteA_69SiteA_24 +#else +#define MAYBE_WebAppIntegration_31SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_46SiteA_7SiteA_12SiteA_69SiteA_24 \ + WebAppIntegration_31SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_46SiteA_7SiteA_12SiteA_69SiteA_24 +#endif +IN_PROC_BROWSER_TEST_F( + TwoClientWebAppsIntegrationTestMacWinLinux, + MAYBE_WebAppIntegration_31SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_46SiteA_7SiteA_12SiteA_69SiteA_24) { + // 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. + helper_.InstallOmniboxIcon(InstallableSite::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.SwitchProfileClients(ProfileClient::kClient2); + helper_.CheckAppInListNotLocallyInstalled(Site::kSiteA); + helper_.InstallLocally(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.LaunchFromMenuOption(Site::kSiteA); + helper_.CheckWindowCreated(); +} + +// TODO(crbug.com/1301414): Mac shims failing to launch on Mac debug and ASAN. +#if BUILDFLAG(IS_MAC) +#define MAYBE_WebAppIntegration_31SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_46SiteA_7SiteA_12SiteA_35SiteA_24 \ + DISABLED_WebAppIntegration_31SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_46SiteA_7SiteA_12SiteA_35SiteA_24 +#else +#define MAYBE_WebAppIntegration_31SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_46SiteA_7SiteA_12SiteA_35SiteA_24 \ + WebAppIntegration_31SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_46SiteA_7SiteA_12SiteA_35SiteA_24 +#endif +IN_PROC_BROWSER_TEST_F( + TwoClientWebAppsIntegrationTestMacWinLinux, + MAYBE_WebAppIntegration_31SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_46SiteA_7SiteA_12SiteA_35SiteA_24) { + // 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. + helper_.InstallOmniboxIcon(InstallableSite::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.SwitchProfileClients(ProfileClient::kClient2); + helper_.CheckAppInListNotLocallyInstalled(Site::kSiteA); + helper_.InstallLocally(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.LaunchFromLaunchIcon(Site::kSiteA); + helper_.CheckWindowCreated(); +} + +// TODO(crbug.com/1301414): Mac shims failing to launch on Mac debug and ASAN. +#if BUILDFLAG(IS_MAC) +#define MAYBE_WebAppIntegration_31SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_46SiteA_7SiteA_12SiteA_34SiteA_24 \ + DISABLED_WebAppIntegration_31SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_46SiteA_7SiteA_12SiteA_34SiteA_24 +#else +#define MAYBE_WebAppIntegration_31SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_46SiteA_7SiteA_12SiteA_34SiteA_24 \ + WebAppIntegration_31SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_46SiteA_7SiteA_12SiteA_34SiteA_24 +#endif +IN_PROC_BROWSER_TEST_F( + TwoClientWebAppsIntegrationTestMacWinLinux, + MAYBE_WebAppIntegration_31SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_46SiteA_7SiteA_12SiteA_34SiteA_24) { + // 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. + helper_.InstallOmniboxIcon(InstallableSite::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.SwitchProfileClients(ProfileClient::kClient2); + helper_.CheckAppInListNotLocallyInstalled(Site::kSiteA); + helper_.InstallLocally(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.LaunchFromChromeApps(Site::kSiteA); + helper_.CheckWindowCreated(); +} + +// TODO(crbug.com/1301414): Mac shims failing to launch on Mac debug and ASAN. +#if BUILDFLAG(IS_MAC) +#define MAYBE_WebAppIntegration_31SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_46SiteA_7SiteA_12SiteA_1SiteA_24 \ + DISABLED_WebAppIntegration_31SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_46SiteA_7SiteA_12SiteA_1SiteA_24 +#else +#define MAYBE_WebAppIntegration_31SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_46SiteA_7SiteA_12SiteA_1SiteA_24 \ + WebAppIntegration_31SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_46SiteA_7SiteA_12SiteA_1SiteA_24 +#endif +IN_PROC_BROWSER_TEST_F( + TwoClientWebAppsIntegrationTestMacWinLinux, + MAYBE_WebAppIntegration_31SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_46SiteA_7SiteA_12SiteA_1SiteA_24) { + // 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. + helper_.InstallOmniboxIcon(InstallableSite::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.SwitchProfileClients(ProfileClient::kClient2); + helper_.CheckAppInListNotLocallyInstalled(Site::kSiteA); + helper_.InstallLocally(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.LaunchFromPlatformShortcut(Site::kSiteA); + helper_.CheckWindowCreated(); +} + +// TODO(crbug.com/1301414): Mac shims failing to launch on Mac debug and ASAN. +#if BUILDFLAG(IS_MAC) +#define MAYBE_WebAppIntegration_31SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_34SiteA_22 \ + DISABLED_WebAppIntegration_31SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_34SiteA_22 +#else +#define MAYBE_WebAppIntegration_31SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_34SiteA_22 \ + WebAppIntegration_31SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_34SiteA_22 +#endif +IN_PROC_BROWSER_TEST_F( + TwoClientWebAppsIntegrationTestMacWinLinux, + MAYBE_WebAppIntegration_31SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_34SiteA_22) { + // 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. + helper_.InstallOmniboxIcon(InstallableSite::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.SwitchProfileClients(ProfileClient::kClient2); + helper_.CheckAppInListNotLocallyInstalled(Site::kSiteA); + helper_.LaunchFromChromeApps(Site::kSiteA); + helper_.CheckTabCreated(); +} + +// TODO(crbug.com/1301414): Mac shims failing to launch on Mac debug and ASAN. +#if BUILDFLAG(IS_MAC) +#define MAYBE_WebAppIntegration_31SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_1SiteA_22 \ + DISABLED_WebAppIntegration_31SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_1SiteA_22 +#else +#define MAYBE_WebAppIntegration_31SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_1SiteA_22 \ + WebAppIntegration_31SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_1SiteA_22 +#endif +IN_PROC_BROWSER_TEST_F( + TwoClientWebAppsIntegrationTestMacWinLinux, + MAYBE_WebAppIntegration_31SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_1SiteA_22) { + // 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. + helper_.InstallOmniboxIcon(InstallableSite::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.SwitchProfileClients(ProfileClient::kClient2); + helper_.CheckAppInListNotLocallyInstalled(Site::kSiteA); + helper_.LaunchFromPlatformShortcut(Site::kSiteA); + helper_.CheckTabCreated(); +} + +// TODO(crbug.com/1301414): Mac shims failing to launch on Mac debug and ASAN. +#if BUILDFLAG(IS_MAC) +#define MAYBE_WebAppIntegration_31SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_10SiteA_15SiteA_40Client1_15SiteA \ + DISABLED_WebAppIntegration_31SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_10SiteA_15SiteA_40Client1_15SiteA +#else +#define MAYBE_WebAppIntegration_31SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_10SiteA_15SiteA_40Client1_15SiteA \ + WebAppIntegration_31SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_10SiteA_15SiteA_40Client1_15SiteA +#endif +IN_PROC_BROWSER_TEST_F( + TwoClientWebAppsIntegrationTestMacWinLinux, + MAYBE_WebAppIntegration_31SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_10SiteA_15SiteA_40Client1_15SiteA) { + // 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. + helper_.InstallOmniboxIcon(InstallableSite::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.SwitchProfileClients(ProfileClient::kClient2); + helper_.CheckAppInListNotLocallyInstalled(Site::kSiteA); + helper_.UninstallFromList(Site::kSiteA); + helper_.CheckAppNotInList(Site::kSiteA); + helper_.SwitchProfileClients(ProfileClient::kClient1); + helper_.CheckAppNotInList(Site::kSiteA); +} + +// TODO(crbug.com/1301414): Mac shims failing to launch on Mac debug and ASAN. +#if BUILDFLAG(IS_MAC) +#define MAYBE_WebAppIntegration_31SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_37SiteA_18_19 \ + DISABLED_WebAppIntegration_31SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_37SiteA_18_19 +#else +#define MAYBE_WebAppIntegration_31SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_37SiteA_18_19 \ + WebAppIntegration_31SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_37SiteA_18_19 +#endif +IN_PROC_BROWSER_TEST_F( + TwoClientWebAppsIntegrationTestMacWinLinux, + MAYBE_WebAppIntegration_31SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_37SiteA_18_19) { + // 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. + helper_.InstallOmniboxIcon(InstallableSite::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.SwitchProfileClients(ProfileClient::kClient2); + helper_.CheckAppInListNotLocallyInstalled(Site::kSiteA); + helper_.NavigateBrowser(Site::kSiteA); + helper_.CheckInstallIconShown(); + helper_.CheckLaunchIconNotShown(); +} + +// TODO(crbug.com/1301414): Mac shims failing to launch on Mac debug and ASAN. +#if BUILDFLAG(IS_MAC) +#define MAYBE_WebAppIntegration_31SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_41_10SiteA_42_45SiteA \ + DISABLED_WebAppIntegration_31SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_41_10SiteA_42_45SiteA +#else +#define MAYBE_WebAppIntegration_31SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_41_10SiteA_42_45SiteA \ + WebAppIntegration_31SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_41_10SiteA_42_45SiteA +#endif +IN_PROC_BROWSER_TEST_F( + TwoClientWebAppsIntegrationTestMacWinLinux, + MAYBE_WebAppIntegration_31SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_41_10SiteA_42_45SiteA) { + // 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. + helper_.InstallOmniboxIcon(InstallableSite::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.SwitchProfileClients(ProfileClient::kClient2); + helper_.CheckAppInListNotLocallyInstalled(Site::kSiteA); + helper_.SyncTurnOff(); + helper_.UninstallFromList(Site::kSiteA); + helper_.SyncTurnOn(); + helper_.CheckAppInListNotLocallyInstalled(Site::kSiteA); +} + +// TODO(crbug.com/1301414): Mac shims failing to launch on Mac debug and ASAN. +#if BUILDFLAG(IS_MAC) +#define MAYBE_WebAppIntegration_31SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_41_43SiteA_42_45SiteA \ + DISABLED_WebAppIntegration_31SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_41_43SiteA_42_45SiteA +#else +#define MAYBE_WebAppIntegration_31SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_41_43SiteA_42_45SiteA \ + WebAppIntegration_31SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_41_43SiteA_42_45SiteA +#endif +IN_PROC_BROWSER_TEST_F( + TwoClientWebAppsIntegrationTestMacWinLinux, + MAYBE_WebAppIntegration_31SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_41_43SiteA_42_45SiteA) { + // 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. + helper_.InstallOmniboxIcon(InstallableSite::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.SwitchProfileClients(ProfileClient::kClient2); + helper_.CheckAppInListNotLocallyInstalled(Site::kSiteA); + helper_.SyncTurnOff(); + helper_.UninstallFromMenu(Site::kSiteA); + helper_.SyncTurnOn(); + helper_.CheckAppInListNotLocallyInstalled(Site::kSiteA); +} + +// TODO(crbug.com/1301414): Mac shims failing to launch on Mac debug and ASAN. +#if BUILDFLAG(IS_MAC) +#define MAYBE_WebAppIntegration_47SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_40Client1_41_10SiteA_40Client2_102SiteA_107SiteA_46SiteA_106SiteA \ + DISABLED_WebAppIntegration_47SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_40Client1_41_10SiteA_40Client2_102SiteA_107SiteA_46SiteA_106SiteA +#else +#define MAYBE_WebAppIntegration_47SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_40Client1_41_10SiteA_40Client2_102SiteA_107SiteA_46SiteA_106SiteA \ + WebAppIntegration_47SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_40Client1_41_10SiteA_40Client2_102SiteA_107SiteA_46SiteA_106SiteA +#endif +IN_PROC_BROWSER_TEST_F( + TwoClientWebAppsIntegrationTestMacWinLinux, + MAYBE_WebAppIntegration_47SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_40Client1_41_10SiteA_40Client2_102SiteA_107SiteA_46SiteA_106SiteA) { // 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. @@ -1384,6 +1131,7 @@ helper_.CheckWindowCreated(); helper_.CheckAppInListWindowed(Site::kSiteA); helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); helper_.SwitchProfileClients(ProfileClient::kClient2); helper_.CheckAppInListNotLocallyInstalled(Site::kSiteA); helper_.SwitchProfileClients(ProfileClient::kClient1); @@ -1398,15 +1146,15 @@ // TODO(crbug.com/1301414): Mac shims failing to launch on Mac debug and ASAN. #if BUILDFLAG(IS_MAC) -#define MAYBE_WebAppIntegration_47SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_40Client1_41_43SiteA_40Client2_102SiteA_107SiteA_46SiteA_106SiteA \ - DISABLED_WebAppIntegration_47SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_40Client1_41_43SiteA_40Client2_102SiteA_107SiteA_46SiteA_106SiteA +#define MAYBE_WebAppIntegration_47SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_40Client1_41_43SiteA_40Client2_102SiteA_107SiteA_46SiteA_106SiteA \ + DISABLED_WebAppIntegration_47SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_40Client1_41_43SiteA_40Client2_102SiteA_107SiteA_46SiteA_106SiteA #else -#define MAYBE_WebAppIntegration_47SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_40Client1_41_43SiteA_40Client2_102SiteA_107SiteA_46SiteA_106SiteA \ - WebAppIntegration_47SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_40Client1_41_43SiteA_40Client2_102SiteA_107SiteA_46SiteA_106SiteA +#define MAYBE_WebAppIntegration_47SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_40Client1_41_43SiteA_40Client2_102SiteA_107SiteA_46SiteA_106SiteA \ + WebAppIntegration_47SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_40Client1_41_43SiteA_40Client2_102SiteA_107SiteA_46SiteA_106SiteA #endif IN_PROC_BROWSER_TEST_F( TwoClientWebAppsIntegrationTestMacWinLinux, - MAYBE_WebAppIntegration_47SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_40Client1_41_43SiteA_40Client2_102SiteA_107SiteA_46SiteA_106SiteA) { + MAYBE_WebAppIntegration_47SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_40Client1_41_43SiteA_40Client2_102SiteA_107SiteA_46SiteA_106SiteA) { // 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. @@ -1414,6 +1162,7 @@ helper_.CheckWindowCreated(); helper_.CheckAppInListWindowed(Site::kSiteA); helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); helper_.SwitchProfileClients(ProfileClient::kClient2); helper_.CheckAppInListNotLocallyInstalled(Site::kSiteA); helper_.SwitchProfileClients(ProfileClient::kClient1); @@ -1428,15 +1177,15 @@ // TODO(crbug.com/1301414): Mac shims failing to launch on Mac debug and ASAN. #if BUILDFLAG(IS_MAC) -#define MAYBE_WebAppIntegration_47SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_40Client1_41_98SiteA_40Client2_102SiteA_107SiteA_46SiteA_106SiteA \ - DISABLED_WebAppIntegration_47SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_40Client1_41_98SiteA_40Client2_102SiteA_107SiteA_46SiteA_106SiteA +#define MAYBE_WebAppIntegration_47SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_40Client1_41_98SiteA_40Client2_102SiteA_107SiteA_46SiteA_106SiteA \ + DISABLED_WebAppIntegration_47SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_40Client1_41_98SiteA_40Client2_102SiteA_107SiteA_46SiteA_106SiteA #else -#define MAYBE_WebAppIntegration_47SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_40Client1_41_98SiteA_40Client2_102SiteA_107SiteA_46SiteA_106SiteA \ - WebAppIntegration_47SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_40Client1_41_98SiteA_40Client2_102SiteA_107SiteA_46SiteA_106SiteA +#define MAYBE_WebAppIntegration_47SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_40Client1_41_98SiteA_40Client2_102SiteA_107SiteA_46SiteA_106SiteA \ + WebAppIntegration_47SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_40Client1_41_98SiteA_40Client2_102SiteA_107SiteA_46SiteA_106SiteA #endif IN_PROC_BROWSER_TEST_F( TwoClientWebAppsIntegrationTestMacWinLinux, - MAYBE_WebAppIntegration_47SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_40Client1_41_98SiteA_40Client2_102SiteA_107SiteA_46SiteA_106SiteA) { + MAYBE_WebAppIntegration_47SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_40Client1_41_98SiteA_40Client2_102SiteA_107SiteA_46SiteA_106SiteA) { // 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. @@ -1444,6 +1193,7 @@ helper_.CheckWindowCreated(); helper_.CheckAppInListWindowed(Site::kSiteA); helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); helper_.SwitchProfileClients(ProfileClient::kClient2); helper_.CheckAppInListNotLocallyInstalled(Site::kSiteA); helper_.SwitchProfileClients(ProfileClient::kClient1); @@ -1456,5 +1206,303 @@ helper_.CheckRunOnOsLoginEnabled(Site::kSiteA); } +// TODO(crbug.com/1301414): Mac shims failing to launch on Mac debug and ASAN. +#if BUILDFLAG(IS_MAC) +#define MAYBE_WebAppIntegration_47SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_46SiteA_7SiteA_12SiteA_37SiteA_17_20 \ + DISABLED_WebAppIntegration_47SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_46SiteA_7SiteA_12SiteA_37SiteA_17_20 +#else +#define MAYBE_WebAppIntegration_47SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_46SiteA_7SiteA_12SiteA_37SiteA_17_20 \ + WebAppIntegration_47SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_46SiteA_7SiteA_12SiteA_37SiteA_17_20 +#endif +IN_PROC_BROWSER_TEST_F( + TwoClientWebAppsIntegrationTestMacWinLinux, + MAYBE_WebAppIntegration_47SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_46SiteA_7SiteA_12SiteA_37SiteA_17_20) { + // 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. + helper_.InstallMenuOption(InstallableSite::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.SwitchProfileClients(ProfileClient::kClient2); + helper_.CheckAppInListNotLocallyInstalled(Site::kSiteA); + helper_.InstallLocally(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.NavigateBrowser(Site::kSiteA); + helper_.CheckInstallIconNotShown(); + helper_.CheckLaunchIconShown(); +} + +// TODO(crbug.com/1301414): Mac shims failing to launch on Mac debug and ASAN. +#if BUILDFLAG(IS_MAC) +#define MAYBE_WebAppIntegration_47SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_46SiteA_7SiteA_12SiteA_69SiteA_24 \ + DISABLED_WebAppIntegration_47SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_46SiteA_7SiteA_12SiteA_69SiteA_24 +#else +#define MAYBE_WebAppIntegration_47SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_46SiteA_7SiteA_12SiteA_69SiteA_24 \ + WebAppIntegration_47SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_46SiteA_7SiteA_12SiteA_69SiteA_24 +#endif +IN_PROC_BROWSER_TEST_F( + TwoClientWebAppsIntegrationTestMacWinLinux, + MAYBE_WebAppIntegration_47SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_46SiteA_7SiteA_12SiteA_69SiteA_24) { + // 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. + helper_.InstallMenuOption(InstallableSite::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.SwitchProfileClients(ProfileClient::kClient2); + helper_.CheckAppInListNotLocallyInstalled(Site::kSiteA); + helper_.InstallLocally(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.LaunchFromMenuOption(Site::kSiteA); + helper_.CheckWindowCreated(); +} + +// TODO(crbug.com/1301414): Mac shims failing to launch on Mac debug and ASAN. +#if BUILDFLAG(IS_MAC) +#define MAYBE_WebAppIntegration_47SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_46SiteA_7SiteA_12SiteA_35SiteA_24 \ + DISABLED_WebAppIntegration_47SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_46SiteA_7SiteA_12SiteA_35SiteA_24 +#else +#define MAYBE_WebAppIntegration_47SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_46SiteA_7SiteA_12SiteA_35SiteA_24 \ + WebAppIntegration_47SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_46SiteA_7SiteA_12SiteA_35SiteA_24 +#endif +IN_PROC_BROWSER_TEST_F( + TwoClientWebAppsIntegrationTestMacWinLinux, + MAYBE_WebAppIntegration_47SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_46SiteA_7SiteA_12SiteA_35SiteA_24) { + // 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. + helper_.InstallMenuOption(InstallableSite::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.SwitchProfileClients(ProfileClient::kClient2); + helper_.CheckAppInListNotLocallyInstalled(Site::kSiteA); + helper_.InstallLocally(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.LaunchFromLaunchIcon(Site::kSiteA); + helper_.CheckWindowCreated(); +} + +// TODO(crbug.com/1301414): Mac shims failing to launch on Mac debug and ASAN. +#if BUILDFLAG(IS_MAC) +#define MAYBE_WebAppIntegration_47SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_46SiteA_7SiteA_12SiteA_34SiteA_24 \ + DISABLED_WebAppIntegration_47SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_46SiteA_7SiteA_12SiteA_34SiteA_24 +#else +#define MAYBE_WebAppIntegration_47SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_46SiteA_7SiteA_12SiteA_34SiteA_24 \ + WebAppIntegration_47SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_46SiteA_7SiteA_12SiteA_34SiteA_24 +#endif +IN_PROC_BROWSER_TEST_F( + TwoClientWebAppsIntegrationTestMacWinLinux, + MAYBE_WebAppIntegration_47SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_46SiteA_7SiteA_12SiteA_34SiteA_24) { + // 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. + helper_.InstallMenuOption(InstallableSite::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.SwitchProfileClients(ProfileClient::kClient2); + helper_.CheckAppInListNotLocallyInstalled(Site::kSiteA); + helper_.InstallLocally(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.LaunchFromChromeApps(Site::kSiteA); + helper_.CheckWindowCreated(); +} + +// TODO(crbug.com/1301414): Mac shims failing to launch on Mac debug and ASAN. +#if BUILDFLAG(IS_MAC) +#define MAYBE_WebAppIntegration_47SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_46SiteA_7SiteA_12SiteA_1SiteA_24 \ + DISABLED_WebAppIntegration_47SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_46SiteA_7SiteA_12SiteA_1SiteA_24 +#else +#define MAYBE_WebAppIntegration_47SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_46SiteA_7SiteA_12SiteA_1SiteA_24 \ + WebAppIntegration_47SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_46SiteA_7SiteA_12SiteA_1SiteA_24 +#endif +IN_PROC_BROWSER_TEST_F( + TwoClientWebAppsIntegrationTestMacWinLinux, + MAYBE_WebAppIntegration_47SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_46SiteA_7SiteA_12SiteA_1SiteA_24) { + // 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. + helper_.InstallMenuOption(InstallableSite::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.SwitchProfileClients(ProfileClient::kClient2); + helper_.CheckAppInListNotLocallyInstalled(Site::kSiteA); + helper_.InstallLocally(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.LaunchFromPlatformShortcut(Site::kSiteA); + helper_.CheckWindowCreated(); +} + +// TODO(crbug.com/1301414): Mac shims failing to launch on Mac debug and ASAN. +#if BUILDFLAG(IS_MAC) +#define MAYBE_WebAppIntegration_47SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_34SiteA_22 \ + DISABLED_WebAppIntegration_47SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_34SiteA_22 +#else +#define MAYBE_WebAppIntegration_47SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_34SiteA_22 \ + WebAppIntegration_47SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_34SiteA_22 +#endif +IN_PROC_BROWSER_TEST_F( + TwoClientWebAppsIntegrationTestMacWinLinux, + MAYBE_WebAppIntegration_47SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_34SiteA_22) { + // 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. + helper_.InstallMenuOption(InstallableSite::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.SwitchProfileClients(ProfileClient::kClient2); + helper_.CheckAppInListNotLocallyInstalled(Site::kSiteA); + helper_.LaunchFromChromeApps(Site::kSiteA); + helper_.CheckTabCreated(); +} + +// TODO(crbug.com/1301414): Mac shims failing to launch on Mac debug and ASAN. +#if BUILDFLAG(IS_MAC) +#define MAYBE_WebAppIntegration_47SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_1SiteA_22 \ + DISABLED_WebAppIntegration_47SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_1SiteA_22 +#else +#define MAYBE_WebAppIntegration_47SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_1SiteA_22 \ + WebAppIntegration_47SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_1SiteA_22 +#endif +IN_PROC_BROWSER_TEST_F( + TwoClientWebAppsIntegrationTestMacWinLinux, + MAYBE_WebAppIntegration_47SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_1SiteA_22) { + // 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. + helper_.InstallMenuOption(InstallableSite::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.SwitchProfileClients(ProfileClient::kClient2); + helper_.CheckAppInListNotLocallyInstalled(Site::kSiteA); + helper_.LaunchFromPlatformShortcut(Site::kSiteA); + helper_.CheckTabCreated(); +} + +// TODO(crbug.com/1301414): Mac shims failing to launch on Mac debug and ASAN. +#if BUILDFLAG(IS_MAC) +#define MAYBE_WebAppIntegration_47SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_10SiteA_15SiteA_40Client1_15SiteA \ + DISABLED_WebAppIntegration_47SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_10SiteA_15SiteA_40Client1_15SiteA +#else +#define MAYBE_WebAppIntegration_47SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_10SiteA_15SiteA_40Client1_15SiteA \ + WebAppIntegration_47SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_10SiteA_15SiteA_40Client1_15SiteA +#endif +IN_PROC_BROWSER_TEST_F( + TwoClientWebAppsIntegrationTestMacWinLinux, + MAYBE_WebAppIntegration_47SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_10SiteA_15SiteA_40Client1_15SiteA) { + // 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. + helper_.InstallMenuOption(InstallableSite::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.SwitchProfileClients(ProfileClient::kClient2); + helper_.CheckAppInListNotLocallyInstalled(Site::kSiteA); + helper_.UninstallFromList(Site::kSiteA); + helper_.CheckAppNotInList(Site::kSiteA); + helper_.SwitchProfileClients(ProfileClient::kClient1); + helper_.CheckAppNotInList(Site::kSiteA); +} + +// TODO(crbug.com/1301414): Mac shims failing to launch on Mac debug and ASAN. +#if BUILDFLAG(IS_MAC) +#define MAYBE_WebAppIntegration_47SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_37SiteA_18_19 \ + DISABLED_WebAppIntegration_47SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_37SiteA_18_19 +#else +#define MAYBE_WebAppIntegration_47SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_37SiteA_18_19 \ + WebAppIntegration_47SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_37SiteA_18_19 +#endif +IN_PROC_BROWSER_TEST_F( + TwoClientWebAppsIntegrationTestMacWinLinux, + MAYBE_WebAppIntegration_47SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_37SiteA_18_19) { + // 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. + helper_.InstallMenuOption(InstallableSite::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.SwitchProfileClients(ProfileClient::kClient2); + helper_.CheckAppInListNotLocallyInstalled(Site::kSiteA); + helper_.NavigateBrowser(Site::kSiteA); + helper_.CheckInstallIconShown(); + helper_.CheckLaunchIconNotShown(); +} + +// TODO(crbug.com/1301414): Mac shims failing to launch on Mac debug and ASAN. +#if BUILDFLAG(IS_MAC) +#define MAYBE_WebAppIntegration_47SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_41_10SiteA_42_45SiteA \ + DISABLED_WebAppIntegration_47SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_41_10SiteA_42_45SiteA +#else +#define MAYBE_WebAppIntegration_47SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_41_10SiteA_42_45SiteA \ + WebAppIntegration_47SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_41_10SiteA_42_45SiteA +#endif +IN_PROC_BROWSER_TEST_F( + TwoClientWebAppsIntegrationTestMacWinLinux, + MAYBE_WebAppIntegration_47SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_41_10SiteA_42_45SiteA) { + // 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. + helper_.InstallMenuOption(InstallableSite::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.SwitchProfileClients(ProfileClient::kClient2); + helper_.CheckAppInListNotLocallyInstalled(Site::kSiteA); + helper_.SyncTurnOff(); + helper_.UninstallFromList(Site::kSiteA); + helper_.SyncTurnOn(); + helper_.CheckAppInListNotLocallyInstalled(Site::kSiteA); +} + +// TODO(crbug.com/1301414): Mac shims failing to launch on Mac debug and ASAN. +#if BUILDFLAG(IS_MAC) +#define MAYBE_WebAppIntegration_47SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_41_43SiteA_42_45SiteA \ + DISABLED_WebAppIntegration_47SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_41_43SiteA_42_45SiteA +#else +#define MAYBE_WebAppIntegration_47SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_41_43SiteA_42_45SiteA \ + WebAppIntegration_47SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_41_43SiteA_42_45SiteA +#endif +IN_PROC_BROWSER_TEST_F( + TwoClientWebAppsIntegrationTestMacWinLinux, + MAYBE_WebAppIntegration_47SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_41_43SiteA_42_45SiteA) { + // 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. + helper_.InstallMenuOption(InstallableSite::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.SwitchProfileClients(ProfileClient::kClient2); + helper_.CheckAppInListNotLocallyInstalled(Site::kSiteA); + helper_.SyncTurnOff(); + helper_.UninstallFromMenu(Site::kSiteA); + helper_.SyncTurnOn(); + helper_.CheckAppInListNotLocallyInstalled(Site::kSiteA); +} + } // namespace } // namespace web_app::integration_tests
diff --git a/chrome/browser/sync/test/integration/two_client_web_apps_integration_test_win.cc b/chrome/browser/sync/test/integration/two_client_web_apps_integration_test_win.cc index ba3850d..a4dd62a 100644 --- a/chrome/browser/sync/test/integration/two_client_web_apps_integration_test_win.cc +++ b/chrome/browser/sync/test/integration/two_client_web_apps_integration_test_win.cc
@@ -17,60 +17,6 @@ IN_PROC_BROWSER_TEST_F( TwoClientWebAppsIntegrationTestWin, - WebAppIntegration_30SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_41_87SiteA_42_45SiteA) { - // 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. - helper_.InstallCreateShortcutWindowed(Site::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.SwitchProfileClients(ProfileClient::kClient2); - helper_.CheckAppInListNotLocallyInstalled(Site::kSiteA); - helper_.SyncTurnOff(); - helper_.UninstallFromOs(Site::kSiteA); - helper_.SyncTurnOn(); - helper_.CheckAppInListNotLocallyInstalled(Site::kSiteA); -} - -IN_PROC_BROWSER_TEST_F( - TwoClientWebAppsIntegrationTestWin, - WebAppIntegration_31SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_41_87SiteA_42_45SiteA) { - // 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. - helper_.InstallOmniboxIcon(InstallableSite::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.SwitchProfileClients(ProfileClient::kClient2); - helper_.CheckAppInListNotLocallyInstalled(Site::kSiteA); - helper_.SyncTurnOff(); - helper_.UninstallFromOs(Site::kSiteA); - helper_.SyncTurnOn(); - helper_.CheckAppInListNotLocallyInstalled(Site::kSiteA); -} - -IN_PROC_BROWSER_TEST_F( - TwoClientWebAppsIntegrationTestWin, - WebAppIntegration_47SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_41_87SiteA_42_45SiteA) { - // 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. - helper_.InstallMenuOption(InstallableSite::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.SwitchProfileClients(ProfileClient::kClient2); - helper_.CheckAppInListNotLocallyInstalled(Site::kSiteA); - helper_.SyncTurnOff(); - helper_.UninstallFromOs(Site::kSiteA); - helper_.SyncTurnOn(); - helper_.CheckAppInListNotLocallyInstalled(Site::kSiteA); -} - -IN_PROC_BROWSER_TEST_F( - TwoClientWebAppsIntegrationTestWin, WebAppIntegration_29SiteA_11SiteA_7SiteA_40Client2_45SiteA_41_87SiteA_42_45SiteA) { // Test contents are generated by script. Please do not modify! // See `chrome/test/webapps/README.md` for more info. @@ -88,7 +34,7 @@ IN_PROC_BROWSER_TEST_F( TwoClientWebAppsIntegrationTestWin, - WebAppIntegration_30SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_40Client1_41_87SiteA_40Client2_102SiteA_107SiteA_46SiteA_106SiteA) { + WebAppIntegration_30SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_40Client1_41_87SiteA_40Client2_102SiteA_107SiteA_46SiteA_106SiteA) { // 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. @@ -96,6 +42,7 @@ helper_.CheckWindowCreated(); helper_.CheckAppInListWindowed(Site::kSiteA); helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); helper_.SwitchProfileClients(ProfileClient::kClient2); helper_.CheckAppInListNotLocallyInstalled(Site::kSiteA); helper_.SwitchProfileClients(ProfileClient::kClient1); @@ -110,7 +57,26 @@ IN_PROC_BROWSER_TEST_F( TwoClientWebAppsIntegrationTestWin, - WebAppIntegration_31SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_40Client1_41_87SiteA_40Client2_102SiteA_107SiteA_46SiteA_106SiteA) { + WebAppIntegration_30SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_41_87SiteA_42_45SiteA) { + // 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. + helper_.InstallCreateShortcutWindowed(Site::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.SwitchProfileClients(ProfileClient::kClient2); + helper_.CheckAppInListNotLocallyInstalled(Site::kSiteA); + helper_.SyncTurnOff(); + helper_.UninstallFromOs(Site::kSiteA); + helper_.SyncTurnOn(); + helper_.CheckAppInListNotLocallyInstalled(Site::kSiteA); +} + +IN_PROC_BROWSER_TEST_F( + TwoClientWebAppsIntegrationTestWin, + WebAppIntegration_31SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_40Client1_41_87SiteA_40Client2_102SiteA_107SiteA_46SiteA_106SiteA) { // 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. @@ -118,6 +84,7 @@ helper_.CheckWindowCreated(); helper_.CheckAppInListWindowed(Site::kSiteA); helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); helper_.SwitchProfileClients(ProfileClient::kClient2); helper_.CheckAppInListNotLocallyInstalled(Site::kSiteA); helper_.SwitchProfileClients(ProfileClient::kClient1); @@ -132,7 +99,26 @@ IN_PROC_BROWSER_TEST_F( TwoClientWebAppsIntegrationTestWin, - WebAppIntegration_47SiteA_24_12SiteA_7SiteA_40Client2_45SiteA_40Client1_41_87SiteA_40Client2_102SiteA_107SiteA_46SiteA_106SiteA) { + WebAppIntegration_31SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_41_87SiteA_42_45SiteA) { + // 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. + helper_.InstallOmniboxIcon(InstallableSite::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.SwitchProfileClients(ProfileClient::kClient2); + helper_.CheckAppInListNotLocallyInstalled(Site::kSiteA); + helper_.SyncTurnOff(); + helper_.UninstallFromOs(Site::kSiteA); + helper_.SyncTurnOn(); + helper_.CheckAppInListNotLocallyInstalled(Site::kSiteA); +} + +IN_PROC_BROWSER_TEST_F( + TwoClientWebAppsIntegrationTestWin, + WebAppIntegration_47SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_40Client1_41_87SiteA_40Client2_102SiteA_107SiteA_46SiteA_106SiteA) { // 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. @@ -140,6 +126,7 @@ helper_.CheckWindowCreated(); helper_.CheckAppInListWindowed(Site::kSiteA); helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); helper_.SwitchProfileClients(ProfileClient::kClient2); helper_.CheckAppInListNotLocallyInstalled(Site::kSiteA); helper_.SwitchProfileClients(ProfileClient::kClient1); @@ -152,5 +139,24 @@ helper_.CheckRunOnOsLoginEnabled(Site::kSiteA); } +IN_PROC_BROWSER_TEST_F( + TwoClientWebAppsIntegrationTestWin, + WebAppIntegration_47SiteA_24_12SiteA_7SiteA_112SiteANotShown_40Client2_45SiteA_41_87SiteA_42_45SiteA) { + // 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. + helper_.InstallMenuOption(InstallableSite::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.SwitchProfileClients(ProfileClient::kClient2); + helper_.CheckAppInListNotLocallyInstalled(Site::kSiteA); + helper_.SyncTurnOff(); + helper_.UninstallFromOs(Site::kSiteA); + helper_.SyncTurnOn(); + helper_.CheckAppInListNotLocallyInstalled(Site::kSiteA); +} + } // namespace } // namespace web_app::integration_tests
diff --git a/chrome/browser/ui/BUILD.gn b/chrome/browser/ui/BUILD.gn index 5432acc2..2eb0d3ef 100644 --- a/chrome/browser/ui/BUILD.gn +++ b/chrome/browser/ui/BUILD.gn
@@ -513,6 +513,7 @@ "//components/lens", "//components/live_caption:constants", "//components/live_caption:utils", + "//components/local_state", "//components/lookalikes/core", "//components/metrics:content", "//components/metrics_services_manager",
diff --git a/chrome/browser/ui/ash/projector/pending_screencast_manager.cc b/chrome/browser/ui/ash/projector/pending_screencast_manager.cc index 561c3c0..598cd8d 100644 --- a/chrome/browser/ui/ash/projector/pending_screencast_manager.cc +++ b/chrome/browser/ui/ash/projector/pending_screencast_manager.cc
@@ -13,9 +13,12 @@ #include "ash/public/cpp/projector/projector_controller.h" #include "base/bind.h" #include "base/callback_helpers.h" +#include "base/check.h" #include "base/files/file_enumerator.h" #include "base/files/file_path.h" #include "base/files/file_util.h" +#include "base/json/json_reader.h" +#include "base/json/json_writer.h" #include "base/strings/strcat.h" #include "base/task/bind_post_task.h" #include "base/task/task_traits.h" @@ -35,6 +38,8 @@ constexpr base::FilePath::CharType kMediaExtension[] = FILE_PATH_LITERAL(".webm"); constexpr char kOpenUrlBase[] = "https://drive.google.com/open"; +constexpr char kDriveRequestContentHintsKey[] = "contentHints"; +constexpr char kDriveRequestIndexableTextKey[] = "indexableText"; // The metadata might not be ready as the file gets uploaded. On projector app // side, we fetch newly uploaded screencasts with 2s delay, and it works fine, @@ -129,6 +134,91 @@ local_path)); } +// Reads the screencast metadata file from `metadata_file_local_path`. A sample +// file content: +// { +// "captionLanguage":"en", +// "captions":[ +// { +// "endOffset":1260, +// "hypothesisParts:[], +// "startOffset":760, +// "text":"abcd", +// } +// ], +// "tableOfContent":[] +// } +// Returns the indexable text concated by all "text" fields content. +std::string GetIndexableText(const base::FilePath& metadata_file_local_path) { + DCHECK(!content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); + std::string indexable_text = ""; + + // Reads the Json content in `metadata_file_local_path` to `dict_value`: + std::string file_content; + if (!base::ReadFileToString(metadata_file_local_path, &file_content)) + return indexable_text; + + absl::optional<base::Value> value(base::JSONReader::Read(file_content)); + if (!value) + return indexable_text; + + const base::Value::Dict* dict_value = value.value().GetIfDict(); + if (!dict_value) + return indexable_text; + + // Concats all captions' text: + const auto* captions = dict_value->FindList("captions"); + if (!captions) + return indexable_text; + + for (const auto& caption : *captions) { + const base::Value::Dict* caption_dict = caption.GetIfDict(); + if (!caption_dict) + continue; + const std::string* text = caption_dict->FindString("text"); + if (!text->empty()) { + base::StrAppend(&indexable_text, {" ", *text}); + } + } + return indexable_text; +} + +// Returns the request body, which looks like: +// { +// "contentHints": +// { +// "indexableText":"abcd", +// } +// } +const std::string BuildRequestBody( + const base::FilePath& metadata_file_local_path) { + DCHECK(!content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); + const std::string indexable_text = GetIndexableText(metadata_file_local_path); + if (indexable_text.empty()) + return std::string(); + + // Builds request body: + base::DictionaryValue root; + base::Value::Dict contentHints; + contentHints.Set(kDriveRequestIndexableTextKey, indexable_text); + root.SetKey(kDriveRequestContentHintsKey, + base::Value(std::move(contentHints))); + + std::string request_body; + base::JSONWriter::Write(root, &request_body); + + return request_body; +} + +void OnGetRequestBody(const std::string& file_id, + const std::string& request_body) { + // TODO(b/221078840): Send drive patch request to update + // indexable text if request_body is not empty. + if (request_body.empty()) { + LOG(ERROR) << "Failed to parse the reqeust body for file id: " << file_id; + } +} + // Returns a valid pending screencast from `container_absolute_path`. A valid // screencast should have 1 media file and 1 metadata file. absl::optional<ash::PendingScreencast> GetPendingScreencast( @@ -185,18 +275,6 @@ return pending_screencast; } -void OnGetFileId(const base::FilePath& local_file_path, - const std::string& file_id) { - // TODO(b/221078840): Extracts indexable text and - // build the request body - // from `metadata_file_local_path`. Then send - // drive patch request to update indexable text on - // get file id. - if (file_id.empty()) { - LOG(ERROR) << "Failed to get file id for path: " << local_file_path; - } -} - // The `pending_webm_or_projector_events` are new uploading ".webm" or // ".projector" files' events. The `error_syncing_file` are ".webm" or // ".projector" files which failed to upload. Checks whether these files are @@ -399,6 +477,10 @@ on_get_file_id_callback_ = std::move(callback); } +void PendingScreencastManager::SetOnGetRequestBodyCallbackForTest( + OnGetRequestBodyCallback callback) { + on_get_request_body_ = std::move(callback); +} void PendingScreencastManager::OnProcessAndGenerateNewScreencastsFinished( const base::TimeTicks task_start_tick, const ash::PendingScreencastSet& screencasts) { @@ -467,9 +549,11 @@ // the indexable text and remove it from `syncing_metadata_files_`. const auto iter = syncing_metadata_files_.find(event_file); if (iter != syncing_metadata_files_.end()) { - auto on_get_file_id_callback = on_get_file_id_callback_ - ? std::move(on_get_file_id_callback_) - : base::BindOnce(&OnGetFileId); + auto on_get_file_id_callback = + on_get_file_id_callback_ + ? std::move(on_get_file_id_callback_) + : base::BindOnce(&PendingScreencastManager::OnGetFileId, + weak_ptr_factory_.GetWeakPtr()); // Posts a delayed task to get Drive metadata because the metadata might // not be polulated as the file get uploaded. This task has a long chain @@ -484,3 +568,17 @@ } } } + +void PendingScreencastManager::OnGetFileId( + const base::FilePath& local_file_path, + const std::string& file_id) { + if (file_id.empty()) + return; + + base::ThreadPool::PostTaskAndReplyWithResult( + FROM_HERE, {base::MayBlock()}, + base::BindOnce(&BuildRequestBody, local_file_path), + on_get_request_body_ + ? base::BindOnce(std::move(on_get_request_body_), file_id) + : base::BindOnce(&OnGetRequestBody, file_id)); +}
diff --git a/chrome/browser/ui/ash/projector/pending_screencast_manager.h b/chrome/browser/ui/ash/projector/pending_screencast_manager.h index d94eed3..994d7a7 100644 --- a/chrome/browser/ui/ash/projector/pending_screencast_manager.h +++ b/chrome/browser/ui/ash/projector/pending_screencast_manager.h
@@ -65,6 +65,10 @@ base::OnceCallback<void(const base::FilePath& local_file_path, const std::string& file_id)>; void SetOnGetFileIdCallbackForTest(OnGetFileIdCallback callback); + using OnGetRequestBodyCallback = + base::OnceCallback<void(const std::string& file_id, + const std::string& request_body)>; + void SetOnGetRequestBodyCallbackForTest(OnGetRequestBodyCallback callback); private: // Updates `pending_screencast_cache_` and notifies pending screencast change. @@ -86,6 +90,9 @@ // it is a screencast metadata file, post task to update indexable text. void OnFileSyncedCompletely(const base::FilePath& event_file); + void OnGetFileId(const base::FilePath& local_file_path, + const std::string& file_id); + // TODO(b/221902328): Fix the case that user might delete files through file // app. @@ -107,10 +114,6 @@ // A blocking task runner for file IO operations. scoped_refptr<base::SequencedTaskRunner> blocking_task_runner_; - // Used to update indexable text on getting Drive server side file id. - // Currently only available in test. - OnGetFileIdCallback on_get_file_id_callback_; - base::ScopedObservation<drivefs::DriveFsHost, drivefs::DriveFsHostObserver> drivefs_observation_{this}; base::ScopedObservation<session_manager::SessionManager, @@ -130,6 +133,11 @@ // in the current ChromeOS session. base::TimeTicks last_pending_screencast_change_tick_; + // Updates indexable text containing a lot of async steps. These callbacks are + // used in tests to verify the task quit correctly while error happens. + OnGetRequestBodyCallback on_get_request_body_; + OnGetFileIdCallback on_get_file_id_callback_; + base::WeakPtrFactory<PendingScreencastManager> weak_ptr_factory_{this}; };
diff --git a/chrome/browser/ui/ash/projector/pending_screencast_manager_browsertest.cc b/chrome/browser/ui/ash/projector/pending_screencast_manager_browsertest.cc index 14b6fc8..495b7004 100644 --- a/chrome/browser/ui/ash/projector/pending_screencast_manager_browsertest.cc +++ b/chrome/browser/ui/ash/projector/pending_screencast_manager_browsertest.cc
@@ -119,10 +119,18 @@ return &fake_drivefs_helper_->fake_drivefs(); } + // Creates file under the Drive relative `file_path` whose size is + // `total_bytes`. void CreateFileInDriveFsFolder(const std::string& file_path, int64_t total_bytes) { - base::ScopedAllowBlockingForTesting allow_blocking; + CreateFileInDriveFsFolder(file_path, std::string(total_bytes, 'a')); + } + // Creates file under the Drive relative `file_path` and write `file_content` + // to the file. + void CreateFileInDriveFsFolder(const std::string& file_path, + const std::string& file_content) { + base::ScopedAllowBlockingForTesting allow_blocking; base::FilePath relative_file_path(file_path); base::FilePath folder_path = GetDriveFsAbsolutePath(relative_file_path.DirName().value()); @@ -133,10 +141,8 @@ base::File file(folder_path.Append(relative_file_path.BaseName()), base::File::FLAG_CREATE | base::File::FLAG_WRITE); - // Create a buffer whose size is `total_bytes`. - std::string buffer(total_bytes, 'a'); - EXPECT_EQ(total_bytes, - file.Write(/*offset=*/0, buffer.data(), /*size=*/total_bytes)); + EXPECT_EQ(file_content.size(), file.Write(/*offset=*/0, file_content.data(), + /*size=*/file_content.size())); EXPECT_TRUE(file.IsValid()); file.Close(); } @@ -211,6 +217,48 @@ pending_screencast_manager()->OnSyncingStatusUpdate(syncing_status); } + void TestGetFileIdFailed() { + // Sets get file id callback: + base::RunLoop run_loop; + pending_screencast_manager()->SetOnGetFileIdCallbackForTest( + base::BindLambdaForTesting([&](const base::FilePath& local_file_path, + const std::string& file_id) { + EXPECT_EQ(GetDriveFsAbsolutePath(kDefaultMetadataFilePath), + local_file_path); + EXPECT_EQ(std::string(), file_id); + run_loop.Quit(); + })); + + // Mocks a metadata file finishes upload: + MockSyncFileCompleted(kDefaultMetadataFilePath, kTestMetadataFileBytes); + run_loop.Run(); + } + + void ExpectEmptyRequestBodyForProjectorFileContent( + const std::string& file_content) { + CreateFileInDriveFsFolder(kDefaultMetadataFilePath, file_content); + GetFakeDriveFs()->SetMetadata(base::FilePath(kDefaultMetadataFilePath), + "text/plain", kTestMetadataFile, false, false, + {}, {}, "abc123", + /*alternate_url=*/ + "https://drive.google.com/open?id=fileId"); + + // Sets get file id callback: + base::RunLoop run_loop; + pending_screencast_manager()->SetOnGetRequestBodyCallbackForTest( + base::BindLambdaForTesting( + [&](const std::string& file_id, const std::string& request_body) { + EXPECT_EQ(std::string(), request_body); + EXPECT_EQ("fileId", file_id); + run_loop.Quit(); + })); + + // Mocks a metadata file finishes upload: + MockSyncFileCompleted(kDefaultMetadataFilePath, kTestMetadataFileBytes); + + run_loop.Run(); + } + MOCK_METHOD1(PendingScreencastChangeCallback, void(const PendingScreencastSet&)); @@ -640,26 +688,32 @@ /*count=*/2); } -IN_PROC_BROWSER_TEST_F(PendingScreencastMangerBrowserTest, GetFileIdSuccess) { +IN_PROC_BROWSER_TEST_F(PendingScreencastMangerBrowserTest, OnGetRequestBody) { // Prepares a ".projector" file and it's metadata: - drivefs::mojom::SyncingStatus syncing_status; - CreateFileInDriveFsFolder(kDefaultMetadataFilePath, kTestMetadataFileBytes); - - GetFakeDriveFs()->SetMetadata(base::FilePath(kDefaultMetadataFilePath), - "text/plain", kTestMetadataFile, false, false, - {}, {}, "abc123", - "https://drive.google.com/open?id=fileId"); + const std::string kProjectorFileContent = + "{\"captionLanguage\":\"en\",\"captions\":[{\"endOffset\":1260," + "\"hypothesisParts\":[],\"startOffset\":760,\"text\":\"metadata " + "file.\"},{\"endOffset\":2300," + "\"hypothesisParts\":[],\"startOffset\":2000,\"text\":\"another sentence." + "\"}],\"tableOfContent\":[]}"; + CreateFileInDriveFsFolder(kDefaultMetadataFilePath, kProjectorFileContent); + GetFakeDriveFs()->SetMetadata( + base::FilePath(kDefaultMetadataFilePath), "text/plain", kTestMetadataFile, + false, false, {}, {}, "abc123", + /*alternate_url=*/"https://drive.google.com/open?id=fileId"); // Sets get file id callback: base::RunLoop run_loop; - pending_screencast_manager()->SetOnGetFileIdCallbackForTest( - base::BindLambdaForTesting([&](const base::FilePath& local_file_path, - const std::string& file_id) { - EXPECT_EQ(GetDriveFsAbsolutePath(kDefaultMetadataFilePath), - local_file_path); - EXPECT_EQ("fileId", file_id); - run_loop.Quit(); - })); + pending_screencast_manager()->SetOnGetRequestBodyCallbackForTest( + base::BindLambdaForTesting( + [&](const std::string& file_id, const std::string& request_body) { + EXPECT_EQ( + "{\"contentHints\":{\"indexableText\":\" metadata file. " + "another sentence.\"}}", + request_body); + EXPECT_EQ("fileId", file_id); + run_loop.Quit(); + })); // Mocks a metadata file finishes upload: MockSyncFileCompleted(kDefaultMetadataFilePath, kTestMetadataFileBytes); @@ -667,24 +721,63 @@ run_loop.Run(); } -IN_PROC_BROWSER_TEST_F(PendingScreencastMangerBrowserTest, GetFileIdFail) { +IN_PROC_BROWSER_TEST_F(PendingScreencastMangerBrowserTest, + GetFileIdFailByFileNotExist) { // Does not create ".projector", which leads to drive::FILE_ERROR_NOT_FOUND. - // Sets get file id callback: - base::RunLoop run_loop; - pending_screencast_manager()->SetOnGetFileIdCallbackForTest( - base::BindLambdaForTesting([&](const base::FilePath& local_file_path, - const std::string& file_id) { - EXPECT_EQ(GetDriveFsAbsolutePath(kDefaultMetadataFilePath), - local_file_path); - EXPECT_EQ(std::string(), file_id); - run_loop.Quit(); - })); + TestGetFileIdFailed(); +} - // Mocks a metadata file finishes upload: - MockSyncFileCompleted(kDefaultMetadataFilePath, kTestMetadataFileBytes); +IN_PROC_BROWSER_TEST_F(PendingScreencastMangerBrowserTest, + GetFileIdFailByEmptyAlternateUrl) { + CreateFileInDriveFsFolder(kDefaultMetadataFilePath, kTestMetadataFileBytes); + // Sets empty alternate url in metadata, which could happen when metadata is + // not fully populated. + GetFakeDriveFs()->SetMetadata(base::FilePath(kDefaultMetadataFilePath), + "text/plain", kTestMetadataFile, false, false, + {}, {}, "abc123", + /*alternate_url=*/std::string()); - run_loop.Run(); + TestGetFileIdFailed(); +} + +IN_PROC_BROWSER_TEST_F(PendingScreencastMangerBrowserTest, + GetFileIdFailByInCorrectAlternateUrl) { + CreateFileInDriveFsFolder(kDefaultMetadataFilePath, kTestMetadataFileBytes); + // Sets incorrect alternate url in metadata. + GetFakeDriveFs()->SetMetadata(base::FilePath(kDefaultMetadataFilePath), + "text/plain", kTestMetadataFile, false, false, + {}, {}, "abc123", + /*alternate_url=*/"alternate_url"); + + TestGetFileIdFailed(); +} + +IN_PROC_BROWSER_TEST_F(PendingScreencastMangerBrowserTest, + MalformedProjectorFileNoCaption) { + // Prepares a ".projector" file with no captions. + const std::string kProjectorFileContentNoCaption = + "{\"captionLanguage\":\"en\",\"tableOfContent\":[]}"; + ExpectEmptyRequestBodyForProjectorFileContent(kProjectorFileContentNoCaption); +} + +IN_PROC_BROWSER_TEST_F(PendingScreencastMangerBrowserTest, + MalformedProjectorFileNotJson) { + // Prepares a ".projector" file with no captions. + const std::string kProjectorFileContentNotJson = + "{\"captionLanguage\":\"en\",\"captions\":[{\"endOffset\":1260," + "\"hypothesisParts\":[],\"startOffset\":760,\"text\":\"metadata " + "file.\"}],\"tableOfContent\":[]"; + ExpectEmptyRequestBodyForProjectorFileContent(kProjectorFileContentNotJson); +} + +IN_PROC_BROWSER_TEST_F(PendingScreencastMangerBrowserTest, + ProjectorFileEmptyCaption) { + // Prepares a ".projector" file and it's metadata: + const std::string kProjectorFileContentEmptyCaption = + "{\"captionLanguage\":\"en\",\"captions\":[],\"tableOfContent\":[]}"; + ExpectEmptyRequestBodyForProjectorFileContent( + kProjectorFileContentEmptyCaption); } class PendingScreencastMangerMultiProfileTest : public LoginManagerTest {
diff --git a/chrome/browser/ui/ash/system_tray_client_impl.cc b/chrome/browser/ui/ash/system_tray_client_impl.cc index 66b17ea..ddb261f9 100644 --- a/chrome/browser/ui/ash/system_tray_client_impl.cc +++ b/chrome/browser/ui/ash/system_tray_client_impl.cc
@@ -185,7 +185,7 @@ ash::ManagementDeviceMode GetManagementDeviceMode( policy::BrowserPolicyConnectorAsh* connector) { - if (connector->IsDeviceEnterpriseManaged()) + if (!connector->IsDeviceEnterpriseManaged()) return ash::ManagementDeviceMode::kNone; if (connector->IsKioskEnrolled())
diff --git a/chrome/browser/ui/views/extensions/extensions_toolbar_container_interactive_uitest.cc b/chrome/browser/ui/views/extensions/extensions_toolbar_container_interactive_uitest.cc index a0d4190a..0d13af2 100644 --- a/chrome/browser/ui/views/extensions/extensions_toolbar_container_interactive_uitest.cc +++ b/chrome/browser/ui/views/extensions/extensions_toolbar_container_interactive_uitest.cc
@@ -17,10 +17,9 @@ #include "chrome/browser/profiles/profile.h" #include "chrome/browser/ui/browser.h" #include "chrome/browser/ui/browser_window.h" -#include "chrome/browser/ui/toolbar/test_toolbar_actions_bar_bubble_delegate.h" #include "chrome/browser/ui/toolbar/toolbar_action_view_controller.h" -#include "chrome/browser/ui/toolbar/toolbar_actions_bar_bubble_delegate.h" #include "chrome/browser/ui/toolbar/toolbar_actions_model.h" +#include "chrome/browser/ui/views/extensions/extensions_toolbar_button.h" #include "chrome/browser/ui/views/extensions/extensions_toolbar_interactive_uitest.h" #include "chrome/common/chrome_switches.h" #include "chrome/grit/generated_resources.h" @@ -42,8 +41,10 @@ #include "net/dns/mock_host_resolver.h" #include "ui/base/dragdrop/drag_drop_types.h" #include "ui/base/l10n/l10n_util.h" +#include "ui/views/bubble/bubble_dialog_model_host.h" #include "ui/views/layout/animating_layout_manager_test_util.h" #include "ui/views/test/widget_test.h" +#include "ui/views/widget/widget.h" namespace { @@ -73,6 +74,15 @@ std::unique_ptr<base::RunLoop> run_loop_; }; +views::Widget* CreateBubble(views::View* anchor_point) { + std::unique_ptr<ui::DialogModel> dialog_model = + ui::DialogModel::Builder().SetTitle(u"Title").Build(); + auto bubble = std::make_unique<views::BubbleDialogModelHost>( + std::move(dialog_model), anchor_point, views::BubbleBorder::TOP_RIGHT); + + return views::BubbleDialogDelegate::CreateBubble(std::move(bubble)); +} + } // namespace class ExtensionsToolbarContainerUITest : public ExtensionsToolbarUITest { @@ -384,45 +394,41 @@ } IN_PROC_BROWSER_TEST_F(ExtensionsToolbarContainerUITest, - ShowToolbarActionsBarBubbleForExtension_Pinned) { + ShowWidgetForExtension_Pinned) { scoped_refptr<const extensions::Extension> extension = LoadTestExtension("extensions/simple_with_popup"); ASSERT_TRUE(extension); + ExtensionsToolbarContainer* const container = GetExtensionsToolbarContainer(); + ToolbarActionViewController* const action = + container->GetActionForId(extension->id()); + ToolbarActionsModel* const model = ToolbarActionsModel::Get(profile()); model->SetActionVisibility(extension->id(), true); - ExtensionsToolbarContainer* const container = GetExtensionsToolbarContainer(); container->GetWidget()->LayoutRootViewIfNecessary(); - { - auto visible_actions = GetVisibleToolbarActionViews(); - ASSERT_EQ(1u, visible_actions.size()); - EXPECT_EQ(extension->id(), visible_actions[0]->view_controller()->GetId()); - } + auto visible_actions = GetVisibleToolbarActionViews(); + ASSERT_EQ(1u, visible_actions.size()); + EXPECT_EQ(extension->id(), visible_actions[0]->view_controller()->GetId()); - TestToolbarActionsBarBubbleDelegate test_delegate(u"Heading", u"Body", - u"Action"); - test_delegate.set_action_id(extension->id()); - container->ShowToolbarActionBubble(test_delegate.GetDelegate()); + views::Widget* bubble = CreateBubble(container->GetExtensionsButton()); + container->ShowWidgetForExtension(bubble, extension->id()); + views::Widget* const bubble_widget = container->GetAnchoredWidgetForExtensionForTesting(extension->id()); ASSERT_TRUE(bubble_widget); views::test::WidgetVisibleWaiter(bubble_widget).Wait(); - EXPECT_TRUE(test_delegate.shown()); - { - views::test::WidgetDestroyedWaiter destroyed_waiter(bubble_widget); - bubble_widget->Close(); - destroyed_waiter.Wait(); - } + views::test::WidgetDestroyedWaiter destroyed_waiter(bubble_widget); + bubble_widget->CloseWithReason( + views::Widget::ClosedReason::kCloseButtonClicked); + destroyed_waiter.Wait(); - ASSERT_TRUE(test_delegate.close_action()); - EXPECT_EQ(ToolbarActionsBarBubbleDelegate::CLOSE_DISMISS_DEACTIVATION, - *test_delegate.close_action()); + EXPECT_TRUE(container->IsActionVisibleOnToolbar(action)); } IN_PROC_BROWSER_TEST_F(ExtensionsToolbarContainerUITest, - ShowToolbarActionsBarBubbleForExtension_Unpinned) { + ShowWidgetForExtension_Unpinned) { scoped_refptr<const extensions::Extension> extension = LoadTestExtension("extensions/simple_with_popup"); ASSERT_TRUE(extension); @@ -433,10 +439,9 @@ EXPECT_EQ(0u, GetVisibleToolbarActionViews().size()); - TestToolbarActionsBarBubbleDelegate test_delegate(u"Heading", u"Body", - u"Action"); - test_delegate.set_action_id(extension->id()); - container->ShowToolbarActionBubble(test_delegate.GetDelegate()); + views::Widget* bubble = CreateBubble(container->GetExtensionsButton()); + container->ShowWidgetForExtension(bubble, extension->id()); + views::Widget* const bubble_widget = container->GetAnchoredWidgetForExtensionForTesting(extension->id()); ASSERT_TRUE(bubble_widget); @@ -444,22 +449,16 @@ EXPECT_TRUE(container->IsActionVisibleOnToolbar(action)); - EXPECT_TRUE(test_delegate.shown()); - { - views::test::WidgetDestroyedWaiter destroyed_waiter(bubble_widget); - bubble_widget->Close(); - destroyed_waiter.Wait(); - } - - ASSERT_TRUE(test_delegate.close_action()); - EXPECT_EQ(ToolbarActionsBarBubbleDelegate::CLOSE_DISMISS_DEACTIVATION, - *test_delegate.close_action()); + views::test::WidgetDestroyedWaiter destroyed_waiter(bubble_widget); + bubble_widget->CloseWithReason( + views::Widget::ClosedReason::kCloseButtonClicked); + destroyed_waiter.Wait(); EXPECT_FALSE(container->IsActionVisibleOnToolbar(action)); } IN_PROC_BROWSER_TEST_F(ExtensionsToolbarContainerUITest, - ShowToolbarActionsBarBubbleForExtension_NoAction) { + ShowWidgetForExtension_NoAction) { scoped_refptr<const extensions::Extension> extension = LoadTestExtension("extensions/simple_with_popup"); ASSERT_TRUE(extension); @@ -475,10 +474,9 @@ EXPECT_EQ(0u, GetVisibleToolbarActionViews().size()); - TestToolbarActionsBarBubbleDelegate test_delegate(u"Heading", u"Body", - u"Action"); - test_delegate.set_action_id(extension->id()); - container->ShowToolbarActionBubble(test_delegate.GetDelegate()); + views::Widget* bubble = CreateBubble(container->GetExtensionsButton()); + container->ShowWidgetForExtension(bubble, extension->id()); + views::Widget* const bubble_widget = container->GetAnchoredWidgetForExtensionForTesting(extension->id()); ASSERT_TRUE(bubble_widget); @@ -486,52 +484,40 @@ EXPECT_EQ(0u, GetVisibleToolbarActionViews().size()); - EXPECT_TRUE(test_delegate.shown()); - { - views::test::WidgetDestroyedWaiter destroyed_waiter(bubble_widget); - bubble_widget->Close(); - destroyed_waiter.Wait(); - } - - ASSERT_TRUE(test_delegate.close_action()); - EXPECT_EQ(ToolbarActionsBarBubbleDelegate::CLOSE_DISMISS_DEACTIVATION, - *test_delegate.close_action()); + views::test::WidgetDestroyedWaiter destroyed_waiter(bubble_widget); + bubble_widget->CloseWithReason( + views::Widget::ClosedReason::kCloseButtonClicked); + destroyed_waiter.Wait(); } IN_PROC_BROWSER_TEST_F(ExtensionsToolbarContainerUITest, - UninstallExtensionWithActivelyShownToolbarActionBubble) { + UninstallExtensionWithActivelyShownWidget) { scoped_refptr<const extensions::Extension> extension = LoadTestExtension("extensions/simple_with_popup"); ASSERT_TRUE(extension); + ExtensionsToolbarContainer* const container = GetExtensionsToolbarContainer(); + ToolbarActionsModel* const model = ToolbarActionsModel::Get(profile()); model->SetActionVisibility(extension->id(), true); - ExtensionsToolbarContainer* const container = GetExtensionsToolbarContainer(); container->GetWidget()->LayoutRootViewIfNecessary(); - { - auto visible_actions = GetVisibleToolbarActionViews(); - ASSERT_EQ(1u, visible_actions.size()); - EXPECT_EQ(extension->id(), visible_actions[0]->view_controller()->GetId()); - } + auto visible_actions = GetVisibleToolbarActionViews(); + ASSERT_EQ(1u, visible_actions.size()); + EXPECT_EQ(extension->id(), visible_actions[0]->view_controller()->GetId()); - TestToolbarActionsBarBubbleDelegate test_delegate(u"Heading", u"Body", - u"Action"); - test_delegate.set_action_id(extension->id()); - container->ShowToolbarActionBubble(test_delegate.GetDelegate()); + views::Widget* bubble = CreateBubble(container->GetExtensionsButton()); + container->ShowWidgetForExtension(bubble, extension->id()); + views::Widget* const bubble_widget = container->GetAnchoredWidgetForExtensionForTesting(extension->id()); ASSERT_TRUE(bubble_widget); views::test::WidgetVisibleWaiter(bubble_widget).Wait(); - EXPECT_TRUE(test_delegate.shown()); - - { - extensions::ExtensionService* const extension_service = - extensions::ExtensionSystem::Get(profile())->extension_service(); - extension_service->UninstallExtension( - extension->id(), extensions::UNINSTALL_REASON_FOR_TESTING, nullptr); - } + extensions::ExtensionService* const extension_service = + extensions::ExtensionSystem::Get(profile())->extension_service(); + extension_service->UninstallExtension( + extension->id(), extensions::UNINSTALL_REASON_FOR_TESTING, nullptr); EXPECT_EQ(0u, GetVisibleToolbarActionViews().size()); EXPECT_FALSE(container->GetActionForId(extension->id())); @@ -541,7 +527,7 @@ // should very likely close the bubble as well. I wouldn't be surprised if // some bubble handlers don't expect the extension to be gone. views::test::WidgetDestroyedWaiter destroyed_waiter(bubble_widget); - bubble_widget->Close(); + bubble_widget->CloseWithReason(views::Widget::ClosedReason::kUnspecified); destroyed_waiter.Wait(); } @@ -762,9 +748,7 @@ // bubble. Accept the bubble. { content::TestNavigationObserver observer(web_contents); - runner->set_default_bubble_close_action_for_testing( - std::make_unique<ToolbarActionsBarBubbleDelegate::CloseAction>( - ToolbarActionsBarBubbleDelegate::CLOSE_EXECUTE)); + runner->accept_bubble_for_testing(true); extension_menu->ExecuteCommand( extensions::ExtensionContextMenuModel::PAGE_ACCESS_RUN_ON_SITE, 0 /* event_flags */); @@ -796,9 +780,7 @@ // Allow the extension to run on all sites this time. This should again show a // refresh bubble. Dismiss it. - runner->set_default_bubble_close_action_for_testing( - std::make_unique<ToolbarActionsBarBubbleDelegate::CloseAction>( - ToolbarActionsBarBubbleDelegate::CLOSE_DISMISS_USER_ACTION)); + runner->accept_bubble_for_testing(false); extension_menu->ExecuteCommand( extensions::ExtensionContextMenuModel::PAGE_ACCESS_RUN_ON_ALL_SITES, 0 /* event_flags */);
diff --git a/chrome/browser/ui/views/keyboard_access_browsertest.cc b/chrome/browser/ui/views/keyboard_access_browsertest.cc index e5dcb386..8341306 100644 --- a/chrome/browser/ui/views/keyboard_access_browsertest.cc +++ b/chrome/browser/ui/views/keyboard_access_browsertest.cc
@@ -259,7 +259,7 @@ wchar_t class_name[MAX_PATH] = {0}; GetClassName(reinterpret_cast<HWND>(w_param), class_name, std::size(class_name)); - if (base::LowerCaseEqualsASCII(class_name, "#32768")) { + if (base::EqualsCaseInsensitiveASCII(class_name, "#32768")) { // Select the New Tab option and then send the enter key to execute it. ::PostMessage(reinterpret_cast<HWND>(w_param), WM_CHAR, 'T', 0); ::PostMessage(reinterpret_cast<HWND>(w_param), WM_KEYDOWN, VK_RETURN, 0); @@ -311,7 +311,7 @@ wchar_t class_name[MAX_PATH] = {0}; GetClassName(reinterpret_cast<HWND>(w_param), class_name, std::size(class_name)); - if (base::LowerCaseEqualsASCII(class_name, "#32768")) { + if (base::EqualsCaseInsensitiveASCII(class_name, "#32768")) { // Send 'E' for the Reopen closed tab option. ::PostMessage(reinterpret_cast<HWND>(w_param), WM_CHAR, 'E', 0); }
diff --git a/chrome/browser/ui/views/payments/payment_request_use_stats_browsertest.cc b/chrome/browser/ui/views/payments/payment_request_use_stats_browsertest.cc index f39d46c0..ef0ec58 100644 --- a/chrome/browser/ui/views/payments/payment_request_use_stats_browsertest.cc +++ b/chrome/browser/ui/views/payments/payment_request_use_stats_browsertest.cc
@@ -96,7 +96,9 @@ // Tests that use stats for the shipping address used in a Payment Request are // properly updated upon completion. -IN_PROC_BROWSER_TEST_F(PaymentRequestShippingAddressUseStatsTest, RecordUse) { +// TODO(crbug.com/1327722): Test is flaky. +IN_PROC_BROWSER_TEST_F(PaymentRequestShippingAddressUseStatsTest, + DISABLED_RecordUse) { NavigateTo("/payment_request_free_shipping_test.html"); autofill::TestAutofillClock test_clock; test_clock.SetNow(kSomeDate);
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 fb7f87f4..962e354 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
@@ -119,1465 +119,6 @@ IN_PROC_BROWSER_TEST_F( WebAppIntegrationBrowserTest, - WebAppIntegration_30SiteA_24_12SiteA_7SiteA_39SiteB_16_27_14) { - // 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. - helper_.InstallCreateShortcutWindowed(Site::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.NavigatePwaSiteATo(Site::kSiteB); - helper_.CheckCustomToolbar(); - helper_.CloseCustomToolbar(); - helper_.CheckAppNavigationIsStartUrl(); -} - -IN_PROC_BROWSER_TEST_F( - WebAppIntegrationBrowserTest, - WebAppIntegration_30SiteA_24_12SiteA_7SiteA_39SiteB_16_71_22) { - // 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. - helper_.InstallCreateShortcutWindowed(Site::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.NavigatePwaSiteATo(Site::kSiteB); - helper_.CheckCustomToolbar(); - helper_.OpenInChrome(); - helper_.CheckTabCreated(); -} - -IN_PROC_BROWSER_TEST_F( - WebAppIntegrationBrowserTest, - WebAppIntegration_30SiteA_24_12SiteA_7SiteA_32SiteA_7SiteA_12SiteA_37SiteA_20) { - // 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. - helper_.InstallCreateShortcutWindowed(Site::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.InstallPolicyAppTabbedNoShortcut(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.NavigateBrowser(Site::kSiteA); - helper_.CheckLaunchIconShown(); -} - -IN_PROC_BROWSER_TEST_F( - WebAppIntegrationBrowserTest, - WebAppIntegration_30SiteA_24_12SiteA_7SiteA_32SiteA_7SiteA_12SiteA_69SiteA_24) { - // 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. - helper_.InstallCreateShortcutWindowed(Site::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.InstallPolicyAppTabbedNoShortcut(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.LaunchFromMenuOption(Site::kSiteA); - helper_.CheckWindowCreated(); -} - -IN_PROC_BROWSER_TEST_F( - WebAppIntegrationBrowserTest, - WebAppIntegration_30SiteA_24_12SiteA_7SiteA_32SiteA_7SiteA_12SiteA_35SiteA_24) { - // 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. - helper_.InstallCreateShortcutWindowed(Site::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.InstallPolicyAppTabbedNoShortcut(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.LaunchFromLaunchIcon(Site::kSiteA); - helper_.CheckWindowCreated(); -} - -// TODO(crbug.com/1323445): Flaky. -IN_PROC_BROWSER_TEST_F( - WebAppIntegrationBrowserTest, - DISABLED_WebAppIntegration_30SiteA_24_12SiteA_7SiteA_32SiteA_7SiteA_12SiteA_34SiteA_24) { - // 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. - helper_.InstallCreateShortcutWindowed(Site::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.InstallPolicyAppTabbedNoShortcut(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.LaunchFromChromeApps(Site::kSiteA); - helper_.CheckWindowCreated(); -} - -IN_PROC_BROWSER_TEST_F( - WebAppIntegrationBrowserTest, - WebAppIntegration_30SiteA_24_12SiteA_7SiteA_32SiteA_7SiteA_12SiteA_44SiteA_12SiteA_7SiteA) { - // 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. - helper_.InstallCreateShortcutWindowed(Site::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.InstallPolicyAppTabbedNoShortcut(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.UninstallPolicyApp(Site::kSiteA); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); -} - -IN_PROC_BROWSER_TEST_F( - WebAppIntegrationBrowserTest, - WebAppIntegration_30SiteA_24_12SiteA_7SiteA_33SiteA_7SiteA_44SiteA_12SiteA_7SiteA) { - // 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. - helper_.InstallCreateShortcutWindowed(Site::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.InstallPolicyAppWindowedNoShortcut(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.UninstallPolicyApp(Site::kSiteA); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); -} - -IN_PROC_BROWSER_TEST_F( - WebAppIntegrationBrowserTest, - WebAppIntegration_30SiteA_24_12SiteA_7SiteA_48SiteA_12SiteA_37SiteA_20) { - // 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. - helper_.InstallCreateShortcutWindowed(Site::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.InstallPolicyAppTabbedShortcut(Site::kSiteA); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.NavigateBrowser(Site::kSiteA); - helper_.CheckLaunchIconShown(); -} - -IN_PROC_BROWSER_TEST_F( - WebAppIntegrationBrowserTest, - WebAppIntegration_30SiteA_24_12SiteA_7SiteA_48SiteA_12SiteA_69SiteA_24) { - // 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. - helper_.InstallCreateShortcutWindowed(Site::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.InstallPolicyAppTabbedShortcut(Site::kSiteA); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.LaunchFromMenuOption(Site::kSiteA); - helper_.CheckWindowCreated(); -} - -IN_PROC_BROWSER_TEST_F( - WebAppIntegrationBrowserTest, - WebAppIntegration_30SiteA_24_12SiteA_7SiteA_48SiteA_12SiteA_35SiteA_24) { - // 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. - helper_.InstallCreateShortcutWindowed(Site::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.InstallPolicyAppTabbedShortcut(Site::kSiteA); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.LaunchFromLaunchIcon(Site::kSiteA); - helper_.CheckWindowCreated(); -} - -IN_PROC_BROWSER_TEST_F( - WebAppIntegrationBrowserTest, - WebAppIntegration_30SiteA_24_12SiteA_7SiteA_48SiteA_12SiteA_34SiteA_24) { - // 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. - helper_.InstallCreateShortcutWindowed(Site::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.InstallPolicyAppTabbedShortcut(Site::kSiteA); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.LaunchFromChromeApps(Site::kSiteA); - helper_.CheckWindowCreated(); -} - -IN_PROC_BROWSER_TEST_F( - WebAppIntegrationBrowserTest, - WebAppIntegration_30SiteA_24_12SiteA_7SiteA_48SiteA_12SiteA_44SiteA_12SiteA_7SiteA) { - // 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. - helper_.InstallCreateShortcutWindowed(Site::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.InstallPolicyAppTabbedShortcut(Site::kSiteA); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.UninstallPolicyApp(Site::kSiteA); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); -} - -IN_PROC_BROWSER_TEST_F( - WebAppIntegrationBrowserTest, - WebAppIntegration_30SiteA_24_12SiteA_7SiteA_37SiteA_17_20) { - // 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. - helper_.InstallCreateShortcutWindowed(Site::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.NavigateBrowser(Site::kSiteA); - helper_.CheckInstallIconNotShown(); - helper_.CheckLaunchIconShown(); -} - -IN_PROC_BROWSER_TEST_F( - WebAppIntegrationBrowserTest, - WebAppIntegration_30SiteA_24_12SiteA_7SiteA_28_70SiteA_69SiteA_94_24_25) { - // 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. - helper_.InstallCreateShortcutWindowed(Site::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.ClosePwa(); - helper_.ManifestUpdateDisplayBrowser(Site::kSiteA); - helper_.LaunchFromMenuOption(Site::kSiteA); - helper_.CheckTabNotCreated(); - helper_.CheckWindowCreated(); - helper_.CheckWindowDisplayMinimal(); -} - -IN_PROC_BROWSER_TEST_F( - WebAppIntegrationBrowserTest, - WebAppIntegration_30SiteA_24_12SiteA_7SiteA_28_70SiteA_35SiteA_94_24_25) { - // 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. - helper_.InstallCreateShortcutWindowed(Site::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.ClosePwa(); - helper_.ManifestUpdateDisplayBrowser(Site::kSiteA); - helper_.LaunchFromLaunchIcon(Site::kSiteA); - helper_.CheckTabNotCreated(); - helper_.CheckWindowCreated(); - helper_.CheckWindowDisplayMinimal(); -} - -IN_PROC_BROWSER_TEST_F( - WebAppIntegrationBrowserTest, - WebAppIntegration_30SiteA_24_12SiteA_7SiteA_28_70SiteA_34SiteA_94_24_25) { - // 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. - helper_.InstallCreateShortcutWindowed(Site::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.ClosePwa(); - helper_.ManifestUpdateDisplayBrowser(Site::kSiteA); - helper_.LaunchFromChromeApps(Site::kSiteA); - helper_.CheckTabNotCreated(); - helper_.CheckWindowCreated(); - helper_.CheckWindowDisplayMinimal(); -} - -IN_PROC_BROWSER_TEST_F( - WebAppIntegrationBrowserTest, - WebAppIntegration_30SiteA_24_12SiteA_7SiteA_28_36SiteA_69SiteA_25) { - // 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. - helper_.InstallCreateShortcutWindowed(Site::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.ClosePwa(); - helper_.ManifestUpdateDisplayMinimal(Site::kSiteA); - helper_.LaunchFromMenuOption(Site::kSiteA); - helper_.CheckWindowDisplayMinimal(); -} - -IN_PROC_BROWSER_TEST_F( - WebAppIntegrationBrowserTest, - WebAppIntegration_30SiteA_24_12SiteA_7SiteA_28_36SiteA_35SiteA_25) { - // 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. - helper_.InstallCreateShortcutWindowed(Site::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.ClosePwa(); - helper_.ManifestUpdateDisplayMinimal(Site::kSiteA); - helper_.LaunchFromLaunchIcon(Site::kSiteA); - helper_.CheckWindowDisplayMinimal(); -} - -IN_PROC_BROWSER_TEST_F( - WebAppIntegrationBrowserTest, - WebAppIntegration_30SiteA_24_12SiteA_7SiteA_28_36SiteA_34SiteA_25) { - // 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. - helper_.InstallCreateShortcutWindowed(Site::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.ClosePwa(); - helper_.ManifestUpdateDisplayMinimal(Site::kSiteA); - helper_.LaunchFromChromeApps(Site::kSiteA); - helper_.CheckWindowDisplayMinimal(); -} - -IN_PROC_BROWSER_TEST_F( - WebAppIntegrationBrowserTest, - WebAppIntegration_30SiteA_24_12SiteA_7SiteA_69SiteA_24_26) { - // 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. - helper_.InstallCreateShortcutWindowed(Site::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.LaunchFromMenuOption(Site::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckWindowDisplayStandalone(); -} - -IN_PROC_BROWSER_TEST_F( - WebAppIntegrationBrowserTest, - WebAppIntegration_30SiteA_24_12SiteA_7SiteA_35SiteA_24_26) { - // 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. - helper_.InstallCreateShortcutWindowed(Site::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.LaunchFromLaunchIcon(Site::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckWindowDisplayStandalone(); -} - -IN_PROC_BROWSER_TEST_F( - WebAppIntegrationBrowserTest, - WebAppIntegration_30SiteA_24_12SiteA_7SiteA_34SiteA_24_26) { - // 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. - helper_.InstallCreateShortcutWindowed(Site::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.LaunchFromChromeApps(Site::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckWindowDisplayStandalone(); -} - -IN_PROC_BROWSER_TEST_F( - WebAppIntegrationBrowserTest, - WebAppIntegration_30SiteA_24_12SiteA_7SiteA_50SiteA_11SiteA_34SiteA_22) { - // 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. - helper_.InstallCreateShortcutWindowed(Site::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.SetOpenInTab(Site::kSiteA); - helper_.CheckAppInListTabbed(Site::kSiteA); - helper_.LaunchFromChromeApps(Site::kSiteA); - helper_.CheckTabCreated(); -} - -IN_PROC_BROWSER_TEST_F( - WebAppIntegrationBrowserTest, - WebAppIntegration_30SiteA_24_12SiteA_7SiteA_50SiteA_11SiteA_37SiteA_18) { - // 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. - helper_.InstallCreateShortcutWindowed(Site::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.SetOpenInTab(Site::kSiteA); - helper_.CheckAppInListTabbed(Site::kSiteA); - helper_.NavigateBrowser(Site::kSiteA); - helper_.CheckInstallIconShown(); -} - -IN_PROC_BROWSER_TEST_F( - WebAppIntegrationBrowserTest, - WebAppIntegration_30SiteA_24_12SiteA_7SiteA_37SiteAFoo_17_20) { - // 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. - helper_.InstallCreateShortcutWindowed(Site::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.NavigateBrowser(Site::kSiteAFoo); - helper_.CheckInstallIconNotShown(); - helper_.CheckLaunchIconShown(); -} - -IN_PROC_BROWSER_TEST_F( - WebAppIntegrationBrowserTest, - WebAppIntegration_30SiteA_24_12SiteA_7SiteA_37SiteB_18_19) { - // 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. - helper_.InstallCreateShortcutWindowed(Site::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.NavigateBrowser(Site::kSiteB); - helper_.CheckInstallIconShown(); - helper_.CheckLaunchIconNotShown(); -} - -IN_PROC_BROWSER_TEST_F(WebAppIntegrationBrowserTest, - WebAppIntegration_30SiteA_24_12SiteA_7SiteA_71_22) { - // 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. - helper_.InstallCreateShortcutWindowed(Site::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.OpenInChrome(); - helper_.CheckTabCreated(); -} - -IN_PROC_BROWSER_TEST_F( - WebAppIntegrationBrowserTest, - WebAppIntegration_30SiteA_24_12SiteA_7SiteA_10SiteA_15SiteA_37SiteA_18_19) { - // 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. - helper_.InstallCreateShortcutWindowed(Site::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.UninstallFromList(Site::kSiteA); - helper_.CheckAppNotInList(Site::kSiteA); - helper_.NavigateBrowser(Site::kSiteA); - helper_.CheckInstallIconShown(); - helper_.CheckLaunchIconNotShown(); -} - -IN_PROC_BROWSER_TEST_F( - WebAppIntegrationBrowserTest, - WebAppIntegration_30SiteA_24_12SiteA_7SiteA_49SiteA_44SiteA_12SiteA_7SiteA) { - // 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. - helper_.InstallCreateShortcutWindowed(Site::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.InstallPolicyAppWindowedShortcut(Site::kSiteA); - helper_.UninstallPolicyApp(Site::kSiteA); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); -} - -IN_PROC_BROWSER_TEST_F( - WebAppIntegrationBrowserTest, - WebAppIntegration_31SiteA_24_12SiteA_7SiteA_39SiteB_16_27_14) { - // 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. - helper_.InstallOmniboxIcon(InstallableSite::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.NavigatePwaSiteATo(Site::kSiteB); - helper_.CheckCustomToolbar(); - helper_.CloseCustomToolbar(); - helper_.CheckAppNavigationIsStartUrl(); -} - -IN_PROC_BROWSER_TEST_F( - WebAppIntegrationBrowserTest, - WebAppIntegration_31SiteA_24_12SiteA_7SiteA_39SiteB_16_71_22) { - // 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. - helper_.InstallOmniboxIcon(InstallableSite::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.NavigatePwaSiteATo(Site::kSiteB); - helper_.CheckCustomToolbar(); - helper_.OpenInChrome(); - helper_.CheckTabCreated(); -} - -IN_PROC_BROWSER_TEST_F( - WebAppIntegrationBrowserTest, - WebAppIntegration_31SiteA_24_12SiteA_7SiteA_32SiteA_7SiteA_12SiteA_37SiteA_20) { - // 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. - helper_.InstallOmniboxIcon(InstallableSite::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.InstallPolicyAppTabbedNoShortcut(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.NavigateBrowser(Site::kSiteA); - helper_.CheckLaunchIconShown(); -} - -IN_PROC_BROWSER_TEST_F( - WebAppIntegrationBrowserTest, - WebAppIntegration_31SiteA_24_12SiteA_7SiteA_32SiteA_7SiteA_12SiteA_69SiteA_24) { - // 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. - helper_.InstallOmniboxIcon(InstallableSite::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.InstallPolicyAppTabbedNoShortcut(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.LaunchFromMenuOption(Site::kSiteA); - helper_.CheckWindowCreated(); -} - -IN_PROC_BROWSER_TEST_F( - WebAppIntegrationBrowserTest, - WebAppIntegration_31SiteA_24_12SiteA_7SiteA_32SiteA_7SiteA_12SiteA_35SiteA_24) { - // 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. - helper_.InstallOmniboxIcon(InstallableSite::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.InstallPolicyAppTabbedNoShortcut(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.LaunchFromLaunchIcon(Site::kSiteA); - helper_.CheckWindowCreated(); -} - -IN_PROC_BROWSER_TEST_F( - WebAppIntegrationBrowserTest, - WebAppIntegration_31SiteA_24_12SiteA_7SiteA_32SiteA_7SiteA_12SiteA_34SiteA_24) { - // 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. - helper_.InstallOmniboxIcon(InstallableSite::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.InstallPolicyAppTabbedNoShortcut(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.LaunchFromChromeApps(Site::kSiteA); - helper_.CheckWindowCreated(); -} - -IN_PROC_BROWSER_TEST_F( - WebAppIntegrationBrowserTest, - WebAppIntegration_31SiteA_24_12SiteA_7SiteA_32SiteA_7SiteA_12SiteA_44SiteA_12SiteA_7SiteA) { - // 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. - helper_.InstallOmniboxIcon(InstallableSite::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.InstallPolicyAppTabbedNoShortcut(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.UninstallPolicyApp(Site::kSiteA); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); -} - -IN_PROC_BROWSER_TEST_F( - WebAppIntegrationBrowserTest, - WebAppIntegration_31SiteA_24_12SiteA_7SiteA_33SiteA_7SiteA_44SiteA_12SiteA_7SiteA) { - // 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. - helper_.InstallOmniboxIcon(InstallableSite::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.InstallPolicyAppWindowedNoShortcut(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.UninstallPolicyApp(Site::kSiteA); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); -} - -IN_PROC_BROWSER_TEST_F( - WebAppIntegrationBrowserTest, - WebAppIntegration_31SiteA_24_12SiteA_7SiteA_48SiteA_12SiteA_37SiteA_20) { - // 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. - helper_.InstallOmniboxIcon(InstallableSite::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.InstallPolicyAppTabbedShortcut(Site::kSiteA); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.NavigateBrowser(Site::kSiteA); - helper_.CheckLaunchIconShown(); -} - -IN_PROC_BROWSER_TEST_F( - WebAppIntegrationBrowserTest, - WebAppIntegration_31SiteA_24_12SiteA_7SiteA_48SiteA_12SiteA_69SiteA_24) { - // 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. - helper_.InstallOmniboxIcon(InstallableSite::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.InstallPolicyAppTabbedShortcut(Site::kSiteA); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.LaunchFromMenuOption(Site::kSiteA); - helper_.CheckWindowCreated(); -} - -IN_PROC_BROWSER_TEST_F( - WebAppIntegrationBrowserTest, - WebAppIntegration_31SiteA_24_12SiteA_7SiteA_48SiteA_12SiteA_35SiteA_24) { - // 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. - helper_.InstallOmniboxIcon(InstallableSite::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.InstallPolicyAppTabbedShortcut(Site::kSiteA); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.LaunchFromLaunchIcon(Site::kSiteA); - helper_.CheckWindowCreated(); -} - -IN_PROC_BROWSER_TEST_F( - WebAppIntegrationBrowserTest, - WebAppIntegration_31SiteA_24_12SiteA_7SiteA_48SiteA_12SiteA_34SiteA_24) { - // 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. - helper_.InstallOmniboxIcon(InstallableSite::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.InstallPolicyAppTabbedShortcut(Site::kSiteA); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.LaunchFromChromeApps(Site::kSiteA); - helper_.CheckWindowCreated(); -} - -IN_PROC_BROWSER_TEST_F( - WebAppIntegrationBrowserTest, - WebAppIntegration_31SiteA_24_12SiteA_7SiteA_48SiteA_12SiteA_44SiteA_12SiteA_7SiteA) { - // 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. - helper_.InstallOmniboxIcon(InstallableSite::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.InstallPolicyAppTabbedShortcut(Site::kSiteA); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.UninstallPolicyApp(Site::kSiteA); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); -} - -IN_PROC_BROWSER_TEST_F( - WebAppIntegrationBrowserTest, - WebAppIntegration_31SiteA_24_12SiteA_7SiteA_37SiteA_17_20) { - // 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. - helper_.InstallOmniboxIcon(InstallableSite::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.NavigateBrowser(Site::kSiteA); - helper_.CheckInstallIconNotShown(); - helper_.CheckLaunchIconShown(); -} - -IN_PROC_BROWSER_TEST_F( - WebAppIntegrationBrowserTest, - WebAppIntegration_31SiteA_24_12SiteA_7SiteA_28_70SiteA_69SiteA_94_24_25) { - // 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. - helper_.InstallOmniboxIcon(InstallableSite::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.ClosePwa(); - helper_.ManifestUpdateDisplayBrowser(Site::kSiteA); - helper_.LaunchFromMenuOption(Site::kSiteA); - helper_.CheckTabNotCreated(); - helper_.CheckWindowCreated(); - helper_.CheckWindowDisplayMinimal(); -} - -IN_PROC_BROWSER_TEST_F( - WebAppIntegrationBrowserTest, - WebAppIntegration_31SiteA_24_12SiteA_7SiteA_28_70SiteA_35SiteA_94_24_25) { - // 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. - helper_.InstallOmniboxIcon(InstallableSite::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.ClosePwa(); - helper_.ManifestUpdateDisplayBrowser(Site::kSiteA); - helper_.LaunchFromLaunchIcon(Site::kSiteA); - helper_.CheckTabNotCreated(); - helper_.CheckWindowCreated(); - helper_.CheckWindowDisplayMinimal(); -} - -IN_PROC_BROWSER_TEST_F( - WebAppIntegrationBrowserTest, - WebAppIntegration_31SiteA_24_12SiteA_7SiteA_28_70SiteA_34SiteA_94_24_25) { - // 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. - helper_.InstallOmniboxIcon(InstallableSite::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.ClosePwa(); - helper_.ManifestUpdateDisplayBrowser(Site::kSiteA); - helper_.LaunchFromChromeApps(Site::kSiteA); - helper_.CheckTabNotCreated(); - helper_.CheckWindowCreated(); - helper_.CheckWindowDisplayMinimal(); -} - -IN_PROC_BROWSER_TEST_F( - WebAppIntegrationBrowserTest, - WebAppIntegration_31SiteA_24_12SiteA_7SiteA_28_36SiteA_69SiteA_25) { - // 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. - helper_.InstallOmniboxIcon(InstallableSite::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.ClosePwa(); - helper_.ManifestUpdateDisplayMinimal(Site::kSiteA); - helper_.LaunchFromMenuOption(Site::kSiteA); - helper_.CheckWindowDisplayMinimal(); -} - -IN_PROC_BROWSER_TEST_F( - WebAppIntegrationBrowserTest, - WebAppIntegration_31SiteA_24_12SiteA_7SiteA_28_36SiteA_35SiteA_25) { - // 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. - helper_.InstallOmniboxIcon(InstallableSite::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.ClosePwa(); - helper_.ManifestUpdateDisplayMinimal(Site::kSiteA); - helper_.LaunchFromLaunchIcon(Site::kSiteA); - helper_.CheckWindowDisplayMinimal(); -} - -IN_PROC_BROWSER_TEST_F( - WebAppIntegrationBrowserTest, - WebAppIntegration_31SiteA_24_12SiteA_7SiteA_28_36SiteA_34SiteA_25) { - // 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. - helper_.InstallOmniboxIcon(InstallableSite::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.ClosePwa(); - helper_.ManifestUpdateDisplayMinimal(Site::kSiteA); - helper_.LaunchFromChromeApps(Site::kSiteA); - helper_.CheckWindowDisplayMinimal(); -} - -IN_PROC_BROWSER_TEST_F( - WebAppIntegrationBrowserTest, - WebAppIntegration_31SiteA_24_12SiteA_7SiteA_69SiteA_24_26) { - // 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. - helper_.InstallOmniboxIcon(InstallableSite::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.LaunchFromMenuOption(Site::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckWindowDisplayStandalone(); -} - -IN_PROC_BROWSER_TEST_F( - WebAppIntegrationBrowserTest, - WebAppIntegration_31SiteA_24_12SiteA_7SiteA_35SiteA_24_26) { - // 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. - helper_.InstallOmniboxIcon(InstallableSite::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.LaunchFromLaunchIcon(Site::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckWindowDisplayStandalone(); -} - -IN_PROC_BROWSER_TEST_F( - WebAppIntegrationBrowserTest, - WebAppIntegration_31SiteA_24_12SiteA_7SiteA_34SiteA_24_26) { - // 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. - helper_.InstallOmniboxIcon(InstallableSite::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.LaunchFromChromeApps(Site::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckWindowDisplayStandalone(); -} - -IN_PROC_BROWSER_TEST_F( - WebAppIntegrationBrowserTest, - WebAppIntegration_31SiteA_24_12SiteA_7SiteA_50SiteA_11SiteA_34SiteA_22) { - // 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. - helper_.InstallOmniboxIcon(InstallableSite::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.SetOpenInTab(Site::kSiteA); - helper_.CheckAppInListTabbed(Site::kSiteA); - helper_.LaunchFromChromeApps(Site::kSiteA); - helper_.CheckTabCreated(); -} - -IN_PROC_BROWSER_TEST_F( - WebAppIntegrationBrowserTest, - WebAppIntegration_31SiteA_24_12SiteA_7SiteA_50SiteA_11SiteA_37SiteA_18) { - // 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. - helper_.InstallOmniboxIcon(InstallableSite::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.SetOpenInTab(Site::kSiteA); - helper_.CheckAppInListTabbed(Site::kSiteA); - helper_.NavigateBrowser(Site::kSiteA); - helper_.CheckInstallIconShown(); -} - -IN_PROC_BROWSER_TEST_F( - WebAppIntegrationBrowserTest, - WebAppIntegration_31SiteA_24_12SiteA_7SiteA_37SiteAFoo_17_20) { - // 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. - helper_.InstallOmniboxIcon(InstallableSite::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.NavigateBrowser(Site::kSiteAFoo); - helper_.CheckInstallIconNotShown(); - helper_.CheckLaunchIconShown(); -} - -IN_PROC_BROWSER_TEST_F( - WebAppIntegrationBrowserTest, - WebAppIntegration_31SiteA_24_12SiteA_7SiteA_37SiteB_18_19) { - // 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. - helper_.InstallOmniboxIcon(InstallableSite::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.NavigateBrowser(Site::kSiteB); - helper_.CheckInstallIconShown(); - helper_.CheckLaunchIconNotShown(); -} - -IN_PROC_BROWSER_TEST_F(WebAppIntegrationBrowserTest, - WebAppIntegration_31SiteA_24_12SiteA_7SiteA_71_22) { - // 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. - helper_.InstallOmniboxIcon(InstallableSite::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.OpenInChrome(); - helper_.CheckTabCreated(); -} - -IN_PROC_BROWSER_TEST_F( - WebAppIntegrationBrowserTest, - WebAppIntegration_31SiteA_24_12SiteA_7SiteA_10SiteA_15SiteA_37SiteA_18_19) { - // 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. - helper_.InstallOmniboxIcon(InstallableSite::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.UninstallFromList(Site::kSiteA); - helper_.CheckAppNotInList(Site::kSiteA); - helper_.NavigateBrowser(Site::kSiteA); - helper_.CheckInstallIconShown(); - helper_.CheckLaunchIconNotShown(); -} - -IN_PROC_BROWSER_TEST_F( - WebAppIntegrationBrowserTest, - WebAppIntegration_31SiteA_24_12SiteA_7SiteA_49SiteA_44SiteA_12SiteA_7SiteA) { - // 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. - helper_.InstallOmniboxIcon(InstallableSite::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.InstallPolicyAppWindowedShortcut(Site::kSiteA); - helper_.UninstallPolicyApp(Site::kSiteA); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); -} - -IN_PROC_BROWSER_TEST_F( - WebAppIntegrationBrowserTest, - WebAppIntegration_47SiteA_24_12SiteA_7SiteA_39SiteB_16_27_14) { - // 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. - helper_.InstallMenuOption(InstallableSite::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.NavigatePwaSiteATo(Site::kSiteB); - helper_.CheckCustomToolbar(); - helper_.CloseCustomToolbar(); - helper_.CheckAppNavigationIsStartUrl(); -} - -IN_PROC_BROWSER_TEST_F( - WebAppIntegrationBrowserTest, - WebAppIntegration_47SiteA_24_12SiteA_7SiteA_39SiteB_16_71_22) { - // 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. - helper_.InstallMenuOption(InstallableSite::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.NavigatePwaSiteATo(Site::kSiteB); - helper_.CheckCustomToolbar(); - helper_.OpenInChrome(); - helper_.CheckTabCreated(); -} - -IN_PROC_BROWSER_TEST_F( - WebAppIntegrationBrowserTest, - WebAppIntegration_47SiteA_24_12SiteA_7SiteA_32SiteA_7SiteA_12SiteA_37SiteA_20) { - // 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. - helper_.InstallMenuOption(InstallableSite::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.InstallPolicyAppTabbedNoShortcut(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.NavigateBrowser(Site::kSiteA); - helper_.CheckLaunchIconShown(); -} - -IN_PROC_BROWSER_TEST_F( - WebAppIntegrationBrowserTest, - WebAppIntegration_47SiteA_24_12SiteA_7SiteA_32SiteA_7SiteA_12SiteA_69SiteA_24) { - // 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. - helper_.InstallMenuOption(InstallableSite::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.InstallPolicyAppTabbedNoShortcut(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.LaunchFromMenuOption(Site::kSiteA); - helper_.CheckWindowCreated(); -} - -IN_PROC_BROWSER_TEST_F( - WebAppIntegrationBrowserTest, - WebAppIntegration_47SiteA_24_12SiteA_7SiteA_32SiteA_7SiteA_12SiteA_35SiteA_24) { - // 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. - helper_.InstallMenuOption(InstallableSite::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.InstallPolicyAppTabbedNoShortcut(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.LaunchFromLaunchIcon(Site::kSiteA); - helper_.CheckWindowCreated(); -} - -IN_PROC_BROWSER_TEST_F( - WebAppIntegrationBrowserTest, - WebAppIntegration_47SiteA_24_12SiteA_7SiteA_32SiteA_7SiteA_12SiteA_34SiteA_24) { - // 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. - helper_.InstallMenuOption(InstallableSite::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.InstallPolicyAppTabbedNoShortcut(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.LaunchFromChromeApps(Site::kSiteA); - helper_.CheckWindowCreated(); -} - -IN_PROC_BROWSER_TEST_F( - WebAppIntegrationBrowserTest, - WebAppIntegration_47SiteA_24_12SiteA_7SiteA_32SiteA_7SiteA_12SiteA_44SiteA_12SiteA_7SiteA) { - // 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. - helper_.InstallMenuOption(InstallableSite::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.InstallPolicyAppTabbedNoShortcut(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.UninstallPolicyApp(Site::kSiteA); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); -} - -IN_PROC_BROWSER_TEST_F( - WebAppIntegrationBrowserTest, - WebAppIntegration_47SiteA_24_12SiteA_7SiteA_33SiteA_7SiteA_44SiteA_12SiteA_7SiteA) { - // 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. - helper_.InstallMenuOption(InstallableSite::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.InstallPolicyAppWindowedNoShortcut(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.UninstallPolicyApp(Site::kSiteA); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); -} - -IN_PROC_BROWSER_TEST_F( - WebAppIntegrationBrowserTest, - WebAppIntegration_47SiteA_24_12SiteA_7SiteA_48SiteA_12SiteA_37SiteA_20) { - // 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. - helper_.InstallMenuOption(InstallableSite::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.InstallPolicyAppTabbedShortcut(Site::kSiteA); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.NavigateBrowser(Site::kSiteA); - helper_.CheckLaunchIconShown(); -} - -IN_PROC_BROWSER_TEST_F( - WebAppIntegrationBrowserTest, - WebAppIntegration_47SiteA_24_12SiteA_7SiteA_48SiteA_12SiteA_69SiteA_24) { - // 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. - helper_.InstallMenuOption(InstallableSite::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.InstallPolicyAppTabbedShortcut(Site::kSiteA); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.LaunchFromMenuOption(Site::kSiteA); - helper_.CheckWindowCreated(); -} - -IN_PROC_BROWSER_TEST_F( - WebAppIntegrationBrowserTest, - WebAppIntegration_47SiteA_24_12SiteA_7SiteA_48SiteA_12SiteA_35SiteA_24) { - // 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. - helper_.InstallMenuOption(InstallableSite::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.InstallPolicyAppTabbedShortcut(Site::kSiteA); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.LaunchFromLaunchIcon(Site::kSiteA); - helper_.CheckWindowCreated(); -} - -IN_PROC_BROWSER_TEST_F( - WebAppIntegrationBrowserTest, - WebAppIntegration_47SiteA_24_12SiteA_7SiteA_48SiteA_12SiteA_34SiteA_24) { - // 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. - helper_.InstallMenuOption(InstallableSite::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.InstallPolicyAppTabbedShortcut(Site::kSiteA); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.LaunchFromChromeApps(Site::kSiteA); - helper_.CheckWindowCreated(); -} - -IN_PROC_BROWSER_TEST_F( - WebAppIntegrationBrowserTest, - WebAppIntegration_47SiteA_24_12SiteA_7SiteA_48SiteA_12SiteA_44SiteA_12SiteA_7SiteA) { - // 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. - helper_.InstallMenuOption(InstallableSite::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.InstallPolicyAppTabbedShortcut(Site::kSiteA); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.UninstallPolicyApp(Site::kSiteA); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); -} - -IN_PROC_BROWSER_TEST_F( - WebAppIntegrationBrowserTest, - WebAppIntegration_47SiteA_24_12SiteA_7SiteA_37SiteA_17_20) { - // 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. - helper_.InstallMenuOption(InstallableSite::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.NavigateBrowser(Site::kSiteA); - helper_.CheckInstallIconNotShown(); - helper_.CheckLaunchIconShown(); -} - -IN_PROC_BROWSER_TEST_F( - WebAppIntegrationBrowserTest, - WebAppIntegration_47SiteA_24_12SiteA_7SiteA_28_70SiteA_69SiteA_94_24_25) { - // 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. - helper_.InstallMenuOption(InstallableSite::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.ClosePwa(); - helper_.ManifestUpdateDisplayBrowser(Site::kSiteA); - helper_.LaunchFromMenuOption(Site::kSiteA); - helper_.CheckTabNotCreated(); - helper_.CheckWindowCreated(); - helper_.CheckWindowDisplayMinimal(); -} - -IN_PROC_BROWSER_TEST_F( - WebAppIntegrationBrowserTest, - WebAppIntegration_47SiteA_24_12SiteA_7SiteA_28_70SiteA_35SiteA_94_24_25) { - // 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. - helper_.InstallMenuOption(InstallableSite::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.ClosePwa(); - helper_.ManifestUpdateDisplayBrowser(Site::kSiteA); - helper_.LaunchFromLaunchIcon(Site::kSiteA); - helper_.CheckTabNotCreated(); - helper_.CheckWindowCreated(); - helper_.CheckWindowDisplayMinimal(); -} - -IN_PROC_BROWSER_TEST_F( - WebAppIntegrationBrowserTest, - WebAppIntegration_47SiteA_24_12SiteA_7SiteA_28_70SiteA_34SiteA_94_24_25) { - // 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. - helper_.InstallMenuOption(InstallableSite::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.ClosePwa(); - helper_.ManifestUpdateDisplayBrowser(Site::kSiteA); - helper_.LaunchFromChromeApps(Site::kSiteA); - helper_.CheckTabNotCreated(); - helper_.CheckWindowCreated(); - helper_.CheckWindowDisplayMinimal(); -} - -IN_PROC_BROWSER_TEST_F( - WebAppIntegrationBrowserTest, - WebAppIntegration_47SiteA_24_12SiteA_7SiteA_28_36SiteA_69SiteA_25) { - // 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. - helper_.InstallMenuOption(InstallableSite::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.ClosePwa(); - helper_.ManifestUpdateDisplayMinimal(Site::kSiteA); - helper_.LaunchFromMenuOption(Site::kSiteA); - helper_.CheckWindowDisplayMinimal(); -} - -IN_PROC_BROWSER_TEST_F( - WebAppIntegrationBrowserTest, - WebAppIntegration_47SiteA_24_12SiteA_7SiteA_28_36SiteA_35SiteA_25) { - // 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. - helper_.InstallMenuOption(InstallableSite::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.ClosePwa(); - helper_.ManifestUpdateDisplayMinimal(Site::kSiteA); - helper_.LaunchFromLaunchIcon(Site::kSiteA); - helper_.CheckWindowDisplayMinimal(); -} - -IN_PROC_BROWSER_TEST_F( - WebAppIntegrationBrowserTest, - WebAppIntegration_47SiteA_24_12SiteA_7SiteA_28_36SiteA_34SiteA_25) { - // 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. - helper_.InstallMenuOption(InstallableSite::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.ClosePwa(); - helper_.ManifestUpdateDisplayMinimal(Site::kSiteA); - helper_.LaunchFromChromeApps(Site::kSiteA); - helper_.CheckWindowDisplayMinimal(); -} - -IN_PROC_BROWSER_TEST_F( - WebAppIntegrationBrowserTest, - WebAppIntegration_47SiteA_24_12SiteA_7SiteA_69SiteA_24_26) { - // 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. - helper_.InstallMenuOption(InstallableSite::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.LaunchFromMenuOption(Site::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckWindowDisplayStandalone(); -} - -IN_PROC_BROWSER_TEST_F( - WebAppIntegrationBrowserTest, - WebAppIntegration_47SiteA_24_12SiteA_7SiteA_35SiteA_24_26) { - // 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. - helper_.InstallMenuOption(InstallableSite::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.LaunchFromLaunchIcon(Site::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckWindowDisplayStandalone(); -} - -IN_PROC_BROWSER_TEST_F( - WebAppIntegrationBrowserTest, - WebAppIntegration_47SiteA_24_12SiteA_7SiteA_34SiteA_24_26) { - // 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. - helper_.InstallMenuOption(InstallableSite::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.LaunchFromChromeApps(Site::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckWindowDisplayStandalone(); -} - -IN_PROC_BROWSER_TEST_F( - WebAppIntegrationBrowserTest, - WebAppIntegration_47SiteA_24_12SiteA_7SiteA_50SiteA_11SiteA_34SiteA_22) { - // 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. - helper_.InstallMenuOption(InstallableSite::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.SetOpenInTab(Site::kSiteA); - helper_.CheckAppInListTabbed(Site::kSiteA); - helper_.LaunchFromChromeApps(Site::kSiteA); - helper_.CheckTabCreated(); -} - -IN_PROC_BROWSER_TEST_F( - WebAppIntegrationBrowserTest, - WebAppIntegration_47SiteA_24_12SiteA_7SiteA_50SiteA_11SiteA_37SiteA_18) { - // 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. - helper_.InstallMenuOption(InstallableSite::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.SetOpenInTab(Site::kSiteA); - helper_.CheckAppInListTabbed(Site::kSiteA); - helper_.NavigateBrowser(Site::kSiteA); - helper_.CheckInstallIconShown(); -} - -IN_PROC_BROWSER_TEST_F( - WebAppIntegrationBrowserTest, - WebAppIntegration_47SiteA_24_12SiteA_7SiteA_37SiteAFoo_17_20) { - // 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. - helper_.InstallMenuOption(InstallableSite::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.NavigateBrowser(Site::kSiteAFoo); - helper_.CheckInstallIconNotShown(); - helper_.CheckLaunchIconShown(); -} - -IN_PROC_BROWSER_TEST_F( - WebAppIntegrationBrowserTest, - WebAppIntegration_47SiteA_24_12SiteA_7SiteA_37SiteB_18_19) { - // 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. - helper_.InstallMenuOption(InstallableSite::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.NavigateBrowser(Site::kSiteB); - helper_.CheckInstallIconShown(); - helper_.CheckLaunchIconNotShown(); -} - -IN_PROC_BROWSER_TEST_F(WebAppIntegrationBrowserTest, - WebAppIntegration_47SiteA_24_12SiteA_7SiteA_71_22) { - // 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. - helper_.InstallMenuOption(InstallableSite::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.OpenInChrome(); - helper_.CheckTabCreated(); -} - -IN_PROC_BROWSER_TEST_F( - WebAppIntegrationBrowserTest, - WebAppIntegration_47SiteA_24_12SiteA_7SiteA_10SiteA_15SiteA_37SiteA_18_19) { - // 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. - helper_.InstallMenuOption(InstallableSite::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.UninstallFromList(Site::kSiteA); - helper_.CheckAppNotInList(Site::kSiteA); - helper_.NavigateBrowser(Site::kSiteA); - helper_.CheckInstallIconShown(); - helper_.CheckLaunchIconNotShown(); -} - -IN_PROC_BROWSER_TEST_F( - WebAppIntegrationBrowserTest, - WebAppIntegration_47SiteA_24_12SiteA_7SiteA_49SiteA_44SiteA_12SiteA_7SiteA) { - // 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. - helper_.InstallMenuOption(InstallableSite::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.InstallPolicyAppWindowedShortcut(Site::kSiteA); - helper_.UninstallPolicyApp(Site::kSiteA); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); -} - -IN_PROC_BROWSER_TEST_F( - WebAppIntegrationBrowserTest, WebAppIntegration_29SiteA_11SiteA_7SiteA_33SiteA_7SiteA_11SiteA_37SiteA_18) { // Test contents are generated by script. Please do not modify! // See `chrome/test/webapps/README.md` for more info. @@ -1802,211 +343,6 @@ helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); } -// TODO(https://crbug.com/1306779) test is flaky -IN_PROC_BROWSER_TEST_F( - WebAppIntegrationBrowserTest, - DISABLED_WebAppIntegration_33SiteA_12SiteA_39SiteB_27_14) { - // 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. - helper_.InstallPolicyAppWindowedNoShortcut(Site::kSiteA); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.NavigatePwaSiteATo(Site::kSiteB); - helper_.CloseCustomToolbar(); - helper_.CheckAppNavigationIsStartUrl(); -} - -IN_PROC_BROWSER_TEST_F(WebAppIntegrationBrowserTest, - WebAppIntegration_33SiteA_12SiteA_37SiteA_17_20) { - // 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. - helper_.InstallPolicyAppWindowedNoShortcut(Site::kSiteA); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.NavigateBrowser(Site::kSiteA); - helper_.CheckInstallIconNotShown(); - helper_.CheckLaunchIconShown(); -} - -IN_PROC_BROWSER_TEST_F(WebAppIntegrationBrowserTest, - WebAppIntegration_33SiteA_12SiteA_69SiteA_24_26) { - // 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. - helper_.InstallPolicyAppWindowedNoShortcut(Site::kSiteA); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.LaunchFromMenuOption(Site::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckWindowDisplayStandalone(); -} - -IN_PROC_BROWSER_TEST_F(WebAppIntegrationBrowserTest, - WebAppIntegration_33SiteA_12SiteA_35SiteA_24_26) { - // 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. - helper_.InstallPolicyAppWindowedNoShortcut(Site::kSiteA); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.LaunchFromLaunchIcon(Site::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckWindowDisplayStandalone(); -} - -IN_PROC_BROWSER_TEST_F(WebAppIntegrationBrowserTest, - WebAppIntegration_33SiteA_12SiteA_34SiteA_24_26) { - // 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. - helper_.InstallPolicyAppWindowedNoShortcut(Site::kSiteA); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.LaunchFromChromeApps(Site::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckWindowDisplayStandalone(); -} - -IN_PROC_BROWSER_TEST_F(WebAppIntegrationBrowserTest, - WebAppIntegration_33SiteA_12SiteA_50SiteA_34SiteA_22) { - // 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. - helper_.InstallPolicyAppWindowedNoShortcut(Site::kSiteA); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.SetOpenInTab(Site::kSiteA); - helper_.LaunchFromChromeApps(Site::kSiteA); - helper_.CheckTabCreated(); -} - -IN_PROC_BROWSER_TEST_F(WebAppIntegrationBrowserTest, - WebAppIntegration_33SiteA_12SiteA_37SiteAFoo_17_20) { - // 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. - helper_.InstallPolicyAppWindowedNoShortcut(Site::kSiteA); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.NavigateBrowser(Site::kSiteAFoo); - helper_.CheckInstallIconNotShown(); - helper_.CheckLaunchIconShown(); -} - -IN_PROC_BROWSER_TEST_F(WebAppIntegrationBrowserTest, - WebAppIntegration_33SiteA_12SiteA_44SiteA_15SiteA) { - // 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. - helper_.InstallPolicyAppWindowedNoShortcut(Site::kSiteA); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.UninstallPolicyApp(Site::kSiteA); - helper_.CheckAppNotInList(Site::kSiteA); -} - -// TODO(https://crbug.com/1306779) test is flaky -IN_PROC_BROWSER_TEST_F( - WebAppIntegrationBrowserTest, - DISABLED_WebAppIntegration_49SiteA_12SiteA_7SiteA_39SiteB_27_14) { - // 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. - helper_.InstallPolicyAppWindowedShortcut(Site::kSiteA); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.NavigatePwaSiteATo(Site::kSiteB); - helper_.CloseCustomToolbar(); - helper_.CheckAppNavigationIsStartUrl(); -} - -IN_PROC_BROWSER_TEST_F(WebAppIntegrationBrowserTest, - WebAppIntegration_49SiteA_12SiteA_7SiteA_37SiteA_17_20) { - // 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. - helper_.InstallPolicyAppWindowedShortcut(Site::kSiteA); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.NavigateBrowser(Site::kSiteA); - helper_.CheckInstallIconNotShown(); - helper_.CheckLaunchIconShown(); -} - -IN_PROC_BROWSER_TEST_F(WebAppIntegrationBrowserTest, - WebAppIntegration_49SiteA_12SiteA_7SiteA_69SiteA_24_26) { - // 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. - helper_.InstallPolicyAppWindowedShortcut(Site::kSiteA); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.LaunchFromMenuOption(Site::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckWindowDisplayStandalone(); -} - -IN_PROC_BROWSER_TEST_F(WebAppIntegrationBrowserTest, - WebAppIntegration_49SiteA_12SiteA_7SiteA_35SiteA_24_26) { - // 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. - helper_.InstallPolicyAppWindowedShortcut(Site::kSiteA); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.LaunchFromLaunchIcon(Site::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckWindowDisplayStandalone(); -} - -IN_PROC_BROWSER_TEST_F(WebAppIntegrationBrowserTest, - WebAppIntegration_49SiteA_12SiteA_7SiteA_34SiteA_24_26) { - // 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. - helper_.InstallPolicyAppWindowedShortcut(Site::kSiteA); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.LaunchFromChromeApps(Site::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckWindowDisplayStandalone(); -} - -IN_PROC_BROWSER_TEST_F( - WebAppIntegrationBrowserTest, - WebAppIntegration_49SiteA_12SiteA_7SiteA_50SiteA_34SiteA_22) { - // 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. - helper_.InstallPolicyAppWindowedShortcut(Site::kSiteA); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.SetOpenInTab(Site::kSiteA); - helper_.LaunchFromChromeApps(Site::kSiteA); - helper_.CheckTabCreated(); -} - -IN_PROC_BROWSER_TEST_F( - WebAppIntegrationBrowserTest, - WebAppIntegration_49SiteA_12SiteA_7SiteA_37SiteAFoo_17_20) { - // 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. - helper_.InstallPolicyAppWindowedShortcut(Site::kSiteA); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.NavigateBrowser(Site::kSiteAFoo); - helper_.CheckInstallIconNotShown(); - helper_.CheckLaunchIconShown(); -} - -IN_PROC_BROWSER_TEST_F( - WebAppIntegrationBrowserTest, - WebAppIntegration_49SiteA_12SiteA_7SiteA_44SiteA_15SiteA) { - // 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. - helper_.InstallPolicyAppWindowedShortcut(Site::kSiteA); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.UninstallPolicyApp(Site::kSiteA); - helper_.CheckAppNotInList(Site::kSiteA); -} - IN_PROC_BROWSER_TEST_F( WebAppIntegrationBrowserTest, WebAppIntegration_32SiteA_11SiteA_30SiteA_12SiteA_7SiteA_24_44SiteA_12SiteA_7SiteA) { @@ -3009,4 +1345,2190 @@ helper_.InstallPolicyAppTabbedNoShortcut(Site::kSiteB); } +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTest, + WebAppIntegration_30SiteA_24_12SiteA_7SiteA_112SiteANotShown_28_70SiteA_69SiteA_94_24_25) { + // 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. + helper_.InstallCreateShortcutWindowed(Site::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.ClosePwa(); + helper_.ManifestUpdateDisplayBrowser(Site::kSiteA); + helper_.LaunchFromMenuOption(Site::kSiteA); + helper_.CheckTabNotCreated(); + helper_.CheckWindowCreated(); + helper_.CheckWindowDisplayMinimal(); +} + +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTest, + WebAppIntegration_30SiteA_24_12SiteA_7SiteA_112SiteANotShown_28_70SiteA_35SiteA_94_24_25) { + // 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. + helper_.InstallCreateShortcutWindowed(Site::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.ClosePwa(); + helper_.ManifestUpdateDisplayBrowser(Site::kSiteA); + helper_.LaunchFromLaunchIcon(Site::kSiteA); + helper_.CheckTabNotCreated(); + helper_.CheckWindowCreated(); + helper_.CheckWindowDisplayMinimal(); +} + +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTest, + WebAppIntegration_30SiteA_24_12SiteA_7SiteA_112SiteANotShown_28_70SiteA_34SiteA_94_24_25) { + // 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. + helper_.InstallCreateShortcutWindowed(Site::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.ClosePwa(); + helper_.ManifestUpdateDisplayBrowser(Site::kSiteA); + helper_.LaunchFromChromeApps(Site::kSiteA); + helper_.CheckTabNotCreated(); + helper_.CheckWindowCreated(); + helper_.CheckWindowDisplayMinimal(); +} + +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTest, + WebAppIntegration_30SiteA_24_12SiteA_7SiteA_112SiteANotShown_28_36SiteA_69SiteA_25) { + // 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. + helper_.InstallCreateShortcutWindowed(Site::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.ClosePwa(); + helper_.ManifestUpdateDisplayMinimal(Site::kSiteA); + helper_.LaunchFromMenuOption(Site::kSiteA); + helper_.CheckWindowDisplayMinimal(); +} + +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTest, + WebAppIntegration_30SiteA_24_12SiteA_7SiteA_112SiteANotShown_28_36SiteA_35SiteA_25) { + // 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. + helper_.InstallCreateShortcutWindowed(Site::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.ClosePwa(); + helper_.ManifestUpdateDisplayMinimal(Site::kSiteA); + helper_.LaunchFromLaunchIcon(Site::kSiteA); + helper_.CheckWindowDisplayMinimal(); +} + +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTest, + WebAppIntegration_30SiteA_24_12SiteA_7SiteA_112SiteANotShown_28_36SiteA_34SiteA_25) { + // 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. + helper_.InstallCreateShortcutWindowed(Site::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.ClosePwa(); + helper_.ManifestUpdateDisplayMinimal(Site::kSiteA); + helper_.LaunchFromChromeApps(Site::kSiteA); + helper_.CheckWindowDisplayMinimal(); +} + +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTest, + WebAppIntegration_30SiteA_24_12SiteA_7SiteA_112SiteANotShown_39SiteB_16_27_14) { + // 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. + helper_.InstallCreateShortcutWindowed(Site::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.NavigatePwaSiteATo(Site::kSiteB); + helper_.CheckCustomToolbar(); + helper_.CloseCustomToolbar(); + helper_.CheckAppNavigationIsStartUrl(); +} + +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTest, + WebAppIntegration_30SiteA_24_12SiteA_7SiteA_112SiteANotShown_39SiteB_16_71_22) { + // 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. + helper_.InstallCreateShortcutWindowed(Site::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.NavigatePwaSiteATo(Site::kSiteB); + helper_.CheckCustomToolbar(); + helper_.OpenInChrome(); + helper_.CheckTabCreated(); +} + +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTest, + WebAppIntegration_30SiteA_24_12SiteA_7SiteA_112SiteANotShown_37SiteA_17_20) { + // 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. + helper_.InstallCreateShortcutWindowed(Site::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.NavigateBrowser(Site::kSiteA); + helper_.CheckInstallIconNotShown(); + helper_.CheckLaunchIconShown(); +} + +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTest, + WebAppIntegration_30SiteA_24_12SiteA_7SiteA_112SiteANotShown_10SiteA_15SiteA_37SiteA_18_19) { + // 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. + helper_.InstallCreateShortcutWindowed(Site::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.UninstallFromList(Site::kSiteA); + helper_.CheckAppNotInList(Site::kSiteA); + helper_.NavigateBrowser(Site::kSiteA); + helper_.CheckInstallIconShown(); + helper_.CheckLaunchIconNotShown(); +} + +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTest, + WebAppIntegration_30SiteA_24_12SiteA_7SiteA_112SiteANotShown_69SiteA_24_26) { + // 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. + helper_.InstallCreateShortcutWindowed(Site::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.LaunchFromMenuOption(Site::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckWindowDisplayStandalone(); +} + +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTest, + WebAppIntegration_30SiteA_24_12SiteA_7SiteA_112SiteANotShown_35SiteA_24_26) { + // 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. + helper_.InstallCreateShortcutWindowed(Site::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.LaunchFromLaunchIcon(Site::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckWindowDisplayStandalone(); +} + +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTest, + WebAppIntegration_30SiteA_24_12SiteA_7SiteA_112SiteANotShown_34SiteA_24_26) { + // 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. + helper_.InstallCreateShortcutWindowed(Site::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.LaunchFromChromeApps(Site::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckWindowDisplayStandalone(); +} + +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTest, + WebAppIntegration_30SiteA_24_12SiteA_7SiteA_112SiteANotShown_50SiteA_11SiteA_34SiteA_22) { + // 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. + helper_.InstallCreateShortcutWindowed(Site::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.SetOpenInTab(Site::kSiteA); + helper_.CheckAppInListTabbed(Site::kSiteA); + helper_.LaunchFromChromeApps(Site::kSiteA); + helper_.CheckTabCreated(); +} + +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTest, + WebAppIntegration_30SiteA_24_12SiteA_7SiteA_112SiteANotShown_50SiteA_11SiteA_37SiteA_18) { + // 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. + helper_.InstallCreateShortcutWindowed(Site::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.SetOpenInTab(Site::kSiteA); + helper_.CheckAppInListTabbed(Site::kSiteA); + helper_.NavigateBrowser(Site::kSiteA); + helper_.CheckInstallIconShown(); +} + +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTest, + WebAppIntegration_30SiteA_24_12SiteA_7SiteA_112SiteANotShown_71_22) { + // 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. + helper_.InstallCreateShortcutWindowed(Site::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.OpenInChrome(); + helper_.CheckTabCreated(); +} + +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTest, + WebAppIntegration_30SiteA_24_12SiteA_7SiteA_112SiteANotShown_32SiteA_7SiteA_12SiteA_37SiteA_20) { + // 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. + helper_.InstallCreateShortcutWindowed(Site::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.InstallPolicyAppTabbedNoShortcut(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.NavigateBrowser(Site::kSiteA); + helper_.CheckLaunchIconShown(); +} + +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTest, + WebAppIntegration_30SiteA_24_12SiteA_7SiteA_112SiteANotShown_32SiteA_7SiteA_12SiteA_69SiteA_24) { + // 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. + helper_.InstallCreateShortcutWindowed(Site::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.InstallPolicyAppTabbedNoShortcut(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.LaunchFromMenuOption(Site::kSiteA); + helper_.CheckWindowCreated(); +} + +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTest, + WebAppIntegration_30SiteA_24_12SiteA_7SiteA_112SiteANotShown_32SiteA_7SiteA_12SiteA_35SiteA_24) { + // 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. + helper_.InstallCreateShortcutWindowed(Site::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.InstallPolicyAppTabbedNoShortcut(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.LaunchFromLaunchIcon(Site::kSiteA); + helper_.CheckWindowCreated(); +} + +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTest, + WebAppIntegration_30SiteA_24_12SiteA_7SiteA_112SiteANotShown_32SiteA_7SiteA_12SiteA_34SiteA_24) { + // 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. + helper_.InstallCreateShortcutWindowed(Site::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.InstallPolicyAppTabbedNoShortcut(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.LaunchFromChromeApps(Site::kSiteA); + helper_.CheckWindowCreated(); +} + +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTest, + WebAppIntegration_30SiteA_24_12SiteA_7SiteA_112SiteANotShown_32SiteA_7SiteA_12SiteA_44SiteA_12SiteA_7SiteA) { + // 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. + helper_.InstallCreateShortcutWindowed(Site::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.InstallPolicyAppTabbedNoShortcut(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.UninstallPolicyApp(Site::kSiteA); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); +} + +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTest, + WebAppIntegration_30SiteA_24_12SiteA_7SiteA_112SiteANotShown_33SiteA_7SiteA_44SiteA_12SiteA_7SiteA) { + // 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. + helper_.InstallCreateShortcutWindowed(Site::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.InstallPolicyAppWindowedNoShortcut(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.UninstallPolicyApp(Site::kSiteA); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); +} + +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTest, + WebAppIntegration_30SiteA_24_12SiteA_7SiteA_112SiteANotShown_48SiteA_12SiteA_37SiteA_20) { + // 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. + helper_.InstallCreateShortcutWindowed(Site::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.InstallPolicyAppTabbedShortcut(Site::kSiteA); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.NavigateBrowser(Site::kSiteA); + helper_.CheckLaunchIconShown(); +} + +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTest, + WebAppIntegration_30SiteA_24_12SiteA_7SiteA_112SiteANotShown_48SiteA_12SiteA_69SiteA_24) { + // 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. + helper_.InstallCreateShortcutWindowed(Site::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.InstallPolicyAppTabbedShortcut(Site::kSiteA); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.LaunchFromMenuOption(Site::kSiteA); + helper_.CheckWindowCreated(); +} + +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTest, + WebAppIntegration_30SiteA_24_12SiteA_7SiteA_112SiteANotShown_48SiteA_12SiteA_35SiteA_24) { + // 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. + helper_.InstallCreateShortcutWindowed(Site::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.InstallPolicyAppTabbedShortcut(Site::kSiteA); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.LaunchFromLaunchIcon(Site::kSiteA); + helper_.CheckWindowCreated(); +} + +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTest, + WebAppIntegration_30SiteA_24_12SiteA_7SiteA_112SiteANotShown_48SiteA_12SiteA_34SiteA_24) { + // 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. + helper_.InstallCreateShortcutWindowed(Site::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.InstallPolicyAppTabbedShortcut(Site::kSiteA); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.LaunchFromChromeApps(Site::kSiteA); + helper_.CheckWindowCreated(); +} + +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTest, + WebAppIntegration_30SiteA_24_12SiteA_7SiteA_112SiteANotShown_48SiteA_12SiteA_44SiteA_12SiteA_7SiteA) { + // 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. + helper_.InstallCreateShortcutWindowed(Site::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.InstallPolicyAppTabbedShortcut(Site::kSiteA); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.UninstallPolicyApp(Site::kSiteA); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); +} + +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTest, + WebAppIntegration_30SiteA_24_12SiteA_7SiteA_112SiteANotShown_49SiteA_44SiteA_12SiteA_7SiteA) { + // 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. + helper_.InstallCreateShortcutWindowed(Site::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.InstallPolicyAppWindowedShortcut(Site::kSiteA); + helper_.UninstallPolicyApp(Site::kSiteA); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); +} + +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTest, + WebAppIntegration_30SiteA_24_12SiteA_7SiteA_112SiteANotShown_37SiteAFoo_17_20) { + // 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. + helper_.InstallCreateShortcutWindowed(Site::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.NavigateBrowser(Site::kSiteAFoo); + helper_.CheckInstallIconNotShown(); + helper_.CheckLaunchIconShown(); +} + +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTest, + WebAppIntegration_30SiteA_24_12SiteA_7SiteA_112SiteANotShown_37SiteB_18_19) { + // 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. + helper_.InstallCreateShortcutWindowed(Site::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.NavigateBrowser(Site::kSiteB); + helper_.CheckInstallIconShown(); + helper_.CheckLaunchIconNotShown(); +} + +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTest, + WebAppIntegration_31SiteA_24_12SiteA_7SiteA_112SiteANotShown_28_70SiteA_69SiteA_94_24_25) { + // 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. + helper_.InstallOmniboxIcon(InstallableSite::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.ClosePwa(); + helper_.ManifestUpdateDisplayBrowser(Site::kSiteA); + helper_.LaunchFromMenuOption(Site::kSiteA); + helper_.CheckTabNotCreated(); + helper_.CheckWindowCreated(); + helper_.CheckWindowDisplayMinimal(); +} + +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTest, + WebAppIntegration_31SiteA_24_12SiteA_7SiteA_112SiteANotShown_28_70SiteA_35SiteA_94_24_25) { + // 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. + helper_.InstallOmniboxIcon(InstallableSite::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.ClosePwa(); + helper_.ManifestUpdateDisplayBrowser(Site::kSiteA); + helper_.LaunchFromLaunchIcon(Site::kSiteA); + helper_.CheckTabNotCreated(); + helper_.CheckWindowCreated(); + helper_.CheckWindowDisplayMinimal(); +} + +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTest, + WebAppIntegration_31SiteA_24_12SiteA_7SiteA_112SiteANotShown_28_70SiteA_34SiteA_94_24_25) { + // 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. + helper_.InstallOmniboxIcon(InstallableSite::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.ClosePwa(); + helper_.ManifestUpdateDisplayBrowser(Site::kSiteA); + helper_.LaunchFromChromeApps(Site::kSiteA); + helper_.CheckTabNotCreated(); + helper_.CheckWindowCreated(); + helper_.CheckWindowDisplayMinimal(); +} + +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTest, + WebAppIntegration_31SiteA_24_12SiteA_7SiteA_112SiteANotShown_28_36SiteA_69SiteA_25) { + // 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. + helper_.InstallOmniboxIcon(InstallableSite::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.ClosePwa(); + helper_.ManifestUpdateDisplayMinimal(Site::kSiteA); + helper_.LaunchFromMenuOption(Site::kSiteA); + helper_.CheckWindowDisplayMinimal(); +} + +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTest, + WebAppIntegration_31SiteA_24_12SiteA_7SiteA_112SiteANotShown_28_36SiteA_35SiteA_25) { + // 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. + helper_.InstallOmniboxIcon(InstallableSite::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.ClosePwa(); + helper_.ManifestUpdateDisplayMinimal(Site::kSiteA); + helper_.LaunchFromLaunchIcon(Site::kSiteA); + helper_.CheckWindowDisplayMinimal(); +} + +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTest, + WebAppIntegration_31SiteA_24_12SiteA_7SiteA_112SiteANotShown_28_36SiteA_34SiteA_25) { + // 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. + helper_.InstallOmniboxIcon(InstallableSite::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.ClosePwa(); + helper_.ManifestUpdateDisplayMinimal(Site::kSiteA); + helper_.LaunchFromChromeApps(Site::kSiteA); + helper_.CheckWindowDisplayMinimal(); +} + +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTest, + WebAppIntegration_31SiteA_24_12SiteA_7SiteA_112SiteANotShown_39SiteB_16_27_14) { + // 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. + helper_.InstallOmniboxIcon(InstallableSite::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.NavigatePwaSiteATo(Site::kSiteB); + helper_.CheckCustomToolbar(); + helper_.CloseCustomToolbar(); + helper_.CheckAppNavigationIsStartUrl(); +} + +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTest, + WebAppIntegration_31SiteA_24_12SiteA_7SiteA_112SiteANotShown_39SiteB_16_71_22) { + // 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. + helper_.InstallOmniboxIcon(InstallableSite::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.NavigatePwaSiteATo(Site::kSiteB); + helper_.CheckCustomToolbar(); + helper_.OpenInChrome(); + helper_.CheckTabCreated(); +} + +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTest, + WebAppIntegration_31SiteA_24_12SiteA_7SiteA_112SiteANotShown_37SiteA_17_20) { + // 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. + helper_.InstallOmniboxIcon(InstallableSite::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.NavigateBrowser(Site::kSiteA); + helper_.CheckInstallIconNotShown(); + helper_.CheckLaunchIconShown(); +} + +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTest, + WebAppIntegration_31SiteA_24_12SiteA_7SiteA_112SiteANotShown_10SiteA_15SiteA_37SiteA_18_19) { + // 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. + helper_.InstallOmniboxIcon(InstallableSite::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.UninstallFromList(Site::kSiteA); + helper_.CheckAppNotInList(Site::kSiteA); + helper_.NavigateBrowser(Site::kSiteA); + helper_.CheckInstallIconShown(); + helper_.CheckLaunchIconNotShown(); +} + +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTest, + WebAppIntegration_31SiteA_24_12SiteA_7SiteA_112SiteANotShown_69SiteA_24_26) { + // 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. + helper_.InstallOmniboxIcon(InstallableSite::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.LaunchFromMenuOption(Site::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckWindowDisplayStandalone(); +} + +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTest, + WebAppIntegration_31SiteA_24_12SiteA_7SiteA_112SiteANotShown_35SiteA_24_26) { + // 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. + helper_.InstallOmniboxIcon(InstallableSite::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.LaunchFromLaunchIcon(Site::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckWindowDisplayStandalone(); +} + +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTest, + WebAppIntegration_31SiteA_24_12SiteA_7SiteA_112SiteANotShown_34SiteA_24_26) { + // 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. + helper_.InstallOmniboxIcon(InstallableSite::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.LaunchFromChromeApps(Site::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckWindowDisplayStandalone(); +} + +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTest, + WebAppIntegration_31SiteA_24_12SiteA_7SiteA_112SiteANotShown_50SiteA_11SiteA_34SiteA_22) { + // 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. + helper_.InstallOmniboxIcon(InstallableSite::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.SetOpenInTab(Site::kSiteA); + helper_.CheckAppInListTabbed(Site::kSiteA); + helper_.LaunchFromChromeApps(Site::kSiteA); + helper_.CheckTabCreated(); +} + +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTest, + WebAppIntegration_31SiteA_24_12SiteA_7SiteA_112SiteANotShown_50SiteA_11SiteA_37SiteA_18) { + // 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. + helper_.InstallOmniboxIcon(InstallableSite::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.SetOpenInTab(Site::kSiteA); + helper_.CheckAppInListTabbed(Site::kSiteA); + helper_.NavigateBrowser(Site::kSiteA); + helper_.CheckInstallIconShown(); +} + +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTest, + WebAppIntegration_31SiteA_24_12SiteA_7SiteA_112SiteANotShown_71_22) { + // 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. + helper_.InstallOmniboxIcon(InstallableSite::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.OpenInChrome(); + helper_.CheckTabCreated(); +} + +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTest, + WebAppIntegration_31SiteA_24_12SiteA_7SiteA_112SiteANotShown_32SiteA_7SiteA_12SiteA_37SiteA_20) { + // 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. + helper_.InstallOmniboxIcon(InstallableSite::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.InstallPolicyAppTabbedNoShortcut(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.NavigateBrowser(Site::kSiteA); + helper_.CheckLaunchIconShown(); +} + +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTest, + WebAppIntegration_31SiteA_24_12SiteA_7SiteA_112SiteANotShown_32SiteA_7SiteA_12SiteA_69SiteA_24) { + // 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. + helper_.InstallOmniboxIcon(InstallableSite::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.InstallPolicyAppTabbedNoShortcut(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.LaunchFromMenuOption(Site::kSiteA); + helper_.CheckWindowCreated(); +} + +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTest, + WebAppIntegration_31SiteA_24_12SiteA_7SiteA_112SiteANotShown_32SiteA_7SiteA_12SiteA_35SiteA_24) { + // 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. + helper_.InstallOmniboxIcon(InstallableSite::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.InstallPolicyAppTabbedNoShortcut(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.LaunchFromLaunchIcon(Site::kSiteA); + helper_.CheckWindowCreated(); +} + +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTest, + WebAppIntegration_31SiteA_24_12SiteA_7SiteA_112SiteANotShown_32SiteA_7SiteA_12SiteA_34SiteA_24) { + // 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. + helper_.InstallOmniboxIcon(InstallableSite::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.InstallPolicyAppTabbedNoShortcut(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.LaunchFromChromeApps(Site::kSiteA); + helper_.CheckWindowCreated(); +} + +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTest, + WebAppIntegration_31SiteA_24_12SiteA_7SiteA_112SiteANotShown_32SiteA_7SiteA_12SiteA_44SiteA_12SiteA_7SiteA) { + // 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. + helper_.InstallOmniboxIcon(InstallableSite::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.InstallPolicyAppTabbedNoShortcut(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.UninstallPolicyApp(Site::kSiteA); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); +} + +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTest, + WebAppIntegration_31SiteA_24_12SiteA_7SiteA_112SiteANotShown_33SiteA_7SiteA_44SiteA_12SiteA_7SiteA) { + // 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. + helper_.InstallOmniboxIcon(InstallableSite::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.InstallPolicyAppWindowedNoShortcut(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.UninstallPolicyApp(Site::kSiteA); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); +} + +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTest, + WebAppIntegration_31SiteA_24_12SiteA_7SiteA_112SiteANotShown_48SiteA_12SiteA_37SiteA_20) { + // 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. + helper_.InstallOmniboxIcon(InstallableSite::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.InstallPolicyAppTabbedShortcut(Site::kSiteA); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.NavigateBrowser(Site::kSiteA); + helper_.CheckLaunchIconShown(); +} + +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTest, + WebAppIntegration_31SiteA_24_12SiteA_7SiteA_112SiteANotShown_48SiteA_12SiteA_69SiteA_24) { + // 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. + helper_.InstallOmniboxIcon(InstallableSite::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.InstallPolicyAppTabbedShortcut(Site::kSiteA); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.LaunchFromMenuOption(Site::kSiteA); + helper_.CheckWindowCreated(); +} + +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTest, + WebAppIntegration_31SiteA_24_12SiteA_7SiteA_112SiteANotShown_48SiteA_12SiteA_35SiteA_24) { + // 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. + helper_.InstallOmniboxIcon(InstallableSite::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.InstallPolicyAppTabbedShortcut(Site::kSiteA); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.LaunchFromLaunchIcon(Site::kSiteA); + helper_.CheckWindowCreated(); +} + +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTest, + WebAppIntegration_31SiteA_24_12SiteA_7SiteA_112SiteANotShown_48SiteA_12SiteA_34SiteA_24) { + // 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. + helper_.InstallOmniboxIcon(InstallableSite::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.InstallPolicyAppTabbedShortcut(Site::kSiteA); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.LaunchFromChromeApps(Site::kSiteA); + helper_.CheckWindowCreated(); +} + +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTest, + WebAppIntegration_31SiteA_24_12SiteA_7SiteA_112SiteANotShown_48SiteA_12SiteA_44SiteA_12SiteA_7SiteA) { + // 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. + helper_.InstallOmniboxIcon(InstallableSite::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.InstallPolicyAppTabbedShortcut(Site::kSiteA); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.UninstallPolicyApp(Site::kSiteA); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); +} + +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTest, + WebAppIntegration_31SiteA_24_12SiteA_7SiteA_112SiteANotShown_49SiteA_44SiteA_12SiteA_7SiteA) { + // 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. + helper_.InstallOmniboxIcon(InstallableSite::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.InstallPolicyAppWindowedShortcut(Site::kSiteA); + helper_.UninstallPolicyApp(Site::kSiteA); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); +} + +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTest, + WebAppIntegration_31SiteA_24_12SiteA_7SiteA_112SiteANotShown_37SiteAFoo_17_20) { + // 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. + helper_.InstallOmniboxIcon(InstallableSite::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.NavigateBrowser(Site::kSiteAFoo); + helper_.CheckInstallIconNotShown(); + helper_.CheckLaunchIconShown(); +} + +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTest, + WebAppIntegration_31SiteA_24_12SiteA_7SiteA_112SiteANotShown_37SiteB_18_19) { + // 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. + helper_.InstallOmniboxIcon(InstallableSite::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.NavigateBrowser(Site::kSiteB); + helper_.CheckInstallIconShown(); + helper_.CheckLaunchIconNotShown(); +} + +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTest, + WebAppIntegration_47SiteA_24_12SiteA_7SiteA_112SiteANotShown_28_70SiteA_69SiteA_94_24_25) { + // 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. + helper_.InstallMenuOption(InstallableSite::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.ClosePwa(); + helper_.ManifestUpdateDisplayBrowser(Site::kSiteA); + helper_.LaunchFromMenuOption(Site::kSiteA); + helper_.CheckTabNotCreated(); + helper_.CheckWindowCreated(); + helper_.CheckWindowDisplayMinimal(); +} + +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTest, + WebAppIntegration_47SiteA_24_12SiteA_7SiteA_112SiteANotShown_28_70SiteA_35SiteA_94_24_25) { + // 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. + helper_.InstallMenuOption(InstallableSite::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.ClosePwa(); + helper_.ManifestUpdateDisplayBrowser(Site::kSiteA); + helper_.LaunchFromLaunchIcon(Site::kSiteA); + helper_.CheckTabNotCreated(); + helper_.CheckWindowCreated(); + helper_.CheckWindowDisplayMinimal(); +} + +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTest, + WebAppIntegration_47SiteA_24_12SiteA_7SiteA_112SiteANotShown_28_70SiteA_34SiteA_94_24_25) { + // 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. + helper_.InstallMenuOption(InstallableSite::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.ClosePwa(); + helper_.ManifestUpdateDisplayBrowser(Site::kSiteA); + helper_.LaunchFromChromeApps(Site::kSiteA); + helper_.CheckTabNotCreated(); + helper_.CheckWindowCreated(); + helper_.CheckWindowDisplayMinimal(); +} + +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTest, + WebAppIntegration_47SiteA_24_12SiteA_7SiteA_112SiteANotShown_28_36SiteA_69SiteA_25) { + // 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. + helper_.InstallMenuOption(InstallableSite::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.ClosePwa(); + helper_.ManifestUpdateDisplayMinimal(Site::kSiteA); + helper_.LaunchFromMenuOption(Site::kSiteA); + helper_.CheckWindowDisplayMinimal(); +} + +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTest, + WebAppIntegration_47SiteA_24_12SiteA_7SiteA_112SiteANotShown_28_36SiteA_35SiteA_25) { + // 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. + helper_.InstallMenuOption(InstallableSite::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.ClosePwa(); + helper_.ManifestUpdateDisplayMinimal(Site::kSiteA); + helper_.LaunchFromLaunchIcon(Site::kSiteA); + helper_.CheckWindowDisplayMinimal(); +} + +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTest, + WebAppIntegration_47SiteA_24_12SiteA_7SiteA_112SiteANotShown_28_36SiteA_34SiteA_25) { + // 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. + helper_.InstallMenuOption(InstallableSite::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.ClosePwa(); + helper_.ManifestUpdateDisplayMinimal(Site::kSiteA); + helper_.LaunchFromChromeApps(Site::kSiteA); + helper_.CheckWindowDisplayMinimal(); +} + +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTest, + WebAppIntegration_47SiteA_24_12SiteA_7SiteA_112SiteANotShown_39SiteB_16_27_14) { + // 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. + helper_.InstallMenuOption(InstallableSite::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.NavigatePwaSiteATo(Site::kSiteB); + helper_.CheckCustomToolbar(); + helper_.CloseCustomToolbar(); + helper_.CheckAppNavigationIsStartUrl(); +} + +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTest, + WebAppIntegration_47SiteA_24_12SiteA_7SiteA_112SiteANotShown_39SiteB_16_71_22) { + // 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. + helper_.InstallMenuOption(InstallableSite::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.NavigatePwaSiteATo(Site::kSiteB); + helper_.CheckCustomToolbar(); + helper_.OpenInChrome(); + helper_.CheckTabCreated(); +} + +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTest, + WebAppIntegration_47SiteA_24_12SiteA_7SiteA_112SiteANotShown_37SiteA_17_20) { + // 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. + helper_.InstallMenuOption(InstallableSite::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.NavigateBrowser(Site::kSiteA); + helper_.CheckInstallIconNotShown(); + helper_.CheckLaunchIconShown(); +} + +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTest, + WebAppIntegration_47SiteA_24_12SiteA_7SiteA_112SiteANotShown_10SiteA_15SiteA_37SiteA_18_19) { + // 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. + helper_.InstallMenuOption(InstallableSite::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.UninstallFromList(Site::kSiteA); + helper_.CheckAppNotInList(Site::kSiteA); + helper_.NavigateBrowser(Site::kSiteA); + helper_.CheckInstallIconShown(); + helper_.CheckLaunchIconNotShown(); +} + +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTest, + WebAppIntegration_47SiteA_24_12SiteA_7SiteA_112SiteANotShown_69SiteA_24_26) { + // 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. + helper_.InstallMenuOption(InstallableSite::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.LaunchFromMenuOption(Site::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckWindowDisplayStandalone(); +} + +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTest, + WebAppIntegration_47SiteA_24_12SiteA_7SiteA_112SiteANotShown_35SiteA_24_26) { + // 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. + helper_.InstallMenuOption(InstallableSite::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.LaunchFromLaunchIcon(Site::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckWindowDisplayStandalone(); +} + +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTest, + WebAppIntegration_47SiteA_24_12SiteA_7SiteA_112SiteANotShown_34SiteA_24_26) { + // 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. + helper_.InstallMenuOption(InstallableSite::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.LaunchFromChromeApps(Site::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckWindowDisplayStandalone(); +} + +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTest, + WebAppIntegration_47SiteA_24_12SiteA_7SiteA_112SiteANotShown_50SiteA_11SiteA_34SiteA_22) { + // 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. + helper_.InstallMenuOption(InstallableSite::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.SetOpenInTab(Site::kSiteA); + helper_.CheckAppInListTabbed(Site::kSiteA); + helper_.LaunchFromChromeApps(Site::kSiteA); + helper_.CheckTabCreated(); +} + +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTest, + WebAppIntegration_47SiteA_24_12SiteA_7SiteA_112SiteANotShown_50SiteA_11SiteA_37SiteA_18) { + // 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. + helper_.InstallMenuOption(InstallableSite::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.SetOpenInTab(Site::kSiteA); + helper_.CheckAppInListTabbed(Site::kSiteA); + helper_.NavigateBrowser(Site::kSiteA); + helper_.CheckInstallIconShown(); +} + +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTest, + WebAppIntegration_47SiteA_24_12SiteA_7SiteA_112SiteANotShown_71_22) { + // 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. + helper_.InstallMenuOption(InstallableSite::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.OpenInChrome(); + helper_.CheckTabCreated(); +} + +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTest, + WebAppIntegration_47SiteA_24_12SiteA_7SiteA_112SiteANotShown_32SiteA_7SiteA_12SiteA_37SiteA_20) { + // 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. + helper_.InstallMenuOption(InstallableSite::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.InstallPolicyAppTabbedNoShortcut(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.NavigateBrowser(Site::kSiteA); + helper_.CheckLaunchIconShown(); +} + +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTest, + WebAppIntegration_47SiteA_24_12SiteA_7SiteA_112SiteANotShown_32SiteA_7SiteA_12SiteA_69SiteA_24) { + // 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. + helper_.InstallMenuOption(InstallableSite::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.InstallPolicyAppTabbedNoShortcut(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.LaunchFromMenuOption(Site::kSiteA); + helper_.CheckWindowCreated(); +} + +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTest, + WebAppIntegration_47SiteA_24_12SiteA_7SiteA_112SiteANotShown_32SiteA_7SiteA_12SiteA_35SiteA_24) { + // 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. + helper_.InstallMenuOption(InstallableSite::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.InstallPolicyAppTabbedNoShortcut(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.LaunchFromLaunchIcon(Site::kSiteA); + helper_.CheckWindowCreated(); +} + +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTest, + WebAppIntegration_47SiteA_24_12SiteA_7SiteA_112SiteANotShown_32SiteA_7SiteA_12SiteA_34SiteA_24) { + // 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. + helper_.InstallMenuOption(InstallableSite::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.InstallPolicyAppTabbedNoShortcut(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.LaunchFromChromeApps(Site::kSiteA); + helper_.CheckWindowCreated(); +} + +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTest, + WebAppIntegration_47SiteA_24_12SiteA_7SiteA_112SiteANotShown_32SiteA_7SiteA_12SiteA_44SiteA_12SiteA_7SiteA) { + // 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. + helper_.InstallMenuOption(InstallableSite::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.InstallPolicyAppTabbedNoShortcut(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.UninstallPolicyApp(Site::kSiteA); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); +} + +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTest, + WebAppIntegration_47SiteA_24_12SiteA_7SiteA_112SiteANotShown_33SiteA_7SiteA_44SiteA_12SiteA_7SiteA) { + // 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. + helper_.InstallMenuOption(InstallableSite::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.InstallPolicyAppWindowedNoShortcut(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.UninstallPolicyApp(Site::kSiteA); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); +} + +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTest, + WebAppIntegration_47SiteA_24_12SiteA_7SiteA_112SiteANotShown_48SiteA_12SiteA_37SiteA_20) { + // 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. + helper_.InstallMenuOption(InstallableSite::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.InstallPolicyAppTabbedShortcut(Site::kSiteA); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.NavigateBrowser(Site::kSiteA); + helper_.CheckLaunchIconShown(); +} + +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTest, + WebAppIntegration_47SiteA_24_12SiteA_7SiteA_112SiteANotShown_48SiteA_12SiteA_69SiteA_24) { + // 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. + helper_.InstallMenuOption(InstallableSite::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.InstallPolicyAppTabbedShortcut(Site::kSiteA); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.LaunchFromMenuOption(Site::kSiteA); + helper_.CheckWindowCreated(); +} + +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTest, + WebAppIntegration_47SiteA_24_12SiteA_7SiteA_112SiteANotShown_48SiteA_12SiteA_35SiteA_24) { + // 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. + helper_.InstallMenuOption(InstallableSite::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.InstallPolicyAppTabbedShortcut(Site::kSiteA); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.LaunchFromLaunchIcon(Site::kSiteA); + helper_.CheckWindowCreated(); +} + +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTest, + WebAppIntegration_47SiteA_24_12SiteA_7SiteA_112SiteANotShown_48SiteA_12SiteA_34SiteA_24) { + // 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. + helper_.InstallMenuOption(InstallableSite::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.InstallPolicyAppTabbedShortcut(Site::kSiteA); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.LaunchFromChromeApps(Site::kSiteA); + helper_.CheckWindowCreated(); +} + +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTest, + WebAppIntegration_47SiteA_24_12SiteA_7SiteA_112SiteANotShown_48SiteA_12SiteA_44SiteA_12SiteA_7SiteA) { + // 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. + helper_.InstallMenuOption(InstallableSite::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.InstallPolicyAppTabbedShortcut(Site::kSiteA); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.UninstallPolicyApp(Site::kSiteA); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); +} + +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTest, + WebAppIntegration_47SiteA_24_12SiteA_7SiteA_112SiteANotShown_49SiteA_44SiteA_12SiteA_7SiteA) { + // 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. + helper_.InstallMenuOption(InstallableSite::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.InstallPolicyAppWindowedShortcut(Site::kSiteA); + helper_.UninstallPolicyApp(Site::kSiteA); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); +} + +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTest, + WebAppIntegration_47SiteA_24_12SiteA_7SiteA_112SiteANotShown_37SiteAFoo_17_20) { + // 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. + helper_.InstallMenuOption(InstallableSite::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.NavigateBrowser(Site::kSiteAFoo); + helper_.CheckInstallIconNotShown(); + helper_.CheckLaunchIconShown(); +} + +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTest, + WebAppIntegration_47SiteA_24_12SiteA_7SiteA_112SiteANotShown_37SiteB_18_19) { + // 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. + helper_.InstallMenuOption(InstallableSite::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.NavigateBrowser(Site::kSiteB); + helper_.CheckInstallIconShown(); + helper_.CheckLaunchIconNotShown(); +} + +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTest, + WebAppIntegration_33SiteA_12SiteA_112SiteANotShown_39SiteB_27_14) { + // 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. + helper_.InstallPolicyAppWindowedNoShortcut(Site::kSiteA); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.NavigatePwaSiteATo(Site::kSiteB); + helper_.CloseCustomToolbar(); + helper_.CheckAppNavigationIsStartUrl(); +} + +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTest, + WebAppIntegration_33SiteA_12SiteA_112SiteANotShown_37SiteA_17_20) { + // 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. + helper_.InstallPolicyAppWindowedNoShortcut(Site::kSiteA); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.NavigateBrowser(Site::kSiteA); + helper_.CheckInstallIconNotShown(); + helper_.CheckLaunchIconShown(); +} + +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTest, + WebAppIntegration_33SiteA_12SiteA_112SiteANotShown_44SiteA_15SiteA) { + // 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. + helper_.InstallPolicyAppWindowedNoShortcut(Site::kSiteA); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.UninstallPolicyApp(Site::kSiteA); + helper_.CheckAppNotInList(Site::kSiteA); +} + +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTest, + WebAppIntegration_33SiteA_12SiteA_112SiteANotShown_69SiteA_24_26) { + // 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. + helper_.InstallPolicyAppWindowedNoShortcut(Site::kSiteA); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.LaunchFromMenuOption(Site::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckWindowDisplayStandalone(); +} + +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTest, + WebAppIntegration_33SiteA_12SiteA_112SiteANotShown_35SiteA_24_26) { + // 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. + helper_.InstallPolicyAppWindowedNoShortcut(Site::kSiteA); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.LaunchFromLaunchIcon(Site::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckWindowDisplayStandalone(); +} + +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTest, + WebAppIntegration_33SiteA_12SiteA_112SiteANotShown_34SiteA_24_26) { + // 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. + helper_.InstallPolicyAppWindowedNoShortcut(Site::kSiteA); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.LaunchFromChromeApps(Site::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckWindowDisplayStandalone(); +} + +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTest, + WebAppIntegration_33SiteA_12SiteA_112SiteANotShown_50SiteA_34SiteA_22) { + // 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. + helper_.InstallPolicyAppWindowedNoShortcut(Site::kSiteA); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.SetOpenInTab(Site::kSiteA); + helper_.LaunchFromChromeApps(Site::kSiteA); + helper_.CheckTabCreated(); +} + +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTest, + WebAppIntegration_33SiteA_12SiteA_112SiteANotShown_37SiteAFoo_17_20) { + // 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. + helper_.InstallPolicyAppWindowedNoShortcut(Site::kSiteA); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.NavigateBrowser(Site::kSiteAFoo); + helper_.CheckInstallIconNotShown(); + helper_.CheckLaunchIconShown(); +} + +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTest, + WebAppIntegration_49SiteA_12SiteA_7SiteA_112SiteANotShown_39SiteB_27_14) { + // 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. + helper_.InstallPolicyAppWindowedShortcut(Site::kSiteA); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.NavigatePwaSiteATo(Site::kSiteB); + helper_.CloseCustomToolbar(); + helper_.CheckAppNavigationIsStartUrl(); +} + +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTest, + WebAppIntegration_49SiteA_12SiteA_7SiteA_112SiteANotShown_37SiteA_17_20) { + // 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. + helper_.InstallPolicyAppWindowedShortcut(Site::kSiteA); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.NavigateBrowser(Site::kSiteA); + helper_.CheckInstallIconNotShown(); + helper_.CheckLaunchIconShown(); +} + +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTest, + WebAppIntegration_49SiteA_12SiteA_7SiteA_112SiteANotShown_44SiteA_15SiteA) { + // 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. + helper_.InstallPolicyAppWindowedShortcut(Site::kSiteA); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.UninstallPolicyApp(Site::kSiteA); + helper_.CheckAppNotInList(Site::kSiteA); +} + +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTest, + WebAppIntegration_49SiteA_12SiteA_7SiteA_112SiteANotShown_69SiteA_24_26) { + // 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. + helper_.InstallPolicyAppWindowedShortcut(Site::kSiteA); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.LaunchFromMenuOption(Site::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckWindowDisplayStandalone(); +} + +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTest, + WebAppIntegration_49SiteA_12SiteA_7SiteA_112SiteANotShown_35SiteA_24_26) { + // 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. + helper_.InstallPolicyAppWindowedShortcut(Site::kSiteA); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.LaunchFromLaunchIcon(Site::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckWindowDisplayStandalone(); +} + +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTest, + WebAppIntegration_49SiteA_12SiteA_7SiteA_112SiteANotShown_34SiteA_24_26) { + // 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. + helper_.InstallPolicyAppWindowedShortcut(Site::kSiteA); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.LaunchFromChromeApps(Site::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckWindowDisplayStandalone(); +} + +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTest, + WebAppIntegration_49SiteA_12SiteA_7SiteA_112SiteANotShown_50SiteA_34SiteA_22) { + // 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. + helper_.InstallPolicyAppWindowedShortcut(Site::kSiteA); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.SetOpenInTab(Site::kSiteA); + helper_.LaunchFromChromeApps(Site::kSiteA); + helper_.CheckTabCreated(); +} + +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTest, + WebAppIntegration_49SiteA_12SiteA_7SiteA_112SiteANotShown_37SiteAFoo_17_20) { + // 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. + helper_.InstallPolicyAppWindowedShortcut(Site::kSiteA); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.NavigateBrowser(Site::kSiteAFoo); + helper_.CheckInstallIconNotShown(); + helper_.CheckLaunchIconShown(); +} + +IN_PROC_BROWSER_TEST_F(WebAppIntegrationBrowserTest, + WebAppIntegration_30SiteB_116SiteBWco) { + // 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. + helper_.InstallCreateShortcutWindowed(Site::kSiteB); + helper_.ManifestUpdateDisplay(Site::kSiteB, Display::kWco); +} + +IN_PROC_BROWSER_TEST_F(WebAppIntegrationBrowserTest, + WebAppIntegration_31SiteB_116SiteBWco) { + // 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. + helper_.InstallOmniboxIcon(InstallableSite::kSiteB); + helper_.ManifestUpdateDisplay(Site::kSiteB, Display::kWco); +} + +IN_PROC_BROWSER_TEST_F(WebAppIntegrationBrowserTest, + WebAppIntegration_33SiteB_116SiteBWco) { + // 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. + helper_.InstallPolicyAppWindowedNoShortcut(Site::kSiteB); + helper_.ManifestUpdateDisplay(Site::kSiteB, Display::kWco); +} + +IN_PROC_BROWSER_TEST_F(WebAppIntegrationBrowserTest, + WebAppIntegration_49SiteB_116SiteBWco) { + // 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. + helper_.InstallPolicyAppWindowedShortcut(Site::kSiteB); + helper_.ManifestUpdateDisplay(Site::kSiteB, Display::kWco); +} + +IN_PROC_BROWSER_TEST_F(WebAppIntegrationBrowserTest, + WebAppIntegration_47SiteB_116SiteBWco) { + // 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. + helper_.InstallMenuOption(InstallableSite::kSiteB); + helper_.ManifestUpdateDisplay(Site::kSiteB, Display::kWco); +} + +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTest, + WebAppIntegration_30SiteWco_112SiteWcoShown_114SiteWco_113SiteWcoOn_112SiteWcoShown_115SiteWco_113SiteWcoOff_112SiteWcoShown) { + // 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. + helper_.InstallCreateShortcutWindowed(Site::kSiteWco); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteWco, IsShown::kShown); + helper_.EnableWindowControlsOverlay(Site::kSiteWco); + helper_.CheckWindowControlsOverlay(Site::kSiteWco, IsOn::kOn); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteWco, IsShown::kShown); + helper_.DisableWindowControlsOverlay(Site::kSiteWco); + helper_.CheckWindowControlsOverlay(Site::kSiteWco, IsOn::kOff); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteWco, IsShown::kShown); +} + +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTest, + WebAppIntegration_30SiteWco_112SiteWcoShown_114SiteWco_113SiteWcoOn_112SiteWcoShown_69SiteWco_113SiteWcoOn) { + // 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. + helper_.InstallCreateShortcutWindowed(Site::kSiteWco); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteWco, IsShown::kShown); + helper_.EnableWindowControlsOverlay(Site::kSiteWco); + helper_.CheckWindowControlsOverlay(Site::kSiteWco, IsOn::kOn); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteWco, IsShown::kShown); + helper_.LaunchFromMenuOption(Site::kSiteWco); + helper_.CheckWindowControlsOverlay(Site::kSiteWco, IsOn::kOn); +} + +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTest, + WebAppIntegration_30SiteWco_112SiteWcoShown_114SiteWco_113SiteWcoOn_112SiteWcoShown_35SiteWco_113SiteWcoOn) { + // 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. + helper_.InstallCreateShortcutWindowed(Site::kSiteWco); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteWco, IsShown::kShown); + helper_.EnableWindowControlsOverlay(Site::kSiteWco); + helper_.CheckWindowControlsOverlay(Site::kSiteWco, IsOn::kOn); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteWco, IsShown::kShown); + helper_.LaunchFromLaunchIcon(Site::kSiteWco); + helper_.CheckWindowControlsOverlay(Site::kSiteWco, IsOn::kOn); +} + +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTest, + WebAppIntegration_30SiteWco_112SiteWcoShown_114SiteWco_113SiteWcoOn_112SiteWcoShown_34SiteWco_113SiteWcoOn) { + // 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. + helper_.InstallCreateShortcutWindowed(Site::kSiteWco); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteWco, IsShown::kShown); + helper_.EnableWindowControlsOverlay(Site::kSiteWco); + helper_.CheckWindowControlsOverlay(Site::kSiteWco, IsOn::kOn); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteWco, IsShown::kShown); + helper_.LaunchFromChromeApps(Site::kSiteWco); + helper_.CheckWindowControlsOverlay(Site::kSiteWco, IsOn::kOn); +} + +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTest, + WebAppIntegration_30SiteWco_112SiteWcoShown_116SiteWcoStandalone) { + // 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. + helper_.InstallCreateShortcutWindowed(Site::kSiteWco); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteWco, IsShown::kShown); + helper_.ManifestUpdateDisplay(Site::kSiteWco, Display::kStandalone); +} + +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTest, + WebAppIntegration_31SiteWco_112SiteWcoShown_114SiteWco_113SiteWcoOn_112SiteWcoShown_115SiteWco_113SiteWcoOff_112SiteWcoShown) { + // 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. + helper_.InstallOmniboxIcon(InstallableSite::kSiteWco); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteWco, IsShown::kShown); + helper_.EnableWindowControlsOverlay(Site::kSiteWco); + helper_.CheckWindowControlsOverlay(Site::kSiteWco, IsOn::kOn); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteWco, IsShown::kShown); + helper_.DisableWindowControlsOverlay(Site::kSiteWco); + helper_.CheckWindowControlsOverlay(Site::kSiteWco, IsOn::kOff); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteWco, IsShown::kShown); +} + +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTest, + WebAppIntegration_31SiteWco_112SiteWcoShown_114SiteWco_113SiteWcoOn_112SiteWcoShown_69SiteWco_113SiteWcoOn) { + // 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. + helper_.InstallOmniboxIcon(InstallableSite::kSiteWco); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteWco, IsShown::kShown); + helper_.EnableWindowControlsOverlay(Site::kSiteWco); + helper_.CheckWindowControlsOverlay(Site::kSiteWco, IsOn::kOn); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteWco, IsShown::kShown); + helper_.LaunchFromMenuOption(Site::kSiteWco); + helper_.CheckWindowControlsOverlay(Site::kSiteWco, IsOn::kOn); +} + +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTest, + WebAppIntegration_31SiteWco_112SiteWcoShown_114SiteWco_113SiteWcoOn_112SiteWcoShown_35SiteWco_113SiteWcoOn) { + // 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. + helper_.InstallOmniboxIcon(InstallableSite::kSiteWco); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteWco, IsShown::kShown); + helper_.EnableWindowControlsOverlay(Site::kSiteWco); + helper_.CheckWindowControlsOverlay(Site::kSiteWco, IsOn::kOn); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteWco, IsShown::kShown); + helper_.LaunchFromLaunchIcon(Site::kSiteWco); + helper_.CheckWindowControlsOverlay(Site::kSiteWco, IsOn::kOn); +} + +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTest, + WebAppIntegration_31SiteWco_112SiteWcoShown_114SiteWco_113SiteWcoOn_112SiteWcoShown_34SiteWco_113SiteWcoOn) { + // 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. + helper_.InstallOmniboxIcon(InstallableSite::kSiteWco); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteWco, IsShown::kShown); + helper_.EnableWindowControlsOverlay(Site::kSiteWco); + helper_.CheckWindowControlsOverlay(Site::kSiteWco, IsOn::kOn); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteWco, IsShown::kShown); + helper_.LaunchFromChromeApps(Site::kSiteWco); + helper_.CheckWindowControlsOverlay(Site::kSiteWco, IsOn::kOn); +} + +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTest, + WebAppIntegration_31SiteWco_112SiteWcoShown_116SiteWcoStandalone) { + // 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. + helper_.InstallOmniboxIcon(InstallableSite::kSiteWco); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteWco, IsShown::kShown); + helper_.ManifestUpdateDisplay(Site::kSiteWco, Display::kStandalone); +} + +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTest, + WebAppIntegration_33SiteWco_112SiteWcoShown_114SiteWco_113SiteWcoOn_112SiteWcoShown_115SiteWco_113SiteWcoOff_112SiteWcoShown) { + // 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. + helper_.InstallPolicyAppWindowedNoShortcut(Site::kSiteWco); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteWco, IsShown::kShown); + helper_.EnableWindowControlsOverlay(Site::kSiteWco); + helper_.CheckWindowControlsOverlay(Site::kSiteWco, IsOn::kOn); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteWco, IsShown::kShown); + helper_.DisableWindowControlsOverlay(Site::kSiteWco); + helper_.CheckWindowControlsOverlay(Site::kSiteWco, IsOn::kOff); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteWco, IsShown::kShown); +} + +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTest, + WebAppIntegration_33SiteWco_112SiteWcoShown_114SiteWco_113SiteWcoOn_112SiteWcoShown_69SiteWco_113SiteWcoOn) { + // 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. + helper_.InstallPolicyAppWindowedNoShortcut(Site::kSiteWco); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteWco, IsShown::kShown); + helper_.EnableWindowControlsOverlay(Site::kSiteWco); + helper_.CheckWindowControlsOverlay(Site::kSiteWco, IsOn::kOn); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteWco, IsShown::kShown); + helper_.LaunchFromMenuOption(Site::kSiteWco); + helper_.CheckWindowControlsOverlay(Site::kSiteWco, IsOn::kOn); +} + +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTest, + WebAppIntegration_33SiteWco_112SiteWcoShown_114SiteWco_113SiteWcoOn_112SiteWcoShown_35SiteWco_113SiteWcoOn) { + // 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. + helper_.InstallPolicyAppWindowedNoShortcut(Site::kSiteWco); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteWco, IsShown::kShown); + helper_.EnableWindowControlsOverlay(Site::kSiteWco); + helper_.CheckWindowControlsOverlay(Site::kSiteWco, IsOn::kOn); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteWco, IsShown::kShown); + helper_.LaunchFromLaunchIcon(Site::kSiteWco); + helper_.CheckWindowControlsOverlay(Site::kSiteWco, IsOn::kOn); +} + +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTest, + WebAppIntegration_33SiteWco_112SiteWcoShown_114SiteWco_113SiteWcoOn_112SiteWcoShown_34SiteWco_113SiteWcoOn) { + // 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. + helper_.InstallPolicyAppWindowedNoShortcut(Site::kSiteWco); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteWco, IsShown::kShown); + helper_.EnableWindowControlsOverlay(Site::kSiteWco); + helper_.CheckWindowControlsOverlay(Site::kSiteWco, IsOn::kOn); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteWco, IsShown::kShown); + helper_.LaunchFromChromeApps(Site::kSiteWco); + helper_.CheckWindowControlsOverlay(Site::kSiteWco, IsOn::kOn); +} + +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTest, + WebAppIntegration_33SiteWco_112SiteWcoShown_116SiteWcoStandalone) { + // 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. + helper_.InstallPolicyAppWindowedNoShortcut(Site::kSiteWco); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteWco, IsShown::kShown); + helper_.ManifestUpdateDisplay(Site::kSiteWco, Display::kStandalone); +} + +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTest, + WebAppIntegration_49SiteWco_112SiteWcoShown_114SiteWco_113SiteWcoOn_112SiteWcoShown_115SiteWco_113SiteWcoOff_112SiteWcoShown) { + // 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. + helper_.InstallPolicyAppWindowedShortcut(Site::kSiteWco); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteWco, IsShown::kShown); + helper_.EnableWindowControlsOverlay(Site::kSiteWco); + helper_.CheckWindowControlsOverlay(Site::kSiteWco, IsOn::kOn); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteWco, IsShown::kShown); + helper_.DisableWindowControlsOverlay(Site::kSiteWco); + helper_.CheckWindowControlsOverlay(Site::kSiteWco, IsOn::kOff); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteWco, IsShown::kShown); +} + +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTest, + WebAppIntegration_49SiteWco_112SiteWcoShown_114SiteWco_113SiteWcoOn_112SiteWcoShown_69SiteWco_113SiteWcoOn) { + // 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. + helper_.InstallPolicyAppWindowedShortcut(Site::kSiteWco); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteWco, IsShown::kShown); + helper_.EnableWindowControlsOverlay(Site::kSiteWco); + helper_.CheckWindowControlsOverlay(Site::kSiteWco, IsOn::kOn); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteWco, IsShown::kShown); + helper_.LaunchFromMenuOption(Site::kSiteWco); + helper_.CheckWindowControlsOverlay(Site::kSiteWco, IsOn::kOn); +} + +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTest, + WebAppIntegration_49SiteWco_112SiteWcoShown_114SiteWco_113SiteWcoOn_112SiteWcoShown_35SiteWco_113SiteWcoOn) { + // 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. + helper_.InstallPolicyAppWindowedShortcut(Site::kSiteWco); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteWco, IsShown::kShown); + helper_.EnableWindowControlsOverlay(Site::kSiteWco); + helper_.CheckWindowControlsOverlay(Site::kSiteWco, IsOn::kOn); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteWco, IsShown::kShown); + helper_.LaunchFromLaunchIcon(Site::kSiteWco); + helper_.CheckWindowControlsOverlay(Site::kSiteWco, IsOn::kOn); +} + +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTest, + WebAppIntegration_49SiteWco_112SiteWcoShown_114SiteWco_113SiteWcoOn_112SiteWcoShown_34SiteWco_113SiteWcoOn) { + // 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. + helper_.InstallPolicyAppWindowedShortcut(Site::kSiteWco); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteWco, IsShown::kShown); + helper_.EnableWindowControlsOverlay(Site::kSiteWco); + helper_.CheckWindowControlsOverlay(Site::kSiteWco, IsOn::kOn); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteWco, IsShown::kShown); + helper_.LaunchFromChromeApps(Site::kSiteWco); + helper_.CheckWindowControlsOverlay(Site::kSiteWco, IsOn::kOn); +} + +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTest, + WebAppIntegration_49SiteWco_112SiteWcoShown_116SiteWcoStandalone) { + // 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. + helper_.InstallPolicyAppWindowedShortcut(Site::kSiteWco); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteWco, IsShown::kShown); + helper_.ManifestUpdateDisplay(Site::kSiteWco, Display::kStandalone); +} + +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTest, + WebAppIntegration_47SiteWco_112SiteWcoShown_114SiteWco_113SiteWcoOn_112SiteWcoShown_115SiteWco_113SiteWcoOff_112SiteWcoShown) { + // 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. + helper_.InstallMenuOption(InstallableSite::kSiteWco); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteWco, IsShown::kShown); + helper_.EnableWindowControlsOverlay(Site::kSiteWco); + helper_.CheckWindowControlsOverlay(Site::kSiteWco, IsOn::kOn); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteWco, IsShown::kShown); + helper_.DisableWindowControlsOverlay(Site::kSiteWco); + helper_.CheckWindowControlsOverlay(Site::kSiteWco, IsOn::kOff); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteWco, IsShown::kShown); +} + +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTest, + WebAppIntegration_47SiteWco_112SiteWcoShown_114SiteWco_113SiteWcoOn_112SiteWcoShown_69SiteWco_113SiteWcoOn) { + // 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. + helper_.InstallMenuOption(InstallableSite::kSiteWco); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteWco, IsShown::kShown); + helper_.EnableWindowControlsOverlay(Site::kSiteWco); + helper_.CheckWindowControlsOverlay(Site::kSiteWco, IsOn::kOn); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteWco, IsShown::kShown); + helper_.LaunchFromMenuOption(Site::kSiteWco); + helper_.CheckWindowControlsOverlay(Site::kSiteWco, IsOn::kOn); +} + +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTest, + WebAppIntegration_47SiteWco_112SiteWcoShown_114SiteWco_113SiteWcoOn_112SiteWcoShown_35SiteWco_113SiteWcoOn) { + // 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. + helper_.InstallMenuOption(InstallableSite::kSiteWco); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteWco, IsShown::kShown); + helper_.EnableWindowControlsOverlay(Site::kSiteWco); + helper_.CheckWindowControlsOverlay(Site::kSiteWco, IsOn::kOn); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteWco, IsShown::kShown); + helper_.LaunchFromLaunchIcon(Site::kSiteWco); + helper_.CheckWindowControlsOverlay(Site::kSiteWco, IsOn::kOn); +} + +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTest, + WebAppIntegration_47SiteWco_112SiteWcoShown_114SiteWco_113SiteWcoOn_112SiteWcoShown_34SiteWco_113SiteWcoOn) { + // 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. + helper_.InstallMenuOption(InstallableSite::kSiteWco); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteWco, IsShown::kShown); + helper_.EnableWindowControlsOverlay(Site::kSiteWco); + helper_.CheckWindowControlsOverlay(Site::kSiteWco, IsOn::kOn); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteWco, IsShown::kShown); + helper_.LaunchFromChromeApps(Site::kSiteWco); + helper_.CheckWindowControlsOverlay(Site::kSiteWco, IsOn::kOn); +} + +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTest, + WebAppIntegration_47SiteWco_112SiteWcoShown_116SiteWcoStandalone) { + // 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. + helper_.InstallMenuOption(InstallableSite::kSiteWco); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteWco, IsShown::kShown); + helper_.ManifestUpdateDisplay(Site::kSiteWco, Display::kStandalone); +} + } // namespace web_app::integration_tests
diff --git a/chrome/browser/ui/views/web_apps/web_app_integration_browsertest_mac_win_linux.cc b/chrome/browser/ui/views/web_apps/web_app_integration_browsertest_mac_win_linux.cc index 8119dd5..09492721 100644 --- a/chrome/browser/ui/views/web_apps/web_app_integration_browsertest_mac_win_linux.cc +++ b/chrome/browser/ui/views/web_apps/web_app_integration_browsertest_mac_win_linux.cc
@@ -56,406 +56,19 @@ helper_.CheckPlatformShortcutNotExists(Site::kSiteA); } +IN_PROC_BROWSER_TEST_F(WebAppIntegrationBrowserTestMacWinLinux, + CheckCreateShortcutFromChromeApps) { + helper_.InstallCreateShortcutWindowed(Site::kSiteA); + helper_.DeletePlatformShortcut(Site::kSiteA); + helper_.CheckPlatformShortcutNotExists(Site::kSiteA); + helper_.CreateShortcutFromChromeApps(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); +} + // Generated tests: IN_PROC_BROWSER_TEST_F( WebAppIntegrationBrowserTestMacWinLinux, - WebAppIntegration_30SiteA_24_12SiteA_7SiteA_32SiteA_7SiteA_12SiteA_1SiteA_24) { - // 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. - helper_.InstallCreateShortcutWindowed(Site::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.InstallPolicyAppTabbedNoShortcut(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.LaunchFromPlatformShortcut(Site::kSiteA); - helper_.CheckWindowCreated(); -} - -IN_PROC_BROWSER_TEST_F( - WebAppIntegrationBrowserTestMacWinLinux, - WebAppIntegration_30SiteA_24_12SiteA_7SiteA_48SiteA_12SiteA_1SiteA_24) { - // 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. - helper_.InstallCreateShortcutWindowed(Site::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.InstallPolicyAppTabbedShortcut(Site::kSiteA); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.LaunchFromPlatformShortcut(Site::kSiteA); - helper_.CheckWindowCreated(); -} - -IN_PROC_BROWSER_TEST_F( - WebAppIntegrationBrowserTestMacWinLinux, - WebAppIntegration_30SiteA_24_12SiteA_7SiteA_28_70SiteA_1SiteA_94_24_25) { - // 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. - helper_.InstallCreateShortcutWindowed(Site::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.ClosePwa(); - helper_.ManifestUpdateDisplayBrowser(Site::kSiteA); - helper_.LaunchFromPlatformShortcut(Site::kSiteA); - helper_.CheckTabNotCreated(); - helper_.CheckWindowCreated(); - helper_.CheckWindowDisplayMinimal(); -} - -IN_PROC_BROWSER_TEST_F( - WebAppIntegrationBrowserTestMacWinLinux, - WebAppIntegration_30SiteA_24_12SiteA_7SiteA_28_36SiteA_1SiteA_25) { - // 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. - helper_.InstallCreateShortcutWindowed(Site::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.ClosePwa(); - helper_.ManifestUpdateDisplayMinimal(Site::kSiteA); - helper_.LaunchFromPlatformShortcut(Site::kSiteA); - helper_.CheckWindowDisplayMinimal(); -} - -IN_PROC_BROWSER_TEST_F( - WebAppIntegrationBrowserTestMacWinLinux, - WebAppIntegration_30SiteA_24_12SiteA_7SiteA_1SiteA_24_26) { - // 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. - helper_.InstallCreateShortcutWindowed(Site::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.LaunchFromPlatformShortcut(Site::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckWindowDisplayStandalone(); -} - -IN_PROC_BROWSER_TEST_F( - WebAppIntegrationBrowserTestMacWinLinux, - WebAppIntegration_30SiteA_24_12SiteA_7SiteA_50SiteA_11SiteA_1SiteA_22) { - // 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. - helper_.InstallCreateShortcutWindowed(Site::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.SetOpenInTab(Site::kSiteA); - helper_.CheckAppInListTabbed(Site::kSiteA); - helper_.LaunchFromPlatformShortcut(Site::kSiteA); - helper_.CheckTabCreated(); -} - -IN_PROC_BROWSER_TEST_F( - WebAppIntegrationBrowserTestMacWinLinux, - WebAppIntegration_30SiteA_24_12SiteA_7SiteA_43SiteA_15SiteA_37SiteA_18_19) { - // 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. - helper_.InstallCreateShortcutWindowed(Site::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.UninstallFromMenu(Site::kSiteA); - helper_.CheckAppNotInList(Site::kSiteA); - helper_.NavigateBrowser(Site::kSiteA); - helper_.CheckInstallIconShown(); - helper_.CheckLaunchIconNotShown(); -} - -IN_PROC_BROWSER_TEST_F( - WebAppIntegrationBrowserTestMacWinLinux, - WebAppIntegration_30SiteA_24_12SiteA_7SiteA_98SiteA_15SiteA_37SiteA_18_19) { - // 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. - helper_.InstallCreateShortcutWindowed(Site::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.UninstallFromAppSettings(Site::kSiteA); - helper_.CheckAppNotInList(Site::kSiteA); - helper_.NavigateBrowser(Site::kSiteA); - helper_.CheckInstallIconShown(); - helper_.CheckLaunchIconNotShown(); -} - -IN_PROC_BROWSER_TEST_F( - WebAppIntegrationBrowserTestMacWinLinux, - WebAppIntegration_31SiteA_24_12SiteA_7SiteA_32SiteA_7SiteA_12SiteA_1SiteA_24) { - // 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. - helper_.InstallOmniboxIcon(InstallableSite::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.InstallPolicyAppTabbedNoShortcut(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.LaunchFromPlatformShortcut(Site::kSiteA); - helper_.CheckWindowCreated(); -} - -IN_PROC_BROWSER_TEST_F( - WebAppIntegrationBrowserTestMacWinLinux, - WebAppIntegration_31SiteA_24_12SiteA_7SiteA_48SiteA_12SiteA_1SiteA_24) { - // 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. - helper_.InstallOmniboxIcon(InstallableSite::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.InstallPolicyAppTabbedShortcut(Site::kSiteA); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.LaunchFromPlatformShortcut(Site::kSiteA); - helper_.CheckWindowCreated(); -} - -IN_PROC_BROWSER_TEST_F( - WebAppIntegrationBrowserTestMacWinLinux, - WebAppIntegration_31SiteA_24_12SiteA_7SiteA_28_70SiteA_1SiteA_94_24_25) { - // 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. - helper_.InstallOmniboxIcon(InstallableSite::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.ClosePwa(); - helper_.ManifestUpdateDisplayBrowser(Site::kSiteA); - helper_.LaunchFromPlatformShortcut(Site::kSiteA); - helper_.CheckTabNotCreated(); - helper_.CheckWindowCreated(); - helper_.CheckWindowDisplayMinimal(); -} - -IN_PROC_BROWSER_TEST_F( - WebAppIntegrationBrowserTestMacWinLinux, - WebAppIntegration_31SiteA_24_12SiteA_7SiteA_28_36SiteA_1SiteA_25) { - // 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. - helper_.InstallOmniboxIcon(InstallableSite::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.ClosePwa(); - helper_.ManifestUpdateDisplayMinimal(Site::kSiteA); - helper_.LaunchFromPlatformShortcut(Site::kSiteA); - helper_.CheckWindowDisplayMinimal(); -} - -IN_PROC_BROWSER_TEST_F( - WebAppIntegrationBrowserTestMacWinLinux, - WebAppIntegration_31SiteA_24_12SiteA_7SiteA_1SiteA_24_26) { - // 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. - helper_.InstallOmniboxIcon(InstallableSite::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.LaunchFromPlatformShortcut(Site::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckWindowDisplayStandalone(); -} - -IN_PROC_BROWSER_TEST_F( - WebAppIntegrationBrowserTestMacWinLinux, - WebAppIntegration_31SiteA_24_12SiteA_7SiteA_50SiteA_11SiteA_1SiteA_22) { - // 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. - helper_.InstallOmniboxIcon(InstallableSite::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.SetOpenInTab(Site::kSiteA); - helper_.CheckAppInListTabbed(Site::kSiteA); - helper_.LaunchFromPlatformShortcut(Site::kSiteA); - helper_.CheckTabCreated(); -} - -IN_PROC_BROWSER_TEST_F( - WebAppIntegrationBrowserTestMacWinLinux, - WebAppIntegration_31SiteA_24_12SiteA_7SiteA_43SiteA_15SiteA_37SiteA_18_19) { - // 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. - helper_.InstallOmniboxIcon(InstallableSite::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.UninstallFromMenu(Site::kSiteA); - helper_.CheckAppNotInList(Site::kSiteA); - helper_.NavigateBrowser(Site::kSiteA); - helper_.CheckInstallIconShown(); - helper_.CheckLaunchIconNotShown(); -} - -IN_PROC_BROWSER_TEST_F( - WebAppIntegrationBrowserTestMacWinLinux, - WebAppIntegration_31SiteA_24_12SiteA_7SiteA_98SiteA_15SiteA_37SiteA_18_19) { - // 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. - helper_.InstallOmniboxIcon(InstallableSite::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.UninstallFromAppSettings(Site::kSiteA); - helper_.CheckAppNotInList(Site::kSiteA); - helper_.NavigateBrowser(Site::kSiteA); - helper_.CheckInstallIconShown(); - helper_.CheckLaunchIconNotShown(); -} - -IN_PROC_BROWSER_TEST_F( - WebAppIntegrationBrowserTestMacWinLinux, - WebAppIntegration_47SiteA_24_12SiteA_7SiteA_32SiteA_7SiteA_12SiteA_1SiteA_24) { - // 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. - helper_.InstallMenuOption(InstallableSite::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.InstallPolicyAppTabbedNoShortcut(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.LaunchFromPlatformShortcut(Site::kSiteA); - helper_.CheckWindowCreated(); -} - -IN_PROC_BROWSER_TEST_F( - WebAppIntegrationBrowserTestMacWinLinux, - WebAppIntegration_47SiteA_24_12SiteA_7SiteA_48SiteA_12SiteA_1SiteA_24) { - // 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. - helper_.InstallMenuOption(InstallableSite::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.InstallPolicyAppTabbedShortcut(Site::kSiteA); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.LaunchFromPlatformShortcut(Site::kSiteA); - helper_.CheckWindowCreated(); -} - -IN_PROC_BROWSER_TEST_F( - WebAppIntegrationBrowserTestMacWinLinux, - WebAppIntegration_47SiteA_24_12SiteA_7SiteA_28_70SiteA_1SiteA_94_24_25) { - // 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. - helper_.InstallMenuOption(InstallableSite::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.ClosePwa(); - helper_.ManifestUpdateDisplayBrowser(Site::kSiteA); - helper_.LaunchFromPlatformShortcut(Site::kSiteA); - helper_.CheckTabNotCreated(); - helper_.CheckWindowCreated(); - helper_.CheckWindowDisplayMinimal(); -} - -IN_PROC_BROWSER_TEST_F( - WebAppIntegrationBrowserTestMacWinLinux, - WebAppIntegration_47SiteA_24_12SiteA_7SiteA_28_36SiteA_1SiteA_25) { - // 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. - helper_.InstallMenuOption(InstallableSite::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.ClosePwa(); - helper_.ManifestUpdateDisplayMinimal(Site::kSiteA); - helper_.LaunchFromPlatformShortcut(Site::kSiteA); - helper_.CheckWindowDisplayMinimal(); -} - -IN_PROC_BROWSER_TEST_F( - WebAppIntegrationBrowserTestMacWinLinux, - WebAppIntegration_47SiteA_24_12SiteA_7SiteA_1SiteA_24_26) { - // 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. - helper_.InstallMenuOption(InstallableSite::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.LaunchFromPlatformShortcut(Site::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckWindowDisplayStandalone(); -} - -IN_PROC_BROWSER_TEST_F( - WebAppIntegrationBrowserTestMacWinLinux, - WebAppIntegration_47SiteA_24_12SiteA_7SiteA_50SiteA_11SiteA_1SiteA_22) { - // 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. - helper_.InstallMenuOption(InstallableSite::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.SetOpenInTab(Site::kSiteA); - helper_.CheckAppInListTabbed(Site::kSiteA); - helper_.LaunchFromPlatformShortcut(Site::kSiteA); - helper_.CheckTabCreated(); -} - -IN_PROC_BROWSER_TEST_F( - WebAppIntegrationBrowserTestMacWinLinux, - WebAppIntegration_47SiteA_24_12SiteA_7SiteA_43SiteA_15SiteA_37SiteA_18_19) { - // 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. - helper_.InstallMenuOption(InstallableSite::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.UninstallFromMenu(Site::kSiteA); - helper_.CheckAppNotInList(Site::kSiteA); - helper_.NavigateBrowser(Site::kSiteA); - helper_.CheckInstallIconShown(); - helper_.CheckLaunchIconNotShown(); -} - -IN_PROC_BROWSER_TEST_F( - WebAppIntegrationBrowserTestMacWinLinux, - WebAppIntegration_47SiteA_24_12SiteA_7SiteA_98SiteA_15SiteA_37SiteA_18_19) { - // 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. - helper_.InstallMenuOption(InstallableSite::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.UninstallFromAppSettings(Site::kSiteA); - helper_.CheckAppNotInList(Site::kSiteA); - helper_.NavigateBrowser(Site::kSiteA); - helper_.CheckInstallIconShown(); - helper_.CheckLaunchIconNotShown(); -} - -IN_PROC_BROWSER_TEST_F( - WebAppIntegrationBrowserTestMacWinLinux, WebAppIntegration_29SiteA_11SiteA_7SiteA_33SiteA_7SiteA_11SiteA_1SiteA_22) { // Test contents are generated by script. Please do not modify! // See `chrome/test/webapps/README.md` for more info. @@ -502,57 +115,6 @@ } IN_PROC_BROWSER_TEST_F(WebAppIntegrationBrowserTestMacWinLinux, - WebAppIntegration_33SiteA_12SiteA_1SiteA_24_26) { - // 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. - helper_.InstallPolicyAppWindowedNoShortcut(Site::kSiteA); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.LaunchFromPlatformShortcut(Site::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckWindowDisplayStandalone(); -} - -IN_PROC_BROWSER_TEST_F(WebAppIntegrationBrowserTestMacWinLinux, - WebAppIntegration_33SiteA_12SiteA_50SiteA_1SiteA_22) { - // 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. - helper_.InstallPolicyAppWindowedNoShortcut(Site::kSiteA); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.SetOpenInTab(Site::kSiteA); - helper_.LaunchFromPlatformShortcut(Site::kSiteA); - helper_.CheckTabCreated(); -} - -IN_PROC_BROWSER_TEST_F(WebAppIntegrationBrowserTestMacWinLinux, - WebAppIntegration_49SiteA_12SiteA_7SiteA_1SiteA_24_26) { - // 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. - helper_.InstallPolicyAppWindowedShortcut(Site::kSiteA); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.LaunchFromPlatformShortcut(Site::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckWindowDisplayStandalone(); -} - -IN_PROC_BROWSER_TEST_F( - WebAppIntegrationBrowserTestMacWinLinux, - WebAppIntegration_49SiteA_12SiteA_7SiteA_50SiteA_1SiteA_22) { - // 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. - helper_.InstallPolicyAppWindowedShortcut(Site::kSiteA); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.SetOpenInTab(Site::kSiteA); - helper_.LaunchFromPlatformShortcut(Site::kSiteA); - helper_.CheckTabCreated(); -} - -IN_PROC_BROWSER_TEST_F(WebAppIntegrationBrowserTestMacWinLinux, WebAppIntegration_32SiteA_11SiteA_51SiteA_1SiteA_24) { // Test contents are generated by script. Please do not modify! // See `chrome/test/webapps/README.md` for more info. @@ -814,293 +376,6 @@ helper_.CheckNoToolbar(); } -IN_PROC_BROWSER_TEST_F( - WebAppIntegrationBrowserTestMacWinLinux, - WebAppIntegration_30SiteA_24_12SiteA_7SiteA_101SiteA_111SiteA) { - // 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. - helper_.InstallCreateShortcutWindowed(Site::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.ApplyRunOnOsLoginPolicyBlocked(Site::kSiteA); - helper_.CheckUserCannotSetRunOnOsLogin(Site::kSiteA); -} - -IN_PROC_BROWSER_TEST_F( - WebAppIntegrationBrowserTestMacWinLinux, - WebAppIntegration_30SiteA_24_12SiteA_7SiteA_104SiteA_106SiteA_105SiteA_107SiteA) { - // 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. - helper_.InstallCreateShortcutWindowed(Site::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.EnableRunOnOsLogin(Site::kSiteA); - helper_.CheckRunOnOsLoginEnabled(Site::kSiteA); - helper_.DisableRunOnOsLogin(Site::kSiteA); - helper_.CheckRunOnOsLoginDisabled(Site::kSiteA); -} - -IN_PROC_BROWSER_TEST_F( - WebAppIntegrationBrowserTestMacWinLinux, - WebAppIntegration_30SiteA_24_12SiteA_7SiteA_102SiteA_106SiteA_111SiteA_103SiteA_107SiteA) { - // 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. - helper_.InstallCreateShortcutWindowed(Site::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.ApplyRunOnOsLoginPolicyRunWindowed(Site::kSiteA); - helper_.CheckRunOnOsLoginEnabled(Site::kSiteA); - helper_.CheckUserCannotSetRunOnOsLogin(Site::kSiteA); - helper_.RemoveRunOnOsLoginPolicy(Site::kSiteA); - helper_.CheckRunOnOsLoginDisabled(Site::kSiteA); -} - -IN_PROC_BROWSER_TEST_F( - WebAppIntegrationBrowserTestMacWinLinux, - WebAppIntegration_30SiteA_24_12SiteA_7SiteA_96SiteA_109SiteA) { - // 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. - helper_.InstallCreateShortcutWindowed(Site::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.OpenAppSettingsFromChromeApps(Site::kSiteA); - helper_.CheckBrowserNavigationIsAppSettings(Site::kSiteA); -} - -IN_PROC_BROWSER_TEST_F( - WebAppIntegrationBrowserTestMacWinLinux, - WebAppIntegration_30SiteA_24_12SiteA_7SiteA_97SiteA_109SiteA) { - // 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. - helper_.InstallCreateShortcutWindowed(Site::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.OpenAppSettingsFromAppMenu(Site::kSiteA); - helper_.CheckBrowserNavigationIsAppSettings(Site::kSiteA); -} - -IN_PROC_BROWSER_TEST_F( - WebAppIntegrationBrowserTestMacWinLinux, - WebAppIntegration_31SiteA_24_12SiteA_7SiteA_101SiteA_111SiteA) { - // 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. - helper_.InstallOmniboxIcon(InstallableSite::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.ApplyRunOnOsLoginPolicyBlocked(Site::kSiteA); - helper_.CheckUserCannotSetRunOnOsLogin(Site::kSiteA); -} - -IN_PROC_BROWSER_TEST_F( - WebAppIntegrationBrowserTestMacWinLinux, - WebAppIntegration_31SiteA_24_12SiteA_7SiteA_104SiteA_106SiteA_105SiteA_107SiteA) { - // 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. - helper_.InstallOmniboxIcon(InstallableSite::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.EnableRunOnOsLogin(Site::kSiteA); - helper_.CheckRunOnOsLoginEnabled(Site::kSiteA); - helper_.DisableRunOnOsLogin(Site::kSiteA); - helper_.CheckRunOnOsLoginDisabled(Site::kSiteA); -} - -IN_PROC_BROWSER_TEST_F( - WebAppIntegrationBrowserTestMacWinLinux, - WebAppIntegration_31SiteA_24_12SiteA_7SiteA_102SiteA_106SiteA_111SiteA_103SiteA_107SiteA) { - // 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. - helper_.InstallOmniboxIcon(InstallableSite::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.ApplyRunOnOsLoginPolicyRunWindowed(Site::kSiteA); - helper_.CheckRunOnOsLoginEnabled(Site::kSiteA); - helper_.CheckUserCannotSetRunOnOsLogin(Site::kSiteA); - helper_.RemoveRunOnOsLoginPolicy(Site::kSiteA); - helper_.CheckRunOnOsLoginDisabled(Site::kSiteA); -} - -IN_PROC_BROWSER_TEST_F( - WebAppIntegrationBrowserTestMacWinLinux, - WebAppIntegration_31SiteA_24_12SiteA_7SiteA_96SiteA_109SiteA) { - // 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. - helper_.InstallOmniboxIcon(InstallableSite::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.OpenAppSettingsFromChromeApps(Site::kSiteA); - helper_.CheckBrowserNavigationIsAppSettings(Site::kSiteA); -} - -IN_PROC_BROWSER_TEST_F( - WebAppIntegrationBrowserTestMacWinLinux, - WebAppIntegration_31SiteA_24_12SiteA_7SiteA_97SiteA_109SiteA) { - // 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. - helper_.InstallOmniboxIcon(InstallableSite::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.OpenAppSettingsFromAppMenu(Site::kSiteA); - helper_.CheckBrowserNavigationIsAppSettings(Site::kSiteA); -} - -IN_PROC_BROWSER_TEST_F( - WebAppIntegrationBrowserTestMacWinLinux, - WebAppIntegration_47SiteA_24_12SiteA_7SiteA_101SiteA_111SiteA) { - // 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. - helper_.InstallMenuOption(InstallableSite::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.ApplyRunOnOsLoginPolicyBlocked(Site::kSiteA); - helper_.CheckUserCannotSetRunOnOsLogin(Site::kSiteA); -} - -IN_PROC_BROWSER_TEST_F( - WebAppIntegrationBrowserTestMacWinLinux, - WebAppIntegration_47SiteA_24_12SiteA_7SiteA_104SiteA_106SiteA_105SiteA_107SiteA) { - // 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. - helper_.InstallMenuOption(InstallableSite::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.EnableRunOnOsLogin(Site::kSiteA); - helper_.CheckRunOnOsLoginEnabled(Site::kSiteA); - helper_.DisableRunOnOsLogin(Site::kSiteA); - helper_.CheckRunOnOsLoginDisabled(Site::kSiteA); -} - -IN_PROC_BROWSER_TEST_F( - WebAppIntegrationBrowserTestMacWinLinux, - WebAppIntegration_47SiteA_24_12SiteA_7SiteA_102SiteA_106SiteA_111SiteA_103SiteA_107SiteA) { - // 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. - helper_.InstallMenuOption(InstallableSite::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.ApplyRunOnOsLoginPolicyRunWindowed(Site::kSiteA); - helper_.CheckRunOnOsLoginEnabled(Site::kSiteA); - helper_.CheckUserCannotSetRunOnOsLogin(Site::kSiteA); - helper_.RemoveRunOnOsLoginPolicy(Site::kSiteA); - helper_.CheckRunOnOsLoginDisabled(Site::kSiteA); -} - -IN_PROC_BROWSER_TEST_F( - WebAppIntegrationBrowserTestMacWinLinux, - WebAppIntegration_47SiteA_24_12SiteA_7SiteA_96SiteA_109SiteA) { - // 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. - helper_.InstallMenuOption(InstallableSite::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.OpenAppSettingsFromChromeApps(Site::kSiteA); - helper_.CheckBrowserNavigationIsAppSettings(Site::kSiteA); -} - -IN_PROC_BROWSER_TEST_F( - WebAppIntegrationBrowserTestMacWinLinux, - WebAppIntegration_47SiteA_24_12SiteA_7SiteA_97SiteA_109SiteA) { - // 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. - helper_.InstallMenuOption(InstallableSite::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.OpenAppSettingsFromAppMenu(Site::kSiteA); - helper_.CheckBrowserNavigationIsAppSettings(Site::kSiteA); -} - -IN_PROC_BROWSER_TEST_F(WebAppIntegrationBrowserTestMacWinLinux, - WebAppIntegration_33SiteA_12SiteA_101SiteA_111SiteA) { - // 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. - helper_.InstallPolicyAppWindowedNoShortcut(Site::kSiteA); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.ApplyRunOnOsLoginPolicyBlocked(Site::kSiteA); - helper_.CheckUserCannotSetRunOnOsLogin(Site::kSiteA); -} - -IN_PROC_BROWSER_TEST_F( - WebAppIntegrationBrowserTestMacWinLinux, - WebAppIntegration_33SiteA_12SiteA_104SiteA_106SiteA_105SiteA_107SiteA) { - // 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. - helper_.InstallPolicyAppWindowedNoShortcut(Site::kSiteA); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.EnableRunOnOsLogin(Site::kSiteA); - helper_.CheckRunOnOsLoginEnabled(Site::kSiteA); - helper_.DisableRunOnOsLogin(Site::kSiteA); - helper_.CheckRunOnOsLoginDisabled(Site::kSiteA); -} - -IN_PROC_BROWSER_TEST_F( - WebAppIntegrationBrowserTestMacWinLinux, - WebAppIntegration_33SiteA_12SiteA_102SiteA_106SiteA_111SiteA_103SiteA_107SiteA) { - // 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. - helper_.InstallPolicyAppWindowedNoShortcut(Site::kSiteA); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.ApplyRunOnOsLoginPolicyRunWindowed(Site::kSiteA); - helper_.CheckRunOnOsLoginEnabled(Site::kSiteA); - helper_.CheckUserCannotSetRunOnOsLogin(Site::kSiteA); - helper_.RemoveRunOnOsLoginPolicy(Site::kSiteA); - helper_.CheckRunOnOsLoginDisabled(Site::kSiteA); -} - -IN_PROC_BROWSER_TEST_F(WebAppIntegrationBrowserTestMacWinLinux, - WebAppIntegration_33SiteA_12SiteA_96SiteA_109SiteA) { - // 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. - helper_.InstallPolicyAppWindowedNoShortcut(Site::kSiteA); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.OpenAppSettingsFromChromeApps(Site::kSiteA); - helper_.CheckBrowserNavigationIsAppSettings(Site::kSiteA); -} - -IN_PROC_BROWSER_TEST_F(WebAppIntegrationBrowserTestMacWinLinux, - WebAppIntegration_33SiteA_12SiteA_97SiteA_109SiteA) { - // 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. - helper_.InstallPolicyAppWindowedNoShortcut(Site::kSiteA); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.OpenAppSettingsFromAppMenu(Site::kSiteA); - helper_.CheckBrowserNavigationIsAppSettings(Site::kSiteA); -} - IN_PROC_BROWSER_TEST_F(WebAppIntegrationBrowserTestMacWinLinux, WebAppIntegration_32SiteA_11SiteA_101SiteA_111SiteA) { // Test contents are generated by script. Please do not modify! @@ -1143,76 +418,6 @@ IN_PROC_BROWSER_TEST_F( WebAppIntegrationBrowserTestMacWinLinux, - WebAppIntegration_49SiteA_12SiteA_7SiteA_101SiteA_111SiteA) { - // 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. - helper_.InstallPolicyAppWindowedShortcut(Site::kSiteA); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.ApplyRunOnOsLoginPolicyBlocked(Site::kSiteA); - helper_.CheckUserCannotSetRunOnOsLogin(Site::kSiteA); -} - -IN_PROC_BROWSER_TEST_F( - WebAppIntegrationBrowserTestMacWinLinux, - WebAppIntegration_49SiteA_12SiteA_7SiteA_104SiteA_106SiteA_105SiteA_107SiteA) { - // 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. - helper_.InstallPolicyAppWindowedShortcut(Site::kSiteA); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.EnableRunOnOsLogin(Site::kSiteA); - helper_.CheckRunOnOsLoginEnabled(Site::kSiteA); - helper_.DisableRunOnOsLogin(Site::kSiteA); - helper_.CheckRunOnOsLoginDisabled(Site::kSiteA); -} - -IN_PROC_BROWSER_TEST_F( - WebAppIntegrationBrowserTestMacWinLinux, - WebAppIntegration_49SiteA_12SiteA_7SiteA_102SiteA_106SiteA_111SiteA_103SiteA_107SiteA) { - // 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. - helper_.InstallPolicyAppWindowedShortcut(Site::kSiteA); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.ApplyRunOnOsLoginPolicyRunWindowed(Site::kSiteA); - helper_.CheckRunOnOsLoginEnabled(Site::kSiteA); - helper_.CheckUserCannotSetRunOnOsLogin(Site::kSiteA); - helper_.RemoveRunOnOsLoginPolicy(Site::kSiteA); - helper_.CheckRunOnOsLoginDisabled(Site::kSiteA); -} - -IN_PROC_BROWSER_TEST_F( - WebAppIntegrationBrowserTestMacWinLinux, - WebAppIntegration_49SiteA_12SiteA_7SiteA_96SiteA_109SiteA) { - // 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. - helper_.InstallPolicyAppWindowedShortcut(Site::kSiteA); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.OpenAppSettingsFromChromeApps(Site::kSiteA); - helper_.CheckBrowserNavigationIsAppSettings(Site::kSiteA); -} - -IN_PROC_BROWSER_TEST_F( - WebAppIntegrationBrowserTestMacWinLinux, - WebAppIntegration_49SiteA_12SiteA_7SiteA_97SiteA_109SiteA) { - // 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. - helper_.InstallPolicyAppWindowedShortcut(Site::kSiteA); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.OpenAppSettingsFromAppMenu(Site::kSiteA); - helper_.CheckBrowserNavigationIsAppSettings(Site::kSiteA); -} - -IN_PROC_BROWSER_TEST_F( - WebAppIntegrationBrowserTestMacWinLinux, WebAppIntegration_48SiteA_11SiteA_7SiteA_101SiteA_111SiteA) { // Test contents are generated by script. Please do not modify! // See `chrome/test/webapps/README.md` for more info. @@ -1301,76 +506,6 @@ IN_PROC_BROWSER_TEST_F( WebAppIntegrationBrowserTestMacWinLinux, - WebAppIntegration_30SiteA_24_12SiteA_7SiteA_104SiteA_106SiteA_101SiteA_107SiteA_103SiteA_106SiteA) { - // 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. - helper_.InstallCreateShortcutWindowed(Site::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.EnableRunOnOsLogin(Site::kSiteA); - helper_.CheckRunOnOsLoginEnabled(Site::kSiteA); - helper_.ApplyRunOnOsLoginPolicyBlocked(Site::kSiteA); - helper_.CheckRunOnOsLoginDisabled(Site::kSiteA); - helper_.RemoveRunOnOsLoginPolicy(Site::kSiteA); - helper_.CheckRunOnOsLoginEnabled(Site::kSiteA); -} - -IN_PROC_BROWSER_TEST_F( - WebAppIntegrationBrowserTestMacWinLinux, - WebAppIntegration_31SiteA_24_12SiteA_7SiteA_104SiteA_106SiteA_101SiteA_107SiteA_103SiteA_106SiteA) { - // 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. - helper_.InstallOmniboxIcon(InstallableSite::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.EnableRunOnOsLogin(Site::kSiteA); - helper_.CheckRunOnOsLoginEnabled(Site::kSiteA); - helper_.ApplyRunOnOsLoginPolicyBlocked(Site::kSiteA); - helper_.CheckRunOnOsLoginDisabled(Site::kSiteA); - helper_.RemoveRunOnOsLoginPolicy(Site::kSiteA); - helper_.CheckRunOnOsLoginEnabled(Site::kSiteA); -} - -IN_PROC_BROWSER_TEST_F( - WebAppIntegrationBrowserTestMacWinLinux, - WebAppIntegration_47SiteA_24_12SiteA_7SiteA_104SiteA_106SiteA_101SiteA_107SiteA_103SiteA_106SiteA) { - // 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. - helper_.InstallMenuOption(InstallableSite::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.EnableRunOnOsLogin(Site::kSiteA); - helper_.CheckRunOnOsLoginEnabled(Site::kSiteA); - helper_.ApplyRunOnOsLoginPolicyBlocked(Site::kSiteA); - helper_.CheckRunOnOsLoginDisabled(Site::kSiteA); - helper_.RemoveRunOnOsLoginPolicy(Site::kSiteA); - helper_.CheckRunOnOsLoginEnabled(Site::kSiteA); -} - -IN_PROC_BROWSER_TEST_F( - WebAppIntegrationBrowserTestMacWinLinux, - WebAppIntegration_33SiteA_12SiteA_104SiteA_106SiteA_101SiteA_107SiteA_103SiteA_106SiteA) { - // 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. - helper_.InstallPolicyAppWindowedNoShortcut(Site::kSiteA); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.EnableRunOnOsLogin(Site::kSiteA); - helper_.CheckRunOnOsLoginEnabled(Site::kSiteA); - helper_.ApplyRunOnOsLoginPolicyBlocked(Site::kSiteA); - helper_.CheckRunOnOsLoginDisabled(Site::kSiteA); - helper_.RemoveRunOnOsLoginPolicy(Site::kSiteA); - helper_.CheckRunOnOsLoginEnabled(Site::kSiteA); -} - -IN_PROC_BROWSER_TEST_F( - WebAppIntegrationBrowserTestMacWinLinux, WebAppIntegration_32SiteA_11SiteA_104SiteA_106SiteA_101SiteA_107SiteA_103SiteA_106SiteA) { // Test contents are generated by script. Please do not modify! // See `chrome/test/webapps/README.md` for more info. @@ -1387,23 +522,6 @@ IN_PROC_BROWSER_TEST_F( WebAppIntegrationBrowserTestMacWinLinux, - WebAppIntegration_49SiteA_12SiteA_7SiteA_104SiteA_106SiteA_101SiteA_107SiteA_103SiteA_106SiteA) { - // 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. - helper_.InstallPolicyAppWindowedShortcut(Site::kSiteA); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.EnableRunOnOsLogin(Site::kSiteA); - helper_.CheckRunOnOsLoginEnabled(Site::kSiteA); - helper_.ApplyRunOnOsLoginPolicyBlocked(Site::kSiteA); - helper_.CheckRunOnOsLoginDisabled(Site::kSiteA); - helper_.RemoveRunOnOsLoginPolicy(Site::kSiteA); - helper_.CheckRunOnOsLoginEnabled(Site::kSiteA); -} - -IN_PROC_BROWSER_TEST_F( - WebAppIntegrationBrowserTestMacWinLinux, WebAppIntegration_48SiteA_11SiteA_7SiteA_104SiteA_106SiteA_101SiteA_107SiteA_103SiteA_106SiteA) { // Test contents are generated by script. Please do not modify! // See `chrome/test/webapps/README.md` for more info. @@ -1436,5 +554,1035 @@ helper_.CheckRunOnOsLoginEnabled(Site::kSiteA); } +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTestMacWinLinux, + WebAppIntegration_30SiteA_24_12SiteA_7SiteA_112SiteANotShown_28_70SiteA_1SiteA_94_24_25) { + // 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. + helper_.InstallCreateShortcutWindowed(Site::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.ClosePwa(); + helper_.ManifestUpdateDisplayBrowser(Site::kSiteA); + helper_.LaunchFromPlatformShortcut(Site::kSiteA); + helper_.CheckTabNotCreated(); + helper_.CheckWindowCreated(); + helper_.CheckWindowDisplayMinimal(); +} + +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTestMacWinLinux, + WebAppIntegration_30SiteA_24_12SiteA_7SiteA_112SiteANotShown_28_36SiteA_1SiteA_25) { + // 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. + helper_.InstallCreateShortcutWindowed(Site::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.ClosePwa(); + helper_.ManifestUpdateDisplayMinimal(Site::kSiteA); + helper_.LaunchFromPlatformShortcut(Site::kSiteA); + helper_.CheckWindowDisplayMinimal(); +} + +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTestMacWinLinux, + WebAppIntegration_30SiteA_24_12SiteA_7SiteA_112SiteANotShown_101SiteA_111SiteA) { + // 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. + helper_.InstallCreateShortcutWindowed(Site::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.ApplyRunOnOsLoginPolicyBlocked(Site::kSiteA); + helper_.CheckUserCannotSetRunOnOsLogin(Site::kSiteA); +} + +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTestMacWinLinux, + WebAppIntegration_30SiteA_24_12SiteA_7SiteA_112SiteANotShown_104SiteA_106SiteA_101SiteA_107SiteA_103SiteA_106SiteA) { + // 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. + helper_.InstallCreateShortcutWindowed(Site::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.EnableRunOnOsLogin(Site::kSiteA); + helper_.CheckRunOnOsLoginEnabled(Site::kSiteA); + helper_.ApplyRunOnOsLoginPolicyBlocked(Site::kSiteA); + helper_.CheckRunOnOsLoginDisabled(Site::kSiteA); + helper_.RemoveRunOnOsLoginPolicy(Site::kSiteA); + helper_.CheckRunOnOsLoginEnabled(Site::kSiteA); +} + +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTestMacWinLinux, + WebAppIntegration_30SiteA_24_12SiteA_7SiteA_112SiteANotShown_104SiteA_106SiteA_105SiteA_107SiteA) { + // 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. + helper_.InstallCreateShortcutWindowed(Site::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.EnableRunOnOsLogin(Site::kSiteA); + helper_.CheckRunOnOsLoginEnabled(Site::kSiteA); + helper_.DisableRunOnOsLogin(Site::kSiteA); + helper_.CheckRunOnOsLoginDisabled(Site::kSiteA); +} + +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTestMacWinLinux, + WebAppIntegration_30SiteA_24_12SiteA_7SiteA_112SiteANotShown_102SiteA_106SiteA_111SiteA_103SiteA_107SiteA) { + // 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. + helper_.InstallCreateShortcutWindowed(Site::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.ApplyRunOnOsLoginPolicyRunWindowed(Site::kSiteA); + helper_.CheckRunOnOsLoginEnabled(Site::kSiteA); + helper_.CheckUserCannotSetRunOnOsLogin(Site::kSiteA); + helper_.RemoveRunOnOsLoginPolicy(Site::kSiteA); + helper_.CheckRunOnOsLoginDisabled(Site::kSiteA); +} + +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTestMacWinLinux, + WebAppIntegration_30SiteA_24_12SiteA_7SiteA_112SiteANotShown_43SiteA_15SiteA_37SiteA_18_19) { + // 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. + helper_.InstallCreateShortcutWindowed(Site::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.UninstallFromMenu(Site::kSiteA); + helper_.CheckAppNotInList(Site::kSiteA); + helper_.NavigateBrowser(Site::kSiteA); + helper_.CheckInstallIconShown(); + helper_.CheckLaunchIconNotShown(); +} + +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTestMacWinLinux, + WebAppIntegration_30SiteA_24_12SiteA_7SiteA_112SiteANotShown_98SiteA_15SiteA_37SiteA_18_19) { + // 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. + helper_.InstallCreateShortcutWindowed(Site::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.UninstallFromAppSettings(Site::kSiteA); + helper_.CheckAppNotInList(Site::kSiteA); + helper_.NavigateBrowser(Site::kSiteA); + helper_.CheckInstallIconShown(); + helper_.CheckLaunchIconNotShown(); +} + +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTestMacWinLinux, + WebAppIntegration_30SiteA_24_12SiteA_7SiteA_112SiteANotShown_1SiteA_24_26) { + // 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. + helper_.InstallCreateShortcutWindowed(Site::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.LaunchFromPlatformShortcut(Site::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckWindowDisplayStandalone(); +} + +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTestMacWinLinux, + WebAppIntegration_30SiteA_24_12SiteA_7SiteA_112SiteANotShown_50SiteA_11SiteA_1SiteA_22) { + // 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. + helper_.InstallCreateShortcutWindowed(Site::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.SetOpenInTab(Site::kSiteA); + helper_.CheckAppInListTabbed(Site::kSiteA); + helper_.LaunchFromPlatformShortcut(Site::kSiteA); + helper_.CheckTabCreated(); +} + +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTestMacWinLinux, + WebAppIntegration_30SiteA_24_12SiteA_7SiteA_112SiteANotShown_96SiteA_109SiteA) { + // 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. + helper_.InstallCreateShortcutWindowed(Site::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.OpenAppSettingsFromChromeApps(Site::kSiteA); + helper_.CheckBrowserNavigationIsAppSettings(Site::kSiteA); +} + +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTestMacWinLinux, + WebAppIntegration_30SiteA_24_12SiteA_7SiteA_112SiteANotShown_97SiteA_109SiteA) { + // 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. + helper_.InstallCreateShortcutWindowed(Site::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.OpenAppSettingsFromAppMenu(Site::kSiteA); + helper_.CheckBrowserNavigationIsAppSettings(Site::kSiteA); +} + +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTestMacWinLinux, + WebAppIntegration_30SiteA_24_12SiteA_7SiteA_112SiteANotShown_32SiteA_7SiteA_12SiteA_1SiteA_24) { + // 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. + helper_.InstallCreateShortcutWindowed(Site::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.InstallPolicyAppTabbedNoShortcut(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.LaunchFromPlatformShortcut(Site::kSiteA); + helper_.CheckWindowCreated(); +} + +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTestMacWinLinux, + WebAppIntegration_30SiteA_24_12SiteA_7SiteA_112SiteANotShown_48SiteA_12SiteA_1SiteA_24) { + // 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. + helper_.InstallCreateShortcutWindowed(Site::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.InstallPolicyAppTabbedShortcut(Site::kSiteA); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.LaunchFromPlatformShortcut(Site::kSiteA); + helper_.CheckWindowCreated(); +} + +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTestMacWinLinux, + WebAppIntegration_31SiteA_24_12SiteA_7SiteA_112SiteANotShown_28_70SiteA_1SiteA_94_24_25) { + // 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. + helper_.InstallOmniboxIcon(InstallableSite::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.ClosePwa(); + helper_.ManifestUpdateDisplayBrowser(Site::kSiteA); + helper_.LaunchFromPlatformShortcut(Site::kSiteA); + helper_.CheckTabNotCreated(); + helper_.CheckWindowCreated(); + helper_.CheckWindowDisplayMinimal(); +} + +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTestMacWinLinux, + WebAppIntegration_31SiteA_24_12SiteA_7SiteA_112SiteANotShown_28_36SiteA_1SiteA_25) { + // 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. + helper_.InstallOmniboxIcon(InstallableSite::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.ClosePwa(); + helper_.ManifestUpdateDisplayMinimal(Site::kSiteA); + helper_.LaunchFromPlatformShortcut(Site::kSiteA); + helper_.CheckWindowDisplayMinimal(); +} + +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTestMacWinLinux, + WebAppIntegration_31SiteA_24_12SiteA_7SiteA_112SiteANotShown_101SiteA_111SiteA) { + // 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. + helper_.InstallOmniboxIcon(InstallableSite::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.ApplyRunOnOsLoginPolicyBlocked(Site::kSiteA); + helper_.CheckUserCannotSetRunOnOsLogin(Site::kSiteA); +} + +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTestMacWinLinux, + WebAppIntegration_31SiteA_24_12SiteA_7SiteA_112SiteANotShown_104SiteA_106SiteA_101SiteA_107SiteA_103SiteA_106SiteA) { + // 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. + helper_.InstallOmniboxIcon(InstallableSite::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.EnableRunOnOsLogin(Site::kSiteA); + helper_.CheckRunOnOsLoginEnabled(Site::kSiteA); + helper_.ApplyRunOnOsLoginPolicyBlocked(Site::kSiteA); + helper_.CheckRunOnOsLoginDisabled(Site::kSiteA); + helper_.RemoveRunOnOsLoginPolicy(Site::kSiteA); + helper_.CheckRunOnOsLoginEnabled(Site::kSiteA); +} + +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTestMacWinLinux, + WebAppIntegration_31SiteA_24_12SiteA_7SiteA_112SiteANotShown_104SiteA_106SiteA_105SiteA_107SiteA) { + // 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. + helper_.InstallOmniboxIcon(InstallableSite::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.EnableRunOnOsLogin(Site::kSiteA); + helper_.CheckRunOnOsLoginEnabled(Site::kSiteA); + helper_.DisableRunOnOsLogin(Site::kSiteA); + helper_.CheckRunOnOsLoginDisabled(Site::kSiteA); +} + +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTestMacWinLinux, + WebAppIntegration_31SiteA_24_12SiteA_7SiteA_112SiteANotShown_102SiteA_106SiteA_111SiteA_103SiteA_107SiteA) { + // 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. + helper_.InstallOmniboxIcon(InstallableSite::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.ApplyRunOnOsLoginPolicyRunWindowed(Site::kSiteA); + helper_.CheckRunOnOsLoginEnabled(Site::kSiteA); + helper_.CheckUserCannotSetRunOnOsLogin(Site::kSiteA); + helper_.RemoveRunOnOsLoginPolicy(Site::kSiteA); + helper_.CheckRunOnOsLoginDisabled(Site::kSiteA); +} + +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTestMacWinLinux, + WebAppIntegration_31SiteA_24_12SiteA_7SiteA_112SiteANotShown_43SiteA_15SiteA_37SiteA_18_19) { + // 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. + helper_.InstallOmniboxIcon(InstallableSite::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.UninstallFromMenu(Site::kSiteA); + helper_.CheckAppNotInList(Site::kSiteA); + helper_.NavigateBrowser(Site::kSiteA); + helper_.CheckInstallIconShown(); + helper_.CheckLaunchIconNotShown(); +} + +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTestMacWinLinux, + WebAppIntegration_31SiteA_24_12SiteA_7SiteA_112SiteANotShown_98SiteA_15SiteA_37SiteA_18_19) { + // 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. + helper_.InstallOmniboxIcon(InstallableSite::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.UninstallFromAppSettings(Site::kSiteA); + helper_.CheckAppNotInList(Site::kSiteA); + helper_.NavigateBrowser(Site::kSiteA); + helper_.CheckInstallIconShown(); + helper_.CheckLaunchIconNotShown(); +} + +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTestMacWinLinux, + WebAppIntegration_31SiteA_24_12SiteA_7SiteA_112SiteANotShown_1SiteA_24_26) { + // 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. + helper_.InstallOmniboxIcon(InstallableSite::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.LaunchFromPlatformShortcut(Site::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckWindowDisplayStandalone(); +} + +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTestMacWinLinux, + WebAppIntegration_31SiteA_24_12SiteA_7SiteA_112SiteANotShown_50SiteA_11SiteA_1SiteA_22) { + // 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. + helper_.InstallOmniboxIcon(InstallableSite::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.SetOpenInTab(Site::kSiteA); + helper_.CheckAppInListTabbed(Site::kSiteA); + helper_.LaunchFromPlatformShortcut(Site::kSiteA); + helper_.CheckTabCreated(); +} + +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTestMacWinLinux, + WebAppIntegration_31SiteA_24_12SiteA_7SiteA_112SiteANotShown_96SiteA_109SiteA) { + // 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. + helper_.InstallOmniboxIcon(InstallableSite::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.OpenAppSettingsFromChromeApps(Site::kSiteA); + helper_.CheckBrowserNavigationIsAppSettings(Site::kSiteA); +} + +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTestMacWinLinux, + WebAppIntegration_31SiteA_24_12SiteA_7SiteA_112SiteANotShown_97SiteA_109SiteA) { + // 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. + helper_.InstallOmniboxIcon(InstallableSite::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.OpenAppSettingsFromAppMenu(Site::kSiteA); + helper_.CheckBrowserNavigationIsAppSettings(Site::kSiteA); +} + +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTestMacWinLinux, + WebAppIntegration_31SiteA_24_12SiteA_7SiteA_112SiteANotShown_32SiteA_7SiteA_12SiteA_1SiteA_24) { + // 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. + helper_.InstallOmniboxIcon(InstallableSite::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.InstallPolicyAppTabbedNoShortcut(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.LaunchFromPlatformShortcut(Site::kSiteA); + helper_.CheckWindowCreated(); +} + +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTestMacWinLinux, + WebAppIntegration_31SiteA_24_12SiteA_7SiteA_112SiteANotShown_48SiteA_12SiteA_1SiteA_24) { + // 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. + helper_.InstallOmniboxIcon(InstallableSite::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.InstallPolicyAppTabbedShortcut(Site::kSiteA); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.LaunchFromPlatformShortcut(Site::kSiteA); + helper_.CheckWindowCreated(); +} + +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTestMacWinLinux, + WebAppIntegration_47SiteA_24_12SiteA_7SiteA_112SiteANotShown_28_70SiteA_1SiteA_94_24_25) { + // 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. + helper_.InstallMenuOption(InstallableSite::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.ClosePwa(); + helper_.ManifestUpdateDisplayBrowser(Site::kSiteA); + helper_.LaunchFromPlatformShortcut(Site::kSiteA); + helper_.CheckTabNotCreated(); + helper_.CheckWindowCreated(); + helper_.CheckWindowDisplayMinimal(); +} + +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTestMacWinLinux, + WebAppIntegration_47SiteA_24_12SiteA_7SiteA_112SiteANotShown_28_36SiteA_1SiteA_25) { + // 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. + helper_.InstallMenuOption(InstallableSite::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.ClosePwa(); + helper_.ManifestUpdateDisplayMinimal(Site::kSiteA); + helper_.LaunchFromPlatformShortcut(Site::kSiteA); + helper_.CheckWindowDisplayMinimal(); +} + +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTestMacWinLinux, + WebAppIntegration_47SiteA_24_12SiteA_7SiteA_112SiteANotShown_101SiteA_111SiteA) { + // 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. + helper_.InstallMenuOption(InstallableSite::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.ApplyRunOnOsLoginPolicyBlocked(Site::kSiteA); + helper_.CheckUserCannotSetRunOnOsLogin(Site::kSiteA); +} + +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTestMacWinLinux, + WebAppIntegration_47SiteA_24_12SiteA_7SiteA_112SiteANotShown_104SiteA_106SiteA_101SiteA_107SiteA_103SiteA_106SiteA) { + // 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. + helper_.InstallMenuOption(InstallableSite::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.EnableRunOnOsLogin(Site::kSiteA); + helper_.CheckRunOnOsLoginEnabled(Site::kSiteA); + helper_.ApplyRunOnOsLoginPolicyBlocked(Site::kSiteA); + helper_.CheckRunOnOsLoginDisabled(Site::kSiteA); + helper_.RemoveRunOnOsLoginPolicy(Site::kSiteA); + helper_.CheckRunOnOsLoginEnabled(Site::kSiteA); +} + +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTestMacWinLinux, + WebAppIntegration_47SiteA_24_12SiteA_7SiteA_112SiteANotShown_104SiteA_106SiteA_105SiteA_107SiteA) { + // 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. + helper_.InstallMenuOption(InstallableSite::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.EnableRunOnOsLogin(Site::kSiteA); + helper_.CheckRunOnOsLoginEnabled(Site::kSiteA); + helper_.DisableRunOnOsLogin(Site::kSiteA); + helper_.CheckRunOnOsLoginDisabled(Site::kSiteA); +} + +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTestMacWinLinux, + WebAppIntegration_47SiteA_24_12SiteA_7SiteA_112SiteANotShown_102SiteA_106SiteA_111SiteA_103SiteA_107SiteA) { + // 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. + helper_.InstallMenuOption(InstallableSite::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.ApplyRunOnOsLoginPolicyRunWindowed(Site::kSiteA); + helper_.CheckRunOnOsLoginEnabled(Site::kSiteA); + helper_.CheckUserCannotSetRunOnOsLogin(Site::kSiteA); + helper_.RemoveRunOnOsLoginPolicy(Site::kSiteA); + helper_.CheckRunOnOsLoginDisabled(Site::kSiteA); +} + +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTestMacWinLinux, + WebAppIntegration_47SiteA_24_12SiteA_7SiteA_112SiteANotShown_43SiteA_15SiteA_37SiteA_18_19) { + // 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. + helper_.InstallMenuOption(InstallableSite::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.UninstallFromMenu(Site::kSiteA); + helper_.CheckAppNotInList(Site::kSiteA); + helper_.NavigateBrowser(Site::kSiteA); + helper_.CheckInstallIconShown(); + helper_.CheckLaunchIconNotShown(); +} + +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTestMacWinLinux, + WebAppIntegration_47SiteA_24_12SiteA_7SiteA_112SiteANotShown_98SiteA_15SiteA_37SiteA_18_19) { + // 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. + helper_.InstallMenuOption(InstallableSite::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.UninstallFromAppSettings(Site::kSiteA); + helper_.CheckAppNotInList(Site::kSiteA); + helper_.NavigateBrowser(Site::kSiteA); + helper_.CheckInstallIconShown(); + helper_.CheckLaunchIconNotShown(); +} + +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTestMacWinLinux, + WebAppIntegration_47SiteA_24_12SiteA_7SiteA_112SiteANotShown_1SiteA_24_26) { + // 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. + helper_.InstallMenuOption(InstallableSite::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.LaunchFromPlatformShortcut(Site::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckWindowDisplayStandalone(); +} + +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTestMacWinLinux, + WebAppIntegration_47SiteA_24_12SiteA_7SiteA_112SiteANotShown_50SiteA_11SiteA_1SiteA_22) { + // 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. + helper_.InstallMenuOption(InstallableSite::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.SetOpenInTab(Site::kSiteA); + helper_.CheckAppInListTabbed(Site::kSiteA); + helper_.LaunchFromPlatformShortcut(Site::kSiteA); + helper_.CheckTabCreated(); +} + +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTestMacWinLinux, + WebAppIntegration_47SiteA_24_12SiteA_7SiteA_112SiteANotShown_96SiteA_109SiteA) { + // 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. + helper_.InstallMenuOption(InstallableSite::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.OpenAppSettingsFromChromeApps(Site::kSiteA); + helper_.CheckBrowserNavigationIsAppSettings(Site::kSiteA); +} + +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTestMacWinLinux, + WebAppIntegration_47SiteA_24_12SiteA_7SiteA_112SiteANotShown_97SiteA_109SiteA) { + // 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. + helper_.InstallMenuOption(InstallableSite::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.OpenAppSettingsFromAppMenu(Site::kSiteA); + helper_.CheckBrowserNavigationIsAppSettings(Site::kSiteA); +} + +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTestMacWinLinux, + WebAppIntegration_47SiteA_24_12SiteA_7SiteA_112SiteANotShown_32SiteA_7SiteA_12SiteA_1SiteA_24) { + // 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. + helper_.InstallMenuOption(InstallableSite::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.InstallPolicyAppTabbedNoShortcut(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.LaunchFromPlatformShortcut(Site::kSiteA); + helper_.CheckWindowCreated(); +} + +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTestMacWinLinux, + WebAppIntegration_47SiteA_24_12SiteA_7SiteA_112SiteANotShown_48SiteA_12SiteA_1SiteA_24) { + // 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. + helper_.InstallMenuOption(InstallableSite::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.InstallPolicyAppTabbedShortcut(Site::kSiteA); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.LaunchFromPlatformShortcut(Site::kSiteA); + helper_.CheckWindowCreated(); +} + +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTestMacWinLinux, + WebAppIntegration_33SiteA_12SiteA_112SiteANotShown_101SiteA_111SiteA) { + // 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. + helper_.InstallPolicyAppWindowedNoShortcut(Site::kSiteA); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.ApplyRunOnOsLoginPolicyBlocked(Site::kSiteA); + helper_.CheckUserCannotSetRunOnOsLogin(Site::kSiteA); +} + +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTestMacWinLinux, + WebAppIntegration_33SiteA_12SiteA_112SiteANotShown_104SiteA_106SiteA_101SiteA_107SiteA_103SiteA_106SiteA) { + // 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. + helper_.InstallPolicyAppWindowedNoShortcut(Site::kSiteA); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.EnableRunOnOsLogin(Site::kSiteA); + helper_.CheckRunOnOsLoginEnabled(Site::kSiteA); + helper_.ApplyRunOnOsLoginPolicyBlocked(Site::kSiteA); + helper_.CheckRunOnOsLoginDisabled(Site::kSiteA); + helper_.RemoveRunOnOsLoginPolicy(Site::kSiteA); + helper_.CheckRunOnOsLoginEnabled(Site::kSiteA); +} + +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTestMacWinLinux, + WebAppIntegration_33SiteA_12SiteA_112SiteANotShown_104SiteA_106SiteA_105SiteA_107SiteA) { + // 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. + helper_.InstallPolicyAppWindowedNoShortcut(Site::kSiteA); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.EnableRunOnOsLogin(Site::kSiteA); + helper_.CheckRunOnOsLoginEnabled(Site::kSiteA); + helper_.DisableRunOnOsLogin(Site::kSiteA); + helper_.CheckRunOnOsLoginDisabled(Site::kSiteA); +} + +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTestMacWinLinux, + WebAppIntegration_33SiteA_12SiteA_112SiteANotShown_102SiteA_106SiteA_111SiteA_103SiteA_107SiteA) { + // 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. + helper_.InstallPolicyAppWindowedNoShortcut(Site::kSiteA); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.ApplyRunOnOsLoginPolicyRunWindowed(Site::kSiteA); + helper_.CheckRunOnOsLoginEnabled(Site::kSiteA); + helper_.CheckUserCannotSetRunOnOsLogin(Site::kSiteA); + helper_.RemoveRunOnOsLoginPolicy(Site::kSiteA); + helper_.CheckRunOnOsLoginDisabled(Site::kSiteA); +} + +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTestMacWinLinux, + WebAppIntegration_33SiteA_12SiteA_112SiteANotShown_1SiteA_24_26) { + // 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. + helper_.InstallPolicyAppWindowedNoShortcut(Site::kSiteA); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.LaunchFromPlatformShortcut(Site::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckWindowDisplayStandalone(); +} + +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTestMacWinLinux, + WebAppIntegration_33SiteA_12SiteA_112SiteANotShown_50SiteA_1SiteA_22) { + // 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. + helper_.InstallPolicyAppWindowedNoShortcut(Site::kSiteA); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.SetOpenInTab(Site::kSiteA); + helper_.LaunchFromPlatformShortcut(Site::kSiteA); + helper_.CheckTabCreated(); +} + +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTestMacWinLinux, + WebAppIntegration_33SiteA_12SiteA_112SiteANotShown_96SiteA_109SiteA) { + // 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. + helper_.InstallPolicyAppWindowedNoShortcut(Site::kSiteA); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.OpenAppSettingsFromChromeApps(Site::kSiteA); + helper_.CheckBrowserNavigationIsAppSettings(Site::kSiteA); +} + +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTestMacWinLinux, + WebAppIntegration_33SiteA_12SiteA_112SiteANotShown_97SiteA_109SiteA) { + // 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. + helper_.InstallPolicyAppWindowedNoShortcut(Site::kSiteA); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.OpenAppSettingsFromAppMenu(Site::kSiteA); + helper_.CheckBrowserNavigationIsAppSettings(Site::kSiteA); +} + +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTestMacWinLinux, + WebAppIntegration_49SiteA_12SiteA_7SiteA_112SiteANotShown_101SiteA_111SiteA) { + // 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. + helper_.InstallPolicyAppWindowedShortcut(Site::kSiteA); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.ApplyRunOnOsLoginPolicyBlocked(Site::kSiteA); + helper_.CheckUserCannotSetRunOnOsLogin(Site::kSiteA); +} + +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTestMacWinLinux, + WebAppIntegration_49SiteA_12SiteA_7SiteA_112SiteANotShown_104SiteA_106SiteA_101SiteA_107SiteA_103SiteA_106SiteA) { + // 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. + helper_.InstallPolicyAppWindowedShortcut(Site::kSiteA); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.EnableRunOnOsLogin(Site::kSiteA); + helper_.CheckRunOnOsLoginEnabled(Site::kSiteA); + helper_.ApplyRunOnOsLoginPolicyBlocked(Site::kSiteA); + helper_.CheckRunOnOsLoginDisabled(Site::kSiteA); + helper_.RemoveRunOnOsLoginPolicy(Site::kSiteA); + helper_.CheckRunOnOsLoginEnabled(Site::kSiteA); +} + +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTestMacWinLinux, + WebAppIntegration_49SiteA_12SiteA_7SiteA_112SiteANotShown_104SiteA_106SiteA_105SiteA_107SiteA) { + // 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. + helper_.InstallPolicyAppWindowedShortcut(Site::kSiteA); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.EnableRunOnOsLogin(Site::kSiteA); + helper_.CheckRunOnOsLoginEnabled(Site::kSiteA); + helper_.DisableRunOnOsLogin(Site::kSiteA); + helper_.CheckRunOnOsLoginDisabled(Site::kSiteA); +} + +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTestMacWinLinux, + WebAppIntegration_49SiteA_12SiteA_7SiteA_112SiteANotShown_102SiteA_106SiteA_111SiteA_103SiteA_107SiteA) { + // 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. + helper_.InstallPolicyAppWindowedShortcut(Site::kSiteA); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.ApplyRunOnOsLoginPolicyRunWindowed(Site::kSiteA); + helper_.CheckRunOnOsLoginEnabled(Site::kSiteA); + helper_.CheckUserCannotSetRunOnOsLogin(Site::kSiteA); + helper_.RemoveRunOnOsLoginPolicy(Site::kSiteA); + helper_.CheckRunOnOsLoginDisabled(Site::kSiteA); +} + +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTestMacWinLinux, + WebAppIntegration_49SiteA_12SiteA_7SiteA_112SiteANotShown_1SiteA_24_26) { + // 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. + helper_.InstallPolicyAppWindowedShortcut(Site::kSiteA); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.LaunchFromPlatformShortcut(Site::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckWindowDisplayStandalone(); +} + +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTestMacWinLinux, + WebAppIntegration_49SiteA_12SiteA_7SiteA_112SiteANotShown_50SiteA_1SiteA_22) { + // 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. + helper_.InstallPolicyAppWindowedShortcut(Site::kSiteA); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.SetOpenInTab(Site::kSiteA); + helper_.LaunchFromPlatformShortcut(Site::kSiteA); + helper_.CheckTabCreated(); +} + +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTestMacWinLinux, + WebAppIntegration_49SiteA_12SiteA_7SiteA_112SiteANotShown_96SiteA_109SiteA) { + // 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. + helper_.InstallPolicyAppWindowedShortcut(Site::kSiteA); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.OpenAppSettingsFromChromeApps(Site::kSiteA); + helper_.CheckBrowserNavigationIsAppSettings(Site::kSiteA); +} + +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTestMacWinLinux, + WebAppIntegration_49SiteA_12SiteA_7SiteA_112SiteANotShown_97SiteA_109SiteA) { + // 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. + helper_.InstallPolicyAppWindowedShortcut(Site::kSiteA); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.OpenAppSettingsFromAppMenu(Site::kSiteA); + helper_.CheckBrowserNavigationIsAppSettings(Site::kSiteA); +} + +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTestMacWinLinux, + WebAppIntegration_30SiteWco_112SiteWcoShown_114SiteWco_113SiteWcoOn_112SiteWcoShown_1SiteWco_113SiteWcoOn) { + // 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. + helper_.InstallCreateShortcutWindowed(Site::kSiteWco); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteWco, IsShown::kShown); + helper_.EnableWindowControlsOverlay(Site::kSiteWco); + helper_.CheckWindowControlsOverlay(Site::kSiteWco, IsOn::kOn); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteWco, IsShown::kShown); + helper_.LaunchFromPlatformShortcut(Site::kSiteWco); + helper_.CheckWindowControlsOverlay(Site::kSiteWco, IsOn::kOn); +} + +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTestMacWinLinux, + WebAppIntegration_31SiteWco_112SiteWcoShown_114SiteWco_113SiteWcoOn_112SiteWcoShown_1SiteWco_113SiteWcoOn) { + // 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. + helper_.InstallOmniboxIcon(InstallableSite::kSiteWco); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteWco, IsShown::kShown); + helper_.EnableWindowControlsOverlay(Site::kSiteWco); + helper_.CheckWindowControlsOverlay(Site::kSiteWco, IsOn::kOn); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteWco, IsShown::kShown); + helper_.LaunchFromPlatformShortcut(Site::kSiteWco); + helper_.CheckWindowControlsOverlay(Site::kSiteWco, IsOn::kOn); +} + +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTestMacWinLinux, + WebAppIntegration_33SiteWco_112SiteWcoShown_114SiteWco_113SiteWcoOn_112SiteWcoShown_1SiteWco_113SiteWcoOn) { + // 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. + helper_.InstallPolicyAppWindowedNoShortcut(Site::kSiteWco); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteWco, IsShown::kShown); + helper_.EnableWindowControlsOverlay(Site::kSiteWco); + helper_.CheckWindowControlsOverlay(Site::kSiteWco, IsOn::kOn); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteWco, IsShown::kShown); + helper_.LaunchFromPlatformShortcut(Site::kSiteWco); + helper_.CheckWindowControlsOverlay(Site::kSiteWco, IsOn::kOn); +} + +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTestMacWinLinux, + WebAppIntegration_49SiteWco_112SiteWcoShown_114SiteWco_113SiteWcoOn_112SiteWcoShown_1SiteWco_113SiteWcoOn) { + // 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. + helper_.InstallPolicyAppWindowedShortcut(Site::kSiteWco); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteWco, IsShown::kShown); + helper_.EnableWindowControlsOverlay(Site::kSiteWco); + helper_.CheckWindowControlsOverlay(Site::kSiteWco, IsOn::kOn); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteWco, IsShown::kShown); + helper_.LaunchFromPlatformShortcut(Site::kSiteWco); + helper_.CheckWindowControlsOverlay(Site::kSiteWco, IsOn::kOn); +} + +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTestMacWinLinux, + WebAppIntegration_47SiteWco_112SiteWcoShown_114SiteWco_113SiteWcoOn_112SiteWcoShown_1SiteWco_113SiteWcoOn) { + // 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. + helper_.InstallMenuOption(InstallableSite::kSiteWco); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteWco, IsShown::kShown); + helper_.EnableWindowControlsOverlay(Site::kSiteWco); + helper_.CheckWindowControlsOverlay(Site::kSiteWco, IsOn::kOn); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteWco, IsShown::kShown); + helper_.LaunchFromPlatformShortcut(Site::kSiteWco); + helper_.CheckWindowControlsOverlay(Site::kSiteWco, IsOn::kOn); +} + } // namespace } // namespace web_app::integration_tests
diff --git a/chrome/browser/ui/views/web_apps/web_app_integration_browsertest_win.cc b/chrome/browser/ui/views/web_apps/web_app_integration_browsertest_win.cc index dcba267d..5aa1ed3d 100644 --- a/chrome/browser/ui/views/web_apps/web_app_integration_browsertest_win.cc +++ b/chrome/browser/ui/views/web_apps/web_app_integration_browsertest_win.cc
@@ -24,57 +24,6 @@ IN_PROC_BROWSER_TEST_F( WebAppIntegrationBrowserTestWin, - WebAppIntegration_30SiteA_24_12SiteA_7SiteA_87SiteA_15SiteA_37SiteA_18_19) { - // 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. - helper_.InstallCreateShortcutWindowed(Site::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.UninstallFromOs(Site::kSiteA); - helper_.CheckAppNotInList(Site::kSiteA); - helper_.NavigateBrowser(Site::kSiteA); - helper_.CheckInstallIconShown(); - helper_.CheckLaunchIconNotShown(); -} - -IN_PROC_BROWSER_TEST_F( - WebAppIntegrationBrowserTestWin, - WebAppIntegration_31SiteA_24_12SiteA_7SiteA_87SiteA_15SiteA_37SiteA_18_19) { - // 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. - helper_.InstallOmniboxIcon(InstallableSite::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.UninstallFromOs(Site::kSiteA); - helper_.CheckAppNotInList(Site::kSiteA); - helper_.NavigateBrowser(Site::kSiteA); - helper_.CheckInstallIconShown(); - helper_.CheckLaunchIconNotShown(); -} - -IN_PROC_BROWSER_TEST_F( - WebAppIntegrationBrowserTestWin, - WebAppIntegration_47SiteA_24_12SiteA_7SiteA_87SiteA_15SiteA_37SiteA_18_19) { - // 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. - helper_.InstallMenuOption(InstallableSite::kSiteA); - helper_.CheckWindowCreated(); - helper_.CheckAppInListWindowed(Site::kSiteA); - helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); - helper_.UninstallFromOs(Site::kSiteA); - helper_.CheckAppNotInList(Site::kSiteA); - helper_.NavigateBrowser(Site::kSiteA); - helper_.CheckInstallIconShown(); - helper_.CheckLaunchIconNotShown(); -} - -IN_PROC_BROWSER_TEST_F( - WebAppIntegrationBrowserTestWin, WebAppIntegration_30SiteC_12SiteC_7SiteC_87SiteC_15SiteA) { // Test contents are generated by script. Please do not modify! // See `chrome/test/webapps/README.md` for more info. @@ -86,5 +35,59 @@ helper_.CheckAppNotInList(Site::kSiteA); } +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTestWin, + WebAppIntegration_30SiteA_24_12SiteA_7SiteA_112SiteANotShown_87SiteA_15SiteA_37SiteA_18_19) { + // 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. + helper_.InstallCreateShortcutWindowed(Site::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.UninstallFromOs(Site::kSiteA); + helper_.CheckAppNotInList(Site::kSiteA); + helper_.NavigateBrowser(Site::kSiteA); + helper_.CheckInstallIconShown(); + helper_.CheckLaunchIconNotShown(); +} + +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTestWin, + WebAppIntegration_31SiteA_24_12SiteA_7SiteA_112SiteANotShown_87SiteA_15SiteA_37SiteA_18_19) { + // 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. + helper_.InstallOmniboxIcon(InstallableSite::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.UninstallFromOs(Site::kSiteA); + helper_.CheckAppNotInList(Site::kSiteA); + helper_.NavigateBrowser(Site::kSiteA); + helper_.CheckInstallIconShown(); + helper_.CheckLaunchIconNotShown(); +} + +IN_PROC_BROWSER_TEST_F( + WebAppIntegrationBrowserTestWin, + WebAppIntegration_47SiteA_24_12SiteA_7SiteA_112SiteANotShown_87SiteA_15SiteA_37SiteA_18_19) { + // 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. + helper_.InstallMenuOption(InstallableSite::kSiteA); + helper_.CheckWindowCreated(); + helper_.CheckAppInListWindowed(Site::kSiteA); + helper_.CheckPlatformShortcutAndIcon(Site::kSiteA); + helper_.CheckWindowControlsOverlayToggle(Site::kSiteA, IsShown::kNotShown); + helper_.UninstallFromOs(Site::kSiteA); + helper_.CheckAppNotInList(Site::kSiteA); + helper_.NavigateBrowser(Site::kSiteA); + helper_.CheckInstallIconShown(); + helper_.CheckLaunchIconNotShown(); +} + } // namespace } // namespace web_app::integration_tests
diff --git a/chrome/browser/ui/views/web_apps/web_app_integration_test_driver.cc b/chrome/browser/ui/views/web_apps/web_app_integration_test_driver.cc index 9406263..766ae84 100644 --- a/chrome/browser/ui/views/web_apps/web_app_integration_test_driver.cc +++ b/chrome/browser/ui/views/web_apps/web_app_integration_test_driver.cc
@@ -40,6 +40,7 @@ #include "chrome/browser/ui/intent_picker_tab_helper.h" #include "chrome/browser/ui/startup/startup_browser_creator.h" #include "chrome/browser/ui/views/frame/browser_view.h" +#include "chrome/browser/ui/views/frame/browser_view_layout.h" #include "chrome/browser/ui/views/frame/toolbar_button_provider.h" #include "chrome/browser/ui/views/location_bar/custom_tab_bar_view.h" #include "chrome/browser/ui/views/page_action/page_action_icon_view.h" @@ -84,6 +85,7 @@ #include "content/public/browser/browser_task_traits.h" #include "content/public/browser/browser_thread.h" #include "content/public/common/content_features.h" +#include "content/public/common/content_switches.h" #include "content/public/test/browser_test_utils.h" #include "content/public/test/test_navigation_observer.h" #include "content/public/test/test_utils.h" @@ -917,7 +919,6 @@ AppId app_id = GetAppIdBySiteMode(site); ASSERT_TRUE(provider()->registrar().GetAppById(app_id)) << "No app installed for site: " << static_cast<int>(site); - ; WebAppRegistrar& app_registrar = provider()->registrar(); DisplayMode display_mode = app_registrar.GetAppEffectiveDisplayMode(app_id); @@ -1002,6 +1003,40 @@ #endif } +void WebAppIntegrationTestDriver::CreateShortcutFromChromeApps(Site site) { +#if !BUILDFLAG(IS_CHROMEOS) + BeforeStateChangeAction(__FUNCTION__); + AppId app_id = GetAppIdBySiteMode(site); + ASSERT_TRUE(provider()->registrar().GetAppById(app_id)) + << "No app installed for site: " << static_cast<int>(site); + content::TestWebUI test_web_ui; + content::WebContents* web_contents = + browser()->tab_strip_model()->GetWebContentsAt(0); + DCHECK(web_contents); + test_web_ui.set_web_contents(web_contents); + TestAppLauncherHandler handler(/*extension_service=*/nullptr, provider(), + &test_web_ui); + base::ListValue web_app_ids; + web_app_ids.Append(app_id); +#if BUILDFLAG(IS_MAC) + base::RunLoop loop; + handler.HandleCreateAppShortcut(loop.QuitClosure(), &web_app_ids); + loop.Run(); +#else + views::NamedWidgetShownWaiter waiter(views::test::AnyWidgetTestPasskey{}, + "CreateChromeApplicationShortcutView"); + handler.HandleCreateAppShortcut(base::DoNothing(), &web_app_ids); + FlushShortcutTasks(); + views::Widget* widget = waiter.WaitIfNeededAndGet(); + ASSERT_TRUE(widget != nullptr); + views::test::AcceptDialog(widget); +#endif + AfterStateChangeAction(); +#else + NOTREACHED() << "Not implemented on Chrome OS."; +#endif +} + void WebAppIntegrationTestDriver::DeletePlatformShortcut(Site site) { if (!before_state_change_action_state_ && !after_state_change_action_state_) return; @@ -1142,7 +1177,6 @@ void WebAppIntegrationTestDriver::ManifestUpdateDisplay(Site site, Display display) { BeforeStateChangeAction(__FUNCTION__); - ASSERT_EQ(Site::kSiteA, site) << "Only site mode of 'SiteA' is supported"; ASSERT_TRUE(base::Contains(g_site_to_relative_start_url, site)); std::string start_url_path = g_site_to_relative_start_url.find(site)->second; @@ -1876,6 +1910,8 @@ Site site, IsShown is_shown) { BeforeStateChangeAction(__FUNCTION__); + if (!app_browser()) + app_browser_ = GetAppBrowserForSite(site); ASSERT_TRUE(app_browser()); EXPECT_EQ(app_browser()->app_controller()->AppUsesWindowControlsOverlay(), is_shown == IsShown::kShown); @@ -2305,7 +2341,6 @@ absl::optional<AppState> app_state = GetAppBySiteMode( before_state_change_action_state_.get(), profile(), site); ASSERT_TRUE(app_state.has_value()) << static_cast<int>(site); - ; auto app_id = app_state->id; active_app_id_ = app_id; app_ids_with_pending_manifest_updates_.insert(app_id); @@ -2376,7 +2411,10 @@ } if (!launch_if_not_open) return nullptr; - return LaunchWebAppBrowserAndWait(profile(), app_state->id); + Browser* browser = LaunchWebAppBrowserAndWait(profile(), app_state->id); + provider()->manifest_update_manager().ResetManifestThrottleForTesting( + GetAppIdBySiteMode(site)); + return browser; } bool WebAppIntegrationTestDriver::IsShortcutAndIconCreated( @@ -2450,6 +2488,7 @@ content::NotificationService::AllSources()); base::CommandLine command_line(base::CommandLine::NO_PROGRAM); command_line.AppendSwitchASCII(switches::kAppId, app_id); + command_line.AppendSwitchASCII(switches::kTestType, "browser"); ASSERT_TRUE(StartupBrowserCreator().ProcessCmdLineImpl( command_line, base::FilePath(), chrome::startup::IsProcessStartup::kNo, {browser()->profile(), StartupProfileMode::kBrowserWindow}, {}));
diff --git a/chrome/browser/ui/views/web_apps/web_app_integration_test_driver.h b/chrome/browser/ui/views/web_apps/web_app_integration_test_driver.h index c4ca9e27..6cc24b5 100644 --- a/chrome/browser/ui/views/web_apps/web_app_integration_test_driver.h +++ b/chrome/browser/ui/views/web_apps/web_app_integration_test_driver.h
@@ -14,7 +14,9 @@ #include "base/containers/flat_set.h" #include "base/memory/raw_ptr.h" #include "base/memory/weak_ptr.h" +#include "base/run_loop.h" #include "base/test/scoped_feature_list.h" +#include "chrome/browser/ui/views/frame/browser_view.h" #include "chrome/browser/web_applications/os_integration/os_integration_manager.h" #include "chrome/browser/web_applications/test/web_app_test_observers.h" #include "chrome/browser/web_applications/web_app_id.h" @@ -212,6 +214,7 @@ void LaunchFromPlatformShortcut(Site site); void OpenAppSettingsFromChromeApps(Site site); void OpenAppSettingsFromAppMenu(Site site); + void CreateShortcutFromChromeApps(Site site); void NavigateBrowser(Site site); void NavigatePwaSiteAFooTo(Site site); void NavigatePwaSiteATo(Site site); @@ -385,6 +388,8 @@ std::unique_ptr<ScopedShortcutOverrideForTesting> shortcut_override_; std::unique_ptr<net::EmbeddedTestServer> isolated_app_test_server_ = nullptr; + std::unique_ptr<base::RunLoop> window_controls_overlay_callback_for_testing_ = + nullptr; }; // Simple base browsertest class usable by all non-sync web app integration
diff --git a/chrome/browser/ui/webui/chromeos/login/demo_preferences_screen_handler.cc b/chrome/browser/ui/webui/chromeos/login/demo_preferences_screen_handler.cc index f97dad3a..362de66 100644 --- a/chrome/browser/ui/webui/chromeos/login/demo_preferences_screen_handler.cc +++ b/chrome/browser/ui/webui/chromeos/login/demo_preferences_screen_handler.cc
@@ -33,6 +33,14 @@ IDS_OOBE_DEMO_SETUP_PREFERENCES_SCREEN_NEXT_BUTTON_LABEL); builder->Add("countryDropdownTitle", IDS_COUNTRY_DROPDOWN_TITLE); builder->Add("countryDropdownLabel", IDS_COUNTRY_DROPDOWN_LABEL); + builder->Add("retailerIdInputLabel", + IDS_OOBE_DEMO_SETUP_PREFERENCES_RETAILER_ID_INPUT_LABEL); + builder->Add("retailerIdInputPlaceholder", + IDS_OOBE_DEMO_SETUP_PREFERENCES_RETAILER_ID_INPUT_PLACEHOLDER); + builder->Add("retailerIdInputHelpText", + IDS_OOBE_DEMO_SETUP_PREFERENCES_RETAILER_ID_INPUT_HELP_TEXT); + builder->Add("retailerIdInputErrorText", + IDS_OOBE_DEMO_SETUP_PREFERENCES_RETAILER_ID_INPUT_ERROR_TEXT); } } // namespace chromeos
diff --git a/chrome/browser/ui/webui/history_clusters/history_clusters_handler.cc b/chrome/browser/ui/webui/history_clusters/history_clusters_handler.cc index 184558fb..7938188 100644 --- a/chrome/browser/ui/webui/history_clusters/history_clusters_handler.cc +++ b/chrome/browser/ui/webui/history_clusters/history_clusters_handler.cc
@@ -21,6 +21,7 @@ #include "chrome/browser/search_engines/template_url_service_factory.h" #include "chrome/browser/ui/browser.h" #include "chrome/browser/ui/browser_finder.h" +#include "chrome/common/pref_names.h" #include "components/history/core/browser/history_types.h" #include "components/history_clusters/core/config.h" #include "components/history_clusters/core/features.h" @@ -249,6 +250,16 @@ void HistoryClustersHandler::RemoveVisits( std::vector<mojom::URLVisitPtr> visits, RemoveVisitsCallback callback) { + // TODO(crbug.com/1327743): Enforced here because enforcing at the UI level is + // too complicated to merge. We can consider removing this clause or turning + // it to a DCHECK after we enforce it at the UI level, but it's essentially + // harmless to keep it here too. + if (!profile_->GetPrefs()->GetBoolean( + ::prefs::kAllowDeletingBrowserHistory)) { + std::move(callback).Run(false); + return; + } + // Reject the request if a pending task exists or the set of visits is empty. if (remove_task_tracker_.HasTrackedTasks() || visits.empty()) { std::move(callback).Run(false);
diff --git a/chrome/browser/ui/webui/local_state/local_state_ui.cc b/chrome/browser/ui/webui/local_state/local_state_ui.cc index 01f3ab60..420a6d5 100644 --- a/chrome/browser/ui/webui/local_state/local_state_ui.cc +++ b/chrome/browser/ui/webui/local_state/local_state_ui.cc
@@ -5,17 +5,15 @@ #include "chrome/browser/ui/webui/local_state/local_state_ui.h" #include <memory> +#include <string> #include "base/bind.h" -#include "base/json/json_string_value_serializer.h" -#include "base/strings/string_util.h" #include "base/values.h" -#include "build/build_config.h" -#include "build/chromeos_buildflags.h" #include "chrome/browser/browser_process.h" #include "chrome/browser/profiles/profile.h" #include "chrome/common/url_constants.h" -#include "chrome/grit/dev_ui_browser_resources.h" +#include "components/grit/dev_ui_components_resources.h" +#include "components/local_state/local_state_utils.h" #include "components/prefs/pref_service.h" #include "content/public/browser/web_ui.h" #include "content/public/browser/web_ui_controller.h" @@ -24,24 +22,15 @@ namespace { -// On ChromeOS, the local state file contains some information about other -// user accounts which we don't want to expose to other users. Use an allowlist -// to only show variations and UMA related fields which don't contain PII. -#if BUILDFLAG(IS_CHROMEOS_ASH) -#define ENABLE_FILTERING true -#else -#define ENABLE_FILTERING false -#endif // BUILDFLAG(IS_CHROMEOS_ASH) - // UI Handler for chrome://local-state. Displays the Local State file as JSON. class LocalStateUIHandler : public content::WebUIMessageHandler { public: - LocalStateUIHandler(); + LocalStateUIHandler() = default; LocalStateUIHandler(const LocalStateUIHandler&) = delete; LocalStateUIHandler& operator=(const LocalStateUIHandler&) = delete; - ~LocalStateUIHandler() override; + ~LocalStateUIHandler() override = default; // content::WebUIMessageHandler: void RegisterMessages() override; @@ -52,12 +41,6 @@ void HandleRequestJson(const base::Value::List& args); }; -LocalStateUIHandler::LocalStateUIHandler() { -} - -LocalStateUIHandler::~LocalStateUIHandler() { -} - void LocalStateUIHandler::RegisterMessages() { web_ui()->RegisterMessageCallback( "requestJson", @@ -67,54 +50,16 @@ void LocalStateUIHandler::HandleRequestJson(const base::Value::List& args) { AllowJavascript(); - base::Value local_state_values = - g_browser_process->local_state()->GetPreferenceValues( - PrefService::EXCLUDE_DEFAULTS); - if (ENABLE_FILTERING) { - std::vector<std::string> allowlisted_prefixes = {"variations", - "user_experience_metrics"}; - internal::FilterPrefs(allowlisted_prefixes, local_state_values); - } std::string json; - JSONStringValueSerializer serializer(&json); - serializer.set_pretty_print(true); - bool result = serializer.Serialize(local_state_values); - if (!result) + if (!GetPrefsAsJson(g_browser_process->local_state(), &json)) json = "Error loading Local State file."; const base::Value& callback_id = args[0]; ResolveJavascriptCallback(callback_id, base::Value(json)); } -// Returns true if |pref_name| starts with one of the |valid_prefixes|. -bool HasValidPrefix(const std::string& pref_name, - const std::vector<std::string> valid_prefixes) { - for (const std::string& prefix : valid_prefixes) { - if (base::StartsWith(pref_name, prefix, base::CompareCase::SENSITIVE)) - return true; - } - return false; -} - } // namespace -namespace internal { - -void FilterPrefs(const std::vector<std::string>& valid_prefixes, - base::Value& prefs) { - std::vector<std::string> prefs_to_remove; - for (auto it : prefs.DictItems()) { - if (!HasValidPrefix(it.first, valid_prefixes)) - prefs_to_remove.push_back(it.first); - } - for (const std::string& pref_to_remove : prefs_to_remove) { - bool successfully_removed = prefs.RemovePath(pref_to_remove); - DCHECK(successfully_removed); - } -} - -} // namespace internal - LocalStateUI::LocalStateUI(content::WebUI* web_ui) : WebUIController(web_ui) { // Set up the chrome://local-state source. content::WebUIDataSource* html_source =
diff --git a/chrome/browser/ui/webui/local_state/local_state_ui.h b/chrome/browser/ui/webui/local_state/local_state_ui.h index 7589a48..97f05b04 100644 --- a/chrome/browser/ui/webui/local_state/local_state_ui.h +++ b/chrome/browser/ui/webui/local_state/local_state_ui.h
@@ -5,25 +5,8 @@ #ifndef CHROME_BROWSER_UI_WEBUI_LOCAL_STATE_LOCAL_STATE_UI_H_ #define CHROME_BROWSER_UI_WEBUI_LOCAL_STATE_LOCAL_STATE_UI_H_ -#include <string> -#include <vector> - #include "content/public/browser/web_ui_controller.h" -namespace base { -class Value; -} - -// Namespace for exposing the method for unit tests. -namespace internal { - -// Removes elements from |prefs| where the key does not match any of the -// prefixes in |valid_prefixes|. -void FilterPrefs(const std::vector<std::string>& valid_prefixes, - base::Value& prefs); - -} // namespace internal - // Controller for chrome://local-state/ page. class LocalStateUI : public content::WebUIController { public:
diff --git a/chrome/browser/ui/webui/ntp/app_launcher_handler.cc b/chrome/browser/ui/webui/ntp/app_launcher_handler.cc index 19426e4a..965a676 100644 --- a/chrome/browser/ui/webui/ntp/app_launcher_handler.cc +++ b/chrome/browser/ui/webui/ntp/app_launcher_handler.cc
@@ -463,7 +463,7 @@ web_ui()->RegisterDeprecatedMessageCallback( "createAppShortcut", base::BindRepeating(&AppLauncherHandler::HandleCreateAppShortcut, - base::Unretained(this))); + base::Unretained(this), base::DoNothing())); web_ui()->RegisterDeprecatedMessageCallback( "installAppLocally", base::BindRepeating(&AppLauncherHandler::HandleInstallAppLocally, @@ -1013,22 +1013,24 @@ } } -void AppLauncherHandler::HandleCreateAppShortcut(const base::ListValue* args) { +void AppLauncherHandler::HandleCreateAppShortcut(base::OnceClosure done, + const base::ListValue* args) { const std::string& app_id = args->GetListDeprecated()[0].GetString(); - if (web_app_provider_->registrar().IsInstalled(app_id) && !IsYoutubeExtension(app_id)) { Browser* browser = chrome::FindBrowserWithWebContents(web_ui()->GetWebContents()); chrome::ShowCreateChromeAppShortcutsDialog( browser->window()->GetNativeWindow(), browser->profile(), app_id, - base::BindOnce([](bool success) { - base::UmaHistogramBoolean( - "Apps.AppInfoDialog.CreateWebAppShortcutSuccess", success); - })); + base::BindOnce( + [](base::OnceClosure done, bool success) { + base::UmaHistogramBoolean( + "Apps.AppInfoDialog.CreateWebAppShortcutSuccess", success); + std::move(done).Run(); + }, + std::move(done))); return; } - const Extension* extension = extensions::ExtensionRegistry::Get(extension_service_->profile()) ->GetExtensionById(app_id, @@ -1042,10 +1044,13 @@ chrome::FindBrowserWithWebContents(web_ui()->GetWebContents()); chrome::ShowCreateChromeAppShortcutsDialog( browser->window()->GetNativeWindow(), browser->profile(), extension, - base::BindOnce([](bool success) { - base::UmaHistogramBoolean( - "Apps.AppInfoDialog.CreateExtensionShortcutSuccess", success); - })); + base::BindOnce( + [](base::OnceClosure done, bool success) { + base::UmaHistogramBoolean( + "Apps.AppInfoDialog.CreateExtensionShortcutSuccess", success); + std::move(done).Run(); + }, + std::move(done))); } void AppLauncherHandler::HandleInstallAppLocally(const base::ListValue* args) {
diff --git a/chrome/browser/ui/webui/ntp/app_launcher_handler.h b/chrome/browser/ui/webui/ntp/app_launcher_handler.h index b2d9d67..cbb3bd66 100644 --- a/chrome/browser/ui/webui/ntp/app_launcher_handler.h +++ b/chrome/browser/ui/webui/ntp/app_launcher_handler.h
@@ -148,7 +148,8 @@ // Handles the "createAppShortcut" message with |args| containing // [extension_id]. - void HandleCreateAppShortcut(const base::ListValue* args); + void HandleCreateAppShortcut(base::OnceClosure done, + const base::ListValue* args); // Handles the "installAppLocally" message with |args| containing // [extension_id].
diff --git a/chrome/browser/web_applications/extensions/web_app_extension_shortcut_mac.mm b/chrome/browser/web_applications/extensions/web_app_extension_shortcut_mac.mm index 23967ae..8c64ff1 100644 --- a/chrome/browser/web_applications/extensions/web_app_extension_shortcut_mac.mm +++ b/chrome/browser/web_applications/extensions/web_app_extension_shortcut_mac.mm
@@ -153,9 +153,7 @@ // the user anything. Just create shortcuts. CreateShortcuts(web_app::SHORTCUT_CREATION_BY_USER, web_app::ShortcutLocations(), profile, app, - base::DoNothing()); - if (!close_callback.is_null()) - std::move(close_callback).Run(true); + base::BindOnce(std::move(close_callback))); } void ShowCreateChromeAppShortcutsDialog( @@ -167,9 +165,7 @@ // the user anything. Just create shortcuts. CreateShortcutsForWebApp(web_app::SHORTCUT_CREATION_BY_USER, web_app::ShortcutLocations(), profile, app_id, - base::DoNothing()); - if (!close_callback.is_null()) - std::move(close_callback).Run(true); + base::BindOnce(std::move(close_callback))); } } // namespace chrome
diff --git a/chrome/browser/web_applications/manifest_update_manager.cc b/chrome/browser/web_applications/manifest_update_manager.cc index 0850a76..7e45fc7 100644 --- a/chrome/browser/web_applications/manifest_update_manager.cc +++ b/chrome/browser/web_applications/manifest_update_manager.cc
@@ -183,4 +183,14 @@ std::move(result_callback_for_testing_).Run(url, result); } +void ManifestUpdateManager::ResetManifestThrottleForTesting( + const AppId& app_id) { + // Erase the throttle info from the map so that corresponding + // manifest writes can go through. + auto it = last_update_check_.find(app_id); + if (it != last_update_check_.end()) { + last_update_check_.erase(app_id); + } +} + } // namespace web_app
diff --git a/chrome/browser/web_applications/manifest_update_manager.h b/chrome/browser/web_applications/manifest_update_manager.h index 6ae3d67..29f5464 100644 --- a/chrome/browser/web_applications/manifest_update_manager.h +++ b/chrome/browser/web_applications/manifest_update_manager.h
@@ -81,6 +81,8 @@ hang_update_checks_for_testing_ = true; } + void ResetManifestThrottleForTesting(const AppId& app_id); + private: bool MaybeConsumeUpdateCheck(const GURL& origin, const AppId& app_id); absl::optional<base::Time> GetLastUpdateCheckTime(const AppId& app_id) const;
diff --git a/chrome/browser/web_applications/web_app_data_retriever.cc b/chrome/browser/web_applications/web_app_data_retriever.cc index b99df64..44220d4 100644 --- a/chrome/browser/web_applications/web_app_data_retriever.cc +++ b/chrome/browser/web_applications/web_app_data_retriever.cc
@@ -175,6 +175,7 @@ fallback_install_info_.reset(); + DCHECK(!get_web_app_info_callback_.is_null()); std::move(get_web_app_info_callback_).Run(std::move(info)); } @@ -191,6 +192,7 @@ if (!blink::IsEmptyManifest(data.manifest)) opt_manifest = data.manifest.Clone(); + DCHECK(!check_installability_callback_.is_null()); std::move(check_installability_callback_) .Run(std::move(opt_manifest), data.manifest_url, data.valid_manifest, is_installable); @@ -206,6 +208,7 @@ Observe(nullptr); icon_downloader_.reset(); + DCHECK(!get_icons_callback_.is_null()); std::move(get_icons_callback_) .Run(result, std::move(icons_map), std::move(icons_http_results)); } @@ -215,6 +218,7 @@ DCHECK(ShouldStopRetrieval()); icon_downloader_.reset(); fallback_install_info_.reset(); + weak_ptr_factory_.InvalidateWeakPtrs(); // Call a callback as a tail call. The callback may destroy |this|. if (get_web_app_info_callback_) {
diff --git a/chrome/browser/win/browser_util.cc b/chrome/browser/win/browser_util.cc index 68b2288..31541c5 100644 --- a/chrome/browser/win/browser_util.cc +++ b/chrome/browser/win/browser_util.cc
@@ -9,57 +9,37 @@ #include <algorithm> #include <string> +#include "base/base_paths.h" #include "base/files/file_path.h" -#include "base/logging.h" +#include "base/path_service.h" +#include "sandbox/win/src/win_utils.h" namespace browser_util { -namespace { - -// Determine the NT path name for the current process. Returns an empty path if -// a failure occurs. -std::wstring GetCurrentProcessExecutablePath() { - std::wstring image_path; - image_path.resize(MAX_PATH); - DWORD path_length = image_path.size(); - BOOL success = - ::QueryFullProcessImageNameW(::GetCurrentProcess(), PROCESS_NAME_NATIVE, - image_path.data(), &path_length); - if (!success && ::GetLastError() == ERROR_INSUFFICIENT_BUFFER) { - // Process name is potentially greater than MAX_PATH, try larger max size. - // https://docs.microsoft.com/en-us/windows/win32/fileio/maximum-file-path-limitation - image_path.resize(UNICODE_STRING_MAX_CHARS); - path_length = image_path.size(); - success = - ::QueryFullProcessImageNameW(::GetCurrentProcess(), PROCESS_NAME_NATIVE, - image_path.data(), &path_length); - } - if (!success) { - PLOG_IF(ERROR, ::GetLastError() != ERROR_GEN_FAILURE) - << "Failed to get process image path"; - return std::wstring(); - } - image_path.resize(path_length); - return image_path; -} - -} // namespace - bool IsBrowserAlreadyRunning() { - static HANDLE handle = NULL; - - std::wstring nt_path_name = GetCurrentProcessExecutablePath(); - if (nt_path_name.empty()) { + static HANDLE handle = nullptr; + base::FilePath exe_dir_path; + // DIR_EXE is obtained from the path of FILE_EXE and, on Windows, FILE_EXE is + // obtained from reading the PEB of the currently running process. This means + // that even if the EXE file is moved, the DIR_EXE will still reflect the + // original location of the EXE from when it was started. This is important as + // IsBrowserAlreadyRunning must detect any running browser in Chrome's install + // directory, and not in a temporary directory if it is subsequently renamed + // or moved while running. + if (!base::PathService::Get(base::DIR_EXE, &exe_dir_path)) { // If this fails, there isn't much that can be done. However, assuming that // browser is *not* already running is the safer action here, as it means // that any pending upgrade actions will occur and hopefully the issue that // caused this failure will be resolved by the newer version. This might // cause the currently running browser to be temporarily broken, but it's - // probably broken already if QueryFullProcessImageNameW is failing. + // probably broken already if this API is failing. return false; } - std::wstring nt_dir_name( - base::FilePath(nt_path_name).DirName().value().c_str()); + std::wstring nt_dir_name; + if (!sandbox::GetNtPathFromWin32Path(exe_dir_path.value(), &nt_dir_name)) { + // See above for why false is returned here. + return false; + } std::replace(nt_dir_name.begin(), nt_dir_name.end(), '\\', '!'); std::transform(nt_dir_name.begin(), nt_dir_name.end(), nt_dir_name.begin(), tolower);
diff --git a/chrome/build/linux.pgo.txt b/chrome/build/linux.pgo.txt index 70d52936..4b60759 100644 --- a/chrome/build/linux.pgo.txt +++ b/chrome/build/linux.pgo.txt
@@ -1 +1 @@ -chrome-linux-main-1653047768-6c56408d04289758cc64e9d9e1ac0faf5faef08b.profdata +chrome-linux-main-1653069473-c040bb250835d032615d6d63df28c13871949daf.profdata
diff --git a/chrome/build/mac-arm.pgo.txt b/chrome/build/mac-arm.pgo.txt index 498cfda..0973b703 100644 --- a/chrome/build/mac-arm.pgo.txt +++ b/chrome/build/mac-arm.pgo.txt
@@ -1 +1 @@ -chrome-mac-arm-main-1653047768-f7ead0ffd67a79f0db274a29ca4bdf13d632cd2d.profdata +chrome-mac-arm-main-1653069473-65534882503242043ea466875dd1339cb47370bb.profdata
diff --git a/chrome/build/mac.pgo.txt b/chrome/build/mac.pgo.txt index e718877..5592f13 100644 --- a/chrome/build/mac.pgo.txt +++ b/chrome/build/mac.pgo.txt
@@ -1 +1 @@ -chrome-mac-main-1653047768-b2caeea364b0a8fa041efa47f69a895942d506cd.profdata +chrome-mac-main-1653069473-da301b51e9adc109fb0d8f0696a94ab40579dfe7.profdata
diff --git a/chrome/build/win32.pgo.txt b/chrome/build/win32.pgo.txt index 0b21a00..76a1810 100644 --- a/chrome/build/win32.pgo.txt +++ b/chrome/build/win32.pgo.txt
@@ -1 +1 @@ -chrome-win32-main-1653058635-58513785a9e54b947727a4699d2d0b3788405a95.profdata +chrome-win32-main-1653069473-d07fe23385329eeeb7f995e7ff7633dac32dc02b.profdata
diff --git a/chrome/build/win64.pgo.txt b/chrome/build/win64.pgo.txt index 6485e8c..454ed1f 100644 --- a/chrome/build/win64.pgo.txt +++ b/chrome/build/win64.pgo.txt
@@ -1 +1 @@ -chrome-win64-main-1653058635-ca1170327481bfd52dd7fecbfb13e341f5d97e31.profdata +chrome-win64-main-1653069473-c79c9e7950bdfe05e738c8e7567cce66780b1c14.profdata
diff --git a/chrome/chrome_cleaner/http/internet_helpers.cc b/chrome/chrome_cleaner/http/internet_helpers.cc index 4353023..852da96 100644 --- a/chrome/chrome_cleaner/http/internet_helpers.cc +++ b/chrome/chrome_cleaner/http/internet_helpers.cc
@@ -99,13 +99,13 @@ DCHECK(param_value_begin <= tokenizer.token_end()); TrimLWS(¶m_value_begin, ¶m_value_end); - if (base::LowerCaseEqualsASCII( + if (base::EqualsCaseInsensitiveASCII( base::MakeWStringPiece(param_name_begin, param_name_end), "charset")) { charset_val = param_value_begin - begin; charset_end = param_value_end - begin; type_has_charset = true; - } else if (base::LowerCaseEqualsASCII( + } else if (base::EqualsCaseInsensitiveASCII( base::MakeWStringPiece(param_name_begin, param_name_end), "boundary")) { if (boundary) @@ -142,7 +142,7 @@ content_type_str.find_first_of(L'/') != std::wstring::npos) { // The common case here is that mime_type is empty. bool eq = !mime_type->empty() && - base::LowerCaseEqualsASCII( + base::EqualsCaseInsensitiveASCII( base::MakeWStringPiece(begin + type_val, begin + type_end), base::WideToUTF8(*mime_type).data()); if (!eq) {
diff --git a/chrome/common/pref_names.cc b/chrome/common/pref_names.cc index bdc4b5b..ce79c2f1 100644 --- a/chrome/common/pref_names.cc +++ b/chrome/common/pref_names.cc
@@ -2384,6 +2384,10 @@ // A string pref holding the value of the current country for demo sessions. const char kDemoModeCountry[] = "demo_mode.country"; +// A string pref holding the value of the retailer and store id input for demo +// sessions. +const char kDemoModeRetailerAndStoreIdInput[] = "demo_mode.retailer_id"; + // A string pref holding the value of the default locale for demo sessions. const char kDemoModeDefaultLocale[] = "demo_mode.default_locale";
diff --git a/chrome/common/pref_names.h b/chrome/common/pref_names.h index 60bb7b5..582e8d5 100644 --- a/chrome/common/pref_names.h +++ b/chrome/common/pref_names.h
@@ -760,6 +760,7 @@ #if BUILDFLAG(IS_CHROMEOS_ASH) extern const char kDemoModeConfig[]; extern const char kDemoModeCountry[]; +extern const char kDemoModeRetailerAndStoreIdInput[]; extern const char kDemoModeDefaultLocale[]; extern const char kDeviceSettingsCache[]; extern const char kHardwareKeyboardLayout[];
diff --git a/chrome/installer/util/util_constants.h b/chrome/installer/util/util_constants.h index 1ae783d..f2a0223 100644 --- a/chrome/installer/util/util_constants.h +++ b/chrome/installer/util/util_constants.h
@@ -18,6 +18,8 @@ // to the end. When removing an unused value, retain the deprecated name and // value in a comment for posterity's sake, but take the liberty of removing the // old doc string. +// The values in this enum must be kept in sync with the SetupInstallResult enum +// in enums.xml enum InstallStatus { FIRST_INSTALL_SUCCESS = 0, // First install of Chrome succeeded. INSTALL_REPAIRED = 1, // Same version reinstalled for repair.
diff --git a/chrome/test/BUILD.gn b/chrome/test/BUILD.gn index 78ec82aa..346422c 100644 --- a/chrome/test/BUILD.gn +++ b/chrome/test/BUILD.gn
@@ -5342,7 +5342,6 @@ "../browser/ui/search_engines/keyword_editor_controller_unittest.cc", "../browser/ui/sync/tab_contents_synced_tab_delegate_unittest.cc", "../browser/ui/webui/fileicon_source_unittest.cc", - "../browser/ui/webui/local_state/local_state_ui_unittest.cc", "../browser/ui/webui/log_web_ui_url_unittest.cc", "../browser/update_client/chrome_update_query_params_delegate_unittest.cc", "../browser/url_param_filter/cross_otr_observer_unittest.cc",
diff --git a/chrome/test/data/extensions/api_test/automation/sites/add_remove_event_listeners.html b/chrome/test/data/extensions/api_test/automation/sites/add_remove_event_listeners.html index 4c123ec..cbd9bc3 100644 --- a/chrome/test/data/extensions/api_test/automation/sites/add_remove_event_listeners.html +++ b/chrome/test/data/extensions/api_test/automation/sites/add_remove_event_listeners.html
@@ -8,11 +8,17 @@ <title>Automation Tests - Add Remove Event Listeners</title> </head> <body> - <button></button> + <button id="remove">remove</button> + <button id="close">close</button> <script> - const button = document.querySelector('button'); - button.addEventListener('click', () => { - button.setAttribute('aria-hidden', true); + const removeButton = document.getElementById('remove'); + removeButton.addEventListener('click', () => { + removeButton.remove(); + }); + + const closeButton = document.getElementById('close'); + closeButton.addEventListener('click', () => { + window.close(); }); </script> </body>
diff --git a/chrome/test/data/extensions/api_test/automation/tests/desktop/add_remove_event_listeners.js b/chrome/test/data/extensions/api_test/automation/tests/desktop/add_remove_event_listeners.js index af7258ce..5d9c5436 100644 --- a/chrome/test/data/extensions/api_test/automation/tests/desktop/add_remove_event_listeners.js +++ b/chrome/test/data/extensions/api_test/automation/tests/desktop/add_remove_event_listeners.js
@@ -50,17 +50,28 @@ desktop.removeEventListener( chrome.automation.EventType.FOCUS, focusHandler); - // This sends an enableDesktop call, which should be processed after the - // disableDesktop request. + // This does get the current desktop as well, prior to disabling. Doing this + // checks that repeated calls still work prior to the disable coming + // through. const newDesktop = await new Promise(r => chrome.automation.getDesktop(r)); - // Finally, both |desktop| and |newDesktop| should be valid and refer to the + // Both |desktop| and |newDesktop| should be valid and refer to the // same tree. assertTrue(!!desktop); assertTrue(!!newDesktop); assertEq(newDesktop, desktop); assertEq(chrome.automation.RoleType.DESKTOP, newDesktop.role); + // Finally, the disabling above (from removing the event listeners) comes + // some time later. Wait for it so that it does not impact other tests. + await new Promise(r => { + setInterval(() => { + if (desktop.role === undefined) { + r(); + } + }, 100); + }); + chrome.test.succeed(); }, @@ -68,8 +79,16 @@ const desktop = await new Promise(r => chrome.automation.getDesktop(r)); assertTrue(!!desktop); - const button = desktop.find({role: chrome.automation.RoleType.BUTTON}); + const button = await new Promise(r => { + setInterval(() => { + let node; + if (node = findAutomationNode(desktop, n => n.name === 'remove')) { + r(node); + } + }, 100); + }); assertTrue(!!button); + assertEq('remove', button.name); // Adding a listener should have no effect. const focusHandler = () => {}; @@ -94,6 +113,55 @@ // The tree is completely cleared. assertEq(undefined, desktop.role); chrome.test.succeed(); + }, + + // Note that these tests run on the *same* webpage, so the above test already + // removed/hide one of the buttons. + async function testWindowClose() { + const desktop = await new Promise(r => chrome.automation.getDesktop(r)); + assertTrue(!!desktop); + + const button = await new Promise(r => { + setInterval(() => { + let node; + if (node = findAutomationNode(desktop, n => n.name === 'close')) { + r(node); + } + }, 100); + }); + assertTrue(!!button); + assertEq('close', button.name); + + // Adding a listener should have no effect. + const focusHandler = () => {}; + button.addEventListener(chrome.automation.EventType.FOCUS, focusHandler); + assertEq(chrome.automation.RoleType.DESKTOP, desktop.role); + + // The click/do default action triggers the window to close. + button.doDefault(); + + // We can't add event listeners to observe the deletions as to not trigger + // adds, so poll for the change. + await new Promise(r => { + const checkForButton = () => { + if (button.role === undefined) { + r(); + clearInterval(id); + } + }; + const id = setInterval(checkForButton, 10); + }); + + // The tree is completely cleared after some time. + await new Promise(r => { + setInterval(() => { + if (desktop.role === undefined) { + r(); + } + }, 100); + }); + + chrome.test.succeed(); } ];
diff --git a/chrome/test/data/web_apps/site_b/manifest_window_controls_overlay.json b/chrome/test/data/web_apps/site_b/manifest_window_controls_overlay.json new file mode 100644 index 0000000..81d636c --- /dev/null +++ b/chrome/test/data/web_apps/site_b/manifest_window_controls_overlay.json
@@ -0,0 +1,21 @@ +{ + "name": "Site B", + "icons": [ + { + "src": "../basic-48.png", + "sizes": "48x48", + "type": "image/png" + }, + { + "src": "../basic-192.png", + "sizes": "192x192", + "type": "image/png" + } + ], + "start_url": "/web_apps/site_b/basic.html", + "scope": "/web_apps/site_b/", + "display": "standalone", + "display_override": [ + "window-controls-overlay" + ] + } \ No newline at end of file
diff --git a/chrome/test/data/webui/chromeos/personalization_app/personalization_theme_element_test.ts b/chrome/test/data/webui/chromeos/personalization_app/personalization_theme_element_test.ts index b84c2894..61ef921 100644 --- a/chrome/test/data/webui/chromeos/personalization_app/personalization_theme_element_test.ts +++ b/chrome/test/data/webui/chromeos/personalization_app/personalization_theme_element_test.ts
@@ -126,5 +126,9 @@ assertTrue(action.enabled); assertTrue(personalizationStore.data.theme.colorModeAutoScheduleEnabled); assertEquals(radioButton.getAttribute('aria-pressed'), 'true'); + + // reclicking the button does not disable auto mode. + radioButton.click(); + assertEquals(radioButton.getAttribute('aria-pressed'), 'true'); }); });
diff --git a/chrome/test/data/webui/history/history_browsertest.js b/chrome/test/data/webui/history/history_browsertest.js index 4b7bb85b..3769469 100644 --- a/chrome/test/data/webui/history/history_browsertest.js +++ b/chrome/test/data/webui/history/history_browsertest.js
@@ -165,8 +165,7 @@ } }; -// TODO(https://crbug.com/1000573): Re-enable once flakiness is fixed. -TEST_F('HistoryMetricsTest', 'DISABLED_All', function() { +TEST_F('HistoryMetricsTest', 'All', function() { mocha.run(); });
diff --git a/chrome/test/data/webui/history/history_metrics_test.ts b/chrome/test/data/webui/history/history_metrics_test.ts index 0244ad21..3def7f92 100644 --- a/chrome/test/data/webui/history/history_metrics_test.ts +++ b/chrome/test/data/webui/history/history_metrics_test.ts
@@ -99,18 +99,6 @@ assertEquals(1, actionMap['BookmarkStarClicked']); items[1].$.link.click(); assertEquals(1, actionMap['EntryLinkClick']); - assertEquals(1, histogramMap['HistoryPage.ClickPosition']![1]); - assertEquals(1, histogramMap['HistoryPage.ClickPositionSubset']![1]); - - // TODO(https://crbug.com/1000573): Log the contents of this histogram - // for debugging in case the flakiness reoccurs. - console.info(Object.keys(histogramMap['HistoryPage.ClickAgeInDays']!)); - - // The "age in days" histogram should record 8 days, since the history - // entry was created between 7 and 8 days ago and we round the - // recorded value up. - assertEquals(1, histogramMap['HistoryPage.ClickAgeInDays']![8]); - assertEquals(1, histogramMap['HistoryPage.ClickAgeInDaysSubset']![8]); testService.resetResolver('queryHistory'); testService.setQueryResult({ @@ -140,8 +128,6 @@ assertTrue(!!items[4]); items[0].$.link.click(); assertEquals(1, actionMap['SearchResultClick']); - assertEquals(1, histogramMap['HistoryPage.ClickPosition']![0]); - assertEquals(1, histogramMap['HistoryPage.ClickPositionSubset']![0]); items[0].$.checkbox.click(); items[4].$.checkbox.click(); await flushTasks(); @@ -172,9 +158,6 @@ testService.whenCalled('removeVisits'), flushTasks(), ]); - - assertEquals(1, histogramMap['HistoryPage.RemoveEntryPosition']![0]); - assertEquals(1, histogramMap['HistoryPage.RemoveEntryPositionSubset']![0]); }); test('synced-device-manager', async () => {
diff --git a/chrome/test/data/webui/settings/chromeos/cellular_roaming_toggle_button_test.js b/chrome/test/data/webui/settings/chromeos/cellular_roaming_toggle_button_test.js index 893108f5..3f98b026 100644 --- a/chrome/test/data/webui/settings/chromeos/cellular_roaming_toggle_button_test.js +++ b/chrome/test/data/webui/settings/chromeos/cellular_roaming_toggle_button_test.js
@@ -3,6 +3,7 @@ // found in the LICENSE file. import 'chrome://os-settings/chromeos/os_settings.js'; +import '../../cr_components/chromeos/network/cr_policy_strings.js'; import {MojoInterfaceProviderImpl} from 'chrome://resources/cr_components/chromeos/network/mojo_interface_provider.m.js'; import {flush} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js'; @@ -54,6 +55,85 @@ flush(); } + /** + * @return {Array} Generates and returns a list of test cases that tests + * covering policy enforcement of roaming should cover. + */ + function getAllowRoamingEnforcementTestCases() { + const ControlledBy = chrome.settingsPrivate.ControlledBy; + const PolicySource = chromeos.networkConfig.mojom.PolicySource; + + const enforcementCases = []; + + // The policy sources affecting global enforcement. + for (const controlledByValue + of [ControlledBy.OWNER, ControlledBy.DEVICE_POLICY]) { + // The policy sources affecting per-network enforcement. + for (const policySourceValue + of [PolicySource.kNone, PolicySource.kUserPolicyEnforced, + PolicySource.kDevicePolicyEnforced]) { + // The value of the global policy (e.g. enabled or disabled). + for (const globalPolicyEnabledValue of [true, false]) { + // The value of the per-network policy (e.g. enabled or disabled). + for (const perNetworkPolicyEnabledValue of [true, false]) { + // The active value of allow roaming for the network (e.g. enabled + // or disabled). + for (const perNetworkActiveEnabledValue of [true, false]) { + enforcementCases.push({ + controlledBy: controlledByValue, + policySource: policySourceValue, + globalPolicyEnabled: globalPolicyEnabledValue, + perNetworkPolicyEnabled: perNetworkPolicyEnabledValue, + perNetworkActiveEnabled: perNetworkActiveEnabledValue + }); + } + } + } + } + } + return enforcementCases; + } + + function getRoamingToggleButtonSubLabelText() { + const allowRoamingToggle = + cellularRoamingToggleButton.getCellularRoamingToggle(); + if (!allowRoamingToggle) { + return ''; + } + const subLabel = allowRoamingToggle.$$('#sub-label'); + if (!subLabel) { + return ''; + } + return subLabel.innerText; + } + + function getRoamingTogglePolicyIndicatorText() { + const allowRoamingToggle = + cellularRoamingToggleButton.getCellularRoamingToggle(); + if (!allowRoamingToggle) { + return ''; + } + const policyIndicator = + allowRoamingToggle.$$('cr-policy-network-indicator-mojo .left'); + if (!policyIndicator) { + return ''; + } + return policyIndicator.indicatorTooltip_; + } + + function policyIconIsVisible(cellularRoamingToggle) { + if (!cellularRoamingToggle) { + return false; + } + const policyIndicator = + cellularRoamingToggle.$$('cr-policy-network-indicator-mojo'); + if (!policyIndicator) { + return false; + } + const policyIcon = policyIndicator.$$('cr-tooltip-icon'); + return !!policyIcon && !policyIcon.hidden; + } + suiteSetup(function() { mojoApi_ = new FakeNetworkConfig(); MojoInterfaceProviderImpl.getInstance().remote_ = mojoApi_; @@ -75,7 +155,7 @@ assertEquals( cellularRoamingToggleButton.i18n('networkAllowDataRoamingRequired'), - cellularRoamingToggleButton.getSubLabelForTesting()); + getRoamingToggleButtonSubLabelText()); } // Regardless of the roaming state, except when roaming is required, the @@ -87,7 +167,7 @@ assertEquals( cellularRoamingToggleButton.i18n('networkAllowDataRoamingDisabled'), - cellularRoamingToggleButton.getSubLabelForTesting()); + getRoamingToggleButtonSubLabelText()); } // Roaming is allowed but we are not roaming. @@ -97,7 +177,7 @@ assertEquals( cellularRoamingToggleButton.i18n('networkAllowDataRoamingEnabledHome'), - cellularRoamingToggleButton.getSubLabelForTesting()); + getRoamingToggleButtonSubLabelText()); // Roaming is allowed and we are roaming. setManagedProperties( @@ -107,7 +187,7 @@ assertEquals( cellularRoamingToggleButton.i18n( 'networkAllowDataRoamingEnabledRoaming'), - cellularRoamingToggleButton.getSubLabelForTesting()); + getRoamingToggleButtonSubLabelText()); // Simulate disabling roaming via policy. prefs_.cros.signed.data_roaming_enabled.value = false; @@ -115,7 +195,7 @@ assertEquals( cellularRoamingToggleButton.i18n('networkAllowDataRoamingDisabled'), - cellularRoamingToggleButton.getSubLabelForTesting()); + getRoamingToggleButtonSubLabelText()); }); suite('Cellular per-network roaming', function() { @@ -139,42 +219,108 @@ assertTrue(cellularRoamingToggleButton.isRoamingAllowedForNetwork_); }); - test('Property reflects managed properties', function() { + test('Toggle is influenced by policy', function() { const cellularRoamingToggle = cellularRoamingToggleButton.getCellularRoamingToggle(); - assertFalse(cellularRoamingToggle.checked); - assertFalse(cellularRoamingToggleButton.isRoamingAllowedForNetwork_); + const ControlledBy = chrome.settingsPrivate.ControlledBy; + const PolicySource = chromeos.networkConfig.mojom.PolicySource; - setManagedProperties( - /* allowRoaming= */ {activeValue: true}, - /* roamingState= */ 'Home'); + for (const enforcementCase of getAllowRoamingEnforcementTestCases()) { + // There is not a case where the value provided for the pref will be + // |false| except when enforced as a device policy. + if (!enforcementCase.globalPolicyEnabledValue && + enforcementCase.controlledByValue !== ControlledBy.DEVICE_POLICY) { + continue; + } - assertTrue(cellularRoamingToggle.checked); - assertTrue(cellularRoamingToggleButton.isRoamingAllowedForNetwork_); - }); + // There is not a case where policy is enforcing a value and the active + // and policy values will not be equal. + if (enforcementCase.controlledByValue === ControlledBy.DEVICE_POLICY || + enforcementCase.policySource === PolicySource.kUserPolicyEnforced || + enforcementCase.policySource === + PolicySource.kDevicePolicyEnforced) { + if (enforcementCase.perNetworkActiveEnabled !== + enforcementCase.perNetworkPolicyEnabled) { + continue; + } + } - test('Roaming disabled when prohibited by policy', function() { - const cellularRoamingToggle = - cellularRoamingToggleButton.getCellularRoamingToggle(); + setManagedProperties( + /* allowRoaming= */ { + activeValue: enforcementCase.perNetworkActiveEnabled, + policySource: enforcementCase.policySource, + policyValue: enforcementCase.perNetworkPolicyEnabled + }, + /* roamingState= */ 'Home'); - setManagedProperties( - /* allowRoaming= */ {activeValue: true}, - /* roamingState= */ 'Home'); + prefs_.cros.signed.data_roaming_enabled.value = + enforcementCase.globalPolicyEnabled; + prefs_.cros.signed.data_roaming_enabled.controlledBy = + enforcementCase.controlledBy; + cellularRoamingToggleButton.prefs = Object.assign({}, prefs_); - assertFalse(cellularRoamingToggleButton.isRoamingProhibitedByPolicy_()); + const dataRoamingEnabled = + cellularRoamingToggleButton.prefs.cros.signed.data_roaming_enabled; - const dataRoamingEnabled = - cellularRoamingToggleButton.prefs.cros.signed.data_roaming_enabled; + flush(); - dataRoamingEnabled.value = false; + if (!enforcementCase.globalPolicyEnabled && + enforcementCase.controlledBy === ControlledBy.DEVICE_POLICY) { + assertTrue( + cellularRoamingToggleButton.isRoamingProhibitedByPolicy_()); + assertTrue(cellularRoamingToggleButton.isPerNetworkToggleDisabled_()); + assertFalse(cellularRoamingToggleButton.isRoamingAllowedForNetwork_); + assertFalse(cellularRoamingToggle.checked); + assertTrue(policyIconIsVisible(cellularRoamingToggle)); + assertEquals( + CrPolicyStrings.controlledSettingPolicy, + getRoamingTogglePolicyIndicatorText()); + continue; + } - assertTrue(cellularRoamingToggleButton.isRoamingProhibitedByPolicy_()); + if (enforcementCase.policySource === PolicySource.kUserPolicyEnforced || + enforcementCase.policySource === + PolicySource.kDevicePolicyEnforced) { + assertFalse( + cellularRoamingToggleButton.isRoamingProhibitedByPolicy_()); + assertTrue(cellularRoamingToggleButton.isPerNetworkToggleDisabled_()); + assertEquals( + enforcementCase.perNetworkPolicyEnabled, + cellularRoamingToggleButton.isRoamingAllowedForNetwork_); + assertEquals( + enforcementCase.perNetworkPolicyEnabled, + cellularRoamingToggle.checked); + assertTrue(policyIconIsVisible(cellularRoamingToggle)); - dataRoamingEnabled.controlledBy = - chrome.settingsPrivate.ControlledBy.USER_POLICY; + switch (enforcementCase.policySource) { + case PolicySource.kUserPolicyEnforced: + case PolicySource.kDevicePolicyEnforced: + assertEquals( + CrPolicyStrings.controlledSettingPolicy, + getRoamingTogglePolicyIndicatorText()); + case PolicySource.kUserPolicyRecommended: + case PolicySource.kDevicePolicyRecommended: + assertEquals( + (enforcementCase.activeValue === + enforcementCase.policyValue) ? + CrPolicyStrings.controlledSettingRecommendedMatches : + CrPolicyStrings.controlledSettingRecommendedDiffers, + getRoamingTogglePolicyIndicatorText()); + } + continue; + } - assertFalse(cellularRoamingToggleButton.isRoamingProhibitedByPolicy_()); + assertFalse(cellularRoamingToggleButton.isRoamingProhibitedByPolicy_()); + assertFalse(cellularRoamingToggle.$$('cr-toggle').disabled); + assertEquals( + enforcementCase.perNetworkPolicyEnabled, + cellularRoamingToggleButton.isRoamingAllowedForNetwork_); + assertEquals( + enforcementCase.perNetworkPolicyEnabled, + cellularRoamingToggle.checked); + assertFalse(policyIconIsVisible(cellularRoamingToggle)); + } }); }); });
diff --git a/chrome/test/data/webui/settings/chromeos/internet_detail_page_tests.js b/chrome/test/data/webui/settings/chromeos/internet_detail_page_tests.js index 73322fa..79e8998 100644 --- a/chrome/test/data/webui/settings/chromeos/internet_detail_page_tests.js +++ b/chrome/test/data/webui/settings/chromeos/internet_detail_page_tests.js
@@ -824,9 +824,12 @@ await flushAsync(); - const deepLinkElement = + // Attempting to focus a <network-config-toggle> will result in the focus + // being pushed onto the internal <cr-toggle>. + const cellularRoamingToggle = internetDetailPage.$$('cellular-roaming-toggle-button') .getCellularRoamingToggle(); + const deepLinkElement = cellularRoamingToggle.$$('cr-toggle'); await waitAfterNextRender(deepLinkElement); assertEquals( deepLinkElement, getDeepActiveElement(),
diff --git a/chrome/test/data/webui/settings/chromeos/os_settings_ui_test.js b/chrome/test/data/webui/settings/chromeos/os_settings_ui_test.js index 7e01d22..a053946 100644 --- a/chrome/test/data/webui/settings/chromeos/os_settings_ui_test.js +++ b/chrome/test/data/webui/settings/chromeos/os_settings_ui_test.js
@@ -23,21 +23,21 @@ flush(); await CrSettingsPrefs.initialized; - settingsMain = - document.querySelector('os-settings-ui').$$('os-settings-main'); + settingsMain = document.querySelector('os-settings-ui') + .shadowRoot.querySelector('os-settings-main'); - settingsMain = - document.querySelector('os-settings-ui').$$('os-settings-main'); + settingsMain = document.querySelector('os-settings-ui') + .shadowRoot.querySelector('os-settings-main'); assert(!!settingsMain); - settingsPage = settingsMain.$$('os-settings-page'); + settingsPage = settingsMain.shadowRoot.querySelector('os-settings-page'); assertTrue(!!settingsPage); // Simulate Kerberos enabled. settingsPage.showKerberosSection = true; - const idleRender = - settingsMain.$$('os-settings-page').$$('settings-idle-load'); + const idleRender = settingsMain.shadowRoot.querySelector('os-settings-page') + .shadowRoot.querySelector('settings-idle-load'); assert(!!idleRender); await idleRender.get(); flush(); @@ -149,20 +149,24 @@ test('Update required end of life banner visibility', function() { flush(); assertFalse(settingsPage.showUpdateRequiredEolBanner_); - assertFalse(!!settingsPage.$$('#updateRequiredEolBanner')); + assertFalse( + !!settingsPage.shadowRoot.querySelector('#updateRequiredEolBanner')); settingsPage.showUpdateRequiredEolBanner_ = true; flush(); - assertTrue(!!settingsPage.$$('#updateRequiredEolBanner')); + assertTrue( + !!settingsPage.shadowRoot.querySelector('#updateRequiredEolBanner')); }); test('Update required end of life banner close button click', function() { settingsPage.showUpdateRequiredEolBanner_ = true; flush(); - const banner = settingsPage.$$('#updateRequiredEolBanner'); + const banner = + settingsPage.shadowRoot.querySelector('#updateRequiredEolBanner'); assertTrue(!!banner); - const closeButton = assert(settingsPage.$$('#closeUpdateRequiredEol')); + const closeButton = assert( + settingsPage.shadowRoot.querySelector('#closeUpdateRequiredEol')); closeButton.click(); flush(); assertFalse(settingsPage.showUpdateRequiredEolBanner_);
diff --git a/chrome/test/data/webui/settings/chromeos/os_settings_ui_test_2.js b/chrome/test/data/webui/settings/chromeos/os_settings_ui_test_2.js index 0bdad48..45c864a 100644 --- a/chrome/test/data/webui/settings/chromeos/os_settings_ui_test_2.js +++ b/chrome/test/data/webui/settings/chromeos/os_settings_ui_test_2.js
@@ -37,7 +37,7 @@ await CrSettingsPrefs.initialized; userActionRecorder = new FakeUserActionRecorder(); setUserActionRecorderForTesting(userActionRecorder); - ui.$$('#drawerTemplate').if = false; + ui.shadowRoot.querySelector('#drawerTemplate').if = false; flush(); }); @@ -48,7 +48,7 @@ }); test('top container shadow always shows for sub-pages', () => { - const element = ui.$$('#cr-container-shadow-top'); + const element = ui.shadowRoot.querySelector('#cr-container-shadow-top'); assertTrue(!!element, 'Shadow container element always exists'); assertFalse( @@ -63,7 +63,7 @@ }); test('showing menu in toolbar is dependent on narrow mode', () => { - const toolbar = assert(ui.$$('os-toolbar')); + const toolbar = assert(ui.shadowRoot.querySelector('os-toolbar')); ui.isNarrow = true; assertTrue(toolbar.showMenu); @@ -72,8 +72,9 @@ }); test('app drawer', async () => { - assertEquals(null, ui.$$('cr-drawer os-settings-menu')); - const drawer = ui.$$('#drawer'); + assertEquals( + null, ui.shadowRoot.querySelector('cr-drawer os-settings-menu')); + const drawer = ui.shadowRoot.querySelector('#drawer'); assertFalse(drawer.open); drawer.openDrawer(); @@ -82,17 +83,17 @@ // Validate that dialog is open and menu is shown so it will animate. assertTrue(drawer.open); - assertTrue(!!ui.$$('cr-drawer os-settings-menu')); + assertTrue(!!ui.shadowRoot.querySelector('cr-drawer os-settings-menu')); drawer.cancel(); // Drawer is closed, but menu is still stamped so its contents remain // visible as the drawer slides out. - assertTrue(!!ui.$$('cr-drawer os-settings-menu')); + assertTrue(!!ui.shadowRoot.querySelector('cr-drawer os-settings-menu')); }); test('app drawer closes when exiting narrow mode', async () => { - const drawer = ui.$$('#drawer'); - const toolbar = ui.$$('os-toolbar'); + const drawer = ui.shadowRoot.querySelector('#drawer'); + const toolbar = ui.shadowRoot.querySelector('os-toolbar'); // Mimic narrow mode and open the drawer. ui.isNarrow = true; @@ -107,12 +108,12 @@ }); test('advanced UIs stay in sync', () => { - const main = ui.$$('os-settings-main'); - const floatingMenu = ui.$$('#left os-settings-menu'); + const main = ui.shadowRoot.querySelector('os-settings-main'); + const floatingMenu = ui.shadowRoot.querySelector('#left os-settings-menu'); assertTrue(!!main); assertTrue(!!floatingMenu); - assertFalse(!!ui.$$('cr-drawer os-settings-menu')); + assertFalse(!!ui.shadowRoot.querySelector('cr-drawer os-settings-menu')); assertFalse(ui.advancedOpenedInMain_); assertFalse(ui.advancedOpenedInMenu_); assertFalse(floatingMenu.advancedOpened); @@ -121,16 +122,17 @@ main.advancedToggleExpanded = true; flush(); - assertFalse(!!ui.$$('cr-drawer os-settings-menu')); + assertFalse(!!ui.shadowRoot.querySelector('cr-drawer os-settings-menu')); assertTrue(ui.advancedOpenedInMain_); assertTrue(ui.advancedOpenedInMenu_); assertTrue(floatingMenu.advancedOpened); assertTrue(main.advancedToggleExpanded); - ui.$$('#drawerTemplate').if = true; + ui.shadowRoot.querySelector('#drawerTemplate').if = true; flush(); - const drawerMenu = ui.$$('cr-drawer os-settings-menu'); + const drawerMenu = + ui.shadowRoot.querySelector('cr-drawer os-settings-menu'); assertTrue(!!drawerMenu); assertTrue(floatingMenu.advancedOpened); assertTrue(drawerMenu.advancedOpened); @@ -163,11 +165,11 @@ // Test that navigating via the paper menu always clears the current // search URL parameter. test('clearsUrlSearchParam', function() { - const settingsMenu = ui.$$('os-settings-menu'); + const settingsMenu = ui.shadowRoot.querySelector('os-settings-menu'); // As of iron-selector 2.x, need to force iron-selector to update before // clicking items on it, or wait for 'iron-items-changed' - const ironSelector = settingsMenu.$$('iron-selector'); + const ironSelector = settingsMenu.shadowRoot.querySelector('iron-selector'); ironSelector.forceSynchronousItemUpdate(); const urlParams = new URLSearchParams('search=foo'); @@ -181,11 +183,11 @@ test('Clicking About menu item should focus About section', async () => { const router = Router.getInstance(); - const settingsMenu = ui.$$('os-settings-menu'); + const settingsMenu = ui.shadowRoot.querySelector('os-settings-menu'); // As of iron-selector 2.x, need to force iron-selector to update before // clicking items on it, or wait for 'iron-items-changed' - const ironSelector = settingsMenu.$$('iron-selector'); + const ironSelector = settingsMenu.shadowRoot.querySelector('iron-selector'); ironSelector.forceSynchronousItemUpdate(); const {aboutItem} = settingsMenu.$; @@ -195,10 +197,12 @@ assertEquals(routes.ABOUT_ABOUT, router.getCurrentRoute()); assertNotEquals(aboutItem, settingsMenu.shadowRoot.activeElement); - const settingsMain = ui.$$('os-settings-main'); - const aboutPage = settingsMain.$$('os-settings-about-page'); + const settingsMain = ui.shadowRoot.querySelector('os-settings-main'); + const aboutPage = + settingsMain.shadowRoot.querySelector('os-settings-about-page'); await waitBeforeNextRender(aboutPage); - const aboutSection = aboutPage.$$('settings-section[section="about"]'); + const aboutSection = + aboutPage.shadowRoot.querySelector('settings-section[section="about"]'); assertEquals(aboutSection, aboutPage.shadowRoot.activeElement); }); @@ -247,7 +251,7 @@ test('userActionPrefChange', function() { assertEquals(userActionRecorder.settingChangeCount, 0); - ui.$$('#prefs').dispatchEvent(new CustomEvent( + ui.shadowRoot.querySelector('#prefs').dispatchEvent(new CustomEvent( 'user-action-setting-change', {bubbles: true, composed: true, detail: {}})); assertEquals(userActionRecorder.settingChangeCount, 1); @@ -266,8 +270,8 @@ flush(); // Toolbar should be hidden. - assertFalse(isVisible(ui.$$('os-toolbar'))); + assertFalse(isVisible(ui.shadowRoot.querySelector('os-toolbar'))); // All navigation settings menus should be hidden. - assertFalse(isVisible(ui.$$('os-settings-menu'))); + assertFalse(isVisible(ui.shadowRoot.querySelector('os-settings-menu'))); }); });
diff --git a/chrome/test/interaction/interaction_sequence_browser_util_interactive_uitest.cc b/chrome/test/interaction/interaction_sequence_browser_util_interactive_uitest.cc index 5cc6652..0c1f60d 100644 --- a/chrome/test/interaction/interaction_sequence_browser_util_interactive_uitest.cc +++ b/chrome/test/interaction/interaction_sequence_browser_util_interactive_uitest.cc
@@ -286,3 +286,60 @@ EXPECT_CALL_IN_SCOPE(completed, Run, sequence->RunSynchronouslyForTesting()); } + +// This test checks that we can attach to a WebUI that is embedded in a tab. +IN_PROC_BROWSER_TEST_F(InteractionSequenceBrowserUtilInteractiveUiTest, + CompareScreenshot_TabWebUI) { + UNCALLED_MOCK_CALLBACK(ui::InteractionSequence::CompletedCallback, completed); + UNCALLED_MOCK_CALLBACK(ui::InteractionSequence::AbortedCallback, aborted); + + auto download_page = InteractionSequenceBrowserUtil::ForExistingTabInBrowser( + browser(), kPrimaryTabPageElementId); + auto test_util = CreateInteractionTestUtil(); + const ui::ElementContext context = browser()->window()->GetElementContext(); + + auto sequence = + ui::InteractionSequence::Builder() + .SetCompletedCallback(completed.Get()) + .SetAbortedCallback(aborted.Get()) + .SetContext(context) + .AddStep(ui::InteractionSequence::StepBuilder() + .SetType(ui::InteractionSequence::StepType::kShown) + .SetElementID(kPrimaryTabPageElementId) + .Build()) + .AddStep(ui::InteractionSequence::StepBuilder() + .SetType(ui::InteractionSequence::StepType::kShown) + .SetElementID(kAppMenuButtonElementId) + .SetStartCallback(base::BindLambdaForTesting( + [&](ui::InteractionSequence*, + ui::TrackedElement* element) { + test_util->PressButton(element); + })) + .Build()) + .AddStep(ui::InteractionSequence::StepBuilder() + .SetType(ui::InteractionSequence::StepType::kShown) + .SetElementID(AppMenuModel::kDownloadsMenuItem) + .SetMustRemainVisible(false) + .SetStartCallback(base::BindLambdaForTesting( + [&](ui::InteractionSequence*, + ui::TrackedElement* element) { + test_util->SelectMenuItem(element); + })) + .Build()) + .AddStep( + ui::InteractionSequence::StepBuilder() + .SetType(ui::InteractionSequence::StepType::kShown) + .SetElementID(kPrimaryTabPageElementId) + .SetTransitionOnlyOnEvent(true) + .SetStartCallback(base::BindLambdaForTesting( + [&](ui::InteractionSequence*, + ui::TrackedElement* element) { + EXPECT_TRUE( + InteractionSequenceBrowserUtil::CompareScreenshot( + element, std::string(), "3654539")); + })) + .Build()) + .Build(); + + EXPECT_CALL_IN_SCOPE(completed, Run, sequence->RunSynchronouslyForTesting()); +}
diff --git a/chrome/test/webapps/coverage/coverage_cros.tsv b/chrome/test/webapps/coverage/coverage_cros.tsv index 2b56f4b..90797f16 100644 --- a/chrome/test/webapps/coverage/coverage_cros.tsv +++ b/chrome/test/webapps/coverage/coverage_cros.tsv
@@ -1,743 +1,933 @@ -# This is a generated file. -# Full coverage: 47%, with partial coverage: 65% -install_create_shortcut_windowed_SiteA🌕 manifest_update_title_SiteA🌑 accept_app_id_update_dialog🌑 close_pwa🌑 launch_from_menu_option_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 -install_create_shortcut_windowed_SiteA🌕 manifest_update_title_SiteA🌑 accept_app_id_update_dialog🌑 close_pwa🌑 launch_from_launch_icon_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 -install_create_shortcut_windowed_SiteA🌕 manifest_update_title_SiteA🌑 accept_app_id_update_dialog🌑 close_pwa🌑 launch_from_chrome_apps_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 -install_create_shortcut_windowed_SiteA🌕 manifest_update_title_SiteA🌑 accept_app_id_update_dialog🌑 close_pwa🌑 launch_from_platform_shortcut_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 -install_omnibox_icon_SiteA🌕 manifest_update_title_SiteA🌑 accept_app_id_update_dialog🌑 close_pwa🌑 launch_from_menu_option_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 -install_omnibox_icon_SiteA🌕 manifest_update_title_SiteA🌑 accept_app_id_update_dialog🌑 close_pwa🌑 launch_from_launch_icon_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 -install_omnibox_icon_SiteA🌕 manifest_update_title_SiteA🌑 accept_app_id_update_dialog🌑 close_pwa🌑 launch_from_chrome_apps_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 -install_omnibox_icon_SiteA🌕 manifest_update_title_SiteA🌑 accept_app_id_update_dialog🌑 close_pwa🌑 launch_from_platform_shortcut_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 -install_menu_option_SiteA🌕 manifest_update_title_SiteA🌑 accept_app_id_update_dialog🌑 close_pwa🌑 launch_from_menu_option_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 -install_menu_option_SiteA🌕 manifest_update_title_SiteA🌑 accept_app_id_update_dialog🌑 close_pwa🌑 launch_from_launch_icon_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 -install_menu_option_SiteA🌕 manifest_update_title_SiteA🌑 accept_app_id_update_dialog🌑 close_pwa🌑 launch_from_chrome_apps_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 -install_menu_option_SiteA🌕 manifest_update_title_SiteA🌑 accept_app_id_update_dialog🌑 close_pwa🌑 launch_from_platform_shortcut_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 -install_create_shortcut_windowed_SiteA🌕 manifest_update_title_SiteA🌑 deny_app_update_dialog🌑 check_app_not_in_list_SiteA🌑 check_platform_shortcut_not_exists_SiteA🌑 -install_omnibox_icon_SiteA🌕 manifest_update_title_SiteA🌑 deny_app_update_dialog🌑 check_app_not_in_list_SiteA🌑 check_platform_shortcut_not_exists_SiteA🌑 -install_menu_option_SiteA🌕 manifest_update_title_SiteA🌑 deny_app_update_dialog🌑 check_app_not_in_list_SiteA🌑 check_platform_shortcut_not_exists_SiteA🌑 -install_create_shortcut_windowed_SiteA🌕 close_pwa🌕 manifest_update_icon_SiteA🌑 check_app_in_list_icon_correct_SiteA🌑 -install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_icon_SiteA🌑 check_app_in_list_icon_correct_SiteA🌑 -install_menu_option_SiteA🌕 close_pwa🌕 manifest_update_icon_SiteA🌑 check_app_in_list_icon_correct_SiteA🌑 -install_create_shortcut_windowed_SiteA🌕 close_pwa🌕 manifest_update_icon_SiteA🌑 check_platform_shortcut_and_icon_SiteA🌑 -install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_icon_SiteA🌑 check_platform_shortcut_and_icon_SiteA🌑 -install_menu_option_SiteA🌕 close_pwa🌕 manifest_update_icon_SiteA🌑 check_platform_shortcut_and_icon_SiteA🌑 -install_policy_app_windowed_no_shortcut_SiteA🌓 manifest_update_title_SiteA🌑 check_update_dialog_not_shown🌑 close_pwa🌑 launch_from_menu_option_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 -install_policy_app_windowed_no_shortcut_SiteA🌓 manifest_update_title_SiteA🌑 check_update_dialog_not_shown🌑 close_pwa🌑 launch_from_launch_icon_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 -install_policy_app_windowed_no_shortcut_SiteA🌓 manifest_update_title_SiteA🌑 check_update_dialog_not_shown🌑 close_pwa🌑 launch_from_chrome_apps_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 -install_policy_app_windowed_no_shortcut_SiteA🌓 manifest_update_title_SiteA🌑 check_update_dialog_not_shown🌑 close_pwa🌑 launch_from_platform_shortcut_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌓 manifest_update_title_SiteA🌑 check_update_dialog_not_shown🌑 close_pwa🌑 launch_from_menu_option_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌓 manifest_update_title_SiteA🌑 check_update_dialog_not_shown🌑 close_pwa🌑 launch_from_launch_icon_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌓 manifest_update_title_SiteA🌑 check_update_dialog_not_shown🌑 close_pwa🌑 launch_from_chrome_apps_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌓 manifest_update_title_SiteA🌑 check_update_dialog_not_shown🌑 close_pwa🌑 launch_from_platform_shortcut_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 -install_policy_app_windowed_shortcut_SiteA🌓 manifest_update_title_SiteA🌑 check_update_dialog_not_shown🌑 close_pwa🌑 launch_from_menu_option_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 -install_policy_app_windowed_shortcut_SiteA🌓 manifest_update_title_SiteA🌑 check_update_dialog_not_shown🌑 close_pwa🌑 launch_from_launch_icon_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 -install_policy_app_windowed_shortcut_SiteA🌓 manifest_update_title_SiteA🌑 check_update_dialog_not_shown🌑 close_pwa🌑 launch_from_chrome_apps_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 -install_policy_app_windowed_shortcut_SiteA🌓 manifest_update_title_SiteA🌑 check_update_dialog_not_shown🌑 close_pwa🌑 launch_from_platform_shortcut_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 manifest_update_title_SiteA🌑 check_update_dialog_not_shown🌑 close_pwa🌑 launch_from_menu_option_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 manifest_update_title_SiteA🌑 check_update_dialog_not_shown🌑 close_pwa🌑 launch_from_launch_icon_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 manifest_update_title_SiteA🌑 check_update_dialog_not_shown🌑 close_pwa🌑 launch_from_chrome_apps_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 manifest_update_title_SiteA🌑 check_update_dialog_not_shown🌑 close_pwa🌑 launch_from_platform_shortcut_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 -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🌕 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🌕 navigate_pwa_site_a_to_SiteB🌕 close_custom_toolbar🌕 check_app_navigation_is_start_url🌕 -install_omnibox_icon_SiteA🌕 navigate_pwa_site_a_to_SiteB🌕 close_custom_toolbar🌕 check_app_navigation_is_start_url🌕 -install_policy_app_windowed_no_shortcut_SiteA🌓 navigate_pwa_site_a_to_SiteB🌑 close_custom_toolbar🌑 check_app_navigation_is_start_url🌑 -install_policy_app_windowed_shortcut_SiteA🌓 navigate_pwa_site_a_to_SiteB🌑 close_custom_toolbar🌑 check_app_navigation_is_start_url🌑 -install_menu_option_SiteA🌕 navigate_pwa_site_a_to_SiteB🌕 close_custom_toolbar🌕 check_app_navigation_is_start_url🌕 -install_create_shortcut_windowed_SiteA🌕 navigate_pwa_site_a_to_SiteB🌕 check_custom_toolbar🌕 -install_omnibox_icon_SiteA🌕 navigate_pwa_site_a_to_SiteB🌕 check_custom_toolbar🌕 -install_menu_option_SiteA🌕 navigate_pwa_site_a_to_SiteB🌕 check_custom_toolbar🌕 -navigate_browser_SiteA🌕 check_app_not_in_list_SiteA🌓 -navigate_browser_SiteA🌕 check_platform_shortcut_not_exists_SiteA🌑 -navigate_browser_SiteC🌕 check_app_not_in_list_SiteA🌓 -navigate_browser_SiteC🌕 check_platform_shortcut_not_exists_SiteA🌑 -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🌕 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_and_icon_SiteA🌓 -install_policy_app_tabbed_shortcut_SiteA🌓 check_platform_shortcut_and_icon_SiteA🌓 -install_create_shortcut_windowed_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌓 -install_omnibox_icon_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌓 -install_menu_option_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌓 -install_create_shortcut_tabbed_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌓 -install_policy_app_windowed_shortcut_SiteC🌓 check_platform_shortcut_and_icon_SiteC🌓 -install_policy_app_tabbed_shortcut_SiteC🌓 check_platform_shortcut_and_icon_SiteC🌓 -install_create_shortcut_windowed_SiteC🌕 check_platform_shortcut_and_icon_SiteC🌓 -install_create_shortcut_tabbed_SiteC🌕 check_platform_shortcut_and_icon_SiteC🌓 -install_create_shortcut_tabbed_SiteA🌕 uninstall_from_list_SiteA🌕 check_app_not_in_list_SiteA🌓 -install_create_shortcut_tabbed_SiteA🌕 uninstall_from_list_SiteA🌕 navigate_browser_SiteA🌕 check_install_icon_shown🌕 -install_create_shortcut_tabbed_SiteA🌕 uninstall_from_list_SiteA🌕 navigate_browser_SiteA🌕 check_launch_icon_not_shown🌕 -install_create_shortcut_tabbed_SiteA🌕 uninstall_from_list_SiteA🌕 check_platform_shortcut_not_exists_SiteA🌑 -install_create_shortcut_windowed_SiteA🌕 uninstall_from_list_SiteA🌕 check_app_not_in_list_SiteA🌓 -install_omnibox_icon_SiteA🌕 uninstall_from_list_SiteA🌕 check_app_not_in_list_SiteA🌓 -install_menu_option_SiteA🌕 uninstall_from_list_SiteA🌕 check_app_not_in_list_SiteA🌓 -install_create_shortcut_windowed_SiteA🌕 uninstall_from_list_SiteA🌕 navigate_browser_SiteA🌕 check_install_icon_shown🌕 -install_omnibox_icon_SiteA🌕 uninstall_from_list_SiteA🌕 navigate_browser_SiteA🌕 check_install_icon_shown🌕 -install_menu_option_SiteA🌕 uninstall_from_list_SiteA🌕 navigate_browser_SiteA🌕 check_install_icon_shown🌕 -install_create_shortcut_windowed_SiteA🌕 uninstall_from_list_SiteA🌕 navigate_browser_SiteA🌕 check_launch_icon_not_shown🌕 -install_omnibox_icon_SiteA🌕 uninstall_from_list_SiteA🌕 navigate_browser_SiteA🌕 check_launch_icon_not_shown🌕 -install_menu_option_SiteA🌕 uninstall_from_list_SiteA🌕 navigate_browser_SiteA🌕 check_launch_icon_not_shown🌕 -install_create_shortcut_windowed_SiteA🌕 uninstall_from_list_SiteA🌕 check_platform_shortcut_not_exists_SiteA🌑 -install_omnibox_icon_SiteA🌕 uninstall_from_list_SiteA🌕 check_platform_shortcut_not_exists_SiteA🌑 -install_menu_option_SiteA🌕 uninstall_from_list_SiteA🌕 check_platform_shortcut_not_exists_SiteA🌑 -install_create_shortcut_tabbed_SiteC🌕 uninstall_from_list_SiteC🌕 check_app_not_in_list_SiteA🌓 -install_create_shortcut_tabbed_SiteC🌕 uninstall_from_list_SiteC🌕 check_platform_shortcut_not_exists_SiteC🌑 -install_create_shortcut_windowed_SiteC🌕 uninstall_from_list_SiteC🌕 check_app_not_in_list_SiteA🌓 -install_create_shortcut_windowed_SiteC🌕 uninstall_from_list_SiteC🌕 check_platform_shortcut_not_exists_SiteC🌑 -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_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_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🌕 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_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_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_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_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_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_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_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_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_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_policy_app_windowed_no_shortcut_SiteA🌓 create_shortcuts_SiteA🌑 check_platform_shortcut_and_icon_SiteA🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌓 create_shortcuts_SiteA🌑 check_platform_shortcut_and_icon_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_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_platform_shortcut_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_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_platform_shortcut_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_platform_shortcut_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🌕 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🌕 switch_profile_clients_Client2🌕 launch_from_chrome_apps_SiteA🌓 check_tab_created🌕 -install_create_shortcut_tabbed_SiteA🌕 switch_profile_clients_Client2🌕 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 -install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 uninstall_from_list_SiteA🌕 check_app_not_in_list_SiteA🌓 -install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 uninstall_from_list_SiteA🌕 check_app_not_in_list_SiteA🌓 -install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 uninstall_from_list_SiteA🌕 check_app_not_in_list_SiteA🌓 -install_create_shortcut_tabbed_SiteA🌕 switch_profile_clients_Client2🌕 uninstall_from_list_SiteA🌕 check_app_not_in_list_SiteA🌓 -install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 uninstall_from_list_SiteA🌕 switch_profile_clients_Client1🌕 check_app_not_in_list_SiteA🌓 -install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 uninstall_from_list_SiteA🌕 switch_profile_clients_Client1🌕 check_app_not_in_list_SiteA🌓 -install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 uninstall_from_list_SiteA🌕 switch_profile_clients_Client1🌕 check_app_not_in_list_SiteA🌓 -install_create_shortcut_tabbed_SiteA🌕 switch_profile_clients_Client2🌕 uninstall_from_list_SiteA🌕 switch_profile_clients_Client1🌕 check_app_not_in_list_SiteA🌓 -install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 check_platform_shortcut_and_icon_SiteA🌓 -install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 check_platform_shortcut_and_icon_SiteA🌓 -install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 check_platform_shortcut_and_icon_SiteA🌓 -install_create_shortcut_tabbed_SiteA🌕 switch_profile_clients_Client2🌕 check_platform_shortcut_and_icon_SiteA🌓 -install_create_shortcut_tabbed_SiteA🌕 switch_profile_clients_Client2🌕 check_app_in_list_tabbed_SiteA🌓 -install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 check_app_in_list_windowed_SiteA🌓 -install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 check_app_in_list_windowed_SiteA🌓 -install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 check_app_in_list_windowed_SiteA🌓 -install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 navigate_browser_SiteA🌕 check_install_icon_not_shown🌕 -install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 navigate_browser_SiteA🌕 check_install_icon_not_shown🌕 -install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 navigate_browser_SiteA🌕 check_install_icon_not_shown🌕 -install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 navigate_browser_SiteA🌕 check_launch_icon_shown🌕 -install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 navigate_browser_SiteA🌕 check_launch_icon_shown🌕 -install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 navigate_browser_SiteA🌕 check_launch_icon_shown🌕 -install_create_shortcut_tabbed_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌕 uninstall_from_list_SiteA🌕 sync_turn_on🌕 check_app_in_list_tabbed_SiteA🌓 -install_create_shortcut_tabbed_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌕 uninstall_from_menu_SiteA🌑 sync_turn_on🌑 check_app_in_list_tabbed_SiteA🌑 -install_create_shortcut_tabbed_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌕 uninstall_from_os_SiteA🌑 sync_turn_on🌑 check_app_in_list_tabbed_SiteA🌑 -install_create_shortcut_tabbed_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌕 uninstall_from_app_settings_SiteA🌑 sync_turn_on🌑 check_app_in_list_tabbed_SiteA🌑 -install_create_shortcut_tabbed_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌕 uninstall_from_list_SiteA🌕 sync_turn_on🌕 check_platform_shortcut_and_icon_SiteA🌓 -install_create_shortcut_tabbed_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌕 uninstall_from_menu_SiteA🌑 sync_turn_on🌑 check_platform_shortcut_and_icon_SiteA🌑 -install_create_shortcut_tabbed_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌕 uninstall_from_os_SiteA🌑 sync_turn_on🌑 check_platform_shortcut_and_icon_SiteA🌑 -install_create_shortcut_tabbed_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌕 uninstall_from_app_settings_SiteA🌑 sync_turn_on🌑 check_platform_shortcut_and_icon_SiteA🌑 -install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌕 uninstall_from_list_SiteA🌕 sync_turn_on🌕 check_app_in_list_windowed_SiteA🌓 -install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌕 uninstall_from_menu_SiteA🌑 sync_turn_on🌑 check_app_in_list_windowed_SiteA🌑 -install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌕 uninstall_from_os_SiteA🌑 sync_turn_on🌑 check_app_in_list_windowed_SiteA🌑 -install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌕 uninstall_from_app_settings_SiteA🌑 sync_turn_on🌑 check_app_in_list_windowed_SiteA🌑 -install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌕 uninstall_from_list_SiteA🌕 sync_turn_on🌕 check_app_in_list_windowed_SiteA🌓 -install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌕 uninstall_from_menu_SiteA🌑 sync_turn_on🌑 check_app_in_list_windowed_SiteA🌑 -install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌕 uninstall_from_os_SiteA🌑 sync_turn_on🌑 check_app_in_list_windowed_SiteA🌑 -install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌕 uninstall_from_app_settings_SiteA🌑 sync_turn_on🌑 check_app_in_list_windowed_SiteA🌑 -install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌕 uninstall_from_list_SiteA🌕 sync_turn_on🌕 check_app_in_list_windowed_SiteA🌓 -install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌕 uninstall_from_menu_SiteA🌑 sync_turn_on🌑 check_app_in_list_windowed_SiteA🌑 -install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌕 uninstall_from_os_SiteA🌑 sync_turn_on🌑 check_app_in_list_windowed_SiteA🌑 -install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌕 uninstall_from_app_settings_SiteA🌑 sync_turn_on🌑 check_app_in_list_windowed_SiteA🌑 -install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌕 uninstall_from_list_SiteA🌕 sync_turn_on🌕 check_platform_shortcut_and_icon_SiteA🌓 -install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌕 uninstall_from_menu_SiteA🌑 sync_turn_on🌑 check_platform_shortcut_and_icon_SiteA🌑 -install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌕 uninstall_from_os_SiteA🌑 sync_turn_on🌑 check_platform_shortcut_and_icon_SiteA🌑 -install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌕 uninstall_from_app_settings_SiteA🌑 sync_turn_on🌑 check_platform_shortcut_and_icon_SiteA🌑 -install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌕 uninstall_from_list_SiteA🌕 sync_turn_on🌕 check_platform_shortcut_and_icon_SiteA🌓 -install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌕 uninstall_from_menu_SiteA🌑 sync_turn_on🌑 check_platform_shortcut_and_icon_SiteA🌑 -install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌕 uninstall_from_os_SiteA🌑 sync_turn_on🌑 check_platform_shortcut_and_icon_SiteA🌑 -install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌕 uninstall_from_app_settings_SiteA🌑 sync_turn_on🌑 check_platform_shortcut_and_icon_SiteA🌑 -install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌕 uninstall_from_list_SiteA🌕 sync_turn_on🌕 check_platform_shortcut_and_icon_SiteA🌓 -install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌕 uninstall_from_menu_SiteA🌑 sync_turn_on🌑 check_platform_shortcut_and_icon_SiteA🌑 -install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌕 uninstall_from_os_SiteA🌑 sync_turn_on🌑 check_platform_shortcut_and_icon_SiteA🌑 -install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌕 uninstall_from_app_settings_SiteA🌑 sync_turn_on🌑 check_platform_shortcut_and_icon_SiteA🌑 -install_create_shortcut_tabbed_SiteA🌕 install_policy_app_windowed_no_shortcut_SiteA🌓 check_platform_shortcut_and_icon_SiteA🌓 -install_create_shortcut_tabbed_SiteA🌕 install_policy_app_windowed_shortcut_SiteA🌓 check_platform_shortcut_and_icon_SiteA🌓 -install_create_shortcut_windowed_SiteA🌕 install_policy_app_tabbed_no_shortcut_SiteA🌓 check_platform_shortcut_and_icon_SiteA🌓 -install_create_shortcut_windowed_SiteA🌕 install_policy_app_windowed_no_shortcut_SiteA🌓 check_platform_shortcut_and_icon_SiteA🌓 -install_omnibox_icon_SiteA🌕 install_policy_app_tabbed_no_shortcut_SiteA🌓 check_platform_shortcut_and_icon_SiteA🌓 -install_omnibox_icon_SiteA🌕 install_policy_app_windowed_no_shortcut_SiteA🌓 check_platform_shortcut_and_icon_SiteA🌓 -install_menu_option_SiteA🌕 install_policy_app_tabbed_no_shortcut_SiteA🌓 check_platform_shortcut_and_icon_SiteA🌓 -install_menu_option_SiteA🌕 install_policy_app_windowed_no_shortcut_SiteA🌓 check_platform_shortcut_and_icon_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_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_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_and_icon_SiteA🌓 -install_policy_app_tabbed_shortcut_SiteA🌓 install_omnibox_icon_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌓 -install_policy_app_tabbed_shortcut_SiteA🌓 install_menu_option_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌓 -install_policy_app_tabbed_no_shortcut_SiteA🌓 install_create_shortcut_windowed_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌓 -install_policy_app_tabbed_no_shortcut_SiteA🌓 install_omnibox_icon_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌓 -install_policy_app_tabbed_no_shortcut_SiteA🌓 install_menu_option_SiteA🌕 check_platform_shortcut_and_icon_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_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_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🌕 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_and_icon_SiteA🌓 -install_create_shortcut_tabbed_SiteA🌕 install_policy_app_tabbed_no_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌓 -install_create_shortcut_tabbed_SiteA🌕 install_policy_app_windowed_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌓 -install_create_shortcut_tabbed_SiteA🌕 install_policy_app_tabbed_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_platform_shortcut_and_icon_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_and_icon_SiteA🌓 -install_create_shortcut_windowed_SiteA🌕 install_policy_app_tabbed_no_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌓 -install_create_shortcut_windowed_SiteA🌕 install_policy_app_windowed_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌓 -install_create_shortcut_windowed_SiteA🌕 install_policy_app_tabbed_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌓 -install_omnibox_icon_SiteA🌕 install_policy_app_windowed_no_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌓 -install_omnibox_icon_SiteA🌕 install_policy_app_tabbed_no_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌓 -install_omnibox_icon_SiteA🌕 install_policy_app_windowed_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌓 -install_omnibox_icon_SiteA🌕 install_policy_app_tabbed_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌓 -install_menu_option_SiteA🌕 install_policy_app_windowed_no_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌓 -install_menu_option_SiteA🌕 install_policy_app_tabbed_no_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌓 -install_menu_option_SiteA🌕 install_policy_app_windowed_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌓 -install_menu_option_SiteA🌕 install_policy_app_tabbed_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_platform_shortcut_and_icon_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_and_icon_SiteA🌓 -install_policy_app_tabbed_shortcut_SiteA🌓 install_omnibox_icon_SiteA🌕 uninstall_policy_app_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌓 -install_policy_app_tabbed_shortcut_SiteA🌓 install_menu_option_SiteA🌕 uninstall_policy_app_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌓 -install_policy_app_tabbed_no_shortcut_SiteA🌓 install_create_shortcut_windowed_SiteA🌕 uninstall_policy_app_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌓 -install_policy_app_tabbed_no_shortcut_SiteA🌓 install_omnibox_icon_SiteA🌕 uninstall_policy_app_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌓 -install_policy_app_tabbed_no_shortcut_SiteA🌓 install_menu_option_SiteA🌕 uninstall_policy_app_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌓 -install_create_shortcut_windowed_SiteA🌕 close_pwa🌕 manifest_update_colors_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_color_correct_SiteA🌑 -install_create_shortcut_windowed_SiteA🌕 close_pwa🌕 manifest_update_colors_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_color_correct_SiteA🌑 -install_create_shortcut_windowed_SiteA🌕 close_pwa🌕 manifest_update_colors_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_color_correct_SiteA🌑 -install_create_shortcut_windowed_SiteA🌕 close_pwa🌕 manifest_update_colors_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_color_correct_SiteA🌑 -install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_colors_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_color_correct_SiteA🌑 -install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_colors_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_color_correct_SiteA🌑 -install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_colors_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_color_correct_SiteA🌑 -install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_colors_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_color_correct_SiteA🌑 -install_menu_option_SiteA🌕 close_pwa🌕 manifest_update_colors_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_color_correct_SiteA🌑 -install_menu_option_SiteA🌕 close_pwa🌕 manifest_update_colors_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_color_correct_SiteA🌑 -install_menu_option_SiteA🌕 close_pwa🌕 manifest_update_colors_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_color_correct_SiteA🌑 -install_menu_option_SiteA🌕 close_pwa🌕 manifest_update_colors_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_color_correct_SiteA🌑 -install_create_shortcut_windowed_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_menu_option_SiteA🌕 check_tab_not_created🌕 -install_create_shortcut_windowed_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_launch_icon_SiteA🌕 check_tab_not_created🌕 -install_create_shortcut_windowed_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_chrome_apps_SiteA🌓 check_tab_not_created🌕 -install_create_shortcut_windowed_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_platform_shortcut_SiteA🌑 check_tab_not_created🌑 -install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_menu_option_SiteA🌕 check_tab_not_created🌕 -install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_launch_icon_SiteA🌕 check_tab_not_created🌕 -install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_chrome_apps_SiteA🌓 check_tab_not_created🌕 -install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_platform_shortcut_SiteA🌑 check_tab_not_created🌑 -install_menu_option_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_menu_option_SiteA🌕 check_tab_not_created🌕 -install_menu_option_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_launch_icon_SiteA🌕 check_tab_not_created🌕 -install_menu_option_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_chrome_apps_SiteA🌓 check_tab_not_created🌕 -install_menu_option_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_platform_shortcut_SiteA🌑 check_tab_not_created🌑 -install_create_shortcut_windowed_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_menu_option_SiteA🌕 check_window_created🌕 -install_create_shortcut_windowed_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_launch_icon_SiteA🌕 check_window_created🌕 -install_create_shortcut_windowed_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_chrome_apps_SiteA🌓 check_window_created🌕 -install_create_shortcut_windowed_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 -install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_menu_option_SiteA🌕 check_window_created🌕 -install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_launch_icon_SiteA🌕 check_window_created🌕 -install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_chrome_apps_SiteA🌓 check_window_created🌕 -install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 -install_menu_option_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_menu_option_SiteA🌕 check_window_created🌕 -install_menu_option_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_launch_icon_SiteA🌕 check_window_created🌕 -install_menu_option_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_chrome_apps_SiteA🌓 check_window_created🌕 -install_menu_option_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 -install_create_shortcut_windowed_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_menu_option_SiteA🌕 check_window_display_minimal🌕 -install_create_shortcut_windowed_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_launch_icon_SiteA🌕 check_window_display_minimal🌕 -install_create_shortcut_windowed_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_chrome_apps_SiteA🌓 check_window_display_minimal🌕 -install_create_shortcut_windowed_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_platform_shortcut_SiteA🌑 check_window_display_minimal🌑 -install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_menu_option_SiteA🌕 check_window_display_minimal🌕 -install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_launch_icon_SiteA🌕 check_window_display_minimal🌕 -install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_chrome_apps_SiteA🌓 check_window_display_minimal🌕 -install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_platform_shortcut_SiteA🌑 check_window_display_minimal🌑 -install_menu_option_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_menu_option_SiteA🌕 check_window_display_minimal🌕 -install_menu_option_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_launch_icon_SiteA🌕 check_window_display_minimal🌕 -install_menu_option_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_chrome_apps_SiteA🌓 check_window_display_minimal🌕 -install_menu_option_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_platform_shortcut_SiteA🌑 check_window_display_minimal🌑 -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_SiteAFoo🌕 manifest_update_scope_site_a_foo_to_SiteARoot🌕 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_SiteARoot🌕 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_SiteARoot🌕 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_SiteARoot🌕 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_SiteARoot🌕 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_SiteARoot🌕 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_SiteARoot🌕 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_SiteARoot🌕 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_SiteARoot🌕 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_SiteARoot🌕 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_SiteARoot🌕 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_SiteARoot🌕 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_SiteARoot🌕 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_SiteARoot🌕 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_SiteARoot🌕 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_SiteARoot🌕 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_SiteARoot🌕 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_SiteARoot🌕 launch_from_platform_shortcut_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_SiteARoot🌕 navigate_browser_SiteABar🌕 check_install_icon_not_shown🌕 -install_omnibox_icon_SiteAFoo🌕 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteARoot🌕 navigate_browser_SiteABar🌕 check_install_icon_not_shown🌕 -install_menu_option_SiteAFoo🌕 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteARoot🌕 navigate_browser_SiteABar🌕 check_install_icon_not_shown🌕 -install_create_shortcut_windowed_SiteAFoo🌕 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteARoot🌕 navigate_browser_SiteABar🌕 check_launch_icon_shown🌕 -install_omnibox_icon_SiteAFoo🌕 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteARoot🌕 navigate_browser_SiteABar🌕 check_launch_icon_shown🌕 -install_menu_option_SiteAFoo🌕 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteARoot🌕 navigate_browser_SiteABar🌕 check_launch_icon_shown🌕 -install_create_shortcut_windowed_SiteAFoo🌕 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteARoot🌕 navigate_browser_SiteAFoo🌕 check_install_icon_not_shown🌕 -install_omnibox_icon_SiteAFoo🌕 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteARoot🌕 navigate_browser_SiteAFoo🌕 check_install_icon_not_shown🌕 -install_menu_option_SiteAFoo🌕 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteARoot🌕 navigate_browser_SiteAFoo🌕 check_install_icon_not_shown🌕 -install_create_shortcut_windowed_SiteAFoo🌕 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteARoot🌕 navigate_browser_SiteAFoo🌕 check_launch_icon_shown🌕 -install_omnibox_icon_SiteAFoo🌕 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteARoot🌕 navigate_browser_SiteAFoo🌕 check_launch_icon_shown🌕 -install_menu_option_SiteAFoo🌕 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteARoot🌕 navigate_browser_SiteAFoo🌕 check_launch_icon_shown🌕 -switch_incognito_profile🌑 navigate_browser_SiteA🌑 check_create_shortcut_not_shown🌑 -switch_incognito_profile🌑 navigate_browser_SiteC🌑 check_create_shortcut_not_shown🌑 -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🌕 -navigate_browser_SiteA🌕 check_create_shortcut_shown🌑 -navigate_browser_SiteAFoo🌕 check_install_icon_shown🌕 -navigate_browser_SiteC🌕 check_create_shortcut_shown🌑 -navigate_browser_SiteC🌕 check_install_icon_not_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_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🌕 -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🌕 -install_create_shortcut_windowed_SiteA🌕 navigate_pwa_site_a_to_SiteB🌕 check_app_title_site_a_is_SiteA🌑 -install_omnibox_icon_SiteA🌕 navigate_pwa_site_a_to_SiteB🌕 check_app_title_site_a_is_SiteA🌑 -install_menu_option_SiteA🌕 navigate_pwa_site_a_to_SiteB🌕 check_app_title_site_a_is_SiteA🌑 -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🌑 -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_SiteB🌕 check_site_handles_file_SiteB_Txt🌑 check_site_handles_file_SiteB_Png🌑 -install_omnibox_icon_SiteB🌕 check_site_handles_file_SiteB_Txt🌑 check_site_handles_file_SiteB_Png🌑 -install_policy_app_windowed_no_shortcut_SiteB🌓 check_site_handles_file_SiteB_Txt🌑 check_site_handles_file_SiteB_Png🌑 -install_policy_app_windowed_shortcut_SiteB🌓 check_site_handles_file_SiteB_Txt🌑 check_site_handles_file_SiteB_Png🌑 -install_menu_option_SiteB🌕 check_site_handles_file_SiteB_Txt🌑 check_site_handles_file_SiteB_Png🌑 -install_create_shortcut_tabbed_SiteB🌕 check_site_handles_file_SiteB_Txt🌑 check_site_handles_file_SiteB_Png🌑 -install_policy_app_tabbed_shortcut_SiteB🌓 check_site_handles_file_SiteB_Txt🌑 check_site_handles_file_SiteB_Png🌑 -install_policy_app_tabbed_no_shortcut_SiteB🌓 check_site_handles_file_SiteB_Txt🌑 check_site_handles_file_SiteB_Png🌑 -install_create_shortcut_windowed_SiteB🌕 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 -install_omnibox_icon_SiteB🌕 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 -install_policy_app_windowed_no_shortcut_SiteB🌓 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 -install_policy_app_windowed_shortcut_SiteB🌓 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 -install_menu_option_SiteB🌕 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 -install_create_shortcut_tabbed_SiteB🌕 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 -install_policy_app_tabbed_shortcut_SiteB🌓 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 -install_policy_app_tabbed_no_shortcut_SiteB🌓 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 -install_create_shortcut_windowed_SiteB🌕 launch_file_OneTextFile🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_One🌑 check_files_loaded_in_site_SiteB_OneTextFile🌑 -install_omnibox_icon_SiteB🌕 launch_file_OneTextFile🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_One🌑 check_files_loaded_in_site_SiteB_OneTextFile🌑 -install_policy_app_windowed_no_shortcut_SiteB🌓 launch_file_OneTextFile🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_One🌑 check_files_loaded_in_site_SiteB_OneTextFile🌑 -install_policy_app_windowed_shortcut_SiteB🌓 launch_file_OneTextFile🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_One🌑 check_files_loaded_in_site_SiteB_OneTextFile🌑 -install_menu_option_SiteB🌕 launch_file_OneTextFile🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_One🌑 check_files_loaded_in_site_SiteB_OneTextFile🌑 -install_create_shortcut_tabbed_SiteB🌕 launch_file_OneTextFile🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_One🌑 check_files_loaded_in_site_SiteB_OneTextFile🌑 -install_policy_app_tabbed_shortcut_SiteB🌓 launch_file_OneTextFile🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_One🌑 check_files_loaded_in_site_SiteB_OneTextFile🌑 -install_policy_app_tabbed_no_shortcut_SiteB🌓 launch_file_OneTextFile🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_One🌑 check_files_loaded_in_site_SiteB_OneTextFile🌑 -install_create_shortcut_windowed_SiteB🌕 launch_file_MultipleTextFiles🌑 check_file_handling_dialog_Shown🌑 -install_omnibox_icon_SiteB🌕 launch_file_MultipleTextFiles🌑 check_file_handling_dialog_Shown🌑 -install_policy_app_windowed_no_shortcut_SiteB🌓 launch_file_MultipleTextFiles🌑 check_file_handling_dialog_Shown🌑 -install_policy_app_windowed_shortcut_SiteB🌓 launch_file_MultipleTextFiles🌑 check_file_handling_dialog_Shown🌑 -install_menu_option_SiteB🌕 launch_file_MultipleTextFiles🌑 check_file_handling_dialog_Shown🌑 -install_create_shortcut_tabbed_SiteB🌕 launch_file_MultipleTextFiles🌑 check_file_handling_dialog_Shown🌑 -install_policy_app_tabbed_shortcut_SiteB🌓 launch_file_MultipleTextFiles🌑 check_file_handling_dialog_Shown🌑 -install_policy_app_tabbed_no_shortcut_SiteB🌓 launch_file_MultipleTextFiles🌑 check_file_handling_dialog_Shown🌑 -install_create_shortcut_windowed_SiteB🌕 launch_file_MultipleTextFiles🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_One🌑 check_files_loaded_in_site_SiteB_MultipleTextFiles🌑 -install_omnibox_icon_SiteB🌕 launch_file_MultipleTextFiles🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_One🌑 check_files_loaded_in_site_SiteB_MultipleTextFiles🌑 -install_policy_app_windowed_no_shortcut_SiteB🌓 launch_file_MultipleTextFiles🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_One🌑 check_files_loaded_in_site_SiteB_MultipleTextFiles🌑 -install_policy_app_windowed_shortcut_SiteB🌓 launch_file_MultipleTextFiles🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_One🌑 check_files_loaded_in_site_SiteB_MultipleTextFiles🌑 -install_menu_option_SiteB🌕 launch_file_MultipleTextFiles🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_One🌑 check_files_loaded_in_site_SiteB_MultipleTextFiles🌑 -install_create_shortcut_tabbed_SiteB🌕 launch_file_MultipleTextFiles🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_One🌑 check_files_loaded_in_site_SiteB_MultipleTextFiles🌑 -install_policy_app_tabbed_shortcut_SiteB🌓 launch_file_MultipleTextFiles🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_One🌑 check_files_loaded_in_site_SiteB_MultipleTextFiles🌑 -install_policy_app_tabbed_no_shortcut_SiteB🌓 launch_file_MultipleTextFiles🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_One🌑 check_files_loaded_in_site_SiteB_MultipleTextFiles🌑 -install_create_shortcut_windowed_SiteB🌕 launch_file_OnePngFile🌑 check_file_handling_dialog_Shown🌑 -install_omnibox_icon_SiteB🌕 launch_file_OnePngFile🌑 check_file_handling_dialog_Shown🌑 -install_policy_app_windowed_no_shortcut_SiteB🌓 launch_file_OnePngFile🌑 check_file_handling_dialog_Shown🌑 -install_policy_app_windowed_shortcut_SiteB🌓 launch_file_OnePngFile🌑 check_file_handling_dialog_Shown🌑 -install_menu_option_SiteB🌕 launch_file_OnePngFile🌑 check_file_handling_dialog_Shown🌑 -install_create_shortcut_tabbed_SiteB🌕 launch_file_OnePngFile🌑 check_file_handling_dialog_Shown🌑 -install_policy_app_tabbed_shortcut_SiteB🌓 launch_file_OnePngFile🌑 check_file_handling_dialog_Shown🌑 -install_policy_app_tabbed_no_shortcut_SiteB🌓 launch_file_OnePngFile🌑 check_file_handling_dialog_Shown🌑 -install_create_shortcut_windowed_SiteB🌕 launch_file_OnePngFile🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_One🌑 check_files_loaded_in_site_SiteB_OnePngFile🌑 -install_omnibox_icon_SiteB🌕 launch_file_OnePngFile🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_One🌑 check_files_loaded_in_site_SiteB_OnePngFile🌑 -install_policy_app_windowed_no_shortcut_SiteB🌓 launch_file_OnePngFile🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_One🌑 check_files_loaded_in_site_SiteB_OnePngFile🌑 -install_policy_app_windowed_shortcut_SiteB🌓 launch_file_OnePngFile🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_One🌑 check_files_loaded_in_site_SiteB_OnePngFile🌑 -install_menu_option_SiteB🌕 launch_file_OnePngFile🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_One🌑 check_files_loaded_in_site_SiteB_OnePngFile🌑 -install_create_shortcut_tabbed_SiteB🌕 launch_file_OnePngFile🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_One🌑 check_files_loaded_in_site_SiteB_OnePngFile🌑 -install_policy_app_tabbed_shortcut_SiteB🌓 launch_file_OnePngFile🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_One🌑 check_files_loaded_in_site_SiteB_OnePngFile🌑 -install_policy_app_tabbed_no_shortcut_SiteB🌓 launch_file_OnePngFile🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_One🌑 check_files_loaded_in_site_SiteB_OnePngFile🌑 -install_create_shortcut_windowed_SiteB🌕 launch_file_MultiplePngFiles🌑 check_file_handling_dialog_Shown🌑 -install_omnibox_icon_SiteB🌕 launch_file_MultiplePngFiles🌑 check_file_handling_dialog_Shown🌑 -install_policy_app_windowed_no_shortcut_SiteB🌓 launch_file_MultiplePngFiles🌑 check_file_handling_dialog_Shown🌑 -install_policy_app_windowed_shortcut_SiteB🌓 launch_file_MultiplePngFiles🌑 check_file_handling_dialog_Shown🌑 -install_menu_option_SiteB🌕 launch_file_MultiplePngFiles🌑 check_file_handling_dialog_Shown🌑 -install_create_shortcut_tabbed_SiteB🌕 launch_file_MultiplePngFiles🌑 check_file_handling_dialog_Shown🌑 -install_policy_app_tabbed_shortcut_SiteB🌓 launch_file_MultiplePngFiles🌑 check_file_handling_dialog_Shown🌑 -install_policy_app_tabbed_no_shortcut_SiteB🌓 launch_file_MultiplePngFiles🌑 check_file_handling_dialog_Shown🌑 -install_create_shortcut_windowed_SiteB🌕 launch_file_MultiplePngFiles🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_Two🌑 check_files_loaded_in_site_SiteB_MultiplePngFiles🌑 -install_omnibox_icon_SiteB🌕 launch_file_MultiplePngFiles🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_Two🌑 check_files_loaded_in_site_SiteB_MultiplePngFiles🌑 -install_policy_app_windowed_no_shortcut_SiteB🌓 launch_file_MultiplePngFiles🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_Two🌑 check_files_loaded_in_site_SiteB_MultiplePngFiles🌑 -install_policy_app_windowed_shortcut_SiteB🌓 launch_file_MultiplePngFiles🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_Two🌑 check_files_loaded_in_site_SiteB_MultiplePngFiles🌑 -install_menu_option_SiteB🌕 launch_file_MultiplePngFiles🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_Two🌑 check_files_loaded_in_site_SiteB_MultiplePngFiles🌑 -install_create_shortcut_tabbed_SiteB🌕 launch_file_MultiplePngFiles🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_Two🌑 check_files_loaded_in_site_SiteB_MultiplePngFiles🌑 -install_policy_app_tabbed_shortcut_SiteB🌓 launch_file_MultiplePngFiles🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_Two🌑 check_files_loaded_in_site_SiteB_MultiplePngFiles🌑 -install_policy_app_tabbed_no_shortcut_SiteB🌓 launch_file_MultiplePngFiles🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_Two🌑 check_files_loaded_in_site_SiteB_MultiplePngFiles🌑 -install_create_shortcut_windowed_SiteB🌕 launch_file_OneTextFile🌑 file_handling_dialog_Allow_Remember🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_NotShown🌑 check_pwa_window_created_SiteB_One🌑 -install_omnibox_icon_SiteB🌕 launch_file_OneTextFile🌑 file_handling_dialog_Allow_Remember🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_NotShown🌑 check_pwa_window_created_SiteB_One🌑 -install_policy_app_windowed_no_shortcut_SiteB🌓 launch_file_OneTextFile🌑 file_handling_dialog_Allow_Remember🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_NotShown🌑 check_pwa_window_created_SiteB_One🌑 -install_policy_app_windowed_shortcut_SiteB🌓 launch_file_OneTextFile🌑 file_handling_dialog_Allow_Remember🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_NotShown🌑 check_pwa_window_created_SiteB_One🌑 -install_menu_option_SiteB🌕 launch_file_OneTextFile🌑 file_handling_dialog_Allow_Remember🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_NotShown🌑 check_pwa_window_created_SiteB_One🌑 -install_create_shortcut_tabbed_SiteB🌕 launch_file_OneTextFile🌑 file_handling_dialog_Allow_Remember🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_NotShown🌑 check_pwa_window_created_SiteB_One🌑 -install_policy_app_tabbed_shortcut_SiteB🌓 launch_file_OneTextFile🌑 file_handling_dialog_Allow_Remember🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_NotShown🌑 check_pwa_window_created_SiteB_One🌑 -install_policy_app_tabbed_no_shortcut_SiteB🌓 launch_file_OneTextFile🌑 file_handling_dialog_Allow_Remember🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_NotShown🌑 check_pwa_window_created_SiteB_One🌑 -install_create_shortcut_windowed_SiteB🌕 launch_file_OneTextFile🌑 file_handling_dialog_Allow_AskAgain🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 -install_omnibox_icon_SiteB🌕 launch_file_OneTextFile🌑 file_handling_dialog_Allow_AskAgain🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 -install_policy_app_windowed_no_shortcut_SiteB🌓 launch_file_OneTextFile🌑 file_handling_dialog_Allow_AskAgain🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 -install_policy_app_windowed_shortcut_SiteB🌓 launch_file_OneTextFile🌑 file_handling_dialog_Allow_AskAgain🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 -install_menu_option_SiteB🌕 launch_file_OneTextFile🌑 file_handling_dialog_Allow_AskAgain🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 -install_create_shortcut_tabbed_SiteB🌕 launch_file_OneTextFile🌑 file_handling_dialog_Allow_AskAgain🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 -install_policy_app_tabbed_shortcut_SiteB🌓 launch_file_OneTextFile🌑 file_handling_dialog_Allow_AskAgain🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 -install_policy_app_tabbed_no_shortcut_SiteB🌓 launch_file_OneTextFile🌑 file_handling_dialog_Allow_AskAgain🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 -install_create_shortcut_windowed_SiteB🌕 launch_file_OneTextFile🌑 file_handling_dialog_Deny_AskAgain🌑 check_window_not_created🌑 check_site_handles_file_SiteB_Txt🌑 check_site_handles_file_SiteB_Png🌑 -install_omnibox_icon_SiteB🌕 launch_file_OneTextFile🌑 file_handling_dialog_Deny_AskAgain🌑 check_window_not_created🌑 check_site_handles_file_SiteB_Txt🌑 check_site_handles_file_SiteB_Png🌑 -install_policy_app_windowed_no_shortcut_SiteB🌓 launch_file_OneTextFile🌑 file_handling_dialog_Deny_AskAgain🌑 check_window_not_created🌑 check_site_handles_file_SiteB_Txt🌑 check_site_handles_file_SiteB_Png🌑 -install_policy_app_windowed_shortcut_SiteB🌓 launch_file_OneTextFile🌑 file_handling_dialog_Deny_AskAgain🌑 check_window_not_created🌑 check_site_handles_file_SiteB_Txt🌑 check_site_handles_file_SiteB_Png🌑 -install_menu_option_SiteB🌕 launch_file_OneTextFile🌑 file_handling_dialog_Deny_AskAgain🌑 check_window_not_created🌑 check_site_handles_file_SiteB_Txt🌑 check_site_handles_file_SiteB_Png🌑 -install_create_shortcut_tabbed_SiteB🌕 launch_file_OneTextFile🌑 file_handling_dialog_Deny_AskAgain🌑 check_window_not_created🌑 check_site_handles_file_SiteB_Txt🌑 check_site_handles_file_SiteB_Png🌑 -install_policy_app_tabbed_shortcut_SiteB🌓 launch_file_OneTextFile🌑 file_handling_dialog_Deny_AskAgain🌑 check_window_not_created🌑 check_site_handles_file_SiteB_Txt🌑 check_site_handles_file_SiteB_Png🌑 -install_policy_app_tabbed_no_shortcut_SiteB🌓 launch_file_OneTextFile🌑 file_handling_dialog_Deny_AskAgain🌑 check_window_not_created🌑 check_site_handles_file_SiteB_Txt🌑 check_site_handles_file_SiteB_Png🌑 -install_create_shortcut_windowed_SiteB🌕 launch_file_OneTextFile🌑 file_handling_dialog_Deny_AskAgain🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 -install_omnibox_icon_SiteB🌕 launch_file_OneTextFile🌑 file_handling_dialog_Deny_AskAgain🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 -install_policy_app_windowed_no_shortcut_SiteB🌓 launch_file_OneTextFile🌑 file_handling_dialog_Deny_AskAgain🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 -install_policy_app_windowed_shortcut_SiteB🌓 launch_file_OneTextFile🌑 file_handling_dialog_Deny_AskAgain🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 -install_menu_option_SiteB🌕 launch_file_OneTextFile🌑 file_handling_dialog_Deny_AskAgain🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 -install_create_shortcut_tabbed_SiteB🌕 launch_file_OneTextFile🌑 file_handling_dialog_Deny_AskAgain🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 -install_policy_app_tabbed_shortcut_SiteB🌓 launch_file_OneTextFile🌑 file_handling_dialog_Deny_AskAgain🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 -install_policy_app_tabbed_no_shortcut_SiteB🌓 launch_file_OneTextFile🌑 file_handling_dialog_Deny_AskAgain🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 -install_create_shortcut_windowed_SiteB🌕 launch_file_OneTextFile🌑 file_handling_dialog_Deny_Remember🌑 check_window_not_created🌑 check_site_not_handles_file_SiteB_Txt🌑 check_site_not_handles_file_SiteB_Png🌑 -install_omnibox_icon_SiteB🌕 launch_file_OneTextFile🌑 file_handling_dialog_Deny_Remember🌑 check_window_not_created🌑 check_site_not_handles_file_SiteB_Txt🌑 check_site_not_handles_file_SiteB_Png🌑 -install_policy_app_windowed_no_shortcut_SiteB🌓 launch_file_OneTextFile🌑 file_handling_dialog_Deny_Remember🌑 check_window_not_created🌑 check_site_not_handles_file_SiteB_Txt🌑 check_site_not_handles_file_SiteB_Png🌑 -install_policy_app_windowed_shortcut_SiteB🌓 launch_file_OneTextFile🌑 file_handling_dialog_Deny_Remember🌑 check_window_not_created🌑 check_site_not_handles_file_SiteB_Txt🌑 check_site_not_handles_file_SiteB_Png🌑 -install_menu_option_SiteB🌕 launch_file_OneTextFile🌑 file_handling_dialog_Deny_Remember🌑 check_window_not_created🌑 check_site_not_handles_file_SiteB_Txt🌑 check_site_not_handles_file_SiteB_Png🌑 -install_create_shortcut_tabbed_SiteB🌕 launch_file_OneTextFile🌑 file_handling_dialog_Deny_Remember🌑 check_window_not_created🌑 check_site_not_handles_file_SiteB_Txt🌑 check_site_not_handles_file_SiteB_Png🌑 -install_policy_app_tabbed_shortcut_SiteB🌓 launch_file_OneTextFile🌑 file_handling_dialog_Deny_Remember🌑 check_window_not_created🌑 check_site_not_handles_file_SiteB_Txt🌑 check_site_not_handles_file_SiteB_Png🌑 -install_policy_app_tabbed_no_shortcut_SiteB🌓 launch_file_OneTextFile🌑 file_handling_dialog_Deny_Remember🌑 check_window_not_created🌑 check_site_not_handles_file_SiteB_Txt🌑 check_site_not_handles_file_SiteB_Png🌑 -install_create_shortcut_windowed_SiteB🌕 add_file_handling_policy_approval_SiteB🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_NotShown🌑 check_pwa_window_created_SiteB_One🌑 -install_omnibox_icon_SiteB🌕 add_file_handling_policy_approval_SiteB🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_NotShown🌑 check_pwa_window_created_SiteB_One🌑 -install_policy_app_windowed_no_shortcut_SiteB🌓 add_file_handling_policy_approval_SiteB🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_NotShown🌑 check_pwa_window_created_SiteB_One🌑 -install_policy_app_windowed_shortcut_SiteB🌓 add_file_handling_policy_approval_SiteB🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_NotShown🌑 check_pwa_window_created_SiteB_One🌑 -install_menu_option_SiteB🌕 add_file_handling_policy_approval_SiteB🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_NotShown🌑 check_pwa_window_created_SiteB_One🌑 -install_create_shortcut_tabbed_SiteB🌕 add_file_handling_policy_approval_SiteB🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_NotShown🌑 check_pwa_window_created_SiteB_One🌑 -install_policy_app_tabbed_shortcut_SiteB🌓 add_file_handling_policy_approval_SiteB🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_NotShown🌑 check_pwa_window_created_SiteB_One🌑 -install_policy_app_tabbed_no_shortcut_SiteB🌓 add_file_handling_policy_approval_SiteB🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_NotShown🌑 check_pwa_window_created_SiteB_One🌑 -install_create_shortcut_windowed_SiteB🌕 add_file_handling_policy_approval_SiteB🌑 remove_file_handling_policy_approval_SiteB🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 -install_omnibox_icon_SiteB🌕 add_file_handling_policy_approval_SiteB🌑 remove_file_handling_policy_approval_SiteB🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 -install_policy_app_windowed_no_shortcut_SiteB🌓 add_file_handling_policy_approval_SiteB🌑 remove_file_handling_policy_approval_SiteB🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 -install_policy_app_windowed_shortcut_SiteB🌓 add_file_handling_policy_approval_SiteB🌑 remove_file_handling_policy_approval_SiteB🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 -install_menu_option_SiteB🌕 add_file_handling_policy_approval_SiteB🌑 remove_file_handling_policy_approval_SiteB🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 -install_create_shortcut_tabbed_SiteB🌕 add_file_handling_policy_approval_SiteB🌑 remove_file_handling_policy_approval_SiteB🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 -install_policy_app_tabbed_shortcut_SiteB🌓 add_file_handling_policy_approval_SiteB🌑 remove_file_handling_policy_approval_SiteB🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 -install_policy_app_tabbed_no_shortcut_SiteB🌓 add_file_handling_policy_approval_SiteB🌑 remove_file_handling_policy_approval_SiteB🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 +# This is a generated file. +# Full coverage: 45%, with partial coverage: 61% +install_create_shortcut_windowed_SiteA🌕 manifest_update_title_SiteA🌑 accept_app_id_update_dialog🌑 close_pwa🌑 launch_from_menu_option_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 +install_create_shortcut_windowed_SiteA🌕 manifest_update_title_SiteA🌑 accept_app_id_update_dialog🌑 close_pwa🌑 launch_from_launch_icon_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 +install_create_shortcut_windowed_SiteA🌕 manifest_update_title_SiteA🌑 accept_app_id_update_dialog🌑 close_pwa🌑 launch_from_chrome_apps_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 +install_create_shortcut_windowed_SiteA🌕 manifest_update_title_SiteA🌑 accept_app_id_update_dialog🌑 close_pwa🌑 launch_from_platform_shortcut_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 +install_omnibox_icon_SiteA🌕 manifest_update_title_SiteA🌑 accept_app_id_update_dialog🌑 close_pwa🌑 launch_from_menu_option_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 +install_omnibox_icon_SiteA🌕 manifest_update_title_SiteA🌑 accept_app_id_update_dialog🌑 close_pwa🌑 launch_from_launch_icon_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 +install_omnibox_icon_SiteA🌕 manifest_update_title_SiteA🌑 accept_app_id_update_dialog🌑 close_pwa🌑 launch_from_chrome_apps_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 +install_omnibox_icon_SiteA🌕 manifest_update_title_SiteA🌑 accept_app_id_update_dialog🌑 close_pwa🌑 launch_from_platform_shortcut_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 +install_menu_option_SiteA🌕 manifest_update_title_SiteA🌑 accept_app_id_update_dialog🌑 close_pwa🌑 launch_from_menu_option_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 +install_menu_option_SiteA🌕 manifest_update_title_SiteA🌑 accept_app_id_update_dialog🌑 close_pwa🌑 launch_from_launch_icon_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 +install_menu_option_SiteA🌕 manifest_update_title_SiteA🌑 accept_app_id_update_dialog🌑 close_pwa🌑 launch_from_chrome_apps_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 +install_menu_option_SiteA🌕 manifest_update_title_SiteA🌑 accept_app_id_update_dialog🌑 close_pwa🌑 launch_from_platform_shortcut_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 +install_create_shortcut_windowed_SiteA🌕 manifest_update_title_SiteA🌑 deny_app_update_dialog🌑 check_app_not_in_list_SiteA🌑 check_platform_shortcut_not_exists_SiteA🌑 +install_omnibox_icon_SiteA🌕 manifest_update_title_SiteA🌑 deny_app_update_dialog🌑 check_app_not_in_list_SiteA🌑 check_platform_shortcut_not_exists_SiteA🌑 +install_menu_option_SiteA🌕 manifest_update_title_SiteA🌑 deny_app_update_dialog🌑 check_app_not_in_list_SiteA🌑 check_platform_shortcut_not_exists_SiteA🌑 +install_create_shortcut_windowed_SiteA🌕 close_pwa🌕 manifest_update_icon_SiteA🌑 check_app_in_list_icon_correct_SiteA🌑 +install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_icon_SiteA🌑 check_app_in_list_icon_correct_SiteA🌑 +install_menu_option_SiteA🌕 close_pwa🌕 manifest_update_icon_SiteA🌑 check_app_in_list_icon_correct_SiteA🌑 +install_create_shortcut_windowed_SiteA🌕 close_pwa🌕 manifest_update_icon_SiteA🌑 check_platform_shortcut_and_icon_SiteA🌑 +install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_icon_SiteA🌑 check_platform_shortcut_and_icon_SiteA🌑 +install_menu_option_SiteA🌕 close_pwa🌕 manifest_update_icon_SiteA🌑 check_platform_shortcut_and_icon_SiteA🌑 +install_policy_app_windowed_no_shortcut_SiteA🌓 manifest_update_title_SiteA🌑 check_update_dialog_not_shown🌑 close_pwa🌑 launch_from_menu_option_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 +install_policy_app_windowed_no_shortcut_SiteA🌓 manifest_update_title_SiteA🌑 check_update_dialog_not_shown🌑 close_pwa🌑 launch_from_launch_icon_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 +install_policy_app_windowed_no_shortcut_SiteA🌓 manifest_update_title_SiteA🌑 check_update_dialog_not_shown🌑 close_pwa🌑 launch_from_chrome_apps_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 +install_policy_app_windowed_no_shortcut_SiteA🌓 manifest_update_title_SiteA🌑 check_update_dialog_not_shown🌑 close_pwa🌑 launch_from_platform_shortcut_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌓 manifest_update_title_SiteA🌑 check_update_dialog_not_shown🌑 close_pwa🌑 launch_from_menu_option_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌓 manifest_update_title_SiteA🌑 check_update_dialog_not_shown🌑 close_pwa🌑 launch_from_launch_icon_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌓 manifest_update_title_SiteA🌑 check_update_dialog_not_shown🌑 close_pwa🌑 launch_from_chrome_apps_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌓 manifest_update_title_SiteA🌑 check_update_dialog_not_shown🌑 close_pwa🌑 launch_from_platform_shortcut_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 +install_policy_app_windowed_shortcut_SiteA🌓 manifest_update_title_SiteA🌑 check_update_dialog_not_shown🌑 close_pwa🌑 launch_from_menu_option_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 +install_policy_app_windowed_shortcut_SiteA🌓 manifest_update_title_SiteA🌑 check_update_dialog_not_shown🌑 close_pwa🌑 launch_from_launch_icon_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 +install_policy_app_windowed_shortcut_SiteA🌓 manifest_update_title_SiteA🌑 check_update_dialog_not_shown🌑 close_pwa🌑 launch_from_chrome_apps_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 +install_policy_app_windowed_shortcut_SiteA🌓 manifest_update_title_SiteA🌑 check_update_dialog_not_shown🌑 close_pwa🌑 launch_from_platform_shortcut_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 manifest_update_title_SiteA🌑 check_update_dialog_not_shown🌑 close_pwa🌑 launch_from_menu_option_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 manifest_update_title_SiteA🌑 check_update_dialog_not_shown🌑 close_pwa🌑 launch_from_launch_icon_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 manifest_update_title_SiteA🌑 check_update_dialog_not_shown🌑 close_pwa🌑 launch_from_chrome_apps_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 manifest_update_title_SiteA🌑 check_update_dialog_not_shown🌑 close_pwa🌑 launch_from_platform_shortcut_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 +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🌕 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🌕 navigate_pwa_site_a_to_SiteB🌕 close_custom_toolbar🌕 check_app_navigation_is_start_url🌕 +install_omnibox_icon_SiteA🌕 navigate_pwa_site_a_to_SiteB🌕 close_custom_toolbar🌕 check_app_navigation_is_start_url🌕 +install_policy_app_windowed_no_shortcut_SiteA🌓 navigate_pwa_site_a_to_SiteB🌕 close_custom_toolbar🌕 check_app_navigation_is_start_url🌕 +install_policy_app_windowed_shortcut_SiteA🌓 navigate_pwa_site_a_to_SiteB🌕 close_custom_toolbar🌕 check_app_navigation_is_start_url🌕 +install_menu_option_SiteA🌕 navigate_pwa_site_a_to_SiteB🌕 close_custom_toolbar🌕 check_app_navigation_is_start_url🌕 +install_create_shortcut_windowed_SiteA🌕 navigate_pwa_site_a_to_SiteB🌕 check_custom_toolbar🌕 +install_omnibox_icon_SiteA🌕 navigate_pwa_site_a_to_SiteB🌕 check_custom_toolbar🌕 +install_menu_option_SiteA🌕 navigate_pwa_site_a_to_SiteB🌕 check_custom_toolbar🌕 +navigate_browser_SiteA🌕 check_app_not_in_list_SiteA🌓 +navigate_browser_SiteA🌕 check_platform_shortcut_not_exists_SiteA🌑 +navigate_browser_SiteC🌕 check_app_not_in_list_SiteA🌓 +navigate_browser_SiteC🌕 check_platform_shortcut_not_exists_SiteA🌑 +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🌕 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_and_icon_SiteA🌓 +install_policy_app_tabbed_shortcut_SiteA🌓 check_platform_shortcut_and_icon_SiteA🌓 +install_create_shortcut_windowed_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌓 +install_omnibox_icon_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌓 +install_menu_option_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌓 +install_create_shortcut_tabbed_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌓 +install_policy_app_windowed_shortcut_SiteC🌓 check_platform_shortcut_and_icon_SiteC🌓 +install_policy_app_tabbed_shortcut_SiteC🌓 check_platform_shortcut_and_icon_SiteC🌓 +install_create_shortcut_windowed_SiteC🌕 check_platform_shortcut_and_icon_SiteC🌓 +install_create_shortcut_tabbed_SiteC🌕 check_platform_shortcut_and_icon_SiteC🌓 +install_create_shortcut_tabbed_SiteA🌕 uninstall_from_list_SiteA🌕 check_app_not_in_list_SiteA🌓 +install_create_shortcut_tabbed_SiteA🌕 uninstall_from_list_SiteA🌕 navigate_browser_SiteA🌕 check_install_icon_shown🌕 +install_create_shortcut_tabbed_SiteA🌕 uninstall_from_list_SiteA🌕 navigate_browser_SiteA🌕 check_launch_icon_not_shown🌕 +install_create_shortcut_tabbed_SiteA🌕 uninstall_from_list_SiteA🌕 check_platform_shortcut_not_exists_SiteA🌑 +install_create_shortcut_windowed_SiteA🌕 uninstall_from_list_SiteA🌕 check_app_not_in_list_SiteA🌓 +install_omnibox_icon_SiteA🌕 uninstall_from_list_SiteA🌕 check_app_not_in_list_SiteA🌓 +install_menu_option_SiteA🌕 uninstall_from_list_SiteA🌕 check_app_not_in_list_SiteA🌓 +install_create_shortcut_windowed_SiteA🌕 uninstall_from_list_SiteA🌕 navigate_browser_SiteA🌕 check_install_icon_shown🌕 +install_omnibox_icon_SiteA🌕 uninstall_from_list_SiteA🌕 navigate_browser_SiteA🌕 check_install_icon_shown🌕 +install_menu_option_SiteA🌕 uninstall_from_list_SiteA🌕 navigate_browser_SiteA🌕 check_install_icon_shown🌕 +install_create_shortcut_windowed_SiteA🌕 uninstall_from_list_SiteA🌕 navigate_browser_SiteA🌕 check_launch_icon_not_shown🌕 +install_omnibox_icon_SiteA🌕 uninstall_from_list_SiteA🌕 navigate_browser_SiteA🌕 check_launch_icon_not_shown🌕 +install_menu_option_SiteA🌕 uninstall_from_list_SiteA🌕 navigate_browser_SiteA🌕 check_launch_icon_not_shown🌕 +install_create_shortcut_windowed_SiteA🌕 uninstall_from_list_SiteA🌕 check_platform_shortcut_not_exists_SiteA🌑 +install_omnibox_icon_SiteA🌕 uninstall_from_list_SiteA🌕 check_platform_shortcut_not_exists_SiteA🌑 +install_menu_option_SiteA🌕 uninstall_from_list_SiteA🌕 check_platform_shortcut_not_exists_SiteA🌑 +install_create_shortcut_tabbed_SiteC🌕 uninstall_from_list_SiteC🌕 check_app_not_in_list_SiteA🌓 +install_create_shortcut_tabbed_SiteC🌕 uninstall_from_list_SiteC🌕 check_platform_shortcut_not_exists_SiteC🌑 +install_create_shortcut_windowed_SiteC🌕 uninstall_from_list_SiteC🌕 check_app_not_in_list_SiteA🌓 +install_create_shortcut_windowed_SiteC🌕 uninstall_from_list_SiteC🌕 check_platform_shortcut_not_exists_SiteC🌑 +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_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_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🌕 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_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_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_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_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_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_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_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_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_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_policy_app_windowed_no_shortcut_SiteA🌓 create_shortcuts_SiteA🌑 check_platform_shortcut_and_icon_SiteA🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌓 create_shortcuts_SiteA🌑 check_platform_shortcut_and_icon_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_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_platform_shortcut_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_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_platform_shortcut_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_platform_shortcut_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🌕 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🌕 switch_profile_clients_Client2🌕 launch_from_chrome_apps_SiteA🌓 check_tab_created🌕 +install_create_shortcut_tabbed_SiteA🌕 switch_profile_clients_Client2🌕 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 +install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 uninstall_from_list_SiteA🌕 check_app_not_in_list_SiteA🌓 +install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 uninstall_from_list_SiteA🌕 check_app_not_in_list_SiteA🌓 +install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 uninstall_from_list_SiteA🌕 check_app_not_in_list_SiteA🌓 +install_create_shortcut_tabbed_SiteA🌕 switch_profile_clients_Client2🌕 uninstall_from_list_SiteA🌕 check_app_not_in_list_SiteA🌓 +install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 uninstall_from_list_SiteA🌕 switch_profile_clients_Client1🌕 check_app_not_in_list_SiteA🌓 +install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 uninstall_from_list_SiteA🌕 switch_profile_clients_Client1🌕 check_app_not_in_list_SiteA🌓 +install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 uninstall_from_list_SiteA🌕 switch_profile_clients_Client1🌕 check_app_not_in_list_SiteA🌓 +install_create_shortcut_tabbed_SiteA🌕 switch_profile_clients_Client2🌕 uninstall_from_list_SiteA🌕 switch_profile_clients_Client1🌕 check_app_not_in_list_SiteA🌓 +install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 check_platform_shortcut_and_icon_SiteA🌓 +install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 check_platform_shortcut_and_icon_SiteA🌓 +install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 check_platform_shortcut_and_icon_SiteA🌓 +install_create_shortcut_tabbed_SiteA🌕 switch_profile_clients_Client2🌕 check_platform_shortcut_and_icon_SiteA🌓 +install_create_shortcut_tabbed_SiteA🌕 switch_profile_clients_Client2🌕 check_app_in_list_tabbed_SiteA🌓 +install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 check_app_in_list_windowed_SiteA🌓 +install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 check_app_in_list_windowed_SiteA🌓 +install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 check_app_in_list_windowed_SiteA🌓 +install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 navigate_browser_SiteA🌕 check_install_icon_not_shown🌕 +install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 navigate_browser_SiteA🌕 check_install_icon_not_shown🌕 +install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 navigate_browser_SiteA🌕 check_install_icon_not_shown🌕 +install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 navigate_browser_SiteA🌕 check_launch_icon_shown🌕 +install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 navigate_browser_SiteA🌕 check_launch_icon_shown🌕 +install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 navigate_browser_SiteA🌕 check_launch_icon_shown🌕 +install_create_shortcut_tabbed_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌕 uninstall_from_list_SiteA🌕 sync_turn_on🌕 check_app_in_list_tabbed_SiteA🌓 +install_create_shortcut_tabbed_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌕 uninstall_from_menu_SiteA🌑 sync_turn_on🌑 check_app_in_list_tabbed_SiteA🌑 +install_create_shortcut_tabbed_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌕 uninstall_from_os_SiteA🌑 sync_turn_on🌑 check_app_in_list_tabbed_SiteA🌑 +install_create_shortcut_tabbed_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌕 uninstall_from_app_settings_SiteA🌑 sync_turn_on🌑 check_app_in_list_tabbed_SiteA🌑 +install_create_shortcut_tabbed_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌕 uninstall_from_list_SiteA🌕 sync_turn_on🌕 check_platform_shortcut_and_icon_SiteA🌓 +install_create_shortcut_tabbed_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌕 uninstall_from_menu_SiteA🌑 sync_turn_on🌑 check_platform_shortcut_and_icon_SiteA🌑 +install_create_shortcut_tabbed_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌕 uninstall_from_os_SiteA🌑 sync_turn_on🌑 check_platform_shortcut_and_icon_SiteA🌑 +install_create_shortcut_tabbed_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌕 uninstall_from_app_settings_SiteA🌑 sync_turn_on🌑 check_platform_shortcut_and_icon_SiteA🌑 +install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌕 uninstall_from_list_SiteA🌕 sync_turn_on🌕 check_app_in_list_windowed_SiteA🌓 +install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌕 uninstall_from_menu_SiteA🌑 sync_turn_on🌑 check_app_in_list_windowed_SiteA🌑 +install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌕 uninstall_from_os_SiteA🌑 sync_turn_on🌑 check_app_in_list_windowed_SiteA🌑 +install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌕 uninstall_from_app_settings_SiteA🌑 sync_turn_on🌑 check_app_in_list_windowed_SiteA🌑 +install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌕 uninstall_from_list_SiteA🌕 sync_turn_on🌕 check_app_in_list_windowed_SiteA🌓 +install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌕 uninstall_from_menu_SiteA🌑 sync_turn_on🌑 check_app_in_list_windowed_SiteA🌑 +install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌕 uninstall_from_os_SiteA🌑 sync_turn_on🌑 check_app_in_list_windowed_SiteA🌑 +install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌕 uninstall_from_app_settings_SiteA🌑 sync_turn_on🌑 check_app_in_list_windowed_SiteA🌑 +install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌕 uninstall_from_list_SiteA🌕 sync_turn_on🌕 check_app_in_list_windowed_SiteA🌓 +install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌕 uninstall_from_menu_SiteA🌑 sync_turn_on🌑 check_app_in_list_windowed_SiteA🌑 +install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌕 uninstall_from_os_SiteA🌑 sync_turn_on🌑 check_app_in_list_windowed_SiteA🌑 +install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌕 uninstall_from_app_settings_SiteA🌑 sync_turn_on🌑 check_app_in_list_windowed_SiteA🌑 +install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌕 uninstall_from_list_SiteA🌕 sync_turn_on🌕 check_platform_shortcut_and_icon_SiteA🌓 +install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌕 uninstall_from_menu_SiteA🌑 sync_turn_on🌑 check_platform_shortcut_and_icon_SiteA🌑 +install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌕 uninstall_from_os_SiteA🌑 sync_turn_on🌑 check_platform_shortcut_and_icon_SiteA🌑 +install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌕 uninstall_from_app_settings_SiteA🌑 sync_turn_on🌑 check_platform_shortcut_and_icon_SiteA🌑 +install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌕 uninstall_from_list_SiteA🌕 sync_turn_on🌕 check_platform_shortcut_and_icon_SiteA🌓 +install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌕 uninstall_from_menu_SiteA🌑 sync_turn_on🌑 check_platform_shortcut_and_icon_SiteA🌑 +install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌕 uninstall_from_os_SiteA🌑 sync_turn_on🌑 check_platform_shortcut_and_icon_SiteA🌑 +install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌕 uninstall_from_app_settings_SiteA🌑 sync_turn_on🌑 check_platform_shortcut_and_icon_SiteA🌑 +install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌕 uninstall_from_list_SiteA🌕 sync_turn_on🌕 check_platform_shortcut_and_icon_SiteA🌓 +install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌕 uninstall_from_menu_SiteA🌑 sync_turn_on🌑 check_platform_shortcut_and_icon_SiteA🌑 +install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌕 uninstall_from_os_SiteA🌑 sync_turn_on🌑 check_platform_shortcut_and_icon_SiteA🌑 +install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌕 uninstall_from_app_settings_SiteA🌑 sync_turn_on🌑 check_platform_shortcut_and_icon_SiteA🌑 +install_create_shortcut_tabbed_SiteA🌕 install_policy_app_windowed_no_shortcut_SiteA🌓 check_platform_shortcut_and_icon_SiteA🌓 +install_create_shortcut_tabbed_SiteA🌕 install_policy_app_windowed_shortcut_SiteA🌓 check_platform_shortcut_and_icon_SiteA🌓 +install_create_shortcut_windowed_SiteA🌕 install_policy_app_tabbed_no_shortcut_SiteA🌓 check_platform_shortcut_and_icon_SiteA🌓 +install_create_shortcut_windowed_SiteA🌕 install_policy_app_windowed_no_shortcut_SiteA🌓 check_platform_shortcut_and_icon_SiteA🌓 +install_omnibox_icon_SiteA🌕 install_policy_app_tabbed_no_shortcut_SiteA🌓 check_platform_shortcut_and_icon_SiteA🌓 +install_omnibox_icon_SiteA🌕 install_policy_app_windowed_no_shortcut_SiteA🌓 check_platform_shortcut_and_icon_SiteA🌓 +install_menu_option_SiteA🌕 install_policy_app_tabbed_no_shortcut_SiteA🌓 check_platform_shortcut_and_icon_SiteA🌓 +install_menu_option_SiteA🌕 install_policy_app_windowed_no_shortcut_SiteA🌓 check_platform_shortcut_and_icon_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_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_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_and_icon_SiteA🌓 +install_policy_app_tabbed_shortcut_SiteA🌓 install_omnibox_icon_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌓 +install_policy_app_tabbed_shortcut_SiteA🌓 install_menu_option_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌓 +install_policy_app_tabbed_no_shortcut_SiteA🌓 install_create_shortcut_windowed_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌓 +install_policy_app_tabbed_no_shortcut_SiteA🌓 install_omnibox_icon_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌓 +install_policy_app_tabbed_no_shortcut_SiteA🌓 install_menu_option_SiteA🌕 check_platform_shortcut_and_icon_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_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_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🌕 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_and_icon_SiteA🌓 +install_create_shortcut_tabbed_SiteA🌕 install_policy_app_tabbed_no_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌓 +install_create_shortcut_tabbed_SiteA🌕 install_policy_app_windowed_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌓 +install_create_shortcut_tabbed_SiteA🌕 install_policy_app_tabbed_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_platform_shortcut_and_icon_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_and_icon_SiteA🌓 +install_create_shortcut_windowed_SiteA🌕 install_policy_app_tabbed_no_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌓 +install_create_shortcut_windowed_SiteA🌕 install_policy_app_windowed_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌓 +install_create_shortcut_windowed_SiteA🌕 install_policy_app_tabbed_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌓 +install_omnibox_icon_SiteA🌕 install_policy_app_windowed_no_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌓 +install_omnibox_icon_SiteA🌕 install_policy_app_tabbed_no_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌓 +install_omnibox_icon_SiteA🌕 install_policy_app_windowed_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌓 +install_omnibox_icon_SiteA🌕 install_policy_app_tabbed_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌓 +install_menu_option_SiteA🌕 install_policy_app_windowed_no_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌓 +install_menu_option_SiteA🌕 install_policy_app_tabbed_no_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌓 +install_menu_option_SiteA🌕 install_policy_app_windowed_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌓 +install_menu_option_SiteA🌕 install_policy_app_tabbed_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_platform_shortcut_and_icon_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_and_icon_SiteA🌓 +install_policy_app_tabbed_shortcut_SiteA🌓 install_omnibox_icon_SiteA🌕 uninstall_policy_app_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌓 +install_policy_app_tabbed_shortcut_SiteA🌓 install_menu_option_SiteA🌕 uninstall_policy_app_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌓 +install_policy_app_tabbed_no_shortcut_SiteA🌓 install_create_shortcut_windowed_SiteA🌕 uninstall_policy_app_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌓 +install_policy_app_tabbed_no_shortcut_SiteA🌓 install_omnibox_icon_SiteA🌕 uninstall_policy_app_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌓 +install_policy_app_tabbed_no_shortcut_SiteA🌓 install_menu_option_SiteA🌕 uninstall_policy_app_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌓 +install_create_shortcut_windowed_SiteA🌕 close_pwa🌕 manifest_update_colors_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_color_correct_SiteA🌑 +install_create_shortcut_windowed_SiteA🌕 close_pwa🌕 manifest_update_colors_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_color_correct_SiteA🌑 +install_create_shortcut_windowed_SiteA🌕 close_pwa🌕 manifest_update_colors_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_color_correct_SiteA🌑 +install_create_shortcut_windowed_SiteA🌕 close_pwa🌕 manifest_update_colors_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_color_correct_SiteA🌑 +install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_colors_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_color_correct_SiteA🌑 +install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_colors_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_color_correct_SiteA🌑 +install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_colors_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_color_correct_SiteA🌑 +install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_colors_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_color_correct_SiteA🌑 +install_menu_option_SiteA🌕 close_pwa🌕 manifest_update_colors_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_color_correct_SiteA🌑 +install_menu_option_SiteA🌕 close_pwa🌕 manifest_update_colors_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_color_correct_SiteA🌑 +install_menu_option_SiteA🌕 close_pwa🌕 manifest_update_colors_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_color_correct_SiteA🌑 +install_menu_option_SiteA🌕 close_pwa🌕 manifest_update_colors_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_color_correct_SiteA🌑 +install_create_shortcut_windowed_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_menu_option_SiteA🌕 check_tab_not_created🌕 +install_create_shortcut_windowed_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_launch_icon_SiteA🌕 check_tab_not_created🌕 +install_create_shortcut_windowed_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_chrome_apps_SiteA🌓 check_tab_not_created🌕 +install_create_shortcut_windowed_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_platform_shortcut_SiteA🌑 check_tab_not_created🌑 +install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_menu_option_SiteA🌕 check_tab_not_created🌕 +install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_launch_icon_SiteA🌕 check_tab_not_created🌕 +install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_chrome_apps_SiteA🌓 check_tab_not_created🌕 +install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_platform_shortcut_SiteA🌑 check_tab_not_created🌑 +install_menu_option_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_menu_option_SiteA🌕 check_tab_not_created🌕 +install_menu_option_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_launch_icon_SiteA🌕 check_tab_not_created🌕 +install_menu_option_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_chrome_apps_SiteA🌓 check_tab_not_created🌕 +install_menu_option_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_platform_shortcut_SiteA🌑 check_tab_not_created🌑 +install_create_shortcut_windowed_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_menu_option_SiteA🌕 check_window_created🌕 +install_create_shortcut_windowed_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_launch_icon_SiteA🌕 check_window_created🌕 +install_create_shortcut_windowed_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_chrome_apps_SiteA🌓 check_window_created🌕 +install_create_shortcut_windowed_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 +install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_menu_option_SiteA🌕 check_window_created🌕 +install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_launch_icon_SiteA🌕 check_window_created🌕 +install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_chrome_apps_SiteA🌓 check_window_created🌕 +install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 +install_menu_option_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_menu_option_SiteA🌕 check_window_created🌕 +install_menu_option_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_launch_icon_SiteA🌕 check_window_created🌕 +install_menu_option_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_chrome_apps_SiteA🌓 check_window_created🌕 +install_menu_option_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 +install_create_shortcut_windowed_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_menu_option_SiteA🌕 check_window_display_minimal🌕 +install_create_shortcut_windowed_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_launch_icon_SiteA🌕 check_window_display_minimal🌕 +install_create_shortcut_windowed_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_chrome_apps_SiteA🌓 check_window_display_minimal🌕 +install_create_shortcut_windowed_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_platform_shortcut_SiteA🌑 check_window_display_minimal🌑 +install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_menu_option_SiteA🌕 check_window_display_minimal🌕 +install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_launch_icon_SiteA🌕 check_window_display_minimal🌕 +install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_chrome_apps_SiteA🌓 check_window_display_minimal🌕 +install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_platform_shortcut_SiteA🌑 check_window_display_minimal🌑 +install_menu_option_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_menu_option_SiteA🌕 check_window_display_minimal🌕 +install_menu_option_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_launch_icon_SiteA🌕 check_window_display_minimal🌕 +install_menu_option_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_chrome_apps_SiteA🌓 check_window_display_minimal🌕 +install_menu_option_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_platform_shortcut_SiteA🌑 check_window_display_minimal🌑 +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_SiteAFoo🌕 manifest_update_scope_site_a_foo_to_SiteARoot🌕 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_SiteARoot🌕 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_SiteARoot🌕 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_SiteARoot🌕 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_SiteARoot🌕 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_SiteARoot🌕 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_SiteARoot🌕 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_SiteARoot🌕 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_SiteARoot🌕 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_SiteARoot🌕 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_SiteARoot🌕 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_SiteARoot🌕 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_SiteARoot🌕 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_SiteARoot🌕 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_SiteARoot🌕 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_SiteARoot🌕 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_SiteARoot🌕 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_SiteARoot🌕 launch_from_platform_shortcut_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_SiteARoot🌕 navigate_browser_SiteABar🌕 check_install_icon_not_shown🌕 +install_omnibox_icon_SiteAFoo🌕 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteARoot🌕 navigate_browser_SiteABar🌕 check_install_icon_not_shown🌕 +install_menu_option_SiteAFoo🌕 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteARoot🌕 navigate_browser_SiteABar🌕 check_install_icon_not_shown🌕 +install_create_shortcut_windowed_SiteAFoo🌕 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteARoot🌕 navigate_browser_SiteABar🌕 check_launch_icon_shown🌕 +install_omnibox_icon_SiteAFoo🌕 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteARoot🌕 navigate_browser_SiteABar🌕 check_launch_icon_shown🌕 +install_menu_option_SiteAFoo🌕 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteARoot🌕 navigate_browser_SiteABar🌕 check_launch_icon_shown🌕 +install_create_shortcut_windowed_SiteAFoo🌕 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteARoot🌕 navigate_browser_SiteAFoo🌕 check_install_icon_not_shown🌕 +install_omnibox_icon_SiteAFoo🌕 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteARoot🌕 navigate_browser_SiteAFoo🌕 check_install_icon_not_shown🌕 +install_menu_option_SiteAFoo🌕 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteARoot🌕 navigate_browser_SiteAFoo🌕 check_install_icon_not_shown🌕 +install_create_shortcut_windowed_SiteAFoo🌕 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteARoot🌕 navigate_browser_SiteAFoo🌕 check_launch_icon_shown🌕 +install_omnibox_icon_SiteAFoo🌕 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteARoot🌕 navigate_browser_SiteAFoo🌕 check_launch_icon_shown🌕 +install_menu_option_SiteAFoo🌕 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteARoot🌕 navigate_browser_SiteAFoo🌕 check_launch_icon_shown🌕 +switch_incognito_profile🌑 navigate_browser_SiteA🌑 check_create_shortcut_not_shown🌑 +switch_incognito_profile🌑 navigate_browser_SiteC🌑 check_create_shortcut_not_shown🌑 +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🌕 +navigate_browser_SiteA🌕 check_create_shortcut_shown🌑 +navigate_browser_SiteAFoo🌕 check_install_icon_shown🌕 +navigate_browser_SiteC🌕 check_create_shortcut_shown🌑 +navigate_browser_SiteC🌕 check_install_icon_not_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_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🌕 +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🌕 +install_create_shortcut_windowed_SiteA🌕 navigate_pwa_site_a_to_SiteB🌕 check_app_title_site_a_is_SiteA🌑 +install_omnibox_icon_SiteA🌕 navigate_pwa_site_a_to_SiteB🌕 check_app_title_site_a_is_SiteA🌑 +install_menu_option_SiteA🌕 navigate_pwa_site_a_to_SiteB🌕 check_app_title_site_a_is_SiteA🌑 +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🌑 +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_SiteWco🌕 check_window_controls_overlay_toggle_SiteWco_Shown🌕 +install_omnibox_icon_SiteWco🌕 check_window_controls_overlay_toggle_SiteWco_Shown🌕 +install_policy_app_windowed_no_shortcut_SiteWco🌓 check_window_controls_overlay_toggle_SiteWco_Shown🌕 +install_policy_app_windowed_shortcut_SiteWco🌓 check_window_controls_overlay_toggle_SiteWco_Shown🌕 +install_menu_option_SiteWco🌕 check_window_controls_overlay_toggle_SiteWco_Shown🌕 +install_create_shortcut_windowed_SiteA🌕 check_window_controls_overlay_toggle_SiteA_NotShown🌕 +install_omnibox_icon_SiteA🌕 check_window_controls_overlay_toggle_SiteA_NotShown🌕 +install_policy_app_windowed_no_shortcut_SiteA🌓 check_window_controls_overlay_toggle_SiteA_NotShown🌕 +install_policy_app_windowed_shortcut_SiteA🌓 check_window_controls_overlay_toggle_SiteA_NotShown🌕 +install_menu_option_SiteA🌕 check_window_controls_overlay_toggle_SiteA_NotShown🌕 +install_create_shortcut_windowed_SiteWco🌕 enable_window_controls_overlay_SiteWco🌕 check_window_controls_overlay_SiteWco_On🌕 +install_omnibox_icon_SiteWco🌕 enable_window_controls_overlay_SiteWco🌕 check_window_controls_overlay_SiteWco_On🌕 +install_policy_app_windowed_no_shortcut_SiteWco🌓 enable_window_controls_overlay_SiteWco🌕 check_window_controls_overlay_SiteWco_On🌕 +install_policy_app_windowed_shortcut_SiteWco🌓 enable_window_controls_overlay_SiteWco🌕 check_window_controls_overlay_SiteWco_On🌕 +install_menu_option_SiteWco🌕 enable_window_controls_overlay_SiteWco🌕 check_window_controls_overlay_SiteWco_On🌕 +install_create_shortcut_windowed_SiteWco🌕 enable_window_controls_overlay_SiteWco🌕 check_window_controls_overlay_toggle_SiteWco_Shown🌕 +install_omnibox_icon_SiteWco🌕 enable_window_controls_overlay_SiteWco🌕 check_window_controls_overlay_toggle_SiteWco_Shown🌕 +install_policy_app_windowed_no_shortcut_SiteWco🌓 enable_window_controls_overlay_SiteWco🌕 check_window_controls_overlay_toggle_SiteWco_Shown🌕 +install_policy_app_windowed_shortcut_SiteWco🌓 enable_window_controls_overlay_SiteWco🌕 check_window_controls_overlay_toggle_SiteWco_Shown🌕 +install_menu_option_SiteWco🌕 enable_window_controls_overlay_SiteWco🌕 check_window_controls_overlay_toggle_SiteWco_Shown🌕 +install_create_shortcut_windowed_SiteWco🌕 enable_window_controls_overlay_SiteWco🌕 disable_window_controls_overlay_SiteWco🌕 check_window_controls_overlay_SiteWco_Off🌕 +install_omnibox_icon_SiteWco🌕 enable_window_controls_overlay_SiteWco🌕 disable_window_controls_overlay_SiteWco🌕 check_window_controls_overlay_SiteWco_Off🌕 +install_policy_app_windowed_no_shortcut_SiteWco🌓 enable_window_controls_overlay_SiteWco🌕 disable_window_controls_overlay_SiteWco🌕 check_window_controls_overlay_SiteWco_Off🌕 +install_policy_app_windowed_shortcut_SiteWco🌓 enable_window_controls_overlay_SiteWco🌕 disable_window_controls_overlay_SiteWco🌕 check_window_controls_overlay_SiteWco_Off🌕 +install_menu_option_SiteWco🌕 enable_window_controls_overlay_SiteWco🌕 disable_window_controls_overlay_SiteWco🌕 check_window_controls_overlay_SiteWco_Off🌕 +install_create_shortcut_windowed_SiteWco🌕 enable_window_controls_overlay_SiteWco🌕 disable_window_controls_overlay_SiteWco🌕 check_window_controls_overlay_toggle_SiteWco_Shown🌕 +install_omnibox_icon_SiteWco🌕 enable_window_controls_overlay_SiteWco🌕 disable_window_controls_overlay_SiteWco🌕 check_window_controls_overlay_toggle_SiteWco_Shown🌕 +install_policy_app_windowed_no_shortcut_SiteWco🌓 enable_window_controls_overlay_SiteWco🌕 disable_window_controls_overlay_SiteWco🌕 check_window_controls_overlay_toggle_SiteWco_Shown🌕 +install_policy_app_windowed_shortcut_SiteWco🌓 enable_window_controls_overlay_SiteWco🌕 disable_window_controls_overlay_SiteWco🌕 check_window_controls_overlay_toggle_SiteWco_Shown🌕 +install_menu_option_SiteWco🌕 enable_window_controls_overlay_SiteWco🌕 disable_window_controls_overlay_SiteWco🌕 check_window_controls_overlay_toggle_SiteWco_Shown🌕 +install_create_shortcut_windowed_SiteWco🌕 enable_window_controls_overlay_SiteWco🌕 launch_from_menu_option_SiteWco🌕 check_window_controls_overlay_SiteWco_On🌕 +install_create_shortcut_windowed_SiteWco🌕 enable_window_controls_overlay_SiteWco🌕 launch_from_launch_icon_SiteWco🌕 check_window_controls_overlay_SiteWco_On🌕 +install_create_shortcut_windowed_SiteWco🌕 enable_window_controls_overlay_SiteWco🌕 launch_from_chrome_apps_SiteWco🌓 check_window_controls_overlay_SiteWco_On🌕 +install_create_shortcut_windowed_SiteWco🌕 enable_window_controls_overlay_SiteWco🌕 launch_from_platform_shortcut_SiteWco🌑 check_window_controls_overlay_SiteWco_On🌑 +install_omnibox_icon_SiteWco🌕 enable_window_controls_overlay_SiteWco🌕 launch_from_menu_option_SiteWco🌕 check_window_controls_overlay_SiteWco_On🌕 +install_omnibox_icon_SiteWco🌕 enable_window_controls_overlay_SiteWco🌕 launch_from_launch_icon_SiteWco🌕 check_window_controls_overlay_SiteWco_On🌕 +install_omnibox_icon_SiteWco🌕 enable_window_controls_overlay_SiteWco🌕 launch_from_chrome_apps_SiteWco🌓 check_window_controls_overlay_SiteWco_On🌕 +install_omnibox_icon_SiteWco🌕 enable_window_controls_overlay_SiteWco🌕 launch_from_platform_shortcut_SiteWco🌑 check_window_controls_overlay_SiteWco_On🌑 +install_policy_app_windowed_no_shortcut_SiteWco🌓 enable_window_controls_overlay_SiteWco🌕 launch_from_menu_option_SiteWco🌕 check_window_controls_overlay_SiteWco_On🌕 +install_policy_app_windowed_no_shortcut_SiteWco🌓 enable_window_controls_overlay_SiteWco🌕 launch_from_launch_icon_SiteWco🌕 check_window_controls_overlay_SiteWco_On🌕 +install_policy_app_windowed_no_shortcut_SiteWco🌓 enable_window_controls_overlay_SiteWco🌕 launch_from_chrome_apps_SiteWco🌓 check_window_controls_overlay_SiteWco_On🌕 +install_policy_app_windowed_no_shortcut_SiteWco🌓 enable_window_controls_overlay_SiteWco🌕 launch_from_platform_shortcut_SiteWco🌑 check_window_controls_overlay_SiteWco_On🌑 +install_policy_app_windowed_shortcut_SiteWco🌓 enable_window_controls_overlay_SiteWco🌕 launch_from_menu_option_SiteWco🌕 check_window_controls_overlay_SiteWco_On🌕 +install_policy_app_windowed_shortcut_SiteWco🌓 enable_window_controls_overlay_SiteWco🌕 launch_from_launch_icon_SiteWco🌕 check_window_controls_overlay_SiteWco_On🌕 +install_policy_app_windowed_shortcut_SiteWco🌓 enable_window_controls_overlay_SiteWco🌕 launch_from_chrome_apps_SiteWco🌓 check_window_controls_overlay_SiteWco_On🌕 +install_policy_app_windowed_shortcut_SiteWco🌓 enable_window_controls_overlay_SiteWco🌕 launch_from_platform_shortcut_SiteWco🌑 check_window_controls_overlay_SiteWco_On🌑 +install_menu_option_SiteWco🌕 enable_window_controls_overlay_SiteWco🌕 launch_from_menu_option_SiteWco🌕 check_window_controls_overlay_SiteWco_On🌕 +install_menu_option_SiteWco🌕 enable_window_controls_overlay_SiteWco🌕 launch_from_launch_icon_SiteWco🌕 check_window_controls_overlay_SiteWco_On🌕 +install_menu_option_SiteWco🌕 enable_window_controls_overlay_SiteWco🌕 launch_from_chrome_apps_SiteWco🌓 check_window_controls_overlay_SiteWco_On🌕 +install_menu_option_SiteWco🌕 enable_window_controls_overlay_SiteWco🌕 launch_from_platform_shortcut_SiteWco🌑 check_window_controls_overlay_SiteWco_On🌑 +install_create_shortcut_windowed_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_menu_option_SiteB🌑 check_window_controls_overlay_toggle_SiteWco_Shown🌑 +install_create_shortcut_windowed_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_launch_icon_SiteB🌑 check_window_controls_overlay_toggle_SiteWco_Shown🌑 +install_create_shortcut_windowed_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_chrome_apps_SiteB🌑 check_window_controls_overlay_toggle_SiteWco_Shown🌑 +install_create_shortcut_windowed_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_platform_shortcut_SiteB🌑 check_window_controls_overlay_toggle_SiteWco_Shown🌑 +install_omnibox_icon_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_menu_option_SiteB🌑 check_window_controls_overlay_toggle_SiteWco_Shown🌑 +install_omnibox_icon_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_launch_icon_SiteB🌑 check_window_controls_overlay_toggle_SiteWco_Shown🌑 +install_omnibox_icon_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_chrome_apps_SiteB🌑 check_window_controls_overlay_toggle_SiteWco_Shown🌑 +install_omnibox_icon_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_platform_shortcut_SiteB🌑 check_window_controls_overlay_toggle_SiteWco_Shown🌑 +install_policy_app_windowed_no_shortcut_SiteB🌓 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_menu_option_SiteB🌑 check_window_controls_overlay_toggle_SiteWco_Shown🌑 +install_policy_app_windowed_no_shortcut_SiteB🌓 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_launch_icon_SiteB🌑 check_window_controls_overlay_toggle_SiteWco_Shown🌑 +install_policy_app_windowed_no_shortcut_SiteB🌓 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_chrome_apps_SiteB🌑 check_window_controls_overlay_toggle_SiteWco_Shown🌑 +install_policy_app_windowed_no_shortcut_SiteB🌓 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_platform_shortcut_SiteB🌑 check_window_controls_overlay_toggle_SiteWco_Shown🌑 +install_policy_app_windowed_shortcut_SiteB🌓 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_menu_option_SiteB🌑 check_window_controls_overlay_toggle_SiteWco_Shown🌑 +install_policy_app_windowed_shortcut_SiteB🌓 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_launch_icon_SiteB🌑 check_window_controls_overlay_toggle_SiteWco_Shown🌑 +install_policy_app_windowed_shortcut_SiteB🌓 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_chrome_apps_SiteB🌑 check_window_controls_overlay_toggle_SiteWco_Shown🌑 +install_policy_app_windowed_shortcut_SiteB🌓 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_platform_shortcut_SiteB🌑 check_window_controls_overlay_toggle_SiteWco_Shown🌑 +install_menu_option_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_menu_option_SiteB🌑 check_window_controls_overlay_toggle_SiteWco_Shown🌑 +install_menu_option_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_launch_icon_SiteB🌑 check_window_controls_overlay_toggle_SiteWco_Shown🌑 +install_menu_option_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_chrome_apps_SiteB🌑 check_window_controls_overlay_toggle_SiteWco_Shown🌑 +install_menu_option_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_platform_shortcut_SiteB🌑 check_window_controls_overlay_toggle_SiteWco_Shown🌑 +install_create_shortcut_windowed_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_menu_option_SiteB🌑 check_window_controls_overlay_toggle_SiteWco_Shown🌑 +install_create_shortcut_windowed_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_launch_icon_SiteB🌑 check_window_controls_overlay_toggle_SiteWco_Shown🌑 +install_create_shortcut_windowed_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_chrome_apps_SiteB🌑 check_window_controls_overlay_toggle_SiteWco_Shown🌑 +install_create_shortcut_windowed_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_platform_shortcut_SiteB🌑 check_window_controls_overlay_toggle_SiteWco_Shown🌑 +install_omnibox_icon_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_menu_option_SiteB🌑 check_window_controls_overlay_toggle_SiteWco_Shown🌑 +install_omnibox_icon_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_launch_icon_SiteB🌑 check_window_controls_overlay_toggle_SiteWco_Shown🌑 +install_omnibox_icon_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_chrome_apps_SiteB🌑 check_window_controls_overlay_toggle_SiteWco_Shown🌑 +install_omnibox_icon_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_platform_shortcut_SiteB🌑 check_window_controls_overlay_toggle_SiteWco_Shown🌑 +install_policy_app_windowed_no_shortcut_SiteB🌓 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_menu_option_SiteB🌑 check_window_controls_overlay_toggle_SiteWco_Shown🌑 +install_policy_app_windowed_no_shortcut_SiteB🌓 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_launch_icon_SiteB🌑 check_window_controls_overlay_toggle_SiteWco_Shown🌑 +install_policy_app_windowed_no_shortcut_SiteB🌓 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_chrome_apps_SiteB🌑 check_window_controls_overlay_toggle_SiteWco_Shown🌑 +install_policy_app_windowed_no_shortcut_SiteB🌓 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_platform_shortcut_SiteB🌑 check_window_controls_overlay_toggle_SiteWco_Shown🌑 +install_policy_app_windowed_shortcut_SiteB🌓 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_menu_option_SiteB🌑 check_window_controls_overlay_toggle_SiteWco_Shown🌑 +install_policy_app_windowed_shortcut_SiteB🌓 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_launch_icon_SiteB🌑 check_window_controls_overlay_toggle_SiteWco_Shown🌑 +install_policy_app_windowed_shortcut_SiteB🌓 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_chrome_apps_SiteB🌑 check_window_controls_overlay_toggle_SiteWco_Shown🌑 +install_policy_app_windowed_shortcut_SiteB🌓 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_platform_shortcut_SiteB🌑 check_window_controls_overlay_toggle_SiteWco_Shown🌑 +install_menu_option_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_menu_option_SiteB🌑 check_window_controls_overlay_toggle_SiteWco_Shown🌑 +install_menu_option_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_launch_icon_SiteB🌑 check_window_controls_overlay_toggle_SiteWco_Shown🌑 +install_menu_option_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_chrome_apps_SiteB🌑 check_window_controls_overlay_toggle_SiteWco_Shown🌑 +install_menu_option_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_platform_shortcut_SiteB🌑 check_window_controls_overlay_toggle_SiteWco_Shown🌑 +install_create_shortcut_windowed_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_menu_option_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_SiteB_Off🌑 +install_create_shortcut_windowed_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_launch_icon_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_SiteB_Off🌑 +install_create_shortcut_windowed_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_chrome_apps_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_SiteB_Off🌑 +install_create_shortcut_windowed_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_platform_shortcut_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_SiteB_Off🌑 +install_omnibox_icon_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_menu_option_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_SiteB_Off🌑 +install_omnibox_icon_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_launch_icon_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_SiteB_Off🌑 +install_omnibox_icon_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_chrome_apps_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_SiteB_Off🌑 +install_omnibox_icon_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_platform_shortcut_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_SiteB_Off🌑 +install_policy_app_windowed_no_shortcut_SiteB🌓 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_menu_option_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_SiteB_Off🌑 +install_policy_app_windowed_no_shortcut_SiteB🌓 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_launch_icon_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_SiteB_Off🌑 +install_policy_app_windowed_no_shortcut_SiteB🌓 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_chrome_apps_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_SiteB_Off🌑 +install_policy_app_windowed_no_shortcut_SiteB🌓 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_platform_shortcut_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_SiteB_Off🌑 +install_policy_app_windowed_shortcut_SiteB🌓 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_menu_option_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_SiteB_Off🌑 +install_policy_app_windowed_shortcut_SiteB🌓 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_launch_icon_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_SiteB_Off🌑 +install_policy_app_windowed_shortcut_SiteB🌓 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_chrome_apps_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_SiteB_Off🌑 +install_policy_app_windowed_shortcut_SiteB🌓 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_platform_shortcut_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_SiteB_Off🌑 +install_menu_option_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_menu_option_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_SiteB_Off🌑 +install_menu_option_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_launch_icon_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_SiteB_Off🌑 +install_menu_option_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_chrome_apps_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_SiteB_Off🌑 +install_menu_option_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_platform_shortcut_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_SiteB_Off🌑 +install_create_shortcut_windowed_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_menu_option_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_toggle_SiteB_Shown🌑 +install_create_shortcut_windowed_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_launch_icon_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_toggle_SiteB_Shown🌑 +install_create_shortcut_windowed_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_chrome_apps_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_toggle_SiteB_Shown🌑 +install_create_shortcut_windowed_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_platform_shortcut_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_toggle_SiteB_Shown🌑 +install_omnibox_icon_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_menu_option_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_toggle_SiteB_Shown🌑 +install_omnibox_icon_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_launch_icon_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_toggle_SiteB_Shown🌑 +install_omnibox_icon_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_chrome_apps_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_toggle_SiteB_Shown🌑 +install_omnibox_icon_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_platform_shortcut_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_toggle_SiteB_Shown🌑 +install_policy_app_windowed_no_shortcut_SiteB🌓 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_menu_option_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_toggle_SiteB_Shown🌑 +install_policy_app_windowed_no_shortcut_SiteB🌓 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_launch_icon_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_toggle_SiteB_Shown🌑 +install_policy_app_windowed_no_shortcut_SiteB🌓 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_chrome_apps_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_toggle_SiteB_Shown🌑 +install_policy_app_windowed_no_shortcut_SiteB🌓 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_platform_shortcut_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_toggle_SiteB_Shown🌑 +install_policy_app_windowed_shortcut_SiteB🌓 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_menu_option_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_toggle_SiteB_Shown🌑 +install_policy_app_windowed_shortcut_SiteB🌓 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_launch_icon_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_toggle_SiteB_Shown🌑 +install_policy_app_windowed_shortcut_SiteB🌓 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_chrome_apps_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_toggle_SiteB_Shown🌑 +install_policy_app_windowed_shortcut_SiteB🌓 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_platform_shortcut_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_toggle_SiteB_Shown🌑 +install_menu_option_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_menu_option_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_toggle_SiteB_Shown🌑 +install_menu_option_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_launch_icon_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_toggle_SiteB_Shown🌑 +install_menu_option_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_chrome_apps_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_toggle_SiteB_Shown🌑 +install_menu_option_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_platform_shortcut_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_toggle_SiteB_Shown🌑 +install_create_shortcut_windowed_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_menu_option_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_toggle_SiteB_Shown🌑 +install_create_shortcut_windowed_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_launch_icon_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_toggle_SiteB_Shown🌑 +install_create_shortcut_windowed_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_chrome_apps_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_toggle_SiteB_Shown🌑 +install_create_shortcut_windowed_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_platform_shortcut_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_toggle_SiteB_Shown🌑 +install_omnibox_icon_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_menu_option_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_toggle_SiteB_Shown🌑 +install_omnibox_icon_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_launch_icon_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_toggle_SiteB_Shown🌑 +install_omnibox_icon_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_chrome_apps_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_toggle_SiteB_Shown🌑 +install_omnibox_icon_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_platform_shortcut_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_toggle_SiteB_Shown🌑 +install_policy_app_windowed_no_shortcut_SiteB🌓 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_menu_option_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_toggle_SiteB_Shown🌑 +install_policy_app_windowed_no_shortcut_SiteB🌓 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_launch_icon_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_toggle_SiteB_Shown🌑 +install_policy_app_windowed_no_shortcut_SiteB🌓 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_chrome_apps_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_toggle_SiteB_Shown🌑 +install_policy_app_windowed_no_shortcut_SiteB🌓 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_platform_shortcut_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_toggle_SiteB_Shown🌑 +install_policy_app_windowed_shortcut_SiteB🌓 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_menu_option_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_toggle_SiteB_Shown🌑 +install_policy_app_windowed_shortcut_SiteB🌓 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_launch_icon_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_toggle_SiteB_Shown🌑 +install_policy_app_windowed_shortcut_SiteB🌓 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_chrome_apps_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_toggle_SiteB_Shown🌑 +install_policy_app_windowed_shortcut_SiteB🌓 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_platform_shortcut_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_toggle_SiteB_Shown🌑 +install_menu_option_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_menu_option_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_toggle_SiteB_Shown🌑 +install_menu_option_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_launch_icon_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_toggle_SiteB_Shown🌑 +install_menu_option_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_chrome_apps_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_toggle_SiteB_Shown🌑 +install_menu_option_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_platform_shortcut_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_toggle_SiteB_Shown🌑 +install_create_shortcut_windowed_SiteWco🌕 manifest_update_display_SiteWco_Standalone🌕 await_manifest_update_SiteWco🌑 launch_from_menu_option_SiteWco🌑 check_window_controls_overlay_toggle_SiteWco_NotShown🌑 +install_create_shortcut_windowed_SiteWco🌕 manifest_update_display_SiteWco_Standalone🌕 await_manifest_update_SiteWco🌑 launch_from_launch_icon_SiteWco🌑 check_window_controls_overlay_toggle_SiteWco_NotShown🌑 +install_create_shortcut_windowed_SiteWco🌕 manifest_update_display_SiteWco_Standalone🌕 await_manifest_update_SiteWco🌑 launch_from_chrome_apps_SiteWco🌑 check_window_controls_overlay_toggle_SiteWco_NotShown🌑 +install_create_shortcut_windowed_SiteWco🌕 manifest_update_display_SiteWco_Standalone🌕 await_manifest_update_SiteWco🌑 launch_from_platform_shortcut_SiteWco🌑 check_window_controls_overlay_toggle_SiteWco_NotShown🌑 +install_omnibox_icon_SiteWco🌕 manifest_update_display_SiteWco_Standalone🌕 await_manifest_update_SiteWco🌑 launch_from_menu_option_SiteWco🌑 check_window_controls_overlay_toggle_SiteWco_NotShown🌑 +install_omnibox_icon_SiteWco🌕 manifest_update_display_SiteWco_Standalone🌕 await_manifest_update_SiteWco🌑 launch_from_launch_icon_SiteWco🌑 check_window_controls_overlay_toggle_SiteWco_NotShown🌑 +install_omnibox_icon_SiteWco🌕 manifest_update_display_SiteWco_Standalone🌕 await_manifest_update_SiteWco🌑 launch_from_chrome_apps_SiteWco🌑 check_window_controls_overlay_toggle_SiteWco_NotShown🌑 +install_omnibox_icon_SiteWco🌕 manifest_update_display_SiteWco_Standalone🌕 await_manifest_update_SiteWco🌑 launch_from_platform_shortcut_SiteWco🌑 check_window_controls_overlay_toggle_SiteWco_NotShown🌑 +install_policy_app_windowed_no_shortcut_SiteWco🌓 manifest_update_display_SiteWco_Standalone🌕 await_manifest_update_SiteWco🌑 launch_from_menu_option_SiteWco🌑 check_window_controls_overlay_toggle_SiteWco_NotShown🌑 +install_policy_app_windowed_no_shortcut_SiteWco🌓 manifest_update_display_SiteWco_Standalone🌕 await_manifest_update_SiteWco🌑 launch_from_launch_icon_SiteWco🌑 check_window_controls_overlay_toggle_SiteWco_NotShown🌑 +install_policy_app_windowed_no_shortcut_SiteWco🌓 manifest_update_display_SiteWco_Standalone🌕 await_manifest_update_SiteWco🌑 launch_from_chrome_apps_SiteWco🌑 check_window_controls_overlay_toggle_SiteWco_NotShown🌑 +install_policy_app_windowed_no_shortcut_SiteWco🌓 manifest_update_display_SiteWco_Standalone🌕 await_manifest_update_SiteWco🌑 launch_from_platform_shortcut_SiteWco🌑 check_window_controls_overlay_toggle_SiteWco_NotShown🌑 +install_policy_app_windowed_shortcut_SiteWco🌓 manifest_update_display_SiteWco_Standalone🌕 await_manifest_update_SiteWco🌑 launch_from_menu_option_SiteWco🌑 check_window_controls_overlay_toggle_SiteWco_NotShown🌑 +install_policy_app_windowed_shortcut_SiteWco🌓 manifest_update_display_SiteWco_Standalone🌕 await_manifest_update_SiteWco🌑 launch_from_launch_icon_SiteWco🌑 check_window_controls_overlay_toggle_SiteWco_NotShown🌑 +install_policy_app_windowed_shortcut_SiteWco🌓 manifest_update_display_SiteWco_Standalone🌕 await_manifest_update_SiteWco🌑 launch_from_chrome_apps_SiteWco🌑 check_window_controls_overlay_toggle_SiteWco_NotShown🌑 +install_policy_app_windowed_shortcut_SiteWco🌓 manifest_update_display_SiteWco_Standalone🌕 await_manifest_update_SiteWco🌑 launch_from_platform_shortcut_SiteWco🌑 check_window_controls_overlay_toggle_SiteWco_NotShown🌑 +install_menu_option_SiteWco🌕 manifest_update_display_SiteWco_Standalone🌕 await_manifest_update_SiteWco🌑 launch_from_menu_option_SiteWco🌑 check_window_controls_overlay_toggle_SiteWco_NotShown🌑 +install_menu_option_SiteWco🌕 manifest_update_display_SiteWco_Standalone🌕 await_manifest_update_SiteWco🌑 launch_from_launch_icon_SiteWco🌑 check_window_controls_overlay_toggle_SiteWco_NotShown🌑 +install_menu_option_SiteWco🌕 manifest_update_display_SiteWco_Standalone🌕 await_manifest_update_SiteWco🌑 launch_from_chrome_apps_SiteWco🌑 check_window_controls_overlay_toggle_SiteWco_NotShown🌑 +install_menu_option_SiteWco🌕 manifest_update_display_SiteWco_Standalone🌕 await_manifest_update_SiteWco🌑 launch_from_platform_shortcut_SiteWco🌑 check_window_controls_overlay_toggle_SiteWco_NotShown🌑 +install_create_shortcut_windowed_SiteWco🌕 manifest_update_display_SiteWco_Standalone🌕 await_manifest_update_SiteWco🌑 launch_from_menu_option_SiteWco🌑 check_window_controls_overlay_SiteWco_Off🌑 +install_create_shortcut_windowed_SiteWco🌕 manifest_update_display_SiteWco_Standalone🌕 await_manifest_update_SiteWco🌑 launch_from_launch_icon_SiteWco🌑 check_window_controls_overlay_SiteWco_Off🌑 +install_create_shortcut_windowed_SiteWco🌕 manifest_update_display_SiteWco_Standalone🌕 await_manifest_update_SiteWco🌑 launch_from_chrome_apps_SiteWco🌑 check_window_controls_overlay_SiteWco_Off🌑 +install_create_shortcut_windowed_SiteWco🌕 manifest_update_display_SiteWco_Standalone🌕 await_manifest_update_SiteWco🌑 launch_from_platform_shortcut_SiteWco🌑 check_window_controls_overlay_SiteWco_Off🌑 +install_omnibox_icon_SiteWco🌕 manifest_update_display_SiteWco_Standalone🌕 await_manifest_update_SiteWco🌑 launch_from_menu_option_SiteWco🌑 check_window_controls_overlay_SiteWco_Off🌑 +install_omnibox_icon_SiteWco🌕 manifest_update_display_SiteWco_Standalone🌕 await_manifest_update_SiteWco🌑 launch_from_launch_icon_SiteWco🌑 check_window_controls_overlay_SiteWco_Off🌑 +install_omnibox_icon_SiteWco🌕 manifest_update_display_SiteWco_Standalone🌕 await_manifest_update_SiteWco🌑 launch_from_chrome_apps_SiteWco🌑 check_window_controls_overlay_SiteWco_Off🌑 +install_omnibox_icon_SiteWco🌕 manifest_update_display_SiteWco_Standalone🌕 await_manifest_update_SiteWco🌑 launch_from_platform_shortcut_SiteWco🌑 check_window_controls_overlay_SiteWco_Off🌑 +install_policy_app_windowed_no_shortcut_SiteWco🌓 manifest_update_display_SiteWco_Standalone🌕 await_manifest_update_SiteWco🌑 launch_from_menu_option_SiteWco🌑 check_window_controls_overlay_SiteWco_Off🌑 +install_policy_app_windowed_no_shortcut_SiteWco🌓 manifest_update_display_SiteWco_Standalone🌕 await_manifest_update_SiteWco🌑 launch_from_launch_icon_SiteWco🌑 check_window_controls_overlay_SiteWco_Off🌑 +install_policy_app_windowed_no_shortcut_SiteWco🌓 manifest_update_display_SiteWco_Standalone🌕 await_manifest_update_SiteWco🌑 launch_from_chrome_apps_SiteWco🌑 check_window_controls_overlay_SiteWco_Off🌑 +install_policy_app_windowed_no_shortcut_SiteWco🌓 manifest_update_display_SiteWco_Standalone🌕 await_manifest_update_SiteWco🌑 launch_from_platform_shortcut_SiteWco🌑 check_window_controls_overlay_SiteWco_Off🌑 +install_policy_app_windowed_shortcut_SiteWco🌓 manifest_update_display_SiteWco_Standalone🌕 await_manifest_update_SiteWco🌑 launch_from_menu_option_SiteWco🌑 check_window_controls_overlay_SiteWco_Off🌑 +install_policy_app_windowed_shortcut_SiteWco🌓 manifest_update_display_SiteWco_Standalone🌕 await_manifest_update_SiteWco🌑 launch_from_launch_icon_SiteWco🌑 check_window_controls_overlay_SiteWco_Off🌑 +install_policy_app_windowed_shortcut_SiteWco🌓 manifest_update_display_SiteWco_Standalone🌕 await_manifest_update_SiteWco🌑 launch_from_chrome_apps_SiteWco🌑 check_window_controls_overlay_SiteWco_Off🌑 +install_policy_app_windowed_shortcut_SiteWco🌓 manifest_update_display_SiteWco_Standalone🌕 await_manifest_update_SiteWco🌑 launch_from_platform_shortcut_SiteWco🌑 check_window_controls_overlay_SiteWco_Off🌑 +install_menu_option_SiteWco🌕 manifest_update_display_SiteWco_Standalone🌕 await_manifest_update_SiteWco🌑 launch_from_menu_option_SiteWco🌑 check_window_controls_overlay_SiteWco_Off🌑 +install_menu_option_SiteWco🌕 manifest_update_display_SiteWco_Standalone🌕 await_manifest_update_SiteWco🌑 launch_from_launch_icon_SiteWco🌑 check_window_controls_overlay_SiteWco_Off🌑 +install_menu_option_SiteWco🌕 manifest_update_display_SiteWco_Standalone🌕 await_manifest_update_SiteWco🌑 launch_from_chrome_apps_SiteWco🌑 check_window_controls_overlay_SiteWco_Off🌑 +install_menu_option_SiteWco🌕 manifest_update_display_SiteWco_Standalone🌕 await_manifest_update_SiteWco🌑 launch_from_platform_shortcut_SiteWco🌑 check_window_controls_overlay_SiteWco_Off🌑 +install_create_shortcut_windowed_SiteB🌕 check_site_handles_file_SiteB_Txt🌑 check_site_handles_file_SiteB_Png🌑 +install_omnibox_icon_SiteB🌕 check_site_handles_file_SiteB_Txt🌑 check_site_handles_file_SiteB_Png🌑 +install_policy_app_windowed_no_shortcut_SiteB🌓 check_site_handles_file_SiteB_Txt🌑 check_site_handles_file_SiteB_Png🌑 +install_policy_app_windowed_shortcut_SiteB🌓 check_site_handles_file_SiteB_Txt🌑 check_site_handles_file_SiteB_Png🌑 +install_menu_option_SiteB🌕 check_site_handles_file_SiteB_Txt🌑 check_site_handles_file_SiteB_Png🌑 +install_create_shortcut_tabbed_SiteB🌕 check_site_handles_file_SiteB_Txt🌑 check_site_handles_file_SiteB_Png🌑 +install_policy_app_tabbed_shortcut_SiteB🌓 check_site_handles_file_SiteB_Txt🌑 check_site_handles_file_SiteB_Png🌑 +install_policy_app_tabbed_no_shortcut_SiteB🌓 check_site_handles_file_SiteB_Txt🌑 check_site_handles_file_SiteB_Png🌑 +install_create_shortcut_windowed_SiteB🌕 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 +install_omnibox_icon_SiteB🌕 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 +install_policy_app_windowed_no_shortcut_SiteB🌓 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 +install_policy_app_windowed_shortcut_SiteB🌓 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 +install_menu_option_SiteB🌕 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 +install_create_shortcut_tabbed_SiteB🌕 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 +install_policy_app_tabbed_shortcut_SiteB🌓 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 +install_policy_app_tabbed_no_shortcut_SiteB🌓 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 +install_create_shortcut_windowed_SiteB🌕 launch_file_OneTextFile🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_One🌑 check_files_loaded_in_site_SiteB_OneTextFile🌑 +install_omnibox_icon_SiteB🌕 launch_file_OneTextFile🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_One🌑 check_files_loaded_in_site_SiteB_OneTextFile🌑 +install_policy_app_windowed_no_shortcut_SiteB🌓 launch_file_OneTextFile🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_One🌑 check_files_loaded_in_site_SiteB_OneTextFile🌑 +install_policy_app_windowed_shortcut_SiteB🌓 launch_file_OneTextFile🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_One🌑 check_files_loaded_in_site_SiteB_OneTextFile🌑 +install_menu_option_SiteB🌕 launch_file_OneTextFile🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_One🌑 check_files_loaded_in_site_SiteB_OneTextFile🌑 +install_create_shortcut_tabbed_SiteB🌕 launch_file_OneTextFile🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_One🌑 check_files_loaded_in_site_SiteB_OneTextFile🌑 +install_policy_app_tabbed_shortcut_SiteB🌓 launch_file_OneTextFile🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_One🌑 check_files_loaded_in_site_SiteB_OneTextFile🌑 +install_policy_app_tabbed_no_shortcut_SiteB🌓 launch_file_OneTextFile🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_One🌑 check_files_loaded_in_site_SiteB_OneTextFile🌑 +install_create_shortcut_windowed_SiteB🌕 launch_file_MultipleTextFiles🌑 check_file_handling_dialog_Shown🌑 +install_omnibox_icon_SiteB🌕 launch_file_MultipleTextFiles🌑 check_file_handling_dialog_Shown🌑 +install_policy_app_windowed_no_shortcut_SiteB🌓 launch_file_MultipleTextFiles🌑 check_file_handling_dialog_Shown🌑 +install_policy_app_windowed_shortcut_SiteB🌓 launch_file_MultipleTextFiles🌑 check_file_handling_dialog_Shown🌑 +install_menu_option_SiteB🌕 launch_file_MultipleTextFiles🌑 check_file_handling_dialog_Shown🌑 +install_create_shortcut_tabbed_SiteB🌕 launch_file_MultipleTextFiles🌑 check_file_handling_dialog_Shown🌑 +install_policy_app_tabbed_shortcut_SiteB🌓 launch_file_MultipleTextFiles🌑 check_file_handling_dialog_Shown🌑 +install_policy_app_tabbed_no_shortcut_SiteB🌓 launch_file_MultipleTextFiles🌑 check_file_handling_dialog_Shown🌑 +install_create_shortcut_windowed_SiteB🌕 launch_file_MultipleTextFiles🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_One🌑 check_files_loaded_in_site_SiteB_MultipleTextFiles🌑 +install_omnibox_icon_SiteB🌕 launch_file_MultipleTextFiles🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_One🌑 check_files_loaded_in_site_SiteB_MultipleTextFiles🌑 +install_policy_app_windowed_no_shortcut_SiteB🌓 launch_file_MultipleTextFiles🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_One🌑 check_files_loaded_in_site_SiteB_MultipleTextFiles🌑 +install_policy_app_windowed_shortcut_SiteB🌓 launch_file_MultipleTextFiles🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_One🌑 check_files_loaded_in_site_SiteB_MultipleTextFiles🌑 +install_menu_option_SiteB🌕 launch_file_MultipleTextFiles🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_One🌑 check_files_loaded_in_site_SiteB_MultipleTextFiles🌑 +install_create_shortcut_tabbed_SiteB🌕 launch_file_MultipleTextFiles🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_One🌑 check_files_loaded_in_site_SiteB_MultipleTextFiles🌑 +install_policy_app_tabbed_shortcut_SiteB🌓 launch_file_MultipleTextFiles🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_One🌑 check_files_loaded_in_site_SiteB_MultipleTextFiles🌑 +install_policy_app_tabbed_no_shortcut_SiteB🌓 launch_file_MultipleTextFiles🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_One🌑 check_files_loaded_in_site_SiteB_MultipleTextFiles🌑 +install_create_shortcut_windowed_SiteB🌕 launch_file_OnePngFile🌑 check_file_handling_dialog_Shown🌑 +install_omnibox_icon_SiteB🌕 launch_file_OnePngFile🌑 check_file_handling_dialog_Shown🌑 +install_policy_app_windowed_no_shortcut_SiteB🌓 launch_file_OnePngFile🌑 check_file_handling_dialog_Shown🌑 +install_policy_app_windowed_shortcut_SiteB🌓 launch_file_OnePngFile🌑 check_file_handling_dialog_Shown🌑 +install_menu_option_SiteB🌕 launch_file_OnePngFile🌑 check_file_handling_dialog_Shown🌑 +install_create_shortcut_tabbed_SiteB🌕 launch_file_OnePngFile🌑 check_file_handling_dialog_Shown🌑 +install_policy_app_tabbed_shortcut_SiteB🌓 launch_file_OnePngFile🌑 check_file_handling_dialog_Shown🌑 +install_policy_app_tabbed_no_shortcut_SiteB🌓 launch_file_OnePngFile🌑 check_file_handling_dialog_Shown🌑 +install_create_shortcut_windowed_SiteB🌕 launch_file_OnePngFile🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_One🌑 check_files_loaded_in_site_SiteB_OnePngFile🌑 +install_omnibox_icon_SiteB🌕 launch_file_OnePngFile🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_One🌑 check_files_loaded_in_site_SiteB_OnePngFile🌑 +install_policy_app_windowed_no_shortcut_SiteB🌓 launch_file_OnePngFile🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_One🌑 check_files_loaded_in_site_SiteB_OnePngFile🌑 +install_policy_app_windowed_shortcut_SiteB🌓 launch_file_OnePngFile🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_One🌑 check_files_loaded_in_site_SiteB_OnePngFile🌑 +install_menu_option_SiteB🌕 launch_file_OnePngFile🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_One🌑 check_files_loaded_in_site_SiteB_OnePngFile🌑 +install_create_shortcut_tabbed_SiteB🌕 launch_file_OnePngFile🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_One🌑 check_files_loaded_in_site_SiteB_OnePngFile🌑 +install_policy_app_tabbed_shortcut_SiteB🌓 launch_file_OnePngFile🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_One🌑 check_files_loaded_in_site_SiteB_OnePngFile🌑 +install_policy_app_tabbed_no_shortcut_SiteB🌓 launch_file_OnePngFile🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_One🌑 check_files_loaded_in_site_SiteB_OnePngFile🌑 +install_create_shortcut_windowed_SiteB🌕 launch_file_MultiplePngFiles🌑 check_file_handling_dialog_Shown🌑 +install_omnibox_icon_SiteB🌕 launch_file_MultiplePngFiles🌑 check_file_handling_dialog_Shown🌑 +install_policy_app_windowed_no_shortcut_SiteB🌓 launch_file_MultiplePngFiles🌑 check_file_handling_dialog_Shown🌑 +install_policy_app_windowed_shortcut_SiteB🌓 launch_file_MultiplePngFiles🌑 check_file_handling_dialog_Shown🌑 +install_menu_option_SiteB🌕 launch_file_MultiplePngFiles🌑 check_file_handling_dialog_Shown🌑 +install_create_shortcut_tabbed_SiteB🌕 launch_file_MultiplePngFiles🌑 check_file_handling_dialog_Shown🌑 +install_policy_app_tabbed_shortcut_SiteB🌓 launch_file_MultiplePngFiles🌑 check_file_handling_dialog_Shown🌑 +install_policy_app_tabbed_no_shortcut_SiteB🌓 launch_file_MultiplePngFiles🌑 check_file_handling_dialog_Shown🌑 +install_create_shortcut_windowed_SiteB🌕 launch_file_MultiplePngFiles🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_Two🌑 check_files_loaded_in_site_SiteB_MultiplePngFiles🌑 +install_omnibox_icon_SiteB🌕 launch_file_MultiplePngFiles🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_Two🌑 check_files_loaded_in_site_SiteB_MultiplePngFiles🌑 +install_policy_app_windowed_no_shortcut_SiteB🌓 launch_file_MultiplePngFiles🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_Two🌑 check_files_loaded_in_site_SiteB_MultiplePngFiles🌑 +install_policy_app_windowed_shortcut_SiteB🌓 launch_file_MultiplePngFiles🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_Two🌑 check_files_loaded_in_site_SiteB_MultiplePngFiles🌑 +install_menu_option_SiteB🌕 launch_file_MultiplePngFiles🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_Two🌑 check_files_loaded_in_site_SiteB_MultiplePngFiles🌑 +install_create_shortcut_tabbed_SiteB🌕 launch_file_MultiplePngFiles🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_Two🌑 check_files_loaded_in_site_SiteB_MultiplePngFiles🌑 +install_policy_app_tabbed_shortcut_SiteB🌓 launch_file_MultiplePngFiles🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_Two🌑 check_files_loaded_in_site_SiteB_MultiplePngFiles🌑 +install_policy_app_tabbed_no_shortcut_SiteB🌓 launch_file_MultiplePngFiles🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_Two🌑 check_files_loaded_in_site_SiteB_MultiplePngFiles🌑 +install_create_shortcut_windowed_SiteB🌕 launch_file_OneTextFile🌑 file_handling_dialog_Allow_Remember🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_NotShown🌑 check_pwa_window_created_SiteB_One🌑 +install_omnibox_icon_SiteB🌕 launch_file_OneTextFile🌑 file_handling_dialog_Allow_Remember🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_NotShown🌑 check_pwa_window_created_SiteB_One🌑 +install_policy_app_windowed_no_shortcut_SiteB🌓 launch_file_OneTextFile🌑 file_handling_dialog_Allow_Remember🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_NotShown🌑 check_pwa_window_created_SiteB_One🌑 +install_policy_app_windowed_shortcut_SiteB🌓 launch_file_OneTextFile🌑 file_handling_dialog_Allow_Remember🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_NotShown🌑 check_pwa_window_created_SiteB_One🌑 +install_menu_option_SiteB🌕 launch_file_OneTextFile🌑 file_handling_dialog_Allow_Remember🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_NotShown🌑 check_pwa_window_created_SiteB_One🌑 +install_create_shortcut_tabbed_SiteB🌕 launch_file_OneTextFile🌑 file_handling_dialog_Allow_Remember🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_NotShown🌑 check_pwa_window_created_SiteB_One🌑 +install_policy_app_tabbed_shortcut_SiteB🌓 launch_file_OneTextFile🌑 file_handling_dialog_Allow_Remember🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_NotShown🌑 check_pwa_window_created_SiteB_One🌑 +install_policy_app_tabbed_no_shortcut_SiteB🌓 launch_file_OneTextFile🌑 file_handling_dialog_Allow_Remember🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_NotShown🌑 check_pwa_window_created_SiteB_One🌑 +install_create_shortcut_windowed_SiteB🌕 launch_file_OneTextFile🌑 file_handling_dialog_Allow_AskAgain🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 +install_omnibox_icon_SiteB🌕 launch_file_OneTextFile🌑 file_handling_dialog_Allow_AskAgain🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 +install_policy_app_windowed_no_shortcut_SiteB🌓 launch_file_OneTextFile🌑 file_handling_dialog_Allow_AskAgain🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 +install_policy_app_windowed_shortcut_SiteB🌓 launch_file_OneTextFile🌑 file_handling_dialog_Allow_AskAgain🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 +install_menu_option_SiteB🌕 launch_file_OneTextFile🌑 file_handling_dialog_Allow_AskAgain🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 +install_create_shortcut_tabbed_SiteB🌕 launch_file_OneTextFile🌑 file_handling_dialog_Allow_AskAgain🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 +install_policy_app_tabbed_shortcut_SiteB🌓 launch_file_OneTextFile🌑 file_handling_dialog_Allow_AskAgain🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 +install_policy_app_tabbed_no_shortcut_SiteB🌓 launch_file_OneTextFile🌑 file_handling_dialog_Allow_AskAgain🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 +install_create_shortcut_windowed_SiteB🌕 launch_file_OneTextFile🌑 file_handling_dialog_Deny_AskAgain🌑 check_window_not_created🌑 check_site_handles_file_SiteB_Txt🌑 check_site_handles_file_SiteB_Png🌑 +install_omnibox_icon_SiteB🌕 launch_file_OneTextFile🌑 file_handling_dialog_Deny_AskAgain🌑 check_window_not_created🌑 check_site_handles_file_SiteB_Txt🌑 check_site_handles_file_SiteB_Png🌑 +install_policy_app_windowed_no_shortcut_SiteB🌓 launch_file_OneTextFile🌑 file_handling_dialog_Deny_AskAgain🌑 check_window_not_created🌑 check_site_handles_file_SiteB_Txt🌑 check_site_handles_file_SiteB_Png🌑 +install_policy_app_windowed_shortcut_SiteB🌓 launch_file_OneTextFile🌑 file_handling_dialog_Deny_AskAgain🌑 check_window_not_created🌑 check_site_handles_file_SiteB_Txt🌑 check_site_handles_file_SiteB_Png🌑 +install_menu_option_SiteB🌕 launch_file_OneTextFile🌑 file_handling_dialog_Deny_AskAgain🌑 check_window_not_created🌑 check_site_handles_file_SiteB_Txt🌑 check_site_handles_file_SiteB_Png🌑 +install_create_shortcut_tabbed_SiteB🌕 launch_file_OneTextFile🌑 file_handling_dialog_Deny_AskAgain🌑 check_window_not_created🌑 check_site_handles_file_SiteB_Txt🌑 check_site_handles_file_SiteB_Png🌑 +install_policy_app_tabbed_shortcut_SiteB🌓 launch_file_OneTextFile🌑 file_handling_dialog_Deny_AskAgain🌑 check_window_not_created🌑 check_site_handles_file_SiteB_Txt🌑 check_site_handles_file_SiteB_Png🌑 +install_policy_app_tabbed_no_shortcut_SiteB🌓 launch_file_OneTextFile🌑 file_handling_dialog_Deny_AskAgain🌑 check_window_not_created🌑 check_site_handles_file_SiteB_Txt🌑 check_site_handles_file_SiteB_Png🌑 +install_create_shortcut_windowed_SiteB🌕 launch_file_OneTextFile🌑 file_handling_dialog_Deny_AskAgain🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 +install_omnibox_icon_SiteB🌕 launch_file_OneTextFile🌑 file_handling_dialog_Deny_AskAgain🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 +install_policy_app_windowed_no_shortcut_SiteB🌓 launch_file_OneTextFile🌑 file_handling_dialog_Deny_AskAgain🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 +install_policy_app_windowed_shortcut_SiteB🌓 launch_file_OneTextFile🌑 file_handling_dialog_Deny_AskAgain🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 +install_menu_option_SiteB🌕 launch_file_OneTextFile🌑 file_handling_dialog_Deny_AskAgain🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 +install_create_shortcut_tabbed_SiteB🌕 launch_file_OneTextFile🌑 file_handling_dialog_Deny_AskAgain🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 +install_policy_app_tabbed_shortcut_SiteB🌓 launch_file_OneTextFile🌑 file_handling_dialog_Deny_AskAgain🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 +install_policy_app_tabbed_no_shortcut_SiteB🌓 launch_file_OneTextFile🌑 file_handling_dialog_Deny_AskAgain🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 +install_create_shortcut_windowed_SiteB🌕 launch_file_OneTextFile🌑 file_handling_dialog_Deny_Remember🌑 check_window_not_created🌑 check_site_not_handles_file_SiteB_Txt🌑 check_site_not_handles_file_SiteB_Png🌑 +install_omnibox_icon_SiteB🌕 launch_file_OneTextFile🌑 file_handling_dialog_Deny_Remember🌑 check_window_not_created🌑 check_site_not_handles_file_SiteB_Txt🌑 check_site_not_handles_file_SiteB_Png🌑 +install_policy_app_windowed_no_shortcut_SiteB🌓 launch_file_OneTextFile🌑 file_handling_dialog_Deny_Remember🌑 check_window_not_created🌑 check_site_not_handles_file_SiteB_Txt🌑 check_site_not_handles_file_SiteB_Png🌑 +install_policy_app_windowed_shortcut_SiteB🌓 launch_file_OneTextFile🌑 file_handling_dialog_Deny_Remember🌑 check_window_not_created🌑 check_site_not_handles_file_SiteB_Txt🌑 check_site_not_handles_file_SiteB_Png🌑 +install_menu_option_SiteB🌕 launch_file_OneTextFile🌑 file_handling_dialog_Deny_Remember🌑 check_window_not_created🌑 check_site_not_handles_file_SiteB_Txt🌑 check_site_not_handles_file_SiteB_Png🌑 +install_create_shortcut_tabbed_SiteB🌕 launch_file_OneTextFile🌑 file_handling_dialog_Deny_Remember🌑 check_window_not_created🌑 check_site_not_handles_file_SiteB_Txt🌑 check_site_not_handles_file_SiteB_Png🌑 +install_policy_app_tabbed_shortcut_SiteB🌓 launch_file_OneTextFile🌑 file_handling_dialog_Deny_Remember🌑 check_window_not_created🌑 check_site_not_handles_file_SiteB_Txt🌑 check_site_not_handles_file_SiteB_Png🌑 +install_policy_app_tabbed_no_shortcut_SiteB🌓 launch_file_OneTextFile🌑 file_handling_dialog_Deny_Remember🌑 check_window_not_created🌑 check_site_not_handles_file_SiteB_Txt🌑 check_site_not_handles_file_SiteB_Png🌑 +install_create_shortcut_windowed_SiteB🌕 add_file_handling_policy_approval_SiteB🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_NotShown🌑 check_pwa_window_created_SiteB_One🌑 +install_omnibox_icon_SiteB🌕 add_file_handling_policy_approval_SiteB🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_NotShown🌑 check_pwa_window_created_SiteB_One🌑 +install_policy_app_windowed_no_shortcut_SiteB🌓 add_file_handling_policy_approval_SiteB🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_NotShown🌑 check_pwa_window_created_SiteB_One🌑 +install_policy_app_windowed_shortcut_SiteB🌓 add_file_handling_policy_approval_SiteB🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_NotShown🌑 check_pwa_window_created_SiteB_One🌑 +install_menu_option_SiteB🌕 add_file_handling_policy_approval_SiteB🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_NotShown🌑 check_pwa_window_created_SiteB_One🌑 +install_create_shortcut_tabbed_SiteB🌕 add_file_handling_policy_approval_SiteB🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_NotShown🌑 check_pwa_window_created_SiteB_One🌑 +install_policy_app_tabbed_shortcut_SiteB🌓 add_file_handling_policy_approval_SiteB🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_NotShown🌑 check_pwa_window_created_SiteB_One🌑 +install_policy_app_tabbed_no_shortcut_SiteB🌓 add_file_handling_policy_approval_SiteB🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_NotShown🌑 check_pwa_window_created_SiteB_One🌑 +install_create_shortcut_windowed_SiteB🌕 add_file_handling_policy_approval_SiteB🌑 remove_file_handling_policy_approval_SiteB🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 +install_omnibox_icon_SiteB🌕 add_file_handling_policy_approval_SiteB🌑 remove_file_handling_policy_approval_SiteB🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 +install_policy_app_windowed_no_shortcut_SiteB🌓 add_file_handling_policy_approval_SiteB🌑 remove_file_handling_policy_approval_SiteB🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 +install_policy_app_windowed_shortcut_SiteB🌓 add_file_handling_policy_approval_SiteB🌑 remove_file_handling_policy_approval_SiteB🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 +install_menu_option_SiteB🌕 add_file_handling_policy_approval_SiteB🌑 remove_file_handling_policy_approval_SiteB🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 +install_create_shortcut_tabbed_SiteB🌕 add_file_handling_policy_approval_SiteB🌑 remove_file_handling_policy_approval_SiteB🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 +install_policy_app_tabbed_shortcut_SiteB🌓 add_file_handling_policy_approval_SiteB🌑 remove_file_handling_policy_approval_SiteB🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 +install_policy_app_tabbed_no_shortcut_SiteB🌓 add_file_handling_policy_approval_SiteB🌑 remove_file_handling_policy_approval_SiteB🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑
diff --git a/chrome/test/webapps/coverage/coverage_linux.tsv b/chrome/test/webapps/coverage/coverage_linux.tsv index f3584998..85b50cc 100644 --- a/chrome/test/webapps/coverage/coverage_linux.tsv +++ b/chrome/test/webapps/coverage/coverage_linux.tsv
@@ -1,936 +1,1118 @@ -# This is a generated file. -# Full coverage: 56%, with partial coverage: 75% -install_create_shortcut_windowed_SiteA🌕 manifest_update_title_SiteA🌑 accept_app_id_update_dialog🌑 close_pwa🌑 launch_from_menu_option_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 -install_create_shortcut_windowed_SiteA🌕 manifest_update_title_SiteA🌑 accept_app_id_update_dialog🌑 close_pwa🌑 launch_from_launch_icon_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 -install_create_shortcut_windowed_SiteA🌕 manifest_update_title_SiteA🌑 accept_app_id_update_dialog🌑 close_pwa🌑 launch_from_chrome_apps_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 -install_create_shortcut_windowed_SiteA🌕 manifest_update_title_SiteA🌑 accept_app_id_update_dialog🌑 close_pwa🌑 launch_from_platform_shortcut_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 -install_omnibox_icon_SiteA🌕 manifest_update_title_SiteA🌑 accept_app_id_update_dialog🌑 close_pwa🌑 launch_from_menu_option_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 -install_omnibox_icon_SiteA🌕 manifest_update_title_SiteA🌑 accept_app_id_update_dialog🌑 close_pwa🌑 launch_from_launch_icon_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 -install_omnibox_icon_SiteA🌕 manifest_update_title_SiteA🌑 accept_app_id_update_dialog🌑 close_pwa🌑 launch_from_chrome_apps_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 -install_omnibox_icon_SiteA🌕 manifest_update_title_SiteA🌑 accept_app_id_update_dialog🌑 close_pwa🌑 launch_from_platform_shortcut_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 -install_menu_option_SiteA🌕 manifest_update_title_SiteA🌑 accept_app_id_update_dialog🌑 close_pwa🌑 launch_from_menu_option_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 -install_menu_option_SiteA🌕 manifest_update_title_SiteA🌑 accept_app_id_update_dialog🌑 close_pwa🌑 launch_from_launch_icon_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 -install_menu_option_SiteA🌕 manifest_update_title_SiteA🌑 accept_app_id_update_dialog🌑 close_pwa🌑 launch_from_chrome_apps_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 -install_menu_option_SiteA🌕 manifest_update_title_SiteA🌑 accept_app_id_update_dialog🌑 close_pwa🌑 launch_from_platform_shortcut_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 -install_create_shortcut_windowed_SiteA🌕 manifest_update_title_SiteA🌑 deny_app_update_dialog🌑 check_app_not_in_list_SiteA🌑 check_platform_shortcut_not_exists_SiteA🌑 -install_omnibox_icon_SiteA🌕 manifest_update_title_SiteA🌑 deny_app_update_dialog🌑 check_app_not_in_list_SiteA🌑 check_platform_shortcut_not_exists_SiteA🌑 -install_menu_option_SiteA🌕 manifest_update_title_SiteA🌑 deny_app_update_dialog🌑 check_app_not_in_list_SiteA🌑 check_platform_shortcut_not_exists_SiteA🌑 -install_create_shortcut_windowed_SiteA🌕 close_pwa🌕 manifest_update_icon_SiteA🌑 check_app_in_list_icon_correct_SiteA🌑 -install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_icon_SiteA🌑 check_app_in_list_icon_correct_SiteA🌑 -install_menu_option_SiteA🌕 close_pwa🌕 manifest_update_icon_SiteA🌑 check_app_in_list_icon_correct_SiteA🌑 -install_create_shortcut_windowed_SiteA🌕 close_pwa🌕 manifest_update_icon_SiteA🌑 check_platform_shortcut_and_icon_SiteA🌑 -install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_icon_SiteA🌑 check_platform_shortcut_and_icon_SiteA🌑 -install_menu_option_SiteA🌕 close_pwa🌕 manifest_update_icon_SiteA🌑 check_platform_shortcut_and_icon_SiteA🌑 -install_policy_app_windowed_no_shortcut_SiteA🌓 manifest_update_title_SiteA🌑 check_update_dialog_not_shown🌑 close_pwa🌑 launch_from_menu_option_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 -install_policy_app_windowed_no_shortcut_SiteA🌓 manifest_update_title_SiteA🌑 check_update_dialog_not_shown🌑 close_pwa🌑 launch_from_launch_icon_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 -install_policy_app_windowed_no_shortcut_SiteA🌓 manifest_update_title_SiteA🌑 check_update_dialog_not_shown🌑 close_pwa🌑 launch_from_chrome_apps_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 -install_policy_app_windowed_no_shortcut_SiteA🌓 manifest_update_title_SiteA🌑 check_update_dialog_not_shown🌑 close_pwa🌑 launch_from_platform_shortcut_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌓 manifest_update_title_SiteA🌑 check_update_dialog_not_shown🌑 close_pwa🌑 launch_from_menu_option_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌓 manifest_update_title_SiteA🌑 check_update_dialog_not_shown🌑 close_pwa🌑 launch_from_launch_icon_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌓 manifest_update_title_SiteA🌑 check_update_dialog_not_shown🌑 close_pwa🌑 launch_from_chrome_apps_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌓 manifest_update_title_SiteA🌑 check_update_dialog_not_shown🌑 close_pwa🌑 launch_from_platform_shortcut_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 -install_policy_app_windowed_shortcut_SiteA🌓 manifest_update_title_SiteA🌑 check_update_dialog_not_shown🌑 close_pwa🌑 launch_from_menu_option_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 -install_policy_app_windowed_shortcut_SiteA🌓 manifest_update_title_SiteA🌑 check_update_dialog_not_shown🌑 close_pwa🌑 launch_from_launch_icon_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 -install_policy_app_windowed_shortcut_SiteA🌓 manifest_update_title_SiteA🌑 check_update_dialog_not_shown🌑 close_pwa🌑 launch_from_chrome_apps_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 -install_policy_app_windowed_shortcut_SiteA🌓 manifest_update_title_SiteA🌑 check_update_dialog_not_shown🌑 close_pwa🌑 launch_from_platform_shortcut_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 manifest_update_title_SiteA🌑 check_update_dialog_not_shown🌑 close_pwa🌑 launch_from_menu_option_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 manifest_update_title_SiteA🌑 check_update_dialog_not_shown🌑 close_pwa🌑 launch_from_launch_icon_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 manifest_update_title_SiteA🌑 check_update_dialog_not_shown🌑 close_pwa🌑 launch_from_chrome_apps_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 manifest_update_title_SiteA🌑 check_update_dialog_not_shown🌑 close_pwa🌑 launch_from_platform_shortcut_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 -install_create_shortcut_windowed_SiteA🌕 apply_run_on_os_login_policy_blocked_SiteA🌕 check_user_cannot_set_run_on_os_login_SiteA🌕 -install_omnibox_icon_SiteA🌕 apply_run_on_os_login_policy_blocked_SiteA🌕 check_user_cannot_set_run_on_os_login_SiteA🌕 -install_policy_app_windowed_no_shortcut_SiteA🌓 apply_run_on_os_login_policy_blocked_SiteA🌕 check_user_cannot_set_run_on_os_login_SiteA🌕 -install_policy_app_windowed_shortcut_SiteA🌓 apply_run_on_os_login_policy_blocked_SiteA🌕 check_user_cannot_set_run_on_os_login_SiteA🌕 -install_menu_option_SiteA🌕 apply_run_on_os_login_policy_blocked_SiteA🌕 check_user_cannot_set_run_on_os_login_SiteA🌕 -install_create_shortcut_tabbed_SiteA🌕 apply_run_on_os_login_policy_blocked_SiteA🌕 check_user_cannot_set_run_on_os_login_SiteA🌕 -install_policy_app_tabbed_shortcut_SiteA🌓 apply_run_on_os_login_policy_blocked_SiteA🌕 check_user_cannot_set_run_on_os_login_SiteA🌕 -install_policy_app_tabbed_no_shortcut_SiteA🌓 apply_run_on_os_login_policy_blocked_SiteA🌕 check_user_cannot_set_run_on_os_login_SiteA🌕 -install_create_shortcut_windowed_SiteA🌕 apply_run_on_os_login_policy_blocked_SiteA🌕 check_user_cannot_set_run_on_os_login_SiteA🌕 -install_omnibox_icon_SiteA🌕 apply_run_on_os_login_policy_blocked_SiteA🌕 check_user_cannot_set_run_on_os_login_SiteA🌕 -install_policy_app_windowed_no_shortcut_SiteA🌓 apply_run_on_os_login_policy_blocked_SiteA🌕 check_user_cannot_set_run_on_os_login_SiteA🌕 -install_policy_app_windowed_shortcut_SiteA🌓 apply_run_on_os_login_policy_blocked_SiteA🌕 check_user_cannot_set_run_on_os_login_SiteA🌕 -install_menu_option_SiteA🌕 apply_run_on_os_login_policy_blocked_SiteA🌕 check_user_cannot_set_run_on_os_login_SiteA🌕 -install_create_shortcut_tabbed_SiteA🌕 apply_run_on_os_login_policy_blocked_SiteA🌕 check_user_cannot_set_run_on_os_login_SiteA🌕 -install_policy_app_tabbed_shortcut_SiteA🌓 apply_run_on_os_login_policy_blocked_SiteA🌕 check_user_cannot_set_run_on_os_login_SiteA🌕 -install_policy_app_tabbed_no_shortcut_SiteA🌓 apply_run_on_os_login_policy_blocked_SiteA🌕 check_user_cannot_set_run_on_os_login_SiteA🌕 -install_create_shortcut_windowed_SiteA🌕 enable_run_on_os_login_SiteA🌕 apply_run_on_os_login_policy_blocked_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 -install_omnibox_icon_SiteA🌕 enable_run_on_os_login_SiteA🌕 apply_run_on_os_login_policy_blocked_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 -install_policy_app_windowed_no_shortcut_SiteA🌓 enable_run_on_os_login_SiteA🌕 apply_run_on_os_login_policy_blocked_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 -install_policy_app_windowed_shortcut_SiteA🌓 enable_run_on_os_login_SiteA🌕 apply_run_on_os_login_policy_blocked_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 -install_menu_option_SiteA🌕 enable_run_on_os_login_SiteA🌕 apply_run_on_os_login_policy_blocked_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 -install_create_shortcut_tabbed_SiteA🌕 enable_run_on_os_login_SiteA🌕 apply_run_on_os_login_policy_blocked_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 -install_policy_app_tabbed_shortcut_SiteA🌓 enable_run_on_os_login_SiteA🌕 apply_run_on_os_login_policy_blocked_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 -install_policy_app_tabbed_no_shortcut_SiteA🌓 enable_run_on_os_login_SiteA🌕 apply_run_on_os_login_policy_blocked_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 -install_create_shortcut_windowed_SiteA🌕 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_run_on_os_login_enabled_SiteA🌕 -install_omnibox_icon_SiteA🌕 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_run_on_os_login_enabled_SiteA🌕 -install_policy_app_windowed_no_shortcut_SiteA🌓 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_run_on_os_login_enabled_SiteA🌕 -install_policy_app_windowed_shortcut_SiteA🌓 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_run_on_os_login_enabled_SiteA🌕 -install_menu_option_SiteA🌕 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_run_on_os_login_enabled_SiteA🌕 -install_create_shortcut_tabbed_SiteA🌕 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_run_on_os_login_enabled_SiteA🌕 -install_policy_app_tabbed_shortcut_SiteA🌓 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_run_on_os_login_enabled_SiteA🌕 -install_policy_app_tabbed_no_shortcut_SiteA🌓 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_run_on_os_login_enabled_SiteA🌕 -install_create_shortcut_windowed_SiteA🌕 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_user_cannot_set_run_on_os_login_SiteA🌕 -install_omnibox_icon_SiteA🌕 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_user_cannot_set_run_on_os_login_SiteA🌕 -install_policy_app_windowed_no_shortcut_SiteA🌓 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_user_cannot_set_run_on_os_login_SiteA🌕 -install_policy_app_windowed_shortcut_SiteA🌓 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_user_cannot_set_run_on_os_login_SiteA🌕 -install_menu_option_SiteA🌕 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_user_cannot_set_run_on_os_login_SiteA🌕 -install_create_shortcut_tabbed_SiteA🌕 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_user_cannot_set_run_on_os_login_SiteA🌕 -install_policy_app_tabbed_shortcut_SiteA🌓 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_user_cannot_set_run_on_os_login_SiteA🌕 -install_policy_app_tabbed_no_shortcut_SiteA🌓 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_user_cannot_set_run_on_os_login_SiteA🌕 -install_create_shortcut_windowed_SiteA🌕 enable_run_on_os_login_SiteA🌕 check_run_on_os_login_enabled_SiteA🌕 -install_omnibox_icon_SiteA🌕 enable_run_on_os_login_SiteA🌕 check_run_on_os_login_enabled_SiteA🌕 -install_policy_app_windowed_no_shortcut_SiteA🌓 enable_run_on_os_login_SiteA🌕 check_run_on_os_login_enabled_SiteA🌕 -install_policy_app_windowed_shortcut_SiteA🌓 enable_run_on_os_login_SiteA🌕 check_run_on_os_login_enabled_SiteA🌕 -install_menu_option_SiteA🌕 enable_run_on_os_login_SiteA🌕 check_run_on_os_login_enabled_SiteA🌕 -install_create_shortcut_tabbed_SiteA🌕 enable_run_on_os_login_SiteA🌕 check_run_on_os_login_enabled_SiteA🌕 -install_policy_app_tabbed_shortcut_SiteA🌓 enable_run_on_os_login_SiteA🌕 check_run_on_os_login_enabled_SiteA🌕 -install_policy_app_tabbed_no_shortcut_SiteA🌓 enable_run_on_os_login_SiteA🌕 check_run_on_os_login_enabled_SiteA🌕 -install_create_shortcut_windowed_SiteA🌕 enable_run_on_os_login_SiteA🌕 disable_run_on_os_login_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 -install_omnibox_icon_SiteA🌕 enable_run_on_os_login_SiteA🌕 disable_run_on_os_login_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 -install_policy_app_windowed_no_shortcut_SiteA🌓 enable_run_on_os_login_SiteA🌕 disable_run_on_os_login_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 -install_policy_app_windowed_shortcut_SiteA🌓 enable_run_on_os_login_SiteA🌕 disable_run_on_os_login_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 -install_menu_option_SiteA🌕 enable_run_on_os_login_SiteA🌕 disable_run_on_os_login_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 -install_create_shortcut_tabbed_SiteA🌕 enable_run_on_os_login_SiteA🌕 disable_run_on_os_login_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 -install_policy_app_tabbed_shortcut_SiteA🌓 enable_run_on_os_login_SiteA🌕 disable_run_on_os_login_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 -install_policy_app_tabbed_no_shortcut_SiteA🌓 enable_run_on_os_login_SiteA🌕 disable_run_on_os_login_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 -install_create_shortcut_windowed_SiteA🌕 apply_run_on_os_login_policy_run_windowed_SiteA🌕 remove_run_on_os_login_policy_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 -install_omnibox_icon_SiteA🌕 apply_run_on_os_login_policy_run_windowed_SiteA🌕 remove_run_on_os_login_policy_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 -install_policy_app_windowed_no_shortcut_SiteA🌓 apply_run_on_os_login_policy_run_windowed_SiteA🌕 remove_run_on_os_login_policy_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 -install_policy_app_windowed_shortcut_SiteA🌓 apply_run_on_os_login_policy_run_windowed_SiteA🌕 remove_run_on_os_login_policy_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 -install_menu_option_SiteA🌕 apply_run_on_os_login_policy_run_windowed_SiteA🌕 remove_run_on_os_login_policy_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 -install_create_shortcut_tabbed_SiteA🌕 apply_run_on_os_login_policy_run_windowed_SiteA🌕 remove_run_on_os_login_policy_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 -install_policy_app_tabbed_shortcut_SiteA🌓 apply_run_on_os_login_policy_run_windowed_SiteA🌕 remove_run_on_os_login_policy_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 -install_policy_app_tabbed_no_shortcut_SiteA🌓 apply_run_on_os_login_policy_run_windowed_SiteA🌕 remove_run_on_os_login_policy_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 -install_create_shortcut_windowed_SiteA🌕 enable_run_on_os_login_SiteA🌕 apply_run_on_os_login_policy_blocked_SiteA🌕 remove_run_on_os_login_policy_SiteA🌕 check_run_on_os_login_enabled_SiteA🌕 -install_omnibox_icon_SiteA🌕 enable_run_on_os_login_SiteA🌕 apply_run_on_os_login_policy_blocked_SiteA🌕 remove_run_on_os_login_policy_SiteA🌕 check_run_on_os_login_enabled_SiteA🌕 -install_policy_app_windowed_no_shortcut_SiteA🌓 enable_run_on_os_login_SiteA🌕 apply_run_on_os_login_policy_blocked_SiteA🌕 remove_run_on_os_login_policy_SiteA🌕 check_run_on_os_login_enabled_SiteA🌕 -install_policy_app_windowed_shortcut_SiteA🌓 enable_run_on_os_login_SiteA🌕 apply_run_on_os_login_policy_blocked_SiteA🌕 remove_run_on_os_login_policy_SiteA🌕 check_run_on_os_login_enabled_SiteA🌕 -install_menu_option_SiteA🌕 enable_run_on_os_login_SiteA🌕 apply_run_on_os_login_policy_blocked_SiteA🌕 remove_run_on_os_login_policy_SiteA🌕 check_run_on_os_login_enabled_SiteA🌕 -install_create_shortcut_tabbed_SiteA🌕 enable_run_on_os_login_SiteA🌕 apply_run_on_os_login_policy_blocked_SiteA🌕 remove_run_on_os_login_policy_SiteA🌕 check_run_on_os_login_enabled_SiteA🌕 -install_policy_app_tabbed_shortcut_SiteA🌓 enable_run_on_os_login_SiteA🌕 apply_run_on_os_login_policy_blocked_SiteA🌕 remove_run_on_os_login_policy_SiteA🌕 check_run_on_os_login_enabled_SiteA🌕 -install_policy_app_tabbed_no_shortcut_SiteA🌓 enable_run_on_os_login_SiteA🌕 apply_run_on_os_login_policy_blocked_SiteA🌕 remove_run_on_os_login_policy_SiteA🌕 check_run_on_os_login_enabled_SiteA🌕 -install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 switch_profile_clients_Client1🌕 sync_turn_off🌕 uninstall_from_list_SiteA🌕 switch_profile_clients_Client2🌕 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 -install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 switch_profile_clients_Client1🌕 sync_turn_off🌕 uninstall_from_menu_SiteA🌕 switch_profile_clients_Client2🌕 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 -install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 switch_profile_clients_Client1🌕 sync_turn_off🌕 uninstall_from_os_SiteA🌑 switch_profile_clients_Client2🌑 apply_run_on_os_login_policy_run_windowed_SiteA🌑 check_run_on_os_login_disabled_SiteA🌑 -install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 switch_profile_clients_Client1🌕 sync_turn_off🌕 uninstall_from_app_settings_SiteA🌕 switch_profile_clients_Client2🌕 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 -install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 switch_profile_clients_Client1🌕 sync_turn_off🌕 uninstall_from_list_SiteA🌕 switch_profile_clients_Client2🌕 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 -install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 switch_profile_clients_Client1🌕 sync_turn_off🌕 uninstall_from_menu_SiteA🌕 switch_profile_clients_Client2🌕 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 -install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 switch_profile_clients_Client1🌕 sync_turn_off🌕 uninstall_from_os_SiteA🌑 switch_profile_clients_Client2🌑 apply_run_on_os_login_policy_run_windowed_SiteA🌑 check_run_on_os_login_disabled_SiteA🌑 -install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 switch_profile_clients_Client1🌕 sync_turn_off🌕 uninstall_from_app_settings_SiteA🌕 switch_profile_clients_Client2🌕 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 -install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 switch_profile_clients_Client1🌕 sync_turn_off🌕 uninstall_from_list_SiteA🌕 switch_profile_clients_Client2🌕 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 -install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 switch_profile_clients_Client1🌕 sync_turn_off🌕 uninstall_from_menu_SiteA🌕 switch_profile_clients_Client2🌕 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 -install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 switch_profile_clients_Client1🌕 sync_turn_off🌕 uninstall_from_os_SiteA🌑 switch_profile_clients_Client2🌑 apply_run_on_os_login_policy_run_windowed_SiteA🌑 check_run_on_os_login_disabled_SiteA🌑 -install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 switch_profile_clients_Client1🌕 sync_turn_off🌕 uninstall_from_app_settings_SiteA🌕 switch_profile_clients_Client2🌕 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 -install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 switch_profile_clients_Client1🌕 sync_turn_off🌕 uninstall_from_list_SiteA🌕 switch_profile_clients_Client2🌕 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 install_locally_SiteA🌓 check_run_on_os_login_enabled_SiteA🌕 -install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 switch_profile_clients_Client1🌕 sync_turn_off🌕 uninstall_from_menu_SiteA🌕 switch_profile_clients_Client2🌕 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 install_locally_SiteA🌓 check_run_on_os_login_enabled_SiteA🌕 -install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 switch_profile_clients_Client1🌕 sync_turn_off🌕 uninstall_from_os_SiteA🌑 switch_profile_clients_Client2🌑 apply_run_on_os_login_policy_run_windowed_SiteA🌑 check_run_on_os_login_disabled_SiteA🌑 install_locally_SiteA🌑 check_run_on_os_login_enabled_SiteA🌑 -install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 switch_profile_clients_Client1🌕 sync_turn_off🌕 uninstall_from_app_settings_SiteA🌕 switch_profile_clients_Client2🌕 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 install_locally_SiteA🌓 check_run_on_os_login_enabled_SiteA🌕 -install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 switch_profile_clients_Client1🌕 sync_turn_off🌕 uninstall_from_list_SiteA🌕 switch_profile_clients_Client2🌕 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 install_locally_SiteA🌓 check_run_on_os_login_enabled_SiteA🌕 -install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 switch_profile_clients_Client1🌕 sync_turn_off🌕 uninstall_from_menu_SiteA🌕 switch_profile_clients_Client2🌕 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 install_locally_SiteA🌓 check_run_on_os_login_enabled_SiteA🌕 -install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 switch_profile_clients_Client1🌕 sync_turn_off🌕 uninstall_from_os_SiteA🌑 switch_profile_clients_Client2🌑 apply_run_on_os_login_policy_run_windowed_SiteA🌑 check_run_on_os_login_disabled_SiteA🌑 install_locally_SiteA🌑 check_run_on_os_login_enabled_SiteA🌑 -install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 switch_profile_clients_Client1🌕 sync_turn_off🌕 uninstall_from_app_settings_SiteA🌕 switch_profile_clients_Client2🌕 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 install_locally_SiteA🌓 check_run_on_os_login_enabled_SiteA🌕 -install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 switch_profile_clients_Client1🌕 sync_turn_off🌕 uninstall_from_list_SiteA🌕 switch_profile_clients_Client2🌕 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 install_locally_SiteA🌓 check_run_on_os_login_enabled_SiteA🌕 -install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 switch_profile_clients_Client1🌕 sync_turn_off🌕 uninstall_from_menu_SiteA🌕 switch_profile_clients_Client2🌕 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 install_locally_SiteA🌓 check_run_on_os_login_enabled_SiteA🌕 -install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 switch_profile_clients_Client1🌕 sync_turn_off🌕 uninstall_from_os_SiteA🌑 switch_profile_clients_Client2🌑 apply_run_on_os_login_policy_run_windowed_SiteA🌑 check_run_on_os_login_disabled_SiteA🌑 install_locally_SiteA🌑 check_run_on_os_login_enabled_SiteA🌑 -install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 switch_profile_clients_Client1🌕 sync_turn_off🌕 uninstall_from_app_settings_SiteA🌕 switch_profile_clients_Client2🌕 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 install_locally_SiteA🌓 check_run_on_os_login_enabled_SiteA🌕 -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🌕 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🌕 navigate_pwa_site_a_to_SiteB🌕 close_custom_toolbar🌕 check_app_navigation_is_start_url🌕 -install_omnibox_icon_SiteA🌕 navigate_pwa_site_a_to_SiteB🌕 close_custom_toolbar🌕 check_app_navigation_is_start_url🌕 -install_policy_app_windowed_no_shortcut_SiteA🌓 navigate_pwa_site_a_to_SiteB🌑 close_custom_toolbar🌑 check_app_navigation_is_start_url🌑 -install_policy_app_windowed_shortcut_SiteA🌓 navigate_pwa_site_a_to_SiteB🌑 close_custom_toolbar🌑 check_app_navigation_is_start_url🌑 -install_menu_option_SiteA🌕 navigate_pwa_site_a_to_SiteB🌕 close_custom_toolbar🌕 check_app_navigation_is_start_url🌕 -install_create_shortcut_windowed_SiteA🌕 navigate_pwa_site_a_to_SiteB🌕 check_custom_toolbar🌕 -install_omnibox_icon_SiteA🌕 navigate_pwa_site_a_to_SiteB🌕 check_custom_toolbar🌕 -install_menu_option_SiteA🌕 navigate_pwa_site_a_to_SiteB🌕 check_custom_toolbar🌕 -navigate_browser_SiteA🌕 check_app_not_in_list_SiteA🌓 -navigate_browser_SiteA🌕 check_platform_shortcut_not_exists_SiteA🌑 -navigate_browser_SiteC🌕 check_app_not_in_list_SiteA🌓 -navigate_browser_SiteC🌕 check_platform_shortcut_not_exists_SiteA🌑 -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🌕 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_and_icon_SiteA🌓 -install_policy_app_tabbed_shortcut_SiteA🌓 check_platform_shortcut_and_icon_SiteA🌓 -install_create_shortcut_windowed_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌓 -install_omnibox_icon_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌓 -install_menu_option_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌓 -install_create_shortcut_tabbed_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌓 -install_policy_app_windowed_shortcut_SiteC🌓 check_platform_shortcut_and_icon_SiteC🌓 -install_policy_app_tabbed_shortcut_SiteC🌓 check_platform_shortcut_and_icon_SiteC🌓 -install_create_shortcut_windowed_SiteC🌕 check_platform_shortcut_and_icon_SiteC🌓 -install_create_shortcut_tabbed_SiteC🌕 check_platform_shortcut_and_icon_SiteC🌓 -install_create_shortcut_windowed_SiteA🌕 uninstall_from_list_SiteA🌕 check_app_not_in_list_SiteA🌓 -install_create_shortcut_windowed_SiteA🌕 uninstall_from_menu_SiteA🌕 check_app_not_in_list_SiteA🌓 -install_create_shortcut_windowed_SiteA🌕 uninstall_from_os_SiteA🌑 check_app_not_in_list_SiteA🌑 -install_create_shortcut_windowed_SiteA🌕 uninstall_from_app_settings_SiteA🌕 check_app_not_in_list_SiteA🌓 -install_omnibox_icon_SiteA🌕 uninstall_from_list_SiteA🌕 check_app_not_in_list_SiteA🌓 -install_omnibox_icon_SiteA🌕 uninstall_from_menu_SiteA🌕 check_app_not_in_list_SiteA🌓 -install_omnibox_icon_SiteA🌕 uninstall_from_os_SiteA🌑 check_app_not_in_list_SiteA🌑 -install_omnibox_icon_SiteA🌕 uninstall_from_app_settings_SiteA🌕 check_app_not_in_list_SiteA🌓 -install_menu_option_SiteA🌕 uninstall_from_list_SiteA🌕 check_app_not_in_list_SiteA🌓 -install_menu_option_SiteA🌕 uninstall_from_menu_SiteA🌕 check_app_not_in_list_SiteA🌓 -install_menu_option_SiteA🌕 uninstall_from_os_SiteA🌑 check_app_not_in_list_SiteA🌑 -install_menu_option_SiteA🌕 uninstall_from_app_settings_SiteA🌕 check_app_not_in_list_SiteA🌓 -install_create_shortcut_windowed_SiteA🌕 uninstall_from_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_create_shortcut_windowed_SiteA🌕 uninstall_from_os_SiteA🌑 navigate_browser_SiteA🌑 check_install_icon_shown🌑 -install_create_shortcut_windowed_SiteA🌕 uninstall_from_app_settings_SiteA🌕 navigate_browser_SiteA🌕 check_install_icon_shown🌕 -install_omnibox_icon_SiteA🌕 uninstall_from_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_omnibox_icon_SiteA🌕 uninstall_from_os_SiteA🌑 navigate_browser_SiteA🌑 check_install_icon_shown🌑 -install_omnibox_icon_SiteA🌕 uninstall_from_app_settings_SiteA🌕 navigate_browser_SiteA🌕 check_install_icon_shown🌕 -install_menu_option_SiteA🌕 uninstall_from_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_menu_option_SiteA🌕 uninstall_from_os_SiteA🌑 navigate_browser_SiteA🌑 check_install_icon_shown🌑 -install_menu_option_SiteA🌕 uninstall_from_app_settings_SiteA🌕 navigate_browser_SiteA🌕 check_install_icon_shown🌕 -install_create_shortcut_windowed_SiteA🌕 uninstall_from_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_create_shortcut_windowed_SiteA🌕 uninstall_from_os_SiteA🌑 navigate_browser_SiteA🌑 check_launch_icon_not_shown🌑 -install_create_shortcut_windowed_SiteA🌕 uninstall_from_app_settings_SiteA🌕 navigate_browser_SiteA🌕 check_launch_icon_not_shown🌕 -install_omnibox_icon_SiteA🌕 uninstall_from_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_omnibox_icon_SiteA🌕 uninstall_from_os_SiteA🌑 navigate_browser_SiteA🌑 check_launch_icon_not_shown🌑 -install_omnibox_icon_SiteA🌕 uninstall_from_app_settings_SiteA🌕 navigate_browser_SiteA🌕 check_launch_icon_not_shown🌕 -install_menu_option_SiteA🌕 uninstall_from_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_menu_option_SiteA🌕 uninstall_from_os_SiteA🌑 navigate_browser_SiteA🌑 check_launch_icon_not_shown🌑 -install_menu_option_SiteA🌕 uninstall_from_app_settings_SiteA🌕 navigate_browser_SiteA🌕 check_launch_icon_not_shown🌕 -install_create_shortcut_windowed_SiteA🌕 uninstall_from_list_SiteA🌕 check_platform_shortcut_not_exists_SiteA🌑 -install_create_shortcut_windowed_SiteA🌕 uninstall_from_menu_SiteA🌕 check_platform_shortcut_not_exists_SiteA🌑 -install_create_shortcut_windowed_SiteA🌕 uninstall_from_os_SiteA🌑 check_platform_shortcut_not_exists_SiteA🌑 -install_create_shortcut_windowed_SiteA🌕 uninstall_from_app_settings_SiteA🌕 check_platform_shortcut_not_exists_SiteA🌑 -install_omnibox_icon_SiteA🌕 uninstall_from_list_SiteA🌕 check_platform_shortcut_not_exists_SiteA🌑 -install_omnibox_icon_SiteA🌕 uninstall_from_menu_SiteA🌕 check_platform_shortcut_not_exists_SiteA🌑 -install_omnibox_icon_SiteA🌕 uninstall_from_os_SiteA🌑 check_platform_shortcut_not_exists_SiteA🌑 -install_omnibox_icon_SiteA🌕 uninstall_from_app_settings_SiteA🌕 check_platform_shortcut_not_exists_SiteA🌑 -install_menu_option_SiteA🌕 uninstall_from_list_SiteA🌕 check_platform_shortcut_not_exists_SiteA🌑 -install_menu_option_SiteA🌕 uninstall_from_menu_SiteA🌕 check_platform_shortcut_not_exists_SiteA🌑 -install_menu_option_SiteA🌕 uninstall_from_os_SiteA🌑 check_platform_shortcut_not_exists_SiteA🌑 -install_menu_option_SiteA🌕 uninstall_from_app_settings_SiteA🌕 check_platform_shortcut_not_exists_SiteA🌑 -install_create_shortcut_windowed_SiteC🌕 uninstall_from_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_windowed_SiteC🌕 uninstall_from_os_SiteC🌑 check_app_not_in_list_SiteA🌑 -install_create_shortcut_windowed_SiteC🌕 uninstall_from_app_settings_SiteC🌕 check_app_not_in_list_SiteA🌓 -install_create_shortcut_windowed_SiteC🌕 uninstall_from_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_windowed_SiteC🌕 uninstall_from_os_SiteC🌑 check_platform_shortcut_not_exists_SiteC🌑 -install_create_shortcut_windowed_SiteC🌕 uninstall_from_app_settings_SiteC🌕 check_platform_shortcut_not_exists_SiteC🌑 -install_create_shortcut_tabbed_SiteA🌕 uninstall_from_list_SiteA🌕 check_app_not_in_list_SiteA🌓 -install_create_shortcut_tabbed_SiteA🌕 uninstall_from_list_SiteA🌕 navigate_browser_SiteA🌕 check_install_icon_shown🌕 -install_create_shortcut_tabbed_SiteA🌕 uninstall_from_list_SiteA🌕 navigate_browser_SiteA🌕 check_launch_icon_not_shown🌕 -install_create_shortcut_tabbed_SiteA🌕 uninstall_from_list_SiteA🌕 check_platform_shortcut_not_exists_SiteA🌑 -install_create_shortcut_tabbed_SiteC🌕 uninstall_from_list_SiteC🌕 check_app_not_in_list_SiteA🌓 -install_create_shortcut_tabbed_SiteC🌕 uninstall_from_list_SiteC🌕 check_platform_shortcut_not_exists_SiteC🌑 -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_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_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🌕 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_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_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_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_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_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_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_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_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_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_policy_app_windowed_no_shortcut_SiteA🌓 create_shortcuts_SiteA🌑 check_platform_shortcut_and_icon_SiteA🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌓 create_shortcuts_SiteA🌑 check_platform_shortcut_and_icon_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_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_platform_shortcut_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_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_platform_shortcut_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_platform_shortcut_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🌕 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_windowed_SiteA🌕 open_app_settings_from_chrome_apps_SiteA🌕 check_browser_navigation_is_app_settings_SiteA🌕 -install_create_shortcut_windowed_SiteA🌕 open_app_settings_from_app_menu_SiteA🌕 check_browser_navigation_is_app_settings_SiteA🌕 -install_omnibox_icon_SiteA🌕 open_app_settings_from_chrome_apps_SiteA🌕 check_browser_navigation_is_app_settings_SiteA🌕 -install_omnibox_icon_SiteA🌕 open_app_settings_from_app_menu_SiteA🌕 check_browser_navigation_is_app_settings_SiteA🌕 -install_policy_app_windowed_no_shortcut_SiteA🌓 open_app_settings_from_chrome_apps_SiteA🌕 check_browser_navigation_is_app_settings_SiteA🌕 -install_policy_app_windowed_no_shortcut_SiteA🌓 open_app_settings_from_app_menu_SiteA🌕 check_browser_navigation_is_app_settings_SiteA🌕 -install_policy_app_windowed_shortcut_SiteA🌓 open_app_settings_from_chrome_apps_SiteA🌕 check_browser_navigation_is_app_settings_SiteA🌕 -install_policy_app_windowed_shortcut_SiteA🌓 open_app_settings_from_app_menu_SiteA🌕 check_browser_navigation_is_app_settings_SiteA🌕 -install_menu_option_SiteA🌕 open_app_settings_from_chrome_apps_SiteA🌕 check_browser_navigation_is_app_settings_SiteA🌕 -install_menu_option_SiteA🌕 open_app_settings_from_app_menu_SiteA🌕 check_browser_navigation_is_app_settings_SiteA🌕 -install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 install_locally_SiteA🌓 check_platform_shortcut_and_icon_SiteA🌓 -install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 install_locally_SiteA🌓 check_platform_shortcut_and_icon_SiteA🌓 -install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 install_locally_SiteA🌓 check_platform_shortcut_and_icon_SiteA🌓 -install_create_shortcut_tabbed_SiteA🌕 switch_profile_clients_Client2🌕 install_locally_SiteA🌓 check_platform_shortcut_and_icon_SiteA🌓 -install_create_shortcut_tabbed_SiteA🌕 switch_profile_clients_Client2🌕 install_locally_SiteA🌓 check_app_in_list_tabbed_SiteA🌓 -install_create_shortcut_tabbed_SiteA🌕 switch_profile_clients_Client2🌕 install_locally_SiteA🌓 navigate_browser_SiteA🌕 check_install_icon_shown🌕 -install_create_shortcut_tabbed_SiteA🌕 switch_profile_clients_Client2🌕 install_locally_SiteA🌓 navigate_browser_SiteA🌕 check_launch_icon_not_shown🌕 -install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 install_locally_SiteA🌓 check_app_in_list_windowed_SiteA🌓 -install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 install_locally_SiteA🌓 check_app_in_list_windowed_SiteA🌓 -install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 install_locally_SiteA🌓 check_app_in_list_windowed_SiteA🌓 -install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 install_locally_SiteA🌓 navigate_browser_SiteA🌕 check_install_icon_not_shown🌕 -install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 install_locally_SiteA🌓 navigate_browser_SiteA🌕 check_install_icon_not_shown🌕 -install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 install_locally_SiteA🌓 navigate_browser_SiteA🌕 check_install_icon_not_shown🌕 -install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 install_locally_SiteA🌓 navigate_browser_SiteA🌕 check_launch_icon_shown🌕 -install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 install_locally_SiteA🌓 navigate_browser_SiteA🌕 check_launch_icon_shown🌕 -install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 install_locally_SiteA🌓 navigate_browser_SiteA🌕 check_launch_icon_shown🌕 -install_create_shortcut_tabbed_SiteC🌕 switch_profile_clients_Client2🌕 install_locally_SiteC🌓 check_app_in_list_tabbed_SiteC🌓 -install_create_shortcut_tabbed_SiteC🌕 switch_profile_clients_Client2🌕 install_locally_SiteC🌓 navigate_browser_SiteC🌕 check_launch_icon_not_shown🌕 -install_create_shortcut_windowed_SiteC🌕 switch_profile_clients_Client2🌕 install_locally_SiteC🌓 check_app_in_list_windowed_SiteC🌓 -install_create_shortcut_windowed_SiteC🌕 switch_profile_clients_Client2🌕 install_locally_SiteC🌓 navigate_browser_SiteC🌕 check_install_icon_not_shown🌕 -install_create_shortcut_windowed_SiteC🌕 switch_profile_clients_Client2🌕 install_locally_SiteC🌓 navigate_browser_SiteC🌕 check_launch_icon_shown🌕 -install_create_shortcut_windowed_SiteC🌕 switch_profile_clients_Client2🌕 install_locally_SiteC🌓 check_platform_shortcut_and_icon_SiteC🌓 -install_create_shortcut_tabbed_SiteC🌕 switch_profile_clients_Client2🌕 install_locally_SiteC🌓 check_platform_shortcut_and_icon_SiteC🌓 -install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 install_locally_SiteA🌓 launch_from_menu_option_SiteA🌕 check_window_created🌕 -install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 install_locally_SiteA🌓 launch_from_launch_icon_SiteA🌕 check_window_created🌕 -install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 install_locally_SiteA🌓 launch_from_chrome_apps_SiteA🌓 check_window_created🌕 -install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 install_locally_SiteA🌓 launch_from_platform_shortcut_SiteA🌓 check_window_created🌕 -install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 install_locally_SiteA🌓 launch_from_menu_option_SiteA🌕 check_window_created🌕 -install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 install_locally_SiteA🌓 launch_from_launch_icon_SiteA🌕 check_window_created🌕 -install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 install_locally_SiteA🌓 launch_from_chrome_apps_SiteA🌓 check_window_created🌕 -install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 install_locally_SiteA🌓 launch_from_platform_shortcut_SiteA🌓 check_window_created🌕 -install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 install_locally_SiteA🌓 launch_from_menu_option_SiteA🌕 check_window_created🌕 -install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 install_locally_SiteA🌓 launch_from_launch_icon_SiteA🌕 check_window_created🌕 -install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 install_locally_SiteA🌓 launch_from_chrome_apps_SiteA🌓 check_window_created🌕 -install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 install_locally_SiteA🌓 launch_from_platform_shortcut_SiteA🌓 check_window_created🌕 -install_create_shortcut_tabbed_SiteA🌕 switch_profile_clients_Client2🌕 launch_from_chrome_apps_SiteA🌓 check_tab_created🌕 -install_create_shortcut_tabbed_SiteA🌕 switch_profile_clients_Client2🌕 launch_from_platform_shortcut_SiteA🌓 check_tab_created🌕 -install_create_shortcut_tabbed_SiteA🌕 switch_profile_clients_Client2🌕 install_locally_SiteA🌓 launch_from_chrome_apps_SiteA🌓 check_tab_created🌕 -install_create_shortcut_tabbed_SiteA🌕 switch_profile_clients_Client2🌕 install_locally_SiteA🌓 launch_from_platform_shortcut_SiteA🌓 check_tab_created🌕 -install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 launch_from_chrome_apps_SiteA🌓 check_tab_created🌕 -install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 launch_from_platform_shortcut_SiteA🌓 check_tab_created🌕 -install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 launch_from_chrome_apps_SiteA🌓 check_tab_created🌕 -install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 launch_from_platform_shortcut_SiteA🌓 check_tab_created🌕 -install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 launch_from_chrome_apps_SiteA🌓 check_tab_created🌕 -install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 launch_from_platform_shortcut_SiteA🌓 check_tab_created🌕 -install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 uninstall_from_list_SiteA🌕 check_app_not_in_list_SiteA🌓 -install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 uninstall_from_list_SiteA🌕 check_app_not_in_list_SiteA🌓 -install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 uninstall_from_list_SiteA🌕 check_app_not_in_list_SiteA🌓 -install_create_shortcut_tabbed_SiteA🌕 switch_profile_clients_Client2🌕 uninstall_from_list_SiteA🌕 check_app_not_in_list_SiteA🌓 -install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 uninstall_from_list_SiteA🌕 switch_profile_clients_Client1🌕 check_app_not_in_list_SiteA🌓 -install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 uninstall_from_list_SiteA🌕 switch_profile_clients_Client1🌕 check_app_not_in_list_SiteA🌓 -install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 uninstall_from_list_SiteA🌕 switch_profile_clients_Client1🌕 check_app_not_in_list_SiteA🌓 -install_create_shortcut_tabbed_SiteA🌕 switch_profile_clients_Client2🌕 uninstall_from_list_SiteA🌕 switch_profile_clients_Client1🌕 check_app_not_in_list_SiteA🌓 -install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 check_app_in_list_not_locally_installed_SiteA🌓 -install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 check_app_in_list_not_locally_installed_SiteA🌓 -install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 check_app_in_list_not_locally_installed_SiteA🌓 -install_create_shortcut_tabbed_SiteA🌕 switch_profile_clients_Client2🌕 check_app_in_list_not_locally_installed_SiteA🌓 -install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 check_platform_shortcut_not_exists_SiteA🌑 -install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 check_platform_shortcut_not_exists_SiteA🌑 -install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 check_platform_shortcut_not_exists_SiteA🌑 -install_create_shortcut_tabbed_SiteA🌕 switch_profile_clients_Client2🌕 check_platform_shortcut_not_exists_SiteA🌑 -install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 navigate_browser_SiteA🌕 check_install_icon_shown🌕 -install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 navigate_browser_SiteA🌕 check_install_icon_shown🌕 -install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 navigate_browser_SiteA🌕 check_install_icon_shown🌕 -install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 navigate_browser_SiteA🌕 check_launch_icon_not_shown🌕 -install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 navigate_browser_SiteA🌕 check_launch_icon_not_shown🌕 -install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 navigate_browser_SiteA🌕 check_launch_icon_not_shown🌕 -install_create_shortcut_windowed_SiteC🌕 switch_profile_clients_Client2🌕 check_app_in_list_not_locally_installed_SiteC🌓 -install_create_shortcut_tabbed_SiteC🌕 switch_profile_clients_Client2🌕 check_app_in_list_not_locally_installed_SiteC🌓 -install_create_shortcut_windowed_SiteC🌕 switch_profile_clients_Client2🌕 check_platform_shortcut_not_exists_SiteC🌑 -install_create_shortcut_tabbed_SiteC🌕 switch_profile_clients_Client2🌕 check_platform_shortcut_not_exists_SiteC🌑 -sync_turn_off🌕 install_create_shortcut_windowed_SiteA🌕 sync_turn_on🌕 switch_profile_clients_Client2🌕 check_app_in_list_not_locally_installed_SiteA🌓 -sync_turn_off🌕 install_omnibox_icon_SiteA🌕 sync_turn_on🌕 switch_profile_clients_Client2🌕 check_app_in_list_not_locally_installed_SiteA🌓 -sync_turn_off🌕 install_menu_option_SiteA🌕 sync_turn_on🌕 switch_profile_clients_Client2🌕 check_app_in_list_not_locally_installed_SiteA🌓 -sync_turn_off🌕 install_create_shortcut_tabbed_SiteA🌕 sync_turn_on🌕 switch_profile_clients_Client2🌕 check_app_in_list_not_locally_installed_SiteA🌓 -sync_turn_off🌕 install_create_shortcut_windowed_SiteC🌕 sync_turn_on🌕 switch_profile_clients_Client2🌕 check_app_in_list_not_locally_installed_SiteC🌓 -sync_turn_off🌕 install_create_shortcut_tabbed_SiteC🌕 sync_turn_on🌕 switch_profile_clients_Client2🌕 check_app_in_list_not_locally_installed_SiteC🌓 -install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌕 uninstall_from_list_SiteA🌕 sync_turn_on🌕 check_app_in_list_not_locally_installed_SiteA🌓 -install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌕 uninstall_from_menu_SiteA🌕 sync_turn_on🌕 check_app_in_list_not_locally_installed_SiteA🌓 -install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌕 uninstall_from_os_SiteA🌑 sync_turn_on🌑 check_app_in_list_not_locally_installed_SiteA🌑 -install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌕 uninstall_from_list_SiteA🌕 sync_turn_on🌕 check_app_in_list_not_locally_installed_SiteA🌓 -install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌕 uninstall_from_menu_SiteA🌕 sync_turn_on🌕 check_app_in_list_not_locally_installed_SiteA🌓 -install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌕 uninstall_from_os_SiteA🌑 sync_turn_on🌑 check_app_in_list_not_locally_installed_SiteA🌑 -install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌕 uninstall_from_list_SiteA🌕 sync_turn_on🌕 check_app_in_list_not_locally_installed_SiteA🌓 -install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌕 uninstall_from_menu_SiteA🌕 sync_turn_on🌕 check_app_in_list_not_locally_installed_SiteA🌓 -install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌕 uninstall_from_os_SiteA🌑 sync_turn_on🌑 check_app_in_list_not_locally_installed_SiteA🌑 -install_create_shortcut_tabbed_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌕 uninstall_from_list_SiteA🌕 sync_turn_on🌕 check_app_in_list_not_locally_installed_SiteA🌓 -install_create_shortcut_tabbed_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌕 uninstall_from_menu_SiteA🌕 sync_turn_on🌕 check_app_in_list_not_locally_installed_SiteA🌓 -install_create_shortcut_tabbed_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌕 uninstall_from_os_SiteA🌑 sync_turn_on🌑 check_app_in_list_not_locally_installed_SiteA🌑 -install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌕 uninstall_from_list_SiteA🌕 sync_turn_on🌕 check_platform_shortcut_not_exists_SiteA🌑 -install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌕 uninstall_from_menu_SiteA🌕 sync_turn_on🌕 check_platform_shortcut_not_exists_SiteA🌑 -install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌕 uninstall_from_os_SiteA🌑 sync_turn_on🌑 check_platform_shortcut_not_exists_SiteA🌑 -install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌕 uninstall_from_list_SiteA🌕 sync_turn_on🌕 check_platform_shortcut_not_exists_SiteA🌑 -install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌕 uninstall_from_menu_SiteA🌕 sync_turn_on🌕 check_platform_shortcut_not_exists_SiteA🌑 -install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌕 uninstall_from_os_SiteA🌑 sync_turn_on🌑 check_platform_shortcut_not_exists_SiteA🌑 -install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌕 uninstall_from_list_SiteA🌕 sync_turn_on🌕 check_platform_shortcut_not_exists_SiteA🌑 -install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌕 uninstall_from_menu_SiteA🌕 sync_turn_on🌕 check_platform_shortcut_not_exists_SiteA🌑 -install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌕 uninstall_from_os_SiteA🌑 sync_turn_on🌑 check_platform_shortcut_not_exists_SiteA🌑 -install_create_shortcut_tabbed_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌕 uninstall_from_list_SiteA🌕 sync_turn_on🌕 check_platform_shortcut_not_exists_SiteA🌑 -install_create_shortcut_tabbed_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌕 uninstall_from_menu_SiteA🌕 sync_turn_on🌕 check_platform_shortcut_not_exists_SiteA🌑 -install_create_shortcut_tabbed_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌕 uninstall_from_os_SiteA🌑 sync_turn_on🌑 check_platform_shortcut_not_exists_SiteA🌑 -install_create_shortcut_tabbed_SiteA🌕 install_policy_app_windowed_no_shortcut_SiteA🌓 check_platform_shortcut_and_icon_SiteA🌓 -install_create_shortcut_tabbed_SiteA🌕 install_policy_app_windowed_shortcut_SiteA🌓 check_platform_shortcut_and_icon_SiteA🌓 -install_create_shortcut_windowed_SiteA🌕 install_policy_app_tabbed_no_shortcut_SiteA🌓 check_platform_shortcut_and_icon_SiteA🌓 -install_create_shortcut_windowed_SiteA🌕 install_policy_app_windowed_no_shortcut_SiteA🌓 check_platform_shortcut_and_icon_SiteA🌓 -install_omnibox_icon_SiteA🌕 install_policy_app_tabbed_no_shortcut_SiteA🌓 check_platform_shortcut_and_icon_SiteA🌓 -install_omnibox_icon_SiteA🌕 install_policy_app_windowed_no_shortcut_SiteA🌓 check_platform_shortcut_and_icon_SiteA🌓 -install_menu_option_SiteA🌕 install_policy_app_tabbed_no_shortcut_SiteA🌓 check_platform_shortcut_and_icon_SiteA🌓 -install_menu_option_SiteA🌕 install_policy_app_windowed_no_shortcut_SiteA🌓 check_platform_shortcut_and_icon_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_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_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_and_icon_SiteA🌓 -install_policy_app_tabbed_shortcut_SiteA🌓 install_omnibox_icon_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌓 -install_policy_app_tabbed_shortcut_SiteA🌓 install_menu_option_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌓 -install_policy_app_tabbed_no_shortcut_SiteA🌓 install_create_shortcut_windowed_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌓 -install_policy_app_tabbed_no_shortcut_SiteA🌓 install_omnibox_icon_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌓 -install_policy_app_tabbed_no_shortcut_SiteA🌓 install_menu_option_SiteA🌕 check_platform_shortcut_and_icon_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_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_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🌕 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_and_icon_SiteA🌓 -install_create_shortcut_tabbed_SiteA🌕 install_policy_app_tabbed_no_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌓 -install_create_shortcut_tabbed_SiteA🌕 install_policy_app_windowed_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌓 -install_create_shortcut_tabbed_SiteA🌕 install_policy_app_tabbed_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_platform_shortcut_and_icon_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_and_icon_SiteA🌓 -install_create_shortcut_windowed_SiteA🌕 install_policy_app_tabbed_no_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌓 -install_create_shortcut_windowed_SiteA🌕 install_policy_app_windowed_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌓 -install_create_shortcut_windowed_SiteA🌕 install_policy_app_tabbed_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌓 -install_omnibox_icon_SiteA🌕 install_policy_app_windowed_no_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌓 -install_omnibox_icon_SiteA🌕 install_policy_app_tabbed_no_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌓 -install_omnibox_icon_SiteA🌕 install_policy_app_windowed_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌓 -install_omnibox_icon_SiteA🌕 install_policy_app_tabbed_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌓 -install_menu_option_SiteA🌕 install_policy_app_windowed_no_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌓 -install_menu_option_SiteA🌕 install_policy_app_tabbed_no_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌓 -install_menu_option_SiteA🌕 install_policy_app_windowed_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌓 -install_menu_option_SiteA🌕 install_policy_app_tabbed_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_platform_shortcut_and_icon_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_and_icon_SiteA🌓 -install_policy_app_tabbed_shortcut_SiteA🌓 install_omnibox_icon_SiteA🌕 uninstall_policy_app_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌓 -install_policy_app_tabbed_shortcut_SiteA🌓 install_menu_option_SiteA🌕 uninstall_policy_app_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌓 -install_policy_app_tabbed_no_shortcut_SiteA🌓 install_create_shortcut_windowed_SiteA🌕 uninstall_policy_app_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌓 -install_policy_app_tabbed_no_shortcut_SiteA🌓 install_omnibox_icon_SiteA🌕 uninstall_policy_app_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌓 -install_policy_app_tabbed_no_shortcut_SiteA🌓 install_menu_option_SiteA🌕 uninstall_policy_app_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌓 -install_create_shortcut_windowed_SiteA🌕 close_pwa🌕 manifest_update_colors_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_color_correct_SiteA🌑 -install_create_shortcut_windowed_SiteA🌕 close_pwa🌕 manifest_update_colors_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_color_correct_SiteA🌑 -install_create_shortcut_windowed_SiteA🌕 close_pwa🌕 manifest_update_colors_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_color_correct_SiteA🌑 -install_create_shortcut_windowed_SiteA🌕 close_pwa🌕 manifest_update_colors_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_color_correct_SiteA🌑 -install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_colors_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_color_correct_SiteA🌑 -install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_colors_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_color_correct_SiteA🌑 -install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_colors_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_color_correct_SiteA🌑 -install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_colors_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_color_correct_SiteA🌑 -install_menu_option_SiteA🌕 close_pwa🌕 manifest_update_colors_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_color_correct_SiteA🌑 -install_menu_option_SiteA🌕 close_pwa🌕 manifest_update_colors_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_color_correct_SiteA🌑 -install_menu_option_SiteA🌕 close_pwa🌕 manifest_update_colors_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_color_correct_SiteA🌑 -install_menu_option_SiteA🌕 close_pwa🌕 manifest_update_colors_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_color_correct_SiteA🌑 -install_create_shortcut_windowed_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_menu_option_SiteA🌕 check_tab_not_created🌕 -install_create_shortcut_windowed_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_launch_icon_SiteA🌕 check_tab_not_created🌕 -install_create_shortcut_windowed_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_chrome_apps_SiteA🌓 check_tab_not_created🌕 -install_create_shortcut_windowed_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_platform_shortcut_SiteA🌓 check_tab_not_created🌕 -install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_menu_option_SiteA🌕 check_tab_not_created🌕 -install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_launch_icon_SiteA🌕 check_tab_not_created🌕 -install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_chrome_apps_SiteA🌓 check_tab_not_created🌕 -install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_platform_shortcut_SiteA🌓 check_tab_not_created🌕 -install_menu_option_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_menu_option_SiteA🌕 check_tab_not_created🌕 -install_menu_option_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_launch_icon_SiteA🌕 check_tab_not_created🌕 -install_menu_option_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_chrome_apps_SiteA🌓 check_tab_not_created🌕 -install_menu_option_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_platform_shortcut_SiteA🌓 check_tab_not_created🌕 -install_create_shortcut_windowed_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_menu_option_SiteA🌕 check_window_created🌕 -install_create_shortcut_windowed_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_launch_icon_SiteA🌕 check_window_created🌕 -install_create_shortcut_windowed_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_chrome_apps_SiteA🌓 check_window_created🌕 -install_create_shortcut_windowed_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_platform_shortcut_SiteA🌓 check_window_created🌕 -install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_menu_option_SiteA🌕 check_window_created🌕 -install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_launch_icon_SiteA🌕 check_window_created🌕 -install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_chrome_apps_SiteA🌓 check_window_created🌕 -install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_platform_shortcut_SiteA🌓 check_window_created🌕 -install_menu_option_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_menu_option_SiteA🌕 check_window_created🌕 -install_menu_option_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_launch_icon_SiteA🌕 check_window_created🌕 -install_menu_option_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_chrome_apps_SiteA🌓 check_window_created🌕 -install_menu_option_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_platform_shortcut_SiteA🌓 check_window_created🌕 -install_create_shortcut_windowed_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_menu_option_SiteA🌕 check_window_display_minimal🌕 -install_create_shortcut_windowed_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_launch_icon_SiteA🌕 check_window_display_minimal🌕 -install_create_shortcut_windowed_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_chrome_apps_SiteA🌓 check_window_display_minimal🌕 -install_create_shortcut_windowed_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_platform_shortcut_SiteA🌓 check_window_display_minimal🌕 -install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_menu_option_SiteA🌕 check_window_display_minimal🌕 -install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_launch_icon_SiteA🌕 check_window_display_minimal🌕 -install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_chrome_apps_SiteA🌓 check_window_display_minimal🌕 -install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_platform_shortcut_SiteA🌓 check_window_display_minimal🌕 -install_menu_option_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_menu_option_SiteA🌕 check_window_display_minimal🌕 -install_menu_option_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_launch_icon_SiteA🌕 check_window_display_minimal🌕 -install_menu_option_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_chrome_apps_SiteA🌓 check_window_display_minimal🌕 -install_menu_option_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_platform_shortcut_SiteA🌓 check_window_display_minimal🌕 -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_SiteAFoo🌕 manifest_update_scope_site_a_foo_to_SiteARoot🌕 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_SiteARoot🌕 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_SiteARoot🌕 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_SiteARoot🌕 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_SiteARoot🌕 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_SiteARoot🌕 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_SiteARoot🌕 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_SiteARoot🌕 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_SiteARoot🌕 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_SiteARoot🌕 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_SiteARoot🌕 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_SiteARoot🌕 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_SiteARoot🌕 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_SiteARoot🌕 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_SiteARoot🌕 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_SiteARoot🌕 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_SiteARoot🌕 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_SiteARoot🌕 launch_from_platform_shortcut_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_SiteARoot🌕 navigate_browser_SiteABar🌕 check_install_icon_not_shown🌕 -install_omnibox_icon_SiteAFoo🌕 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteARoot🌕 navigate_browser_SiteABar🌕 check_install_icon_not_shown🌕 -install_menu_option_SiteAFoo🌕 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteARoot🌕 navigate_browser_SiteABar🌕 check_install_icon_not_shown🌕 -install_create_shortcut_windowed_SiteAFoo🌕 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteARoot🌕 navigate_browser_SiteABar🌕 check_launch_icon_shown🌕 -install_omnibox_icon_SiteAFoo🌕 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteARoot🌕 navigate_browser_SiteABar🌕 check_launch_icon_shown🌕 -install_menu_option_SiteAFoo🌕 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteARoot🌕 navigate_browser_SiteABar🌕 check_launch_icon_shown🌕 -install_create_shortcut_windowed_SiteAFoo🌕 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteARoot🌕 navigate_browser_SiteAFoo🌕 check_install_icon_not_shown🌕 -install_omnibox_icon_SiteAFoo🌕 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteARoot🌕 navigate_browser_SiteAFoo🌕 check_install_icon_not_shown🌕 -install_menu_option_SiteAFoo🌕 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteARoot🌕 navigate_browser_SiteAFoo🌕 check_install_icon_not_shown🌕 -install_create_shortcut_windowed_SiteAFoo🌕 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteARoot🌕 navigate_browser_SiteAFoo🌕 check_launch_icon_shown🌕 -install_omnibox_icon_SiteAFoo🌕 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteARoot🌕 navigate_browser_SiteAFoo🌕 check_launch_icon_shown🌕 -install_menu_option_SiteAFoo🌕 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteARoot🌕 navigate_browser_SiteAFoo🌕 check_launch_icon_shown🌕 -switch_incognito_profile🌑 navigate_browser_SiteA🌑 check_create_shortcut_not_shown🌑 -switch_incognito_profile🌑 navigate_browser_SiteC🌑 check_create_shortcut_not_shown🌑 -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🌕 -navigate_browser_SiteA🌕 check_create_shortcut_shown🌑 -navigate_browser_SiteAFoo🌕 check_install_icon_shown🌕 -navigate_browser_SiteC🌕 check_create_shortcut_shown🌑 -navigate_browser_SiteC🌕 check_install_icon_not_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_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🌕 -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🌕 -install_create_shortcut_windowed_SiteA🌕 navigate_pwa_site_a_to_SiteB🌕 check_app_title_site_a_is_SiteA🌑 -install_omnibox_icon_SiteA🌕 navigate_pwa_site_a_to_SiteB🌕 check_app_title_site_a_is_SiteA🌑 -install_menu_option_SiteA🌕 navigate_pwa_site_a_to_SiteB🌕 check_app_title_site_a_is_SiteA🌑 -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🌑 -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_SiteB🌕 check_site_handles_file_SiteB_Txt🌑 check_site_handles_file_SiteB_Png🌑 -install_omnibox_icon_SiteB🌕 check_site_handles_file_SiteB_Txt🌑 check_site_handles_file_SiteB_Png🌑 -install_policy_app_windowed_no_shortcut_SiteB🌓 check_site_handles_file_SiteB_Txt🌑 check_site_handles_file_SiteB_Png🌑 -install_policy_app_windowed_shortcut_SiteB🌓 check_site_handles_file_SiteB_Txt🌑 check_site_handles_file_SiteB_Png🌑 -install_menu_option_SiteB🌕 check_site_handles_file_SiteB_Txt🌑 check_site_handles_file_SiteB_Png🌑 -install_create_shortcut_tabbed_SiteB🌕 check_site_handles_file_SiteB_Txt🌑 check_site_handles_file_SiteB_Png🌑 -install_policy_app_tabbed_shortcut_SiteB🌓 check_site_handles_file_SiteB_Txt🌑 check_site_handles_file_SiteB_Png🌑 -install_policy_app_tabbed_no_shortcut_SiteB🌓 check_site_handles_file_SiteB_Txt🌑 check_site_handles_file_SiteB_Png🌑 -install_create_shortcut_windowed_SiteB🌕 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 -install_omnibox_icon_SiteB🌕 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 -install_policy_app_windowed_no_shortcut_SiteB🌓 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 -install_policy_app_windowed_shortcut_SiteB🌓 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 -install_menu_option_SiteB🌕 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 -install_create_shortcut_tabbed_SiteB🌕 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 -install_policy_app_tabbed_shortcut_SiteB🌓 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 -install_policy_app_tabbed_no_shortcut_SiteB🌓 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 -install_create_shortcut_windowed_SiteB🌕 launch_file_OneTextFile🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_One🌑 check_files_loaded_in_site_SiteB_OneTextFile🌑 -install_omnibox_icon_SiteB🌕 launch_file_OneTextFile🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_One🌑 check_files_loaded_in_site_SiteB_OneTextFile🌑 -install_policy_app_windowed_no_shortcut_SiteB🌓 launch_file_OneTextFile🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_One🌑 check_files_loaded_in_site_SiteB_OneTextFile🌑 -install_policy_app_windowed_shortcut_SiteB🌓 launch_file_OneTextFile🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_One🌑 check_files_loaded_in_site_SiteB_OneTextFile🌑 -install_menu_option_SiteB🌕 launch_file_OneTextFile🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_One🌑 check_files_loaded_in_site_SiteB_OneTextFile🌑 -install_create_shortcut_tabbed_SiteB🌕 launch_file_OneTextFile🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_One🌑 check_files_loaded_in_site_SiteB_OneTextFile🌑 -install_policy_app_tabbed_shortcut_SiteB🌓 launch_file_OneTextFile🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_One🌑 check_files_loaded_in_site_SiteB_OneTextFile🌑 -install_policy_app_tabbed_no_shortcut_SiteB🌓 launch_file_OneTextFile🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_One🌑 check_files_loaded_in_site_SiteB_OneTextFile🌑 -install_create_shortcut_windowed_SiteB🌕 launch_file_MultipleTextFiles🌑 check_file_handling_dialog_Shown🌑 -install_omnibox_icon_SiteB🌕 launch_file_MultipleTextFiles🌑 check_file_handling_dialog_Shown🌑 -install_policy_app_windowed_no_shortcut_SiteB🌓 launch_file_MultipleTextFiles🌑 check_file_handling_dialog_Shown🌑 -install_policy_app_windowed_shortcut_SiteB🌓 launch_file_MultipleTextFiles🌑 check_file_handling_dialog_Shown🌑 -install_menu_option_SiteB🌕 launch_file_MultipleTextFiles🌑 check_file_handling_dialog_Shown🌑 -install_create_shortcut_tabbed_SiteB🌕 launch_file_MultipleTextFiles🌑 check_file_handling_dialog_Shown🌑 -install_policy_app_tabbed_shortcut_SiteB🌓 launch_file_MultipleTextFiles🌑 check_file_handling_dialog_Shown🌑 -install_policy_app_tabbed_no_shortcut_SiteB🌓 launch_file_MultipleTextFiles🌑 check_file_handling_dialog_Shown🌑 -install_create_shortcut_windowed_SiteB🌕 launch_file_MultipleTextFiles🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_One🌑 check_files_loaded_in_site_SiteB_MultipleTextFiles🌑 -install_omnibox_icon_SiteB🌕 launch_file_MultipleTextFiles🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_One🌑 check_files_loaded_in_site_SiteB_MultipleTextFiles🌑 -install_policy_app_windowed_no_shortcut_SiteB🌓 launch_file_MultipleTextFiles🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_One🌑 check_files_loaded_in_site_SiteB_MultipleTextFiles🌑 -install_policy_app_windowed_shortcut_SiteB🌓 launch_file_MultipleTextFiles🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_One🌑 check_files_loaded_in_site_SiteB_MultipleTextFiles🌑 -install_menu_option_SiteB🌕 launch_file_MultipleTextFiles🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_One🌑 check_files_loaded_in_site_SiteB_MultipleTextFiles🌑 -install_create_shortcut_tabbed_SiteB🌕 launch_file_MultipleTextFiles🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_One🌑 check_files_loaded_in_site_SiteB_MultipleTextFiles🌑 -install_policy_app_tabbed_shortcut_SiteB🌓 launch_file_MultipleTextFiles🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_One🌑 check_files_loaded_in_site_SiteB_MultipleTextFiles🌑 -install_policy_app_tabbed_no_shortcut_SiteB🌓 launch_file_MultipleTextFiles🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_One🌑 check_files_loaded_in_site_SiteB_MultipleTextFiles🌑 -install_create_shortcut_windowed_SiteB🌕 launch_file_OnePngFile🌑 check_file_handling_dialog_Shown🌑 -install_omnibox_icon_SiteB🌕 launch_file_OnePngFile🌑 check_file_handling_dialog_Shown🌑 -install_policy_app_windowed_no_shortcut_SiteB🌓 launch_file_OnePngFile🌑 check_file_handling_dialog_Shown🌑 -install_policy_app_windowed_shortcut_SiteB🌓 launch_file_OnePngFile🌑 check_file_handling_dialog_Shown🌑 -install_menu_option_SiteB🌕 launch_file_OnePngFile🌑 check_file_handling_dialog_Shown🌑 -install_create_shortcut_tabbed_SiteB🌕 launch_file_OnePngFile🌑 check_file_handling_dialog_Shown🌑 -install_policy_app_tabbed_shortcut_SiteB🌓 launch_file_OnePngFile🌑 check_file_handling_dialog_Shown🌑 -install_policy_app_tabbed_no_shortcut_SiteB🌓 launch_file_OnePngFile🌑 check_file_handling_dialog_Shown🌑 -install_create_shortcut_windowed_SiteB🌕 launch_file_OnePngFile🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_One🌑 check_files_loaded_in_site_SiteB_OnePngFile🌑 -install_omnibox_icon_SiteB🌕 launch_file_OnePngFile🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_One🌑 check_files_loaded_in_site_SiteB_OnePngFile🌑 -install_policy_app_windowed_no_shortcut_SiteB🌓 launch_file_OnePngFile🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_One🌑 check_files_loaded_in_site_SiteB_OnePngFile🌑 -install_policy_app_windowed_shortcut_SiteB🌓 launch_file_OnePngFile🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_One🌑 check_files_loaded_in_site_SiteB_OnePngFile🌑 -install_menu_option_SiteB🌕 launch_file_OnePngFile🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_One🌑 check_files_loaded_in_site_SiteB_OnePngFile🌑 -install_create_shortcut_tabbed_SiteB🌕 launch_file_OnePngFile🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_One🌑 check_files_loaded_in_site_SiteB_OnePngFile🌑 -install_policy_app_tabbed_shortcut_SiteB🌓 launch_file_OnePngFile🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_One🌑 check_files_loaded_in_site_SiteB_OnePngFile🌑 -install_policy_app_tabbed_no_shortcut_SiteB🌓 launch_file_OnePngFile🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_One🌑 check_files_loaded_in_site_SiteB_OnePngFile🌑 -install_create_shortcut_windowed_SiteB🌕 launch_file_MultiplePngFiles🌑 check_file_handling_dialog_Shown🌑 -install_omnibox_icon_SiteB🌕 launch_file_MultiplePngFiles🌑 check_file_handling_dialog_Shown🌑 -install_policy_app_windowed_no_shortcut_SiteB🌓 launch_file_MultiplePngFiles🌑 check_file_handling_dialog_Shown🌑 -install_policy_app_windowed_shortcut_SiteB🌓 launch_file_MultiplePngFiles🌑 check_file_handling_dialog_Shown🌑 -install_menu_option_SiteB🌕 launch_file_MultiplePngFiles🌑 check_file_handling_dialog_Shown🌑 -install_create_shortcut_tabbed_SiteB🌕 launch_file_MultiplePngFiles🌑 check_file_handling_dialog_Shown🌑 -install_policy_app_tabbed_shortcut_SiteB🌓 launch_file_MultiplePngFiles🌑 check_file_handling_dialog_Shown🌑 -install_policy_app_tabbed_no_shortcut_SiteB🌓 launch_file_MultiplePngFiles🌑 check_file_handling_dialog_Shown🌑 -install_create_shortcut_windowed_SiteB🌕 launch_file_MultiplePngFiles🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_Two🌑 check_files_loaded_in_site_SiteB_MultiplePngFiles🌑 -install_omnibox_icon_SiteB🌕 launch_file_MultiplePngFiles🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_Two🌑 check_files_loaded_in_site_SiteB_MultiplePngFiles🌑 -install_policy_app_windowed_no_shortcut_SiteB🌓 launch_file_MultiplePngFiles🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_Two🌑 check_files_loaded_in_site_SiteB_MultiplePngFiles🌑 -install_policy_app_windowed_shortcut_SiteB🌓 launch_file_MultiplePngFiles🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_Two🌑 check_files_loaded_in_site_SiteB_MultiplePngFiles🌑 -install_menu_option_SiteB🌕 launch_file_MultiplePngFiles🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_Two🌑 check_files_loaded_in_site_SiteB_MultiplePngFiles🌑 -install_create_shortcut_tabbed_SiteB🌕 launch_file_MultiplePngFiles🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_Two🌑 check_files_loaded_in_site_SiteB_MultiplePngFiles🌑 -install_policy_app_tabbed_shortcut_SiteB🌓 launch_file_MultiplePngFiles🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_Two🌑 check_files_loaded_in_site_SiteB_MultiplePngFiles🌑 -install_policy_app_tabbed_no_shortcut_SiteB🌓 launch_file_MultiplePngFiles🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_Two🌑 check_files_loaded_in_site_SiteB_MultiplePngFiles🌑 -install_create_shortcut_windowed_SiteB🌕 launch_file_OneTextFile🌑 file_handling_dialog_Allow_Remember🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_NotShown🌑 check_pwa_window_created_SiteB_One🌑 -install_omnibox_icon_SiteB🌕 launch_file_OneTextFile🌑 file_handling_dialog_Allow_Remember🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_NotShown🌑 check_pwa_window_created_SiteB_One🌑 -install_policy_app_windowed_no_shortcut_SiteB🌓 launch_file_OneTextFile🌑 file_handling_dialog_Allow_Remember🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_NotShown🌑 check_pwa_window_created_SiteB_One🌑 -install_policy_app_windowed_shortcut_SiteB🌓 launch_file_OneTextFile🌑 file_handling_dialog_Allow_Remember🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_NotShown🌑 check_pwa_window_created_SiteB_One🌑 -install_menu_option_SiteB🌕 launch_file_OneTextFile🌑 file_handling_dialog_Allow_Remember🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_NotShown🌑 check_pwa_window_created_SiteB_One🌑 -install_create_shortcut_tabbed_SiteB🌕 launch_file_OneTextFile🌑 file_handling_dialog_Allow_Remember🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_NotShown🌑 check_pwa_window_created_SiteB_One🌑 -install_policy_app_tabbed_shortcut_SiteB🌓 launch_file_OneTextFile🌑 file_handling_dialog_Allow_Remember🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_NotShown🌑 check_pwa_window_created_SiteB_One🌑 -install_policy_app_tabbed_no_shortcut_SiteB🌓 launch_file_OneTextFile🌑 file_handling_dialog_Allow_Remember🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_NotShown🌑 check_pwa_window_created_SiteB_One🌑 -install_create_shortcut_windowed_SiteB🌕 launch_file_OneTextFile🌑 file_handling_dialog_Allow_AskAgain🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 -install_omnibox_icon_SiteB🌕 launch_file_OneTextFile🌑 file_handling_dialog_Allow_AskAgain🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 -install_policy_app_windowed_no_shortcut_SiteB🌓 launch_file_OneTextFile🌑 file_handling_dialog_Allow_AskAgain🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 -install_policy_app_windowed_shortcut_SiteB🌓 launch_file_OneTextFile🌑 file_handling_dialog_Allow_AskAgain🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 -install_menu_option_SiteB🌕 launch_file_OneTextFile🌑 file_handling_dialog_Allow_AskAgain🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 -install_create_shortcut_tabbed_SiteB🌕 launch_file_OneTextFile🌑 file_handling_dialog_Allow_AskAgain🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 -install_policy_app_tabbed_shortcut_SiteB🌓 launch_file_OneTextFile🌑 file_handling_dialog_Allow_AskAgain🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 -install_policy_app_tabbed_no_shortcut_SiteB🌓 launch_file_OneTextFile🌑 file_handling_dialog_Allow_AskAgain🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 -install_create_shortcut_windowed_SiteB🌕 launch_file_OneTextFile🌑 file_handling_dialog_Deny_AskAgain🌑 check_window_not_created🌑 check_site_handles_file_SiteB_Txt🌑 check_site_handles_file_SiteB_Png🌑 -install_omnibox_icon_SiteB🌕 launch_file_OneTextFile🌑 file_handling_dialog_Deny_AskAgain🌑 check_window_not_created🌑 check_site_handles_file_SiteB_Txt🌑 check_site_handles_file_SiteB_Png🌑 -install_policy_app_windowed_no_shortcut_SiteB🌓 launch_file_OneTextFile🌑 file_handling_dialog_Deny_AskAgain🌑 check_window_not_created🌑 check_site_handles_file_SiteB_Txt🌑 check_site_handles_file_SiteB_Png🌑 -install_policy_app_windowed_shortcut_SiteB🌓 launch_file_OneTextFile🌑 file_handling_dialog_Deny_AskAgain🌑 check_window_not_created🌑 check_site_handles_file_SiteB_Txt🌑 check_site_handles_file_SiteB_Png🌑 -install_menu_option_SiteB🌕 launch_file_OneTextFile🌑 file_handling_dialog_Deny_AskAgain🌑 check_window_not_created🌑 check_site_handles_file_SiteB_Txt🌑 check_site_handles_file_SiteB_Png🌑 -install_create_shortcut_tabbed_SiteB🌕 launch_file_OneTextFile🌑 file_handling_dialog_Deny_AskAgain🌑 check_window_not_created🌑 check_site_handles_file_SiteB_Txt🌑 check_site_handles_file_SiteB_Png🌑 -install_policy_app_tabbed_shortcut_SiteB🌓 launch_file_OneTextFile🌑 file_handling_dialog_Deny_AskAgain🌑 check_window_not_created🌑 check_site_handles_file_SiteB_Txt🌑 check_site_handles_file_SiteB_Png🌑 -install_policy_app_tabbed_no_shortcut_SiteB🌓 launch_file_OneTextFile🌑 file_handling_dialog_Deny_AskAgain🌑 check_window_not_created🌑 check_site_handles_file_SiteB_Txt🌑 check_site_handles_file_SiteB_Png🌑 -install_create_shortcut_windowed_SiteB🌕 launch_file_OneTextFile🌑 file_handling_dialog_Deny_AskAgain🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 -install_omnibox_icon_SiteB🌕 launch_file_OneTextFile🌑 file_handling_dialog_Deny_AskAgain🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 -install_policy_app_windowed_no_shortcut_SiteB🌓 launch_file_OneTextFile🌑 file_handling_dialog_Deny_AskAgain🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 -install_policy_app_windowed_shortcut_SiteB🌓 launch_file_OneTextFile🌑 file_handling_dialog_Deny_AskAgain🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 -install_menu_option_SiteB🌕 launch_file_OneTextFile🌑 file_handling_dialog_Deny_AskAgain🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 -install_create_shortcut_tabbed_SiteB🌕 launch_file_OneTextFile🌑 file_handling_dialog_Deny_AskAgain🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 -install_policy_app_tabbed_shortcut_SiteB🌓 launch_file_OneTextFile🌑 file_handling_dialog_Deny_AskAgain🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 -install_policy_app_tabbed_no_shortcut_SiteB🌓 launch_file_OneTextFile🌑 file_handling_dialog_Deny_AskAgain🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 -install_create_shortcut_windowed_SiteB🌕 launch_file_OneTextFile🌑 file_handling_dialog_Deny_Remember🌑 check_window_not_created🌑 check_site_not_handles_file_SiteB_Txt🌑 check_site_not_handles_file_SiteB_Png🌑 -install_omnibox_icon_SiteB🌕 launch_file_OneTextFile🌑 file_handling_dialog_Deny_Remember🌑 check_window_not_created🌑 check_site_not_handles_file_SiteB_Txt🌑 check_site_not_handles_file_SiteB_Png🌑 -install_policy_app_windowed_no_shortcut_SiteB🌓 launch_file_OneTextFile🌑 file_handling_dialog_Deny_Remember🌑 check_window_not_created🌑 check_site_not_handles_file_SiteB_Txt🌑 check_site_not_handles_file_SiteB_Png🌑 -install_policy_app_windowed_shortcut_SiteB🌓 launch_file_OneTextFile🌑 file_handling_dialog_Deny_Remember🌑 check_window_not_created🌑 check_site_not_handles_file_SiteB_Txt🌑 check_site_not_handles_file_SiteB_Png🌑 -install_menu_option_SiteB🌕 launch_file_OneTextFile🌑 file_handling_dialog_Deny_Remember🌑 check_window_not_created🌑 check_site_not_handles_file_SiteB_Txt🌑 check_site_not_handles_file_SiteB_Png🌑 -install_create_shortcut_tabbed_SiteB🌕 launch_file_OneTextFile🌑 file_handling_dialog_Deny_Remember🌑 check_window_not_created🌑 check_site_not_handles_file_SiteB_Txt🌑 check_site_not_handles_file_SiteB_Png🌑 -install_policy_app_tabbed_shortcut_SiteB🌓 launch_file_OneTextFile🌑 file_handling_dialog_Deny_Remember🌑 check_window_not_created🌑 check_site_not_handles_file_SiteB_Txt🌑 check_site_not_handles_file_SiteB_Png🌑 -install_policy_app_tabbed_no_shortcut_SiteB🌓 launch_file_OneTextFile🌑 file_handling_dialog_Deny_Remember🌑 check_window_not_created🌑 check_site_not_handles_file_SiteB_Txt🌑 check_site_not_handles_file_SiteB_Png🌑 -install_create_shortcut_windowed_SiteB🌕 add_file_handling_policy_approval_SiteB🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_NotShown🌑 check_pwa_window_created_SiteB_One🌑 -install_omnibox_icon_SiteB🌕 add_file_handling_policy_approval_SiteB🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_NotShown🌑 check_pwa_window_created_SiteB_One🌑 -install_policy_app_windowed_no_shortcut_SiteB🌓 add_file_handling_policy_approval_SiteB🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_NotShown🌑 check_pwa_window_created_SiteB_One🌑 -install_policy_app_windowed_shortcut_SiteB🌓 add_file_handling_policy_approval_SiteB🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_NotShown🌑 check_pwa_window_created_SiteB_One🌑 -install_menu_option_SiteB🌕 add_file_handling_policy_approval_SiteB🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_NotShown🌑 check_pwa_window_created_SiteB_One🌑 -install_create_shortcut_tabbed_SiteB🌕 add_file_handling_policy_approval_SiteB🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_NotShown🌑 check_pwa_window_created_SiteB_One🌑 -install_policy_app_tabbed_shortcut_SiteB🌓 add_file_handling_policy_approval_SiteB🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_NotShown🌑 check_pwa_window_created_SiteB_One🌑 -install_policy_app_tabbed_no_shortcut_SiteB🌓 add_file_handling_policy_approval_SiteB🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_NotShown🌑 check_pwa_window_created_SiteB_One🌑 -install_create_shortcut_windowed_SiteB🌕 add_file_handling_policy_approval_SiteB🌑 remove_file_handling_policy_approval_SiteB🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 -install_omnibox_icon_SiteB🌕 add_file_handling_policy_approval_SiteB🌑 remove_file_handling_policy_approval_SiteB🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 -install_policy_app_windowed_no_shortcut_SiteB🌓 add_file_handling_policy_approval_SiteB🌑 remove_file_handling_policy_approval_SiteB🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 -install_policy_app_windowed_shortcut_SiteB🌓 add_file_handling_policy_approval_SiteB🌑 remove_file_handling_policy_approval_SiteB🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 -install_menu_option_SiteB🌕 add_file_handling_policy_approval_SiteB🌑 remove_file_handling_policy_approval_SiteB🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 -install_create_shortcut_tabbed_SiteB🌕 add_file_handling_policy_approval_SiteB🌑 remove_file_handling_policy_approval_SiteB🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 -install_policy_app_tabbed_shortcut_SiteB🌓 add_file_handling_policy_approval_SiteB🌑 remove_file_handling_policy_approval_SiteB🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 -install_policy_app_tabbed_no_shortcut_SiteB🌓 add_file_handling_policy_approval_SiteB🌑 remove_file_handling_policy_approval_SiteB🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 +# This is a generated file. +# Full coverage: 53%, with partial coverage: 70% +install_create_shortcut_windowed_SiteA🌕 manifest_update_title_SiteA🌑 accept_app_id_update_dialog🌑 close_pwa🌑 launch_from_menu_option_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 +install_create_shortcut_windowed_SiteA🌕 manifest_update_title_SiteA🌑 accept_app_id_update_dialog🌑 close_pwa🌑 launch_from_launch_icon_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 +install_create_shortcut_windowed_SiteA🌕 manifest_update_title_SiteA🌑 accept_app_id_update_dialog🌑 close_pwa🌑 launch_from_chrome_apps_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 +install_create_shortcut_windowed_SiteA🌕 manifest_update_title_SiteA🌑 accept_app_id_update_dialog🌑 close_pwa🌑 launch_from_platform_shortcut_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 +install_omnibox_icon_SiteA🌕 manifest_update_title_SiteA🌑 accept_app_id_update_dialog🌑 close_pwa🌑 launch_from_menu_option_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 +install_omnibox_icon_SiteA🌕 manifest_update_title_SiteA🌑 accept_app_id_update_dialog🌑 close_pwa🌑 launch_from_launch_icon_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 +install_omnibox_icon_SiteA🌕 manifest_update_title_SiteA🌑 accept_app_id_update_dialog🌑 close_pwa🌑 launch_from_chrome_apps_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 +install_omnibox_icon_SiteA🌕 manifest_update_title_SiteA🌑 accept_app_id_update_dialog🌑 close_pwa🌑 launch_from_platform_shortcut_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 +install_menu_option_SiteA🌕 manifest_update_title_SiteA🌑 accept_app_id_update_dialog🌑 close_pwa🌑 launch_from_menu_option_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 +install_menu_option_SiteA🌕 manifest_update_title_SiteA🌑 accept_app_id_update_dialog🌑 close_pwa🌑 launch_from_launch_icon_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 +install_menu_option_SiteA🌕 manifest_update_title_SiteA🌑 accept_app_id_update_dialog🌑 close_pwa🌑 launch_from_chrome_apps_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 +install_menu_option_SiteA🌕 manifest_update_title_SiteA🌑 accept_app_id_update_dialog🌑 close_pwa🌑 launch_from_platform_shortcut_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 +install_create_shortcut_windowed_SiteA🌕 manifest_update_title_SiteA🌑 deny_app_update_dialog🌑 check_app_not_in_list_SiteA🌑 check_platform_shortcut_not_exists_SiteA🌑 +install_omnibox_icon_SiteA🌕 manifest_update_title_SiteA🌑 deny_app_update_dialog🌑 check_app_not_in_list_SiteA🌑 check_platform_shortcut_not_exists_SiteA🌑 +install_menu_option_SiteA🌕 manifest_update_title_SiteA🌑 deny_app_update_dialog🌑 check_app_not_in_list_SiteA🌑 check_platform_shortcut_not_exists_SiteA🌑 +install_create_shortcut_windowed_SiteA🌕 close_pwa🌕 manifest_update_icon_SiteA🌑 check_app_in_list_icon_correct_SiteA🌑 +install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_icon_SiteA🌑 check_app_in_list_icon_correct_SiteA🌑 +install_menu_option_SiteA🌕 close_pwa🌕 manifest_update_icon_SiteA🌑 check_app_in_list_icon_correct_SiteA🌑 +install_create_shortcut_windowed_SiteA🌕 close_pwa🌕 manifest_update_icon_SiteA🌑 check_platform_shortcut_and_icon_SiteA🌑 +install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_icon_SiteA🌑 check_platform_shortcut_and_icon_SiteA🌑 +install_menu_option_SiteA🌕 close_pwa🌕 manifest_update_icon_SiteA🌑 check_platform_shortcut_and_icon_SiteA🌑 +install_policy_app_windowed_no_shortcut_SiteA🌓 manifest_update_title_SiteA🌑 check_update_dialog_not_shown🌑 close_pwa🌑 launch_from_menu_option_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 +install_policy_app_windowed_no_shortcut_SiteA🌓 manifest_update_title_SiteA🌑 check_update_dialog_not_shown🌑 close_pwa🌑 launch_from_launch_icon_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 +install_policy_app_windowed_no_shortcut_SiteA🌓 manifest_update_title_SiteA🌑 check_update_dialog_not_shown🌑 close_pwa🌑 launch_from_chrome_apps_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 +install_policy_app_windowed_no_shortcut_SiteA🌓 manifest_update_title_SiteA🌑 check_update_dialog_not_shown🌑 close_pwa🌑 launch_from_platform_shortcut_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌓 manifest_update_title_SiteA🌑 check_update_dialog_not_shown🌑 close_pwa🌑 launch_from_menu_option_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌓 manifest_update_title_SiteA🌑 check_update_dialog_not_shown🌑 close_pwa🌑 launch_from_launch_icon_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌓 manifest_update_title_SiteA🌑 check_update_dialog_not_shown🌑 close_pwa🌑 launch_from_chrome_apps_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌓 manifest_update_title_SiteA🌑 check_update_dialog_not_shown🌑 close_pwa🌑 launch_from_platform_shortcut_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 +install_policy_app_windowed_shortcut_SiteA🌓 manifest_update_title_SiteA🌑 check_update_dialog_not_shown🌑 close_pwa🌑 launch_from_menu_option_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 +install_policy_app_windowed_shortcut_SiteA🌓 manifest_update_title_SiteA🌑 check_update_dialog_not_shown🌑 close_pwa🌑 launch_from_launch_icon_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 +install_policy_app_windowed_shortcut_SiteA🌓 manifest_update_title_SiteA🌑 check_update_dialog_not_shown🌑 close_pwa🌑 launch_from_chrome_apps_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 +install_policy_app_windowed_shortcut_SiteA🌓 manifest_update_title_SiteA🌑 check_update_dialog_not_shown🌑 close_pwa🌑 launch_from_platform_shortcut_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 manifest_update_title_SiteA🌑 check_update_dialog_not_shown🌑 close_pwa🌑 launch_from_menu_option_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 manifest_update_title_SiteA🌑 check_update_dialog_not_shown🌑 close_pwa🌑 launch_from_launch_icon_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 manifest_update_title_SiteA🌑 check_update_dialog_not_shown🌑 close_pwa🌑 launch_from_chrome_apps_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 manifest_update_title_SiteA🌑 check_update_dialog_not_shown🌑 close_pwa🌑 launch_from_platform_shortcut_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 +install_create_shortcut_windowed_SiteA🌕 apply_run_on_os_login_policy_blocked_SiteA🌕 check_user_cannot_set_run_on_os_login_SiteA🌕 +install_omnibox_icon_SiteA🌕 apply_run_on_os_login_policy_blocked_SiteA🌕 check_user_cannot_set_run_on_os_login_SiteA🌕 +install_policy_app_windowed_no_shortcut_SiteA🌓 apply_run_on_os_login_policy_blocked_SiteA🌕 check_user_cannot_set_run_on_os_login_SiteA🌕 +install_policy_app_windowed_shortcut_SiteA🌓 apply_run_on_os_login_policy_blocked_SiteA🌕 check_user_cannot_set_run_on_os_login_SiteA🌕 +install_menu_option_SiteA🌕 apply_run_on_os_login_policy_blocked_SiteA🌕 check_user_cannot_set_run_on_os_login_SiteA🌕 +install_create_shortcut_tabbed_SiteA🌕 apply_run_on_os_login_policy_blocked_SiteA🌕 check_user_cannot_set_run_on_os_login_SiteA🌕 +install_policy_app_tabbed_shortcut_SiteA🌓 apply_run_on_os_login_policy_blocked_SiteA🌕 check_user_cannot_set_run_on_os_login_SiteA🌕 +install_policy_app_tabbed_no_shortcut_SiteA🌓 apply_run_on_os_login_policy_blocked_SiteA🌕 check_user_cannot_set_run_on_os_login_SiteA🌕 +install_create_shortcut_windowed_SiteA🌕 enable_run_on_os_login_SiteA🌕 apply_run_on_os_login_policy_blocked_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 +install_omnibox_icon_SiteA🌕 enable_run_on_os_login_SiteA🌕 apply_run_on_os_login_policy_blocked_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 +install_policy_app_windowed_no_shortcut_SiteA🌓 enable_run_on_os_login_SiteA🌕 apply_run_on_os_login_policy_blocked_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 +install_policy_app_windowed_shortcut_SiteA🌓 enable_run_on_os_login_SiteA🌕 apply_run_on_os_login_policy_blocked_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 +install_menu_option_SiteA🌕 enable_run_on_os_login_SiteA🌕 apply_run_on_os_login_policy_blocked_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 +install_create_shortcut_tabbed_SiteA🌕 enable_run_on_os_login_SiteA🌕 apply_run_on_os_login_policy_blocked_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 +install_policy_app_tabbed_shortcut_SiteA🌓 enable_run_on_os_login_SiteA🌕 apply_run_on_os_login_policy_blocked_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 +install_policy_app_tabbed_no_shortcut_SiteA🌓 enable_run_on_os_login_SiteA🌕 apply_run_on_os_login_policy_blocked_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 +install_create_shortcut_windowed_SiteA🌕 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_run_on_os_login_enabled_SiteA🌕 +install_omnibox_icon_SiteA🌕 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_run_on_os_login_enabled_SiteA🌕 +install_policy_app_windowed_no_shortcut_SiteA🌓 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_run_on_os_login_enabled_SiteA🌕 +install_policy_app_windowed_shortcut_SiteA🌓 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_run_on_os_login_enabled_SiteA🌕 +install_menu_option_SiteA🌕 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_run_on_os_login_enabled_SiteA🌕 +install_create_shortcut_tabbed_SiteA🌕 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_run_on_os_login_enabled_SiteA🌕 +install_policy_app_tabbed_shortcut_SiteA🌓 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_run_on_os_login_enabled_SiteA🌕 +install_policy_app_tabbed_no_shortcut_SiteA🌓 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_run_on_os_login_enabled_SiteA🌕 +install_create_shortcut_windowed_SiteA🌕 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_user_cannot_set_run_on_os_login_SiteA🌕 +install_omnibox_icon_SiteA🌕 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_user_cannot_set_run_on_os_login_SiteA🌕 +install_policy_app_windowed_no_shortcut_SiteA🌓 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_user_cannot_set_run_on_os_login_SiteA🌕 +install_policy_app_windowed_shortcut_SiteA🌓 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_user_cannot_set_run_on_os_login_SiteA🌕 +install_menu_option_SiteA🌕 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_user_cannot_set_run_on_os_login_SiteA🌕 +install_create_shortcut_tabbed_SiteA🌕 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_user_cannot_set_run_on_os_login_SiteA🌕 +install_policy_app_tabbed_shortcut_SiteA🌓 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_user_cannot_set_run_on_os_login_SiteA🌕 +install_policy_app_tabbed_no_shortcut_SiteA🌓 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_user_cannot_set_run_on_os_login_SiteA🌕 +install_create_shortcut_windowed_SiteA🌕 enable_run_on_os_login_SiteA🌕 check_run_on_os_login_enabled_SiteA🌕 +install_omnibox_icon_SiteA🌕 enable_run_on_os_login_SiteA🌕 check_run_on_os_login_enabled_SiteA🌕 +install_policy_app_windowed_no_shortcut_SiteA🌓 enable_run_on_os_login_SiteA🌕 check_run_on_os_login_enabled_SiteA🌕 +install_policy_app_windowed_shortcut_SiteA🌓 enable_run_on_os_login_SiteA🌕 check_run_on_os_login_enabled_SiteA🌕 +install_menu_option_SiteA🌕 enable_run_on_os_login_SiteA🌕 check_run_on_os_login_enabled_SiteA🌕 +install_create_shortcut_tabbed_SiteA🌕 enable_run_on_os_login_SiteA🌕 check_run_on_os_login_enabled_SiteA🌕 +install_policy_app_tabbed_shortcut_SiteA🌓 enable_run_on_os_login_SiteA🌕 check_run_on_os_login_enabled_SiteA🌕 +install_policy_app_tabbed_no_shortcut_SiteA🌓 enable_run_on_os_login_SiteA🌕 check_run_on_os_login_enabled_SiteA🌕 +install_create_shortcut_windowed_SiteA🌕 enable_run_on_os_login_SiteA🌕 disable_run_on_os_login_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 +install_omnibox_icon_SiteA🌕 enable_run_on_os_login_SiteA🌕 disable_run_on_os_login_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 +install_policy_app_windowed_no_shortcut_SiteA🌓 enable_run_on_os_login_SiteA🌕 disable_run_on_os_login_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 +install_policy_app_windowed_shortcut_SiteA🌓 enable_run_on_os_login_SiteA🌕 disable_run_on_os_login_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 +install_menu_option_SiteA🌕 enable_run_on_os_login_SiteA🌕 disable_run_on_os_login_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 +install_create_shortcut_tabbed_SiteA🌕 enable_run_on_os_login_SiteA🌕 disable_run_on_os_login_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 +install_policy_app_tabbed_shortcut_SiteA🌓 enable_run_on_os_login_SiteA🌕 disable_run_on_os_login_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 +install_policy_app_tabbed_no_shortcut_SiteA🌓 enable_run_on_os_login_SiteA🌕 disable_run_on_os_login_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 +install_create_shortcut_windowed_SiteA🌕 apply_run_on_os_login_policy_run_windowed_SiteA🌕 remove_run_on_os_login_policy_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 +install_omnibox_icon_SiteA🌕 apply_run_on_os_login_policy_run_windowed_SiteA🌕 remove_run_on_os_login_policy_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 +install_policy_app_windowed_no_shortcut_SiteA🌓 apply_run_on_os_login_policy_run_windowed_SiteA🌕 remove_run_on_os_login_policy_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 +install_policy_app_windowed_shortcut_SiteA🌓 apply_run_on_os_login_policy_run_windowed_SiteA🌕 remove_run_on_os_login_policy_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 +install_menu_option_SiteA🌕 apply_run_on_os_login_policy_run_windowed_SiteA🌕 remove_run_on_os_login_policy_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 +install_create_shortcut_tabbed_SiteA🌕 apply_run_on_os_login_policy_run_windowed_SiteA🌕 remove_run_on_os_login_policy_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 +install_policy_app_tabbed_shortcut_SiteA🌓 apply_run_on_os_login_policy_run_windowed_SiteA🌕 remove_run_on_os_login_policy_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 +install_policy_app_tabbed_no_shortcut_SiteA🌓 apply_run_on_os_login_policy_run_windowed_SiteA🌕 remove_run_on_os_login_policy_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 +install_create_shortcut_windowed_SiteA🌕 enable_run_on_os_login_SiteA🌕 apply_run_on_os_login_policy_blocked_SiteA🌕 remove_run_on_os_login_policy_SiteA🌕 check_run_on_os_login_enabled_SiteA🌕 +install_omnibox_icon_SiteA🌕 enable_run_on_os_login_SiteA🌕 apply_run_on_os_login_policy_blocked_SiteA🌕 remove_run_on_os_login_policy_SiteA🌕 check_run_on_os_login_enabled_SiteA🌕 +install_policy_app_windowed_no_shortcut_SiteA🌓 enable_run_on_os_login_SiteA🌕 apply_run_on_os_login_policy_blocked_SiteA🌕 remove_run_on_os_login_policy_SiteA🌕 check_run_on_os_login_enabled_SiteA🌕 +install_policy_app_windowed_shortcut_SiteA🌓 enable_run_on_os_login_SiteA🌕 apply_run_on_os_login_policy_blocked_SiteA🌕 remove_run_on_os_login_policy_SiteA🌕 check_run_on_os_login_enabled_SiteA🌕 +install_menu_option_SiteA🌕 enable_run_on_os_login_SiteA🌕 apply_run_on_os_login_policy_blocked_SiteA🌕 remove_run_on_os_login_policy_SiteA🌕 check_run_on_os_login_enabled_SiteA🌕 +install_create_shortcut_tabbed_SiteA🌕 enable_run_on_os_login_SiteA🌕 apply_run_on_os_login_policy_blocked_SiteA🌕 remove_run_on_os_login_policy_SiteA🌕 check_run_on_os_login_enabled_SiteA🌕 +install_policy_app_tabbed_shortcut_SiteA🌓 enable_run_on_os_login_SiteA🌕 apply_run_on_os_login_policy_blocked_SiteA🌕 remove_run_on_os_login_policy_SiteA🌕 check_run_on_os_login_enabled_SiteA🌕 +install_policy_app_tabbed_no_shortcut_SiteA🌓 enable_run_on_os_login_SiteA🌕 apply_run_on_os_login_policy_blocked_SiteA🌕 remove_run_on_os_login_policy_SiteA🌕 check_run_on_os_login_enabled_SiteA🌕 +install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 switch_profile_clients_Client1🌕 sync_turn_off🌕 uninstall_from_list_SiteA🌕 switch_profile_clients_Client2🌕 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 +install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 switch_profile_clients_Client1🌕 sync_turn_off🌕 uninstall_from_menu_SiteA🌕 switch_profile_clients_Client2🌕 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 +install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 switch_profile_clients_Client1🌕 sync_turn_off🌕 uninstall_from_os_SiteA🌑 switch_profile_clients_Client2🌑 apply_run_on_os_login_policy_run_windowed_SiteA🌑 check_run_on_os_login_disabled_SiteA🌑 +install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 switch_profile_clients_Client1🌕 sync_turn_off🌕 uninstall_from_app_settings_SiteA🌕 switch_profile_clients_Client2🌕 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 +install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 switch_profile_clients_Client1🌕 sync_turn_off🌕 uninstall_from_list_SiteA🌕 switch_profile_clients_Client2🌕 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 +install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 switch_profile_clients_Client1🌕 sync_turn_off🌕 uninstall_from_menu_SiteA🌕 switch_profile_clients_Client2🌕 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 +install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 switch_profile_clients_Client1🌕 sync_turn_off🌕 uninstall_from_os_SiteA🌑 switch_profile_clients_Client2🌑 apply_run_on_os_login_policy_run_windowed_SiteA🌑 check_run_on_os_login_disabled_SiteA🌑 +install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 switch_profile_clients_Client1🌕 sync_turn_off🌕 uninstall_from_app_settings_SiteA🌕 switch_profile_clients_Client2🌕 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 +install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 switch_profile_clients_Client1🌕 sync_turn_off🌕 uninstall_from_list_SiteA🌕 switch_profile_clients_Client2🌕 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 +install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 switch_profile_clients_Client1🌕 sync_turn_off🌕 uninstall_from_menu_SiteA🌕 switch_profile_clients_Client2🌕 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 +install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 switch_profile_clients_Client1🌕 sync_turn_off🌕 uninstall_from_os_SiteA🌑 switch_profile_clients_Client2🌑 apply_run_on_os_login_policy_run_windowed_SiteA🌑 check_run_on_os_login_disabled_SiteA🌑 +install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 switch_profile_clients_Client1🌕 sync_turn_off🌕 uninstall_from_app_settings_SiteA🌕 switch_profile_clients_Client2🌕 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 +install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 switch_profile_clients_Client1🌕 sync_turn_off🌕 uninstall_from_list_SiteA🌕 switch_profile_clients_Client2🌕 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 install_locally_SiteA🌓 check_run_on_os_login_enabled_SiteA🌕 +install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 switch_profile_clients_Client1🌕 sync_turn_off🌕 uninstall_from_menu_SiteA🌕 switch_profile_clients_Client2🌕 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 install_locally_SiteA🌓 check_run_on_os_login_enabled_SiteA🌕 +install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 switch_profile_clients_Client1🌕 sync_turn_off🌕 uninstall_from_os_SiteA🌑 switch_profile_clients_Client2🌑 apply_run_on_os_login_policy_run_windowed_SiteA🌑 check_run_on_os_login_disabled_SiteA🌑 install_locally_SiteA🌑 check_run_on_os_login_enabled_SiteA🌑 +install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 switch_profile_clients_Client1🌕 sync_turn_off🌕 uninstall_from_app_settings_SiteA🌕 switch_profile_clients_Client2🌕 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 install_locally_SiteA🌓 check_run_on_os_login_enabled_SiteA🌕 +install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 switch_profile_clients_Client1🌕 sync_turn_off🌕 uninstall_from_list_SiteA🌕 switch_profile_clients_Client2🌕 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 install_locally_SiteA🌓 check_run_on_os_login_enabled_SiteA🌕 +install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 switch_profile_clients_Client1🌕 sync_turn_off🌕 uninstall_from_menu_SiteA🌕 switch_profile_clients_Client2🌕 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 install_locally_SiteA🌓 check_run_on_os_login_enabled_SiteA🌕 +install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 switch_profile_clients_Client1🌕 sync_turn_off🌕 uninstall_from_os_SiteA🌑 switch_profile_clients_Client2🌑 apply_run_on_os_login_policy_run_windowed_SiteA🌑 check_run_on_os_login_disabled_SiteA🌑 install_locally_SiteA🌑 check_run_on_os_login_enabled_SiteA🌑 +install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 switch_profile_clients_Client1🌕 sync_turn_off🌕 uninstall_from_app_settings_SiteA🌕 switch_profile_clients_Client2🌕 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 install_locally_SiteA🌓 check_run_on_os_login_enabled_SiteA🌕 +install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 switch_profile_clients_Client1🌕 sync_turn_off🌕 uninstall_from_list_SiteA🌕 switch_profile_clients_Client2🌕 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 install_locally_SiteA🌓 check_run_on_os_login_enabled_SiteA🌕 +install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 switch_profile_clients_Client1🌕 sync_turn_off🌕 uninstall_from_menu_SiteA🌕 switch_profile_clients_Client2🌕 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 install_locally_SiteA🌓 check_run_on_os_login_enabled_SiteA🌕 +install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 switch_profile_clients_Client1🌕 sync_turn_off🌕 uninstall_from_os_SiteA🌑 switch_profile_clients_Client2🌑 apply_run_on_os_login_policy_run_windowed_SiteA🌑 check_run_on_os_login_disabled_SiteA🌑 install_locally_SiteA🌑 check_run_on_os_login_enabled_SiteA🌑 +install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 switch_profile_clients_Client1🌕 sync_turn_off🌕 uninstall_from_app_settings_SiteA🌕 switch_profile_clients_Client2🌕 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 install_locally_SiteA🌓 check_run_on_os_login_enabled_SiteA🌕 +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🌕 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🌕 navigate_pwa_site_a_to_SiteB🌕 close_custom_toolbar🌕 check_app_navigation_is_start_url🌕 +install_omnibox_icon_SiteA🌕 navigate_pwa_site_a_to_SiteB🌕 close_custom_toolbar🌕 check_app_navigation_is_start_url🌕 +install_policy_app_windowed_no_shortcut_SiteA🌓 navigate_pwa_site_a_to_SiteB🌕 close_custom_toolbar🌕 check_app_navigation_is_start_url🌕 +install_policy_app_windowed_shortcut_SiteA🌓 navigate_pwa_site_a_to_SiteB🌕 close_custom_toolbar🌕 check_app_navigation_is_start_url🌕 +install_menu_option_SiteA🌕 navigate_pwa_site_a_to_SiteB🌕 close_custom_toolbar🌕 check_app_navigation_is_start_url🌕 +install_create_shortcut_windowed_SiteA🌕 navigate_pwa_site_a_to_SiteB🌕 check_custom_toolbar🌕 +install_omnibox_icon_SiteA🌕 navigate_pwa_site_a_to_SiteB🌕 check_custom_toolbar🌕 +install_menu_option_SiteA🌕 navigate_pwa_site_a_to_SiteB🌕 check_custom_toolbar🌕 +navigate_browser_SiteA🌕 check_app_not_in_list_SiteA🌓 +navigate_browser_SiteA🌕 check_platform_shortcut_not_exists_SiteA🌑 +navigate_browser_SiteC🌕 check_app_not_in_list_SiteA🌓 +navigate_browser_SiteC🌕 check_platform_shortcut_not_exists_SiteA🌑 +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🌕 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_and_icon_SiteA🌓 +install_policy_app_tabbed_shortcut_SiteA🌓 check_platform_shortcut_and_icon_SiteA🌓 +install_create_shortcut_windowed_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌓 +install_omnibox_icon_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌓 +install_menu_option_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌓 +install_create_shortcut_tabbed_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌓 +install_policy_app_windowed_shortcut_SiteC🌓 check_platform_shortcut_and_icon_SiteC🌓 +install_policy_app_tabbed_shortcut_SiteC🌓 check_platform_shortcut_and_icon_SiteC🌓 +install_create_shortcut_windowed_SiteC🌕 check_platform_shortcut_and_icon_SiteC🌓 +install_create_shortcut_tabbed_SiteC🌕 check_platform_shortcut_and_icon_SiteC🌓 +install_create_shortcut_windowed_SiteA🌕 uninstall_from_list_SiteA🌕 check_app_not_in_list_SiteA🌓 +install_create_shortcut_windowed_SiteA🌕 uninstall_from_menu_SiteA🌕 check_app_not_in_list_SiteA🌓 +install_create_shortcut_windowed_SiteA🌕 uninstall_from_os_SiteA🌑 check_app_not_in_list_SiteA🌑 +install_create_shortcut_windowed_SiteA🌕 uninstall_from_app_settings_SiteA🌕 check_app_not_in_list_SiteA🌓 +install_omnibox_icon_SiteA🌕 uninstall_from_list_SiteA🌕 check_app_not_in_list_SiteA🌓 +install_omnibox_icon_SiteA🌕 uninstall_from_menu_SiteA🌕 check_app_not_in_list_SiteA🌓 +install_omnibox_icon_SiteA🌕 uninstall_from_os_SiteA🌑 check_app_not_in_list_SiteA🌑 +install_omnibox_icon_SiteA🌕 uninstall_from_app_settings_SiteA🌕 check_app_not_in_list_SiteA🌓 +install_menu_option_SiteA🌕 uninstall_from_list_SiteA🌕 check_app_not_in_list_SiteA🌓 +install_menu_option_SiteA🌕 uninstall_from_menu_SiteA🌕 check_app_not_in_list_SiteA🌓 +install_menu_option_SiteA🌕 uninstall_from_os_SiteA🌑 check_app_not_in_list_SiteA🌑 +install_menu_option_SiteA🌕 uninstall_from_app_settings_SiteA🌕 check_app_not_in_list_SiteA🌓 +install_create_shortcut_windowed_SiteA🌕 uninstall_from_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_create_shortcut_windowed_SiteA🌕 uninstall_from_os_SiteA🌑 navigate_browser_SiteA🌑 check_install_icon_shown🌑 +install_create_shortcut_windowed_SiteA🌕 uninstall_from_app_settings_SiteA🌕 navigate_browser_SiteA🌕 check_install_icon_shown🌕 +install_omnibox_icon_SiteA🌕 uninstall_from_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_omnibox_icon_SiteA🌕 uninstall_from_os_SiteA🌑 navigate_browser_SiteA🌑 check_install_icon_shown🌑 +install_omnibox_icon_SiteA🌕 uninstall_from_app_settings_SiteA🌕 navigate_browser_SiteA🌕 check_install_icon_shown🌕 +install_menu_option_SiteA🌕 uninstall_from_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_menu_option_SiteA🌕 uninstall_from_os_SiteA🌑 navigate_browser_SiteA🌑 check_install_icon_shown🌑 +install_menu_option_SiteA🌕 uninstall_from_app_settings_SiteA🌕 navigate_browser_SiteA🌕 check_install_icon_shown🌕 +install_create_shortcut_windowed_SiteA🌕 uninstall_from_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_create_shortcut_windowed_SiteA🌕 uninstall_from_os_SiteA🌑 navigate_browser_SiteA🌑 check_launch_icon_not_shown🌑 +install_create_shortcut_windowed_SiteA🌕 uninstall_from_app_settings_SiteA🌕 navigate_browser_SiteA🌕 check_launch_icon_not_shown🌕 +install_omnibox_icon_SiteA🌕 uninstall_from_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_omnibox_icon_SiteA🌕 uninstall_from_os_SiteA🌑 navigate_browser_SiteA🌑 check_launch_icon_not_shown🌑 +install_omnibox_icon_SiteA🌕 uninstall_from_app_settings_SiteA🌕 navigate_browser_SiteA🌕 check_launch_icon_not_shown🌕 +install_menu_option_SiteA🌕 uninstall_from_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_menu_option_SiteA🌕 uninstall_from_os_SiteA🌑 navigate_browser_SiteA🌑 check_launch_icon_not_shown🌑 +install_menu_option_SiteA🌕 uninstall_from_app_settings_SiteA🌕 navigate_browser_SiteA🌕 check_launch_icon_not_shown🌕 +install_create_shortcut_windowed_SiteA🌕 uninstall_from_list_SiteA🌕 check_platform_shortcut_not_exists_SiteA🌑 +install_create_shortcut_windowed_SiteA🌕 uninstall_from_menu_SiteA🌕 check_platform_shortcut_not_exists_SiteA🌑 +install_create_shortcut_windowed_SiteA🌕 uninstall_from_os_SiteA🌑 check_platform_shortcut_not_exists_SiteA🌑 +install_create_shortcut_windowed_SiteA🌕 uninstall_from_app_settings_SiteA🌕 check_platform_shortcut_not_exists_SiteA🌑 +install_omnibox_icon_SiteA🌕 uninstall_from_list_SiteA🌕 check_platform_shortcut_not_exists_SiteA🌑 +install_omnibox_icon_SiteA🌕 uninstall_from_menu_SiteA🌕 check_platform_shortcut_not_exists_SiteA🌑 +install_omnibox_icon_SiteA🌕 uninstall_from_os_SiteA🌑 check_platform_shortcut_not_exists_SiteA🌑 +install_omnibox_icon_SiteA🌕 uninstall_from_app_settings_SiteA🌕 check_platform_shortcut_not_exists_SiteA🌑 +install_menu_option_SiteA🌕 uninstall_from_list_SiteA🌕 check_platform_shortcut_not_exists_SiteA🌑 +install_menu_option_SiteA🌕 uninstall_from_menu_SiteA🌕 check_platform_shortcut_not_exists_SiteA🌑 +install_menu_option_SiteA🌕 uninstall_from_os_SiteA🌑 check_platform_shortcut_not_exists_SiteA🌑 +install_menu_option_SiteA🌕 uninstall_from_app_settings_SiteA🌕 check_platform_shortcut_not_exists_SiteA🌑 +install_create_shortcut_windowed_SiteC🌕 uninstall_from_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_windowed_SiteC🌕 uninstall_from_os_SiteC🌑 check_app_not_in_list_SiteA🌑 +install_create_shortcut_windowed_SiteC🌕 uninstall_from_app_settings_SiteC🌕 check_app_not_in_list_SiteA🌓 +install_create_shortcut_windowed_SiteC🌕 uninstall_from_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_windowed_SiteC🌕 uninstall_from_os_SiteC🌑 check_platform_shortcut_not_exists_SiteC🌑 +install_create_shortcut_windowed_SiteC🌕 uninstall_from_app_settings_SiteC🌕 check_platform_shortcut_not_exists_SiteC🌑 +install_create_shortcut_tabbed_SiteA🌕 uninstall_from_list_SiteA🌕 check_app_not_in_list_SiteA🌓 +install_create_shortcut_tabbed_SiteA🌕 uninstall_from_list_SiteA🌕 navigate_browser_SiteA🌕 check_install_icon_shown🌕 +install_create_shortcut_tabbed_SiteA🌕 uninstall_from_list_SiteA🌕 navigate_browser_SiteA🌕 check_launch_icon_not_shown🌕 +install_create_shortcut_tabbed_SiteA🌕 uninstall_from_list_SiteA🌕 check_platform_shortcut_not_exists_SiteA🌑 +install_create_shortcut_tabbed_SiteC🌕 uninstall_from_list_SiteC🌕 check_app_not_in_list_SiteA🌓 +install_create_shortcut_tabbed_SiteC🌕 uninstall_from_list_SiteC🌕 check_platform_shortcut_not_exists_SiteC🌑 +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_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_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🌕 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_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_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_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_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_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_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_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_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_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_policy_app_windowed_no_shortcut_SiteA🌓 create_shortcuts_SiteA🌑 check_platform_shortcut_and_icon_SiteA🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌓 create_shortcuts_SiteA🌑 check_platform_shortcut_and_icon_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_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_platform_shortcut_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_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_platform_shortcut_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_platform_shortcut_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🌕 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_windowed_SiteA🌕 open_app_settings_from_chrome_apps_SiteA🌕 check_browser_navigation_is_app_settings_SiteA🌕 +install_create_shortcut_windowed_SiteA🌕 open_app_settings_from_app_menu_SiteA🌕 check_browser_navigation_is_app_settings_SiteA🌕 +install_omnibox_icon_SiteA🌕 open_app_settings_from_chrome_apps_SiteA🌕 check_browser_navigation_is_app_settings_SiteA🌕 +install_omnibox_icon_SiteA🌕 open_app_settings_from_app_menu_SiteA🌕 check_browser_navigation_is_app_settings_SiteA🌕 +install_policy_app_windowed_no_shortcut_SiteA🌓 open_app_settings_from_chrome_apps_SiteA🌕 check_browser_navigation_is_app_settings_SiteA🌕 +install_policy_app_windowed_no_shortcut_SiteA🌓 open_app_settings_from_app_menu_SiteA🌕 check_browser_navigation_is_app_settings_SiteA🌕 +install_policy_app_windowed_shortcut_SiteA🌓 open_app_settings_from_chrome_apps_SiteA🌕 check_browser_navigation_is_app_settings_SiteA🌕 +install_policy_app_windowed_shortcut_SiteA🌓 open_app_settings_from_app_menu_SiteA🌕 check_browser_navigation_is_app_settings_SiteA🌕 +install_menu_option_SiteA🌕 open_app_settings_from_chrome_apps_SiteA🌕 check_browser_navigation_is_app_settings_SiteA🌕 +install_menu_option_SiteA🌕 open_app_settings_from_app_menu_SiteA🌕 check_browser_navigation_is_app_settings_SiteA🌕 +install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 install_locally_SiteA🌓 check_platform_shortcut_and_icon_SiteA🌓 +install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 install_locally_SiteA🌓 check_platform_shortcut_and_icon_SiteA🌓 +install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 install_locally_SiteA🌓 check_platform_shortcut_and_icon_SiteA🌓 +install_create_shortcut_tabbed_SiteA🌕 switch_profile_clients_Client2🌕 install_locally_SiteA🌓 check_platform_shortcut_and_icon_SiteA🌓 +install_create_shortcut_tabbed_SiteA🌕 switch_profile_clients_Client2🌕 install_locally_SiteA🌓 check_app_in_list_tabbed_SiteA🌓 +install_create_shortcut_tabbed_SiteA🌕 switch_profile_clients_Client2🌕 install_locally_SiteA🌓 navigate_browser_SiteA🌕 check_install_icon_shown🌕 +install_create_shortcut_tabbed_SiteA🌕 switch_profile_clients_Client2🌕 install_locally_SiteA🌓 navigate_browser_SiteA🌕 check_launch_icon_not_shown🌕 +install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 install_locally_SiteA🌓 check_app_in_list_windowed_SiteA🌓 +install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 install_locally_SiteA🌓 check_app_in_list_windowed_SiteA🌓 +install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 install_locally_SiteA🌓 check_app_in_list_windowed_SiteA🌓 +install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 install_locally_SiteA🌓 navigate_browser_SiteA🌕 check_install_icon_not_shown🌕 +install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 install_locally_SiteA🌓 navigate_browser_SiteA🌕 check_install_icon_not_shown🌕 +install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 install_locally_SiteA🌓 navigate_browser_SiteA🌕 check_install_icon_not_shown🌕 +install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 install_locally_SiteA🌓 navigate_browser_SiteA🌕 check_launch_icon_shown🌕 +install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 install_locally_SiteA🌓 navigate_browser_SiteA🌕 check_launch_icon_shown🌕 +install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 install_locally_SiteA🌓 navigate_browser_SiteA🌕 check_launch_icon_shown🌕 +install_create_shortcut_tabbed_SiteC🌕 switch_profile_clients_Client2🌕 install_locally_SiteC🌓 check_app_in_list_tabbed_SiteC🌓 +install_create_shortcut_tabbed_SiteC🌕 switch_profile_clients_Client2🌕 install_locally_SiteC🌓 navigate_browser_SiteC🌕 check_launch_icon_not_shown🌕 +install_create_shortcut_windowed_SiteC🌕 switch_profile_clients_Client2🌕 install_locally_SiteC🌓 check_app_in_list_windowed_SiteC🌓 +install_create_shortcut_windowed_SiteC🌕 switch_profile_clients_Client2🌕 install_locally_SiteC🌓 navigate_browser_SiteC🌕 check_install_icon_not_shown🌕 +install_create_shortcut_windowed_SiteC🌕 switch_profile_clients_Client2🌕 install_locally_SiteC🌓 navigate_browser_SiteC🌕 check_launch_icon_shown🌕 +install_create_shortcut_windowed_SiteC🌕 switch_profile_clients_Client2🌕 install_locally_SiteC🌓 check_platform_shortcut_and_icon_SiteC🌓 +install_create_shortcut_tabbed_SiteC🌕 switch_profile_clients_Client2🌕 install_locally_SiteC🌓 check_platform_shortcut_and_icon_SiteC🌓 +install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 install_locally_SiteA🌓 launch_from_menu_option_SiteA🌕 check_window_created🌕 +install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 install_locally_SiteA🌓 launch_from_launch_icon_SiteA🌕 check_window_created🌕 +install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 install_locally_SiteA🌓 launch_from_chrome_apps_SiteA🌓 check_window_created🌕 +install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 install_locally_SiteA🌓 launch_from_platform_shortcut_SiteA🌓 check_window_created🌕 +install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 install_locally_SiteA🌓 launch_from_menu_option_SiteA🌕 check_window_created🌕 +install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 install_locally_SiteA🌓 launch_from_launch_icon_SiteA🌕 check_window_created🌕 +install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 install_locally_SiteA🌓 launch_from_chrome_apps_SiteA🌓 check_window_created🌕 +install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 install_locally_SiteA🌓 launch_from_platform_shortcut_SiteA🌓 check_window_created🌕 +install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 install_locally_SiteA🌓 launch_from_menu_option_SiteA🌕 check_window_created🌕 +install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 install_locally_SiteA🌓 launch_from_launch_icon_SiteA🌕 check_window_created🌕 +install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 install_locally_SiteA🌓 launch_from_chrome_apps_SiteA🌓 check_window_created🌕 +install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 install_locally_SiteA🌓 launch_from_platform_shortcut_SiteA🌓 check_window_created🌕 +install_create_shortcut_tabbed_SiteA🌕 switch_profile_clients_Client2🌕 launch_from_chrome_apps_SiteA🌓 check_tab_created🌕 +install_create_shortcut_tabbed_SiteA🌕 switch_profile_clients_Client2🌕 launch_from_platform_shortcut_SiteA🌓 check_tab_created🌕 +install_create_shortcut_tabbed_SiteA🌕 switch_profile_clients_Client2🌕 install_locally_SiteA🌓 launch_from_chrome_apps_SiteA🌓 check_tab_created🌕 +install_create_shortcut_tabbed_SiteA🌕 switch_profile_clients_Client2🌕 install_locally_SiteA🌓 launch_from_platform_shortcut_SiteA🌓 check_tab_created🌕 +install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 launch_from_chrome_apps_SiteA🌓 check_tab_created🌕 +install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 launch_from_platform_shortcut_SiteA🌓 check_tab_created🌕 +install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 launch_from_chrome_apps_SiteA🌓 check_tab_created🌕 +install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 launch_from_platform_shortcut_SiteA🌓 check_tab_created🌕 +install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 launch_from_chrome_apps_SiteA🌓 check_tab_created🌕 +install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 launch_from_platform_shortcut_SiteA🌓 check_tab_created🌕 +install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 uninstall_from_list_SiteA🌕 check_app_not_in_list_SiteA🌓 +install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 uninstall_from_list_SiteA🌕 check_app_not_in_list_SiteA🌓 +install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 uninstall_from_list_SiteA🌕 check_app_not_in_list_SiteA🌓 +install_create_shortcut_tabbed_SiteA🌕 switch_profile_clients_Client2🌕 uninstall_from_list_SiteA🌕 check_app_not_in_list_SiteA🌓 +install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 uninstall_from_list_SiteA🌕 switch_profile_clients_Client1🌕 check_app_not_in_list_SiteA🌓 +install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 uninstall_from_list_SiteA🌕 switch_profile_clients_Client1🌕 check_app_not_in_list_SiteA🌓 +install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 uninstall_from_list_SiteA🌕 switch_profile_clients_Client1🌕 check_app_not_in_list_SiteA🌓 +install_create_shortcut_tabbed_SiteA🌕 switch_profile_clients_Client2🌕 uninstall_from_list_SiteA🌕 switch_profile_clients_Client1🌕 check_app_not_in_list_SiteA🌓 +install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 check_app_in_list_not_locally_installed_SiteA🌓 +install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 check_app_in_list_not_locally_installed_SiteA🌓 +install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 check_app_in_list_not_locally_installed_SiteA🌓 +install_create_shortcut_tabbed_SiteA🌕 switch_profile_clients_Client2🌕 check_app_in_list_not_locally_installed_SiteA🌓 +install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 check_platform_shortcut_not_exists_SiteA🌑 +install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 check_platform_shortcut_not_exists_SiteA🌑 +install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 check_platform_shortcut_not_exists_SiteA🌑 +install_create_shortcut_tabbed_SiteA🌕 switch_profile_clients_Client2🌕 check_platform_shortcut_not_exists_SiteA🌑 +install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 navigate_browser_SiteA🌕 check_install_icon_shown🌕 +install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 navigate_browser_SiteA🌕 check_install_icon_shown🌕 +install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 navigate_browser_SiteA🌕 check_install_icon_shown🌕 +install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 navigate_browser_SiteA🌕 check_launch_icon_not_shown🌕 +install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 navigate_browser_SiteA🌕 check_launch_icon_not_shown🌕 +install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 navigate_browser_SiteA🌕 check_launch_icon_not_shown🌕 +install_create_shortcut_windowed_SiteC🌕 switch_profile_clients_Client2🌕 check_app_in_list_not_locally_installed_SiteC🌓 +install_create_shortcut_tabbed_SiteC🌕 switch_profile_clients_Client2🌕 check_app_in_list_not_locally_installed_SiteC🌓 +install_create_shortcut_windowed_SiteC🌕 switch_profile_clients_Client2🌕 check_platform_shortcut_not_exists_SiteC🌑 +install_create_shortcut_tabbed_SiteC🌕 switch_profile_clients_Client2🌕 check_platform_shortcut_not_exists_SiteC🌑 +sync_turn_off🌕 install_create_shortcut_windowed_SiteA🌕 sync_turn_on🌕 switch_profile_clients_Client2🌕 check_app_in_list_not_locally_installed_SiteA🌓 +sync_turn_off🌕 install_omnibox_icon_SiteA🌕 sync_turn_on🌕 switch_profile_clients_Client2🌕 check_app_in_list_not_locally_installed_SiteA🌓 +sync_turn_off🌕 install_menu_option_SiteA🌕 sync_turn_on🌕 switch_profile_clients_Client2🌕 check_app_in_list_not_locally_installed_SiteA🌓 +sync_turn_off🌕 install_create_shortcut_tabbed_SiteA🌕 sync_turn_on🌕 switch_profile_clients_Client2🌕 check_app_in_list_not_locally_installed_SiteA🌓 +sync_turn_off🌕 install_create_shortcut_windowed_SiteC🌕 sync_turn_on🌕 switch_profile_clients_Client2🌕 check_app_in_list_not_locally_installed_SiteC🌓 +sync_turn_off🌕 install_create_shortcut_tabbed_SiteC🌕 sync_turn_on🌕 switch_profile_clients_Client2🌕 check_app_in_list_not_locally_installed_SiteC🌓 +install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌕 uninstall_from_list_SiteA🌕 sync_turn_on🌕 check_app_in_list_not_locally_installed_SiteA🌓 +install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌕 uninstall_from_menu_SiteA🌕 sync_turn_on🌕 check_app_in_list_not_locally_installed_SiteA🌓 +install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌕 uninstall_from_os_SiteA🌑 sync_turn_on🌑 check_app_in_list_not_locally_installed_SiteA🌑 +install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌕 uninstall_from_list_SiteA🌕 sync_turn_on🌕 check_app_in_list_not_locally_installed_SiteA🌓 +install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌕 uninstall_from_menu_SiteA🌕 sync_turn_on🌕 check_app_in_list_not_locally_installed_SiteA🌓 +install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌕 uninstall_from_os_SiteA🌑 sync_turn_on🌑 check_app_in_list_not_locally_installed_SiteA🌑 +install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌕 uninstall_from_list_SiteA🌕 sync_turn_on🌕 check_app_in_list_not_locally_installed_SiteA🌓 +install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌕 uninstall_from_menu_SiteA🌕 sync_turn_on🌕 check_app_in_list_not_locally_installed_SiteA🌓 +install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌕 uninstall_from_os_SiteA🌑 sync_turn_on🌑 check_app_in_list_not_locally_installed_SiteA🌑 +install_create_shortcut_tabbed_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌕 uninstall_from_list_SiteA🌕 sync_turn_on🌕 check_app_in_list_not_locally_installed_SiteA🌓 +install_create_shortcut_tabbed_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌕 uninstall_from_menu_SiteA🌕 sync_turn_on🌕 check_app_in_list_not_locally_installed_SiteA🌓 +install_create_shortcut_tabbed_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌕 uninstall_from_os_SiteA🌑 sync_turn_on🌑 check_app_in_list_not_locally_installed_SiteA🌑 +install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌕 uninstall_from_list_SiteA🌕 sync_turn_on🌕 check_platform_shortcut_not_exists_SiteA🌑 +install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌕 uninstall_from_menu_SiteA🌕 sync_turn_on🌕 check_platform_shortcut_not_exists_SiteA🌑 +install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌕 uninstall_from_os_SiteA🌑 sync_turn_on🌑 check_platform_shortcut_not_exists_SiteA🌑 +install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌕 uninstall_from_list_SiteA🌕 sync_turn_on🌕 check_platform_shortcut_not_exists_SiteA🌑 +install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌕 uninstall_from_menu_SiteA🌕 sync_turn_on🌕 check_platform_shortcut_not_exists_SiteA🌑 +install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌕 uninstall_from_os_SiteA🌑 sync_turn_on🌑 check_platform_shortcut_not_exists_SiteA🌑 +install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌕 uninstall_from_list_SiteA🌕 sync_turn_on🌕 check_platform_shortcut_not_exists_SiteA🌑 +install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌕 uninstall_from_menu_SiteA🌕 sync_turn_on🌕 check_platform_shortcut_not_exists_SiteA🌑 +install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌕 uninstall_from_os_SiteA🌑 sync_turn_on🌑 check_platform_shortcut_not_exists_SiteA🌑 +install_create_shortcut_tabbed_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌕 uninstall_from_list_SiteA🌕 sync_turn_on🌕 check_platform_shortcut_not_exists_SiteA🌑 +install_create_shortcut_tabbed_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌕 uninstall_from_menu_SiteA🌕 sync_turn_on🌕 check_platform_shortcut_not_exists_SiteA🌑 +install_create_shortcut_tabbed_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌕 uninstall_from_os_SiteA🌑 sync_turn_on🌑 check_platform_shortcut_not_exists_SiteA🌑 +install_create_shortcut_tabbed_SiteA🌕 install_policy_app_windowed_no_shortcut_SiteA🌓 check_platform_shortcut_and_icon_SiteA🌓 +install_create_shortcut_tabbed_SiteA🌕 install_policy_app_windowed_shortcut_SiteA🌓 check_platform_shortcut_and_icon_SiteA🌓 +install_create_shortcut_windowed_SiteA🌕 install_policy_app_tabbed_no_shortcut_SiteA🌓 check_platform_shortcut_and_icon_SiteA🌓 +install_create_shortcut_windowed_SiteA🌕 install_policy_app_windowed_no_shortcut_SiteA🌓 check_platform_shortcut_and_icon_SiteA🌓 +install_omnibox_icon_SiteA🌕 install_policy_app_tabbed_no_shortcut_SiteA🌓 check_platform_shortcut_and_icon_SiteA🌓 +install_omnibox_icon_SiteA🌕 install_policy_app_windowed_no_shortcut_SiteA🌓 check_platform_shortcut_and_icon_SiteA🌓 +install_menu_option_SiteA🌕 install_policy_app_tabbed_no_shortcut_SiteA🌓 check_platform_shortcut_and_icon_SiteA🌓 +install_menu_option_SiteA🌕 install_policy_app_windowed_no_shortcut_SiteA🌓 check_platform_shortcut_and_icon_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_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_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_and_icon_SiteA🌓 +install_policy_app_tabbed_shortcut_SiteA🌓 install_omnibox_icon_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌓 +install_policy_app_tabbed_shortcut_SiteA🌓 install_menu_option_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌓 +install_policy_app_tabbed_no_shortcut_SiteA🌓 install_create_shortcut_windowed_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌓 +install_policy_app_tabbed_no_shortcut_SiteA🌓 install_omnibox_icon_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌓 +install_policy_app_tabbed_no_shortcut_SiteA🌓 install_menu_option_SiteA🌕 check_platform_shortcut_and_icon_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_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_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🌕 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_and_icon_SiteA🌓 +install_create_shortcut_tabbed_SiteA🌕 install_policy_app_tabbed_no_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌓 +install_create_shortcut_tabbed_SiteA🌕 install_policy_app_windowed_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌓 +install_create_shortcut_tabbed_SiteA🌕 install_policy_app_tabbed_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_platform_shortcut_and_icon_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_and_icon_SiteA🌓 +install_create_shortcut_windowed_SiteA🌕 install_policy_app_tabbed_no_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌓 +install_create_shortcut_windowed_SiteA🌕 install_policy_app_windowed_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌓 +install_create_shortcut_windowed_SiteA🌕 install_policy_app_tabbed_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌓 +install_omnibox_icon_SiteA🌕 install_policy_app_windowed_no_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌓 +install_omnibox_icon_SiteA🌕 install_policy_app_tabbed_no_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌓 +install_omnibox_icon_SiteA🌕 install_policy_app_windowed_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌓 +install_omnibox_icon_SiteA🌕 install_policy_app_tabbed_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌓 +install_menu_option_SiteA🌕 install_policy_app_windowed_no_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌓 +install_menu_option_SiteA🌕 install_policy_app_tabbed_no_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌓 +install_menu_option_SiteA🌕 install_policy_app_windowed_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌓 +install_menu_option_SiteA🌕 install_policy_app_tabbed_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_platform_shortcut_and_icon_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_and_icon_SiteA🌓 +install_policy_app_tabbed_shortcut_SiteA🌓 install_omnibox_icon_SiteA🌕 uninstall_policy_app_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌓 +install_policy_app_tabbed_shortcut_SiteA🌓 install_menu_option_SiteA🌕 uninstall_policy_app_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌓 +install_policy_app_tabbed_no_shortcut_SiteA🌓 install_create_shortcut_windowed_SiteA🌕 uninstall_policy_app_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌓 +install_policy_app_tabbed_no_shortcut_SiteA🌓 install_omnibox_icon_SiteA🌕 uninstall_policy_app_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌓 +install_policy_app_tabbed_no_shortcut_SiteA🌓 install_menu_option_SiteA🌕 uninstall_policy_app_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌓 +install_create_shortcut_windowed_SiteA🌕 close_pwa🌕 manifest_update_colors_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_color_correct_SiteA🌑 +install_create_shortcut_windowed_SiteA🌕 close_pwa🌕 manifest_update_colors_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_color_correct_SiteA🌑 +install_create_shortcut_windowed_SiteA🌕 close_pwa🌕 manifest_update_colors_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_color_correct_SiteA🌑 +install_create_shortcut_windowed_SiteA🌕 close_pwa🌕 manifest_update_colors_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_color_correct_SiteA🌑 +install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_colors_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_color_correct_SiteA🌑 +install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_colors_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_color_correct_SiteA🌑 +install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_colors_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_color_correct_SiteA🌑 +install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_colors_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_color_correct_SiteA🌑 +install_menu_option_SiteA🌕 close_pwa🌕 manifest_update_colors_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_color_correct_SiteA🌑 +install_menu_option_SiteA🌕 close_pwa🌕 manifest_update_colors_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_color_correct_SiteA🌑 +install_menu_option_SiteA🌕 close_pwa🌕 manifest_update_colors_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_color_correct_SiteA🌑 +install_menu_option_SiteA🌕 close_pwa🌕 manifest_update_colors_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_color_correct_SiteA🌑 +install_create_shortcut_windowed_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_menu_option_SiteA🌕 check_tab_not_created🌕 +install_create_shortcut_windowed_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_launch_icon_SiteA🌕 check_tab_not_created🌕 +install_create_shortcut_windowed_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_chrome_apps_SiteA🌓 check_tab_not_created🌕 +install_create_shortcut_windowed_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_platform_shortcut_SiteA🌓 check_tab_not_created🌕 +install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_menu_option_SiteA🌕 check_tab_not_created🌕 +install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_launch_icon_SiteA🌕 check_tab_not_created🌕 +install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_chrome_apps_SiteA🌓 check_tab_not_created🌕 +install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_platform_shortcut_SiteA🌓 check_tab_not_created🌕 +install_menu_option_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_menu_option_SiteA🌕 check_tab_not_created🌕 +install_menu_option_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_launch_icon_SiteA🌕 check_tab_not_created🌕 +install_menu_option_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_chrome_apps_SiteA🌓 check_tab_not_created🌕 +install_menu_option_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_platform_shortcut_SiteA🌓 check_tab_not_created🌕 +install_create_shortcut_windowed_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_menu_option_SiteA🌕 check_window_created🌕 +install_create_shortcut_windowed_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_launch_icon_SiteA🌕 check_window_created🌕 +install_create_shortcut_windowed_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_chrome_apps_SiteA🌓 check_window_created🌕 +install_create_shortcut_windowed_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_platform_shortcut_SiteA🌓 check_window_created🌕 +install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_menu_option_SiteA🌕 check_window_created🌕 +install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_launch_icon_SiteA🌕 check_window_created🌕 +install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_chrome_apps_SiteA🌓 check_window_created🌕 +install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_platform_shortcut_SiteA🌓 check_window_created🌕 +install_menu_option_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_menu_option_SiteA🌕 check_window_created🌕 +install_menu_option_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_launch_icon_SiteA🌕 check_window_created🌕 +install_menu_option_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_chrome_apps_SiteA🌓 check_window_created🌕 +install_menu_option_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_platform_shortcut_SiteA🌓 check_window_created🌕 +install_create_shortcut_windowed_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_menu_option_SiteA🌕 check_window_display_minimal🌕 +install_create_shortcut_windowed_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_launch_icon_SiteA🌕 check_window_display_minimal🌕 +install_create_shortcut_windowed_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_chrome_apps_SiteA🌓 check_window_display_minimal🌕 +install_create_shortcut_windowed_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_platform_shortcut_SiteA🌓 check_window_display_minimal🌕 +install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_menu_option_SiteA🌕 check_window_display_minimal🌕 +install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_launch_icon_SiteA🌕 check_window_display_minimal🌕 +install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_chrome_apps_SiteA🌓 check_window_display_minimal🌕 +install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_platform_shortcut_SiteA🌓 check_window_display_minimal🌕 +install_menu_option_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_menu_option_SiteA🌕 check_window_display_minimal🌕 +install_menu_option_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_launch_icon_SiteA🌕 check_window_display_minimal🌕 +install_menu_option_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_chrome_apps_SiteA🌓 check_window_display_minimal🌕 +install_menu_option_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_platform_shortcut_SiteA🌓 check_window_display_minimal🌕 +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_SiteAFoo🌕 manifest_update_scope_site_a_foo_to_SiteARoot🌕 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_SiteARoot🌕 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_SiteARoot🌕 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_SiteARoot🌕 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_SiteARoot🌕 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_SiteARoot🌕 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_SiteARoot🌕 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_SiteARoot🌕 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_SiteARoot🌕 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_SiteARoot🌕 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_SiteARoot🌕 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_SiteARoot🌕 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_SiteARoot🌕 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_SiteARoot🌕 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_SiteARoot🌕 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_SiteARoot🌕 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_SiteARoot🌕 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_SiteARoot🌕 launch_from_platform_shortcut_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_SiteARoot🌕 navigate_browser_SiteABar🌕 check_install_icon_not_shown🌕 +install_omnibox_icon_SiteAFoo🌕 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteARoot🌕 navigate_browser_SiteABar🌕 check_install_icon_not_shown🌕 +install_menu_option_SiteAFoo🌕 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteARoot🌕 navigate_browser_SiteABar🌕 check_install_icon_not_shown🌕 +install_create_shortcut_windowed_SiteAFoo🌕 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteARoot🌕 navigate_browser_SiteABar🌕 check_launch_icon_shown🌕 +install_omnibox_icon_SiteAFoo🌕 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteARoot🌕 navigate_browser_SiteABar🌕 check_launch_icon_shown🌕 +install_menu_option_SiteAFoo🌕 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteARoot🌕 navigate_browser_SiteABar🌕 check_launch_icon_shown🌕 +install_create_shortcut_windowed_SiteAFoo🌕 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteARoot🌕 navigate_browser_SiteAFoo🌕 check_install_icon_not_shown🌕 +install_omnibox_icon_SiteAFoo🌕 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteARoot🌕 navigate_browser_SiteAFoo🌕 check_install_icon_not_shown🌕 +install_menu_option_SiteAFoo🌕 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteARoot🌕 navigate_browser_SiteAFoo🌕 check_install_icon_not_shown🌕 +install_create_shortcut_windowed_SiteAFoo🌕 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteARoot🌕 navigate_browser_SiteAFoo🌕 check_launch_icon_shown🌕 +install_omnibox_icon_SiteAFoo🌕 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteARoot🌕 navigate_browser_SiteAFoo🌕 check_launch_icon_shown🌕 +install_menu_option_SiteAFoo🌕 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteARoot🌕 navigate_browser_SiteAFoo🌕 check_launch_icon_shown🌕 +switch_incognito_profile🌑 navigate_browser_SiteA🌑 check_create_shortcut_not_shown🌑 +switch_incognito_profile🌑 navigate_browser_SiteC🌑 check_create_shortcut_not_shown🌑 +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🌕 +navigate_browser_SiteA🌕 check_create_shortcut_shown🌑 +navigate_browser_SiteAFoo🌕 check_install_icon_shown🌕 +navigate_browser_SiteC🌕 check_create_shortcut_shown🌑 +navigate_browser_SiteC🌕 check_install_icon_not_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_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🌕 +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🌕 +install_create_shortcut_windowed_SiteA🌕 navigate_pwa_site_a_to_SiteB🌕 check_app_title_site_a_is_SiteA🌑 +install_omnibox_icon_SiteA🌕 navigate_pwa_site_a_to_SiteB🌕 check_app_title_site_a_is_SiteA🌑 +install_menu_option_SiteA🌕 navigate_pwa_site_a_to_SiteB🌕 check_app_title_site_a_is_SiteA🌑 +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🌑 +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_SiteWco🌕 check_window_controls_overlay_toggle_SiteWco_Shown🌕 +install_omnibox_icon_SiteWco🌕 check_window_controls_overlay_toggle_SiteWco_Shown🌕 +install_policy_app_windowed_no_shortcut_SiteWco🌓 check_window_controls_overlay_toggle_SiteWco_Shown🌕 +install_policy_app_windowed_shortcut_SiteWco🌓 check_window_controls_overlay_toggle_SiteWco_Shown🌕 +install_menu_option_SiteWco🌕 check_window_controls_overlay_toggle_SiteWco_Shown🌕 +install_create_shortcut_windowed_SiteA🌕 check_window_controls_overlay_toggle_SiteA_NotShown🌕 +install_omnibox_icon_SiteA🌕 check_window_controls_overlay_toggle_SiteA_NotShown🌕 +install_policy_app_windowed_no_shortcut_SiteA🌓 check_window_controls_overlay_toggle_SiteA_NotShown🌕 +install_policy_app_windowed_shortcut_SiteA🌓 check_window_controls_overlay_toggle_SiteA_NotShown🌕 +install_menu_option_SiteA🌕 check_window_controls_overlay_toggle_SiteA_NotShown🌕 +install_create_shortcut_windowed_SiteWco🌕 enable_window_controls_overlay_SiteWco🌕 check_window_controls_overlay_SiteWco_On🌕 +install_omnibox_icon_SiteWco🌕 enable_window_controls_overlay_SiteWco🌕 check_window_controls_overlay_SiteWco_On🌕 +install_policy_app_windowed_no_shortcut_SiteWco🌓 enable_window_controls_overlay_SiteWco🌕 check_window_controls_overlay_SiteWco_On🌕 +install_policy_app_windowed_shortcut_SiteWco🌓 enable_window_controls_overlay_SiteWco🌕 check_window_controls_overlay_SiteWco_On🌕 +install_menu_option_SiteWco🌕 enable_window_controls_overlay_SiteWco🌕 check_window_controls_overlay_SiteWco_On🌕 +install_create_shortcut_windowed_SiteWco🌕 enable_window_controls_overlay_SiteWco🌕 check_window_controls_overlay_toggle_SiteWco_Shown🌕 +install_omnibox_icon_SiteWco🌕 enable_window_controls_overlay_SiteWco🌕 check_window_controls_overlay_toggle_SiteWco_Shown🌕 +install_policy_app_windowed_no_shortcut_SiteWco🌓 enable_window_controls_overlay_SiteWco🌕 check_window_controls_overlay_toggle_SiteWco_Shown🌕 +install_policy_app_windowed_shortcut_SiteWco🌓 enable_window_controls_overlay_SiteWco🌕 check_window_controls_overlay_toggle_SiteWco_Shown🌕 +install_menu_option_SiteWco🌕 enable_window_controls_overlay_SiteWco🌕 check_window_controls_overlay_toggle_SiteWco_Shown🌕 +install_create_shortcut_windowed_SiteWco🌕 enable_window_controls_overlay_SiteWco🌕 disable_window_controls_overlay_SiteWco🌕 check_window_controls_overlay_SiteWco_Off🌕 +install_omnibox_icon_SiteWco🌕 enable_window_controls_overlay_SiteWco🌕 disable_window_controls_overlay_SiteWco🌕 check_window_controls_overlay_SiteWco_Off🌕 +install_policy_app_windowed_no_shortcut_SiteWco🌓 enable_window_controls_overlay_SiteWco🌕 disable_window_controls_overlay_SiteWco🌕 check_window_controls_overlay_SiteWco_Off🌕 +install_policy_app_windowed_shortcut_SiteWco🌓 enable_window_controls_overlay_SiteWco🌕 disable_window_controls_overlay_SiteWco🌕 check_window_controls_overlay_SiteWco_Off🌕 +install_menu_option_SiteWco🌕 enable_window_controls_overlay_SiteWco🌕 disable_window_controls_overlay_SiteWco🌕 check_window_controls_overlay_SiteWco_Off🌕 +install_create_shortcut_windowed_SiteWco🌕 enable_window_controls_overlay_SiteWco🌕 disable_window_controls_overlay_SiteWco🌕 check_window_controls_overlay_toggle_SiteWco_Shown🌕 +install_omnibox_icon_SiteWco🌕 enable_window_controls_overlay_SiteWco🌕 disable_window_controls_overlay_SiteWco🌕 check_window_controls_overlay_toggle_SiteWco_Shown🌕 +install_policy_app_windowed_no_shortcut_SiteWco🌓 enable_window_controls_overlay_SiteWco🌕 disable_window_controls_overlay_SiteWco🌕 check_window_controls_overlay_toggle_SiteWco_Shown🌕 +install_policy_app_windowed_shortcut_SiteWco🌓 enable_window_controls_overlay_SiteWco🌕 disable_window_controls_overlay_SiteWco🌕 check_window_controls_overlay_toggle_SiteWco_Shown🌕 +install_menu_option_SiteWco🌕 enable_window_controls_overlay_SiteWco🌕 disable_window_controls_overlay_SiteWco🌕 check_window_controls_overlay_toggle_SiteWco_Shown🌕 +install_create_shortcut_windowed_SiteWco🌕 enable_window_controls_overlay_SiteWco🌕 launch_from_menu_option_SiteWco🌕 check_window_controls_overlay_SiteWco_On🌕 +install_create_shortcut_windowed_SiteWco🌕 enable_window_controls_overlay_SiteWco🌕 launch_from_launch_icon_SiteWco🌕 check_window_controls_overlay_SiteWco_On🌕 +install_create_shortcut_windowed_SiteWco🌕 enable_window_controls_overlay_SiteWco🌕 launch_from_chrome_apps_SiteWco🌓 check_window_controls_overlay_SiteWco_On🌕 +install_create_shortcut_windowed_SiteWco🌕 enable_window_controls_overlay_SiteWco🌕 launch_from_platform_shortcut_SiteWco🌓 check_window_controls_overlay_SiteWco_On🌕 +install_omnibox_icon_SiteWco🌕 enable_window_controls_overlay_SiteWco🌕 launch_from_menu_option_SiteWco🌕 check_window_controls_overlay_SiteWco_On🌕 +install_omnibox_icon_SiteWco🌕 enable_window_controls_overlay_SiteWco🌕 launch_from_launch_icon_SiteWco🌕 check_window_controls_overlay_SiteWco_On🌕 +install_omnibox_icon_SiteWco🌕 enable_window_controls_overlay_SiteWco🌕 launch_from_chrome_apps_SiteWco🌓 check_window_controls_overlay_SiteWco_On🌕 +install_omnibox_icon_SiteWco🌕 enable_window_controls_overlay_SiteWco🌕 launch_from_platform_shortcut_SiteWco🌓 check_window_controls_overlay_SiteWco_On🌕 +install_policy_app_windowed_no_shortcut_SiteWco🌓 enable_window_controls_overlay_SiteWco🌕 launch_from_menu_option_SiteWco🌕 check_window_controls_overlay_SiteWco_On🌕 +install_policy_app_windowed_no_shortcut_SiteWco🌓 enable_window_controls_overlay_SiteWco🌕 launch_from_launch_icon_SiteWco🌕 check_window_controls_overlay_SiteWco_On🌕 +install_policy_app_windowed_no_shortcut_SiteWco🌓 enable_window_controls_overlay_SiteWco🌕 launch_from_chrome_apps_SiteWco🌓 check_window_controls_overlay_SiteWco_On🌕 +install_policy_app_windowed_no_shortcut_SiteWco🌓 enable_window_controls_overlay_SiteWco🌕 launch_from_platform_shortcut_SiteWco🌓 check_window_controls_overlay_SiteWco_On🌕 +install_policy_app_windowed_shortcut_SiteWco🌓 enable_window_controls_overlay_SiteWco🌕 launch_from_menu_option_SiteWco🌕 check_window_controls_overlay_SiteWco_On🌕 +install_policy_app_windowed_shortcut_SiteWco🌓 enable_window_controls_overlay_SiteWco🌕 launch_from_launch_icon_SiteWco🌕 check_window_controls_overlay_SiteWco_On🌕 +install_policy_app_windowed_shortcut_SiteWco🌓 enable_window_controls_overlay_SiteWco🌕 launch_from_chrome_apps_SiteWco🌓 check_window_controls_overlay_SiteWco_On🌕 +install_policy_app_windowed_shortcut_SiteWco🌓 enable_window_controls_overlay_SiteWco🌕 launch_from_platform_shortcut_SiteWco🌓 check_window_controls_overlay_SiteWco_On🌕 +install_menu_option_SiteWco🌕 enable_window_controls_overlay_SiteWco🌕 launch_from_menu_option_SiteWco🌕 check_window_controls_overlay_SiteWco_On🌕 +install_menu_option_SiteWco🌕 enable_window_controls_overlay_SiteWco🌕 launch_from_launch_icon_SiteWco🌕 check_window_controls_overlay_SiteWco_On🌕 +install_menu_option_SiteWco🌕 enable_window_controls_overlay_SiteWco🌕 launch_from_chrome_apps_SiteWco🌓 check_window_controls_overlay_SiteWco_On🌕 +install_menu_option_SiteWco🌕 enable_window_controls_overlay_SiteWco🌕 launch_from_platform_shortcut_SiteWco🌓 check_window_controls_overlay_SiteWco_On🌕 +install_create_shortcut_windowed_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_menu_option_SiteB🌑 check_window_controls_overlay_toggle_SiteWco_Shown🌑 +install_create_shortcut_windowed_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_launch_icon_SiteB🌑 check_window_controls_overlay_toggle_SiteWco_Shown🌑 +install_create_shortcut_windowed_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_chrome_apps_SiteB🌑 check_window_controls_overlay_toggle_SiteWco_Shown🌑 +install_create_shortcut_windowed_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_platform_shortcut_SiteB🌑 check_window_controls_overlay_toggle_SiteWco_Shown🌑 +install_omnibox_icon_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_menu_option_SiteB🌑 check_window_controls_overlay_toggle_SiteWco_Shown🌑 +install_omnibox_icon_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_launch_icon_SiteB🌑 check_window_controls_overlay_toggle_SiteWco_Shown🌑 +install_omnibox_icon_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_chrome_apps_SiteB🌑 check_window_controls_overlay_toggle_SiteWco_Shown🌑 +install_omnibox_icon_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_platform_shortcut_SiteB🌑 check_window_controls_overlay_toggle_SiteWco_Shown🌑 +install_policy_app_windowed_no_shortcut_SiteB🌓 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_menu_option_SiteB🌑 check_window_controls_overlay_toggle_SiteWco_Shown🌑 +install_policy_app_windowed_no_shortcut_SiteB🌓 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_launch_icon_SiteB🌑 check_window_controls_overlay_toggle_SiteWco_Shown🌑 +install_policy_app_windowed_no_shortcut_SiteB🌓 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_chrome_apps_SiteB🌑 check_window_controls_overlay_toggle_SiteWco_Shown🌑 +install_policy_app_windowed_no_shortcut_SiteB🌓 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_platform_shortcut_SiteB🌑 check_window_controls_overlay_toggle_SiteWco_Shown🌑 +install_policy_app_windowed_shortcut_SiteB🌓 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_menu_option_SiteB🌑 check_window_controls_overlay_toggle_SiteWco_Shown🌑 +install_policy_app_windowed_shortcut_SiteB🌓 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_launch_icon_SiteB🌑 check_window_controls_overlay_toggle_SiteWco_Shown🌑 +install_policy_app_windowed_shortcut_SiteB🌓 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_chrome_apps_SiteB🌑 check_window_controls_overlay_toggle_SiteWco_Shown🌑 +install_policy_app_windowed_shortcut_SiteB🌓 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_platform_shortcut_SiteB🌑 check_window_controls_overlay_toggle_SiteWco_Shown🌑 +install_menu_option_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_menu_option_SiteB🌑 check_window_controls_overlay_toggle_SiteWco_Shown🌑 +install_menu_option_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_launch_icon_SiteB🌑 check_window_controls_overlay_toggle_SiteWco_Shown🌑 +install_menu_option_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_chrome_apps_SiteB🌑 check_window_controls_overlay_toggle_SiteWco_Shown🌑 +install_menu_option_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_platform_shortcut_SiteB🌑 check_window_controls_overlay_toggle_SiteWco_Shown🌑 +install_create_shortcut_windowed_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_menu_option_SiteB🌑 check_window_controls_overlay_toggle_SiteWco_Shown🌑 +install_create_shortcut_windowed_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_launch_icon_SiteB🌑 check_window_controls_overlay_toggle_SiteWco_Shown🌑 +install_create_shortcut_windowed_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_chrome_apps_SiteB🌑 check_window_controls_overlay_toggle_SiteWco_Shown🌑 +install_create_shortcut_windowed_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_platform_shortcut_SiteB🌑 check_window_controls_overlay_toggle_SiteWco_Shown🌑 +install_omnibox_icon_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_menu_option_SiteB🌑 check_window_controls_overlay_toggle_SiteWco_Shown🌑 +install_omnibox_icon_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_launch_icon_SiteB🌑 check_window_controls_overlay_toggle_SiteWco_Shown🌑 +install_omnibox_icon_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_chrome_apps_SiteB🌑 check_window_controls_overlay_toggle_SiteWco_Shown🌑 +install_omnibox_icon_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_platform_shortcut_SiteB🌑 check_window_controls_overlay_toggle_SiteWco_Shown🌑 +install_policy_app_windowed_no_shortcut_SiteB🌓 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_menu_option_SiteB🌑 check_window_controls_overlay_toggle_SiteWco_Shown🌑 +install_policy_app_windowed_no_shortcut_SiteB🌓 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_launch_icon_SiteB🌑 check_window_controls_overlay_toggle_SiteWco_Shown🌑 +install_policy_app_windowed_no_shortcut_SiteB🌓 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_chrome_apps_SiteB🌑 check_window_controls_overlay_toggle_SiteWco_Shown🌑 +install_policy_app_windowed_no_shortcut_SiteB🌓 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_platform_shortcut_SiteB🌑 check_window_controls_overlay_toggle_SiteWco_Shown🌑 +install_policy_app_windowed_shortcut_SiteB🌓 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_menu_option_SiteB🌑 check_window_controls_overlay_toggle_SiteWco_Shown🌑 +install_policy_app_windowed_shortcut_SiteB🌓 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_launch_icon_SiteB🌑 check_window_controls_overlay_toggle_SiteWco_Shown🌑 +install_policy_app_windowed_shortcut_SiteB🌓 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_chrome_apps_SiteB🌑 check_window_controls_overlay_toggle_SiteWco_Shown🌑 +install_policy_app_windowed_shortcut_SiteB🌓 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_platform_shortcut_SiteB🌑 check_window_controls_overlay_toggle_SiteWco_Shown🌑 +install_menu_option_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_menu_option_SiteB🌑 check_window_controls_overlay_toggle_SiteWco_Shown🌑 +install_menu_option_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_launch_icon_SiteB🌑 check_window_controls_overlay_toggle_SiteWco_Shown🌑 +install_menu_option_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_chrome_apps_SiteB🌑 check_window_controls_overlay_toggle_SiteWco_Shown🌑 +install_menu_option_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_platform_shortcut_SiteB🌑 check_window_controls_overlay_toggle_SiteWco_Shown🌑 +install_create_shortcut_windowed_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_menu_option_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_SiteB_Off🌑 +install_create_shortcut_windowed_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_launch_icon_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_SiteB_Off🌑 +install_create_shortcut_windowed_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_chrome_apps_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_SiteB_Off🌑 +install_create_shortcut_windowed_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_platform_shortcut_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_SiteB_Off🌑 +install_omnibox_icon_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_menu_option_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_SiteB_Off🌑 +install_omnibox_icon_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_launch_icon_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_SiteB_Off🌑 +install_omnibox_icon_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_chrome_apps_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_SiteB_Off🌑 +install_omnibox_icon_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_platform_shortcut_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_SiteB_Off🌑 +install_policy_app_windowed_no_shortcut_SiteB🌓 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_menu_option_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_SiteB_Off🌑 +install_policy_app_windowed_no_shortcut_SiteB🌓 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_launch_icon_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_SiteB_Off🌑 +install_policy_app_windowed_no_shortcut_SiteB🌓 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_chrome_apps_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_SiteB_Off🌑 +install_policy_app_windowed_no_shortcut_SiteB🌓 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_platform_shortcut_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_SiteB_Off🌑 +install_policy_app_windowed_shortcut_SiteB🌓 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_menu_option_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_SiteB_Off🌑 +install_policy_app_windowed_shortcut_SiteB🌓 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_launch_icon_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_SiteB_Off🌑 +install_policy_app_windowed_shortcut_SiteB🌓 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_chrome_apps_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_SiteB_Off🌑 +install_policy_app_windowed_shortcut_SiteB🌓 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_platform_shortcut_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_SiteB_Off🌑 +install_menu_option_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_menu_option_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_SiteB_Off🌑 +install_menu_option_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_launch_icon_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_SiteB_Off🌑 +install_menu_option_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_chrome_apps_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_SiteB_Off🌑 +install_menu_option_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_platform_shortcut_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_SiteB_Off🌑 +install_create_shortcut_windowed_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_menu_option_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_toggle_SiteB_Shown🌑 +install_create_shortcut_windowed_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_launch_icon_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_toggle_SiteB_Shown🌑 +install_create_shortcut_windowed_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_chrome_apps_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_toggle_SiteB_Shown🌑 +install_create_shortcut_windowed_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_platform_shortcut_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_toggle_SiteB_Shown🌑 +install_omnibox_icon_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_menu_option_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_toggle_SiteB_Shown🌑 +install_omnibox_icon_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_launch_icon_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_toggle_SiteB_Shown🌑 +install_omnibox_icon_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_chrome_apps_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_toggle_SiteB_Shown🌑 +install_omnibox_icon_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_platform_shortcut_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_toggle_SiteB_Shown🌑 +install_policy_app_windowed_no_shortcut_SiteB🌓 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_menu_option_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_toggle_SiteB_Shown🌑 +install_policy_app_windowed_no_shortcut_SiteB🌓 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_launch_icon_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_toggle_SiteB_Shown🌑 +install_policy_app_windowed_no_shortcut_SiteB🌓 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_chrome_apps_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_toggle_SiteB_Shown🌑 +install_policy_app_windowed_no_shortcut_SiteB🌓 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_platform_shortcut_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_toggle_SiteB_Shown🌑 +install_policy_app_windowed_shortcut_SiteB🌓 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_menu_option_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_toggle_SiteB_Shown🌑 +install_policy_app_windowed_shortcut_SiteB🌓 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_launch_icon_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_toggle_SiteB_Shown🌑 +install_policy_app_windowed_shortcut_SiteB🌓 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_chrome_apps_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_toggle_SiteB_Shown🌑 +install_policy_app_windowed_shortcut_SiteB🌓 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_platform_shortcut_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_toggle_SiteB_Shown🌑 +install_menu_option_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_menu_option_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_toggle_SiteB_Shown🌑 +install_menu_option_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_launch_icon_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_toggle_SiteB_Shown🌑 +install_menu_option_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_chrome_apps_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_toggle_SiteB_Shown🌑 +install_menu_option_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_platform_shortcut_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_toggle_SiteB_Shown🌑 +install_create_shortcut_windowed_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_menu_option_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_toggle_SiteB_Shown🌑 +install_create_shortcut_windowed_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_launch_icon_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_toggle_SiteB_Shown🌑 +install_create_shortcut_windowed_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_chrome_apps_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_toggle_SiteB_Shown🌑 +install_create_shortcut_windowed_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_platform_shortcut_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_toggle_SiteB_Shown🌑 +install_omnibox_icon_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_menu_option_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_toggle_SiteB_Shown🌑 +install_omnibox_icon_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_launch_icon_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_toggle_SiteB_Shown🌑 +install_omnibox_icon_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_chrome_apps_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_toggle_SiteB_Shown🌑 +install_omnibox_icon_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_platform_shortcut_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_toggle_SiteB_Shown🌑 +install_policy_app_windowed_no_shortcut_SiteB🌓 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_menu_option_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_toggle_SiteB_Shown🌑 +install_policy_app_windowed_no_shortcut_SiteB🌓 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_launch_icon_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_toggle_SiteB_Shown🌑 +install_policy_app_windowed_no_shortcut_SiteB🌓 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_chrome_apps_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_toggle_SiteB_Shown🌑 +install_policy_app_windowed_no_shortcut_SiteB🌓 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_platform_shortcut_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_toggle_SiteB_Shown🌑 +install_policy_app_windowed_shortcut_SiteB🌓 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_menu_option_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_toggle_SiteB_Shown🌑 +install_policy_app_windowed_shortcut_SiteB🌓 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_launch_icon_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_toggle_SiteB_Shown🌑 +install_policy_app_windowed_shortcut_SiteB🌓 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_chrome_apps_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_toggle_SiteB_Shown🌑 +install_policy_app_windowed_shortcut_SiteB🌓 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_platform_shortcut_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_toggle_SiteB_Shown🌑 +install_menu_option_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_menu_option_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_toggle_SiteB_Shown🌑 +install_menu_option_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_launch_icon_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_toggle_SiteB_Shown🌑 +install_menu_option_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_chrome_apps_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_toggle_SiteB_Shown🌑 +install_menu_option_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_platform_shortcut_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_toggle_SiteB_Shown🌑 +install_create_shortcut_windowed_SiteWco🌕 manifest_update_display_SiteWco_Standalone🌕 await_manifest_update_SiteWco🌑 launch_from_menu_option_SiteWco🌑 check_window_controls_overlay_toggle_SiteWco_NotShown🌑 +install_create_shortcut_windowed_SiteWco🌕 manifest_update_display_SiteWco_Standalone🌕 await_manifest_update_SiteWco🌑 launch_from_launch_icon_SiteWco🌑 check_window_controls_overlay_toggle_SiteWco_NotShown🌑 +install_create_shortcut_windowed_SiteWco🌕 manifest_update_display_SiteWco_Standalone🌕 await_manifest_update_SiteWco🌑 launch_from_chrome_apps_SiteWco🌑 check_window_controls_overlay_toggle_SiteWco_NotShown🌑 +install_create_shortcut_windowed_SiteWco🌕 manifest_update_display_SiteWco_Standalone🌕 await_manifest_update_SiteWco🌑 launch_from_platform_shortcut_SiteWco🌑 check_window_controls_overlay_toggle_SiteWco_NotShown🌑 +install_omnibox_icon_SiteWco🌕 manifest_update_display_SiteWco_Standalone🌕 await_manifest_update_SiteWco🌑 launch_from_menu_option_SiteWco🌑 check_window_controls_overlay_toggle_SiteWco_NotShown🌑 +install_omnibox_icon_SiteWco🌕 manifest_update_display_SiteWco_Standalone🌕 await_manifest_update_SiteWco🌑 launch_from_launch_icon_SiteWco🌑 check_window_controls_overlay_toggle_SiteWco_NotShown🌑 +install_omnibox_icon_SiteWco🌕 manifest_update_display_SiteWco_Standalone🌕 await_manifest_update_SiteWco🌑 launch_from_chrome_apps_SiteWco🌑 check_window_controls_overlay_toggle_SiteWco_NotShown🌑 +install_omnibox_icon_SiteWco🌕 manifest_update_display_SiteWco_Standalone🌕 await_manifest_update_SiteWco🌑 launch_from_platform_shortcut_SiteWco🌑 check_window_controls_overlay_toggle_SiteWco_NotShown🌑 +install_policy_app_windowed_no_shortcut_SiteWco🌓 manifest_update_display_SiteWco_Standalone🌕 await_manifest_update_SiteWco🌑 launch_from_menu_option_SiteWco🌑 check_window_controls_overlay_toggle_SiteWco_NotShown🌑 +install_policy_app_windowed_no_shortcut_SiteWco🌓 manifest_update_display_SiteWco_Standalone🌕 await_manifest_update_SiteWco🌑 launch_from_launch_icon_SiteWco🌑 check_window_controls_overlay_toggle_SiteWco_NotShown🌑 +install_policy_app_windowed_no_shortcut_SiteWco🌓 manifest_update_display_SiteWco_Standalone🌕 await_manifest_update_SiteWco🌑 launch_from_chrome_apps_SiteWco🌑 check_window_controls_overlay_toggle_SiteWco_NotShown🌑 +install_policy_app_windowed_no_shortcut_SiteWco🌓 manifest_update_display_SiteWco_Standalone🌕 await_manifest_update_SiteWco🌑 launch_from_platform_shortcut_SiteWco🌑 check_window_controls_overlay_toggle_SiteWco_NotShown🌑 +install_policy_app_windowed_shortcut_SiteWco🌓 manifest_update_display_SiteWco_Standalone🌕 await_manifest_update_SiteWco🌑 launch_from_menu_option_SiteWco🌑 check_window_controls_overlay_toggle_SiteWco_NotShown🌑 +install_policy_app_windowed_shortcut_SiteWco🌓 manifest_update_display_SiteWco_Standalone🌕 await_manifest_update_SiteWco🌑 launch_from_launch_icon_SiteWco🌑 check_window_controls_overlay_toggle_SiteWco_NotShown🌑 +install_policy_app_windowed_shortcut_SiteWco🌓 manifest_update_display_SiteWco_Standalone🌕 await_manifest_update_SiteWco🌑 launch_from_chrome_apps_SiteWco🌑 check_window_controls_overlay_toggle_SiteWco_NotShown🌑 +install_policy_app_windowed_shortcut_SiteWco🌓 manifest_update_display_SiteWco_Standalone🌕 await_manifest_update_SiteWco🌑 launch_from_platform_shortcut_SiteWco🌑 check_window_controls_overlay_toggle_SiteWco_NotShown🌑 +install_menu_option_SiteWco🌕 manifest_update_display_SiteWco_Standalone🌕 await_manifest_update_SiteWco🌑 launch_from_menu_option_SiteWco🌑 check_window_controls_overlay_toggle_SiteWco_NotShown🌑 +install_menu_option_SiteWco🌕 manifest_update_display_SiteWco_Standalone🌕 await_manifest_update_SiteWco🌑 launch_from_launch_icon_SiteWco🌑 check_window_controls_overlay_toggle_SiteWco_NotShown🌑 +install_menu_option_SiteWco🌕 manifest_update_display_SiteWco_Standalone🌕 await_manifest_update_SiteWco🌑 launch_from_chrome_apps_SiteWco🌑 check_window_controls_overlay_toggle_SiteWco_NotShown🌑 +install_menu_option_SiteWco🌕 manifest_update_display_SiteWco_Standalone🌕 await_manifest_update_SiteWco🌑 launch_from_platform_shortcut_SiteWco🌑 check_window_controls_overlay_toggle_SiteWco_NotShown🌑 +install_create_shortcut_windowed_SiteWco🌕 manifest_update_display_SiteWco_Standalone🌕 await_manifest_update_SiteWco🌑 launch_from_menu_option_SiteWco🌑 check_window_controls_overlay_SiteWco_Off🌑 +install_create_shortcut_windowed_SiteWco🌕 manifest_update_display_SiteWco_Standalone🌕 await_manifest_update_SiteWco🌑 launch_from_launch_icon_SiteWco🌑 check_window_controls_overlay_SiteWco_Off🌑 +install_create_shortcut_windowed_SiteWco🌕 manifest_update_display_SiteWco_Standalone🌕 await_manifest_update_SiteWco🌑 launch_from_chrome_apps_SiteWco🌑 check_window_controls_overlay_SiteWco_Off🌑 +install_create_shortcut_windowed_SiteWco🌕 manifest_update_display_SiteWco_Standalone🌕 await_manifest_update_SiteWco🌑 launch_from_platform_shortcut_SiteWco🌑 check_window_controls_overlay_SiteWco_Off🌑 +install_omnibox_icon_SiteWco🌕 manifest_update_display_SiteWco_Standalone🌕 await_manifest_update_SiteWco🌑 launch_from_menu_option_SiteWco🌑 check_window_controls_overlay_SiteWco_Off🌑 +install_omnibox_icon_SiteWco🌕 manifest_update_display_SiteWco_Standalone🌕 await_manifest_update_SiteWco🌑 launch_from_launch_icon_SiteWco🌑 check_window_controls_overlay_SiteWco_Off🌑 +install_omnibox_icon_SiteWco🌕 manifest_update_display_SiteWco_Standalone🌕 await_manifest_update_SiteWco🌑 launch_from_chrome_apps_SiteWco🌑 check_window_controls_overlay_SiteWco_Off🌑 +install_omnibox_icon_SiteWco🌕 manifest_update_display_SiteWco_Standalone🌕 await_manifest_update_SiteWco🌑 launch_from_platform_shortcut_SiteWco🌑 check_window_controls_overlay_SiteWco_Off🌑 +install_policy_app_windowed_no_shortcut_SiteWco🌓 manifest_update_display_SiteWco_Standalone🌕 await_manifest_update_SiteWco🌑 launch_from_menu_option_SiteWco🌑 check_window_controls_overlay_SiteWco_Off🌑 +install_policy_app_windowed_no_shortcut_SiteWco🌓 manifest_update_display_SiteWco_Standalone🌕 await_manifest_update_SiteWco🌑 launch_from_launch_icon_SiteWco🌑 check_window_controls_overlay_SiteWco_Off🌑 +install_policy_app_windowed_no_shortcut_SiteWco🌓 manifest_update_display_SiteWco_Standalone🌕 await_manifest_update_SiteWco🌑 launch_from_chrome_apps_SiteWco🌑 check_window_controls_overlay_SiteWco_Off🌑 +install_policy_app_windowed_no_shortcut_SiteWco🌓 manifest_update_display_SiteWco_Standalone🌕 await_manifest_update_SiteWco🌑 launch_from_platform_shortcut_SiteWco🌑 check_window_controls_overlay_SiteWco_Off🌑 +install_policy_app_windowed_shortcut_SiteWco🌓 manifest_update_display_SiteWco_Standalone🌕 await_manifest_update_SiteWco🌑 launch_from_menu_option_SiteWco🌑 check_window_controls_overlay_SiteWco_Off🌑 +install_policy_app_windowed_shortcut_SiteWco🌓 manifest_update_display_SiteWco_Standalone🌕 await_manifest_update_SiteWco🌑 launch_from_launch_icon_SiteWco🌑 check_window_controls_overlay_SiteWco_Off🌑 +install_policy_app_windowed_shortcut_SiteWco🌓 manifest_update_display_SiteWco_Standalone🌕 await_manifest_update_SiteWco🌑 launch_from_chrome_apps_SiteWco🌑 check_window_controls_overlay_SiteWco_Off🌑 +install_policy_app_windowed_shortcut_SiteWco🌓 manifest_update_display_SiteWco_Standalone🌕 await_manifest_update_SiteWco🌑 launch_from_platform_shortcut_SiteWco🌑 check_window_controls_overlay_SiteWco_Off🌑 +install_menu_option_SiteWco🌕 manifest_update_display_SiteWco_Standalone🌕 await_manifest_update_SiteWco🌑 launch_from_menu_option_SiteWco🌑 check_window_controls_overlay_SiteWco_Off🌑 +install_menu_option_SiteWco🌕 manifest_update_display_SiteWco_Standalone🌕 await_manifest_update_SiteWco🌑 launch_from_launch_icon_SiteWco🌑 check_window_controls_overlay_SiteWco_Off🌑 +install_menu_option_SiteWco🌕 manifest_update_display_SiteWco_Standalone🌕 await_manifest_update_SiteWco🌑 launch_from_chrome_apps_SiteWco🌑 check_window_controls_overlay_SiteWco_Off🌑 +install_menu_option_SiteWco🌕 manifest_update_display_SiteWco_Standalone🌕 await_manifest_update_SiteWco🌑 launch_from_platform_shortcut_SiteWco🌑 check_window_controls_overlay_SiteWco_Off🌑 +install_create_shortcut_windowed_SiteB🌕 check_site_handles_file_SiteB_Txt🌑 check_site_handles_file_SiteB_Png🌑 +install_omnibox_icon_SiteB🌕 check_site_handles_file_SiteB_Txt🌑 check_site_handles_file_SiteB_Png🌑 +install_policy_app_windowed_no_shortcut_SiteB🌓 check_site_handles_file_SiteB_Txt🌑 check_site_handles_file_SiteB_Png🌑 +install_policy_app_windowed_shortcut_SiteB🌓 check_site_handles_file_SiteB_Txt🌑 check_site_handles_file_SiteB_Png🌑 +install_menu_option_SiteB🌕 check_site_handles_file_SiteB_Txt🌑 check_site_handles_file_SiteB_Png🌑 +install_create_shortcut_tabbed_SiteB🌕 check_site_handles_file_SiteB_Txt🌑 check_site_handles_file_SiteB_Png🌑 +install_policy_app_tabbed_shortcut_SiteB🌓 check_site_handles_file_SiteB_Txt🌑 check_site_handles_file_SiteB_Png🌑 +install_policy_app_tabbed_no_shortcut_SiteB🌓 check_site_handles_file_SiteB_Txt🌑 check_site_handles_file_SiteB_Png🌑 +install_create_shortcut_windowed_SiteB🌕 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 +install_omnibox_icon_SiteB🌕 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 +install_policy_app_windowed_no_shortcut_SiteB🌓 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 +install_policy_app_windowed_shortcut_SiteB🌓 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 +install_menu_option_SiteB🌕 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 +install_create_shortcut_tabbed_SiteB🌕 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 +install_policy_app_tabbed_shortcut_SiteB🌓 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 +install_policy_app_tabbed_no_shortcut_SiteB🌓 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 +install_create_shortcut_windowed_SiteB🌕 launch_file_OneTextFile🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_One🌑 check_files_loaded_in_site_SiteB_OneTextFile🌑 +install_omnibox_icon_SiteB🌕 launch_file_OneTextFile🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_One🌑 check_files_loaded_in_site_SiteB_OneTextFile🌑 +install_policy_app_windowed_no_shortcut_SiteB🌓 launch_file_OneTextFile🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_One🌑 check_files_loaded_in_site_SiteB_OneTextFile🌑 +install_policy_app_windowed_shortcut_SiteB🌓 launch_file_OneTextFile🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_One🌑 check_files_loaded_in_site_SiteB_OneTextFile🌑 +install_menu_option_SiteB🌕 launch_file_OneTextFile🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_One🌑 check_files_loaded_in_site_SiteB_OneTextFile🌑 +install_create_shortcut_tabbed_SiteB🌕 launch_file_OneTextFile🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_One🌑 check_files_loaded_in_site_SiteB_OneTextFile🌑 +install_policy_app_tabbed_shortcut_SiteB🌓 launch_file_OneTextFile🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_One🌑 check_files_loaded_in_site_SiteB_OneTextFile🌑 +install_policy_app_tabbed_no_shortcut_SiteB🌓 launch_file_OneTextFile🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_One🌑 check_files_loaded_in_site_SiteB_OneTextFile🌑 +install_create_shortcut_windowed_SiteB🌕 launch_file_MultipleTextFiles🌑 check_file_handling_dialog_Shown🌑 +install_omnibox_icon_SiteB🌕 launch_file_MultipleTextFiles🌑 check_file_handling_dialog_Shown🌑 +install_policy_app_windowed_no_shortcut_SiteB🌓 launch_file_MultipleTextFiles🌑 check_file_handling_dialog_Shown🌑 +install_policy_app_windowed_shortcut_SiteB🌓 launch_file_MultipleTextFiles🌑 check_file_handling_dialog_Shown🌑 +install_menu_option_SiteB🌕 launch_file_MultipleTextFiles🌑 check_file_handling_dialog_Shown🌑 +install_create_shortcut_tabbed_SiteB🌕 launch_file_MultipleTextFiles🌑 check_file_handling_dialog_Shown🌑 +install_policy_app_tabbed_shortcut_SiteB🌓 launch_file_MultipleTextFiles🌑 check_file_handling_dialog_Shown🌑 +install_policy_app_tabbed_no_shortcut_SiteB🌓 launch_file_MultipleTextFiles🌑 check_file_handling_dialog_Shown🌑 +install_create_shortcut_windowed_SiteB🌕 launch_file_MultipleTextFiles🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_One🌑 check_files_loaded_in_site_SiteB_MultipleTextFiles🌑 +install_omnibox_icon_SiteB🌕 launch_file_MultipleTextFiles🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_One🌑 check_files_loaded_in_site_SiteB_MultipleTextFiles🌑 +install_policy_app_windowed_no_shortcut_SiteB🌓 launch_file_MultipleTextFiles🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_One🌑 check_files_loaded_in_site_SiteB_MultipleTextFiles🌑 +install_policy_app_windowed_shortcut_SiteB🌓 launch_file_MultipleTextFiles🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_One🌑 check_files_loaded_in_site_SiteB_MultipleTextFiles🌑 +install_menu_option_SiteB🌕 launch_file_MultipleTextFiles🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_One🌑 check_files_loaded_in_site_SiteB_MultipleTextFiles🌑 +install_create_shortcut_tabbed_SiteB🌕 launch_file_MultipleTextFiles🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_One🌑 check_files_loaded_in_site_SiteB_MultipleTextFiles🌑 +install_policy_app_tabbed_shortcut_SiteB🌓 launch_file_MultipleTextFiles🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_One🌑 check_files_loaded_in_site_SiteB_MultipleTextFiles🌑 +install_policy_app_tabbed_no_shortcut_SiteB🌓 launch_file_MultipleTextFiles🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_One🌑 check_files_loaded_in_site_SiteB_MultipleTextFiles🌑 +install_create_shortcut_windowed_SiteB🌕 launch_file_OnePngFile🌑 check_file_handling_dialog_Shown🌑 +install_omnibox_icon_SiteB🌕 launch_file_OnePngFile🌑 check_file_handling_dialog_Shown🌑 +install_policy_app_windowed_no_shortcut_SiteB🌓 launch_file_OnePngFile🌑 check_file_handling_dialog_Shown🌑 +install_policy_app_windowed_shortcut_SiteB🌓 launch_file_OnePngFile🌑 check_file_handling_dialog_Shown🌑 +install_menu_option_SiteB🌕 launch_file_OnePngFile🌑 check_file_handling_dialog_Shown🌑 +install_create_shortcut_tabbed_SiteB🌕 launch_file_OnePngFile🌑 check_file_handling_dialog_Shown🌑 +install_policy_app_tabbed_shortcut_SiteB🌓 launch_file_OnePngFile🌑 check_file_handling_dialog_Shown🌑 +install_policy_app_tabbed_no_shortcut_SiteB🌓 launch_file_OnePngFile🌑 check_file_handling_dialog_Shown🌑 +install_create_shortcut_windowed_SiteB🌕 launch_file_OnePngFile🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_One🌑 check_files_loaded_in_site_SiteB_OnePngFile🌑 +install_omnibox_icon_SiteB🌕 launch_file_OnePngFile🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_One🌑 check_files_loaded_in_site_SiteB_OnePngFile🌑 +install_policy_app_windowed_no_shortcut_SiteB🌓 launch_file_OnePngFile🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_One🌑 check_files_loaded_in_site_SiteB_OnePngFile🌑 +install_policy_app_windowed_shortcut_SiteB🌓 launch_file_OnePngFile🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_One🌑 check_files_loaded_in_site_SiteB_OnePngFile🌑 +install_menu_option_SiteB🌕 launch_file_OnePngFile🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_One🌑 check_files_loaded_in_site_SiteB_OnePngFile🌑 +install_create_shortcut_tabbed_SiteB🌕 launch_file_OnePngFile🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_One🌑 check_files_loaded_in_site_SiteB_OnePngFile🌑 +install_policy_app_tabbed_shortcut_SiteB🌓 launch_file_OnePngFile🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_One🌑 check_files_loaded_in_site_SiteB_OnePngFile🌑 +install_policy_app_tabbed_no_shortcut_SiteB🌓 launch_file_OnePngFile🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_One🌑 check_files_loaded_in_site_SiteB_OnePngFile🌑 +install_create_shortcut_windowed_SiteB🌕 launch_file_MultiplePngFiles🌑 check_file_handling_dialog_Shown🌑 +install_omnibox_icon_SiteB🌕 launch_file_MultiplePngFiles🌑 check_file_handling_dialog_Shown🌑 +install_policy_app_windowed_no_shortcut_SiteB🌓 launch_file_MultiplePngFiles🌑 check_file_handling_dialog_Shown🌑 +install_policy_app_windowed_shortcut_SiteB🌓 launch_file_MultiplePngFiles🌑 check_file_handling_dialog_Shown🌑 +install_menu_option_SiteB🌕 launch_file_MultiplePngFiles🌑 check_file_handling_dialog_Shown🌑 +install_create_shortcut_tabbed_SiteB🌕 launch_file_MultiplePngFiles🌑 check_file_handling_dialog_Shown🌑 +install_policy_app_tabbed_shortcut_SiteB🌓 launch_file_MultiplePngFiles🌑 check_file_handling_dialog_Shown🌑 +install_policy_app_tabbed_no_shortcut_SiteB🌓 launch_file_MultiplePngFiles🌑 check_file_handling_dialog_Shown🌑 +install_create_shortcut_windowed_SiteB🌕 launch_file_MultiplePngFiles🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_Two🌑 check_files_loaded_in_site_SiteB_MultiplePngFiles🌑 +install_omnibox_icon_SiteB🌕 launch_file_MultiplePngFiles🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_Two🌑 check_files_loaded_in_site_SiteB_MultiplePngFiles🌑 +install_policy_app_windowed_no_shortcut_SiteB🌓 launch_file_MultiplePngFiles🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_Two🌑 check_files_loaded_in_site_SiteB_MultiplePngFiles🌑 +install_policy_app_windowed_shortcut_SiteB🌓 launch_file_MultiplePngFiles🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_Two🌑 check_files_loaded_in_site_SiteB_MultiplePngFiles🌑 +install_menu_option_SiteB🌕 launch_file_MultiplePngFiles🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_Two🌑 check_files_loaded_in_site_SiteB_MultiplePngFiles🌑 +install_create_shortcut_tabbed_SiteB🌕 launch_file_MultiplePngFiles🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_Two🌑 check_files_loaded_in_site_SiteB_MultiplePngFiles🌑 +install_policy_app_tabbed_shortcut_SiteB🌓 launch_file_MultiplePngFiles🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_Two🌑 check_files_loaded_in_site_SiteB_MultiplePngFiles🌑 +install_policy_app_tabbed_no_shortcut_SiteB🌓 launch_file_MultiplePngFiles🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_Two🌑 check_files_loaded_in_site_SiteB_MultiplePngFiles🌑 +install_create_shortcut_windowed_SiteB🌕 launch_file_OneTextFile🌑 file_handling_dialog_Allow_Remember🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_NotShown🌑 check_pwa_window_created_SiteB_One🌑 +install_omnibox_icon_SiteB🌕 launch_file_OneTextFile🌑 file_handling_dialog_Allow_Remember🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_NotShown🌑 check_pwa_window_created_SiteB_One🌑 +install_policy_app_windowed_no_shortcut_SiteB🌓 launch_file_OneTextFile🌑 file_handling_dialog_Allow_Remember🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_NotShown🌑 check_pwa_window_created_SiteB_One🌑 +install_policy_app_windowed_shortcut_SiteB🌓 launch_file_OneTextFile🌑 file_handling_dialog_Allow_Remember🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_NotShown🌑 check_pwa_window_created_SiteB_One🌑 +install_menu_option_SiteB🌕 launch_file_OneTextFile🌑 file_handling_dialog_Allow_Remember🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_NotShown🌑 check_pwa_window_created_SiteB_One🌑 +install_create_shortcut_tabbed_SiteB🌕 launch_file_OneTextFile🌑 file_handling_dialog_Allow_Remember🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_NotShown🌑 check_pwa_window_created_SiteB_One🌑 +install_policy_app_tabbed_shortcut_SiteB🌓 launch_file_OneTextFile🌑 file_handling_dialog_Allow_Remember🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_NotShown🌑 check_pwa_window_created_SiteB_One🌑 +install_policy_app_tabbed_no_shortcut_SiteB🌓 launch_file_OneTextFile🌑 file_handling_dialog_Allow_Remember🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_NotShown🌑 check_pwa_window_created_SiteB_One🌑 +install_create_shortcut_windowed_SiteB🌕 launch_file_OneTextFile🌑 file_handling_dialog_Allow_AskAgain🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 +install_omnibox_icon_SiteB🌕 launch_file_OneTextFile🌑 file_handling_dialog_Allow_AskAgain🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 +install_policy_app_windowed_no_shortcut_SiteB🌓 launch_file_OneTextFile🌑 file_handling_dialog_Allow_AskAgain🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 +install_policy_app_windowed_shortcut_SiteB🌓 launch_file_OneTextFile🌑 file_handling_dialog_Allow_AskAgain🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 +install_menu_option_SiteB🌕 launch_file_OneTextFile🌑 file_handling_dialog_Allow_AskAgain🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 +install_create_shortcut_tabbed_SiteB🌕 launch_file_OneTextFile🌑 file_handling_dialog_Allow_AskAgain🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 +install_policy_app_tabbed_shortcut_SiteB🌓 launch_file_OneTextFile🌑 file_handling_dialog_Allow_AskAgain🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 +install_policy_app_tabbed_no_shortcut_SiteB🌓 launch_file_OneTextFile🌑 file_handling_dialog_Allow_AskAgain🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 +install_create_shortcut_windowed_SiteB🌕 launch_file_OneTextFile🌑 file_handling_dialog_Deny_AskAgain🌑 check_window_not_created🌑 check_site_handles_file_SiteB_Txt🌑 check_site_handles_file_SiteB_Png🌑 +install_omnibox_icon_SiteB🌕 launch_file_OneTextFile🌑 file_handling_dialog_Deny_AskAgain🌑 check_window_not_created🌑 check_site_handles_file_SiteB_Txt🌑 check_site_handles_file_SiteB_Png🌑 +install_policy_app_windowed_no_shortcut_SiteB🌓 launch_file_OneTextFile🌑 file_handling_dialog_Deny_AskAgain🌑 check_window_not_created🌑 check_site_handles_file_SiteB_Txt🌑 check_site_handles_file_SiteB_Png🌑 +install_policy_app_windowed_shortcut_SiteB🌓 launch_file_OneTextFile🌑 file_handling_dialog_Deny_AskAgain🌑 check_window_not_created🌑 check_site_handles_file_SiteB_Txt🌑 check_site_handles_file_SiteB_Png🌑 +install_menu_option_SiteB🌕 launch_file_OneTextFile🌑 file_handling_dialog_Deny_AskAgain🌑 check_window_not_created🌑 check_site_handles_file_SiteB_Txt🌑 check_site_handles_file_SiteB_Png🌑 +install_create_shortcut_tabbed_SiteB🌕 launch_file_OneTextFile🌑 file_handling_dialog_Deny_AskAgain🌑 check_window_not_created🌑 check_site_handles_file_SiteB_Txt🌑 check_site_handles_file_SiteB_Png🌑 +install_policy_app_tabbed_shortcut_SiteB🌓 launch_file_OneTextFile🌑 file_handling_dialog_Deny_AskAgain🌑 check_window_not_created🌑 check_site_handles_file_SiteB_Txt🌑 check_site_handles_file_SiteB_Png🌑 +install_policy_app_tabbed_no_shortcut_SiteB🌓 launch_file_OneTextFile🌑 file_handling_dialog_Deny_AskAgain🌑 check_window_not_created🌑 check_site_handles_file_SiteB_Txt🌑 check_site_handles_file_SiteB_Png🌑 +install_create_shortcut_windowed_SiteB🌕 launch_file_OneTextFile🌑 file_handling_dialog_Deny_AskAgain🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 +install_omnibox_icon_SiteB🌕 launch_file_OneTextFile🌑 file_handling_dialog_Deny_AskAgain🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 +install_policy_app_windowed_no_shortcut_SiteB🌓 launch_file_OneTextFile🌑 file_handling_dialog_Deny_AskAgain🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 +install_policy_app_windowed_shortcut_SiteB🌓 launch_file_OneTextFile🌑 file_handling_dialog_Deny_AskAgain🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 +install_menu_option_SiteB🌕 launch_file_OneTextFile🌑 file_handling_dialog_Deny_AskAgain🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 +install_create_shortcut_tabbed_SiteB🌕 launch_file_OneTextFile🌑 file_handling_dialog_Deny_AskAgain🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 +install_policy_app_tabbed_shortcut_SiteB🌓 launch_file_OneTextFile🌑 file_handling_dialog_Deny_AskAgain🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 +install_policy_app_tabbed_no_shortcut_SiteB🌓 launch_file_OneTextFile🌑 file_handling_dialog_Deny_AskAgain🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 +install_create_shortcut_windowed_SiteB🌕 launch_file_OneTextFile🌑 file_handling_dialog_Deny_Remember🌑 check_window_not_created🌑 check_site_not_handles_file_SiteB_Txt🌑 check_site_not_handles_file_SiteB_Png🌑 +install_omnibox_icon_SiteB🌕 launch_file_OneTextFile🌑 file_handling_dialog_Deny_Remember🌑 check_window_not_created🌑 check_site_not_handles_file_SiteB_Txt🌑 check_site_not_handles_file_SiteB_Png🌑 +install_policy_app_windowed_no_shortcut_SiteB🌓 launch_file_OneTextFile🌑 file_handling_dialog_Deny_Remember🌑 check_window_not_created🌑 check_site_not_handles_file_SiteB_Txt🌑 check_site_not_handles_file_SiteB_Png🌑 +install_policy_app_windowed_shortcut_SiteB🌓 launch_file_OneTextFile🌑 file_handling_dialog_Deny_Remember🌑 check_window_not_created🌑 check_site_not_handles_file_SiteB_Txt🌑 check_site_not_handles_file_SiteB_Png🌑 +install_menu_option_SiteB🌕 launch_file_OneTextFile🌑 file_handling_dialog_Deny_Remember🌑 check_window_not_created🌑 check_site_not_handles_file_SiteB_Txt🌑 check_site_not_handles_file_SiteB_Png🌑 +install_create_shortcut_tabbed_SiteB🌕 launch_file_OneTextFile🌑 file_handling_dialog_Deny_Remember🌑 check_window_not_created🌑 check_site_not_handles_file_SiteB_Txt🌑 check_site_not_handles_file_SiteB_Png🌑 +install_policy_app_tabbed_shortcut_SiteB🌓 launch_file_OneTextFile🌑 file_handling_dialog_Deny_Remember🌑 check_window_not_created🌑 check_site_not_handles_file_SiteB_Txt🌑 check_site_not_handles_file_SiteB_Png🌑 +install_policy_app_tabbed_no_shortcut_SiteB🌓 launch_file_OneTextFile🌑 file_handling_dialog_Deny_Remember🌑 check_window_not_created🌑 check_site_not_handles_file_SiteB_Txt🌑 check_site_not_handles_file_SiteB_Png🌑 +install_create_shortcut_windowed_SiteB🌕 add_file_handling_policy_approval_SiteB🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_NotShown🌑 check_pwa_window_created_SiteB_One🌑 +install_omnibox_icon_SiteB🌕 add_file_handling_policy_approval_SiteB🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_NotShown🌑 check_pwa_window_created_SiteB_One🌑 +install_policy_app_windowed_no_shortcut_SiteB🌓 add_file_handling_policy_approval_SiteB🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_NotShown🌑 check_pwa_window_created_SiteB_One🌑 +install_policy_app_windowed_shortcut_SiteB🌓 add_file_handling_policy_approval_SiteB🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_NotShown🌑 check_pwa_window_created_SiteB_One🌑 +install_menu_option_SiteB🌕 add_file_handling_policy_approval_SiteB🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_NotShown🌑 check_pwa_window_created_SiteB_One🌑 +install_create_shortcut_tabbed_SiteB🌕 add_file_handling_policy_approval_SiteB🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_NotShown🌑 check_pwa_window_created_SiteB_One🌑 +install_policy_app_tabbed_shortcut_SiteB🌓 add_file_handling_policy_approval_SiteB🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_NotShown🌑 check_pwa_window_created_SiteB_One🌑 +install_policy_app_tabbed_no_shortcut_SiteB🌓 add_file_handling_policy_approval_SiteB🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_NotShown🌑 check_pwa_window_created_SiteB_One🌑 +install_create_shortcut_windowed_SiteB🌕 add_file_handling_policy_approval_SiteB🌑 remove_file_handling_policy_approval_SiteB🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 +install_omnibox_icon_SiteB🌕 add_file_handling_policy_approval_SiteB🌑 remove_file_handling_policy_approval_SiteB🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 +install_policy_app_windowed_no_shortcut_SiteB🌓 add_file_handling_policy_approval_SiteB🌑 remove_file_handling_policy_approval_SiteB🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 +install_policy_app_windowed_shortcut_SiteB🌓 add_file_handling_policy_approval_SiteB🌑 remove_file_handling_policy_approval_SiteB🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 +install_menu_option_SiteB🌕 add_file_handling_policy_approval_SiteB🌑 remove_file_handling_policy_approval_SiteB🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 +install_create_shortcut_tabbed_SiteB🌕 add_file_handling_policy_approval_SiteB🌑 remove_file_handling_policy_approval_SiteB🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 +install_policy_app_tabbed_shortcut_SiteB🌓 add_file_handling_policy_approval_SiteB🌑 remove_file_handling_policy_approval_SiteB🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 +install_policy_app_tabbed_no_shortcut_SiteB🌓 add_file_handling_policy_approval_SiteB🌑 remove_file_handling_policy_approval_SiteB🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑
diff --git a/chrome/test/webapps/coverage/coverage_mac.tsv b/chrome/test/webapps/coverage/coverage_mac.tsv index b3f66ddd..0b182a67 100644 --- a/chrome/test/webapps/coverage/coverage_mac.tsv +++ b/chrome/test/webapps/coverage/coverage_mac.tsv
@@ -1,936 +1,1118 @@ -# This is a generated file. -# Full coverage: 54%, with partial coverage: 70% -install_create_shortcut_windowed_SiteA🌕 manifest_update_title_SiteA🌑 accept_app_id_update_dialog🌑 close_pwa🌑 launch_from_menu_option_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 -install_create_shortcut_windowed_SiteA🌕 manifest_update_title_SiteA🌑 accept_app_id_update_dialog🌑 close_pwa🌑 launch_from_launch_icon_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 -install_create_shortcut_windowed_SiteA🌕 manifest_update_title_SiteA🌑 accept_app_id_update_dialog🌑 close_pwa🌑 launch_from_chrome_apps_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 -install_create_shortcut_windowed_SiteA🌕 manifest_update_title_SiteA🌑 accept_app_id_update_dialog🌑 close_pwa🌑 launch_from_platform_shortcut_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 -install_omnibox_icon_SiteA🌕 manifest_update_title_SiteA🌑 accept_app_id_update_dialog🌑 close_pwa🌑 launch_from_menu_option_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 -install_omnibox_icon_SiteA🌕 manifest_update_title_SiteA🌑 accept_app_id_update_dialog🌑 close_pwa🌑 launch_from_launch_icon_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 -install_omnibox_icon_SiteA🌕 manifest_update_title_SiteA🌑 accept_app_id_update_dialog🌑 close_pwa🌑 launch_from_chrome_apps_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 -install_omnibox_icon_SiteA🌕 manifest_update_title_SiteA🌑 accept_app_id_update_dialog🌑 close_pwa🌑 launch_from_platform_shortcut_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 -install_menu_option_SiteA🌕 manifest_update_title_SiteA🌑 accept_app_id_update_dialog🌑 close_pwa🌑 launch_from_menu_option_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 -install_menu_option_SiteA🌕 manifest_update_title_SiteA🌑 accept_app_id_update_dialog🌑 close_pwa🌑 launch_from_launch_icon_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 -install_menu_option_SiteA🌕 manifest_update_title_SiteA🌑 accept_app_id_update_dialog🌑 close_pwa🌑 launch_from_chrome_apps_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 -install_menu_option_SiteA🌕 manifest_update_title_SiteA🌑 accept_app_id_update_dialog🌑 close_pwa🌑 launch_from_platform_shortcut_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 -install_create_shortcut_windowed_SiteA🌕 manifest_update_title_SiteA🌑 deny_app_update_dialog🌑 check_app_not_in_list_SiteA🌑 check_platform_shortcut_not_exists_SiteA🌑 -install_omnibox_icon_SiteA🌕 manifest_update_title_SiteA🌑 deny_app_update_dialog🌑 check_app_not_in_list_SiteA🌑 check_platform_shortcut_not_exists_SiteA🌑 -install_menu_option_SiteA🌕 manifest_update_title_SiteA🌑 deny_app_update_dialog🌑 check_app_not_in_list_SiteA🌑 check_platform_shortcut_not_exists_SiteA🌑 -install_create_shortcut_windowed_SiteA🌕 close_pwa🌕 manifest_update_icon_SiteA🌑 check_app_in_list_icon_correct_SiteA🌑 -install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_icon_SiteA🌑 check_app_in_list_icon_correct_SiteA🌑 -install_menu_option_SiteA🌕 close_pwa🌕 manifest_update_icon_SiteA🌑 check_app_in_list_icon_correct_SiteA🌑 -install_create_shortcut_windowed_SiteA🌕 close_pwa🌕 manifest_update_icon_SiteA🌑 check_platform_shortcut_and_icon_SiteA🌑 -install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_icon_SiteA🌑 check_platform_shortcut_and_icon_SiteA🌑 -install_menu_option_SiteA🌕 close_pwa🌕 manifest_update_icon_SiteA🌑 check_platform_shortcut_and_icon_SiteA🌑 -install_policy_app_windowed_no_shortcut_SiteA🌓 manifest_update_title_SiteA🌑 check_update_dialog_not_shown🌑 close_pwa🌑 launch_from_menu_option_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 -install_policy_app_windowed_no_shortcut_SiteA🌓 manifest_update_title_SiteA🌑 check_update_dialog_not_shown🌑 close_pwa🌑 launch_from_launch_icon_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 -install_policy_app_windowed_no_shortcut_SiteA🌓 manifest_update_title_SiteA🌑 check_update_dialog_not_shown🌑 close_pwa🌑 launch_from_chrome_apps_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 -install_policy_app_windowed_no_shortcut_SiteA🌓 manifest_update_title_SiteA🌑 check_update_dialog_not_shown🌑 close_pwa🌑 launch_from_platform_shortcut_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌓 manifest_update_title_SiteA🌑 check_update_dialog_not_shown🌑 close_pwa🌑 launch_from_menu_option_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌓 manifest_update_title_SiteA🌑 check_update_dialog_not_shown🌑 close_pwa🌑 launch_from_launch_icon_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌓 manifest_update_title_SiteA🌑 check_update_dialog_not_shown🌑 close_pwa🌑 launch_from_chrome_apps_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌓 manifest_update_title_SiteA🌑 check_update_dialog_not_shown🌑 close_pwa🌑 launch_from_platform_shortcut_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 -install_policy_app_windowed_shortcut_SiteA🌓 manifest_update_title_SiteA🌑 check_update_dialog_not_shown🌑 close_pwa🌑 launch_from_menu_option_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 -install_policy_app_windowed_shortcut_SiteA🌓 manifest_update_title_SiteA🌑 check_update_dialog_not_shown🌑 close_pwa🌑 launch_from_launch_icon_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 -install_policy_app_windowed_shortcut_SiteA🌓 manifest_update_title_SiteA🌑 check_update_dialog_not_shown🌑 close_pwa🌑 launch_from_chrome_apps_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 -install_policy_app_windowed_shortcut_SiteA🌓 manifest_update_title_SiteA🌑 check_update_dialog_not_shown🌑 close_pwa🌑 launch_from_platform_shortcut_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 manifest_update_title_SiteA🌑 check_update_dialog_not_shown🌑 close_pwa🌑 launch_from_menu_option_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 manifest_update_title_SiteA🌑 check_update_dialog_not_shown🌑 close_pwa🌑 launch_from_launch_icon_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 manifest_update_title_SiteA🌑 check_update_dialog_not_shown🌑 close_pwa🌑 launch_from_chrome_apps_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 manifest_update_title_SiteA🌑 check_update_dialog_not_shown🌑 close_pwa🌑 launch_from_platform_shortcut_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 -install_create_shortcut_windowed_SiteA🌕 apply_run_on_os_login_policy_blocked_SiteA🌕 check_user_cannot_set_run_on_os_login_SiteA🌕 -install_omnibox_icon_SiteA🌕 apply_run_on_os_login_policy_blocked_SiteA🌕 check_user_cannot_set_run_on_os_login_SiteA🌕 -install_policy_app_windowed_no_shortcut_SiteA🌓 apply_run_on_os_login_policy_blocked_SiteA🌕 check_user_cannot_set_run_on_os_login_SiteA🌕 -install_policy_app_windowed_shortcut_SiteA🌓 apply_run_on_os_login_policy_blocked_SiteA🌕 check_user_cannot_set_run_on_os_login_SiteA🌕 -install_menu_option_SiteA🌕 apply_run_on_os_login_policy_blocked_SiteA🌕 check_user_cannot_set_run_on_os_login_SiteA🌕 -install_create_shortcut_tabbed_SiteA🌕 apply_run_on_os_login_policy_blocked_SiteA🌕 check_user_cannot_set_run_on_os_login_SiteA🌕 -install_policy_app_tabbed_shortcut_SiteA🌓 apply_run_on_os_login_policy_blocked_SiteA🌕 check_user_cannot_set_run_on_os_login_SiteA🌕 -install_policy_app_tabbed_no_shortcut_SiteA🌓 apply_run_on_os_login_policy_blocked_SiteA🌕 check_user_cannot_set_run_on_os_login_SiteA🌕 -install_create_shortcut_windowed_SiteA🌕 apply_run_on_os_login_policy_blocked_SiteA🌕 check_user_cannot_set_run_on_os_login_SiteA🌕 -install_omnibox_icon_SiteA🌕 apply_run_on_os_login_policy_blocked_SiteA🌕 check_user_cannot_set_run_on_os_login_SiteA🌕 -install_policy_app_windowed_no_shortcut_SiteA🌓 apply_run_on_os_login_policy_blocked_SiteA🌕 check_user_cannot_set_run_on_os_login_SiteA🌕 -install_policy_app_windowed_shortcut_SiteA🌓 apply_run_on_os_login_policy_blocked_SiteA🌕 check_user_cannot_set_run_on_os_login_SiteA🌕 -install_menu_option_SiteA🌕 apply_run_on_os_login_policy_blocked_SiteA🌕 check_user_cannot_set_run_on_os_login_SiteA🌕 -install_create_shortcut_tabbed_SiteA🌕 apply_run_on_os_login_policy_blocked_SiteA🌕 check_user_cannot_set_run_on_os_login_SiteA🌕 -install_policy_app_tabbed_shortcut_SiteA🌓 apply_run_on_os_login_policy_blocked_SiteA🌕 check_user_cannot_set_run_on_os_login_SiteA🌕 -install_policy_app_tabbed_no_shortcut_SiteA🌓 apply_run_on_os_login_policy_blocked_SiteA🌕 check_user_cannot_set_run_on_os_login_SiteA🌕 -install_create_shortcut_windowed_SiteA🌕 enable_run_on_os_login_SiteA🌕 apply_run_on_os_login_policy_blocked_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 -install_omnibox_icon_SiteA🌕 enable_run_on_os_login_SiteA🌕 apply_run_on_os_login_policy_blocked_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 -install_policy_app_windowed_no_shortcut_SiteA🌓 enable_run_on_os_login_SiteA🌕 apply_run_on_os_login_policy_blocked_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 -install_policy_app_windowed_shortcut_SiteA🌓 enable_run_on_os_login_SiteA🌕 apply_run_on_os_login_policy_blocked_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 -install_menu_option_SiteA🌕 enable_run_on_os_login_SiteA🌕 apply_run_on_os_login_policy_blocked_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 -install_create_shortcut_tabbed_SiteA🌕 enable_run_on_os_login_SiteA🌕 apply_run_on_os_login_policy_blocked_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 -install_policy_app_tabbed_shortcut_SiteA🌓 enable_run_on_os_login_SiteA🌕 apply_run_on_os_login_policy_blocked_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 -install_policy_app_tabbed_no_shortcut_SiteA🌓 enable_run_on_os_login_SiteA🌕 apply_run_on_os_login_policy_blocked_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 -install_create_shortcut_windowed_SiteA🌕 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_run_on_os_login_enabled_SiteA🌕 -install_omnibox_icon_SiteA🌕 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_run_on_os_login_enabled_SiteA🌕 -install_policy_app_windowed_no_shortcut_SiteA🌓 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_run_on_os_login_enabled_SiteA🌕 -install_policy_app_windowed_shortcut_SiteA🌓 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_run_on_os_login_enabled_SiteA🌕 -install_menu_option_SiteA🌕 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_run_on_os_login_enabled_SiteA🌕 -install_create_shortcut_tabbed_SiteA🌕 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_run_on_os_login_enabled_SiteA🌕 -install_policy_app_tabbed_shortcut_SiteA🌓 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_run_on_os_login_enabled_SiteA🌕 -install_policy_app_tabbed_no_shortcut_SiteA🌓 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_run_on_os_login_enabled_SiteA🌕 -install_create_shortcut_windowed_SiteA🌕 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_user_cannot_set_run_on_os_login_SiteA🌕 -install_omnibox_icon_SiteA🌕 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_user_cannot_set_run_on_os_login_SiteA🌕 -install_policy_app_windowed_no_shortcut_SiteA🌓 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_user_cannot_set_run_on_os_login_SiteA🌕 -install_policy_app_windowed_shortcut_SiteA🌓 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_user_cannot_set_run_on_os_login_SiteA🌕 -install_menu_option_SiteA🌕 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_user_cannot_set_run_on_os_login_SiteA🌕 -install_create_shortcut_tabbed_SiteA🌕 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_user_cannot_set_run_on_os_login_SiteA🌕 -install_policy_app_tabbed_shortcut_SiteA🌓 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_user_cannot_set_run_on_os_login_SiteA🌕 -install_policy_app_tabbed_no_shortcut_SiteA🌓 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_user_cannot_set_run_on_os_login_SiteA🌕 -install_create_shortcut_windowed_SiteA🌕 enable_run_on_os_login_SiteA🌕 check_run_on_os_login_enabled_SiteA🌕 -install_omnibox_icon_SiteA🌕 enable_run_on_os_login_SiteA🌕 check_run_on_os_login_enabled_SiteA🌕 -install_policy_app_windowed_no_shortcut_SiteA🌓 enable_run_on_os_login_SiteA🌕 check_run_on_os_login_enabled_SiteA🌕 -install_policy_app_windowed_shortcut_SiteA🌓 enable_run_on_os_login_SiteA🌕 check_run_on_os_login_enabled_SiteA🌕 -install_menu_option_SiteA🌕 enable_run_on_os_login_SiteA🌕 check_run_on_os_login_enabled_SiteA🌕 -install_create_shortcut_tabbed_SiteA🌕 enable_run_on_os_login_SiteA🌕 check_run_on_os_login_enabled_SiteA🌕 -install_policy_app_tabbed_shortcut_SiteA🌓 enable_run_on_os_login_SiteA🌕 check_run_on_os_login_enabled_SiteA🌕 -install_policy_app_tabbed_no_shortcut_SiteA🌓 enable_run_on_os_login_SiteA🌕 check_run_on_os_login_enabled_SiteA🌕 -install_create_shortcut_windowed_SiteA🌕 enable_run_on_os_login_SiteA🌕 disable_run_on_os_login_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 -install_omnibox_icon_SiteA🌕 enable_run_on_os_login_SiteA🌕 disable_run_on_os_login_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 -install_policy_app_windowed_no_shortcut_SiteA🌓 enable_run_on_os_login_SiteA🌕 disable_run_on_os_login_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 -install_policy_app_windowed_shortcut_SiteA🌓 enable_run_on_os_login_SiteA🌕 disable_run_on_os_login_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 -install_menu_option_SiteA🌕 enable_run_on_os_login_SiteA🌕 disable_run_on_os_login_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 -install_create_shortcut_tabbed_SiteA🌕 enable_run_on_os_login_SiteA🌕 disable_run_on_os_login_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 -install_policy_app_tabbed_shortcut_SiteA🌓 enable_run_on_os_login_SiteA🌕 disable_run_on_os_login_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 -install_policy_app_tabbed_no_shortcut_SiteA🌓 enable_run_on_os_login_SiteA🌕 disable_run_on_os_login_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 -install_create_shortcut_windowed_SiteA🌕 apply_run_on_os_login_policy_run_windowed_SiteA🌕 remove_run_on_os_login_policy_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 -install_omnibox_icon_SiteA🌕 apply_run_on_os_login_policy_run_windowed_SiteA🌕 remove_run_on_os_login_policy_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 -install_policy_app_windowed_no_shortcut_SiteA🌓 apply_run_on_os_login_policy_run_windowed_SiteA🌕 remove_run_on_os_login_policy_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 -install_policy_app_windowed_shortcut_SiteA🌓 apply_run_on_os_login_policy_run_windowed_SiteA🌕 remove_run_on_os_login_policy_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 -install_menu_option_SiteA🌕 apply_run_on_os_login_policy_run_windowed_SiteA🌕 remove_run_on_os_login_policy_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 -install_create_shortcut_tabbed_SiteA🌕 apply_run_on_os_login_policy_run_windowed_SiteA🌕 remove_run_on_os_login_policy_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 -install_policy_app_tabbed_shortcut_SiteA🌓 apply_run_on_os_login_policy_run_windowed_SiteA🌕 remove_run_on_os_login_policy_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 -install_policy_app_tabbed_no_shortcut_SiteA🌓 apply_run_on_os_login_policy_run_windowed_SiteA🌕 remove_run_on_os_login_policy_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 -install_create_shortcut_windowed_SiteA🌕 enable_run_on_os_login_SiteA🌕 apply_run_on_os_login_policy_blocked_SiteA🌕 remove_run_on_os_login_policy_SiteA🌕 check_run_on_os_login_enabled_SiteA🌕 -install_omnibox_icon_SiteA🌕 enable_run_on_os_login_SiteA🌕 apply_run_on_os_login_policy_blocked_SiteA🌕 remove_run_on_os_login_policy_SiteA🌕 check_run_on_os_login_enabled_SiteA🌕 -install_policy_app_windowed_no_shortcut_SiteA🌓 enable_run_on_os_login_SiteA🌕 apply_run_on_os_login_policy_blocked_SiteA🌕 remove_run_on_os_login_policy_SiteA🌕 check_run_on_os_login_enabled_SiteA🌕 -install_policy_app_windowed_shortcut_SiteA🌓 enable_run_on_os_login_SiteA🌕 apply_run_on_os_login_policy_blocked_SiteA🌕 remove_run_on_os_login_policy_SiteA🌕 check_run_on_os_login_enabled_SiteA🌕 -install_menu_option_SiteA🌕 enable_run_on_os_login_SiteA🌕 apply_run_on_os_login_policy_blocked_SiteA🌕 remove_run_on_os_login_policy_SiteA🌕 check_run_on_os_login_enabled_SiteA🌕 -install_create_shortcut_tabbed_SiteA🌕 enable_run_on_os_login_SiteA🌕 apply_run_on_os_login_policy_blocked_SiteA🌕 remove_run_on_os_login_policy_SiteA🌕 check_run_on_os_login_enabled_SiteA🌕 -install_policy_app_tabbed_shortcut_SiteA🌓 enable_run_on_os_login_SiteA🌕 apply_run_on_os_login_policy_blocked_SiteA🌕 remove_run_on_os_login_policy_SiteA🌕 check_run_on_os_login_enabled_SiteA🌕 -install_policy_app_tabbed_no_shortcut_SiteA🌓 enable_run_on_os_login_SiteA🌕 apply_run_on_os_login_policy_blocked_SiteA🌕 remove_run_on_os_login_policy_SiteA🌕 check_run_on_os_login_enabled_SiteA🌕 -install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 switch_profile_clients_Client1🌕 sync_turn_off🌕 uninstall_from_list_SiteA🌕 switch_profile_clients_Client2🌕 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 -install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 switch_profile_clients_Client1🌕 sync_turn_off🌕 uninstall_from_menu_SiteA🌕 switch_profile_clients_Client2🌕 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 -install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 switch_profile_clients_Client1🌕 sync_turn_off🌕 uninstall_from_os_SiteA🌑 switch_profile_clients_Client2🌑 apply_run_on_os_login_policy_run_windowed_SiteA🌑 check_run_on_os_login_disabled_SiteA🌑 -install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 switch_profile_clients_Client1🌕 sync_turn_off🌕 uninstall_from_app_settings_SiteA🌕 switch_profile_clients_Client2🌕 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 -install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 switch_profile_clients_Client1🌕 sync_turn_off🌕 uninstall_from_list_SiteA🌕 switch_profile_clients_Client2🌕 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 -install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 switch_profile_clients_Client1🌕 sync_turn_off🌕 uninstall_from_menu_SiteA🌕 switch_profile_clients_Client2🌕 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 -install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 switch_profile_clients_Client1🌕 sync_turn_off🌕 uninstall_from_os_SiteA🌑 switch_profile_clients_Client2🌑 apply_run_on_os_login_policy_run_windowed_SiteA🌑 check_run_on_os_login_disabled_SiteA🌑 -install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 switch_profile_clients_Client1🌕 sync_turn_off🌕 uninstall_from_app_settings_SiteA🌕 switch_profile_clients_Client2🌕 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 -install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 switch_profile_clients_Client1🌕 sync_turn_off🌕 uninstall_from_list_SiteA🌕 switch_profile_clients_Client2🌕 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 -install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 switch_profile_clients_Client1🌕 sync_turn_off🌕 uninstall_from_menu_SiteA🌕 switch_profile_clients_Client2🌕 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 -install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 switch_profile_clients_Client1🌕 sync_turn_off🌕 uninstall_from_os_SiteA🌑 switch_profile_clients_Client2🌑 apply_run_on_os_login_policy_run_windowed_SiteA🌑 check_run_on_os_login_disabled_SiteA🌑 -install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 switch_profile_clients_Client1🌕 sync_turn_off🌕 uninstall_from_app_settings_SiteA🌕 switch_profile_clients_Client2🌕 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 -install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 switch_profile_clients_Client1🌕 sync_turn_off🌕 uninstall_from_list_SiteA🌕 switch_profile_clients_Client2🌕 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 install_locally_SiteA🌓 check_run_on_os_login_enabled_SiteA🌕 -install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 switch_profile_clients_Client1🌕 sync_turn_off🌕 uninstall_from_menu_SiteA🌕 switch_profile_clients_Client2🌕 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 install_locally_SiteA🌓 check_run_on_os_login_enabled_SiteA🌕 -install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 switch_profile_clients_Client1🌕 sync_turn_off🌕 uninstall_from_os_SiteA🌑 switch_profile_clients_Client2🌑 apply_run_on_os_login_policy_run_windowed_SiteA🌑 check_run_on_os_login_disabled_SiteA🌑 install_locally_SiteA🌑 check_run_on_os_login_enabled_SiteA🌑 -install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 switch_profile_clients_Client1🌕 sync_turn_off🌕 uninstall_from_app_settings_SiteA🌕 switch_profile_clients_Client2🌕 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 install_locally_SiteA🌓 check_run_on_os_login_enabled_SiteA🌕 -install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 switch_profile_clients_Client1🌕 sync_turn_off🌕 uninstall_from_list_SiteA🌕 switch_profile_clients_Client2🌕 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 install_locally_SiteA🌓 check_run_on_os_login_enabled_SiteA🌕 -install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 switch_profile_clients_Client1🌕 sync_turn_off🌕 uninstall_from_menu_SiteA🌕 switch_profile_clients_Client2🌕 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 install_locally_SiteA🌓 check_run_on_os_login_enabled_SiteA🌕 -install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 switch_profile_clients_Client1🌕 sync_turn_off🌕 uninstall_from_os_SiteA🌑 switch_profile_clients_Client2🌑 apply_run_on_os_login_policy_run_windowed_SiteA🌑 check_run_on_os_login_disabled_SiteA🌑 install_locally_SiteA🌑 check_run_on_os_login_enabled_SiteA🌑 -install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 switch_profile_clients_Client1🌕 sync_turn_off🌕 uninstall_from_app_settings_SiteA🌕 switch_profile_clients_Client2🌕 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 install_locally_SiteA🌓 check_run_on_os_login_enabled_SiteA🌕 -install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 switch_profile_clients_Client1🌕 sync_turn_off🌕 uninstall_from_list_SiteA🌕 switch_profile_clients_Client2🌕 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 install_locally_SiteA🌓 check_run_on_os_login_enabled_SiteA🌕 -install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 switch_profile_clients_Client1🌕 sync_turn_off🌕 uninstall_from_menu_SiteA🌕 switch_profile_clients_Client2🌕 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 install_locally_SiteA🌓 check_run_on_os_login_enabled_SiteA🌕 -install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 switch_profile_clients_Client1🌕 sync_turn_off🌕 uninstall_from_os_SiteA🌑 switch_profile_clients_Client2🌑 apply_run_on_os_login_policy_run_windowed_SiteA🌑 check_run_on_os_login_disabled_SiteA🌑 install_locally_SiteA🌑 check_run_on_os_login_enabled_SiteA🌑 -install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 switch_profile_clients_Client1🌕 sync_turn_off🌕 uninstall_from_app_settings_SiteA🌕 switch_profile_clients_Client2🌕 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 install_locally_SiteA🌓 check_run_on_os_login_enabled_SiteA🌕 -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🌕 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🌕 navigate_pwa_site_a_to_SiteB🌕 close_custom_toolbar🌕 check_app_navigation_is_start_url🌕 -install_omnibox_icon_SiteA🌕 navigate_pwa_site_a_to_SiteB🌕 close_custom_toolbar🌕 check_app_navigation_is_start_url🌕 -install_policy_app_windowed_no_shortcut_SiteA🌓 navigate_pwa_site_a_to_SiteB🌑 close_custom_toolbar🌑 check_app_navigation_is_start_url🌑 -install_policy_app_windowed_shortcut_SiteA🌓 navigate_pwa_site_a_to_SiteB🌑 close_custom_toolbar🌑 check_app_navigation_is_start_url🌑 -install_menu_option_SiteA🌕 navigate_pwa_site_a_to_SiteB🌕 close_custom_toolbar🌕 check_app_navigation_is_start_url🌕 -install_create_shortcut_windowed_SiteA🌕 navigate_pwa_site_a_to_SiteB🌕 check_custom_toolbar🌕 -install_omnibox_icon_SiteA🌕 navigate_pwa_site_a_to_SiteB🌕 check_custom_toolbar🌕 -install_menu_option_SiteA🌕 navigate_pwa_site_a_to_SiteB🌕 check_custom_toolbar🌕 -navigate_browser_SiteA🌕 check_app_not_in_list_SiteA🌓 -navigate_browser_SiteA🌕 check_platform_shortcut_not_exists_SiteA🌑 -navigate_browser_SiteC🌕 check_app_not_in_list_SiteA🌓 -navigate_browser_SiteC🌕 check_platform_shortcut_not_exists_SiteA🌑 -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🌕 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_and_icon_SiteA🌕 -install_policy_app_tabbed_shortcut_SiteA🌓 check_platform_shortcut_and_icon_SiteA🌕 -install_create_shortcut_windowed_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌕 -install_omnibox_icon_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌕 -install_menu_option_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌕 -install_create_shortcut_tabbed_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌕 -install_policy_app_windowed_shortcut_SiteC🌓 check_platform_shortcut_and_icon_SiteC🌕 -install_policy_app_tabbed_shortcut_SiteC🌓 check_platform_shortcut_and_icon_SiteC🌕 -install_create_shortcut_windowed_SiteC🌕 check_platform_shortcut_and_icon_SiteC🌕 -install_create_shortcut_tabbed_SiteC🌕 check_platform_shortcut_and_icon_SiteC🌕 -install_create_shortcut_windowed_SiteA🌕 uninstall_from_list_SiteA🌕 check_app_not_in_list_SiteA🌓 -install_create_shortcut_windowed_SiteA🌕 uninstall_from_menu_SiteA🌕 check_app_not_in_list_SiteA🌓 -install_create_shortcut_windowed_SiteA🌕 uninstall_from_os_SiteA🌑 check_app_not_in_list_SiteA🌑 -install_create_shortcut_windowed_SiteA🌕 uninstall_from_app_settings_SiteA🌕 check_app_not_in_list_SiteA🌓 -install_omnibox_icon_SiteA🌕 uninstall_from_list_SiteA🌕 check_app_not_in_list_SiteA🌓 -install_omnibox_icon_SiteA🌕 uninstall_from_menu_SiteA🌕 check_app_not_in_list_SiteA🌓 -install_omnibox_icon_SiteA🌕 uninstall_from_os_SiteA🌑 check_app_not_in_list_SiteA🌑 -install_omnibox_icon_SiteA🌕 uninstall_from_app_settings_SiteA🌕 check_app_not_in_list_SiteA🌓 -install_menu_option_SiteA🌕 uninstall_from_list_SiteA🌕 check_app_not_in_list_SiteA🌓 -install_menu_option_SiteA🌕 uninstall_from_menu_SiteA🌕 check_app_not_in_list_SiteA🌓 -install_menu_option_SiteA🌕 uninstall_from_os_SiteA🌑 check_app_not_in_list_SiteA🌑 -install_menu_option_SiteA🌕 uninstall_from_app_settings_SiteA🌕 check_app_not_in_list_SiteA🌓 -install_create_shortcut_windowed_SiteA🌕 uninstall_from_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_create_shortcut_windowed_SiteA🌕 uninstall_from_os_SiteA🌑 navigate_browser_SiteA🌑 check_install_icon_shown🌑 -install_create_shortcut_windowed_SiteA🌕 uninstall_from_app_settings_SiteA🌕 navigate_browser_SiteA🌕 check_install_icon_shown🌕 -install_omnibox_icon_SiteA🌕 uninstall_from_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_omnibox_icon_SiteA🌕 uninstall_from_os_SiteA🌑 navigate_browser_SiteA🌑 check_install_icon_shown🌑 -install_omnibox_icon_SiteA🌕 uninstall_from_app_settings_SiteA🌕 navigate_browser_SiteA🌕 check_install_icon_shown🌕 -install_menu_option_SiteA🌕 uninstall_from_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_menu_option_SiteA🌕 uninstall_from_os_SiteA🌑 navigate_browser_SiteA🌑 check_install_icon_shown🌑 -install_menu_option_SiteA🌕 uninstall_from_app_settings_SiteA🌕 navigate_browser_SiteA🌕 check_install_icon_shown🌕 -install_create_shortcut_windowed_SiteA🌕 uninstall_from_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_create_shortcut_windowed_SiteA🌕 uninstall_from_os_SiteA🌑 navigate_browser_SiteA🌑 check_launch_icon_not_shown🌑 -install_create_shortcut_windowed_SiteA🌕 uninstall_from_app_settings_SiteA🌕 navigate_browser_SiteA🌕 check_launch_icon_not_shown🌕 -install_omnibox_icon_SiteA🌕 uninstall_from_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_omnibox_icon_SiteA🌕 uninstall_from_os_SiteA🌑 navigate_browser_SiteA🌑 check_launch_icon_not_shown🌑 -install_omnibox_icon_SiteA🌕 uninstall_from_app_settings_SiteA🌕 navigate_browser_SiteA🌕 check_launch_icon_not_shown🌕 -install_menu_option_SiteA🌕 uninstall_from_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_menu_option_SiteA🌕 uninstall_from_os_SiteA🌑 navigate_browser_SiteA🌑 check_launch_icon_not_shown🌑 -install_menu_option_SiteA🌕 uninstall_from_app_settings_SiteA🌕 navigate_browser_SiteA🌕 check_launch_icon_not_shown🌕 -install_create_shortcut_windowed_SiteA🌕 uninstall_from_list_SiteA🌕 check_platform_shortcut_not_exists_SiteA🌑 -install_create_shortcut_windowed_SiteA🌕 uninstall_from_menu_SiteA🌕 check_platform_shortcut_not_exists_SiteA🌑 -install_create_shortcut_windowed_SiteA🌕 uninstall_from_os_SiteA🌑 check_platform_shortcut_not_exists_SiteA🌑 -install_create_shortcut_windowed_SiteA🌕 uninstall_from_app_settings_SiteA🌕 check_platform_shortcut_not_exists_SiteA🌑 -install_omnibox_icon_SiteA🌕 uninstall_from_list_SiteA🌕 check_platform_shortcut_not_exists_SiteA🌑 -install_omnibox_icon_SiteA🌕 uninstall_from_menu_SiteA🌕 check_platform_shortcut_not_exists_SiteA🌑 -install_omnibox_icon_SiteA🌕 uninstall_from_os_SiteA🌑 check_platform_shortcut_not_exists_SiteA🌑 -install_omnibox_icon_SiteA🌕 uninstall_from_app_settings_SiteA🌕 check_platform_shortcut_not_exists_SiteA🌑 -install_menu_option_SiteA🌕 uninstall_from_list_SiteA🌕 check_platform_shortcut_not_exists_SiteA🌑 -install_menu_option_SiteA🌕 uninstall_from_menu_SiteA🌕 check_platform_shortcut_not_exists_SiteA🌑 -install_menu_option_SiteA🌕 uninstall_from_os_SiteA🌑 check_platform_shortcut_not_exists_SiteA🌑 -install_menu_option_SiteA🌕 uninstall_from_app_settings_SiteA🌕 check_platform_shortcut_not_exists_SiteA🌑 -install_create_shortcut_windowed_SiteC🌕 uninstall_from_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_windowed_SiteC🌕 uninstall_from_os_SiteC🌑 check_app_not_in_list_SiteA🌑 -install_create_shortcut_windowed_SiteC🌕 uninstall_from_app_settings_SiteC🌕 check_app_not_in_list_SiteA🌓 -install_create_shortcut_windowed_SiteC🌕 uninstall_from_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_windowed_SiteC🌕 uninstall_from_os_SiteC🌑 check_platform_shortcut_not_exists_SiteC🌑 -install_create_shortcut_windowed_SiteC🌕 uninstall_from_app_settings_SiteC🌕 check_platform_shortcut_not_exists_SiteC🌑 -install_create_shortcut_tabbed_SiteA🌕 uninstall_from_list_SiteA🌕 check_app_not_in_list_SiteA🌓 -install_create_shortcut_tabbed_SiteA🌕 uninstall_from_list_SiteA🌕 navigate_browser_SiteA🌕 check_install_icon_shown🌕 -install_create_shortcut_tabbed_SiteA🌕 uninstall_from_list_SiteA🌕 navigate_browser_SiteA🌕 check_launch_icon_not_shown🌕 -install_create_shortcut_tabbed_SiteA🌕 uninstall_from_list_SiteA🌕 check_platform_shortcut_not_exists_SiteA🌑 -install_create_shortcut_tabbed_SiteC🌕 uninstall_from_list_SiteC🌕 check_app_not_in_list_SiteA🌓 -install_create_shortcut_tabbed_SiteC🌕 uninstall_from_list_SiteC🌕 check_platform_shortcut_not_exists_SiteC🌑 -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_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_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🌕 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_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_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_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_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_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_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_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_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_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_policy_app_windowed_no_shortcut_SiteA🌓 create_shortcuts_SiteA🌑 check_platform_shortcut_and_icon_SiteA🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌓 create_shortcuts_SiteA🌑 check_platform_shortcut_and_icon_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_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_platform_shortcut_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_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_platform_shortcut_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_platform_shortcut_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🌕 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_windowed_SiteA🌕 open_app_settings_from_chrome_apps_SiteA🌕 check_browser_navigation_is_app_settings_SiteA🌕 -install_create_shortcut_windowed_SiteA🌕 open_app_settings_from_app_menu_SiteA🌕 check_browser_navigation_is_app_settings_SiteA🌕 -install_omnibox_icon_SiteA🌕 open_app_settings_from_chrome_apps_SiteA🌕 check_browser_navigation_is_app_settings_SiteA🌕 -install_omnibox_icon_SiteA🌕 open_app_settings_from_app_menu_SiteA🌕 check_browser_navigation_is_app_settings_SiteA🌕 -install_policy_app_windowed_no_shortcut_SiteA🌓 open_app_settings_from_chrome_apps_SiteA🌕 check_browser_navigation_is_app_settings_SiteA🌕 -install_policy_app_windowed_no_shortcut_SiteA🌓 open_app_settings_from_app_menu_SiteA🌕 check_browser_navigation_is_app_settings_SiteA🌕 -install_policy_app_windowed_shortcut_SiteA🌓 open_app_settings_from_chrome_apps_SiteA🌕 check_browser_navigation_is_app_settings_SiteA🌕 -install_policy_app_windowed_shortcut_SiteA🌓 open_app_settings_from_app_menu_SiteA🌕 check_browser_navigation_is_app_settings_SiteA🌕 -install_menu_option_SiteA🌕 open_app_settings_from_chrome_apps_SiteA🌕 check_browser_navigation_is_app_settings_SiteA🌕 -install_menu_option_SiteA🌕 open_app_settings_from_app_menu_SiteA🌕 check_browser_navigation_is_app_settings_SiteA🌕 -install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 install_locally_SiteA🌑 check_platform_shortcut_and_icon_SiteA🌑 -install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 install_locally_SiteA🌑 check_platform_shortcut_and_icon_SiteA🌑 -install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 install_locally_SiteA🌑 check_platform_shortcut_and_icon_SiteA🌑 -install_create_shortcut_tabbed_SiteA🌕 switch_profile_clients_Client2🌕 install_locally_SiteA🌓 check_platform_shortcut_and_icon_SiteA🌕 -install_create_shortcut_tabbed_SiteA🌕 switch_profile_clients_Client2🌕 install_locally_SiteA🌓 check_app_in_list_tabbed_SiteA🌓 -install_create_shortcut_tabbed_SiteA🌕 switch_profile_clients_Client2🌕 install_locally_SiteA🌓 navigate_browser_SiteA🌕 check_install_icon_shown🌕 -install_create_shortcut_tabbed_SiteA🌕 switch_profile_clients_Client2🌕 install_locally_SiteA🌓 navigate_browser_SiteA🌕 check_launch_icon_not_shown🌕 -install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 install_locally_SiteA🌑 check_app_in_list_windowed_SiteA🌑 -install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 install_locally_SiteA🌑 check_app_in_list_windowed_SiteA🌑 -install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 install_locally_SiteA🌑 check_app_in_list_windowed_SiteA🌑 -install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 install_locally_SiteA🌑 navigate_browser_SiteA🌑 check_install_icon_not_shown🌑 -install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 install_locally_SiteA🌑 navigate_browser_SiteA🌑 check_install_icon_not_shown🌑 -install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 install_locally_SiteA🌑 navigate_browser_SiteA🌑 check_install_icon_not_shown🌑 -install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 install_locally_SiteA🌑 navigate_browser_SiteA🌑 check_launch_icon_shown🌑 -install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 install_locally_SiteA🌑 navigate_browser_SiteA🌑 check_launch_icon_shown🌑 -install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 install_locally_SiteA🌑 navigate_browser_SiteA🌑 check_launch_icon_shown🌑 -install_create_shortcut_tabbed_SiteC🌕 switch_profile_clients_Client2🌕 install_locally_SiteC🌓 check_app_in_list_tabbed_SiteC🌓 -install_create_shortcut_tabbed_SiteC🌕 switch_profile_clients_Client2🌕 install_locally_SiteC🌓 navigate_browser_SiteC🌕 check_launch_icon_not_shown🌕 -install_create_shortcut_windowed_SiteC🌕 switch_profile_clients_Client2🌑 install_locally_SiteC🌑 check_app_in_list_windowed_SiteC🌑 -install_create_shortcut_windowed_SiteC🌕 switch_profile_clients_Client2🌑 install_locally_SiteC🌑 navigate_browser_SiteC🌑 check_install_icon_not_shown🌑 -install_create_shortcut_windowed_SiteC🌕 switch_profile_clients_Client2🌑 install_locally_SiteC🌑 navigate_browser_SiteC🌑 check_launch_icon_shown🌑 -install_create_shortcut_windowed_SiteC🌕 switch_profile_clients_Client2🌑 install_locally_SiteC🌑 check_platform_shortcut_and_icon_SiteC🌑 -install_create_shortcut_tabbed_SiteC🌕 switch_profile_clients_Client2🌕 install_locally_SiteC🌓 check_platform_shortcut_and_icon_SiteC🌕 -install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 install_locally_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_created🌑 -install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 install_locally_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_created🌑 -install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 install_locally_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 -install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 install_locally_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 -install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 install_locally_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_created🌑 -install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 install_locally_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_created🌑 -install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 install_locally_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 -install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 install_locally_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 -install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 install_locally_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_created🌑 -install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 install_locally_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_created🌑 -install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 install_locally_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_created🌑 -install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 install_locally_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_created🌑 -install_create_shortcut_tabbed_SiteA🌕 switch_profile_clients_Client2🌕 launch_from_chrome_apps_SiteA🌓 check_tab_created🌕 -install_create_shortcut_tabbed_SiteA🌕 switch_profile_clients_Client2🌕 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 -install_create_shortcut_tabbed_SiteA🌕 switch_profile_clients_Client2🌕 install_locally_SiteA🌓 launch_from_chrome_apps_SiteA🌓 check_tab_created🌕 -install_create_shortcut_tabbed_SiteA🌕 switch_profile_clients_Client2🌕 install_locally_SiteA🌓 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 -install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 -install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 -install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 -install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 -install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 launch_from_chrome_apps_SiteA🌑 check_tab_created🌑 -install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 -install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 uninstall_from_list_SiteA🌑 check_app_not_in_list_SiteA🌑 -install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 uninstall_from_list_SiteA🌑 check_app_not_in_list_SiteA🌑 -install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 uninstall_from_list_SiteA🌑 check_app_not_in_list_SiteA🌑 -install_create_shortcut_tabbed_SiteA🌕 switch_profile_clients_Client2🌕 uninstall_from_list_SiteA🌕 check_app_not_in_list_SiteA🌓 -install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 uninstall_from_list_SiteA🌑 switch_profile_clients_Client1🌑 check_app_not_in_list_SiteA🌑 -install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 uninstall_from_list_SiteA🌑 switch_profile_clients_Client1🌑 check_app_not_in_list_SiteA🌑 -install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 uninstall_from_list_SiteA🌑 switch_profile_clients_Client1🌑 check_app_not_in_list_SiteA🌑 -install_create_shortcut_tabbed_SiteA🌕 switch_profile_clients_Client2🌕 uninstall_from_list_SiteA🌕 switch_profile_clients_Client1🌕 check_app_not_in_list_SiteA🌓 -install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 check_app_in_list_not_locally_installed_SiteA🌓 -install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 check_app_in_list_not_locally_installed_SiteA🌓 -install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 check_app_in_list_not_locally_installed_SiteA🌓 -install_create_shortcut_tabbed_SiteA🌕 switch_profile_clients_Client2🌕 check_app_in_list_not_locally_installed_SiteA🌓 -install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 check_platform_shortcut_not_exists_SiteA🌑 -install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 check_platform_shortcut_not_exists_SiteA🌑 -install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 check_platform_shortcut_not_exists_SiteA🌑 -install_create_shortcut_tabbed_SiteA🌕 switch_profile_clients_Client2🌕 check_platform_shortcut_not_exists_SiteA🌑 -install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 navigate_browser_SiteA🌑 check_install_icon_shown🌑 -install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 navigate_browser_SiteA🌑 check_install_icon_shown🌑 -install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 navigate_browser_SiteA🌑 check_install_icon_shown🌑 -install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 navigate_browser_SiteA🌑 check_launch_icon_not_shown🌑 -install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 navigate_browser_SiteA🌑 check_launch_icon_not_shown🌑 -install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 navigate_browser_SiteA🌑 check_launch_icon_not_shown🌑 -install_create_shortcut_windowed_SiteC🌕 switch_profile_clients_Client2🌑 check_app_in_list_not_locally_installed_SiteC🌑 -install_create_shortcut_tabbed_SiteC🌕 switch_profile_clients_Client2🌕 check_app_in_list_not_locally_installed_SiteC🌓 -install_create_shortcut_windowed_SiteC🌕 switch_profile_clients_Client2🌑 check_platform_shortcut_not_exists_SiteC🌑 -install_create_shortcut_tabbed_SiteC🌕 switch_profile_clients_Client2🌕 check_platform_shortcut_not_exists_SiteC🌑 -sync_turn_off🌕 install_create_shortcut_windowed_SiteA🌑 sync_turn_on🌑 switch_profile_clients_Client2🌑 check_app_in_list_not_locally_installed_SiteA🌑 -sync_turn_off🌕 install_omnibox_icon_SiteA🌑 sync_turn_on🌑 switch_profile_clients_Client2🌑 check_app_in_list_not_locally_installed_SiteA🌑 -sync_turn_off🌕 install_menu_option_SiteA🌑 sync_turn_on🌑 switch_profile_clients_Client2🌑 check_app_in_list_not_locally_installed_SiteA🌑 -sync_turn_off🌕 install_create_shortcut_tabbed_SiteA🌕 sync_turn_on🌕 switch_profile_clients_Client2🌕 check_app_in_list_not_locally_installed_SiteA🌓 -sync_turn_off🌕 install_create_shortcut_windowed_SiteC🌑 sync_turn_on🌑 switch_profile_clients_Client2🌑 check_app_in_list_not_locally_installed_SiteC🌑 -sync_turn_off🌕 install_create_shortcut_tabbed_SiteC🌕 sync_turn_on🌕 switch_profile_clients_Client2🌕 check_app_in_list_not_locally_installed_SiteC🌓 -install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌑 uninstall_from_list_SiteA🌑 sync_turn_on🌑 check_app_in_list_not_locally_installed_SiteA🌑 -install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌑 uninstall_from_menu_SiteA🌑 sync_turn_on🌑 check_app_in_list_not_locally_installed_SiteA🌑 -install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌑 uninstall_from_os_SiteA🌑 sync_turn_on🌑 check_app_in_list_not_locally_installed_SiteA🌑 -install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌑 uninstall_from_list_SiteA🌑 sync_turn_on🌑 check_app_in_list_not_locally_installed_SiteA🌑 -install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌑 uninstall_from_menu_SiteA🌑 sync_turn_on🌑 check_app_in_list_not_locally_installed_SiteA🌑 -install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌑 uninstall_from_os_SiteA🌑 sync_turn_on🌑 check_app_in_list_not_locally_installed_SiteA🌑 -install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌑 uninstall_from_list_SiteA🌑 sync_turn_on🌑 check_app_in_list_not_locally_installed_SiteA🌑 -install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌑 uninstall_from_menu_SiteA🌑 sync_turn_on🌑 check_app_in_list_not_locally_installed_SiteA🌑 -install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌑 uninstall_from_os_SiteA🌑 sync_turn_on🌑 check_app_in_list_not_locally_installed_SiteA🌑 -install_create_shortcut_tabbed_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌕 uninstall_from_list_SiteA🌕 sync_turn_on🌕 check_app_in_list_not_locally_installed_SiteA🌓 -install_create_shortcut_tabbed_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌕 uninstall_from_menu_SiteA🌑 sync_turn_on🌑 check_app_in_list_not_locally_installed_SiteA🌑 -install_create_shortcut_tabbed_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌕 uninstall_from_os_SiteA🌑 sync_turn_on🌑 check_app_in_list_not_locally_installed_SiteA🌑 -install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌑 uninstall_from_list_SiteA🌑 sync_turn_on🌑 check_platform_shortcut_not_exists_SiteA🌑 -install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌑 uninstall_from_menu_SiteA🌑 sync_turn_on🌑 check_platform_shortcut_not_exists_SiteA🌑 -install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌑 uninstall_from_os_SiteA🌑 sync_turn_on🌑 check_platform_shortcut_not_exists_SiteA🌑 -install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌑 uninstall_from_list_SiteA🌑 sync_turn_on🌑 check_platform_shortcut_not_exists_SiteA🌑 -install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌑 uninstall_from_menu_SiteA🌑 sync_turn_on🌑 check_platform_shortcut_not_exists_SiteA🌑 -install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌑 uninstall_from_os_SiteA🌑 sync_turn_on🌑 check_platform_shortcut_not_exists_SiteA🌑 -install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌑 uninstall_from_list_SiteA🌑 sync_turn_on🌑 check_platform_shortcut_not_exists_SiteA🌑 -install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌑 uninstall_from_menu_SiteA🌑 sync_turn_on🌑 check_platform_shortcut_not_exists_SiteA🌑 -install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌑 uninstall_from_os_SiteA🌑 sync_turn_on🌑 check_platform_shortcut_not_exists_SiteA🌑 -install_create_shortcut_tabbed_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌕 uninstall_from_list_SiteA🌕 sync_turn_on🌕 check_platform_shortcut_not_exists_SiteA🌑 -install_create_shortcut_tabbed_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌕 uninstall_from_menu_SiteA🌑 sync_turn_on🌑 check_platform_shortcut_not_exists_SiteA🌑 -install_create_shortcut_tabbed_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌕 uninstall_from_os_SiteA🌑 sync_turn_on🌑 check_platform_shortcut_not_exists_SiteA🌑 -install_create_shortcut_tabbed_SiteA🌕 install_policy_app_windowed_no_shortcut_SiteA🌓 check_platform_shortcut_and_icon_SiteA🌕 -install_create_shortcut_tabbed_SiteA🌕 install_policy_app_windowed_shortcut_SiteA🌓 check_platform_shortcut_and_icon_SiteA🌕 -install_create_shortcut_windowed_SiteA🌕 install_policy_app_tabbed_no_shortcut_SiteA🌓 check_platform_shortcut_and_icon_SiteA🌕 -install_create_shortcut_windowed_SiteA🌕 install_policy_app_windowed_no_shortcut_SiteA🌓 check_platform_shortcut_and_icon_SiteA🌕 -install_omnibox_icon_SiteA🌕 install_policy_app_tabbed_no_shortcut_SiteA🌓 check_platform_shortcut_and_icon_SiteA🌕 -install_omnibox_icon_SiteA🌕 install_policy_app_windowed_no_shortcut_SiteA🌓 check_platform_shortcut_and_icon_SiteA🌕 -install_menu_option_SiteA🌕 install_policy_app_tabbed_no_shortcut_SiteA🌓 check_platform_shortcut_and_icon_SiteA🌕 -install_menu_option_SiteA🌕 install_policy_app_windowed_no_shortcut_SiteA🌓 check_platform_shortcut_and_icon_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_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_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_and_icon_SiteA🌕 -install_policy_app_tabbed_shortcut_SiteA🌓 install_omnibox_icon_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌕 -install_policy_app_tabbed_shortcut_SiteA🌓 install_menu_option_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌕 -install_policy_app_tabbed_no_shortcut_SiteA🌓 install_create_shortcut_windowed_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌕 -install_policy_app_tabbed_no_shortcut_SiteA🌓 install_omnibox_icon_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌕 -install_policy_app_tabbed_no_shortcut_SiteA🌓 install_menu_option_SiteA🌕 check_platform_shortcut_and_icon_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_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_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🌕 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_and_icon_SiteA🌕 -install_create_shortcut_tabbed_SiteA🌕 install_policy_app_tabbed_no_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌕 -install_create_shortcut_tabbed_SiteA🌕 install_policy_app_windowed_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌕 -install_create_shortcut_tabbed_SiteA🌕 install_policy_app_tabbed_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_platform_shortcut_and_icon_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_and_icon_SiteA🌕 -install_create_shortcut_windowed_SiteA🌕 install_policy_app_tabbed_no_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌕 -install_create_shortcut_windowed_SiteA🌕 install_policy_app_windowed_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌕 -install_create_shortcut_windowed_SiteA🌕 install_policy_app_tabbed_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌕 -install_omnibox_icon_SiteA🌕 install_policy_app_windowed_no_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌕 -install_omnibox_icon_SiteA🌕 install_policy_app_tabbed_no_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌕 -install_omnibox_icon_SiteA🌕 install_policy_app_windowed_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌕 -install_omnibox_icon_SiteA🌕 install_policy_app_tabbed_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌕 -install_menu_option_SiteA🌕 install_policy_app_windowed_no_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌕 -install_menu_option_SiteA🌕 install_policy_app_tabbed_no_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌕 -install_menu_option_SiteA🌕 install_policy_app_windowed_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌕 -install_menu_option_SiteA🌕 install_policy_app_tabbed_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_platform_shortcut_and_icon_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_and_icon_SiteA🌕 -install_policy_app_tabbed_shortcut_SiteA🌓 install_omnibox_icon_SiteA🌕 uninstall_policy_app_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌕 -install_policy_app_tabbed_shortcut_SiteA🌓 install_menu_option_SiteA🌕 uninstall_policy_app_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌕 -install_policy_app_tabbed_no_shortcut_SiteA🌓 install_create_shortcut_windowed_SiteA🌕 uninstall_policy_app_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌕 -install_policy_app_tabbed_no_shortcut_SiteA🌓 install_omnibox_icon_SiteA🌕 uninstall_policy_app_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌕 -install_policy_app_tabbed_no_shortcut_SiteA🌓 install_menu_option_SiteA🌕 uninstall_policy_app_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌕 -install_create_shortcut_windowed_SiteA🌕 close_pwa🌕 manifest_update_colors_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_color_correct_SiteA🌑 -install_create_shortcut_windowed_SiteA🌕 close_pwa🌕 manifest_update_colors_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_color_correct_SiteA🌑 -install_create_shortcut_windowed_SiteA🌕 close_pwa🌕 manifest_update_colors_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_color_correct_SiteA🌑 -install_create_shortcut_windowed_SiteA🌕 close_pwa🌕 manifest_update_colors_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_color_correct_SiteA🌑 -install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_colors_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_color_correct_SiteA🌑 -install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_colors_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_color_correct_SiteA🌑 -install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_colors_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_color_correct_SiteA🌑 -install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_colors_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_color_correct_SiteA🌑 -install_menu_option_SiteA🌕 close_pwa🌕 manifest_update_colors_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_color_correct_SiteA🌑 -install_menu_option_SiteA🌕 close_pwa🌕 manifest_update_colors_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_color_correct_SiteA🌑 -install_menu_option_SiteA🌕 close_pwa🌕 manifest_update_colors_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_color_correct_SiteA🌑 -install_menu_option_SiteA🌕 close_pwa🌕 manifest_update_colors_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_color_correct_SiteA🌑 -install_create_shortcut_windowed_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_menu_option_SiteA🌕 check_tab_not_created🌕 -install_create_shortcut_windowed_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_launch_icon_SiteA🌕 check_tab_not_created🌕 -install_create_shortcut_windowed_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_chrome_apps_SiteA🌓 check_tab_not_created🌕 -install_create_shortcut_windowed_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_platform_shortcut_SiteA🌓 check_tab_not_created🌕 -install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_menu_option_SiteA🌕 check_tab_not_created🌕 -install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_launch_icon_SiteA🌕 check_tab_not_created🌕 -install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_chrome_apps_SiteA🌓 check_tab_not_created🌕 -install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_platform_shortcut_SiteA🌓 check_tab_not_created🌕 -install_menu_option_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_menu_option_SiteA🌕 check_tab_not_created🌕 -install_menu_option_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_launch_icon_SiteA🌕 check_tab_not_created🌕 -install_menu_option_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_chrome_apps_SiteA🌓 check_tab_not_created🌕 -install_menu_option_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_platform_shortcut_SiteA🌓 check_tab_not_created🌕 -install_create_shortcut_windowed_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_menu_option_SiteA🌕 check_window_created🌕 -install_create_shortcut_windowed_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_launch_icon_SiteA🌕 check_window_created🌕 -install_create_shortcut_windowed_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_chrome_apps_SiteA🌓 check_window_created🌕 -install_create_shortcut_windowed_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_platform_shortcut_SiteA🌓 check_window_created🌕 -install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_menu_option_SiteA🌕 check_window_created🌕 -install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_launch_icon_SiteA🌕 check_window_created🌕 -install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_chrome_apps_SiteA🌓 check_window_created🌕 -install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_platform_shortcut_SiteA🌓 check_window_created🌕 -install_menu_option_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_menu_option_SiteA🌕 check_window_created🌕 -install_menu_option_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_launch_icon_SiteA🌕 check_window_created🌕 -install_menu_option_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_chrome_apps_SiteA🌓 check_window_created🌕 -install_menu_option_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_platform_shortcut_SiteA🌓 check_window_created🌕 -install_create_shortcut_windowed_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_menu_option_SiteA🌕 check_window_display_minimal🌕 -install_create_shortcut_windowed_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_launch_icon_SiteA🌕 check_window_display_minimal🌕 -install_create_shortcut_windowed_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_chrome_apps_SiteA🌓 check_window_display_minimal🌕 -install_create_shortcut_windowed_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_platform_shortcut_SiteA🌓 check_window_display_minimal🌕 -install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_menu_option_SiteA🌕 check_window_display_minimal🌕 -install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_launch_icon_SiteA🌕 check_window_display_minimal🌕 -install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_chrome_apps_SiteA🌓 check_window_display_minimal🌕 -install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_platform_shortcut_SiteA🌓 check_window_display_minimal🌕 -install_menu_option_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_menu_option_SiteA🌕 check_window_display_minimal🌕 -install_menu_option_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_launch_icon_SiteA🌕 check_window_display_minimal🌕 -install_menu_option_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_chrome_apps_SiteA🌓 check_window_display_minimal🌕 -install_menu_option_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_platform_shortcut_SiteA🌓 check_window_display_minimal🌕 -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_SiteAFoo🌕 manifest_update_scope_site_a_foo_to_SiteARoot🌕 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_SiteARoot🌕 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_SiteARoot🌕 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_SiteARoot🌕 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_SiteARoot🌕 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_SiteARoot🌕 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_SiteARoot🌕 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_SiteARoot🌕 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_SiteARoot🌕 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_SiteARoot🌕 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_SiteARoot🌕 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_SiteARoot🌕 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_SiteARoot🌕 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_SiteARoot🌕 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_SiteARoot🌕 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_SiteARoot🌕 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_SiteARoot🌕 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_SiteARoot🌕 launch_from_platform_shortcut_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_SiteARoot🌕 navigate_browser_SiteABar🌕 check_install_icon_not_shown🌕 -install_omnibox_icon_SiteAFoo🌕 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteARoot🌕 navigate_browser_SiteABar🌕 check_install_icon_not_shown🌕 -install_menu_option_SiteAFoo🌕 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteARoot🌕 navigate_browser_SiteABar🌕 check_install_icon_not_shown🌕 -install_create_shortcut_windowed_SiteAFoo🌕 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteARoot🌕 navigate_browser_SiteABar🌕 check_launch_icon_shown🌕 -install_omnibox_icon_SiteAFoo🌕 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteARoot🌕 navigate_browser_SiteABar🌕 check_launch_icon_shown🌕 -install_menu_option_SiteAFoo🌕 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteARoot🌕 navigate_browser_SiteABar🌕 check_launch_icon_shown🌕 -install_create_shortcut_windowed_SiteAFoo🌕 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteARoot🌕 navigate_browser_SiteAFoo🌕 check_install_icon_not_shown🌕 -install_omnibox_icon_SiteAFoo🌕 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteARoot🌕 navigate_browser_SiteAFoo🌕 check_install_icon_not_shown🌕 -install_menu_option_SiteAFoo🌕 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteARoot🌕 navigate_browser_SiteAFoo🌕 check_install_icon_not_shown🌕 -install_create_shortcut_windowed_SiteAFoo🌕 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteARoot🌕 navigate_browser_SiteAFoo🌕 check_launch_icon_shown🌕 -install_omnibox_icon_SiteAFoo🌕 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteARoot🌕 navigate_browser_SiteAFoo🌕 check_launch_icon_shown🌕 -install_menu_option_SiteAFoo🌕 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteARoot🌕 navigate_browser_SiteAFoo🌕 check_launch_icon_shown🌕 -switch_incognito_profile🌑 navigate_browser_SiteA🌑 check_create_shortcut_not_shown🌑 -switch_incognito_profile🌑 navigate_browser_SiteC🌑 check_create_shortcut_not_shown🌑 -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🌕 -navigate_browser_SiteA🌕 check_create_shortcut_shown🌑 -navigate_browser_SiteAFoo🌕 check_install_icon_shown🌕 -navigate_browser_SiteC🌕 check_create_shortcut_shown🌑 -navigate_browser_SiteC🌕 check_install_icon_not_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_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🌕 -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🌕 -install_create_shortcut_windowed_SiteA🌕 navigate_pwa_site_a_to_SiteB🌕 check_app_title_site_a_is_SiteA🌑 -install_omnibox_icon_SiteA🌕 navigate_pwa_site_a_to_SiteB🌕 check_app_title_site_a_is_SiteA🌑 -install_menu_option_SiteA🌕 navigate_pwa_site_a_to_SiteB🌕 check_app_title_site_a_is_SiteA🌑 -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🌑 -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_SiteB🌕 check_site_handles_file_SiteB_Txt🌑 check_site_handles_file_SiteB_Png🌑 -install_omnibox_icon_SiteB🌕 check_site_handles_file_SiteB_Txt🌑 check_site_handles_file_SiteB_Png🌑 -install_policy_app_windowed_no_shortcut_SiteB🌓 check_site_handles_file_SiteB_Txt🌑 check_site_handles_file_SiteB_Png🌑 -install_policy_app_windowed_shortcut_SiteB🌓 check_site_handles_file_SiteB_Txt🌑 check_site_handles_file_SiteB_Png🌑 -install_menu_option_SiteB🌕 check_site_handles_file_SiteB_Txt🌑 check_site_handles_file_SiteB_Png🌑 -install_create_shortcut_tabbed_SiteB🌕 check_site_handles_file_SiteB_Txt🌑 check_site_handles_file_SiteB_Png🌑 -install_policy_app_tabbed_shortcut_SiteB🌓 check_site_handles_file_SiteB_Txt🌑 check_site_handles_file_SiteB_Png🌑 -install_policy_app_tabbed_no_shortcut_SiteB🌓 check_site_handles_file_SiteB_Txt🌑 check_site_handles_file_SiteB_Png🌑 -install_create_shortcut_windowed_SiteB🌕 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 -install_omnibox_icon_SiteB🌕 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 -install_policy_app_windowed_no_shortcut_SiteB🌓 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 -install_policy_app_windowed_shortcut_SiteB🌓 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 -install_menu_option_SiteB🌕 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 -install_create_shortcut_tabbed_SiteB🌕 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 -install_policy_app_tabbed_shortcut_SiteB🌓 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 -install_policy_app_tabbed_no_shortcut_SiteB🌓 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 -install_create_shortcut_windowed_SiteB🌕 launch_file_OneTextFile🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_One🌑 check_files_loaded_in_site_SiteB_OneTextFile🌑 -install_omnibox_icon_SiteB🌕 launch_file_OneTextFile🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_One🌑 check_files_loaded_in_site_SiteB_OneTextFile🌑 -install_policy_app_windowed_no_shortcut_SiteB🌓 launch_file_OneTextFile🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_One🌑 check_files_loaded_in_site_SiteB_OneTextFile🌑 -install_policy_app_windowed_shortcut_SiteB🌓 launch_file_OneTextFile🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_One🌑 check_files_loaded_in_site_SiteB_OneTextFile🌑 -install_menu_option_SiteB🌕 launch_file_OneTextFile🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_One🌑 check_files_loaded_in_site_SiteB_OneTextFile🌑 -install_create_shortcut_tabbed_SiteB🌕 launch_file_OneTextFile🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_One🌑 check_files_loaded_in_site_SiteB_OneTextFile🌑 -install_policy_app_tabbed_shortcut_SiteB🌓 launch_file_OneTextFile🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_One🌑 check_files_loaded_in_site_SiteB_OneTextFile🌑 -install_policy_app_tabbed_no_shortcut_SiteB🌓 launch_file_OneTextFile🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_One🌑 check_files_loaded_in_site_SiteB_OneTextFile🌑 -install_create_shortcut_windowed_SiteB🌕 launch_file_MultipleTextFiles🌑 check_file_handling_dialog_Shown🌑 -install_omnibox_icon_SiteB🌕 launch_file_MultipleTextFiles🌑 check_file_handling_dialog_Shown🌑 -install_policy_app_windowed_no_shortcut_SiteB🌓 launch_file_MultipleTextFiles🌑 check_file_handling_dialog_Shown🌑 -install_policy_app_windowed_shortcut_SiteB🌓 launch_file_MultipleTextFiles🌑 check_file_handling_dialog_Shown🌑 -install_menu_option_SiteB🌕 launch_file_MultipleTextFiles🌑 check_file_handling_dialog_Shown🌑 -install_create_shortcut_tabbed_SiteB🌕 launch_file_MultipleTextFiles🌑 check_file_handling_dialog_Shown🌑 -install_policy_app_tabbed_shortcut_SiteB🌓 launch_file_MultipleTextFiles🌑 check_file_handling_dialog_Shown🌑 -install_policy_app_tabbed_no_shortcut_SiteB🌓 launch_file_MultipleTextFiles🌑 check_file_handling_dialog_Shown🌑 -install_create_shortcut_windowed_SiteB🌕 launch_file_MultipleTextFiles🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_One🌑 check_files_loaded_in_site_SiteB_MultipleTextFiles🌑 -install_omnibox_icon_SiteB🌕 launch_file_MultipleTextFiles🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_One🌑 check_files_loaded_in_site_SiteB_MultipleTextFiles🌑 -install_policy_app_windowed_no_shortcut_SiteB🌓 launch_file_MultipleTextFiles🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_One🌑 check_files_loaded_in_site_SiteB_MultipleTextFiles🌑 -install_policy_app_windowed_shortcut_SiteB🌓 launch_file_MultipleTextFiles🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_One🌑 check_files_loaded_in_site_SiteB_MultipleTextFiles🌑 -install_menu_option_SiteB🌕 launch_file_MultipleTextFiles🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_One🌑 check_files_loaded_in_site_SiteB_MultipleTextFiles🌑 -install_create_shortcut_tabbed_SiteB🌕 launch_file_MultipleTextFiles🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_One🌑 check_files_loaded_in_site_SiteB_MultipleTextFiles🌑 -install_policy_app_tabbed_shortcut_SiteB🌓 launch_file_MultipleTextFiles🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_One🌑 check_files_loaded_in_site_SiteB_MultipleTextFiles🌑 -install_policy_app_tabbed_no_shortcut_SiteB🌓 launch_file_MultipleTextFiles🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_One🌑 check_files_loaded_in_site_SiteB_MultipleTextFiles🌑 -install_create_shortcut_windowed_SiteB🌕 launch_file_OnePngFile🌑 check_file_handling_dialog_Shown🌑 -install_omnibox_icon_SiteB🌕 launch_file_OnePngFile🌑 check_file_handling_dialog_Shown🌑 -install_policy_app_windowed_no_shortcut_SiteB🌓 launch_file_OnePngFile🌑 check_file_handling_dialog_Shown🌑 -install_policy_app_windowed_shortcut_SiteB🌓 launch_file_OnePngFile🌑 check_file_handling_dialog_Shown🌑 -install_menu_option_SiteB🌕 launch_file_OnePngFile🌑 check_file_handling_dialog_Shown🌑 -install_create_shortcut_tabbed_SiteB🌕 launch_file_OnePngFile🌑 check_file_handling_dialog_Shown🌑 -install_policy_app_tabbed_shortcut_SiteB🌓 launch_file_OnePngFile🌑 check_file_handling_dialog_Shown🌑 -install_policy_app_tabbed_no_shortcut_SiteB🌓 launch_file_OnePngFile🌑 check_file_handling_dialog_Shown🌑 -install_create_shortcut_windowed_SiteB🌕 launch_file_OnePngFile🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_One🌑 check_files_loaded_in_site_SiteB_OnePngFile🌑 -install_omnibox_icon_SiteB🌕 launch_file_OnePngFile🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_One🌑 check_files_loaded_in_site_SiteB_OnePngFile🌑 -install_policy_app_windowed_no_shortcut_SiteB🌓 launch_file_OnePngFile🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_One🌑 check_files_loaded_in_site_SiteB_OnePngFile🌑 -install_policy_app_windowed_shortcut_SiteB🌓 launch_file_OnePngFile🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_One🌑 check_files_loaded_in_site_SiteB_OnePngFile🌑 -install_menu_option_SiteB🌕 launch_file_OnePngFile🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_One🌑 check_files_loaded_in_site_SiteB_OnePngFile🌑 -install_create_shortcut_tabbed_SiteB🌕 launch_file_OnePngFile🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_One🌑 check_files_loaded_in_site_SiteB_OnePngFile🌑 -install_policy_app_tabbed_shortcut_SiteB🌓 launch_file_OnePngFile🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_One🌑 check_files_loaded_in_site_SiteB_OnePngFile🌑 -install_policy_app_tabbed_no_shortcut_SiteB🌓 launch_file_OnePngFile🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_One🌑 check_files_loaded_in_site_SiteB_OnePngFile🌑 -install_create_shortcut_windowed_SiteB🌕 launch_file_MultiplePngFiles🌑 check_file_handling_dialog_Shown🌑 -install_omnibox_icon_SiteB🌕 launch_file_MultiplePngFiles🌑 check_file_handling_dialog_Shown🌑 -install_policy_app_windowed_no_shortcut_SiteB🌓 launch_file_MultiplePngFiles🌑 check_file_handling_dialog_Shown🌑 -install_policy_app_windowed_shortcut_SiteB🌓 launch_file_MultiplePngFiles🌑 check_file_handling_dialog_Shown🌑 -install_menu_option_SiteB🌕 launch_file_MultiplePngFiles🌑 check_file_handling_dialog_Shown🌑 -install_create_shortcut_tabbed_SiteB🌕 launch_file_MultiplePngFiles🌑 check_file_handling_dialog_Shown🌑 -install_policy_app_tabbed_shortcut_SiteB🌓 launch_file_MultiplePngFiles🌑 check_file_handling_dialog_Shown🌑 -install_policy_app_tabbed_no_shortcut_SiteB🌓 launch_file_MultiplePngFiles🌑 check_file_handling_dialog_Shown🌑 -install_create_shortcut_windowed_SiteB🌕 launch_file_MultiplePngFiles🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_Two🌑 check_files_loaded_in_site_SiteB_MultiplePngFiles🌑 -install_omnibox_icon_SiteB🌕 launch_file_MultiplePngFiles🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_Two🌑 check_files_loaded_in_site_SiteB_MultiplePngFiles🌑 -install_policy_app_windowed_no_shortcut_SiteB🌓 launch_file_MultiplePngFiles🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_Two🌑 check_files_loaded_in_site_SiteB_MultiplePngFiles🌑 -install_policy_app_windowed_shortcut_SiteB🌓 launch_file_MultiplePngFiles🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_Two🌑 check_files_loaded_in_site_SiteB_MultiplePngFiles🌑 -install_menu_option_SiteB🌕 launch_file_MultiplePngFiles🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_Two🌑 check_files_loaded_in_site_SiteB_MultiplePngFiles🌑 -install_create_shortcut_tabbed_SiteB🌕 launch_file_MultiplePngFiles🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_Two🌑 check_files_loaded_in_site_SiteB_MultiplePngFiles🌑 -install_policy_app_tabbed_shortcut_SiteB🌓 launch_file_MultiplePngFiles🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_Two🌑 check_files_loaded_in_site_SiteB_MultiplePngFiles🌑 -install_policy_app_tabbed_no_shortcut_SiteB🌓 launch_file_MultiplePngFiles🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_Two🌑 check_files_loaded_in_site_SiteB_MultiplePngFiles🌑 -install_create_shortcut_windowed_SiteB🌕 launch_file_OneTextFile🌑 file_handling_dialog_Allow_Remember🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_NotShown🌑 check_pwa_window_created_SiteB_One🌑 -install_omnibox_icon_SiteB🌕 launch_file_OneTextFile🌑 file_handling_dialog_Allow_Remember🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_NotShown🌑 check_pwa_window_created_SiteB_One🌑 -install_policy_app_windowed_no_shortcut_SiteB🌓 launch_file_OneTextFile🌑 file_handling_dialog_Allow_Remember🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_NotShown🌑 check_pwa_window_created_SiteB_One🌑 -install_policy_app_windowed_shortcut_SiteB🌓 launch_file_OneTextFile🌑 file_handling_dialog_Allow_Remember🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_NotShown🌑 check_pwa_window_created_SiteB_One🌑 -install_menu_option_SiteB🌕 launch_file_OneTextFile🌑 file_handling_dialog_Allow_Remember🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_NotShown🌑 check_pwa_window_created_SiteB_One🌑 -install_create_shortcut_tabbed_SiteB🌕 launch_file_OneTextFile🌑 file_handling_dialog_Allow_Remember🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_NotShown🌑 check_pwa_window_created_SiteB_One🌑 -install_policy_app_tabbed_shortcut_SiteB🌓 launch_file_OneTextFile🌑 file_handling_dialog_Allow_Remember🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_NotShown🌑 check_pwa_window_created_SiteB_One🌑 -install_policy_app_tabbed_no_shortcut_SiteB🌓 launch_file_OneTextFile🌑 file_handling_dialog_Allow_Remember🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_NotShown🌑 check_pwa_window_created_SiteB_One🌑 -install_create_shortcut_windowed_SiteB🌕 launch_file_OneTextFile🌑 file_handling_dialog_Allow_AskAgain🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 -install_omnibox_icon_SiteB🌕 launch_file_OneTextFile🌑 file_handling_dialog_Allow_AskAgain🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 -install_policy_app_windowed_no_shortcut_SiteB🌓 launch_file_OneTextFile🌑 file_handling_dialog_Allow_AskAgain🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 -install_policy_app_windowed_shortcut_SiteB🌓 launch_file_OneTextFile🌑 file_handling_dialog_Allow_AskAgain🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 -install_menu_option_SiteB🌕 launch_file_OneTextFile🌑 file_handling_dialog_Allow_AskAgain🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 -install_create_shortcut_tabbed_SiteB🌕 launch_file_OneTextFile🌑 file_handling_dialog_Allow_AskAgain🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 -install_policy_app_tabbed_shortcut_SiteB🌓 launch_file_OneTextFile🌑 file_handling_dialog_Allow_AskAgain🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 -install_policy_app_tabbed_no_shortcut_SiteB🌓 launch_file_OneTextFile🌑 file_handling_dialog_Allow_AskAgain🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 -install_create_shortcut_windowed_SiteB🌕 launch_file_OneTextFile🌑 file_handling_dialog_Deny_AskAgain🌑 check_window_not_created🌑 check_site_handles_file_SiteB_Txt🌑 check_site_handles_file_SiteB_Png🌑 -install_omnibox_icon_SiteB🌕 launch_file_OneTextFile🌑 file_handling_dialog_Deny_AskAgain🌑 check_window_not_created🌑 check_site_handles_file_SiteB_Txt🌑 check_site_handles_file_SiteB_Png🌑 -install_policy_app_windowed_no_shortcut_SiteB🌓 launch_file_OneTextFile🌑 file_handling_dialog_Deny_AskAgain🌑 check_window_not_created🌑 check_site_handles_file_SiteB_Txt🌑 check_site_handles_file_SiteB_Png🌑 -install_policy_app_windowed_shortcut_SiteB🌓 launch_file_OneTextFile🌑 file_handling_dialog_Deny_AskAgain🌑 check_window_not_created🌑 check_site_handles_file_SiteB_Txt🌑 check_site_handles_file_SiteB_Png🌑 -install_menu_option_SiteB🌕 launch_file_OneTextFile🌑 file_handling_dialog_Deny_AskAgain🌑 check_window_not_created🌑 check_site_handles_file_SiteB_Txt🌑 check_site_handles_file_SiteB_Png🌑 -install_create_shortcut_tabbed_SiteB🌕 launch_file_OneTextFile🌑 file_handling_dialog_Deny_AskAgain🌑 check_window_not_created🌑 check_site_handles_file_SiteB_Txt🌑 check_site_handles_file_SiteB_Png🌑 -install_policy_app_tabbed_shortcut_SiteB🌓 launch_file_OneTextFile🌑 file_handling_dialog_Deny_AskAgain🌑 check_window_not_created🌑 check_site_handles_file_SiteB_Txt🌑 check_site_handles_file_SiteB_Png🌑 -install_policy_app_tabbed_no_shortcut_SiteB🌓 launch_file_OneTextFile🌑 file_handling_dialog_Deny_AskAgain🌑 check_window_not_created🌑 check_site_handles_file_SiteB_Txt🌑 check_site_handles_file_SiteB_Png🌑 -install_create_shortcut_windowed_SiteB🌕 launch_file_OneTextFile🌑 file_handling_dialog_Deny_AskAgain🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 -install_omnibox_icon_SiteB🌕 launch_file_OneTextFile🌑 file_handling_dialog_Deny_AskAgain🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 -install_policy_app_windowed_no_shortcut_SiteB🌓 launch_file_OneTextFile🌑 file_handling_dialog_Deny_AskAgain🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 -install_policy_app_windowed_shortcut_SiteB🌓 launch_file_OneTextFile🌑 file_handling_dialog_Deny_AskAgain🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 -install_menu_option_SiteB🌕 launch_file_OneTextFile🌑 file_handling_dialog_Deny_AskAgain🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 -install_create_shortcut_tabbed_SiteB🌕 launch_file_OneTextFile🌑 file_handling_dialog_Deny_AskAgain🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 -install_policy_app_tabbed_shortcut_SiteB🌓 launch_file_OneTextFile🌑 file_handling_dialog_Deny_AskAgain🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 -install_policy_app_tabbed_no_shortcut_SiteB🌓 launch_file_OneTextFile🌑 file_handling_dialog_Deny_AskAgain🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 -install_create_shortcut_windowed_SiteB🌕 launch_file_OneTextFile🌑 file_handling_dialog_Deny_Remember🌑 check_window_not_created🌑 check_site_not_handles_file_SiteB_Txt🌑 check_site_not_handles_file_SiteB_Png🌑 -install_omnibox_icon_SiteB🌕 launch_file_OneTextFile🌑 file_handling_dialog_Deny_Remember🌑 check_window_not_created🌑 check_site_not_handles_file_SiteB_Txt🌑 check_site_not_handles_file_SiteB_Png🌑 -install_policy_app_windowed_no_shortcut_SiteB🌓 launch_file_OneTextFile🌑 file_handling_dialog_Deny_Remember🌑 check_window_not_created🌑 check_site_not_handles_file_SiteB_Txt🌑 check_site_not_handles_file_SiteB_Png🌑 -install_policy_app_windowed_shortcut_SiteB🌓 launch_file_OneTextFile🌑 file_handling_dialog_Deny_Remember🌑 check_window_not_created🌑 check_site_not_handles_file_SiteB_Txt🌑 check_site_not_handles_file_SiteB_Png🌑 -install_menu_option_SiteB🌕 launch_file_OneTextFile🌑 file_handling_dialog_Deny_Remember🌑 check_window_not_created🌑 check_site_not_handles_file_SiteB_Txt🌑 check_site_not_handles_file_SiteB_Png🌑 -install_create_shortcut_tabbed_SiteB🌕 launch_file_OneTextFile🌑 file_handling_dialog_Deny_Remember🌑 check_window_not_created🌑 check_site_not_handles_file_SiteB_Txt🌑 check_site_not_handles_file_SiteB_Png🌑 -install_policy_app_tabbed_shortcut_SiteB🌓 launch_file_OneTextFile🌑 file_handling_dialog_Deny_Remember🌑 check_window_not_created🌑 check_site_not_handles_file_SiteB_Txt🌑 check_site_not_handles_file_SiteB_Png🌑 -install_policy_app_tabbed_no_shortcut_SiteB🌓 launch_file_OneTextFile🌑 file_handling_dialog_Deny_Remember🌑 check_window_not_created🌑 check_site_not_handles_file_SiteB_Txt🌑 check_site_not_handles_file_SiteB_Png🌑 -install_create_shortcut_windowed_SiteB🌕 add_file_handling_policy_approval_SiteB🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_NotShown🌑 check_pwa_window_created_SiteB_One🌑 -install_omnibox_icon_SiteB🌕 add_file_handling_policy_approval_SiteB🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_NotShown🌑 check_pwa_window_created_SiteB_One🌑 -install_policy_app_windowed_no_shortcut_SiteB🌓 add_file_handling_policy_approval_SiteB🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_NotShown🌑 check_pwa_window_created_SiteB_One🌑 -install_policy_app_windowed_shortcut_SiteB🌓 add_file_handling_policy_approval_SiteB🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_NotShown🌑 check_pwa_window_created_SiteB_One🌑 -install_menu_option_SiteB🌕 add_file_handling_policy_approval_SiteB🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_NotShown🌑 check_pwa_window_created_SiteB_One🌑 -install_create_shortcut_tabbed_SiteB🌕 add_file_handling_policy_approval_SiteB🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_NotShown🌑 check_pwa_window_created_SiteB_One🌑 -install_policy_app_tabbed_shortcut_SiteB🌓 add_file_handling_policy_approval_SiteB🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_NotShown🌑 check_pwa_window_created_SiteB_One🌑 -install_policy_app_tabbed_no_shortcut_SiteB🌓 add_file_handling_policy_approval_SiteB🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_NotShown🌑 check_pwa_window_created_SiteB_One🌑 -install_create_shortcut_windowed_SiteB🌕 add_file_handling_policy_approval_SiteB🌑 remove_file_handling_policy_approval_SiteB🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 -install_omnibox_icon_SiteB🌕 add_file_handling_policy_approval_SiteB🌑 remove_file_handling_policy_approval_SiteB🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 -install_policy_app_windowed_no_shortcut_SiteB🌓 add_file_handling_policy_approval_SiteB🌑 remove_file_handling_policy_approval_SiteB🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 -install_policy_app_windowed_shortcut_SiteB🌓 add_file_handling_policy_approval_SiteB🌑 remove_file_handling_policy_approval_SiteB🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 -install_menu_option_SiteB🌕 add_file_handling_policy_approval_SiteB🌑 remove_file_handling_policy_approval_SiteB🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 -install_create_shortcut_tabbed_SiteB🌕 add_file_handling_policy_approval_SiteB🌑 remove_file_handling_policy_approval_SiteB🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 -install_policy_app_tabbed_shortcut_SiteB🌓 add_file_handling_policy_approval_SiteB🌑 remove_file_handling_policy_approval_SiteB🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 -install_policy_app_tabbed_no_shortcut_SiteB🌓 add_file_handling_policy_approval_SiteB🌑 remove_file_handling_policy_approval_SiteB🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 +# This is a generated file. +# Full coverage: 53%, with partial coverage: 69% +install_create_shortcut_windowed_SiteA🌕 manifest_update_title_SiteA🌑 accept_app_id_update_dialog🌑 close_pwa🌑 launch_from_menu_option_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 +install_create_shortcut_windowed_SiteA🌕 manifest_update_title_SiteA🌑 accept_app_id_update_dialog🌑 close_pwa🌑 launch_from_launch_icon_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 +install_create_shortcut_windowed_SiteA🌕 manifest_update_title_SiteA🌑 accept_app_id_update_dialog🌑 close_pwa🌑 launch_from_chrome_apps_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 +install_create_shortcut_windowed_SiteA🌕 manifest_update_title_SiteA🌑 accept_app_id_update_dialog🌑 close_pwa🌑 launch_from_platform_shortcut_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 +install_omnibox_icon_SiteA🌕 manifest_update_title_SiteA🌑 accept_app_id_update_dialog🌑 close_pwa🌑 launch_from_menu_option_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 +install_omnibox_icon_SiteA🌕 manifest_update_title_SiteA🌑 accept_app_id_update_dialog🌑 close_pwa🌑 launch_from_launch_icon_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 +install_omnibox_icon_SiteA🌕 manifest_update_title_SiteA🌑 accept_app_id_update_dialog🌑 close_pwa🌑 launch_from_chrome_apps_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 +install_omnibox_icon_SiteA🌕 manifest_update_title_SiteA🌑 accept_app_id_update_dialog🌑 close_pwa🌑 launch_from_platform_shortcut_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 +install_menu_option_SiteA🌕 manifest_update_title_SiteA🌑 accept_app_id_update_dialog🌑 close_pwa🌑 launch_from_menu_option_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 +install_menu_option_SiteA🌕 manifest_update_title_SiteA🌑 accept_app_id_update_dialog🌑 close_pwa🌑 launch_from_launch_icon_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 +install_menu_option_SiteA🌕 manifest_update_title_SiteA🌑 accept_app_id_update_dialog🌑 close_pwa🌑 launch_from_chrome_apps_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 +install_menu_option_SiteA🌕 manifest_update_title_SiteA🌑 accept_app_id_update_dialog🌑 close_pwa🌑 launch_from_platform_shortcut_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 +install_create_shortcut_windowed_SiteA🌕 manifest_update_title_SiteA🌑 deny_app_update_dialog🌑 check_app_not_in_list_SiteA🌑 check_platform_shortcut_not_exists_SiteA🌑 +install_omnibox_icon_SiteA🌕 manifest_update_title_SiteA🌑 deny_app_update_dialog🌑 check_app_not_in_list_SiteA🌑 check_platform_shortcut_not_exists_SiteA🌑 +install_menu_option_SiteA🌕 manifest_update_title_SiteA🌑 deny_app_update_dialog🌑 check_app_not_in_list_SiteA🌑 check_platform_shortcut_not_exists_SiteA🌑 +install_create_shortcut_windowed_SiteA🌕 close_pwa🌕 manifest_update_icon_SiteA🌑 check_app_in_list_icon_correct_SiteA🌑 +install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_icon_SiteA🌑 check_app_in_list_icon_correct_SiteA🌑 +install_menu_option_SiteA🌕 close_pwa🌕 manifest_update_icon_SiteA🌑 check_app_in_list_icon_correct_SiteA🌑 +install_create_shortcut_windowed_SiteA🌕 close_pwa🌕 manifest_update_icon_SiteA🌑 check_platform_shortcut_and_icon_SiteA🌑 +install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_icon_SiteA🌑 check_platform_shortcut_and_icon_SiteA🌑 +install_menu_option_SiteA🌕 close_pwa🌕 manifest_update_icon_SiteA🌑 check_platform_shortcut_and_icon_SiteA🌑 +install_policy_app_windowed_no_shortcut_SiteA🌓 manifest_update_title_SiteA🌑 check_update_dialog_not_shown🌑 close_pwa🌑 launch_from_menu_option_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 +install_policy_app_windowed_no_shortcut_SiteA🌓 manifest_update_title_SiteA🌑 check_update_dialog_not_shown🌑 close_pwa🌑 launch_from_launch_icon_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 +install_policy_app_windowed_no_shortcut_SiteA🌓 manifest_update_title_SiteA🌑 check_update_dialog_not_shown🌑 close_pwa🌑 launch_from_chrome_apps_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 +install_policy_app_windowed_no_shortcut_SiteA🌓 manifest_update_title_SiteA🌑 check_update_dialog_not_shown🌑 close_pwa🌑 launch_from_platform_shortcut_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌓 manifest_update_title_SiteA🌑 check_update_dialog_not_shown🌑 close_pwa🌑 launch_from_menu_option_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌓 manifest_update_title_SiteA🌑 check_update_dialog_not_shown🌑 close_pwa🌑 launch_from_launch_icon_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌓 manifest_update_title_SiteA🌑 check_update_dialog_not_shown🌑 close_pwa🌑 launch_from_chrome_apps_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌓 manifest_update_title_SiteA🌑 check_update_dialog_not_shown🌑 close_pwa🌑 launch_from_platform_shortcut_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 +install_policy_app_windowed_shortcut_SiteA🌓 manifest_update_title_SiteA🌑 check_update_dialog_not_shown🌑 close_pwa🌑 launch_from_menu_option_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 +install_policy_app_windowed_shortcut_SiteA🌓 manifest_update_title_SiteA🌑 check_update_dialog_not_shown🌑 close_pwa🌑 launch_from_launch_icon_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 +install_policy_app_windowed_shortcut_SiteA🌓 manifest_update_title_SiteA🌑 check_update_dialog_not_shown🌑 close_pwa🌑 launch_from_chrome_apps_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 +install_policy_app_windowed_shortcut_SiteA🌓 manifest_update_title_SiteA🌑 check_update_dialog_not_shown🌑 close_pwa🌑 launch_from_platform_shortcut_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 manifest_update_title_SiteA🌑 check_update_dialog_not_shown🌑 close_pwa🌑 launch_from_menu_option_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 manifest_update_title_SiteA🌑 check_update_dialog_not_shown🌑 close_pwa🌑 launch_from_launch_icon_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 manifest_update_title_SiteA🌑 check_update_dialog_not_shown🌑 close_pwa🌑 launch_from_chrome_apps_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 manifest_update_title_SiteA🌑 check_update_dialog_not_shown🌑 close_pwa🌑 launch_from_platform_shortcut_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 +install_create_shortcut_windowed_SiteA🌕 apply_run_on_os_login_policy_blocked_SiteA🌕 check_user_cannot_set_run_on_os_login_SiteA🌕 +install_omnibox_icon_SiteA🌕 apply_run_on_os_login_policy_blocked_SiteA🌕 check_user_cannot_set_run_on_os_login_SiteA🌕 +install_policy_app_windowed_no_shortcut_SiteA🌓 apply_run_on_os_login_policy_blocked_SiteA🌕 check_user_cannot_set_run_on_os_login_SiteA🌕 +install_policy_app_windowed_shortcut_SiteA🌓 apply_run_on_os_login_policy_blocked_SiteA🌕 check_user_cannot_set_run_on_os_login_SiteA🌕 +install_menu_option_SiteA🌕 apply_run_on_os_login_policy_blocked_SiteA🌕 check_user_cannot_set_run_on_os_login_SiteA🌕 +install_create_shortcut_tabbed_SiteA🌕 apply_run_on_os_login_policy_blocked_SiteA🌕 check_user_cannot_set_run_on_os_login_SiteA🌕 +install_policy_app_tabbed_shortcut_SiteA🌓 apply_run_on_os_login_policy_blocked_SiteA🌕 check_user_cannot_set_run_on_os_login_SiteA🌕 +install_policy_app_tabbed_no_shortcut_SiteA🌓 apply_run_on_os_login_policy_blocked_SiteA🌕 check_user_cannot_set_run_on_os_login_SiteA🌕 +install_create_shortcut_windowed_SiteA🌕 enable_run_on_os_login_SiteA🌕 apply_run_on_os_login_policy_blocked_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 +install_omnibox_icon_SiteA🌕 enable_run_on_os_login_SiteA🌕 apply_run_on_os_login_policy_blocked_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 +install_policy_app_windowed_no_shortcut_SiteA🌓 enable_run_on_os_login_SiteA🌕 apply_run_on_os_login_policy_blocked_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 +install_policy_app_windowed_shortcut_SiteA🌓 enable_run_on_os_login_SiteA🌕 apply_run_on_os_login_policy_blocked_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 +install_menu_option_SiteA🌕 enable_run_on_os_login_SiteA🌕 apply_run_on_os_login_policy_blocked_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 +install_create_shortcut_tabbed_SiteA🌕 enable_run_on_os_login_SiteA🌕 apply_run_on_os_login_policy_blocked_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 +install_policy_app_tabbed_shortcut_SiteA🌓 enable_run_on_os_login_SiteA🌕 apply_run_on_os_login_policy_blocked_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 +install_policy_app_tabbed_no_shortcut_SiteA🌓 enable_run_on_os_login_SiteA🌕 apply_run_on_os_login_policy_blocked_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 +install_create_shortcut_windowed_SiteA🌕 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_run_on_os_login_enabled_SiteA🌕 +install_omnibox_icon_SiteA🌕 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_run_on_os_login_enabled_SiteA🌕 +install_policy_app_windowed_no_shortcut_SiteA🌓 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_run_on_os_login_enabled_SiteA🌕 +install_policy_app_windowed_shortcut_SiteA🌓 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_run_on_os_login_enabled_SiteA🌕 +install_menu_option_SiteA🌕 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_run_on_os_login_enabled_SiteA🌕 +install_create_shortcut_tabbed_SiteA🌕 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_run_on_os_login_enabled_SiteA🌕 +install_policy_app_tabbed_shortcut_SiteA🌓 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_run_on_os_login_enabled_SiteA🌕 +install_policy_app_tabbed_no_shortcut_SiteA🌓 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_run_on_os_login_enabled_SiteA🌕 +install_create_shortcut_windowed_SiteA🌕 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_user_cannot_set_run_on_os_login_SiteA🌕 +install_omnibox_icon_SiteA🌕 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_user_cannot_set_run_on_os_login_SiteA🌕 +install_policy_app_windowed_no_shortcut_SiteA🌓 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_user_cannot_set_run_on_os_login_SiteA🌕 +install_policy_app_windowed_shortcut_SiteA🌓 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_user_cannot_set_run_on_os_login_SiteA🌕 +install_menu_option_SiteA🌕 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_user_cannot_set_run_on_os_login_SiteA🌕 +install_create_shortcut_tabbed_SiteA🌕 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_user_cannot_set_run_on_os_login_SiteA🌕 +install_policy_app_tabbed_shortcut_SiteA🌓 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_user_cannot_set_run_on_os_login_SiteA🌕 +install_policy_app_tabbed_no_shortcut_SiteA🌓 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_user_cannot_set_run_on_os_login_SiteA🌕 +install_create_shortcut_windowed_SiteA🌕 enable_run_on_os_login_SiteA🌕 check_run_on_os_login_enabled_SiteA🌕 +install_omnibox_icon_SiteA🌕 enable_run_on_os_login_SiteA🌕 check_run_on_os_login_enabled_SiteA🌕 +install_policy_app_windowed_no_shortcut_SiteA🌓 enable_run_on_os_login_SiteA🌕 check_run_on_os_login_enabled_SiteA🌕 +install_policy_app_windowed_shortcut_SiteA🌓 enable_run_on_os_login_SiteA🌕 check_run_on_os_login_enabled_SiteA🌕 +install_menu_option_SiteA🌕 enable_run_on_os_login_SiteA🌕 check_run_on_os_login_enabled_SiteA🌕 +install_create_shortcut_tabbed_SiteA🌕 enable_run_on_os_login_SiteA🌕 check_run_on_os_login_enabled_SiteA🌕 +install_policy_app_tabbed_shortcut_SiteA🌓 enable_run_on_os_login_SiteA🌕 check_run_on_os_login_enabled_SiteA🌕 +install_policy_app_tabbed_no_shortcut_SiteA🌓 enable_run_on_os_login_SiteA🌕 check_run_on_os_login_enabled_SiteA🌕 +install_create_shortcut_windowed_SiteA🌕 enable_run_on_os_login_SiteA🌕 disable_run_on_os_login_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 +install_omnibox_icon_SiteA🌕 enable_run_on_os_login_SiteA🌕 disable_run_on_os_login_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 +install_policy_app_windowed_no_shortcut_SiteA🌓 enable_run_on_os_login_SiteA🌕 disable_run_on_os_login_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 +install_policy_app_windowed_shortcut_SiteA🌓 enable_run_on_os_login_SiteA🌕 disable_run_on_os_login_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 +install_menu_option_SiteA🌕 enable_run_on_os_login_SiteA🌕 disable_run_on_os_login_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 +install_create_shortcut_tabbed_SiteA🌕 enable_run_on_os_login_SiteA🌕 disable_run_on_os_login_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 +install_policy_app_tabbed_shortcut_SiteA🌓 enable_run_on_os_login_SiteA🌕 disable_run_on_os_login_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 +install_policy_app_tabbed_no_shortcut_SiteA🌓 enable_run_on_os_login_SiteA🌕 disable_run_on_os_login_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 +install_create_shortcut_windowed_SiteA🌕 apply_run_on_os_login_policy_run_windowed_SiteA🌕 remove_run_on_os_login_policy_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 +install_omnibox_icon_SiteA🌕 apply_run_on_os_login_policy_run_windowed_SiteA🌕 remove_run_on_os_login_policy_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 +install_policy_app_windowed_no_shortcut_SiteA🌓 apply_run_on_os_login_policy_run_windowed_SiteA🌕 remove_run_on_os_login_policy_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 +install_policy_app_windowed_shortcut_SiteA🌓 apply_run_on_os_login_policy_run_windowed_SiteA🌕 remove_run_on_os_login_policy_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 +install_menu_option_SiteA🌕 apply_run_on_os_login_policy_run_windowed_SiteA🌕 remove_run_on_os_login_policy_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 +install_create_shortcut_tabbed_SiteA🌕 apply_run_on_os_login_policy_run_windowed_SiteA🌕 remove_run_on_os_login_policy_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 +install_policy_app_tabbed_shortcut_SiteA🌓 apply_run_on_os_login_policy_run_windowed_SiteA🌕 remove_run_on_os_login_policy_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 +install_policy_app_tabbed_no_shortcut_SiteA🌓 apply_run_on_os_login_policy_run_windowed_SiteA🌕 remove_run_on_os_login_policy_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 +install_create_shortcut_windowed_SiteA🌕 enable_run_on_os_login_SiteA🌕 apply_run_on_os_login_policy_blocked_SiteA🌕 remove_run_on_os_login_policy_SiteA🌕 check_run_on_os_login_enabled_SiteA🌕 +install_omnibox_icon_SiteA🌕 enable_run_on_os_login_SiteA🌕 apply_run_on_os_login_policy_blocked_SiteA🌕 remove_run_on_os_login_policy_SiteA🌕 check_run_on_os_login_enabled_SiteA🌕 +install_policy_app_windowed_no_shortcut_SiteA🌓 enable_run_on_os_login_SiteA🌕 apply_run_on_os_login_policy_blocked_SiteA🌕 remove_run_on_os_login_policy_SiteA🌕 check_run_on_os_login_enabled_SiteA🌕 +install_policy_app_windowed_shortcut_SiteA🌓 enable_run_on_os_login_SiteA🌕 apply_run_on_os_login_policy_blocked_SiteA🌕 remove_run_on_os_login_policy_SiteA🌕 check_run_on_os_login_enabled_SiteA🌕 +install_menu_option_SiteA🌕 enable_run_on_os_login_SiteA🌕 apply_run_on_os_login_policy_blocked_SiteA🌕 remove_run_on_os_login_policy_SiteA🌕 check_run_on_os_login_enabled_SiteA🌕 +install_create_shortcut_tabbed_SiteA🌕 enable_run_on_os_login_SiteA🌕 apply_run_on_os_login_policy_blocked_SiteA🌕 remove_run_on_os_login_policy_SiteA🌕 check_run_on_os_login_enabled_SiteA🌕 +install_policy_app_tabbed_shortcut_SiteA🌓 enable_run_on_os_login_SiteA🌕 apply_run_on_os_login_policy_blocked_SiteA🌕 remove_run_on_os_login_policy_SiteA🌕 check_run_on_os_login_enabled_SiteA🌕 +install_policy_app_tabbed_no_shortcut_SiteA🌓 enable_run_on_os_login_SiteA🌕 apply_run_on_os_login_policy_blocked_SiteA🌕 remove_run_on_os_login_policy_SiteA🌕 check_run_on_os_login_enabled_SiteA🌕 +install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 switch_profile_clients_Client1🌕 sync_turn_off🌕 uninstall_from_list_SiteA🌕 switch_profile_clients_Client2🌕 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 +install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 switch_profile_clients_Client1🌕 sync_turn_off🌕 uninstall_from_menu_SiteA🌕 switch_profile_clients_Client2🌕 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 +install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 switch_profile_clients_Client1🌕 sync_turn_off🌕 uninstall_from_os_SiteA🌑 switch_profile_clients_Client2🌑 apply_run_on_os_login_policy_run_windowed_SiteA🌑 check_run_on_os_login_disabled_SiteA🌑 +install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 switch_profile_clients_Client1🌕 sync_turn_off🌕 uninstall_from_app_settings_SiteA🌕 switch_profile_clients_Client2🌕 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 +install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 switch_profile_clients_Client1🌕 sync_turn_off🌕 uninstall_from_list_SiteA🌕 switch_profile_clients_Client2🌕 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 +install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 switch_profile_clients_Client1🌕 sync_turn_off🌕 uninstall_from_menu_SiteA🌕 switch_profile_clients_Client2🌕 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 +install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 switch_profile_clients_Client1🌕 sync_turn_off🌕 uninstall_from_os_SiteA🌑 switch_profile_clients_Client2🌑 apply_run_on_os_login_policy_run_windowed_SiteA🌑 check_run_on_os_login_disabled_SiteA🌑 +install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 switch_profile_clients_Client1🌕 sync_turn_off🌕 uninstall_from_app_settings_SiteA🌕 switch_profile_clients_Client2🌕 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 +install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 switch_profile_clients_Client1🌕 sync_turn_off🌕 uninstall_from_list_SiteA🌕 switch_profile_clients_Client2🌕 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 +install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 switch_profile_clients_Client1🌕 sync_turn_off🌕 uninstall_from_menu_SiteA🌕 switch_profile_clients_Client2🌕 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 +install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 switch_profile_clients_Client1🌕 sync_turn_off🌕 uninstall_from_os_SiteA🌑 switch_profile_clients_Client2🌑 apply_run_on_os_login_policy_run_windowed_SiteA🌑 check_run_on_os_login_disabled_SiteA🌑 +install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 switch_profile_clients_Client1🌕 sync_turn_off🌕 uninstall_from_app_settings_SiteA🌕 switch_profile_clients_Client2🌕 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 +install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 switch_profile_clients_Client1🌕 sync_turn_off🌕 uninstall_from_list_SiteA🌕 switch_profile_clients_Client2🌕 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 install_locally_SiteA🌓 check_run_on_os_login_enabled_SiteA🌕 +install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 switch_profile_clients_Client1🌕 sync_turn_off🌕 uninstall_from_menu_SiteA🌕 switch_profile_clients_Client2🌕 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 install_locally_SiteA🌓 check_run_on_os_login_enabled_SiteA🌕 +install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 switch_profile_clients_Client1🌕 sync_turn_off🌕 uninstall_from_os_SiteA🌑 switch_profile_clients_Client2🌑 apply_run_on_os_login_policy_run_windowed_SiteA🌑 check_run_on_os_login_disabled_SiteA🌑 install_locally_SiteA🌑 check_run_on_os_login_enabled_SiteA🌑 +install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 switch_profile_clients_Client1🌕 sync_turn_off🌕 uninstall_from_app_settings_SiteA🌕 switch_profile_clients_Client2🌕 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 install_locally_SiteA🌓 check_run_on_os_login_enabled_SiteA🌕 +install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 switch_profile_clients_Client1🌕 sync_turn_off🌕 uninstall_from_list_SiteA🌕 switch_profile_clients_Client2🌕 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 install_locally_SiteA🌓 check_run_on_os_login_enabled_SiteA🌕 +install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 switch_profile_clients_Client1🌕 sync_turn_off🌕 uninstall_from_menu_SiteA🌕 switch_profile_clients_Client2🌕 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 install_locally_SiteA🌓 check_run_on_os_login_enabled_SiteA🌕 +install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 switch_profile_clients_Client1🌕 sync_turn_off🌕 uninstall_from_os_SiteA🌑 switch_profile_clients_Client2🌑 apply_run_on_os_login_policy_run_windowed_SiteA🌑 check_run_on_os_login_disabled_SiteA🌑 install_locally_SiteA🌑 check_run_on_os_login_enabled_SiteA🌑 +install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 switch_profile_clients_Client1🌕 sync_turn_off🌕 uninstall_from_app_settings_SiteA🌕 switch_profile_clients_Client2🌕 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 install_locally_SiteA🌓 check_run_on_os_login_enabled_SiteA🌕 +install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 switch_profile_clients_Client1🌕 sync_turn_off🌕 uninstall_from_list_SiteA🌕 switch_profile_clients_Client2🌕 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 install_locally_SiteA🌓 check_run_on_os_login_enabled_SiteA🌕 +install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 switch_profile_clients_Client1🌕 sync_turn_off🌕 uninstall_from_menu_SiteA🌕 switch_profile_clients_Client2🌕 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 install_locally_SiteA🌓 check_run_on_os_login_enabled_SiteA🌕 +install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 switch_profile_clients_Client1🌕 sync_turn_off🌕 uninstall_from_os_SiteA🌑 switch_profile_clients_Client2🌑 apply_run_on_os_login_policy_run_windowed_SiteA🌑 check_run_on_os_login_disabled_SiteA🌑 install_locally_SiteA🌑 check_run_on_os_login_enabled_SiteA🌑 +install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 switch_profile_clients_Client1🌕 sync_turn_off🌕 uninstall_from_app_settings_SiteA🌕 switch_profile_clients_Client2🌕 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 install_locally_SiteA🌓 check_run_on_os_login_enabled_SiteA🌕 +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🌕 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🌕 navigate_pwa_site_a_to_SiteB🌕 close_custom_toolbar🌕 check_app_navigation_is_start_url🌕 +install_omnibox_icon_SiteA🌕 navigate_pwa_site_a_to_SiteB🌕 close_custom_toolbar🌕 check_app_navigation_is_start_url🌕 +install_policy_app_windowed_no_shortcut_SiteA🌓 navigate_pwa_site_a_to_SiteB🌕 close_custom_toolbar🌕 check_app_navigation_is_start_url🌕 +install_policy_app_windowed_shortcut_SiteA🌓 navigate_pwa_site_a_to_SiteB🌕 close_custom_toolbar🌕 check_app_navigation_is_start_url🌕 +install_menu_option_SiteA🌕 navigate_pwa_site_a_to_SiteB🌕 close_custom_toolbar🌕 check_app_navigation_is_start_url🌕 +install_create_shortcut_windowed_SiteA🌕 navigate_pwa_site_a_to_SiteB🌕 check_custom_toolbar🌕 +install_omnibox_icon_SiteA🌕 navigate_pwa_site_a_to_SiteB🌕 check_custom_toolbar🌕 +install_menu_option_SiteA🌕 navigate_pwa_site_a_to_SiteB🌕 check_custom_toolbar🌕 +navigate_browser_SiteA🌕 check_app_not_in_list_SiteA🌓 +navigate_browser_SiteA🌕 check_platform_shortcut_not_exists_SiteA🌑 +navigate_browser_SiteC🌕 check_app_not_in_list_SiteA🌓 +navigate_browser_SiteC🌕 check_platform_shortcut_not_exists_SiteA🌑 +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🌕 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_and_icon_SiteA🌕 +install_policy_app_tabbed_shortcut_SiteA🌓 check_platform_shortcut_and_icon_SiteA🌕 +install_create_shortcut_windowed_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌕 +install_omnibox_icon_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌕 +install_menu_option_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌕 +install_create_shortcut_tabbed_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌕 +install_policy_app_windowed_shortcut_SiteC🌓 check_platform_shortcut_and_icon_SiteC🌕 +install_policy_app_tabbed_shortcut_SiteC🌓 check_platform_shortcut_and_icon_SiteC🌕 +install_create_shortcut_windowed_SiteC🌕 check_platform_shortcut_and_icon_SiteC🌕 +install_create_shortcut_tabbed_SiteC🌕 check_platform_shortcut_and_icon_SiteC🌕 +install_create_shortcut_windowed_SiteA🌕 uninstall_from_list_SiteA🌕 check_app_not_in_list_SiteA🌓 +install_create_shortcut_windowed_SiteA🌕 uninstall_from_menu_SiteA🌕 check_app_not_in_list_SiteA🌓 +install_create_shortcut_windowed_SiteA🌕 uninstall_from_os_SiteA🌑 check_app_not_in_list_SiteA🌑 +install_create_shortcut_windowed_SiteA🌕 uninstall_from_app_settings_SiteA🌕 check_app_not_in_list_SiteA🌓 +install_omnibox_icon_SiteA🌕 uninstall_from_list_SiteA🌕 check_app_not_in_list_SiteA🌓 +install_omnibox_icon_SiteA🌕 uninstall_from_menu_SiteA🌕 check_app_not_in_list_SiteA🌓 +install_omnibox_icon_SiteA🌕 uninstall_from_os_SiteA🌑 check_app_not_in_list_SiteA🌑 +install_omnibox_icon_SiteA🌕 uninstall_from_app_settings_SiteA🌕 check_app_not_in_list_SiteA🌓 +install_menu_option_SiteA🌕 uninstall_from_list_SiteA🌕 check_app_not_in_list_SiteA🌓 +install_menu_option_SiteA🌕 uninstall_from_menu_SiteA🌕 check_app_not_in_list_SiteA🌓 +install_menu_option_SiteA🌕 uninstall_from_os_SiteA🌑 check_app_not_in_list_SiteA🌑 +install_menu_option_SiteA🌕 uninstall_from_app_settings_SiteA🌕 check_app_not_in_list_SiteA🌓 +install_create_shortcut_windowed_SiteA🌕 uninstall_from_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_create_shortcut_windowed_SiteA🌕 uninstall_from_os_SiteA🌑 navigate_browser_SiteA🌑 check_install_icon_shown🌑 +install_create_shortcut_windowed_SiteA🌕 uninstall_from_app_settings_SiteA🌕 navigate_browser_SiteA🌕 check_install_icon_shown🌕 +install_omnibox_icon_SiteA🌕 uninstall_from_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_omnibox_icon_SiteA🌕 uninstall_from_os_SiteA🌑 navigate_browser_SiteA🌑 check_install_icon_shown🌑 +install_omnibox_icon_SiteA🌕 uninstall_from_app_settings_SiteA🌕 navigate_browser_SiteA🌕 check_install_icon_shown🌕 +install_menu_option_SiteA🌕 uninstall_from_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_menu_option_SiteA🌕 uninstall_from_os_SiteA🌑 navigate_browser_SiteA🌑 check_install_icon_shown🌑 +install_menu_option_SiteA🌕 uninstall_from_app_settings_SiteA🌕 navigate_browser_SiteA🌕 check_install_icon_shown🌕 +install_create_shortcut_windowed_SiteA🌕 uninstall_from_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_create_shortcut_windowed_SiteA🌕 uninstall_from_os_SiteA🌑 navigate_browser_SiteA🌑 check_launch_icon_not_shown🌑 +install_create_shortcut_windowed_SiteA🌕 uninstall_from_app_settings_SiteA🌕 navigate_browser_SiteA🌕 check_launch_icon_not_shown🌕 +install_omnibox_icon_SiteA🌕 uninstall_from_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_omnibox_icon_SiteA🌕 uninstall_from_os_SiteA🌑 navigate_browser_SiteA🌑 check_launch_icon_not_shown🌑 +install_omnibox_icon_SiteA🌕 uninstall_from_app_settings_SiteA🌕 navigate_browser_SiteA🌕 check_launch_icon_not_shown🌕 +install_menu_option_SiteA🌕 uninstall_from_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_menu_option_SiteA🌕 uninstall_from_os_SiteA🌑 navigate_browser_SiteA🌑 check_launch_icon_not_shown🌑 +install_menu_option_SiteA🌕 uninstall_from_app_settings_SiteA🌕 navigate_browser_SiteA🌕 check_launch_icon_not_shown🌕 +install_create_shortcut_windowed_SiteA🌕 uninstall_from_list_SiteA🌕 check_platform_shortcut_not_exists_SiteA🌑 +install_create_shortcut_windowed_SiteA🌕 uninstall_from_menu_SiteA🌕 check_platform_shortcut_not_exists_SiteA🌑 +install_create_shortcut_windowed_SiteA🌕 uninstall_from_os_SiteA🌑 check_platform_shortcut_not_exists_SiteA🌑 +install_create_shortcut_windowed_SiteA🌕 uninstall_from_app_settings_SiteA🌕 check_platform_shortcut_not_exists_SiteA🌑 +install_omnibox_icon_SiteA🌕 uninstall_from_list_SiteA🌕 check_platform_shortcut_not_exists_SiteA🌑 +install_omnibox_icon_SiteA🌕 uninstall_from_menu_SiteA🌕 check_platform_shortcut_not_exists_SiteA🌑 +install_omnibox_icon_SiteA🌕 uninstall_from_os_SiteA🌑 check_platform_shortcut_not_exists_SiteA🌑 +install_omnibox_icon_SiteA🌕 uninstall_from_app_settings_SiteA🌕 check_platform_shortcut_not_exists_SiteA🌑 +install_menu_option_SiteA🌕 uninstall_from_list_SiteA🌕 check_platform_shortcut_not_exists_SiteA🌑 +install_menu_option_SiteA🌕 uninstall_from_menu_SiteA🌕 check_platform_shortcut_not_exists_SiteA🌑 +install_menu_option_SiteA🌕 uninstall_from_os_SiteA🌑 check_platform_shortcut_not_exists_SiteA🌑 +install_menu_option_SiteA🌕 uninstall_from_app_settings_SiteA🌕 check_platform_shortcut_not_exists_SiteA🌑 +install_create_shortcut_windowed_SiteC🌕 uninstall_from_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_windowed_SiteC🌕 uninstall_from_os_SiteC🌑 check_app_not_in_list_SiteA🌑 +install_create_shortcut_windowed_SiteC🌕 uninstall_from_app_settings_SiteC🌕 check_app_not_in_list_SiteA🌓 +install_create_shortcut_windowed_SiteC🌕 uninstall_from_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_windowed_SiteC🌕 uninstall_from_os_SiteC🌑 check_platform_shortcut_not_exists_SiteC🌑 +install_create_shortcut_windowed_SiteC🌕 uninstall_from_app_settings_SiteC🌕 check_platform_shortcut_not_exists_SiteC🌑 +install_create_shortcut_tabbed_SiteA🌕 uninstall_from_list_SiteA🌕 check_app_not_in_list_SiteA🌓 +install_create_shortcut_tabbed_SiteA🌕 uninstall_from_list_SiteA🌕 navigate_browser_SiteA🌕 check_install_icon_shown🌕 +install_create_shortcut_tabbed_SiteA🌕 uninstall_from_list_SiteA🌕 navigate_browser_SiteA🌕 check_launch_icon_not_shown🌕 +install_create_shortcut_tabbed_SiteA🌕 uninstall_from_list_SiteA🌕 check_platform_shortcut_not_exists_SiteA🌑 +install_create_shortcut_tabbed_SiteC🌕 uninstall_from_list_SiteC🌕 check_app_not_in_list_SiteA🌓 +install_create_shortcut_tabbed_SiteC🌕 uninstall_from_list_SiteC🌕 check_platform_shortcut_not_exists_SiteC🌑 +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_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_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🌕 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_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_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_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_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_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_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_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_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_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_policy_app_windowed_no_shortcut_SiteA🌓 create_shortcuts_SiteA🌑 check_platform_shortcut_and_icon_SiteA🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌓 create_shortcuts_SiteA🌑 check_platform_shortcut_and_icon_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_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_platform_shortcut_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_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_platform_shortcut_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_platform_shortcut_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🌕 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_windowed_SiteA🌕 open_app_settings_from_chrome_apps_SiteA🌕 check_browser_navigation_is_app_settings_SiteA🌕 +install_create_shortcut_windowed_SiteA🌕 open_app_settings_from_app_menu_SiteA🌕 check_browser_navigation_is_app_settings_SiteA🌕 +install_omnibox_icon_SiteA🌕 open_app_settings_from_chrome_apps_SiteA🌕 check_browser_navigation_is_app_settings_SiteA🌕 +install_omnibox_icon_SiteA🌕 open_app_settings_from_app_menu_SiteA🌕 check_browser_navigation_is_app_settings_SiteA🌕 +install_policy_app_windowed_no_shortcut_SiteA🌓 open_app_settings_from_chrome_apps_SiteA🌕 check_browser_navigation_is_app_settings_SiteA🌕 +install_policy_app_windowed_no_shortcut_SiteA🌓 open_app_settings_from_app_menu_SiteA🌕 check_browser_navigation_is_app_settings_SiteA🌕 +install_policy_app_windowed_shortcut_SiteA🌓 open_app_settings_from_chrome_apps_SiteA🌕 check_browser_navigation_is_app_settings_SiteA🌕 +install_policy_app_windowed_shortcut_SiteA🌓 open_app_settings_from_app_menu_SiteA🌕 check_browser_navigation_is_app_settings_SiteA🌕 +install_menu_option_SiteA🌕 open_app_settings_from_chrome_apps_SiteA🌕 check_browser_navigation_is_app_settings_SiteA🌕 +install_menu_option_SiteA🌕 open_app_settings_from_app_menu_SiteA🌕 check_browser_navigation_is_app_settings_SiteA🌕 +install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 install_locally_SiteA🌓 check_platform_shortcut_and_icon_SiteA🌕 +install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 install_locally_SiteA🌓 check_platform_shortcut_and_icon_SiteA🌕 +install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 install_locally_SiteA🌓 check_platform_shortcut_and_icon_SiteA🌕 +install_create_shortcut_tabbed_SiteA🌕 switch_profile_clients_Client2🌕 install_locally_SiteA🌓 check_platform_shortcut_and_icon_SiteA🌕 +install_create_shortcut_tabbed_SiteA🌕 switch_profile_clients_Client2🌕 install_locally_SiteA🌓 check_app_in_list_tabbed_SiteA🌓 +install_create_shortcut_tabbed_SiteA🌕 switch_profile_clients_Client2🌕 install_locally_SiteA🌓 navigate_browser_SiteA🌕 check_install_icon_shown🌕 +install_create_shortcut_tabbed_SiteA🌕 switch_profile_clients_Client2🌕 install_locally_SiteA🌓 navigate_browser_SiteA🌕 check_launch_icon_not_shown🌕 +install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 install_locally_SiteA🌓 check_app_in_list_windowed_SiteA🌓 +install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 install_locally_SiteA🌓 check_app_in_list_windowed_SiteA🌓 +install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 install_locally_SiteA🌓 check_app_in_list_windowed_SiteA🌓 +install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 install_locally_SiteA🌓 navigate_browser_SiteA🌕 check_install_icon_not_shown🌕 +install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 install_locally_SiteA🌓 navigate_browser_SiteA🌕 check_install_icon_not_shown🌕 +install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 install_locally_SiteA🌓 navigate_browser_SiteA🌕 check_install_icon_not_shown🌕 +install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 install_locally_SiteA🌓 navigate_browser_SiteA🌕 check_launch_icon_shown🌕 +install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 install_locally_SiteA🌓 navigate_browser_SiteA🌕 check_launch_icon_shown🌕 +install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 install_locally_SiteA🌓 navigate_browser_SiteA🌕 check_launch_icon_shown🌕 +install_create_shortcut_tabbed_SiteC🌕 switch_profile_clients_Client2🌕 install_locally_SiteC🌓 check_app_in_list_tabbed_SiteC🌓 +install_create_shortcut_tabbed_SiteC🌕 switch_profile_clients_Client2🌕 install_locally_SiteC🌓 navigate_browser_SiteC🌕 check_launch_icon_not_shown🌕 +install_create_shortcut_windowed_SiteC🌕 switch_profile_clients_Client2🌑 install_locally_SiteC🌑 check_app_in_list_windowed_SiteC🌑 +install_create_shortcut_windowed_SiteC🌕 switch_profile_clients_Client2🌑 install_locally_SiteC🌑 navigate_browser_SiteC🌑 check_install_icon_not_shown🌑 +install_create_shortcut_windowed_SiteC🌕 switch_profile_clients_Client2🌑 install_locally_SiteC🌑 navigate_browser_SiteC🌑 check_launch_icon_shown🌑 +install_create_shortcut_windowed_SiteC🌕 switch_profile_clients_Client2🌑 install_locally_SiteC🌑 check_platform_shortcut_and_icon_SiteC🌑 +install_create_shortcut_tabbed_SiteC🌕 switch_profile_clients_Client2🌕 install_locally_SiteC🌓 check_platform_shortcut_and_icon_SiteC🌕 +install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 install_locally_SiteA🌓 launch_from_menu_option_SiteA🌕 check_window_created🌕 +install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 install_locally_SiteA🌓 launch_from_launch_icon_SiteA🌕 check_window_created🌕 +install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 install_locally_SiteA🌓 launch_from_chrome_apps_SiteA🌓 check_window_created🌕 +install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 install_locally_SiteA🌓 launch_from_platform_shortcut_SiteA🌓 check_window_created🌕 +install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 install_locally_SiteA🌓 launch_from_menu_option_SiteA🌕 check_window_created🌕 +install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 install_locally_SiteA🌓 launch_from_launch_icon_SiteA🌕 check_window_created🌕 +install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 install_locally_SiteA🌓 launch_from_chrome_apps_SiteA🌓 check_window_created🌕 +install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 install_locally_SiteA🌓 launch_from_platform_shortcut_SiteA🌓 check_window_created🌕 +install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 install_locally_SiteA🌓 launch_from_menu_option_SiteA🌕 check_window_created🌕 +install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 install_locally_SiteA🌓 launch_from_launch_icon_SiteA🌕 check_window_created🌕 +install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 install_locally_SiteA🌓 launch_from_chrome_apps_SiteA🌓 check_window_created🌕 +install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 install_locally_SiteA🌓 launch_from_platform_shortcut_SiteA🌓 check_window_created🌕 +install_create_shortcut_tabbed_SiteA🌕 switch_profile_clients_Client2🌕 launch_from_chrome_apps_SiteA🌓 check_tab_created🌕 +install_create_shortcut_tabbed_SiteA🌕 switch_profile_clients_Client2🌕 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 +install_create_shortcut_tabbed_SiteA🌕 switch_profile_clients_Client2🌕 install_locally_SiteA🌓 launch_from_chrome_apps_SiteA🌓 check_tab_created🌕 +install_create_shortcut_tabbed_SiteA🌕 switch_profile_clients_Client2🌕 install_locally_SiteA🌓 launch_from_platform_shortcut_SiteA🌑 check_tab_created🌑 +install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 launch_from_chrome_apps_SiteA🌓 check_tab_created🌕 +install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 launch_from_platform_shortcut_SiteA🌓 check_tab_created🌕 +install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 launch_from_chrome_apps_SiteA🌓 check_tab_created🌕 +install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 launch_from_platform_shortcut_SiteA🌓 check_tab_created🌕 +install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 launch_from_chrome_apps_SiteA🌓 check_tab_created🌕 +install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 launch_from_platform_shortcut_SiteA🌓 check_tab_created🌕 +install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 uninstall_from_list_SiteA🌕 check_app_not_in_list_SiteA🌓 +install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 uninstall_from_list_SiteA🌕 check_app_not_in_list_SiteA🌓 +install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 uninstall_from_list_SiteA🌕 check_app_not_in_list_SiteA🌓 +install_create_shortcut_tabbed_SiteA🌕 switch_profile_clients_Client2🌕 uninstall_from_list_SiteA🌕 check_app_not_in_list_SiteA🌓 +install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 uninstall_from_list_SiteA🌕 switch_profile_clients_Client1🌕 check_app_not_in_list_SiteA🌓 +install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 uninstall_from_list_SiteA🌕 switch_profile_clients_Client1🌕 check_app_not_in_list_SiteA🌓 +install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 uninstall_from_list_SiteA🌕 switch_profile_clients_Client1🌕 check_app_not_in_list_SiteA🌓 +install_create_shortcut_tabbed_SiteA🌕 switch_profile_clients_Client2🌕 uninstall_from_list_SiteA🌕 switch_profile_clients_Client1🌕 check_app_not_in_list_SiteA🌓 +install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 check_app_in_list_not_locally_installed_SiteA🌓 +install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 check_app_in_list_not_locally_installed_SiteA🌓 +install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 check_app_in_list_not_locally_installed_SiteA🌓 +install_create_shortcut_tabbed_SiteA🌕 switch_profile_clients_Client2🌕 check_app_in_list_not_locally_installed_SiteA🌓 +install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 check_platform_shortcut_not_exists_SiteA🌑 +install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 check_platform_shortcut_not_exists_SiteA🌑 +install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 check_platform_shortcut_not_exists_SiteA🌑 +install_create_shortcut_tabbed_SiteA🌕 switch_profile_clients_Client2🌕 check_platform_shortcut_not_exists_SiteA🌑 +install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 navigate_browser_SiteA🌕 check_install_icon_shown🌕 +install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 navigate_browser_SiteA🌕 check_install_icon_shown🌕 +install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 navigate_browser_SiteA🌕 check_install_icon_shown🌕 +install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 navigate_browser_SiteA🌕 check_launch_icon_not_shown🌕 +install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 navigate_browser_SiteA🌕 check_launch_icon_not_shown🌕 +install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 navigate_browser_SiteA🌕 check_launch_icon_not_shown🌕 +install_create_shortcut_windowed_SiteC🌕 switch_profile_clients_Client2🌑 check_app_in_list_not_locally_installed_SiteC🌑 +install_create_shortcut_tabbed_SiteC🌕 switch_profile_clients_Client2🌕 check_app_in_list_not_locally_installed_SiteC🌓 +install_create_shortcut_windowed_SiteC🌕 switch_profile_clients_Client2🌑 check_platform_shortcut_not_exists_SiteC🌑 +install_create_shortcut_tabbed_SiteC🌕 switch_profile_clients_Client2🌕 check_platform_shortcut_not_exists_SiteC🌑 +sync_turn_off🌕 install_create_shortcut_windowed_SiteA🌑 sync_turn_on🌑 switch_profile_clients_Client2🌑 check_app_in_list_not_locally_installed_SiteA🌑 +sync_turn_off🌕 install_omnibox_icon_SiteA🌑 sync_turn_on🌑 switch_profile_clients_Client2🌑 check_app_in_list_not_locally_installed_SiteA🌑 +sync_turn_off🌕 install_menu_option_SiteA🌑 sync_turn_on🌑 switch_profile_clients_Client2🌑 check_app_in_list_not_locally_installed_SiteA🌑 +sync_turn_off🌕 install_create_shortcut_tabbed_SiteA🌕 sync_turn_on🌕 switch_profile_clients_Client2🌕 check_app_in_list_not_locally_installed_SiteA🌓 +sync_turn_off🌕 install_create_shortcut_windowed_SiteC🌑 sync_turn_on🌑 switch_profile_clients_Client2🌑 check_app_in_list_not_locally_installed_SiteC🌑 +sync_turn_off🌕 install_create_shortcut_tabbed_SiteC🌕 sync_turn_on🌕 switch_profile_clients_Client2🌕 check_app_in_list_not_locally_installed_SiteC🌓 +install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌕 uninstall_from_list_SiteA🌕 sync_turn_on🌕 check_app_in_list_not_locally_installed_SiteA🌓 +install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌕 uninstall_from_menu_SiteA🌕 sync_turn_on🌕 check_app_in_list_not_locally_installed_SiteA🌓 +install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌕 uninstall_from_os_SiteA🌑 sync_turn_on🌑 check_app_in_list_not_locally_installed_SiteA🌑 +install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌕 uninstall_from_list_SiteA🌕 sync_turn_on🌕 check_app_in_list_not_locally_installed_SiteA🌓 +install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌕 uninstall_from_menu_SiteA🌕 sync_turn_on🌕 check_app_in_list_not_locally_installed_SiteA🌓 +install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌕 uninstall_from_os_SiteA🌑 sync_turn_on🌑 check_app_in_list_not_locally_installed_SiteA🌑 +install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌕 uninstall_from_list_SiteA🌕 sync_turn_on🌕 check_app_in_list_not_locally_installed_SiteA🌓 +install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌕 uninstall_from_menu_SiteA🌕 sync_turn_on🌕 check_app_in_list_not_locally_installed_SiteA🌓 +install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌕 uninstall_from_os_SiteA🌑 sync_turn_on🌑 check_app_in_list_not_locally_installed_SiteA🌑 +install_create_shortcut_tabbed_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌕 uninstall_from_list_SiteA🌕 sync_turn_on🌕 check_app_in_list_not_locally_installed_SiteA🌓 +install_create_shortcut_tabbed_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌕 uninstall_from_menu_SiteA🌑 sync_turn_on🌑 check_app_in_list_not_locally_installed_SiteA🌑 +install_create_shortcut_tabbed_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌕 uninstall_from_os_SiteA🌑 sync_turn_on🌑 check_app_in_list_not_locally_installed_SiteA🌑 +install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌕 uninstall_from_list_SiteA🌕 sync_turn_on🌕 check_platform_shortcut_not_exists_SiteA🌑 +install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌕 uninstall_from_menu_SiteA🌕 sync_turn_on🌕 check_platform_shortcut_not_exists_SiteA🌑 +install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌕 uninstall_from_os_SiteA🌑 sync_turn_on🌑 check_platform_shortcut_not_exists_SiteA🌑 +install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌕 uninstall_from_list_SiteA🌕 sync_turn_on🌕 check_platform_shortcut_not_exists_SiteA🌑 +install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌕 uninstall_from_menu_SiteA🌕 sync_turn_on🌕 check_platform_shortcut_not_exists_SiteA🌑 +install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌕 uninstall_from_os_SiteA🌑 sync_turn_on🌑 check_platform_shortcut_not_exists_SiteA🌑 +install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌕 uninstall_from_list_SiteA🌕 sync_turn_on🌕 check_platform_shortcut_not_exists_SiteA🌑 +install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌕 uninstall_from_menu_SiteA🌕 sync_turn_on🌕 check_platform_shortcut_not_exists_SiteA🌑 +install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌕 uninstall_from_os_SiteA🌑 sync_turn_on🌑 check_platform_shortcut_not_exists_SiteA🌑 +install_create_shortcut_tabbed_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌕 uninstall_from_list_SiteA🌕 sync_turn_on🌕 check_platform_shortcut_not_exists_SiteA🌑 +install_create_shortcut_tabbed_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌕 uninstall_from_menu_SiteA🌑 sync_turn_on🌑 check_platform_shortcut_not_exists_SiteA🌑 +install_create_shortcut_tabbed_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌕 uninstall_from_os_SiteA🌑 sync_turn_on🌑 check_platform_shortcut_not_exists_SiteA🌑 +install_create_shortcut_tabbed_SiteA🌕 install_policy_app_windowed_no_shortcut_SiteA🌓 check_platform_shortcut_and_icon_SiteA🌕 +install_create_shortcut_tabbed_SiteA🌕 install_policy_app_windowed_shortcut_SiteA🌓 check_platform_shortcut_and_icon_SiteA🌕 +install_create_shortcut_windowed_SiteA🌕 install_policy_app_tabbed_no_shortcut_SiteA🌓 check_platform_shortcut_and_icon_SiteA🌕 +install_create_shortcut_windowed_SiteA🌕 install_policy_app_windowed_no_shortcut_SiteA🌓 check_platform_shortcut_and_icon_SiteA🌕 +install_omnibox_icon_SiteA🌕 install_policy_app_tabbed_no_shortcut_SiteA🌓 check_platform_shortcut_and_icon_SiteA🌕 +install_omnibox_icon_SiteA🌕 install_policy_app_windowed_no_shortcut_SiteA🌓 check_platform_shortcut_and_icon_SiteA🌕 +install_menu_option_SiteA🌕 install_policy_app_tabbed_no_shortcut_SiteA🌓 check_platform_shortcut_and_icon_SiteA🌕 +install_menu_option_SiteA🌕 install_policy_app_windowed_no_shortcut_SiteA🌓 check_platform_shortcut_and_icon_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_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_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_and_icon_SiteA🌕 +install_policy_app_tabbed_shortcut_SiteA🌓 install_omnibox_icon_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌕 +install_policy_app_tabbed_shortcut_SiteA🌓 install_menu_option_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌕 +install_policy_app_tabbed_no_shortcut_SiteA🌓 install_create_shortcut_windowed_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌕 +install_policy_app_tabbed_no_shortcut_SiteA🌓 install_omnibox_icon_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌕 +install_policy_app_tabbed_no_shortcut_SiteA🌓 install_menu_option_SiteA🌕 check_platform_shortcut_and_icon_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_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_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🌕 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_and_icon_SiteA🌕 +install_create_shortcut_tabbed_SiteA🌕 install_policy_app_tabbed_no_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌕 +install_create_shortcut_tabbed_SiteA🌕 install_policy_app_windowed_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌕 +install_create_shortcut_tabbed_SiteA🌕 install_policy_app_tabbed_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_platform_shortcut_and_icon_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_and_icon_SiteA🌕 +install_create_shortcut_windowed_SiteA🌕 install_policy_app_tabbed_no_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌕 +install_create_shortcut_windowed_SiteA🌕 install_policy_app_windowed_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌕 +install_create_shortcut_windowed_SiteA🌕 install_policy_app_tabbed_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌕 +install_omnibox_icon_SiteA🌕 install_policy_app_windowed_no_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌕 +install_omnibox_icon_SiteA🌕 install_policy_app_tabbed_no_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌕 +install_omnibox_icon_SiteA🌕 install_policy_app_windowed_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌕 +install_omnibox_icon_SiteA🌕 install_policy_app_tabbed_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌕 +install_menu_option_SiteA🌕 install_policy_app_windowed_no_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌕 +install_menu_option_SiteA🌕 install_policy_app_tabbed_no_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌕 +install_menu_option_SiteA🌕 install_policy_app_windowed_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌕 +install_menu_option_SiteA🌕 install_policy_app_tabbed_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_platform_shortcut_and_icon_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_and_icon_SiteA🌕 +install_policy_app_tabbed_shortcut_SiteA🌓 install_omnibox_icon_SiteA🌕 uninstall_policy_app_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌕 +install_policy_app_tabbed_shortcut_SiteA🌓 install_menu_option_SiteA🌕 uninstall_policy_app_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌕 +install_policy_app_tabbed_no_shortcut_SiteA🌓 install_create_shortcut_windowed_SiteA🌕 uninstall_policy_app_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌕 +install_policy_app_tabbed_no_shortcut_SiteA🌓 install_omnibox_icon_SiteA🌕 uninstall_policy_app_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌕 +install_policy_app_tabbed_no_shortcut_SiteA🌓 install_menu_option_SiteA🌕 uninstall_policy_app_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌕 +install_create_shortcut_windowed_SiteA🌕 close_pwa🌕 manifest_update_colors_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_color_correct_SiteA🌑 +install_create_shortcut_windowed_SiteA🌕 close_pwa🌕 manifest_update_colors_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_color_correct_SiteA🌑 +install_create_shortcut_windowed_SiteA🌕 close_pwa🌕 manifest_update_colors_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_color_correct_SiteA🌑 +install_create_shortcut_windowed_SiteA🌕 close_pwa🌕 manifest_update_colors_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_color_correct_SiteA🌑 +install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_colors_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_color_correct_SiteA🌑 +install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_colors_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_color_correct_SiteA🌑 +install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_colors_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_color_correct_SiteA🌑 +install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_colors_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_color_correct_SiteA🌑 +install_menu_option_SiteA🌕 close_pwa🌕 manifest_update_colors_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_color_correct_SiteA🌑 +install_menu_option_SiteA🌕 close_pwa🌕 manifest_update_colors_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_color_correct_SiteA🌑 +install_menu_option_SiteA🌕 close_pwa🌕 manifest_update_colors_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_color_correct_SiteA🌑 +install_menu_option_SiteA🌕 close_pwa🌕 manifest_update_colors_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_color_correct_SiteA🌑 +install_create_shortcut_windowed_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_menu_option_SiteA🌕 check_tab_not_created🌕 +install_create_shortcut_windowed_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_launch_icon_SiteA🌕 check_tab_not_created🌕 +install_create_shortcut_windowed_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_chrome_apps_SiteA🌓 check_tab_not_created🌕 +install_create_shortcut_windowed_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_platform_shortcut_SiteA🌓 check_tab_not_created🌕 +install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_menu_option_SiteA🌕 check_tab_not_created🌕 +install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_launch_icon_SiteA🌕 check_tab_not_created🌕 +install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_chrome_apps_SiteA🌓 check_tab_not_created🌕 +install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_platform_shortcut_SiteA🌓 check_tab_not_created🌕 +install_menu_option_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_menu_option_SiteA🌕 check_tab_not_created🌕 +install_menu_option_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_launch_icon_SiteA🌕 check_tab_not_created🌕 +install_menu_option_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_chrome_apps_SiteA🌓 check_tab_not_created🌕 +install_menu_option_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_platform_shortcut_SiteA🌓 check_tab_not_created🌕 +install_create_shortcut_windowed_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_menu_option_SiteA🌕 check_window_created🌕 +install_create_shortcut_windowed_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_launch_icon_SiteA🌕 check_window_created🌕 +install_create_shortcut_windowed_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_chrome_apps_SiteA🌓 check_window_created🌕 +install_create_shortcut_windowed_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_platform_shortcut_SiteA🌓 check_window_created🌕 +install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_menu_option_SiteA🌕 check_window_created🌕 +install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_launch_icon_SiteA🌕 check_window_created🌕 +install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_chrome_apps_SiteA🌓 check_window_created🌕 +install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_platform_shortcut_SiteA🌓 check_window_created🌕 +install_menu_option_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_menu_option_SiteA🌕 check_window_created🌕 +install_menu_option_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_launch_icon_SiteA🌕 check_window_created🌕 +install_menu_option_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_chrome_apps_SiteA🌓 check_window_created🌕 +install_menu_option_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_platform_shortcut_SiteA🌓 check_window_created🌕 +install_create_shortcut_windowed_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_menu_option_SiteA🌕 check_window_display_minimal🌕 +install_create_shortcut_windowed_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_launch_icon_SiteA🌕 check_window_display_minimal🌕 +install_create_shortcut_windowed_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_chrome_apps_SiteA🌓 check_window_display_minimal🌕 +install_create_shortcut_windowed_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_platform_shortcut_SiteA🌓 check_window_display_minimal🌕 +install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_menu_option_SiteA🌕 check_window_display_minimal🌕 +install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_launch_icon_SiteA🌕 check_window_display_minimal🌕 +install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_chrome_apps_SiteA🌓 check_window_display_minimal🌕 +install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_platform_shortcut_SiteA🌓 check_window_display_minimal🌕 +install_menu_option_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_menu_option_SiteA🌕 check_window_display_minimal🌕 +install_menu_option_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_launch_icon_SiteA🌕 check_window_display_minimal🌕 +install_menu_option_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_chrome_apps_SiteA🌓 check_window_display_minimal🌕 +install_menu_option_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_platform_shortcut_SiteA🌓 check_window_display_minimal🌕 +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_SiteAFoo🌕 manifest_update_scope_site_a_foo_to_SiteARoot🌕 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_SiteARoot🌕 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_SiteARoot🌕 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_SiteARoot🌕 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_SiteARoot🌕 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_SiteARoot🌕 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_SiteARoot🌕 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_SiteARoot🌕 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_SiteARoot🌕 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_SiteARoot🌕 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_SiteARoot🌕 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_SiteARoot🌕 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_SiteARoot🌕 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_SiteARoot🌕 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_SiteARoot🌕 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_SiteARoot🌕 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_SiteARoot🌕 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_SiteARoot🌕 launch_from_platform_shortcut_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_SiteARoot🌕 navigate_browser_SiteABar🌕 check_install_icon_not_shown🌕 +install_omnibox_icon_SiteAFoo🌕 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteARoot🌕 navigate_browser_SiteABar🌕 check_install_icon_not_shown🌕 +install_menu_option_SiteAFoo🌕 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteARoot🌕 navigate_browser_SiteABar🌕 check_install_icon_not_shown🌕 +install_create_shortcut_windowed_SiteAFoo🌕 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteARoot🌕 navigate_browser_SiteABar🌕 check_launch_icon_shown🌕 +install_omnibox_icon_SiteAFoo🌕 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteARoot🌕 navigate_browser_SiteABar🌕 check_launch_icon_shown🌕 +install_menu_option_SiteAFoo🌕 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteARoot🌕 navigate_browser_SiteABar🌕 check_launch_icon_shown🌕 +install_create_shortcut_windowed_SiteAFoo🌕 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteARoot🌕 navigate_browser_SiteAFoo🌕 check_install_icon_not_shown🌕 +install_omnibox_icon_SiteAFoo🌕 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteARoot🌕 navigate_browser_SiteAFoo🌕 check_install_icon_not_shown🌕 +install_menu_option_SiteAFoo🌕 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteARoot🌕 navigate_browser_SiteAFoo🌕 check_install_icon_not_shown🌕 +install_create_shortcut_windowed_SiteAFoo🌕 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteARoot🌕 navigate_browser_SiteAFoo🌕 check_launch_icon_shown🌕 +install_omnibox_icon_SiteAFoo🌕 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteARoot🌕 navigate_browser_SiteAFoo🌕 check_launch_icon_shown🌕 +install_menu_option_SiteAFoo🌕 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteARoot🌕 navigate_browser_SiteAFoo🌕 check_launch_icon_shown🌕 +switch_incognito_profile🌑 navigate_browser_SiteA🌑 check_create_shortcut_not_shown🌑 +switch_incognito_profile🌑 navigate_browser_SiteC🌑 check_create_shortcut_not_shown🌑 +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🌕 +navigate_browser_SiteA🌕 check_create_shortcut_shown🌑 +navigate_browser_SiteAFoo🌕 check_install_icon_shown🌕 +navigate_browser_SiteC🌕 check_create_shortcut_shown🌑 +navigate_browser_SiteC🌕 check_install_icon_not_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_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🌕 +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🌕 +install_create_shortcut_windowed_SiteA🌕 navigate_pwa_site_a_to_SiteB🌕 check_app_title_site_a_is_SiteA🌑 +install_omnibox_icon_SiteA🌕 navigate_pwa_site_a_to_SiteB🌕 check_app_title_site_a_is_SiteA🌑 +install_menu_option_SiteA🌕 navigate_pwa_site_a_to_SiteB🌕 check_app_title_site_a_is_SiteA🌑 +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🌑 +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_SiteWco🌕 check_window_controls_overlay_toggle_SiteWco_Shown🌕 +install_omnibox_icon_SiteWco🌕 check_window_controls_overlay_toggle_SiteWco_Shown🌕 +install_policy_app_windowed_no_shortcut_SiteWco🌓 check_window_controls_overlay_toggle_SiteWco_Shown🌕 +install_policy_app_windowed_shortcut_SiteWco🌓 check_window_controls_overlay_toggle_SiteWco_Shown🌕 +install_menu_option_SiteWco🌕 check_window_controls_overlay_toggle_SiteWco_Shown🌕 +install_create_shortcut_windowed_SiteA🌕 check_window_controls_overlay_toggle_SiteA_NotShown🌕 +install_omnibox_icon_SiteA🌕 check_window_controls_overlay_toggle_SiteA_NotShown🌕 +install_policy_app_windowed_no_shortcut_SiteA🌓 check_window_controls_overlay_toggle_SiteA_NotShown🌕 +install_policy_app_windowed_shortcut_SiteA🌓 check_window_controls_overlay_toggle_SiteA_NotShown🌕 +install_menu_option_SiteA🌕 check_window_controls_overlay_toggle_SiteA_NotShown🌕 +install_create_shortcut_windowed_SiteWco🌕 enable_window_controls_overlay_SiteWco🌕 check_window_controls_overlay_SiteWco_On🌕 +install_omnibox_icon_SiteWco🌕 enable_window_controls_overlay_SiteWco🌕 check_window_controls_overlay_SiteWco_On🌕 +install_policy_app_windowed_no_shortcut_SiteWco🌓 enable_window_controls_overlay_SiteWco🌕 check_window_controls_overlay_SiteWco_On🌕 +install_policy_app_windowed_shortcut_SiteWco🌓 enable_window_controls_overlay_SiteWco🌕 check_window_controls_overlay_SiteWco_On🌕 +install_menu_option_SiteWco🌕 enable_window_controls_overlay_SiteWco🌕 check_window_controls_overlay_SiteWco_On🌕 +install_create_shortcut_windowed_SiteWco🌕 enable_window_controls_overlay_SiteWco🌕 check_window_controls_overlay_toggle_SiteWco_Shown🌕 +install_omnibox_icon_SiteWco🌕 enable_window_controls_overlay_SiteWco🌕 check_window_controls_overlay_toggle_SiteWco_Shown🌕 +install_policy_app_windowed_no_shortcut_SiteWco🌓 enable_window_controls_overlay_SiteWco🌕 check_window_controls_overlay_toggle_SiteWco_Shown🌕 +install_policy_app_windowed_shortcut_SiteWco🌓 enable_window_controls_overlay_SiteWco🌕 check_window_controls_overlay_toggle_SiteWco_Shown🌕 +install_menu_option_SiteWco🌕 enable_window_controls_overlay_SiteWco🌕 check_window_controls_overlay_toggle_SiteWco_Shown🌕 +install_create_shortcut_windowed_SiteWco🌕 enable_window_controls_overlay_SiteWco🌕 disable_window_controls_overlay_SiteWco🌕 check_window_controls_overlay_SiteWco_Off🌕 +install_omnibox_icon_SiteWco🌕 enable_window_controls_overlay_SiteWco🌕 disable_window_controls_overlay_SiteWco🌕 check_window_controls_overlay_SiteWco_Off🌕 +install_policy_app_windowed_no_shortcut_SiteWco🌓 enable_window_controls_overlay_SiteWco🌕 disable_window_controls_overlay_SiteWco🌕 check_window_controls_overlay_SiteWco_Off🌕 +install_policy_app_windowed_shortcut_SiteWco🌓 enable_window_controls_overlay_SiteWco🌕 disable_window_controls_overlay_SiteWco🌕 check_window_controls_overlay_SiteWco_Off🌕 +install_menu_option_SiteWco🌕 enable_window_controls_overlay_SiteWco🌕 disable_window_controls_overlay_SiteWco🌕 check_window_controls_overlay_SiteWco_Off🌕 +install_create_shortcut_windowed_SiteWco🌕 enable_window_controls_overlay_SiteWco🌕 disable_window_controls_overlay_SiteWco🌕 check_window_controls_overlay_toggle_SiteWco_Shown🌕 +install_omnibox_icon_SiteWco🌕 enable_window_controls_overlay_SiteWco🌕 disable_window_controls_overlay_SiteWco🌕 check_window_controls_overlay_toggle_SiteWco_Shown🌕 +install_policy_app_windowed_no_shortcut_SiteWco🌓 enable_window_controls_overlay_SiteWco🌕 disable_window_controls_overlay_SiteWco🌕 check_window_controls_overlay_toggle_SiteWco_Shown🌕 +install_policy_app_windowed_shortcut_SiteWco🌓 enable_window_controls_overlay_SiteWco🌕 disable_window_controls_overlay_SiteWco🌕 check_window_controls_overlay_toggle_SiteWco_Shown🌕 +install_menu_option_SiteWco🌕 enable_window_controls_overlay_SiteWco🌕 disable_window_controls_overlay_SiteWco🌕 check_window_controls_overlay_toggle_SiteWco_Shown🌕 +install_create_shortcut_windowed_SiteWco🌕 enable_window_controls_overlay_SiteWco🌕 launch_from_menu_option_SiteWco🌕 check_window_controls_overlay_SiteWco_On🌕 +install_create_shortcut_windowed_SiteWco🌕 enable_window_controls_overlay_SiteWco🌕 launch_from_launch_icon_SiteWco🌕 check_window_controls_overlay_SiteWco_On🌕 +install_create_shortcut_windowed_SiteWco🌕 enable_window_controls_overlay_SiteWco🌕 launch_from_chrome_apps_SiteWco🌓 check_window_controls_overlay_SiteWco_On🌕 +install_create_shortcut_windowed_SiteWco🌕 enable_window_controls_overlay_SiteWco🌕 launch_from_platform_shortcut_SiteWco🌓 check_window_controls_overlay_SiteWco_On🌕 +install_omnibox_icon_SiteWco🌕 enable_window_controls_overlay_SiteWco🌕 launch_from_menu_option_SiteWco🌕 check_window_controls_overlay_SiteWco_On🌕 +install_omnibox_icon_SiteWco🌕 enable_window_controls_overlay_SiteWco🌕 launch_from_launch_icon_SiteWco🌕 check_window_controls_overlay_SiteWco_On🌕 +install_omnibox_icon_SiteWco🌕 enable_window_controls_overlay_SiteWco🌕 launch_from_chrome_apps_SiteWco🌓 check_window_controls_overlay_SiteWco_On🌕 +install_omnibox_icon_SiteWco🌕 enable_window_controls_overlay_SiteWco🌕 launch_from_platform_shortcut_SiteWco🌓 check_window_controls_overlay_SiteWco_On🌕 +install_policy_app_windowed_no_shortcut_SiteWco🌓 enable_window_controls_overlay_SiteWco🌕 launch_from_menu_option_SiteWco🌕 check_window_controls_overlay_SiteWco_On🌕 +install_policy_app_windowed_no_shortcut_SiteWco🌓 enable_window_controls_overlay_SiteWco🌕 launch_from_launch_icon_SiteWco🌕 check_window_controls_overlay_SiteWco_On🌕 +install_policy_app_windowed_no_shortcut_SiteWco🌓 enable_window_controls_overlay_SiteWco🌕 launch_from_chrome_apps_SiteWco🌓 check_window_controls_overlay_SiteWco_On🌕 +install_policy_app_windowed_no_shortcut_SiteWco🌓 enable_window_controls_overlay_SiteWco🌕 launch_from_platform_shortcut_SiteWco🌓 check_window_controls_overlay_SiteWco_On🌕 +install_policy_app_windowed_shortcut_SiteWco🌓 enable_window_controls_overlay_SiteWco🌕 launch_from_menu_option_SiteWco🌕 check_window_controls_overlay_SiteWco_On🌕 +install_policy_app_windowed_shortcut_SiteWco🌓 enable_window_controls_overlay_SiteWco🌕 launch_from_launch_icon_SiteWco🌕 check_window_controls_overlay_SiteWco_On🌕 +install_policy_app_windowed_shortcut_SiteWco🌓 enable_window_controls_overlay_SiteWco🌕 launch_from_chrome_apps_SiteWco🌓 check_window_controls_overlay_SiteWco_On🌕 +install_policy_app_windowed_shortcut_SiteWco🌓 enable_window_controls_overlay_SiteWco🌕 launch_from_platform_shortcut_SiteWco🌓 check_window_controls_overlay_SiteWco_On🌕 +install_menu_option_SiteWco🌕 enable_window_controls_overlay_SiteWco🌕 launch_from_menu_option_SiteWco🌕 check_window_controls_overlay_SiteWco_On🌕 +install_menu_option_SiteWco🌕 enable_window_controls_overlay_SiteWco🌕 launch_from_launch_icon_SiteWco🌕 check_window_controls_overlay_SiteWco_On🌕 +install_menu_option_SiteWco🌕 enable_window_controls_overlay_SiteWco🌕 launch_from_chrome_apps_SiteWco🌓 check_window_controls_overlay_SiteWco_On🌕 +install_menu_option_SiteWco🌕 enable_window_controls_overlay_SiteWco🌕 launch_from_platform_shortcut_SiteWco🌓 check_window_controls_overlay_SiteWco_On🌕 +install_create_shortcut_windowed_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_menu_option_SiteB🌑 check_window_controls_overlay_toggle_SiteWco_Shown🌑 +install_create_shortcut_windowed_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_launch_icon_SiteB🌑 check_window_controls_overlay_toggle_SiteWco_Shown🌑 +install_create_shortcut_windowed_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_chrome_apps_SiteB🌑 check_window_controls_overlay_toggle_SiteWco_Shown🌑 +install_create_shortcut_windowed_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_platform_shortcut_SiteB🌑 check_window_controls_overlay_toggle_SiteWco_Shown🌑 +install_omnibox_icon_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_menu_option_SiteB🌑 check_window_controls_overlay_toggle_SiteWco_Shown🌑 +install_omnibox_icon_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_launch_icon_SiteB🌑 check_window_controls_overlay_toggle_SiteWco_Shown🌑 +install_omnibox_icon_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_chrome_apps_SiteB🌑 check_window_controls_overlay_toggle_SiteWco_Shown🌑 +install_omnibox_icon_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_platform_shortcut_SiteB🌑 check_window_controls_overlay_toggle_SiteWco_Shown🌑 +install_policy_app_windowed_no_shortcut_SiteB🌓 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_menu_option_SiteB🌑 check_window_controls_overlay_toggle_SiteWco_Shown🌑 +install_policy_app_windowed_no_shortcut_SiteB🌓 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_launch_icon_SiteB🌑 check_window_controls_overlay_toggle_SiteWco_Shown🌑 +install_policy_app_windowed_no_shortcut_SiteB🌓 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_chrome_apps_SiteB🌑 check_window_controls_overlay_toggle_SiteWco_Shown🌑 +install_policy_app_windowed_no_shortcut_SiteB🌓 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_platform_shortcut_SiteB🌑 check_window_controls_overlay_toggle_SiteWco_Shown🌑 +install_policy_app_windowed_shortcut_SiteB🌓 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_menu_option_SiteB🌑 check_window_controls_overlay_toggle_SiteWco_Shown🌑 +install_policy_app_windowed_shortcut_SiteB🌓 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_launch_icon_SiteB🌑 check_window_controls_overlay_toggle_SiteWco_Shown🌑 +install_policy_app_windowed_shortcut_SiteB🌓 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_chrome_apps_SiteB🌑 check_window_controls_overlay_toggle_SiteWco_Shown🌑 +install_policy_app_windowed_shortcut_SiteB🌓 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_platform_shortcut_SiteB🌑 check_window_controls_overlay_toggle_SiteWco_Shown🌑 +install_menu_option_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_menu_option_SiteB🌑 check_window_controls_overlay_toggle_SiteWco_Shown🌑 +install_menu_option_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_launch_icon_SiteB🌑 check_window_controls_overlay_toggle_SiteWco_Shown🌑 +install_menu_option_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_chrome_apps_SiteB🌑 check_window_controls_overlay_toggle_SiteWco_Shown🌑 +install_menu_option_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_platform_shortcut_SiteB🌑 check_window_controls_overlay_toggle_SiteWco_Shown🌑 +install_create_shortcut_windowed_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_menu_option_SiteB🌑 check_window_controls_overlay_toggle_SiteWco_Shown🌑 +install_create_shortcut_windowed_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_launch_icon_SiteB🌑 check_window_controls_overlay_toggle_SiteWco_Shown🌑 +install_create_shortcut_windowed_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_chrome_apps_SiteB🌑 check_window_controls_overlay_toggle_SiteWco_Shown🌑 +install_create_shortcut_windowed_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_platform_shortcut_SiteB🌑 check_window_controls_overlay_toggle_SiteWco_Shown🌑 +install_omnibox_icon_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_menu_option_SiteB🌑 check_window_controls_overlay_toggle_SiteWco_Shown🌑 +install_omnibox_icon_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_launch_icon_SiteB🌑 check_window_controls_overlay_toggle_SiteWco_Shown🌑 +install_omnibox_icon_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_chrome_apps_SiteB🌑 check_window_controls_overlay_toggle_SiteWco_Shown🌑 +install_omnibox_icon_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_platform_shortcut_SiteB🌑 check_window_controls_overlay_toggle_SiteWco_Shown🌑 +install_policy_app_windowed_no_shortcut_SiteB🌓 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_menu_option_SiteB🌑 check_window_controls_overlay_toggle_SiteWco_Shown🌑 +install_policy_app_windowed_no_shortcut_SiteB🌓 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_launch_icon_SiteB🌑 check_window_controls_overlay_toggle_SiteWco_Shown🌑 +install_policy_app_windowed_no_shortcut_SiteB🌓 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_chrome_apps_SiteB🌑 check_window_controls_overlay_toggle_SiteWco_Shown🌑 +install_policy_app_windowed_no_shortcut_SiteB🌓 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_platform_shortcut_SiteB🌑 check_window_controls_overlay_toggle_SiteWco_Shown🌑 +install_policy_app_windowed_shortcut_SiteB🌓 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_menu_option_SiteB🌑 check_window_controls_overlay_toggle_SiteWco_Shown🌑 +install_policy_app_windowed_shortcut_SiteB🌓 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_launch_icon_SiteB🌑 check_window_controls_overlay_toggle_SiteWco_Shown🌑 +install_policy_app_windowed_shortcut_SiteB🌓 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_chrome_apps_SiteB🌑 check_window_controls_overlay_toggle_SiteWco_Shown🌑 +install_policy_app_windowed_shortcut_SiteB🌓 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_platform_shortcut_SiteB🌑 check_window_controls_overlay_toggle_SiteWco_Shown🌑 +install_menu_option_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_menu_option_SiteB🌑 check_window_controls_overlay_toggle_SiteWco_Shown🌑 +install_menu_option_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_launch_icon_SiteB🌑 check_window_controls_overlay_toggle_SiteWco_Shown🌑 +install_menu_option_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_chrome_apps_SiteB🌑 check_window_controls_overlay_toggle_SiteWco_Shown🌑 +install_menu_option_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_platform_shortcut_SiteB🌑 check_window_controls_overlay_toggle_SiteWco_Shown🌑 +install_create_shortcut_windowed_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_menu_option_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_SiteB_Off🌑 +install_create_shortcut_windowed_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_launch_icon_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_SiteB_Off🌑 +install_create_shortcut_windowed_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_chrome_apps_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_SiteB_Off🌑 +install_create_shortcut_windowed_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_platform_shortcut_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_SiteB_Off🌑 +install_omnibox_icon_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_menu_option_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_SiteB_Off🌑 +install_omnibox_icon_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_launch_icon_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_SiteB_Off🌑 +install_omnibox_icon_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_chrome_apps_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_SiteB_Off🌑 +install_omnibox_icon_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_platform_shortcut_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_SiteB_Off🌑 +install_policy_app_windowed_no_shortcut_SiteB🌓 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_menu_option_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_SiteB_Off🌑 +install_policy_app_windowed_no_shortcut_SiteB🌓 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_launch_icon_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_SiteB_Off🌑 +install_policy_app_windowed_no_shortcut_SiteB🌓 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_chrome_apps_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_SiteB_Off🌑 +install_policy_app_windowed_no_shortcut_SiteB🌓 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_platform_shortcut_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_SiteB_Off🌑 +install_policy_app_windowed_shortcut_SiteB🌓 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_menu_option_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_SiteB_Off🌑 +install_policy_app_windowed_shortcut_SiteB🌓 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_launch_icon_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_SiteB_Off🌑 +install_policy_app_windowed_shortcut_SiteB🌓 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_chrome_apps_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_SiteB_Off🌑 +install_policy_app_windowed_shortcut_SiteB🌓 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_platform_shortcut_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_SiteB_Off🌑 +install_menu_option_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_menu_option_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_SiteB_Off🌑 +install_menu_option_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_launch_icon_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_SiteB_Off🌑 +install_menu_option_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_chrome_apps_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_SiteB_Off🌑 +install_menu_option_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_platform_shortcut_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_SiteB_Off🌑 +install_create_shortcut_windowed_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_menu_option_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_toggle_SiteB_Shown🌑 +install_create_shortcut_windowed_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_launch_icon_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_toggle_SiteB_Shown🌑 +install_create_shortcut_windowed_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_chrome_apps_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_toggle_SiteB_Shown🌑 +install_create_shortcut_windowed_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_platform_shortcut_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_toggle_SiteB_Shown🌑 +install_omnibox_icon_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_menu_option_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_toggle_SiteB_Shown🌑 +install_omnibox_icon_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_launch_icon_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_toggle_SiteB_Shown🌑 +install_omnibox_icon_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_chrome_apps_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_toggle_SiteB_Shown🌑 +install_omnibox_icon_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_platform_shortcut_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_toggle_SiteB_Shown🌑 +install_policy_app_windowed_no_shortcut_SiteB🌓 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_menu_option_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_toggle_SiteB_Shown🌑 +install_policy_app_windowed_no_shortcut_SiteB🌓 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_launch_icon_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_toggle_SiteB_Shown🌑 +install_policy_app_windowed_no_shortcut_SiteB🌓 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_chrome_apps_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_toggle_SiteB_Shown🌑 +install_policy_app_windowed_no_shortcut_SiteB🌓 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_platform_shortcut_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_toggle_SiteB_Shown🌑 +install_policy_app_windowed_shortcut_SiteB🌓 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_menu_option_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_toggle_SiteB_Shown🌑 +install_policy_app_windowed_shortcut_SiteB🌓 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_launch_icon_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_toggle_SiteB_Shown🌑 +install_policy_app_windowed_shortcut_SiteB🌓 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_chrome_apps_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_toggle_SiteB_Shown🌑 +install_policy_app_windowed_shortcut_SiteB🌓 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_platform_shortcut_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_toggle_SiteB_Shown🌑 +install_menu_option_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_menu_option_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_toggle_SiteB_Shown🌑 +install_menu_option_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_launch_icon_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_toggle_SiteB_Shown🌑 +install_menu_option_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_chrome_apps_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_toggle_SiteB_Shown🌑 +install_menu_option_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_platform_shortcut_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_toggle_SiteB_Shown🌑 +install_create_shortcut_windowed_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_menu_option_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_toggle_SiteB_Shown🌑 +install_create_shortcut_windowed_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_launch_icon_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_toggle_SiteB_Shown🌑 +install_create_shortcut_windowed_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_chrome_apps_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_toggle_SiteB_Shown🌑 +install_create_shortcut_windowed_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_platform_shortcut_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_toggle_SiteB_Shown🌑 +install_omnibox_icon_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_menu_option_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_toggle_SiteB_Shown🌑 +install_omnibox_icon_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_launch_icon_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_toggle_SiteB_Shown🌑 +install_omnibox_icon_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_chrome_apps_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_toggle_SiteB_Shown🌑 +install_omnibox_icon_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_platform_shortcut_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_toggle_SiteB_Shown🌑 +install_policy_app_windowed_no_shortcut_SiteB🌓 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_menu_option_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_toggle_SiteB_Shown🌑 +install_policy_app_windowed_no_shortcut_SiteB🌓 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_launch_icon_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_toggle_SiteB_Shown🌑 +install_policy_app_windowed_no_shortcut_SiteB🌓 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_chrome_apps_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_toggle_SiteB_Shown🌑 +install_policy_app_windowed_no_shortcut_SiteB🌓 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_platform_shortcut_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_toggle_SiteB_Shown🌑 +install_policy_app_windowed_shortcut_SiteB🌓 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_menu_option_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_toggle_SiteB_Shown🌑 +install_policy_app_windowed_shortcut_SiteB🌓 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_launch_icon_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_toggle_SiteB_Shown🌑 +install_policy_app_windowed_shortcut_SiteB🌓 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_chrome_apps_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_toggle_SiteB_Shown🌑 +install_policy_app_windowed_shortcut_SiteB🌓 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_platform_shortcut_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_toggle_SiteB_Shown🌑 +install_menu_option_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_menu_option_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_toggle_SiteB_Shown🌑 +install_menu_option_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_launch_icon_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_toggle_SiteB_Shown🌑 +install_menu_option_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_chrome_apps_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_toggle_SiteB_Shown🌑 +install_menu_option_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_platform_shortcut_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_toggle_SiteB_Shown🌑 +install_create_shortcut_windowed_SiteWco🌕 manifest_update_display_SiteWco_Standalone🌕 await_manifest_update_SiteWco🌑 launch_from_menu_option_SiteWco🌑 check_window_controls_overlay_toggle_SiteWco_NotShown🌑 +install_create_shortcut_windowed_SiteWco🌕 manifest_update_display_SiteWco_Standalone🌕 await_manifest_update_SiteWco🌑 launch_from_launch_icon_SiteWco🌑 check_window_controls_overlay_toggle_SiteWco_NotShown🌑 +install_create_shortcut_windowed_SiteWco🌕 manifest_update_display_SiteWco_Standalone🌕 await_manifest_update_SiteWco🌑 launch_from_chrome_apps_SiteWco🌑 check_window_controls_overlay_toggle_SiteWco_NotShown🌑 +install_create_shortcut_windowed_SiteWco🌕 manifest_update_display_SiteWco_Standalone🌕 await_manifest_update_SiteWco🌑 launch_from_platform_shortcut_SiteWco🌑 check_window_controls_overlay_toggle_SiteWco_NotShown🌑 +install_omnibox_icon_SiteWco🌕 manifest_update_display_SiteWco_Standalone🌕 await_manifest_update_SiteWco🌑 launch_from_menu_option_SiteWco🌑 check_window_controls_overlay_toggle_SiteWco_NotShown🌑 +install_omnibox_icon_SiteWco🌕 manifest_update_display_SiteWco_Standalone🌕 await_manifest_update_SiteWco🌑 launch_from_launch_icon_SiteWco🌑 check_window_controls_overlay_toggle_SiteWco_NotShown🌑 +install_omnibox_icon_SiteWco🌕 manifest_update_display_SiteWco_Standalone🌕 await_manifest_update_SiteWco🌑 launch_from_chrome_apps_SiteWco🌑 check_window_controls_overlay_toggle_SiteWco_NotShown🌑 +install_omnibox_icon_SiteWco🌕 manifest_update_display_SiteWco_Standalone🌕 await_manifest_update_SiteWco🌑 launch_from_platform_shortcut_SiteWco🌑 check_window_controls_overlay_toggle_SiteWco_NotShown🌑 +install_policy_app_windowed_no_shortcut_SiteWco🌓 manifest_update_display_SiteWco_Standalone🌕 await_manifest_update_SiteWco🌑 launch_from_menu_option_SiteWco🌑 check_window_controls_overlay_toggle_SiteWco_NotShown🌑 +install_policy_app_windowed_no_shortcut_SiteWco🌓 manifest_update_display_SiteWco_Standalone🌕 await_manifest_update_SiteWco🌑 launch_from_launch_icon_SiteWco🌑 check_window_controls_overlay_toggle_SiteWco_NotShown🌑 +install_policy_app_windowed_no_shortcut_SiteWco🌓 manifest_update_display_SiteWco_Standalone🌕 await_manifest_update_SiteWco🌑 launch_from_chrome_apps_SiteWco🌑 check_window_controls_overlay_toggle_SiteWco_NotShown🌑 +install_policy_app_windowed_no_shortcut_SiteWco🌓 manifest_update_display_SiteWco_Standalone🌕 await_manifest_update_SiteWco🌑 launch_from_platform_shortcut_SiteWco🌑 check_window_controls_overlay_toggle_SiteWco_NotShown🌑 +install_policy_app_windowed_shortcut_SiteWco🌓 manifest_update_display_SiteWco_Standalone🌕 await_manifest_update_SiteWco🌑 launch_from_menu_option_SiteWco🌑 check_window_controls_overlay_toggle_SiteWco_NotShown🌑 +install_policy_app_windowed_shortcut_SiteWco🌓 manifest_update_display_SiteWco_Standalone🌕 await_manifest_update_SiteWco🌑 launch_from_launch_icon_SiteWco🌑 check_window_controls_overlay_toggle_SiteWco_NotShown🌑 +install_policy_app_windowed_shortcut_SiteWco🌓 manifest_update_display_SiteWco_Standalone🌕 await_manifest_update_SiteWco🌑 launch_from_chrome_apps_SiteWco🌑 check_window_controls_overlay_toggle_SiteWco_NotShown🌑 +install_policy_app_windowed_shortcut_SiteWco🌓 manifest_update_display_SiteWco_Standalone🌕 await_manifest_update_SiteWco🌑 launch_from_platform_shortcut_SiteWco🌑 check_window_controls_overlay_toggle_SiteWco_NotShown🌑 +install_menu_option_SiteWco🌕 manifest_update_display_SiteWco_Standalone🌕 await_manifest_update_SiteWco🌑 launch_from_menu_option_SiteWco🌑 check_window_controls_overlay_toggle_SiteWco_NotShown🌑 +install_menu_option_SiteWco🌕 manifest_update_display_SiteWco_Standalone🌕 await_manifest_update_SiteWco🌑 launch_from_launch_icon_SiteWco🌑 check_window_controls_overlay_toggle_SiteWco_NotShown🌑 +install_menu_option_SiteWco🌕 manifest_update_display_SiteWco_Standalone🌕 await_manifest_update_SiteWco🌑 launch_from_chrome_apps_SiteWco🌑 check_window_controls_overlay_toggle_SiteWco_NotShown🌑 +install_menu_option_SiteWco🌕 manifest_update_display_SiteWco_Standalone🌕 await_manifest_update_SiteWco🌑 launch_from_platform_shortcut_SiteWco🌑 check_window_controls_overlay_toggle_SiteWco_NotShown🌑 +install_create_shortcut_windowed_SiteWco🌕 manifest_update_display_SiteWco_Standalone🌕 await_manifest_update_SiteWco🌑 launch_from_menu_option_SiteWco🌑 check_window_controls_overlay_SiteWco_Off🌑 +install_create_shortcut_windowed_SiteWco🌕 manifest_update_display_SiteWco_Standalone🌕 await_manifest_update_SiteWco🌑 launch_from_launch_icon_SiteWco🌑 check_window_controls_overlay_SiteWco_Off🌑 +install_create_shortcut_windowed_SiteWco🌕 manifest_update_display_SiteWco_Standalone🌕 await_manifest_update_SiteWco🌑 launch_from_chrome_apps_SiteWco🌑 check_window_controls_overlay_SiteWco_Off🌑 +install_create_shortcut_windowed_SiteWco🌕 manifest_update_display_SiteWco_Standalone🌕 await_manifest_update_SiteWco🌑 launch_from_platform_shortcut_SiteWco🌑 check_window_controls_overlay_SiteWco_Off🌑 +install_omnibox_icon_SiteWco🌕 manifest_update_display_SiteWco_Standalone🌕 await_manifest_update_SiteWco🌑 launch_from_menu_option_SiteWco🌑 check_window_controls_overlay_SiteWco_Off🌑 +install_omnibox_icon_SiteWco🌕 manifest_update_display_SiteWco_Standalone🌕 await_manifest_update_SiteWco🌑 launch_from_launch_icon_SiteWco🌑 check_window_controls_overlay_SiteWco_Off🌑 +install_omnibox_icon_SiteWco🌕 manifest_update_display_SiteWco_Standalone🌕 await_manifest_update_SiteWco🌑 launch_from_chrome_apps_SiteWco🌑 check_window_controls_overlay_SiteWco_Off🌑 +install_omnibox_icon_SiteWco🌕 manifest_update_display_SiteWco_Standalone🌕 await_manifest_update_SiteWco🌑 launch_from_platform_shortcut_SiteWco🌑 check_window_controls_overlay_SiteWco_Off🌑 +install_policy_app_windowed_no_shortcut_SiteWco🌓 manifest_update_display_SiteWco_Standalone🌕 await_manifest_update_SiteWco🌑 launch_from_menu_option_SiteWco🌑 check_window_controls_overlay_SiteWco_Off🌑 +install_policy_app_windowed_no_shortcut_SiteWco🌓 manifest_update_display_SiteWco_Standalone🌕 await_manifest_update_SiteWco🌑 launch_from_launch_icon_SiteWco🌑 check_window_controls_overlay_SiteWco_Off🌑 +install_policy_app_windowed_no_shortcut_SiteWco🌓 manifest_update_display_SiteWco_Standalone🌕 await_manifest_update_SiteWco🌑 launch_from_chrome_apps_SiteWco🌑 check_window_controls_overlay_SiteWco_Off🌑 +install_policy_app_windowed_no_shortcut_SiteWco🌓 manifest_update_display_SiteWco_Standalone🌕 await_manifest_update_SiteWco🌑 launch_from_platform_shortcut_SiteWco🌑 check_window_controls_overlay_SiteWco_Off🌑 +install_policy_app_windowed_shortcut_SiteWco🌓 manifest_update_display_SiteWco_Standalone🌕 await_manifest_update_SiteWco🌑 launch_from_menu_option_SiteWco🌑 check_window_controls_overlay_SiteWco_Off🌑 +install_policy_app_windowed_shortcut_SiteWco🌓 manifest_update_display_SiteWco_Standalone🌕 await_manifest_update_SiteWco🌑 launch_from_launch_icon_SiteWco🌑 check_window_controls_overlay_SiteWco_Off🌑 +install_policy_app_windowed_shortcut_SiteWco🌓 manifest_update_display_SiteWco_Standalone🌕 await_manifest_update_SiteWco🌑 launch_from_chrome_apps_SiteWco🌑 check_window_controls_overlay_SiteWco_Off🌑 +install_policy_app_windowed_shortcut_SiteWco🌓 manifest_update_display_SiteWco_Standalone🌕 await_manifest_update_SiteWco🌑 launch_from_platform_shortcut_SiteWco🌑 check_window_controls_overlay_SiteWco_Off🌑 +install_menu_option_SiteWco🌕 manifest_update_display_SiteWco_Standalone🌕 await_manifest_update_SiteWco🌑 launch_from_menu_option_SiteWco🌑 check_window_controls_overlay_SiteWco_Off🌑 +install_menu_option_SiteWco🌕 manifest_update_display_SiteWco_Standalone🌕 await_manifest_update_SiteWco🌑 launch_from_launch_icon_SiteWco🌑 check_window_controls_overlay_SiteWco_Off🌑 +install_menu_option_SiteWco🌕 manifest_update_display_SiteWco_Standalone🌕 await_manifest_update_SiteWco🌑 launch_from_chrome_apps_SiteWco🌑 check_window_controls_overlay_SiteWco_Off🌑 +install_menu_option_SiteWco🌕 manifest_update_display_SiteWco_Standalone🌕 await_manifest_update_SiteWco🌑 launch_from_platform_shortcut_SiteWco🌑 check_window_controls_overlay_SiteWco_Off🌑 +install_create_shortcut_windowed_SiteB🌕 check_site_handles_file_SiteB_Txt🌑 check_site_handles_file_SiteB_Png🌑 +install_omnibox_icon_SiteB🌕 check_site_handles_file_SiteB_Txt🌑 check_site_handles_file_SiteB_Png🌑 +install_policy_app_windowed_no_shortcut_SiteB🌓 check_site_handles_file_SiteB_Txt🌑 check_site_handles_file_SiteB_Png🌑 +install_policy_app_windowed_shortcut_SiteB🌓 check_site_handles_file_SiteB_Txt🌑 check_site_handles_file_SiteB_Png🌑 +install_menu_option_SiteB🌕 check_site_handles_file_SiteB_Txt🌑 check_site_handles_file_SiteB_Png🌑 +install_create_shortcut_tabbed_SiteB🌕 check_site_handles_file_SiteB_Txt🌑 check_site_handles_file_SiteB_Png🌑 +install_policy_app_tabbed_shortcut_SiteB🌓 check_site_handles_file_SiteB_Txt🌑 check_site_handles_file_SiteB_Png🌑 +install_policy_app_tabbed_no_shortcut_SiteB🌓 check_site_handles_file_SiteB_Txt🌑 check_site_handles_file_SiteB_Png🌑 +install_create_shortcut_windowed_SiteB🌕 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 +install_omnibox_icon_SiteB🌕 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 +install_policy_app_windowed_no_shortcut_SiteB🌓 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 +install_policy_app_windowed_shortcut_SiteB🌓 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 +install_menu_option_SiteB🌕 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 +install_create_shortcut_tabbed_SiteB🌕 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 +install_policy_app_tabbed_shortcut_SiteB🌓 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 +install_policy_app_tabbed_no_shortcut_SiteB🌓 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 +install_create_shortcut_windowed_SiteB🌕 launch_file_OneTextFile🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_One🌑 check_files_loaded_in_site_SiteB_OneTextFile🌑 +install_omnibox_icon_SiteB🌕 launch_file_OneTextFile🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_One🌑 check_files_loaded_in_site_SiteB_OneTextFile🌑 +install_policy_app_windowed_no_shortcut_SiteB🌓 launch_file_OneTextFile🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_One🌑 check_files_loaded_in_site_SiteB_OneTextFile🌑 +install_policy_app_windowed_shortcut_SiteB🌓 launch_file_OneTextFile🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_One🌑 check_files_loaded_in_site_SiteB_OneTextFile🌑 +install_menu_option_SiteB🌕 launch_file_OneTextFile🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_One🌑 check_files_loaded_in_site_SiteB_OneTextFile🌑 +install_create_shortcut_tabbed_SiteB🌕 launch_file_OneTextFile🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_One🌑 check_files_loaded_in_site_SiteB_OneTextFile🌑 +install_policy_app_tabbed_shortcut_SiteB🌓 launch_file_OneTextFile🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_One🌑 check_files_loaded_in_site_SiteB_OneTextFile🌑 +install_policy_app_tabbed_no_shortcut_SiteB🌓 launch_file_OneTextFile🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_One🌑 check_files_loaded_in_site_SiteB_OneTextFile🌑 +install_create_shortcut_windowed_SiteB🌕 launch_file_MultipleTextFiles🌑 check_file_handling_dialog_Shown🌑 +install_omnibox_icon_SiteB🌕 launch_file_MultipleTextFiles🌑 check_file_handling_dialog_Shown🌑 +install_policy_app_windowed_no_shortcut_SiteB🌓 launch_file_MultipleTextFiles🌑 check_file_handling_dialog_Shown🌑 +install_policy_app_windowed_shortcut_SiteB🌓 launch_file_MultipleTextFiles🌑 check_file_handling_dialog_Shown🌑 +install_menu_option_SiteB🌕 launch_file_MultipleTextFiles🌑 check_file_handling_dialog_Shown🌑 +install_create_shortcut_tabbed_SiteB🌕 launch_file_MultipleTextFiles🌑 check_file_handling_dialog_Shown🌑 +install_policy_app_tabbed_shortcut_SiteB🌓 launch_file_MultipleTextFiles🌑 check_file_handling_dialog_Shown🌑 +install_policy_app_tabbed_no_shortcut_SiteB🌓 launch_file_MultipleTextFiles🌑 check_file_handling_dialog_Shown🌑 +install_create_shortcut_windowed_SiteB🌕 launch_file_MultipleTextFiles🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_One🌑 check_files_loaded_in_site_SiteB_MultipleTextFiles🌑 +install_omnibox_icon_SiteB🌕 launch_file_MultipleTextFiles🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_One🌑 check_files_loaded_in_site_SiteB_MultipleTextFiles🌑 +install_policy_app_windowed_no_shortcut_SiteB🌓 launch_file_MultipleTextFiles🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_One🌑 check_files_loaded_in_site_SiteB_MultipleTextFiles🌑 +install_policy_app_windowed_shortcut_SiteB🌓 launch_file_MultipleTextFiles🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_One🌑 check_files_loaded_in_site_SiteB_MultipleTextFiles🌑 +install_menu_option_SiteB🌕 launch_file_MultipleTextFiles🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_One🌑 check_files_loaded_in_site_SiteB_MultipleTextFiles🌑 +install_create_shortcut_tabbed_SiteB🌕 launch_file_MultipleTextFiles🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_One🌑 check_files_loaded_in_site_SiteB_MultipleTextFiles🌑 +install_policy_app_tabbed_shortcut_SiteB🌓 launch_file_MultipleTextFiles🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_One🌑 check_files_loaded_in_site_SiteB_MultipleTextFiles🌑 +install_policy_app_tabbed_no_shortcut_SiteB🌓 launch_file_MultipleTextFiles🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_One🌑 check_files_loaded_in_site_SiteB_MultipleTextFiles🌑 +install_create_shortcut_windowed_SiteB🌕 launch_file_OnePngFile🌑 check_file_handling_dialog_Shown🌑 +install_omnibox_icon_SiteB🌕 launch_file_OnePngFile🌑 check_file_handling_dialog_Shown🌑 +install_policy_app_windowed_no_shortcut_SiteB🌓 launch_file_OnePngFile🌑 check_file_handling_dialog_Shown🌑 +install_policy_app_windowed_shortcut_SiteB🌓 launch_file_OnePngFile🌑 check_file_handling_dialog_Shown🌑 +install_menu_option_SiteB🌕 launch_file_OnePngFile🌑 check_file_handling_dialog_Shown🌑 +install_create_shortcut_tabbed_SiteB🌕 launch_file_OnePngFile🌑 check_file_handling_dialog_Shown🌑 +install_policy_app_tabbed_shortcut_SiteB🌓 launch_file_OnePngFile🌑 check_file_handling_dialog_Shown🌑 +install_policy_app_tabbed_no_shortcut_SiteB🌓 launch_file_OnePngFile🌑 check_file_handling_dialog_Shown🌑 +install_create_shortcut_windowed_SiteB🌕 launch_file_OnePngFile🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_One🌑 check_files_loaded_in_site_SiteB_OnePngFile🌑 +install_omnibox_icon_SiteB🌕 launch_file_OnePngFile🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_One🌑 check_files_loaded_in_site_SiteB_OnePngFile🌑 +install_policy_app_windowed_no_shortcut_SiteB🌓 launch_file_OnePngFile🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_One🌑 check_files_loaded_in_site_SiteB_OnePngFile🌑 +install_policy_app_windowed_shortcut_SiteB🌓 launch_file_OnePngFile🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_One🌑 check_files_loaded_in_site_SiteB_OnePngFile🌑 +install_menu_option_SiteB🌕 launch_file_OnePngFile🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_One🌑 check_files_loaded_in_site_SiteB_OnePngFile🌑 +install_create_shortcut_tabbed_SiteB🌕 launch_file_OnePngFile🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_One🌑 check_files_loaded_in_site_SiteB_OnePngFile🌑 +install_policy_app_tabbed_shortcut_SiteB🌓 launch_file_OnePngFile🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_One🌑 check_files_loaded_in_site_SiteB_OnePngFile🌑 +install_policy_app_tabbed_no_shortcut_SiteB🌓 launch_file_OnePngFile🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_One🌑 check_files_loaded_in_site_SiteB_OnePngFile🌑 +install_create_shortcut_windowed_SiteB🌕 launch_file_MultiplePngFiles🌑 check_file_handling_dialog_Shown🌑 +install_omnibox_icon_SiteB🌕 launch_file_MultiplePngFiles🌑 check_file_handling_dialog_Shown🌑 +install_policy_app_windowed_no_shortcut_SiteB🌓 launch_file_MultiplePngFiles🌑 check_file_handling_dialog_Shown🌑 +install_policy_app_windowed_shortcut_SiteB🌓 launch_file_MultiplePngFiles🌑 check_file_handling_dialog_Shown🌑 +install_menu_option_SiteB🌕 launch_file_MultiplePngFiles🌑 check_file_handling_dialog_Shown🌑 +install_create_shortcut_tabbed_SiteB🌕 launch_file_MultiplePngFiles🌑 check_file_handling_dialog_Shown🌑 +install_policy_app_tabbed_shortcut_SiteB🌓 launch_file_MultiplePngFiles🌑 check_file_handling_dialog_Shown🌑 +install_policy_app_tabbed_no_shortcut_SiteB🌓 launch_file_MultiplePngFiles🌑 check_file_handling_dialog_Shown🌑 +install_create_shortcut_windowed_SiteB🌕 launch_file_MultiplePngFiles🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_Two🌑 check_files_loaded_in_site_SiteB_MultiplePngFiles🌑 +install_omnibox_icon_SiteB🌕 launch_file_MultiplePngFiles🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_Two🌑 check_files_loaded_in_site_SiteB_MultiplePngFiles🌑 +install_policy_app_windowed_no_shortcut_SiteB🌓 launch_file_MultiplePngFiles🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_Two🌑 check_files_loaded_in_site_SiteB_MultiplePngFiles🌑 +install_policy_app_windowed_shortcut_SiteB🌓 launch_file_MultiplePngFiles🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_Two🌑 check_files_loaded_in_site_SiteB_MultiplePngFiles🌑 +install_menu_option_SiteB🌕 launch_file_MultiplePngFiles🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_Two🌑 check_files_loaded_in_site_SiteB_MultiplePngFiles🌑 +install_create_shortcut_tabbed_SiteB🌕 launch_file_MultiplePngFiles🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_Two🌑 check_files_loaded_in_site_SiteB_MultiplePngFiles🌑 +install_policy_app_tabbed_shortcut_SiteB🌓 launch_file_MultiplePngFiles🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_Two🌑 check_files_loaded_in_site_SiteB_MultiplePngFiles🌑 +install_policy_app_tabbed_no_shortcut_SiteB🌓 launch_file_MultiplePngFiles🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_Two🌑 check_files_loaded_in_site_SiteB_MultiplePngFiles🌑 +install_create_shortcut_windowed_SiteB🌕 launch_file_OneTextFile🌑 file_handling_dialog_Allow_Remember🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_NotShown🌑 check_pwa_window_created_SiteB_One🌑 +install_omnibox_icon_SiteB🌕 launch_file_OneTextFile🌑 file_handling_dialog_Allow_Remember🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_NotShown🌑 check_pwa_window_created_SiteB_One🌑 +install_policy_app_windowed_no_shortcut_SiteB🌓 launch_file_OneTextFile🌑 file_handling_dialog_Allow_Remember🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_NotShown🌑 check_pwa_window_created_SiteB_One🌑 +install_policy_app_windowed_shortcut_SiteB🌓 launch_file_OneTextFile🌑 file_handling_dialog_Allow_Remember🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_NotShown🌑 check_pwa_window_created_SiteB_One🌑 +install_menu_option_SiteB🌕 launch_file_OneTextFile🌑 file_handling_dialog_Allow_Remember🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_NotShown🌑 check_pwa_window_created_SiteB_One🌑 +install_create_shortcut_tabbed_SiteB🌕 launch_file_OneTextFile🌑 file_handling_dialog_Allow_Remember🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_NotShown🌑 check_pwa_window_created_SiteB_One🌑 +install_policy_app_tabbed_shortcut_SiteB🌓 launch_file_OneTextFile🌑 file_handling_dialog_Allow_Remember🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_NotShown🌑 check_pwa_window_created_SiteB_One🌑 +install_policy_app_tabbed_no_shortcut_SiteB🌓 launch_file_OneTextFile🌑 file_handling_dialog_Allow_Remember🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_NotShown🌑 check_pwa_window_created_SiteB_One🌑 +install_create_shortcut_windowed_SiteB🌕 launch_file_OneTextFile🌑 file_handling_dialog_Allow_AskAgain🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 +install_omnibox_icon_SiteB🌕 launch_file_OneTextFile🌑 file_handling_dialog_Allow_AskAgain🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 +install_policy_app_windowed_no_shortcut_SiteB🌓 launch_file_OneTextFile🌑 file_handling_dialog_Allow_AskAgain🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 +install_policy_app_windowed_shortcut_SiteB🌓 launch_file_OneTextFile🌑 file_handling_dialog_Allow_AskAgain🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 +install_menu_option_SiteB🌕 launch_file_OneTextFile🌑 file_handling_dialog_Allow_AskAgain🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 +install_create_shortcut_tabbed_SiteB🌕 launch_file_OneTextFile🌑 file_handling_dialog_Allow_AskAgain🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 +install_policy_app_tabbed_shortcut_SiteB🌓 launch_file_OneTextFile🌑 file_handling_dialog_Allow_AskAgain🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 +install_policy_app_tabbed_no_shortcut_SiteB🌓 launch_file_OneTextFile🌑 file_handling_dialog_Allow_AskAgain🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 +install_create_shortcut_windowed_SiteB🌕 launch_file_OneTextFile🌑 file_handling_dialog_Deny_AskAgain🌑 check_window_not_created🌑 check_site_handles_file_SiteB_Txt🌑 check_site_handles_file_SiteB_Png🌑 +install_omnibox_icon_SiteB🌕 launch_file_OneTextFile🌑 file_handling_dialog_Deny_AskAgain🌑 check_window_not_created🌑 check_site_handles_file_SiteB_Txt🌑 check_site_handles_file_SiteB_Png🌑 +install_policy_app_windowed_no_shortcut_SiteB🌓 launch_file_OneTextFile🌑 file_handling_dialog_Deny_AskAgain🌑 check_window_not_created🌑 check_site_handles_file_SiteB_Txt🌑 check_site_handles_file_SiteB_Png🌑 +install_policy_app_windowed_shortcut_SiteB🌓 launch_file_OneTextFile🌑 file_handling_dialog_Deny_AskAgain🌑 check_window_not_created🌑 check_site_handles_file_SiteB_Txt🌑 check_site_handles_file_SiteB_Png🌑 +install_menu_option_SiteB🌕 launch_file_OneTextFile🌑 file_handling_dialog_Deny_AskAgain🌑 check_window_not_created🌑 check_site_handles_file_SiteB_Txt🌑 check_site_handles_file_SiteB_Png🌑 +install_create_shortcut_tabbed_SiteB🌕 launch_file_OneTextFile🌑 file_handling_dialog_Deny_AskAgain🌑 check_window_not_created🌑 check_site_handles_file_SiteB_Txt🌑 check_site_handles_file_SiteB_Png🌑 +install_policy_app_tabbed_shortcut_SiteB🌓 launch_file_OneTextFile🌑 file_handling_dialog_Deny_AskAgain🌑 check_window_not_created🌑 check_site_handles_file_SiteB_Txt🌑 check_site_handles_file_SiteB_Png🌑 +install_policy_app_tabbed_no_shortcut_SiteB🌓 launch_file_OneTextFile🌑 file_handling_dialog_Deny_AskAgain🌑 check_window_not_created🌑 check_site_handles_file_SiteB_Txt🌑 check_site_handles_file_SiteB_Png🌑 +install_create_shortcut_windowed_SiteB🌕 launch_file_OneTextFile🌑 file_handling_dialog_Deny_AskAgain🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 +install_omnibox_icon_SiteB🌕 launch_file_OneTextFile🌑 file_handling_dialog_Deny_AskAgain🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 +install_policy_app_windowed_no_shortcut_SiteB🌓 launch_file_OneTextFile🌑 file_handling_dialog_Deny_AskAgain🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 +install_policy_app_windowed_shortcut_SiteB🌓 launch_file_OneTextFile🌑 file_handling_dialog_Deny_AskAgain🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 +install_menu_option_SiteB🌕 launch_file_OneTextFile🌑 file_handling_dialog_Deny_AskAgain🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 +install_create_shortcut_tabbed_SiteB🌕 launch_file_OneTextFile🌑 file_handling_dialog_Deny_AskAgain🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 +install_policy_app_tabbed_shortcut_SiteB🌓 launch_file_OneTextFile🌑 file_handling_dialog_Deny_AskAgain🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 +install_policy_app_tabbed_no_shortcut_SiteB🌓 launch_file_OneTextFile🌑 file_handling_dialog_Deny_AskAgain🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 +install_create_shortcut_windowed_SiteB🌕 launch_file_OneTextFile🌑 file_handling_dialog_Deny_Remember🌑 check_window_not_created🌑 check_site_not_handles_file_SiteB_Txt🌑 check_site_not_handles_file_SiteB_Png🌑 +install_omnibox_icon_SiteB🌕 launch_file_OneTextFile🌑 file_handling_dialog_Deny_Remember🌑 check_window_not_created🌑 check_site_not_handles_file_SiteB_Txt🌑 check_site_not_handles_file_SiteB_Png🌑 +install_policy_app_windowed_no_shortcut_SiteB🌓 launch_file_OneTextFile🌑 file_handling_dialog_Deny_Remember🌑 check_window_not_created🌑 check_site_not_handles_file_SiteB_Txt🌑 check_site_not_handles_file_SiteB_Png🌑 +install_policy_app_windowed_shortcut_SiteB🌓 launch_file_OneTextFile🌑 file_handling_dialog_Deny_Remember🌑 check_window_not_created🌑 check_site_not_handles_file_SiteB_Txt🌑 check_site_not_handles_file_SiteB_Png🌑 +install_menu_option_SiteB🌕 launch_file_OneTextFile🌑 file_handling_dialog_Deny_Remember🌑 check_window_not_created🌑 check_site_not_handles_file_SiteB_Txt🌑 check_site_not_handles_file_SiteB_Png🌑 +install_create_shortcut_tabbed_SiteB🌕 launch_file_OneTextFile🌑 file_handling_dialog_Deny_Remember🌑 check_window_not_created🌑 check_site_not_handles_file_SiteB_Txt🌑 check_site_not_handles_file_SiteB_Png🌑 +install_policy_app_tabbed_shortcut_SiteB🌓 launch_file_OneTextFile🌑 file_handling_dialog_Deny_Remember🌑 check_window_not_created🌑 check_site_not_handles_file_SiteB_Txt🌑 check_site_not_handles_file_SiteB_Png🌑 +install_policy_app_tabbed_no_shortcut_SiteB🌓 launch_file_OneTextFile🌑 file_handling_dialog_Deny_Remember🌑 check_window_not_created🌑 check_site_not_handles_file_SiteB_Txt🌑 check_site_not_handles_file_SiteB_Png🌑 +install_create_shortcut_windowed_SiteB🌕 add_file_handling_policy_approval_SiteB🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_NotShown🌑 check_pwa_window_created_SiteB_One🌑 +install_omnibox_icon_SiteB🌕 add_file_handling_policy_approval_SiteB🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_NotShown🌑 check_pwa_window_created_SiteB_One🌑 +install_policy_app_windowed_no_shortcut_SiteB🌓 add_file_handling_policy_approval_SiteB🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_NotShown🌑 check_pwa_window_created_SiteB_One🌑 +install_policy_app_windowed_shortcut_SiteB🌓 add_file_handling_policy_approval_SiteB🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_NotShown🌑 check_pwa_window_created_SiteB_One🌑 +install_menu_option_SiteB🌕 add_file_handling_policy_approval_SiteB🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_NotShown🌑 check_pwa_window_created_SiteB_One🌑 +install_create_shortcut_tabbed_SiteB🌕 add_file_handling_policy_approval_SiteB🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_NotShown🌑 check_pwa_window_created_SiteB_One🌑 +install_policy_app_tabbed_shortcut_SiteB🌓 add_file_handling_policy_approval_SiteB🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_NotShown🌑 check_pwa_window_created_SiteB_One🌑 +install_policy_app_tabbed_no_shortcut_SiteB🌓 add_file_handling_policy_approval_SiteB🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_NotShown🌑 check_pwa_window_created_SiteB_One🌑 +install_create_shortcut_windowed_SiteB🌕 add_file_handling_policy_approval_SiteB🌑 remove_file_handling_policy_approval_SiteB🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 +install_omnibox_icon_SiteB🌕 add_file_handling_policy_approval_SiteB🌑 remove_file_handling_policy_approval_SiteB🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 +install_policy_app_windowed_no_shortcut_SiteB🌓 add_file_handling_policy_approval_SiteB🌑 remove_file_handling_policy_approval_SiteB🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 +install_policy_app_windowed_shortcut_SiteB🌓 add_file_handling_policy_approval_SiteB🌑 remove_file_handling_policy_approval_SiteB🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 +install_menu_option_SiteB🌕 add_file_handling_policy_approval_SiteB🌑 remove_file_handling_policy_approval_SiteB🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 +install_create_shortcut_tabbed_SiteB🌕 add_file_handling_policy_approval_SiteB🌑 remove_file_handling_policy_approval_SiteB🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 +install_policy_app_tabbed_shortcut_SiteB🌓 add_file_handling_policy_approval_SiteB🌑 remove_file_handling_policy_approval_SiteB🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 +install_policy_app_tabbed_no_shortcut_SiteB🌓 add_file_handling_policy_approval_SiteB🌑 remove_file_handling_policy_approval_SiteB🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑
diff --git a/chrome/test/webapps/coverage/coverage_win.tsv b/chrome/test/webapps/coverage/coverage_win.tsv index 7cc8bb8..65a377e 100644 --- a/chrome/test/webapps/coverage/coverage_win.tsv +++ b/chrome/test/webapps/coverage/coverage_win.tsv
@@ -1,936 +1,1118 @@ -# This is a generated file. -# Full coverage: 58%, with partial coverage: 78% -install_create_shortcut_windowed_SiteA🌕 manifest_update_title_SiteA🌑 accept_app_id_update_dialog🌑 close_pwa🌑 launch_from_menu_option_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 -install_create_shortcut_windowed_SiteA🌕 manifest_update_title_SiteA🌑 accept_app_id_update_dialog🌑 close_pwa🌑 launch_from_launch_icon_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 -install_create_shortcut_windowed_SiteA🌕 manifest_update_title_SiteA🌑 accept_app_id_update_dialog🌑 close_pwa🌑 launch_from_chrome_apps_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 -install_create_shortcut_windowed_SiteA🌕 manifest_update_title_SiteA🌑 accept_app_id_update_dialog🌑 close_pwa🌑 launch_from_platform_shortcut_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 -install_omnibox_icon_SiteA🌕 manifest_update_title_SiteA🌑 accept_app_id_update_dialog🌑 close_pwa🌑 launch_from_menu_option_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 -install_omnibox_icon_SiteA🌕 manifest_update_title_SiteA🌑 accept_app_id_update_dialog🌑 close_pwa🌑 launch_from_launch_icon_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 -install_omnibox_icon_SiteA🌕 manifest_update_title_SiteA🌑 accept_app_id_update_dialog🌑 close_pwa🌑 launch_from_chrome_apps_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 -install_omnibox_icon_SiteA🌕 manifest_update_title_SiteA🌑 accept_app_id_update_dialog🌑 close_pwa🌑 launch_from_platform_shortcut_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 -install_menu_option_SiteA🌕 manifest_update_title_SiteA🌑 accept_app_id_update_dialog🌑 close_pwa🌑 launch_from_menu_option_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 -install_menu_option_SiteA🌕 manifest_update_title_SiteA🌑 accept_app_id_update_dialog🌑 close_pwa🌑 launch_from_launch_icon_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 -install_menu_option_SiteA🌕 manifest_update_title_SiteA🌑 accept_app_id_update_dialog🌑 close_pwa🌑 launch_from_chrome_apps_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 -install_menu_option_SiteA🌕 manifest_update_title_SiteA🌑 accept_app_id_update_dialog🌑 close_pwa🌑 launch_from_platform_shortcut_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 -install_create_shortcut_windowed_SiteA🌕 manifest_update_title_SiteA🌑 deny_app_update_dialog🌑 check_app_not_in_list_SiteA🌑 check_platform_shortcut_not_exists_SiteA🌑 -install_omnibox_icon_SiteA🌕 manifest_update_title_SiteA🌑 deny_app_update_dialog🌑 check_app_not_in_list_SiteA🌑 check_platform_shortcut_not_exists_SiteA🌑 -install_menu_option_SiteA🌕 manifest_update_title_SiteA🌑 deny_app_update_dialog🌑 check_app_not_in_list_SiteA🌑 check_platform_shortcut_not_exists_SiteA🌑 -install_create_shortcut_windowed_SiteA🌕 close_pwa🌕 manifest_update_icon_SiteA🌑 check_app_in_list_icon_correct_SiteA🌑 -install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_icon_SiteA🌑 check_app_in_list_icon_correct_SiteA🌑 -install_menu_option_SiteA🌕 close_pwa🌕 manifest_update_icon_SiteA🌑 check_app_in_list_icon_correct_SiteA🌑 -install_create_shortcut_windowed_SiteA🌕 close_pwa🌕 manifest_update_icon_SiteA🌑 check_platform_shortcut_and_icon_SiteA🌑 -install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_icon_SiteA🌑 check_platform_shortcut_and_icon_SiteA🌑 -install_menu_option_SiteA🌕 close_pwa🌕 manifest_update_icon_SiteA🌑 check_platform_shortcut_and_icon_SiteA🌑 -install_policy_app_windowed_no_shortcut_SiteA🌓 manifest_update_title_SiteA🌑 check_update_dialog_not_shown🌑 close_pwa🌑 launch_from_menu_option_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 -install_policy_app_windowed_no_shortcut_SiteA🌓 manifest_update_title_SiteA🌑 check_update_dialog_not_shown🌑 close_pwa🌑 launch_from_launch_icon_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 -install_policy_app_windowed_no_shortcut_SiteA🌓 manifest_update_title_SiteA🌑 check_update_dialog_not_shown🌑 close_pwa🌑 launch_from_chrome_apps_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 -install_policy_app_windowed_no_shortcut_SiteA🌓 manifest_update_title_SiteA🌑 check_update_dialog_not_shown🌑 close_pwa🌑 launch_from_platform_shortcut_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌓 manifest_update_title_SiteA🌑 check_update_dialog_not_shown🌑 close_pwa🌑 launch_from_menu_option_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌓 manifest_update_title_SiteA🌑 check_update_dialog_not_shown🌑 close_pwa🌑 launch_from_launch_icon_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌓 manifest_update_title_SiteA🌑 check_update_dialog_not_shown🌑 close_pwa🌑 launch_from_chrome_apps_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌓 manifest_update_title_SiteA🌑 check_update_dialog_not_shown🌑 close_pwa🌑 launch_from_platform_shortcut_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 -install_policy_app_windowed_shortcut_SiteA🌓 manifest_update_title_SiteA🌑 check_update_dialog_not_shown🌑 close_pwa🌑 launch_from_menu_option_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 -install_policy_app_windowed_shortcut_SiteA🌓 manifest_update_title_SiteA🌑 check_update_dialog_not_shown🌑 close_pwa🌑 launch_from_launch_icon_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 -install_policy_app_windowed_shortcut_SiteA🌓 manifest_update_title_SiteA🌑 check_update_dialog_not_shown🌑 close_pwa🌑 launch_from_chrome_apps_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 -install_policy_app_windowed_shortcut_SiteA🌓 manifest_update_title_SiteA🌑 check_update_dialog_not_shown🌑 close_pwa🌑 launch_from_platform_shortcut_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 manifest_update_title_SiteA🌑 check_update_dialog_not_shown🌑 close_pwa🌑 launch_from_menu_option_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 manifest_update_title_SiteA🌑 check_update_dialog_not_shown🌑 close_pwa🌑 launch_from_launch_icon_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 manifest_update_title_SiteA🌑 check_update_dialog_not_shown🌑 close_pwa🌑 launch_from_chrome_apps_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 -install_policy_app_tabbed_shortcut_SiteA🌓 manifest_update_title_SiteA🌑 check_update_dialog_not_shown🌑 close_pwa🌑 launch_from_platform_shortcut_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 -install_create_shortcut_windowed_SiteA🌕 apply_run_on_os_login_policy_blocked_SiteA🌕 check_user_cannot_set_run_on_os_login_SiteA🌕 -install_omnibox_icon_SiteA🌕 apply_run_on_os_login_policy_blocked_SiteA🌕 check_user_cannot_set_run_on_os_login_SiteA🌕 -install_policy_app_windowed_no_shortcut_SiteA🌓 apply_run_on_os_login_policy_blocked_SiteA🌕 check_user_cannot_set_run_on_os_login_SiteA🌕 -install_policy_app_windowed_shortcut_SiteA🌓 apply_run_on_os_login_policy_blocked_SiteA🌕 check_user_cannot_set_run_on_os_login_SiteA🌕 -install_menu_option_SiteA🌕 apply_run_on_os_login_policy_blocked_SiteA🌕 check_user_cannot_set_run_on_os_login_SiteA🌕 -install_create_shortcut_tabbed_SiteA🌕 apply_run_on_os_login_policy_blocked_SiteA🌕 check_user_cannot_set_run_on_os_login_SiteA🌕 -install_policy_app_tabbed_shortcut_SiteA🌓 apply_run_on_os_login_policy_blocked_SiteA🌕 check_user_cannot_set_run_on_os_login_SiteA🌕 -install_policy_app_tabbed_no_shortcut_SiteA🌓 apply_run_on_os_login_policy_blocked_SiteA🌕 check_user_cannot_set_run_on_os_login_SiteA🌕 -install_create_shortcut_windowed_SiteA🌕 apply_run_on_os_login_policy_blocked_SiteA🌕 check_user_cannot_set_run_on_os_login_SiteA🌕 -install_omnibox_icon_SiteA🌕 apply_run_on_os_login_policy_blocked_SiteA🌕 check_user_cannot_set_run_on_os_login_SiteA🌕 -install_policy_app_windowed_no_shortcut_SiteA🌓 apply_run_on_os_login_policy_blocked_SiteA🌕 check_user_cannot_set_run_on_os_login_SiteA🌕 -install_policy_app_windowed_shortcut_SiteA🌓 apply_run_on_os_login_policy_blocked_SiteA🌕 check_user_cannot_set_run_on_os_login_SiteA🌕 -install_menu_option_SiteA🌕 apply_run_on_os_login_policy_blocked_SiteA🌕 check_user_cannot_set_run_on_os_login_SiteA🌕 -install_create_shortcut_tabbed_SiteA🌕 apply_run_on_os_login_policy_blocked_SiteA🌕 check_user_cannot_set_run_on_os_login_SiteA🌕 -install_policy_app_tabbed_shortcut_SiteA🌓 apply_run_on_os_login_policy_blocked_SiteA🌕 check_user_cannot_set_run_on_os_login_SiteA🌕 -install_policy_app_tabbed_no_shortcut_SiteA🌓 apply_run_on_os_login_policy_blocked_SiteA🌕 check_user_cannot_set_run_on_os_login_SiteA🌕 -install_create_shortcut_windowed_SiteA🌕 enable_run_on_os_login_SiteA🌕 apply_run_on_os_login_policy_blocked_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 -install_omnibox_icon_SiteA🌕 enable_run_on_os_login_SiteA🌕 apply_run_on_os_login_policy_blocked_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 -install_policy_app_windowed_no_shortcut_SiteA🌓 enable_run_on_os_login_SiteA🌕 apply_run_on_os_login_policy_blocked_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 -install_policy_app_windowed_shortcut_SiteA🌓 enable_run_on_os_login_SiteA🌕 apply_run_on_os_login_policy_blocked_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 -install_menu_option_SiteA🌕 enable_run_on_os_login_SiteA🌕 apply_run_on_os_login_policy_blocked_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 -install_create_shortcut_tabbed_SiteA🌕 enable_run_on_os_login_SiteA🌕 apply_run_on_os_login_policy_blocked_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 -install_policy_app_tabbed_shortcut_SiteA🌓 enable_run_on_os_login_SiteA🌕 apply_run_on_os_login_policy_blocked_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 -install_policy_app_tabbed_no_shortcut_SiteA🌓 enable_run_on_os_login_SiteA🌕 apply_run_on_os_login_policy_blocked_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 -install_create_shortcut_windowed_SiteA🌕 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_run_on_os_login_enabled_SiteA🌕 -install_omnibox_icon_SiteA🌕 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_run_on_os_login_enabled_SiteA🌕 -install_policy_app_windowed_no_shortcut_SiteA🌓 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_run_on_os_login_enabled_SiteA🌕 -install_policy_app_windowed_shortcut_SiteA🌓 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_run_on_os_login_enabled_SiteA🌕 -install_menu_option_SiteA🌕 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_run_on_os_login_enabled_SiteA🌕 -install_create_shortcut_tabbed_SiteA🌕 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_run_on_os_login_enabled_SiteA🌕 -install_policy_app_tabbed_shortcut_SiteA🌓 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_run_on_os_login_enabled_SiteA🌕 -install_policy_app_tabbed_no_shortcut_SiteA🌓 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_run_on_os_login_enabled_SiteA🌕 -install_create_shortcut_windowed_SiteA🌕 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_user_cannot_set_run_on_os_login_SiteA🌕 -install_omnibox_icon_SiteA🌕 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_user_cannot_set_run_on_os_login_SiteA🌕 -install_policy_app_windowed_no_shortcut_SiteA🌓 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_user_cannot_set_run_on_os_login_SiteA🌕 -install_policy_app_windowed_shortcut_SiteA🌓 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_user_cannot_set_run_on_os_login_SiteA🌕 -install_menu_option_SiteA🌕 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_user_cannot_set_run_on_os_login_SiteA🌕 -install_create_shortcut_tabbed_SiteA🌕 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_user_cannot_set_run_on_os_login_SiteA🌕 -install_policy_app_tabbed_shortcut_SiteA🌓 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_user_cannot_set_run_on_os_login_SiteA🌕 -install_policy_app_tabbed_no_shortcut_SiteA🌓 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_user_cannot_set_run_on_os_login_SiteA🌕 -install_create_shortcut_windowed_SiteA🌕 enable_run_on_os_login_SiteA🌕 check_run_on_os_login_enabled_SiteA🌕 -install_omnibox_icon_SiteA🌕 enable_run_on_os_login_SiteA🌕 check_run_on_os_login_enabled_SiteA🌕 -install_policy_app_windowed_no_shortcut_SiteA🌓 enable_run_on_os_login_SiteA🌕 check_run_on_os_login_enabled_SiteA🌕 -install_policy_app_windowed_shortcut_SiteA🌓 enable_run_on_os_login_SiteA🌕 check_run_on_os_login_enabled_SiteA🌕 -install_menu_option_SiteA🌕 enable_run_on_os_login_SiteA🌕 check_run_on_os_login_enabled_SiteA🌕 -install_create_shortcut_tabbed_SiteA🌕 enable_run_on_os_login_SiteA🌕 check_run_on_os_login_enabled_SiteA🌕 -install_policy_app_tabbed_shortcut_SiteA🌓 enable_run_on_os_login_SiteA🌕 check_run_on_os_login_enabled_SiteA🌕 -install_policy_app_tabbed_no_shortcut_SiteA🌓 enable_run_on_os_login_SiteA🌕 check_run_on_os_login_enabled_SiteA🌕 -install_create_shortcut_windowed_SiteA🌕 enable_run_on_os_login_SiteA🌕 disable_run_on_os_login_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 -install_omnibox_icon_SiteA🌕 enable_run_on_os_login_SiteA🌕 disable_run_on_os_login_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 -install_policy_app_windowed_no_shortcut_SiteA🌓 enable_run_on_os_login_SiteA🌕 disable_run_on_os_login_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 -install_policy_app_windowed_shortcut_SiteA🌓 enable_run_on_os_login_SiteA🌕 disable_run_on_os_login_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 -install_menu_option_SiteA🌕 enable_run_on_os_login_SiteA🌕 disable_run_on_os_login_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 -install_create_shortcut_tabbed_SiteA🌕 enable_run_on_os_login_SiteA🌕 disable_run_on_os_login_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 -install_policy_app_tabbed_shortcut_SiteA🌓 enable_run_on_os_login_SiteA🌕 disable_run_on_os_login_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 -install_policy_app_tabbed_no_shortcut_SiteA🌓 enable_run_on_os_login_SiteA🌕 disable_run_on_os_login_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 -install_create_shortcut_windowed_SiteA🌕 apply_run_on_os_login_policy_run_windowed_SiteA🌕 remove_run_on_os_login_policy_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 -install_omnibox_icon_SiteA🌕 apply_run_on_os_login_policy_run_windowed_SiteA🌕 remove_run_on_os_login_policy_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 -install_policy_app_windowed_no_shortcut_SiteA🌓 apply_run_on_os_login_policy_run_windowed_SiteA🌕 remove_run_on_os_login_policy_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 -install_policy_app_windowed_shortcut_SiteA🌓 apply_run_on_os_login_policy_run_windowed_SiteA🌕 remove_run_on_os_login_policy_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 -install_menu_option_SiteA🌕 apply_run_on_os_login_policy_run_windowed_SiteA🌕 remove_run_on_os_login_policy_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 -install_create_shortcut_tabbed_SiteA🌕 apply_run_on_os_login_policy_run_windowed_SiteA🌕 remove_run_on_os_login_policy_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 -install_policy_app_tabbed_shortcut_SiteA🌓 apply_run_on_os_login_policy_run_windowed_SiteA🌕 remove_run_on_os_login_policy_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 -install_policy_app_tabbed_no_shortcut_SiteA🌓 apply_run_on_os_login_policy_run_windowed_SiteA🌕 remove_run_on_os_login_policy_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 -install_create_shortcut_windowed_SiteA🌕 enable_run_on_os_login_SiteA🌕 apply_run_on_os_login_policy_blocked_SiteA🌕 remove_run_on_os_login_policy_SiteA🌕 check_run_on_os_login_enabled_SiteA🌕 -install_omnibox_icon_SiteA🌕 enable_run_on_os_login_SiteA🌕 apply_run_on_os_login_policy_blocked_SiteA🌕 remove_run_on_os_login_policy_SiteA🌕 check_run_on_os_login_enabled_SiteA🌕 -install_policy_app_windowed_no_shortcut_SiteA🌓 enable_run_on_os_login_SiteA🌕 apply_run_on_os_login_policy_blocked_SiteA🌕 remove_run_on_os_login_policy_SiteA🌕 check_run_on_os_login_enabled_SiteA🌕 -install_policy_app_windowed_shortcut_SiteA🌓 enable_run_on_os_login_SiteA🌕 apply_run_on_os_login_policy_blocked_SiteA🌕 remove_run_on_os_login_policy_SiteA🌕 check_run_on_os_login_enabled_SiteA🌕 -install_menu_option_SiteA🌕 enable_run_on_os_login_SiteA🌕 apply_run_on_os_login_policy_blocked_SiteA🌕 remove_run_on_os_login_policy_SiteA🌕 check_run_on_os_login_enabled_SiteA🌕 -install_create_shortcut_tabbed_SiteA🌕 enable_run_on_os_login_SiteA🌕 apply_run_on_os_login_policy_blocked_SiteA🌕 remove_run_on_os_login_policy_SiteA🌕 check_run_on_os_login_enabled_SiteA🌕 -install_policy_app_tabbed_shortcut_SiteA🌓 enable_run_on_os_login_SiteA🌕 apply_run_on_os_login_policy_blocked_SiteA🌕 remove_run_on_os_login_policy_SiteA🌕 check_run_on_os_login_enabled_SiteA🌕 -install_policy_app_tabbed_no_shortcut_SiteA🌓 enable_run_on_os_login_SiteA🌕 apply_run_on_os_login_policy_blocked_SiteA🌕 remove_run_on_os_login_policy_SiteA🌕 check_run_on_os_login_enabled_SiteA🌕 -install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 switch_profile_clients_Client1🌕 sync_turn_off🌕 uninstall_from_list_SiteA🌕 switch_profile_clients_Client2🌕 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 -install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 switch_profile_clients_Client1🌕 sync_turn_off🌕 uninstall_from_menu_SiteA🌕 switch_profile_clients_Client2🌕 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 -install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 switch_profile_clients_Client1🌕 sync_turn_off🌕 uninstall_from_os_SiteA🌕 switch_profile_clients_Client2🌕 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 -install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 switch_profile_clients_Client1🌕 sync_turn_off🌕 uninstall_from_app_settings_SiteA🌕 switch_profile_clients_Client2🌕 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 -install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 switch_profile_clients_Client1🌕 sync_turn_off🌕 uninstall_from_list_SiteA🌕 switch_profile_clients_Client2🌕 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 -install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 switch_profile_clients_Client1🌕 sync_turn_off🌕 uninstall_from_menu_SiteA🌕 switch_profile_clients_Client2🌕 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 -install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 switch_profile_clients_Client1🌕 sync_turn_off🌕 uninstall_from_os_SiteA🌕 switch_profile_clients_Client2🌕 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 -install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 switch_profile_clients_Client1🌕 sync_turn_off🌕 uninstall_from_app_settings_SiteA🌕 switch_profile_clients_Client2🌕 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 -install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 switch_profile_clients_Client1🌕 sync_turn_off🌕 uninstall_from_list_SiteA🌕 switch_profile_clients_Client2🌕 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 -install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 switch_profile_clients_Client1🌕 sync_turn_off🌕 uninstall_from_menu_SiteA🌕 switch_profile_clients_Client2🌕 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 -install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 switch_profile_clients_Client1🌕 sync_turn_off🌕 uninstall_from_os_SiteA🌕 switch_profile_clients_Client2🌕 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 -install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 switch_profile_clients_Client1🌕 sync_turn_off🌕 uninstall_from_app_settings_SiteA🌕 switch_profile_clients_Client2🌕 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 -install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 switch_profile_clients_Client1🌕 sync_turn_off🌕 uninstall_from_list_SiteA🌕 switch_profile_clients_Client2🌕 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 install_locally_SiteA🌓 check_run_on_os_login_enabled_SiteA🌕 -install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 switch_profile_clients_Client1🌕 sync_turn_off🌕 uninstall_from_menu_SiteA🌕 switch_profile_clients_Client2🌕 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 install_locally_SiteA🌓 check_run_on_os_login_enabled_SiteA🌕 -install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 switch_profile_clients_Client1🌕 sync_turn_off🌕 uninstall_from_os_SiteA🌕 switch_profile_clients_Client2🌕 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 install_locally_SiteA🌓 check_run_on_os_login_enabled_SiteA🌕 -install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 switch_profile_clients_Client1🌕 sync_turn_off🌕 uninstall_from_app_settings_SiteA🌕 switch_profile_clients_Client2🌕 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 install_locally_SiteA🌓 check_run_on_os_login_enabled_SiteA🌕 -install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 switch_profile_clients_Client1🌕 sync_turn_off🌕 uninstall_from_list_SiteA🌕 switch_profile_clients_Client2🌕 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 install_locally_SiteA🌓 check_run_on_os_login_enabled_SiteA🌕 -install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 switch_profile_clients_Client1🌕 sync_turn_off🌕 uninstall_from_menu_SiteA🌕 switch_profile_clients_Client2🌕 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 install_locally_SiteA🌓 check_run_on_os_login_enabled_SiteA🌕 -install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 switch_profile_clients_Client1🌕 sync_turn_off🌕 uninstall_from_os_SiteA🌕 switch_profile_clients_Client2🌕 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 install_locally_SiteA🌓 check_run_on_os_login_enabled_SiteA🌕 -install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 switch_profile_clients_Client1🌕 sync_turn_off🌕 uninstall_from_app_settings_SiteA🌕 switch_profile_clients_Client2🌕 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 install_locally_SiteA🌓 check_run_on_os_login_enabled_SiteA🌕 -install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 switch_profile_clients_Client1🌕 sync_turn_off🌕 uninstall_from_list_SiteA🌕 switch_profile_clients_Client2🌕 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 install_locally_SiteA🌓 check_run_on_os_login_enabled_SiteA🌕 -install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 switch_profile_clients_Client1🌕 sync_turn_off🌕 uninstall_from_menu_SiteA🌕 switch_profile_clients_Client2🌕 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 install_locally_SiteA🌓 check_run_on_os_login_enabled_SiteA🌕 -install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 switch_profile_clients_Client1🌕 sync_turn_off🌕 uninstall_from_os_SiteA🌕 switch_profile_clients_Client2🌕 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 install_locally_SiteA🌓 check_run_on_os_login_enabled_SiteA🌕 -install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 switch_profile_clients_Client1🌕 sync_turn_off🌕 uninstall_from_app_settings_SiteA🌕 switch_profile_clients_Client2🌕 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 install_locally_SiteA🌓 check_run_on_os_login_enabled_SiteA🌕 -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🌕 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🌕 navigate_pwa_site_a_to_SiteB🌕 close_custom_toolbar🌕 check_app_navigation_is_start_url🌕 -install_omnibox_icon_SiteA🌕 navigate_pwa_site_a_to_SiteB🌕 close_custom_toolbar🌕 check_app_navigation_is_start_url🌕 -install_policy_app_windowed_no_shortcut_SiteA🌓 navigate_pwa_site_a_to_SiteB🌑 close_custom_toolbar🌑 check_app_navigation_is_start_url🌑 -install_policy_app_windowed_shortcut_SiteA🌓 navigate_pwa_site_a_to_SiteB🌑 close_custom_toolbar🌑 check_app_navigation_is_start_url🌑 -install_menu_option_SiteA🌕 navigate_pwa_site_a_to_SiteB🌕 close_custom_toolbar🌕 check_app_navigation_is_start_url🌕 -install_create_shortcut_windowed_SiteA🌕 navigate_pwa_site_a_to_SiteB🌕 check_custom_toolbar🌕 -install_omnibox_icon_SiteA🌕 navigate_pwa_site_a_to_SiteB🌕 check_custom_toolbar🌕 -install_menu_option_SiteA🌕 navigate_pwa_site_a_to_SiteB🌕 check_custom_toolbar🌕 -navigate_browser_SiteA🌕 check_app_not_in_list_SiteA🌓 -navigate_browser_SiteA🌕 check_platform_shortcut_not_exists_SiteA🌑 -navigate_browser_SiteC🌕 check_app_not_in_list_SiteA🌓 -navigate_browser_SiteC🌕 check_platform_shortcut_not_exists_SiteA🌑 -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🌕 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_and_icon_SiteA🌓 -install_policy_app_tabbed_shortcut_SiteA🌓 check_platform_shortcut_and_icon_SiteA🌓 -install_create_shortcut_windowed_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌓 -install_omnibox_icon_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌓 -install_menu_option_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌓 -install_create_shortcut_tabbed_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌓 -install_policy_app_windowed_shortcut_SiteC🌓 check_platform_shortcut_and_icon_SiteC🌓 -install_policy_app_tabbed_shortcut_SiteC🌓 check_platform_shortcut_and_icon_SiteC🌓 -install_create_shortcut_windowed_SiteC🌕 check_platform_shortcut_and_icon_SiteC🌓 -install_create_shortcut_tabbed_SiteC🌕 check_platform_shortcut_and_icon_SiteC🌓 -install_create_shortcut_windowed_SiteA🌕 uninstall_from_list_SiteA🌕 check_app_not_in_list_SiteA🌓 -install_create_shortcut_windowed_SiteA🌕 uninstall_from_menu_SiteA🌕 check_app_not_in_list_SiteA🌓 -install_create_shortcut_windowed_SiteA🌕 uninstall_from_os_SiteA🌕 check_app_not_in_list_SiteA🌓 -install_create_shortcut_windowed_SiteA🌕 uninstall_from_app_settings_SiteA🌕 check_app_not_in_list_SiteA🌓 -install_omnibox_icon_SiteA🌕 uninstall_from_list_SiteA🌕 check_app_not_in_list_SiteA🌓 -install_omnibox_icon_SiteA🌕 uninstall_from_menu_SiteA🌕 check_app_not_in_list_SiteA🌓 -install_omnibox_icon_SiteA🌕 uninstall_from_os_SiteA🌕 check_app_not_in_list_SiteA🌓 -install_omnibox_icon_SiteA🌕 uninstall_from_app_settings_SiteA🌕 check_app_not_in_list_SiteA🌓 -install_menu_option_SiteA🌕 uninstall_from_list_SiteA🌕 check_app_not_in_list_SiteA🌓 -install_menu_option_SiteA🌕 uninstall_from_menu_SiteA🌕 check_app_not_in_list_SiteA🌓 -install_menu_option_SiteA🌕 uninstall_from_os_SiteA🌕 check_app_not_in_list_SiteA🌓 -install_menu_option_SiteA🌕 uninstall_from_app_settings_SiteA🌕 check_app_not_in_list_SiteA🌓 -install_create_shortcut_windowed_SiteA🌕 uninstall_from_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_create_shortcut_windowed_SiteA🌕 uninstall_from_os_SiteA🌕 navigate_browser_SiteA🌕 check_install_icon_shown🌕 -install_create_shortcut_windowed_SiteA🌕 uninstall_from_app_settings_SiteA🌕 navigate_browser_SiteA🌕 check_install_icon_shown🌕 -install_omnibox_icon_SiteA🌕 uninstall_from_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_omnibox_icon_SiteA🌕 uninstall_from_os_SiteA🌕 navigate_browser_SiteA🌕 check_install_icon_shown🌕 -install_omnibox_icon_SiteA🌕 uninstall_from_app_settings_SiteA🌕 navigate_browser_SiteA🌕 check_install_icon_shown🌕 -install_menu_option_SiteA🌕 uninstall_from_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_menu_option_SiteA🌕 uninstall_from_os_SiteA🌕 navigate_browser_SiteA🌕 check_install_icon_shown🌕 -install_menu_option_SiteA🌕 uninstall_from_app_settings_SiteA🌕 navigate_browser_SiteA🌕 check_install_icon_shown🌕 -install_create_shortcut_windowed_SiteA🌕 uninstall_from_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_create_shortcut_windowed_SiteA🌕 uninstall_from_os_SiteA🌕 navigate_browser_SiteA🌕 check_launch_icon_not_shown🌕 -install_create_shortcut_windowed_SiteA🌕 uninstall_from_app_settings_SiteA🌕 navigate_browser_SiteA🌕 check_launch_icon_not_shown🌕 -install_omnibox_icon_SiteA🌕 uninstall_from_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_omnibox_icon_SiteA🌕 uninstall_from_os_SiteA🌕 navigate_browser_SiteA🌕 check_launch_icon_not_shown🌕 -install_omnibox_icon_SiteA🌕 uninstall_from_app_settings_SiteA🌕 navigate_browser_SiteA🌕 check_launch_icon_not_shown🌕 -install_menu_option_SiteA🌕 uninstall_from_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_menu_option_SiteA🌕 uninstall_from_os_SiteA🌕 navigate_browser_SiteA🌕 check_launch_icon_not_shown🌕 -install_menu_option_SiteA🌕 uninstall_from_app_settings_SiteA🌕 navigate_browser_SiteA🌕 check_launch_icon_not_shown🌕 -install_create_shortcut_windowed_SiteA🌕 uninstall_from_list_SiteA🌕 check_platform_shortcut_not_exists_SiteA🌑 -install_create_shortcut_windowed_SiteA🌕 uninstall_from_menu_SiteA🌕 check_platform_shortcut_not_exists_SiteA🌑 -install_create_shortcut_windowed_SiteA🌕 uninstall_from_os_SiteA🌕 check_platform_shortcut_not_exists_SiteA🌑 -install_create_shortcut_windowed_SiteA🌕 uninstall_from_app_settings_SiteA🌕 check_platform_shortcut_not_exists_SiteA🌑 -install_omnibox_icon_SiteA🌕 uninstall_from_list_SiteA🌕 check_platform_shortcut_not_exists_SiteA🌑 -install_omnibox_icon_SiteA🌕 uninstall_from_menu_SiteA🌕 check_platform_shortcut_not_exists_SiteA🌑 -install_omnibox_icon_SiteA🌕 uninstall_from_os_SiteA🌕 check_platform_shortcut_not_exists_SiteA🌑 -install_omnibox_icon_SiteA🌕 uninstall_from_app_settings_SiteA🌕 check_platform_shortcut_not_exists_SiteA🌑 -install_menu_option_SiteA🌕 uninstall_from_list_SiteA🌕 check_platform_shortcut_not_exists_SiteA🌑 -install_menu_option_SiteA🌕 uninstall_from_menu_SiteA🌕 check_platform_shortcut_not_exists_SiteA🌑 -install_menu_option_SiteA🌕 uninstall_from_os_SiteA🌕 check_platform_shortcut_not_exists_SiteA🌑 -install_menu_option_SiteA🌕 uninstall_from_app_settings_SiteA🌕 check_platform_shortcut_not_exists_SiteA🌑 -install_create_shortcut_windowed_SiteC🌕 uninstall_from_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_windowed_SiteC🌕 uninstall_from_os_SiteC🌕 check_app_not_in_list_SiteA🌓 -install_create_shortcut_windowed_SiteC🌕 uninstall_from_app_settings_SiteC🌕 check_app_not_in_list_SiteA🌓 -install_create_shortcut_windowed_SiteC🌕 uninstall_from_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_windowed_SiteC🌕 uninstall_from_os_SiteC🌕 check_platform_shortcut_not_exists_SiteC🌑 -install_create_shortcut_windowed_SiteC🌕 uninstall_from_app_settings_SiteC🌕 check_platform_shortcut_not_exists_SiteC🌑 -install_create_shortcut_tabbed_SiteA🌕 uninstall_from_list_SiteA🌕 check_app_not_in_list_SiteA🌓 -install_create_shortcut_tabbed_SiteA🌕 uninstall_from_list_SiteA🌕 navigate_browser_SiteA🌕 check_install_icon_shown🌕 -install_create_shortcut_tabbed_SiteA🌕 uninstall_from_list_SiteA🌕 navigate_browser_SiteA🌕 check_launch_icon_not_shown🌕 -install_create_shortcut_tabbed_SiteA🌕 uninstall_from_list_SiteA🌕 check_platform_shortcut_not_exists_SiteA🌑 -install_create_shortcut_tabbed_SiteC🌕 uninstall_from_list_SiteC🌕 check_app_not_in_list_SiteA🌓 -install_create_shortcut_tabbed_SiteC🌕 uninstall_from_list_SiteC🌕 check_platform_shortcut_not_exists_SiteC🌑 -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_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_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🌕 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_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_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_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_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_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_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_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_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_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_policy_app_windowed_no_shortcut_SiteA🌓 create_shortcuts_SiteA🌑 check_platform_shortcut_and_icon_SiteA🌑 -install_policy_app_tabbed_no_shortcut_SiteA🌓 create_shortcuts_SiteA🌑 check_platform_shortcut_and_icon_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_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_platform_shortcut_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_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_platform_shortcut_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_platform_shortcut_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🌕 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_windowed_SiteA🌕 open_app_settings_from_chrome_apps_SiteA🌕 check_browser_navigation_is_app_settings_SiteA🌕 -install_create_shortcut_windowed_SiteA🌕 open_app_settings_from_app_menu_SiteA🌕 check_browser_navigation_is_app_settings_SiteA🌕 -install_omnibox_icon_SiteA🌕 open_app_settings_from_chrome_apps_SiteA🌕 check_browser_navigation_is_app_settings_SiteA🌕 -install_omnibox_icon_SiteA🌕 open_app_settings_from_app_menu_SiteA🌕 check_browser_navigation_is_app_settings_SiteA🌕 -install_policy_app_windowed_no_shortcut_SiteA🌓 open_app_settings_from_chrome_apps_SiteA🌕 check_browser_navigation_is_app_settings_SiteA🌕 -install_policy_app_windowed_no_shortcut_SiteA🌓 open_app_settings_from_app_menu_SiteA🌕 check_browser_navigation_is_app_settings_SiteA🌕 -install_policy_app_windowed_shortcut_SiteA🌓 open_app_settings_from_chrome_apps_SiteA🌕 check_browser_navigation_is_app_settings_SiteA🌕 -install_policy_app_windowed_shortcut_SiteA🌓 open_app_settings_from_app_menu_SiteA🌕 check_browser_navigation_is_app_settings_SiteA🌕 -install_menu_option_SiteA🌕 open_app_settings_from_chrome_apps_SiteA🌕 check_browser_navigation_is_app_settings_SiteA🌕 -install_menu_option_SiteA🌕 open_app_settings_from_app_menu_SiteA🌕 check_browser_navigation_is_app_settings_SiteA🌕 -install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 install_locally_SiteA🌓 check_platform_shortcut_and_icon_SiteA🌓 -install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 install_locally_SiteA🌓 check_platform_shortcut_and_icon_SiteA🌓 -install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 install_locally_SiteA🌓 check_platform_shortcut_and_icon_SiteA🌓 -install_create_shortcut_tabbed_SiteA🌕 switch_profile_clients_Client2🌕 install_locally_SiteA🌓 check_platform_shortcut_and_icon_SiteA🌓 -install_create_shortcut_tabbed_SiteA🌕 switch_profile_clients_Client2🌕 install_locally_SiteA🌓 check_app_in_list_tabbed_SiteA🌓 -install_create_shortcut_tabbed_SiteA🌕 switch_profile_clients_Client2🌕 install_locally_SiteA🌓 navigate_browser_SiteA🌕 check_install_icon_shown🌕 -install_create_shortcut_tabbed_SiteA🌕 switch_profile_clients_Client2🌕 install_locally_SiteA🌓 navigate_browser_SiteA🌕 check_launch_icon_not_shown🌕 -install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 install_locally_SiteA🌓 check_app_in_list_windowed_SiteA🌓 -install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 install_locally_SiteA🌓 check_app_in_list_windowed_SiteA🌓 -install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 install_locally_SiteA🌓 check_app_in_list_windowed_SiteA🌓 -install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 install_locally_SiteA🌓 navigate_browser_SiteA🌕 check_install_icon_not_shown🌕 -install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 install_locally_SiteA🌓 navigate_browser_SiteA🌕 check_install_icon_not_shown🌕 -install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 install_locally_SiteA🌓 navigate_browser_SiteA🌕 check_install_icon_not_shown🌕 -install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 install_locally_SiteA🌓 navigate_browser_SiteA🌕 check_launch_icon_shown🌕 -install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 install_locally_SiteA🌓 navigate_browser_SiteA🌕 check_launch_icon_shown🌕 -install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 install_locally_SiteA🌓 navigate_browser_SiteA🌕 check_launch_icon_shown🌕 -install_create_shortcut_tabbed_SiteC🌕 switch_profile_clients_Client2🌕 install_locally_SiteC🌓 check_app_in_list_tabbed_SiteC🌓 -install_create_shortcut_tabbed_SiteC🌕 switch_profile_clients_Client2🌕 install_locally_SiteC🌓 navigate_browser_SiteC🌕 check_launch_icon_not_shown🌕 -install_create_shortcut_windowed_SiteC🌕 switch_profile_clients_Client2🌕 install_locally_SiteC🌓 check_app_in_list_windowed_SiteC🌓 -install_create_shortcut_windowed_SiteC🌕 switch_profile_clients_Client2🌕 install_locally_SiteC🌓 navigate_browser_SiteC🌕 check_install_icon_not_shown🌕 -install_create_shortcut_windowed_SiteC🌕 switch_profile_clients_Client2🌕 install_locally_SiteC🌓 navigate_browser_SiteC🌕 check_launch_icon_shown🌕 -install_create_shortcut_windowed_SiteC🌕 switch_profile_clients_Client2🌕 install_locally_SiteC🌓 check_platform_shortcut_and_icon_SiteC🌓 -install_create_shortcut_tabbed_SiteC🌕 switch_profile_clients_Client2🌕 install_locally_SiteC🌓 check_platform_shortcut_and_icon_SiteC🌓 -install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 install_locally_SiteA🌓 launch_from_menu_option_SiteA🌕 check_window_created🌕 -install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 install_locally_SiteA🌓 launch_from_launch_icon_SiteA🌕 check_window_created🌕 -install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 install_locally_SiteA🌓 launch_from_chrome_apps_SiteA🌓 check_window_created🌕 -install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 install_locally_SiteA🌓 launch_from_platform_shortcut_SiteA🌓 check_window_created🌕 -install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 install_locally_SiteA🌓 launch_from_menu_option_SiteA🌕 check_window_created🌕 -install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 install_locally_SiteA🌓 launch_from_launch_icon_SiteA🌕 check_window_created🌕 -install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 install_locally_SiteA🌓 launch_from_chrome_apps_SiteA🌓 check_window_created🌕 -install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 install_locally_SiteA🌓 launch_from_platform_shortcut_SiteA🌓 check_window_created🌕 -install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 install_locally_SiteA🌓 launch_from_menu_option_SiteA🌕 check_window_created🌕 -install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 install_locally_SiteA🌓 launch_from_launch_icon_SiteA🌕 check_window_created🌕 -install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 install_locally_SiteA🌓 launch_from_chrome_apps_SiteA🌓 check_window_created🌕 -install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 install_locally_SiteA🌓 launch_from_platform_shortcut_SiteA🌓 check_window_created🌕 -install_create_shortcut_tabbed_SiteA🌕 switch_profile_clients_Client2🌕 launch_from_chrome_apps_SiteA🌓 check_tab_created🌕 -install_create_shortcut_tabbed_SiteA🌕 switch_profile_clients_Client2🌕 launch_from_platform_shortcut_SiteA🌓 check_tab_created🌕 -install_create_shortcut_tabbed_SiteA🌕 switch_profile_clients_Client2🌕 install_locally_SiteA🌓 launch_from_chrome_apps_SiteA🌓 check_tab_created🌕 -install_create_shortcut_tabbed_SiteA🌕 switch_profile_clients_Client2🌕 install_locally_SiteA🌓 launch_from_platform_shortcut_SiteA🌓 check_tab_created🌕 -install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 launch_from_chrome_apps_SiteA🌓 check_tab_created🌕 -install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 launch_from_platform_shortcut_SiteA🌓 check_tab_created🌕 -install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 launch_from_chrome_apps_SiteA🌓 check_tab_created🌕 -install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 launch_from_platform_shortcut_SiteA🌓 check_tab_created🌕 -install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 launch_from_chrome_apps_SiteA🌓 check_tab_created🌕 -install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 launch_from_platform_shortcut_SiteA🌓 check_tab_created🌕 -install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 uninstall_from_list_SiteA🌕 check_app_not_in_list_SiteA🌓 -install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 uninstall_from_list_SiteA🌕 check_app_not_in_list_SiteA🌓 -install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 uninstall_from_list_SiteA🌕 check_app_not_in_list_SiteA🌓 -install_create_shortcut_tabbed_SiteA🌕 switch_profile_clients_Client2🌕 uninstall_from_list_SiteA🌕 check_app_not_in_list_SiteA🌓 -install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 uninstall_from_list_SiteA🌕 switch_profile_clients_Client1🌕 check_app_not_in_list_SiteA🌓 -install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 uninstall_from_list_SiteA🌕 switch_profile_clients_Client1🌕 check_app_not_in_list_SiteA🌓 -install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 uninstall_from_list_SiteA🌕 switch_profile_clients_Client1🌕 check_app_not_in_list_SiteA🌓 -install_create_shortcut_tabbed_SiteA🌕 switch_profile_clients_Client2🌕 uninstall_from_list_SiteA🌕 switch_profile_clients_Client1🌕 check_app_not_in_list_SiteA🌓 -install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 check_app_in_list_not_locally_installed_SiteA🌓 -install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 check_app_in_list_not_locally_installed_SiteA🌓 -install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 check_app_in_list_not_locally_installed_SiteA🌓 -install_create_shortcut_tabbed_SiteA🌕 switch_profile_clients_Client2🌕 check_app_in_list_not_locally_installed_SiteA🌓 -install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 check_platform_shortcut_not_exists_SiteA🌑 -install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 check_platform_shortcut_not_exists_SiteA🌑 -install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 check_platform_shortcut_not_exists_SiteA🌑 -install_create_shortcut_tabbed_SiteA🌕 switch_profile_clients_Client2🌕 check_platform_shortcut_not_exists_SiteA🌑 -install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 navigate_browser_SiteA🌕 check_install_icon_shown🌕 -install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 navigate_browser_SiteA🌕 check_install_icon_shown🌕 -install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 navigate_browser_SiteA🌕 check_install_icon_shown🌕 -install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 navigate_browser_SiteA🌕 check_launch_icon_not_shown🌕 -install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 navigate_browser_SiteA🌕 check_launch_icon_not_shown🌕 -install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 navigate_browser_SiteA🌕 check_launch_icon_not_shown🌕 -install_create_shortcut_windowed_SiteC🌕 switch_profile_clients_Client2🌕 check_app_in_list_not_locally_installed_SiteC🌓 -install_create_shortcut_tabbed_SiteC🌕 switch_profile_clients_Client2🌕 check_app_in_list_not_locally_installed_SiteC🌓 -install_create_shortcut_windowed_SiteC🌕 switch_profile_clients_Client2🌕 check_platform_shortcut_not_exists_SiteC🌑 -install_create_shortcut_tabbed_SiteC🌕 switch_profile_clients_Client2🌕 check_platform_shortcut_not_exists_SiteC🌑 -sync_turn_off🌕 install_create_shortcut_windowed_SiteA🌕 sync_turn_on🌕 switch_profile_clients_Client2🌕 check_app_in_list_not_locally_installed_SiteA🌓 -sync_turn_off🌕 install_omnibox_icon_SiteA🌕 sync_turn_on🌕 switch_profile_clients_Client2🌕 check_app_in_list_not_locally_installed_SiteA🌓 -sync_turn_off🌕 install_menu_option_SiteA🌕 sync_turn_on🌕 switch_profile_clients_Client2🌕 check_app_in_list_not_locally_installed_SiteA🌓 -sync_turn_off🌕 install_create_shortcut_tabbed_SiteA🌕 sync_turn_on🌕 switch_profile_clients_Client2🌕 check_app_in_list_not_locally_installed_SiteA🌓 -sync_turn_off🌕 install_create_shortcut_windowed_SiteC🌕 sync_turn_on🌕 switch_profile_clients_Client2🌕 check_app_in_list_not_locally_installed_SiteC🌓 -sync_turn_off🌕 install_create_shortcut_tabbed_SiteC🌕 sync_turn_on🌕 switch_profile_clients_Client2🌕 check_app_in_list_not_locally_installed_SiteC🌓 -install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌕 uninstall_from_list_SiteA🌕 sync_turn_on🌕 check_app_in_list_not_locally_installed_SiteA🌓 -install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌕 uninstall_from_menu_SiteA🌕 sync_turn_on🌕 check_app_in_list_not_locally_installed_SiteA🌓 -install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌕 uninstall_from_os_SiteA🌕 sync_turn_on🌕 check_app_in_list_not_locally_installed_SiteA🌓 -install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌕 uninstall_from_list_SiteA🌕 sync_turn_on🌕 check_app_in_list_not_locally_installed_SiteA🌓 -install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌕 uninstall_from_menu_SiteA🌕 sync_turn_on🌕 check_app_in_list_not_locally_installed_SiteA🌓 -install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌕 uninstall_from_os_SiteA🌕 sync_turn_on🌕 check_app_in_list_not_locally_installed_SiteA🌓 -install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌕 uninstall_from_list_SiteA🌕 sync_turn_on🌕 check_app_in_list_not_locally_installed_SiteA🌓 -install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌕 uninstall_from_menu_SiteA🌕 sync_turn_on🌕 check_app_in_list_not_locally_installed_SiteA🌓 -install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌕 uninstall_from_os_SiteA🌕 sync_turn_on🌕 check_app_in_list_not_locally_installed_SiteA🌓 -install_create_shortcut_tabbed_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌕 uninstall_from_list_SiteA🌕 sync_turn_on🌕 check_app_in_list_not_locally_installed_SiteA🌓 -install_create_shortcut_tabbed_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌕 uninstall_from_menu_SiteA🌕 sync_turn_on🌕 check_app_in_list_not_locally_installed_SiteA🌓 -install_create_shortcut_tabbed_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌕 uninstall_from_os_SiteA🌕 sync_turn_on🌕 check_app_in_list_not_locally_installed_SiteA🌓 -install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌕 uninstall_from_list_SiteA🌕 sync_turn_on🌕 check_platform_shortcut_not_exists_SiteA🌑 -install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌕 uninstall_from_menu_SiteA🌕 sync_turn_on🌕 check_platform_shortcut_not_exists_SiteA🌑 -install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌕 uninstall_from_os_SiteA🌕 sync_turn_on🌕 check_platform_shortcut_not_exists_SiteA🌑 -install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌕 uninstall_from_list_SiteA🌕 sync_turn_on🌕 check_platform_shortcut_not_exists_SiteA🌑 -install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌕 uninstall_from_menu_SiteA🌕 sync_turn_on🌕 check_platform_shortcut_not_exists_SiteA🌑 -install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌕 uninstall_from_os_SiteA🌕 sync_turn_on🌕 check_platform_shortcut_not_exists_SiteA🌑 -install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌕 uninstall_from_list_SiteA🌕 sync_turn_on🌕 check_platform_shortcut_not_exists_SiteA🌑 -install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌕 uninstall_from_menu_SiteA🌕 sync_turn_on🌕 check_platform_shortcut_not_exists_SiteA🌑 -install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌕 uninstall_from_os_SiteA🌕 sync_turn_on🌕 check_platform_shortcut_not_exists_SiteA🌑 -install_create_shortcut_tabbed_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌕 uninstall_from_list_SiteA🌕 sync_turn_on🌕 check_platform_shortcut_not_exists_SiteA🌑 -install_create_shortcut_tabbed_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌕 uninstall_from_menu_SiteA🌕 sync_turn_on🌕 check_platform_shortcut_not_exists_SiteA🌑 -install_create_shortcut_tabbed_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌕 uninstall_from_os_SiteA🌕 sync_turn_on🌕 check_platform_shortcut_not_exists_SiteA🌑 -install_create_shortcut_tabbed_SiteA🌕 install_policy_app_windowed_no_shortcut_SiteA🌓 check_platform_shortcut_and_icon_SiteA🌓 -install_create_shortcut_tabbed_SiteA🌕 install_policy_app_windowed_shortcut_SiteA🌓 check_platform_shortcut_and_icon_SiteA🌓 -install_create_shortcut_windowed_SiteA🌕 install_policy_app_tabbed_no_shortcut_SiteA🌓 check_platform_shortcut_and_icon_SiteA🌓 -install_create_shortcut_windowed_SiteA🌕 install_policy_app_windowed_no_shortcut_SiteA🌓 check_platform_shortcut_and_icon_SiteA🌓 -install_omnibox_icon_SiteA🌕 install_policy_app_tabbed_no_shortcut_SiteA🌓 check_platform_shortcut_and_icon_SiteA🌓 -install_omnibox_icon_SiteA🌕 install_policy_app_windowed_no_shortcut_SiteA🌓 check_platform_shortcut_and_icon_SiteA🌓 -install_menu_option_SiteA🌕 install_policy_app_tabbed_no_shortcut_SiteA🌓 check_platform_shortcut_and_icon_SiteA🌓 -install_menu_option_SiteA🌕 install_policy_app_windowed_no_shortcut_SiteA🌓 check_platform_shortcut_and_icon_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_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_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_and_icon_SiteA🌓 -install_policy_app_tabbed_shortcut_SiteA🌓 install_omnibox_icon_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌓 -install_policy_app_tabbed_shortcut_SiteA🌓 install_menu_option_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌓 -install_policy_app_tabbed_no_shortcut_SiteA🌓 install_create_shortcut_windowed_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌓 -install_policy_app_tabbed_no_shortcut_SiteA🌓 install_omnibox_icon_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌓 -install_policy_app_tabbed_no_shortcut_SiteA🌓 install_menu_option_SiteA🌕 check_platform_shortcut_and_icon_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_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_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🌕 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_and_icon_SiteA🌓 -install_create_shortcut_tabbed_SiteA🌕 install_policy_app_tabbed_no_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌓 -install_create_shortcut_tabbed_SiteA🌕 install_policy_app_windowed_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌓 -install_create_shortcut_tabbed_SiteA🌕 install_policy_app_tabbed_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_platform_shortcut_and_icon_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_and_icon_SiteA🌓 -install_create_shortcut_windowed_SiteA🌕 install_policy_app_tabbed_no_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌓 -install_create_shortcut_windowed_SiteA🌕 install_policy_app_windowed_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌓 -install_create_shortcut_windowed_SiteA🌕 install_policy_app_tabbed_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌓 -install_omnibox_icon_SiteA🌕 install_policy_app_windowed_no_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌓 -install_omnibox_icon_SiteA🌕 install_policy_app_tabbed_no_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌓 -install_omnibox_icon_SiteA🌕 install_policy_app_windowed_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌓 -install_omnibox_icon_SiteA🌕 install_policy_app_tabbed_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌓 -install_menu_option_SiteA🌕 install_policy_app_windowed_no_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌓 -install_menu_option_SiteA🌕 install_policy_app_tabbed_no_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌓 -install_menu_option_SiteA🌕 install_policy_app_windowed_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌓 -install_menu_option_SiteA🌕 install_policy_app_tabbed_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_platform_shortcut_and_icon_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_and_icon_SiteA🌓 -install_policy_app_tabbed_shortcut_SiteA🌓 install_omnibox_icon_SiteA🌕 uninstall_policy_app_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌓 -install_policy_app_tabbed_shortcut_SiteA🌓 install_menu_option_SiteA🌕 uninstall_policy_app_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌓 -install_policy_app_tabbed_no_shortcut_SiteA🌓 install_create_shortcut_windowed_SiteA🌕 uninstall_policy_app_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌓 -install_policy_app_tabbed_no_shortcut_SiteA🌓 install_omnibox_icon_SiteA🌕 uninstall_policy_app_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌓 -install_policy_app_tabbed_no_shortcut_SiteA🌓 install_menu_option_SiteA🌕 uninstall_policy_app_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌓 -install_create_shortcut_windowed_SiteA🌕 close_pwa🌕 manifest_update_colors_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_color_correct_SiteA🌑 -install_create_shortcut_windowed_SiteA🌕 close_pwa🌕 manifest_update_colors_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_color_correct_SiteA🌑 -install_create_shortcut_windowed_SiteA🌕 close_pwa🌕 manifest_update_colors_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_color_correct_SiteA🌑 -install_create_shortcut_windowed_SiteA🌕 close_pwa🌕 manifest_update_colors_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_color_correct_SiteA🌑 -install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_colors_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_color_correct_SiteA🌑 -install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_colors_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_color_correct_SiteA🌑 -install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_colors_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_color_correct_SiteA🌑 -install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_colors_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_color_correct_SiteA🌑 -install_menu_option_SiteA🌕 close_pwa🌕 manifest_update_colors_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_color_correct_SiteA🌑 -install_menu_option_SiteA🌕 close_pwa🌕 manifest_update_colors_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_color_correct_SiteA🌑 -install_menu_option_SiteA🌕 close_pwa🌕 manifest_update_colors_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_color_correct_SiteA🌑 -install_menu_option_SiteA🌕 close_pwa🌕 manifest_update_colors_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_color_correct_SiteA🌑 -install_create_shortcut_windowed_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_menu_option_SiteA🌕 check_tab_not_created🌕 -install_create_shortcut_windowed_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_launch_icon_SiteA🌕 check_tab_not_created🌕 -install_create_shortcut_windowed_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_chrome_apps_SiteA🌓 check_tab_not_created🌕 -install_create_shortcut_windowed_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_platform_shortcut_SiteA🌓 check_tab_not_created🌕 -install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_menu_option_SiteA🌕 check_tab_not_created🌕 -install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_launch_icon_SiteA🌕 check_tab_not_created🌕 -install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_chrome_apps_SiteA🌓 check_tab_not_created🌕 -install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_platform_shortcut_SiteA🌓 check_tab_not_created🌕 -install_menu_option_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_menu_option_SiteA🌕 check_tab_not_created🌕 -install_menu_option_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_launch_icon_SiteA🌕 check_tab_not_created🌕 -install_menu_option_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_chrome_apps_SiteA🌓 check_tab_not_created🌕 -install_menu_option_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_platform_shortcut_SiteA🌓 check_tab_not_created🌕 -install_create_shortcut_windowed_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_menu_option_SiteA🌕 check_window_created🌕 -install_create_shortcut_windowed_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_launch_icon_SiteA🌕 check_window_created🌕 -install_create_shortcut_windowed_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_chrome_apps_SiteA🌓 check_window_created🌕 -install_create_shortcut_windowed_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_platform_shortcut_SiteA🌓 check_window_created🌕 -install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_menu_option_SiteA🌕 check_window_created🌕 -install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_launch_icon_SiteA🌕 check_window_created🌕 -install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_chrome_apps_SiteA🌓 check_window_created🌕 -install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_platform_shortcut_SiteA🌓 check_window_created🌕 -install_menu_option_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_menu_option_SiteA🌕 check_window_created🌕 -install_menu_option_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_launch_icon_SiteA🌕 check_window_created🌕 -install_menu_option_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_chrome_apps_SiteA🌓 check_window_created🌕 -install_menu_option_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_platform_shortcut_SiteA🌓 check_window_created🌕 -install_create_shortcut_windowed_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_menu_option_SiteA🌕 check_window_display_minimal🌕 -install_create_shortcut_windowed_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_launch_icon_SiteA🌕 check_window_display_minimal🌕 -install_create_shortcut_windowed_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_chrome_apps_SiteA🌓 check_window_display_minimal🌕 -install_create_shortcut_windowed_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_platform_shortcut_SiteA🌓 check_window_display_minimal🌕 -install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_menu_option_SiteA🌕 check_window_display_minimal🌕 -install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_launch_icon_SiteA🌕 check_window_display_minimal🌕 -install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_chrome_apps_SiteA🌓 check_window_display_minimal🌕 -install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_platform_shortcut_SiteA🌓 check_window_display_minimal🌕 -install_menu_option_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_menu_option_SiteA🌕 check_window_display_minimal🌕 -install_menu_option_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_launch_icon_SiteA🌕 check_window_display_minimal🌕 -install_menu_option_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_chrome_apps_SiteA🌓 check_window_display_minimal🌕 -install_menu_option_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_platform_shortcut_SiteA🌓 check_window_display_minimal🌕 -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_SiteAFoo🌕 manifest_update_scope_site_a_foo_to_SiteARoot🌕 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_SiteARoot🌕 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_SiteARoot🌕 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_SiteARoot🌕 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_SiteARoot🌕 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_SiteARoot🌕 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_SiteARoot🌕 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_SiteARoot🌕 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_SiteARoot🌕 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_SiteARoot🌕 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_SiteARoot🌕 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_SiteARoot🌕 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_SiteARoot🌕 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_SiteARoot🌕 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_SiteARoot🌕 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_SiteARoot🌕 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_SiteARoot🌕 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_SiteARoot🌕 launch_from_platform_shortcut_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_SiteARoot🌕 navigate_browser_SiteABar🌕 check_install_icon_not_shown🌕 -install_omnibox_icon_SiteAFoo🌕 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteARoot🌕 navigate_browser_SiteABar🌕 check_install_icon_not_shown🌕 -install_menu_option_SiteAFoo🌕 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteARoot🌕 navigate_browser_SiteABar🌕 check_install_icon_not_shown🌕 -install_create_shortcut_windowed_SiteAFoo🌕 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteARoot🌕 navigate_browser_SiteABar🌕 check_launch_icon_shown🌕 -install_omnibox_icon_SiteAFoo🌕 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteARoot🌕 navigate_browser_SiteABar🌕 check_launch_icon_shown🌕 -install_menu_option_SiteAFoo🌕 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteARoot🌕 navigate_browser_SiteABar🌕 check_launch_icon_shown🌕 -install_create_shortcut_windowed_SiteAFoo🌕 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteARoot🌕 navigate_browser_SiteAFoo🌕 check_install_icon_not_shown🌕 -install_omnibox_icon_SiteAFoo🌕 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteARoot🌕 navigate_browser_SiteAFoo🌕 check_install_icon_not_shown🌕 -install_menu_option_SiteAFoo🌕 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteARoot🌕 navigate_browser_SiteAFoo🌕 check_install_icon_not_shown🌕 -install_create_shortcut_windowed_SiteAFoo🌕 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteARoot🌕 navigate_browser_SiteAFoo🌕 check_launch_icon_shown🌕 -install_omnibox_icon_SiteAFoo🌕 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteARoot🌕 navigate_browser_SiteAFoo🌕 check_launch_icon_shown🌕 -install_menu_option_SiteAFoo🌕 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteARoot🌕 navigate_browser_SiteAFoo🌕 check_launch_icon_shown🌕 -switch_incognito_profile🌑 navigate_browser_SiteA🌑 check_create_shortcut_not_shown🌑 -switch_incognito_profile🌑 navigate_browser_SiteC🌑 check_create_shortcut_not_shown🌑 -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🌕 -navigate_browser_SiteA🌕 check_create_shortcut_shown🌑 -navigate_browser_SiteAFoo🌕 check_install_icon_shown🌕 -navigate_browser_SiteC🌕 check_create_shortcut_shown🌑 -navigate_browser_SiteC🌕 check_install_icon_not_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_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🌕 -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🌕 -install_create_shortcut_windowed_SiteA🌕 navigate_pwa_site_a_to_SiteB🌕 check_app_title_site_a_is_SiteA🌑 -install_omnibox_icon_SiteA🌕 navigate_pwa_site_a_to_SiteB🌕 check_app_title_site_a_is_SiteA🌑 -install_menu_option_SiteA🌕 navigate_pwa_site_a_to_SiteB🌕 check_app_title_site_a_is_SiteA🌑 -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🌑 -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_SiteB🌕 check_site_handles_file_SiteB_Txt🌑 check_site_handles_file_SiteB_Png🌑 -install_omnibox_icon_SiteB🌕 check_site_handles_file_SiteB_Txt🌑 check_site_handles_file_SiteB_Png🌑 -install_policy_app_windowed_no_shortcut_SiteB🌓 check_site_handles_file_SiteB_Txt🌑 check_site_handles_file_SiteB_Png🌑 -install_policy_app_windowed_shortcut_SiteB🌓 check_site_handles_file_SiteB_Txt🌑 check_site_handles_file_SiteB_Png🌑 -install_menu_option_SiteB🌕 check_site_handles_file_SiteB_Txt🌑 check_site_handles_file_SiteB_Png🌑 -install_create_shortcut_tabbed_SiteB🌕 check_site_handles_file_SiteB_Txt🌑 check_site_handles_file_SiteB_Png🌑 -install_policy_app_tabbed_shortcut_SiteB🌓 check_site_handles_file_SiteB_Txt🌑 check_site_handles_file_SiteB_Png🌑 -install_policy_app_tabbed_no_shortcut_SiteB🌓 check_site_handles_file_SiteB_Txt🌑 check_site_handles_file_SiteB_Png🌑 -install_create_shortcut_windowed_SiteB🌕 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 -install_omnibox_icon_SiteB🌕 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 -install_policy_app_windowed_no_shortcut_SiteB🌓 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 -install_policy_app_windowed_shortcut_SiteB🌓 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 -install_menu_option_SiteB🌕 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 -install_create_shortcut_tabbed_SiteB🌕 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 -install_policy_app_tabbed_shortcut_SiteB🌓 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 -install_policy_app_tabbed_no_shortcut_SiteB🌓 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 -install_create_shortcut_windowed_SiteB🌕 launch_file_OneTextFile🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_One🌑 check_files_loaded_in_site_SiteB_OneTextFile🌑 -install_omnibox_icon_SiteB🌕 launch_file_OneTextFile🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_One🌑 check_files_loaded_in_site_SiteB_OneTextFile🌑 -install_policy_app_windowed_no_shortcut_SiteB🌓 launch_file_OneTextFile🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_One🌑 check_files_loaded_in_site_SiteB_OneTextFile🌑 -install_policy_app_windowed_shortcut_SiteB🌓 launch_file_OneTextFile🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_One🌑 check_files_loaded_in_site_SiteB_OneTextFile🌑 -install_menu_option_SiteB🌕 launch_file_OneTextFile🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_One🌑 check_files_loaded_in_site_SiteB_OneTextFile🌑 -install_create_shortcut_tabbed_SiteB🌕 launch_file_OneTextFile🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_One🌑 check_files_loaded_in_site_SiteB_OneTextFile🌑 -install_policy_app_tabbed_shortcut_SiteB🌓 launch_file_OneTextFile🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_One🌑 check_files_loaded_in_site_SiteB_OneTextFile🌑 -install_policy_app_tabbed_no_shortcut_SiteB🌓 launch_file_OneTextFile🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_One🌑 check_files_loaded_in_site_SiteB_OneTextFile🌑 -install_create_shortcut_windowed_SiteB🌕 launch_file_MultipleTextFiles🌑 check_file_handling_dialog_Shown🌑 -install_omnibox_icon_SiteB🌕 launch_file_MultipleTextFiles🌑 check_file_handling_dialog_Shown🌑 -install_policy_app_windowed_no_shortcut_SiteB🌓 launch_file_MultipleTextFiles🌑 check_file_handling_dialog_Shown🌑 -install_policy_app_windowed_shortcut_SiteB🌓 launch_file_MultipleTextFiles🌑 check_file_handling_dialog_Shown🌑 -install_menu_option_SiteB🌕 launch_file_MultipleTextFiles🌑 check_file_handling_dialog_Shown🌑 -install_create_shortcut_tabbed_SiteB🌕 launch_file_MultipleTextFiles🌑 check_file_handling_dialog_Shown🌑 -install_policy_app_tabbed_shortcut_SiteB🌓 launch_file_MultipleTextFiles🌑 check_file_handling_dialog_Shown🌑 -install_policy_app_tabbed_no_shortcut_SiteB🌓 launch_file_MultipleTextFiles🌑 check_file_handling_dialog_Shown🌑 -install_create_shortcut_windowed_SiteB🌕 launch_file_MultipleTextFiles🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_One🌑 check_files_loaded_in_site_SiteB_MultipleTextFiles🌑 -install_omnibox_icon_SiteB🌕 launch_file_MultipleTextFiles🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_One🌑 check_files_loaded_in_site_SiteB_MultipleTextFiles🌑 -install_policy_app_windowed_no_shortcut_SiteB🌓 launch_file_MultipleTextFiles🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_One🌑 check_files_loaded_in_site_SiteB_MultipleTextFiles🌑 -install_policy_app_windowed_shortcut_SiteB🌓 launch_file_MultipleTextFiles🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_One🌑 check_files_loaded_in_site_SiteB_MultipleTextFiles🌑 -install_menu_option_SiteB🌕 launch_file_MultipleTextFiles🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_One🌑 check_files_loaded_in_site_SiteB_MultipleTextFiles🌑 -install_create_shortcut_tabbed_SiteB🌕 launch_file_MultipleTextFiles🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_One🌑 check_files_loaded_in_site_SiteB_MultipleTextFiles🌑 -install_policy_app_tabbed_shortcut_SiteB🌓 launch_file_MultipleTextFiles🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_One🌑 check_files_loaded_in_site_SiteB_MultipleTextFiles🌑 -install_policy_app_tabbed_no_shortcut_SiteB🌓 launch_file_MultipleTextFiles🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_One🌑 check_files_loaded_in_site_SiteB_MultipleTextFiles🌑 -install_create_shortcut_windowed_SiteB🌕 launch_file_OnePngFile🌑 check_file_handling_dialog_Shown🌑 -install_omnibox_icon_SiteB🌕 launch_file_OnePngFile🌑 check_file_handling_dialog_Shown🌑 -install_policy_app_windowed_no_shortcut_SiteB🌓 launch_file_OnePngFile🌑 check_file_handling_dialog_Shown🌑 -install_policy_app_windowed_shortcut_SiteB🌓 launch_file_OnePngFile🌑 check_file_handling_dialog_Shown🌑 -install_menu_option_SiteB🌕 launch_file_OnePngFile🌑 check_file_handling_dialog_Shown🌑 -install_create_shortcut_tabbed_SiteB🌕 launch_file_OnePngFile🌑 check_file_handling_dialog_Shown🌑 -install_policy_app_tabbed_shortcut_SiteB🌓 launch_file_OnePngFile🌑 check_file_handling_dialog_Shown🌑 -install_policy_app_tabbed_no_shortcut_SiteB🌓 launch_file_OnePngFile🌑 check_file_handling_dialog_Shown🌑 -install_create_shortcut_windowed_SiteB🌕 launch_file_OnePngFile🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_One🌑 check_files_loaded_in_site_SiteB_OnePngFile🌑 -install_omnibox_icon_SiteB🌕 launch_file_OnePngFile🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_One🌑 check_files_loaded_in_site_SiteB_OnePngFile🌑 -install_policy_app_windowed_no_shortcut_SiteB🌓 launch_file_OnePngFile🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_One🌑 check_files_loaded_in_site_SiteB_OnePngFile🌑 -install_policy_app_windowed_shortcut_SiteB🌓 launch_file_OnePngFile🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_One🌑 check_files_loaded_in_site_SiteB_OnePngFile🌑 -install_menu_option_SiteB🌕 launch_file_OnePngFile🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_One🌑 check_files_loaded_in_site_SiteB_OnePngFile🌑 -install_create_shortcut_tabbed_SiteB🌕 launch_file_OnePngFile🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_One🌑 check_files_loaded_in_site_SiteB_OnePngFile🌑 -install_policy_app_tabbed_shortcut_SiteB🌓 launch_file_OnePngFile🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_One🌑 check_files_loaded_in_site_SiteB_OnePngFile🌑 -install_policy_app_tabbed_no_shortcut_SiteB🌓 launch_file_OnePngFile🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_One🌑 check_files_loaded_in_site_SiteB_OnePngFile🌑 -install_create_shortcut_windowed_SiteB🌕 launch_file_MultiplePngFiles🌑 check_file_handling_dialog_Shown🌑 -install_omnibox_icon_SiteB🌕 launch_file_MultiplePngFiles🌑 check_file_handling_dialog_Shown🌑 -install_policy_app_windowed_no_shortcut_SiteB🌓 launch_file_MultiplePngFiles🌑 check_file_handling_dialog_Shown🌑 -install_policy_app_windowed_shortcut_SiteB🌓 launch_file_MultiplePngFiles🌑 check_file_handling_dialog_Shown🌑 -install_menu_option_SiteB🌕 launch_file_MultiplePngFiles🌑 check_file_handling_dialog_Shown🌑 -install_create_shortcut_tabbed_SiteB🌕 launch_file_MultiplePngFiles🌑 check_file_handling_dialog_Shown🌑 -install_policy_app_tabbed_shortcut_SiteB🌓 launch_file_MultiplePngFiles🌑 check_file_handling_dialog_Shown🌑 -install_policy_app_tabbed_no_shortcut_SiteB🌓 launch_file_MultiplePngFiles🌑 check_file_handling_dialog_Shown🌑 -install_create_shortcut_windowed_SiteB🌕 launch_file_MultiplePngFiles🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_Two🌑 check_files_loaded_in_site_SiteB_MultiplePngFiles🌑 -install_omnibox_icon_SiteB🌕 launch_file_MultiplePngFiles🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_Two🌑 check_files_loaded_in_site_SiteB_MultiplePngFiles🌑 -install_policy_app_windowed_no_shortcut_SiteB🌓 launch_file_MultiplePngFiles🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_Two🌑 check_files_loaded_in_site_SiteB_MultiplePngFiles🌑 -install_policy_app_windowed_shortcut_SiteB🌓 launch_file_MultiplePngFiles🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_Two🌑 check_files_loaded_in_site_SiteB_MultiplePngFiles🌑 -install_menu_option_SiteB🌕 launch_file_MultiplePngFiles🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_Two🌑 check_files_loaded_in_site_SiteB_MultiplePngFiles🌑 -install_create_shortcut_tabbed_SiteB🌕 launch_file_MultiplePngFiles🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_Two🌑 check_files_loaded_in_site_SiteB_MultiplePngFiles🌑 -install_policy_app_tabbed_shortcut_SiteB🌓 launch_file_MultiplePngFiles🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_Two🌑 check_files_loaded_in_site_SiteB_MultiplePngFiles🌑 -install_policy_app_tabbed_no_shortcut_SiteB🌓 launch_file_MultiplePngFiles🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_Two🌑 check_files_loaded_in_site_SiteB_MultiplePngFiles🌑 -install_create_shortcut_windowed_SiteB🌕 launch_file_OneTextFile🌑 file_handling_dialog_Allow_Remember🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_NotShown🌑 check_pwa_window_created_SiteB_One🌑 -install_omnibox_icon_SiteB🌕 launch_file_OneTextFile🌑 file_handling_dialog_Allow_Remember🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_NotShown🌑 check_pwa_window_created_SiteB_One🌑 -install_policy_app_windowed_no_shortcut_SiteB🌓 launch_file_OneTextFile🌑 file_handling_dialog_Allow_Remember🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_NotShown🌑 check_pwa_window_created_SiteB_One🌑 -install_policy_app_windowed_shortcut_SiteB🌓 launch_file_OneTextFile🌑 file_handling_dialog_Allow_Remember🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_NotShown🌑 check_pwa_window_created_SiteB_One🌑 -install_menu_option_SiteB🌕 launch_file_OneTextFile🌑 file_handling_dialog_Allow_Remember🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_NotShown🌑 check_pwa_window_created_SiteB_One🌑 -install_create_shortcut_tabbed_SiteB🌕 launch_file_OneTextFile🌑 file_handling_dialog_Allow_Remember🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_NotShown🌑 check_pwa_window_created_SiteB_One🌑 -install_policy_app_tabbed_shortcut_SiteB🌓 launch_file_OneTextFile🌑 file_handling_dialog_Allow_Remember🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_NotShown🌑 check_pwa_window_created_SiteB_One🌑 -install_policy_app_tabbed_no_shortcut_SiteB🌓 launch_file_OneTextFile🌑 file_handling_dialog_Allow_Remember🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_NotShown🌑 check_pwa_window_created_SiteB_One🌑 -install_create_shortcut_windowed_SiteB🌕 launch_file_OneTextFile🌑 file_handling_dialog_Allow_AskAgain🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 -install_omnibox_icon_SiteB🌕 launch_file_OneTextFile🌑 file_handling_dialog_Allow_AskAgain🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 -install_policy_app_windowed_no_shortcut_SiteB🌓 launch_file_OneTextFile🌑 file_handling_dialog_Allow_AskAgain🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 -install_policy_app_windowed_shortcut_SiteB🌓 launch_file_OneTextFile🌑 file_handling_dialog_Allow_AskAgain🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 -install_menu_option_SiteB🌕 launch_file_OneTextFile🌑 file_handling_dialog_Allow_AskAgain🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 -install_create_shortcut_tabbed_SiteB🌕 launch_file_OneTextFile🌑 file_handling_dialog_Allow_AskAgain🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 -install_policy_app_tabbed_shortcut_SiteB🌓 launch_file_OneTextFile🌑 file_handling_dialog_Allow_AskAgain🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 -install_policy_app_tabbed_no_shortcut_SiteB🌓 launch_file_OneTextFile🌑 file_handling_dialog_Allow_AskAgain🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 -install_create_shortcut_windowed_SiteB🌕 launch_file_OneTextFile🌑 file_handling_dialog_Deny_AskAgain🌑 check_window_not_created🌑 check_site_handles_file_SiteB_Txt🌑 check_site_handles_file_SiteB_Png🌑 -install_omnibox_icon_SiteB🌕 launch_file_OneTextFile🌑 file_handling_dialog_Deny_AskAgain🌑 check_window_not_created🌑 check_site_handles_file_SiteB_Txt🌑 check_site_handles_file_SiteB_Png🌑 -install_policy_app_windowed_no_shortcut_SiteB🌓 launch_file_OneTextFile🌑 file_handling_dialog_Deny_AskAgain🌑 check_window_not_created🌑 check_site_handles_file_SiteB_Txt🌑 check_site_handles_file_SiteB_Png🌑 -install_policy_app_windowed_shortcut_SiteB🌓 launch_file_OneTextFile🌑 file_handling_dialog_Deny_AskAgain🌑 check_window_not_created🌑 check_site_handles_file_SiteB_Txt🌑 check_site_handles_file_SiteB_Png🌑 -install_menu_option_SiteB🌕 launch_file_OneTextFile🌑 file_handling_dialog_Deny_AskAgain🌑 check_window_not_created🌑 check_site_handles_file_SiteB_Txt🌑 check_site_handles_file_SiteB_Png🌑 -install_create_shortcut_tabbed_SiteB🌕 launch_file_OneTextFile🌑 file_handling_dialog_Deny_AskAgain🌑 check_window_not_created🌑 check_site_handles_file_SiteB_Txt🌑 check_site_handles_file_SiteB_Png🌑 -install_policy_app_tabbed_shortcut_SiteB🌓 launch_file_OneTextFile🌑 file_handling_dialog_Deny_AskAgain🌑 check_window_not_created🌑 check_site_handles_file_SiteB_Txt🌑 check_site_handles_file_SiteB_Png🌑 -install_policy_app_tabbed_no_shortcut_SiteB🌓 launch_file_OneTextFile🌑 file_handling_dialog_Deny_AskAgain🌑 check_window_not_created🌑 check_site_handles_file_SiteB_Txt🌑 check_site_handles_file_SiteB_Png🌑 -install_create_shortcut_windowed_SiteB🌕 launch_file_OneTextFile🌑 file_handling_dialog_Deny_AskAgain🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 -install_omnibox_icon_SiteB🌕 launch_file_OneTextFile🌑 file_handling_dialog_Deny_AskAgain🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 -install_policy_app_windowed_no_shortcut_SiteB🌓 launch_file_OneTextFile🌑 file_handling_dialog_Deny_AskAgain🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 -install_policy_app_windowed_shortcut_SiteB🌓 launch_file_OneTextFile🌑 file_handling_dialog_Deny_AskAgain🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 -install_menu_option_SiteB🌕 launch_file_OneTextFile🌑 file_handling_dialog_Deny_AskAgain🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 -install_create_shortcut_tabbed_SiteB🌕 launch_file_OneTextFile🌑 file_handling_dialog_Deny_AskAgain🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 -install_policy_app_tabbed_shortcut_SiteB🌓 launch_file_OneTextFile🌑 file_handling_dialog_Deny_AskAgain🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 -install_policy_app_tabbed_no_shortcut_SiteB🌓 launch_file_OneTextFile🌑 file_handling_dialog_Deny_AskAgain🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 -install_create_shortcut_windowed_SiteB🌕 launch_file_OneTextFile🌑 file_handling_dialog_Deny_Remember🌑 check_window_not_created🌑 check_site_not_handles_file_SiteB_Txt🌑 check_site_not_handles_file_SiteB_Png🌑 -install_omnibox_icon_SiteB🌕 launch_file_OneTextFile🌑 file_handling_dialog_Deny_Remember🌑 check_window_not_created🌑 check_site_not_handles_file_SiteB_Txt🌑 check_site_not_handles_file_SiteB_Png🌑 -install_policy_app_windowed_no_shortcut_SiteB🌓 launch_file_OneTextFile🌑 file_handling_dialog_Deny_Remember🌑 check_window_not_created🌑 check_site_not_handles_file_SiteB_Txt🌑 check_site_not_handles_file_SiteB_Png🌑 -install_policy_app_windowed_shortcut_SiteB🌓 launch_file_OneTextFile🌑 file_handling_dialog_Deny_Remember🌑 check_window_not_created🌑 check_site_not_handles_file_SiteB_Txt🌑 check_site_not_handles_file_SiteB_Png🌑 -install_menu_option_SiteB🌕 launch_file_OneTextFile🌑 file_handling_dialog_Deny_Remember🌑 check_window_not_created🌑 check_site_not_handles_file_SiteB_Txt🌑 check_site_not_handles_file_SiteB_Png🌑 -install_create_shortcut_tabbed_SiteB🌕 launch_file_OneTextFile🌑 file_handling_dialog_Deny_Remember🌑 check_window_not_created🌑 check_site_not_handles_file_SiteB_Txt🌑 check_site_not_handles_file_SiteB_Png🌑 -install_policy_app_tabbed_shortcut_SiteB🌓 launch_file_OneTextFile🌑 file_handling_dialog_Deny_Remember🌑 check_window_not_created🌑 check_site_not_handles_file_SiteB_Txt🌑 check_site_not_handles_file_SiteB_Png🌑 -install_policy_app_tabbed_no_shortcut_SiteB🌓 launch_file_OneTextFile🌑 file_handling_dialog_Deny_Remember🌑 check_window_not_created🌑 check_site_not_handles_file_SiteB_Txt🌑 check_site_not_handles_file_SiteB_Png🌑 -install_create_shortcut_windowed_SiteB🌕 add_file_handling_policy_approval_SiteB🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_NotShown🌑 check_pwa_window_created_SiteB_One🌑 -install_omnibox_icon_SiteB🌕 add_file_handling_policy_approval_SiteB🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_NotShown🌑 check_pwa_window_created_SiteB_One🌑 -install_policy_app_windowed_no_shortcut_SiteB🌓 add_file_handling_policy_approval_SiteB🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_NotShown🌑 check_pwa_window_created_SiteB_One🌑 -install_policy_app_windowed_shortcut_SiteB🌓 add_file_handling_policy_approval_SiteB🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_NotShown🌑 check_pwa_window_created_SiteB_One🌑 -install_menu_option_SiteB🌕 add_file_handling_policy_approval_SiteB🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_NotShown🌑 check_pwa_window_created_SiteB_One🌑 -install_create_shortcut_tabbed_SiteB🌕 add_file_handling_policy_approval_SiteB🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_NotShown🌑 check_pwa_window_created_SiteB_One🌑 -install_policy_app_tabbed_shortcut_SiteB🌓 add_file_handling_policy_approval_SiteB🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_NotShown🌑 check_pwa_window_created_SiteB_One🌑 -install_policy_app_tabbed_no_shortcut_SiteB🌓 add_file_handling_policy_approval_SiteB🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_NotShown🌑 check_pwa_window_created_SiteB_One🌑 -install_create_shortcut_windowed_SiteB🌕 add_file_handling_policy_approval_SiteB🌑 remove_file_handling_policy_approval_SiteB🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 -install_omnibox_icon_SiteB🌕 add_file_handling_policy_approval_SiteB🌑 remove_file_handling_policy_approval_SiteB🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 -install_policy_app_windowed_no_shortcut_SiteB🌓 add_file_handling_policy_approval_SiteB🌑 remove_file_handling_policy_approval_SiteB🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 -install_policy_app_windowed_shortcut_SiteB🌓 add_file_handling_policy_approval_SiteB🌑 remove_file_handling_policy_approval_SiteB🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 -install_menu_option_SiteB🌕 add_file_handling_policy_approval_SiteB🌑 remove_file_handling_policy_approval_SiteB🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 -install_create_shortcut_tabbed_SiteB🌕 add_file_handling_policy_approval_SiteB🌑 remove_file_handling_policy_approval_SiteB🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 -install_policy_app_tabbed_shortcut_SiteB🌓 add_file_handling_policy_approval_SiteB🌑 remove_file_handling_policy_approval_SiteB🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 -install_policy_app_tabbed_no_shortcut_SiteB🌓 add_file_handling_policy_approval_SiteB🌑 remove_file_handling_policy_approval_SiteB🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 +# This is a generated file. +# Full coverage: 54%, with partial coverage: 72% +install_create_shortcut_windowed_SiteA🌕 manifest_update_title_SiteA🌑 accept_app_id_update_dialog🌑 close_pwa🌑 launch_from_menu_option_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 +install_create_shortcut_windowed_SiteA🌕 manifest_update_title_SiteA🌑 accept_app_id_update_dialog🌑 close_pwa🌑 launch_from_launch_icon_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 +install_create_shortcut_windowed_SiteA🌕 manifest_update_title_SiteA🌑 accept_app_id_update_dialog🌑 close_pwa🌑 launch_from_chrome_apps_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 +install_create_shortcut_windowed_SiteA🌕 manifest_update_title_SiteA🌑 accept_app_id_update_dialog🌑 close_pwa🌑 launch_from_platform_shortcut_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 +install_omnibox_icon_SiteA🌕 manifest_update_title_SiteA🌑 accept_app_id_update_dialog🌑 close_pwa🌑 launch_from_menu_option_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 +install_omnibox_icon_SiteA🌕 manifest_update_title_SiteA🌑 accept_app_id_update_dialog🌑 close_pwa🌑 launch_from_launch_icon_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 +install_omnibox_icon_SiteA🌕 manifest_update_title_SiteA🌑 accept_app_id_update_dialog🌑 close_pwa🌑 launch_from_chrome_apps_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 +install_omnibox_icon_SiteA🌕 manifest_update_title_SiteA🌑 accept_app_id_update_dialog🌑 close_pwa🌑 launch_from_platform_shortcut_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 +install_menu_option_SiteA🌕 manifest_update_title_SiteA🌑 accept_app_id_update_dialog🌑 close_pwa🌑 launch_from_menu_option_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 +install_menu_option_SiteA🌕 manifest_update_title_SiteA🌑 accept_app_id_update_dialog🌑 close_pwa🌑 launch_from_launch_icon_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 +install_menu_option_SiteA🌕 manifest_update_title_SiteA🌑 accept_app_id_update_dialog🌑 close_pwa🌑 launch_from_chrome_apps_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 +install_menu_option_SiteA🌕 manifest_update_title_SiteA🌑 accept_app_id_update_dialog🌑 close_pwa🌑 launch_from_platform_shortcut_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 +install_create_shortcut_windowed_SiteA🌕 manifest_update_title_SiteA🌑 deny_app_update_dialog🌑 check_app_not_in_list_SiteA🌑 check_platform_shortcut_not_exists_SiteA🌑 +install_omnibox_icon_SiteA🌕 manifest_update_title_SiteA🌑 deny_app_update_dialog🌑 check_app_not_in_list_SiteA🌑 check_platform_shortcut_not_exists_SiteA🌑 +install_menu_option_SiteA🌕 manifest_update_title_SiteA🌑 deny_app_update_dialog🌑 check_app_not_in_list_SiteA🌑 check_platform_shortcut_not_exists_SiteA🌑 +install_create_shortcut_windowed_SiteA🌕 close_pwa🌕 manifest_update_icon_SiteA🌑 check_app_in_list_icon_correct_SiteA🌑 +install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_icon_SiteA🌑 check_app_in_list_icon_correct_SiteA🌑 +install_menu_option_SiteA🌕 close_pwa🌕 manifest_update_icon_SiteA🌑 check_app_in_list_icon_correct_SiteA🌑 +install_create_shortcut_windowed_SiteA🌕 close_pwa🌕 manifest_update_icon_SiteA🌑 check_platform_shortcut_and_icon_SiteA🌑 +install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_icon_SiteA🌑 check_platform_shortcut_and_icon_SiteA🌑 +install_menu_option_SiteA🌕 close_pwa🌕 manifest_update_icon_SiteA🌑 check_platform_shortcut_and_icon_SiteA🌑 +install_policy_app_windowed_no_shortcut_SiteA🌓 manifest_update_title_SiteA🌑 check_update_dialog_not_shown🌑 close_pwa🌑 launch_from_menu_option_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 +install_policy_app_windowed_no_shortcut_SiteA🌓 manifest_update_title_SiteA🌑 check_update_dialog_not_shown🌑 close_pwa🌑 launch_from_launch_icon_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 +install_policy_app_windowed_no_shortcut_SiteA🌓 manifest_update_title_SiteA🌑 check_update_dialog_not_shown🌑 close_pwa🌑 launch_from_chrome_apps_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 +install_policy_app_windowed_no_shortcut_SiteA🌓 manifest_update_title_SiteA🌑 check_update_dialog_not_shown🌑 close_pwa🌑 launch_from_platform_shortcut_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌓 manifest_update_title_SiteA🌑 check_update_dialog_not_shown🌑 close_pwa🌑 launch_from_menu_option_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌓 manifest_update_title_SiteA🌑 check_update_dialog_not_shown🌑 close_pwa🌑 launch_from_launch_icon_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌓 manifest_update_title_SiteA🌑 check_update_dialog_not_shown🌑 close_pwa🌑 launch_from_chrome_apps_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌓 manifest_update_title_SiteA🌑 check_update_dialog_not_shown🌑 close_pwa🌑 launch_from_platform_shortcut_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 +install_policy_app_windowed_shortcut_SiteA🌓 manifest_update_title_SiteA🌑 check_update_dialog_not_shown🌑 close_pwa🌑 launch_from_menu_option_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 +install_policy_app_windowed_shortcut_SiteA🌓 manifest_update_title_SiteA🌑 check_update_dialog_not_shown🌑 close_pwa🌑 launch_from_launch_icon_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 +install_policy_app_windowed_shortcut_SiteA🌓 manifest_update_title_SiteA🌑 check_update_dialog_not_shown🌑 close_pwa🌑 launch_from_chrome_apps_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 +install_policy_app_windowed_shortcut_SiteA🌓 manifest_update_title_SiteA🌑 check_update_dialog_not_shown🌑 close_pwa🌑 launch_from_platform_shortcut_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 manifest_update_title_SiteA🌑 check_update_dialog_not_shown🌑 close_pwa🌑 launch_from_menu_option_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 manifest_update_title_SiteA🌑 check_update_dialog_not_shown🌑 close_pwa🌑 launch_from_launch_icon_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 manifest_update_title_SiteA🌑 check_update_dialog_not_shown🌑 close_pwa🌑 launch_from_chrome_apps_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 +install_policy_app_tabbed_shortcut_SiteA🌓 manifest_update_title_SiteA🌑 check_update_dialog_not_shown🌑 close_pwa🌑 launch_from_platform_shortcut_SiteA🌑 check_app_title_site_a_is_SiteAUpdated🌑 +install_create_shortcut_windowed_SiteA🌕 apply_run_on_os_login_policy_blocked_SiteA🌕 check_user_cannot_set_run_on_os_login_SiteA🌕 +install_omnibox_icon_SiteA🌕 apply_run_on_os_login_policy_blocked_SiteA🌕 check_user_cannot_set_run_on_os_login_SiteA🌕 +install_policy_app_windowed_no_shortcut_SiteA🌓 apply_run_on_os_login_policy_blocked_SiteA🌕 check_user_cannot_set_run_on_os_login_SiteA🌕 +install_policy_app_windowed_shortcut_SiteA🌓 apply_run_on_os_login_policy_blocked_SiteA🌕 check_user_cannot_set_run_on_os_login_SiteA🌕 +install_menu_option_SiteA🌕 apply_run_on_os_login_policy_blocked_SiteA🌕 check_user_cannot_set_run_on_os_login_SiteA🌕 +install_create_shortcut_tabbed_SiteA🌕 apply_run_on_os_login_policy_blocked_SiteA🌕 check_user_cannot_set_run_on_os_login_SiteA🌕 +install_policy_app_tabbed_shortcut_SiteA🌓 apply_run_on_os_login_policy_blocked_SiteA🌕 check_user_cannot_set_run_on_os_login_SiteA🌕 +install_policy_app_tabbed_no_shortcut_SiteA🌓 apply_run_on_os_login_policy_blocked_SiteA🌕 check_user_cannot_set_run_on_os_login_SiteA🌕 +install_create_shortcut_windowed_SiteA🌕 enable_run_on_os_login_SiteA🌕 apply_run_on_os_login_policy_blocked_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 +install_omnibox_icon_SiteA🌕 enable_run_on_os_login_SiteA🌕 apply_run_on_os_login_policy_blocked_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 +install_policy_app_windowed_no_shortcut_SiteA🌓 enable_run_on_os_login_SiteA🌕 apply_run_on_os_login_policy_blocked_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 +install_policy_app_windowed_shortcut_SiteA🌓 enable_run_on_os_login_SiteA🌕 apply_run_on_os_login_policy_blocked_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 +install_menu_option_SiteA🌕 enable_run_on_os_login_SiteA🌕 apply_run_on_os_login_policy_blocked_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 +install_create_shortcut_tabbed_SiteA🌕 enable_run_on_os_login_SiteA🌕 apply_run_on_os_login_policy_blocked_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 +install_policy_app_tabbed_shortcut_SiteA🌓 enable_run_on_os_login_SiteA🌕 apply_run_on_os_login_policy_blocked_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 +install_policy_app_tabbed_no_shortcut_SiteA🌓 enable_run_on_os_login_SiteA🌕 apply_run_on_os_login_policy_blocked_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 +install_create_shortcut_windowed_SiteA🌕 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_run_on_os_login_enabled_SiteA🌕 +install_omnibox_icon_SiteA🌕 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_run_on_os_login_enabled_SiteA🌕 +install_policy_app_windowed_no_shortcut_SiteA🌓 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_run_on_os_login_enabled_SiteA🌕 +install_policy_app_windowed_shortcut_SiteA🌓 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_run_on_os_login_enabled_SiteA🌕 +install_menu_option_SiteA🌕 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_run_on_os_login_enabled_SiteA🌕 +install_create_shortcut_tabbed_SiteA🌕 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_run_on_os_login_enabled_SiteA🌕 +install_policy_app_tabbed_shortcut_SiteA🌓 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_run_on_os_login_enabled_SiteA🌕 +install_policy_app_tabbed_no_shortcut_SiteA🌓 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_run_on_os_login_enabled_SiteA🌕 +install_create_shortcut_windowed_SiteA🌕 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_user_cannot_set_run_on_os_login_SiteA🌕 +install_omnibox_icon_SiteA🌕 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_user_cannot_set_run_on_os_login_SiteA🌕 +install_policy_app_windowed_no_shortcut_SiteA🌓 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_user_cannot_set_run_on_os_login_SiteA🌕 +install_policy_app_windowed_shortcut_SiteA🌓 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_user_cannot_set_run_on_os_login_SiteA🌕 +install_menu_option_SiteA🌕 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_user_cannot_set_run_on_os_login_SiteA🌕 +install_create_shortcut_tabbed_SiteA🌕 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_user_cannot_set_run_on_os_login_SiteA🌕 +install_policy_app_tabbed_shortcut_SiteA🌓 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_user_cannot_set_run_on_os_login_SiteA🌕 +install_policy_app_tabbed_no_shortcut_SiteA🌓 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_user_cannot_set_run_on_os_login_SiteA🌕 +install_create_shortcut_windowed_SiteA🌕 enable_run_on_os_login_SiteA🌕 check_run_on_os_login_enabled_SiteA🌕 +install_omnibox_icon_SiteA🌕 enable_run_on_os_login_SiteA🌕 check_run_on_os_login_enabled_SiteA🌕 +install_policy_app_windowed_no_shortcut_SiteA🌓 enable_run_on_os_login_SiteA🌕 check_run_on_os_login_enabled_SiteA🌕 +install_policy_app_windowed_shortcut_SiteA🌓 enable_run_on_os_login_SiteA🌕 check_run_on_os_login_enabled_SiteA🌕 +install_menu_option_SiteA🌕 enable_run_on_os_login_SiteA🌕 check_run_on_os_login_enabled_SiteA🌕 +install_create_shortcut_tabbed_SiteA🌕 enable_run_on_os_login_SiteA🌕 check_run_on_os_login_enabled_SiteA🌕 +install_policy_app_tabbed_shortcut_SiteA🌓 enable_run_on_os_login_SiteA🌕 check_run_on_os_login_enabled_SiteA🌕 +install_policy_app_tabbed_no_shortcut_SiteA🌓 enable_run_on_os_login_SiteA🌕 check_run_on_os_login_enabled_SiteA🌕 +install_create_shortcut_windowed_SiteA🌕 enable_run_on_os_login_SiteA🌕 disable_run_on_os_login_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 +install_omnibox_icon_SiteA🌕 enable_run_on_os_login_SiteA🌕 disable_run_on_os_login_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 +install_policy_app_windowed_no_shortcut_SiteA🌓 enable_run_on_os_login_SiteA🌕 disable_run_on_os_login_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 +install_policy_app_windowed_shortcut_SiteA🌓 enable_run_on_os_login_SiteA🌕 disable_run_on_os_login_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 +install_menu_option_SiteA🌕 enable_run_on_os_login_SiteA🌕 disable_run_on_os_login_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 +install_create_shortcut_tabbed_SiteA🌕 enable_run_on_os_login_SiteA🌕 disable_run_on_os_login_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 +install_policy_app_tabbed_shortcut_SiteA🌓 enable_run_on_os_login_SiteA🌕 disable_run_on_os_login_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 +install_policy_app_tabbed_no_shortcut_SiteA🌓 enable_run_on_os_login_SiteA🌕 disable_run_on_os_login_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 +install_create_shortcut_windowed_SiteA🌕 apply_run_on_os_login_policy_run_windowed_SiteA🌕 remove_run_on_os_login_policy_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 +install_omnibox_icon_SiteA🌕 apply_run_on_os_login_policy_run_windowed_SiteA🌕 remove_run_on_os_login_policy_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 +install_policy_app_windowed_no_shortcut_SiteA🌓 apply_run_on_os_login_policy_run_windowed_SiteA🌕 remove_run_on_os_login_policy_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 +install_policy_app_windowed_shortcut_SiteA🌓 apply_run_on_os_login_policy_run_windowed_SiteA🌕 remove_run_on_os_login_policy_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 +install_menu_option_SiteA🌕 apply_run_on_os_login_policy_run_windowed_SiteA🌕 remove_run_on_os_login_policy_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 +install_create_shortcut_tabbed_SiteA🌕 apply_run_on_os_login_policy_run_windowed_SiteA🌕 remove_run_on_os_login_policy_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 +install_policy_app_tabbed_shortcut_SiteA🌓 apply_run_on_os_login_policy_run_windowed_SiteA🌕 remove_run_on_os_login_policy_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 +install_policy_app_tabbed_no_shortcut_SiteA🌓 apply_run_on_os_login_policy_run_windowed_SiteA🌕 remove_run_on_os_login_policy_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 +install_create_shortcut_windowed_SiteA🌕 enable_run_on_os_login_SiteA🌕 apply_run_on_os_login_policy_blocked_SiteA🌕 remove_run_on_os_login_policy_SiteA🌕 check_run_on_os_login_enabled_SiteA🌕 +install_omnibox_icon_SiteA🌕 enable_run_on_os_login_SiteA🌕 apply_run_on_os_login_policy_blocked_SiteA🌕 remove_run_on_os_login_policy_SiteA🌕 check_run_on_os_login_enabled_SiteA🌕 +install_policy_app_windowed_no_shortcut_SiteA🌓 enable_run_on_os_login_SiteA🌕 apply_run_on_os_login_policy_blocked_SiteA🌕 remove_run_on_os_login_policy_SiteA🌕 check_run_on_os_login_enabled_SiteA🌕 +install_policy_app_windowed_shortcut_SiteA🌓 enable_run_on_os_login_SiteA🌕 apply_run_on_os_login_policy_blocked_SiteA🌕 remove_run_on_os_login_policy_SiteA🌕 check_run_on_os_login_enabled_SiteA🌕 +install_menu_option_SiteA🌕 enable_run_on_os_login_SiteA🌕 apply_run_on_os_login_policy_blocked_SiteA🌕 remove_run_on_os_login_policy_SiteA🌕 check_run_on_os_login_enabled_SiteA🌕 +install_create_shortcut_tabbed_SiteA🌕 enable_run_on_os_login_SiteA🌕 apply_run_on_os_login_policy_blocked_SiteA🌕 remove_run_on_os_login_policy_SiteA🌕 check_run_on_os_login_enabled_SiteA🌕 +install_policy_app_tabbed_shortcut_SiteA🌓 enable_run_on_os_login_SiteA🌕 apply_run_on_os_login_policy_blocked_SiteA🌕 remove_run_on_os_login_policy_SiteA🌕 check_run_on_os_login_enabled_SiteA🌕 +install_policy_app_tabbed_no_shortcut_SiteA🌓 enable_run_on_os_login_SiteA🌕 apply_run_on_os_login_policy_blocked_SiteA🌕 remove_run_on_os_login_policy_SiteA🌕 check_run_on_os_login_enabled_SiteA🌕 +install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 switch_profile_clients_Client1🌕 sync_turn_off🌕 uninstall_from_list_SiteA🌕 switch_profile_clients_Client2🌕 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 +install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 switch_profile_clients_Client1🌕 sync_turn_off🌕 uninstall_from_menu_SiteA🌕 switch_profile_clients_Client2🌕 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 +install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 switch_profile_clients_Client1🌕 sync_turn_off🌕 uninstall_from_os_SiteA🌕 switch_profile_clients_Client2🌕 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 +install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 switch_profile_clients_Client1🌕 sync_turn_off🌕 uninstall_from_app_settings_SiteA🌕 switch_profile_clients_Client2🌕 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 +install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 switch_profile_clients_Client1🌕 sync_turn_off🌕 uninstall_from_list_SiteA🌕 switch_profile_clients_Client2🌕 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 +install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 switch_profile_clients_Client1🌕 sync_turn_off🌕 uninstall_from_menu_SiteA🌕 switch_profile_clients_Client2🌕 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 +install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 switch_profile_clients_Client1🌕 sync_turn_off🌕 uninstall_from_os_SiteA🌕 switch_profile_clients_Client2🌕 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 +install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 switch_profile_clients_Client1🌕 sync_turn_off🌕 uninstall_from_app_settings_SiteA🌕 switch_profile_clients_Client2🌕 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 +install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 switch_profile_clients_Client1🌕 sync_turn_off🌕 uninstall_from_list_SiteA🌕 switch_profile_clients_Client2🌕 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 +install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 switch_profile_clients_Client1🌕 sync_turn_off🌕 uninstall_from_menu_SiteA🌕 switch_profile_clients_Client2🌕 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 +install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 switch_profile_clients_Client1🌕 sync_turn_off🌕 uninstall_from_os_SiteA🌕 switch_profile_clients_Client2🌕 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 +install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 switch_profile_clients_Client1🌕 sync_turn_off🌕 uninstall_from_app_settings_SiteA🌕 switch_profile_clients_Client2🌕 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 +install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 switch_profile_clients_Client1🌕 sync_turn_off🌕 uninstall_from_list_SiteA🌕 switch_profile_clients_Client2🌕 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 install_locally_SiteA🌓 check_run_on_os_login_enabled_SiteA🌕 +install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 switch_profile_clients_Client1🌕 sync_turn_off🌕 uninstall_from_menu_SiteA🌕 switch_profile_clients_Client2🌕 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 install_locally_SiteA🌓 check_run_on_os_login_enabled_SiteA🌕 +install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 switch_profile_clients_Client1🌕 sync_turn_off🌕 uninstall_from_os_SiteA🌕 switch_profile_clients_Client2🌕 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 install_locally_SiteA🌓 check_run_on_os_login_enabled_SiteA🌕 +install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 switch_profile_clients_Client1🌕 sync_turn_off🌕 uninstall_from_app_settings_SiteA🌕 switch_profile_clients_Client2🌕 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 install_locally_SiteA🌓 check_run_on_os_login_enabled_SiteA🌕 +install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 switch_profile_clients_Client1🌕 sync_turn_off🌕 uninstall_from_list_SiteA🌕 switch_profile_clients_Client2🌕 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 install_locally_SiteA🌓 check_run_on_os_login_enabled_SiteA🌕 +install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 switch_profile_clients_Client1🌕 sync_turn_off🌕 uninstall_from_menu_SiteA🌕 switch_profile_clients_Client2🌕 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 install_locally_SiteA🌓 check_run_on_os_login_enabled_SiteA🌕 +install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 switch_profile_clients_Client1🌕 sync_turn_off🌕 uninstall_from_os_SiteA🌕 switch_profile_clients_Client2🌕 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 install_locally_SiteA🌓 check_run_on_os_login_enabled_SiteA🌕 +install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 switch_profile_clients_Client1🌕 sync_turn_off🌕 uninstall_from_app_settings_SiteA🌕 switch_profile_clients_Client2🌕 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 install_locally_SiteA🌓 check_run_on_os_login_enabled_SiteA🌕 +install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 switch_profile_clients_Client1🌕 sync_turn_off🌕 uninstall_from_list_SiteA🌕 switch_profile_clients_Client2🌕 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 install_locally_SiteA🌓 check_run_on_os_login_enabled_SiteA🌕 +install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 switch_profile_clients_Client1🌕 sync_turn_off🌕 uninstall_from_menu_SiteA🌕 switch_profile_clients_Client2🌕 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 install_locally_SiteA🌓 check_run_on_os_login_enabled_SiteA🌕 +install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 switch_profile_clients_Client1🌕 sync_turn_off🌕 uninstall_from_os_SiteA🌕 switch_profile_clients_Client2🌕 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 install_locally_SiteA🌓 check_run_on_os_login_enabled_SiteA🌕 +install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 switch_profile_clients_Client1🌕 sync_turn_off🌕 uninstall_from_app_settings_SiteA🌕 switch_profile_clients_Client2🌕 apply_run_on_os_login_policy_run_windowed_SiteA🌕 check_run_on_os_login_disabled_SiteA🌕 install_locally_SiteA🌓 check_run_on_os_login_enabled_SiteA🌕 +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🌕 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🌕 navigate_pwa_site_a_to_SiteB🌕 close_custom_toolbar🌕 check_app_navigation_is_start_url🌕 +install_omnibox_icon_SiteA🌕 navigate_pwa_site_a_to_SiteB🌕 close_custom_toolbar🌕 check_app_navigation_is_start_url🌕 +install_policy_app_windowed_no_shortcut_SiteA🌓 navigate_pwa_site_a_to_SiteB🌕 close_custom_toolbar🌕 check_app_navigation_is_start_url🌕 +install_policy_app_windowed_shortcut_SiteA🌓 navigate_pwa_site_a_to_SiteB🌕 close_custom_toolbar🌕 check_app_navigation_is_start_url🌕 +install_menu_option_SiteA🌕 navigate_pwa_site_a_to_SiteB🌕 close_custom_toolbar🌕 check_app_navigation_is_start_url🌕 +install_create_shortcut_windowed_SiteA🌕 navigate_pwa_site_a_to_SiteB🌕 check_custom_toolbar🌕 +install_omnibox_icon_SiteA🌕 navigate_pwa_site_a_to_SiteB🌕 check_custom_toolbar🌕 +install_menu_option_SiteA🌕 navigate_pwa_site_a_to_SiteB🌕 check_custom_toolbar🌕 +navigate_browser_SiteA🌕 check_app_not_in_list_SiteA🌓 +navigate_browser_SiteA🌕 check_platform_shortcut_not_exists_SiteA🌑 +navigate_browser_SiteC🌕 check_app_not_in_list_SiteA🌓 +navigate_browser_SiteC🌕 check_platform_shortcut_not_exists_SiteA🌑 +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🌕 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_and_icon_SiteA🌓 +install_policy_app_tabbed_shortcut_SiteA🌓 check_platform_shortcut_and_icon_SiteA🌓 +install_create_shortcut_windowed_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌓 +install_omnibox_icon_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌓 +install_menu_option_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌓 +install_create_shortcut_tabbed_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌓 +install_policy_app_windowed_shortcut_SiteC🌓 check_platform_shortcut_and_icon_SiteC🌓 +install_policy_app_tabbed_shortcut_SiteC🌓 check_platform_shortcut_and_icon_SiteC🌓 +install_create_shortcut_windowed_SiteC🌕 check_platform_shortcut_and_icon_SiteC🌓 +install_create_shortcut_tabbed_SiteC🌕 check_platform_shortcut_and_icon_SiteC🌓 +install_create_shortcut_windowed_SiteA🌕 uninstall_from_list_SiteA🌕 check_app_not_in_list_SiteA🌓 +install_create_shortcut_windowed_SiteA🌕 uninstall_from_menu_SiteA🌕 check_app_not_in_list_SiteA🌓 +install_create_shortcut_windowed_SiteA🌕 uninstall_from_os_SiteA🌕 check_app_not_in_list_SiteA🌓 +install_create_shortcut_windowed_SiteA🌕 uninstall_from_app_settings_SiteA🌕 check_app_not_in_list_SiteA🌓 +install_omnibox_icon_SiteA🌕 uninstall_from_list_SiteA🌕 check_app_not_in_list_SiteA🌓 +install_omnibox_icon_SiteA🌕 uninstall_from_menu_SiteA🌕 check_app_not_in_list_SiteA🌓 +install_omnibox_icon_SiteA🌕 uninstall_from_os_SiteA🌕 check_app_not_in_list_SiteA🌓 +install_omnibox_icon_SiteA🌕 uninstall_from_app_settings_SiteA🌕 check_app_not_in_list_SiteA🌓 +install_menu_option_SiteA🌕 uninstall_from_list_SiteA🌕 check_app_not_in_list_SiteA🌓 +install_menu_option_SiteA🌕 uninstall_from_menu_SiteA🌕 check_app_not_in_list_SiteA🌓 +install_menu_option_SiteA🌕 uninstall_from_os_SiteA🌕 check_app_not_in_list_SiteA🌓 +install_menu_option_SiteA🌕 uninstall_from_app_settings_SiteA🌕 check_app_not_in_list_SiteA🌓 +install_create_shortcut_windowed_SiteA🌕 uninstall_from_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_create_shortcut_windowed_SiteA🌕 uninstall_from_os_SiteA🌕 navigate_browser_SiteA🌕 check_install_icon_shown🌕 +install_create_shortcut_windowed_SiteA🌕 uninstall_from_app_settings_SiteA🌕 navigate_browser_SiteA🌕 check_install_icon_shown🌕 +install_omnibox_icon_SiteA🌕 uninstall_from_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_omnibox_icon_SiteA🌕 uninstall_from_os_SiteA🌕 navigate_browser_SiteA🌕 check_install_icon_shown🌕 +install_omnibox_icon_SiteA🌕 uninstall_from_app_settings_SiteA🌕 navigate_browser_SiteA🌕 check_install_icon_shown🌕 +install_menu_option_SiteA🌕 uninstall_from_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_menu_option_SiteA🌕 uninstall_from_os_SiteA🌕 navigate_browser_SiteA🌕 check_install_icon_shown🌕 +install_menu_option_SiteA🌕 uninstall_from_app_settings_SiteA🌕 navigate_browser_SiteA🌕 check_install_icon_shown🌕 +install_create_shortcut_windowed_SiteA🌕 uninstall_from_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_create_shortcut_windowed_SiteA🌕 uninstall_from_os_SiteA🌕 navigate_browser_SiteA🌕 check_launch_icon_not_shown🌕 +install_create_shortcut_windowed_SiteA🌕 uninstall_from_app_settings_SiteA🌕 navigate_browser_SiteA🌕 check_launch_icon_not_shown🌕 +install_omnibox_icon_SiteA🌕 uninstall_from_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_omnibox_icon_SiteA🌕 uninstall_from_os_SiteA🌕 navigate_browser_SiteA🌕 check_launch_icon_not_shown🌕 +install_omnibox_icon_SiteA🌕 uninstall_from_app_settings_SiteA🌕 navigate_browser_SiteA🌕 check_launch_icon_not_shown🌕 +install_menu_option_SiteA🌕 uninstall_from_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_menu_option_SiteA🌕 uninstall_from_os_SiteA🌕 navigate_browser_SiteA🌕 check_launch_icon_not_shown🌕 +install_menu_option_SiteA🌕 uninstall_from_app_settings_SiteA🌕 navigate_browser_SiteA🌕 check_launch_icon_not_shown🌕 +install_create_shortcut_windowed_SiteA🌕 uninstall_from_list_SiteA🌕 check_platform_shortcut_not_exists_SiteA🌑 +install_create_shortcut_windowed_SiteA🌕 uninstall_from_menu_SiteA🌕 check_platform_shortcut_not_exists_SiteA🌑 +install_create_shortcut_windowed_SiteA🌕 uninstall_from_os_SiteA🌕 check_platform_shortcut_not_exists_SiteA🌑 +install_create_shortcut_windowed_SiteA🌕 uninstall_from_app_settings_SiteA🌕 check_platform_shortcut_not_exists_SiteA🌑 +install_omnibox_icon_SiteA🌕 uninstall_from_list_SiteA🌕 check_platform_shortcut_not_exists_SiteA🌑 +install_omnibox_icon_SiteA🌕 uninstall_from_menu_SiteA🌕 check_platform_shortcut_not_exists_SiteA🌑 +install_omnibox_icon_SiteA🌕 uninstall_from_os_SiteA🌕 check_platform_shortcut_not_exists_SiteA🌑 +install_omnibox_icon_SiteA🌕 uninstall_from_app_settings_SiteA🌕 check_platform_shortcut_not_exists_SiteA🌑 +install_menu_option_SiteA🌕 uninstall_from_list_SiteA🌕 check_platform_shortcut_not_exists_SiteA🌑 +install_menu_option_SiteA🌕 uninstall_from_menu_SiteA🌕 check_platform_shortcut_not_exists_SiteA🌑 +install_menu_option_SiteA🌕 uninstall_from_os_SiteA🌕 check_platform_shortcut_not_exists_SiteA🌑 +install_menu_option_SiteA🌕 uninstall_from_app_settings_SiteA🌕 check_platform_shortcut_not_exists_SiteA🌑 +install_create_shortcut_windowed_SiteC🌕 uninstall_from_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_windowed_SiteC🌕 uninstall_from_os_SiteC🌕 check_app_not_in_list_SiteA🌓 +install_create_shortcut_windowed_SiteC🌕 uninstall_from_app_settings_SiteC🌕 check_app_not_in_list_SiteA🌓 +install_create_shortcut_windowed_SiteC🌕 uninstall_from_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_windowed_SiteC🌕 uninstall_from_os_SiteC🌕 check_platform_shortcut_not_exists_SiteC🌑 +install_create_shortcut_windowed_SiteC🌕 uninstall_from_app_settings_SiteC🌕 check_platform_shortcut_not_exists_SiteC🌑 +install_create_shortcut_tabbed_SiteA🌕 uninstall_from_list_SiteA🌕 check_app_not_in_list_SiteA🌓 +install_create_shortcut_tabbed_SiteA🌕 uninstall_from_list_SiteA🌕 navigate_browser_SiteA🌕 check_install_icon_shown🌕 +install_create_shortcut_tabbed_SiteA🌕 uninstall_from_list_SiteA🌕 navigate_browser_SiteA🌕 check_launch_icon_not_shown🌕 +install_create_shortcut_tabbed_SiteA🌕 uninstall_from_list_SiteA🌕 check_platform_shortcut_not_exists_SiteA🌑 +install_create_shortcut_tabbed_SiteC🌕 uninstall_from_list_SiteC🌕 check_app_not_in_list_SiteA🌓 +install_create_shortcut_tabbed_SiteC🌕 uninstall_from_list_SiteC🌕 check_platform_shortcut_not_exists_SiteC🌑 +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_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_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🌕 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_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_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_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_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_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_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_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_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_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_policy_app_windowed_no_shortcut_SiteA🌓 create_shortcuts_SiteA🌑 check_platform_shortcut_and_icon_SiteA🌑 +install_policy_app_tabbed_no_shortcut_SiteA🌓 create_shortcuts_SiteA🌑 check_platform_shortcut_and_icon_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_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_platform_shortcut_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_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_platform_shortcut_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_platform_shortcut_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🌕 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_windowed_SiteA🌕 open_app_settings_from_chrome_apps_SiteA🌕 check_browser_navigation_is_app_settings_SiteA🌕 +install_create_shortcut_windowed_SiteA🌕 open_app_settings_from_app_menu_SiteA🌕 check_browser_navigation_is_app_settings_SiteA🌕 +install_omnibox_icon_SiteA🌕 open_app_settings_from_chrome_apps_SiteA🌕 check_browser_navigation_is_app_settings_SiteA🌕 +install_omnibox_icon_SiteA🌕 open_app_settings_from_app_menu_SiteA🌕 check_browser_navigation_is_app_settings_SiteA🌕 +install_policy_app_windowed_no_shortcut_SiteA🌓 open_app_settings_from_chrome_apps_SiteA🌕 check_browser_navigation_is_app_settings_SiteA🌕 +install_policy_app_windowed_no_shortcut_SiteA🌓 open_app_settings_from_app_menu_SiteA🌕 check_browser_navigation_is_app_settings_SiteA🌕 +install_policy_app_windowed_shortcut_SiteA🌓 open_app_settings_from_chrome_apps_SiteA🌕 check_browser_navigation_is_app_settings_SiteA🌕 +install_policy_app_windowed_shortcut_SiteA🌓 open_app_settings_from_app_menu_SiteA🌕 check_browser_navigation_is_app_settings_SiteA🌕 +install_menu_option_SiteA🌕 open_app_settings_from_chrome_apps_SiteA🌕 check_browser_navigation_is_app_settings_SiteA🌕 +install_menu_option_SiteA🌕 open_app_settings_from_app_menu_SiteA🌕 check_browser_navigation_is_app_settings_SiteA🌕 +install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 install_locally_SiteA🌓 check_platform_shortcut_and_icon_SiteA🌓 +install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 install_locally_SiteA🌓 check_platform_shortcut_and_icon_SiteA🌓 +install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 install_locally_SiteA🌓 check_platform_shortcut_and_icon_SiteA🌓 +install_create_shortcut_tabbed_SiteA🌕 switch_profile_clients_Client2🌕 install_locally_SiteA🌓 check_platform_shortcut_and_icon_SiteA🌓 +install_create_shortcut_tabbed_SiteA🌕 switch_profile_clients_Client2🌕 install_locally_SiteA🌓 check_app_in_list_tabbed_SiteA🌓 +install_create_shortcut_tabbed_SiteA🌕 switch_profile_clients_Client2🌕 install_locally_SiteA🌓 navigate_browser_SiteA🌕 check_install_icon_shown🌕 +install_create_shortcut_tabbed_SiteA🌕 switch_profile_clients_Client2🌕 install_locally_SiteA🌓 navigate_browser_SiteA🌕 check_launch_icon_not_shown🌕 +install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 install_locally_SiteA🌓 check_app_in_list_windowed_SiteA🌓 +install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 install_locally_SiteA🌓 check_app_in_list_windowed_SiteA🌓 +install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 install_locally_SiteA🌓 check_app_in_list_windowed_SiteA🌓 +install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 install_locally_SiteA🌓 navigate_browser_SiteA🌕 check_install_icon_not_shown🌕 +install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 install_locally_SiteA🌓 navigate_browser_SiteA🌕 check_install_icon_not_shown🌕 +install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 install_locally_SiteA🌓 navigate_browser_SiteA🌕 check_install_icon_not_shown🌕 +install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 install_locally_SiteA🌓 navigate_browser_SiteA🌕 check_launch_icon_shown🌕 +install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 install_locally_SiteA🌓 navigate_browser_SiteA🌕 check_launch_icon_shown🌕 +install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 install_locally_SiteA🌓 navigate_browser_SiteA🌕 check_launch_icon_shown🌕 +install_create_shortcut_tabbed_SiteC🌕 switch_profile_clients_Client2🌕 install_locally_SiteC🌓 check_app_in_list_tabbed_SiteC🌓 +install_create_shortcut_tabbed_SiteC🌕 switch_profile_clients_Client2🌕 install_locally_SiteC🌓 navigate_browser_SiteC🌕 check_launch_icon_not_shown🌕 +install_create_shortcut_windowed_SiteC🌕 switch_profile_clients_Client2🌕 install_locally_SiteC🌓 check_app_in_list_windowed_SiteC🌓 +install_create_shortcut_windowed_SiteC🌕 switch_profile_clients_Client2🌕 install_locally_SiteC🌓 navigate_browser_SiteC🌕 check_install_icon_not_shown🌕 +install_create_shortcut_windowed_SiteC🌕 switch_profile_clients_Client2🌕 install_locally_SiteC🌓 navigate_browser_SiteC🌕 check_launch_icon_shown🌕 +install_create_shortcut_windowed_SiteC🌕 switch_profile_clients_Client2🌕 install_locally_SiteC🌓 check_platform_shortcut_and_icon_SiteC🌓 +install_create_shortcut_tabbed_SiteC🌕 switch_profile_clients_Client2🌕 install_locally_SiteC🌓 check_platform_shortcut_and_icon_SiteC🌓 +install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 install_locally_SiteA🌓 launch_from_menu_option_SiteA🌕 check_window_created🌕 +install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 install_locally_SiteA🌓 launch_from_launch_icon_SiteA🌕 check_window_created🌕 +install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 install_locally_SiteA🌓 launch_from_chrome_apps_SiteA🌓 check_window_created🌕 +install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 install_locally_SiteA🌓 launch_from_platform_shortcut_SiteA🌓 check_window_created🌕 +install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 install_locally_SiteA🌓 launch_from_menu_option_SiteA🌕 check_window_created🌕 +install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 install_locally_SiteA🌓 launch_from_launch_icon_SiteA🌕 check_window_created🌕 +install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 install_locally_SiteA🌓 launch_from_chrome_apps_SiteA🌓 check_window_created🌕 +install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 install_locally_SiteA🌓 launch_from_platform_shortcut_SiteA🌓 check_window_created🌕 +install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 install_locally_SiteA🌓 launch_from_menu_option_SiteA🌕 check_window_created🌕 +install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 install_locally_SiteA🌓 launch_from_launch_icon_SiteA🌕 check_window_created🌕 +install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 install_locally_SiteA🌓 launch_from_chrome_apps_SiteA🌓 check_window_created🌕 +install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 install_locally_SiteA🌓 launch_from_platform_shortcut_SiteA🌓 check_window_created🌕 +install_create_shortcut_tabbed_SiteA🌕 switch_profile_clients_Client2🌕 launch_from_chrome_apps_SiteA🌓 check_tab_created🌕 +install_create_shortcut_tabbed_SiteA🌕 switch_profile_clients_Client2🌕 launch_from_platform_shortcut_SiteA🌓 check_tab_created🌕 +install_create_shortcut_tabbed_SiteA🌕 switch_profile_clients_Client2🌕 install_locally_SiteA🌓 launch_from_chrome_apps_SiteA🌓 check_tab_created🌕 +install_create_shortcut_tabbed_SiteA🌕 switch_profile_clients_Client2🌕 install_locally_SiteA🌓 launch_from_platform_shortcut_SiteA🌓 check_tab_created🌕 +install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 launch_from_chrome_apps_SiteA🌓 check_tab_created🌕 +install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 launch_from_platform_shortcut_SiteA🌓 check_tab_created🌕 +install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 launch_from_chrome_apps_SiteA🌓 check_tab_created🌕 +install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 launch_from_platform_shortcut_SiteA🌓 check_tab_created🌕 +install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 launch_from_chrome_apps_SiteA🌓 check_tab_created🌕 +install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 launch_from_platform_shortcut_SiteA🌓 check_tab_created🌕 +install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 uninstall_from_list_SiteA🌕 check_app_not_in_list_SiteA🌓 +install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 uninstall_from_list_SiteA🌕 check_app_not_in_list_SiteA🌓 +install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 uninstall_from_list_SiteA🌕 check_app_not_in_list_SiteA🌓 +install_create_shortcut_tabbed_SiteA🌕 switch_profile_clients_Client2🌕 uninstall_from_list_SiteA🌕 check_app_not_in_list_SiteA🌓 +install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 uninstall_from_list_SiteA🌕 switch_profile_clients_Client1🌕 check_app_not_in_list_SiteA🌓 +install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 uninstall_from_list_SiteA🌕 switch_profile_clients_Client1🌕 check_app_not_in_list_SiteA🌓 +install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 uninstall_from_list_SiteA🌕 switch_profile_clients_Client1🌕 check_app_not_in_list_SiteA🌓 +install_create_shortcut_tabbed_SiteA🌕 switch_profile_clients_Client2🌕 uninstall_from_list_SiteA🌕 switch_profile_clients_Client1🌕 check_app_not_in_list_SiteA🌓 +install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 check_app_in_list_not_locally_installed_SiteA🌓 +install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 check_app_in_list_not_locally_installed_SiteA🌓 +install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 check_app_in_list_not_locally_installed_SiteA🌓 +install_create_shortcut_tabbed_SiteA🌕 switch_profile_clients_Client2🌕 check_app_in_list_not_locally_installed_SiteA🌓 +install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 check_platform_shortcut_not_exists_SiteA🌑 +install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 check_platform_shortcut_not_exists_SiteA🌑 +install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 check_platform_shortcut_not_exists_SiteA🌑 +install_create_shortcut_tabbed_SiteA🌕 switch_profile_clients_Client2🌕 check_platform_shortcut_not_exists_SiteA🌑 +install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 navigate_browser_SiteA🌕 check_install_icon_shown🌕 +install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 navigate_browser_SiteA🌕 check_install_icon_shown🌕 +install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 navigate_browser_SiteA🌕 check_install_icon_shown🌕 +install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 navigate_browser_SiteA🌕 check_launch_icon_not_shown🌕 +install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 navigate_browser_SiteA🌕 check_launch_icon_not_shown🌕 +install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 navigate_browser_SiteA🌕 check_launch_icon_not_shown🌕 +install_create_shortcut_windowed_SiteC🌕 switch_profile_clients_Client2🌕 check_app_in_list_not_locally_installed_SiteC🌓 +install_create_shortcut_tabbed_SiteC🌕 switch_profile_clients_Client2🌕 check_app_in_list_not_locally_installed_SiteC🌓 +install_create_shortcut_windowed_SiteC🌕 switch_profile_clients_Client2🌕 check_platform_shortcut_not_exists_SiteC🌑 +install_create_shortcut_tabbed_SiteC🌕 switch_profile_clients_Client2🌕 check_platform_shortcut_not_exists_SiteC🌑 +sync_turn_off🌕 install_create_shortcut_windowed_SiteA🌕 sync_turn_on🌕 switch_profile_clients_Client2🌕 check_app_in_list_not_locally_installed_SiteA🌓 +sync_turn_off🌕 install_omnibox_icon_SiteA🌕 sync_turn_on🌕 switch_profile_clients_Client2🌕 check_app_in_list_not_locally_installed_SiteA🌓 +sync_turn_off🌕 install_menu_option_SiteA🌕 sync_turn_on🌕 switch_profile_clients_Client2🌕 check_app_in_list_not_locally_installed_SiteA🌓 +sync_turn_off🌕 install_create_shortcut_tabbed_SiteA🌕 sync_turn_on🌕 switch_profile_clients_Client2🌕 check_app_in_list_not_locally_installed_SiteA🌓 +sync_turn_off🌕 install_create_shortcut_windowed_SiteC🌕 sync_turn_on🌕 switch_profile_clients_Client2🌕 check_app_in_list_not_locally_installed_SiteC🌓 +sync_turn_off🌕 install_create_shortcut_tabbed_SiteC🌕 sync_turn_on🌕 switch_profile_clients_Client2🌕 check_app_in_list_not_locally_installed_SiteC🌓 +install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌕 uninstall_from_list_SiteA🌕 sync_turn_on🌕 check_app_in_list_not_locally_installed_SiteA🌓 +install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌕 uninstall_from_menu_SiteA🌕 sync_turn_on🌕 check_app_in_list_not_locally_installed_SiteA🌓 +install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌕 uninstall_from_os_SiteA🌕 sync_turn_on🌕 check_app_in_list_not_locally_installed_SiteA🌓 +install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌕 uninstall_from_list_SiteA🌕 sync_turn_on🌕 check_app_in_list_not_locally_installed_SiteA🌓 +install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌕 uninstall_from_menu_SiteA🌕 sync_turn_on🌕 check_app_in_list_not_locally_installed_SiteA🌓 +install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌕 uninstall_from_os_SiteA🌕 sync_turn_on🌕 check_app_in_list_not_locally_installed_SiteA🌓 +install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌕 uninstall_from_list_SiteA🌕 sync_turn_on🌕 check_app_in_list_not_locally_installed_SiteA🌓 +install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌕 uninstall_from_menu_SiteA🌕 sync_turn_on🌕 check_app_in_list_not_locally_installed_SiteA🌓 +install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌕 uninstall_from_os_SiteA🌕 sync_turn_on🌕 check_app_in_list_not_locally_installed_SiteA🌓 +install_create_shortcut_tabbed_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌕 uninstall_from_list_SiteA🌕 sync_turn_on🌕 check_app_in_list_not_locally_installed_SiteA🌓 +install_create_shortcut_tabbed_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌕 uninstall_from_menu_SiteA🌕 sync_turn_on🌕 check_app_in_list_not_locally_installed_SiteA🌓 +install_create_shortcut_tabbed_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌕 uninstall_from_os_SiteA🌕 sync_turn_on🌕 check_app_in_list_not_locally_installed_SiteA🌓 +install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌕 uninstall_from_list_SiteA🌕 sync_turn_on🌕 check_platform_shortcut_not_exists_SiteA🌑 +install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌕 uninstall_from_menu_SiteA🌕 sync_turn_on🌕 check_platform_shortcut_not_exists_SiteA🌑 +install_create_shortcut_windowed_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌕 uninstall_from_os_SiteA🌕 sync_turn_on🌕 check_platform_shortcut_not_exists_SiteA🌑 +install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌕 uninstall_from_list_SiteA🌕 sync_turn_on🌕 check_platform_shortcut_not_exists_SiteA🌑 +install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌕 uninstall_from_menu_SiteA🌕 sync_turn_on🌕 check_platform_shortcut_not_exists_SiteA🌑 +install_omnibox_icon_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌕 uninstall_from_os_SiteA🌕 sync_turn_on🌕 check_platform_shortcut_not_exists_SiteA🌑 +install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌕 uninstall_from_list_SiteA🌕 sync_turn_on🌕 check_platform_shortcut_not_exists_SiteA🌑 +install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌕 uninstall_from_menu_SiteA🌕 sync_turn_on🌕 check_platform_shortcut_not_exists_SiteA🌑 +install_menu_option_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌕 uninstall_from_os_SiteA🌕 sync_turn_on🌕 check_platform_shortcut_not_exists_SiteA🌑 +install_create_shortcut_tabbed_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌕 uninstall_from_list_SiteA🌕 sync_turn_on🌕 check_platform_shortcut_not_exists_SiteA🌑 +install_create_shortcut_tabbed_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌕 uninstall_from_menu_SiteA🌕 sync_turn_on🌕 check_platform_shortcut_not_exists_SiteA🌑 +install_create_shortcut_tabbed_SiteA🌕 switch_profile_clients_Client2🌕 sync_turn_off🌕 uninstall_from_os_SiteA🌕 sync_turn_on🌕 check_platform_shortcut_not_exists_SiteA🌑 +install_create_shortcut_tabbed_SiteA🌕 install_policy_app_windowed_no_shortcut_SiteA🌓 check_platform_shortcut_and_icon_SiteA🌓 +install_create_shortcut_tabbed_SiteA🌕 install_policy_app_windowed_shortcut_SiteA🌓 check_platform_shortcut_and_icon_SiteA🌓 +install_create_shortcut_windowed_SiteA🌕 install_policy_app_tabbed_no_shortcut_SiteA🌓 check_platform_shortcut_and_icon_SiteA🌓 +install_create_shortcut_windowed_SiteA🌕 install_policy_app_windowed_no_shortcut_SiteA🌓 check_platform_shortcut_and_icon_SiteA🌓 +install_omnibox_icon_SiteA🌕 install_policy_app_tabbed_no_shortcut_SiteA🌓 check_platform_shortcut_and_icon_SiteA🌓 +install_omnibox_icon_SiteA🌕 install_policy_app_windowed_no_shortcut_SiteA🌓 check_platform_shortcut_and_icon_SiteA🌓 +install_menu_option_SiteA🌕 install_policy_app_tabbed_no_shortcut_SiteA🌓 check_platform_shortcut_and_icon_SiteA🌓 +install_menu_option_SiteA🌕 install_policy_app_windowed_no_shortcut_SiteA🌓 check_platform_shortcut_and_icon_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_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_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_and_icon_SiteA🌓 +install_policy_app_tabbed_shortcut_SiteA🌓 install_omnibox_icon_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌓 +install_policy_app_tabbed_shortcut_SiteA🌓 install_menu_option_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌓 +install_policy_app_tabbed_no_shortcut_SiteA🌓 install_create_shortcut_windowed_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌓 +install_policy_app_tabbed_no_shortcut_SiteA🌓 install_omnibox_icon_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌓 +install_policy_app_tabbed_no_shortcut_SiteA🌓 install_menu_option_SiteA🌕 check_platform_shortcut_and_icon_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_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_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🌕 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_and_icon_SiteA🌓 +install_create_shortcut_tabbed_SiteA🌕 install_policy_app_tabbed_no_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌓 +install_create_shortcut_tabbed_SiteA🌕 install_policy_app_windowed_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌓 +install_create_shortcut_tabbed_SiteA🌕 install_policy_app_tabbed_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_platform_shortcut_and_icon_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_and_icon_SiteA🌓 +install_create_shortcut_windowed_SiteA🌕 install_policy_app_tabbed_no_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌓 +install_create_shortcut_windowed_SiteA🌕 install_policy_app_windowed_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌓 +install_create_shortcut_windowed_SiteA🌕 install_policy_app_tabbed_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌓 +install_omnibox_icon_SiteA🌕 install_policy_app_windowed_no_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌓 +install_omnibox_icon_SiteA🌕 install_policy_app_tabbed_no_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌓 +install_omnibox_icon_SiteA🌕 install_policy_app_windowed_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌓 +install_omnibox_icon_SiteA🌕 install_policy_app_tabbed_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌓 +install_menu_option_SiteA🌕 install_policy_app_windowed_no_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌓 +install_menu_option_SiteA🌕 install_policy_app_tabbed_no_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌓 +install_menu_option_SiteA🌕 install_policy_app_windowed_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌓 +install_menu_option_SiteA🌕 install_policy_app_tabbed_shortcut_SiteA🌓 uninstall_policy_app_SiteA🌕 check_platform_shortcut_and_icon_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_and_icon_SiteA🌓 +install_policy_app_tabbed_shortcut_SiteA🌓 install_omnibox_icon_SiteA🌕 uninstall_policy_app_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌓 +install_policy_app_tabbed_shortcut_SiteA🌓 install_menu_option_SiteA🌕 uninstall_policy_app_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌓 +install_policy_app_tabbed_no_shortcut_SiteA🌓 install_create_shortcut_windowed_SiteA🌕 uninstall_policy_app_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌓 +install_policy_app_tabbed_no_shortcut_SiteA🌓 install_omnibox_icon_SiteA🌕 uninstall_policy_app_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌓 +install_policy_app_tabbed_no_shortcut_SiteA🌓 install_menu_option_SiteA🌕 uninstall_policy_app_SiteA🌕 check_platform_shortcut_and_icon_SiteA🌓 +install_create_shortcut_windowed_SiteA🌕 close_pwa🌕 manifest_update_colors_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_color_correct_SiteA🌑 +install_create_shortcut_windowed_SiteA🌕 close_pwa🌕 manifest_update_colors_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_color_correct_SiteA🌑 +install_create_shortcut_windowed_SiteA🌕 close_pwa🌕 manifest_update_colors_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_color_correct_SiteA🌑 +install_create_shortcut_windowed_SiteA🌕 close_pwa🌕 manifest_update_colors_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_color_correct_SiteA🌑 +install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_colors_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_color_correct_SiteA🌑 +install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_colors_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_color_correct_SiteA🌑 +install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_colors_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_color_correct_SiteA🌑 +install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_colors_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_color_correct_SiteA🌑 +install_menu_option_SiteA🌕 close_pwa🌕 manifest_update_colors_SiteA🌑 launch_from_menu_option_SiteA🌑 check_window_color_correct_SiteA🌑 +install_menu_option_SiteA🌕 close_pwa🌕 manifest_update_colors_SiteA🌑 launch_from_launch_icon_SiteA🌑 check_window_color_correct_SiteA🌑 +install_menu_option_SiteA🌕 close_pwa🌕 manifest_update_colors_SiteA🌑 launch_from_chrome_apps_SiteA🌑 check_window_color_correct_SiteA🌑 +install_menu_option_SiteA🌕 close_pwa🌕 manifest_update_colors_SiteA🌑 launch_from_platform_shortcut_SiteA🌑 check_window_color_correct_SiteA🌑 +install_create_shortcut_windowed_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_menu_option_SiteA🌕 check_tab_not_created🌕 +install_create_shortcut_windowed_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_launch_icon_SiteA🌕 check_tab_not_created🌕 +install_create_shortcut_windowed_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_chrome_apps_SiteA🌓 check_tab_not_created🌕 +install_create_shortcut_windowed_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_platform_shortcut_SiteA🌓 check_tab_not_created🌕 +install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_menu_option_SiteA🌕 check_tab_not_created🌕 +install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_launch_icon_SiteA🌕 check_tab_not_created🌕 +install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_chrome_apps_SiteA🌓 check_tab_not_created🌕 +install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_platform_shortcut_SiteA🌓 check_tab_not_created🌕 +install_menu_option_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_menu_option_SiteA🌕 check_tab_not_created🌕 +install_menu_option_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_launch_icon_SiteA🌕 check_tab_not_created🌕 +install_menu_option_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_chrome_apps_SiteA🌓 check_tab_not_created🌕 +install_menu_option_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_platform_shortcut_SiteA🌓 check_tab_not_created🌕 +install_create_shortcut_windowed_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_menu_option_SiteA🌕 check_window_created🌕 +install_create_shortcut_windowed_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_launch_icon_SiteA🌕 check_window_created🌕 +install_create_shortcut_windowed_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_chrome_apps_SiteA🌓 check_window_created🌕 +install_create_shortcut_windowed_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_platform_shortcut_SiteA🌓 check_window_created🌕 +install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_menu_option_SiteA🌕 check_window_created🌕 +install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_launch_icon_SiteA🌕 check_window_created🌕 +install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_chrome_apps_SiteA🌓 check_window_created🌕 +install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_platform_shortcut_SiteA🌓 check_window_created🌕 +install_menu_option_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_menu_option_SiteA🌕 check_window_created🌕 +install_menu_option_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_launch_icon_SiteA🌕 check_window_created🌕 +install_menu_option_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_chrome_apps_SiteA🌓 check_window_created🌕 +install_menu_option_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_platform_shortcut_SiteA🌓 check_window_created🌕 +install_create_shortcut_windowed_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_menu_option_SiteA🌕 check_window_display_minimal🌕 +install_create_shortcut_windowed_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_launch_icon_SiteA🌕 check_window_display_minimal🌕 +install_create_shortcut_windowed_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_chrome_apps_SiteA🌓 check_window_display_minimal🌕 +install_create_shortcut_windowed_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_platform_shortcut_SiteA🌓 check_window_display_minimal🌕 +install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_menu_option_SiteA🌕 check_window_display_minimal🌕 +install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_launch_icon_SiteA🌕 check_window_display_minimal🌕 +install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_chrome_apps_SiteA🌓 check_window_display_minimal🌕 +install_omnibox_icon_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_platform_shortcut_SiteA🌓 check_window_display_minimal🌕 +install_menu_option_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_menu_option_SiteA🌕 check_window_display_minimal🌕 +install_menu_option_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_launch_icon_SiteA🌕 check_window_display_minimal🌕 +install_menu_option_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_chrome_apps_SiteA🌓 check_window_display_minimal🌕 +install_menu_option_SiteA🌕 close_pwa🌕 manifest_update_display_browser_SiteA🌕 launch_from_platform_shortcut_SiteA🌓 check_window_display_minimal🌕 +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_SiteAFoo🌕 manifest_update_scope_site_a_foo_to_SiteARoot🌕 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_SiteARoot🌕 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_SiteARoot🌕 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_SiteARoot🌕 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_SiteARoot🌕 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_SiteARoot🌕 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_SiteARoot🌕 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_SiteARoot🌕 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_SiteARoot🌕 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_SiteARoot🌕 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_SiteARoot🌕 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_SiteARoot🌕 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_SiteARoot🌕 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_SiteARoot🌕 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_SiteARoot🌕 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_SiteARoot🌕 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_SiteARoot🌕 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_SiteARoot🌕 launch_from_platform_shortcut_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_SiteARoot🌕 navigate_browser_SiteABar🌕 check_install_icon_not_shown🌕 +install_omnibox_icon_SiteAFoo🌕 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteARoot🌕 navigate_browser_SiteABar🌕 check_install_icon_not_shown🌕 +install_menu_option_SiteAFoo🌕 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteARoot🌕 navigate_browser_SiteABar🌕 check_install_icon_not_shown🌕 +install_create_shortcut_windowed_SiteAFoo🌕 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteARoot🌕 navigate_browser_SiteABar🌕 check_launch_icon_shown🌕 +install_omnibox_icon_SiteAFoo🌕 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteARoot🌕 navigate_browser_SiteABar🌕 check_launch_icon_shown🌕 +install_menu_option_SiteAFoo🌕 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteARoot🌕 navigate_browser_SiteABar🌕 check_launch_icon_shown🌕 +install_create_shortcut_windowed_SiteAFoo🌕 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteARoot🌕 navigate_browser_SiteAFoo🌕 check_install_icon_not_shown🌕 +install_omnibox_icon_SiteAFoo🌕 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteARoot🌕 navigate_browser_SiteAFoo🌕 check_install_icon_not_shown🌕 +install_menu_option_SiteAFoo🌕 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteARoot🌕 navigate_browser_SiteAFoo🌕 check_install_icon_not_shown🌕 +install_create_shortcut_windowed_SiteAFoo🌕 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteARoot🌕 navigate_browser_SiteAFoo🌕 check_launch_icon_shown🌕 +install_omnibox_icon_SiteAFoo🌕 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteARoot🌕 navigate_browser_SiteAFoo🌕 check_launch_icon_shown🌕 +install_menu_option_SiteAFoo🌕 close_pwa🌕 manifest_update_scope_site_a_foo_to_SiteARoot🌕 navigate_browser_SiteAFoo🌕 check_launch_icon_shown🌕 +switch_incognito_profile🌑 navigate_browser_SiteA🌑 check_create_shortcut_not_shown🌑 +switch_incognito_profile🌑 navigate_browser_SiteC🌑 check_create_shortcut_not_shown🌑 +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🌕 +navigate_browser_SiteA🌕 check_create_shortcut_shown🌑 +navigate_browser_SiteAFoo🌕 check_install_icon_shown🌕 +navigate_browser_SiteC🌕 check_create_shortcut_shown🌑 +navigate_browser_SiteC🌕 check_install_icon_not_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_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🌕 +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🌕 +install_create_shortcut_windowed_SiteA🌕 navigate_pwa_site_a_to_SiteB🌕 check_app_title_site_a_is_SiteA🌑 +install_omnibox_icon_SiteA🌕 navigate_pwa_site_a_to_SiteB🌕 check_app_title_site_a_is_SiteA🌑 +install_menu_option_SiteA🌕 navigate_pwa_site_a_to_SiteB🌕 check_app_title_site_a_is_SiteA🌑 +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🌑 +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_SiteWco🌕 check_window_controls_overlay_toggle_SiteWco_Shown🌕 +install_omnibox_icon_SiteWco🌕 check_window_controls_overlay_toggle_SiteWco_Shown🌕 +install_policy_app_windowed_no_shortcut_SiteWco🌓 check_window_controls_overlay_toggle_SiteWco_Shown🌕 +install_policy_app_windowed_shortcut_SiteWco🌓 check_window_controls_overlay_toggle_SiteWco_Shown🌕 +install_menu_option_SiteWco🌕 check_window_controls_overlay_toggle_SiteWco_Shown🌕 +install_create_shortcut_windowed_SiteA🌕 check_window_controls_overlay_toggle_SiteA_NotShown🌕 +install_omnibox_icon_SiteA🌕 check_window_controls_overlay_toggle_SiteA_NotShown🌕 +install_policy_app_windowed_no_shortcut_SiteA🌓 check_window_controls_overlay_toggle_SiteA_NotShown🌕 +install_policy_app_windowed_shortcut_SiteA🌓 check_window_controls_overlay_toggle_SiteA_NotShown🌕 +install_menu_option_SiteA🌕 check_window_controls_overlay_toggle_SiteA_NotShown🌕 +install_create_shortcut_windowed_SiteWco🌕 enable_window_controls_overlay_SiteWco🌕 check_window_controls_overlay_SiteWco_On🌕 +install_omnibox_icon_SiteWco🌕 enable_window_controls_overlay_SiteWco🌕 check_window_controls_overlay_SiteWco_On🌕 +install_policy_app_windowed_no_shortcut_SiteWco🌓 enable_window_controls_overlay_SiteWco🌕 check_window_controls_overlay_SiteWco_On🌕 +install_policy_app_windowed_shortcut_SiteWco🌓 enable_window_controls_overlay_SiteWco🌕 check_window_controls_overlay_SiteWco_On🌕 +install_menu_option_SiteWco🌕 enable_window_controls_overlay_SiteWco🌕 check_window_controls_overlay_SiteWco_On🌕 +install_create_shortcut_windowed_SiteWco🌕 enable_window_controls_overlay_SiteWco🌕 check_window_controls_overlay_toggle_SiteWco_Shown🌕 +install_omnibox_icon_SiteWco🌕 enable_window_controls_overlay_SiteWco🌕 check_window_controls_overlay_toggle_SiteWco_Shown🌕 +install_policy_app_windowed_no_shortcut_SiteWco🌓 enable_window_controls_overlay_SiteWco🌕 check_window_controls_overlay_toggle_SiteWco_Shown🌕 +install_policy_app_windowed_shortcut_SiteWco🌓 enable_window_controls_overlay_SiteWco🌕 check_window_controls_overlay_toggle_SiteWco_Shown🌕 +install_menu_option_SiteWco🌕 enable_window_controls_overlay_SiteWco🌕 check_window_controls_overlay_toggle_SiteWco_Shown🌕 +install_create_shortcut_windowed_SiteWco🌕 enable_window_controls_overlay_SiteWco🌕 disable_window_controls_overlay_SiteWco🌕 check_window_controls_overlay_SiteWco_Off🌕 +install_omnibox_icon_SiteWco🌕 enable_window_controls_overlay_SiteWco🌕 disable_window_controls_overlay_SiteWco🌕 check_window_controls_overlay_SiteWco_Off🌕 +install_policy_app_windowed_no_shortcut_SiteWco🌓 enable_window_controls_overlay_SiteWco🌕 disable_window_controls_overlay_SiteWco🌕 check_window_controls_overlay_SiteWco_Off🌕 +install_policy_app_windowed_shortcut_SiteWco🌓 enable_window_controls_overlay_SiteWco🌕 disable_window_controls_overlay_SiteWco🌕 check_window_controls_overlay_SiteWco_Off🌕 +install_menu_option_SiteWco🌕 enable_window_controls_overlay_SiteWco🌕 disable_window_controls_overlay_SiteWco🌕 check_window_controls_overlay_SiteWco_Off🌕 +install_create_shortcut_windowed_SiteWco🌕 enable_window_controls_overlay_SiteWco🌕 disable_window_controls_overlay_SiteWco🌕 check_window_controls_overlay_toggle_SiteWco_Shown🌕 +install_omnibox_icon_SiteWco🌕 enable_window_controls_overlay_SiteWco🌕 disable_window_controls_overlay_SiteWco🌕 check_window_controls_overlay_toggle_SiteWco_Shown🌕 +install_policy_app_windowed_no_shortcut_SiteWco🌓 enable_window_controls_overlay_SiteWco🌕 disable_window_controls_overlay_SiteWco🌕 check_window_controls_overlay_toggle_SiteWco_Shown🌕 +install_policy_app_windowed_shortcut_SiteWco🌓 enable_window_controls_overlay_SiteWco🌕 disable_window_controls_overlay_SiteWco🌕 check_window_controls_overlay_toggle_SiteWco_Shown🌕 +install_menu_option_SiteWco🌕 enable_window_controls_overlay_SiteWco🌕 disable_window_controls_overlay_SiteWco🌕 check_window_controls_overlay_toggle_SiteWco_Shown🌕 +install_create_shortcut_windowed_SiteWco🌕 enable_window_controls_overlay_SiteWco🌕 launch_from_menu_option_SiteWco🌕 check_window_controls_overlay_SiteWco_On🌕 +install_create_shortcut_windowed_SiteWco🌕 enable_window_controls_overlay_SiteWco🌕 launch_from_launch_icon_SiteWco🌕 check_window_controls_overlay_SiteWco_On🌕 +install_create_shortcut_windowed_SiteWco🌕 enable_window_controls_overlay_SiteWco🌕 launch_from_chrome_apps_SiteWco🌓 check_window_controls_overlay_SiteWco_On🌕 +install_create_shortcut_windowed_SiteWco🌕 enable_window_controls_overlay_SiteWco🌕 launch_from_platform_shortcut_SiteWco🌓 check_window_controls_overlay_SiteWco_On🌕 +install_omnibox_icon_SiteWco🌕 enable_window_controls_overlay_SiteWco🌕 launch_from_menu_option_SiteWco🌕 check_window_controls_overlay_SiteWco_On🌕 +install_omnibox_icon_SiteWco🌕 enable_window_controls_overlay_SiteWco🌕 launch_from_launch_icon_SiteWco🌕 check_window_controls_overlay_SiteWco_On🌕 +install_omnibox_icon_SiteWco🌕 enable_window_controls_overlay_SiteWco🌕 launch_from_chrome_apps_SiteWco🌓 check_window_controls_overlay_SiteWco_On🌕 +install_omnibox_icon_SiteWco🌕 enable_window_controls_overlay_SiteWco🌕 launch_from_platform_shortcut_SiteWco🌓 check_window_controls_overlay_SiteWco_On🌕 +install_policy_app_windowed_no_shortcut_SiteWco🌓 enable_window_controls_overlay_SiteWco🌕 launch_from_menu_option_SiteWco🌕 check_window_controls_overlay_SiteWco_On🌕 +install_policy_app_windowed_no_shortcut_SiteWco🌓 enable_window_controls_overlay_SiteWco🌕 launch_from_launch_icon_SiteWco🌕 check_window_controls_overlay_SiteWco_On🌕 +install_policy_app_windowed_no_shortcut_SiteWco🌓 enable_window_controls_overlay_SiteWco🌕 launch_from_chrome_apps_SiteWco🌓 check_window_controls_overlay_SiteWco_On🌕 +install_policy_app_windowed_no_shortcut_SiteWco🌓 enable_window_controls_overlay_SiteWco🌕 launch_from_platform_shortcut_SiteWco🌓 check_window_controls_overlay_SiteWco_On🌕 +install_policy_app_windowed_shortcut_SiteWco🌓 enable_window_controls_overlay_SiteWco🌕 launch_from_menu_option_SiteWco🌕 check_window_controls_overlay_SiteWco_On🌕 +install_policy_app_windowed_shortcut_SiteWco🌓 enable_window_controls_overlay_SiteWco🌕 launch_from_launch_icon_SiteWco🌕 check_window_controls_overlay_SiteWco_On🌕 +install_policy_app_windowed_shortcut_SiteWco🌓 enable_window_controls_overlay_SiteWco🌕 launch_from_chrome_apps_SiteWco🌓 check_window_controls_overlay_SiteWco_On🌕 +install_policy_app_windowed_shortcut_SiteWco🌓 enable_window_controls_overlay_SiteWco🌕 launch_from_platform_shortcut_SiteWco🌓 check_window_controls_overlay_SiteWco_On🌕 +install_menu_option_SiteWco🌕 enable_window_controls_overlay_SiteWco🌕 launch_from_menu_option_SiteWco🌕 check_window_controls_overlay_SiteWco_On🌕 +install_menu_option_SiteWco🌕 enable_window_controls_overlay_SiteWco🌕 launch_from_launch_icon_SiteWco🌕 check_window_controls_overlay_SiteWco_On🌕 +install_menu_option_SiteWco🌕 enable_window_controls_overlay_SiteWco🌕 launch_from_chrome_apps_SiteWco🌓 check_window_controls_overlay_SiteWco_On🌕 +install_menu_option_SiteWco🌕 enable_window_controls_overlay_SiteWco🌕 launch_from_platform_shortcut_SiteWco🌓 check_window_controls_overlay_SiteWco_On🌕 +install_create_shortcut_windowed_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_menu_option_SiteB🌑 check_window_controls_overlay_toggle_SiteWco_Shown🌑 +install_create_shortcut_windowed_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_launch_icon_SiteB🌑 check_window_controls_overlay_toggle_SiteWco_Shown🌑 +install_create_shortcut_windowed_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_chrome_apps_SiteB🌑 check_window_controls_overlay_toggle_SiteWco_Shown🌑 +install_create_shortcut_windowed_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_platform_shortcut_SiteB🌑 check_window_controls_overlay_toggle_SiteWco_Shown🌑 +install_omnibox_icon_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_menu_option_SiteB🌑 check_window_controls_overlay_toggle_SiteWco_Shown🌑 +install_omnibox_icon_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_launch_icon_SiteB🌑 check_window_controls_overlay_toggle_SiteWco_Shown🌑 +install_omnibox_icon_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_chrome_apps_SiteB🌑 check_window_controls_overlay_toggle_SiteWco_Shown🌑 +install_omnibox_icon_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_platform_shortcut_SiteB🌑 check_window_controls_overlay_toggle_SiteWco_Shown🌑 +install_policy_app_windowed_no_shortcut_SiteB🌓 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_menu_option_SiteB🌑 check_window_controls_overlay_toggle_SiteWco_Shown🌑 +install_policy_app_windowed_no_shortcut_SiteB🌓 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_launch_icon_SiteB🌑 check_window_controls_overlay_toggle_SiteWco_Shown🌑 +install_policy_app_windowed_no_shortcut_SiteB🌓 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_chrome_apps_SiteB🌑 check_window_controls_overlay_toggle_SiteWco_Shown🌑 +install_policy_app_windowed_no_shortcut_SiteB🌓 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_platform_shortcut_SiteB🌑 check_window_controls_overlay_toggle_SiteWco_Shown🌑 +install_policy_app_windowed_shortcut_SiteB🌓 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_menu_option_SiteB🌑 check_window_controls_overlay_toggle_SiteWco_Shown🌑 +install_policy_app_windowed_shortcut_SiteB🌓 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_launch_icon_SiteB🌑 check_window_controls_overlay_toggle_SiteWco_Shown🌑 +install_policy_app_windowed_shortcut_SiteB🌓 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_chrome_apps_SiteB🌑 check_window_controls_overlay_toggle_SiteWco_Shown🌑 +install_policy_app_windowed_shortcut_SiteB🌓 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_platform_shortcut_SiteB🌑 check_window_controls_overlay_toggle_SiteWco_Shown🌑 +install_menu_option_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_menu_option_SiteB🌑 check_window_controls_overlay_toggle_SiteWco_Shown🌑 +install_menu_option_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_launch_icon_SiteB🌑 check_window_controls_overlay_toggle_SiteWco_Shown🌑 +install_menu_option_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_chrome_apps_SiteB🌑 check_window_controls_overlay_toggle_SiteWco_Shown🌑 +install_menu_option_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_platform_shortcut_SiteB🌑 check_window_controls_overlay_toggle_SiteWco_Shown🌑 +install_create_shortcut_windowed_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_menu_option_SiteB🌑 check_window_controls_overlay_toggle_SiteWco_Shown🌑 +install_create_shortcut_windowed_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_launch_icon_SiteB🌑 check_window_controls_overlay_toggle_SiteWco_Shown🌑 +install_create_shortcut_windowed_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_chrome_apps_SiteB🌑 check_window_controls_overlay_toggle_SiteWco_Shown🌑 +install_create_shortcut_windowed_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_platform_shortcut_SiteB🌑 check_window_controls_overlay_toggle_SiteWco_Shown🌑 +install_omnibox_icon_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_menu_option_SiteB🌑 check_window_controls_overlay_toggle_SiteWco_Shown🌑 +install_omnibox_icon_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_launch_icon_SiteB🌑 check_window_controls_overlay_toggle_SiteWco_Shown🌑 +install_omnibox_icon_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_chrome_apps_SiteB🌑 check_window_controls_overlay_toggle_SiteWco_Shown🌑 +install_omnibox_icon_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_platform_shortcut_SiteB🌑 check_window_controls_overlay_toggle_SiteWco_Shown🌑 +install_policy_app_windowed_no_shortcut_SiteB🌓 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_menu_option_SiteB🌑 check_window_controls_overlay_toggle_SiteWco_Shown🌑 +install_policy_app_windowed_no_shortcut_SiteB🌓 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_launch_icon_SiteB🌑 check_window_controls_overlay_toggle_SiteWco_Shown🌑 +install_policy_app_windowed_no_shortcut_SiteB🌓 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_chrome_apps_SiteB🌑 check_window_controls_overlay_toggle_SiteWco_Shown🌑 +install_policy_app_windowed_no_shortcut_SiteB🌓 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_platform_shortcut_SiteB🌑 check_window_controls_overlay_toggle_SiteWco_Shown🌑 +install_policy_app_windowed_shortcut_SiteB🌓 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_menu_option_SiteB🌑 check_window_controls_overlay_toggle_SiteWco_Shown🌑 +install_policy_app_windowed_shortcut_SiteB🌓 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_launch_icon_SiteB🌑 check_window_controls_overlay_toggle_SiteWco_Shown🌑 +install_policy_app_windowed_shortcut_SiteB🌓 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_chrome_apps_SiteB🌑 check_window_controls_overlay_toggle_SiteWco_Shown🌑 +install_policy_app_windowed_shortcut_SiteB🌓 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_platform_shortcut_SiteB🌑 check_window_controls_overlay_toggle_SiteWco_Shown🌑 +install_menu_option_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_menu_option_SiteB🌑 check_window_controls_overlay_toggle_SiteWco_Shown🌑 +install_menu_option_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_launch_icon_SiteB🌑 check_window_controls_overlay_toggle_SiteWco_Shown🌑 +install_menu_option_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_chrome_apps_SiteB🌑 check_window_controls_overlay_toggle_SiteWco_Shown🌑 +install_menu_option_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_platform_shortcut_SiteB🌑 check_window_controls_overlay_toggle_SiteWco_Shown🌑 +install_create_shortcut_windowed_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_menu_option_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_SiteB_Off🌑 +install_create_shortcut_windowed_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_launch_icon_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_SiteB_Off🌑 +install_create_shortcut_windowed_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_chrome_apps_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_SiteB_Off🌑 +install_create_shortcut_windowed_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_platform_shortcut_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_SiteB_Off🌑 +install_omnibox_icon_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_menu_option_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_SiteB_Off🌑 +install_omnibox_icon_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_launch_icon_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_SiteB_Off🌑 +install_omnibox_icon_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_chrome_apps_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_SiteB_Off🌑 +install_omnibox_icon_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_platform_shortcut_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_SiteB_Off🌑 +install_policy_app_windowed_no_shortcut_SiteB🌓 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_menu_option_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_SiteB_Off🌑 +install_policy_app_windowed_no_shortcut_SiteB🌓 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_launch_icon_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_SiteB_Off🌑 +install_policy_app_windowed_no_shortcut_SiteB🌓 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_chrome_apps_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_SiteB_Off🌑 +install_policy_app_windowed_no_shortcut_SiteB🌓 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_platform_shortcut_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_SiteB_Off🌑 +install_policy_app_windowed_shortcut_SiteB🌓 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_menu_option_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_SiteB_Off🌑 +install_policy_app_windowed_shortcut_SiteB🌓 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_launch_icon_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_SiteB_Off🌑 +install_policy_app_windowed_shortcut_SiteB🌓 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_chrome_apps_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_SiteB_Off🌑 +install_policy_app_windowed_shortcut_SiteB🌓 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_platform_shortcut_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_SiteB_Off🌑 +install_menu_option_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_menu_option_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_SiteB_Off🌑 +install_menu_option_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_launch_icon_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_SiteB_Off🌑 +install_menu_option_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_chrome_apps_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_SiteB_Off🌑 +install_menu_option_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_platform_shortcut_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_SiteB_Off🌑 +install_create_shortcut_windowed_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_menu_option_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_toggle_SiteB_Shown🌑 +install_create_shortcut_windowed_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_launch_icon_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_toggle_SiteB_Shown🌑 +install_create_shortcut_windowed_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_chrome_apps_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_toggle_SiteB_Shown🌑 +install_create_shortcut_windowed_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_platform_shortcut_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_toggle_SiteB_Shown🌑 +install_omnibox_icon_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_menu_option_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_toggle_SiteB_Shown🌑 +install_omnibox_icon_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_launch_icon_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_toggle_SiteB_Shown🌑 +install_omnibox_icon_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_chrome_apps_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_toggle_SiteB_Shown🌑 +install_omnibox_icon_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_platform_shortcut_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_toggle_SiteB_Shown🌑 +install_policy_app_windowed_no_shortcut_SiteB🌓 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_menu_option_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_toggle_SiteB_Shown🌑 +install_policy_app_windowed_no_shortcut_SiteB🌓 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_launch_icon_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_toggle_SiteB_Shown🌑 +install_policy_app_windowed_no_shortcut_SiteB🌓 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_chrome_apps_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_toggle_SiteB_Shown🌑 +install_policy_app_windowed_no_shortcut_SiteB🌓 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_platform_shortcut_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_toggle_SiteB_Shown🌑 +install_policy_app_windowed_shortcut_SiteB🌓 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_menu_option_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_toggle_SiteB_Shown🌑 +install_policy_app_windowed_shortcut_SiteB🌓 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_launch_icon_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_toggle_SiteB_Shown🌑 +install_policy_app_windowed_shortcut_SiteB🌓 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_chrome_apps_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_toggle_SiteB_Shown🌑 +install_policy_app_windowed_shortcut_SiteB🌓 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_platform_shortcut_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_toggle_SiteB_Shown🌑 +install_menu_option_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_menu_option_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_toggle_SiteB_Shown🌑 +install_menu_option_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_launch_icon_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_toggle_SiteB_Shown🌑 +install_menu_option_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_chrome_apps_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_toggle_SiteB_Shown🌑 +install_menu_option_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_platform_shortcut_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_toggle_SiteB_Shown🌑 +install_create_shortcut_windowed_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_menu_option_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_toggle_SiteB_Shown🌑 +install_create_shortcut_windowed_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_launch_icon_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_toggle_SiteB_Shown🌑 +install_create_shortcut_windowed_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_chrome_apps_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_toggle_SiteB_Shown🌑 +install_create_shortcut_windowed_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_platform_shortcut_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_toggle_SiteB_Shown🌑 +install_omnibox_icon_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_menu_option_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_toggle_SiteB_Shown🌑 +install_omnibox_icon_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_launch_icon_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_toggle_SiteB_Shown🌑 +install_omnibox_icon_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_chrome_apps_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_toggle_SiteB_Shown🌑 +install_omnibox_icon_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_platform_shortcut_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_toggle_SiteB_Shown🌑 +install_policy_app_windowed_no_shortcut_SiteB🌓 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_menu_option_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_toggle_SiteB_Shown🌑 +install_policy_app_windowed_no_shortcut_SiteB🌓 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_launch_icon_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_toggle_SiteB_Shown🌑 +install_policy_app_windowed_no_shortcut_SiteB🌓 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_chrome_apps_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_toggle_SiteB_Shown🌑 +install_policy_app_windowed_no_shortcut_SiteB🌓 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_platform_shortcut_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_toggle_SiteB_Shown🌑 +install_policy_app_windowed_shortcut_SiteB🌓 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_menu_option_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_toggle_SiteB_Shown🌑 +install_policy_app_windowed_shortcut_SiteB🌓 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_launch_icon_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_toggle_SiteB_Shown🌑 +install_policy_app_windowed_shortcut_SiteB🌓 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_chrome_apps_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_toggle_SiteB_Shown🌑 +install_policy_app_windowed_shortcut_SiteB🌓 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_platform_shortcut_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_toggle_SiteB_Shown🌑 +install_menu_option_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_menu_option_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_toggle_SiteB_Shown🌑 +install_menu_option_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_launch_icon_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_toggle_SiteB_Shown🌑 +install_menu_option_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_chrome_apps_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_toggle_SiteB_Shown🌑 +install_menu_option_SiteB🌕 manifest_update_display_SiteB_Wco🌕 await_manifest_update_SiteB🌑 launch_from_platform_shortcut_SiteB🌑 enable_window_controls_overlay_SiteB🌑 check_window_controls_overlay_toggle_SiteB_Shown🌑 +install_create_shortcut_windowed_SiteWco🌕 manifest_update_display_SiteWco_Standalone🌕 await_manifest_update_SiteWco🌑 launch_from_menu_option_SiteWco🌑 check_window_controls_overlay_toggle_SiteWco_NotShown🌑 +install_create_shortcut_windowed_SiteWco🌕 manifest_update_display_SiteWco_Standalone🌕 await_manifest_update_SiteWco🌑 launch_from_launch_icon_SiteWco🌑 check_window_controls_overlay_toggle_SiteWco_NotShown🌑 +install_create_shortcut_windowed_SiteWco🌕 manifest_update_display_SiteWco_Standalone🌕 await_manifest_update_SiteWco🌑 launch_from_chrome_apps_SiteWco🌑 check_window_controls_overlay_toggle_SiteWco_NotShown🌑 +install_create_shortcut_windowed_SiteWco🌕 manifest_update_display_SiteWco_Standalone🌕 await_manifest_update_SiteWco🌑 launch_from_platform_shortcut_SiteWco🌑 check_window_controls_overlay_toggle_SiteWco_NotShown🌑 +install_omnibox_icon_SiteWco🌕 manifest_update_display_SiteWco_Standalone🌕 await_manifest_update_SiteWco🌑 launch_from_menu_option_SiteWco🌑 check_window_controls_overlay_toggle_SiteWco_NotShown🌑 +install_omnibox_icon_SiteWco🌕 manifest_update_display_SiteWco_Standalone🌕 await_manifest_update_SiteWco🌑 launch_from_launch_icon_SiteWco🌑 check_window_controls_overlay_toggle_SiteWco_NotShown🌑 +install_omnibox_icon_SiteWco🌕 manifest_update_display_SiteWco_Standalone🌕 await_manifest_update_SiteWco🌑 launch_from_chrome_apps_SiteWco🌑 check_window_controls_overlay_toggle_SiteWco_NotShown🌑 +install_omnibox_icon_SiteWco🌕 manifest_update_display_SiteWco_Standalone🌕 await_manifest_update_SiteWco🌑 launch_from_platform_shortcut_SiteWco🌑 check_window_controls_overlay_toggle_SiteWco_NotShown🌑 +install_policy_app_windowed_no_shortcut_SiteWco🌓 manifest_update_display_SiteWco_Standalone🌕 await_manifest_update_SiteWco🌑 launch_from_menu_option_SiteWco🌑 check_window_controls_overlay_toggle_SiteWco_NotShown🌑 +install_policy_app_windowed_no_shortcut_SiteWco🌓 manifest_update_display_SiteWco_Standalone🌕 await_manifest_update_SiteWco🌑 launch_from_launch_icon_SiteWco🌑 check_window_controls_overlay_toggle_SiteWco_NotShown🌑 +install_policy_app_windowed_no_shortcut_SiteWco🌓 manifest_update_display_SiteWco_Standalone🌕 await_manifest_update_SiteWco🌑 launch_from_chrome_apps_SiteWco🌑 check_window_controls_overlay_toggle_SiteWco_NotShown🌑 +install_policy_app_windowed_no_shortcut_SiteWco🌓 manifest_update_display_SiteWco_Standalone🌕 await_manifest_update_SiteWco🌑 launch_from_platform_shortcut_SiteWco🌑 check_window_controls_overlay_toggle_SiteWco_NotShown🌑 +install_policy_app_windowed_shortcut_SiteWco🌓 manifest_update_display_SiteWco_Standalone🌕 await_manifest_update_SiteWco🌑 launch_from_menu_option_SiteWco🌑 check_window_controls_overlay_toggle_SiteWco_NotShown🌑 +install_policy_app_windowed_shortcut_SiteWco🌓 manifest_update_display_SiteWco_Standalone🌕 await_manifest_update_SiteWco🌑 launch_from_launch_icon_SiteWco🌑 check_window_controls_overlay_toggle_SiteWco_NotShown🌑 +install_policy_app_windowed_shortcut_SiteWco🌓 manifest_update_display_SiteWco_Standalone🌕 await_manifest_update_SiteWco🌑 launch_from_chrome_apps_SiteWco🌑 check_window_controls_overlay_toggle_SiteWco_NotShown🌑 +install_policy_app_windowed_shortcut_SiteWco🌓 manifest_update_display_SiteWco_Standalone🌕 await_manifest_update_SiteWco🌑 launch_from_platform_shortcut_SiteWco🌑 check_window_controls_overlay_toggle_SiteWco_NotShown🌑 +install_menu_option_SiteWco🌕 manifest_update_display_SiteWco_Standalone🌕 await_manifest_update_SiteWco🌑 launch_from_menu_option_SiteWco🌑 check_window_controls_overlay_toggle_SiteWco_NotShown🌑 +install_menu_option_SiteWco🌕 manifest_update_display_SiteWco_Standalone🌕 await_manifest_update_SiteWco🌑 launch_from_launch_icon_SiteWco🌑 check_window_controls_overlay_toggle_SiteWco_NotShown🌑 +install_menu_option_SiteWco🌕 manifest_update_display_SiteWco_Standalone🌕 await_manifest_update_SiteWco🌑 launch_from_chrome_apps_SiteWco🌑 check_window_controls_overlay_toggle_SiteWco_NotShown🌑 +install_menu_option_SiteWco🌕 manifest_update_display_SiteWco_Standalone🌕 await_manifest_update_SiteWco🌑 launch_from_platform_shortcut_SiteWco🌑 check_window_controls_overlay_toggle_SiteWco_NotShown🌑 +install_create_shortcut_windowed_SiteWco🌕 manifest_update_display_SiteWco_Standalone🌕 await_manifest_update_SiteWco🌑 launch_from_menu_option_SiteWco🌑 check_window_controls_overlay_SiteWco_Off🌑 +install_create_shortcut_windowed_SiteWco🌕 manifest_update_display_SiteWco_Standalone🌕 await_manifest_update_SiteWco🌑 launch_from_launch_icon_SiteWco🌑 check_window_controls_overlay_SiteWco_Off🌑 +install_create_shortcut_windowed_SiteWco🌕 manifest_update_display_SiteWco_Standalone🌕 await_manifest_update_SiteWco🌑 launch_from_chrome_apps_SiteWco🌑 check_window_controls_overlay_SiteWco_Off🌑 +install_create_shortcut_windowed_SiteWco🌕 manifest_update_display_SiteWco_Standalone🌕 await_manifest_update_SiteWco🌑 launch_from_platform_shortcut_SiteWco🌑 check_window_controls_overlay_SiteWco_Off🌑 +install_omnibox_icon_SiteWco🌕 manifest_update_display_SiteWco_Standalone🌕 await_manifest_update_SiteWco🌑 launch_from_menu_option_SiteWco🌑 check_window_controls_overlay_SiteWco_Off🌑 +install_omnibox_icon_SiteWco🌕 manifest_update_display_SiteWco_Standalone🌕 await_manifest_update_SiteWco🌑 launch_from_launch_icon_SiteWco🌑 check_window_controls_overlay_SiteWco_Off🌑 +install_omnibox_icon_SiteWco🌕 manifest_update_display_SiteWco_Standalone🌕 await_manifest_update_SiteWco🌑 launch_from_chrome_apps_SiteWco🌑 check_window_controls_overlay_SiteWco_Off🌑 +install_omnibox_icon_SiteWco🌕 manifest_update_display_SiteWco_Standalone🌕 await_manifest_update_SiteWco🌑 launch_from_platform_shortcut_SiteWco🌑 check_window_controls_overlay_SiteWco_Off🌑 +install_policy_app_windowed_no_shortcut_SiteWco🌓 manifest_update_display_SiteWco_Standalone🌕 await_manifest_update_SiteWco🌑 launch_from_menu_option_SiteWco🌑 check_window_controls_overlay_SiteWco_Off🌑 +install_policy_app_windowed_no_shortcut_SiteWco🌓 manifest_update_display_SiteWco_Standalone🌕 await_manifest_update_SiteWco🌑 launch_from_launch_icon_SiteWco🌑 check_window_controls_overlay_SiteWco_Off🌑 +install_policy_app_windowed_no_shortcut_SiteWco🌓 manifest_update_display_SiteWco_Standalone🌕 await_manifest_update_SiteWco🌑 launch_from_chrome_apps_SiteWco🌑 check_window_controls_overlay_SiteWco_Off🌑 +install_policy_app_windowed_no_shortcut_SiteWco🌓 manifest_update_display_SiteWco_Standalone🌕 await_manifest_update_SiteWco🌑 launch_from_platform_shortcut_SiteWco🌑 check_window_controls_overlay_SiteWco_Off🌑 +install_policy_app_windowed_shortcut_SiteWco🌓 manifest_update_display_SiteWco_Standalone🌕 await_manifest_update_SiteWco🌑 launch_from_menu_option_SiteWco🌑 check_window_controls_overlay_SiteWco_Off🌑 +install_policy_app_windowed_shortcut_SiteWco🌓 manifest_update_display_SiteWco_Standalone🌕 await_manifest_update_SiteWco🌑 launch_from_launch_icon_SiteWco🌑 check_window_controls_overlay_SiteWco_Off🌑 +install_policy_app_windowed_shortcut_SiteWco🌓 manifest_update_display_SiteWco_Standalone🌕 await_manifest_update_SiteWco🌑 launch_from_chrome_apps_SiteWco🌑 check_window_controls_overlay_SiteWco_Off🌑 +install_policy_app_windowed_shortcut_SiteWco🌓 manifest_update_display_SiteWco_Standalone🌕 await_manifest_update_SiteWco🌑 launch_from_platform_shortcut_SiteWco🌑 check_window_controls_overlay_SiteWco_Off🌑 +install_menu_option_SiteWco🌕 manifest_update_display_SiteWco_Standalone🌕 await_manifest_update_SiteWco🌑 launch_from_menu_option_SiteWco🌑 check_window_controls_overlay_SiteWco_Off🌑 +install_menu_option_SiteWco🌕 manifest_update_display_SiteWco_Standalone🌕 await_manifest_update_SiteWco🌑 launch_from_launch_icon_SiteWco🌑 check_window_controls_overlay_SiteWco_Off🌑 +install_menu_option_SiteWco🌕 manifest_update_display_SiteWco_Standalone🌕 await_manifest_update_SiteWco🌑 launch_from_chrome_apps_SiteWco🌑 check_window_controls_overlay_SiteWco_Off🌑 +install_menu_option_SiteWco🌕 manifest_update_display_SiteWco_Standalone🌕 await_manifest_update_SiteWco🌑 launch_from_platform_shortcut_SiteWco🌑 check_window_controls_overlay_SiteWco_Off🌑 +install_create_shortcut_windowed_SiteB🌕 check_site_handles_file_SiteB_Txt🌑 check_site_handles_file_SiteB_Png🌑 +install_omnibox_icon_SiteB🌕 check_site_handles_file_SiteB_Txt🌑 check_site_handles_file_SiteB_Png🌑 +install_policy_app_windowed_no_shortcut_SiteB🌓 check_site_handles_file_SiteB_Txt🌑 check_site_handles_file_SiteB_Png🌑 +install_policy_app_windowed_shortcut_SiteB🌓 check_site_handles_file_SiteB_Txt🌑 check_site_handles_file_SiteB_Png🌑 +install_menu_option_SiteB🌕 check_site_handles_file_SiteB_Txt🌑 check_site_handles_file_SiteB_Png🌑 +install_create_shortcut_tabbed_SiteB🌕 check_site_handles_file_SiteB_Txt🌑 check_site_handles_file_SiteB_Png🌑 +install_policy_app_tabbed_shortcut_SiteB🌓 check_site_handles_file_SiteB_Txt🌑 check_site_handles_file_SiteB_Png🌑 +install_policy_app_tabbed_no_shortcut_SiteB🌓 check_site_handles_file_SiteB_Txt🌑 check_site_handles_file_SiteB_Png🌑 +install_create_shortcut_windowed_SiteB🌕 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 +install_omnibox_icon_SiteB🌕 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 +install_policy_app_windowed_no_shortcut_SiteB🌓 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 +install_policy_app_windowed_shortcut_SiteB🌓 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 +install_menu_option_SiteB🌕 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 +install_create_shortcut_tabbed_SiteB🌕 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 +install_policy_app_tabbed_shortcut_SiteB🌓 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 +install_policy_app_tabbed_no_shortcut_SiteB🌓 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 +install_create_shortcut_windowed_SiteB🌕 launch_file_OneTextFile🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_One🌑 check_files_loaded_in_site_SiteB_OneTextFile🌑 +install_omnibox_icon_SiteB🌕 launch_file_OneTextFile🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_One🌑 check_files_loaded_in_site_SiteB_OneTextFile🌑 +install_policy_app_windowed_no_shortcut_SiteB🌓 launch_file_OneTextFile🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_One🌑 check_files_loaded_in_site_SiteB_OneTextFile🌑 +install_policy_app_windowed_shortcut_SiteB🌓 launch_file_OneTextFile🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_One🌑 check_files_loaded_in_site_SiteB_OneTextFile🌑 +install_menu_option_SiteB🌕 launch_file_OneTextFile🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_One🌑 check_files_loaded_in_site_SiteB_OneTextFile🌑 +install_create_shortcut_tabbed_SiteB🌕 launch_file_OneTextFile🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_One🌑 check_files_loaded_in_site_SiteB_OneTextFile🌑 +install_policy_app_tabbed_shortcut_SiteB🌓 launch_file_OneTextFile🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_One🌑 check_files_loaded_in_site_SiteB_OneTextFile🌑 +install_policy_app_tabbed_no_shortcut_SiteB🌓 launch_file_OneTextFile🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_One🌑 check_files_loaded_in_site_SiteB_OneTextFile🌑 +install_create_shortcut_windowed_SiteB🌕 launch_file_MultipleTextFiles🌑 check_file_handling_dialog_Shown🌑 +install_omnibox_icon_SiteB🌕 launch_file_MultipleTextFiles🌑 check_file_handling_dialog_Shown🌑 +install_policy_app_windowed_no_shortcut_SiteB🌓 launch_file_MultipleTextFiles🌑 check_file_handling_dialog_Shown🌑 +install_policy_app_windowed_shortcut_SiteB🌓 launch_file_MultipleTextFiles🌑 check_file_handling_dialog_Shown🌑 +install_menu_option_SiteB🌕 launch_file_MultipleTextFiles🌑 check_file_handling_dialog_Shown🌑 +install_create_shortcut_tabbed_SiteB🌕 launch_file_MultipleTextFiles🌑 check_file_handling_dialog_Shown🌑 +install_policy_app_tabbed_shortcut_SiteB🌓 launch_file_MultipleTextFiles🌑 check_file_handling_dialog_Shown🌑 +install_policy_app_tabbed_no_shortcut_SiteB🌓 launch_file_MultipleTextFiles🌑 check_file_handling_dialog_Shown🌑 +install_create_shortcut_windowed_SiteB🌕 launch_file_MultipleTextFiles🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_One🌑 check_files_loaded_in_site_SiteB_MultipleTextFiles🌑 +install_omnibox_icon_SiteB🌕 launch_file_MultipleTextFiles🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_One🌑 check_files_loaded_in_site_SiteB_MultipleTextFiles🌑 +install_policy_app_windowed_no_shortcut_SiteB🌓 launch_file_MultipleTextFiles🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_One🌑 check_files_loaded_in_site_SiteB_MultipleTextFiles🌑 +install_policy_app_windowed_shortcut_SiteB🌓 launch_file_MultipleTextFiles🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_One🌑 check_files_loaded_in_site_SiteB_MultipleTextFiles🌑 +install_menu_option_SiteB🌕 launch_file_MultipleTextFiles🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_One🌑 check_files_loaded_in_site_SiteB_MultipleTextFiles🌑 +install_create_shortcut_tabbed_SiteB🌕 launch_file_MultipleTextFiles🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_One🌑 check_files_loaded_in_site_SiteB_MultipleTextFiles🌑 +install_policy_app_tabbed_shortcut_SiteB🌓 launch_file_MultipleTextFiles🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_One🌑 check_files_loaded_in_site_SiteB_MultipleTextFiles🌑 +install_policy_app_tabbed_no_shortcut_SiteB🌓 launch_file_MultipleTextFiles🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_One🌑 check_files_loaded_in_site_SiteB_MultipleTextFiles🌑 +install_create_shortcut_windowed_SiteB🌕 launch_file_OnePngFile🌑 check_file_handling_dialog_Shown🌑 +install_omnibox_icon_SiteB🌕 launch_file_OnePngFile🌑 check_file_handling_dialog_Shown🌑 +install_policy_app_windowed_no_shortcut_SiteB🌓 launch_file_OnePngFile🌑 check_file_handling_dialog_Shown🌑 +install_policy_app_windowed_shortcut_SiteB🌓 launch_file_OnePngFile🌑 check_file_handling_dialog_Shown🌑 +install_menu_option_SiteB🌕 launch_file_OnePngFile🌑 check_file_handling_dialog_Shown🌑 +install_create_shortcut_tabbed_SiteB🌕 launch_file_OnePngFile🌑 check_file_handling_dialog_Shown🌑 +install_policy_app_tabbed_shortcut_SiteB🌓 launch_file_OnePngFile🌑 check_file_handling_dialog_Shown🌑 +install_policy_app_tabbed_no_shortcut_SiteB🌓 launch_file_OnePngFile🌑 check_file_handling_dialog_Shown🌑 +install_create_shortcut_windowed_SiteB🌕 launch_file_OnePngFile🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_One🌑 check_files_loaded_in_site_SiteB_OnePngFile🌑 +install_omnibox_icon_SiteB🌕 launch_file_OnePngFile🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_One🌑 check_files_loaded_in_site_SiteB_OnePngFile🌑 +install_policy_app_windowed_no_shortcut_SiteB🌓 launch_file_OnePngFile🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_One🌑 check_files_loaded_in_site_SiteB_OnePngFile🌑 +install_policy_app_windowed_shortcut_SiteB🌓 launch_file_OnePngFile🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_One🌑 check_files_loaded_in_site_SiteB_OnePngFile🌑 +install_menu_option_SiteB🌕 launch_file_OnePngFile🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_One🌑 check_files_loaded_in_site_SiteB_OnePngFile🌑 +install_create_shortcut_tabbed_SiteB🌕 launch_file_OnePngFile🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_One🌑 check_files_loaded_in_site_SiteB_OnePngFile🌑 +install_policy_app_tabbed_shortcut_SiteB🌓 launch_file_OnePngFile🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_One🌑 check_files_loaded_in_site_SiteB_OnePngFile🌑 +install_policy_app_tabbed_no_shortcut_SiteB🌓 launch_file_OnePngFile🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_One🌑 check_files_loaded_in_site_SiteB_OnePngFile🌑 +install_create_shortcut_windowed_SiteB🌕 launch_file_MultiplePngFiles🌑 check_file_handling_dialog_Shown🌑 +install_omnibox_icon_SiteB🌕 launch_file_MultiplePngFiles🌑 check_file_handling_dialog_Shown🌑 +install_policy_app_windowed_no_shortcut_SiteB🌓 launch_file_MultiplePngFiles🌑 check_file_handling_dialog_Shown🌑 +install_policy_app_windowed_shortcut_SiteB🌓 launch_file_MultiplePngFiles🌑 check_file_handling_dialog_Shown🌑 +install_menu_option_SiteB🌕 launch_file_MultiplePngFiles🌑 check_file_handling_dialog_Shown🌑 +install_create_shortcut_tabbed_SiteB🌕 launch_file_MultiplePngFiles🌑 check_file_handling_dialog_Shown🌑 +install_policy_app_tabbed_shortcut_SiteB🌓 launch_file_MultiplePngFiles🌑 check_file_handling_dialog_Shown🌑 +install_policy_app_tabbed_no_shortcut_SiteB🌓 launch_file_MultiplePngFiles🌑 check_file_handling_dialog_Shown🌑 +install_create_shortcut_windowed_SiteB🌕 launch_file_MultiplePngFiles🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_Two🌑 check_files_loaded_in_site_SiteB_MultiplePngFiles🌑 +install_omnibox_icon_SiteB🌕 launch_file_MultiplePngFiles🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_Two🌑 check_files_loaded_in_site_SiteB_MultiplePngFiles🌑 +install_policy_app_windowed_no_shortcut_SiteB🌓 launch_file_MultiplePngFiles🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_Two🌑 check_files_loaded_in_site_SiteB_MultiplePngFiles🌑 +install_policy_app_windowed_shortcut_SiteB🌓 launch_file_MultiplePngFiles🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_Two🌑 check_files_loaded_in_site_SiteB_MultiplePngFiles🌑 +install_menu_option_SiteB🌕 launch_file_MultiplePngFiles🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_Two🌑 check_files_loaded_in_site_SiteB_MultiplePngFiles🌑 +install_create_shortcut_tabbed_SiteB🌕 launch_file_MultiplePngFiles🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_Two🌑 check_files_loaded_in_site_SiteB_MultiplePngFiles🌑 +install_policy_app_tabbed_shortcut_SiteB🌓 launch_file_MultiplePngFiles🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_Two🌑 check_files_loaded_in_site_SiteB_MultiplePngFiles🌑 +install_policy_app_tabbed_no_shortcut_SiteB🌓 launch_file_MultiplePngFiles🌑 file_handling_dialog_Allow_AskAgain🌑 check_pwa_window_created_SiteB_Two🌑 check_files_loaded_in_site_SiteB_MultiplePngFiles🌑 +install_create_shortcut_windowed_SiteB🌕 launch_file_OneTextFile🌑 file_handling_dialog_Allow_Remember🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_NotShown🌑 check_pwa_window_created_SiteB_One🌑 +install_omnibox_icon_SiteB🌕 launch_file_OneTextFile🌑 file_handling_dialog_Allow_Remember🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_NotShown🌑 check_pwa_window_created_SiteB_One🌑 +install_policy_app_windowed_no_shortcut_SiteB🌓 launch_file_OneTextFile🌑 file_handling_dialog_Allow_Remember🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_NotShown🌑 check_pwa_window_created_SiteB_One🌑 +install_policy_app_windowed_shortcut_SiteB🌓 launch_file_OneTextFile🌑 file_handling_dialog_Allow_Remember🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_NotShown🌑 check_pwa_window_created_SiteB_One🌑 +install_menu_option_SiteB🌕 launch_file_OneTextFile🌑 file_handling_dialog_Allow_Remember🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_NotShown🌑 check_pwa_window_created_SiteB_One🌑 +install_create_shortcut_tabbed_SiteB🌕 launch_file_OneTextFile🌑 file_handling_dialog_Allow_Remember🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_NotShown🌑 check_pwa_window_created_SiteB_One🌑 +install_policy_app_tabbed_shortcut_SiteB🌓 launch_file_OneTextFile🌑 file_handling_dialog_Allow_Remember🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_NotShown🌑 check_pwa_window_created_SiteB_One🌑 +install_policy_app_tabbed_no_shortcut_SiteB🌓 launch_file_OneTextFile🌑 file_handling_dialog_Allow_Remember🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_NotShown🌑 check_pwa_window_created_SiteB_One🌑 +install_create_shortcut_windowed_SiteB🌕 launch_file_OneTextFile🌑 file_handling_dialog_Allow_AskAgain🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 +install_omnibox_icon_SiteB🌕 launch_file_OneTextFile🌑 file_handling_dialog_Allow_AskAgain🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 +install_policy_app_windowed_no_shortcut_SiteB🌓 launch_file_OneTextFile🌑 file_handling_dialog_Allow_AskAgain🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 +install_policy_app_windowed_shortcut_SiteB🌓 launch_file_OneTextFile🌑 file_handling_dialog_Allow_AskAgain🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 +install_menu_option_SiteB🌕 launch_file_OneTextFile🌑 file_handling_dialog_Allow_AskAgain🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 +install_create_shortcut_tabbed_SiteB🌕 launch_file_OneTextFile🌑 file_handling_dialog_Allow_AskAgain🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 +install_policy_app_tabbed_shortcut_SiteB🌓 launch_file_OneTextFile🌑 file_handling_dialog_Allow_AskAgain🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 +install_policy_app_tabbed_no_shortcut_SiteB🌓 launch_file_OneTextFile🌑 file_handling_dialog_Allow_AskAgain🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 +install_create_shortcut_windowed_SiteB🌕 launch_file_OneTextFile🌑 file_handling_dialog_Deny_AskAgain🌑 check_window_not_created🌑 check_site_handles_file_SiteB_Txt🌑 check_site_handles_file_SiteB_Png🌑 +install_omnibox_icon_SiteB🌕 launch_file_OneTextFile🌑 file_handling_dialog_Deny_AskAgain🌑 check_window_not_created🌑 check_site_handles_file_SiteB_Txt🌑 check_site_handles_file_SiteB_Png🌑 +install_policy_app_windowed_no_shortcut_SiteB🌓 launch_file_OneTextFile🌑 file_handling_dialog_Deny_AskAgain🌑 check_window_not_created🌑 check_site_handles_file_SiteB_Txt🌑 check_site_handles_file_SiteB_Png🌑 +install_policy_app_windowed_shortcut_SiteB🌓 launch_file_OneTextFile🌑 file_handling_dialog_Deny_AskAgain🌑 check_window_not_created🌑 check_site_handles_file_SiteB_Txt🌑 check_site_handles_file_SiteB_Png🌑 +install_menu_option_SiteB🌕 launch_file_OneTextFile🌑 file_handling_dialog_Deny_AskAgain🌑 check_window_not_created🌑 check_site_handles_file_SiteB_Txt🌑 check_site_handles_file_SiteB_Png🌑 +install_create_shortcut_tabbed_SiteB🌕 launch_file_OneTextFile🌑 file_handling_dialog_Deny_AskAgain🌑 check_window_not_created🌑 check_site_handles_file_SiteB_Txt🌑 check_site_handles_file_SiteB_Png🌑 +install_policy_app_tabbed_shortcut_SiteB🌓 launch_file_OneTextFile🌑 file_handling_dialog_Deny_AskAgain🌑 check_window_not_created🌑 check_site_handles_file_SiteB_Txt🌑 check_site_handles_file_SiteB_Png🌑 +install_policy_app_tabbed_no_shortcut_SiteB🌓 launch_file_OneTextFile🌑 file_handling_dialog_Deny_AskAgain🌑 check_window_not_created🌑 check_site_handles_file_SiteB_Txt🌑 check_site_handles_file_SiteB_Png🌑 +install_create_shortcut_windowed_SiteB🌕 launch_file_OneTextFile🌑 file_handling_dialog_Deny_AskAgain🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 +install_omnibox_icon_SiteB🌕 launch_file_OneTextFile🌑 file_handling_dialog_Deny_AskAgain🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 +install_policy_app_windowed_no_shortcut_SiteB🌓 launch_file_OneTextFile🌑 file_handling_dialog_Deny_AskAgain🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 +install_policy_app_windowed_shortcut_SiteB🌓 launch_file_OneTextFile🌑 file_handling_dialog_Deny_AskAgain🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 +install_menu_option_SiteB🌕 launch_file_OneTextFile🌑 file_handling_dialog_Deny_AskAgain🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 +install_create_shortcut_tabbed_SiteB🌕 launch_file_OneTextFile🌑 file_handling_dialog_Deny_AskAgain🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 +install_policy_app_tabbed_shortcut_SiteB🌓 launch_file_OneTextFile🌑 file_handling_dialog_Deny_AskAgain🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 +install_policy_app_tabbed_no_shortcut_SiteB🌓 launch_file_OneTextFile🌑 file_handling_dialog_Deny_AskAgain🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 +install_create_shortcut_windowed_SiteB🌕 launch_file_OneTextFile🌑 file_handling_dialog_Deny_Remember🌑 check_window_not_created🌑 check_site_not_handles_file_SiteB_Txt🌑 check_site_not_handles_file_SiteB_Png🌑 +install_omnibox_icon_SiteB🌕 launch_file_OneTextFile🌑 file_handling_dialog_Deny_Remember🌑 check_window_not_created🌑 check_site_not_handles_file_SiteB_Txt🌑 check_site_not_handles_file_SiteB_Png🌑 +install_policy_app_windowed_no_shortcut_SiteB🌓 launch_file_OneTextFile🌑 file_handling_dialog_Deny_Remember🌑 check_window_not_created🌑 check_site_not_handles_file_SiteB_Txt🌑 check_site_not_handles_file_SiteB_Png🌑 +install_policy_app_windowed_shortcut_SiteB🌓 launch_file_OneTextFile🌑 file_handling_dialog_Deny_Remember🌑 check_window_not_created🌑 check_site_not_handles_file_SiteB_Txt🌑 check_site_not_handles_file_SiteB_Png🌑 +install_menu_option_SiteB🌕 launch_file_OneTextFile🌑 file_handling_dialog_Deny_Remember🌑 check_window_not_created🌑 check_site_not_handles_file_SiteB_Txt🌑 check_site_not_handles_file_SiteB_Png🌑 +install_create_shortcut_tabbed_SiteB🌕 launch_file_OneTextFile🌑 file_handling_dialog_Deny_Remember🌑 check_window_not_created🌑 check_site_not_handles_file_SiteB_Txt🌑 check_site_not_handles_file_SiteB_Png🌑 +install_policy_app_tabbed_shortcut_SiteB🌓 launch_file_OneTextFile🌑 file_handling_dialog_Deny_Remember🌑 check_window_not_created🌑 check_site_not_handles_file_SiteB_Txt🌑 check_site_not_handles_file_SiteB_Png🌑 +install_policy_app_tabbed_no_shortcut_SiteB🌓 launch_file_OneTextFile🌑 file_handling_dialog_Deny_Remember🌑 check_window_not_created🌑 check_site_not_handles_file_SiteB_Txt🌑 check_site_not_handles_file_SiteB_Png🌑 +install_create_shortcut_windowed_SiteB🌕 add_file_handling_policy_approval_SiteB🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_NotShown🌑 check_pwa_window_created_SiteB_One🌑 +install_omnibox_icon_SiteB🌕 add_file_handling_policy_approval_SiteB🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_NotShown🌑 check_pwa_window_created_SiteB_One🌑 +install_policy_app_windowed_no_shortcut_SiteB🌓 add_file_handling_policy_approval_SiteB🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_NotShown🌑 check_pwa_window_created_SiteB_One🌑 +install_policy_app_windowed_shortcut_SiteB🌓 add_file_handling_policy_approval_SiteB🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_NotShown🌑 check_pwa_window_created_SiteB_One🌑 +install_menu_option_SiteB🌕 add_file_handling_policy_approval_SiteB🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_NotShown🌑 check_pwa_window_created_SiteB_One🌑 +install_create_shortcut_tabbed_SiteB🌕 add_file_handling_policy_approval_SiteB🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_NotShown🌑 check_pwa_window_created_SiteB_One🌑 +install_policy_app_tabbed_shortcut_SiteB🌓 add_file_handling_policy_approval_SiteB🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_NotShown🌑 check_pwa_window_created_SiteB_One🌑 +install_policy_app_tabbed_no_shortcut_SiteB🌓 add_file_handling_policy_approval_SiteB🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_NotShown🌑 check_pwa_window_created_SiteB_One🌑 +install_create_shortcut_windowed_SiteB🌕 add_file_handling_policy_approval_SiteB🌑 remove_file_handling_policy_approval_SiteB🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 +install_omnibox_icon_SiteB🌕 add_file_handling_policy_approval_SiteB🌑 remove_file_handling_policy_approval_SiteB🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 +install_policy_app_windowed_no_shortcut_SiteB🌓 add_file_handling_policy_approval_SiteB🌑 remove_file_handling_policy_approval_SiteB🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 +install_policy_app_windowed_shortcut_SiteB🌓 add_file_handling_policy_approval_SiteB🌑 remove_file_handling_policy_approval_SiteB🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 +install_menu_option_SiteB🌕 add_file_handling_policy_approval_SiteB🌑 remove_file_handling_policy_approval_SiteB🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 +install_create_shortcut_tabbed_SiteB🌕 add_file_handling_policy_approval_SiteB🌑 remove_file_handling_policy_approval_SiteB🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 +install_policy_app_tabbed_shortcut_SiteB🌓 add_file_handling_policy_approval_SiteB🌑 remove_file_handling_policy_approval_SiteB🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑 +install_policy_app_tabbed_no_shortcut_SiteB🌓 add_file_handling_policy_approval_SiteB🌑 remove_file_handling_policy_approval_SiteB🌑 launch_file_OneTextFile🌑 check_file_handling_dialog_Shown🌑
diff --git a/chrome/test/webapps/data/critical_user_journeys.md b/chrome/test/webapps/data/critical_user_journeys.md index 9ca5dfec..392a7cb 100644 --- a/chrome/test/webapps/data/critical_user_journeys.md +++ b/chrome/test/webapps/data/critical_user_journeys.md
@@ -248,20 +248,20 @@ ## Windows Control Overlay | #Platforms | Test -> | | | | | | | | | | | | | | | | | | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | -| #WMLC | install_windowed(SiteWCO) | check_window_controls_overlay_toggle(SiteWCO, Shown) | -| #WMLC | install_windowed(SiteA) | check_window_controls_overlay_toggle(SiteA, NotShown) | -| #WMLC | install_windowed(SiteWCO) | enable_window_controls_overlay(SiteWCO) | check_window_controls_overlay(SiteWCO, On) | -| #WMLC | install_windowed(SiteWCO) | enable_window_controls_overlay(SiteWCO) | check_window_controls_overlay_toggle(SiteWCO, Shown) | -| #WMLC | install_windowed(SiteWCO) | enable_window_controls_overlay(SiteWCO) | disable_window_controls_overlay(SiteWCO) | check_window_controls_overlay(SiteWCO, Off) | -| #WMLC | install_windowed(SiteWCO) | enable_window_controls_overlay(SiteWCO) | disable_window_controls_overlay(SiteWCO) | check_window_controls_overlay_toggle(SiteWCO, Shown) | -| #WMLC | install_windowed(SiteWCO) | enable_window_controls_overlay(SiteWCO) | launch(SiteWCO) | check_window_controls_overlay(SiteWCO, On) | -| #WMLC | install_windowed(SiteB) | manifest_update_display(SiteB, WCO) | await_manifest_update(SiteB) | launch(SiteB) | check_window_controls_overlay_toggle(SiteWCO, Shown) | -| #WMLC | install_windowed(SiteB) | manifest_update_display(SiteB, WCO) | await_manifest_update(SiteB) | launch(SiteB) | check_window_controls_overlay_toggle(SiteWCO, Shown) | -| #WMLC | install_windowed(SiteB) | manifest_update_display(SiteB, WCO) | await_manifest_update(SiteB) | launch(SiteB) | enable_window_controls_overlay(SiteB) | check_window_controls_overlay(SiteB, Off) | -| #WMLC | install_windowed(SiteB) | manifest_update_display(SiteB, WCO) | await_manifest_update(SiteB) | launch(SiteB) | enable_window_controls_overlay(SiteB) | check_window_controls_overlay_toggle(SiteB, Shown) | -| #WMLC | install_windowed(SiteB) | manifest_update_display(SiteB, WCO) | await_manifest_update(SiteB) | launch(SiteB) | enable_window_controls_overlay(SiteB) | check_window_controls_overlay_toggle(SiteB, Shown) | -| #WMLC | install_windowed(SiteWCO) | manifest_update_display(SiteWCO, Standalone) | await_manifest_update(SiteWCO) | launch(SiteWCO) | check_window_controls_overlay_toggle(SiteWCO, NotShown) | -| #WMLC | install_windowed(SiteWCO) | manifest_update_display(SiteWCO, Standalone) | await_manifest_update(SiteWCO) | launch(SiteWCO) | check_window_controls_overlay(SiteWCO, Off) | +| WMLC | install_windowed(SiteWco) | check_window_controls_overlay_toggle(SiteWco, Shown) | +| WMLC | install_windowed(SiteA) | check_window_controls_overlay_toggle(SiteA, NotShown) | +| WMLC | install_windowed(SiteWco) | enable_window_controls_overlay(SiteWco) | check_window_controls_overlay(SiteWco, On) | +| WMLC | install_windowed(SiteWco) | enable_window_controls_overlay(SiteWco) | check_window_controls_overlay_toggle(SiteWco, Shown) | +| WMLC | install_windowed(SiteWco) | enable_window_controls_overlay(SiteWco) | disable_window_controls_overlay(SiteWco) | check_window_controls_overlay(SiteWco, Off) | +| WMLC | install_windowed(SiteWco) | enable_window_controls_overlay(SiteWco) | disable_window_controls_overlay(SiteWco) | check_window_controls_overlay_toggle(SiteWco, Shown) | +| WMLC | install_windowed(SiteWco) | enable_window_controls_overlay(SiteWco) | launch(SiteWco) | check_window_controls_overlay(SiteWco, On) | +| WMLC | install_windowed(SiteB) | manifest_update_display(SiteB, Wco) | await_manifest_update(SiteB) | launch(SiteB) | check_window_controls_overlay_toggle(SiteWco, Shown) | +| WMLC | install_windowed(SiteB) | manifest_update_display(SiteB, Wco) | await_manifest_update(SiteB) | launch(SiteB) | check_window_controls_overlay_toggle(SiteWco, Shown) | +| WMLC | install_windowed(SiteB) | manifest_update_display(SiteB, Wco) | await_manifest_update(SiteB) | launch(SiteB) | enable_window_controls_overlay(SiteB) | check_window_controls_overlay(SiteB, Off) | +| WMLC | install_windowed(SiteB) | manifest_update_display(SiteB, Wco) | await_manifest_update(SiteB) | launch(SiteB) | enable_window_controls_overlay(SiteB) | check_window_controls_overlay_toggle(SiteB, Shown) | +| WMLC | install_windowed(SiteB) | manifest_update_display(SiteB, Wco) | await_manifest_update(SiteB) | launch(SiteB) | enable_window_controls_overlay(SiteB) | check_window_controls_overlay_toggle(SiteB, Shown) | +| WMLC | install_windowed(SiteWco) | manifest_update_display(SiteWco, Standalone) | await_manifest_update(SiteWco) | launch(SiteWco) | check_window_controls_overlay_toggle(SiteWco, NotShown) | +| WMLC | install_windowed(SiteWco) | manifest_update_display(SiteWco, Standalone) | await_manifest_update(SiteWco) | launch(SiteWco) | check_window_controls_overlay(SiteWco, Off) | ## File Handling
diff --git a/chrome/test/webapps/data/framework_supported_actions.csv b/chrome/test/webapps/data/framework_supported_actions.csv index 9464ef3f..db11de29 100644 --- a/chrome/test/webapps/data/framework_supported_actions.csv +++ b/chrome/test/webapps/data/framework_supported_actions.csv
@@ -18,8 +18,12 @@ check_window_created, 🌕, 🌕, 🌕, 🌕, check_window_display_minimal, 🌕, 🌕, 🌕, 🌕, check_window_display_standalone, 🌕, 🌕, 🌕, 🌕, +check_window_controls_overlay, 🌕, 🌕, 🌕, 🌕, +check_window_controls_overlay_toggle, 🌕, 🌕, 🌕, 🌕, close_custom_toolbar, 🌕, 🌕, 🌕, 🌕, close_pwa, 🌕, 🌕, 🌕, 🌕, +disable_window_controls_overlay, 🌕, 🌕, 🌕, 🌕, +enable_window_controls_overlay, 🌕, 🌕, 🌕, 🌕, install_create_shortcut_tabbed, 🌕, 🌕, 🌕, 🌕, install_create_shortcut_windowed, 🌕, 🌕, 🌕, 🌕, install_locally, 🌓, 🌓, 🌓, 🌓, @@ -33,6 +37,7 @@ launch_from_launch_icon, 🌕, 🌕, 🌕, 🌕, launch_from_menu_option, 🌕, 🌕, 🌕, 🌕, launch_from_platform_shortcut, 🌓, 🌓, 🌓, 🌑, +manifest_update_display, 🌕, 🌕, 🌕, 🌕, manifest_update_display_browser, 🌕, 🌕, 🌕, 🌕, manifest_update_display_minimal, 🌕, 🌕, 🌕, 🌕, manifest_update_scope_site_a_foo_to, 🌕, 🌕, 🌕, 🌕, @@ -61,5 +66,6 @@ check_run_on_os_login_enabled, 🌕, 🌕, 🌕, 🌑, check_run_on_os_login_disabled, 🌕, 🌕, 🌕, 🌑, open_app_settings_from_chrome_apps, 🌕, 🌕, 🌕, 🌑, -open_app_settings_from_app_menu, 🌕, 🌕, 🌕, 🌑, -check_browser_navigation_is_app_settings, 🌕, 🌕, 🌕, 🌑, \ No newline at end of file +open_app_settings_from_app_menu, 🌕, 🌕, 🌕, 🌑, +check_browser_navigation_is_app_settings, 🌕, 🌕, 🌕, 🌑, +await_manifest_update, 🌑, 🌑,, 🌑, 🌑, \ No newline at end of file
diff --git a/chrome/updater/test/integration_test_commands.h b/chrome/updater/test/integration_test_commands.h index da89160..a512682 100644 --- a/chrome/updater/test/integration_test_commands.h +++ b/chrome/updater/test/integration_test_commands.h
@@ -91,6 +91,8 @@ virtual void ExpectLastStarted() const = 0; virtual void UninstallApp(const std::string& app_id) const = 0; + virtual void RunOfflineInstall() = 0; + protected: friend class base::RefCountedThreadSafe<IntegrationTestCommands>;
diff --git a/chrome/updater/test/integration_test_commands_system.cc b/chrome/updater/test/integration_test_commands_system.cc index 2d69678..66ea329 100644 --- a/chrome/updater/test/integration_test_commands_system.cc +++ b/chrome/updater/test/integration_test_commands_system.cc
@@ -253,6 +253,10 @@ RunCommand("uninstall_app", {Param("app_id", app_id)}); } + void RunOfflineInstall() override { + updater::test::RunOfflineInstall(updater_scope_); + } + private: ~IntegrationTestCommandsSystem() override = default;
diff --git a/chrome/updater/test/integration_test_commands_user.cc b/chrome/updater/test/integration_test_commands_user.cc index acbd9b2..44ebaae 100644 --- a/chrome/updater/test/integration_test_commands_user.cc +++ b/chrome/updater/test/integration_test_commands_user.cc
@@ -230,6 +230,10 @@ updater::test::UninstallApp(updater_scope_, app_id); } + void RunOfflineInstall() override { + updater::test::RunOfflineInstall(updater_scope_); + } + private: ~IntegrationTestCommandsUser() override = default;
diff --git a/chrome/updater/test/integration_tests.cc b/chrome/updater/test/integration_tests.cc index d2d02dd..acfa3d9 100644 --- a/chrome/updater/test/integration_tests.cc +++ b/chrome/updater/test/integration_tests.cc
@@ -296,6 +296,8 @@ void ExpectLastStarted() { test_commands_->ExpectLastStarted(); } + void RunOfflineInstall() { test_commands_->RunOfflineInstall(); } + scoped_refptr<IntegrationTestCommands> test_commands_; private: @@ -758,6 +760,13 @@ Uninstall(); } +TEST_F(IntegrationTest, OfflineInstall) { + Install(); + ExpectInstalled(); + RunOfflineInstall(); + Uninstall(); +} + #endif // BUILDFLAG(IS_WIN) || !defined(COMPONENT_BUILD) } // namespace test
diff --git a/chrome/updater/test/integration_tests_impl.h b/chrome/updater/test/integration_tests_impl.h index a550605..d9d0bdaa 100644 --- a/chrome/updater/test/integration_tests_impl.h +++ b/chrome/updater/test/integration_tests_impl.h
@@ -212,6 +212,8 @@ void UninstallApp(UpdaterScope scope, const std::string& app_id); +void RunOfflineInstall(UpdaterScope scope); + } // namespace test } // namespace updater
diff --git a/chrome/updater/test/integration_tests_linux.cc b/chrome/updater/test/integration_tests_linux.cc index c1add23..8f23697 100644 --- a/chrome/updater/test/integration_tests_linux.cc +++ b/chrome/updater/test/integration_tests_linux.cc
@@ -102,5 +102,9 @@ NOTREACHED(); } +void RunOfflineInstall(UpdaterScope scope) { + NOTREACHED(); +} + } // namespace test } // namespace updater
diff --git a/chrome/updater/test/integration_tests_mac.mm b/chrome/updater/test/integration_tests_mac.mm index 74190a6244..c6b3a6f7 100644 --- a/chrome/updater/test/integration_tests_mac.mm +++ b/chrome/updater/test/integration_tests_mac.mm
@@ -418,5 +418,9 @@ base::FilePath(FILE_PATH_LITERAL("NONE"))); } +void RunOfflineInstall(UpdaterScope scope) { + // TODO(crbug.com/1286574). +} + } // namespace test } // namespace updater
diff --git a/chrome/updater/test/integration_tests_win.cc b/chrome/updater/test/integration_tests_win.cc index 16b6393..4c12f1b 100644 --- a/chrome/updater/test/integration_tests_win.cc +++ b/chrome/updater/test/integration_tests_win.cc
@@ -12,9 +12,11 @@ #include <vector> #include "base/command_line.h" +#include "base/containers/contains.h" #include "base/containers/flat_map.h" #include "base/files/file_path.h" #include "base/files/file_util.h" +#include "base/files/scoped_temp_dir.h" #include "base/json/json_writer.h" #include "base/logging.h" #include "base/path_service.h" @@ -28,6 +30,7 @@ #include "base/task/task_traits.h" #include "base/task/thread_pool.h" #include "base/test/bind.h" +#include "base/test/test_timeouts.h" #include "base/time/time.h" #include "base/timer/elapsed_timer.h" #include "base/values.h" @@ -50,6 +53,10 @@ #include "chrome/updater/util.h" #include "chrome/updater/win/setup/setup_util.h" #include "chrome/updater/win/task_scheduler.h" +#include "chrome/updater/win/test/test_executables.h" +#include "chrome/updater/win/test/test_strings.h" +#include "chrome/updater/win/ui/l10n_util.h" +#include "chrome/updater/win/ui/resources/updater_installer_strings.h" #include "chrome/updater/win/win_constants.h" #include "chrome/updater/win/win_util.h" #include "components/crx_file/crx_verifier.h" @@ -330,6 +337,63 @@ VLOG(2) << "Sleep complete."; } +class WindowEnumerator { + public: + WindowEnumerator(HWND parent, + base::RepeatingCallback<bool(HWND hwnd)> filter, + base::RepeatingCallback<void(HWND hwnd)> action) + : parent_(parent), filter_(filter), action_(action) {} + + WindowEnumerator(const WindowEnumerator&) = delete; + WindowEnumerator& operator=(const WindowEnumerator&) = delete; + + void Run() const { + ::EnumChildWindows(parent_, &OnWindowProc, reinterpret_cast<LPARAM>(this)); + } + + static std::wstring GetWindowClass(HWND hwnd) { + constexpr int kMaxWindowClassNameLength = 256; + wchar_t buffer[kMaxWindowClassNameLength + 1] = {0}; + int name_len = ::GetClassName(hwnd, buffer, std::size(buffer)); + if (name_len <= 0 || name_len > kMaxWindowClassNameLength) + return std::wstring(); + + return std::wstring(&buffer[0], name_len); + } + + static bool IsSystemDialog(HWND hwnd) { + constexpr wchar_t kSystemDialogClass[] = L"#32770"; + return GetWindowClass(hwnd) == kSystemDialogClass; + } + + static std::wstring GetWindowText(HWND hwnd) { + const int num_chars = ::GetWindowTextLength(hwnd); + if (!num_chars) + return std::wstring(); + std::vector<wchar_t> text(num_chars + 1); + if (!::GetWindowText(hwnd, &text.front(), text.size())) + return std::wstring(); + return std::wstring(text.begin(), text.end()); + } + + private: + bool OnWindow(HWND hwnd) const { + if (filter_.Run(hwnd)) + action_.Run(hwnd); + + // Returns true to keep enumerating. + return true; + } + + static BOOL CALLBACK OnWindowProc(HWND hwnd, LPARAM lparam) { + return reinterpret_cast<WindowEnumerator*>(lparam)->OnWindow(hwnd); + } + + const HWND parent_; + base::RepeatingCallback<bool(HWND hwnd)> filter_; + base::RepeatingCallback<void(HWND hwnd)> action_; +}; + } // namespace base::FilePath GetSetupExecutablePath() { @@ -970,5 +1034,128 @@ ASSERT_EQ(key.DeleteKey(base::SysUTF8ToWide(app_id).c_str()), ERROR_SUCCESS); } +void RunOfflineInstall(UpdaterScope scope) { + const char kManifestFormat[] = + "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" + "<response protocol=\"3.0\">" + " <app appid=\"{CDABE316-39CD-43BA-8440-6D1E0547AEE6}\" status=\"ok\">" + " <updatecheck status=\"ok\">" + " <manifest version=\"1.2.3.4\">" + " <packages>" + " <package hash_sha256=\"sha256hash_foobar\"" + " name=\"%s\"" + " required=\"true\"" + " size=\"%lld\"/>" + " </packages>" + " <actions>" + " <action event=\"install\" needsadmin=\"false\"" + " run=\"%s\"" + " arguments=\"--%s=%s\"/>" + " </actions>" + " </manifest>" + " </updatecheck>" + " <data index=\"verboselogging\" name=\"install\" status=\"ok\">" + " {\"distribution\": { \"verbose_logging\": true}}" + " </data>" + " </app>" + "</response>"; + + // Create a unique name for a shared event to be waited for in this process + // and signaled by the app installer to confirm that app installer is run. + const std::wstring event_name = + base::StrCat({kTestProcessExecutableName, L"-", + base::NumberToWString(::GetCurrentProcessId())}); + NamedObjectAttributes attr; + GetNamedObjectAttributes(event_name.c_str(), scope, &attr); + + base::WaitableEvent event(base::win::ScopedHandle( + ::CreateEvent(&attr.sa, FALSE, FALSE, attr.name.c_str()))); + ASSERT_NE(event.handle(), nullptr); + + base::FilePath exe_dir; + ASSERT_TRUE(base::PathService::Get(base::DIR_EXE, &exe_dir)); + base::FilePath exe_path = exe_dir.Append(updater::kTestProcessExecutableName); + ASSERT_TRUE(base::PathExists(exe_path)); + + base::ScopedTempDir temp_dir; + EXPECT_TRUE(temp_dir.CreateUniqueTempDir()); + const base::FilePath& offline_dir = temp_dir.GetPath(); + + // Create manifest file. + const std::string exe_name = base::SysWideToUTF8(kTestProcessExecutableName); + base::FilePath manifest_path = + offline_dir.Append(FILE_PATH_LITERAL("OfflineManifest.gup")); + int64_t exe_size = 0; + EXPECT_TRUE(base::GetFileSize(exe_path, &exe_size)); + const std::string manifest = + base::StringPrintf(kManifestFormat, + exe_name.c_str(), // `name` in <package>. + exe_size, // `size` in <package>. + exe_name.c_str(), // `run` in <action>. + kTestEventToSignal, // `arguments` in <action>. + base::SysWideToUTF8(attr.name).c_str()); + EXPECT_TRUE(base::WriteFile(manifest_path, manifest)); + + // Copy app installer. + ASSERT_TRUE( + base::CopyFile(exe_path, offline_dir.Append(exe_path.BaseName()))); + + // Trigger offline install. + const absl::optional<base::FilePath> updater_exe = + GetInstalledExecutablePath(scope); + ASSERT_TRUE(updater_exe.has_value()); + base::CommandLine offline_install_cmd(updater_exe.value()); + + offline_install_cmd.AppendSwitch(kEnableLoggingSwitch); + offline_install_cmd.AppendSwitchASCII(kLoggingModuleSwitch, + kLoggingModuleSwitchValue); + if (scope == UpdaterScope::kSystem) + offline_install_cmd.AppendSwitch(kSystemSwitch); + + offline_install_cmd.AppendSwitchASCII( + updater::kHandoffSwitch, + "appguid={CDABE316-39CD-43BA-8440-6D1E0547AEE6}&lang=en&installdataindex=" + "verboselogging"); + offline_install_cmd.AppendSwitchASCII( + updater::kSessionIdSwitch, "{E85204C6-6F2F-40BF-9E6C-4952208BB977}"); + offline_install_cmd.AppendSwitchNative(updater::kOfflineDirSwitch, + offline_dir.value()); + + base::Process process = base::LaunchProcess(offline_install_cmd, {}); + EXPECT_TRUE(process.IsValid()); + + // Dismiss the installation completion dialog, then wait for the process exit. + WaitFor(base::BindRepeating([]() { + // Enumerate the top-level dialogs to find the setup dialog. + WindowEnumerator( + ::GetDesktopWindow(), base::BindRepeating([](HWND hwnd) { + return WindowEnumerator::IsSystemDialog(hwnd) && + base::Contains( + WindowEnumerator::GetWindowText(hwnd), + GetLocalizedStringF( + IDS_INSTALLER_DISPLAY_NAME_BASE, + GetLocalizedString(IDS_FRIENDLY_COMPANY_NAME_BASE))); + }), + base::BindRepeating([](HWND hwnd) { + // Enumerates the dialog items to search for installation complete + // message. Once found, close the dialog. + WindowEnumerator( + hwnd, base::BindRepeating([](HWND hwnd) { + return base::Contains( + WindowEnumerator::GetWindowText(hwnd), + GetLocalizedString(IDS_BUNDLE_INSTALLED_SUCCESSFULLY_BASE)); + }), + base::BindRepeating([](HWND hwnd) { + ::PostMessage(::GetParent(hwnd), WM_CLOSE, 0, 0); + })) + .Run(); + })) + .Run(); + return !IsUpdaterRunning(); + })); + + EXPECT_TRUE(event.TimedWait(TestTimeouts::action_timeout())); +} + } // namespace test } // namespace updater
diff --git a/components/BUILD.gn b/components/BUILD.gn index 735e829..ad7c2897 100644 --- a/components/BUILD.gn +++ b/components/BUILD.gn
@@ -155,6 +155,7 @@ "//components/language/core/language_model:unit_tests", "//components/lens:unit_tests", "//components/leveldb_proto:unit_tests", + "//components/local_state:unit_tests", "//components/lookalikes/core:unit_tests", "//components/memory_pressure:unit_tests", "//components/metrics:unit_tests",
diff --git a/components/cdm/renderer/widevine_key_system_properties.cc b/components/cdm/renderer/widevine_key_system_properties.cc index ed91435..a1a5164b 100644 --- a/components/cdm/renderer/widevine_key_system_properties.cc +++ b/components/cdm/renderer/widevine_key_system_properties.cc
@@ -205,13 +205,18 @@ if (robustness >= Robustness::SW_SECURE_DECODE || hw_secure_codecs_required) return EmeConfigRule::HW_SECURE_CODECS_REQUIRED; #elif BUILDFLAG(IS_WIN) - // On Windows, hardware security uses MediaFoundation-based CDM which requires - // identifier and persistent state. - if (robustness >= Robustness::HW_SECURE_CRYPTO || hw_secure_codecs_required) { + if (robustness >= Robustness::HW_SECURE_CRYPTO) { + // On Windows, hardware security uses MediaFoundation-based CDM which + // requires identifier and persistent state. return IsHardwareSecurityEnabledForKeySystem(key_system) ? EmeConfigRule:: IDENTIFIER_PERSISTENCE_AND_HW_SECURE_CODECS_REQUIRED : EmeConfigRule::NOT_SUPPORTED; + } else if (robustness < Robustness::HW_SECURE_CRYPTO) { + // On Windows, when software security is queried, explicitly not allow + // hardware secure codecs to prevent robustness level upgrade, for stability + // and compatibility reasons. See https://crbug.com/1327043. + return EmeConfigRule::HW_SECURE_CODECS_NOT_ALLOWED; } #else // On other platforms, require hardware secure codecs for HW_SECURE_CRYPTO and
diff --git a/components/dom_distiller/content/renderer/distillability_agent.cc b/components/dom_distiller/content/renderer/distillability_agent.cc index 11546b3..b92ba934 100644 --- a/components/dom_distiller/content/renderer/distillability_agent.cc +++ b/components/dom_distiller/content/renderer/distillability_agent.cc
@@ -241,9 +241,9 @@ } DCHECK(render_frame()); - if (!render_frame()->IsMainFrame()) - return; DCHECK(render_frame()->GetWebFrame()); + if (!render_frame()->GetWebFrame()->IsOutermostMainFrame()) + return; blink::WebDocument doc = render_frame()->GetWebFrame()->GetDocument(); if (doc.IsNull() || doc.Body().IsNull()) return;
diff --git a/components/history_clusters/OWNERS b/components/history_clusters/OWNERS index f9b2c42..1d1ebb16 100644 --- a/components/history_clusters/OWNERS +++ b/components/history_clusters/OWNERS
@@ -2,7 +2,6 @@ mahmadi@chromium.org manukh@chromium.org mcrouse@chromium.org -robertogden@chromium.org sophiechang@chromium.org tbansal@chromium.org tommycli@chromium.org
diff --git a/components/local_state/BUILD.gn b/components/local_state/BUILD.gn new file mode 100644 index 0000000..bc581daf --- /dev/null +++ b/components/local_state/BUILD.gn
@@ -0,0 +1,43 @@ +# Copyright 2019 The Chromium Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +import("//tools/grit/preprocess_if_expr.gni") +import("//tools/typescript/ts_library.gni") + +preprocess_folder = "preprocessed" + +preprocess_if_expr("preprocess_ts") { + in_folder = "./" + out_folder = "$target_gen_dir/$preprocess_folder" + in_files = [ "local_state.ts" ] +} + +ts_library("build") { + root_dir = "$target_gen_dir/$preprocess_folder" + in_files = [ "local_state.ts" ] + deps = [ "//ui/webui/resources:library" ] + extra_deps = [ ":preprocess_ts" ] +} + +source_set("local_state") { + sources = [ + "local_state_utils.cc", + "local_state_utils.h", + ] + deps = [ + "//base", + "//components/prefs", + ] +} + +source_set("unit_tests") { + testonly = true + sources = [ "local_state_utils_unittest.cc" ] + + deps = [ + ":local_state", + "//base", + "//testing/gtest", + ] +}
diff --git a/components/local_state/DEPS b/components/local_state/DEPS new file mode 100644 index 0000000..eac0761 --- /dev/null +++ b/components/local_state/DEPS
@@ -0,0 +1,3 @@ +include_rules = [ + "+components/prefs", +]
diff --git a/components/local_state/OWNERS b/components/local_state/OWNERS new file mode 100644 index 0000000..b962dd5b --- /dev/null +++ b/components/local_state/OWNERS
@@ -0,0 +1 @@ +file://ui/webui/PLATFORM_OWNERS \ No newline at end of file
diff --git a/components/local_state/README.md b/components/local_state/README.md new file mode 100644 index 0000000..4b379a2 --- /dev/null +++ b/components/local_state/README.md
@@ -0,0 +1,2 @@ +This directory contains shared files for the implementation of the +chrome://local-state WebUI page. \ No newline at end of file
diff --git a/chrome/browser/resources/local_state/local_state.html b/components/local_state/local_state.html similarity index 100% rename from chrome/browser/resources/local_state/local_state.html rename to components/local_state/local_state.html
diff --git a/chrome/browser/resources/local_state/local_state.ts b/components/local_state/local_state.ts similarity index 73% rename from chrome/browser/resources/local_state/local_state.ts rename to components/local_state/local_state.ts index 761b898..ed90b8d 100644 --- a/chrome/browser/resources/local_state/local_state.ts +++ b/components/local_state/local_state.ts
@@ -6,6 +6,15 @@ * Javascript for local_state.html, served from chrome://local-state/ * This is used to debug the contents of the Local State file. */ + +// <if expr="is_ios"> +// This is needed for the iOS implementation of chrome.send (to communicate +// between JS and native). +// TODO(crbug.com/487000): Remove this once injected by web. +import 'chrome://resources/js/ios/web_ui.js'; + +// </if> + import {sendWithPromise} from 'chrome://resources/js/cr.m.js'; import {$} from 'chrome://resources/js/util.m.js';
diff --git a/components/local_state/local_state_utils.cc b/components/local_state/local_state_utils.cc new file mode 100644 index 0000000..366fa75b --- /dev/null +++ b/components/local_state/local_state_utils.cc
@@ -0,0 +1,68 @@ +// Copyright 2022 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "components/local_state/local_state_utils.h" + +#include <string> +#include <vector> + +#include "base/json/json_string_value_serializer.h" +#include "base/strings/string_util.h" +#include "base/values.h" +#include "build/build_config.h" +#include "build/chromeos_buildflags.h" +#include "components/prefs/pref_service.h" + +#if BUILDFLAG(IS_CHROMEOS_ASH) +#define ENABLE_FILTERING true +#else +#define ENABLE_FILTERING false +#endif // BUILDFLAG(IS_CHROMEOS_ASH) + +namespace { + +// Returns true if |pref_name| starts with one of the |valid_prefixes|. +bool HasValidPrefix(const std::string& pref_name, + const std::vector<std::string> valid_prefixes) { + for (const std::string& prefix : valid_prefixes) { + if (base::StartsWith(pref_name, prefix, base::CompareCase::SENSITIVE)) + return true; + } + return false; +} + +} // namespace + +namespace internal { + +void FilterPrefs(const std::vector<std::string>& valid_prefixes, + base::Value& prefs) { + std::vector<std::string> prefs_to_remove; + for (auto it : prefs.DictItems()) { + if (!HasValidPrefix(it.first, valid_prefixes)) + prefs_to_remove.push_back(it.first); + } + for (const std::string& pref_to_remove : prefs_to_remove) { + bool successfully_removed = prefs.RemovePath(pref_to_remove); + DCHECK(successfully_removed); + } +} + +} // namespace internal + +bool GetPrefsAsJson(PrefService* pref_service, std::string* json_string) { + base::Value local_state_values = + pref_service->GetPreferenceValues(PrefService::EXCLUDE_DEFAULTS); + if (ENABLE_FILTERING) { + // Filter out the prefs to only include variations and UMA related fields, + // which don't contain PII. + std::vector<std::string> allowlisted_prefixes = {"variations", + "user_experience_metrics"}; + internal::FilterPrefs(allowlisted_prefixes, local_state_values); + } + + JSONStringValueSerializer serializer(json_string); + serializer.set_pretty_print(true); + return serializer.Serialize(local_state_values); +} \ No newline at end of file
diff --git a/components/local_state/local_state_utils.h b/components/local_state/local_state_utils.h new file mode 100644 index 0000000..7ee0b48 --- /dev/null +++ b/components/local_state/local_state_utils.h
@@ -0,0 +1,32 @@ +// Copyright 2022 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef COMPONENTS_LOCAL_STATE_LOCAL_STATE_UTILS_H_ +#define COMPONENTS_LOCAL_STATE_LOCAL_STATE_UTILS_H_ + +#include <string> +#include <vector> + +#include "base/values.h" +#include "components/prefs/pref_service.h" + +// Namespace for exposing the method for unit tests. +namespace internal { + +// Removes elements from |prefs| where the key does not match any of the +// prefixes in |valid_prefixes|. +void FilterPrefs(const std::vector<std::string>& valid_prefixes, + base::Value& prefs); + +} // namespace internal + +// Gets a pretty-printed string representation of the input |pref_service|. +// If the return value is true, the result will have been written to +// |json_string|. On ChromeOS, the local state file contains some information +// about other user accounts which we don't want to expose to other users. In +// that case, this will filter out the prefs to only include variations and UMA +// related fields, which don't contain PII. +bool GetPrefsAsJson(PrefService* pref_service, std::string* json_string); + +#endif // COMPONENTS_LOCAL_STATE_LOCAL_STATE_UTILS_H_ \ No newline at end of file
diff --git a/chrome/browser/ui/webui/local_state/local_state_ui_unittest.cc b/components/local_state/local_state_utils_unittest.cc similarity index 91% rename from chrome/browser/ui/webui/local_state/local_state_ui_unittest.cc rename to components/local_state/local_state_utils_unittest.cc index 008a3bf..97add61a 100644 --- a/chrome/browser/ui/webui/local_state/local_state_ui_unittest.cc +++ b/components/local_state/local_state_utils_unittest.cc
@@ -2,12 +2,12 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "chrome/browser/ui/webui/local_state/local_state_ui.h" +#include "components/local_state/local_state_utils.h" #include "base/values.h" #include "testing/gtest/include/gtest/gtest.h" -TEST(LocalStateUiTest, FilterPrefs) { +TEST(LocalStateUtilsTest, FilterPrefs) { std::vector<std::string> prefixes = {"foo", "bar", "baz"}; std::vector<std::string> invalid_pref_paths = {"fo", "ar", "afoo"};
diff --git a/components/metrics/net/cellular_logic_helper.cc b/components/metrics/net/cellular_logic_helper.cc index 2083b6f..dc37642b 100644 --- a/components/metrics/net/cellular_logic_helper.cc +++ b/components/metrics/net/cellular_logic_helper.cc
@@ -4,7 +4,6 @@ #include "components/metrics/net/cellular_logic_helper.h" -#include "base/feature_list.h" #include "base/time/time.h" #include "build/build_config.h" #include "build/chromeos_buildflags.h" @@ -22,14 +21,6 @@ const int kStandardUploadIntervalSeconds = 30 * 60; // Thirty minutes. #endif -#if BUILDFLAG(IS_CHROMEOS_ASH) -// A feature to control whether we upload UMA logs more frequently. -const base::Feature kMoreFrequentUmaUploads{"MoreFrequentUmaUploads", - base::FEATURE_DISABLED_BY_DEFAULT}; -// The interval between these more-frequent uploads. -constexpr base::TimeDelta kMoreFrequentUploadInterval = base::Minutes(5); -#endif // IS_CHROMEOS_ASH - #if BUILDFLAG(IS_ANDROID) const bool kDefaultCellularLogicEnabled = true; #else @@ -42,10 +33,6 @@ #if BUILDFLAG(IS_ANDROID) || BUILDFLAG(IS_IOS) if (use_cellular_upload_interval) return base::Seconds(kStandardUploadIntervalCellularSeconds); -#elif BUILDFLAG(IS_CHROMEOS_ASH) - if (base::FeatureList::IsEnabled(kMoreFrequentUmaUploads)) { - return kMoreFrequentUploadInterval; - } #endif return base::Seconds(kStandardUploadIntervalSeconds); }
diff --git a/components/pdf/renderer/pdf_view_web_plugin_client.cc b/components/pdf/renderer/pdf_view_web_plugin_client.cc index ce88c39..d5c0436 100644 --- a/components/pdf/renderer/pdf_view_web_plugin_client.cc +++ b/components/pdf/renderer/pdf_view_web_plugin_client.cc
@@ -26,6 +26,7 @@ #include "third_party/blink/public/web/web_element.h" #include "third_party/blink/public/web/web_frame_widget.h" #include "third_party/blink/public/web/web_local_frame.h" +#include "third_party/blink/public/web/web_local_frame_client.h" #include "third_party/blink/public/web/web_plugin_container.h" #include "third_party/blink/public/web/web_serialized_script_value.h" #include "third_party/blink/public/web/web_view.h" @@ -224,8 +225,20 @@ return plugin_container_->GetDocument().GetFrame(); } -blink::WebLocalFrameClient* PdfViewWebPluginClient::GetWebLocalFrameClient() { - return GetFrame()->Client(); +void PdfViewWebPluginClient::DidStartLoading() { + blink::WebLocalFrameClient* frame_client = GetFrame()->Client(); + if (!frame_client) + return; + + frame_client->DidStartLoading(); +} + +void PdfViewWebPluginClient::DidStopLoading() { + blink::WebLocalFrameClient* frame_client = GetFrame()->Client(); + if (!frame_client) + return; + + frame_client->DidStopLoading(); } void PdfViewWebPluginClient::Print() {
diff --git a/components/pdf/renderer/pdf_view_web_plugin_client.h b/components/pdf/renderer/pdf_view_web_plugin_client.h index fd731d95..1a1bf3c6 100644 --- a/components/pdf/renderer/pdf_view_web_plugin_client.h +++ b/components/pdf/renderer/pdf_view_web_plugin_client.h
@@ -70,7 +70,8 @@ void UpdateSelectionBounds() override; std::string GetEmbedderOriginString() override; bool HasFrame() const override; - blink::WebLocalFrameClient* GetWebLocalFrameClient() override; + void DidStartLoading() override; + void DidStopLoading() override; void Print() override; void RecordComputedAction(const std::string& action) override; std::unique_ptr<chrome_pdf::PdfAccessibilityDataHandler>
diff --git a/components/policy/core/common/cloud/cloud_policy_refresh_scheduler_unittest.cc b/components/policy/core/common/cloud/cloud_policy_refresh_scheduler_unittest.cc index 5c7b290a..bd9c94a 100644 --- a/components/policy/core/common/cloud/cloud_policy_refresh_scheduler_unittest.cc +++ b/components/policy/core/common/cloud/cloud_policy_refresh_scheduler_unittest.cc
@@ -60,7 +60,8 @@ class CloudPolicyRefreshSchedulerTest : public testing::Test { protected: CloudPolicyRefreshSchedulerTest() - : service_(std::make_unique<MockCloudPolicyService>(&client_, &store_)), + : task_environment_(base::test::TaskEnvironment::TimeSource::MOCK_TIME), + service_(std::make_unique<MockCloudPolicyService>(&client_, &store_)), task_runner_(new base::TestSimpleTaskRunner()), mock_clock_(std::make_unique<base::SimpleTestClock>()) {} @@ -542,13 +543,7 @@ EXPECT_FALSE(task_runner_->HasPendingTask()); } -// TODO(crbug.com/1322731): Flaky on Windows. -#if BUILDFLAG(IS_WIN) -#define MAYBE_OnStoreLoaded DISABLED_OnStoreLoaded -#else -#define MAYBE_OnStoreLoaded OnStoreLoaded -#endif -TEST_F(CloudPolicyRefreshSchedulerSteadyStateTest, MAYBE_OnStoreLoaded) { +TEST_F(CloudPolicyRefreshSchedulerSteadyStateTest, OnStoreLoaded) { store_.NotifyStoreLoaded(); CheckTiming(refresh_scheduler_.get(), kPolicyRefreshRate); }
diff --git a/components/resources/BUILD.gn b/components/resources/BUILD.gn index db317cd..0dc4635 100644 --- a/components/resources/BUILD.gn +++ b/components/resources/BUILD.gn
@@ -66,6 +66,8 @@ "grit/dev_ui_components_resources.h", "dev_ui_components_resources.pak", ] + + deps = [ "//components/local_state:build" ] output_dir = "$root_gen_dir/components" }
diff --git a/components/resources/dev_ui_components_resources.grd b/components/resources/dev_ui_components_resources.grd index 3186530..952fa5b 100644 --- a/components/resources/dev_ui_components_resources.grd +++ b/components/resources/dev_ui_components_resources.grd
@@ -19,6 +19,7 @@ <part file="autofill_and_password_manager_internals_resources.grdp" /> <part file="crash_resources.grdp" /> <part file="gcm_driver_resources.grdp" /> + <part file="local_state.grdp" /> <part file="net_log_resources.grdp" /> <part file="ntp_tiles_dev_ui_resources.grdp" /> <part file="policy_resources.grdp" />
diff --git a/components/resources/local_state.grdp b/components/resources/local_state.grdp new file mode 100644 index 0000000..364a4e84 --- /dev/null +++ b/components/resources/local_state.grdp
@@ -0,0 +1,5 @@ +<?xml version="1.0" encoding="utf-8"?> +<grit-part> + <include name="IDR_LOCAL_STATE_HTML" file="../local_state/local_state.html" type="BINDATA" /> + <include name="IDR_LOCAL_STATE_JS" file="${root_gen_dir}/components/local_state/local_state.js" use_base_dir="false" type="BINDATA" /> +</grit-part> \ No newline at end of file
diff --git a/components/security_interstitials/content/stateful_ssl_host_state_delegate.cc b/components/security_interstitials/content/stateful_ssl_host_state_delegate.cc index 524e3c6..45162b5d 100644 --- a/components/security_interstitials/content/stateful_ssl_host_state_delegate.cc +++ b/components/security_interstitials/content/stateful_ssl_host_state_delegate.cc
@@ -279,7 +279,8 @@ host_content_settings_map_->ClearSettingsForOneTypeWithPredicate( ContentSettingsType::SSL_CERT_DECISIONS, base::Time(), base::Time::Max(), pattern_filter); - https_only_mode_allowlist_.Clear(pattern_filter); + https_only_mode_allowlist_.Clear(base::Time(), base::Time::Max(), + pattern_filter); } content::SSLHostStateDelegate::CertJudgment
diff --git a/components/security_interstitials/core/https_only_mode_allowlist.cc b/components/security_interstitials/core/https_only_mode_allowlist.cc index 90838ef..337cd81 100644 --- a/components/security_interstitials/core/https_only_mode_allowlist.cc +++ b/components/security_interstitials/core/https_only_mode_allowlist.cc
@@ -98,14 +98,18 @@ } void HttpsOnlyModeAllowlist::Clear( + base::Time delete_begin, + base::Time delete_end, const HostContentSettingsMap::PatternSourcePredicate& pattern_filter) { host_content_settings_map_->ClearSettingsForOneTypeWithPredicate( - ContentSettingsType::HTTP_ALLOWED, base::Time(), base::Time::Max(), + ContentSettingsType::HTTP_ALLOWED, delete_begin, delete_end, pattern_filter); } -void HttpsOnlyModeAllowlist::ClearAllowlist() { - Clear(HostContentSettingsMap::PatternSourcePredicate()); +void HttpsOnlyModeAllowlist::ClearAllowlist(base::Time delete_begin, + base::Time delete_end) { + Clear(delete_begin, delete_end, + HostContentSettingsMap::PatternSourcePredicate()); allowed_http_hosts_for_non_default_storage_partitions_.clear(); }
diff --git a/components/security_interstitials/core/https_only_mode_allowlist.h b/components/security_interstitials/core/https_only_mode_allowlist.h index ae5449e0..ea5f081 100644 --- a/components/security_interstitials/core/https_only_mode_allowlist.h +++ b/components/security_interstitials/core/https_only_mode_allowlist.h
@@ -48,10 +48,14 @@ // Clears allowlist for the given pattern filter. If the pattern filter is // empty, clears allowlist for all hosts. void Clear( + base::Time delete_begin, + base::Time delete_end, const HostContentSettingsMap::PatternSourcePredicate& pattern_filter); - // Clears the persistent and in-memory allowlist entries. - void ClearAllowlist(); + // Clears the persistent and in-memory allowlist entries. All of in-memory + // entries are removed, but only persistent entries between delete_begin and + // delete_end are removed. + void ClearAllowlist(base::Time delete_begin, base::Time delete_end); // Sets the test clock. void SetClockForTesting(base::Clock* clock);
diff --git a/components/webapps/browser/features.cc b/components/webapps/browser/features.cc index 51a8ed3..2a0e31e 100644 --- a/components/webapps/browser/features.cc +++ b/components/webapps/browser/features.cc
@@ -22,11 +22,13 @@ "InstallableAmbientBadgeMessage", base::FEATURE_DISABLED_BY_DEFAULT}; #endif // BUILDFLAG(IS_ANDROID) -// Skip the service worker all install criteria check. +// Skip the service worker in all install criteria check. This affect both +// "intallable" and "promotable" status of a web app. const base::Feature kSkipServiceWorkerCheckAll{ "SkipServiceWorkerCheckAll", base::FEATURE_DISABLED_BY_DEFAULT}; -// Skip the service worker install criteria check for installing WebAPKs. +// Skip the service worker install criteria check for installing. This affect +// only the "installable" status but not "promotable". const base::Feature kSkipServiceWorkerCheckInstallOnly{ "SkipServiceWorkerCheckInstallOnly", base::FEATURE_DISABLED_BY_DEFAULT};
diff --git a/components/webcrypto/algorithms/test_helpers.cc b/components/webcrypto/algorithms/test_helpers.cc index f72b404..4de80cd 100644 --- a/components/webcrypto/algorithms/test_helpers.cc +++ b/components/webcrypto/algorithms/test_helpers.cc
@@ -439,7 +439,7 @@ std::string k_value; if (!Base64DecodeUrlSafe(value_string, &k_value)) return ::testing::AssertionFailure() << "Base64DecodeUrlSafe(k) failed"; - if (!base::LowerCaseEqualsASCII( + if (!base::EqualsCaseInsensitiveASCII( base::HexEncode(k_value.data(), k_value.size()), k_expected_hex)) { return ::testing::AssertionFailure() << "Expected 'k' to be " << k_expected_hex @@ -470,7 +470,7 @@ return ::testing::AssertionFailure() << "'n' does not match the expected " "value"; } - // TODO(padolph): LowerCaseEqualsASCII() does not work for above! + // TODO(padolph): EqualsCaseInsensitiveASCII() does not work for above! // ---- e if (!dict.value().GetString("e", &value_string)) @@ -478,7 +478,7 @@ std::string e_value; if (!Base64DecodeUrlSafe(value_string, &e_value)) return ::testing::AssertionFailure() << "Base64DecodeUrlSafe(e) failed"; - if (!base::LowerCaseEqualsASCII( + if (!base::EqualsCaseInsensitiveASCII( base::HexEncode(e_value.data(), e_value.size()), e_expected_hex)) { return ::testing::AssertionFailure() << "Expected 'e' to be " << e_expected_hex
diff --git a/content/browser/gpu/gpu_process_host.cc b/content/browser/gpu/gpu_process_host.cc index c2beeaf..8ca8002 100644 --- a/content/browser/gpu/gpu_process_host.cc +++ b/content/browser/gpu/gpu_process_host.cc
@@ -275,9 +275,6 @@ switches::kVModule, switches::kUseAdapterLuid, switches::kWebViewDrawFunctorUsesVulkan, -#if BUILDFLAG(ENABLE_PLATFORM_HEVC) - switches::kEnableClearHevcForTesting, -#endif #if BUILDFLAG(IS_MAC) sandbox::policy::switches::kEnableSandboxLogging, sandbox::policy::switches::kDisableMetalShaderCache, @@ -310,7 +307,6 @@ switches::kHardwareVideoDecodeFrameRate, #endif #if BUILDFLAG(IS_CHROMEOS_LACROS) - switches::kLacrosEnablePlatformEncryptedHevc, switches::kLacrosEnablePlatformHevc, switches::kLacrosUseChromeosProtectedMedia, switches::kLacrosUseChromeosProtectedAv1,
diff --git a/content/browser/interest_group/interest_group_permissions_checker.cc b/content/browser/interest_group/interest_group_permissions_checker.cc index 8749caf..0c1c4230 100644 --- a/content/browser/interest_group/interest_group_permissions_checker.cc +++ b/content/browser/interest_group/interest_group_permissions_checker.cc
@@ -161,10 +161,10 @@ // `simple_url_loader` is no longer needed after this point. active_request->second->simple_url_loader.reset(); - active_request->second->data_decoder.ParseJson( + data_decoder::DataDecoder::ParseJsonIsolated( *response_body, base::BindOnce(&InterestGroupPermissionsChecker::OnJsonParsed, - base::Unretained(this), active_request)); + weak_factory_.GetWeakPtr(), active_request)); } void InterestGroupPermissionsChecker::OnJsonParsed(
diff --git a/content/browser/interest_group/interest_group_permissions_checker.h b/content/browser/interest_group/interest_group_permissions_checker.h index 2f6fec7..23181a91 100644 --- a/content/browser/interest_group/interest_group_permissions_checker.h +++ b/content/browser/interest_group/interest_group_permissions_checker.h
@@ -13,6 +13,7 @@ #include <tuple> #include "base/callback_forward.h" +#include "base/memory/weak_ptr.h" #include "base/time/time.h" #include "net/base/network_isolation_key.h" #include "services/data_decoder/public/cpp/data_decoder.h" @@ -133,9 +134,6 @@ // Used to fetch the .well-known URL. std::unique_ptr<network::SimpleURLLoader> simple_url_loader; - - // Used to decode the .well-known URL's response body. - data_decoder::DataDecoder data_decoder; }; // A map of interest group origins to their ActiveRequests. @@ -161,6 +159,8 @@ static bool AllowsOperation(Permissions permissions, Operation operation); ActiveRequestMap active_requests_; + + base::WeakPtrFactory<InterestGroupPermissionsChecker> weak_factory_{this}; }; } // namespace content
diff --git a/content/browser/renderer_host/render_process_host_impl.cc b/content/browser/renderer_host/render_process_host_impl.cc index b661376d..307f016 100644 --- a/content/browser/renderer_host/render_process_host_impl.cc +++ b/content/browser/renderer_host/render_process_host_impl.cc
@@ -3368,14 +3368,10 @@ switches::kIpcDumpDirectory, switches::kIpcFuzzerTestcase, #endif -#if BUILDFLAG(ENABLE_PLATFORM_HEVC) - switches::kEnableClearHevcForTesting, -#endif #if BUILDFLAG(IS_CHROMEOS) switches::kSchedulerBoostUrgent, #endif #if BUILDFLAG(IS_CHROMEOS_LACROS) - switches::kLacrosEnablePlatformEncryptedHevc, switches::kLacrosEnablePlatformHevc, switches::kLacrosUseChromeosProtectedMedia, switches::kLacrosUseChromeosProtectedAv1,
diff --git a/content/browser/renderer_host/scroll_into_view_browsertest.cc b/content/browser/renderer_host/scroll_into_view_browsertest.cc index 32cb409..e648093 100644 --- a/content/browser/renderer_host/scroll_into_view_browsertest.cc +++ b/content/browser/renderer_host/scroll_into_view_browsertest.cc
@@ -883,10 +883,30 @@ RunTest(); } -// TODO(https://crbug.com/1325556): Re-enable when flakiness is fixed. IN_PROC_BROWSER_TEST_P(ScrollIntoViewFencedFrameBrowserTest, - DISABLED_RemoteFrameInFencedFrame) { + RemoteFrameInFencedFrame) { ASSERT_TRUE(SetupTest("siteA{FencedFrame}(siteB(siteC))")); + + // TODO(bokan): This is required due to a race in how page-level focus is + // transferred. If the race is won by the page level focus notification then + // it'll clobber the <input> focus and reset it to the main frame. In this + // case, trying again will work because the fenced frame tree already has + // page focus now so focusing it doesn't change page focus. See + // https://crbug.com/1327439. + { + VisualViewport viewport = GetVisualViewport(); + double page_scale_factor_before = viewport.scale; + + EXPECT_TRUE(ExecJs(InnerMostFrameTreeNode(), R"JS( + document.querySelector('input').focus({preventScroll: true}); + )JS")); + + // The test should start with fresh scroll and scale. + ASSERT_EQ(viewport.scale, page_scale_factor_before); + ASSERT_EQ(viewport.page_left, 0); + ASSERT_EQ(viewport.page_top, 0); + } + RunTest(); }
diff --git a/content/browser/site_per_process_hit_test_browsertest.cc b/content/browser/site_per_process_hit_test_browsertest.cc index cee82b2..4878999 100644 --- a/content/browser/site_per_process_hit_test_browsertest.cc +++ b/content/browser/site_per_process_hit_test_browsertest.cc
@@ -931,7 +931,9 @@ testing::Combine(testing::ValuesIn(kMultiScale))); // Flaky on MSAN. https://crbug.com/959924 -#if defined(MEMORY_SANITIZER) +// Flaky on Linux Wayland and Lacros. https://crbug.com/1158437 +#if defined(MEMORY_SANITIZER) || BUILDFLAG(IS_LINUX) || \ + BUILDFLAG(IS_CHROMEOS_LACROS) #define MAYBE_ScrollNestedLocalNonFastScrollableDiv \ DISABLED_ScrollNestedLocalNonFastScrollableDiv #else
diff --git a/content/test/data/accessibility/html/popup-api-expected-blink.txt b/content/test/data/accessibility/html/popup-api-expected-blink.txt index 03e77de..4a84b4fa 100644 --- a/content/test/data/accessibility/html/popup-api-expected-blink.txt +++ b/content/test/data/accessibility/html/popup-api-expected-blink.txt
@@ -15,7 +15,7 @@ ++++++++++inlineTextBox name='Button pointing to hidden popup' ++++++genericContainer ignored invisible ++++++++staticText ignored name='Popup' -++++++button name='Show button pointing to hidden hint' +++++++button description='Hint' name='Show button pointing to hidden hint' descriptionFrom=popupElement ++++++++staticText name='Show button pointing to hidden hint' ++++++++++inlineTextBox name='Show button pointing to hidden hint' ++++++genericContainer ignored invisible @@ -28,7 +28,7 @@ ++++++button name='Button pointing to showing popup' ++++++++staticText name='Button pointing to showing popup' ++++++++++inlineTextBox name='Button pointing to showing popup' -++++++button name='Show button pointing to showing hint' +++++++button description='Hint (nested)' name='Show button pointing to showing hint' descriptionFrom=popupElement ++++++++staticText name='Show button pointing to showing hint' ++++++++++inlineTextBox name='Show button pointing to showing hint' ++++++genericContainer
diff --git a/content/test/gpu/gpu_tests/pixel_test_pages.py b/content/test/gpu/gpu_tests/pixel_test_pages.py index 0d7e128..7d3073c 100644 --- a/content/test/gpu/gpu_tests/pixel_test_pages.py +++ b/content/test/gpu/gpu_tests/pixel_test_pages.py
@@ -149,7 +149,6 @@ @staticmethod def DefaultPages(base_name: str) -> typing.List[PixelTestPage]: sw_compositing_args = [cba.DISABLE_GPU_COMPOSITING] - browser_swap_args = ['--enable-features=ReportFCPOnlyOnSuccessfulCommit'] browser_args_DXVA = [cba.DISABLE_FEATURES_D3D11_VIDEO_DECODER] # The optimizer script spat out pretty similar values for most MP4 tests, so @@ -213,7 +212,6 @@ PixelTestPage( 'pixel_video_mp4.html?width=240&height=135&use_timer=1', base_name + '_Video_MP4', - browser_args=browser_swap_args, test_rect=[0, 0, 240, 135], # Most images are actually very similar, but Pixel 2 # tends to produce images with all colors shifted by a @@ -222,13 +220,12 @@ # Surprisingly stable, does not appear to require inexact matching. PixelTestPage('pixel_video_mp4.html?width=240&height=135&use_timer=1', base_name + '_Video_MP4_DXVA', - browser_args=browser_args_DXVA + browser_swap_args, + browser_args=browser_args_DXVA, test_rect=[0, 0, 240, 135]), PixelTestPage( 'pixel_video_mp4_four_colors_aspect_4x3.html' '?width=240&height=135&use_timer=1', base_name + '_Video_MP4_FourColors_Aspect_4x3', - browser_args=browser_swap_args, test_rect=[0, 0, 240, 135], matching_algorithm=algo.SobelMatchingAlgorithm( max_different_pixels=41700, @@ -239,28 +236,24 @@ 'pixel_video_mp4_four_colors_rot_90.html' '?width=270&height=240&use_timer=1', base_name + '_Video_MP4_FourColors_Rot_90', - browser_args=browser_swap_args, test_rect=[0, 0, 270, 240], matching_algorithm=general_mp4_algo), PixelTestPage( 'pixel_video_mp4_four_colors_rot_180.html' '?width=240&height=135&use_timer=1', base_name + '_Video_MP4_FourColors_Rot_180', - browser_args=browser_swap_args, test_rect=[0, 0, 240, 135], matching_algorithm=general_mp4_algo), PixelTestPage( 'pixel_video_mp4_four_colors_rot_270.htm' 'l?width=270&height=240&use_timer=1', base_name + '_Video_MP4_FourColors_Rot_270', - browser_args=browser_swap_args, test_rect=[0, 0, 270, 240], matching_algorithm=general_mp4_algo), PixelTestPage( 'pixel_video_mp4_rounded_corner.html' '?width=240&height=135&use_timer=1', base_name + '_Video_MP4_Rounded_Corner', - browser_args=browser_swap_args, test_rect=[0, 0, 240, 135], matching_algorithm=algo.SobelMatchingAlgorithm( max_different_pixels=30500, @@ -269,7 +262,6 @@ ignored_border_thickness=1)), PixelTestPage('pixel_video_vp9.html?width=240&height=135&use_timer=1', base_name + '_Video_VP9', - browser_args=browser_swap_args, test_rect=[0, 0, 240, 135], matching_algorithm=algo.SobelMatchingAlgorithm( max_different_pixels=114000, @@ -278,7 +270,7 @@ ignored_border_thickness=1)), PixelTestPage('pixel_video_vp9.html?width=240&height=135&use_timer=1', base_name + '_Video_VP9_DXVA', - browser_args=browser_args_DXVA + browser_swap_args, + browser_args=browser_args_DXVA, test_rect=[0, 0, 240, 135], matching_algorithm=algo.SobelMatchingAlgorithm( max_different_pixels=31100, @@ -325,7 +317,6 @@ 'pixel_video_backdrop_filter.html?width=240&height=135&use_timer=1', base_name + '_Video_BackdropFilter', test_rect=[0, 0, 240, 135], - browser_args=browser_swap_args, matching_algorithm=algo.SobelMatchingAlgorithm( max_different_pixels=1000, pixel_delta_threshold=20,
diff --git a/content/test/gpu/gpu_tests/test_expectations/webcodecs_expectations.txt b/content/test/gpu/gpu_tests/test_expectations/webcodecs_expectations.txt index a0dbac9c..465a7fa 100644 --- a/content/test/gpu/gpu_tests/test_expectations/webcodecs_expectations.txt +++ b/content/test/gpu/gpu_tests/test_expectations/webcodecs_expectations.txt
@@ -98,9 +98,6 @@ crbug.com/1311091 WebCodecs_WebRTCPeerConnection_* [ Skip ] -# Remove when Apple M1 FYI bot passes these tests -crbug.com/1312735 [ mac apple-apple-m1 ] WebCodecs_* [ Failure ] - ####################################################################### # Automated Entries After This Point - Do Not Manually Add Below Here # #######################################################################
diff --git a/content/test/gpu/gpu_tests/trace_integration_test.py b/content/test/gpu/gpu_tests/trace_integration_test.py index 672517de..4143bb10 100644 --- a/content/test/gpu/gpu_tests/trace_integration_test.py +++ b/content/test/gpu/gpu_tests/trace_integration_test.py
@@ -430,12 +430,6 @@ if expected.no_overlay: return - # TODO(crbug.com/1278681): Remove this history after no more flaky tests. - logging.info( - 'SwapChain Presentation Mode History %s', - TraceIntegrationTest._SwapChainPresentationModeListToStr( - presentation_mode_history)) - valid_entry_found = False for index, mode in enumerate(reversed(presentation_mode_history)): # Be more tolerant for the beginning frames in non-overlay mode.
diff --git a/content/web_test/renderer/web_ax_object_proxy.cc b/content/web_test/renderer/web_ax_object_proxy.cc index c9c0708c..edf6658 100644 --- a/content/web_test/renderer/web_ax_object_proxy.cc +++ b/content/web_test/renderer/web_ax_object_proxy.cc
@@ -17,6 +17,7 @@ #include "third_party/blink/public/web/web_document.h" #include "third_party/blink/public/web/web_local_frame.h" #include "ui/accessibility/ax_action_data.h" +#include "ui/accessibility/ax_enum_util.h" #include "ui/accessibility/ax_enums.mojom-shared.h" #include "ui/accessibility/ax_node_data.h" #include "ui/gfx/geometry/rect_f.h" @@ -1598,26 +1599,9 @@ case ax::mojom::NameFrom::kUninitialized: case ax::mojom::NameFrom::kNone: return ""; - case ax::mojom::NameFrom::kAttribute: - return "attribute"; - case ax::mojom::NameFrom::kAttributeExplicitlyEmpty: - return "attributeExplicitlyEmpty"; - case ax::mojom::NameFrom::kCaption: - return "caption"; - case ax::mojom::NameFrom::kContents: - return "contents"; - case ax::mojom::NameFrom::kPlaceholder: - return "placeholder"; - case ax::mojom::NameFrom::kRelatedElement: - return "relatedElement"; - case ax::mojom::NameFrom::kValue: - return "value"; - case ax::mojom::NameFrom::kTitle: - return "title"; + default: + return ui::ToString(name_from); } - - NOTREACHED(); - return std::string(); } int WebAXObjectProxy::NameElementCount() { @@ -1663,26 +1647,9 @@ switch (description_from) { case ax::mojom::DescriptionFrom::kNone: return ""; - case ax::mojom::DescriptionFrom::kAriaDescription: - return "ariaDescription"; - case ax::mojom::DescriptionFrom::kButtonLabel: - return "buttonLabel"; - case ax::mojom::DescriptionFrom::kRelatedElement: - return "relatedElement"; - case ax::mojom::DescriptionFrom::kRubyAnnotation: - return "rubyAnnotation"; - case ax::mojom::DescriptionFrom::kSummary: - return "summary"; - case ax::mojom::DescriptionFrom::kSvgDescElement: - return "svgDescElement"; - case ax::mojom::DescriptionFrom::kTableCaption: - return "tableCaption"; - case ax::mojom::DescriptionFrom::kTitle: - return "title"; + default: + return ui::ToString(description_from); } - - NOTREACHED(); - return std::string(); } std::string WebAXObjectProxy::Placeholder() {
diff --git a/docs/fuchsia/README.md b/docs/fuchsia/README.md new file mode 100644 index 0000000..a9e682c --- /dev/null +++ b/docs/fuchsia/README.md
@@ -0,0 +1,49 @@ +# Fuchsia + +Documentation for developing Chromium for the [Fuchsia](https://fuchsia.dev/) platform. + +[TOC] + +## Contact information + +* [`#fuchsia`](https://chromium.slack.com/archives/CGJCHA1SM) on [Chromium Slack](https://www.chromium.org/developers/slack) +* [fuchsia-dev@chromium.org](mailto:fuchsia-dev@chromium.org) + +## Bugs + +Fuchsia-specific issues should have Component `Fuchsia` and OS `Fuchsia`. + +To report a new issue, use this +[template](https://bugs.chromium.org/p/chromium/issues/entry?components=Fuchsia&labels=OS-Fuchsia%2CType-Bug). + +## Chromium development for Fuchsia + +See [Checking out and building on Fuchsia](build_instructions.md) for +Fuchsia-specific build instructions. + +### Deploying and running Fuchsia code. + +Fuchsia binaries are deployed and executed via scripts that are automatically +generated by the `fuchsia_package_installer()` or +`fuchsia_run_script_with_packages()` GN templates. + +For information on running tests, see [Tests](#tests). + +#### Debugging + +See [Debugging](debug_instructions.md) + +#### Tests + +* [Deploying and running gtests on Fuchsia](gtests.md) +* [Deploying content_shell and running web_tests on Fuchsia](web_tests.md) +* [Running GPU integration tests on Fuchsia](gpu_testing.md) +* [Running Telemetry Benchmarks on Fuchsia](telemetry.md) + +## Fuchsia WebEngine and Runners +See [Fuchsia WebEngine and Runners](../../fuchsia_webengine/README.md). + +## Resources for developers working on Chromium for Fuchsia + +* [Fuchsia platform versioning](platform_versioning.md) +* [Manually updating Chromium to a new Fuchsia SDK](sdk_updates.md) \ No newline at end of file
diff --git a/docs/fuchsia/build_instructions.md b/docs/fuchsia/build_instructions.md index 0746ece..4b823ca 100644 --- a/docs/fuchsia/build_instructions.md +++ b/docs/fuchsia/build_instructions.md
@@ -1,8 +1,7 @@ # Checking out and building on Fuchsia -***If you have followed the instructions below and things still having trouble, -try `#fuchsia` on [Chromium Slack](https://www.chromium.org/developers/slack) -or [fuchsia-dev@chromium.org](mailto:fuchsia-dev@chromium.org).*** +***If you have followed the instructions below and are still having trouble, +see [Contact information](README.md#contact-information).*** There are instructions for other platforms linked from the [get the code](../get_the_code.md) page.
diff --git a/docs/fuchsia/debug_instructions.md b/docs/fuchsia/debug_instructions.md index 023b838e..3b5a834 100644 --- a/docs/fuchsia/debug_instructions.md +++ b/docs/fuchsia/debug_instructions.md
@@ -1,5 +1,7 @@ # Debugging +[TOC] + It is possible to debug Fuchsia binaries using `zxdb`. For the sake of these examples, we will be using `base_unittests` as the test suite we wish to execute. These instructions assume that your Chromium build has the following gn
diff --git a/docs/fuchsia/gpu_testing.md b/docs/fuchsia/gpu_testing.md index 5a61f03..0feade62 100644 --- a/docs/fuchsia/gpu_testing.md +++ b/docs/fuchsia/gpu_testing.md
@@ -1,4 +1,6 @@ -# Running GPU integration tests on Fuchsia. +# Running GPU integration tests on Fuchsia + +[TOC] General instruction on running and debugging GPU integration tests can be found [here](../gpu/gpu_testing.md).
diff --git a/docs/fuchsia/gtests.md b/docs/fuchsia/gtests.md index 450821d..2253d642 100644 --- a/docs/fuchsia/gtests.md +++ b/docs/fuchsia/gtests.md
@@ -1,4 +1,6 @@ -# Deploying and running gtests on Fuchsia. +# Deploying and running gtests on Fuchsia + +[TOC] Fuchsia gtest binaries are deployed and executed via scripts that are automatically generated by the `test()` GN target. For each test, three wrapper
diff --git a/docs/fuchsia/telemetry.md b/docs/fuchsia/telemetry.md index 138ebacd..41740f1 100644 --- a/docs/fuchsia/telemetry.md +++ b/docs/fuchsia/telemetry.md
@@ -1,4 +1,6 @@ -# Running Telemetry Benchmarks on Fuchsia. +# Running Telemetry Benchmarks on Fuchsia + +[TOC] General instruction on running and debugging benchmarks can be found in the [`tools/perf/README.md`](../../tools/perf/README.md).
diff --git a/docs/fuchsia/web_tests.md b/docs/fuchsia/web_tests.md index 911f542..a5d5d79 100644 --- a/docs/fuchsia/web_tests.md +++ b/docs/fuchsia/web_tests.md
@@ -1,4 +1,6 @@ -# Deploying content_shell and running web_tests on Fuchsia. +# Deploying content_shell and running web_tests on Fuchsia + +[TOC] General instruction on running and debugging web_tests can be found [here](../testing/web_tests.md).
diff --git a/extensions/common/api/automation.idl b/extensions/common/api/automation.idl index 5db6b5a..90c6b51 100644 --- a/extensions/common/api/automation.idl +++ b/extensions/common/api/automation.idl
@@ -477,6 +477,7 @@ enum DescriptionFromType { ariaDescription, buttonLabel, + popupElement, relatedElement, rubyAnnotation, summary,
diff --git a/extensions/renderer/api/automation/automation_internal_custom_bindings.cc b/extensions/renderer/api/automation/automation_internal_custom_bindings.cc index ea44b0bf..654086a 100644 --- a/extensions/renderer/api/automation/automation_internal_custom_bindings.cc +++ b/extensions/renderer/api/automation/automation_internal_custom_bindings.cc
@@ -1867,7 +1867,12 @@ if (tree_id == accessibility_focused_tree_id_) accessibility_focused_tree_id_ = ui::AXTreeIDUnknown(); - tree_id_to_tree_wrapper_map_.erase(tree_id); + auto it = tree_id_to_tree_wrapper_map_.find(tree_id); + if (it == tree_id_to_tree_wrapper_map_.end()) + return; + + TreeEventListenersChanged(it->second.get(), /* is_deleting=*/true); + tree_id_to_tree_wrapper_map_.erase(it); } void AutomationInternalCustomBindings::AddTreeChangeObserver( @@ -2968,8 +2973,9 @@ } void AutomationInternalCustomBindings::TreeEventListenersChanged( - AutomationAXTreeWrapper* tree_wrapper) { - if (tree_wrapper->EventListenerCount() != 0) { + AutomationAXTreeWrapper* tree_wrapper, + bool is_deleting) { + if (!is_deleting && tree_wrapper->EventListenerCount() != 0) { trees_with_event_listeners_.insert(tree_wrapper->GetTreeID()); return; }
diff --git a/extensions/renderer/api/automation/automation_internal_custom_bindings.h b/extensions/renderer/api/automation/automation_internal_custom_bindings.h index e0231a20..979fb89 100644 --- a/extensions/renderer/api/automation/automation_internal_custom_bindings.h +++ b/extensions/renderer/api/automation/automation_internal_custom_bindings.h
@@ -271,7 +271,8 @@ bool* offscreen = nullptr, bool clip_bounds = true) const; - void TreeEventListenersChanged(AutomationAXTreeWrapper* tree_wrapper); + void TreeEventListenersChanged(AutomationAXTreeWrapper* tree_wrapper, + bool is_deleting = false); std::map<ui::AXTreeID, std::unique_ptr<AutomationAXTreeWrapper>> tree_id_to_tree_wrapper_map_;
diff --git a/fuchsia_webengine/README.md b/fuchsia_webengine/README.md index 138bd8b1..1a03734 100644 --- a/fuchsia_webengine/README.md +++ b/fuchsia_webengine/README.md
@@ -1,9 +1,11 @@ # Fuchsia WebEngine and Runners -This directory contains implementation code for Fuchsia WebEngine and code -specifically related to it, including the Runners that use it. -For general information about building Chromium on Fuchsia, see this -[documentation](../docs/fuchsia/build_instructions.md). +This directory contains implementation code for Fuchsia WebEngine and code +specifically related to it, including the Runners that use it. Code in this +directory must not be used outside it and its subdirectories. + +General information about Chromium on Fuchsia is +[here](../docs/fuchsia/README.md). [TOC] @@ -25,10 +27,10 @@ code is run inside the browser process, allowing for full access to the browser code - but not other processes. * Integration tests: Exercise the published FIDL API of a Fuchsia Component. For - instance, `//fuchsia_webengine/engine:web_engine_integration_tests` make use of the - `//fuchsia_webengine/engine:web_engine` component. The test code runs in a separate - process in a separate Fuchsia Component, allowing only access to the published API of - the component under test. + instance, `//fuchsia_webengine/engine:web_engine_integration_tests` make use + of the `//fuchsia_webengine/engine:web_engine` component. The test code runs + in a separate process in a separate Fuchsia Component, allowing only access to + the published API of the component under test. Integration tests are more resource-intensive than browser tests, which are in turn more expensive than unit tests. Therefore, when writing new tests, it is @@ -38,29 +40,13 @@ under test with an explicit file name, either `fake_*`, `test_*`, `*_unittest.cc`, `*_ browsertest.cc` or `*_integration_test.cc`. -## TODO(crbug.com/1081525): Update and/or move the remaining text as appropriate. -Test code that is shared across components should live in a dedicated `test` -directory, under the `cr_fuchsia` namespace. For instance, see the -`//fuchsia/engine/test` directory, which contains code shared by all browser -tests. +Test code that is shared across Components should live in `a dedicated ``test` +directory. For example, the `//fuchsia_webengine/engine/test` directory, which +contains code shared by all browser tests, and +`//fuchsia_webengine/common/test`, which contains code shared by tests for both +WebEngine and Runners. -## Deploying and running Fuchsia code. - -Fuchsia binaries are deployed and executed via scripts that are automatically -generated by the `fuchsia_package_installer()` or -`fuchsia_run_script_with_packages()` GN templates. Details on -deploying and running Fuchsia test binaries can be found -[here](../docs/fuchsia/gtests.md) - -## Debugging - -Check [this documentation](../docs/fuchsia/debug_instructions.md) for -debugging tips. - - -## WebRunner/WebEngine - -### Building and deploying the WebRunner service +## Building and deploying the WebRunner service When you build `web_runner`, Chromium will automatically generate scripts for you that will automatically provision a device with Fuchsia and then install
diff --git a/gpu/command_buffer/service/shared_image_backing_factory_ozone.cc b/gpu/command_buffer/service/shared_image_backing_factory_ozone.cc index 2df8eaa..5f4e07b 100644 --- a/gpu/command_buffer/service/shared_image_backing_factory_ozone.cc +++ b/gpu/command_buffer/service/shared_image_backing_factory_ozone.cc
@@ -237,6 +237,16 @@ !gl::GLSurfaceEGL::GetGLDisplayEGL()->HasEGLExtension("EGL_KHR_image")) { return false; } +#else + // TODO(hitawala): Until SharedImageBackingOzone supports all use cases prefer + // using SharedImageBackingGLImage instead + bool needs_interop_factory = (gr_context_type == GrContextType::kVulkan && + (usage & SHARED_IMAGE_USAGE_DISPLAY)) || + (usage & SHARED_IMAGE_USAGE_WEBGPU) || + (usage & SHARED_IMAGE_USAGE_VIDEO_DECODE); + if (!needs_interop_factory) { + return false; + } #endif *allow_legacy_mailbox = false;
diff --git a/gpu/command_buffer/service/shared_image_factory.cc b/gpu/command_buffer/service/shared_image_factory.cc index 2a82019..987b5f07 100644 --- a/gpu/command_buffer/service/shared_image_factory.cc +++ b/gpu/command_buffer/service/shared_image_factory.cc
@@ -412,9 +412,12 @@ } vulkan_context_provider_ = context_state->vk_context_provider(); #elif BUILDFLAG(IS_CHROMEOS_ASH) - auto ozone_factory = - std::make_unique<SharedImageBackingFactoryOzone>(context_state); - factories_.push_back(std::move(ozone_factory)); + if (gpu_preferences.enable_webgpu || + gr_context_type_ == GrContextType::kVulkan) { + auto ozone_factory = + std::make_unique<SharedImageBackingFactoryOzone>(context_state); + factories_.push_back(std::move(ozone_factory)); + } #endif // BUILDFLAG(IS_CHROMEOS_ASH) #endif // defined(USE_OZONE)
diff --git "a/infra/config/generated/builders/ci/Android Release \050Nexus 5X\051/properties.json" "b/infra/config/generated/builders/ci/Android Release \050Nexus 5X\051/properties.json" index 94d4601..c97a3015 100644 --- "a/infra/config/generated/builders/ci/Android Release \050Nexus 5X\051/properties.json" +++ "b/infra/config/generated/builders/ci/Android Release \050Nexus 5X\051/properties.json"
@@ -1,4 +1,61 @@ { + "$build/chromium_tests_builder_config": { + "builder_config": { + "builder_db": { + "entries": [ + { + "builder_id": { + "bucket": "ci", + "builder": "Android Release (Nexus 5X)", + "project": "chromium" + }, + "builder_spec": { + "build_gs_bucket": "chromium-gpu-archive", + "builder_group": "chromium.gpu", + "execution_mode": "COMPILE_AND_TEST", + "legacy_android_config": { + "config": "main_builder" + }, + "legacy_chromium_config": { + "apply_configs": [ + "download_vr_test_apks", + "mb" + ], + "build_config": "Release", + "config": "android", + "target_bits": 64, + "target_platform": "android" + }, + "legacy_gclient_config": { + "apply_configs": [ + "android", + "enable_reclient" + ], + "config": "chromium" + } + } + } + ] + }, + "builder_ids": [ + { + "bucket": "ci", + "builder": "Android Release (Nexus 5X)", + "project": "chromium" + } + ], + "mirroring_builder_group_and_names": [ + { + "builder": "android-marshmallow-arm64-rel", + "group": "tryserver.chromium.android" + }, + { + "builder": "gpu-try-android-m-nexus-5x-64", + "group": "tryserver.chromium.android" + } + ] + } + }, "$build/reclient": { "instance": "rbe-chromium-trusted", "jobs": 250,
diff --git a/infra/config/generated/builders/ci/android-marshmallow-arm64-rel/properties.json b/infra/config/generated/builders/ci/android-marshmallow-arm64-rel/properties.json index 8252801..9c2c1b8 100644 --- a/infra/config/generated/builders/ci/android-marshmallow-arm64-rel/properties.json +++ b/infra/config/generated/builders/ci/android-marshmallow-arm64-rel/properties.json
@@ -1,4 +1,57 @@ { + "$build/chromium_tests_builder_config": { + "builder_config": { + "builder_db": { + "entries": [ + { + "builder_id": { + "bucket": "ci", + "builder": "android-marshmallow-arm64-rel", + "project": "chromium" + }, + "builder_spec": { + "build_gs_bucket": "chromium-android-archive", + "builder_group": "chromium.android", + "execution_mode": "COMPILE_AND_TEST", + "legacy_android_config": { + "config": "main_builder" + }, + "legacy_chromium_config": { + "apply_configs": [ + "download_vr_test_apks", + "mb" + ], + "build_config": "Release", + "config": "android", + "target_bits": 64, + "target_platform": "android" + }, + "legacy_gclient_config": { + "apply_configs": [ + "android", + "enable_reclient" + ], + "config": "chromium" + } + } + } + ] + }, + "builder_ids": [ + { + "bucket": "ci", + "builder": "android-marshmallow-arm64-rel", + "project": "chromium" + } + ], + "mirroring_builder_group_and_names": [ + { + "builder": "android-marshmallow-arm64-rel", + "group": "tryserver.chromium.android" + } + ] + } + }, "$build/reclient": { "instance": "rbe-chromium-trusted", "jobs": 500,
diff --git a/infra/config/generated/builders/ci/lacros-arm-archive-rel/properties.json b/infra/config/generated/builders/ci/lacros-arm-archive-rel/properties.json index d5cde88b..56ce3f28 100644 --- a/infra/config/generated/builders/ci/lacros-arm-archive-rel/properties.json +++ b/infra/config/generated/builders/ci/lacros-arm-archive-rel/properties.json
@@ -66,5 +66,8 @@ ] }, "builder_group": "chromium", - "recipe": "chromium" + "recipe": "chromium", + "sheriff_rotations": [ + "chromium" + ] } \ No newline at end of file
diff --git a/infra/config/generated/builders/try/android-marshmallow-arm64-rel-compilator/properties.json b/infra/config/generated/builders/try/android-marshmallow-arm64-rel-compilator/properties.json index 1331650..55b53bd 100644 --- a/infra/config/generated/builders/try/android-marshmallow-arm64-rel-compilator/properties.json +++ b/infra/config/generated/builders/try/android-marshmallow-arm64-rel-compilator/properties.json
@@ -1,4 +1,88 @@ { + "$build/chromium_tests_builder_config": { + "builder_config": { + "builder_db": { + "entries": [ + { + "builder_id": { + "bucket": "ci", + "builder": "Android Release (Nexus 5X)", + "project": "chromium" + }, + "builder_spec": { + "build_gs_bucket": "chromium-gpu-archive", + "builder_group": "chromium.gpu", + "execution_mode": "COMPILE_AND_TEST", + "legacy_android_config": { + "config": "main_builder" + }, + "legacy_chromium_config": { + "apply_configs": [ + "download_vr_test_apks", + "mb" + ], + "build_config": "Release", + "config": "android", + "target_bits": 64, + "target_platform": "android" + }, + "legacy_gclient_config": { + "apply_configs": [ + "android", + "enable_reclient" + ], + "config": "chromium" + } + } + }, + { + "builder_id": { + "bucket": "ci", + "builder": "android-marshmallow-arm64-rel", + "project": "chromium" + }, + "builder_spec": { + "build_gs_bucket": "chromium-android-archive", + "builder_group": "chromium.android", + "execution_mode": "COMPILE_AND_TEST", + "legacy_android_config": { + "config": "main_builder" + }, + "legacy_chromium_config": { + "apply_configs": [ + "download_vr_test_apks", + "mb" + ], + "build_config": "Release", + "config": "android", + "target_bits": 64, + "target_platform": "android" + }, + "legacy_gclient_config": { + "apply_configs": [ + "android", + "enable_reclient" + ], + "config": "chromium" + } + } + } + ] + }, + "builder_ids": [ + { + "bucket": "ci", + "builder": "Android Release (Nexus 5X)", + "project": "chromium" + }, + { + "bucket": "ci", + "builder": "android-marshmallow-arm64-rel", + "project": "chromium" + } + ] + } + }, "$build/code_coverage": { "coverage_test_types": [ "unit",
diff --git a/infra/config/generated/builders/try/android-marshmallow-arm64-rel/properties.json b/infra/config/generated/builders/try/android-marshmallow-arm64-rel/properties.json index 6814727..3edd6d33 100644 --- a/infra/config/generated/builders/try/android-marshmallow-arm64-rel/properties.json +++ b/infra/config/generated/builders/try/android-marshmallow-arm64-rel/properties.json
@@ -3,6 +3,90 @@ "compilator": "android-marshmallow-arm64-rel-compilator", "compilator_watcher_git_revision": "7809a690bbd935bcb3b4d922e24cabe168aaabc8" }, + "$build/chromium_tests_builder_config": { + "builder_config": { + "builder_db": { + "entries": [ + { + "builder_id": { + "bucket": "ci", + "builder": "Android Release (Nexus 5X)", + "project": "chromium" + }, + "builder_spec": { + "build_gs_bucket": "chromium-gpu-archive", + "builder_group": "chromium.gpu", + "execution_mode": "COMPILE_AND_TEST", + "legacy_android_config": { + "config": "main_builder" + }, + "legacy_chromium_config": { + "apply_configs": [ + "download_vr_test_apks", + "mb" + ], + "build_config": "Release", + "config": "android", + "target_bits": 64, + "target_platform": "android" + }, + "legacy_gclient_config": { + "apply_configs": [ + "android", + "enable_reclient" + ], + "config": "chromium" + } + } + }, + { + "builder_id": { + "bucket": "ci", + "builder": "android-marshmallow-arm64-rel", + "project": "chromium" + }, + "builder_spec": { + "build_gs_bucket": "chromium-android-archive", + "builder_group": "chromium.android", + "execution_mode": "COMPILE_AND_TEST", + "legacy_android_config": { + "config": "main_builder" + }, + "legacy_chromium_config": { + "apply_configs": [ + "download_vr_test_apks", + "mb" + ], + "build_config": "Release", + "config": "android", + "target_bits": 64, + "target_platform": "android" + }, + "legacy_gclient_config": { + "apply_configs": [ + "android", + "enable_reclient" + ], + "config": "chromium" + } + } + } + ] + }, + "builder_ids": [ + { + "bucket": "ci", + "builder": "Android Release (Nexus 5X)", + "project": "chromium" + }, + { + "bucket": "ci", + "builder": "android-marshmallow-arm64-rel", + "project": "chromium" + } + ] + } + }, "$build/code_coverage": { "coverage_test_types": [ "unit",
diff --git a/infra/config/generated/builders/try/gpu-try-android-m-nexus-5x-64/properties.json b/infra/config/generated/builders/try/gpu-try-android-m-nexus-5x-64/properties.json index d90599c..b7971ece 100644 --- a/infra/config/generated/builders/try/gpu-try-android-m-nexus-5x-64/properties.json +++ b/infra/config/generated/builders/try/gpu-try-android-m-nexus-5x-64/properties.json
@@ -1,4 +1,51 @@ { + "$build/chromium_tests_builder_config": { + "builder_config": { + "builder_db": { + "entries": [ + { + "builder_id": { + "bucket": "ci", + "builder": "Android Release (Nexus 5X)", + "project": "chromium" + }, + "builder_spec": { + "build_gs_bucket": "chromium-gpu-archive", + "builder_group": "chromium.gpu", + "execution_mode": "COMPILE_AND_TEST", + "legacy_android_config": { + "config": "main_builder" + }, + "legacy_chromium_config": { + "apply_configs": [ + "download_vr_test_apks", + "mb" + ], + "build_config": "Release", + "config": "android", + "target_bits": 64, + "target_platform": "android" + }, + "legacy_gclient_config": { + "apply_configs": [ + "android", + "enable_reclient" + ], + "config": "chromium" + } + } + } + ] + }, + "builder_ids": [ + { + "bucket": "ci", + "builder": "Android Release (Nexus 5X)", + "project": "chromium" + } + ] + } + }, "$build/goma": { "enable_ats": true, "rpc_extra_params": "?prod",
diff --git a/infra/config/generated/luci/cr-buildbucket.cfg b/infra/config/generated/luci/cr-buildbucket.cfg index 877bece2..8d1a3ce8 100644 --- a/infra/config/generated/luci/cr-buildbucket.cfg +++ b/infra/config/generated/luci/cr-buildbucket.cfg
@@ -1947,12 +1947,10 @@ builders { name: "Android arm64 Builder All Targets (dbg)" swarming_host: "chromium-swarm.appspot.com" - dimensions: "builderless:1" - dimensions: "cores:8" + dimensions: "builder:Android arm64 Builder All Targets (dbg)" dimensions: "cpu:x86-64" dimensions: "os:Ubuntu-18.04" dimensions: "pool:luci.chromium.ci" - dimensions: "ssd:0" exe { cipd_package: "infra/chromium/bootstrapper/${platform}" cipd_version: "latest" @@ -2029,12 +2027,10 @@ builders { name: "Android x64 Builder (dbg)" swarming_host: "chromium-swarm.appspot.com" - dimensions: "builderless:1" - dimensions: "cores:8" + dimensions: "builder:Android x64 Builder (dbg)" dimensions: "cpu:x86-64" dimensions: "os:Ubuntu-18.04" dimensions: "pool:luci.chromium.ci" - dimensions: "ssd:0" exe { cipd_package: "infra/chromium/bootstrapper/${platform}" cipd_version: "latest" @@ -31578,7 +31574,10 @@ ' },' ' "builder_group": "chromium",' ' "led_builder_is_bootstrapped": true,' - ' "recipe": "chromium"' + ' "recipe": "chromium",' + ' "sheriff_rotations": [' + ' "chromium"' + ' ]' '}' execution_timeout_secs: 10800 build_numbers: YES
diff --git a/infra/config/generated/luci/luci-notify.cfg b/infra/config/generated/luci/luci-notify.cfg index fd89bf7..76bf2f3 100644 --- a/infra/config/generated/luci/luci-notify.cfg +++ b/infra/config/generated/luci/luci-notify.cfg
@@ -195,25 +195,6 @@ } builders { bucket: "ci" - name: "Android arm64 Builder (dbg)" - repository: "https://chromium.googlesource.com/chromium/src" - } - tree_closers { - tree_status_host: "chromium-status.appspot.com" - failed_step_regexp: "\\b(bot_update|compile|gclient runhooks|runhooks|update|\\w*nocompile_test)\\b" - } -} -notifiers { - notifications { - on_occurrence: FAILURE - failed_step_regexp: "\\b(bot_update|compile|gclient runhooks|runhooks|update|\\w*nocompile_test)\\b" - email { - rotation_urls: "https://chrome-ops-rotation-proxy.appspot.com/current/oncallator:chrome-build-sheriff" - } - template: "tree_closure_email_template" - } - builders { - bucket: "ci" name: "Android arm64 Builder All Targets (dbg)" repository: "https://chromium.googlesource.com/chromium/src" } @@ -3095,6 +3076,25 @@ } builders { bucket: "ci" + name: "lacros-arm-archive-rel" + repository: "https://chromium.googlesource.com/chromium/src" + } + tree_closers { + tree_status_host: "chromium-status.appspot.com" + failed_step_regexp: "\\b(bot_update|compile|gclient runhooks|runhooks|update|\\w*nocompile_test)\\b" + } +} +notifiers { + notifications { + on_occurrence: FAILURE + failed_step_regexp: "\\b(bot_update|compile|gclient runhooks|runhooks|update|\\w*nocompile_test)\\b" + email { + rotation_urls: "https://chrome-ops-rotation-proxy.appspot.com/current/oncallator:chrome-build-sheriff" + } + template: "tree_closure_email_template" + } + builders { + bucket: "ci" name: "lacros64-archive-rel" repository: "https://chromium.googlesource.com/chromium/src" }
diff --git a/infra/config/generated/sheriff-rotations/chromium.txt b/infra/config/generated/sheriff-rotations/chromium.txt index e0ed204..b7117b0 100644 --- a/infra/config/generated/sheriff-rotations/chromium.txt +++ b/infra/config/generated/sheriff-rotations/chromium.txt
@@ -69,6 +69,7 @@ ci/ios-simulator-noncq ci/lacros-amd64-generic-binary-size-rel ci/lacros-amd64-generic-rel +ci/lacros-arm-archive-rel ci/lacros-arm-generic-rel ci/lacros64-archive-rel ci/linux-archive-dbg
diff --git a/infra/config/subprojects/chromium/ci/chromium.android.star b/infra/config/subprojects/chromium/ci/chromium.android.star index 71e1d142..c69961a4 100644 --- a/infra/config/subprojects/chromium/ci/chromium.android.star +++ b/infra/config/subprojects/chromium/ci/chromium.android.star
@@ -259,7 +259,11 @@ ), cq_mirrors_console_view = "mirrors", execution_timeout = 7 * time.hour, - tree_closing = True, + # The 'All' version of this builder below provides the same build coverage + # but cycles much faster due to beefier machine resources. So any regression + # that this bot would close the tree on would always be caught by the 'All' + # bot much faster. + tree_closing = False, ) # We want to confirm that we can compile everything. @@ -272,6 +276,8 @@ # History: crbug.com/1246468 ci.builder( name = "Android arm64 Builder All Targets (dbg)", + builderless = False, + cores = None, branch_selector = branches.STANDARD_MILESTONE, builder_spec = builder_config.builder_spec( gclient_config = builder_config.gclient_config( @@ -307,6 +313,8 @@ ci.builder( name = "Android x64 Builder (dbg)", branch_selector = branches.STANDARD_MILESTONE, + builderless = False, + cores = None, builder_spec = builder_config.builder_spec( gclient_config = builder_config.gclient_config( config = "chromium", @@ -999,6 +1007,29 @@ ci.builder( name = "android-marshmallow-arm64-rel", + builder_spec = builder_config.builder_spec( + gclient_config = builder_config.gclient_config( + config = "chromium", + apply_configs = [ + "android", + "enable_reclient", + ], + ), + chromium_config = builder_config.chromium_config( + config = "android", + apply_configs = [ + "download_vr_test_apks", + "mb", + ], + build_config = builder_config.build_config.RELEASE, + target_bits = 64, + target_platform = builder_config.target_platform.ANDROID, + ), + android_config = builder_config.android_config( + config = "main_builder", + ), + build_gs_bucket = "chromium-android-archive", + ), branch_selector = branches.STANDARD_MILESTONE, console_view_entry = consoles.console_view_entry( category = "on_cq",
diff --git a/infra/config/subprojects/chromium/ci/chromium.gpu.star b/infra/config/subprojects/chromium/ci/chromium.gpu.star index 7f5f9345..cc984246 100644 --- a/infra/config/subprojects/chromium/ci/chromium.gpu.star +++ b/infra/config/subprojects/chromium/ci/chromium.gpu.star
@@ -34,6 +34,29 @@ ci.gpu.linux_builder( name = "Android Release (Nexus 5X)", + builder_spec = builder_config.builder_spec( + gclient_config = builder_config.gclient_config( + config = "chromium", + apply_configs = [ + "android", + "enable_reclient", + ], + ), + chromium_config = builder_config.chromium_config( + config = "android", + apply_configs = [ + "download_vr_test_apks", + "mb", + ], + build_config = builder_config.build_config.RELEASE, + target_bits = 64, + target_platform = builder_config.target_platform.ANDROID, + ), + android_config = builder_config.android_config( + config = "main_builder", + ), + build_gs_bucket = "chromium-gpu-archive", + ), branch_selector = branches.STANDARD_MILESTONE, console_view_entry = consoles.console_view_entry( category = "Android",
diff --git a/infra/config/subprojects/chromium/ci/chromium.star b/infra/config/subprojects/chromium/ci/chromium.star index 4cdc58b6..15759d64 100644 --- a/infra/config/subprojects/chromium/ci/chromium.star +++ b/infra/config/subprojects/chromium/ci/chromium.star
@@ -248,9 +248,7 @@ ], }, }, - # TODO(crbug.com/1320042): Turn on after it's stable. - tree_closing = False, - sheriff_rotations = args.ignore_default(None), + tree_closing = True, goma_backend = None, reclient_jobs = rbe_jobs.HIGH_JOBS_FOR_CI, reclient_instance = rbe_instance.DEFAULT,
diff --git a/infra/config/subprojects/chromium/gpu.try.star b/infra/config/subprojects/chromium/gpu.try.star index 6579883..9a7d80c 100644 --- a/infra/config/subprojects/chromium/gpu.try.star +++ b/infra/config/subprojects/chromium/gpu.try.star
@@ -84,6 +84,9 @@ gpu_android_builder( name = "gpu-try-android-m-nexus-5x-64", pool = "luci.chromium.gpu.android.nexus5x.try", + mirrors = [ + "ci/Android Release (Nexus 5X)", + ], ) def gpu_chromeos_builder(*, name, **kwargs):
diff --git a/infra/config/subprojects/chromium/try/tryserver.chromium.android.star b/infra/config/subprojects/chromium/try/tryserver.chromium.android.star index 0be076f9..5a98f8eb 100644 --- a/infra/config/subprojects/chromium/try/tryserver.chromium.android.star +++ b/infra/config/subprojects/chromium/try/tryserver.chromium.android.star
@@ -226,6 +226,10 @@ try_.orchestrator_builder( name = "android-marshmallow-arm64-rel", + mirrors = [ + "ci/android-marshmallow-arm64-rel", + "ci/Android Release (Nexus 5X)", + ], check_for_flakiness = True, compilator = "android-marshmallow-arm64-rel-compilator", branch_selector = branches.STANDARD_MILESTONE,
diff --git a/ios/chrome/browser/DEPS b/ios/chrome/browser/DEPS index cd93836..e9e381f 100644 --- a/ios/chrome/browser/DEPS +++ b/ios/chrome/browser/DEPS
@@ -47,6 +47,7 @@ "+components/keyed_service/ios", "+components/language", "+components/leveldb_proto", + "+components/local_state", "+components/lookalikes/core", "+components/metrics", "+components/user_prefs",
diff --git a/ios/chrome/browser/browsing_data/browsing_data_remover_impl.mm b/ios/chrome/browser/browsing_data/browsing_data_remover_impl.mm index 3be38d4b9..101d818 100644 --- a/ios/chrome/browser/browsing_data/browsing_data_remover_impl.mm +++ b/ios/chrome/browser/browsing_data/browsing_data_remover_impl.mm
@@ -289,11 +289,10 @@ // application. Partial removal based on timePeriod is not required. ClearIOSSnapshots(CreatePendingTaskCompletionClosure()); - // Remove all HTTPS-Only Mode allowlist decisions. Partial removal based on - // timePeriod is not required. + // Remove all HTTPS-Only Mode allowlist decisions. HttpsUpgradeService* https_upgrade_service = HttpsUpgradeServiceFactory::GetForBrowserState(browser_state_); - https_upgrade_service->ClearAllowlist(); + https_upgrade_service->ClearAllowlist(delete_begin, delete_end); } auto io_thread_task_runner = web::GetIOThreadTaskRunner({});
diff --git a/ios/chrome/browser/chrome_url_constants.cc b/ios/chrome/browser/chrome_url_constants.cc index 73f39ad7..126875a 100644 --- a/ios/chrome/browser/chrome_url_constants.cc +++ b/ios/chrome/browser/chrome_url_constants.cc
@@ -41,6 +41,7 @@ const char kChromeUIHistoryHost[] = "history"; const char kChromeUIInspectHost[] = "inspect"; const char kChromeUIIntersitialsHost[] = "interstitials"; +const char kChromeUILocalStateHost[] = "local-state"; const char kChromeUIManagementHost[] = "management"; const char kChromeUINetExportHost[] = "net-export"; const char kChromeUINewTabHost[] = "newtab";
diff --git a/ios/chrome/browser/chrome_url_constants.h b/ios/chrome/browser/chrome_url_constants.h index 6c85096..8cc5279 100644 --- a/ios/chrome/browser/chrome_url_constants.h +++ b/ios/chrome/browser/chrome_url_constants.h
@@ -44,6 +44,7 @@ extern const char kChromeUIHistoryHost[]; extern const char kChromeUIInspectHost[]; extern const char kChromeUIIntersitialsHost[]; +extern const char kChromeUILocalStateHost[]; extern const char kChromeUIManagementHost[]; extern const char kChromeUINetExportHost[]; extern const char kChromeUINewTabHost[];
diff --git a/ios/chrome/browser/https_upgrades/https_only_mode_upgrade_tab_helper.mm b/ios/chrome/browser/https_upgrades/https_only_mode_upgrade_tab_helper.mm index 1c341b2..6370b7a 100644 --- a/ios/chrome/browser/https_upgrades/https_only_mode_upgrade_tab_helper.mm +++ b/ios/chrome/browser/https_upgrades/https_only_mode_upgrade_tab_helper.mm
@@ -107,7 +107,7 @@ void HttpsOnlyModeUpgradeTabHelper::ClearAllowlistForTesting() { HttpsUpgradeService* service = HttpsUpgradeServiceFactory::GetForBrowserState( web_state()->GetBrowserState()); - service->ClearAllowlist(); + service->ClearAllowlist(base::Time(), base::Time::Max()); } bool HttpsOnlyModeUpgradeTabHelper::IsFakeHTTPSForTesting(
diff --git a/ios/chrome/browser/https_upgrades/https_only_mode_upgrade_tab_helper_unittest.mm b/ios/chrome/browser/https_upgrades/https_only_mode_upgrade_tab_helper_unittest.mm index 5ce11632..d23875b 100644 --- a/ios/chrome/browser/https_upgrades/https_only_mode_upgrade_tab_helper_unittest.mm +++ b/ios/chrome/browser/https_upgrades/https_only_mode_upgrade_tab_helper_unittest.mm
@@ -61,7 +61,7 @@ HttpsUpgradeService* service = HttpsUpgradeServiceFactory::GetForBrowserState( web_state_.GetBrowserState()); - service->ClearAllowlist(); + service->ClearAllowlist(base::Time(), base::Time::Max()); } // Helper function that calls into WebState::ShouldAllowResponse with the
diff --git a/ios/chrome/browser/https_upgrades/https_upgrade_service_impl.h b/ios/chrome/browser/https_upgrades/https_upgrade_service_impl.h index ad541d5f..dc9760ab 100644 --- a/ios/chrome/browser/https_upgrades/https_upgrade_service_impl.h +++ b/ios/chrome/browser/https_upgrades/https_upgrade_service_impl.h
@@ -9,6 +9,7 @@ #include <set> #include <string> +#include "base/time/time.h" #include "components/keyed_service/core/keyed_service.h" #include "components/security_interstitials/core/https_only_mode_allowlist.h" #include "ios/components/security_interstitials/https_only_mode/https_upgrade_service.h" @@ -19,16 +20,13 @@ // Decisions are scoped to the host. class HttpsUpgradeServiceImpl : public HttpsUpgradeService { public: - HttpsUpgradeServiceImpl(ChromeBrowserState* context); + explicit HttpsUpgradeServiceImpl(ChromeBrowserState* context); ~HttpsUpgradeServiceImpl() override; - // Returns whether |host| can be loaded over http://. + // HttpsUpgradeService methods: bool IsHttpAllowedForHost(const std::string& host) const override; - - // Allows future navigations to |host| over http://. void AllowHttpForHost(const std::string& host) override; - - void ClearAllowlist() override; + void ClearAllowlist(base::Time delete_begin, base::Time delete_end) override; private: std::unique_ptr<base::Clock> clock_;
diff --git a/ios/chrome/browser/https_upgrades/https_upgrade_service_impl.mm b/ios/chrome/browser/https_upgrades/https_upgrade_service_impl.mm index cce98ac..2d71755 100644 --- a/ios/chrome/browser/https_upgrades/https_upgrade_service_impl.mm +++ b/ios/chrome/browser/https_upgrades/https_upgrade_service_impl.mm
@@ -40,6 +40,7 @@ allowlist_.AllowHttpForHost(host, context_->IsOffTheRecord()); } -void HttpsUpgradeServiceImpl::ClearAllowlist() { - allowlist_.ClearAllowlist(); +void HttpsUpgradeServiceImpl::ClearAllowlist(base::Time delete_begin, + base::Time delete_end) { + allowlist_.ClearAllowlist(delete_begin, delete_end); }
diff --git a/ios/chrome/browser/ui/omnibox/popup/omnibox_popup_egtest.mm b/ios/chrome/browser/ui/omnibox/popup/omnibox_popup_egtest.mm index 7449a524..80c380a 100644 --- a/ios/chrome/browser/ui/omnibox/popup/omnibox_popup_egtest.mm +++ b/ios/chrome/browser/ui/omnibox/popup/omnibox_popup_egtest.mm
@@ -469,7 +469,8 @@ // Test that on iPhones, when the popup is scrolled, the keyboard is dismissed // but the omnibox is still expanded and the suggestions are visible. // Test with flag kEnableSuggestionsScrollingOnIPad disabled. -- (void)testScrollingDismissesKeyboardOnPhones { +// TODO(crbug.com/1327755): Test is flaky +- (void)DISABLED_testScrollingDismissesKeyboardOnPhones { [[AppLaunchManager sharedManager] ensureAppLaunchedWithFeaturesEnabled:{} disabled:{kEnableSuggestionsScrollingOnIPad} @@ -520,7 +521,8 @@ // Test when the popup is scrolled, the keyboard is dismissed // but the omnibox is still expanded and the suggestions are visible. // Test with flag kEnableSuggestionsScrollingOnIPad enabled. -- (void)testScrollingDismissesKeyboard { +// TODO(crbug.com/1327755): Test is flaky. +- (void)DISABLED_testScrollingDismissesKeyboard { [[AppLaunchManager sharedManager] ensureAppLaunchedWithFeaturesEnabled:{kEnableSuggestionsScrollingOnIPad} disabled:{}
diff --git a/ios/chrome/browser/ui/popup_menu/popup_menu_coordinator.mm b/ios/chrome/browser/ui/popup_menu/popup_menu_coordinator.mm index 086addf0f..ba34071 100644 --- a/ios/chrome/browser/ui/popup_menu/popup_menu_coordinator.mm +++ b/ios/chrome/browser/ui/popup_menu/popup_menu_coordinator.mm
@@ -322,7 +322,8 @@ .triggerFollowUpAction; self.bubblePresenter.incognitoTabTipBubblePresenter.triggerFollowUpAction = NO; - if (IsWebChannelsEnabled()) { + if (IsWebChannelsEnabled() && + !self.browser->GetBrowserState()->IsOffTheRecord()) { ios::GetChromeBrowserProvider() .GetFollowProvider() ->SetFollowEventDelegate(self.browser); @@ -370,14 +371,13 @@ self.overflowMenuMediator.browserPolicyConnector = GetApplicationContext()->GetBrowserPolicyConnector(); - if (IsWebChannelsEnabled()) { + if (IsWebChannelsEnabled() && + DiscoverFeedServiceFactory::GetForBrowserState( + self.browser->GetBrowserState())) { self.overflowMenuMediator.feedMetricsRecorder = DiscoverFeedServiceFactory::GetForBrowserState( self.browser->GetBrowserState()) ->GetFeedMetricsRecorder(); - ios::GetChromeBrowserProvider() - .GetFollowProvider() - ->SetFollowEventDelegate(self.browser); } self.contentBlockerMediator.consumer = self.overflowMenuMediator; @@ -454,7 +454,8 @@ self.mediator.webContentAreaOverlayPresenter = overlayPresenter; self.mediator.URLLoadingBrowserAgent = UrlLoadingBrowserAgent::FromBrowser(self.browser); - if (IsWebChannelsEnabled()) { + if (IsWebChannelsEnabled() && DiscoverFeedServiceFactory::GetForBrowserState( + self.browser->GetBrowserState())) { self.mediator.feedMetricsRecorder = DiscoverFeedServiceFactory::GetForBrowserState( self.browser->GetBrowserState())
diff --git a/ios/chrome/browser/ui/webui/BUILD.gn b/ios/chrome/browser/ui/webui/BUILD.gn index c8dd24d..a055fca 100644 --- a/ios/chrome/browser/ui/webui/BUILD.gn +++ b/ios/chrome/browser/ui/webui/BUILD.gn
@@ -120,6 +120,7 @@ "//ios/chrome/browser/sync", "//ios/chrome/browser/ui/webui/gcm", "//ios/chrome/browser/ui/webui/interstitials", + "//ios/chrome/browser/ui/webui/local_state", "//ios/chrome/browser/ui/webui/net_export", "//ios/chrome/browser/ui/webui/policy", "//ios/chrome/browser/ui/webui/translate_internals",
diff --git a/ios/chrome/browser/ui/webui/chrome_web_ui_ios_controller_factory.mm b/ios/chrome/browser/ui/webui/chrome_web_ui_ios_controller_factory.mm index bcc652f..a6d0162 100644 --- a/ios/chrome/browser/ui/webui/chrome_web_ui_ios_controller_factory.mm +++ b/ios/chrome/browser/ui/webui/chrome_web_ui_ios_controller_factory.mm
@@ -20,6 +20,7 @@ #include "ios/chrome/browser/ui/webui/gcm/gcm_internals_ui.h" #include "ios/chrome/browser/ui/webui/inspect/inspect_ui.h" #include "ios/chrome/browser/ui/webui/interstitials/interstitial_ui.h" +#include "ios/chrome/browser/ui/webui/local_state/local_state_ui.h" #include "ios/chrome/browser/ui/webui/management/management_ui.h" #include "ios/chrome/browser/ui/webui/net_export/net_export_ui.h" #include "ios/chrome/browser/ui/webui/ntp_tiles_internals_ui.h" @@ -85,6 +86,8 @@ return &NewWebUIIOS<InspectUI>; if (url_host == kChromeUIIntersitialsHost) return &NewWebUIIOS<InterstitialUI>; + if (url_host == kChromeUILocalStateHost) + return &NewWebUIIOS<LocalStateUI>; if (url_host == kChromeUIManagementHost) return &NewWebUIIOS<ManagementUI>; if (url_host == kChromeUINetExportHost)
diff --git a/ios/chrome/browser/ui/webui/local_state/BUILD.gn b/ios/chrome/browser/ui/webui/local_state/BUILD.gn new file mode 100644 index 0000000..c9718204 --- /dev/null +++ b/ios/chrome/browser/ui/webui/local_state/BUILD.gn
@@ -0,0 +1,20 @@ +# Copyright 2022 The Chromium Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +source_set("local_state") { + configs += [ "//build/config/compiler:enable_arc" ] + sources = [ + "local_state_ui.h", + "local_state_ui.mm", + ] + deps = [ + "//base", + "//components/local_state", + "//components/prefs", + "//components/resources", + "//ios/chrome/browser", + "//ios/chrome/browser/browser_state", + "//ios/web/public/webui", + ] +}
diff --git a/ios/chrome/browser/ui/webui/local_state/local_state_ui.h b/ios/chrome/browser/ui/webui/local_state/local_state_ui.h new file mode 100644 index 0000000..fff2dc2 --- /dev/null +++ b/ios/chrome/browser/ui/webui/local_state/local_state_ui.h
@@ -0,0 +1,23 @@ +// Copyright 2022 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef IOS_CHROME_BROWSER_UI_WEBUI_LOCAL_STATE_LOCAL_STATE_UI_H_ +#define IOS_CHROME_BROWSER_UI_WEBUI_LOCAL_STATE_LOCAL_STATE_UI_H_ + +#include <string> + +#import "ios/web/public/webui/web_ui_ios_controller.h" + +// Controller for chrome://local-state/ page. +class LocalStateUI : public web::WebUIIOSController { + public: + explicit LocalStateUI(web::WebUIIOS* web_ui, const std::string& host); + + LocalStateUI(const LocalStateUI&) = delete; + LocalStateUI& operator=(const LocalStateUI&) = delete; + + ~LocalStateUI() override; +}; + +#endif // IOS_CHROME_BROWSER_UI_WEBUI_LOCAL_STATE_LOCAL_STATE_UI_H_
diff --git a/ios/chrome/browser/ui/webui/local_state/local_state_ui.mm b/ios/chrome/browser/ui/webui/local_state/local_state_ui.mm new file mode 100644 index 0000000..256abb0 --- /dev/null +++ b/ios/chrome/browser/ui/webui/local_state/local_state_ui.mm
@@ -0,0 +1,76 @@ +// Copyright 2022 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "ios/chrome/browser/ui/webui/local_state/local_state_ui.h" + +#include <memory> + +#include "base/bind.h" +#include "base/values.h" +#include "components/grit/dev_ui_components_resources.h" +#include "components/local_state/local_state_utils.h" +#include "components/prefs/pref_service.h" +#include "ios/chrome/browser/application_context.h" +#include "ios/chrome/browser/browser_state/chrome_browser_state.h" +#include "ios/chrome/browser/chrome_url_constants.h" +#include "ios/web/public/webui/web_ui_ios.h" +#include "ios/web/public/webui/web_ui_ios_data_source.h" +#include "ios/web/public/webui/web_ui_ios_message_handler.h" + +#if !defined(__has_feature) || !__has_feature(objc_arc) +#error "This file requires ARC support." +#endif + +namespace { + +// UI Handler for chrome://local-state. Displays the Local State file as JSON. +class LocalStateUIHandler : public web::WebUIIOSMessageHandler { + public: + LocalStateUIHandler() = default; + + LocalStateUIHandler(const LocalStateUIHandler&) = delete; + LocalStateUIHandler& operator=(const LocalStateUIHandler&) = delete; + + ~LocalStateUIHandler() override = default; + + // web::WebUIIOSMessageHandler: + void RegisterMessages() override; + + private: + // Called from JS when the page has loaded. Serializes local state prefs and + // sends them to the page. + void HandleRequestJson(const base::Value::List& args); +}; + +void LocalStateUIHandler::RegisterMessages() { + web_ui()->RegisterMessageCallback( + "requestJson", + base::BindRepeating(&LocalStateUIHandler::HandleRequestJson, + base::Unretained(this))); +} + +void LocalStateUIHandler::HandleRequestJson(const base::Value::List& args) { + std::string json; + if (!GetPrefsAsJson(GetApplicationContext()->GetLocalState(), &json)) + json = "Error loading Local State file."; + + const base::Value& callback_id = args[0]; + web_ui()->ResolveJavascriptCallback(callback_id, base::Value(json)); +} + +} // namespace + +LocalStateUI::LocalStateUI(web::WebUIIOS* web_ui, const std::string& host) + : web::WebUIIOSController(web_ui, host) { + // Set up the chrome://local-state source. + web::WebUIIOSDataSource* html_source = + web::WebUIIOSDataSource::Create(kChromeUILocalStateHost); + html_source->SetDefaultResource(IDR_LOCAL_STATE_HTML); + html_source->AddResourcePath("local_state.js", IDR_LOCAL_STATE_JS); + web::WebUIIOSDataSource::Add(ChromeBrowserState::FromWebUIIOS(web_ui), + html_source); + web_ui->AddMessageHandler(std::make_unique<LocalStateUIHandler>()); +} + +LocalStateUI::~LocalStateUI() {}
diff --git a/ios/chrome/browser/web/https_only_mode_egtest.mm b/ios/chrome/browser/web/https_only_mode_egtest.mm index 407121af..c9f44b9 100644 --- a/ios/chrome/browser/web/https_only_mode_egtest.mm +++ b/ios/chrome/browser/web/https_only_mode_egtest.mm
@@ -17,7 +17,6 @@ #include "ios/chrome/browser/metrics/metrics_app_interface.h" #include "ios/chrome/browser/pref_names.h" #import "ios/chrome/browser/web/https_only_mode_app_interface.h" -#import "ios/chrome/test/earl_grey/chrome_actions_app_interface.h" #import "ios/chrome/test/earl_grey/chrome_earl_grey.h" #import "ios/chrome/test/earl_grey/chrome_earl_grey_ui.h" #import "ios/chrome/test/earl_grey/chrome_matchers.h" @@ -313,17 +312,6 @@ @"Timer is still running"); } -// Performs the steps to clear browsing data. Must be called on the -// Clear Browsing Data settings screen, after having selected the data types -// scheduled for removal. -- (void)clearBrowsingData { - [ChromeEarlGreyUI tapClearBrowsingDataMenuButton: - chrome_test_util::ClearBrowsingDataButton()]; - [[EarlGrey selectElementWithMatcher:chrome_test_util:: - ConfirmClearBrowsingDataButton()] - performAction:grey_tap()]; -} - #pragma mark - Tests // Disable the feature and navigate to an HTTP URL directly. Since the feature @@ -540,14 +528,7 @@ GREYAssert(![HttpsOnlyModeAppInterface isTimerRunning], @"Timer is still running"); - [ChromeEarlGreyUI openSettingsMenu]; - [ChromeEarlGreyUI - tapSettingsMenuButton:chrome_test_util::SettingsMenuPrivacyButton()]; - [ChromeEarlGreyUI - tapPrivacyMenuButton:chrome_test_util::ClearBrowsingDataCell()]; - [self clearBrowsingData]; - [[EarlGrey selectElementWithMatcher:chrome_test_util::SettingsDoneButton()] - performAction:grey_tap()]; + [ChromeEarlGreyUI clearAllBrowsingData]; // Clearing the browsing data automatically reloads tabs. Check that the // interstitial is showing.
diff --git a/ios/chrome/test/swift_interop/BUILD.gn b/ios/chrome/test/swift_interop/BUILD.gn index 75fa1636..bde7f2c 100644 --- a/ios/chrome/test/swift_interop/BUILD.gn +++ b/ios/chrome/test/swift_interop/BUILD.gn
@@ -25,6 +25,7 @@ "classes/outlined_impl.cc", "classes/polymorphism.h", "enum/enum.h", + "language/nodiscard.h", "namespace/namespace.h", "pointer/object_passing.h", "pointer/pointer_returner.cc", @@ -43,6 +44,7 @@ "classes/outlined_xctest.swift", "classes/polymorphism_xctest.swift", "enum/enum_xctest.swift", + "language/nodiscard_xctest.swift", "namespace/namespace_xctest.swift", "pointer/object_passing_xctest.swift", "pointer/pointer_xctest.swift",
diff --git a/ios/chrome/test/swift_interop/language/nodiscard.h b/ios/chrome/test/swift_interop/language/nodiscard.h new file mode 100644 index 0000000..3ecfd45 --- /dev/null +++ b/ios/chrome/test/swift_interop/language/nodiscard.h
@@ -0,0 +1,41 @@ +// Copyright 2022 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef IOS_CHROME_TEST_SWIFT_INTEROP_LANGUAGE_NODISCARD_H_ +#define IOS_CHROME_TEST_SWIFT_INTEROP_LANGUAGE_NODISCARD_H_ + +[[nodiscard]] int NoDiscardAdd(int x, int y) { + return x + y; +} + +class NoDiscardMultiply { + public: + NoDiscardMultiply() {} + ~NoDiscardMultiply() {} + + [[nodiscard]] int Multiply(int x, int y) { return x * y; } + + int Divide(int x, int y) { return x / y; } +}; + +struct [[nodiscard]] NoDiscardError { + public: + NoDiscardError(int value) : value_(value) {} + int value_; +}; + +NoDiscardError NoDiscardReturnError(int x, int y) { + auto z = x + y; + NoDiscardError e(z); + return e; +} + +void NoDiscardTestReturnError() { + // NoDiscardError is declared nodiscard, so ignoring the return value of + // NoDiscardReturnError() should be a warning, but isn't. + // Filed as: https://github.com/apple/swift/issues/59002 + NoDiscardReturnError(5, 5); +} + +#endif // IOS_CHROME_TEST_SWIFT_INTEROP_LANGUAGE_NODISCARD_H_
diff --git a/ios/chrome/test/swift_interop/language/nodiscard_xctest.swift b/ios/chrome/test/swift_interop/language/nodiscard_xctest.swift new file mode 100644 index 0000000..8302601 --- /dev/null +++ b/ios/chrome/test/swift_interop/language/nodiscard_xctest.swift
@@ -0,0 +1,42 @@ +// Copyright 2022 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +import Language +import XCTest + +class NoDiscardTest: XCTestCase { + + func testNoDiscardFunction() throws { + let value = NoDiscardAdd(5, 10) + XCTAssertEqual(value, 15) + + // NoDiscardAdd() is nodiscard, corectly gives a warning. + // NoDiscardAdd(10,10) + } + + func testNoDiscardMethod() throws { + var multiplier = NoDiscardMultiply() + let value = multiplier.Multiply(10, 10) + XCTAssertEqual(value, 100) + + // NoDiscardMultiply::Multiply is nodiscard, correctly gives a warning. + // multiplier.Multiply(50, 50) + + let result = multiplier.Divide(100, 10) + XCTAssertEqual(result, 10) + + // NoDiscardMultiply::Divide has no annotation, correctly doesn't give a warning + multiplier.Divide(100, 10) + } + + func testNoDiscardStruct() throws { + let error: NoDiscardError = NoDiscardReturnError(10, 10) + XCTAssertEqual(error.value_, 20) + + // NoDiscardError is declared nodiscard, so ignoring the return value of + // NoDiscardReturnError() should be a warning, but isn't. + // Filed as: https://github.com/apple/swift/issues/59002 + NoDiscardReturnError(50, 50) + } +}
diff --git a/ios/chrome/test/swift_interop/module.modulemap b/ios/chrome/test/swift_interop/module.modulemap index 8f3d6b0f..5891076 100644 --- a/ios/chrome/test/swift_interop/module.modulemap +++ b/ios/chrome/test/swift_interop/module.modulemap
@@ -14,6 +14,11 @@ requires cplusplus } +module Language { + header "language/nodiscard.h" + requires cplusplus +} + module Namespace { header "namespace/namespace.h" requires cplusplus
diff --git a/ios/components/security_interstitials/https_only_mode/https_upgrade_service.h b/ios/components/security_interstitials/https_only_mode/https_upgrade_service.h index fc377fbc..0f5d780c 100644 --- a/ios/components/security_interstitials/https_only_mode/https_upgrade_service.h +++ b/ios/components/security_interstitials/https_only_mode/https_upgrade_service.h
@@ -6,6 +6,8 @@ #define IOS_COMPONENTS_SECURITY_INTERSTITIALS_HTTPS_ONLY_MODE_HTTPS_UPGRADE_SERVICE_H_ #include <string> + +#include "base/time/time.h" #include "components/keyed_service/core/keyed_service.h" // HttpsUpgradeService tracks the allowlist decisions for HTTPS-Only mode. @@ -18,8 +20,11 @@ // Allows future navigations to |host| over http://. virtual void AllowHttpForHost(const std::string& host) = 0; - // Clears persistent and non-persistent allowlist decisions. - virtual void ClearAllowlist() = 0; + // Clears the persistent and in-memory allowlist entries. All of in-memory + // entries are removed, but only persistent entries between delete_begin and + // delete_end are removed. + virtual void ClearAllowlist(base::Time delete_begin, + base::Time delete_end) = 0; }; #endif // IOS_COMPONENTS_SECURITY_INTERSTITIALS_HTTPS_ONLY_MODE_HTTPS_UPGRADE_SERVICE_H_
diff --git a/ios/components/security_interstitials/https_only_mode/https_upgrade_test_util.cc b/ios/components/security_interstitials/https_only_mode/https_upgrade_test_util.cc index 31ff3bbe..86a70fbc 100644 --- a/ios/components/security_interstitials/https_only_mode/https_upgrade_test_util.cc +++ b/ios/components/security_interstitials/https_only_mode/https_upgrade_test_util.cc
@@ -17,6 +17,7 @@ allowed_http_hosts_.insert(host); }; -void FakeHttpsUpgradeService::ClearAllowlist() { +void FakeHttpsUpgradeService::ClearAllowlist(base::Time delete_begin, + base::Time delete_end) { allowed_http_hosts_.clear(); }
diff --git a/ios/components/security_interstitials/https_only_mode/https_upgrade_test_util.h b/ios/components/security_interstitials/https_only_mode/https_upgrade_test_util.h index 45e94529..2e9f9bf2 100644 --- a/ios/components/security_interstitials/https_only_mode/https_upgrade_test_util.h +++ b/ios/components/security_interstitials/https_only_mode/https_upgrade_test_util.h
@@ -18,7 +18,7 @@ // HttpsUpgradeService methods: bool IsHttpAllowedForHost(const std::string& host) const override; void AllowHttpForHost(const std::string& host) override; - void ClearAllowlist() override; + void ClearAllowlist(base::Time delete_begin, base::Time delete_end) override; private: std::set<std::string> allowed_http_hosts_;
diff --git a/ios/google_internal/frameworks/chrome_internal_dynamic_framework.ios.zip.sha1 b/ios/google_internal/frameworks/chrome_internal_dynamic_framework.ios.zip.sha1 index 4aa20d73..d49ccf9 100644 --- a/ios/google_internal/frameworks/chrome_internal_dynamic_framework.ios.zip.sha1 +++ b/ios/google_internal/frameworks/chrome_internal_dynamic_framework.ios.zip.sha1
@@ -1 +1 @@ -89ae3ff6f9daa965dee686306468f13f188572d8 \ No newline at end of file +3290366da8784b928acecd735d7bfaf9d07ff1ac \ No newline at end of file
diff --git a/ios/google_internal/frameworks/chrome_internal_dynamic_framework.iossimulator.zip.sha1 b/ios/google_internal/frameworks/chrome_internal_dynamic_framework.iossimulator.zip.sha1 index aa0f94dc..4598566 100644 --- a/ios/google_internal/frameworks/chrome_internal_dynamic_framework.iossimulator.zip.sha1 +++ b/ios/google_internal/frameworks/chrome_internal_dynamic_framework.iossimulator.zip.sha1
@@ -1 +1 @@ -7cc14fc65e8b895ff41978d611ab31b817924791 \ No newline at end of file +b4cfbc547237508e05190e9134dcfdce03a601de \ No newline at end of file
diff --git a/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.ios.zip.sha1 b/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.ios.zip.sha1 index 6398f88..0c216e10 100644 --- a/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.ios.zip.sha1 +++ b/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.ios.zip.sha1
@@ -1 +1 @@ -91dd0f99cfabfbaa7904d28a88ab345fb9faf67a \ No newline at end of file +c31cd4e9d7ba630f291de981c91115bb5f761287 \ No newline at end of file
diff --git a/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.iossimulator.zip.sha1 b/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.iossimulator.zip.sha1 index 3ac6988..cf9852d 100644 --- a/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.iossimulator.zip.sha1 +++ b/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.iossimulator.zip.sha1
@@ -1 +1 @@ -c0359a50f72109f52b435619c587a09a8e7d449c \ No newline at end of file +8e7293333d2737fb092b44ccd98e2437b906f3ed \ No newline at end of file
diff --git a/ios/google_internal/frameworks/remoting_dogfood_internal_dynamic_framework.ios.zip.sha1 b/ios/google_internal/frameworks/remoting_dogfood_internal_dynamic_framework.ios.zip.sha1 index d2ea403..2e61db0 100644 --- a/ios/google_internal/frameworks/remoting_dogfood_internal_dynamic_framework.ios.zip.sha1 +++ b/ios/google_internal/frameworks/remoting_dogfood_internal_dynamic_framework.ios.zip.sha1
@@ -1 +1 @@ -d71409f657834f1d5fdd60d2be0824cf50b783da \ No newline at end of file +c95df183a2c63a3274d38d66ef7b6a37abc52f0b \ No newline at end of file
diff --git a/ios/google_internal/frameworks/remoting_dogfood_internal_dynamic_framework.iossimulator.zip.sha1 b/ios/google_internal/frameworks/remoting_dogfood_internal_dynamic_framework.iossimulator.zip.sha1 index 798a918..da29d810 100644 --- a/ios/google_internal/frameworks/remoting_dogfood_internal_dynamic_framework.iossimulator.zip.sha1 +++ b/ios/google_internal/frameworks/remoting_dogfood_internal_dynamic_framework.iossimulator.zip.sha1
@@ -1 +1 @@ -6d8cee79019f7eb244a51ef4965ff51a31322625 \ No newline at end of file +d994c69cca729f5d2123169f4ef9ac1d510aaec4 \ No newline at end of file
diff --git a/ios/google_internal/frameworks/remoting_internal_dynamic_framework.ios.zip.sha1 b/ios/google_internal/frameworks/remoting_internal_dynamic_framework.ios.zip.sha1 index 1cacd5c..7278d01e 100644 --- a/ios/google_internal/frameworks/remoting_internal_dynamic_framework.ios.zip.sha1 +++ b/ios/google_internal/frameworks/remoting_internal_dynamic_framework.ios.zip.sha1
@@ -1 +1 @@ -4f243c420c6b71acf812ae71223923936990444b \ No newline at end of file +b5a28ea37fdf7edd050b7f42047cc44a8acb7755 \ No newline at end of file
diff --git a/ios/google_internal/frameworks/remoting_internal_dynamic_framework.iossimulator.zip.sha1 b/ios/google_internal/frameworks/remoting_internal_dynamic_framework.iossimulator.zip.sha1 index de823f5..ae7d7c2 100644 --- a/ios/google_internal/frameworks/remoting_internal_dynamic_framework.iossimulator.zip.sha1 +++ b/ios/google_internal/frameworks/remoting_internal_dynamic_framework.iossimulator.zip.sha1
@@ -1 +1 @@ -d94cf7e29377dd3761a30c82c83dcb7579da05ee \ No newline at end of file +5ef2537f6ed0944520e77ba4cdf0be8359e5b578 \ No newline at end of file
diff --git a/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.ios.zip.sha1 b/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.ios.zip.sha1 index 1702b34c9..cc45ee8f 100644 --- a/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.ios.zip.sha1 +++ b/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.ios.zip.sha1
@@ -1 +1 @@ -20501ef6f57480dfc8b601ce3e07a51463c8ef2d \ No newline at end of file +5451dc662f5e924ca3646b46114f2ed28f1942ce \ No newline at end of file
diff --git a/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.iossimulator.zip.sha1 b/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.iossimulator.zip.sha1 index 6fc6fe2..a54c3746 100644 --- a/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.iossimulator.zip.sha1 +++ b/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.iossimulator.zip.sha1
@@ -1 +1 @@ -6206715728cfe771b40914dd58f0ef7cfcccfaf0 \ No newline at end of file +da0d93e07d824c2f86f36458c442d8dbc1bd22ec \ No newline at end of file
diff --git a/media/BUILD.gn b/media/BUILD.gn index a4b4143de..af2a623 100644 --- a/media/BUILD.gn +++ b/media/BUILD.gn
@@ -33,7 +33,6 @@ "ENABLE_FFMPEG_VIDEO_DECODERS=$enable_ffmpeg_video_decoders", "ENABLE_PLATFORM_HEVC=$enable_platform_hevc", "ENABLE_PLATFORM_HEVC_DECODING=$enable_platform_hevc_decoding", - "ENABLE_PLATFORM_ENCRYPTED_HEVC=$enable_platform_encrypted_hevc", "ENABLE_HLS_SAMPLE_AES=$enable_hls_sample_aes", "ENABLE_HLS_DEMUXER=$enable_hls_demuxer", "ENABLE_LIBGAV1_DECODER=$enable_libgav1_decoder",
diff --git a/media/base/media_switches.h b/media/base/media_switches.h index ef9d57d..3b969a3 100644 --- a/media/base/media_switches.h +++ b/media/base/media_switches.h
@@ -89,10 +89,15 @@ MEDIA_EXPORT extern const char kEnableLiveCaptionPrefForTesting[]; #if BUILDFLAG(ENABLE_PLATFORM_HEVC) +// TODO(crbug/1311348): Remove this after Chrome clear HEVC lands and Chrome OS +// is uprev'd to use that version and we then also land changes to tast-tests +// that drop usage of this flag. MEDIA_EXPORT extern const char kEnableClearHevcForTesting[]; #endif #if BUILDFLAG(IS_CHROMEOS) +// TODO(crbug/1311348): Remove kLacrosEnablePlatformEncryptedHevc after Chrome +// clear HEVC lands and Chrome OS is uprev'd to use that version for ash-chrome. MEDIA_EXPORT extern const char kLacrosEnablePlatformEncryptedHevc[]; MEDIA_EXPORT extern const char kLacrosEnablePlatformHevc[]; MEDIA_EXPORT extern const char kLacrosUseChromeosProtectedMedia[];
diff --git a/media/base/supported_types.cc b/media/base/supported_types.cc index e6b9a1cd..c2efcdbb 100644 --- a/media/base/supported_types.cc +++ b/media/base/supported_types.cc
@@ -206,6 +206,16 @@ #if BUILDFLAG(ENABLE_PLATFORM_HEVC) #if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_LINUX) +#if BUILDFLAG(IS_CHROMEOS_LACROS) + // TODO(b/171813538): For Lacros, the supplemental profile cache will be + // asking lacros-gpu, but we will be doing decoding in ash-gpu. Until the + // codec detection is plumbed through to ash-gpu we can do this extra check + // for HEVC support. + if (base::CommandLine::ForCurrentProcess()->HasSwitch( + switches::kLacrosEnablePlatformHevc)) { + return true; + } +#endif // BUILDFLAG(IS_CHROMEOS_LACROS) return GetSupplementalProfileCache()->IsProfileSupported(type.profile); #elif BUILDFLAG(IS_MAC) if (__builtin_available(macOS 11.0, *)) @@ -223,18 +233,9 @@ #else return true; #endif // BUILDFLAG(IS_WIN) || BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_LINUX) -#elif BUILDFLAG(ENABLE_PLATFORM_ENCRYPTED_HEVC) - // Only encrypted HEVC content is supported, and normally MSE.isTypeSupported - // returns false for HEVC. The kEnableClearHevcForTesting flag allows it to - // return true to enable a wider array of test scenarios to function properly. - if (!base::CommandLine::ForCurrentProcess()->HasSwitch( - switches::kEnableClearHevcForTesting)) { - return false; - } - return type.profile == HEVCPROFILE_MAIN || type.profile == HEVCPROFILE_MAIN10; #else return false; -#endif +#endif // BUILDFLAG(ENABLE_PLATFORM_HEVC) } bool IsVp9ProfileSupported(const VideoType& type) {
diff --git a/media/filters/source_buffer_state.cc b/media/filters/source_buffer_state.cc index 74814c3b..9b1b37b 100644 --- a/media/filters/source_buffer_state.cc +++ b/media/filters/source_buffer_state.cc
@@ -718,37 +718,6 @@ << " config: " << video_config.AsHumanReadableString(); DCHECK(video_config.IsValidConfig()); - if (video_config.codec() == VideoCodec::kHEVC) { -#if BUILDFLAG(ENABLE_PLATFORM_ENCRYPTED_HEVC) -#if BUILDFLAG(IS_CHROMEOS_LACROS) - if (!base::CommandLine::ForCurrentProcess()->HasSwitch( - switches::kLacrosEnablePlatformEncryptedHevc)) { - NOTREACHED() << "MSE parser must not emit HEVC tracks on runtime " - "configurations that do not support HEVC playback " - "via platform."; - return false; - } -#endif // BUILDFLAG(IS_CHROMEOS_LACROS) - // HEVC is only supported through EME under this build flag, so - // require the config to be for an encrypted track. Even so, - // conditionally allow clear HEVC if cmdline has test override. - if (video_config.encryption_scheme() == - EncryptionScheme::kUnencrypted && - !base::CommandLine::ForCurrentProcess()->HasSwitch( - switches::kEnableClearHevcForTesting)) { - MEDIA_LOG(ERROR, media_log_) - << "MSE playback of HEVC on is only supported via platform " - "decryptor, but the provided HEVC " - "track is not encrypted."; - return false; - } -#elif !BUILDFLAG(ENABLE_PLATFORM_HEVC) - NOTREACHED() - << "MSE parser must not emit HEVC tracks on build configurations " - "that do not support HEVC playback via platform."; -#endif // BUILDFLAG(ENABLE_PLATFORM_ENCRYPTED_HEVC) - } - const auto& it = std::find(expected_vcodecs.begin(), expected_vcodecs.end(), video_config.codec()); if (it == expected_vcodecs.end()) {
diff --git a/media/formats/hls/parse_status.cc b/media/formats/hls/parse_status.cc index 01f21b3..8a56774 100644 --- a/media/formats/hls/parse_status.cc +++ b/media/formats/hls/parse_status.cc
@@ -23,6 +23,7 @@ PARSE_STATUS_CODE_CASE(kFailedToParseSignedDecimalFloatingPoint); PARSE_STATUS_CODE_CASE(kFailedToParseDecimalResolution); PARSE_STATUS_CODE_CASE(kFailedToParseQuotedString); + PARSE_STATUS_CODE_CASE(kFailedToParseByteRange); PARSE_STATUS_CODE_CASE(kInvalidPlaylistVersion); PARSE_STATUS_CODE_CASE(kUnknownPlaylistType); PARSE_STATUS_CODE_CASE(kMalformedAttributeList);
diff --git a/media/formats/hls/parse_status.h b/media/formats/hls/parse_status.h index 77c8f8d..99d602b 100644 --- a/media/formats/hls/parse_status.h +++ b/media/formats/hls/parse_status.h
@@ -20,6 +20,7 @@ kFailedToParseSignedDecimalFloatingPoint, kFailedToParseDecimalResolution, kFailedToParseQuotedString, + kFailedToParseByteRange, kInvalidPlaylistVersion, kUnknownPlaylistType, kMalformedAttributeList,
diff --git a/media/formats/hls/types.cc b/media/formats/hls/types.cc index de78664..c28c5973 100644 --- a/media/formats/hls/types.cc +++ b/media/formats/hls/types.cc
@@ -227,6 +227,33 @@ .height = std::move(height).value()}; } +ParseStatus::Or<ByteRange> ByteRange::Parse(SourceString source_str) { + // If this ByteRange has an offset, it will be separated from the length by + // '@'. + const auto at_index = source_str.Str().find_first_of('@'); + const auto length_str = source_str.Consume(at_index); + auto length = ParseDecimalInteger(length_str); + if (length.has_error()) { + return ParseStatus(ParseStatusCode::kFailedToParseByteRange) + .AddCause(std::move(length).error()); + } + + // If the offset was present, try to parse it + absl::optional<types::DecimalInteger> offset; + if (at_index != base::StringPiece::npos) { + source_str.Consume(1); + auto offset_result = ParseDecimalInteger(source_str); + if (offset_result.has_error()) { + return ParseStatus(ParseStatusCode::kFailedToParseByteRange) + .AddCause(std::move(offset_result).error()); + } + + offset = std::move(offset_result).value(); + } + + return ByteRange{.length = std::move(length).value(), .offset = offset}; +} + ParseStatus::Or<base::StringPiece> ParseQuotedString( SourceString source_str, const VariableDictionary& variable_dict,
diff --git a/media/formats/hls/types.h b/media/formats/hls/types.h index f7dcc6c..95e4c12 100644 --- a/media/formats/hls/types.h +++ b/media/formats/hls/types.h
@@ -39,10 +39,26 @@ // height. // https://datatracker.ietf.org/doc/html/draft-pantos-hls-rfc8216bis#:~:text=enumerated%2Dstring%2Dlist.%0A%0A%20%20%20o-,decimal%2Dresolution,-%3A%20two%20decimal%2Dintegers struct MEDIA_EXPORT DecimalResolution { + static ParseStatus::Or<DecimalResolution> Parse(SourceString source_str); + types::DecimalInteger width; types::DecimalInteger height; +}; - static ParseStatus::Or<DecimalResolution> Parse(SourceString source_str); +// A `ByteRange` describes a sub-range of a resource. There are a couple tags +// that use this type, and they all have the format `length[@offset]`. +// https://datatracker.ietf.org/doc/html/draft-pantos-hls-rfc8216bis#section-4.4.4.2 +struct MEDIA_EXPORT ByteRange { + static ParseStatus::Or<ByteRange> Parse(SourceString source_str); + + // The length of the sub-range, in bytes. + types::DecimalInteger length; + + // If present, the offset in bytes from the beginning of the resource. + // If not present, the sub-range begins at the next byte following that of the + // previous segment. The previous segment must be a subrange of the same + // resource. + absl::optional<types::DecimalInteger> offset; }; // Parses a string surrounded by double-quotes ("), returning the inner string.
diff --git a/media/formats/hls/types_unittest.cc b/media/formats/hls/types_unittest.cc index 4b19468..1dd5602 100644 --- a/media/formats/hls/types_unittest.cc +++ b/media/formats/hls/types_unittest.cc
@@ -638,4 +638,77 @@ error_test("18446744073709551616x18446744073709551616"); } +TEST(HlsTypesTest, ParseByteRange) { + const auto error_test = [](base::StringPiece input, + const base::Location& from = + base::Location::Current()) { + auto result = + types::ByteRange::Parse(SourceString::CreateForTesting(input)); + ASSERT_TRUE(result.has_error()); + auto error = std::move(result).error(); + EXPECT_EQ(error.code(), ParseStatusCode::kFailedToParseByteRange) + << from.ToString(); + }; + const auto ok_test = [](base::StringPiece input, types::ByteRange expected, + const base::Location& from = + base::Location::Current()) { + auto result = + types::ByteRange::Parse(SourceString::CreateForTesting(input)); + ASSERT_TRUE(result.has_value()); + auto value = std::move(result).value(); + EXPECT_EQ(value.length, expected.length); + EXPECT_EQ(value.offset, expected.offset); + }; + + // Empty string is not allowed + error_test(""); + + // Length must be a valid DecimalInteger + error_test("-1"); + error_test(" 1"); + error_test("1 "); + error_test(" 1 "); + error_test("1.2"); + error_test("one"); + error_test("{$length}"); + error_test("@34"); + + // Offset must be a valid DecimalInteger + error_test("12@"); + error_test("12@-3"); + error_test("12@ 3"); + error_test("12@3 "); + error_test("12@ 3 "); + error_test("12@3.4"); + error_test("12@three"); + error_test("12@{$offset}"); + error_test("12@34@"); + + // ByteRange may not be quoted + error_test("'12@34'"); + error_test("\"12@34\""); + + // Test some valid inputs + ok_test("0", types::ByteRange{.length = 0, .offset = absl::nullopt}); + ok_test("12", types::ByteRange{.length = 12, .offset = absl::nullopt}); + ok_test("12@0", types::ByteRange{.length = 12, .offset = 0}); + ok_test("12@34", types::ByteRange{.length = 12, .offset = 34}); + ok_test("0@34", types::ByteRange{.length = 0, .offset = 34}); + ok_test("0@0", types::ByteRange{.length = 0, .offset = 0}); + + // Test max supported values + ok_test("18446744073709551615@0", + types::ByteRange{.length = 18446744073709551615u, .offset = 0}); + error_test("18446744073709551616@0"); + ok_test("0@18446744073709551615", + types::ByteRange{.length = 0, .offset = 18446744073709551615u}); + error_test("0@18446744073709551616"); + ok_test("18446744073709551615@18446744073709551615", + types::ByteRange{.length = 18446744073709551615u, + .offset = 18446744073709551615u}); + error_test("18446744073709551616@18446744073709551615"); + error_test("18446744073709551615@18446744073709551616"); + error_test("18446744073709551616@18446744073709551616"); +} + } // namespace media::hls
diff --git a/media/gpu/android/media_codec_video_decoder.cc b/media/gpu/android/media_codec_video_decoder.cc index 45b231b..135352b 100644 --- a/media/gpu/android/media_codec_video_decoder.cc +++ b/media/gpu/android/media_codec_video_decoder.cc
@@ -384,8 +384,10 @@ // We only support setting CDM at first initialization. Even if the initial // config is clear, we'll still try to set CDM since we may switch to an // encrypted config later. + const int width = decoder_config_.coded_size().width(); if (first_init && cdm_context && cdm_context->GetMediaCryptoContext()) { DCHECK(media_crypto_.is_null()); + last_width_ = width; SetCdm(cdm_context, std::move(init_cb)); return; } @@ -401,7 +403,6 @@ // Do the rest of the initialization lazily on the first decode. BindToCurrentLoop(std::move(init_cb)).Run(DecoderStatus::Codes::kOk); - const int width = decoder_config_.coded_size().width(); // On re-init, reallocate the codec if the size has changed too much. // Restrict this behavior to Q, where the behavior changed. if (first_init) {
diff --git a/media/gpu/vaapi/vaapi_video_decoder.cc b/media/gpu/vaapi/vaapi_video_decoder.cc index ba79ac13..80b3cf37 100644 --- a/media/gpu/vaapi/vaapi_video_decoder.cc +++ b/media/gpu/vaapi/vaapi_video_decoder.cc
@@ -273,14 +273,6 @@ transcryption_ = (VaapiWrapper::GetImplementationType() == VAImplementation::kMesaGallium); #endif -#if BUILDFLAG(ENABLE_PLATFORM_HEVC_DECODING) - } else if (config.codec() == VideoCodec::kHEVC && - !base::CommandLine::ForCurrentProcess()->HasSwitch( - switches::kEnableClearHevcForTesting)) { - SetErrorState("clear HEVC content is not supported"); - std::move(init_cb).Run(DecoderStatus::Codes::kUnsupportedEncryptionMode); - return; -#endif } // Initialize VAAPI wrapper.
diff --git a/media/media_options.gni b/media/media_options.gni index 442dba2..08af9a1 100644 --- a/media/media_options.gni +++ b/media/media_options.gni
@@ -57,10 +57,6 @@ enable_mse_mpeg2ts_stream_parser = proprietary_codecs && (is_chromecast || is_fuchsia || use_fuzzing_engine) - enable_platform_encrypted_hevc = - proprietary_codecs && - (use_chromeos_protected_media || (is_win && is_chrome_branded)) - # Enable Dolby Vision demuxing. Enable by default for Chromecast. Actual # decoding must be provided by the platform. Note some Dolby Vision profiles # which are encoded using HEVC require |enable_platform_hevc| to be enabled. @@ -82,24 +78,25 @@ # Enable HLS manifest parser and demuxer. enable_hls_demuxer = false + + # Enable HEVC/H265 decoding with hardware acceleration assist. Enabled by + # default for fuzzer builds, ChromeOS builds with protected content support + # and Windows. + enable_platform_hevc_decoding = + proprietary_codecs && + (use_fuzzing_engine || use_chromeos_protected_media || is_win) } +# Use another declare_args() to allow dependence on +# |enable_platform_hevc_decoding|. declare_args() { enable_av1_decoder = enable_dav1d_decoder || enable_libgav1_decoder # Enable HEVC/H265 demuxing. Actual decoding must be provided by the - # platform. Enabled by default for Chromecast, fuzzer builds and protected - # video on ChromeOS and Windows. + # platform. + # TODO(b/194429120): Enable this for Lacros builds. enable_platform_hevc = - proprietary_codecs && - (is_chromecast || use_fuzzing_engine || enable_platform_encrypted_hevc) - - # Enable HEVC/H265 decoding with hardware acceleration assist. Enabled by - # default for fuzzer builds and protected video on ChromeOS. It is also - # enabled for Chromecast by default so the unit tests get run in Chrome CQ. - enable_platform_hevc_decoding = - proprietary_codecs && - (is_chromecast || use_fuzzing_engine || use_chromeos_protected_media) + proprietary_codecs && (is_chromecast || enable_platform_hevc_decoding) } assert( @@ -114,14 +111,10 @@ "proprietary_codecs=true is required for enable_platform_hevc=true.") assert( - !enable_platform_encrypted_hevc || enable_platform_hevc, - "enable_platform_hevc=true is required for enable_platform_encrypted_hevc=true.") - -assert( !enable_platform_hevc_decoding || enable_platform_hevc, "enable_platform_hevc=true is required for enable_platform_hevc_decoding=true.") -# Use a second declare_args() to pick up possible overrides of |use_cras|. +# Use another declare_args() to pick up possible overrides of |use_cras|. declare_args() { # Enables runtime selection of PulseAudio library. use_pulseaudio = false
diff --git a/media/mojo/services/BUILD.gn b/media/mojo/services/BUILD.gn index 36e8e5f..4adecd5b 100644 --- a/media/mojo/services/BUILD.gn +++ b/media/mojo/services/BUILD.gn
@@ -258,6 +258,10 @@ "//components/chromeos_camera:mjpeg_decode_accelerator_service_unittest", ] } + + if ((is_chromeos_ash || is_linux) && (use_vaapi || use_v4l2_codec)) { + sources += [ "stable_video_decoder_service_unittest.cc" ] + } } mojolpm_fuzzer_test("webrtc_video_perf_mojolpm_fuzzer") {
diff --git a/media/mojo/services/stable_video_decoder_service_unittest.cc b/media/mojo/services/stable_video_decoder_service_unittest.cc new file mode 100644 index 0000000..c8ac1170 --- /dev/null +++ b/media/mojo/services/stable_video_decoder_service_unittest.cc
@@ -0,0 +1,130 @@ +// Copyright 2022 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "media/mojo/services/stable_video_decoder_service.h" +#include "base/test/mock_callback.h" +#include "base/test/task_environment.h" +#include "media/mojo/mojom/video_decoder.mojom.h" +#include "media/mojo/services/stable_video_decoder_factory_service.h" +#include "mojo/public/cpp/bindings/remote.h" +#include "testing/gmock/include/gmock/gmock.h" +#include "testing/gtest/include/gtest/gtest.h" + +using testing::_; +using testing::ByMove; +using testing::Mock; +using testing::Return; +using testing::StrictMock; + +namespace media { + +namespace { + +class MockVideoDecoder : public mojom::VideoDecoder { + public: + MockVideoDecoder() = default; + MockVideoDecoder(const MockVideoDecoder&) = delete; + MockVideoDecoder& operator=(const MockVideoDecoder&) = delete; + ~MockVideoDecoder() override = default; + + // mojom::VideoDecoder implementation. + MOCK_METHOD1(GetSupportedConfigs, void(GetSupportedConfigsCallback callback)); + MOCK_METHOD6( + Construct, + void(mojo::PendingAssociatedRemote<mojom::VideoDecoderClient> client, + mojo::PendingRemote<mojom::MediaLog> media_log, + mojo::PendingReceiver<mojom::VideoFrameHandleReleaser> + video_frame_handle_receiver, + mojo::ScopedDataPipeConsumerHandle decoder_buffer_pipe, + mojom::CommandBufferIdPtr command_buffer_id, + const gfx::ColorSpace& target_color_space)); + MOCK_METHOD4(Initialize, + void(const VideoDecoderConfig& config, + bool low_delay, + const absl::optional<base::UnguessableToken>& cdm_id, + InitializeCallback callback)); + MOCK_METHOD2(Decode, + void(mojom::DecoderBufferPtr buffer, DecodeCallback callback)); + MOCK_METHOD1(Reset, void(ResetCallback callback)); + MOCK_METHOD1(OnOverlayInfoChanged, void(const OverlayInfo& overlay_info)); +}; + +class StableVideoDecoderServiceTest : public testing::Test { + public: + StableVideoDecoderServiceTest() { + stable_video_decoder_factory_service_ + .SetVideoDecoderCreationCallbackForTesting( + video_decoder_creation_cb_.Get()); + } + + StableVideoDecoderServiceTest(const StableVideoDecoderServiceTest&) = delete; + StableVideoDecoderServiceTest& operator=( + const StableVideoDecoderServiceTest&) = delete; + ~StableVideoDecoderServiceTest() override = default; + + void SetUp() override { + mojo::PendingReceiver<stable::mojom::StableVideoDecoderFactory> + stable_video_decoder_factory_receiver; + stable_video_decoder_factory_remote_ = + mojo::Remote<stable::mojom::StableVideoDecoderFactory>( + stable_video_decoder_factory_receiver + .InitWithNewPipeAndPassRemote()); + stable_video_decoder_factory_service_.BindReceiver( + std::move(stable_video_decoder_factory_receiver)); + ASSERT_TRUE(stable_video_decoder_factory_remote_.is_connected()); + } + + protected: + mojo::Remote<stable::mojom::StableVideoDecoder> CreateStableVideoDecoder( + std::unique_ptr<StrictMock<MockVideoDecoder>> dst_video_decoder) { + // Each CreateStableVideoDecoder() should result in exactly one call to the + // video decoder creation callback, i.e., the + // StableVideoDecoderFactoryService should not re-use mojom::VideoDecoder + // implementation instances. + EXPECT_CALL(video_decoder_creation_cb_, Run(_, _)) + .WillOnce(Return(ByMove(std::move(dst_video_decoder)))); + mojo::PendingReceiver<stable::mojom::StableVideoDecoder> + stable_video_decoder_receiver; + mojo::Remote<stable::mojom::StableVideoDecoder> video_decoder_remote( + stable_video_decoder_receiver.InitWithNewPipeAndPassRemote()); + stable_video_decoder_factory_remote_->CreateStableVideoDecoder( + std::move(stable_video_decoder_receiver)); + stable_video_decoder_factory_remote_.FlushForTesting(); + if (!Mock::VerifyAndClearExpectations(&video_decoder_creation_cb_)) + return {}; + return video_decoder_remote; + } + + base::test::TaskEnvironment task_environment_; + StrictMock<base::MockRepeatingCallback<std::unique_ptr< + mojom::VideoDecoder>(MojoMediaClient*, MojoCdmServiceContext*)>> + video_decoder_creation_cb_; + StableVideoDecoderFactoryService stable_video_decoder_factory_service_; + mojo::Remote<stable::mojom::StableVideoDecoderFactory> + stable_video_decoder_factory_remote_; + mojo::Remote<stable::mojom::StableVideoDecoder> stable_video_decoder_remote_; +}; + +// Tests that we can create multiple StableVideoDecoder implementation instances +// through the StableVideoDecoderFactory and that they can exist concurrently. +TEST_F(StableVideoDecoderServiceTest, FactoryCanCreateStableVideoDecoders) { + std::vector<mojo::Remote<stable::mojom::StableVideoDecoder>> + stable_video_decoder_remotes; + constexpr size_t kNumConcurrentDecoders = 5u; + for (size_t i = 0u; i < kNumConcurrentDecoders; i++) { + auto mock_video_decoder = std::make_unique<StrictMock<MockVideoDecoder>>(); + auto stable_video_decoder_remote = + CreateStableVideoDecoder(std::move(mock_video_decoder)); + stable_video_decoder_remotes.push_back( + std::move(stable_video_decoder_remote)); + } + for (const auto& remote : stable_video_decoder_remotes) { + ASSERT_TRUE(remote.is_bound()); + ASSERT_TRUE(remote.is_connected()); + } +} + +} // namespace + +} // namespace media
diff --git a/media/test/pipeline_integration_test.cc b/media/test/pipeline_integration_test.cc index 36916a73..a52365f7 100644 --- a/media/test/pipeline_integration_test.cc +++ b/media/test/pipeline_integration_test.cc
@@ -2636,18 +2636,8 @@ TestMediaSource source("bear-320x240-v_frag-hevc.mp4", kMp4HevcVideoOnly, kAppendWholeFile); #if BUILDFLAG(ENABLE_PLATFORM_HEVC) -#if BUILDFLAG(ENABLE_PLATFORM_ENCRYPTED_HEVC) - // HEVC is only supported through EME under this build flag. So this - // unencrypted track cannot be demuxed. - source.set_expected_append_result( - TestMediaSource::ExpectedAppendResult::kFailure); - EXPECT_EQ( - CHUNK_DEMUXER_ERROR_APPEND_FAILED, - StartPipelineWithMediaSource(&source, kExpectDemuxerFailure, nullptr)); -#else PipelineStatus status = StartPipelineWithMediaSource(&source); EXPECT_TRUE(status == PIPELINE_OK || status == DECODER_ERROR_NOT_SUPPORTED); -#endif // BUILDFLAG(ENABLE_PLATFORM_ENCRYPTED_HEVC) #else EXPECT_EQ( DEMUXER_ERROR_COULD_NOT_OPEN, @@ -2661,18 +2651,8 @@ TestMediaSource source("bear-320x240-v_frag-hevc.mp4", kMp4Hev1VideoOnly, kAppendWholeFile); #if BUILDFLAG(ENABLE_PLATFORM_HEVC) -#if BUILDFLAG(ENABLE_PLATFORM_ENCRYPTED_HEVC) - // HEVC is only supported through EME under this build flag. So this - // unencrypted track cannot be demuxed. - source.set_expected_append_result( - TestMediaSource::ExpectedAppendResult::kFailure); - EXPECT_EQ( - CHUNK_DEMUXER_ERROR_APPEND_FAILED, - StartPipelineWithMediaSource(&source, kExpectDemuxerFailure, nullptr)); -#else PipelineStatus status = StartPipelineWithMediaSource(&source); EXPECT_TRUE(status == PIPELINE_OK || status == DECODER_ERROR_NOT_SUPPORTED); -#endif // BUILDFLAG(ENABLE_PLATFORM_ENCRYPTED_HEVC) #else EXPECT_EQ( DEMUXER_ERROR_COULD_NOT_OPEN,
diff --git a/pdf/pdf_view_plugin_base.cc b/pdf/pdf_view_plugin_base.cc index 34da2273..fd2217a 100644 --- a/pdf/pdf_view_plugin_base.cc +++ b/pdf/pdf_view_plugin_base.cc
@@ -1326,22 +1326,6 @@ UpdateScroll(GetScrollPositionFromOffset(scroll_offset)); } -void PdfViewPluginBase::DidStartLoading() { - if (did_call_start_loading_) - return; - - PluginDidStartLoading(); - did_call_start_loading_ = true; -} - -void PdfViewPluginBase::DidStopLoading() { - if (!did_call_start_loading_) - return; - - PluginDidStopLoading(); - did_call_start_loading_ = false; -} - void PdfViewPluginBase::SaveToFile(const std::string& token) { engine()->KillFormFocus(); ConsumeSaveToken(token);
diff --git a/pdf/pdf_view_plugin_base.h b/pdf/pdf_view_plugin_base.h index 19cb1343..a06836e7 100644 --- a/pdf/pdf_view_plugin_base.h +++ b/pdf/pdf_view_plugin_base.h
@@ -153,10 +153,6 @@ // Gets the accessibility doc info based on the information from `engine_`. AccessibilityDocInfo GetAccessibilityDocInfo() const; - bool GetDidCallStartLoadingForTesting() const { - return did_call_start_loading_; - } - bool UnsupportedFeatureIsReportedForTesting(const std::string& feature) const; bool GetNotifiedBrowserAboutUnsupportedFeatureForTesting() const { @@ -344,8 +340,8 @@ virtual void SetPluginCanSave(bool can_save) = 0; // Sends start/stop loading notifications to the plugin's render frame. - virtual void PluginDidStartLoading() = 0; - virtual void PluginDidStopLoading() = 0; + virtual void DidStartLoading() = 0; + virtual void DidStopLoading() = 0; // Requests the plugin's render frame to set up a print dialog for the // document. @@ -430,11 +426,6 @@ void HandleStopScrollingMessage(const base::Value::Dict& /*message*/); void HandleViewportMessage(const base::Value::Dict& message); - // Sends start/stop loading notifications to the plugin's render frame - // depending on `did_call_start_loading_`. - void DidStartLoading(); - void DidStopLoading(); - // Saves the document to a file. void SaveToFile(const std::string& token); @@ -571,11 +562,6 @@ // The current state of document load. DocumentLoadState document_load_state_ = DocumentLoadState::kLoading; - // If true, the render frame has been notified that we're starting a network - // request so that it can start the throbber. It will be notified again once - // the document finishes loading. - bool did_call_start_loading_ = false; - // The current state of accessibility. AccessibilityState accessibility_state_ = AccessibilityState::kOff;
diff --git a/pdf/pdf_view_plugin_base_unittest.cc b/pdf/pdf_view_plugin_base_unittest.cc index 14dfd399..5653343 100644 --- a/pdf/pdf_view_plugin_base_unittest.cc +++ b/pdf/pdf_view_plugin_base_unittest.cc
@@ -150,9 +150,8 @@ MOCK_METHOD(void, SetPluginCanSave, (bool), (override)); - MOCK_METHOD(void, PluginDidStartLoading, (), (override)); - - MOCK_METHOD(void, PluginDidStopLoading, (), (override)); + MOCK_METHOD(void, DidStartLoading, (), (override)); + MOCK_METHOD(void, DidStopLoading, (), (override)); MOCK_METHOD(void, InvokePrintDialog, (), (override)); @@ -287,32 +286,6 @@ })"))); } -TEST_F(PdfViewPluginBaseTest, CreateUrlLoaderInFullFrame) { - fake_plugin_.set_full_frame_for_testing(true); - ASSERT_TRUE(fake_plugin_.full_frame()); - - EXPECT_FALSE(fake_plugin_.GetDidCallStartLoadingForTesting()); - EXPECT_CALL(fake_plugin_, SetContentRestrictions(kContentRestrictionSave | - kContentRestrictionPrint)); - EXPECT_CALL(fake_plugin_, PluginDidStartLoading); - EXPECT_CALL(fake_plugin_, CreateUrlLoaderInternal); - fake_plugin_.CreateUrlLoader(); - EXPECT_TRUE(fake_plugin_.GetDidCallStartLoadingForTesting()); -} - -TEST_F(PdfViewPluginBaseTest, CreateUrlLoaderWithoutFullFrame) { - ASSERT_FALSE(fake_plugin_.full_frame()); - - EXPECT_FALSE(fake_plugin_.GetDidCallStartLoadingForTesting()); - EXPECT_CALL(fake_plugin_, SetContentRestrictions(kContentRestrictionSave | - kContentRestrictionPrint)) - .Times(0); - EXPECT_CALL(fake_plugin_, PluginDidStartLoading).Times(0); - EXPECT_CALL(fake_plugin_, CreateUrlLoaderInternal); - fake_plugin_.CreateUrlLoader(); - EXPECT_FALSE(fake_plugin_.GetDidCallStartLoadingForTesting()); -} - TEST_F(PdfViewPluginBaseWithoutDocInfoTest, DocumentLoadCompleteInFullFramePdfViewerWithAccessibilityEnabled) { // Notify the render frame about document loading. @@ -332,7 +305,7 @@ EXPECT_CALL(fake_plugin_, UserMetricsRecordAction("PDF.LoadSuccess")); EXPECT_CALL(fake_plugin_, SetFormTextFieldInFocus(false)); - EXPECT_CALL(fake_plugin_, PluginDidStopLoading()); + EXPECT_CALL(fake_plugin_, DidStopLoading()); EXPECT_CALL(fake_plugin_, SetContentRestrictions(fake_plugin_.GetContentRestrictions())); EXPECT_CALL(fake_plugin_, @@ -365,7 +338,7 @@ EXPECT_CALL(fake_plugin_, UserMetricsRecordAction("PDF.LoadSuccess")); EXPECT_CALL(fake_plugin_, SetFormTextFieldInFocus(false)); - EXPECT_CALL(fake_plugin_, PluginDidStopLoading()); + EXPECT_CALL(fake_plugin_, DidStopLoading()); EXPECT_CALL(fake_plugin_, SetContentRestrictions(fake_plugin_.GetContentRestrictions())); EXPECT_CALL(fake_plugin_, @@ -395,7 +368,7 @@ EXPECT_CALL(fake_plugin_, UserMetricsRecordAction("PDF.LoadSuccess")); EXPECT_CALL(fake_plugin_, SetFormTextFieldInFocus(false)); - EXPECT_CALL(fake_plugin_, PluginDidStopLoading()).Times(0); + EXPECT_CALL(fake_plugin_, DidStopLoading()).Times(0); EXPECT_CALL(fake_plugin_, SetContentRestrictions(fake_plugin_.GetContentRestrictions())) .Times(0); @@ -410,41 +383,6 @@ fake_plugin_.sent_messages()[0]); } -TEST_F(PdfViewPluginBaseTest, DocumentLoadFailedWithNotifiedRenderFrame) { - // Notify the render frame about document loading. - fake_plugin_.set_full_frame_for_testing(true); - ASSERT_TRUE(fake_plugin_.full_frame()); - fake_plugin_.CreateUrlLoader(); - - ASSERT_EQ(PdfViewPluginBase::DocumentLoadState::kLoading, - fake_plugin_.document_load_state_for_testing()); - EXPECT_TRUE(fake_plugin_.GetDidCallStartLoadingForTesting()); - - EXPECT_CALL(fake_plugin_, UserMetricsRecordAction("PDF.LoadFailure")); - EXPECT_CALL(fake_plugin_, PluginDidStopLoading()); - - fake_plugin_.DocumentLoadFailed(); - EXPECT_EQ(PdfViewPluginBase::DocumentLoadState::kFailed, - fake_plugin_.document_load_state_for_testing()); - EXPECT_FALSE(fake_plugin_.GetDidCallStartLoadingForTesting()); -} - -TEST_F(PdfViewPluginBaseTest, DocumentLoadFailedWithoutNotifiedRenderFrame) { - // The render frame has never been notified about document loading before. - ASSERT_FALSE(fake_plugin_.full_frame()); - EXPECT_FALSE(fake_plugin_.GetDidCallStartLoadingForTesting()); - - ASSERT_EQ(PdfViewPluginBase::DocumentLoadState::kLoading, - fake_plugin_.document_load_state_for_testing()); - EXPECT_CALL(fake_plugin_, UserMetricsRecordAction("PDF.LoadFailure")); - EXPECT_CALL(fake_plugin_, PluginDidStopLoading()).Times(0); - - fake_plugin_.DocumentLoadFailed(); - EXPECT_EQ(PdfViewPluginBase::DocumentLoadState::kFailed, - fake_plugin_.document_load_state_for_testing()); - EXPECT_FALSE(fake_plugin_.GetDidCallStartLoadingForTesting()); -} - TEST_F(PdfViewPluginBaseTest, DocumentHasUnsupportedFeatureInFullFrame) { fake_plugin_.set_full_frame_for_testing(true); ASSERT_TRUE(fake_plugin_.full_frame());
diff --git a/pdf/pdf_view_web_plugin.cc b/pdf/pdf_view_web_plugin.cc index aa58525a..f4816af 100644 --- a/pdf/pdf_view_web_plugin.cc +++ b/pdf/pdf_view_web_plugin.cc
@@ -65,7 +65,6 @@ #include "third_party/blink/public/web/web_associated_url_loader_options.h" #include "third_party/blink/public/web/web_document.h" #include "third_party/blink/public/web/web_frame.h" -#include "third_party/blink/public/web/web_local_frame_client.h" #include "third_party/blink/public/web/web_plugin_container.h" #include "third_party/blink/public/web/web_plugin_params.h" #include "third_party/blink/public/web/web_print_preset_options.h" @@ -880,20 +879,20 @@ service->SetPluginCanSave(can_save); } -void PdfViewWebPlugin::PluginDidStartLoading() { - auto* client = client_->GetWebLocalFrameClient(); - if (!client) +void PdfViewWebPlugin::DidStartLoading() { + if (did_call_start_loading_) return; - client->DidStartLoading(); + client_->DidStartLoading(); + did_call_start_loading_ = true; } -void PdfViewWebPlugin::PluginDidStopLoading() { - auto* client = client_->GetWebLocalFrameClient(); - if (!client) +void PdfViewWebPlugin::DidStopLoading() { + if (!did_call_start_loading_) return; - client->DidStopLoading(); + client_->DidStopLoading(); + did_call_start_loading_ = false; } void PdfViewWebPlugin::InvokePrintDialog() {
diff --git a/pdf/pdf_view_web_plugin.h b/pdf/pdf_view_web_plugin.h index 5d96958f..9ef7e3921 100644 --- a/pdf/pdf_view_web_plugin.h +++ b/pdf/pdf_view_web_plugin.h
@@ -34,7 +34,6 @@ namespace blink { class WebAssociatedURLLoader; -class WebLocalFrameClient; class WebURL; class WebURLRequest; struct WebAssociatedURLLoaderOptions; @@ -163,9 +162,11 @@ // Returns whether the plugin container's frame exists. virtual bool HasFrame() const = 0; - // Returns the local frame's client (render frame). May be null in unit - // tests. - virtual blink::WebLocalFrameClient* GetWebLocalFrameClient() = 0; + // Notifies the frame's client that the plugin started loading. + virtual void DidStartLoading() = 0; + + // Notifies the frame's client that the plugin stopped loading. + virtual void DidStopLoading() = 0; // Prints the plugin element. virtual void Print() {} @@ -327,8 +328,8 @@ AccessibilityViewportInfo viewport_info) override; void SetContentRestrictions(int content_restrictions) override; void SetPluginCanSave(bool can_save) override; - void PluginDidStartLoading() override; - void PluginDidStopLoading() override; + void DidStartLoading() override; + void DidStopLoading() override; void InvokePrintDialog() override; void NotifySelectionChanged(const gfx::PointF& left, int left_height, @@ -456,6 +457,11 @@ // The plugin rect in CSS pixels. gfx::Rect css_plugin_rect_; + // If true, the render frame has been notified that we're starting a network + // request so that it can start the throbber. It will be notified again once + // the document finishes loading. + bool did_call_start_loading_ = false; + // Used for submitting forms. std::unique_ptr<UrlLoader> form_loader_;
diff --git a/pdf/pdf_view_web_plugin_unittest.cc b/pdf/pdf_view_web_plugin_unittest.cc index 850050d..6a831bf 100644 --- a/pdf/pdf_view_web_plugin_unittest.cc +++ b/pdf/pdf_view_web_plugin_unittest.cc
@@ -22,8 +22,13 @@ #include "cc/paint/paint_canvas.h" #include "cc/test/pixel_comparator.h" #include "cc/test/pixel_test_utils.h" +#include "mojo/public/cpp/bindings/associated_receiver.h" +#include "mojo/public/cpp/bindings/associated_remote.h" #include "net/cookies/site_for_cookies.h" +#include "pdf/content_restriction.h" +#include "pdf/mojom/pdf.mojom.h" #include "pdf/paint_ready_rect.h" +#include "pdf/pdf_view_plugin_base.h" #include "pdf/test/test_helpers.h" #include "pdf/test/test_pdfium_engine.h" #include "testing/gmock/include/gmock/gmock.h" @@ -285,10 +290,29 @@ MOCK_METHOD(bool, HasFrame, (), (const override)); - MOCK_METHOD(blink::WebLocalFrameClient*, - GetWebLocalFrameClient, - (), + MOCK_METHOD(void, DidStartLoading, (), (override)); + MOCK_METHOD(void, DidStopLoading, (), (override)); + + MOCK_METHOD(void, RecordComputedAction, (const std::string&), (override)); +}; + +class FakePdfService : public pdf::mojom::PdfService { + public: + MOCK_METHOD(void, + SetListener, + (mojo::PendingRemote<pdf::mojom::PdfListener>), (override)); + MOCK_METHOD(void, UpdateContentRestrictions, (int32_t), (override)); + MOCK_METHOD(void, HasUnsupportedFeature, (), (override)); + MOCK_METHOD(void, + SaveUrlAs, + (const GURL&, network::mojom::ReferrerPolicy), + (override)); + MOCK_METHOD(void, + SelectionChanged, + (const gfx::PointF&, int32_t, const gfx::PointF&, int32_t), + (override)); + MOCK_METHOD(void, SetPluginCanSave, (bool), (override)); }; } // namespace @@ -301,6 +325,15 @@ void operator()(PdfViewWebPlugin* ptr) { ptr->Destroy(); } }; + static void AddToPluginParams(base::StringPiece name, + base::StringPiece value, + blink::WebPluginParams& params) { + params.attribute_names.push_back( + blink::WebString::FromUTF8(name.data(), name.size())); + params.attribute_values.push_back( + blink::WebString::FromUTF8(value.data(), value.size())); + } + void SetUpPlugin(base::StringPiece document_url, const blink::WebPluginParams& params) { auto client = std::make_unique<NiceMock<FakePdfViewWebPluginClient>>(); @@ -321,24 +354,34 @@ }); SetUpClient(); - mojo::AssociatedRemote<pdf::mojom::PdfService> unbound_remote; plugin_ = std::unique_ptr<PdfViewWebPlugin, PluginDeleter>(new PdfViewWebPlugin( - std::move(client), std::move(unbound_remote), params)); + std::move(client), + mojo::AssociatedRemote<pdf::mojom::PdfService>( + pdf_receiver_.BindNewEndpointAndPassDedicatedRemote()), + params)); } void SetUpPluginWithUrl(const std::string& url) { blink::WebPluginParams params; - params.attribute_names.push_back("src"); - params.attribute_values.push_back(blink::WebString::FromUTF8(url)); + AddToPluginParams("src", url, params); + SetUpPluginParams(params); + SetUpPlugin(url, params); } + // Allows derived classes to customize plugin parameters within + // `SetUpPluginWithUrl()`. + virtual void SetUpPluginParams(blink::WebPluginParams& params) {} + // Allows derived classes to customize `client_ptr_` within `SetUpPlugin()`. virtual void SetUpClient() {} void TearDown() override { plugin_.reset(); } + NiceMock<FakePdfService> pdf_service_; + mojo::AssociatedReceiver<pdf::mojom::PdfService> pdf_receiver_{&pdf_service_}; + raw_ptr<FakePdfViewWebPluginClient> client_ptr_; std::unique_ptr<PdfViewWebPlugin, PluginDeleter> plugin_; raw_ptr<TestPDFiumEngine> engine_ptr_; @@ -450,6 +493,13 @@ gfx::Canvas canvas_{kCanvasSize, /*image_scale=*/1.0f, /*is_opaque=*/true}; }; +class PdfViewWebPluginFullFrameTest : public PdfViewWebPluginTest { + protected: + void SetUpPluginParams(blink::WebPluginParams& params) override { + AddToPluginParams("full-frame", "full-frame", params); + } +}; + TEST_F(PdfViewWebPluginWithoutInitializeTest, Initialize) { SetUpPluginWithUrl("http://localhost/example.pdf"); @@ -501,6 +551,65 @@ EXPECT_TRUE(plugin_->InitializeForTesting()); } +TEST_F(PdfViewWebPluginTest, CreateUrlLoader) { + EXPECT_CALL(*client_ptr_, DidStartLoading).Times(0); + EXPECT_CALL(pdf_service_, UpdateContentRestrictions).Times(0); + plugin_->CreateUrlLoader(); + + EXPECT_EQ(PdfViewPluginBase::DocumentLoadState::kLoading, + plugin_->document_load_state_for_testing()); + pdf_receiver_.FlushForTesting(); +} + +TEST_F(PdfViewWebPluginFullFrameTest, CreateUrlLoader) { + EXPECT_CALL(*client_ptr_, DidStartLoading); + EXPECT_CALL(pdf_service_, + UpdateContentRestrictions(kContentRestrictionSave | + kContentRestrictionPrint)); + plugin_->CreateUrlLoader(); + + EXPECT_EQ(PdfViewPluginBase::DocumentLoadState::kLoading, + plugin_->document_load_state_for_testing()); + pdf_receiver_.FlushForTesting(); +} + +TEST_F(PdfViewWebPluginFullFrameTest, CreateUrlLoaderMultipleTimes) { + plugin_->CreateUrlLoader(); + + EXPECT_CALL(*client_ptr_, DidStartLoading).Times(0); + plugin_->CreateUrlLoader(); +} + +TEST_F(PdfViewWebPluginFullFrameTest, CreateUrlLoaderAfterDocumentLoadFailed) { + plugin_->CreateUrlLoader(); + plugin_->DocumentLoadFailed(); + + EXPECT_CALL(*client_ptr_, DidStartLoading); + plugin_->CreateUrlLoader(); +} + +TEST_F(PdfViewWebPluginTest, DocumentLoadFailed) { + plugin_->CreateUrlLoader(); + + EXPECT_CALL(*client_ptr_, RecordComputedAction("PDF.LoadFailure")); + EXPECT_CALL(*client_ptr_, DidStopLoading).Times(0); + plugin_->DocumentLoadFailed(); + + EXPECT_EQ(PdfViewPluginBase::DocumentLoadState::kFailed, + plugin_->document_load_state_for_testing()); +} + +TEST_F(PdfViewWebPluginFullFrameTest, DocumentLoadFailed) { + plugin_->CreateUrlLoader(); + + EXPECT_CALL(*client_ptr_, RecordComputedAction("PDF.LoadFailure")); + EXPECT_CALL(*client_ptr_, DidStopLoading); + plugin_->DocumentLoadFailed(); + + EXPECT_EQ(PdfViewPluginBase::DocumentLoadState::kFailed, + plugin_->document_load_state_for_testing()); +} + TEST_F(PdfViewWebPluginTest, UpdateGeometrySetsPluginRect) { EXPECT_CALL(*engine_ptr_, ZoomUpdated(2.0f)); TestUpdateGeometrySetsPluginRect(
diff --git a/remoting/host/desktop_resizer.h b/remoting/host/desktop_resizer.h index 8f414a8..ecf914dc 100644 --- a/remoting/host/desktop_resizer.h +++ b/remoting/host/desktop_resizer.h
@@ -9,9 +9,18 @@ #include <memory> #include "remoting/host/base/screen_resolution.h" +#include "third_party/abseil-cpp/absl/types/optional.h" +#include "third_party/webrtc/modules/desktop_capture/desktop_capture_types.h" namespace remoting { +// Interface for resizing the desktop displays. These methods take an optional +// |screen_id| parameter to resize an individual monitor. If |screen_id| refers +// to a monitor that no longer exists, the implementation should do nothing, or +// return empty data. If |screen_id| is not provided, the implementation should +// operate on the single monitor if there is only one. If there are several +// monitors, the implementation should fall back to the legacy (per-platform) +// behavior. class DesktopResizer { public: virtual ~DesktopResizer() {} @@ -19,11 +28,13 @@ // Create a platform-specific DesktopResizer instance. static std::unique_ptr<DesktopResizer> Create(); - // Return the current resolution of the desktop. - virtual ScreenResolution GetCurrentResolution() = 0; + // Return the current resolution of the monitor. + virtual ScreenResolution GetCurrentResolution( + absl::optional<webrtc::ScreenId> screen_id) = 0; - // Get the list of supported resolutions, which should ideally include - // |preferred|. Implementations will generally do one of the following: + // Get the list of supported resolutions for the monitor, which should ideally + // include |preferred|. Implementations will generally do one of the + // following: // 1. Return the list of resolutions supported by the underlying video // driver, regardless of |preferred|. // 2. Return a list containing just |preferred|, perhaps after imposing @@ -31,19 +42,23 @@ // there are no constraints imposed by the underlying video driver. // 3. Return an empty list if resize is not supported. virtual std::list<ScreenResolution> GetSupportedResolutions( - const ScreenResolution& preferred) = 0; + const ScreenResolution& preferred, + absl::optional<webrtc::ScreenId> screen_id) = 0; - // Set the resolution of the desktop. |resolution| must be one of the + // Set the resolution of the monitor. |resolution| must be one of the // resolutions previously returned by |GetSupportedResolutions|. Note that // implementations should fail gracefully if the specified resolution is no // longer supported, since monitor configurations may change on the fly. - virtual void SetResolution(const ScreenResolution& resolution) = 0; + virtual void SetResolution(const ScreenResolution& resolution, + absl::optional<webrtc::ScreenId> screen_id) = 0; - // Restore the original desktop resolution. The caller must provide the - // original resolution of the desktop, as returned by |GetCurrentResolution|, + // Restore the original monitor resolution. The caller must provide the + // original resolution of the monitor, as returned by GetCurrentResolution(), // as a hint. However, implementations are free to ignore this. For example, // virtual hosts will typically ignore it to avoid unnecessary resizes. - virtual void RestoreResolution(const ScreenResolution& original) = 0; + virtual void RestoreResolution( + const ScreenResolution& original, + absl::optional<webrtc::ScreenId> screen_id) = 0; }; } // namespace remoting
diff --git a/remoting/host/desktop_resizer_linux.cc b/remoting/host/desktop_resizer_linux.cc index dd029d00..b4c55d3 100644 --- a/remoting/host/desktop_resizer_linux.cc +++ b/remoting/host/desktop_resizer_linux.cc
@@ -21,22 +21,26 @@ DesktopResizerLinux& operator=(const DesktopResizerLinux&) = delete; ~DesktopResizerLinux() override = default; - ScreenResolution GetCurrentResolution() override { + ScreenResolution GetCurrentResolution( + absl::optional<webrtc::ScreenId> screen_id) override { NOTIMPLEMENTED(); return ScreenResolution(); } std::list<ScreenResolution> GetSupportedResolutions( - const ScreenResolution& preferred) override { + const ScreenResolution& preferred, + absl::optional<webrtc::ScreenId> screen_id) override { NOTIMPLEMENTED(); return std::list<ScreenResolution>(); } - void SetResolution(const ScreenResolution& resolution) override { + void SetResolution(const ScreenResolution& resolution, + absl::optional<webrtc::ScreenId> screen_id) override { NOTIMPLEMENTED(); } - void RestoreResolution(const ScreenResolution& original) override { + void RestoreResolution(const ScreenResolution& original, + absl::optional<webrtc::ScreenId> screen_id) override { NOTIMPLEMENTED(); } };
diff --git a/remoting/host/desktop_resizer_mac.cc b/remoting/host/desktop_resizer_mac.cc index f767e5d..708a8ac4f 100644 --- a/remoting/host/desktop_resizer_mac.cc +++ b/remoting/host/desktop_resizer_mac.cc
@@ -27,11 +27,15 @@ DesktopResizerMac& operator=(const DesktopResizerMac&) = delete; // DesktopResizer interface - ScreenResolution GetCurrentResolution() override; + ScreenResolution GetCurrentResolution( + absl::optional<webrtc::ScreenId> screen_id) override; std::list<ScreenResolution> GetSupportedResolutions( - const ScreenResolution& preferred) override; - void SetResolution(const ScreenResolution& resolution) override; - void RestoreResolution(const ScreenResolution& original) override; + const ScreenResolution& preferred, + absl::optional<webrtc::ScreenId> screen_id) override; + void SetResolution(const ScreenResolution& resolution, + absl::optional<webrtc::ScreenId> screen_id) override; + void RestoreResolution(const ScreenResolution& original, + absl::optional<webrtc::ScreenId> screen_id) override; private: // If there is a single display, get its id and return true, otherwise return @@ -43,7 +47,8 @@ std::list<ScreenResolution>* resolutions); }; -ScreenResolution DesktopResizerMac::GetCurrentResolution() { +ScreenResolution DesktopResizerMac::GetCurrentResolution( + absl::optional<webrtc::ScreenId> screen_id) { CGDirectDisplayID display; if (GetSoleDisplayId(&display)) { CGRect rect = CGDisplayBounds(display); @@ -55,14 +60,17 @@ } std::list<ScreenResolution> DesktopResizerMac::GetSupportedResolutions( - const ScreenResolution& preferred) { + const ScreenResolution& preferred, + absl::optional<webrtc::ScreenId> screen_id) { base::ScopedCFTypeRef<CFMutableArrayRef> modes; std::list<ScreenResolution> resolutions; GetSupportedModesAndResolutions(&modes, &resolutions); return resolutions; } -void DesktopResizerMac::SetResolution(const ScreenResolution& resolution) { +void DesktopResizerMac::SetResolution( + const ScreenResolution& resolution, + absl::optional<webrtc::ScreenId> screen_id) { CGDirectDisplayID display; if (!GetSoleDisplayId(&display)) { return; @@ -112,8 +120,10 @@ } } -void DesktopResizerMac::RestoreResolution(const ScreenResolution& original) { - SetResolution(original); +void DesktopResizerMac::RestoreResolution( + const ScreenResolution& original, + absl::optional<webrtc::ScreenId> screen_id) { + SetResolution(original, screen_id); } void DesktopResizerMac::GetSupportedModesAndResolutions(
diff --git a/remoting/host/desktop_resizer_win.cc b/remoting/host/desktop_resizer_win.cc index 007fc3e..63c5ad9 100644 --- a/remoting/host/desktop_resizer_win.cc +++ b/remoting/host/desktop_resizer_win.cc
@@ -40,11 +40,15 @@ ~DesktopResizerWin() override; // DesktopResizer interface. - ScreenResolution GetCurrentResolution() override; + ScreenResolution GetCurrentResolution( + absl::optional<webrtc::ScreenId> screen_id) override; std::list<ScreenResolution> GetSupportedResolutions( - const ScreenResolution& preferred) override; - void SetResolution(const ScreenResolution& resolution) override; - void RestoreResolution(const ScreenResolution& original) override; + const ScreenResolution& preferred, + absl::optional<webrtc::ScreenId> screen_id) override; + void SetResolution(const ScreenResolution& resolution, + absl::optional<webrtc::ScreenId> screen_id) override; + void RestoreResolution(const ScreenResolution& original, + absl::optional<webrtc::ScreenId> screen_id) override; private: void UpdateBestModeForResolution(const DEVMODE& current_mode, @@ -79,7 +83,8 @@ DesktopResizerWin::~DesktopResizerWin() { } -ScreenResolution DesktopResizerWin::GetCurrentResolution() { +ScreenResolution DesktopResizerWin::GetCurrentResolution( + absl::optional<webrtc::ScreenId> screen_id) { DEVMODE current_mode; if (GetPrimaryDisplayMode(ENUM_CURRENT_SETTINGS, 0, ¤t_mode) && IsModeValid(current_mode)) @@ -88,7 +93,8 @@ } std::list<ScreenResolution> DesktopResizerWin::GetSupportedResolutions( - const ScreenResolution& preferred) { + const ScreenResolution& preferred, + absl::optional<webrtc::ScreenId> screen_id) { if (!IsResizeSupported()) return std::list<ScreenResolution>(); @@ -115,7 +121,9 @@ return resolutions; } -void DesktopResizerWin::SetResolution(const ScreenResolution& resolution) { +void DesktopResizerWin::SetResolution( + const ScreenResolution& resolution, + absl::optional<webrtc::ScreenId> screen_id) { if (best_mode_for_resolution_.count(resolution) == 0) return; @@ -125,7 +133,9 @@ LOG(ERROR) << "SetResolution failed: " << result; } -void DesktopResizerWin::RestoreResolution(const ScreenResolution& original) { +void DesktopResizerWin::RestoreResolution( + const ScreenResolution& original, + absl::optional<webrtc::ScreenId> screen_id) { // Restore the display mode based on the registry configuration. DWORD result = ChangeDisplaySettings(nullptr, 0); if (result != DISP_CHANGE_SUCCESSFUL)
diff --git a/remoting/host/desktop_resizer_x11.cc b/remoting/host/desktop_resizer_x11.cc index 546b477..e2e5537 100644 --- a/remoting/host/desktop_resizer_x11.cc +++ b/remoting/host/desktop_resizer_x11.cc
@@ -124,7 +124,8 @@ DesktopResizerX11::~DesktopResizerX11() = default; -ScreenResolution DesktopResizerX11::GetCurrentResolution() { +ScreenResolution DesktopResizerX11::GetCurrentResolution( + absl::optional<webrtc::ScreenId> screen_id) { // Process pending events so that the connection setup data is updated // with the correct display metrics. if (has_randr_) @@ -138,7 +139,8 @@ } std::list<ScreenResolution> DesktopResizerX11::GetSupportedResolutions( - const ScreenResolution& preferred) { + const ScreenResolution& preferred, + absl::optional<webrtc::ScreenId> screen_id) { std::list<ScreenResolution> result; if (!has_randr_) return result; @@ -170,7 +172,9 @@ return result; } -void DesktopResizerX11::SetResolution(const ScreenResolution& resolution) { +void DesktopResizerX11::SetResolution( + const ScreenResolution& resolution, + absl::optional<webrtc::ScreenId> screen_id) { if (!has_randr_) return; @@ -190,8 +194,10 @@ SetResolutionExistingMode(resolution); } -void DesktopResizerX11::RestoreResolution(const ScreenResolution& original) { - SetResolution(original); +void DesktopResizerX11::RestoreResolution( + const ScreenResolution& original, + absl::optional<webrtc::ScreenId> screen_id) { + SetResolution(original, screen_id); } void DesktopResizerX11::SetResolutionNewMode(
diff --git a/remoting/host/desktop_resizer_x11.h b/remoting/host/desktop_resizer_x11.h index 836fbb3e6..75b0e2fb 100644 --- a/remoting/host/desktop_resizer_x11.h +++ b/remoting/host/desktop_resizer_x11.h
@@ -46,11 +46,15 @@ ~DesktopResizerX11() override; // DesktopResizer interface - ScreenResolution GetCurrentResolution() override; + ScreenResolution GetCurrentResolution( + absl::optional<webrtc::ScreenId> screen_id) override; std::list<ScreenResolution> GetSupportedResolutions( - const ScreenResolution& preferred) override; - void SetResolution(const ScreenResolution& resolution) override; - void RestoreResolution(const ScreenResolution& original) override; + const ScreenResolution& preferred, + absl::optional<webrtc::ScreenId> screen_id) override; + void SetResolution(const ScreenResolution& resolution, + absl::optional<webrtc::ScreenId> screen_id) override; + void RestoreResolution(const ScreenResolution& original, + absl::optional<webrtc::ScreenId> screen_id) override; private: // Add a mode matching the specified resolution and switch to it.
diff --git a/remoting/host/resizing_host_observer.cc b/remoting/host/resizing_host_observer.cc index 131db069..d50896b 100644 --- a/remoting/host/resizing_host_observer.cc +++ b/remoting/host/resizing_host_observer.cc
@@ -158,9 +158,9 @@ } // If the implementation returns any resolutions, pick the best one according - // to the algorithm described in CandidateResolution::IsBetterThen. + // to the algorithm described in CandidateResolution::IsBetterThan. std::list<ScreenResolution> resolutions = - desktop_resizer_->GetSupportedResolutions(resolution); + desktop_resizer_->GetSupportedResolutions(resolution, absl::nullopt); if (resolutions.empty()) { LOG(INFO) << "No valid resolutions found."; return; @@ -180,7 +180,7 @@ } } ScreenResolution current_resolution = - desktop_resizer_->GetCurrentResolution(); + desktop_resizer_->GetCurrentResolution(absl::nullopt); if (!best_candidate.resolution().Equals(current_resolution)) { if (original_resolution_.IsEmpty()) @@ -188,7 +188,7 @@ LOG(INFO) << "Resizing to " << best_candidate.resolution().dimensions().width() << "x" << best_candidate.resolution().dimensions().height(); - desktop_resizer_->SetResolution(best_candidate.resolution()); + desktop_resizer_->SetResolution(best_candidate.resolution(), absl::nullopt); } else { LOG(INFO) << "Not resizing; desktop dimensions already " << best_candidate.resolution().dimensions().width() << "x" @@ -205,7 +205,7 @@ void ResizingHostObserver::RestoreScreenResolution() { if (!original_resolution_.IsEmpty()) { - desktop_resizer_->RestoreResolution(original_resolution_); + desktop_resizer_->RestoreResolution(original_resolution_, absl::nullopt); original_resolution_ = ScreenResolution(); } }
diff --git a/remoting/host/resizing_host_observer_unittest.cc b/remoting/host/resizing_host_observer_unittest.cc index d5b49b25..ae5259a 100644 --- a/remoting/host/resizing_host_observer_unittest.cc +++ b/remoting/host/resizing_host_observer_unittest.cc
@@ -59,16 +59,18 @@ ~FakeDesktopResizer() override { if (check_final_resolution_) { - EXPECT_EQ(initial_resolution_, GetCurrentResolution()); + EXPECT_EQ(initial_resolution_, GetCurrentResolution(absl::nullopt)); } } // remoting::DesktopResizer interface - ScreenResolution GetCurrentResolution() override { + ScreenResolution GetCurrentResolution( + absl::optional<webrtc::ScreenId> screen_id) override { return *current_resolution_; } std::list<ScreenResolution> GetSupportedResolutions( - const ScreenResolution& preferred) override { + const ScreenResolution& preferred, + absl::optional<webrtc::ScreenId> screen_id) override { std::list<ScreenResolution> result(supported_resolutions_.begin(), supported_resolutions_.end()); if (exact_size_supported_) { @@ -76,11 +78,13 @@ } return result; } - void SetResolution(const ScreenResolution& resolution) override { + void SetResolution(const ScreenResolution& resolution, + absl::optional<webrtc::ScreenId> screen_id) override { *current_resolution_ = resolution; ++call_counts_->set_resolution; } - void RestoreResolution(const ScreenResolution& resolution) override { + void RestoreResolution(const ScreenResolution& resolution, + absl::optional<webrtc::ScreenId> screen_id) override { *current_resolution_ = resolution; ++call_counts_->restore_resolution; }
diff --git a/sandbox/policy/win/sandbox_win.cc b/sandbox/policy/win/sandbox_win.cc index 7eaf2e4..b1ec529 100644 --- a/sandbox/policy/win/sandbox_win.cc +++ b/sandbox/policy/win/sandbox_win.cc
@@ -32,6 +32,8 @@ #include "base/strings/stringprintf.h" #include "base/strings/utf_string_conversions.h" #include "base/system/sys_info.h" +#include "base/time/time.h" +#include "base/timer/elapsed_timer.h" #include "base/trace_event/trace_event.h" #include "base/win/iat_patch_function.h" #include "base/win/scoped_handle.h" @@ -1129,9 +1131,13 @@ const base::HandlesToInheritVector& handles_to_inherit, SandboxDelegate* delegate, base::Process* process) { + const base::ElapsedTimer timer; auto policy = g_broker_services->CreatePolicy(); + auto time_policy_created = timer.Elapsed(); + ResultCode result = GeneratePolicyForSandboxedProcess( cmd_line, process_type, handles_to_inherit, delegate, policy.get()); + auto time_policy_generated = timer.Elapsed(); if (ResultCode::SBOX_ERROR_UNSANDBOXED_PROCESS == result) { return LaunchWithoutSandbox(cmd_line, handles_to_inherit, delegate, @@ -1149,6 +1155,7 @@ cmd_line.GetProgram().value().c_str(), cmd_line.GetCommandLineString().c_str(), std::move(policy), &last_warning, &last_error, &temp_process_info); + auto time_process_spawned = timer.Elapsed(); base::win::ScopedProcessInformation target(temp_process_info); @@ -1175,6 +1182,33 @@ delegate->PostSpawnTarget(target.process_handle()); CHECK(ResumeThread(target.thread_handle()) != static_cast<DWORD>(-1)); + auto time_process_resumed = timer.Elapsed(); + + // Record timing histogram on sandboxed & launched success. + // We're interested in the happy fast case so have a low maximum. + if (SBOX_ALL_OK == result) { + const auto kLowBound = base::Microseconds(5); + const auto kHighBound = base::Microseconds(100000); + const int kBuckets = 50; + base::UmaHistogramCustomMicrosecondsTimes( + "Process.Sandbox.StartSandboxedWin.CreatePolicyDuration", + time_policy_created, kLowBound, kHighBound, kBuckets); + base::UmaHistogramCustomMicrosecondsTimes( + "Process.Sandbox.StartSandboxedWin.GeneratePolicyDuration", + time_policy_generated - time_policy_created, kLowBound, kHighBound, + kBuckets); + base::UmaHistogramCustomMicrosecondsTimes( + "Process.Sandbox.StartSandboxedWin.SpawnTargetDuration", + time_process_spawned - time_policy_generated, kLowBound, kHighBound, + kBuckets); + base::UmaHistogramCustomMicrosecondsTimes( + "Process.Sandbox.StartSandboxedWin.PostSpawnTargetDuration", + time_process_resumed - time_process_spawned, kLowBound, kHighBound, + kBuckets); + base::UmaHistogramCustomMicrosecondsTimes( + "Process.Sandbox.StartSandboxedWin.TotalDuration", time_process_resumed, + kLowBound, kHighBound, kBuckets); + } *process = base::Process(target.TakeProcessHandle()); return SBOX_ALL_OK;
diff --git a/storage/browser/blob/blob_memory_controller.cc b/storage/browser/blob/blob_memory_controller.cc index 3a9673b..f5d1e16 100644 --- a/storage/browser/blob/blob_memory_controller.cc +++ b/storage/browser/blob/blob_memory_controller.cc
@@ -203,7 +203,6 @@ std::vector<base::span<const uint8_t>> data, size_t total_size_bytes) { DCHECK_NE(0u, total_size_bytes); - UMA_HISTOGRAM_MEMORY_KB("Storage.Blob.PageFileSize", total_size_bytes / 1024); base::ScopedBlockingCall scoped_blocking_call(FROM_HERE, base::BlockingType::MAY_BLOCK); @@ -554,8 +553,6 @@ BlobMemoryController::~BlobMemoryController() = default; void BlobMemoryController::DisableFilePaging(base::File::Error reason) { - UMA_HISTOGRAM_ENUMERATION("Storage.Blob.PagingDisabled", -reason, - -File::FILE_ERROR_MAX); DLOG(ERROR) << "Blob storage paging disabled, reason: " << reason; file_paging_enabled_ = false; in_flight_memory_used_ = 0;
diff --git a/storage/browser/quota/quota_internals.mojom b/storage/browser/quota/quota_internals.mojom index 97b369f..5db2a56 100644 --- a/storage/browser/quota/quota_internals.mojom +++ b/storage/browser/quota/quota_internals.mojom
@@ -14,6 +14,7 @@ string host; string type; string name; + int64 usage; int64 use_count; mojo_base.mojom.Time last_accessed; mojo_base.mojom.Time last_modified;
diff --git a/storage/browser/quota/quota_manager_impl.cc b/storage/browser/quota/quota_manager_impl.cc index 20660a8e..8221e22e 100644 --- a/storage/browser/quota/quota_manager_impl.cc +++ b/storage/browser/quota/quota_manager_impl.cc
@@ -2084,27 +2084,6 @@ base::Owned(helper), weak_factory_.GetWeakPtr(), std::move(callback))); } -void QuotaManagerImpl::DidRetrieveBucketsTable( - RetrieveBucketsTableCallback callback, - const BucketTableEntries& entries) { - std::vector<storage::mojom::BucketTableEntryPtr> mojo_entries; - - for (auto& n : entries) { - DCHECK(IsSupportedType(n.type)); - storage::mojom::BucketTableEntryPtr entry = - storage::mojom::BucketTableEntry::New(); - entry->bucket_id = n.bucket_id.value(); - entry->storage_key = n.storage_key.Serialize(); - entry->host = n.storage_key.origin().host(); - entry->type = StorageTypeEnumToString(n.type); - entry->name = n.name; - entry->use_count = n.use_count; - entry->last_accessed = n.last_accessed; - entry->last_modified = n.last_modified; - mojo_entries.push_back(std::move(entry)); - } - std::move(callback).Run(std::move(mojo_entries)); -} void QuotaManagerImpl::RetrieveBucketsTable( RetrieveBucketsTableCallback callback) { @@ -2116,9 +2095,59 @@ return; } - DumpBucketTable(base::BindOnce(&QuotaManagerImpl::DidRetrieveBucketsTable, - weak_factory_.GetWeakPtr(), - std::move(callback))); + DumpBucketTable( + base::BindOnce(&QuotaManagerImpl::RetrieveBucketUsageForBucketTable, + weak_factory_.GetWeakPtr(), std::move(callback))); +} + +void QuotaManagerImpl::RetrieveBucketUsageForBucketTable( + RetrieveBucketsTableCallback callback, + const BucketTableEntries& entries) { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); + + auto* buckets = new std::vector<storage::mojom::BucketTableEntryPtr>; + + base::RepeatingClosure barrier = base::BarrierClosure( + entries.size(), + base::BindOnce( + [](RetrieveBucketsTableCallback callback, + std::vector<storage::mojom::BucketTableEntryPtr>* buckets) { + std::move(callback).Run(std::move(*buckets)); + }, + std::move(callback), base::Owned(buckets))); + + for (auto& entry : entries) { + DCHECK(IsSupportedType(entry.type)); + + GetBucketUsageWithBreakdown( + entry.ToBucketLocator(), + base::BindOnce(&QuotaManagerImpl::AddBucketTableEntry, + weak_factory_.GetWeakPtr(), entry, barrier, buckets)); + } +} + +void QuotaManagerImpl::AddBucketTableEntry( + const BucketTableEntry& entry, + base::OnceClosure barrier_callback, + std::vector<storage::mojom::BucketTableEntryPtr>* buckets, + int64_t usage, + blink::mojom::UsageBreakdownPtr bucketUsageBreakdown) { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); + + storage::mojom::BucketTableEntryPtr mojo_entry = + storage::mojom::BucketTableEntry::New(); + mojo_entry->bucket_id = entry.bucket_id.value(); + mojo_entry->storage_key = entry.storage_key.Serialize(); + mojo_entry->host = entry.storage_key.origin().host(); + mojo_entry->type = StorageTypeEnumToString(entry.type); + mojo_entry->name = entry.name; + mojo_entry->use_count = entry.use_count; + mojo_entry->last_accessed = entry.last_accessed; + mojo_entry->last_modified = entry.last_modified; + mojo_entry->usage = usage; + + buckets->emplace_back(std::move(mojo_entry)); + std::move(barrier_callback).Run(); } void QuotaManagerImpl::StartEviction() {
diff --git a/storage/browser/quota/quota_manager_impl.h b/storage/browser/quota/quota_manager_impl.h index 6ea2793..9be369f2 100644 --- a/storage/browser/quota/quota_manager_impl.h +++ b/storage/browser/quota/quota_manager_impl.h
@@ -573,8 +573,6 @@ UsageTracker* GetUsageTracker(blink::mojom::StorageType type) const; void DumpBucketTable(DumpBucketTableCallback callback); - void DidRetrieveBucketsTable(RetrieveBucketsTableCallback callback, - const BucketTableEntries& entries); void OnGetHostUsageForInternals( GetHostUsageForInternalsCallback callback, int64_t usage, @@ -589,6 +587,14 @@ void FinallySendDiskAvailabilityAndTempPoolSize( GetDiskAvailabilityAndTempPoolSizeCallback callback, std::unique_ptr<AccumulateQuotaInternalsInfo> info); + void RetrieveBucketUsageForBucketTable(RetrieveBucketsTableCallback callback, + const BucketTableEntries& entries); + void AddBucketTableEntry( + const BucketTableEntry& entry, + base::OnceClosure barrier_callback, + std::vector<storage::mojom::BucketTableEntryPtr>* buckets, + int64_t usage, + blink::mojom::UsageBreakdownPtr bucketUsageBreakdown); // Runs BucketDataDeleter which calls QuotaClients to clear data for the // bucket. Once the task is complete, calls the QuotaDatabase to delete the
diff --git a/storage/browser/quota/quota_manager_unittest.cc b/storage/browser/quota/quota_manager_unittest.cc index 15cc265..35e42d59 100644 --- a/storage/browser/quota/quota_manager_unittest.cc +++ b/storage/browser/quota/quota_manager_unittest.cc
@@ -3031,8 +3031,8 @@ const base::Time kAccessTime = base::Time::Now(); static const ClientBucketData kData[] = { - {"http://example.com/", kDefaultBucketName, kTemp, 0}, - {"http://example.com/", kDefaultBucketName, kPerm, 0}, + {"http://example.com/", kDefaultBucketName, kTemp, 123}, + {"http://example.com/", kDefaultBucketName, kPerm, 456}, }; MockQuotaClient* client = @@ -3069,6 +3069,7 @@ EXPECT_EQ(temp_entry->last_accessed, kAccessTime); EXPECT_GE(temp_entry->last_modified, time2); EXPECT_LE(temp_entry->last_modified, time3); + EXPECT_EQ(temp_entry->usage, 143); auto* perm_entry = FindBucketTableEntry(bucket_table_entries, perm_bucket->id); @@ -3081,6 +3082,7 @@ EXPECT_EQ(perm_entry->last_accessed, kAccessTime); EXPECT_GE(perm_entry->last_modified, time1); EXPECT_LE(perm_entry->last_modified, time2); + EXPECT_EQ(perm_entry->usage, 466); } TEST_F(QuotaManagerImplTest, QuotaForEmptyHost) {
diff --git a/testing/buildbot/chromium.chromiumos.json b/testing/buildbot/chromium.chromiumos.json index d8c0f63c..9a9c9502 100644 --- a/testing/buildbot/chromium.chromiumos.json +++ b/testing/buildbot/chromium.chromiumos.json
@@ -5865,21 +5865,21 @@ { "args": [ "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.interactive_ui_tests.filter", - "--ash-chrome-path-override=../../lacros_version_skew_tests_v104.0.5073.0/test_ash_chrome" + "--ash-chrome-path-override=../../lacros_version_skew_tests_v104.0.5074.0/test_ash_chrome" ], "isolate_profile_data": true, "merge": { "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, - "name": "interactive_ui_tests Lacros version skew testing ash 104.0.5073.0", + "name": "interactive_ui_tests Lacros version skew testing ash 104.0.5074.0", "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ { "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip", - "location": "lacros_version_skew_tests_v104.0.5073.0", - "revision": "version:104.0.5073.0" + "location": "lacros_version_skew_tests_v104.0.5074.0", + "revision": "version:104.0.5074.0" } ], "dimension_sets": [ @@ -5892,7 +5892,7 @@ }, "test": "interactive_ui_tests", "test_id_prefix": "ninja://chrome/test:interactive_ui_tests/", - "variant_id": "Lacros version skew testing ash 104.0.5073.0" + "variant_id": "Lacros version skew testing ash 104.0.5074.0" }, { "isolate_profile_data": true, @@ -6030,21 +6030,21 @@ { "args": [ "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter", - "--ash-chrome-path-override=../../lacros_version_skew_tests_v104.0.5073.0/test_ash_chrome" + "--ash-chrome-path-override=../../lacros_version_skew_tests_v104.0.5074.0/test_ash_chrome" ], "isolate_profile_data": true, "merge": { "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, - "name": "lacros_chrome_browsertests Lacros version skew testing ash 104.0.5073.0", + "name": "lacros_chrome_browsertests Lacros version skew testing ash 104.0.5074.0", "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ { "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip", - "location": "lacros_version_skew_tests_v104.0.5073.0", - "revision": "version:104.0.5073.0" + "location": "lacros_version_skew_tests_v104.0.5074.0", + "revision": "version:104.0.5074.0" } ], "dimension_sets": [ @@ -6056,7 +6056,7 @@ }, "test": "lacros_chrome_browsertests", "test_id_prefix": "ninja://chrome/test:lacros_chrome_browsertests/", - "variant_id": "Lacros version skew testing ash 104.0.5073.0" + "variant_id": "Lacros version skew testing ash 104.0.5074.0" }, { "args": [ @@ -6176,21 +6176,21 @@ { "args": [ "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter", - "--ash-chrome-path-override=../../lacros_version_skew_tests_v104.0.5073.0/test_ash_chrome" + "--ash-chrome-path-override=../../lacros_version_skew_tests_v104.0.5074.0/test_ash_chrome" ], "isolate_profile_data": true, "merge": { "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, - "name": "lacros_chrome_browsertests_run_in_series Lacros version skew testing ash 104.0.5073.0", + "name": "lacros_chrome_browsertests_run_in_series Lacros version skew testing ash 104.0.5074.0", "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ { "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip", - "location": "lacros_version_skew_tests_v104.0.5073.0", - "revision": "version:104.0.5073.0" + "location": "lacros_version_skew_tests_v104.0.5074.0", + "revision": "version:104.0.5074.0" } ], "dimension_sets": [ @@ -6202,7 +6202,7 @@ }, "test": "lacros_chrome_browsertests_run_in_series", "test_id_prefix": "ninja://chrome/test:lacros_chrome_browsertests_run_in_series/", - "variant_id": "Lacros version skew testing ash 104.0.5073.0" + "variant_id": "Lacros version skew testing ash 104.0.5074.0" }, { "isolate_profile_data": true,
diff --git a/testing/buildbot/chromium.fyi.json b/testing/buildbot/chromium.fyi.json index dc1d551..6d15bb5 100644 --- a/testing/buildbot/chromium.fyi.json +++ b/testing/buildbot/chromium.fyi.json
@@ -87946,21 +87946,21 @@ { "args": [ "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.interactive_ui_tests.filter", - "--ash-chrome-path-override=../../lacros_version_skew_tests_v104.0.5073.0/test_ash_chrome" + "--ash-chrome-path-override=../../lacros_version_skew_tests_v104.0.5074.0/test_ash_chrome" ], "isolate_profile_data": true, "merge": { "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, - "name": "interactive_ui_tests Lacros version skew testing ash 104.0.5073.0", + "name": "interactive_ui_tests Lacros version skew testing ash 104.0.5074.0", "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ { "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip", - "location": "lacros_version_skew_tests_v104.0.5073.0", - "revision": "version:104.0.5073.0" + "location": "lacros_version_skew_tests_v104.0.5074.0", + "revision": "version:104.0.5074.0" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", @@ -87968,7 +87968,7 @@ }, "test": "interactive_ui_tests", "test_id_prefix": "ninja://chrome/test:interactive_ui_tests/", - "variant_id": "Lacros version skew testing ash 104.0.5073.0" + "variant_id": "Lacros version skew testing ash 104.0.5074.0" }, { "isolate_profile_data": true, @@ -88081,28 +88081,28 @@ { "args": [ "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter", - "--ash-chrome-path-override=../../lacros_version_skew_tests_v104.0.5073.0/test_ash_chrome" + "--ash-chrome-path-override=../../lacros_version_skew_tests_v104.0.5074.0/test_ash_chrome" ], "isolate_profile_data": true, "merge": { "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, - "name": "lacros_chrome_browsertests Lacros version skew testing ash 104.0.5073.0", + "name": "lacros_chrome_browsertests Lacros version skew testing ash 104.0.5074.0", "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ { "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip", - "location": "lacros_version_skew_tests_v104.0.5073.0", - "revision": "version:104.0.5073.0" + "location": "lacros_version_skew_tests_v104.0.5074.0", + "revision": "version:104.0.5074.0" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "lacros_chrome_browsertests", "test_id_prefix": "ninja://chrome/test:lacros_chrome_browsertests/", - "variant_id": "Lacros version skew testing ash 104.0.5073.0" + "variant_id": "Lacros version skew testing ash 104.0.5074.0" }, { "args": [ @@ -88202,28 +88202,28 @@ { "args": [ "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter", - "--ash-chrome-path-override=../../lacros_version_skew_tests_v104.0.5073.0/test_ash_chrome" + "--ash-chrome-path-override=../../lacros_version_skew_tests_v104.0.5074.0/test_ash_chrome" ], "isolate_profile_data": true, "merge": { "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, - "name": "lacros_chrome_browsertests_run_in_series Lacros version skew testing ash 104.0.5073.0", + "name": "lacros_chrome_browsertests_run_in_series Lacros version skew testing ash 104.0.5074.0", "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ { "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip", - "location": "lacros_version_skew_tests_v104.0.5073.0", - "revision": "version:104.0.5073.0" + "location": "lacros_version_skew_tests_v104.0.5074.0", + "revision": "version:104.0.5074.0" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "lacros_chrome_browsertests_run_in_series", "test_id_prefix": "ninja://chrome/test:lacros_chrome_browsertests_run_in_series/", - "variant_id": "Lacros version skew testing ash 104.0.5073.0" + "variant_id": "Lacros version skew testing ash 104.0.5074.0" }, { "isolate_profile_data": true, @@ -89561,20 +89561,20 @@ { "args": [ "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.interactive_ui_tests.filter", - "--ash-chrome-path-override=../../lacros_version_skew_tests_v104.0.5073.0/test_ash_chrome" + "--ash-chrome-path-override=../../lacros_version_skew_tests_v104.0.5074.0/test_ash_chrome" ], "merge": { "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, - "name": "interactive_ui_tests Lacros version skew testing ash 104.0.5073.0", + "name": "interactive_ui_tests Lacros version skew testing ash 104.0.5074.0", "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ { "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip", - "location": "lacros_version_skew_tests_v104.0.5073.0", - "revision": "version:104.0.5073.0" + "location": "lacros_version_skew_tests_v104.0.5074.0", + "revision": "version:104.0.5074.0" } ], "dimension_sets": [ @@ -89588,7 +89588,7 @@ }, "test": "interactive_ui_tests", "test_id_prefix": "ninja://chrome/test:interactive_ui_tests/", - "variant_id": "Lacros version skew testing ash 104.0.5073.0" + "variant_id": "Lacros version skew testing ash 104.0.5074.0" }, { "merge": { @@ -89726,20 +89726,20 @@ { "args": [ "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter", - "--ash-chrome-path-override=../../lacros_version_skew_tests_v104.0.5073.0/test_ash_chrome" + "--ash-chrome-path-override=../../lacros_version_skew_tests_v104.0.5074.0/test_ash_chrome" ], "merge": { "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, - "name": "lacros_chrome_browsertests Lacros version skew testing ash 104.0.5073.0", + "name": "lacros_chrome_browsertests Lacros version skew testing ash 104.0.5074.0", "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ { "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip", - "location": "lacros_version_skew_tests_v104.0.5073.0", - "revision": "version:104.0.5073.0" + "location": "lacros_version_skew_tests_v104.0.5074.0", + "revision": "version:104.0.5074.0" } ], "dimension_sets": [ @@ -89752,7 +89752,7 @@ }, "test": "lacros_chrome_browsertests", "test_id_prefix": "ninja://chrome/test:lacros_chrome_browsertests/", - "variant_id": "Lacros version skew testing ash 104.0.5073.0" + "variant_id": "Lacros version skew testing ash 104.0.5074.0" }, { "args": [ @@ -89872,20 +89872,20 @@ { "args": [ "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter", - "--ash-chrome-path-override=../../lacros_version_skew_tests_v104.0.5073.0/test_ash_chrome" + "--ash-chrome-path-override=../../lacros_version_skew_tests_v104.0.5074.0/test_ash_chrome" ], "merge": { "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, - "name": "lacros_chrome_browsertests_run_in_series Lacros version skew testing ash 104.0.5073.0", + "name": "lacros_chrome_browsertests_run_in_series Lacros version skew testing ash 104.0.5074.0", "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ { "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip", - "location": "lacros_version_skew_tests_v104.0.5073.0", - "revision": "version:104.0.5073.0" + "location": "lacros_version_skew_tests_v104.0.5074.0", + "revision": "version:104.0.5074.0" } ], "dimension_sets": [ @@ -89898,7 +89898,7 @@ }, "test": "lacros_chrome_browsertests_run_in_series", "test_id_prefix": "ninja://chrome/test:lacros_chrome_browsertests_run_in_series/", - "variant_id": "Lacros version skew testing ash 104.0.5073.0" + "variant_id": "Lacros version skew testing ash 104.0.5074.0" }, { "merge": { @@ -91394,20 +91394,20 @@ { "args": [ "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.interactive_ui_tests.filter", - "--ash-chrome-path-override=../../lacros_version_skew_tests_v104.0.5073.0/test_ash_chrome" + "--ash-chrome-path-override=../../lacros_version_skew_tests_v104.0.5074.0/test_ash_chrome" ], "merge": { "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, - "name": "interactive_ui_tests Lacros version skew testing ash 104.0.5073.0", + "name": "interactive_ui_tests Lacros version skew testing ash 104.0.5074.0", "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ { "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip", - "location": "lacros_version_skew_tests_v104.0.5073.0", - "revision": "version:104.0.5073.0" + "location": "lacros_version_skew_tests_v104.0.5074.0", + "revision": "version:104.0.5074.0" } ], "dimension_sets": [ @@ -91421,7 +91421,7 @@ }, "test": "interactive_ui_tests", "test_id_prefix": "ninja://chrome/test:interactive_ui_tests/", - "variant_id": "Lacros version skew testing ash 104.0.5073.0" + "variant_id": "Lacros version skew testing ash 104.0.5074.0" }, { "merge": { @@ -91559,20 +91559,20 @@ { "args": [ "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter", - "--ash-chrome-path-override=../../lacros_version_skew_tests_v104.0.5073.0/test_ash_chrome" + "--ash-chrome-path-override=../../lacros_version_skew_tests_v104.0.5074.0/test_ash_chrome" ], "merge": { "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, - "name": "lacros_chrome_browsertests Lacros version skew testing ash 104.0.5073.0", + "name": "lacros_chrome_browsertests Lacros version skew testing ash 104.0.5074.0", "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ { "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip", - "location": "lacros_version_skew_tests_v104.0.5073.0", - "revision": "version:104.0.5073.0" + "location": "lacros_version_skew_tests_v104.0.5074.0", + "revision": "version:104.0.5074.0" } ], "dimension_sets": [ @@ -91585,7 +91585,7 @@ }, "test": "lacros_chrome_browsertests", "test_id_prefix": "ninja://chrome/test:lacros_chrome_browsertests/", - "variant_id": "Lacros version skew testing ash 104.0.5073.0" + "variant_id": "Lacros version skew testing ash 104.0.5074.0" }, { "args": [ @@ -91705,20 +91705,20 @@ { "args": [ "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter", - "--ash-chrome-path-override=../../lacros_version_skew_tests_v104.0.5073.0/test_ash_chrome" + "--ash-chrome-path-override=../../lacros_version_skew_tests_v104.0.5074.0/test_ash_chrome" ], "merge": { "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, - "name": "lacros_chrome_browsertests_run_in_series Lacros version skew testing ash 104.0.5073.0", + "name": "lacros_chrome_browsertests_run_in_series Lacros version skew testing ash 104.0.5074.0", "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ { "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip", - "location": "lacros_version_skew_tests_v104.0.5073.0", - "revision": "version:104.0.5073.0" + "location": "lacros_version_skew_tests_v104.0.5074.0", + "revision": "version:104.0.5074.0" } ], "dimension_sets": [ @@ -91731,7 +91731,7 @@ }, "test": "lacros_chrome_browsertests_run_in_series", "test_id_prefix": "ninja://chrome/test:lacros_chrome_browsertests_run_in_series/", - "variant_id": "Lacros version skew testing ash 104.0.5073.0" + "variant_id": "Lacros version skew testing ash 104.0.5074.0" }, { "merge": { @@ -92466,20 +92466,20 @@ { "args": [ "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.interactive_ui_tests.filter", - "--ash-chrome-path-override=../../lacros_version_skew_tests_v104.0.5073.0/test_ash_chrome" + "--ash-chrome-path-override=../../lacros_version_skew_tests_v104.0.5074.0/test_ash_chrome" ], "merge": { "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, - "name": "interactive_ui_tests Lacros version skew testing ash 104.0.5073.0", + "name": "interactive_ui_tests Lacros version skew testing ash 104.0.5074.0", "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ { "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip", - "location": "lacros_version_skew_tests_v104.0.5073.0", - "revision": "version:104.0.5073.0" + "location": "lacros_version_skew_tests_v104.0.5074.0", + "revision": "version:104.0.5074.0" } ], "dimension_sets": [ @@ -92492,7 +92492,7 @@ }, "test": "interactive_ui_tests", "test_id_prefix": "ninja://chrome/test:interactive_ui_tests/", - "variant_id": "Lacros version skew testing ash 104.0.5073.0" + "variant_id": "Lacros version skew testing ash 104.0.5074.0" } ] },
diff --git a/testing/buildbot/chromium.memory.json b/testing/buildbot/chromium.memory.json index 35e3ca1..e10bbc0a 100644 --- a/testing/buildbot/chromium.memory.json +++ b/testing/buildbot/chromium.memory.json
@@ -6318,7 +6318,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Ubuntu-16.04" + "os": "Ubuntu-18.04" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" @@ -8181,7 +8181,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Ubuntu-16.04" + "os": "Ubuntu-18.04" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
diff --git a/testing/buildbot/filters/pixel_tests.filter b/testing/buildbot/filters/pixel_tests.filter index 7ddc9f3..9d1fdc48 100644 --- a/testing/buildbot/filters/pixel_tests.filter +++ b/testing/buildbot/filters/pixel_tests.filter
@@ -38,6 +38,7 @@ InlineLoginHelperBrowserTest.InvokeUi_* IntentPickerDialogTest.* IntentPickerDialogGridViewTest.* +InteractionSequenceBrowserUtilInteractiveUiTest.CompareScreenshot_* InteractionSequenceBrowserUtilTest.CompareScreenshot_* LocalCardMigrationBrowserUiTest.* NewTabPageTest.*
diff --git a/testing/buildbot/test_suite_exceptions.pyl b/testing/buildbot/test_suite_exceptions.pyl index eb170c4f..47e8f07 100644 --- a/testing/buildbot/test_suite_exceptions.pyl +++ b/testing/buildbot/test_suite_exceptions.pyl
@@ -2079,6 +2079,26 @@ }, 'ipc_tests': { 'modifications': { + 'Linux ChromiumOS MSan Tests': { + 'swarming': { + 'dimension_sets': [ + { + 'cpu': 'x86-64', + 'os': 'Ubuntu-18.04', + }, + ], + }, + }, + 'Linux MSan Tests': { + 'swarming': { + 'dimension_sets': [ + { + 'cpu': 'x86-64', + 'os': 'Ubuntu-18.04', + }, + ], + }, + }, 'android-asan': { 'swarming': { 'shards': 2,
diff --git a/testing/buildbot/variants.pyl b/testing/buildbot/variants.pyl index 7394849..eb5c44cf 100644 --- a/testing/buildbot/variants.pyl +++ b/testing/buildbot/variants.pyl
@@ -22,15 +22,15 @@ }, 'LACROS_VERSION_SKEW_CANARY': { 'args': [ - '--ash-chrome-path-override=../../lacros_version_skew_tests_v104.0.5073.0/test_ash_chrome', + '--ash-chrome-path-override=../../lacros_version_skew_tests_v104.0.5074.0/test_ash_chrome', ], - 'identifier': 'Lacros version skew testing ash 104.0.5073.0', + 'identifier': 'Lacros version skew testing ash 104.0.5074.0', 'swarming': { 'cipd_packages': [ { 'cipd_package': 'chromium/testing/linux-ash-chromium/x86_64/ash.zip', - 'location': 'lacros_version_skew_tests_v104.0.5073.0', - 'revision': 'version:104.0.5073.0', + 'location': 'lacros_version_skew_tests_v104.0.5074.0', + 'revision': 'version:104.0.5074.0', }, ], },
diff --git a/testing/variations/fieldtrial_testing_config.json b/testing/variations/fieldtrial_testing_config.json index fbd44c2..9dd7bfd 100644 --- a/testing/variations/fieldtrial_testing_config.json +++ b/testing/variations/fieldtrial_testing_config.json
@@ -5020,22 +5020,6 @@ ] } ], - "MoreFrequentUmaUploads": [ - { - "platforms": [ - "chromeos", - "chromeos_lacros" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "MoreFrequentUmaUploads" - ] - } - ] - } - ], "MuteCompromisedPasswords": [ { "platforms": [
diff --git a/third_party/blink/PRESUBMIT_test.py b/third_party/blink/PRESUBMIT_test.py index 58c79c2..84d38a6 100755 --- a/third_party/blink/PRESUBMIT_test.py +++ b/third_party/blink/PRESUBMIT_test.py
@@ -166,7 +166,6 @@ 'scoped_refptr<base::SingleThreadTaskRunner>', ] disallow_list = [ - 'GURL', 'content::RenderFrame', 'gfx::Canvas', 'net::IPEndPoint',
diff --git a/third_party/blink/public/platform/scheduler/web_thread_scheduler.h b/third_party/blink/public/platform/scheduler/web_thread_scheduler.h index dba3eba..4c32a2d 100644 --- a/third_party/blink/public/platform/scheduler/web_thread_scheduler.h +++ b/third_party/blink/public/platform/scheduler/web_thread_scheduler.h
@@ -65,20 +65,12 @@ static std::unique_ptr<WebThreadScheduler> CreateMainThreadScheduler( std::unique_ptr<base::MessagePump> message_pump = nullptr); - // Returns compositor thread scheduler for the compositor thread - // of the current process. - static WebThreadScheduler* CompositorThreadScheduler(); - // Returns main thread scheduler for the main thread of the current process. static WebThreadScheduler* MainThreadScheduler(); // Returns the default task runner. virtual scoped_refptr<base::SingleThreadTaskRunner> DefaultTaskRunner(); - // Returns a task runner for input-blocking tasks on the compositor thread. - // (For input tasks on the main thread, use WebWidgetScheduler instead.) - virtual scoped_refptr<base::SingleThreadTaskRunner> InputTaskRunner(); - // Returns the compositor task runner. virtual scoped_refptr<base::SingleThreadTaskRunner> CompositorTaskRunner();
diff --git a/third_party/blink/renderer/core/annotation/annotation_agent_container_impl.cc b/third_party/blink/renderer/core/annotation/annotation_agent_container_impl.cc index e3067b1..ce6cab9 100644 --- a/third_party/blink/renderer/core/annotation/annotation_agent_container_impl.cc +++ b/third_party/blink/renderer/core/annotation/annotation_agent_container_impl.cc
@@ -8,6 +8,7 @@ #include "third_party/blink/renderer/core/annotation/annotation_agent_impl.h" #include "third_party/blink/renderer/core/annotation/annotation_selector.h" #include "third_party/blink/renderer/core/execution_context/execution_context.h" +#include "third_party/blink/renderer/core/fragment_directive/text_fragment_handler.h" #include "third_party/blink/renderer/core/frame/local_frame.h" namespace blink { @@ -71,6 +72,17 @@ auto* agent_impl = MakeGarbageCollected<AnnotationAgentImpl>( *this, type, selector, PassKey()); agents_.insert(agent_impl); + + // TODO(bokan): This is a stepping stone in refactoring the + // TextFragmentHandler. When we replace it with a browser-side manager it may + // make for a better API to have components register a handler for an + // annotation type with AnnotationAgentContainer. + // https://crbug.com/1303887. + if (type == mojom::blink::AnnotationType::kSharedHighlight) { + TextFragmentHandler::DidCreateTextFragment(*agent_impl, + *GetSupplementable()); + } + return agent_impl; } @@ -82,6 +94,18 @@ agents_.erase(itr); } +HeapHashSet<Member<AnnotationAgentImpl>> +AnnotationAgentContainerImpl::GetAgentsOfType( + mojom::blink::AnnotationType type) { + HeapHashSet<Member<AnnotationAgentImpl>> agents_of_type; + for (auto& agent : agents_) { + if (agent->GetType() == type) + agents_of_type.insert(agent); + } + + return agents_of_type; +} + void AnnotationAgentContainerImpl::CreateAgent( mojo::PendingRemote<mojom::blink::AnnotationAgentHost> host_remote, mojo::PendingReceiver<mojom::blink::AnnotationAgent> agent_receiver, @@ -99,9 +123,11 @@ if (!selector) return; - AnnotationAgentImpl* agent_impl = CreateUnboundAgent(type, *selector); + auto* agent_impl = MakeGarbageCollected<AnnotationAgentImpl>( + *this, type, *selector, PassKey()); + agents_.insert(agent_impl); agent_impl->Bind(std::move(host_remote), std::move(agent_receiver)); - agent_impl->Attach(*GetSupplementable()); + agent_impl->Attach(); } } // namespace blink
diff --git a/third_party/blink/renderer/core/annotation/annotation_agent_container_impl.h b/third_party/blink/renderer/core/annotation/annotation_agent_container_impl.h index e48ff3ad..42c57c2 100644 --- a/third_party/blink/renderer/core/annotation/annotation_agent_container_impl.h +++ b/third_party/blink/renderer/core/annotation/annotation_agent_container_impl.h
@@ -71,6 +71,10 @@ void RemoveAgent(AnnotationAgentImpl& agent, base::PassKey<AnnotationAgentImpl>); + // Returns all annotation agents in this container of the given type. + HeapHashSet<Member<AnnotationAgentImpl>> GetAgentsOfType( + mojom::blink::AnnotationType type); + // Use from within Blink to create an agent in this container. AnnotationAgentImpl* CreateUnboundAgent(mojom::blink::AnnotationType type, AnnotationSelector& selector);
diff --git a/third_party/blink/renderer/core/annotation/annotation_agent_impl.cc b/third_party/blink/renderer/core/annotation/annotation_agent_impl.cc index 4ffeefd6..248e0f6 100644 --- a/third_party/blink/renderer/core/annotation/annotation_agent_impl.cc +++ b/third_party/blink/renderer/core/annotation/annotation_agent_impl.cc
@@ -66,8 +66,9 @@ WTF::Bind(&AnnotationAgentImpl::Remove, WrapWeakPersistent(this))); } -void AnnotationAgentImpl::Attach(Document& document) { +void AnnotationAgentImpl::Attach() { DCHECK(!IsRemoved()); + Document& document = *owning_container_->GetSupplementable(); selector_->FindRange(document, AnnotationSelector::kSynchronous, WTF::Bind(&AnnotationAgentImpl::DidFinishAttach, WrapWeakPersistent(this))); @@ -108,7 +109,7 @@ owning_container_.Clear(); } -void AnnotationAgentImpl::ScrollIntoView() { +void AnnotationAgentImpl::ScrollIntoView() const { DCHECK(!IsRemoved()); if (!IsAttached()) @@ -153,6 +154,18 @@ Document* document = attached_range_->StartPosition().GetDocument(); DCHECK(document); + // TODO(bokan): DocumentMarkers don't support overlapping markers. We could + // be smarter about how we construct markers so they don't overlap - or we + // could make DocumentMarkerController allow overlaps. + // https://crbug.com/1327370. + if (!document->Markers() + .MarkersIntersectingRange( + attached_range_->ToEphemeralRange(), + DocumentMarker::MarkerTypes::TextFragment()) + .IsEmpty()) { + return; + } + // TODO(bokan): Add new marker types based on `type_`. document->Markers().AddTextFragmentMarker(dom_range); } else {
diff --git a/third_party/blink/renderer/core/annotation/annotation_agent_impl.h b/third_party/blink/renderer/core/annotation/annotation_agent_impl.h index c96da13f..12949e7 100644 --- a/third_party/blink/renderer/core/annotation/annotation_agent_impl.h +++ b/third_party/blink/renderer/core/annotation/annotation_agent_impl.h
@@ -75,7 +75,7 @@ // TODO(bokan): This is synchronous for the TextFragmentAnchor use case but // we'll likely want an async version for typical usage and/or eventually // convert TextFragmentAnchor to use an async search. - void Attach(Document& document); + void Attach(); // Returns true if the agent has performed attachment and resulted in a valid // DOM Range. Note that Range is relocated, meaning that it will update in @@ -91,7 +91,19 @@ void Remove(); // mojom::blink::AnnotationAgent - void ScrollIntoView() override; + void ScrollIntoView() override { + const_cast<const AnnotationAgentImpl*>(this)->ScrollIntoView(); + } + void ScrollIntoView() const; + + const RangeInFlatTree& GetAttachedRange() const { + DCHECK(attached_range_.Get()); + return *attached_range_.Get(); + } + + const AnnotationSelector* GetSelector() const { return selector_.Get(); } + + mojom::blink::AnnotationType GetType() const { return type_; } private: friend AnnotationAgentImplTest; @@ -120,7 +132,7 @@ // TODO(bokan): Once we have more of this implemented we'll use the type to // determine styling and context menu behavior. - [[maybe_unused]] mojom::blink::AnnotationType type_; + mojom::blink::AnnotationType type_; }; } // namespace blink
diff --git a/third_party/blink/renderer/core/annotation/annotation_agent_impl_test.cc b/third_party/blink/renderer/core/annotation/annotation_agent_impl_test.cc index ad7610a..403c89e 100644 --- a/third_party/blink/renderer/core/annotation/annotation_agent_impl_test.cc +++ b/third_party/blink/renderer/core/annotation/annotation_agent_impl_test.cc
@@ -281,7 +281,7 @@ EXPECT_FALSE(IsRemoved(agent)); - agent->Attach(GetDocument()); + agent->Attach(); ASSERT_TRUE(agent->IsAttached()); agent->Remove(); @@ -305,7 +305,7 @@ mojom::blink::AnnotationType::kSharedHighlight, *MakeGarbageCollected<MockAnnotationSelector>()); - agent->Attach(GetDocument()); + agent->Attach(); EXPECT_TRUE(agent->IsAttached()); } @@ -329,14 +329,14 @@ auto* agent_bar = CreateAgentForRange(range_bar); ASSERT_TRUE(agent_bar); - agent_foo->Attach(GetDocument()); + agent_foo->Attach(); ASSERT_TRUE(agent_foo->IsAttached()); // A marker should have been created on "FOO" but not yet on "BAR". EXPECT_EQ(NumMarkersInRange(*range_foo), 1ul); EXPECT_EQ(NumMarkersInRange(*range_bar), 0ul); - agent_bar->Attach(GetDocument()); + agent_bar->Attach(); ASSERT_TRUE(agent_bar->IsAttached()); // Both "FOO" and "BAR" should each have a single marker. @@ -370,8 +370,8 @@ auto* agent_bar = CreateAgentForRange(range_bar); ASSERT_TRUE(agent_bar); - agent_foo->Attach(GetDocument()); - agent_bar->Attach(GetDocument()); + agent_foo->Attach(); + agent_bar->Attach(); ASSERT_EQ(NumMarkersInRange(*range_foo), 1ul); ASSERT_EQ(NumMarkersInRange(*range_bar), 1ul); @@ -405,7 +405,7 @@ CreateRangeToExpectedText(p, 0, 17, "TEST FOO PAGE BAR"); ASSERT_EQ(NumMarkersInRange(*range), 0ul); - agent->Attach(GetDocument()); + agent->Attach(); EXPECT_EQ(NumMarkersInRange(*range), 0ul); EXPECT_FALSE(agent->IsAttached()); @@ -432,7 +432,7 @@ ASSERT_TRUE(host.agent_.is_connected()); ASSERT_FALSE(host.did_finish_attachment_rect_); - agent->Attach(GetDocument()); + agent->Attach(); host.FlushForTesting(); ASSERT_TRUE(host.did_finish_attachment_rect_); @@ -511,7 +511,7 @@ ASSERT_FALSE(host_foo.did_finish_attachment_rect_); ASSERT_FALSE(host_bar.did_finish_attachment_rect_); - agent_foo->Attach(GetDocument()); + agent_foo->Attach(); EXPECT_TRUE(agent_foo->IsAttached()); host_foo.FlushForTesting(); @@ -520,7 +520,7 @@ EXPECT_EQ(*host_foo.did_finish_attachment_rect_, gfx::Rect(0, 1010, 30, 10)); ASSERT_FALSE(host_bar.did_finish_attachment_rect_); - agent_bar->Attach(GetDocument()); + agent_bar->Attach(); EXPECT_TRUE(agent_bar->IsAttached()); host_bar.FlushForTesting(); @@ -567,7 +567,7 @@ MockAnnotationAgentHost host_foo; host_foo.BindToAgent(*agent_foo); - agent_foo->Attach(GetDocument()); + agent_foo->Attach(); ASSERT_TRUE(agent_foo->IsAttached()); host_foo.FlushForTesting(); @@ -630,7 +630,7 @@ MockAnnotationAgentHost host_foo; host_foo.BindToAgent(*agent_foo); - agent_foo->Attach(GetDocument()); + agent_foo->Attach(); ASSERT_TRUE(agent_foo->IsAttached()); host_foo.FlushForTesting();
diff --git a/third_party/blink/renderer/core/annotation/text_annotation_selector.cc b/third_party/blink/renderer/core/annotation/text_annotation_selector.cc index 5da0902d..9b4ed007 100644 --- a/third_party/blink/renderer/core/annotation/text_annotation_selector.cc +++ b/third_party/blink/renderer/core/annotation/text_annotation_selector.cc
@@ -32,6 +32,8 @@ break; } + was_unique_.reset(); + finder_ = MakeGarbageCollected<TextFragmentFinder>(*this, params_, &document, find_buffer_type); finished_callback_ = std::move(finished_cb); @@ -43,6 +45,8 @@ DCHECK(finished_callback_); std::move(finished_callback_).Run(&range); + was_unique_ = is_unique; + finder_.Clear(); } @@ -52,4 +56,9 @@ finder_.Clear(); } +bool TextAnnotationSelector::WasMatchUnique() const { + DCHECK(was_unique_.has_value()); + return *was_unique_; +} + } // namespace blink
diff --git a/third_party/blink/renderer/core/annotation/text_annotation_selector.h b/third_party/blink/renderer/core/annotation/text_annotation_selector.h index 5c0fd68..26f40b7 100644 --- a/third_party/blink/renderer/core/annotation/text_annotation_selector.h +++ b/third_party/blink/renderer/core/annotation/text_annotation_selector.h
@@ -5,6 +5,7 @@ #ifndef THIRD_PARTY_BLINK_RENDERER_CORE_ANNOTATION_TEXT_ANNOTATION_SELECTOR_H_ #define THIRD_PARTY_BLINK_RENDERER_CORE_ANNOTATION_TEXT_ANNOTATION_SELECTOR_H_ +#include "third_party/abseil-cpp/absl/types/optional.h" #include "third_party/blink/renderer/core/annotation/annotation_selector.h" #include "third_party/blink/renderer/core/fragment_directive/text_fragment_finder.h" #include "third_party/blink/renderer/core/fragment_directive/text_fragment_selector.h" @@ -36,9 +37,17 @@ void DidFindMatch(const RangeInFlatTree& range, bool is_unique) override; void NoMatchFound() override; + // This is specific to a metric for TextFragmentAnchor so it isn't part of + // the selector API. If there's other use cases for metrics gathering it may + // make sense to make FindRange return a more general Metrics object into + // which this bit could be added. + bool WasMatchUnique() const; + private: TextFragmentSelector params_; + absl::optional<bool> was_unique_; + FinishedCallback finished_callback_; Member<TextFragmentFinder> finder_; };
diff --git a/third_party/blink/renderer/core/dom/element.cc b/third_party/blink/renderer/core/dom/element.cc index 9dc99bd..c067ae2 100644 --- a/third_party/blink/renderer/core/dom/element.cc +++ b/third_party/blink/renderer/core/dom/element.cc
@@ -2648,11 +2648,10 @@ // Case #2 or 3: An anchor or trigger for a showing popup. update_highest(anchors_and_invokers.at(current_element)); } else if (auto* button = DynamicTo<HTMLButtonElement>(current_element)) { - if (auto* invoked_popup = button->togglePopupElement()) { - if (popup_position.Contains(invoked_popup)) { - // Case #4: An invoking element pointing to a showing popup. - update_highest(invoked_popup); - } + if (auto invoked_popup = button->togglePopupElement().element; + invoked_popup && popup_position.Contains(invoked_popup)) { + // Case #4: An invoking element pointing to a showing popup. + update_highest(invoked_popup); } } }
diff --git a/third_party/blink/renderer/core/exported/web_view_impl.cc b/third_party/blink/renderer/core/exported/web_view_impl.cc index 229d9f2..e7f066d 100644 --- a/third_party/blink/renderer/core/exported/web_view_impl.cc +++ b/third_party/blink/renderer/core/exported/web_view_impl.cc
@@ -630,6 +630,8 @@ DCHECK(does_composite_); VisualViewport& visual_viewport = GetPage()->GetVisualViewport(); + DCHECK(visual_viewport.IsActiveViewport()); + gfx::Point clamped_point = target_position; if (!use_anchor) { clamped_point = @@ -734,6 +736,7 @@ float default_scale_when_already_legible, float& scale, gfx::Point& scroll) { + DCHECK(GetPage()->GetVisualViewport().IsActiveViewport()); scale = PageScaleFactor(); scroll = gfx::Point(); @@ -1199,7 +1202,7 @@ // restored by the first commit, since the state is checked in every call to // ApplyScrollAndScale(). WebLocalFrameImpl* main_frame = MainFrameImpl(); - if (!main_frame || main_frame->IsInFencedFrameTree()) + if (!main_frame || !main_frame->IsOutermostMainFrame()) return; WebFrameWidgetImpl* widget = main_frame->LocalRootFrameWidget(); @@ -1208,6 +1211,7 @@ widget->SetBrowserControlsParams(GetBrowserControls().Params()); VisualViewport& visual_viewport = GetPage()->GetVisualViewport(); + DCHECK(visual_viewport.IsActiveViewport()); { // This object will save the current visual viewport offset w.r.t. the @@ -1317,7 +1321,12 @@ !fullscreen_controller_->IsFullscreenOrTransitioning(); size_ = main_frame_widget_size; - if (is_rotation) { + if (!main_frame->IsOutermostMainFrame()) { + // Anchoring should not be performed from embedded frames (not even + // portals) as anchoring should only be performed when the size/orientation + // is user controlled. + ResizeViewWhileAnchored(browser_controls_params, visible_viewport_size); + } else if (is_rotation) { gfx::PointF viewport_anchor_coords(viewportAnchorCoordX, viewportAnchorCoordY); RotationViewportAnchor anchor(*view, visual_viewport, @@ -1325,6 +1334,7 @@ GetPageScaleConstraintsSet()); ResizeViewWhileAnchored(browser_controls_params, visible_viewport_size); } else { + DCHECK(visual_viewport.IsActiveViewport()); ResizeViewportAnchor::ResizeScope resize_scope(*resize_viewport_anchor_); ResizeViewWhileAnchored(browser_controls_params, visible_viewport_size); } @@ -1993,6 +2003,7 @@ remote_main_frame_host_remote_.Bind(std::move(main_frame_host)); auto& viewport = GetPage()->GetVisualViewport(); + DCHECK(!viewport.IsActiveViewport()); viewport.Reset(); } @@ -3504,6 +3515,7 @@ // Set up the compositor and inform the browser of the PageScaleFactor, // which is tracked per-view. auto& viewport = GetPage()->GetVisualViewport(); + DCHECK(viewport.IsActiveViewport()); MainFrameImpl()->FrameWidgetImpl()->SetPageScaleStateAndLimits( viewport.Scale(), viewport.IsPinchGestureActive(), MinimumPageScaleFactor(), MaximumPageScaleFactor()); @@ -3633,6 +3645,7 @@ CHECK(page_); VisualViewport& visual_viewport = GetPage()->GetVisualViewport(); + DCHECK(visual_viewport.IsActiveViewport()); // Store the desired offsets the visual viewport before setting the top // controls ratio since doing so will change the bounds and move the @@ -3689,7 +3702,8 @@ } void WebViewImpl::UpdateDeviceEmulationTransform() { - GetPage()->GetVisualViewport().SetNeedsPaintPropertyUpdate(); + if (GetPage()->GetVisualViewport().IsActiveViewport()) + GetPage()->GetVisualViewport().SetNeedsPaintPropertyUpdate(); if (auto* main_frame = MainFrameImpl()) { // When the device emulation transform is updated, to avoid incorrect
diff --git a/third_party/blink/renderer/core/fragment_directive/text_fragment_anchor.cc b/third_party/blink/renderer/core/fragment_directive/text_fragment_anchor.cc index 0015a8b..3bda6dc 100644 --- a/third_party/blink/renderer/core/fragment_directive/text_fragment_anchor.cc +++ b/third_party/blink/renderer/core/fragment_directive/text_fragment_anchor.cc
@@ -9,6 +9,9 @@ #include "components/shared_highlighting/core/common/fragment_directives_utils.h" #include "third_party/blink/public/mojom/scroll/scroll_into_view_params.mojom-blink.h" #include "third_party/blink/renderer/core/accessibility/ax_object_cache.h" +#include "third_party/blink/renderer/core/annotation/annotation_agent_container_impl.h" +#include "third_party/blink/renderer/core/annotation/annotation_agent_impl.h" +#include "third_party/blink/renderer/core/annotation/text_annotation_selector.h" #include "third_party/blink/renderer/core/display_lock/display_lock_document_state.h" #include "third_party/blink/renderer/core/display_lock/display_lock_utilities.h" #include "third_party/blink/renderer/core/dom/document.h" @@ -196,13 +199,18 @@ metrics_->DidCreateAnchor(text_directives.size()); - directive_finder_pairs_.ReserveCapacity(text_directives.size()); + AnnotationAgentContainerImpl* annotation_container = + AnnotationAgentContainerImpl::From(*frame_->GetDocument()); + DCHECK(annotation_container); + + directive_annotation_pairs_.ReserveCapacity(text_directives.size()); for (Member<TextDirective>& directive : text_directives) { - directive_finder_pairs_.push_back(std::make_pair( - directive, - MakeGarbageCollected<TextFragmentFinder>( - *this, directive->GetSelector(), frame_->GetDocument(), - TextFragmentFinder::FindBufferRunnerType::kSynchronous))); + auto* selector = + MakeGarbageCollected<TextAnnotationSelector>(directive->GetSelector()); + AnnotationAgentImpl* agent = annotation_container->CreateUnboundAgent( + mojom::blink::AnnotationType::kSharedHighlight, *selector); + + directive_annotation_pairs_.push_back(std::make_pair(directive, agent)); } } @@ -240,6 +248,13 @@ if (search_finished_) return !dismissed_ || needs_perform_pre_raf_actions_; + // TODO(bokan): This is needed since we re-search the text of the document + // each time Invoke is called so after the first Invoke creates text markers + // subsequent calls will try to create a marker that overlaps and trips our + // "no overlapping text fragment" DCHECKs. A followup CL will change this + // class to only perform the text search once since further Invoke calls are + // used only to continue after a BeforeMatch event or to ensure previously + // found matches aren't shifted out of view by layout. frame_->GetDocument()->Markers().RemoveMarkersOfTypes( DocumentMarker::MarkerTypes::TextFragment()); @@ -250,13 +265,16 @@ first_match_needs_scroll_ = should_scroll_ && !user_scrolled_; { - // FindMatch might cause scrolling and set user_scrolled_ so reset it when - // it's done. + // DidFinishAttach might cause scrolling and set user_scrolled_ so reset it + // when it's done. base::AutoReset<bool> reset_user_scrolled(&user_scrolled_, user_scrolled_); metrics_->ResetMatchCount(); - for (auto& directive_finder_pair : directive_finder_pairs_) - directive_finder_pair.second->FindMatch(); + for (auto& directive_annotation_pair : directive_annotation_pairs_) { + AnnotationAgentImpl* annotation = directive_annotation_pair.second; + annotation->Attach(); + DidFinishAttach(*annotation); + } } if (beforematch_state_ != kEventQueued) @@ -294,42 +312,40 @@ // Notify the DOM object exposed to JavaScript that we've completed the // search and pass it the range we found. - for (DirectiveFinderPair& directive_finder_pair : directive_finder_pairs_) { - TextDirective* text_directive = directive_finder_pair.first.Get(); - TextFragmentFinder* finder = directive_finder_pair.second.Get(); - text_directive->DidFinishMatching(finder->FirstMatch()); + for (DirectiveAnnotationPair& directive_annotation_pair : + directive_annotation_pairs_) { + TextDirective* text_directive = directive_annotation_pair.first.Get(); + AnnotationAgentImpl* annotation = directive_annotation_pair.second.Get(); + const RangeInFlatTree* attached_range = + annotation->IsAttached() ? &annotation->GetAttachedRange() : nullptr; + text_directive->DidFinishMatching(attached_range); } } void TextFragmentAnchor::Trace(Visitor* visitor) const { visitor->Trace(element_fragment_anchor_); visitor->Trace(metrics_); - visitor->Trace(directive_finder_pairs_); + visitor->Trace(directive_annotation_pairs_); SelectorFragmentAnchor::Trace(visitor); } -void TextFragmentAnchor::DidFindMatch(const RangeInFlatTree& range, - bool is_unique) { - // TODO(bokan): Can this happen or should this be a DCHECK? - if (search_finished_) +void TextFragmentAnchor::DidFinishAttach( + const AnnotationAgentImpl& annotation) { + if (!annotation.IsAttached()) return; - if (!is_unique) + DCHECK(!search_finished_); + + if (!static_cast<const TextAnnotationSelector*>(annotation.GetSelector()) + ->WasMatchUnique()) { metrics_->DidFindAmbiguousMatch(); - - // TODO(nburris): Determine what we should do with overlapping text matches. - // This implementation drops a match if it overlaps a previous match, since - // overlapping ranges are likely unintentional by the URL creator and could - // therefore indicate that the page text has changed. - if (!frame_->GetDocument() - ->Markers() - .MarkersIntersectingRange( - range.ToEphemeralRange(), - DocumentMarker::MarkerTypes::TextFragment()) - .IsEmpty()) { - return; } + const RangeInFlatTree& range = annotation.GetAttachedRange(); + + // TODO(bokan): This fires an event and reveals only at the first match - it + // seems like something we may want to do for all highlights on a page? + // https://crbug.com/1327379. if (beforematch_state_ == kNoMatchFound) { Element* enclosing_block = EnclosingBlock(range.StartPosition(), kCannotCrossEditingBoundary); @@ -361,27 +377,10 @@ if (first_match_needs_scroll_) { first_match_needs_scroll_ = false; - PhysicalRect bounding_box(ComputeTextRect(range.ToEphemeralRange())); - - // Set the bounding box height to zero because we want to center the top of - // the text range. - bounding_box.SetHeight(LayoutUnit()); - DCHECK(range.ToEphemeralRange().Nodes().begin() != range.ToEphemeralRange().Nodes().end()); - DCHECK(first_node.GetLayoutObject()); - - // TODO(bokan): Refactor this to use the common - // FragmentAnchor::ScrollElementIntoViewWithOptions. - mojom::blink::ScrollIntoViewParamsPtr params = - ScrollAlignment::CreateScrollIntoViewParams( - ScrollAlignment::CenterAlways(), ScrollAlignment::CenterAlways(), - mojom::blink::ScrollType::kProgrammatic); - params->cross_origin_boundaries = false; - scroll_into_view_util::ScrollRectToVisible(*first_node.GetLayoutObject(), - bounding_box, std::move(params)); - did_scroll_into_view_ = true; + annotation.ScrollIntoView(); if (AXObjectCache* cache = frame_->GetDocument()->ExistingAXObjectCache()) cache->HandleScrolledToAnchor(&first_node); @@ -394,12 +393,6 @@ frame_->GetDocument()->SetSequentialFocusNavigationStartingPoint( range.StartPosition().NodeAsRangeFirstNode()); } - - EphemeralRange dom_range = - EphemeralRange(ToPositionInDOMTree(range.StartPosition()), - ToPositionInDOMTree(range.EndPosition())); - - frame_->GetDocument()->Markers().AddTextFragmentMarker(dom_range); } void TextFragmentAnchor::DidFinishSearch() { @@ -435,11 +428,6 @@ if (!did_find_match_ || dismissed_) return true; - DCHECK(!should_scroll_ || did_scroll_into_view_ || user_scrolled_); - - frame_->GetDocument()->Markers().RemoveMarkersOfTypes( - DocumentMarker::MarkerTypes::TextFragment()); - return SelectorFragmentAnchor::Dismiss(); }
diff --git a/third_party/blink/renderer/core/fragment_directive/text_fragment_anchor.h b/third_party/blink/renderer/core/fragment_directive/text_fragment_anchor.h index 816b476..0baf7bb 100644 --- a/third_party/blink/renderer/core/fragment_directive/text_fragment_anchor.h +++ b/third_party/blink/renderer/core/fragment_directive/text_fragment_anchor.h
@@ -19,13 +19,13 @@ namespace blink { +class AnnotationAgentImpl; class DocumentLoader; class LocalFrame; class KURL; class TextDirective; -class CORE_EXPORT TextFragmentAnchor final : public SelectorFragmentAnchor, - public TextFragmentFinder::Client { +class CORE_EXPORT TextFragmentAnchor final : public SelectorFragmentAnchor { public: // When a document is loaded, this method will be called to see if it meets // the criteria to generate a new permission token (at a high level it means: @@ -67,16 +67,7 @@ void Trace(Visitor*) const override; - // TextFragmentFinder::Client interface - void DidFindMatch(const RangeInFlatTree& range, bool is_unique) override; - - void NoMatchFound() override {} - - using DirectiveFinderPair = - std::pair<Member<TextDirective>, Member<TextFragmentFinder>>; - const HeapVector<DirectiveFinderPair>& DirectiveFinderPairs() const { - return directive_finder_pairs_; - } + void DidFinishAttach(const AnnotationAgentImpl& annotation); bool IsTextFragmentAnchor() override { return true; } @@ -92,18 +83,17 @@ bool HasSearchEngineSource(); // This keeps track of each TextDirective and its associated - // TextFragmentFinder. The directive is the DOM object exposed to JS that's - // parsed from the URL while the finder is the object responsible for - // performing the search for the specified text in the Document. - HeapVector<DirectiveFinderPair> directive_finder_pairs_; + // AnnotationAgentImpl. The directive is the DOM object exposed to JS that's + // parsed from the URL while the AnnotationAgent is the object responsible + // for performing the search for the specified text in the Document. + using DirectiveAnnotationPair = + std::pair<Member<TextDirective>, Member<AnnotationAgentImpl>>; + HeapVector<DirectiveAnnotationPair> directive_annotation_pairs_; bool search_finished_ = false; // Indicates that we should scroll into view the first match that we find, set // to true each time the anchor is invoked if the user hasn't scrolled. bool first_match_needs_scroll_ = false; - // Whether we successfully scrolled into view a match at least once, used for - // metrics reporting. - bool did_scroll_into_view_ = false; // Whether we found a match. Used to determine if we should activate the // element fragment anchor at the end of searching. bool did_find_match_ = false; @@ -113,11 +103,11 @@ // Whether PerformPreRafActions should run at the next rAF. bool needs_perform_pre_raf_actions_ = false; - // Whether a text fragment finder was run. + // Whether an annotation agent tried attaching to text in the page. bool has_performed_first_text_search_ = false; enum BeforematchState { - kNoMatchFound, // DidFindMatch has not been called. + kNoMatchFound, // DidFinishAttach has not been called. kEventQueued, // Beforematch event has been queued, but not fired yet. kFiredEvent // Beforematch event has been fired. } beforematch_state_ = kNoMatchFound;
diff --git a/third_party/blink/renderer/core/fragment_directive/text_fragment_generation_navigation_test.cc b/third_party/blink/renderer/core/fragment_directive/text_fragment_generation_navigation_test.cc index eb9deb0..971ee89 100644 --- a/third_party/blink/renderer/core/fragment_directive/text_fragment_generation_navigation_test.cc +++ b/third_party/blink/renderer/core/fragment_directive/text_fragment_generation_navigation_test.cc
@@ -9,6 +9,8 @@ #include "components/shared_highlighting/core/common/shared_highlighting_data_driven_test_results.h" #include "testing/gtest/include/gtest/gtest.h" #include "third_party/blink/public/platform/scheduler/test/renderer_scheduler_test_support.h" +#include "third_party/blink/renderer/core/annotation/annotation_agent_container_impl.h" +#include "third_party/blink/renderer/core/annotation/annotation_agent_impl.h" #include "third_party/blink/renderer/core/editing/iterators/text_iterator.h" #include "third_party/blink/renderer/core/editing/markers/document_marker_controller.h" #include "third_party/blink/renderer/core/fragment_directive/text_directive.h" @@ -61,6 +63,8 @@ String GenerateSelector(const RangeInFlatTree& selection_range); + // Returns the string that's highlighted. Supports only single highlight in a + // page. String GetHighlightedText(); }; @@ -145,15 +149,19 @@ } String TextFragmentGenerationNavigationTest::GetHighlightedText() { - TextFragmentAnchor* anchor = GetTextFragmentAnchor(); - if (!anchor || anchor->DirectiveFinderPairs().size() != 1) { - // Returns a null string, distinguishable from an empty string. + auto* container = AnnotationAgentContainerImpl::From(GetDocument()); + // Returns a null string, distinguishable from an empty string. + if (!container) return String(); - } - auto directive_finder_pairs = anchor->DirectiveFinderPairs(); - return PlainText( - directive_finder_pairs[0].second.Get()->FirstMatch()->ToEphemeralRange()); + HeapHashSet<Member<AnnotationAgentImpl>> shared_highlight_agents = + container->GetAgentsOfType( + mojom::blink::AnnotationType::kSharedHighlight); + if (shared_highlight_agents.size() != 1) + return String(); + + AnnotationAgentImpl* agent = *shared_highlight_agents.begin(); + return PlainText(agent->GetAttachedRange().ToEphemeralRange()); } shared_highlighting::SharedHighlightingDataDrivenTestResults
diff --git a/third_party/blink/renderer/core/fragment_directive/text_fragment_handler.cc b/third_party/blink/renderer/core/fragment_directive/text_fragment_handler.cc index 43ba18a..741a15c4 100644 --- a/third_party/blink/renderer/core/fragment_directive/text_fragment_handler.cc +++ b/third_party/blink/renderer/core/fragment_directive/text_fragment_handler.cc
@@ -10,6 +10,9 @@ #include "components/shared_highlighting/core/common/fragment_directives_utils.h" #include "components/shared_highlighting/core/common/shared_highlighting_features.h" #include "third_party/blink/public/common/browser_interface_broker_proxy.h" +#include "third_party/blink/renderer/core/annotation/annotation_agent_impl.h" +#include "third_party/blink/renderer/core/annotation/annotation_selector.h" +#include "third_party/blink/renderer/core/dom/document.h" #include "third_party/blink/renderer/core/editing/markers/document_marker.h" #include "third_party/blink/renderer/core/editing/markers/document_marker_controller.h" #include "third_party/blink/renderer/core/editing/position_with_affinity.h" @@ -78,26 +81,25 @@ GetExistingSelectorsCallback callback) { Vector<String> text_fragment_selectors; - TextFragmentAnchor* anchor = GetTextFragmentAnchor(); - if (!anchor) { - std::move(callback).Run(Vector<String>()); - return; - } - - for (auto& directive_finder_pair : anchor->DirectiveFinderPairs()) { - TextFragmentFinder* finder = directive_finder_pair.second.Get(); - if (finder->FirstMatch()) { - text_fragment_selectors.push_back(finder->GetSelector().ToString()); - } + for (auto& annotation : annotation_agents_) { + if (annotation->IsAttached()) + text_fragment_selectors.push_back(annotation->GetSelector()->Serialize()); } std::move(callback).Run(text_fragment_selectors); } -// TODO(http://crbug/1262141): look into using PageBroadcast Mojo. void TextFragmentHandler::RemoveFragments() { - if (GetTextFragmentAnchor()) { - GetFrame()->View()->DismissFragmentAnchor(); + if (TextFragmentAnchor* anchor = GetTextFragmentAnchor()) { + if (anchor->Dismiss()) { + for (auto& annotation : annotation_agents_) + annotation->Remove(); + + annotation_agents_.clear(); + + FragmentDirectiveUtils::RemoveSelectorsFromUrl(frame_); + GetFrame()->View()->ClearFragmentAnchor(); + } } else if (GetFrame()->IsOutermostMainFrame()) { // DismissFragmentAnchor normally runs the URL update steps to remove the // selectors from the URL. However, even if the outermost main frame doesn't @@ -134,17 +136,10 @@ ExtractTextFragmentsMatchesCallback callback) { Vector<String> text_fragment_matches; - TextFragmentAnchor* anchor = GetTextFragmentAnchor(); - if (!anchor) { - std::move(callback).Run(Vector<String>()); - return; - } - - for (auto& directive_finder_pair : anchor->DirectiveFinderPairs()) { - TextFragmentFinder* finder = directive_finder_pair.second.Get(); - if (finder->FirstMatch()) { + for (auto& annotation : annotation_agents_) { + if (annotation->IsAttached()) { text_fragment_matches.push_back( - PlainText(finder->FirstMatch()->ToEphemeralRange())); + PlainText(annotation->GetAttachedRange().ToEphemeralRange())); } } @@ -155,20 +150,17 @@ ExtractFirstFragmentRectCallback callback) { gfx::Rect rect_in_viewport; - TextFragmentAnchor* anchor = GetTextFragmentAnchor(); - if (!anchor || anchor->DirectiveFinderPairs().size() <= 0) { + if (annotation_agents_.IsEmpty()) { std::move(callback).Run(gfx::Rect()); return; } - for (auto& directive_finder_pair : anchor->DirectiveFinderPairs()) { - TextFragmentFinder* finder = directive_finder_pair.second.Get(); - if (finder->FirstMatch() == nullptr) { + for (auto& annotation : annotation_agents_) { + if (!annotation->IsAttached()) continue; - } PhysicalRect bounding_box( - ComputeTextRect(finder->FirstMatch()->ToEphemeralRange())); + ComputeTextRect(annotation->GetAttachedRange().ToEphemeralRange())); rect_in_viewport = GetFrame()->View()->FrameToViewport(ToEnclosingRect(bounding_box)); break; @@ -220,6 +212,7 @@ } void TextFragmentHandler::Trace(Visitor* visitor) const { + visitor->Trace(annotation_agents_); visitor->Trace(text_fragment_selector_generator_); visitor->Trace(selector_producer_); visitor->Trace(frame_); @@ -230,6 +223,8 @@ // don't run after frame detachment. if (GetTextFragmentSelectorGenerator()) GetTextFragmentSelectorGenerator()->Reset(); + + annotation_agents_.clear(); } void TextFragmentHandler::InvokeReplyCallback( @@ -292,4 +287,16 @@ frame->GetTextFragmentHandler()->StartGeneratingForCurrentSelection(); } +// static +void TextFragmentHandler::DidCreateTextFragment(AnnotationAgentImpl& agent, + Document& owning_document) { + LocalFrame* frame = owning_document.GetFrame(); + DCHECK(frame); + + if (!frame->GetTextFragmentHandler()) + frame->CreateTextFragmentHandler(); + + frame->GetTextFragmentHandler()->annotation_agents_.push_back(&agent); +} + } // namespace blink
diff --git a/third_party/blink/renderer/core/fragment_directive/text_fragment_handler.h b/third_party/blink/renderer/core/fragment_directive/text_fragment_handler.h index 2410ad3..43e6eed 100644 --- a/third_party/blink/renderer/core/fragment_directive/text_fragment_handler.h +++ b/third_party/blink/renderer/core/fragment_directive/text_fragment_handler.h
@@ -9,10 +9,13 @@ #include "third_party/blink/public/mojom/link_to_text/link_to_text.mojom-blink.h" #include "third_party/blink/renderer/core/core_export.h" #include "third_party/blink/renderer/core/fragment_directive/text_fragment_selector_generator.h" +#include "third_party/blink/renderer/platform/heap/collection_support/heap_vector.h" #include "third_party/blink/renderer/platform/mojo/heap_mojo_receiver.h" namespace blink { +class AnnotationAgentImpl; +class Document; class LocalFrame; class TextFragmentAnchor; @@ -37,6 +40,13 @@ // a selection. Will trigger preemptive generation if needed. static void OpenedContextMenuOverSelection(LocalFrame* frame); + // TODO(crbug.com/1303887): This temporarily takes a Document since + // TextFragmentHandler is currently 1:1 with Document. This will change when + // we get a SharedHighlightingManager and this method can avoid storing the + // agent, instead bind the AnnotationAgent to a host in the browser. + static void DidCreateTextFragment(AnnotationAgentImpl& agent, + Document& owning_document); + // mojom::blink::TextFragmentReceiver interface void Cancel() override; void RequestSelector(RequestSelectorCallback callback) override; @@ -83,6 +93,8 @@ LocalFrame* GetFrame() { return frame_; } + HeapVector<Member<AnnotationAgentImpl>> annotation_agents_; + // Class responsible for generating text fragment selectors for the current // selection. Member<TextFragmentSelectorGenerator> text_fragment_selector_generator_;
diff --git a/third_party/blink/renderer/core/fragment_directive/text_fragment_handler_test.cc b/third_party/blink/renderer/core/fragment_directive/text_fragment_handler_test.cc index 1f2eb62..1d16f2c 100644 --- a/third_party/blink/renderer/core/fragment_directive/text_fragment_handler_test.cc +++ b/third_party/blink/renderer/core/fragment_directive/text_fragment_handler_test.cc
@@ -23,6 +23,8 @@ #include "third_party/blink/renderer/core/editing/markers/document_marker_controller.h" #include "third_party/blink/renderer/core/editing/selection_template.h" #include "third_party/blink/renderer/core/editing/visible_units.h" +#include "third_party/blink/renderer/core/frame/local_dom_window.h" +#include "third_party/blink/renderer/core/frame/location.h" #include "third_party/blink/renderer/core/html/html_frame_owner_element.h" #include "third_party/blink/renderer/core/loader/document_loader.h" #include "third_party/blink/renderer/core/testing/sim/sim_request.h" @@ -65,6 +67,13 @@ SetSelectionOptions()); } + void SetLocationHash(Document& document, String hash) { + ScriptState* script_state = ToScriptStateForMainWorld(document.GetFrame()); + ScriptState::Scope entered_context_scope(script_state); + document.GetFrame()->DomWindow()->location()->setHash( + script_state->GetIsolate(), hash, ASSERT_NO_EXCEPTION); + } + String SelectThenRequestSelector(const Position& start, const Position& end) { SetSelection(start, end); TextFragmentHandler::OpenedContextMenuOverSelection( @@ -750,9 +759,8 @@ To<LocalFrame>(To<HTMLFrameOwnerElement>(iframe)->ContentFrame()); EXPECT_EQ(1u, child_frame->GetDocument()->Markers().Markers().size()); - EXPECT_FALSE(HasTextFragmentHandler(child_frame)); + EXPECT_TRUE(HasTextFragmentHandler(child_frame)); - child_frame->CreateTextFragmentHandler(); TextFragmentHandler::OpenedContextMenuOverSelection(GetDocument().GetFrame()); mojo::Remote<mojom::blink::TextFragmentReceiver> remote; @@ -768,15 +776,58 @@ EXPECT_FALSE(child_frame->GetDocument()->View()->GetFragmentAnchor()); } +TEST_F(TextFragmentHandlerTest, NonMatchingTextDirectiveCreatesHandler) { + SimRequest request("https://example.com/test.html", "text/html"); + LoadURL("https://example.com/test.html"); + request.Complete(R"HTML( + <!DOCTYPE html> + <p>This is a test page</p> + )HTML"); + Compositor().BeginFrame(); + + ASSERT_FALSE(HasTextFragmentHandler(GetDocument().GetFrame())); + + // Navigate to a text directive that doesn't exist on the page. + SetLocationHash(GetDocument(), ":~:text=non%20existent%20text"); + + Compositor().BeginFrame(); + BeginEmptyFrame(); + RunAsyncMatchingTasks(); + + ASSERT_EQ(0u, GetDocument().Markers().Markers().size()); + + // Even though the directive didn't find a match, a handler is created by the + // attempt. + EXPECT_TRUE(HasTextFragmentHandler(GetDocument().GetFrame())); +} + +TEST_F(TextFragmentHandlerTest, MatchingTextDirectiveCreatesHandler) { + SimRequest request("https://example.com/test.html", "text/html"); + LoadURL("https://example.com/test.html"); + request.Complete(R"HTML( + <!DOCTYPE html> + <p>This is a test page</p> + )HTML"); + Compositor().BeginFrame(); + + ASSERT_FALSE(HasTextFragmentHandler(GetDocument().GetFrame())); + + // Navigate to a text directive that highlights "test page". + SetLocationHash(GetDocument(), ":~:text=test%20page"); + + Compositor().BeginFrame(); + Compositor().BeginFrame(); + RunAsyncMatchingTasks(); + + ASSERT_EQ(1u, GetDocument().Markers().Markers().size()); + + EXPECT_TRUE(HasTextFragmentHandler(GetDocument().GetFrame())); +} + TEST_F(TextFragmentHandlerTest, ShouldCreateTextFragmentHandlerAndRemoveHighlight) { - SimRequest request( - "https://example.com/" - "test.html#:~:text=test%20page&text=more%20text", - "text/html"); - LoadURL( - "https://example.com/" - "test.html#:~:text=test%20page&text=more%20text"); + SimRequest request("https://example.com/test.html", "text/html"); + LoadURL("https://example.com/test.html"); request.Complete(R"HTML( <!DOCTYPE html> <style> @@ -795,28 +846,34 @@ <p id="first">This is a test page</p> <p id="second">With some more text</p> )HTML"); - RunAsyncMatchingTasks(); + Compositor().BeginFrame(); + + ASSERT_EQ(0u, GetDocument().Markers().Markers().size()); + ASSERT_FALSE(HasTextFragmentHandler(GetDocument().GetFrame())); + + // Binding a receiver should create a handler. + mojo::Remote<mojom::blink::TextFragmentReceiver> remote; + GetDocument().GetFrame()->BindTextFragmentReceiver( + remote.BindNewPipeAndPassReceiver()); + EXPECT_TRUE(remote.is_bound()); + EXPECT_TRUE(HasTextFragmentHandler(GetDocument().GetFrame())); + + // Set the fragment to two text directives. + SetLocationHash(GetDocument(), ":~:text=test%20page&text=more%20text"); // Render two frames to handle the async step added by the beforematch event. Compositor().BeginFrame(); Compositor().BeginFrame(); + RunAsyncMatchingTasks(); - EXPECT_EQ(2u, GetDocument().Markers().Markers().size()); - EXPECT_FALSE(HasTextFragmentHandler(GetDocument().GetFrame())); + ASSERT_EQ(2u, GetDocument().Markers().Markers().size()); - mojo::Remote<mojom::blink::TextFragmentReceiver> remote; - EXPECT_FALSE(remote.is_bound()); - GetDocument().GetFrame()->BindTextFragmentReceiver( - remote.BindNewPipeAndPassReceiver()); - - EXPECT_TRUE(HasTextFragmentHandler(GetDocument().GetFrame())); - EXPECT_TRUE(remote.is_bound()); + // Ensure RemoveFragments called via Mojo removes the document markers. remote.get()->RemoveFragments(); - base::RunLoop().RunUntilIdle(); EXPECT_EQ(0u, GetDocument().Markers().Markers().size()); - // Ensure the fragment is uninstalled + // Ensure the fragment was uninstalled. EXPECT_FALSE(GetDocument().View()->GetFragmentAnchor()); } @@ -869,167 +926,8 @@ EXPECT_EQ(selector, "First%20paragraph%20text%20that%20is"); } -// Verifies that removing a text fragments from an iframe updates the URL -TEST_F(TextFragmentHandlerTest, ShouldUpdateUrlAndRemoveHighlightForIframes) { - SimRequest main_request("https://example.com/test.html#:~:text=test", - "text/html"); - SimRequest child_request("https://example.com/child.html", "text/html"); - LoadURL( - "https://example.com/" - "test.html#:~:text=test"); - main_request.Complete(R"HTML( - <!DOCTYPE html> - <iframe id="iframe" src="child.html"></iframe> - )HTML"); - - child_request.Complete(R"HTML( - <!DOCTYPE html> - <style> - p { - margin-top: 1000px; - } - </style> - <p> - test - </p> - <script> - window.location.hash = ':~:text=test'; - </script> - )HTML"); - RunAsyncMatchingTasks(); - - // Render two frames to handle the async step added by the beforematch event. - Compositor().BeginFrame(); - BeginEmptyFrame(); - - Element* iframe = GetDocument().getElementById("iframe"); - auto* child_frame = - To<LocalFrame>(To<HTMLFrameOwnerElement>(iframe)->ContentFrame()); - - EXPECT_EQ(1u, child_frame->GetDocument()->Markers().Markers().size()); - EXPECT_FALSE(HasTextFragmentHandler(child_frame)); - EXPECT_EQ("https://example.com/test.html#:~:text=test", - GetDocument() - .GetFrame() - ->Loader() - .GetDocumentLoader() - ->GetHistoryItem() - ->Url()); - EXPECT_EQ("https://example.com/child.html#:~:text=test", - child_frame->Loader().GetDocumentLoader()->GetHistoryItem()->Url()); - - mojo::Remote<mojom::blink::TextFragmentReceiver> remote; - - child_frame->BindTextFragmentReceiver(remote.BindNewPipeAndPassReceiver()); - ASSERT_TRUE(remote.is_bound()); - remote.get()->RemoveFragments(); - base::RunLoop().RunUntilIdle(); - - EXPECT_EQ("https://example.com/child.html", - child_frame->Loader().GetDocumentLoader()->GetHistoryItem()->Url()); - - // Remove the selectors from the main frame and update url - remote.reset(); - ASSERT_TRUE(!remote.is_bound()); - GetDocument().GetFrame()->BindTextFragmentReceiver( - remote.BindNewPipeAndPassReceiver()); - ASSERT_TRUE(remote.is_bound()); - remote.get()->RemoveFragments(); - base::RunLoop().RunUntilIdle(); - - EXPECT_EQ(0u, child_frame->GetDocument()->Markers().Markers().size()); - EXPECT_FALSE(child_frame->GetDocument()->View()->GetFragmentAnchor()); - EXPECT_EQ("https://example.com/test.html", GetDocument() - .GetFrame() - ->Loader() - .GetDocumentLoader() - ->GetHistoryItem() - ->Url()); -} - -// When the main frame and an iFrame have different selectors, it verifies that -// removing a text fragments from the iframe updates the URL. -TEST_F(TextFragmentHandlerTest, - ShouldUpdateMainFrameUrlWhenMainFrameAndIframeHaveDifferentSelectors) { - SimRequest main_request("https://example.com/test.html#:~:text=test", - "text/html"); - SimRequest child_request("https://example.com/child.html", "text/html"); - LoadURL( - "https://example.com/" - "test.html#:~:text=test"); - main_request.Complete(R"HTML( - <!DOCTYPE html> - <iframe id="iframe" src="child.html"></iframe> - )HTML"); - - child_request.Complete(R"HTML( - <!DOCTYPE html> - <style> - p { - margin-top: 1000px; - } - </style> - <p> - iframe - </p> - <script> - window.location.hash = ':~:text=iframe'; - </script> - )HTML"); - RunAsyncMatchingTasks(); - - // Render two frames to handle the async step added by the beforematch event. - Compositor().BeginFrame(); - BeginEmptyFrame(); - - Element* iframe = GetDocument().getElementById("iframe"); - auto* child_frame = - To<LocalFrame>(To<HTMLFrameOwnerElement>(iframe)->ContentFrame()); - - EXPECT_EQ(1u, child_frame->GetDocument()->Markers().Markers().size()); - EXPECT_FALSE(HasTextFragmentHandler(child_frame)); - EXPECT_EQ("https://example.com/test.html#:~:text=test", - GetDocument() - .GetFrame() - ->Loader() - .GetDocumentLoader() - ->GetHistoryItem() - ->Url()); - EXPECT_EQ("https://example.com/child.html#:~:text=iframe", - child_frame->Loader().GetDocumentLoader()->GetHistoryItem()->Url()); - - mojo::Remote<mojom::blink::TextFragmentReceiver> remote; - - // Remove the selectors from the iframe - child_frame->BindTextFragmentReceiver(remote.BindNewPipeAndPassReceiver()); - ASSERT_TRUE(remote.is_bound()); - remote.get()->RemoveFragments(); - base::RunLoop().RunUntilIdle(); - - // Remove the selectors from the main frame - remote.reset(); - ASSERT_TRUE(!remote.is_bound()); - GetDocument().GetFrame()->BindTextFragmentReceiver( - remote.BindNewPipeAndPassReceiver()); - ASSERT_TRUE(remote.is_bound()); - remote.get()->RemoveFragments(); - base::RunLoop().RunUntilIdle(); - - EXPECT_EQ(0u, child_frame->GetDocument()->Markers().Markers().size()); - EXPECT_FALSE(child_frame->GetDocument()->View()->GetFragmentAnchor()); - EXPECT_EQ("https://example.com/child.html", - child_frame->Loader().GetDocumentLoader()->GetHistoryItem()->Url()); - EXPECT_EQ("https://example.com/test.html", GetDocument() - .GetFrame() - ->Loader() - .GetDocumentLoader() - ->GetHistoryItem() - ->Url()); -} - -// When the main frame and an iFrame both have highlighted text, it verifies -// that removing a text fragments from the main frame and the iframe, updates -// there respective URL and remove the highlights. +// Verify that removing a shared highlight removes document markers and the +// text directive from the URL, for both main frame and subframe. TEST_F(TextFragmentHandlerTest, ShouldRemoveFromMainFrameAndIframeWhenBothHaveHighlights) { SimRequest main_request("https://example.com/test.html#:~:text=test", @@ -1067,48 +965,43 @@ Element* iframe = GetDocument().getElementById("iframe"); auto* child_frame = To<LocalFrame>(To<HTMLFrameOwnerElement>(iframe)->ContentFrame()); + auto* main_frame = GetDocument().GetFrame(); - EXPECT_EQ(1u, child_frame->GetDocument()->Markers().Markers().size()); - EXPECT_FALSE(HasTextFragmentHandler(child_frame)); - EXPECT_EQ("https://example.com/test.html#:~:text=test", - GetDocument() - .GetFrame() - ->Loader() - .GetDocumentLoader() - ->GetHistoryItem() - ->Url()); - EXPECT_EQ("https://example.com/child.html#:~:text=iframe", - child_frame->Loader().GetDocumentLoader()->GetHistoryItem()->Url()); - EXPECT_EQ(1u, GetDocument().Markers().Markers().size()); - - mojo::Remote<mojom::blink::TextFragmentReceiver> remote; - - // Remove the selectors from the iframe - child_frame->BindTextFragmentReceiver(remote.BindNewPipeAndPassReceiver()); - ASSERT_TRUE(remote.is_bound()); - remote.get()->RemoveFragments(); - base::RunLoop().RunUntilIdle(); - - // Remove the selectors from the main frame - remote.reset(); - ASSERT_TRUE(!remote.is_bound()); - GetDocument().GetFrame()->BindTextFragmentReceiver( - remote.BindNewPipeAndPassReceiver()); - ASSERT_TRUE(remote.is_bound()); - remote.get()->RemoveFragments(); - base::RunLoop().RunUntilIdle(); - - EXPECT_EQ(0u, child_frame->GetDocument()->Markers().Markers().size()); - EXPECT_EQ("https://example.com/child.html", + ASSERT_EQ(1u, child_frame->GetDocument()->Markers().Markers().size()); + ASSERT_EQ("https://example.com/child.html#:~:text=iframe", child_frame->Loader().GetDocumentLoader()->GetHistoryItem()->Url()); - EXPECT_EQ(0u, GetDocument().Markers().Markers().size()); - EXPECT_EQ("https://example.com/test.html", GetDocument() - .GetFrame() - ->Loader() - .GetDocumentLoader() - ->GetHistoryItem() - ->Url()); + ASSERT_EQ(1u, GetDocument().Markers().Markers().size()); + ASSERT_EQ("https://example.com/test.html#:~:text=test", + main_frame->Loader().GetDocumentLoader()->GetHistoryItem()->Url()); + + // Remove shared highlights from the iframe. + { + mojo::Remote<mojom::blink::TextFragmentReceiver> remote; + child_frame->BindTextFragmentReceiver(remote.BindNewPipeAndPassReceiver()); + remote->RemoveFragments(); + remote.FlushForTesting(); + + EXPECT_EQ(0u, child_frame->GetDocument()->Markers().Markers().size()); + EXPECT_FALSE(child_frame->GetDocument()->View()->GetFragmentAnchor()); + EXPECT_EQ( + "https://example.com/child.html", + child_frame->Loader().GetDocumentLoader()->GetHistoryItem()->Url()); + } + + // Remove shared highlights from the main frame. + { + mojo::Remote<mojom::blink::TextFragmentReceiver> remote; + main_frame->BindTextFragmentReceiver(remote.BindNewPipeAndPassReceiver()); + remote->RemoveFragments(); + remote.FlushForTesting(); + + EXPECT_EQ(0u, GetDocument().Markers().Markers().size()); + EXPECT_FALSE(GetDocument().View()->GetFragmentAnchor()); + EXPECT_EQ( + "https://example.com/test.html", + main_frame->Loader().GetDocumentLoader()->GetHistoryItem()->Url()); + } } // crbug.com/1266937 Even if |TextFragmentSelectorGenerator| gets reset between
diff --git a/third_party/blink/renderer/core/frame/local_frame.h b/third_party/blink/renderer/core/frame/local_frame.h index d619569..78b83b3 100644 --- a/third_party/blink/renderer/core/frame/local_frame.h +++ b/third_party/blink/renderer/core/frame/local_frame.h
@@ -692,12 +692,6 @@ LocalFrameToken GetLocalFrameToken() const; - TextFragmentHandler* GetTextFragmentHandler() const { - // |text_fragment_handler_| is always set on the main frame and created - // lazily for child frames. - return text_fragment_handler_; - } - LoaderFreezeMode GetLoaderFreezeMode(); // Swaps `this` LocalFrame in to replace the current frame (e.g. in the case @@ -728,6 +722,10 @@ // https://github.com/jeremyroman/alternate-loading-modes/blob/main/browsing-context.md#session-history bool ShouldMaintainTrivialSessionHistory() const; + TextFragmentHandler* GetTextFragmentHandler() const { + return text_fragment_handler_; + } + void BindTextFragmentReceiver( mojo::PendingReceiver<mojom::blink::TextFragmentReceiver> receiver); @@ -930,8 +928,9 @@ using SavedScrollOffsets = HeapHashMap<Member<Node>, ScrollOffset>; Member<SavedScrollOffsets> saved_scroll_offsets_; - // Always non-null for the main frame and created lazily for child frames; - // null otherwise. + // Created lazily when needed, either via the browser's SharedHighlighting + // binding to it or via a context menu with a selection being opened in a + // frame. Member<TextFragmentHandler> text_fragment_handler_; // Manages a transient affordance for this frame to enter fullscreen.
diff --git a/third_party/blink/renderer/core/frame/local_frame_view.cc b/third_party/blink/renderer/core/frame/local_frame_view.cc index 06ecb1fe..5e05718 100644 --- a/third_party/blink/renderer/core/frame/local_frame_view.cc +++ b/third_party/blink/renderer/core/frame/local_frame_view.cc
@@ -1761,6 +1761,9 @@ if (use_color_adjust_background_ == use && !color_scheme_changed) return; + if (!frame_->GetDocument()) + return; + use_color_adjust_background_ = use; if (GetFrame().IsMainFrame() && ShouldUseColorAdjustBackground()) { @@ -1800,14 +1803,8 @@ fragment_anchor_ = nullptr; } -void LocalFrameView::DismissFragmentAnchor() { - if (!fragment_anchor_) - return; - - if (fragment_anchor_->Dismiss()) { - FragmentDirectiveUtils::RemoveSelectorsFromUrl(frame_); - fragment_anchor_ = nullptr; - } +void LocalFrameView::ClearFragmentAnchor() { + fragment_anchor_ = nullptr; } bool LocalFrameView::UpdatePlugins() { @@ -3052,8 +3049,8 @@ layer_debug_info_enabled_); PaintArtifactCompositor::ViewportProperties viewport_properties; - // TODO(crbug.com/1254770): revisit this for embedded portals. - if (GetFrame().IsOutermostMainFrame()) { + const auto& viewport = page->GetVisualViewport(); + if (GetFrame().IsMainFrame() && viewport.IsActiveViewport()) { const auto& viewport = page->GetVisualViewport(); viewport_properties.overscroll_elasticity_effect = viewport.GetOverscrollElasticityEffectNode(); @@ -3252,6 +3249,8 @@ visual_viewport.VisibleHeightCSSPx()); visual_viewport_size_changed = (new_viewport_size != visual_viewport_size); + DCHECK(!visual_viewport_size_changed || + visual_viewport.IsActiveViewport()); } SetNeedsUpdateGeometries(); PerformPostLayoutTasks(visual_viewport_size_changed);
diff --git a/third_party/blink/renderer/core/frame/local_frame_view.h b/third_party/blink/renderer/core/frame/local_frame_view.h index 897b66f..13c3619 100644 --- a/third_party/blink/renderer/core/frame/local_frame_view.h +++ b/third_party/blink/renderer/core/frame/local_frame_view.h
@@ -445,7 +445,7 @@ bool should_scroll = true); FragmentAnchor* GetFragmentAnchor() { return fragment_anchor_; } void InvokeFragmentAnchor(); - void DismissFragmentAnchor(); + void ClearFragmentAnchor(); bool ShouldSetCursor() const;
diff --git a/third_party/blink/renderer/core/frame/visual_viewport.cc b/third_party/blink/renderer/core/frame/visual_viewport.cc index ef4cd943..e528214 100644 --- a/third_party/blink/renderer/core/frame/visual_viewport.cc +++ b/third_party/blink/renderer/core/frame/visual_viewport.cc
@@ -128,6 +128,7 @@ PaintPropertyChangeType VisualViewport::UpdatePaintPropertyNodesIfNeeded( PaintPropertyTreeBuilderFragmentContext& context) { + DCHECK(IsActiveViewport()); PaintPropertyChangeType change = PaintPropertyChangeType::kUnchanged; if (!scroll_layer_) @@ -399,7 +400,6 @@ TRACE_EVENT2("blink", "VisualViewport::setSize", "width", size.width(), "height", size.height()); size_ = size; - needs_paint_property_update_ = true; TRACE_EVENT_INSTANT1("loading", "viewport", TRACE_EVENT_SCOPE_THREAD, "data", ViewportToTracedValue()); @@ -407,6 +407,8 @@ if (!IsActiveViewport()) return; + needs_paint_property_update_ = true; + // Need to re-compute sizes for the overlay scrollbars. if (scrollbar_layer_horizontal_ && LocalMainFrame().View()) { DCHECK(scrollbar_layer_vertical_); @@ -423,6 +425,9 @@ } void VisualViewport::MainFrameDidChangeSize() { + if (!IsActiveViewport()) + return; + TRACE_EVENT0("blink", "VisualViewport::mainFrameDidChangeSize"); // In unit tests we may not have initialized the layer tree. @@ -435,6 +440,9 @@ gfx::RectF VisualViewport::VisibleRect( IncludeScrollbarsInRect scrollbar_inclusion) const { + if (!IsActiveViewport()) + return gfx::RectF(gfx::PointF(), gfx::SizeF(size_)); + gfx::SizeF visible_size(size_); if (scrollbar_inclusion == kExcludeScrollbars) @@ -521,7 +529,7 @@ double VisualViewport::VisibleWidthCSSPx() const { if (!IsActiveViewport()) - return 0; + return VisibleRect().width(); float zoom = LocalMainFrame().PageZoomFactor(); float width_css_px = VisibleRect().width() / zoom; @@ -530,7 +538,7 @@ double VisualViewport::VisibleHeightCSSPx() const { if (!IsActiveViewport()) - return 0; + return VisibleRect().height(); float zoom = LocalMainFrame().PageZoomFactor(); float height_css_px = VisibleRect().height() / zoom; @@ -542,7 +550,7 @@ const gfx::PointF& location) { if (!IsActiveViewport()) { is_pinch_gesture_active_ = is_pinch_gesture_active; - // The VisualViewport for a remote mainframe must always be 1.0 or else + // The VisualViewport in an embedded widget must always be 1.0 or else // event targeting will fail. DCHECK(scale == 1.f); scale_ = scale; @@ -616,6 +624,8 @@ } void VisualViewport::CreateLayers() { + DCHECK(IsActiveViewport()); + if (scroll_layer_) return; @@ -643,6 +653,7 @@ } void VisualViewport::InitializeScrollbars() { + DCHECK(IsActiveViewport()); // Do nothing if we haven't created the layer tree yet. if (!scroll_layer_) return; @@ -667,20 +678,21 @@ } EScrollbarWidth VisualViewport::CSSScrollbarWidth() const { - if (IsActiveViewport()) { - if (Document* main_document = LocalMainFrame().GetDocument()) - return main_document->GetLayoutView()->StyleRef().ScrollbarWidth(); - } + DCHECK(IsActiveViewport()); + if (Document* main_document = LocalMainFrame().GetDocument()) + return main_document->GetLayoutView()->StyleRef().ScrollbarWidth(); return EScrollbarWidth::kAuto; } int VisualViewport::ScrollbarThickness() const { + DCHECK(IsActiveViewport()); return ScrollbarThemeOverlayMobile::GetInstance().ScrollbarThickness( ScaleFromDIP(), CSSScrollbarWidth()); } void VisualViewport::UpdateScrollbarLayer(ScrollbarOrientation orientation) { + DCHECK(IsActiveViewport()); bool is_horizontal = orientation == kHorizontalScrollbar; scoped_refptr<cc::ScrollbarLayerBase>& scrollbar_layer = is_horizontal ? scrollbar_layer_horizontal_ : scrollbar_layer_vertical_; @@ -710,7 +722,7 @@ } bool VisualViewport::VisualViewportSuppliesScrollbars() const { - return GetPage().GetSettings().GetViewportEnabled(); + return IsActiveViewport() && GetPage().GetSettings().GetViewportEnabled(); } const Document* VisualViewport::GetDocument() const { @@ -763,6 +775,9 @@ PhysicalRect VisualViewport::ScrollIntoView( const PhysicalRect& rect_in_absolute, const mojom::blink::ScrollIntoViewParamsPtr& params) { + if (!IsActiveViewport()) + return rect_in_absolute; + PhysicalRect scroll_snapport_rect = VisibleScrollSnapportRect(); ScrollOffset new_scroll_offset = @@ -828,8 +843,7 @@ gfx::Point VisualViewport::ClampDocumentOffsetAtScale(const gfx::Point& offset, float scale) { - if (!IsActiveViewport()) - return gfx::Point(); + DCHECK(IsActiveViewport()); LocalFrameView* view = LocalMainFrame().View(); if (!view) @@ -854,6 +868,9 @@ } void VisualViewport::SetBrowserControlsAdjustment(float adjustment) { + DCHECK(IsActiveViewport()); + DCHECK(LocalMainFrame().IsOutermostMainFrame()); + if (browser_controls_adjustment_ == adjustment) return; @@ -862,10 +879,13 @@ } float VisualViewport::BrowserControlsAdjustment() const { + DCHECK(!browser_controls_adjustment_ || IsActiveViewport()); return browser_controls_adjustment_; } bool VisualViewport::UserInputScrollable(ScrollbarOrientation) const { + // User input scrollable is used to block scrolling from the visual viewport. + // If the viewport isn't active we don't have to do anything special. if (!IsActiveViewport()) return true; @@ -903,10 +923,10 @@ } mojom::blink::ColorScheme VisualViewport::UsedColorScheme() const { - if (IsActiveViewport()) { - if (Document* main_document = LocalMainFrame().GetDocument()) - return main_document->GetLayoutView()->StyleRef().UsedColorScheme(); - } + DCHECK(IsActiveViewport()); + if (Document* main_document = LocalMainFrame().GetDocument()) + return main_document->GetLayoutView()->StyleRef().UsedColorScheme(); + return mojom::blink::ColorScheme::kLight; } @@ -921,14 +941,17 @@ } cc::Layer* VisualViewport::LayerForScrolling() const { + DCHECK(!scroll_layer_ || IsActiveViewport()); return scroll_layer_.get(); } cc::Layer* VisualViewport::LayerForHorizontalScrollbar() const { + DCHECK(!scrollbar_layer_horizontal_ || IsActiveViewport()); return scrollbar_layer_horizontal_.get(); } cc::Layer* VisualViewport::LayerForVerticalScrollbar() const { + DCHECK(!scrollbar_layer_vertical_ || IsActiveViewport()); return scrollbar_layer_vertical_.get(); } @@ -945,8 +968,19 @@ bool VisualViewport::IsActiveViewport() const { Frame* main_frame = GetPage().MainFrame(); - return main_frame && main_frame->IsOutermostMainFrame() && - main_frame->IsLocalFrame(); + if (!main_frame) + return false; + + // If the main frame is remote, we're inside a remote subframe which + // shouldn't have an active visual viewport. + if (!main_frame->IsLocalFrame()) + return false; + + // Only the outermost main frame should have an active viewport. A portal is + // the only exception since it may eventually become the outermost main frame + // so its viewport should be active (e.g. it should be able to independently + // scale based on a viewport <meta> tag). + return main_frame->IsOutermostMainFrame() || GetPage().InsidePortal(); } LocalFrame& VisualViewport::LocalMainFrame() const { @@ -955,6 +989,9 @@ } gfx::Size VisualViewport::ExcludeScrollbars(const gfx::Size& size) const { + if (!IsActiveViewport()) + return size; + gfx::Size excluded_size = size; if (RootFrameViewport* root_frame_viewport = GetRootFrameViewport()) { excluded_size.Enlarge(-root_frame_viewport->VerticalScrollbarWidth(), @@ -1048,6 +1085,7 @@ } void VisualViewport::UserDidChangeScale() { + DCHECK(IsActiveViewport()); if (!track_pinch_zoom_stats_for_page_) return; @@ -1076,15 +1114,7 @@ } bool VisualViewport::ShouldDisableDesktopWorkarounds() const { - // TODO(bokan): Seems suspect that we keep desktop workarounds if we're in a - // remote frame. This is only ever called in a remote context from - // WebViewImpl::ShouldZoomToLegibleScale which is used to decide if a - // ScrollEditableIntoView should be zoomed as well. However, we won't know - // the real answer until the scroll bubbles to the outermost main frame's - // WebView. We probably need to propagate a DisableDesktopWorkarounds bit to - // remote WebViews. - if (!IsActiveViewport()) - return false; + DCHECK(IsActiveViewport()); LocalFrameView* frame_view = LocalMainFrame().View(); if (!frame_view) @@ -1106,6 +1136,10 @@ } cc::AnimationHost* VisualViewport::GetCompositorAnimationHost() const { + // TODO(bokan): This and below can be reached for an inactive viewport since + // RootFrameViewport is created inside non outermost main frames and can can + // call into here. Once that's fixed we should probably DCHECK here that the + // viewport is active. https://crbug.com/1314858. DCHECK(GetPage().MainFrame()->IsLocalFrame()); ScrollingCoordinator* c = GetPage().GetScrollingCoordinator(); return c ? c->GetCompositorAnimationHost() : nullptr; @@ -1131,8 +1165,7 @@ } PaintArtifactCompositor* VisualViewport::GetPaintArtifactCompositor() const { - if (!IsActiveViewport()) - return nullptr; + DCHECK(IsActiveViewport()); LocalFrameView* frame_view = LocalMainFrame().View(); if (!frame_view) @@ -1150,6 +1183,7 @@ value->SetInteger("height", ClampTo<int>(roundf(viewport.height()))); value->SetString("frameID", IdentifiersFactory::FrameId(GetPage().MainFrame())); + value->SetBoolean("isActive", IsActiveViewport()); return value; } @@ -1167,6 +1201,9 @@ } void VisualViewport::Paint(GraphicsContext& context) const { + if (!IsActiveViewport()) + return; + // TODO(crbug.com/1015625): Avoid scroll_layer_. if (scroll_layer_) { auto state = parent_property_tree_state_; @@ -1206,6 +1243,7 @@ } void VisualViewport::UsedColorSchemeChanged() { + DCHECK(IsActiveViewport()); // The scrollbar overlay color theme depends on the used color scheme. RecalculateScrollbarOverlayColorTheme(); }
diff --git a/third_party/blink/renderer/core/frame/visual_viewport.h b/third_party/blink/renderer/core/frame/visual_viewport.h index 9fa466d..c3c2a09 100644 --- a/third_party/blink/renderer/core/frame/visual_viewport.h +++ b/third_party/blink/renderer/core/frame/visual_viewport.h
@@ -279,8 +279,14 @@ PaintPropertyChangeType UpdatePaintPropertyNodesIfNeeded( PaintPropertyTreeBuilderFragmentContext& context); - void SetNeedsPaintPropertyUpdate() { needs_paint_property_update_ = true; } - bool NeedsPaintPropertyUpdate() const { return needs_paint_property_update_; } + void SetNeedsPaintPropertyUpdate() { + DCHECK(IsActiveViewport()); + needs_paint_property_update_ = true; + } + bool NeedsPaintPropertyUpdate() const { + DCHECK(IsActiveViewport()); + return needs_paint_property_update_; + } void DisposeImpl() override; @@ -288,6 +294,16 @@ void UsedColorSchemeChanged(); + // Returns whether this VisualViewport is "active", that is, whether it'll + // affect paint property trees. If false, this renderer cannot be + // independently scaled. + // + // A VisualViewport is created in renderers for remote frames / nested pages; + // however, in those cases it is "inert", it cannot change scale or location + // values. Only a <portal> or outermost main frame can have an active + // viewport. + bool IsActiveViewport() const; + private: bool DidSetScaleOrLocation(float scale, bool is_pinch_gesture_active, @@ -306,12 +322,6 @@ RootFrameViewport* GetRootFrameViewport() const; - // VisualViewport is created in renderers for remote frames / nested pages. - // However, in those cases it is "inert", it cannot change scale or location - // values. Only the VisualViewport created in the outermost main frame's - // renderer is "active". - bool IsActiveViewport() const; - // Returns the local main frame, this can only be called for an active // VisualViewport. LocalFrame& LocalMainFrame() const;
diff --git a/third_party/blink/renderer/core/frame/web_frame_widget_impl.cc b/third_party/blink/renderer/core/frame/web_frame_widget_impl.cc index 6494610..1ea3e003 100644 --- a/third_party/blink/renderer/core/frame/web_frame_widget_impl.cc +++ b/third_party/blink/renderer/core/frame/web_frame_widget_impl.cc
@@ -2130,9 +2130,12 @@ void WebFrameWidgetImpl::ApplyViewportChanges( const ApplyViewportChangesArgs& args) { - // Viewport changes only change the main frame. - if (!ForMainFrame()) + // Viewport changes only change the outermost main frame. Technically a + // portal has a viewport but it cannot produce changes from the compositor + // until activated so this should be correct for portals too. + if (!LocalRootImpl()->GetFrame()->IsOutermostMainFrame()) return; + WebViewImpl* web_view = View(); // TODO(https://crbug.com/1160652): Figure out if View is null. CHECK(widget_base_);
diff --git a/third_party/blink/renderer/core/fullscreen/fullscreen.cc b/third_party/blink/renderer/core/fullscreen/fullscreen.cc index bc58535..7dd207d 100644 --- a/third_party/blink/renderer/core/fullscreen/fullscreen.cc +++ b/third_party/blink/renderer/core/fullscreen/fullscreen.cc
@@ -126,8 +126,10 @@ // Update paint properties on the visual viewport since // user-input-scrollable bits will change based on fullscreen state. - if (Page* page = frame->GetPage()) - page->GetVisualViewport().SetNeedsPaintPropertyUpdate(); + if (Page* page = frame->GetPage()) { + if (page->GetVisualViewport().IsActiveViewport()) + page->GetVisualViewport().SetNeedsPaintPropertyUpdate(); + } } }
diff --git a/third_party/blink/renderer/core/html/forms/html_button_element.cc b/third_party/blink/renderer/core/html/forms/html_button_element.cc index 1d79666..c816434 100644 --- a/third_party/blink/renderer/core/html/forms/html_button_element.cc +++ b/third_party/blink/renderer/core/html/forms/html_button_element.cc
@@ -28,6 +28,7 @@ #include "third_party/blink/renderer/core/dom/attribute.h" #include "third_party/blink/renderer/core/dom/element.h" #include "third_party/blink/renderer/core/dom/events/simulated_click_options.h" +#include "third_party/blink/renderer/core/dom/qualified_name.h" #include "third_party/blink/renderer/core/events/keyboard_event.h" #include "third_party/blink/renderer/core/frame/web_feature.h" #include "third_party/blink/renderer/core/html/forms/form_data.h" @@ -110,16 +111,17 @@ void HTMLButtonElement::DefaultEventHandler(Event& event) { if (event.type() == event_type_names::kDOMActivate) { - PopupTriggerAction action; - if (Element* popupElement = togglePopupElement(action)) { - DCHECK_NE(action, PopupTriggerAction::kNone); - if (popupElement->popupOpen() && (action == PopupTriggerAction::kToggle || - action == PopupTriggerAction::kHide)) { - popupElement->hidePopup(ASSERT_NO_EXCEPTION); - } else if (!popupElement->popupOpen() && - (action == PopupTriggerAction::kToggle || - action == PopupTriggerAction::kShow)) { - popupElement->InvokePopup(this); + auto popup = togglePopupElement(); + if (popup.element) { + DCHECK_NE(popup.action, PopupTriggerAction::kNone); + if (popup.element->popupOpen() && + (popup.action == PopupTriggerAction::kToggle || + popup.action == PopupTriggerAction::kHide)) { + popup.element->hidePopup(ASSERT_NO_EXCEPTION); + } else if (!popup.element->popupOpen() && + (popup.action == PopupTriggerAction::kToggle || + popup.action == PopupTriggerAction::kShow)) { + popup.element->InvokePopup(this); } } if (!IsDisabledFormControl()) { @@ -148,43 +150,42 @@ // used. // 4. If both 'showpopup' and 'hidepopup' are present, the behavior is to // toggle. -Element* HTMLButtonElement::togglePopupElement( - PopupTriggerAction& action) const { - action = PopupTriggerAction::kNone; +HTMLButtonElement::TogglePopupElement HTMLButtonElement::togglePopupElement() + const { + const TogglePopupElement no_element{nullptr, PopupTriggerAction::kNone, + g_null_name}; if (!RuntimeEnabledFeatures::HTMLPopupAttributeEnabled()) - return nullptr; + return no_element; if (!IsInTreeScope()) - return nullptr; + return no_element; AtomicString idref; + QualifiedName attribute_name = html_names::kTogglepopupAttr; + PopupTriggerAction action = PopupTriggerAction::kToggle; if (FastHasAttribute(html_names::kTogglepopupAttr)) { idref = FastGetAttribute(html_names::kTogglepopupAttr); - action = PopupTriggerAction::kToggle; } else if (FastHasAttribute(html_names::kShowpopupAttr)) { idref = FastGetAttribute(html_names::kShowpopupAttr); action = PopupTriggerAction::kShow; + attribute_name = html_names::kShowpopupAttr; } if (FastHasAttribute(html_names::kHidepopupAttr)) { if (idref.IsNull()) { idref = FastGetAttribute(html_names::kHidepopupAttr); action = PopupTriggerAction::kHide; + attribute_name = html_names::kHidepopupAttr; } else if (FastGetAttribute(html_names::kHidepopupAttr) == idref) { action = PopupTriggerAction::kToggle; + // Leave attribute_name as-is in this case. } } if (idref.IsNull()) { - DCHECK_EQ(action, PopupTriggerAction::kNone); - return nullptr; + return no_element; } Element* popup_element = GetTreeScope().getElementById(idref); if (!popup_element || !popup_element->HasValidPopupAttribute()) { - action = PopupTriggerAction::kNone; - return nullptr; + return no_element; } - return popup_element; -} -Element* HTMLButtonElement::togglePopupElement() const { - PopupTriggerAction action; - return togglePopupElement(action); + return TogglePopupElement{popup_element, action, attribute_name}; } bool HTMLButtonElement::HasActivationBehavior() const {
diff --git a/third_party/blink/renderer/core/html/forms/html_button_element.h b/third_party/blink/renderer/core/html/forms/html_button_element.h index 0829f822..4a79501 100644 --- a/third_party/blink/renderer/core/html/forms/html_button_element.h +++ b/third_party/blink/renderer/core/html/forms/html_button_element.h
@@ -45,10 +45,18 @@ mojom::blink::FocusType, InputDeviceCapabilities*) override; + struct TogglePopupElement final { + public: + DISALLOW_NEW(); + WeakMember<Element> element; + PopupTriggerAction action; + QualifiedName attribute_name; + void Trace(Visitor* visitor) const { visitor->Trace(element); } + }; + // Retrieves the element pointed to by 'togglepopup', 'showpopup', and/or // 'hidepopup' content attributes, if any. - Element* togglePopupElement(PopupTriggerAction& action) const; - Element* togglePopupElement() const; + TogglePopupElement togglePopupElement() const; private: enum Type { kSubmit, kReset, kButton };
diff --git a/third_party/blink/renderer/core/inspector/dev_tools_emulator.cc b/third_party/blink/renderer/core/inspector/dev_tools_emulator.cc index d8f9160..bf316da 100644 --- a/third_party/blink/renderer/core/inspector/dev_tools_emulator.cc +++ b/third_party/blink/renderer/core/inspector/dev_tools_emulator.cc
@@ -355,7 +355,6 @@ mojom::blink::ViewportStyle::kMobile); web_view_->GetPage()->GetSettings().SetViewportEnabled(true); web_view_->GetPage()->GetSettings().SetViewportMetaEnabled(true); - web_view_->GetPage()->GetVisualViewport().InitializeScrollbars(); web_view_->GetPage()->GetSettings().SetShrinksViewportContentToFit(true); web_view_->GetPage()->GetSettings().SetTextAutosizingEnabled(true); web_view_->GetPage()->GetSettings().SetPreferCompositingToLCDTextEnabled( @@ -366,6 +365,13 @@ web_view_->SetZoomFactorOverride(1); web_view_->GetPage()->SetDefaultPageScaleLimits(0.25f, 5); + // If the viewport is active, refresh the scrollbar layers to reflect the + // emulated viewport style. If it's not active, either we're in an embedded + // frame and we don't have visual viewport scrollbars or the scrollbars will + // initialize as part of their regular lifecycle. + if (web_view_->GetPage()->GetVisualViewport().IsActiveViewport()) + web_view_->GetPage()->GetVisualViewport().InitializeScrollbars(); + if (web_view_->MainFrameImpl()) { web_view_->MainFrameImpl()->GetFrameView()->UpdateLifecycleToLayoutClean( DocumentUpdateReason::kInspector);
diff --git a/third_party/blink/renderer/core/layout/layout_view.cc b/third_party/blink/renderer/core/layout/layout_view.cc index ee6e79c..217ad95 100644 --- a/third_party/blink/renderer/core/layout/layout_view.cc +++ b/third_party/blink/renderer/core/layout/layout_view.cc
@@ -914,13 +914,13 @@ LayoutBlockFlow::StyleDidChange(diff, old_style); LocalFrame& frame = GetFrameView()->GetFrame(); - if (frame.IsMainFrame()) { + VisualViewport& visual_viewport = frame.GetPage()->GetVisualViewport(); + if (frame.IsMainFrame() && visual_viewport.IsActiveViewport()) { // |VisualViewport::UsedColorScheme| depends on the LayoutView's used // color scheme. if (!old_style || - old_style->UsedColorScheme() != - frame.GetPage()->GetVisualViewport().UsedColorScheme()) { - frame.GetPage()->GetVisualViewport().UsedColorSchemeChanged(); + old_style->UsedColorScheme() != visual_viewport.UsedColorScheme()) { + visual_viewport.UsedColorSchemeChanged(); } } }
diff --git a/third_party/blink/renderer/core/loader/frame_loader.cc b/third_party/blink/renderer/core/loader/frame_loader.cc index 6ccbada1..5fdcc5a 100644 --- a/third_party/blink/renderer/core/loader/frame_loader.cc +++ b/third_party/blink/renderer/core/loader/frame_loader.cc
@@ -369,11 +369,13 @@ history_item->SetScrollAnchorData(ScrollAnchorData()); if (ScrollableArea* layout_scrollable_area = frame_->View()->LayoutViewport()) history_item->SetScrollOffset(layout_scrollable_area->GetScrollOffset()); - history_item->SetVisualViewportScrollOffset( - frame_->GetPage()->GetVisualViewport().VisibleRect().OffsetFromOrigin()); - if (frame_->IsMainFrame()) - history_item->SetPageScaleFactor(frame_->GetPage()->PageScaleFactor()); + VisualViewport& visual_viewport = frame_->GetPage()->GetVisualViewport(); + if (frame_->IsMainFrame() && visual_viewport.IsActiveViewport()) { + history_item->SetVisualViewportScrollOffset( + visual_viewport.VisibleRect().OffsetFromOrigin()); + history_item->SetPageScaleFactor(visual_viewport.Scale()); + } Client()->DidUpdateCurrentHistoryItem(); }
diff --git a/third_party/blink/renderer/core/page/page.cc b/third_party/blink/renderer/core/page/page.cc index eeacf13..7e627ff 100644 --- a/third_party/blink/renderer/core/page/page.cc +++ b/third_party/blink/renderer/core/page/page.cc
@@ -653,8 +653,10 @@ } break; case ChangeType::kViewportPaintProperties: - GetVisualViewport().SetNeedsPaintPropertyUpdate(); - GetVisualViewport().InitializeScrollbars(); + if (GetVisualViewport().IsActiveViewport()) { + GetVisualViewport().SetNeedsPaintPropertyUpdate(); + GetVisualViewport().InitializeScrollbars(); + } if (auto* local_frame = DynamicTo<LocalFrame>(MainFrame())) { if (LocalFrameView* view = local_frame->View()) view->SetNeedsPaintPropertyUpdate();
diff --git a/third_party/blink/renderer/core/paint/paint_layer_scrollable_area.cc b/third_party/blink/renderer/core/paint/paint_layer_scrollable_area.cc index d569c9f..455ed04a 100644 --- a/third_party/blink/renderer/core/paint/paint_layer_scrollable_area.cc +++ b/third_party/blink/renderer/core/paint/paint_layer_scrollable_area.cc
@@ -1012,12 +1012,11 @@ // needs to update paint properties to account for the correct // scrollbounds. if (LocalFrameView* frame_view = GetLayoutBox()->GetFrameView()) { - if (this == frame_view->LayoutViewport()) { - GetLayoutBox() - ->GetFrame() - ->GetPage() - ->GetVisualViewport() - .SetNeedsPaintPropertyUpdate(); + VisualViewport& visual_viewport = + GetLayoutBox()->GetFrame()->GetPage()->GetVisualViewport(); + if (this == frame_view->LayoutViewport() && + visual_viewport.IsActiveViewport()) { + visual_viewport.SetNeedsPaintPropertyUpdate(); } }
diff --git a/third_party/blink/renderer/core/paint/pre_paint_tree_walk.cc b/third_party/blink/renderer/core/paint/pre_paint_tree_walk.cc index 81068e6f..79d77836 100644 --- a/third_party/blink/renderer/core/paint/pre_paint_tree_walk.cc +++ b/third_party/blink/renderer/core/paint/pre_paint_tree_walk.cc
@@ -58,10 +58,12 @@ if (needs_tree_builder_context_update) GeometryMapper::ClearCache(); - if (root_frame_view.GetFrame().IsMainFrame()) { + VisualViewport& visual_viewport = + root_frame_view.GetPage()->GetVisualViewport(); + if (visual_viewport.IsActiveViewport() && + root_frame_view.GetFrame().IsMainFrame()) { VisualViewportPaintPropertyTreeBuilder::Update( - root_frame_view, root_frame_view.GetPage()->GetVisualViewport(), - *context.tree_builder_context); + root_frame_view, visual_viewport, *context.tree_builder_context); } Walk(root_frame_view, context); @@ -266,6 +268,7 @@ const LocalFrameView& frame_view, const PrePaintTreeWalkContext& context) { if (frame_view.GetFrame().IsMainFrame() && + frame_view.GetPage()->GetVisualViewport().IsActiveViewport() && frame_view.GetPage()->GetVisualViewport().NeedsPaintPropertyUpdate()) { return true; }
diff --git a/third_party/blink/renderer/core/scroll/scroll_into_view_util.cc b/third_party/blink/renderer/core/scroll/scroll_into_view_util.cc index 049aca8d..000e5d9 100644 --- a/third_party/blink/renderer/core/scroll/scroll_into_view_util.cc +++ b/third_party/blink/renderer/core/scroll/scroll_into_view_util.cc
@@ -165,7 +165,10 @@ current_box->StyleRef().GetPosition() == EPosition::kFixed && current_box->Container() == current_box->View(); + VisualViewport& visual_viewport = + current_box->GetFrame()->GetPage()->GetVisualViewport(); if (is_fixed_to_frame && current_box->GetFrame()->IsMainFrame() && + visual_viewport.IsActiveViewport() && params->make_visible_in_visual_viewport) { // If we're in a position:fixed element, scrolling the layout viewport // won't have any effect and would be wrong so we want to bubble up to
diff --git a/third_party/blink/renderer/core/web_test/web_test_web_frame_widget_impl.cc b/third_party/blink/renderer/core/web_test/web_test_web_frame_widget_impl.cc index 703ee9e7..3fcfab5c 100644 --- a/third_party/blink/renderer/core/web_test/web_test_web_frame_widget_impl.cc +++ b/third_party/blink/renderer/core/web_test/web_test_web_frame_widget_impl.cc
@@ -16,6 +16,7 @@ #include "third_party/blink/renderer/core/document_transition/document_transition_supplement.h" #include "third_party/blink/renderer/core/exported/web_view_impl.h" #include "third_party/blink/renderer/core/frame/web_local_frame_impl.h" +#include "third_party/blink/renderer/platform/scheduler/public/thread.h" namespace blink { @@ -131,7 +132,7 @@ void WebTestWebFrameWidgetImpl::ScheduleAnimationInternal(bool do_raster) { // When using threaded compositing, have the WeFrameWidgetImpl normally // schedule a request for a frame, as we use the compositor's scheduler. - if (scheduler::WebThreadScheduler::CompositorThreadScheduler()) { + if (Thread::CompositorThread()) { WebFrameWidgetImpl::ScheduleAnimation(); return; }
diff --git a/third_party/blink/renderer/modules/accessibility/ax_node_object.cc b/third_party/blink/renderer/modules/accessibility/ax_node_object.cc index b0c5f50..ef2c0453 100644 --- a/third_party/blink/renderer/modules/accessibility/ax_node_object.cc +++ b/third_party/blink/renderer/modules/accessibility/ax_node_object.cc
@@ -1841,10 +1841,9 @@ // with type kPopup, then set aria-expanded=false when the popup is hidden, // and aria-expanded=true when it is showing. if (auto* button = DynamicTo<HTMLButtonElement>(element)) { - if (auto* popup = button->togglePopupElement()) { - if (popup->PopupType() == PopupValueType::kPopup) { - return popup->popupOpen() ? kExpandedExpanded : kExpandedCollapsed; - } + if (auto popup = button->togglePopupElement().element; + popup && popup->PopupType() == PopupValueType::kPopup) { + return popup->popupOpen() ? kExpandedExpanded : kExpandedCollapsed; } } @@ -3236,8 +3235,7 @@ NameSources* name_sources) const { // If nameSources is non-null, relatedObjects is used in filling it in, so it // must be non-null as well. - if (name_sources) - DCHECK(related_objects); + DCHECK(!name_sources || related_objects); bool found_text_alternative = false; @@ -5596,6 +5594,40 @@ } } + // For buttons that contain the |togglepopup|, |showpopup|, or |hidepopup| + // popup triggering attributes, and the pointed-to element is a valid popup + // with type kHint, then set aria-describedby to the hint popup. + if (auto* button = DynamicTo<HTMLButtonElement>(element)) { + auto popup = button->togglePopupElement(); + if (popup.element && popup.element->PopupType() == PopupValueType::kHint) { + description_from = ax::mojom::blink::DescriptionFrom::kPopupElement; + if (description_sources) { + description_sources->push_back( + DescriptionSource(found_description, popup.attribute_name)); + description_sources->back().type = description_from; + } + AXObject* popup_ax_object = AXObjectCache().GetOrCreate(popup.element); + if (popup_ax_object) { + AXObjectSet visited; + description = RecursiveTextAlternative(*popup_ax_object, + popup_ax_object, visited); + if (related_objects) { + related_objects->push_back( + MakeGarbageCollected<NameSourceRelatedObject>(popup_ax_object, + description)); + } + if (description_sources) { + DescriptionSource& source = description_sources->back(); + source.related_objects = *related_objects; + source.text = description; + found_description = true; + } else { + return description; + } + } + } + } + description_from = ax::mojom::blink::DescriptionFrom::kNone; if (found_description) {
diff --git a/third_party/blink/renderer/modules/mediasource/media_source.cc b/third_party/blink/renderer/modules/mediasource/media_source.cc index af8f48c..679e406 100644 --- a/third_party/blink/renderer/modules/mediasource/media_source.cc +++ b/third_party/blink/renderer/modules/mediasource/media_source.cc
@@ -7,7 +7,6 @@ #include <memory> #include <tuple> -#include "base/command_line.h" #include "base/memory/ptr_util.h" #include "base/metrics/histogram_functions.h" #include "build/chromeos_buildflags.h" @@ -580,62 +579,8 @@ // HTMLMediaElement.canPlayType() will return "maybe" or "probably" since it // does not make sense for a MediaSource to support a type the // HTMLMediaElement knows it cannot play. - String codecs = content_type.Parameter("codecs"); - MIMETypeRegistry::SupportsType get_supports_type_result; -#if BUILDFLAG(ENABLE_PLATFORM_ENCRYPTED_HEVC) - // Here, we special-case when encrypted HEVC is supported. - // isTypeSupported(fully qualified type with hevc codec) should say false on - // such platform (except if kEnableClearHevcForTesting cmdline switch is used, - // enabling GetSupportsType success), but addSourceBuffer(same) and - // changeType(same) shouldn't fail just due to having HEVC codec. We use - // |enforce_codec_specificity| to understand if we are servicing iTS (if true) - // versus aSB (if false). If servicing aSB or cT, we'll remove any detected - // hevc codec from the codecs we use in the GetSupportsType() query. -#if BUILDFLAG(IS_CHROMEOS_LACROS) - const bool allow_hevc = base::CommandLine::ForCurrentProcess()->HasSwitch( - switches::kLacrosEnablePlatformEncryptedHevc); -#else - const bool allow_hevc = true; -#endif // BUILDFLAG(IS_CHROMEOS_LACROS) - if (allow_hevc && !enforce_codec_specificity) { - // Remove any detected HEVC codec from the query to GetSupportsType. - std::string filtered_codecs; - std::vector<std::string> parsed_codec_ids; - media::SplitCodecs(codecs.Ascii(), &parsed_codec_ids); - bool first = true; - for (const auto& codec_id : parsed_codec_ids) { - bool is_codec_ambiguous; - media::VideoCodec video_codec = media::VideoCodec::kUnknown; - media::VideoCodecProfile profile; - uint8_t level = 0; - media::VideoColorSpace color_space; - if (media::ParseVideoCodecString(mime_type.Ascii(), codec_id, - &is_codec_ambiguous, &video_codec, - &profile, &level, &color_space) && - !is_codec_ambiguous && video_codec == media::VideoCodec::kHEVC) { - continue; - } - if (first) - first = false; - else - filtered_codecs += ","; - filtered_codecs += codec_id; - } - - std::string filtered_type = - mime_type.Ascii() + "; codecs=\"" + filtered_codecs + "\""; - DVLOG(1) << __func__ << " filtered_type=" << filtered_type; - get_supports_type_result = HTMLMediaElement::GetSupportsType( - ContentType(String::FromUTF8(filtered_type.c_str()))); - } else { - // Even on platforms with HEVC support, don't filter out HEVC codec when - // servicing isTypeSupported(). - get_supports_type_result = HTMLMediaElement::GetSupportsType(content_type); - } -#else - get_supports_type_result = HTMLMediaElement::GetSupportsType(content_type); -#endif // BUILDFLAG(ENABLE_PLATFORM_ENCRYPTED_HEVC) - + auto get_supports_type_result = + HTMLMediaElement::GetSupportsType(content_type); if (get_supports_type_result == MIMETypeRegistry::kIsNotSupported) { DVLOG(1) << __func__ << "(" << type << ", " << (enforce_codec_specificity ? "true" : "false") @@ -660,6 +605,7 @@ // specificity is and will be retained for isTypeSupported. // TODO(crbug.com/535738): Actually relax the codec-specifity for aSB() and // cT() (which is when |enforce_codec_specificity| is false). + String codecs = content_type.Parameter("codecs"); MIMETypeRegistry::SupportsType supported = MIMETypeRegistry::SupportsMediaSourceMIMEType(mime_type, codecs);
diff --git a/third_party/blink/renderer/modules/webgl/webgl_rendering_context_base.cc b/third_party/blink/renderer/modules/webgl/webgl_rendering_context_base.cc index e285aa5e..eb7557bd 100644 --- a/third_party/blink/renderer/modules/webgl/webgl_rendering_context_base.cc +++ b/third_party/blink/renderer/modules/webgl/webgl_rendering_context_base.cc
@@ -7067,6 +7067,13 @@ for (wtf_size_t i = 0; i < kWebGLExtensionNameCount; ++i) extension_enabled_[i] = false; + // This resolver is non-null during a makeXRCompatible call, while waiting + // for a response from the browser and XR process. If the WebGL context is + // lost before we get a response, the resolver has to be rejected to be + // be properly disposed of. + xr_compatible_ = false; + CompleteXrCompatiblePromiseIfPending(DOMExceptionCode::kInvalidStateError); + RemoveAllCompressedTextureFormats(); // If the DrawingBuffer is destroyed during a real lost context event it
diff --git a/third_party/blink/renderer/platform/graphics/gpu/image_layer_bridge.cc b/third_party/blink/renderer/platform/graphics/gpu/image_layer_bridge.cc index 6fe9bd8..70e14ba1 100644 --- a/third_party/blink/renderer/platform/graphics/gpu/image_layer_bridge.cc +++ b/third_party/blink/renderer/platform/graphics/gpu/image_layer_bridge.cc
@@ -96,7 +96,6 @@ image_ = std::move(image); if (image_) { - LOG(ERROR) << "Image Is texture-backed:" << image_->IsTextureBacked(); if (opacity_mode_ == kNonOpaque) { layer_->SetContentsOpaque(image_->CurrentFrameKnownToBeOpaque()); layer_->SetBlendBackgroundColor(!image_->CurrentFrameKnownToBeOpaque());
diff --git a/third_party/blink/renderer/platform/media/key_system_config_selector.cc b/third_party/blink/renderer/platform/media/key_system_config_selector.cc index 26eda9e9..0209629 100644 --- a/third_party/blink/renderer/platform/media/key_system_config_selector.cc +++ b/third_party/blink/renderer/platform/media/key_system_config_selector.cc
@@ -8,7 +8,6 @@ #include <utility> #include "base/bind.h" -#include "base/command_line.h" #include "base/logging.h" #include "base/metrics/histogram_macros.h" #include "base/strings/string_util.h" @@ -148,39 +147,6 @@ std::vector<std::string> codec_vector; media::SplitCodecs(codecs, &codec_vector); -#if BUILDFLAG(ENABLE_PLATFORM_ENCRYPTED_HEVC) - // EME HEVC is supported on under this build flag, but it is not supported for - // clear playback or when using ClearKey. Remove the HEVC codec strings to - // avoid asking IsSupported*MediaFormat() about HEVC. EME support for HEVC - // profiles is described via KeySystemProperties::GetSupportedCodecs(). - // TODO(1156282): Decouple the rest of clear vs EME codec support. -#if BUILDFLAG(IS_CHROMEOS_LACROS) - const bool allow_hevc = base::CommandLine::ForCurrentProcess()->HasSwitch( - switches::kLacrosEnablePlatformEncryptedHevc); -#else - const bool allow_hevc = true; -#endif // BUILDFLAG(IS_CHROMEOS_LACROS) - if (allow_hevc && !use_aes_decryptor && - base::ToLowerASCII(container_mime_type) == "video/mp4" && - !codec_vector.empty()) { - auto it = codec_vector.begin(); - while (it != codec_vector.end()) { - media::VideoCodecProfile profile; - uint8_t level_idc; - if (ParseHEVCCodecId(*it, &profile, &level_idc)) - codec_vector.erase(it); - else - ++it; - } - - // Avoid calling IsSupported*MediaFormat() with an empty vector. For - // "video/mp4", this will return MaybeSupported, which we would otherwise - // consider "false" below. - if (codec_vector.empty()) - return true; - } -#endif // BUILDFLAG(ENABLE_PLATFORM_ENCRYPTED_HEVC) - // AesDecryptor decrypts the stream in the demuxer before it reaches the // decoder so check whether the media format is supported when clear. media::SupportsType support_result =
diff --git a/third_party/blink/renderer/platform/scheduler/common/web_thread_scheduler.cc b/third_party/blink/renderer/platform/scheduler/common/web_thread_scheduler.cc index d45d70cb..70f5371e 100644 --- a/third_party/blink/renderer/platform/scheduler/common/web_thread_scheduler.cc +++ b/third_party/blink/renderer/platform/scheduler/common/web_thread_scheduler.cc
@@ -63,12 +63,6 @@ } scoped_refptr<base::SingleThreadTaskRunner> -WebThreadScheduler::InputTaskRunner() { - NOTREACHED(); - return nullptr; -} - -scoped_refptr<base::SingleThreadTaskRunner> WebThreadScheduler::CompositorTaskRunner() { NOTREACHED(); return nullptr;
diff --git a/third_party/blink/renderer/platform/scheduler/public/thread_scheduler.h b/third_party/blink/renderer/platform/scheduler/public/thread_scheduler.h index 44d4536..5ea13a6 100644 --- a/third_party/blink/renderer/platform/scheduler/public/thread_scheduler.h +++ b/third_party/blink/renderer/platform/scheduler/public/thread_scheduler.h
@@ -43,6 +43,10 @@ // Return the current thread's ThreadScheduler. static ThreadScheduler* Current(); + // Returns compositor thread scheduler for the compositor thread + // of the current process. + static ThreadScheduler* CompositorThreadScheduler(); + virtual ~ThreadScheduler() = default; // Called to prevent any more pending tasks from running. Must be called on @@ -102,6 +106,13 @@ virtual scoped_refptr<base::SingleThreadTaskRunner> CompositorTaskRunner() = 0; + // Returns a task runner for input-blocking tasks on the compositor thread. + // (For input tasks on the main thread, use WebWidgetScheduler instead.) + virtual scoped_refptr<base::SingleThreadTaskRunner> InputTaskRunner() { + NOTREACHED(); + return nullptr; + } + // Returns a default task runner. This is basically same as the default task // runner, but is explicitly allowed to run JavaScript. We plan to forbid V8 // execution on per-thread task runners (crbug.com/913912). If you need to
diff --git a/third_party/blink/renderer/platform/scheduler/worker/compositor_thread_scheduler.cc b/third_party/blink/renderer/platform/scheduler/worker/compositor_thread_scheduler.cc index 3f485cb..0b283e0 100644 --- a/third_party/blink/renderer/platform/scheduler/worker/compositor_thread_scheduler.cc +++ b/third_party/blink/renderer/platform/scheduler/worker/compositor_thread_scheduler.cc
@@ -16,19 +16,20 @@ #include "third_party/blink/renderer/platform/scheduler/common/scheduler_helper.h" namespace blink { -namespace scheduler { namespace { -CompositorThreadScheduler* g_compositor_thread_scheduler = nullptr; +scheduler::CompositorThreadScheduler* g_compositor_thread_scheduler = nullptr; } // namespace // static -WebThreadScheduler* WebThreadScheduler::CompositorThreadScheduler() { +ThreadScheduler* ThreadScheduler::CompositorThreadScheduler() { return g_compositor_thread_scheduler; } +namespace scheduler { + CompositorThreadScheduler::CompositorThreadScheduler( base::sequence_manager::SequenceManager* sequence_manager) : NonMainThreadSchedulerImpl(sequence_manager, @@ -76,7 +77,8 @@ scoped_refptr<base::SingleThreadTaskRunner> CompositorThreadScheduler::DefaultTaskRunner() { - return GetHelper().DefaultTaskRunner(); + NOTREACHED(); + return nullptr; } scoped_refptr<base::SingleThreadTaskRunner> @@ -86,8 +88,7 @@ scoped_refptr<base::SingleThreadTaskRunner> CompositorThreadScheduler::CompositorTaskRunner() { - NOTREACHED(); - return nullptr; + return GetHelper().DefaultTaskRunner(); } scoped_refptr<base::SingleThreadTaskRunner>
diff --git a/third_party/blink/renderer/platform/widget/input/widget_input_handler_manager.cc b/third_party/blink/renderer/platform/widget/input/widget_input_handler_manager.cc index 62338e1f..d72b6a91 100644 --- a/third_party/blink/renderer/platform/widget/input/widget_input_handler_manager.cc +++ b/third_party/blink/renderer/platform/widget/input/widget_input_handler_manager.cc
@@ -27,6 +27,8 @@ #include "third_party/blink/public/platform/platform.h" #include "third_party/blink/public/platform/scheduler/web_thread_scheduler.h" #include "third_party/blink/public/platform/scheduler/web_widget_scheduler.h" +#include "third_party/blink/renderer/platform/scheduler/public/agent_group_scheduler.h" +#include "third_party/blink/renderer/platform/scheduler/public/thread_scheduler.h" #include "third_party/blink/renderer/platform/widget/frame_widget.h" #include "third_party/blink/renderer/platform/widget/input/elastic_overscroll_controller.h" #include "third_party/blink/renderer/platform/widget/input/main_thread_event_queue.h" @@ -185,14 +187,14 @@ base::WeakPtr<mojom::blink::FrameWidgetInputHandler> frame_widget_input_handler, bool never_composited, - scheduler::WebThreadScheduler* compositor_thread_scheduler, - scheduler::WebThreadScheduler* main_thread_scheduler, + ThreadScheduler* compositor_thread_scheduler, + AgentGroupScheduler& agent_group_scheduler, bool uses_input_handler, bool allow_scroll_resampling) { scoped_refptr<WidgetInputHandlerManager> manager = new WidgetInputHandlerManager( std::move(widget), std::move(frame_widget_input_handler), - never_composited, compositor_thread_scheduler, main_thread_scheduler, + never_composited, compositor_thread_scheduler, agent_group_scheduler, allow_scroll_resampling); if (uses_input_handler) manager->InitInputHandler(); @@ -213,23 +215,25 @@ base::WeakPtr<mojom::blink::FrameWidgetInputHandler> frame_widget_input_handler, bool never_composited, - scheduler::WebThreadScheduler* compositor_thread_scheduler, - scheduler::WebThreadScheduler* main_thread_scheduler, + ThreadScheduler* compositor_thread_scheduler, + AgentGroupScheduler& agent_group_thread_scheduler, bool allow_scroll_resampling) : widget_(std::move(widget)), frame_widget_input_handler_(std::move(frame_widget_input_handler)), - widget_scheduler_(main_thread_scheduler->CreateWidgetScheduler()), - main_thread_scheduler_(main_thread_scheduler), + widget_scheduler_(agent_group_thread_scheduler.GetMainThreadScheduler() + .CreateWidgetScheduler()), + main_thread_scheduler_( + &agent_group_thread_scheduler.GetMainThreadScheduler()), input_event_queue_(base::MakeRefCounted<MainThreadEventQueue>( this, widget_scheduler_->InputTaskRunner(), - main_thread_scheduler, + main_thread_scheduler_, /*allow_raf_aligned_input=*/!never_composited)), main_thread_task_runner_(widget_scheduler_->InputTaskRunner()), compositor_thread_default_task_runner_( compositor_thread_scheduler - ? compositor_thread_scheduler->DefaultTaskRunner() + ? compositor_thread_scheduler->CompositorTaskRunner() : nullptr), compositor_thread_input_blocking_task_runner_( compositor_thread_scheduler
diff --git a/third_party/blink/renderer/platform/widget/input/widget_input_handler_manager.h b/third_party/blink/renderer/platform/widget/input/widget_input_handler_manager.h index 3ba0c346..44cc91e1 100644 --- a/third_party/blink/renderer/platform/widget/input/widget_input_handler_manager.h +++ b/third_party/blink/renderer/platform/widget/input/widget_input_handler_manager.h
@@ -35,8 +35,10 @@ class WebThreadScheduler; } // namespace scheduler +class AgentGroupScheduler; class SynchronousCompositorRegistry; class SynchronousCompositorProxyRegistry; +class ThreadScheduler; class WebInputEventAttribution; class WidgetBase; @@ -77,8 +79,8 @@ base::WeakPtr<mojom::blink::FrameWidgetInputHandler> frame_widget_input_handler, bool never_composited, - scheduler::WebThreadScheduler* compositor_thread_scheduler, - scheduler::WebThreadScheduler* main_thread_scheduler, + ThreadScheduler* compositor_thread_scheduler, + AgentGroupScheduler& agent_group_scheduler, bool needs_input_handler, bool allow_scroll_resampling); @@ -180,14 +182,13 @@ ~WidgetInputHandlerManager() override; private: - WidgetInputHandlerManager( - base::WeakPtr<WidgetBase> widget, - base::WeakPtr<mojom::blink::FrameWidgetInputHandler> - frame_widget_input_handler, - bool never_composited, - scheduler::WebThreadScheduler* compositor_thread_scheduler, - scheduler::WebThreadScheduler* main_thread_scheduler, - bool allow_scroll_resampling); + WidgetInputHandlerManager(base::WeakPtr<WidgetBase> widget, + base::WeakPtr<mojom::blink::FrameWidgetInputHandler> + frame_widget_input_handler, + bool never_composited, + ThreadScheduler* compositor_thread_scheduler, + AgentGroupScheduler& agent_group_scheduler, + bool allow_scroll_resampling); void InitInputHandler(); void InitOnInputHandlingThread( const base::WeakPtr<cc::CompositorDelegateForInput>& compositor_delegate,
diff --git a/third_party/blink/renderer/platform/widget/widget_base.cc b/third_party/blink/renderer/platform/widget/widget_base.cc index 6e3c3a7..71f6f19 100644 --- a/third_party/blink/renderer/platform/widget/widget_base.cc +++ b/third_party/blink/renderer/platform/widget/widget_base.cc
@@ -39,6 +39,7 @@ #include "third_party/blink/public/web/blink.h" #include "third_party/blink/renderer/platform/runtime_enabled_features.h" #include "third_party/blink/renderer/platform/scheduler/public/thread.h" +#include "third_party/blink/renderer/platform/scheduler/public/thread_scheduler.h" #include "third_party/blink/renderer/platform/widget/compositing/layer_tree_settings.h" #include "third_party/blink/renderer/platform/widget/compositing/layer_tree_view.h" #include "third_party/blink/renderer/platform/widget/compositing/render_frame_metadata_observer_impl.h" @@ -189,7 +190,7 @@ agent_group_scheduler.CompositorTaskRunner(); auto* compositing_thread_scheduler = - scheduler::WebThreadScheduler::CompositorThreadScheduler(); + ThreadScheduler::CompositorThreadScheduler(); layer_tree_view_ = std::make_unique<LayerTreeView>(this, main_thread_scheduler); @@ -206,17 +207,16 @@ layer_tree_view_->Initialize( *settings, main_thread_compositor_task_runner_, compositing_thread_scheduler - ? compositing_thread_scheduler->DefaultTaskRunner() + ? compositing_thread_scheduler->CompositorTaskRunner() : nullptr, platform->GetTaskGraphRunner()); FrameWidget* frame_widget = client_->FrameWidget(); - // |compositor_thread_scheduler| will be null for a popup (since it has no - // FrameWidget) or in tests without a compositor thread. - scheduler::WebThreadScheduler* compositor_thread_scheduler = - frame_widget ? scheduler::WebThreadScheduler::CompositorThreadScheduler() - : nullptr; + // Even if we have a |compositing_thread_scheduler| we do not process input + // on the compositor thread for widgets that are not frames. (ie. popups). + auto* widget_compositing_thread_scheduler = + frame_widget ? compositing_thread_scheduler : nullptr; // We only use an external input handler for frame widgets because only // frames use the compositor for input handling. Other kinds of widgets @@ -225,8 +225,9 @@ bool uses_input_handler = frame_widget; widget_input_handler_manager_ = WidgetInputHandlerManager::Create( weak_ptr_factory_.GetWeakPtr(), std::move(frame_widget_input_handler), - never_composited_, compositor_thread_scheduler, main_thread_scheduler, - uses_input_handler, client_->AllowsScrollResampling()); + never_composited_, widget_compositing_thread_scheduler, + agent_group_scheduler.AsAgentGroupScheduler(), uses_input_handler, + client_->AllowsScrollResampling()); const base::CommandLine& command_line = *base::CommandLine::ForCurrentProcess();
diff --git a/third_party/blink/web_tests/ASANExpectations b/third_party/blink/web_tests/ASANExpectations index 1101dad..c02ebbe 100644 --- a/third_party/blink/web_tests/ASANExpectations +++ b/third_party/blink/web_tests/ASANExpectations
@@ -1,4 +1,4 @@ -# tags: [ Android Fuchsia Linux Mac Mac10.12 Mac10.13 Win Win7 Win10.20h2 Win11 ] +# tags: [ Android Fuchsia Linux Mac Mac10.13 Win Win7 Win10.20h2 Win11 ] # tags: [ Release Debug ] # results: [ Timeout Crash Pass Failure Slow Skip ]
diff --git a/third_party/blink/web_tests/FlagExpectations/disable-layout-ng b/third_party/blink/web_tests/FlagExpectations/disable-layout-ng index 4363033a..da508c2 100644 --- a/third_party/blink/web_tests/FlagExpectations/disable-layout-ng +++ b/third_party/blink/web_tests/FlagExpectations/disable-layout-ng
@@ -1,4 +1,4 @@ -# tags: [ Android Fuchsia Linux Mac Mac10.12 Mac10.13 Win Win7 Win10 Win11 ] +# tags: [ Android Fuchsia Linux Mac Mac10.13 Win Win7 Win10 Win11 ] # tags: [ Release Debug ] # results: [ Timeout Crash Pass Failure Slow Skip ]
diff --git a/third_party/blink/web_tests/FlagExpectations/disable-site-isolation-trials b/third_party/blink/web_tests/FlagExpectations/disable-site-isolation-trials index c09bb79..b63f747 100644 --- a/third_party/blink/web_tests/FlagExpectations/disable-site-isolation-trials +++ b/third_party/blink/web_tests/FlagExpectations/disable-site-isolation-trials
@@ -1,4 +1,4 @@ -# tags: [ Android Fuchsia Linux Mac Mac10.12 Mac10.13 Win Win7 Win10 Win11 ] +# tags: [ Android Fuchsia Linux Mac Mac10.13 Win Win7 Win10 Win11 ] # tags: [ Release Debug ] # results: [ Timeout Crash Pass Failure Slow Skip ]
diff --git a/third_party/blink/web_tests/FlagExpectations/force-renderer-accessibility b/third_party/blink/web_tests/FlagExpectations/force-renderer-accessibility index 5e48a3ea..a409bae 100644 --- a/third_party/blink/web_tests/FlagExpectations/force-renderer-accessibility +++ b/third_party/blink/web_tests/FlagExpectations/force-renderer-accessibility
@@ -1,4 +1,4 @@ -# tags: [ Android Fuchsia Linux Mac Mac10.12 Mac10.13 Win Win7 Win10 Win11 ] +# tags: [ Android Fuchsia Linux Mac Mac10.13 Win Win7 Win10 Win11 ] # results: [ Timeout Crash Pass Failure Slow Skip ] # Expectations for --force-renderer-accessibility
diff --git a/third_party/blink/web_tests/FlagExpectations/skia-vulkan-swiftshader b/third_party/blink/web_tests/FlagExpectations/skia-vulkan-swiftshader index eaa2b447..dce5b94 100644 --- a/third_party/blink/web_tests/FlagExpectations/skia-vulkan-swiftshader +++ b/third_party/blink/web_tests/FlagExpectations/skia-vulkan-swiftshader
@@ -1,4 +1,4 @@ -# tags: [ Android Fuchsia Linux Mac Mac10.12 Mac10.13 Win Win7 Win10 Win11 ] +# tags: [ Android Fuchsia Linux Mac Mac10.13 Win Win7 Win10 Win11 ] # tags: [ Release Debug ] # results: [ Timeout Crash Pass Failure Slow Skip ]
diff --git a/third_party/blink/web_tests/LeakExpectations b/third_party/blink/web_tests/LeakExpectations index b55b868..553f8ab 100644 --- a/third_party/blink/web_tests/LeakExpectations +++ b/third_party/blink/web_tests/LeakExpectations
@@ -1,4 +1,4 @@ -# tags: [ Android Fuchsia Linux Mac Mac10.12 Mac10.13 Win Win7 Win10.20h2 Win11 ] +# tags: [ Android Fuchsia Linux Mac Mac10.13 Win Win7 Win10.20h2 Win11 ] # tags: [ Release Debug ] # results: [ Timeout Crash Pass Failure Slow Skip ]
diff --git a/third_party/blink/web_tests/MSANExpectations b/third_party/blink/web_tests/MSANExpectations index e72da5f8..0359303 100644 --- a/third_party/blink/web_tests/MSANExpectations +++ b/third_party/blink/web_tests/MSANExpectations
@@ -1,4 +1,4 @@ -# tags: [ Android Fuchsia Linux Mac Mac10.12 Mac10.13 Win Win7 Win10.20h2 Win11 ] +# tags: [ Android Fuchsia Linux Mac Mac10.13 Win Win7 Win10.20h2 Win11 ] # tags: [ Release Debug ] # results: [ Timeout Crash Pass Failure Slow Skip ] @@ -99,4 +99,4 @@ crbug.com/1126305 [ Linux ] virtual/prerender/external/wpt/speculation-rules/prerender/fetch-blob.html [ Skip ] crbug.com/1126305 [ Linux ] virtual/prerender/external/wpt/speculation-rules/prerender/cache-storage.https.html [ Skip ] crbug.com/1126305 [ Linux ] virtual/prerender/external/wpt/speculation-rules/prerender/indexeddb.html [ Skip ] -crbug.com/1126305 [ Linux ] virtual/prerender/external/wpt/speculation-rules/prerender/restriction-focus.html [ Skip ] \ No newline at end of file +crbug.com/1126305 [ Linux ] virtual/prerender/external/wpt/speculation-rules/prerender/restriction-focus.html [ Skip ]
diff --git a/third_party/blink/web_tests/TestExpectations b/third_party/blink/web_tests/TestExpectations index 589affcb..c83142d 100644 --- a/third_party/blink/web_tests/TestExpectations +++ b/third_party/blink/web_tests/TestExpectations
@@ -417,6 +417,8 @@ crbug.com/1295445 external/wpt/css/filter-effects/filter-function/filter-function-005.html [ Failure ] crbug.com/1295445 external/wpt/css/filter-effects/filter-function/filter-function-006.html [ Failure ] crbug.com/1295445 external/wpt/css/filter-effects/filter-function/filter-function-007.html [ Failure ] +crbug.com/903383 virtual/scalefactor200/external/wpt/css/filter-effects/css-filters-animation-combined-001.html [ Failure ] +crbug.com/903383 virtual/scalefactor200/external/wpt/css/filter-effects/css-filters-animation-blur.html [ Failure ] crbug.com/1295445 virtual/scalefactor200/external/wpt/css/filter-effects/filter-function/filter-function-001.html [ Failure ] crbug.com/1295445 virtual/scalefactor200/external/wpt/css/filter-effects/filter-function/filter-function-002.html [ Failure ] crbug.com/1295445 virtual/scalefactor200/external/wpt/css/filter-effects/filter-function/filter-function-003.html [ Failure ] @@ -6815,3 +6817,6 @@ # Pending Beacon API: Not enabled by default so skip these tests. crbug.com/1293679 pending_beacon/pending_beacon-basic.html [ Skip ] crbug.com/1293679 pending_beacon/pending_beacon-deactivate.html [ Skip ] + +# Sheriff 2022-05-20 +crbug.com/1291841 external/wpt/scroll-to-text-fragment/scroll-to-text-fragment-security.sub.html [ Timeout Pass ]
diff --git a/third_party/blink/web_tests/W3CImportExpectations b/third_party/blink/web_tests/W3CImportExpectations index f557318e..66f530b 100644 --- a/third_party/blink/web_tests/W3CImportExpectations +++ b/third_party/blink/web_tests/W3CImportExpectations
@@ -1,4 +1,4 @@ -# tags: [ Android Fuchsia Linux Mac Mac10.12 Mac10.13 Win Win7 Win10.20h2 Win11 ] +# tags: [ Android Fuchsia Linux Mac Mac10.13 Win Win7 Win10.20h2 Win11 ] # tags: [ Release Debug ] # results: [ Skip ]
diff --git a/third_party/blink/web_tests/WPTOverrideExpectations b/third_party/blink/web_tests/WPTOverrideExpectations index 01feb06..d5137e7 100644 --- a/third_party/blink/web_tests/WPTOverrideExpectations +++ b/third_party/blink/web_tests/WPTOverrideExpectations
@@ -1,4 +1,4 @@ -# tags: [ Android Fuchsia Linux Mac Mac10.12 Mac10.13 Win Win7 Win10.20h2 Win11 ] +# tags: [ Android Fuchsia Linux Mac Mac10.13 Win Win7 Win10.20h2 Win11 ] # tags: [ Release Debug ] # results: [ Timeout Crash Pass Failure Slow Skip ]
diff --git a/third_party/blink/web_tests/WebDriverExpectations b/third_party/blink/web_tests/WebDriverExpectations index 3dd9095..1b436b8 100644 --- a/third_party/blink/web_tests/WebDriverExpectations +++ b/third_party/blink/web_tests/WebDriverExpectations
@@ -1,4 +1,4 @@ -# tags: [ Android Fuchsia Linux Mac Mac10.12 Mac10.13 Mac10.14 Mac10.15 Mac11 Win Win7 Win10.20h2 Win11 ] +# tags: [ Android Fuchsia Linux Mac Mac10.13 Mac10.14 Mac10.15 Mac11 Win Win7 Win10.20h2 Win11 ] # tags: [ Release Debug ] # results: [ Timeout Crash Pass Failure Slow Skip ]
diff --git a/third_party/blink/web_tests/WebGPUExpectations b/third_party/blink/web_tests/WebGPUExpectations index 0626de8..5a2373c 100644 --- a/third_party/blink/web_tests/WebGPUExpectations +++ b/third_party/blink/web_tests/WebGPUExpectations
@@ -1,4 +1,4 @@ -# tags: [ Android Fuchsia Linux Mac Mac10.12 Mac10.13 Mac11 Win Win7 Win10.20h2 Win11 ] +# tags: [ Android Fuchsia Linux Mac Mac10.13 Mac11 Win Win7 Win10.20h2 Win11 ] # tags: [ Release Debug ] # results: [ Timeout Crash Pass Failure Slow Skip RetryOnFailure ]
diff --git a/third_party/closure_compiler/externs/automation.js b/third_party/closure_compiler/externs/automation.js index 3bf58d4..703cccf 100644 --- a/third_party/closure_compiler/externs/automation.js +++ b/third_party/closure_compiler/externs/automation.js
@@ -1,4 +1,4 @@ -// Copyright 2021 The Chromium Authors. All rights reserved. +// Copyright 2022 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. @@ -462,6 +462,7 @@ chrome.automation.DescriptionFromType = { ARIA_DESCRIPTION: 'ariaDescription', BUTTON_LABEL: 'buttonLabel', + POPUP_ELEMENT: 'popupElement', RELATED_ELEMENT: 'relatedElement', RUBY_ANNOTATION: 'rubyAnnotation', SUMMARY: 'summary',
diff --git a/third_party/ipcz/src/BUILD.gn b/third_party/ipcz/src/BUILD.gn index 13dc9c5..9f214d0 100644 --- a/third_party/ipcz/src/BUILD.gn +++ b/third_party/ipcz/src/BUILD.gn
@@ -5,6 +5,10 @@ import("//build_overrides/ipcz.gni") import("//testing/test.gni") +# ipcz will not implement a multiprocess reference driver or its supporting +# primitives for iOS or NaCl platforms. Note that this only affects ipcz tests. +enable_ipcz_multiprocess_test_support = !is_ios && !is_nacl + shared_library("ipcz_shared") { output_name = "ipcz" sources = [ @@ -126,6 +130,8 @@ } ipcz_source_set("reference_drivers") { + testonly = true + public = [ "reference_drivers/single_process_reference_driver.h" ] sources = [ @@ -136,9 +142,58 @@ "reference_drivers/single_process_reference_driver.cc", ] + if (enable_ipcz_multiprocess_test_support) { + public += [ + "reference_drivers/memory.h", + "reference_drivers/os_handle.h", + ] + sources += [ "reference_drivers/memory.cc" ] + + if (is_android) { + sources += [ + "reference_drivers/memory_android.cc", + "reference_drivers/os_handle_posix.cc", + "reference_drivers/os_handle_posix.h", + ] + } else if (is_mac) { + sources += [ + "reference_drivers/memory_mac.cc", + "reference_drivers/os_handle_mac.cc", + "reference_drivers/os_handle_mac.h", + ] + } else if (is_win) { + sources += [ + "reference_drivers/memory_win.cc", + "reference_drivers/os_handle_win.cc", + "reference_drivers/os_handle_win.h", + ] + } else if (is_fuchsia) { + sources += [ + "reference_drivers/memory_fuchsia.cc", + "reference_drivers/os_handle_fuchsia.cc", + "reference_drivers/os_handle_fuchsia.h", + ] + } else if (is_posix) { + sources += [ + "reference_drivers/memory_posix.cc", + "reference_drivers/os_handle_posix.cc", + "reference_drivers/os_handle_posix.h", + ] + } + } + ipcz_deps = [ ":util" ] public_deps = [ ":ipcz_header" ] configs = [ ":ipcz_include_src_dir" ] + + deps = [] + if (is_fuchsia) { + public_deps += [ "//third_party/fuchsia-sdk/sdk/pkg/zx" ] + } + + if (is_android) { + deps += [ "//third_party/ashmem" ] + } } ipcz_source_set("util") { @@ -295,6 +350,10 @@ "util/stack_trace_test.cc", ] + if (enable_ipcz_multiprocess_test_support) { + sources += [ "reference_drivers/memory_test.cc" ] + } + deps = [ "//testing/gmock", "//testing/gtest",
diff --git a/third_party/ipcz/src/reference_drivers/memory.cc b/third_party/ipcz/src/reference_drivers/memory.cc new file mode 100644 index 0000000..041fa84 --- /dev/null +++ b/third_party/ipcz/src/reference_drivers/memory.cc
@@ -0,0 +1,50 @@ +// Copyright 2022 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "reference_drivers/memory.h" + +#include <utility> + +#include "build/build_config.h" +#include "third_party/abseil-cpp/absl/base/macros.h" + +namespace ipcz::reference_drivers { + +Memory::Mapping::Mapping() = default; + +Memory::Mapping::Mapping(void* base_address, size_t size) + : base_address_(base_address), size_(size) {} + +Memory::Mapping::Mapping(Mapping&& other) + : base_address_(std::exchange(other.base_address_, nullptr)), + size_(std::exchange(other.size_, 0)) {} + +Memory::Mapping& Memory::Mapping::operator=(Mapping&& other) { + Reset(); + base_address_ = std::exchange(other.base_address_, nullptr); + size_ = std::exchange(other.size_, 0); + return *this; +} + +Memory::Mapping::~Mapping() { + Reset(); +} + +Memory::Memory() = default; + +Memory::Memory(OSHandle handle, size_t size) + : handle_(std::move(handle)), size_(size) {} + +Memory::Memory(Memory&&) = default; + +Memory& Memory::operator=(Memory&&) = default; + +Memory::~Memory() = default; + +Memory Memory::Clone() { + ABSL_ASSERT(is_valid()); + return Memory(handle_.Clone(), size_); +} + +} // namespace ipcz::reference_drivers
diff --git a/third_party/ipcz/src/reference_drivers/memory.h b/third_party/ipcz/src/reference_drivers/memory.h new file mode 100644 index 0000000..eaf24857 --- /dev/null +++ b/third_party/ipcz/src/reference_drivers/memory.h
@@ -0,0 +1,95 @@ +// Copyright 2022 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef IPCZ_SRC_REFERENCE_DRIVERS_MEMORY_H_ +#define IPCZ_SRC_REFERENCE_DRIVERS_MEMORY_H_ + +#include "reference_drivers/os_handle.h" +#include "third_party/abseil-cpp/absl/types/span.h" + +namespace ipcz::reference_drivers { + +// Cross-platform abstraction for a shared memory region. +class Memory { + public: + // Cross-platform abstraction for an active mapping of a shared memory region. + // + // Instances of this object should be acquired from Memory::Map(). + class Mapping { + public: + Mapping(); + Mapping(void* base_address, size_t size); + Mapping(Mapping&&); + Mapping& operator=(Mapping&&); + Mapping(const Mapping&) = delete; + Mapping& operator=(const Mapping&) = delete; + ~Mapping(); + + bool is_valid() const { return base_address_ != nullptr; } + + size_t size() const { return size_; } + void* base() const { return base_address_; } + + absl::Span<uint8_t> bytes() const { + return {static_cast<uint8_t*>(base()), size_}; + } + + template <typename T> + T* As() const { + return static_cast<T*>(base()); + } + + void Reset(); + + private: + void* base_address_ = nullptr; + size_t size_ = 0; + }; + + // Constructs an invalid Memory object which cannot be mapped. + Memory(); + + // Constructs a new Memory object over `handle`, an OSHandle which should have + // been previously taken from some other valid Memory object. `size` must + // correspond to the size of that original region. + Memory(OSHandle handle, size_t size); + + // Constructs a new Memory object over a newly allocated shared memory region + // of at least `size` bytes. + explicit Memory(size_t size); + + Memory(Memory&&); + Memory& operator=(Memory&&); + Memory(const Memory&) = delete; + Memory& operator=(const Memory&) = delete; + ~Memory(); + + size_t size() const { return size_; } + bool is_valid() const { return handle_.is_valid(); } + const OSHandle& handle() const { return handle_; } + + // Invalidates this Memory object and returns an OSHandle which can be used + // later to reconstruct an equivalent Memory object, given the same size(). + OSHandle TakeHandle() { return std::move(handle_); } + + // Resets this object, closing its handle to the underlying region. + void reset() { handle_.reset(); } + + // Returns a new Memory object with its own handle to the same underlying + // region as `this`. Must only be called on a valid Memory object (i.e. + // is_valid() must be true.) + Memory Clone(); + + // Maps the entire region owned by Memory and returns a Mapping for it. Must + // only be called on a valid Memory object (i.e. is_valid() must be true.) + Mapping Map(); + + private: + OSHandle handle_; + size_t size_ = 0; +}; + +} // namespace ipcz::reference_drivers + +#endif // IPCZ_SRC_REFERENCE_DRIVERS_MEMORY_H_
diff --git a/third_party/ipcz/src/reference_drivers/memory_android.cc b/third_party/ipcz/src/reference_drivers/memory_android.cc new file mode 100644 index 0000000..355b20f --- /dev/null +++ b/third_party/ipcz/src/reference_drivers/memory_android.cc
@@ -0,0 +1,45 @@ +// Copyright 2022 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "reference_drivers/memory.h" + +#include <sys/mman.h> +#include <unistd.h> + +#include <cstddef> + +#include "reference_drivers/os_handle.h" +#include "third_party/abseil-cpp/absl/base/macros.h" +#include "third_party/ashmem/ashmem.h" + +namespace ipcz::reference_drivers { + +void Memory::Mapping::Reset() { + if (base_address_) { + munmap(base_address_, size_); + base_address_ = nullptr; + size_ = 0; + } +} + +Memory::Memory(size_t size) { + const size_t page_size = static_cast<size_t>(sysconf(_SC_PAGESIZE)); + const size_t rounded_size = (size + page_size - 1) & (page_size - 1); + int fd = ashmem_create_region("ipcz-memory", rounded_size); + ABSL_ASSERT(fd >= 0); + int err = ashmem_set_prot_region(fd, PROT_READ | PROT_WRITE); + ABSL_ASSERT(err == 0); + handle_ = OSHandle(fd); + size_ = size; +} + +Memory::Mapping Memory::Map() { + ABSL_ASSERT(is_valid()); + void* addr = + mmap(nullptr, size_, PROT_READ | PROT_WRITE, MAP_SHARED, handle_.fd(), 0); + ABSL_ASSERT(addr && addr != MAP_FAILED); + return Mapping(addr, size_); +} + +} // namespace ipcz::reference_drivers
diff --git a/third_party/ipcz/src/reference_drivers/memory_fuchsia.cc b/third_party/ipcz/src/reference_drivers/memory_fuchsia.cc new file mode 100644 index 0000000..e2c8e2c --- /dev/null +++ b/third_party/ipcz/src/reference_drivers/memory_fuchsia.cc
@@ -0,0 +1,54 @@ +// Copyright 2022 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "reference_drivers/memory.h" + +#include <lib/zx/vmar.h> +#include <zircon/syscalls.h> + +#include <cstddef> +#include <cstdint> +#include <utility> + +#include "reference_drivers/os_handle.h" +#include "third_party/abseil-cpp/absl/base/macros.h" + +namespace ipcz::reference_drivers { + +void Memory::Mapping::Reset() { + if (base_address_) { + uintptr_t addr = reinterpret_cast<uintptr_t>(base_address_); + zx_status_t status = zx::vmar::root_self()->unmap(addr, size_); + ABSL_ASSERT(status == ZX_OK); + } +} + +Memory::Memory(size_t size) { + const uint32_t page_size = zx_system_get_page_size(); + const size_t rounded_size = (size + page_size - 1) & (page_size - 1); + zx::vmo vmo; + zx_status_t status = zx::vmo::create(rounded_size, 0, &vmo); + ABSL_ASSERT(status == ZX_OK); + const int kNoExec = ZX_DEFAULT_VMO_RIGHTS & ~ZX_RIGHT_EXECUTE; + status = vmo.replace(kNoExec, &vmo); + ABSL_ASSERT(status == ZX_OK); + handle_ = OSHandle(std::move(vmo)); + size_ = size; +} + +Memory::Mapping Memory::Map() { + ABSL_ASSERT(is_valid()); + uintptr_t addr; + zx_vm_option_t options = + ZX_VM_REQUIRE_NON_RESIZABLE | ZX_VM_PERM_READ | ZX_VM_PERM_WRITE; + zx_status_t status = zx::vmar::root_self()->map( + options, /*vmar_offset=*/0, *zx::unowned_vmo(handle_.handle().get()), 0, + size_, &addr); + if (status != ZX_OK) { + return {}; + } + return Mapping(reinterpret_cast<void*>(addr), size_); +} + +} // namespace ipcz::reference_drivers
diff --git a/third_party/ipcz/src/reference_drivers/memory_mac.cc b/third_party/ipcz/src/reference_drivers/memory_mac.cc new file mode 100644 index 0000000..4f1c561 --- /dev/null +++ b/third_party/ipcz/src/reference_drivers/memory_mac.cc
@@ -0,0 +1,47 @@ +// Copyright 2022 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "reference_drivers/memory.h" + +#include <mach/mach_vm.h> + +#include "reference_drivers/os_handle.h" +#include "third_party/abseil-cpp/absl/base/macros.h" + +namespace ipcz::reference_drivers { + +void Memory::Mapping::Reset() { + if (base_address_) { + kern_return_t kr = mach_vm_deallocate( + mach_task_self(), reinterpret_cast<mach_vm_address_t>(base_address_), + size_); + ABSL_ASSERT(kr == KERN_SUCCESS); + } +} + +Memory::Memory(size_t size) { + mach_vm_size_t vm_size = size; + mach_port_t named_right; + kern_return_t kr = mach_make_memory_entry_64( + mach_task_self(), &vm_size, 0, + MAP_MEM_NAMED_CREATE | VM_PROT_READ | VM_PROT_WRITE, &named_right, + MACH_PORT_NULL); + ABSL_ASSERT(kr == KERN_SUCCESS); + ABSL_ASSERT(vm_size >= size); + handle_ = OSHandle(OSHandle::MachSendRight(named_right)); + size_ = size; +} + +Memory::Mapping Memory::Map() { + ABSL_ASSERT(is_valid()); + mach_vm_address_t address = 0; + kern_return_t kr = mach_vm_map(mach_task_self(), &address, size_, 0, + VM_FLAGS_ANYWHERE, handle_.mach_send_right(), + 0, FALSE, VM_PROT_READ | VM_PROT_WRITE, + VM_PROT_READ | VM_PROT_WRITE, VM_INHERIT_NONE); + ABSL_ASSERT(kr == KERN_SUCCESS); + return Mapping(reinterpret_cast<void*>(address), size_); +} + +} // namespace ipcz::reference_drivers
diff --git a/third_party/ipcz/src/reference_drivers/memory_posix.cc b/third_party/ipcz/src/reference_drivers/memory_posix.cc new file mode 100644 index 0000000..37e7775 --- /dev/null +++ b/third_party/ipcz/src/reference_drivers/memory_posix.cc
@@ -0,0 +1,47 @@ +// Copyright 2022 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "reference_drivers/memory.h" + +#include <fcntl.h> +#include <sys/mman.h> +#include <sys/types.h> +#include <unistd.h> + +#include "reference_drivers/os_handle.h" +#include "third_party/abseil-cpp/absl/base/macros.h" + +namespace ipcz::reference_drivers { + +void Memory::Mapping::Reset() { + if (base_address_) { + munmap(base_address_, size_); + base_address_ = nullptr; + size_ = 0; + } +} + +Memory::Memory(size_t size) { + int fd = memfd_create("/ipcz/mem", MFD_ALLOW_SEALING); + ABSL_ASSERT(fd >= 0); + + int result = ftruncate(fd, size); + ABSL_ASSERT(result == 0); + + result = fcntl(fd, F_ADD_SEALS, F_SEAL_SHRINK); + ABSL_ASSERT(result == 0); + + handle_ = OSHandle(fd); + size_ = size; +} + +Memory::Mapping Memory::Map() { + ABSL_ASSERT(is_valid()); + void* addr = + mmap(nullptr, size_, PROT_READ | PROT_WRITE, MAP_SHARED, handle_.fd(), 0); + ABSL_ASSERT(addr && addr != MAP_FAILED); + return Mapping(addr, size_); +} + +} // namespace ipcz::reference_drivers
diff --git a/third_party/ipcz/src/reference_drivers/memory_test.cc b/third_party/ipcz/src/reference_drivers/memory_test.cc new file mode 100644 index 0000000..7017852 --- /dev/null +++ b/third_party/ipcz/src/reference_drivers/memory_test.cc
@@ -0,0 +1,70 @@ +// Copyright 2022 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "reference_drivers/memory.h" + +#include <tuple> + +#include "testing/gtest/include/gtest/gtest.h" + +namespace ipcz::reference_drivers { +namespace { + +using MemoryTest = testing::Test; + +TEST_F(MemoryTest, CreateAndMap) { + Memory memory(64); + + Memory::Mapping mapping0 = memory.Map(); + Memory::Mapping mapping1 = memory.Map(); + + int* data0 = mapping0.As<int>(); + int* data1 = mapping1.As<int>(); + + // Each mapping should have a different base address. + EXPECT_NE(data0, data1); + + // But they should be backed by the same physical memory. + data1[0] = 0; + data0[0] = 42; + EXPECT_EQ(42, data1[0]); +} + +TEST_F(MemoryTest, CreateMapClose) { + Memory memory(64); + + Memory::Mapping mapping0 = memory.Map(); + Memory::Mapping mapping1 = memory.Map(); + + // Even with the memfd closed, the mappings above should persist. + memory.reset(); + + int* data0 = mapping0.As<int>(); + int* data1 = mapping1.As<int>(); + EXPECT_NE(data0, data1); + data1[0] = 0; + data0[0] = 42; + EXPECT_EQ(42, data1[0]); +} + +TEST_F(MemoryTest, CreateCloneMapClose) { + Memory memory(64); + Memory clone = memory.Clone(); + + Memory::Mapping mapping0 = memory.Map(); + Memory::Mapping mapping1 = clone.Map(); + + memory.reset(); + clone.reset(); + + int* data0 = mapping0.As<int>(); + int* data1 = mapping1.As<int>(); + EXPECT_NE(data0, data1); + data1[0] = 0; + data0[0] = 42; + EXPECT_EQ(42, data1[0]); +} + +} // namespace +} // namespace ipcz::reference_drivers
diff --git a/third_party/ipcz/src/reference_drivers/memory_win.cc b/third_party/ipcz/src/reference_drivers/memory_win.cc new file mode 100644 index 0000000..77ef5b6 --- /dev/null +++ b/third_party/ipcz/src/reference_drivers/memory_win.cc
@@ -0,0 +1,48 @@ +// Copyright 2022 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "reference_drivers/memory.h" + +#include <windows.h> + +#include "reference_drivers/os_handle.h" +#include "third_party/abseil-cpp/absl/base/macros.h" +#include "util/safe_math.h" + +namespace ipcz::reference_drivers { + +void Memory::Mapping::Reset() { + if (base_address_) { + ::UnmapViewOfFile(base_address_); + } +} + +Memory::Memory(size_t size) { + HANDLE h = ::CreateFileMapping(INVALID_HANDLE_VALUE, nullptr, PAGE_READWRITE, + 0, checked_cast<DWORD>(size), nullptr); + const HANDLE process = ::GetCurrentProcess(); + HANDLE h2; + + // NOTE: DuplicateHandle is called here to remove some permissions from the + // handle (at least WRITE_DAC, among others). This allows the handle to be + // duplicated to other processes under strict sandboxing conditions, which may + // be useful in some test scenarios. + BOOL ok = ::DuplicateHandle(process, h, process, &h2, + FILE_MAP_READ | FILE_MAP_WRITE, FALSE, 0); + ::CloseHandle(h); + ABSL_ASSERT(ok); + + handle_ = OSHandle(h2); + size_ = size; +} + +Memory::Mapping Memory::Map() { + ABSL_ASSERT(is_valid()); + void* addr = ::MapViewOfFile(handle_.handle(), FILE_MAP_READ | FILE_MAP_WRITE, + 0, 0, size_); + ABSL_ASSERT(addr); + return Mapping(addr, size_); +} + +} // namespace ipcz::reference_drivers
diff --git a/third_party/ipcz/src/reference_drivers/os_handle.h b/third_party/ipcz/src/reference_drivers/os_handle.h new file mode 100644 index 0000000..1ed3802 --- /dev/null +++ b/third_party/ipcz/src/reference_drivers/os_handle.h
@@ -0,0 +1,22 @@ +// Copyright 2022 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef IPCZ_SRC_REFERENCE_DRIVERS_OS_HANDLE_H_ +#define IPCZ_SRC_REFERENCE_DRIVERS_OS_HANDLE_H_ + +#include "build/build_config.h" + +#if BUILDFLAG(IS_WIN) +#include "reference_drivers/os_handle_win.h" +#elif BUILDFLAG(IS_MAC) +#include "reference_drivers/os_handle_mac.h" +#elif BUILDFLAG(IS_FUCHSIA) +#include "reference_drivers/os_handle_fuchsia.h" +#elif BUILDFLAG(IS_POSIX) +#include "reference_drivers/os_handle_posix.h" +#else +#error "Unsupported platform" +#endif + +#endif // IPCZ_SRC_REFERENCE_DRIVERS_OS_HANDLE_H_
diff --git a/third_party/ipcz/src/reference_drivers/os_handle_fuchsia.cc b/third_party/ipcz/src/reference_drivers/os_handle_fuchsia.cc new file mode 100644 index 0000000..c329b7d2 --- /dev/null +++ b/third_party/ipcz/src/reference_drivers/os_handle_fuchsia.cc
@@ -0,0 +1,37 @@ +// Copyright 2022 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "reference_drivers/os_handle.h" + +#include <lib/zx/handle.h> +#include <zircon/status.h> + +#include "third_party/abseil-cpp/absl/base/macros.h" + +namespace ipcz::reference_drivers { + +OSHandle::OSHandle() = default; + +OSHandle::OSHandle(zx::handle handle) : handle_(std::move(handle)) {} + +OSHandle::OSHandle(OSHandle&& other) = default; + +OSHandle& OSHandle::operator=(OSHandle&& other) = default; + +OSHandle::~OSHandle() = default; + +void OSHandle::reset() { + handle_.reset(); +} + +OSHandle OSHandle::Clone() const { + ABSL_ASSERT(is_valid()); + + zx::handle dupe; + zx_status_t status = handle_.duplicate(ZX_RIGHT_SAME_RIGHTS, &dupe); + ABSL_ASSERT(status == ZX_OK); + return OSHandle(std::move(dupe)); +} + +} // namespace ipcz::reference_drivers
diff --git a/third_party/ipcz/src/reference_drivers/os_handle_fuchsia.h b/third_party/ipcz/src/reference_drivers/os_handle_fuchsia.h new file mode 100644 index 0000000..4f03657 --- /dev/null +++ b/third_party/ipcz/src/reference_drivers/os_handle_fuchsia.h
@@ -0,0 +1,41 @@ +// Copyright 2022 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef IPCZ_SRC_REFERENCE_DRIVERS_OS_HANDLE_FUCHSIA_H_ +#define IPCZ_SRC_REFERENCE_DRIVERS_OS_HANDLE_FUCHSIA_H_ + +#include <lib/zx/handle.h> + +namespace ipcz::reference_drivers { + +// The Fuchsia OSHandle implementation can wrap any zx::handle. +class OSHandle { + public: + OSHandle(); + explicit OSHandle(zx::handle handle); + + OSHandle(const OSHandle&) = delete; + OSHandle& operator=(const OSHandle&) = delete; + + OSHandle(OSHandle&& other); + OSHandle& operator=(OSHandle&& other); + + ~OSHandle(); + + void reset(); + + // Duplicates the underlying handle, returning a new OSHandle to wrap it. The + // handle must be valid. + OSHandle Clone() const; + + bool is_valid() const { return handle_.is_valid(); } + const zx::handle& handle() const { return handle_; } + + private: + zx::handle handle_; +}; + +} // namespace ipcz::reference_drivers + +#endif // IPCZ_SRC_REFERENCE_DRIVERS_OS_HANDLE_FUCHSIA_H_
diff --git a/third_party/ipcz/src/reference_drivers/os_handle_mac.cc b/third_party/ipcz/src/reference_drivers/os_handle_mac.cc new file mode 100644 index 0000000..b9f136cc --- /dev/null +++ b/third_party/ipcz/src/reference_drivers/os_handle_mac.cc
@@ -0,0 +1,80 @@ +// Copyright 2022 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "reference_drivers/os_handle.h" + +#include <errno.h> +#include <mach/mach.h> +#include <mach/mach_vm.h> +#include <unistd.h> + +#include <utility> + +#include "third_party/abseil-cpp/absl/base/macros.h" + +namespace ipcz::reference_drivers { + +OSHandle::OSHandle() = default; + +OSHandle::OSHandle(Value value) : value_(value) {} + +OSHandle::OSHandle(OSHandle&& other) + : value_(std::exchange(other.value_, {})) {} + +OSHandle& OSHandle::operator=(OSHandle&& other) { + reset(); + value_ = std::exchange(other.value_, {}); + return *this; +} + +OSHandle::~OSHandle() { + reset(); +} + +void OSHandle::reset() { + if (is_valid_fd()) { + int rv = close(fd()); + ABSL_ASSERT(rv == 0 || errno == EINTR); + } else if (is_valid_mach_send_right()) { + kern_return_t kr = + mach_port_deallocate(mach_task_self(), mach_send_right()); + ABSL_ASSERT(kr == KERN_SUCCESS); + } else if (is_valid_mach_receive_right()) { + kern_return_t kr = mach_port_mod_refs( + mach_task_self(), mach_receive_right(), MACH_PORT_RIGHT_RECEIVE, -1); + ABSL_ASSERT(kr == KERN_SUCCESS); + } else if (is_valid_mach_port_set()) { + kern_return_t kr = mach_port_mod_refs( + mach_task_self(), mach_receive_right(), MACH_PORT_RIGHT_PORT_SET, -1); + ABSL_ASSERT(kr == KERN_SUCCESS); + } + + value_ = {}; +} + +OSHandle OSHandle::Clone() const { + ABSL_ASSERT(is_valid()); + + // Cloning of receive rights or port sets is not supported. + ABSL_ASSERT(!is_mach_receive_right() && !is_mach_port_set()); + + if (is_valid_fd()) { + int duped_fd = dup(fd()); + ABSL_ASSERT(duped_fd >= 0); + return OSHandle(FileDescriptor(duped_fd)); + } + + if (is_valid_mach_send_right()) { + kern_return_t kr = mach_port_mod_refs(mach_task_self(), mach_send_right(), + MACH_PORT_RIGHT_SEND, 1); + if (kr != KERN_SUCCESS) { + return OSHandle(); + } + return OSHandle(MachSendRight(mach_send_right())); + } + + return {}; +} + +} // namespace ipcz::reference_drivers
diff --git a/third_party/ipcz/src/reference_drivers/os_handle_mac.h b/third_party/ipcz/src/reference_drivers/os_handle_mac.h new file mode 100644 index 0000000..8387347 --- /dev/null +++ b/third_party/ipcz/src/reference_drivers/os_handle_mac.h
@@ -0,0 +1,103 @@ +// Copyright 2022 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef IPCZ_SRC_REFERENCE_DRIVERS_OS_HANDLE_MAC_H_ +#define IPCZ_SRC_REFERENCE_DRIVERS_OS_HANDLE_MAC_H_ + +#include <mach/mach.h> + +#include "third_party/abseil-cpp/absl/base/macros.h" +#include "third_party/abseil-cpp/absl/types/variant.h" +#include "util/strong_alias.h" + +namespace ipcz::reference_drivers { + +// The macOS implementation of OSHandle supports wrapping a single Mach send +// right, or a POSIX file descriptor. +class OSHandle { + public: + using FileDescriptor = StrongAlias<class FileDescriptorTag, int>; + using MachSendRight = StrongAlias<class MachSendRightTag, mach_port_t>; + using MachReceiveRight = StrongAlias<class MachReceiveRightTag, mach_port_t>; + using MachPortSet = StrongAlias<class MachPortSetTag, mach_port_t>; + using Value = absl::variant<absl::monostate, + FileDescriptor, + MachSendRight, + MachReceiveRight, + MachPortSet>; + + OSHandle(); + explicit OSHandle(Value value); + + OSHandle(const OSHandle&) = delete; + OSHandle& operator=(const OSHandle&) = delete; + + OSHandle(OSHandle&& other); + OSHandle& operator=(OSHandle&& other); + + ~OSHandle(); + + void reset(); + + // Duplicates the underlying handle, returning a new OSHandle to wrap it. + // The handle must be a valid file descriptor or Mach send right. Cloning of + // of Mach receive rights or port sets is not supported. + OSHandle Clone() const; + + bool is_valid() const { + return is_valid_fd() || is_valid_mach_send_right() || + is_valid_mach_receive_right() || is_valid_mach_port_set(); + } + + bool is_fd() const { return absl::holds_alternative<FileDescriptor>(value_); } + bool is_valid_fd() const { return is_fd() && fd() != -1; } + + bool is_mach_send_right() const { + return absl::holds_alternative<MachSendRight>(value_); + } + bool is_valid_mach_send_right() const { + return is_mach_send_right() && mach_send_right() != MACH_PORT_NULL; + } + + bool is_mach_receive_right() const { + return absl::holds_alternative<MachReceiveRight>(value_); + } + bool is_valid_mach_receive_right() const { + return is_mach_receive_right() && mach_receive_right() != MACH_PORT_NULL; + } + + bool is_mach_port_set() const { + return absl::holds_alternative<MachPortSet>(value_); + } + bool is_valid_mach_port_set() const { + return is_mach_port_set() && mach_port_set() != MACH_PORT_NULL; + } + + int fd() const { + ABSL_ASSERT(is_fd()); + return absl::get<FileDescriptor>(value_).value(); + } + + mach_port_t mach_send_right() const { + ABSL_ASSERT(is_mach_send_right()); + return absl::get<MachSendRight>(value_).value(); + } + + mach_port_t mach_receive_right() const { + ABSL_ASSERT(is_mach_receive_right()); + return absl::get<MachReceiveRight>(value_).value(); + } + + mach_port_t mach_port_set() const { + ABSL_ASSERT(is_mach_port_set()); + return absl::get<MachPortSet>(value_).value(); + } + + private: + Value value_; +}; + +} // namespace ipcz::reference_drivers + +#endif // IPCZ_SRC_REFERENCE_DRIVERS_OS_HANDLE_MAC_H_
diff --git a/third_party/ipcz/src/reference_drivers/os_handle_posix.cc b/third_party/ipcz/src/reference_drivers/os_handle_posix.cc new file mode 100644 index 0000000..c96dbdf --- /dev/null +++ b/third_party/ipcz/src/reference_drivers/os_handle_posix.cc
@@ -0,0 +1,46 @@ +// Copyright 2022 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "reference_drivers/os_handle.h" + +#include <errno.h> +#include <unistd.h> + +#include <utility> + +#include "third_party/abseil-cpp/absl/base/macros.h" + +namespace ipcz::reference_drivers { + +OSHandle::OSHandle() = default; + +OSHandle::OSHandle(int fd) : fd_(fd) {} + +OSHandle::OSHandle(OSHandle&& other) : fd_(std::exchange(other.fd_, -1)) {} + +OSHandle& OSHandle::operator=(OSHandle&& other) { + reset(); + fd_ = std::exchange(other.fd_, -1); + return *this; +} + +OSHandle::~OSHandle() { + reset(); +} + +void OSHandle::reset() { + int fd = std::exchange(fd_, -1); + if (fd >= 0) { + int rv = close(fd); + ABSL_ASSERT(rv == 0 || errno == EINTR); + } +} + +OSHandle OSHandle::Clone() const { + ABSL_ASSERT(is_valid()); + int dupe = dup(fd_); + return OSHandle(dupe); +} + +} // namespace ipcz::reference_drivers
diff --git a/third_party/ipcz/src/reference_drivers/os_handle_posix.h b/third_party/ipcz/src/reference_drivers/os_handle_posix.h new file mode 100644 index 0000000..0ab5efc2 --- /dev/null +++ b/third_party/ipcz/src/reference_drivers/os_handle_posix.h
@@ -0,0 +1,40 @@ +// Copyright 2022 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef IPCZ_SRC_REFERENCE_DRIVERS_OS_HANDLE_POSIX_H_ +#define IPCZ_SRC_REFERENCE_DRIVERS_OS_HANDLE_POSIX_H_ + +namespace ipcz::reference_drivers { + +// The POSIX OSHandle implementation wraps a file descriptor. +class OSHandle { + public: + OSHandle(); + explicit OSHandle(int fd); + + OSHandle(const OSHandle&) = delete; + OSHandle& operator=(const OSHandle&) = delete; + + OSHandle(OSHandle&& other); + OSHandle& operator=(OSHandle&& other); + + ~OSHandle(); + + void reset(); + + // Duplicates the underlying handle, returning a new OSHandle to wrap it. The + // handle must be valid. + OSHandle Clone() const; + + bool is_valid() const { return fd_ != -1; } + + int fd() const { return fd_; } + + private: + int fd_ = -1; +}; + +} // namespace ipcz::reference_drivers + +#endif // IPCZ_SRC_REFERENCE_DRIVERS_OS_HANDLE_POSIX_H_
diff --git a/third_party/ipcz/src/reference_drivers/os_handle_win.cc b/third_party/ipcz/src/reference_drivers/os_handle_win.cc new file mode 100644 index 0000000..570f45ea --- /dev/null +++ b/third_party/ipcz/src/reference_drivers/os_handle_win.cc
@@ -0,0 +1,54 @@ +// Copyright 2022 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "reference_drivers/os_handle.h" + +#include <windows.h> + +#include <utility> + +#include "third_party/abseil-cpp/absl/base/macros.h" + +namespace ipcz::reference_drivers { + +OSHandle::OSHandle() = default; + +OSHandle::OSHandle(HANDLE handle) : handle_(handle) {} + +OSHandle::OSHandle(OSHandle&& other) + : handle_(std::exchange(other.handle_, INVALID_HANDLE_VALUE)) {} + +OSHandle& OSHandle::operator=(OSHandle&& other) { + reset(); + handle_ = std::exchange(other.handle_, INVALID_HANDLE_VALUE); + return *this; +} + +OSHandle::~OSHandle() { + reset(); +} + +void OSHandle::reset() { + HANDLE handle = std::exchange(handle_, INVALID_HANDLE_VALUE); + if (handle != INVALID_HANDLE_VALUE) { + ::CloseHandle(handle); + } +} + +OSHandle OSHandle::Clone() const { + ABSL_ASSERT(is_valid()); + + HANDLE dupe; + BOOL result = + ::DuplicateHandle(::GetCurrentProcess(), handle_, ::GetCurrentProcess(), + &dupe, 0, FALSE, DUPLICATE_SAME_ACCESS); + if (!result) { + return OSHandle(); + } + + ABSL_ASSERT(dupe != INVALID_HANDLE_VALUE); + return OSHandle(dupe); +} + +} // namespace ipcz::reference_drivers
diff --git a/third_party/ipcz/src/reference_drivers/os_handle_win.h b/third_party/ipcz/src/reference_drivers/os_handle_win.h new file mode 100644 index 0000000..2506f95 --- /dev/null +++ b/third_party/ipcz/src/reference_drivers/os_handle_win.h
@@ -0,0 +1,42 @@ +// Copyright 2022 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef IPCZ_SRC_REFERENCE_DRIVERS_OS_HANDLE_WIN_H_ +#define IPCZ_SRC_REFERENCE_DRIVERS_OS_HANDLE_WIN_H_ + +#include <windows.h> + +namespace ipcz::reference_drivers { + +// The Windows OSHandle implementation can wrap any HANDLE value. +class OSHandle { + public: + OSHandle(); + explicit OSHandle(HANDLE handle); + + OSHandle(const OSHandle&) = delete; + OSHandle& operator=(const OSHandle&) = delete; + + OSHandle(OSHandle&& other); + OSHandle& operator=(OSHandle&& other); + + ~OSHandle(); + + void reset(); + + // Duplicates the underlying handle, returning a new OSHandle to wrap it. The + // handle must be valid. + OSHandle Clone() const; + + bool is_valid() const { return handle_ != INVALID_HANDLE_VALUE; } + + HANDLE handle() const { return handle_; } + + private: + HANDLE handle_ = INVALID_HANDLE_VALUE; +}; + +} // namespace ipcz::reference_drivers + +#endif // IPCZ_SRC_REFERENCE_DRIVERS_OS_HANDLE_WIN_H_
diff --git a/tools/metrics/histograms/enums.xml b/tools/metrics/histograms/enums.xml index c6beb41..7374cd51 100644 --- a/tools/metrics/histograms/enums.xml +++ b/tools/metrics/histograms/enums.xml
@@ -49817,70 +49817,6 @@ <int value="5" label="Installed from browser"/> </enum> -<enum name="InstallStatus"> - <obsolete> - Removed in M88. - </obsolete> - <int value="0" label="FIRST_INSTALL_SUCCESS"/> - <int value="1" label="INSTALL_REPAIRED"/> - <int value="2" label="NEW_VERSION_UPDATED"/> - <int value="3" label="EXISTING_VERSION_LAUNCHED"/> - <int value="4" label="HIGHER_VERSION_EXISTS"/> - <int value="5" label="USER_LEVEL_INSTALL_EXISTS"/> - <int value="6" label="SYSTEM_LEVEL_INSTALL_EXISTS"/> - <int value="7" label="INSTALL_FAILED"/> - <int value="8" label="SETUP_PATCH_FAILED"/> - <int value="9" label="OS_NOT_SUPPORTED"/> - <int value="10" label="OS_ERROR"/> - <int value="11" label="TEMP_DIR_FAILED"/> - <int value="12" label="UNCOMPRESSION_FAILED"/> - <int value="13" label="INVALID_ARCHIVE"/> - <int value="14" label="INSUFFICIENT_RIGHTS"/> - <int value="15" label="CHROME_NOT_INSTALLED"/> - <int value="16" label="CHROME_RUNNING"/> - <int value="17" label="UNINSTALL_CONFIRMED"/> - <int value="18" label="UNINSTALL_DELETE_PROFILE"/> - <int value="19" label="UNINSTALL_SUCCESSFUL"/> - <int value="20" label="UNINSTALL_FAILED"/> - <int value="21" label="UNINSTALL_CANCELLED"/> - <int value="22" label="UNKNOWN_STATUS"/> - <int value="23" label="RENAME_SUCCESSFUL"/> - <int value="24" label="RENAME_FAILED"/> - <int value="25" label="EULA_REJECTED"/> - <int value="26" label="EULA_ACCEPTED"/> - <int value="27" label="EULA_ACCEPTED_OPT_IN"/> - <int value="28" label="INSTALL_DIR_IN_USE"/> - <int value="29" label="UNINSTALL_REQUIRES_REBOOT"/> - <int value="30" label="IN_USE_UPDATED"/> - <int value="31" label="SAME_VERSION_REPAIR_FAILED"/> - <int value="32" label="REENTRY_SYS_UPDATE"/> - <int value="33" label="SXS_OPTION_NOT_SUPPORTED"/> - <int value="42" label="APPLY_DIFF_PATCH_FAILED"/> - <int value="47" label="INVALID_STATE_FOR_OPTION"/> - <int value="49" label="PATCH_INVALID_ARGUMENTS"/> - <int value="50" label="DIFF_PATCH_SOURCE_MISSING"/> - <int value="51" label="UNUSED_BINARIES (removed in M84)"/> - <int value="52" label="UNUSED_BINARIES_UNINSTALLED (removed in M84)"/> - <int value="53" label="UNSUPPORTED_OPTION"/> - <int value="54" label="CPU_NOT_SUPPORTED"/> - <int value="55" label="REENABLE_UPDATES_SUCCEEDED"/> - <int value="56" label="REENABLE_UPDATES_FAILED"/> - <int value="57" label="UNPACKING_FAILED"/> - <int value="58" label="IN_USE_DOWNGRADE"/> - <int value="59" label="OLD_VERSION_DOWNGRADE"/> - <int value="60" label="SETUP_SINGLETON_ACQUISITION_FAILED"/> - <int value="61" label="SETUP_SINGLETON_RELEASED"/> - <int value="62" label="DELETE_OLD_VERSIONS_SUCCESS"/> - <int value="63" label="DELETE_OLD_VERSIONS_TOO_MANY_ATTEMPTS"/> - <int value="64" label="STORE_DMTOKEN_FAILED"/> - <int value="65" label="STORE_DMTOKEN_SUCCESS"/> - <int value="66" label="DOWNGRADE_CLEANUP_FAILED"/> - <int value="67" label="DOWNGRADE_CLEANUP_SUCCESS"/> - <int value="68" label="UNDO_DOWNGRADE_CLEANUP_FAILED"/> - <int value="69" label="UNDO_DOWNGRADE_CLEANUP_SUCCESS"/> - <int value="70" label="DOWNGRADE_CLEANUP_UNKNOWN_OPERATION"/> -</enum> - <enum name="InstallTime"> <int value="0" label="During the init phase"/> <int value="1" label="During the running time"/> @@ -64759,6 +64695,14 @@ <int value="2" label="Model File Memory Mapped and Valid"/> </enum> +<enum name="ModemfwdCheckForWedgedModemResult"> + <int value="0" label="Modem present"/> + <int value="1" label="Modem present after reboot"/> + <int value="2" label="Failed to reboot modem"/> + <int value="3" label="Modem wedged"/> + <int value="4" label="Modem absent after reboot"/> +</enum> + <enum name="ModemfwdDlcInstallResult"> <int value="0" label="Unknown"/> <int value="1" label="Success"/> @@ -64789,6 +64733,17 @@ <int value="9" label="Unexpected empty variant"/> </enum> +<enum name="ModemfwdFWInstallResult"> + <int value="0" label="Unknown"/> + <int value="1" label="Success"/> + <int value="2" label="Init failure"/> + <int value="3" label="Init manifest failure"/> + <int value="4" label="Failed to prepare FW file"/> + <int value="5" label="Flash failure"/> + <int value="6" label="Failure returned by helper"/> + <int value="7" label="Init journal failure"/> +</enum> + <enum name="ModemfwdFWUpdateLocation"> <int value="0" label="rootfs"/> <int value="1" label="DLC"/>
diff --git a/tools/metrics/histograms/metadata/others/histograms.xml b/tools/metrics/histograms/metadata/others/histograms.xml index 3f52f00..cbc9cff5f 100644 --- a/tools/metrics/histograms/metadata/others/histograms.xml +++ b/tools/metrics/histograms/metadata/others/histograms.xml
@@ -9768,6 +9768,24 @@ </summary> </histogram> +<histogram name="Process.Sandbox.StartSandboxedWin.{Event}Duration" + units="microseconds" expires_after="2023-01-21"> + <owner>ajgo@chromium.org</owner> + <owner>src/sandbox/policy/win/OWNERS</owner> + <summary> + Duration of {Event} within StartSandboxedProcess(). Emitted on a successful + launch of a sandboxed process on windows. Only emitted where a + high-resolution timer is available (see Windows.HasHighResolutionTimeTicks). + </summary> + <token key="Event"> + <variant name="CreatePolicy"/> + <variant name="GeneratePolicy"/> + <variant name="PostSpawnTarget"/> + <variant name="SpawnTarget"/> + <variant name="Total" summary="the total time"/> + </token> +</histogram> + <histogram name="ProxyOverriddenBubble.UserSelection" units="ExtensionBubbleAction" expires_after="2020-12-31"> <obsolete>
diff --git a/tools/metrics/histograms/metadata/platform/histograms.xml b/tools/metrics/histograms/metadata/platform/histograms.xml index f3cf390..24595242 100644 --- a/tools/metrics/histograms/metadata/platform/histograms.xml +++ b/tools/metrics/histograms/metadata/platform/histograms.xml
@@ -742,6 +742,18 @@ </summary> </histogram> +<histogram name="Platform.Modemfwd.CheckForWedgedModemResult" + enum="ModemfwdCheckForWedgedModemResult" expires_after="2023-04-15"> + <owner>andrewlassalle@google.com</owner> + <owner>cros-connectivity@google.com</owner> + <summary> + Result of the |CheckForWedgedModem| function. The function checks the modem + state after modemfwd starts, and tries to recover the modem if the modem is + non responsive. This function is only called once after boot, so a single + value is emitted per boot. + </summary> +</histogram> + <histogram name="Platform.Modemfwd.DlcInstallResult" enum="ModemfwdDlcInstallResult" expires_after="2023-04-15"> <owner>andrewlassalle@google.com</owner> @@ -763,6 +775,13 @@ </summary> </histogram> +<histogram name="Platform.Modemfwd.FWInstallResult" + enum="ModemfwdFWInstallResult" expires_after="2023-04-15"> + <owner>andrewlassalle@google.com</owner> + <owner>cros-connectivity@google.com</owner> + <summary>The result of each modem FW install attempt.</summary> +</histogram> + <histogram name="Platform.Modemfwd.FWUpdateLocation" enum="ModemfwdFWUpdateLocation" expires_after="2023-04-15"> <owner>andrewlassalle@google.com</owner>
diff --git a/tools/metrics/histograms/metadata/storage/histograms.xml b/tools/metrics/histograms/metadata/storage/histograms.xml index 422dc7b..2ab3088 100644 --- a/tools/metrics/histograms/metadata/storage/histograms.xml +++ b/tools/metrics/histograms/metadata/storage/histograms.xml
@@ -348,29 +348,6 @@ </summary> </histogram> -<histogram name="Storage.Blob.PageFileSize" units="KB" expires_after="M95"> - <owner>mek@chromium.org</owner> - <owner>dmurph@chromium.org</owner> - <summary> - Size of a page file created for blob data by the blob storage system. - Recorded before we create the file and write the blob items. We page blob - data to files when we get close to our maximum blob memory usage. - </summary> -</histogram> - -<histogram name="Storage.Blob.PagingDisabled" enum="PlatformFileError" - expires_after="M95"> - <owner>mek@chromium.org</owner> - <owner>dmurph@chromium.org</owner> - <summary> - Recorded when we disable paging blobs to file in the blob storage system. - This occurs when we experience a filesystem error during writing blob data - to disk. We write blob data to files when either we have a new blob that's - larger than our memory limit, or we're approaching our in-memory limit for - blob storage. The relevant error is recorded here. - </summary> -</histogram> - <histogram name="Storage.FileSystemAccess.PersistedPermissions.Age.{Type}" units="ms" expires_after="2023-01-01"> <owner>asully@chromium.org</owner>
diff --git a/tools/metrics/histograms/metadata/translate/histograms.xml b/tools/metrics/histograms/metadata/translate/histograms.xml index 81fb1b9b..e199068 100644 --- a/tools/metrics/histograms/metadata/translate/histograms.xml +++ b/tools/metrics/histograms/metadata/translate/histograms.xml
@@ -58,7 +58,7 @@ </histogram> <histogram name="Translate.ApplicationStart.AlwaysTranslateLanguage.Count" - units="languages" expires_after="2022-06-30"> + units="languages" expires_after="2022-09-11"> <owner>curranmax@google.com</owner> <owner>megjablon@google.com</owner> <owner>chrome-language@google.com</owner> @@ -208,7 +208,7 @@ </histogram> <histogram name="Translate.CompactInfobar.Language.Translate" - enum="LocaleCodeISO639" expires_after="2022-06-30"> + enum="LocaleCodeISO639" expires_after="2022-09-11"> <owner>megjablon@google.com</owner> <owner>chrome-language@google.com</owner> <summary> @@ -436,7 +436,7 @@ </histogram> <histogram name="Translate.PageLoad.AutofillAssistantDeferredTriggerDecision" - enum="BooleanDeferred" expires_after="2022-06-30"> + enum="BooleanDeferred" expires_after="2022-09-11"> <owner>curranmax@google.com</owner> <owner>megjablon@google.com</owner> <owner>chrome-language@google.com</owner> @@ -449,7 +449,7 @@ </histogram> <histogram name="Translate.PageLoad.FinalSourceLanguage" - enum="LocaleCodeISO639" expires_after="2022-06-30"> + enum="LocaleCodeISO639" expires_after="2022-09-11"> <owner>curranmax@google.com</owner> <owner>megjablon@google.com</owner> <owner>chrome-language@google.com</owner> @@ -504,7 +504,7 @@ </histogram> <histogram name="Translate.PageLoad.InitialSourceLanguage" - enum="LocaleCodeISO639" expires_after="2022-06-30"> + enum="LocaleCodeISO639" expires_after="2022-09-11"> <owner>curranmax@google.com</owner> <owner>megjablon@google.com</owner> <owner>chrome-language@google.com</owner> @@ -532,7 +532,7 @@ </histogram> <histogram name="Translate.PageLoad.InitialTargetLanguage" - enum="LocaleCodeISO639" expires_after="2022-06-30"> + enum="LocaleCodeISO639" expires_after="2022-09-11"> <owner>curranmax@google.com</owner> <owner>megjablon@google.com</owner> <owner>chrome-language@google.com</owner> @@ -627,7 +627,7 @@ </histogram> <histogram name="Translate.PageLoad.Ranker.Timer.ShouldOfferTranslation" - units="ms" expires_after="2022-06-30"> + units="ms" expires_after="2022-09-11"> <owner>curranmax@google.com</owner> <owner>megjablon@google.com</owner> <owner>chrome-language@google.com</owner> @@ -641,7 +641,7 @@ </histogram> <histogram name="Translate.PageLoad.Ranker.Version" units="version" - expires_after="2022-06-30"> + expires_after="2022-09-11"> <owner>curranmax@google.com</owner> <owner>megjablon@google.com</owner> <owner>chrome-language@google.com</owner> @@ -672,7 +672,7 @@ </histogram> <histogram name="Translate.Ranker.Model.Status" enum="RankerModelStatus" - expires_after="2022-06-30"> + expires_after="2022-09-11"> <owner>rogerm@google.com</owner> <owner>chrome-language@google.com</owner> <summary> @@ -691,7 +691,7 @@ </histogram> <histogram name="Translate.Ranker.QueryResult" enum="BooleanAccepted" - expires_after="2022-06-30"> + expires_after="2022-09-11"> <owner>rogerm@google.com</owner> <owner>chrome-language@google.com</owner> <summary>
diff --git a/tools/perf/cli_tools/tbmv3/trace_downloader.py b/tools/perf/cli_tools/tbmv3/trace_downloader.py index 02d03d0d..3599779 100644 --- a/tools/perf/cli_tools/tbmv3/trace_downloader.py +++ b/tools/perf/cli_tools/tbmv3/trace_downloader.py
@@ -10,14 +10,13 @@ _SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__)) DEFAULT_TRACE_DIR = os.path.join(_SCRIPT_DIR, 'traces') -HTML_URL_PREFIX = ('https://console.developers.google.com/m/cloudstorage/b/' - 'chrome-telemetry-output/o/') +HTML_URL_PREFIX = ('https://storage.cloud.google.com/chrome-telemetry-output/') def _GetSubpathInBucket(html_url): """Returns the path minus the HTML_URL_PREFIX. - Given https://console.../chrome-telemetry-output/o/foo/bar/trace.html, + Given https://storage.../chrome-telemetry-output/foo/bar/trace.html, it returns foo/bar/trace.html.""" if not html_url.startswith(HTML_URL_PREFIX): raise Exception('Html trace url must start with %s' % HTML_URL_PREFIX) @@ -56,7 +55,7 @@ def GetLocalTraceFileName(html_url): """Returns a local filename derived from the html trace url. - Given https://console.../chrome-telemetry-output/o/foo/bar/trace.html, it + Given https://storage.../chrome-telemetry-output/foo/bar/trace.html, it returns foo_bar_trace as the local filename. The filename does not contain extensions. It's up to the caller to add .html or .pb etc.""" subpath = _GetSubpathInBucket(html_url)
diff --git a/tools/perf/cli_tools/tbmv3/trace_downloader_unittest.py b/tools/perf/cli_tools/tbmv3/trace_downloader_unittest.py index 24211356..c7fe715 100644 --- a/tools/perf/cli_tools/tbmv3/trace_downloader_unittest.py +++ b/tools/perf/cli_tools/tbmv3/trace_downloader_unittest.py
@@ -24,8 +24,8 @@ def testGetLocalTraceFileName(self): computed_name = trace_downloader.GetLocalTraceFileName( - 'https://console.developers.google.com/m/cloudstorage/b/' - 'chrome-telemetry-output/o/20201029T003106_99943/v8.browsing_mobile/' + 'https://storage.cloud.google.com/chrome-telemetry-output/' + '20201029T003106_99943/v8.browsing_mobile/' 'browse_shopping_amazon_2019/retry_0/trace.html') expected_name = ('20201029T003106_99943_v8.browsing_mobile_'
diff --git a/tools/perf/core/tbmv3/metrics/uma_metrics.proto b/tools/perf/core/tbmv3/metrics/uma_metrics.proto index c83a72b..d941a69 100644 --- a/tools/perf/core/tbmv3/metrics/uma_metrics.proto +++ b/tools/perf/core/tbmv3/metrics/uma_metrics.proto
@@ -14,16 +14,15 @@ repeated double compositor_latency_total_latency = 2 [(unit) = "ms_smallerIsBetter"]; repeated double - event_latency_scroll_begin_touch_time_to_scroll_update_swap_begin4 = 3 + event_latency_first_gesture_scroll_update_touchscreen_total_latency = 3 [(unit) = "ms_smallerIsBetter"]; repeated double - event_latency_scroll_update_touch_time_to_scroll_update_swap_begin4 = 4 + event_latency_first_gesture_scroll_update_touchscreen_total_latency = 4 [(unit) = "ms_smallerIsBetter"]; repeated double - event_latency_scroll_begin_wheel_time_to_scroll_update_swap_begin4 = 5 + event_latency_first_gesture_scroll_update_wheel_total_latency = 5 [(unit) = "ms_smallerIsBetter"]; - repeated double - event_latency_scroll_update_wheel_time_to_scroll_update_swap_begin4 = 6 + repeated double event_latency_gesture_scroll_update_wheel_total_latency = 6 [(unit) = "ms_smallerIsBetter"]; repeated double graphics_smoothness_checkerboarding_compositor_animation = 7 [(unit) = "n%_smallerIsBetter"];
diff --git a/tools/perf/core/tbmv3/metrics/uma_metrics.sql b/tools/perf/core/tbmv3/metrics/uma_metrics.sql index 99fe01f..053817e 100644 --- a/tools/perf/core/tbmv3/metrics/uma_metrics.sql +++ b/tools/perf/core/tbmv3/metrics/uma_metrics.sql
@@ -21,25 +21,25 @@ FROM histogram_samples WHERE histogram_name = 'CompositorLatency.TotalLatency' ), - 'event_latency_scroll_begin_touch_time_to_scroll_update_swap_begin4', ( + 'event_latency_first_gesture_scroll_update_touchscreen_total_latency', ( SELECT RepeatedField(sample / 1e3) FROM histogram_samples - WHERE histogram_name = 'Event.Latency.ScrollBegin.Touch.TimeToScrollUpdateSwapBegin4' + WHERE histogram_name = 'EventLatency.FirstGestureScrollUpdate.Touchscreen.TotalLatency' ), - 'event_latency_scroll_update_touch_time_to_scroll_update_swap_begin4', ( + 'event_latency_gesture_scroll_update_touchscreen_total_latency', ( SELECT RepeatedField(sample / 1e3) FROM histogram_samples - WHERE histogram_name = 'Event.Latency.ScrollUpdate.Touch.TimeToScrollUpdateSwapBegin4' + WHERE histogram_name = 'EventLatency.GestureScrollUpdate.Touchscreen.TotalLatency' ), - 'event_latency_scroll_begin_wheel_time_to_scroll_update_swap_begin4', ( + 'event_latency_first_gesture_scroll_update_wheel_total_latency', ( SELECT RepeatedField(sample / 1e3) FROM histogram_samples - WHERE histogram_name = 'Event.Latency.ScrollBegin.Wheel.TimeToScrollUpdateSwapBegin4' + WHERE histogram_name = 'EventLatency.FirstGestureScrollUpdate.Wheel.TotalLatency' ), - 'event_latency_scroll_update_wheel_time_to_scroll_update_swap_begin4', ( + 'event_latency_gesture_scroll_update_wheel_total_latency', ( SELECT RepeatedField(sample / 1e3) FROM histogram_samples - WHERE histogram_name = 'Event.Latency.ScrollUpdate.Wheel.TimeToScrollUpdateSwapBegin4' + WHERE histogram_name = 'EventLatency.GestureScrollUpdate.Wheel.TotalLatency' ), 'graphics_smoothness_checkerboarding_compositor_animation', ( SELECT RepeatedField(sample / 1e2)
diff --git a/tools/perf/download_proto_trace.py b/tools/perf/download_proto_trace.py index c7b4079..2de2774 100755 --- a/tools/perf/download_proto_trace.py +++ b/tools/perf/download_proto_trace.py
@@ -14,8 +14,8 @@ from cli_tools.tbmv3 import trace_downloader -EXAMPLE_TRACE = ('https://console.developers.google.com/m/cloudstorage/b/' - 'chrome-telemetry-output/o/20201029T003106_99943/' +EXAMPLE_TRACE = ('https://storage.cloud.google.com/' + 'chrome-telemetry-output/20201029T003106_99943/' 'v8.browsing_mobile/browse_shopping_amazon_2019/' 'retry_0/trace.html')
diff --git a/ui/accessibility/ax_enum_util.cc b/ui/accessibility/ax_enum_util.cc index b17a4c2..3a82bcb7 100644 --- a/ui/accessibility/ax_enum_util.cc +++ b/ui/accessibility/ax_enum_util.cc
@@ -1583,6 +1583,8 @@ return "ariaDescription"; case ax::mojom::DescriptionFrom::kButtonLabel: return "buttonLabel"; + case ax::mojom::DescriptionFrom::kPopupElement: + return "popupElement"; case ax::mojom::DescriptionFrom::kRelatedElement: return "relatedElement"; case ax::mojom::DescriptionFrom::kRubyAnnotation:
diff --git a/ui/accessibility/ax_enums.mojom b/ui/accessibility/ax_enums.mojom index 272552a..671d00e 100644 --- a/ui/accessibility/ax_enums.mojom +++ b/ui/accessibility/ax_enums.mojom
@@ -1192,7 +1192,8 @@ kSummary, // HTML-AAM 5.8.2 kSvgDescElement, kTableCaption, // HTML-AAM 5.9.2 - kTitle + kTitle, + kPopupElement, // E.g. |triggerpopup| attr pointing to `popup=hint`. }; // Next value: 4
diff --git a/ui/accessibility/platform/ax_platform_node_base.cc b/ui/accessibility/platform/ax_platform_node_base.cc index a3504db..9337f50 100644 --- a/ui/accessibility/platform/ax_platform_node_base.cc +++ b/ui/accessibility/platform/ax_platform_node_base.cc
@@ -1242,6 +1242,9 @@ case ax::mojom::DescriptionFrom::kButtonLabel: from = "button-label"; break; + case ax::mojom::DescriptionFrom::kPopupElement: + from = "popup-element"; + break; case ax::mojom::DescriptionFrom::kRelatedElement: // Both @title an aria-describedby=tooltip get "tooltip". from = IsDescribedByTooltip() ? "tooltip" : "aria-describedby";
diff --git a/ui/base/x/x11_shm_image_pool.cc b/ui/base/x/x11_shm_image_pool.cc index b93d7a4..4fc1fe6 100644 --- a/ui/base/x/x11_shm_image_pool.cc +++ b/ui/base/x/x11_shm_image_pool.cc
@@ -85,7 +85,7 @@ std::string j2d_use_mitshm; if (env->GetVar("J2D_USE_MITSHM", &j2d_use_mitshm) && (j2d_use_mitshm == "0" || - base::LowerCaseEqualsASCII(j2d_use_mitshm, "false"))) { + base::EqualsCaseInsensitiveASCII(j2d_use_mitshm, "false"))) { return false; }
diff --git a/ui/lottie/animation.cc b/ui/lottie/animation.cc index 6bd6f95f..eac05dd0 100644 --- a/ui/lottie/animation.cc +++ b/ui/lottie/animation.cc
@@ -26,7 +26,8 @@ const base::TimeDelta& cycle_duration, const base::TimeDelta& total_duration, const base::TimeTicks& start_timestamp, - bool should_reverse) + bool should_reverse, + float playback_speed) : start_offset_(offset), end_offset_((offset + cycle_duration)), cycle_duration_(end_offset_ - start_offset_), @@ -34,10 +35,17 @@ previous_tick_(start_timestamp), progress_(base::Milliseconds(0)), current_cycle_progress_(start_offset_), - should_reverse_(should_reverse) {} + should_reverse_(should_reverse) { + SetPlaybackSpeed(playback_speed); +} + +void Animation::TimerControl::SetPlaybackSpeed(float playback_speed) { + DCHECK_GT(playback_speed, 0.f); + playback_speed_ = playback_speed; +} void Animation::TimerControl::Step(const base::TimeTicks& timestamp) { - progress_ += timestamp - previous_tick_; + progress_ += (timestamp - previous_tick_) * playback_speed_; previous_tick_ = timestamp; base::TimeDelta completed_cycles_duration = @@ -257,6 +265,12 @@ color_map_, text_map_); } +void Animation::SetPlaybackSpeed(float playback_speed) { + playback_speed_ = playback_speed; + if (timer_control_) + timer_control_->SetPlaybackSpeed(playback_speed_); +} + cc::SkottieWrapper::FrameDataFetchResult Animation::LoadImageForAsset( gfx::Canvas* canvas, cc::SkottieFrameDataMap& all_frame_data, @@ -277,7 +291,7 @@ DCHECK(!timer_control_); timer_control_ = std::make_unique<TimerControl>( scheduled_start_offset_, scheduled_duration_, GetAnimationDuration(), - timestamp, style_ == Style::kThrobbing); + timestamp, style_ == Style::kThrobbing, playback_speed_); } void Animation::TryNotifyAnimationCycleEnded() const {
diff --git a/ui/lottie/animation.h b/ui/lottie/animation.h index 06433b80..28f43976 100644 --- a/ui/lottie/animation.h +++ b/ui/lottie/animation.h
@@ -168,6 +168,14 @@ // before calling Paint(). The caller may do so as many times as desired. cc::SkottieTextPropertyValueMap& text_map() { return text_map_; } + // Sets the rate at which the animation will be played. A |playback_speed| of + // 1 renders exactly in real time, 0.5 is half as fast, 2 is twice as fast, + // etc. This may be called at any time, and the |timestamp| passed to Paint() + // is automatically adjusted internally to account for the playback speed. + // + // Defaults to 1 if not called. + void SetPlaybackSpeed(float playback_speed); + private: friend class AnimationTest; @@ -190,7 +198,8 @@ const base::TimeDelta& cycle_duration, const base::TimeDelta& total_duration, const base::TimeTicks& start_timestamp, - bool should_reverse); + bool should_reverse, + float playback_speed); ~TimerControl() = default; TimerControl(const TimerControl&) = delete; TimerControl& operator=(const TimerControl&) = delete; @@ -201,6 +210,8 @@ // Resumes the timer. void Resume(const base::TimeTicks& timestamp); + void SetPlaybackSpeed(float playback_speed); + double GetNormalizedCurrentCycleProgress() const; double GetNormalizedStartOffset() const; double GetNormalizedEndOffset() const; @@ -237,6 +248,9 @@ // The number of times each |cycle_duration_| is covered by the timer. int completed_cycles_ = 0; + + // See comments above SetPlaybackSpeed(). + float playback_speed_ = 1.f; }; void InitTimer(const base::TimeTicks& timestamp); @@ -271,6 +285,8 @@ base::flat_map<cc::SkottieResourceIdHash, scoped_refptr<cc::SkottieFrameDataProvider::ImageAsset>> image_assets_; + + float playback_speed_ = 1.f; }; } // namespace lottie
diff --git a/ui/lottie/animation_unittest.cc b/ui/lottie/animation_unittest.cc index baddcf20..9427a97 100644 --- a/ui/lottie/animation_unittest.cc +++ b/ui/lottie/animation_unittest.cc
@@ -942,6 +942,36 @@ IsAllSameColor(SK_ColorBLUE, canvas.GetBitmap()); } +TEST_F(AnimationTest, SetsPlaybackSpeed) { + TestAnimationObserver observer(animation_.get()); + + AdvanceClock(base::Milliseconds(300)); + + animation_->SetPlaybackSpeed(2); + animation_->Start(Animation::Style::kLinear); + + animation_->Paint(canvas(), NowTicks(), animation_->GetOriginalSize()); + EXPECT_FLOAT_EQ(animation_->GetCurrentProgress(), 0); + + AdvanceClock(kAnimationDuration / 8); + animation_->Paint(canvas(), NowTicks(), animation_->GetOriginalSize()); + EXPECT_FLOAT_EQ(animation_->GetCurrentProgress(), 1.f / 4); + + AdvanceClock(kAnimationDuration / 8); + animation_->Paint(canvas(), NowTicks(), animation_->GetOriginalSize()); + EXPECT_FLOAT_EQ(animation_->GetCurrentProgress(), 1.f / 2); + + animation_->SetPlaybackSpeed(0.5f); + + AdvanceClock(kAnimationDuration / 4); + animation_->Paint(canvas(), NowTicks(), animation_->GetOriginalSize()); + EXPECT_FLOAT_EQ(animation_->GetCurrentProgress(), (1.f / 2) + (1.f / 8)); + + AdvanceClock(kAnimationDuration / 4); + animation_->Paint(canvas(), NowTicks(), animation_->GetOriginalSize()); + EXPECT_FLOAT_EQ(animation_->GetCurrentProgress(), 3.f / 4); +} + TEST_F(AnimationWithImageAssetsTest, PaintsAnimationImagesToCanvas) { AdvanceClock(base::Milliseconds(300));
diff --git a/ui/webui/resources/cr_elements/cr_container_shadow_behavior.js b/ui/webui/resources/cr_elements/cr_container_shadow_behavior.js index 31d778c8..ff496ba 100644 --- a/ui/webui/resources/cr_elements/cr_container_shadow_behavior.js +++ b/ui/webui/resources/cr_elements/cr_container_shadow_behavior.js
@@ -169,3 +169,13 @@ } }, }; + +/** @interface */ +/* #export */ class CrContainerShadowBehaviorInterface { + /** + * @param {boolean} enable + */ + enableShadowBehavior(enable) {} + + showDropShadows() {} +}