1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #include "content/browser/devtools/service_worker_devtools_agent_host.h"
7 #include "base/strings/stringprintf.h"
8 #include "content/browser/devtools/devtools_protocol_handler.h"
9 #include "content/browser/devtools/protocol/devtools_protocol_dispatcher.h"
10 #include "content/browser/devtools/service_worker_devtools_manager.h"
11 #include "content/browser/service_worker/service_worker_context_core.h"
12 #include "content/browser/service_worker/service_worker_version.h"
13 #include "content/public/browser/browser_thread.h"
14 #include "content/public/browser/render_process_host.h"
20 void StatusNoOp(ServiceWorkerStatusCode status
) {}
22 void TerminateServiceWorkerOnIO(
23 base::WeakPtr
<ServiceWorkerContextCore
> context_weak
,
25 if (ServiceWorkerContextCore
* context
= context_weak
.get()) {
26 if (ServiceWorkerVersion
* version
= context
->GetLiveVersion(version_id
))
27 version
->StopWorker(base::Bind(&StatusNoOp
));
31 void UnregisterServiceWorkerOnIO(
32 base::WeakPtr
<ServiceWorkerContextCore
> context_weak
,
34 if (ServiceWorkerContextCore
* context
= context_weak
.get()) {
35 if (ServiceWorkerVersion
* version
= context
->GetLiveVersion(version_id
)) {
36 version
->StopWorker(base::Bind(&StatusNoOp
));
37 context
->UnregisterServiceWorker(
38 version
->scope(), base::Bind(&StatusNoOp
));
43 void SetDevToolsAttachedOnIO(
44 base::WeakPtr
<ServiceWorkerContextCore
> context_weak
,
47 if (ServiceWorkerContextCore
* context
= context_weak
.get()) {
48 if (ServiceWorkerVersion
* version
= context
->GetLiveVersion(version_id
))
49 version
->SetDevToolsAttached(attached
);
55 ServiceWorkerDevToolsAgentHost::ServiceWorkerDevToolsAgentHost(
57 const ServiceWorkerIdentifier
& service_worker
)
58 : WorkerDevToolsAgentHost(worker_id
),
59 service_worker_(new ServiceWorkerIdentifier(service_worker
)),
60 network_handler_(new devtools::network::NetworkHandler()) {
61 DevToolsProtocolDispatcher
* dispatcher
= protocol_handler()->dispatcher();
62 dispatcher
->SetNetworkHandler(network_handler_
.get());
65 DevToolsAgentHost::Type
ServiceWorkerDevToolsAgentHost::GetType() {
66 return TYPE_SERVICE_WORKER
;
69 std::string
ServiceWorkerDevToolsAgentHost::GetTitle() {
70 if (RenderProcessHost
* host
= RenderProcessHost::FromID(worker_id().first
)) {
71 return base::StringPrintf("Worker pid:%d",
72 base::GetProcId(host
->GetHandle()));
77 GURL
ServiceWorkerDevToolsAgentHost::GetURL() {
78 return service_worker_
->url();
81 bool ServiceWorkerDevToolsAgentHost::Activate() {
85 bool ServiceWorkerDevToolsAgentHost::Close() {
86 BrowserThread::PostTask(BrowserThread::IO
, FROM_HERE
,
87 base::Bind(&TerminateServiceWorkerOnIO
,
88 service_worker_
->context_weak(),
89 service_worker_
->version_id()));
93 void ServiceWorkerDevToolsAgentHost::UnregisterWorker() {
94 BrowserThread::PostTask(BrowserThread::IO
, FROM_HERE
,
95 base::Bind(&UnregisterServiceWorkerOnIO
,
96 service_worker_
->context_weak(),
97 service_worker_
->version_id()));
100 void ServiceWorkerDevToolsAgentHost::OnAttachedStateChanged(bool attached
) {
101 BrowserThread::PostTask(BrowserThread::IO
, FROM_HERE
,
102 base::Bind(&SetDevToolsAttachedOnIO
,
103 service_worker_
->context_weak(),
104 service_worker_
->version_id(),
108 int64
ServiceWorkerDevToolsAgentHost::service_worker_version_id() const {
109 return service_worker_
->version_id();
112 bool ServiceWorkerDevToolsAgentHost::Matches(
113 const ServiceWorkerIdentifier
& other
) {
114 return service_worker_
->Matches(other
);
117 ServiceWorkerDevToolsAgentHost::~ServiceWorkerDevToolsAgentHost() {
118 ServiceWorkerDevToolsManager::GetInstance()->RemoveInspectedWorkerData(
122 } // namespace content