Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(510)

Unified Diff: content/browser/service_worker/embedded_worker_instance.cc

Issue 2823853005: ServiceWorker: Create a proxy when adding the worker to DevToolsManager (Closed)
Patch Set: Removed unnecessary nullptr Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « content/browser/service_worker/embedded_worker_instance.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: content/browser/service_worker/embedded_worker_instance.cc
diff --git a/content/browser/service_worker/embedded_worker_instance.cc b/content/browser/service_worker/embedded_worker_instance.cc
index 93aaf34f42abaaa282680702e999b9091afaefdf..e130e4b9e8aaef93f9bb5442214731c710d4dc4b 100644
--- a/content/browser/service_worker/embedded_worker_instance.cc
+++ b/content/browser/service_worker/embedded_worker_instance.cc
@@ -10,7 +10,6 @@
#include "base/macros.h"
#include "base/memory/ptr_util.h"
#include "base/metrics/histogram_macros.h"
-#include "base/threading/non_thread_safe.h"
#include "base/trace_event/trace_event.h"
#include "content/browser/bad_message.h"
#include "content/browser/devtools/service_worker_devtools_manager.h"
@@ -80,9 +79,11 @@ void SetupOnUI(
const GURL& scope,
bool is_installed,
mojom::EmbeddedWorkerInstanceClientRequest request,
- const base::Callback<void(int worker_devtools_agent_route_id,
- bool wait_for_debugger)>& callback) {
+ const base::Callback<
+ void(std::unique_ptr<EmbeddedWorkerInstance::DevToolsProxy>,
+ bool wait_for_debugger)>& callback) {
DCHECK_CURRENTLY_ON(BrowserThread::UI);
+ std::unique_ptr<EmbeddedWorkerInstance::DevToolsProxy> devtools_proxy;
int worker_devtools_agent_route_id = MSG_ROUTING_NONE;
bool wait_for_debugger = false;
if (RenderProcessHost* rph = RenderProcessHost::FromID(process_id)) {
@@ -97,11 +98,12 @@ void SetupOnUI(
is_installed);
if (request.is_pending())
BindInterface(rph, std::move(request));
+ devtools_proxy = base::MakeUnique<EmbeddedWorkerInstance::DevToolsProxy>(
+ process_id, worker_devtools_agent_route_id);
}
BrowserThread::PostTask(
- BrowserThread::IO,
- FROM_HERE,
- base::Bind(callback, worker_devtools_agent_route_id, wait_for_debugger));
+ BrowserThread::IO, FROM_HERE,
+ base::Bind(callback, base::Passed(&devtools_proxy), wait_for_debugger));
}
void CallDetach(EmbeddedWorkerInstance* instance) {
@@ -137,15 +139,16 @@ bool HasSentStartWorker(EmbeddedWorkerInstance::StartingPhase phase) {
} // namespace
-// Lives on IO thread, proxies notifications to DevToolsManager that lives on
-// UI thread. Owned by EmbeddedWorkerInstance.
-class EmbeddedWorkerInstance::DevToolsProxy : public base::NonThreadSafe {
+// Created on UI thread and moved to IO thread. Proxies notifications to
+// DevToolsManager that lives on UI thread. Owned by EmbeddedWorkerInstance.
+class EmbeddedWorkerInstance::DevToolsProxy {
public:
DevToolsProxy(int process_id, int agent_route_id)
: process_id_(process_id),
agent_route_id_(agent_route_id) {}
~DevToolsProxy() {
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
BrowserThread::PostTask(
BrowserThread::UI,
FROM_HERE,
@@ -154,21 +157,21 @@ class EmbeddedWorkerInstance::DevToolsProxy : public base::NonThreadSafe {
}
void NotifyWorkerReadyForInspection() {
- DCHECK(CalledOnValidThread());
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
BrowserThread::PostTask(BrowserThread::UI, FROM_HERE,
base::Bind(NotifyWorkerReadyForInspectionOnUI,
process_id_, agent_route_id_));
}
void NotifyWorkerVersionInstalled() {
- DCHECK(CalledOnValidThread());
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
BrowserThread::PostTask(BrowserThread::UI, FROM_HERE,
base::Bind(NotifyWorkerVersionInstalledOnUI,
process_id_, agent_route_id_));
}
void NotifyWorkerVersionDoomed() {
- DCHECK(CalledOnValidThread());
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
BrowserThread::PostTask(BrowserThread::UI, FROM_HERE,
base::Bind(NotifyWorkerVersionDoomedOnUI,
process_id_, agent_route_id_));
@@ -186,6 +189,7 @@ class EmbeddedWorkerInstance::DevToolsProxy : public base::NonThreadSafe {
const int process_id_;
const int agent_route_id_;
bool worker_stop_ignored_notified_ = false;
+
DISALLOW_COPY_AND_ASSIGN(DevToolsProxy);
};
@@ -248,7 +252,6 @@ class EmbeddedWorkerInstance::StartTask {
DCHECK_CURRENTLY_ON(BrowserThread::IO);
TRACE_EVENT_ASYNC_END0("ServiceWorker", "EmbeddedWorkerInstance::Start",
this);
-
if (!instance_->context_)
return;
@@ -372,21 +375,22 @@ class EmbeddedWorkerInstance::StartTask {
is_new_process)));
}
- void OnSetupOnUICompleted(std::unique_ptr<EmbeddedWorkerStartParams> params,
- bool is_new_process,
- int worker_devtools_agent_route_id,
- bool wait_for_debugger) {
+ void OnSetupOnUICompleted(
+ std::unique_ptr<EmbeddedWorkerStartParams> params,
+ bool is_new_process,
+ std::unique_ptr<EmbeddedWorkerInstance::DevToolsProxy> devtools_proxy,
+ bool wait_for_debugger) {
DCHECK_CURRENTLY_ON(BrowserThread::IO);
TRACE_EVENT_ASYNC_STEP_PAST0("ServiceWorker",
"EmbeddedWorkerInstance::Start", this,
"OnSetupOnUICompleted");
+ params->worker_devtools_agent_route_id = devtools_proxy->agent_route_id();
+ params->wait_for_debugger = wait_for_debugger;
+
// Notify the instance that it is registered to the devtools manager.
instance_->OnRegisteredToDevToolsManager(
- is_new_process, worker_devtools_agent_route_id, wait_for_debugger);
-
- params->worker_devtools_agent_route_id = worker_devtools_agent_route_id;
- params->wait_for_debugger = wait_for_debugger;
+ is_new_process, std::move(devtools_proxy), wait_for_debugger);
ServiceWorkerStatusCode status =
instance_->SendStartWorker(std::move(params));
@@ -478,21 +482,21 @@ bool EmbeddedWorkerInstance::Stop() {
// Abort an inflight start task.
inflight_start_task_.reset();
- if (status_ == EmbeddedWorkerStatus::STARTING &&
- !HasSentStartWorker(starting_phase())) {
- // Don't send the StopWorker message when the StartWorker message hasn't
- // been sent.
- // TODO(shimazu): Invoke OnStopping/OnStopped after the legacy IPC path is
- // removed.
- OnDetached();
- return false;
- }
- client_->StopWorker();
+ if (status_ == EmbeddedWorkerStatus::STARTING &&
+ !HasSentStartWorker(starting_phase())) {
+ // Don't send the StopWorker message when the StartWorker message hasn't
+ // been sent.
+ // TODO(shimazu): Invoke OnStopping/OnStopped after the legacy IPC path is
+ // removed.
+ OnDetached();
+ return false;
+ }
+ client_->StopWorker();
- status_ = EmbeddedWorkerStatus::STOPPING;
- for (auto& observer : listener_list_)
- observer.OnStopping();
- return true;
+ status_ = EmbeddedWorkerStatus::STOPPING;
+ for (auto& observer : listener_list_)
+ observer.OnStopping();
+ return true;
}
void EmbeddedWorkerInstance::StopIfIdle() {
@@ -562,12 +566,11 @@ void EmbeddedWorkerInstance::OnProcessAllocated(
void EmbeddedWorkerInstance::OnRegisteredToDevToolsManager(
bool is_new_process,
- int worker_devtools_agent_route_id,
+ std::unique_ptr<DevToolsProxy> devtools_proxy,
bool wait_for_debugger) {
- if (worker_devtools_agent_route_id != MSG_ROUTING_NONE) {
+ if (devtools_proxy) {
DCHECK(!devtools_proxy_);
- devtools_proxy_.reset(
- new DevToolsProxy(process_id(), worker_devtools_agent_route_id));
+ devtools_proxy_ = std::move(devtools_proxy);
}
if (wait_for_debugger) {
// We don't measure the start time when wait_for_debugger flag is set. So
@@ -627,7 +630,6 @@ void EmbeddedWorkerInstance::OnScriptReadFinished() {
void EmbeddedWorkerInstance::OnScriptLoaded() {
using LoadSource = ServiceWorkerMetrics::LoadSource;
-
TRACE_EVENT0("ServiceWorker", "EmbeddedWorkerInstance::OnScriptLoaded");
if (!inflight_start_task_)
« no previous file with comments | « content/browser/service_worker/embedded_worker_instance.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698