Skip to content

Commit 0758d11

Browse files
alancutterChromium LUCI CQ
authored andcommitted
Replace experimental tabbed window pref with user_display_mode enum
This removes the use of the experimental_tabbed_window_mode web app pref in favour of using WebApp::user_display_mode by allowing kTabbed as a value in addition to kStandalone and kBrowser. This kTabbed only takes effect when the kDesktopPWAsTabStripSettings feature is enabled, otherwise it is interpreted as kStandalone. This CL has no changes in behaviour other than the kTabbed state now syncing across devices (because user_display_mode syncs across devices). Old versions of Chromium will interpret it as UNSPECIFIED which is treated as STANDALONE. Bug: 1241283 Change-Id: I97540e7838de81242bed2f4f73926a04f403b2bc Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/3115707 Commit-Queue: Alan Cutter <[email protected]> Reviewed-by: Marc Treib <[email protected]> Reviewed-by: Nancy Wang <[email protected]> Reviewed-by: Robert Kaplow <[email protected]> Reviewed-by: Alexey Baskakov <[email protected]> Cr-Commit-Position: refs/heads/main@{#915942}
1 parent d33ca4c commit 0758d11

29 files changed

+109
-133
lines changed

chrome/browser/sync/test/integration/two_client_web_apps_sync_test.cc

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
#include "base/bind.h"
66
#include "base/macros.h"
7+
#include "base/scoped_observation.h"
78
#include "base/strings/utf_string_conversions.h"
89
#include "base/test/bind.h"
910
#include "base/test/scoped_feature_list.h"
@@ -22,6 +23,7 @@
2223
#include "chrome/browser/web_applications/web_app_icon_manager.h"
2324
#include "chrome/browser/web_applications/web_app_provider.h"
2425
#include "chrome/browser/web_applications/web_app_registrar.h"
26+
#include "chrome/browser/web_applications/web_app_sync_bridge.h"
2527
#include "chrome/common/chrome_features.h"
2628
#include "chrome/test/base/ui_test_utils.h"
2729
#include "content/public/test/browser_test.h"
@@ -30,6 +32,27 @@
3032

3133
namespace web_app {
3234

35+
namespace {
36+
37+
class DisplayModeChangeWaiter : public AppRegistrarObserver {
38+
public:
39+
explicit DisplayModeChangeWaiter(WebAppRegistrar& registrar) {
40+
observation_.Observe(&registrar);
41+
}
42+
void OnWebAppUserDisplayModeChanged(const AppId& app_id,
43+
DisplayMode user_display_mode) override {
44+
run_loop_.Quit();
45+
}
46+
void Wait() { run_loop_.Run(); }
47+
48+
private:
49+
base::RunLoop run_loop_;
50+
base::ScopedObservation<WebAppRegistrar, AppRegistrarObserver> observation_{
51+
this};
52+
};
53+
54+
} // namespace
55+
3356
class TwoClientWebAppsSyncTest : public SyncTest {
3457
public:
3558
TwoClientWebAppsSyncTest() : SyncTest(TWO_CLIENT) {
@@ -383,4 +406,31 @@ IN_PROC_BROWSER_TEST_F(TwoClientWebAppsSyncTest, SyncUsingIconUrlFallback) {
383406
SK_ColorBLUE);
384407
}
385408

409+
IN_PROC_BROWSER_TEST_F(TwoClientWebAppsSyncTest, SyncUserDisplayModeChange) {
410+
WebAppTestInstallObserver install_observer(GetProfile(1));
411+
install_observer.BeginListening();
412+
413+
WebApplicationInfo info;
414+
info.title = u"Test name";
415+
info.description = u"Test description";
416+
info.start_url = GURL("http://www.chromium.org/path");
417+
info.scope = GURL("http://www.chromium.org/");
418+
info.user_display_mode = DisplayMode::kStandalone;
419+
AppId app_id = apps_helper::InstallWebApp(GetProfile(0), info);
420+
421+
EXPECT_EQ(install_observer.Wait(), app_id);
422+
EXPECT_TRUE(AllProfilesHaveSameWebAppIds());
423+
424+
auto* provider1 = WebAppProvider::GetForTest(GetProfile(1));
425+
WebAppRegistrar& registrar1 = provider1->registrar();
426+
EXPECT_EQ(registrar1.GetAppUserDisplayMode(app_id), DisplayMode::kStandalone);
427+
428+
DisplayModeChangeWaiter display_mode_change_waiter(registrar1);
429+
provider1->sync_bridge().SetAppUserDisplayMode(app_id, DisplayMode::kTabbed,
430+
/*is_user_action=*/true);
431+
display_mode_change_waiter.Wait();
432+
433+
EXPECT_EQ(registrar1.GetAppUserDisplayMode(app_id), DisplayMode::kTabbed);
434+
}
435+
386436
} // namespace web_app

chrome/browser/ui/ash/shelf/app_service/app_service_shelf_context_menu.cc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -467,7 +467,7 @@ void AppServiceShelfContextMenu::SetLaunchType(int command_id) {
467467
switch (app_type_) {
468468
case apps::mojom::AppType::kWeb:
469469
case apps::mojom::AppType::kSystemWeb: {
470-
// Web apps can only toggle between kWindow and kBrowser.
470+
// Web apps can only toggle between kWindow, kTabbed and kBrowser.
471471
apps::mojom::WindowMode user_window_mode =
472472
ConvertLaunchTypeCommandToWindowMode(command_id);
473473
if (user_window_mode != apps::mojom::WindowMode::kUnknown) {

chrome/browser/ui/ash/shelf/app_service/app_service_shelf_context_menu_browsertest.cc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,7 @@ IN_PROC_BROWSER_TEST_F(AppServiceShelfContextMenuWebAppBrowserTest,
132132
apps::AppServiceProxyFactory::GetForProfile(profile)
133133
->FlushMojoCallsForTesting();
134134

135-
EXPECT_EQ(user_action_tester.GetActionCount("WebApp.SetWindowMode.Window"),
135+
EXPECT_EQ(user_action_tester.GetActionCount("WebApp.SetWindowMode.Tabbed"),
136136
1);
137137

138138
// App window should have tab strip.

chrome/browser/ui/views/web_apps/pwa_confirmation_bubble_view.cc

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -161,8 +161,8 @@ PWAConfirmationBubbleView::PWAConfirmationBubbleView(
161161
tabbed_window_checkbox_ = labels->AddChildView(
162162
std::make_unique<views::Checkbox>(l10n_util::GetStringUTF16(
163163
IDS_BOOKMARK_APP_BUBBLE_OPEN_AS_TABBED_WINDOW)));
164-
tabbed_window_checkbox_->SetChecked(
165-
web_app_info_->enable_experimental_tabbed_window);
164+
tabbed_window_checkbox_->SetChecked(web_app_info_->user_display_mode ==
165+
web_app::DisplayMode::kTabbed);
166166
}
167167

168168
chrome::RecordDialogCreation(chrome::DialogIdentifier::PWA_CONFIRMATION);
@@ -203,10 +203,10 @@ void PWAConfirmationBubbleView::WindowClosing() {
203203

204204
bool PWAConfirmationBubbleView::Accept() {
205205
DCHECK(web_app_info_);
206-
if (tabbed_window_checkbox_) {
207-
web_app_info_->enable_experimental_tabbed_window =
208-
tabbed_window_checkbox_->GetChecked();
209-
}
206+
web_app_info_->user_display_mode =
207+
tabbed_window_checkbox_ && tabbed_window_checkbox_->GetChecked()
208+
? web_app::DisplayMode::kTabbed
209+
: web_app::DisplayMode::kStandalone;
210210

211211
if (iph_state_ == chrome::PwaInProductHelpState::kShown) {
212212
web_app::AppId app_id = web_app::GenerateAppId(web_app_info_->manifest_id,

chrome/browser/ui/views/web_apps/web_app_confirmation_view.cc

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -129,10 +129,10 @@ WebAppConfirmationView::WebAppConfirmationView(
129129

130130
if (web_app_info_->user_display_mode == web_app::DisplayMode::kBrowser)
131131
open_as_tab_radio_->SetChecked(true);
132-
else if (!web_app_info_->enable_experimental_tabbed_window)
133-
open_as_window_radio_->SetChecked(true);
134-
else
132+
else if (web_app_info_->user_display_mode == web_app::DisplayMode::kTabbed)
135133
open_as_tabbed_window_radio_->SetChecked(true);
134+
else
135+
open_as_window_radio_->SetChecked(true);
136136
} else {
137137
auto open_as_window_checkbox = std::make_unique<views::Checkbox>(
138138
l10n_util::GetStringUTF16(IDS_BOOKMARK_APP_BUBBLE_OPEN_AS_WINDOW));
@@ -175,13 +175,11 @@ bool WebAppConfirmationView::Accept() {
175175
web_app_info_->title = GetTrimmedTitle();
176176
if (ShowRadioButtons()) {
177177
if (open_as_tabbed_window_radio_->GetChecked()) {
178-
web_app_info_->user_display_mode = web_app::DisplayMode::kStandalone;
179-
web_app_info_->enable_experimental_tabbed_window = true;
178+
web_app_info_->user_display_mode = web_app::DisplayMode::kTabbed;
180179
} else {
181180
web_app_info_->user_display_mode = open_as_window_radio_->GetChecked()
182181
? web_app::DisplayMode::kStandalone
183182
: web_app::DisplayMode::kBrowser;
184-
web_app_info_->enable_experimental_tabbed_window = false;
185183
}
186184
} else {
187185
web_app_info_->user_display_mode = open_as_window_checkbox_->GetChecked()

chrome/browser/ui/views/web_apps/web_app_tab_strip_browsertest.cc

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -67,8 +67,7 @@ class WebAppTabStripBrowserTest : public InProcessBrowserTest {
6767
web_app_info->scope = start_url.GetWithoutFilename();
6868
web_app_info->title = u"Test app";
6969
web_app_info->background_color = kAppBackgroundColor;
70-
web_app_info->user_display_mode = DisplayMode::kStandalone;
71-
web_app_info->enable_experimental_tabbed_window = true;
70+
web_app_info->user_display_mode = DisplayMode::kTabbed;
7271
AppId app_id = test::InstallWebApp(profile, std::move(web_app_info));
7372

7473
Browser* app_browser = LaunchWebAppBrowser(profile, app_id);

chrome/browser/ui/web_applications/web_app_link_capturing_browsertest.cc

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -203,8 +203,8 @@ class WebAppTabStripLinkCapturingBrowserTest
203203
void InstallTestApp() {
204204
WebAppLinkCapturingBrowserTest::InstallTestApp("/web_apps/basic.html",
205205
/*await_metric=*/false);
206-
provider().sync_bridge().SetExperimentalTabbedWindowMode(
207-
app_id_, true, /*is_user_action=*/false);
206+
provider().sync_bridge().SetAppUserDisplayMode(
207+
app_id_, DisplayMode::kTabbed, /*is_user_action=*/false);
208208
}
209209

210210
private:

chrome/browser/web_applications/app_service/web_app_publisher_helper.cc

Lines changed: 9 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -264,9 +264,7 @@ apps::mojom::AppPtr WebAppPublisherHelper::ConvertWebApp(
264264
app->publisher_id = web_app->start_url().spec();
265265

266266
auto display_mode = registrar().GetAppUserDisplayMode(web_app->app_id());
267-
app->window_mode = ConvertDisplayModeToWindowMode(
268-
display_mode,
269-
registrar().IsInExperimentalTabbedWindowMode(web_app->app_id()));
267+
app->window_mode = ConvertDisplayModeToWindowMode(display_mode);
270268

271269
// app->version is left empty here.
272270
PopulateWebAppPermissions(web_app, &app->permissions);
@@ -645,40 +643,33 @@ void WebAppPublisherHelper::SetWindowMode(const std::string& app_id,
645643
display_mode = blink::mojom::DisplayMode::kStandalone;
646644
break;
647645
case apps::mojom::WindowMode::kTabbedWindow:
648-
provider_->sync_bridge().SetExperimentalTabbedWindowMode(
649-
app_id, /*enabled=*/true, /*is_user_action=*/true);
650-
return;
646+
display_mode = blink::mojom::DisplayMode::kTabbed;
647+
break;
651648
}
652-
provider_->sync_bridge().SetExperimentalTabbedWindowMode(
653-
app_id, /*enabled=*/false, /*is_user_action=*/true);
654649
provider_->sync_bridge().SetAppUserDisplayMode(app_id, display_mode,
655650
/*is_user_action=*/true);
656651
}
657652

658653
apps::mojom::WindowMode WebAppPublisherHelper::ConvertDisplayModeToWindowMode(
659-
blink::mojom::DisplayMode display_mode,
660-
bool in_experimental_tabbed_window) {
661-
if (in_experimental_tabbed_window) {
662-
return apps::mojom::WindowMode::kTabbedWindow;
663-
}
654+
blink::mojom::DisplayMode display_mode) {
664655
switch (display_mode) {
665656
case blink::mojom::DisplayMode::kUndefined:
666657
return apps::mojom::WindowMode::kUnknown;
667658
case blink::mojom::DisplayMode::kBrowser:
668659
return apps::mojom::WindowMode::kBrowser;
660+
case blink::mojom::DisplayMode::kTabbed:
661+
return apps::mojom::WindowMode::kTabbedWindow;
669662
case blink::mojom::DisplayMode::kMinimalUi:
670663
case blink::mojom::DisplayMode::kStandalone:
671664
case blink::mojom::DisplayMode::kFullscreen:
672665
case blink::mojom::DisplayMode::kWindowControlsOverlay:
673-
case blink::mojom::DisplayMode::kTabbed:
674666
return apps::mojom::WindowMode::kWindow;
675667
}
676668
}
677669

678670
void WebAppPublisherHelper::PublishWindowModeUpdate(
679671
const std::string& app_id,
680-
blink::mojom::DisplayMode display_mode,
681-
bool in_experimental_tabbed_window) {
672+
blink::mojom::DisplayMode display_mode) {
682673
const WebApp* web_app = GetWebApp(app_id);
683674
if (!web_app || !Accepts(app_id)) {
684675
return;
@@ -687,8 +678,7 @@ void WebAppPublisherHelper::PublishWindowModeUpdate(
687678
apps::mojom::AppPtr app = apps::mojom::App::New();
688679
app->app_type = app_type();
689680
app->app_id = app_id;
690-
app->window_mode = ConvertDisplayModeToWindowMode(
691-
display_mode, in_experimental_tabbed_window);
681+
app->window_mode = ConvertDisplayModeToWindowMode(display_mode);
692682
delegate_->PublishWebApp(std::move(app));
693683
}
694684

@@ -788,15 +778,7 @@ void WebAppPublisherHelper::OnWebAppLastLaunchTimeChanged(
788778
void WebAppPublisherHelper::OnWebAppUserDisplayModeChanged(
789779
const AppId& app_id,
790780
DisplayMode user_display_mode) {
791-
PublishWindowModeUpdate(app_id, user_display_mode,
792-
registrar().IsInExperimentalTabbedWindowMode(app_id));
793-
}
794-
795-
void WebAppPublisherHelper::OnWebAppExperimentalTabbedWindowModeChanged(
796-
const AppId& app_id,
797-
bool enabled) {
798-
auto display_mode = registrar().GetAppUserDisplayMode(app_id);
799-
PublishWindowModeUpdate(app_id, display_mode, enabled);
781+
PublishWindowModeUpdate(app_id, user_display_mode);
800782
}
801783

802784
#if BUILDFLAG(IS_CHROMEOS_ASH) || BUILDFLAG(IS_CHROMEOS_LACROS)

chrome/browser/web_applications/app_service/web_app_publisher_helper.h

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -175,12 +175,10 @@ class WebAppPublisherHelper : public AppRegistrarObserver,
175175

176176
// Converts |display_mode| to a |window_mode|.
177177
apps::mojom::WindowMode ConvertDisplayModeToWindowMode(
178-
blink::mojom::DisplayMode display_mode,
179-
bool in_experimental_tabbed_window);
178+
blink::mojom::DisplayMode display_mode);
180179

181180
void PublishWindowModeUpdate(const std::string& app_id,
182-
blink::mojom::DisplayMode display_mode,
183-
bool in_experimental_tabbed_window);
181+
blink::mojom::DisplayMode display_mode);
184182

185183
// Execute the user command from the context menu items. Currently
186184
// on the web app shortcut need to be execute in the publisher.
@@ -229,8 +227,6 @@ class WebAppPublisherHelper : public AppRegistrarObserver,
229227
const base::Time& last_launch_time) override;
230228
void OnWebAppUserDisplayModeChanged(const AppId& app_id,
231229
DisplayMode user_display_mode) override;
232-
void OnWebAppExperimentalTabbedWindowModeChanged(const AppId& app_id,
233-
bool enabled) override;
234230
#if BUILDFLAG(IS_CHROMEOS_ASH) || BUILDFLAG(IS_CHROMEOS_LACROS)
235231
void OnWebAppDisabledStateChanged(const AppId& app_id,
236232
bool is_disabled) override;

chrome/browser/web_applications/components/app_registrar_observer.h

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -67,8 +67,6 @@ class AppRegistrarObserver : public base::CheckedObserver {
6767
const base::Time& time) {}
6868
virtual void OnWebAppUserDisplayModeChanged(const AppId& app_id,
6969
DisplayMode user_display_mode) {}
70-
virtual void OnWebAppExperimentalTabbedWindowModeChanged(const AppId& app_id,
71-
bool enabled) {}
7270
};
7371

7472
} // namespace web_app

0 commit comments

Comments
 (0)