Commit b9e16d2b authored by Matt Falkenhagen's avatar Matt Falkenhagen Committed by Commit Bot

devtools: Prepare for service worker UI thread core.

The thread ServiceWorkerContextCore lives on (the "core thread") will move from
the IO thread to the UI thread when the ServiceWorkerOnUI feature is enabled.

This CL makes DevTools aware of the core thread instead of assuming the IO
thread. This makes https/tests/devtools web_tests pass when the feature is
enabled.

Bug: 824858
Change-Id: I20e38f50998f4b0cd9d8b8cc43526665d92dbf94
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1775655
Commit-Queue: Matt Falkenhagen <falken@chromium.org>
Reviewed-by: default avatarAndrey Kosyakov <caseq@chromium.org>
Cr-Commit-Position: refs/heads/master@{#691689}
parent de38afe4
...@@ -218,7 +218,7 @@ void DevToolsBackgroundServicesContextImpl::ClearLoggedBackgroundServiceEvents( ...@@ -218,7 +218,7 @@ void DevToolsBackgroundServicesContextImpl::ClearLoggedBackgroundServiceEvents(
void DevToolsBackgroundServicesContextImpl:: void DevToolsBackgroundServicesContextImpl::
ClearLoggedBackgroundServiceEventsOnCoreThread( ClearLoggedBackgroundServiceEventsOnCoreThread(
devtools::proto::BackgroundService service) { devtools::proto::BackgroundService service) {
DCHECK_CURRENTLY_ON(BrowserThread::IO); DCHECK_CURRENTLY_ON(ServiceWorkerContext::GetCoreThreadId());
service_worker_context_->ClearUserDataForAllRegistrationsByKeyPrefix( service_worker_context_->ClearUserDataForAllRegistrationsByKeyPrefix(
CreateEntryKeyPrefix(service), base::BindOnce(&DidClearServiceEvents)); CreateEntryKeyPrefix(service), base::BindOnce(&DidClearServiceEvents));
......
...@@ -28,6 +28,7 @@ ...@@ -28,6 +28,7 @@
#include "content/public/browser/browser_thread.h" #include "content/public/browser/browser_thread.h"
#include "content/public/browser/devtools_agent_host.h" #include "content/public/browser/devtools_agent_host.h"
#include "content/public/browser/render_process_host.h" #include "content/public/browser/render_process_host.h"
#include "content/public/browser/service_worker_context.h"
#include "content/public/browser/storage_partition.h" #include "content/public/browser/storage_partition.h"
#include "content/public/browser/web_contents.h" #include "content/public/browser/web_contents.h"
#include "third_party/blink/public/mojom/push_messaging/push_messaging_status.mojom.h" #include "third_party/blink/public/mojom/push_messaging/push_messaging_status.mojom.h"
...@@ -78,22 +79,23 @@ const std::string GetVersionStatusString( ...@@ -78,22 +79,23 @@ const std::string GetVersionStatusString(
return std::string(); return std::string();
} }
void StopServiceWorkerOnIO(scoped_refptr<ServiceWorkerContextWrapper> context, void StopServiceWorkerOnCoreThread(
int64_t version_id) { scoped_refptr<ServiceWorkerContextWrapper> context,
int64_t version_id) {
if (content::ServiceWorkerVersion* version = if (content::ServiceWorkerVersion* version =
context->GetLiveVersion(version_id)) { context->GetLiveVersion(version_id)) {
version->StopWorker(base::DoNothing()); version->StopWorker(base::DoNothing());
} }
} }
void GetDevToolsRouteInfoOnIO( void GetDevToolsRouteInfoOnCoreThread(
scoped_refptr<ServiceWorkerContextWrapper> context, scoped_refptr<ServiceWorkerContextWrapper> context,
int64_t version_id, int64_t version_id,
const base::Callback<void(int, int)>& callback) { const base::Callback<void(int, int)>& callback) {
if (content::ServiceWorkerVersion* version = if (content::ServiceWorkerVersion* version =
context->GetLiveVersion(version_id)) { context->GetLiveVersion(version_id)) {
base::PostTask( RunOrPostTaskOnThread(
FROM_HERE, {BrowserThread::UI}, FROM_HERE, BrowserThread::UI,
base::BindOnce( base::BindOnce(
callback, version->embedded_worker()->process_id(), callback, version->embedded_worker()->process_id(),
version->embedded_worker()->worker_devtools_agent_route_id())); version->embedded_worker()->worker_devtools_agent_route_id()));
...@@ -112,7 +114,7 @@ Response CreateInvalidVersionIdErrorResponse() { ...@@ -112,7 +114,7 @@ Response CreateInvalidVersionIdErrorResponse() {
return Response::InvalidParams("Invalid version ID"); return Response::InvalidParams("Invalid version ID");
} }
void DidFindRegistrationForDispatchSyncEventOnIO( void DidFindRegistrationForDispatchSyncEventOnCoreThread(
scoped_refptr<BackgroundSyncContextImpl> sync_context, scoped_refptr<BackgroundSyncContextImpl> sync_context,
const std::string& tag, const std::string& tag,
bool last_chance, bool last_chance,
...@@ -130,7 +132,7 @@ void DidFindRegistrationForDispatchSyncEventOnIO( ...@@ -130,7 +132,7 @@ void DidFindRegistrationForDispatchSyncEventOnIO(
tag, std::move(version), last_chance, base::DoNothing()); tag, std::move(version), last_chance, base::DoNothing());
} }
void DidFindRegistrationForDispatchPeriodicSyncEventOnIO( void DidFindRegistrationForDispatchPeriodicSyncEventOnCoreThread(
scoped_refptr<BackgroundSyncContextImpl> sync_context, scoped_refptr<BackgroundSyncContextImpl> sync_context,
const std::string& tag, const std::string& tag,
blink::ServiceWorkerStatusCode status, blink::ServiceWorkerStatusCode status,
...@@ -149,7 +151,7 @@ void DidFindRegistrationForDispatchPeriodicSyncEventOnIO( ...@@ -149,7 +151,7 @@ void DidFindRegistrationForDispatchPeriodicSyncEventOnIO(
tag, std::move(version), base::DoNothing()); tag, std::move(version), base::DoNothing());
} }
void DispatchSyncEventOnIO( void DispatchSyncEventOnCoreThread(
scoped_refptr<ServiceWorkerContextWrapper> context, scoped_refptr<ServiceWorkerContextWrapper> context,
scoped_refptr<BackgroundSyncContextImpl> sync_context, scoped_refptr<BackgroundSyncContextImpl> sync_context,
const GURL& origin, const GURL& origin,
...@@ -158,11 +160,11 @@ void DispatchSyncEventOnIO( ...@@ -158,11 +160,11 @@ void DispatchSyncEventOnIO(
bool last_chance) { bool last_chance) {
context->FindReadyRegistrationForId( context->FindReadyRegistrationForId(
registration_id, origin, registration_id, origin,
base::BindOnce(&DidFindRegistrationForDispatchSyncEventOnIO, sync_context, base::BindOnce(&DidFindRegistrationForDispatchSyncEventOnCoreThread,
tag, last_chance)); sync_context, tag, last_chance));
} }
void DispatchPeriodicSyncEventOnIO( void DispatchPeriodicSyncEventOnCoreThread(
scoped_refptr<ServiceWorkerContextWrapper> context, scoped_refptr<ServiceWorkerContextWrapper> context,
scoped_refptr<BackgroundSyncContextImpl> sync_context, scoped_refptr<BackgroundSyncContextImpl> sync_context,
const GURL& origin, const GURL& origin,
...@@ -170,8 +172,9 @@ void DispatchPeriodicSyncEventOnIO( ...@@ -170,8 +172,9 @@ void DispatchPeriodicSyncEventOnIO(
const std::string& tag) { const std::string& tag) {
context->FindReadyRegistrationForId( context->FindReadyRegistrationForId(
registration_id, origin, registration_id, origin,
base::BindOnce(&DidFindRegistrationForDispatchPeriodicSyncEventOnIO, base::BindOnce(
sync_context, tag)); &DidFindRegistrationForDispatchPeriodicSyncEventOnCoreThread,
sync_context, tag));
} }
} // namespace } // namespace
...@@ -274,8 +277,9 @@ Response ServiceWorkerHandler::StopWorker(const std::string& version_id) { ...@@ -274,8 +277,9 @@ Response ServiceWorkerHandler::StopWorker(const std::string& version_id) {
int64_t id = 0; int64_t id = 0;
if (!base::StringToInt64(version_id, &id)) if (!base::StringToInt64(version_id, &id))
return CreateInvalidVersionIdErrorResponse(); return CreateInvalidVersionIdErrorResponse();
base::PostTask(FROM_HERE, {BrowserThread::IO}, RunOrPostTaskOnThread(
base::BindOnce(&StopServiceWorkerOnIO, context_, id)); FROM_HERE, ServiceWorkerContext::GetCoreThreadId(),
base::BindOnce(&StopServiceWorkerOnCoreThread, context_, id));
return Response::OK(); return Response::OK();
} }
...@@ -312,9 +316,9 @@ Response ServiceWorkerHandler::InspectWorker(const std::string& version_id) { ...@@ -312,9 +316,9 @@ Response ServiceWorkerHandler::InspectWorker(const std::string& version_id) {
int64_t id = blink::mojom::kInvalidServiceWorkerVersionId; int64_t id = blink::mojom::kInvalidServiceWorkerVersionId;
if (!base::StringToInt64(version_id, &id)) if (!base::StringToInt64(version_id, &id))
return CreateInvalidVersionIdErrorResponse(); return CreateInvalidVersionIdErrorResponse();
base::PostTask( RunOrPostTaskOnThread(
FROM_HERE, {BrowserThread::IO}, FROM_HERE, ServiceWorkerContext::GetCoreThreadId(),
base::BindOnce(&GetDevToolsRouteInfoOnIO, context_, id, base::BindOnce(&GetDevToolsRouteInfoOnCoreThread, context_, id,
base::Bind(&ServiceWorkerHandler::OpenNewDevToolsWindow, base::Bind(&ServiceWorkerHandler::OpenNewDevToolsWindow,
weak_factory_.GetWeakPtr()))); weak_factory_.GetWeakPtr())));
return Response::OK(); return Response::OK();
...@@ -366,10 +370,10 @@ Response ServiceWorkerHandler::DispatchSyncEvent( ...@@ -366,10 +370,10 @@ Response ServiceWorkerHandler::DispatchSyncEvent(
BackgroundSyncContextImpl* sync_context = BackgroundSyncContextImpl* sync_context =
storage_partition_->GetBackgroundSyncContext(); storage_partition_->GetBackgroundSyncContext();
base::PostTask(FROM_HERE, {BrowserThread::IO}, RunOrPostTaskOnThread(FROM_HERE, ServiceWorkerContext::GetCoreThreadId(),
base::BindOnce(&DispatchSyncEventOnIO, context_, base::BindOnce(&DispatchSyncEventOnCoreThread, context_,
base::WrapRefCounted(sync_context), base::WrapRefCounted(sync_context),
GURL(origin), id, tag, last_chance)); GURL(origin), id, tag, last_chance));
return Response::OK(); return Response::OK();
} }
...@@ -388,9 +392,9 @@ Response ServiceWorkerHandler::DispatchPeriodicSyncEvent( ...@@ -388,9 +392,9 @@ Response ServiceWorkerHandler::DispatchPeriodicSyncEvent(
BackgroundSyncContextImpl* sync_context = BackgroundSyncContextImpl* sync_context =
storage_partition_->GetBackgroundSyncContext(); storage_partition_->GetBackgroundSyncContext();
base::PostTaskWithTraits( RunOrPostTaskOnThread(
FROM_HERE, {BrowserThread::IO}, FROM_HERE, ServiceWorkerContext::GetCoreThreadId(),
base::BindOnce(&DispatchPeriodicSyncEventOnIO, context_, base::BindOnce(&DispatchPeriodicSyncEventOnCoreThread, context_,
base::WrapRefCounted(sync_context), GURL(origin), id, base::WrapRefCounted(sync_context), GURL(origin), id,
tag)); tag));
return Response::OK(); return Response::OK();
......
...@@ -27,7 +27,7 @@ namespace content { ...@@ -27,7 +27,7 @@ namespace content {
namespace { namespace {
void TerminateServiceWorkerOnIO( void TerminateServiceWorkerOnCoreThread(
base::WeakPtr<ServiceWorkerContextCore> context_weak, base::WeakPtr<ServiceWorkerContextCore> context_weak,
int64_t version_id) { int64_t version_id) {
if (ServiceWorkerContextCore* context = context_weak.get()) { if (ServiceWorkerContextCore* context = context_weak.get()) {
...@@ -36,7 +36,7 @@ void TerminateServiceWorkerOnIO( ...@@ -36,7 +36,7 @@ void TerminateServiceWorkerOnIO(
} }
} }
void SetDevToolsAttachedOnIO( void SetDevToolsAttachedOnCoreThread(
base::WeakPtr<ServiceWorkerContextCore> context_weak, base::WeakPtr<ServiceWorkerContextCore> context_weak,
int64_t version_id, int64_t version_id,
bool attached) { bool attached) {
...@@ -46,7 +46,7 @@ void SetDevToolsAttachedOnIO( ...@@ -46,7 +46,7 @@ void SetDevToolsAttachedOnIO(
} }
} }
void UpdateLoaderFactoriesOnIO( void UpdateLoaderFactoriesOnCoreThread(
base::WeakPtr<ServiceWorkerContextCore> context_weak, base::WeakPtr<ServiceWorkerContextCore> context_weak,
int64_t version_id, int64_t version_id,
std::unique_ptr<blink::URLLoaderFactoryBundleInfo> script_bundle, std::unique_ptr<blink::URLLoaderFactoryBundleInfo> script_bundle,
...@@ -111,9 +111,9 @@ void ServiceWorkerDevToolsAgentHost::Reload() { ...@@ -111,9 +111,9 @@ void ServiceWorkerDevToolsAgentHost::Reload() {
} }
bool ServiceWorkerDevToolsAgentHost::Close() { bool ServiceWorkerDevToolsAgentHost::Close() {
base::PostTask( RunOrPostTaskOnThread(FROM_HERE, ServiceWorkerContext::GetCoreThreadId(),
FROM_HERE, {BrowserThread::IO}, base::BindOnce(&TerminateServiceWorkerOnCoreThread,
base::BindOnce(&TerminateServiceWorkerOnIO, context_weak_, version_id_)); context_weak_, version_id_));
return true; return true;
} }
...@@ -192,9 +192,9 @@ void ServiceWorkerDevToolsAgentHost::WorkerDestroyed() { ...@@ -192,9 +192,9 @@ void ServiceWorkerDevToolsAgentHost::WorkerDestroyed() {
} }
void ServiceWorkerDevToolsAgentHost::UpdateIsAttached(bool attached) { void ServiceWorkerDevToolsAgentHost::UpdateIsAttached(bool attached) {
base::PostTask(FROM_HERE, {BrowserThread::IO}, RunOrPostTaskOnThread(FROM_HERE, ServiceWorkerContext::GetCoreThreadId(),
base::BindOnce(&SetDevToolsAttachedOnIO, context_weak_, base::BindOnce(&SetDevToolsAttachedOnCoreThread,
version_id_, attached)); context_weak_, version_id_, attached));
} }
void ServiceWorkerDevToolsAgentHost::UpdateLoaderFactories( void ServiceWorkerDevToolsAgentHost::UpdateLoaderFactories(
...@@ -211,11 +211,20 @@ void ServiceWorkerDevToolsAgentHost::UpdateLoaderFactories( ...@@ -211,11 +211,20 @@ void ServiceWorkerDevToolsAgentHost::UpdateLoaderFactories(
auto subresource_bundle = EmbeddedWorkerInstance::CreateFactoryBundleOnUI( auto subresource_bundle = EmbeddedWorkerInstance::CreateFactoryBundleOnUI(
rph, worker_route_id_, origin, rph, worker_route_id_, origin,
ContentBrowserClient::URLLoaderFactoryType::kServiceWorkerSubResource); ContentBrowserClient::URLLoaderFactoryType::kServiceWorkerSubResource);
base::PostTaskAndReply(
FROM_HERE, {BrowserThread::IO}, if (ServiceWorkerContext::IsServiceWorkerOnUIEnabled()) {
base::BindOnce(&UpdateLoaderFactoriesOnIO, context_weak_, version_id_, UpdateLoaderFactoriesOnCoreThread(context_weak_, version_id_,
std::move(script_bundle), std::move(subresource_bundle)), std::move(script_bundle),
std::move(callback)); std::move(subresource_bundle));
std::move(callback).Run();
} else {
base::PostTaskAndReply(
FROM_HERE, {BrowserThread::IO},
base::BindOnce(&UpdateLoaderFactoriesOnCoreThread, context_weak_,
version_id_, std::move(script_bundle),
std::move(subresource_bundle)),
std::move(callback));
}
} }
} // namespace content } // namespace content
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