diff options
author | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2019-05-24 11:40:17 +0200 |
---|---|---|
committer | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2019-05-24 12:42:11 +0000 |
commit | 5d87695f37678f96492b258bbab36486c59866b4 (patch) | |
tree | be9783bbaf04fb930c4d74ca9c00b5e7954c8bc6 /chromium/chrome/browser/extensions/api/management/management_apitest.cc | |
parent | 6c11fb357ec39bf087b8b632e2b1e375aef1b38b (diff) | |
download | qtwebengine-chromium-5d87695f37678f96492b258bbab36486c59866b4.tar.gz |
BASELINE: Update Chromium to 75.0.3770.56
Change-Id: I86d2007fd27a45d5797eee06f4c9369b8b50ac4f
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
Diffstat (limited to 'chromium/chrome/browser/extensions/api/management/management_apitest.cc')
-rw-r--r-- | chromium/chrome/browser/extensions/api/management/management_apitest.cc | 144 |
1 files changed, 127 insertions, 17 deletions
diff --git a/chromium/chrome/browser/extensions/api/management/management_apitest.cc b/chromium/chrome/browser/extensions/api/management/management_apitest.cc index cfea99a7de3..1616369c7ed 100644 --- a/chromium/chrome/browser/extensions/api/management/management_apitest.cc +++ b/chromium/chrome/browser/extensions/api/management/management_apitest.cc @@ -4,17 +4,19 @@ #include <map> +#include "base/strings/stringprintf.h" #include "build/build_config.h" #include "chrome/browser/extensions/extension_apitest.h" #include "chrome/browser/extensions/extension_service.h" -#include "chrome/browser/extensions/extension_util.h" #include "chrome/browser/extensions/launch_util.h" #include "chrome/browser/profiles/profile.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/browser_finder.h" #include "chrome/browser/ui/browser_list.h" #include "chrome/browser/ui/tabs/tab_strip_model.h" +#include "chrome/browser/web_applications/extensions/bookmark_app_util.h" #include "chrome/common/chrome_switches.h" #include "chrome/common/extensions/extension_constants.h" #include "extensions/browser/api/management/management_api.h" @@ -23,6 +25,9 @@ #include "extensions/browser/test_management_policy.h" #include "extensions/common/manifest.h" #include "extensions/test/extension_test_message_listener.h" +#include "extensions/test/result_catcher.h" +#include "extensions/test/test_extension_dir.h" +#include "net/dns/mock_host_resolver.h" using extensions::Extension; using extensions::Manifest; @@ -140,11 +145,128 @@ IN_PROC_BROWSER_TEST_F(ExtensionManagementApiTest, CreateAppShortcut) { } IN_PROC_BROWSER_TEST_F(ExtensionManagementApiTest, GenerateAppForLink) { - LoadExtensions(); ASSERT_TRUE(RunExtensionSubtest("management/test", "generateAppForLink.html")); } +class InstallReplacementWebAppApiTest : public ExtensionManagementApiTest { + public: + InstallReplacementWebAppApiTest() + : https_test_server_(net::EmbeddedTestServer::TYPE_HTTPS) {} + ~InstallReplacementWebAppApiTest() override = default; + + protected: + void SetUpOnMainThread() override { + ExtensionManagementApiTest::SetUpOnMainThread(); + https_test_server_.ServeFilesFromDirectory(test_data_dir_); + ASSERT_TRUE(https_test_server_.Start()); + } + + void RunTest(const char* web_app_path, + const char* background_script, + bool from_webstore) { + static constexpr char kManifest[] = + R"({ + "name": "Management API Test", + "version": "0.1", + "manifest_version": 2, + "background": { "scripts": ["background.js"] }, + "replacement_web_app": "%s" + })"; + extensions::TestExtensionDir extension_dir; + extension_dir.WriteManifest(base::StringPrintf( + kManifest, https_test_server_.GetURL(web_app_path).spec().c_str())); + extension_dir.WriteFile(FILE_PATH_LITERAL("background.js"), + background_script); + extensions::ResultCatcher catcher; + if (from_webstore) { + // |expected_change| is the expected change in the number of installed + // extensions. + ASSERT_TRUE(InstallExtensionFromWebstore(extension_dir.UnpackedPath(), + 1 /* expected_change */)); + } else { + ASSERT_TRUE(LoadExtension(extension_dir.UnpackedPath())); + } + + ASSERT_TRUE(catcher.GetNextResult()) << catcher.message(); + } + + net::EmbeddedTestServer https_test_server_; +}; + +IN_PROC_BROWSER_TEST_F(InstallReplacementWebAppApiTest, NotWebstore) { + static constexpr char kBackground[] = R"( + chrome.management.installReplacementWebApp(function() { + chrome.test.assertLastError( + 'Only extensions from the web store can install replacement web apps.'); + chrome.test.notifyPass(); + });)"; + + RunTest("/management/install_replacement_web_app/good_web_app/index.html", + kBackground, false /* from_webstore */); +} + +IN_PROC_BROWSER_TEST_F(InstallReplacementWebAppApiTest, NoGesture) { + static constexpr char kBackground[] = R"( + chrome.management.installReplacementWebApp(function() { + chrome.test.assertLastError( + 'chrome.management.installReplacementWebApp requires a user gesture.'); + chrome.test.notifyPass(); + });)"; + + RunTest("/management/install_replacement_web_app/good_web_app/index.html", + kBackground, true /* from_webstore */); +} + +IN_PROC_BROWSER_TEST_F(InstallReplacementWebAppApiTest, NotInstallableWebApp) { + static constexpr char kBackground[] = + R"(chrome.test.runWithUserGesture(function() { + chrome.management.installReplacementWebApp(function() { + chrome.test.assertLastError( + 'Web app is not a valid installable web app.'); + chrome.test.notifyPass(); + }); + });)"; + + RunTest("/management/install_replacement_web_app/bad_web_app/index.html", + kBackground, true /* from_webstore */); +} + +IN_PROC_BROWSER_TEST_F(InstallReplacementWebAppApiTest, InstallableWebApp) { + static constexpr char kBackground[] = + R"(chrome.test.runTests([ + function runInstall() { + chrome.test.runWithUserGesture(function() { + chrome.management.installReplacementWebApp(function() { + chrome.test.assertNoLastError(); + chrome.test.succeed(); + }); + }); + }, + function runInstallWhenAlreadyInstalled() { + chrome.test.runWithUserGesture(function() { + chrome.management.installReplacementWebApp(function() { + chrome.test.assertLastError( + 'Web app is already installed.'); + chrome.test.succeed(); + }); + }); + } + ]);)"; + static constexpr char kGoodWebAppURL[] = + "/management/install_replacement_web_app/good_web_app/index.html"; + + chrome::SetAutoAcceptPWAInstallConfirmationForTesting(true); + const GURL good_web_app_url = https_test_server_.GetURL(kGoodWebAppURL); + EXPECT_FALSE(extensions::BookmarkOrHostedAppInstalled(browser()->profile(), + good_web_app_url)); + + RunTest(kGoodWebAppURL, kBackground, true /* from_webstore */); + EXPECT_TRUE(extensions::BookmarkOrHostedAppInstalled(browser()->profile(), + good_web_app_url)); + chrome::SetAutoAcceptPWAInstallConfirmationForTesting(false); +} + // Fails often on Windows dbg bots. http://crbug.com/177163 #if defined(OS_WIN) #define MAYBE_ManagementPolicyAllowed DISABLED_ManagementPolicyAllowed @@ -301,23 +423,11 @@ IN_PROC_BROWSER_TEST_F(ExtensionManagementApiTest, MAYBE_LaunchTabApp) { // If the ID changed, then the pref will not apply to the app. ASSERT_EQ(app_id, app_id_new); - unsigned expected_browser_count = 2; -#if defined(OS_MACOSX) - // Without the new Bookmark Apps, Mac has no way of making standalone browser - // windows for apps, so it will add to the tabstrip instead. - EXPECT_FALSE(extensions::util::IsNewBookmarkAppsEnabled()); - EXPECT_FALSE(extensions::util::CanHostedAppsOpenInWindows()); - expected_browser_count = 1; - ASSERT_EQ(2, browser()->tab_strip_model()->count()); -#endif // Find the app's browser. Opening in a new window will create // a new browser. - ASSERT_EQ(expected_browser_count, - chrome::GetBrowserCount(browser()->profile())); - if (expected_browser_count == 2) { - Browser* app_browser = FindOtherBrowser(browser()); - ASSERT_TRUE(app_browser->is_app()); - } + ASSERT_EQ(2u, chrome::GetBrowserCount(browser()->profile())); + Browser* app_browser = FindOtherBrowser(browser()); + ASSERT_TRUE(app_browser->is_app()); } // Flaky on MacOS: crbug.com/915339 |