Commit 058525ad authored by Eric Willigers's avatar Eric Willigers Committed by Commit Bot

Desktop PWAs: Test shortcut apps with BMO

Various shortcut tests are extracted from hosted_app_browsertest.cc
They now also run with BMO, i.e. with no dependencies on Extensions.


Bug: 1026080
Change-Id: I6438bcbf38028b700b5f451dd4d781cedaf96d2b
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2040593
Commit-Queue: Eric Willigers <ericwilligers@chromium.org>
Reviewed-by: default avatarAlexey Baskakov <loyso@chromium.org>
Reviewed-by: default avatarAlan Cutter <alancutter@chromium.org>
Cr-Commit-Position: refs/heads/master@{#739245}
parent 8a7d3b6a
......@@ -357,15 +357,6 @@ class HostedAppTest : public extensions::ExtensionBrowserTest,
return app_id;
}
web_app::AppId InstallShortcutAppForCurrentUrl() {
chrome::SetAutoAcceptBookmarkAppDialogForTesting(true, false);
web_app::WebAppInstallObserver observer(profile());
CHECK(chrome::ExecuteCommand(browser(), IDC_CREATE_SHORTCUT));
web_app::AppId app_id = observer.AwaitNextInstall();
chrome::SetAutoAcceptBookmarkAppDialogForTesting(false, false);
return app_id;
}
Browser* NavigateInNewWindowAndAwaitInstallabilityCheck(const GURL& url) {
Browser* new_browser = new Browser(
Browser::CreateParams(Browser::TYPE_NORMAL, profile(), true));
......@@ -1182,36 +1173,6 @@ IN_PROC_BROWSER_TEST_P(SharedPWATest, InstallInstallableSite) {
EXPECT_EQ(0, user_action_tester.GetActionCount("CreateShortcut"));
}
IN_PROC_BROWSER_TEST_P(SharedPWATest, CreateShortcutForInstallableSite) {
base::UserActionTester user_action_tester;
ASSERT_TRUE(https_server()->Start());
NavigateToURLAndWait(browser(), GetInstallableAppURL());
web_app::AppId app_id = InstallShortcutAppForCurrentUrl();
EXPECT_EQ(registrar().GetAppShortName(app_id), GetInstallableAppName());
// Bookmark apps to PWAs should launch in a tab.
EXPECT_EQ(registrar().GetAppUserDisplayMode(app_id),
blink::mojom::DisplayMode::kBrowser);
EXPECT_EQ(0, user_action_tester.GetActionCount("InstallWebAppFromMenu"));
EXPECT_EQ(1, user_action_tester.GetActionCount("CreateShortcut"));
}
IN_PROC_BROWSER_TEST_P(SharedPWATest, CanInstallOverTabShortcutApp) {
ASSERT_TRUE(https_server()->Start());
NavigateToURLAndWait(browser(), GetInstallableAppURL());
InstallShortcutAppForCurrentUrl();
Browser* new_browser =
NavigateInNewWindowAndAwaitInstallabilityCheck(GetInstallableAppURL());
EXPECT_EQ(GetAppMenuCommandState(IDC_CREATE_SHORTCUT, new_browser), kEnabled);
EXPECT_EQ(GetAppMenuCommandState(IDC_INSTALL_PWA, new_browser), kEnabled);
EXPECT_EQ(GetAppMenuCommandState(IDC_OPEN_IN_PWA_WINDOW, new_browser),
kNotPresent);
}
IN_PROC_BROWSER_TEST_P(SharedPWATest, CanInstallOverTabPwa) {
ASSERT_TRUE(https_server()->Start());
......@@ -1230,24 +1191,6 @@ IN_PROC_BROWSER_TEST_P(SharedPWATest, CanInstallOverTabPwa) {
kNotPresent);
}
IN_PROC_BROWSER_TEST_P(SharedPWATest, CannotInstallOverWindowShortcutApp) {
ASSERT_TRUE(https_server()->Start());
NavigateToURLAndWait(browser(), GetInstallableAppURL());
web_app::AppId app_id = InstallShortcutAppForCurrentUrl();
// Change launch container to open in window.
registry_controller().SetAppUserDisplayMode(
app_id, blink::mojom::DisplayMode::kStandalone);
Browser* new_browser =
NavigateInNewWindowAndAwaitInstallabilityCheck(GetInstallableAppURL());
EXPECT_EQ(GetAppMenuCommandState(IDC_CREATE_SHORTCUT, new_browser), kEnabled);
EXPECT_EQ(GetAppMenuCommandState(IDC_INSTALL_PWA, new_browser), kNotPresent);
EXPECT_EQ(GetAppMenuCommandState(IDC_OPEN_IN_PWA_WINDOW, new_browser),
kEnabled);
}
IN_PROC_BROWSER_TEST_P(SharedPWATest, CannotInstallOverWindowPwa) {
ASSERT_TRUE(https_server()->Start());
......
// 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.
#include "base/test/metrics/user_action_tester.h"
#include "chrome/app/chrome_command_ids.h"
#include "chrome/browser/banners/test_app_banner_manager_desktop.h"
#include "chrome/browser/ui/browser.h"
#include "chrome/browser/ui/browser_commands.h"
#include "chrome/browser/ui/browser_dialogs.h"
#include "chrome/browser/ui/tabs/tab_strip_model.h"
#include "chrome/browser/ui/web_applications/test/web_app_browsertest_util.h"
#include "chrome/browser/ui/web_applications/web_app_controller_browsertest.h"
#include "chrome/browser/web_applications/components/app_registrar.h"
#include "chrome/browser/web_applications/components/app_registry_controller.h"
#include "chrome/browser/web_applications/components/web_app_constants.h"
#include "chrome/browser/web_applications/components/web_app_id.h"
#include "chrome/browser/web_applications/components/web_app_provider_base.h"
#include "chrome/browser/web_applications/test/web_app_install_observer.h"
#include "url/gurl.h"
namespace {
void NavigateAndAwaitInstallabilityCheck(Browser* browser, const GURL& url) {
auto* manager = banners::TestAppBannerManagerDesktop::CreateForWebContents(
browser->tab_strip_model()->GetActiveWebContents());
web_app::NavigateToURLAndWait(browser, url);
manager->WaitForInstallableCheck();
}
} // anonymous namespace
namespace web_app {
class CreateShortcutBrowserTest : public WebAppControllerBrowserTest {
public:
AppId InstallShortcutAppForCurrentUrl() {
chrome::SetAutoAcceptBookmarkAppDialogForTesting(true, false);
WebAppInstallObserver observer(profile());
CHECK(chrome::ExecuteCommand(browser(), IDC_CREATE_SHORTCUT));
AppId app_id = observer.AwaitNextInstall();
chrome::SetAutoAcceptBookmarkAppDialogForTesting(false, false);
return app_id;
}
AppRegistrar& registrar() {
auto* provider = WebAppProviderBase::GetProviderBase(profile());
CHECK(provider);
return provider->registrar();
}
AppRegistryController& registry_controller() {
auto* provider = WebAppProviderBase::GetProviderBase(profile());
CHECK(provider);
return provider->registry_controller();
}
Browser* NavigateInNewWindowAndAwaitInstallabilityCheck(const GURL& url) {
Browser* new_browser = new Browser(
Browser::CreateParams(Browser::TYPE_NORMAL, profile(), true));
AddBlankTabAndShow(new_browser);
NavigateAndAwaitInstallabilityCheck(new_browser, url);
return new_browser;
}
};
IN_PROC_BROWSER_TEST_P(CreateShortcutBrowserTest,
CreateShortcutForInstallableSite) {
base::UserActionTester user_action_tester;
ASSERT_TRUE(https_server()->Start());
NavigateToURLAndWait(browser(), GetInstallableAppURL());
AppId app_id = InstallShortcutAppForCurrentUrl();
EXPECT_EQ(registrar().GetAppShortName(app_id), GetInstallableAppName());
// Bookmark apps to PWAs should launch in a tab.
EXPECT_EQ(registrar().GetAppUserDisplayMode(app_id), DisplayMode::kBrowser);
EXPECT_EQ(0, user_action_tester.GetActionCount("InstallWebAppFromMenu"));
EXPECT_EQ(1, user_action_tester.GetActionCount("CreateShortcut"));
}
IN_PROC_BROWSER_TEST_P(CreateShortcutBrowserTest,
CanInstallOverTabShortcutApp) {
ASSERT_TRUE(https_server()->Start());
NavigateToURLAndWait(browser(), GetInstallableAppURL());
InstallShortcutAppForCurrentUrl();
Browser* new_browser =
NavigateInNewWindowAndAwaitInstallabilityCheck(GetInstallableAppURL());
EXPECT_EQ(GetAppMenuCommandState(IDC_CREATE_SHORTCUT, new_browser), kEnabled);
EXPECT_EQ(GetAppMenuCommandState(IDC_INSTALL_PWA, new_browser), kEnabled);
EXPECT_EQ(GetAppMenuCommandState(IDC_OPEN_IN_PWA_WINDOW, new_browser),
kNotPresent);
}
IN_PROC_BROWSER_TEST_P(CreateShortcutBrowserTest,
CannotInstallOverWindowShortcutApp) {
ASSERT_TRUE(https_server()->Start());
NavigateToURLAndWait(browser(), GetInstallableAppURL());
AppId app_id = InstallShortcutAppForCurrentUrl();
// Change launch container to open in window.
registry_controller().SetAppUserDisplayMode(app_id, DisplayMode::kStandalone);
Browser* new_browser =
NavigateInNewWindowAndAwaitInstallabilityCheck(GetInstallableAppURL());
EXPECT_EQ(GetAppMenuCommandState(IDC_CREATE_SHORTCUT, new_browser), kEnabled);
EXPECT_EQ(GetAppMenuCommandState(IDC_INSTALL_PWA, new_browser), kNotPresent);
EXPECT_EQ(GetAppMenuCommandState(IDC_OPEN_IN_PWA_WINDOW, new_browser),
kEnabled);
}
INSTANTIATE_TEST_SUITE_P(
All,
CreateShortcutBrowserTest,
::testing::Values(ControllerType::kHostedAppController,
ControllerType::kUnifiedControllerWithBookmarkApp,
ControllerType::kUnifiedControllerWithWebApp),
ControllerTypeParamToString);
} // namespace web_app
......@@ -115,6 +115,11 @@ GURL WebAppControllerBrowserTest::GetInstallableAppURL() {
return https_server()->GetURL("/banners/manifest_test_page.html");
}
// static
const char* WebAppControllerBrowserTest::GetInstallableAppName() {
return "Manifest test app";
}
void WebAppControllerBrowserTest::SetUpInProcessBrowserTestFixture() {
extensions::ExtensionBrowserTest::SetUpInProcessBrowserTestFixture();
cert_verifier_.SetUpInProcessBrowserTestFixture();
......
......@@ -75,6 +75,7 @@ class WebAppControllerBrowserTest : public WebAppControllerBrowserTestBase {
net::EmbeddedTestServer* https_server() { return &https_server_; }
GURL GetInstallableAppURL();
static const char* GetInstallableAppName();
// ExtensionBrowserTest:
void SetUpInProcessBrowserTestFixture() override;
......
......@@ -1350,6 +1350,7 @@ if (!is_android) {
"../browser/ui/views/webauthn/authenticator_qr_code_test.cc",
"../browser/ui/views/webview_accessibility_browsertest.cc",
"../browser/ui/web_applications/app_browser_controller_browsertest.cc",
"../browser/ui/web_applications/create_shortcut_browsertest.cc",
"../browser/ui/web_applications/pwa_mixed_content_browsertest.cc",
"../browser/ui/web_applications/web_app_badging_browsertest.cc",
"../browser/ui/web_applications/web_app_browsertest.cc",
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment