Commit df7de6e0 authored by Istiaque Ahmed's avatar Istiaque Ahmed Committed by Commit Bot

Implement chrome.windows.create for SW based extensions.

This CL implements windows.create for SW based extensions.
For SW based extensions:
  - Calling windows.create with {setSelfAsOpener: true} from a
    worker script will return an error.
  - Calling windows.create from an extension frame, setSelfAsOpener
    should continue to work. This CL doesn't add test for this.

This CL expands ExtensionApiTest.TabCurrentWindow test to
extension Service Workers, that exercises chrome.windows.create API.

Bug: 984350
Test: SW extensions can use chrome.windows.create.
Change-Id: Id74feed7e6f56da1833751c4f4abbeb2cca58cd7
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1703187
Commit-Queue: Istiaque Ahmed <lazyboy@chromium.org>
Reviewed-by: default avatarDevlin <rdevlin.cronin@chromium.org>
Cr-Commit-Position: refs/heads/master@{#683289}
parent 3e1dfd16
...@@ -592,6 +592,14 @@ ExtensionFunction::ResponseAction WindowsCreateFunction::Run() { ...@@ -592,6 +592,14 @@ ExtensionFunction::ResponseAction WindowsCreateFunction::Run() {
bool set_self_as_opener = create_data->set_self_as_opener && // present? bool set_self_as_opener = create_data->set_self_as_opener && // present?
*create_data->set_self_as_opener; // set to true? *create_data->set_self_as_opener; // set to true?
if (set_self_as_opener) { if (set_self_as_opener) {
if (is_from_service_worker()) {
// TODO(crbug.com/984350): Add test for this.
return RespondNow(
Error("Cannot specify setSelfAsOpener Service Worker extension."));
}
// TODO(crbug.com/984350): Add tests for checking opener SiteInstance
// behavior from a SW based extension's extension frame (e.g. from popup).
// See ExtensionApiTest.WindowsCreate* tests for details.
navigate_params.opener = render_frame_host(); navigate_params.opener = render_frame_host();
navigate_params.source_site_instance = navigate_params.source_site_instance =
render_frame_host()->GetSiteInstance(); render_frame_host()->GetSiteInstance();
......
...@@ -18,6 +18,16 @@ ...@@ -18,6 +18,16 @@
namespace extensions { namespace extensions {
namespace {
// TODO(lazyboy): Move this to some common place for reuse, e.g.
// ExtensionBrowserTest.
enum class ContextType {
kEventPage,
kServiceWorker,
};
} // namespace
namespace keys = tabs_constants; namespace keys = tabs_constants;
namespace utils = extension_function_test_utils; namespace utils = extension_function_test_utils;
...@@ -117,8 +127,35 @@ IN_PROC_BROWSER_TEST_F(ExtensionTabsTest, QueryLastFocusedWindowTabs) { ...@@ -117,8 +127,35 @@ IN_PROC_BROWSER_TEST_F(ExtensionTabsTest, QueryLastFocusedWindowTabs) {
} }
} }
IN_PROC_BROWSER_TEST_F(ExtensionApiTest, TabCurrentWindow) { class NonPersistentExtensionTabsTest
ASSERT_TRUE(RunExtensionTest("tabs/current_window")) << message_; : public ExtensionApiTest,
public testing::WithParamInterface<ContextType> {
protected:
const Extension* LoadNonPersistentExtension(const char* relative_path) {
return LoadExtensionWithFlags(test_data_dir_.AppendASCII(relative_path),
GetParam() == ContextType::kEventPage
? kFlagNone
: kFlagRunAsServiceWorkerBasedExtension);
}
};
// Tests chrome.windows.create.
// TODO(crbug.com/984350): Expand the test to verify that setSelfAsOpener
// param is ignored from Service Worker extension scripts.
IN_PROC_BROWSER_TEST_P(NonPersistentExtensionTabsTest, TabCurrentWindow) {
ASSERT_TRUE(RunExtensionTestWithFlags(
"tabs/current_window", GetParam() == ContextType::kServiceWorker
? kFlagRunAsServiceWorkerBasedExtension
: kFlagNone))
<< message_;
} }
INSTANTIATE_TEST_SUITE_P(EventPage,
NonPersistentExtensionTabsTest,
::testing::Values(ContextType::kEventPage));
INSTANTIATE_TEST_SUITE_P(ServiceWorker,
NonPersistentExtensionTabsTest,
::testing::Values(ContextType::kServiceWorker));
} // namespace extensions } // namespace extensions
...@@ -814,7 +814,8 @@ ...@@ -814,7 +814,8 @@
}, },
"windows": [{ "windows": [{
"dependencies": ["api:tabs"], "dependencies": ["api:tabs"],
"contexts": ["blessed_extension"] "contexts": ["blessed_extension"],
"disallow_for_service_workers": false
}, { }, {
"channel": "stable", "channel": "stable",
"contexts": ["webui"], "contexts": ["webui"],
......
...@@ -2,6 +2,6 @@ ...@@ -2,6 +2,6 @@
"name": "tabs/current_window", "name": "tabs/current_window",
"version": "0.1", "version": "0.1",
"manifest_version": 2, "manifest_version": 2,
"background": { "scripts": ["background.js"] }, "background": { "scripts": ["background.js"], "persistent": false},
"permissions": ["tabs"] "permissions": ["tabs"]
} }
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