0

Add StorageKey to ServiceWorkerContext

Refactor the ServiceWorkerContext interface, and all implementors,
to use StorageKey.

This is meant as a behavioral no-op.

Bug: 1199077
Change-Id: I60b5c7ffaac18c940973952d99d80813f542f54d
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/3036482
Reviewed-by: Dominick Ng <dominickn@chromium.org>
Reviewed-by: David Bertoni <dbertoni@chromium.org>
Reviewed-by: Nico Weber <thakis@chromium.org>
Reviewed-by: Ben Kelly <wanderview@chromium.org>
Reviewed-by: Avi Drissman <avi@chromium.org>
Reviewed-by: Istiaque Ahmed <lazyboy@chromium.org>
Commit-Queue: Steven Bingler <bingler@chromium.org>
Cr-Commit-Position: refs/heads/master@{#905316}
This commit is contained in:
Steven Bingler
2021-07-26 17:39:42 +00:00
committed by Chromium LUCI CQ
parent 00c5b110d1
commit c9313b4dea
32 changed files with 320 additions and 171 deletions

@ -58,6 +58,8 @@
#include "content/public/browser/web_contents_user_data.h"
#include "extensions/buildflags/buildflags.h"
#include "net/traffic_annotation/network_traffic_annotation.h"
#include "third_party/blink/public/common/storage_key/storage_key.h"
#include "url/origin.h"
#if BUILDFLAG(ENABLE_EXTENSIONS)
#include "chrome/browser/autocomplete/keyword_extensions_delegate_impl.h"
@ -467,8 +469,9 @@ void ChromeAutocompleteProviderClient::StartServiceWorker(
if (!context)
return;
context->StartServiceWorkerForNavigationHint(destination_url,
base::DoNothing());
context->StartServiceWorkerForNavigationHint(
destination_url, blink::StorageKey(url::Origin::Create(destination_url)),
base::DoNothing());
}
bool ChromeAutocompleteProviderClient::IsTabOpenWithURL(

@ -54,8 +54,10 @@
#include "net/test/embedded_test_server/http_response.h"
#include "ppapi/shared_impl/ppapi_switches.h"
#include "third_party/blink/public/common/messaging/string_message_codec.h"
#include "third_party/blink/public/common/storage_key/storage_key.h"
#include "third_party/blink/public/mojom/service_worker/service_worker_registration.mojom.h"
#include "third_party/blink/public/mojom/service_worker/service_worker_registration_options.mojom.h"
#include "url/origin.h"
namespace chrome_service_worker_browser_test {
@ -148,8 +150,9 @@ class ChromeServiceWorkerTest : public InProcessBrowserTest {
InitializeServer();
NavigateToPageAndWaitForReadyTitle("/test.html");
GetServiceWorkerContext()->StopAllServiceWorkersForOrigin(
url::Origin::Create(embedded_test_server()->base_url()));
GetServiceWorkerContext()->StopAllServiceWorkersForStorageKey(
blink::StorageKey(
url::Origin::Create(embedded_test_server()->base_url())));
HostContentSettingsMapFactory::GetForProfile(browser()->profile())
->SetDefaultContentSetting(ContentSettingsType::JAVASCRIPT,
CONTENT_SETTING_BLOCK);
@ -182,12 +185,13 @@ class ChromeServiceWorkerTest : public InProcessBrowserTest {
msg.owned_encoded_message = blink::EncodeStringMessage(message_data);
msg.encoded_message = msg.owned_encoded_message;
GURL url = embedded_test_server()->GetURL("/scope/");
content::GetIOThreadTaskRunner({})->PostTask(
FROM_HERE,
base::BindOnce(&content::ServiceWorkerContext::
StartServiceWorkerAndDispatchMessage,
base::Unretained(GetServiceWorkerContext()),
embedded_test_server()->GetURL("/scope/"),
base::Unretained(GetServiceWorkerContext()), url,
blink::StorageKey(url::Origin::Create(url)),
std::move(msg),
base::BindRepeating(&ExpectResultAndRun<bool>, true,
run_loop.QuitClosure())));
@ -213,8 +217,9 @@ IN_PROC_BROWSER_TEST_F(ChromeServiceWorkerTest,
blink::mojom::ServiceWorkerRegistrationOptions options(
embedded_test_server()->GetURL("/"), blink::mojom::ScriptType::kClassic,
blink::mojom::ServiceWorkerUpdateViaCache::kImports);
blink::StorageKey key(url::Origin::Create(options.scope));
GetServiceWorkerContext()->RegisterServiceWorker(
embedded_test_server()->GetURL("/service_worker.js"), options,
embedded_test_server()->GetURL("/service_worker.js"), key, options,
base::BindOnce(&ExpectResultAndRun<blink::ServiceWorkerStatusCode>,
blink::ServiceWorkerStatusCode::kOk,
run_loop.QuitClosure()));
@ -241,8 +246,9 @@ IN_PROC_BROWSER_TEST_F(ChromeServiceWorkerTest,
blink::mojom::ServiceWorkerRegistrationOptions options(
embedded_test_server()->GetURL("/"), blink::mojom::ScriptType::kClassic,
blink::mojom::ServiceWorkerUpdateViaCache::kImports);
blink::StorageKey key(url::Origin::Create(options.scope));
GetServiceWorkerContext()->RegisterServiceWorker(
embedded_test_server()->GetURL("/service_worker.js"), options,
embedded_test_server()->GetURL("/service_worker.js"), key, options,
base::BindOnce(&ExpectResultAndRun<blink::ServiceWorkerStatusCode>,
blink::ServiceWorkerStatusCode::kOk,
run_loop.QuitClosure()));
@ -269,8 +275,9 @@ IN_PROC_BROWSER_TEST_F(ChromeServiceWorkerTest,
blink::mojom::ServiceWorkerRegistrationOptions options(
embedded_test_server()->GetURL("/"), blink::mojom::ScriptType::kClassic,
blink::mojom::ServiceWorkerUpdateViaCache::kImports);
blink::StorageKey key(url::Origin::Create(options.scope));
GetServiceWorkerContext()->RegisterServiceWorker(
embedded_test_server()->GetURL("/service_worker.js"), options,
embedded_test_server()->GetURL("/service_worker.js"), key, options,
base::BindOnce(&ExpectResultAndRun<blink::ServiceWorkerStatusCode>,
blink::ServiceWorkerStatusCode::kErrorDisallowed,
run_loop.QuitClosure()));
@ -659,8 +666,9 @@ class ChromeServiceWorkerNavigationHintTest : public ChromeServiceWorkerTest {
content::StartServiceWorkerForNavigationHintResult expected_result,
bool expected_started) {
base::RunLoop run_loop;
GURL url = embedded_test_server()->GetURL(scope);
GetServiceWorkerContext()->StartServiceWorkerForNavigationHint(
embedded_test_server()->GetURL(scope),
url, blink::StorageKey(url::Origin::Create(url)),
base::BindOnce(&ExpectResultAndRun<
content::StartServiceWorkerForNavigationHintResult>,
expected_result, run_loop.QuitClosure()));
@ -688,8 +696,9 @@ class ChromeServiceWorkerNavigationHintTest : public ChromeServiceWorkerTest {
WriteFile(FILE_PATH_LITERAL("test.html"), test_script);
InitializeServer();
NavigateToPageAndWaitForReadyTitle("/test.html");
GetServiceWorkerContext()->StopAllServiceWorkersForOrigin(
url::Origin::Create(embedded_test_server()->base_url()));
GetServiceWorkerContext()->StopAllServiceWorkersForStorageKey(
blink::StorageKey(
url::Origin::Create(embedded_test_server()->base_url())));
RunNavigationHintTest(
"/scope/", content::StartServiceWorkerForNavigationHintResult::STARTED,
true);
@ -711,8 +720,9 @@ class ChromeServiceWorkerNavigationHintTest : public ChromeServiceWorkerTest {
WriteFile(FILE_PATH_LITERAL("test.html"), test_script);
InitializeServer();
NavigateToPageAndWaitForReadyTitle("/test.html");
GetServiceWorkerContext()->StopAllServiceWorkersForOrigin(
url::Origin::Create(embedded_test_server()->base_url()));
GetServiceWorkerContext()->StopAllServiceWorkersForStorageKey(
blink::StorageKey(
url::Origin::Create(embedded_test_server()->base_url())));
RunNavigationHintTest(
"/scope/",
content::StartServiceWorkerForNavigationHintResult::NO_FETCH_HANDLER,
@ -761,8 +771,9 @@ IN_PROC_BROWSER_TEST_F(ChromeServiceWorkerNavigationHintTest,
embedded_test_server()->GetURL("/scope/"),
blink::mojom::ScriptType::kClassic,
blink::mojom::ServiceWorkerUpdateViaCache::kImports);
blink::StorageKey key(url::Origin::Create(options.scope));
GetServiceWorkerContext()->RegisterServiceWorker(
embedded_test_server()->GetURL("/sw.js"), options,
embedded_test_server()->GetURL("/sw.js"), key, options,
base::BindOnce(&ExpectResultAndRun<blink::ServiceWorkerStatusCode>,
blink::ServiceWorkerStatusCode::kOk,
run_loop.QuitClosure()));
@ -848,8 +859,9 @@ IN_PROC_BROWSER_TEST_F(ChromeServiceWorkerTest, DisallowChromeScheme) {
blink::mojom::ServiceWorkerRegistrationOptions options(
kScope, blink::mojom::ScriptType::kClassic,
blink::mojom::ServiceWorkerUpdateViaCache::kImports);
blink::StorageKey key(url::Origin::Create(options.scope));
GetServiceWorkerContext()->RegisterServiceWorker(
kScript, options,
kScript, key, options,
base::BindOnce(
[](base::OnceClosure quit_closure,
blink::ServiceWorkerStatusCode* out_result,

@ -13,6 +13,8 @@
#include "content/public/browser/browser_thread.h"
#include "third_party/blink/public/common/messaging/string_message_codec.h"
#include "third_party/blink/public/common/messaging/transferable_message.h"
#include "third_party/blink/public/common/storage_key/storage_key.h"
#include "url/origin.h"
namespace chromeos {
@ -141,7 +143,9 @@ void FcmConnectionEstablisher::SendInFlightMessage() {
PA_LOG(VERBOSE) << "Dispatching message " << message.message_type;
message.service_worker_context->StartServiceWorkerAndDispatchMessage(
message.service_worker_scope, std::move(msg),
message.service_worker_scope,
blink::StorageKey(url::Origin::Create(message.service_worker_scope)),
std::move(msg),
base::BindOnce(&FcmConnectionEstablisher::OnMessageDispatchResult,
weak_ptr_factory_.GetWeakPtr()));
}

@ -83,6 +83,7 @@
#include "services/network/public/cpp/is_potentially_trustworthy.h"
#include "testing/gmock/include/gmock/gmock.h"
#include "third_party/abseil-cpp/absl/types/optional.h"
#include "third_party/blink/public/common/storage_key/storage_key.h"
#include "ui/message_center/public/cpp/notification.h"
#include "url/url_constants.h"
@ -234,13 +235,13 @@ class ServiceWorkerTest : public ExtensionApiTest {
return ExtractInnerText(Navigate(url));
}
size_t GetWorkerRefCount(const url::Origin& origin) {
size_t GetWorkerRefCount(const blink::StorageKey& key) {
content::ServiceWorkerContext* sw_context =
browser()
->profile()
->GetDefaultStoragePartition()
->GetServiceWorkerContext();
return sw_context->CountExternalRequestsForTest(origin);
return sw_context->CountExternalRequestsForTest(key);
}
private:
@ -2280,10 +2281,11 @@ IN_PROC_BROWSER_TEST_F(ServiceWorkerBasedBackgroundTest, WorkerRefCount) {
browser()->tab_strip_model()->GetActiveWebContents();
url::Origin extension_origin = url::Origin::Create(extension->url());
blink::StorageKey extension_key(extension_origin);
// Service worker should have no pending requests because it hasn't performed
// any extension API request yet.
EXPECT_EQ(0u, GetWorkerRefCount(extension_origin));
EXPECT_EQ(0u, GetWorkerRefCount(extension_key));
ExtensionTestMessageListener worker_listener("CHECK_REF_COUNT", true);
worker_listener.set_failure_message("FAILURE");
@ -2292,7 +2294,7 @@ IN_PROC_BROWSER_TEST_F(ServiceWorkerBasedBackgroundTest, WorkerRefCount) {
// Service worker should have exactly one pending request because
// chrome.test.sendMessage() API call is in-flight.
EXPECT_EQ(1u, GetWorkerRefCount(extension_origin));
EXPECT_EQ(1u, GetWorkerRefCount(extension_key));
// Perform another extension API request while one is ongoing.
{
@ -2303,7 +2305,7 @@ IN_PROC_BROWSER_TEST_F(ServiceWorkerBasedBackgroundTest, WorkerRefCount) {
ASSERT_TRUE(listener.WaitUntilSatisfied());
// Service worker currently has two extension API requests in-flight.
EXPECT_EQ(2u, GetWorkerRefCount(extension_origin));
EXPECT_EQ(2u, GetWorkerRefCount(extension_key));
// Finish executing the nested chrome.test.sendMessage() first.
listener.Reply("Hello world");
}
@ -2330,7 +2332,7 @@ IN_PROC_BROWSER_TEST_F(ServiceWorkerBasedBackgroundTest, WorkerRefCount) {
}
// The ref count should drop to 0.
EXPECT_EQ(0u, GetWorkerRefCount(extension_origin));
EXPECT_EQ(0u, GetWorkerRefCount(extension_key));
}
IN_PROC_BROWSER_TEST_F(ServiceWorkerBasedBackgroundTest,

@ -126,6 +126,7 @@
#include "third_party/abseil-cpp/absl/types/optional.h"
#include "third_party/blink/public/common/client_hints/client_hints.h"
#include "third_party/blink/public/common/features.h"
#include "third_party/blink/public/common/storage_key/storage_key.h"
#include "url/gurl.h"
#include "url/origin.h"

@ -68,6 +68,7 @@
#include "services/network/public/mojom/network_context.mojom.h"
#include "services/network/public/mojom/network_service.mojom.h"
#include "third_party/abseil-cpp/absl/types/optional.h"
#include "third_party/blink/public/common/storage_key/storage_key.h"
#include "url/origin.h"
namespace {

@ -62,9 +62,11 @@
#include "services/network/public/mojom/url_response_head.mojom.h"
#include "third_party/abseil-cpp/absl/types/optional.h"
#include "third_party/blink/public/common/loader/url_loader_throttle.h"
#include "third_party/blink/public/common/storage_key/storage_key.h"
#include "third_party/blink/public/mojom/service_worker/service_worker_registration_options.mojom.h"
#include "ui/base/page_transition_types.h"
#include "url/gurl.h"
#include "url/origin.h"
namespace {
constexpr char kSuggestDomain[] = "suggest.com";
@ -2358,8 +2360,9 @@ IN_PROC_BROWSER_TEST_P(SearchPrefetchServiceEnabledBrowserTest,
GetSearchServerQueryURLWithNoQuery("/"),
blink::mojom::ScriptType::kClassic,
blink::mojom::ServiceWorkerUpdateViaCache::kImports);
blink::StorageKey key(url::Origin::Create(options.scope));
service_worker_context->RegisterServiceWorker(
worker_url, options,
worker_url, key, options,
base::BindOnce(&RunFirstParam, run_loop.QuitClosure()));
run_loop.Run();

@ -31,7 +31,9 @@
#include "content/public/test/browser_test.h"
#include "content/public/test/browser_test_utils.h"
#include "net/dns/mock_host_resolver.h"
#include "third_party/blink/public/common/storage_key/storage_key.h"
#include "ui/base/l10n/l10n_util.h"
#include "url/origin.h"
#if BUILDFLAG(IS_CHROMEOS_ASH)
#include "ash/constants/ash_switches.h"
@ -189,8 +191,9 @@ IN_PROC_BROWSER_TEST_F(WorkerTaskProviderBrowserTest,
.spec()),
base::CompareCase::INSENSITIVE_ASCII));
GetServiceWorkerContext(browser())->StopAllServiceWorkersForOrigin(
url::Origin::Create(embedded_test_server()->base_url()));
GetServiceWorkerContext(browser())->StopAllServiceWorkersForStorageKey(
blink::StorageKey(
url::Origin::Create(embedded_test_server()->base_url())));
WaitUntilTaskCount(0);
StopUpdating();
@ -226,8 +229,9 @@ IN_PROC_BROWSER_TEST_F(WorkerTaskProviderBrowserTest,
.spec()),
base::CompareCase::INSENSITIVE_ASCII));
GetServiceWorkerContext(incognito)->StopAllServiceWorkersForOrigin(
url::Origin::Create(embedded_test_server()->base_url()));
GetServiceWorkerContext(incognito)->StopAllServiceWorkersForStorageKey(
blink::StorageKey(
url::Origin::Create(embedded_test_server()->base_url())));
WaitUntilTaskCount(0);
StopUpdating();
@ -279,13 +283,15 @@ IN_PROC_BROWSER_TEST_F(WorkerTaskProviderBrowserTest,
.spec()),
base::CompareCase::INSENSITIVE_ASCII));
GetServiceWorkerContext(browser_1)->StopAllServiceWorkersForOrigin(
url::Origin::Create(embedded_test_server()->base_url()));
GetServiceWorkerContext(browser_1)->StopAllServiceWorkersForStorageKey(
blink::StorageKey(
url::Origin::Create(embedded_test_server()->base_url())));
WaitUntilTaskCount(1);
EXPECT_EQ(task_2, tasks()[0]);
GetServiceWorkerContext(browser_2)->StopAllServiceWorkersForOrigin(
url::Origin::Create(embedded_test_server()->base_url()));
GetServiceWorkerContext(browser_2)->StopAllServiceWorkersForStorageKey(
blink::StorageKey(
url::Origin::Create(embedded_test_server()->base_url())));
WaitUntilTaskCount(0);
StopUpdating();
@ -318,8 +324,9 @@ IN_PROC_BROWSER_TEST_F(WorkerTaskProviderBrowserTest, CreateExistingTasks) {
.spec()),
base::CompareCase::INSENSITIVE_ASCII));
GetServiceWorkerContext(browser())->StopAllServiceWorkersForOrigin(
url::Origin::Create(embedded_test_server()->base_url()));
GetServiceWorkerContext(browser())->StopAllServiceWorkersForStorageKey(
blink::StorageKey(
url::Origin::Create(embedded_test_server()->base_url())));
WaitUntilTaskCount(0);
StopUpdating();

@ -28,6 +28,8 @@
#include "net/dns/mock_host_resolver.h"
#include "net/test/embedded_test_server/embedded_test_server.h"
#include "third_party/abseil-cpp/absl/types/optional.h"
#include "third_party/blink/public/common/storage_key/storage_key.h"
#include "url/origin.h"
namespace web_app {
@ -66,7 +68,7 @@ class ExternallyManagedAppManagerImplBrowserTest : public InProcessBrowserTest {
->GetStoragePartition(web_contents->GetSiteInstance())
->GetServiceWorkerContext();
service_worker_context->CheckHasServiceWorker(
url,
url, blink::StorageKey(url::Origin::Create(url)),
base::BindLambdaForTesting(
[&run_loop, status](content::ServiceWorkerCapability capability) {
CHECK_EQ(status, capability);

@ -12,6 +12,8 @@
#include "content/public/browser/service_worker_context.h"
#include "content/public/browser/storage_partition.h"
#include "content/public/browser/web_contents.h"
#include "third_party/blink/public/common/storage_key/storage_key.h"
#include "url/origin.h"
#include "url/url_constants.h"
namespace web_app {
@ -50,7 +52,7 @@ ExternallyManagedAppRegistrationTask::ExternallyManagedAppRegistrationTask(
// Check to see if there is already a service worker for the install url.
service_worker_context_->CheckHasServiceWorker(
install_url,
install_url, blink::StorageKey(url::Origin::Create(install_url)),
base::BindOnce(
&ExternallyManagedAppRegistrationTask::OnDidCheckHasServiceWorker,
weak_ptr_factory_.GetWeakPtr()));

@ -16,6 +16,7 @@
#include "content/public/browser/browser_thread.h"
#include "content/public/browser/service_worker_context.h"
#include "content/public/browser/storage_usage_info.h"
#include "third_party/blink/public/common/storage_key/storage_key.h"
using content::BrowserThread;
using content::ServiceWorkerContext;
@ -81,7 +82,10 @@ void ServiceWorkerHelper::FetchServiceWorkerUsageInfoOnCoreThread(
void ServiceWorkerHelper::DeleteServiceWorkersOnCoreThread(
const url::Origin& origin) {
DCHECK_CURRENTLY_ON(ServiceWorkerContext::GetCoreThreadId());
service_worker_context_->DeleteForOrigin(origin, base::DoNothing());
// TODO(crbug.com/1199077): Update this when the cookie tree model understands
// StorageKey.
service_worker_context_->DeleteForStorageKey(blink::StorageKey(origin),
base::DoNothing());
}
CannedServiceWorkerHelper::CannedServiceWorkerHelper(

@ -104,6 +104,7 @@ void ServiceWorkerContextAdapter::RemoveObserver(
void ServiceWorkerContextAdapter::RegisterServiceWorker(
const GURL& script_url,
const blink::StorageKey& key,
const blink::mojom::ServiceWorkerRegistrationOptions& options,
StatusCodeCallback callback) {
NOTIMPLEMENTED();
@ -111,6 +112,7 @@ void ServiceWorkerContextAdapter::RegisterServiceWorker(
void ServiceWorkerContextAdapter::UnregisterServiceWorker(
const GURL& scope,
const blink::StorageKey& key,
ResultCallback callback) {
NOTIMPLEMENTED();
}
@ -132,7 +134,7 @@ ServiceWorkerContextAdapter::FinishedExternalRequest(
}
size_t ServiceWorkerContextAdapter::CountExternalRequestsForTest(
const url::Origin& origin) {
const blink::StorageKey& key) {
NOTIMPLEMENTED();
return 0u;
}
@ -148,19 +150,22 @@ void ServiceWorkerContextAdapter::GetAllOriginsInfo(
NOTIMPLEMENTED();
}
void ServiceWorkerContextAdapter::DeleteForOrigin(const url::Origin& origin_url,
ResultCallback callback) {
void ServiceWorkerContextAdapter::DeleteForStorageKey(
const blink::StorageKey& key,
ResultCallback callback) {
NOTIMPLEMENTED();
}
void ServiceWorkerContextAdapter::CheckHasServiceWorker(
const GURL& url,
const blink::StorageKey& key,
CheckHasServiceWorkerCallback callback) {
NOTIMPLEMENTED();
}
void ServiceWorkerContextAdapter::CheckOfflineCapability(
const GURL& url,
const blink::StorageKey& key,
CheckOfflineCapabilityCallback callback) {
NOTIMPLEMENTED();
}
@ -172,6 +177,7 @@ void ServiceWorkerContextAdapter::ClearAllServiceWorkersForTest(
void ServiceWorkerContextAdapter::StartWorkerForScope(
const GURL& scope,
const blink::StorageKey& key,
StartWorkerCallback info_callback,
StatusCodeCallback status_callback) {
NOTIMPLEMENTED();
@ -179,6 +185,7 @@ void ServiceWorkerContextAdapter::StartWorkerForScope(
void ServiceWorkerContextAdapter::StartServiceWorkerAndDispatchMessage(
const GURL& scope,
const blink::StorageKey& key,
blink::TransferableMessage message,
ResultCallback result_callback) {
NOTIMPLEMENTED();
@ -186,12 +193,13 @@ void ServiceWorkerContextAdapter::StartServiceWorkerAndDispatchMessage(
void ServiceWorkerContextAdapter::StartServiceWorkerForNavigationHint(
const GURL& document_url,
const blink::StorageKey& key,
StartServiceWorkerForNavigationHintCallback callback) {
NOTIMPLEMENTED();
}
void ServiceWorkerContextAdapter::StopAllServiceWorkersForOrigin(
const url::Origin& origin) {
void ServiceWorkerContextAdapter::StopAllServiceWorkersForStorageKey(
const blink::StorageKey& key) {
NOTIMPLEMENTED();
}

@ -16,6 +16,10 @@
#include "content/public/browser/service_worker_context.h"
#include "content/public/browser/service_worker_context_observer.h"
namespace blink {
class StorageKey;
} // namespace blink
namespace performance_manager {
// This class adapts an existing ServiceWorkerContext to ensure that the
@ -48,9 +52,11 @@ class ServiceWorkerContextAdapter
void RemoveObserver(content::ServiceWorkerContextObserver* observer) override;
void RegisterServiceWorker(
const GURL& script_url,
const blink::StorageKey& key,
const blink::mojom::ServiceWorkerRegistrationOptions& options,
StatusCodeCallback callback) override;
void UnregisterServiceWorker(const GURL& scope,
const blink::StorageKey& key,
ResultCallback callback) override;
content::ServiceWorkerExternalRequestResult StartingExternalRequest(
int64_t service_worker_version_id,
@ -58,27 +64,33 @@ class ServiceWorkerContextAdapter
content::ServiceWorkerExternalRequestResult FinishedExternalRequest(
int64_t service_worker_version_id,
const std::string& request_uuid) override;
size_t CountExternalRequestsForTest(const url::Origin& origin) override;
size_t CountExternalRequestsForTest(const blink::StorageKey& key) override;
bool MaybeHasRegistrationForOrigin(const url::Origin& origin) override;
void GetAllOriginsInfo(GetUsageInfoCallback callback) override;
void DeleteForOrigin(const url::Origin& origin_url,
ResultCallback callback) override;
void DeleteForStorageKey(const blink::StorageKey& key,
ResultCallback callback) override;
void CheckHasServiceWorker(const GURL& url,
const blink::StorageKey& key,
CheckHasServiceWorkerCallback callback) override;
void CheckOfflineCapability(const GURL& url,
const blink::StorageKey& key,
CheckOfflineCapabilityCallback callback) override;
void ClearAllServiceWorkersForTest(base::OnceClosure callback) override;
void StartWorkerForScope(const GURL& scope,
const blink::StorageKey& key,
StartWorkerCallback info_callback,
StatusCodeCallback failure_callback) override;
void StartServiceWorkerAndDispatchMessage(
const GURL& scope,
const blink::StorageKey& key,
blink::TransferableMessage message,
ResultCallback result_callback) override;
void StartServiceWorkerForNavigationHint(
const GURL& document_url,
const blink::StorageKey& key,
StartServiceWorkerForNavigationHintCallback callback) override;
void StopAllServiceWorkersForOrigin(const url::Origin& origin) override;
void StopAllServiceWorkersForStorageKey(
const blink::StorageKey& key) override;
void StopAllServiceWorkers(base::OnceClosure callback) override;
const base::flat_map<int64_t /* version_id */,
content::ServiceWorkerRunningInfo>&

@ -32,6 +32,7 @@
#include "services/network/public/cpp/is_potentially_trustworthy.h"
#include "third_party/blink/public/common/features.h"
#include "third_party/blink/public/common/manifest/manifest_icon_selector.h"
#include "third_party/blink/public/common/storage_key/storage_key.h"
#include "third_party/blink/public/mojom/manifest/display_mode.mojom.h"
#include "url/origin.h"
@ -717,6 +718,7 @@ void InstallableManager::CheckServiceWorker() {
// Check to see if there is a service worker for the manifest's scope.
service_worker_context_->CheckHasServiceWorker(
manifest().scope,
blink::StorageKey(url::Origin::Create(manifest().scope)),
base::BindOnce(&InstallableManager::OnDidCheckHasServiceWorker,
weak_factory_.GetWeakPtr(), base::TimeTicks::Now()));
}
@ -747,6 +749,7 @@ void InstallableManager::OnDidCheckHasServiceWorker(
// environment and see if the site supports an offline page.
service_worker_context_->CheckOfflineCapability(
manifest().start_url,
blink::StorageKey(url::Origin::Create(manifest().start_url)),
base::BindOnce(&InstallableManager::OnDidCheckOfflineCapability,
weak_factory_.GetWeakPtr(),
check_service_worker_start_time,

@ -29,7 +29,9 @@
#include "services/network/public/mojom/network_service.mojom.h"
#include "services/network/public/mojom/network_service_test.mojom.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "third_party/blink/public/common/storage_key/storage_key.h"
#include "third_party/blink/public/mojom/service_worker/service_worker_registration_options.mojom.h"
#include "url/origin.h"
namespace content {
@ -104,11 +106,12 @@ void AddServiceWorker(const std::string& origin,
blink::mojom::ServiceWorkerRegistrationOptions options(
scope_url, blink::mojom::ScriptType::kClassic,
blink::mojom::ServiceWorkerUpdateViaCache::kImports);
blink::StorageKey key(url::Origin::Create(options.scope));
RunOrPostTaskOnThread(
FROM_HERE, ServiceWorkerContext::GetCoreThreadId(),
base::BindOnce(&ServiceWorkerContextWrapper::RegisterServiceWorker,
base::Unretained(service_worker_context), js_url, options,
base::BindOnce(&AddServiceWorkerCallback)));
base::Unretained(service_worker_context), js_url, key,
options, base::BindOnce(&AddServiceWorkerCallback)));
// Wait for its activation.
base::RunLoop run_loop;

@ -16,6 +16,8 @@
#include "content/public/browser/render_process_host.h"
#include "content/public/browser/service_worker_version_base_info.h"
#include "mojo/public/cpp/bindings/self_owned_receiver.h"
#include "third_party/blink/public/common/storage_key/storage_key.h"
#include "url/origin.h"
namespace content {
@ -105,7 +107,7 @@ void ContentIndexServiceImpl::CheckOfflineCapability(
// TODO(rayankans): Figure out if we can check the service worker specified
// by |service_worker_registration_id| rather than any service worker.
service_worker_context_->CheckOfflineCapability(
launch_url,
launch_url, blink::StorageKey(url::Origin::Create(launch_url)),
base::BindOnce(&DidCheckOfflineCapability, std::move(callback),
service_worker_registration_id));
}

@ -37,6 +37,7 @@
#include "third_party/blink/public/mojom/push_messaging/push_messaging_status.mojom.h"
#include "third_party/blink/public/mojom/service_worker/service_worker_object.mojom.h"
#include "url/gurl.h"
#include "url/origin.h"
namespace content {
@ -251,7 +252,9 @@ Response ServiceWorkerHandler::Unregister(const std::string& scope_url) {
return CreateDomainNotEnabledErrorResponse();
if (!context_)
return CreateContextErrorResponse();
context_->UnregisterServiceWorker(GURL(scope_url), base::DoNothing());
GURL url(scope_url);
blink::StorageKey key(url::Origin::Create(url));
context_->UnregisterServiceWorker(url, key, base::DoNothing());
return Response::Success();
}

@ -24,6 +24,7 @@
#include "third_party/blink/public/common/storage_key/storage_key.h"
#include "third_party/blink/public/mojom/service_worker/service_worker_registration_options.mojom.h"
#include "url/gurl.h"
#include "url/origin.h"
namespace content {
namespace {
@ -102,8 +103,11 @@ class SelfDeleteInstaller
option.update_via_cache =
blink::mojom::ServiceWorkerUpdateViaCache::kNone;
}
// TODO(crbug.com/1199077): Because this function can be called in a 3p
// context we will need to generate a full StorageKey (origin + top-level
// site) once StorageKey is expanded with the top-level site.
service_worker_context_->RegisterServiceWorker(
sw_url_, option,
sw_url_, blink::StorageKey(url::Origin::Create(option.scope)), option,
base::BindOnce(&SelfDeleteInstaller::OnRegisterServiceWorkerResult,
this));
}

@ -588,8 +588,9 @@ IN_PROC_BROWSER_TEST_F(ServiceWorkerBrowserTest, FetchPageWithSaveData) {
embedded_test_server()->GetURL(kPageUrl),
blink::mojom::ScriptType::kClassic,
blink::mojom::ServiceWorkerUpdateViaCache::kImports);
blink::StorageKey key(url::Origin::Create(options.scope));
public_context()->RegisterServiceWorker(
embedded_test_server()->GetURL(kWorkerUrl), options,
embedded_test_server()->GetURL(kWorkerUrl), key, options,
base::BindOnce(&ExpectRegisterResultAndRun,
blink::ServiceWorkerStatusCode::kOk, base::DoNothing()));
observer->Wait();
@ -604,7 +605,7 @@ IN_PROC_BROWSER_TEST_F(ServiceWorkerBrowserTest, FetchPageWithSaveData) {
base::RunLoop run_loop;
public_context()->UnregisterServiceWorker(
embedded_test_server()->GetURL(kPageUrl),
embedded_test_server()->GetURL(kPageUrl), key,
base::BindOnce(&ExpectUnregisterResultAndRun, true,
run_loop.QuitClosure()));
run_loop.Run();
@ -635,8 +636,9 @@ IN_PROC_BROWSER_TEST_F(ServiceWorkerBrowserTest, CrossOriginFetchWithSaveData) {
embedded_test_server()->GetURL(kPageUrl),
blink::mojom::ScriptType::kClassic,
blink::mojom::ServiceWorkerUpdateViaCache::kImports);
blink::StorageKey key(url::Origin::Create(options.scope));
public_context()->RegisterServiceWorker(
embedded_test_server()->GetURL(kWorkerUrl), options,
embedded_test_server()->GetURL(kWorkerUrl), key, options,
base::BindOnce(&ExpectRegisterResultAndRun,
blink::ServiceWorkerStatusCode::kOk, base::DoNothing()));
observer->Wait();
@ -656,7 +658,7 @@ IN_PROC_BROWSER_TEST_F(ServiceWorkerBrowserTest, CrossOriginFetchWithSaveData) {
base::RunLoop run_loop;
public_context()->UnregisterServiceWorker(
embedded_test_server()->GetURL(kPageUrl),
embedded_test_server()->GetURL(kPageUrl), key,
base::BindOnce(&ExpectUnregisterResultAndRun, true,
run_loop.QuitClosure()));
run_loop.Run();
@ -683,8 +685,9 @@ IN_PROC_BROWSER_TEST_F(ServiceWorkerBrowserTest,
embedded_test_server()->GetURL(kPageUrl),
blink::mojom::ScriptType::kClassic,
blink::mojom::ServiceWorkerUpdateViaCache::kImports);
blink::StorageKey key(url::Origin::Create(options.scope));
public_context()->RegisterServiceWorker(
embedded_test_server()->GetURL(kWorkerUrl), options,
embedded_test_server()->GetURL(kWorkerUrl), key, options,
base::BindOnce(&ExpectRegisterResultAndRun,
blink::ServiceWorkerStatusCode::kOk, base::DoNothing()));
observer->Wait();
@ -697,7 +700,7 @@ IN_PROC_BROWSER_TEST_F(ServiceWorkerBrowserTest,
base::RunLoop run_loop;
public_context()->UnregisterServiceWorker(
embedded_test_server()->GetURL(kPageUrl),
embedded_test_server()->GetURL(kPageUrl), key,
base::BindOnce(&ExpectUnregisterResultAndRun, true,
run_loop.QuitClosure()));
run_loop.Run();
@ -714,8 +717,9 @@ IN_PROC_BROWSER_TEST_F(ServiceWorkerBrowserTest, Reload) {
embedded_test_server()->GetURL(kPageUrl),
blink::mojom::ScriptType::kClassic,
blink::mojom::ServiceWorkerUpdateViaCache::kImports);
blink::StorageKey key(url::Origin::Create(options.scope));
public_context()->RegisterServiceWorker(
embedded_test_server()->GetURL(kWorkerUrl), options,
embedded_test_server()->GetURL(kWorkerUrl), key, options,
base::BindOnce(&ExpectRegisterResultAndRun,
blink::ServiceWorkerStatusCode::kOk, base::DoNothing()));
observer->Wait();
@ -734,7 +738,7 @@ IN_PROC_BROWSER_TEST_F(ServiceWorkerBrowserTest, Reload) {
base::RunLoop run_loop;
public_context()->UnregisterServiceWorker(
embedded_test_server()->GetURL(kPageUrl),
embedded_test_server()->GetURL(kPageUrl), key,
base::BindOnce(&ExpectUnregisterResultAndRun, true,
run_loop.QuitClosure()));
run_loop.Run();
@ -760,8 +764,9 @@ IN_PROC_BROWSER_TEST_F(ServiceWorkerBrowserTest, IdleTimerWithDevTools) {
blink::mojom::ServiceWorkerRegistrationOptions options(
scope, blink::mojom::ScriptType::kClassic,
blink::mojom::ServiceWorkerUpdateViaCache::kNone);
blink::StorageKey key(url::Origin::Create(options.scope));
public_context()->RegisterServiceWorker(
worker_url, options,
worker_url, key, options,
base::BindOnce(&ExpectRegisterResultAndRun,
blink::ServiceWorkerStatusCode::kOk, base::DoNothing()));
observer->Wait();
@ -853,8 +858,9 @@ IN_PROC_BROWSER_TEST_F(ServiceWorkerBrowserTest,
blink::mojom::ServiceWorkerRegistrationOptions options(
https_server.GetURL(kPageUrl), blink::mojom::ScriptType::kClassic,
blink::mojom::ServiceWorkerUpdateViaCache::kImports);
blink::StorageKey key(url::Origin::Create(options.scope));
public_context()->RegisterServiceWorker(
https_server.GetURL(kWorkerUrl), options,
https_server.GetURL(kWorkerUrl), key, options,
base::BindOnce(&ExpectRegisterResultAndRun,
blink::ServiceWorkerStatusCode::kOk, base::DoNothing()));
observer->Wait();
@ -883,8 +889,8 @@ IN_PROC_BROWSER_TEST_F(ServiceWorkerBrowserTest,
wrapper(), ServiceWorkerVersion::ACTIVATED);
observer->Init();
GURL url = https_server.GetURL(kPageUrl);
wrapper()->UpdateRegistration(url,
blink::StorageKey(url::Origin::Create(url)));
blink::StorageKey key(url::Origin::Create(url));
wrapper()->UpdateRegistration(url, key);
observer->Wait();
// Wait until the page is appropriately served by the service worker.
@ -900,8 +906,10 @@ IN_PROC_BROWSER_TEST_F(ServiceWorkerBrowserTest,
shell()->Close();
base::RunLoop run_loop;
GURL url = https_server.GetURL(kPageUrl);
blink::StorageKey key(url::Origin::Create(url));
public_context()->UnregisterServiceWorker(
https_server.GetURL(kPageUrl),
url, key,
base::BindOnce(&ExpectUnregisterResultAndRun, true,
run_loop.QuitClosure()));
run_loop.Run();
@ -919,8 +927,9 @@ IN_PROC_BROWSER_TEST_F(ServiceWorkerBrowserTest,
embedded_test_server()->GetURL(kPageUrl),
blink::mojom::ScriptType::kClassic,
blink::mojom::ServiceWorkerUpdateViaCache::kImports);
blink::StorageKey key(url::Origin::Create(options.scope));
public_context()->RegisterServiceWorker(
embedded_test_server()->GetURL(kWorkerUrl), options,
embedded_test_server()->GetURL(kWorkerUrl), key, options,
base::BindOnce(&ExpectRegisterResultAndRun,
blink::ServiceWorkerStatusCode::kOk, base::DoNothing()));
observer->Wait();
@ -940,7 +949,7 @@ IN_PROC_BROWSER_TEST_F(ServiceWorkerBrowserTest,
base::RunLoop run_loop;
public_context()->UnregisterServiceWorker(
embedded_test_server()->GetURL(kPageUrl),
embedded_test_server()->GetURL(kPageUrl), key,
base::BindOnce(&ExpectUnregisterResultAndRun, true,
run_loop.QuitClosure()));
run_loop.Run();
@ -998,8 +1007,9 @@ IN_PROC_BROWSER_TEST_F(ServiceWorkerBrowserTest, StartWorkerWhileInstalling) {
embedded_test_server()->GetURL(kWorkerUrl),
blink::mojom::ScriptType::kClassic,
blink::mojom::ServiceWorkerUpdateViaCache::kImports);
blink::StorageKey key(url::Origin::Create(options.scope));
public_context()->RegisterServiceWorker(
embedded_test_server()->GetURL(kWorkerUrl), options,
embedded_test_server()->GetURL(kWorkerUrl), key, options,
base::BindOnce(&ExpectRegisterResultAndRun,
blink::ServiceWorkerStatusCode::kOk, base::DoNothing()));
observer->Wait();
@ -1265,8 +1275,9 @@ class ServiceWorkerNavigationPreloadTest : public ServiceWorkerBrowserTest {
blink::mojom::ServiceWorkerRegistrationOptions options(
scope, blink::mojom::ScriptType::kClassic,
blink::mojom::ServiceWorkerUpdateViaCache::kImports);
blink::StorageKey key(url::Origin::Create(options.scope));
public_context()->RegisterServiceWorker(
worker_url, options,
worker_url, key, options,
base::BindOnce(&ExpectRegisterResultAndRun,
blink::ServiceWorkerStatusCode::kOk, base::DoNothing()));
observer->Wait();
@ -2064,8 +2075,10 @@ IN_PROC_BROWSER_TEST_F(ServiceWorkerBlackBoxBrowserTest, Registration) {
// Unregistering nothing should return false.
{
base::RunLoop run_loop;
GURL url = embedded_test_server()->GetURL("/");
blink::StorageKey key(url::Origin::Create(url));
public_context()->UnregisterServiceWorker(
embedded_test_server()->GetURL("/"),
embedded_test_server()->GetURL("/"), key,
base::BindOnce(&ExpectUnregisterResultAndRun, false,
run_loop.QuitClosure()));
run_loop.Run();
@ -2078,8 +2091,9 @@ IN_PROC_BROWSER_TEST_F(ServiceWorkerBlackBoxBrowserTest, Registration) {
embedded_test_server()->GetURL(kScope),
blink::mojom::ScriptType::kClassic,
blink::mojom::ServiceWorkerUpdateViaCache::kImports);
blink::StorageKey key(url::Origin::Create(options.scope));
public_context()->RegisterServiceWorker(
embedded_test_server()->GetURL("/does/not/exist"), options,
embedded_test_server()->GetURL("/does/not/exist"), key, options,
base::BindOnce(&ExpectRegisterResultAndRun,
blink::ServiceWorkerStatusCode::kErrorNetwork,
run_loop.QuitClosure()));
@ -2094,8 +2108,9 @@ IN_PROC_BROWSER_TEST_F(ServiceWorkerBlackBoxBrowserTest, Registration) {
embedded_test_server()->GetURL(kScope),
blink::mojom::ScriptType::kClassic,
blink::mojom::ServiceWorkerUpdateViaCache::kImports);
blink::StorageKey key(url::Origin::Create(options.scope));
public_context()->RegisterServiceWorker(
embedded_test_server()->GetURL(kWorkerUrl), options,
embedded_test_server()->GetURL(kWorkerUrl), key, options,
base::BindOnce(&ExpectRegisterResultAndRun,
blink::ServiceWorkerStatusCode::kOk,
run_loop.QuitClosure()));
@ -2111,8 +2126,9 @@ IN_PROC_BROWSER_TEST_F(ServiceWorkerBlackBoxBrowserTest, Registration) {
embedded_test_server()->GetURL(kScope),
blink::mojom::ScriptType::kClassic,
blink::mojom::ServiceWorkerUpdateViaCache::kImports);
blink::StorageKey key(url::Origin::Create(options.scope));
public_context()->RegisterServiceWorker(
embedded_test_server()->GetURL(kWorkerUrl), options,
embedded_test_server()->GetURL(kWorkerUrl), key, options,
base::BindOnce(&ExpectRegisterResultAndRun,
blink::ServiceWorkerStatusCode::kOk,
run_loop.QuitClosure()));
@ -2126,8 +2142,10 @@ IN_PROC_BROWSER_TEST_F(ServiceWorkerBlackBoxBrowserTest, Registration) {
// Unregistering something should return true.
{
base::RunLoop run_loop;
GURL url = embedded_test_server()->GetURL(kScope);
blink::StorageKey key(url::Origin::Create(url));
public_context()->UnregisterServiceWorker(
embedded_test_server()->GetURL(kScope),
url, key,
base::BindOnce(&ExpectUnregisterResultAndRun, true,
run_loop.QuitClosure()));
run_loop.Run();
@ -2271,8 +2289,9 @@ class ServiceWorkerV8CodeCacheForCacheStorageTest
embedded_test_server()->GetURL(kPageUrl),
blink::mojom::ScriptType::kClassic,
blink::mojom::ServiceWorkerUpdateViaCache::kImports);
blink::StorageKey key(url::Origin::Create(options.scope));
public_context()->RegisterServiceWorker(
embedded_test_server()->GetURL(GetWorkerURL()), options,
embedded_test_server()->GetURL(GetWorkerURL()), key, options,
base::BindOnce(&ExpectRegisterResultAndRun,
blink::ServiceWorkerStatusCode::kOk, base::DoNothing()));
observer->Wait();
@ -2613,8 +2632,9 @@ class ServiceWorkerDisableWebSecurityTest : public ServiceWorkerBrowserTest {
blink::mojom::ServiceWorkerRegistrationOptions options(
cross_origin_server_.GetURL(scope), blink::mojom::ScriptType::kClassic,
blink::mojom::ServiceWorkerUpdateViaCache::kImports);
blink::StorageKey key(url::Origin::Create(options.scope));
public_context()->RegisterServiceWorker(
cross_origin_server_.GetURL(script), options,
cross_origin_server_.GetURL(script), key, options,
base::BindOnce(&ExpectRegisterResultAndRun,
blink::ServiceWorkerStatusCode::kOk, base::DoNothing()));
observer->Wait();
@ -2918,8 +2938,9 @@ class ServiceWorkerThrottlingTest : public ServiceWorkerBrowserTest {
embedded_test_server()->GetURL(scope),
blink::mojom::ScriptType::kClassic,
blink::mojom::ServiceWorkerUpdateViaCache::kImports);
blink::StorageKey key(url::Origin::Create(options.scope));
public_context()->RegisterServiceWorker(
embedded_test_server()->GetURL(script_url), options,
embedded_test_server()->GetURL(script_url), key, options,
base::BindOnce(&ExpectRegisterResultAndRun,
blink::ServiceWorkerStatusCode::kOk, base::DoNothing()));
observer->Wait();
@ -3624,8 +3645,10 @@ IN_PROC_BROWSER_TEST_F(
{
base::RunLoop loop;
GURL url = embedded_test_server()->GetURL("/");
blink::StorageKey key(url::Origin::Create(url));
public_context()->UnregisterServiceWorker(
embedded_test_server()->GetURL("/"),
url, key,
base::BindOnce(&ExpectUnregisterResultAndRun, true,
loop.QuitClosure()));
loop.Run();

@ -572,7 +572,8 @@ TEST_F(ServiceWorkerContextTest, OnVersionRunningStatusChangedObserver) {
/*requesting_frame_id=*/GlobalRenderFrameHostId());
run_loop.Run();
context_wrapper()->StopAllServiceWorkersForOrigin(url::Origin::Create(scope));
context_wrapper()->StopAllServiceWorkersForStorageKey(
blink::StorageKey(url::Origin::Create(scope)));
base::RunLoop().RunUntilIdle();
std::vector<TestServiceWorkerContextObserver::EventLog> events;

@ -458,6 +458,7 @@ void ServiceWorkerContextWrapper::RemoveObserver(
void ServiceWorkerContextWrapper::RegisterServiceWorker(
const GURL& script_url,
const blink::StorageKey& key,
const blink::mojom::ServiceWorkerRegistrationOptions& options,
StatusCodeCallback callback) {
DCHECK_CURRENTLY_ON(BrowserThread::UI);
@ -474,11 +475,8 @@ void ServiceWorkerContextWrapper::RegisterServiceWorker(
options.update_via_cache);
// TODO(bashi): Pass a valid outside fetch client settings object. Perhaps
// changing this method to take a settings object.
// TODO(crbug.com/1199077): Update this when ServiceWorkerContextWrapper
// implements StorageKey.
context()->RegisterServiceWorker(
net::SimplifyUrlForRequest(script_url),
blink::StorageKey(url::Origin::Create(options.scope)), options_to_pass,
net::SimplifyUrlForRequest(script_url), key, options_to_pass,
blink::mojom::FetchClientSettingsObject::New(
network::mojom::ReferrerPolicy::kDefault,
/*outgoing_referrer=*/script_url,
@ -492,6 +490,7 @@ void ServiceWorkerContextWrapper::RegisterServiceWorker(
void ServiceWorkerContextWrapper::UnregisterServiceWorker(
const GURL& scope,
const blink::StorageKey& key,
ResultCallback callback) {
DCHECK_CURRENTLY_ON(BrowserThread::UI);
@ -500,11 +499,8 @@ void ServiceWorkerContextWrapper::UnregisterServiceWorker(
FROM_HERE, base::BindOnce(std::move(callback), false));
return;
}
// TODO(crbug.com/1199077): Update this when ServiceWorkerContextWrapper
// implements StorageKey.
context()->UnregisterServiceWorker(
net::SimplifyUrlForRequest(scope),
blink::StorageKey(url::Origin::Create(scope)), /*is_immediate=*/false,
net::SimplifyUrlForRequest(scope), key, /*is_immediate=*/false,
WrapResultCallbackToTakeStatusCode(std::move(callback)));
}
@ -537,14 +533,14 @@ ServiceWorkerContextWrapper::FinishedExternalRequest(
}
size_t ServiceWorkerContextWrapper::CountExternalRequestsForTest(
const url::Origin& origin) {
const blink::StorageKey& key) {
DCHECK_CURRENTLY_ON(BrowserThread::UI);
std::vector<ServiceWorkerVersionInfo> live_version_info =
GetAllLiveVersionInfo();
for (const ServiceWorkerVersionInfo& info : live_version_info) {
ServiceWorkerVersion* version = GetLiveVersion(info.version_id);
if (version && version->key().origin() == origin) {
if (version && version->key() == key) {
return version->GetExternalRequestCountForTest(); // IN-TEST
}
}
@ -578,14 +574,14 @@ void ServiceWorkerContextWrapper::GetAllOriginsInfo(
this, std::move(callback)));
}
void ServiceWorkerContextWrapper::DeleteForOrigin(const url::Origin& origin,
ResultCallback callback) {
void ServiceWorkerContextWrapper::DeleteForStorageKey(
const blink::StorageKey& key,
ResultCallback callback) {
RunOrPostTaskOnThread(
FROM_HERE, BrowserThread::UI,
base::BindOnce(
&ServiceWorkerContextWrapper::DeleteForStorageKeyOnUIThread, this,
blink::StorageKey(origin), std::move(callback),
base::ThreadTaskRunnerHandle::Get()));
key, std::move(callback), base::ThreadTaskRunnerHandle::Get()));
}
void ServiceWorkerContextWrapper::DeleteForStorageKeyOnUIThread(
@ -598,8 +594,6 @@ void ServiceWorkerContextWrapper::DeleteForStorageKeyOnUIThread(
base::BindOnce(std::move(callback), false));
return;
}
// TODO(crbug.com/1199077): Update this when ServiceWorkerContextWrapper
// implements StorageKey.
context()->DeleteForStorageKey(
key,
base::BindOnce(
@ -616,6 +610,7 @@ void ServiceWorkerContextWrapper::DeleteForStorageKeyOnUIThread(
void ServiceWorkerContextWrapper::CheckHasServiceWorker(
const GURL& url,
const blink::StorageKey& key,
CheckHasServiceWorkerCallback callback) {
DCHECK_CURRENTLY_ON(BrowserThread::UI);
@ -625,15 +620,13 @@ void ServiceWorkerContextWrapper::CheckHasServiceWorker(
ServiceWorkerCapability::NO_SERVICE_WORKER));
return;
}
// TODO(crbug.com/1199077): Update this when ServiceWorkerContextWrapper
// implements StorageKey.
context()->CheckHasServiceWorker(net::SimplifyUrlForRequest(url),
blink::StorageKey(url::Origin::Create(url)),
context()->CheckHasServiceWorker(net::SimplifyUrlForRequest(url), key,
std::move(callback));
}
void ServiceWorkerContextWrapper::CheckOfflineCapability(
const GURL& url,
const blink::StorageKey& key,
CheckOfflineCapabilityCallback callback) {
DCHECK_CURRENTLY_ON(BrowserThread::UI);
@ -644,10 +637,7 @@ void ServiceWorkerContextWrapper::CheckOfflineCapability(
blink::mojom::kInvalidServiceWorkerRegistrationId));
return;
}
// TODO(crbug.com/1199077): Update this when ServiceWorkerContextWrapper
// implements StorageKey.
context()->CheckOfflineCapability(net::SimplifyUrlForRequest(url),
blink::StorageKey(url::Origin::Create(url)),
context()->CheckOfflineCapability(net::SimplifyUrlForRequest(url), key,
std::move(callback));
}
@ -665,11 +655,12 @@ void ServiceWorkerContextWrapper::ClearAllServiceWorkersForTest(
void ServiceWorkerContextWrapper::StartWorkerForScope(
const GURL& scope,
const blink::StorageKey& key,
StartWorkerCallback info_callback,
StatusCodeCallback failure_callback) {
DCHECK_CURRENTLY_ON(BrowserThread::UI);
FindRegistrationForScopeImpl(
scope, blink::StorageKey(url::Origin::Create(scope)),
scope, key,
/*include_installing_version=*/true,
base::BindOnce(&FoundRegistrationForStartWorker, std::move(info_callback),
std::move(failure_callback)));
@ -677,14 +668,14 @@ void ServiceWorkerContextWrapper::StartWorkerForScope(
void ServiceWorkerContextWrapper::StartServiceWorkerAndDispatchMessage(
const GURL& scope,
const blink::StorageKey& key,
blink::TransferableMessage message,
ResultCallback result_callback) {
RunOrPostTaskOnThread(
FROM_HERE, BrowserThread::UI,
base::BindOnce(&ServiceWorkerContextWrapper::
StartServiceWorkerAndDispatchMessageOnUIThread,
this, scope, blink::StorageKey(url::Origin::Create(scope)),
std::move(message),
this, scope, key, std::move(message),
base::BindOnce(
[](ResultCallback callback,
scoped_refptr<base::TaskRunner> callback_runner,
@ -772,6 +763,7 @@ void ServiceWorkerContextWrapper::DidStartServiceWorkerForMessageDispatch(
void ServiceWorkerContextWrapper::StartServiceWorkerForNavigationHint(
const GURL& document_url,
const blink::StorageKey& key,
StartServiceWorkerForNavigationHintCallback callback) {
TRACE_EVENT1("ServiceWorker", "StartServiceWorkerForNavigationHint",
"document_url", document_url.spec());
@ -792,15 +784,14 @@ void ServiceWorkerContextWrapper::StartServiceWorkerForNavigationHint(
return;
}
context_core_->registry()->FindRegistrationForClientUrl(
net::SimplifyUrlForRequest(document_url),
blink::StorageKey(url::Origin::Create(document_url)),
net::SimplifyUrlForRequest(document_url), key,
base::BindOnce(
&ServiceWorkerContextWrapper::DidFindRegistrationForNavigationHint,
this, std::move(callback_with_recording_metrics)));
}
void ServiceWorkerContextWrapper::StopAllServiceWorkersForOrigin(
const url::Origin& origin) {
void ServiceWorkerContextWrapper::StopAllServiceWorkersForStorageKey(
const blink::StorageKey& key) {
DCHECK_CURRENTLY_ON(BrowserThread::UI);
if (!context_core_.get()) {
return;
@ -808,7 +799,7 @@ void ServiceWorkerContextWrapper::StopAllServiceWorkersForOrigin(
std::vector<ServiceWorkerVersionInfo> live_versions = GetAllLiveVersionInfo();
for (const ServiceWorkerVersionInfo& info : live_versions) {
ServiceWorkerVersion* version = GetLiveVersion(info.version_id);
if (version && version->key().origin() == origin)
if (version && version->key() == key)
version->StopWorker(base::DoNothing());
}
}

@ -153,9 +153,11 @@ class CONTENT_EXPORT ServiceWorkerContextWrapper
void RemoveObserver(ServiceWorkerContextObserver* observer) override;
void RegisterServiceWorker(
const GURL& script_url,
const blink::StorageKey& key,
const blink::mojom::ServiceWorkerRegistrationOptions& options,
StatusCodeCallback callback) override;
void UnregisterServiceWorker(const GURL& scope,
const blink::StorageKey& key,
ResultCallback callback) override;
ServiceWorkerExternalRequestResult StartingExternalRequest(
int64_t service_worker_version_id,
@ -163,28 +165,34 @@ class CONTENT_EXPORT ServiceWorkerContextWrapper
ServiceWorkerExternalRequestResult FinishedExternalRequest(
int64_t service_worker_version_id,
const std::string& request_uuid) override;
size_t CountExternalRequestsForTest(const url::Origin& origin) override;
size_t CountExternalRequestsForTest(const blink::StorageKey& key) override;
bool MaybeHasRegistrationForOrigin(const url::Origin& origin) override;
void GetAllOriginsInfo(GetUsageInfoCallback callback) override;
void DeleteForOrigin(const url::Origin& origin,
ResultCallback callback) override;
void DeleteForStorageKey(const blink::StorageKey& key,
ResultCallback callback) override;
void CheckHasServiceWorker(const GURL& url,
const blink::StorageKey& key,
CheckHasServiceWorkerCallback callback) override;
void CheckOfflineCapability(const GURL& url,
const blink::StorageKey& key,
CheckOfflineCapabilityCallback callback) override;
void ClearAllServiceWorkersForTest(base::OnceClosure callback) override;
void StartWorkerForScope(const GURL& scope,
const blink::StorageKey& key,
StartWorkerCallback info_callback,
StatusCodeCallback failure_callback) override;
void StartServiceWorkerAndDispatchMessage(
const GURL& scope,
const blink::StorageKey& key,
blink::TransferableMessage message,
ResultCallback result_callback) override;
void StartServiceWorkerForNavigationHint(
const GURL& document_url,
const blink::StorageKey& key,
StartServiceWorkerForNavigationHintCallback callback) override;
void StopAllServiceWorkersForOrigin(const url::Origin& origin) override;
void StopAllServiceWorkersForStorageKey(
const blink::StorageKey& key) override;
void StopAllServiceWorkers(base::OnceClosure callback) override;
const base::flat_map<int64_t, ServiceWorkerRunningInfo>&
GetRunningServiceWorkerInfos() override;

@ -153,12 +153,12 @@ TEST_F(ServiceWorkerContextWrapperTest, HasRegistration) {
url::Origin::Create(GURL("https://example.org"))));
}
// This test involves storing two registrations for the same origin to storage
// and deleting one of them to check that MaybeHasRegistrationForOrigin still
// correctly returns TRUE since there is still one registration for the origin,
// and should only return FALSE when ALL registrations for that origin have been
// deleted from storage.
TEST_F(ServiceWorkerContextWrapperTest, DeleteRegistrationsForSameOrigin) {
// This test involves storing two registrations for the same key to storage
// and deleting one of them to check that MaybeHasRegistrationForOrigin
// still correctly returns TRUE since there is still one registration for the
// key, and should only return FALSE when ALL registrations for that key
// have been deleted from storage.
TEST_F(ServiceWorkerContextWrapperTest, DeleteRegistrationsForSameKey) {
wrapper_->WaitForRegistrationsInitializedForTest();
// Make two registrations for same origin.
@ -186,10 +186,10 @@ TEST_F(ServiceWorkerContextWrapperTest, DeleteRegistrationsForSameOrigin) {
// Run loop until idle to wait for
// ServiceWorkerRegistry::DidDeleteRegistration() to be executed, and make
// sure that NotifyAllRegistrationsDeletedForOrigin() is not called.
// sure that NotifyAllRegistrationsDeletedForStorageKey() is not called.
base::RunLoop().RunUntilIdle();
// Now test that a registration for an origin is still recognized.
// Now test that a registration for a key is still recognized.
EXPECT_TRUE(wrapper_->MaybeHasRegistrationForOrigin(
url::Origin::Create(GURL("https://example1.com"))));
@ -199,10 +199,10 @@ TEST_F(ServiceWorkerContextWrapperTest, DeleteRegistrationsForSameOrigin) {
// Run loop until idle to wait for
// ServiceWorkerRegistry::DidDeleteRegistration() to be executed, and make
// sure that this time NotifyAllRegistrationsDeletedForOrigin() is called.
// sure that this time NotifyAllRegistrationsDeletedForStorageKey() is called.
base::RunLoop().RunUntilIdle();
// Now test that origin does not have any registrations.
// Now test that key does not have any registrations.
EXPECT_FALSE(wrapper_->MaybeHasRegistrationForOrigin(
url::Origin::Create(GURL("https://example1.com"))));
}
@ -239,7 +239,7 @@ TEST_F(ServiceWorkerContextWrapperTest, DeleteRegistration) {
// Finish deleting registration from storage.
base::RunLoop().RunUntilIdle();
// Now test that origin does not have any registrations. This should return
// Now test that key does not have any registrations. This should return
// FALSE even when live registrations may exist, as the registrations have
// been deleted from storage.
EXPECT_FALSE(wrapper_->MaybeHasRegistrationForOrigin(

@ -23,6 +23,7 @@
#include "mojo/public/cpp/bindings/pending_associated_receiver.h"
#include "mojo/public/cpp/bindings/pending_associated_remote.h"
#include "third_party/abseil-cpp/absl/types/optional.h"
#include "url/origin.h"
namespace content {

@ -28,6 +28,7 @@
#include "third_party/blink/public/common/service_worker/service_worker_status_code.h"
#include "third_party/blink/public/common/storage_key/storage_key.h"
#include "url/gurl.h"
#include "url/origin.h"
namespace content {
@ -275,8 +276,9 @@ class ServiceWorkerOfflineCapabilityCheckBrowserTest
void CheckOfflineCapabilityOnCoreThread(
const std::string& path,
ServiceWorkerContext::CheckOfflineCapabilityCallback callback) {
wrapper()->CheckOfflineCapability(embedded_test_server()->GetURL(path),
std::move(callback));
GURL url = embedded_test_server()->GetURL(path);
wrapper()->CheckOfflineCapability(
url, blink::StorageKey(url::Origin::Create(url)), std::move(callback));
}
OfflineCapability CheckOfflineCapability(const std::string& path) {

@ -22,6 +22,8 @@
#include "content/shell/browser/shell.h"
#include "content/test/test_content_browser_client.h"
#include "net/dns/mock_host_resolver.h"
#include "third_party/blink/public/common/storage_key/storage_key.h"
#include "url/origin.h"
// This file has tests involving render process selection for service workers.
@ -205,6 +207,7 @@ IN_PROC_BROWSER_TEST_P(
base::BindOnce(
&ServiceWorkerContextWrapper::StartWorkerForScope,
std::move(wrapper_ref), scope,
blink::StorageKey(url::Origin::Create(scope)),
base::BindLambdaForTesting(
[&](int64_t version_id, int process_id, int thread_id) {
worker_process_id = process_id;

@ -1258,12 +1258,13 @@ IN_PROC_BROWSER_TEST_F(ServiceWorkerVersionBrowserTest,
embedded_test_server()->GetURL(kScope),
blink::mojom::ScriptType::kClassic,
blink::mojom::ServiceWorkerUpdateViaCache::kAll);
blink::StorageKey key(url::Origin::Create(options.scope));
// Register and wait for activation.
auto observer = base::MakeRefCounted<WorkerActivatedObserver>(wrapper());
observer->Init();
public_context()->RegisterServiceWorker(
embedded_test_server()->GetURL(kWorkerUrl), options,
embedded_test_server()->GetURL(kWorkerUrl), key, options,
base::BindOnce(&ExpectRegisterResultAndRun,
blink::ServiceWorkerStatusCode::kOk, base::DoNothing()));
observer->Wait();
@ -1311,7 +1312,7 @@ IN_PROC_BROWSER_TEST_F(ServiceWorkerVersionBrowserTest,
// Tidy up.
base::RunLoop run_loop;
public_context()->UnregisterServiceWorker(
embedded_test_server()->GetURL(kScope),
embedded_test_server()->GetURL(kScope), key,
base::BindOnce(&ExpectUnregisterResultAndRun, true,
run_loop.QuitClosure()));
run_loop.Run();
@ -1333,10 +1334,11 @@ IN_PROC_BROWSER_TEST_F(ServiceWorkerVersionBrowserTest,
embedded_test_server()->GetURL(kScope),
blink::mojom::ScriptType::kClassic,
blink::mojom::ServiceWorkerUpdateViaCache::kNone);
blink::StorageKey key(url::Origin::Create(options.scope));
auto observer = base::MakeRefCounted<WorkerActivatedObserver>(wrapper());
observer->Init();
public_context()->RegisterServiceWorker(
embedded_test_server()->GetURL(kWorkerUrl), options,
embedded_test_server()->GetURL(kWorkerUrl), key, options,
base::BindOnce(&ExpectRegisterResultAndRun,
blink::ServiceWorkerStatusCode::kOk, base::DoNothing()));
observer->Wait();
@ -1355,7 +1357,7 @@ IN_PROC_BROWSER_TEST_F(ServiceWorkerVersionBrowserTest,
// Tidy up.
base::RunLoop run_loop;
public_context()->UnregisterServiceWorker(
embedded_test_server()->GetURL(kScope),
embedded_test_server()->GetURL(kScope), key,
base::BindOnce(&ExpectUnregisterResultAndRun, true,
run_loop.QuitClosure()));
run_loop.Run();

@ -19,6 +19,10 @@
#include "third_party/blink/public/mojom/service_worker/service_worker_registration.mojom-forward.h"
#include "third_party/blink/public/mojom/service_worker/service_worker_registration_options.mojom-forward.h"
namespace blink {
class StorageKey;
} // namespace blink
namespace url {
class Origin;
} // namespace url
@ -114,27 +118,29 @@ class CONTENT_EXPORT ServiceWorkerContext {
virtual void RemoveObserver(ServiceWorkerContextObserver* observer) = 0;
// Equivalent to calling navigator.serviceWorker.register(script_url,
// options). |callback| is passed true when the JS promise is fulfilled or
// false when the JS promise is rejected.
// options) for a given `key`. `callback` is passed true when the JS promise
// is fulfilled or false when the JS promise is rejected.
//
// The registration can fail if:
// * |script_url| is on a different origin from |scope|
// * Fetching |script_url| fails.
// * |script_url| fails to parse or its top-level execution fails.
// * `script_url` is on a different origin from `scope`
// * Fetching `script_url` fails.
// * `script_url` fails to parse or its top-level execution fails.
// * Something unexpected goes wrong, like a renderer crash or a full disk.
virtual void RegisterServiceWorker(
const GURL& script_url,
const blink::StorageKey& key,
const blink::mojom::ServiceWorkerRegistrationOptions& options,
StatusCodeCallback callback) = 0;
// Equivalent to calling ServiceWorkerRegistration#unregister on the
// registration for |scope|. |callback| is passed true when the JS promise is
// registration for `scope`. `callback` is passed true when the JS promise is
// fulfilled or false when the JS promise is rejected.
//
// Unregistration can fail if:
// * No registration exists for |scope|.
// * No registration exists for `scope`.
// * Something unexpected goes wrong, like a renderer crash.
virtual void UnregisterServiceWorker(const GURL& scope,
const blink::StorageKey& key,
ResultCallback callback) = 0;
// Mechanism for embedder to increment/decrement ref count of a service
@ -153,32 +159,36 @@ class CONTENT_EXPORT ServiceWorkerContext {
const std::string& request_uuid) = 0;
// Returns the pending external request count for the worker with the
// specified |origin|.
virtual size_t CountExternalRequestsForTest(const url::Origin& origin) = 0;
// specified `key`.
virtual size_t CountExternalRequestsForTest(const blink::StorageKey& key) = 0;
// Whether |origin| has any registrations. Uninstalling and uninstalled
// Whether `origin` has any registrations. Uninstalling and uninstalled
// registrations do not cause this to return true, that is, only registrations
// with status ServiceWorkerRegistration::Status::kIntact are considered, such
// as even if the corresponding live registrations may still exist. Also,
// returns true if it doesn't know (registrations are not yet initialized).
// TODO(crbug.com/1199077): Refactor to use StorageKey once
// ServiceWorkerContextWrapper::registered_origins_ is refactored.
virtual bool MaybeHasRegistrationForOrigin(const url::Origin& origin) = 0;
// TODO(crbug.com/1199077): Update name when StorageUsageInfo uses StorageKey.
virtual void GetAllOriginsInfo(GetUsageInfoCallback callback) = 0;
// Deletes all registrations in the origin and clears all service workers
// Deletes all registrations for `key` and clears all service workers
// belonging to the registrations. All clients controlled by those service
// workers will lose their controllers immediately after this operation.
// This function can be called from any thread, and the callback is called on
// that thread.
virtual void DeleteForOrigin(const url::Origin& origin_url,
ResultCallback callback) = 0;
virtual void DeleteForStorageKey(const blink::StorageKey& key,
ResultCallback callback) = 0;
// Returns ServiceWorkerCapability describing existence and properties of a
// Service Worker registration matching |url|. In case the service
// Service Worker registration matching `url` and `key`. In case the service
// worker is being installed as of calling this method, it will wait for the
// installation to finish before coming back with the result.
virtual void CheckHasServiceWorker(
const GURL& url,
const blink::StorageKey& key,
CheckHasServiceWorkerCallback callback) = 0;
// Simulates a navigation request in the offline state and dispatches a fetch
@ -189,6 +199,7 @@ class CONTENT_EXPORT ServiceWorkerContext {
// |ServiceWorkerContext::CheckHasServiceWorker|.
virtual void CheckOfflineCapability(
const GURL& url,
const blink::StorageKey& key,
CheckOfflineCapabilityCallback callback) = 0;
// Stops all running service workers and unregisters all service worker
@ -196,37 +207,41 @@ class CONTENT_EXPORT ServiceWorkerContext {
// existing service worker will not affect the succeeding tests.
virtual void ClearAllServiceWorkersForTest(base::OnceClosure callback) = 0;
// Starts the active worker of the registration for the given |scope|. If
// there is no active worker, starts the installing worker.
// |info_callback| is passed information about the started worker if
// successful, otherwise |failure_callback| is passed information about the
// Starts the active worker of the registration for the given `scope` and
// `key`. If there is no active worker, starts the installing worker.
// `info_callback` is passed information about the started worker if
// successful, otherwise `failure_callback` is passed information about the
// error.
//
// There is no guarantee about whether the callback is called synchronously or
// asynchronously.
virtual void StartWorkerForScope(const GURL& scope,
const blink::StorageKey& key,
StartWorkerCallback info_callback,
StatusCodeCallback failure_callback) = 0;
// Starts the active worker of the registration for the given |scope| and
// dispatches the given |message| to the service worker. |result_callback|
// is passed a success boolean indicating whether the message was dispatched
// successfully.
// Starts the active worker of the registration for the given `scope` and
// `key` and dispatches the given `message` to the service worker.
// `result_callback` is passed a success boolean indicating whether the
// message was dispatched successfully.
//
// May be called on any thread, and the callback is called on that thread.
virtual void StartServiceWorkerAndDispatchMessage(
const GURL& scope,
const blink::StorageKey& key,
blink::TransferableMessage message,
ResultCallback result_callback) = 0;
// Starts the service worker for |document_url|. Called when a navigation to
// that URL is predicted to occur soon.
// Starts the service worker for `document_url` and `key`. Called when a
// navigation to that URL is predicted to occur soon.
virtual void StartServiceWorkerForNavigationHint(
const GURL& document_url,
const blink::StorageKey& key,
StartServiceWorkerForNavigationHintCallback callback) = 0;
// Stops all running workers on the given |origin|.
virtual void StopAllServiceWorkersForOrigin(const url::Origin& origin) = 0;
// Stops all running workers on the given `key`.
virtual void StopAllServiceWorkersForStorageKey(
const blink::StorageKey& key) = 0;
// Stops all running service workers.
virtual void StopAllServiceWorkers(base::OnceClosure callback) = 0;

@ -11,6 +11,7 @@
#include "base/notreached.h"
#include "content/public/browser/service_worker_context_observer.h"
#include "third_party/blink/public/common/messaging/transferable_message.h"
#include "third_party/blink/public/common/storage_key/storage_key.h"
namespace content {
@ -27,12 +28,14 @@ void FakeServiceWorkerContext::RemoveObserver(
}
void FakeServiceWorkerContext::RegisterServiceWorker(
const GURL& script_url,
const blink::StorageKey& key,
const blink::mojom::ServiceWorkerRegistrationOptions& options,
StatusCodeCallback callback) {
NOTREACHED();
}
void FakeServiceWorkerContext::UnregisterServiceWorker(
const GURL& scope,
const blink::StorageKey& key,
ResultCallback callback) {
NOTREACHED();
}
@ -51,7 +54,7 @@ FakeServiceWorkerContext::FinishedExternalRequest(
return ServiceWorkerExternalRequestResult::kWorkerNotFound;
}
size_t FakeServiceWorkerContext::CountExternalRequestsForTest(
const url::Origin& origin) {
const blink::StorageKey& key) {
NOTREACHED();
return 0u;
}
@ -63,17 +66,19 @@ void FakeServiceWorkerContext::GetAllOriginsInfo(
GetUsageInfoCallback callback) {
NOTREACHED();
}
void FakeServiceWorkerContext::DeleteForOrigin(const url::Origin& origin,
ResultCallback callback) {
void FakeServiceWorkerContext::DeleteForStorageKey(const blink::StorageKey& key,
ResultCallback callback) {
NOTREACHED();
}
void FakeServiceWorkerContext::CheckHasServiceWorker(
const GURL& url,
const blink::StorageKey& key,
CheckHasServiceWorkerCallback callback) {
NOTREACHED();
}
void FakeServiceWorkerContext::CheckOfflineCapability(
const GURL& url,
const blink::StorageKey& key,
const ServiceWorkerContext::CheckOfflineCapabilityCallback callback) {
NOTREACHED();
}
@ -83,27 +88,30 @@ void FakeServiceWorkerContext::ClearAllServiceWorkersForTest(
}
void FakeServiceWorkerContext::StartWorkerForScope(
const GURL& scope,
const blink::StorageKey& key,
ServiceWorkerContext::StartWorkerCallback info_callback,
ServiceWorkerContext::StatusCodeCallback failure_callback) {
NOTREACHED();
}
void FakeServiceWorkerContext::StartServiceWorkerForNavigationHint(
const GURL& document_url,
const blink::StorageKey& key,
StartServiceWorkerForNavigationHintCallback callback) {
start_service_worker_for_navigation_hint_called_ = true;
}
void FakeServiceWorkerContext::StartServiceWorkerAndDispatchMessage(
const GURL& scope,
const blink::StorageKey& key,
blink::TransferableMessage message,
ResultCallback result_callback) {
start_service_worker_and_dispatch_message_calls_.push_back(
std::make_tuple(scope, std::move(message), std::move(result_callback)));
}
void FakeServiceWorkerContext::StopAllServiceWorkersForOrigin(
const url::Origin& origin) {
stop_all_service_workers_for_origin_calls_.push_back(origin);
void FakeServiceWorkerContext::StopAllServiceWorkersForStorageKey(
const blink::StorageKey& key) {
stop_all_service_workers_for_origin_calls_.push_back(key.origin());
}
void FakeServiceWorkerContext::StopAllServiceWorkers(base::OnceClosure) {

@ -15,6 +15,10 @@
class GURL;
namespace blink {
class StorageKey;
} // namespace blink
namespace content {
class ServiceWorkerContextObserver;
@ -35,9 +39,11 @@ class FakeServiceWorkerContext : public ServiceWorkerContext {
void RemoveObserver(ServiceWorkerContextObserver* observer) override;
void RegisterServiceWorker(
const GURL& script_url,
const blink::StorageKey& key,
const blink::mojom::ServiceWorkerRegistrationOptions& options,
StatusCodeCallback callback) override;
void UnregisterServiceWorker(const GURL& scope,
const blink::StorageKey& key,
ResultCallback callback) override;
ServiceWorkerExternalRequestResult StartingExternalRequest(
int64_t service_worker_version_id,
@ -45,30 +51,36 @@ class FakeServiceWorkerContext : public ServiceWorkerContext {
ServiceWorkerExternalRequestResult FinishedExternalRequest(
int64_t service_worker_version_id,
const std::string& request_uuid) override;
size_t CountExternalRequestsForTest(const url::Origin& origin) override;
size_t CountExternalRequestsForTest(const blink::StorageKey& key) override;
bool MaybeHasRegistrationForOrigin(const url::Origin& origin) override;
void GetAllOriginsInfo(GetUsageInfoCallback callback) override;
void DeleteForOrigin(const url::Origin& origin,
ResultCallback callback) override;
void DeleteForStorageKey(const blink::StorageKey& key,
ResultCallback callback) override;
void CheckHasServiceWorker(const GURL& url,
const blink::StorageKey& key,
CheckHasServiceWorkerCallback callback) override;
void CheckOfflineCapability(
const GURL& url,
const blink::StorageKey& key,
const ServiceWorkerContext::CheckOfflineCapabilityCallback callback)
override;
void ClearAllServiceWorkersForTest(base::OnceClosure) override;
void StartWorkerForScope(
const GURL& scope,
const blink::StorageKey& key,
ServiceWorkerContext::StartWorkerCallback info_callback,
ServiceWorkerContext::StatusCodeCallback failure_callback) override;
void StartServiceWorkerAndDispatchMessage(
const GURL& scope,
const blink::StorageKey& key,
blink::TransferableMessage message,
FakeServiceWorkerContext::ResultCallback result_callback) override;
void StartServiceWorkerForNavigationHint(
const GURL& document_url,
const blink::StorageKey& key,
StartServiceWorkerForNavigationHintCallback callback) override;
void StopAllServiceWorkersForOrigin(const url::Origin& origin) override;
void StopAllServiceWorkersForStorageKey(
const blink::StorageKey& key) override;
void StopAllServiceWorkers(base::OnceClosure callback) override;
const base::flat_map<int64_t, ServiceWorkerRunningInfo>&
GetRunningServiceWorkerInfos() override;

@ -10,6 +10,7 @@
#include "content/public/browser/service_worker_context.h"
#include "content/public/browser/storage_partition.h"
#include "extensions/browser/extension_util.h"
#include "third_party/blink/public/common/storage_key/storage_key.h"
namespace extensions {
@ -27,7 +28,8 @@ void ServiceWorkerManager::OnExtensionUnloaded(
UnloadedExtensionReason reason) {
util::GetStoragePartitionForExtensionId(extension->id(), browser_context_)
->GetServiceWorkerContext()
->StopAllServiceWorkersForOrigin(extension->origin());
->StopAllServiceWorkersForStorageKey(
blink::StorageKey(extension->origin()));
}
void ServiceWorkerManager::OnExtensionUninstalled(
@ -40,7 +42,8 @@ void ServiceWorkerManager::OnExtensionUninstalled(
// c) Check for any orphaned workers.
util::GetStoragePartitionForExtensionId(extension->id(), browser_context_)
->GetServiceWorkerContext()
->DeleteForOrigin(extension->origin(), base::DoNothing());
->DeleteForStorageKey(blink::StorageKey(extension->origin()),
base::DoNothing());
}
} // namespace extensions

@ -30,7 +30,9 @@
#include "extensions/common/constants.h"
#include "extensions/common/manifest_constants.h"
#include "extensions/common/manifest_handlers/background_info.h"
#include "third_party/blink/public/common/storage_key/storage_key.h"
#include "third_party/blink/public/mojom/service_worker/service_worker_registration_options.mojom.h"
#include "url/origin.h"
using content::BrowserContext;
@ -371,7 +373,7 @@ void ServiceWorkerTaskQueue::ActivateExtension(const Extension* extension) {
option.type = blink::mojom::ScriptType::kModule;
option.scope = extension->url();
service_worker_context->RegisterServiceWorker(
script_url, option,
script_url, blink::StorageKey(url::Origin::Create(option.scope)), option,
base::BindOnce(&ServiceWorkerTaskQueue::DidRegisterServiceWorker,
weak_factory_.GetWeakPtr(), context_id,
base::Time::Now()));
@ -402,6 +404,7 @@ void ServiceWorkerTaskQueue::DeactivateExtension(const Extension* extension) {
service_worker_context->UnregisterServiceWorker(
extension->url(),
blink::StorageKey(url::Origin::Create(extension->url())),
base::BindOnce(&ServiceWorkerTaskQueue::DidUnregisterServiceWorker,
weak_factory_.GetWeakPtr(), extension_id, *sequence));
@ -426,8 +429,9 @@ void ServiceWorkerTaskQueue::RunTasksAfterStartWorker(
content::ServiceWorkerContext* service_worker_context =
partition->GetServiceWorkerContext();
const GURL& scope = context_id.first.service_worker_scope();
service_worker_context->StartWorkerForScope(
context_id.first.service_worker_scope(),
scope, blink::StorageKey(url::Origin::Create(scope)),
base::BindOnce(&ServiceWorkerTaskQueue::DidStartWorkerForScope,
weak_factory_.GetWeakPtr(), context_id, base::Time::Now()),
base::BindOnce(&ServiceWorkerTaskQueue::DidStartWorkerFail,