[Extensions] Enable browserAction tests for service workers.
Bug: 1015136
Change-Id: I2bef165b3fedd21d4a04340a89de6cd235469e02
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1951970
Commit-Queue: David Bertoni <dbertoni@chromium.org>
Reviewed-by: Istiaque Ahmed <lazyboy@chromium.org>
Cr-Commit-Position: refs/heads/master@{#734671}
diff --git a/chrome/browser/extensions/api/extension_action/browser_action_apitest.cc b/chrome/browser/extensions/api/extension_action/browser_action_apitest.cc
index 33f31b8..8f8d0f5 100644
--- a/chrome/browser/extensions/api/extension_action/browser_action_apitest.cc
+++ b/chrome/browser/extensions/api/extension_action/browser_action_apitest.cc
@@ -56,6 +56,7 @@
#include "extensions/browser/process_manager.h"
#include "extensions/browser/test_extension_registry_observer.h"
#include "extensions/common/feature_switch.h"
+#include "extensions/common/scoped_worker_based_extensions_channel.h"
#include "extensions/test/extension_test_message_listener.h"
#include "extensions/test/result_catcher.h"
#include "net/dns/mock_host_resolver.h"
@@ -71,6 +72,7 @@
#include "ui/gfx/skia_util.h"
using content::WebContents;
+using ContextType = extensions::ExtensionBrowserTest::ContextType;
namespace extensions {
namespace {
@@ -161,6 +163,33 @@
}
};
+class BrowserActionApiLazyTest
+ : public BrowserActionApiTest,
+ public testing::WithParamInterface<ContextType> {
+ public:
+ void SetUp() override {
+ BrowserActionApiTest::SetUp();
+ // Service Workers are currently only available on certain channels, so set
+ // the channel for those tests.
+ if (GetParam() == ContextType::kServiceWorker) {
+ current_channel_ =
+ std::make_unique<extensions::ScopedWorkerBasedExtensionsChannel>();
+ }
+ }
+
+ const extensions::Extension* LoadExtensionWithParamFlags(
+ const base::FilePath& path) {
+ int flags = kFlagEnableFileAccess;
+ if (GetParam() == ContextType::kServiceWorker)
+ flags |= ExtensionBrowserTest::kFlagRunAsServiceWorkerBasedExtension;
+ return LoadExtensionWithFlags(path, flags);
+ }
+
+ private:
+ std::unique_ptr<extensions::ScopedWorkerBasedExtensionsChannel>
+ current_channel_;
+};
+
// Watches a frame is swapped with a new frame by e.g., navigation.
class RenderFrameChangedWatcher : public content::WebContentsObserver {
public:
@@ -183,11 +212,11 @@
content::RenderFrameHost* created_frame_;
};
-IN_PROC_BROWSER_TEST_F(BrowserActionApiTest, Basic) {
+IN_PROC_BROWSER_TEST_P(BrowserActionApiLazyTest, Basic) {
ExtensionTestMessageListener ready_listener("ready", false);
ASSERT_TRUE(embedded_test_server()->Start());
- const Extension* extension =
- LoadExtension(test_data_dir_.AppendASCII("browser_action/basics"));
+ const Extension* extension = LoadExtensionWithParamFlags(
+ test_data_dir_.AppendASCII("browser_action/basics"));
ASSERT_TRUE(extension) << message_;
// Test that there is a browser action in the toolbar.
@@ -207,11 +236,11 @@
EXPECT_TRUE(catcher.GetNextResult());
}
-IN_PROC_BROWSER_TEST_F(BrowserActionApiTest, Update) {
+IN_PROC_BROWSER_TEST_P(BrowserActionApiLazyTest, Update) {
ExtensionTestMessageListener ready_listener("ready", true);
ASSERT_TRUE(embedded_test_server()->Start());
- const Extension* extension =
- LoadExtension(test_data_dir_.AppendASCII("browser_action/update"));
+ const Extension* extension = LoadExtensionWithParamFlags(
+ test_data_dir_.AppendASCII("browser_action/update"));
ASSERT_TRUE(extension) << message_;
// Test that there is a browser action in the toolbar.
ASSERT_EQ(1, GetBrowserActionsBar()->NumberOfBrowserActions());
@@ -239,6 +268,13 @@
action->GetBadgeBackgroundColor(ExtensionAction::kDefaultTabId));
}
+INSTANTIATE_TEST_SUITE_P(EventPage,
+ BrowserActionApiLazyTest,
+ ::testing::Values(ContextType::kEventPage));
+INSTANTIATE_TEST_SUITE_P(ServiceWorker,
+ BrowserActionApiLazyTest,
+ ::testing::Values(ContextType::kServiceWorker));
+
IN_PROC_BROWSER_TEST_F(BrowserActionApiCanvasTest, DynamicBrowserAction) {
ASSERT_TRUE(RunExtensionTest("browser_action/no_icon")) << message_;
const Extension* extension = GetSingleLoadedExtension();
@@ -644,11 +680,11 @@
<< "a specific tab id.";
}
-IN_PROC_BROWSER_TEST_F(BrowserActionApiTest, IncognitoBasic) {
+IN_PROC_BROWSER_TEST_P(BrowserActionApiLazyTest, IncognitoBasic) {
ExtensionTestMessageListener ready_listener("ready", false);
ASSERT_TRUE(embedded_test_server()->Start());
- const Extension* extension =
- LoadExtension(test_data_dir_.AppendASCII("browser_action/basics"));
+ const Extension* extension = LoadExtensionWithParamFlags(
+ test_data_dir_.AppendASCII("browser_action/basics"));
ASSERT_TRUE(extension) << message_;
// Test that there is a browser action in the toolbar.
@@ -692,10 +728,14 @@
EXPECT_TRUE(catcher.GetNextResult());
}
-IN_PROC_BROWSER_TEST_F(BrowserActionApiTest, IncognitoUpdate) {
+IN_PROC_BROWSER_TEST_P(BrowserActionApiLazyTest, IncognitoUpdate) {
+ // TODO(crbug.com/1015136): Investigate flakiness WRT Service Workers and
+ // incognito mode.
+ if (GetParam() == ContextType::kServiceWorker)
+ return;
ASSERT_TRUE(embedded_test_server()->Start());
- const Extension* extension =
- LoadExtension(test_data_dir_.AppendASCII("browser_action/update"));
+ const Extension* extension = LoadExtensionWithParamFlags(
+ test_data_dir_.AppendASCII("browser_action/update"));
ASSERT_TRUE(extension) << message_;
// Test that there is a browser action in the toolbar.
ASSERT_EQ(1, GetBrowserActionsBar()->NumberOfBrowserActions());
diff --git a/chrome/test/data/extensions/api_test/browser_action/basics/manifest.json b/chrome/test/data/extensions/api_test/browser_action/basics/manifest.json
index 210fbab..27b1d54 100644
--- a/chrome/test/data/extensions/api_test/browser_action/basics/manifest.json
+++ b/chrome/test/data/extensions/api_test/browser_action/basics/manifest.json
@@ -3,6 +3,7 @@
"version": "1.0",
"manifest_version": 2,
"background": {
+ "persistent": false,
"scripts": ["background.js"]
},
"permissions": [
diff --git a/chrome/test/data/extensions/api_test/browser_action/update/background.js b/chrome/test/data/extensions/api_test/browser_action/update/background.js
index 817f79e3..dc0cdf5 100644
--- a/chrome/test/data/extensions/api_test/browser_action/update/background.js
+++ b/chrome/test/data/extensions/api_test/browser_action/update/background.js
@@ -3,10 +3,16 @@
// found in the LICENSE file.
function updateBrowserAction() {
- chrome.browserAction.setTitle({title: 'Modified'});
- chrome.browserAction.setIcon({path: 'icon2.png'});
- chrome.browserAction.setBadgeText({text: 'badge'});
- chrome.browserAction.setBadgeBackgroundColor({color: [255,255,255,255]});
+ chrome.browserAction.setTitle({title: 'Modified'}, function() {
+ chrome.browserAction.setIcon({path: 'icon2.png'}, function() {
+ chrome.browserAction.setBadgeText({text: 'badge'}, function() {
+ chrome.browserAction.setBadgeBackgroundColor({color: [255,255,255,255]},
+ function() {
+ chrome.test.notifyPass();
+ });
+ });
+ });
+ });
}
chrome.extension.isAllowedIncognitoAccess(function(isAllowedAccess) {
@@ -14,7 +20,6 @@
chrome.test.sendMessage('incognito ready', function(message) {
if (message == 'incognito update') {
updateBrowserAction();
- chrome.test.notifyPass();
}
});
}
@@ -23,6 +28,5 @@
chrome.test.sendMessage('ready', function(message) {
if (message == 'update') {
updateBrowserAction();
- chrome.test.notifyPass();
}
});
diff --git a/chrome/test/data/extensions/api_test/browser_action/update/manifest.json b/chrome/test/data/extensions/api_test/browser_action/update/manifest.json
index 55e985d3..ca88418 100644
--- a/chrome/test/data/extensions/api_test/browser_action/update/manifest.json
+++ b/chrome/test/data/extensions/api_test/browser_action/update/manifest.json
@@ -3,6 +3,7 @@
"version": "1.0",
"manifest_version": 2,
"background": {
+ "persistent": false,
"scripts": ["background.js"]
},
"browser_action": {