Index: content/browser/service_worker/service_worker_internals_ui.cc |
diff --git a/content/browser/service_worker/service_worker_internals_ui.cc b/content/browser/service_worker/service_worker_internals_ui.cc |
index 9e0ab948477537e0568301bf2a61d751ed4215f6..84dddaa0ef3e536ea2d835a927922ad64c507d44 100644 |
--- a/content/browser/service_worker/service_worker_internals_ui.cc |
+++ b/content/browser/service_worker/service_worker_internals_ui.cc |
@@ -11,6 +11,8 @@ |
#include "base/memory/scoped_vector.h" |
#include "base/strings/string_number_conversions.h" |
#include "base/values.h" |
+#include "content/browser/devtools/devtools_manager_impl.h" |
+#include "content/browser/devtools/embedded_worker_devtools_manager.h" |
#include "content/browser/service_worker/service_worker_context_observer.h" |
#include "content/browser/service_worker/service_worker_context_wrapper.h" |
#include "content/browser/service_worker/service_worker_registration.h" |
@@ -200,6 +202,10 @@ ServiceWorkerInternalsUI::ServiceWorkerInternalsUI(WebUI* web_ui) |
"sync", |
base::Bind(&ServiceWorkerInternalsUI::DispatchSyncEventToWorker, |
base::Unretained(this))); |
+ web_ui->RegisterMessageCallback( |
+ "inspect", |
+ base::Bind(&ServiceWorkerInternalsUI::InspectWorker, |
+ base::Unretained(this))); |
} |
ServiceWorkerInternalsUI::~ServiceWorkerInternalsUI() { |
@@ -328,6 +334,27 @@ void ServiceWorkerInternalsUI::DispatchSyncEventToWorker( |
scope)); |
} |
+void ServiceWorkerInternalsUI::InspectWorker(const ListValue* args) { |
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
+ base::FilePath partition_path; |
+ GURL scope; |
+ scoped_refptr<ServiceWorkerContextWrapper> context; |
+ if (!GetRegistrationInfo(args, &partition_path, &scope, &context)) |
+ return; |
+ scoped_refptr<DevToolsAgentHost> agent_host( |
+ EmbeddedWorkerDevToolsManager::GetInstance() |
+ ->GetDevToolsAgentHostForServiceWorker(partition_path, scope)); |
+ if (agent_host) { |
+ DevToolsManagerImpl::GetInstance()->Inspect( |
+ web_ui()->GetWebContents()->GetBrowserContext(), agent_host.get()); |
+ } |
+ scoped_ptr<ListValue> args_copy(args->DeepCopy()); |
+ args_copy->Insert(0, new FundamentalValue(0)); |
+ web_ui()->CallJavascriptFunction( |
+ "serviceworker.onOperationComplete", |
+ std::vector<const Value*>(args_copy->begin(), args_copy->end())); |
+} |
+ |
void ServiceWorkerInternalsUI::Unregister(const ListValue* args) { |
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
base::FilePath partition_path; |