summaryrefslogtreecommitdiff
path: root/chromium/chrome/browser/extensions/api/management/management_apitest.cc
diff options
context:
space:
mode:
authorAllan Sandfeld Jensen <allan.jensen@qt.io>2019-05-24 11:40:17 +0200
committerAllan Sandfeld Jensen <allan.jensen@qt.io>2019-05-24 12:42:11 +0000
commit5d87695f37678f96492b258bbab36486c59866b4 (patch)
treebe9783bbaf04fb930c4d74ca9c00b5e7954c8bc6 /chromium/chrome/browser/extensions/api/management/management_apitest.cc
parent6c11fb357ec39bf087b8b632e2b1e375aef1b38b (diff)
downloadqtwebengine-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.cc144
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