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

Unified Diff: content/browser/devtools/embedded_worker_devtools_agent_host.cc

Issue 405603002: DevTools: Merge WorkerInfo into EmbeddedWorkerDevToolsAgentHost (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Style fix Created 6 years, 4 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
Index: content/browser/devtools/embedded_worker_devtools_agent_host.cc
diff --git a/content/browser/devtools/embedded_worker_devtools_agent_host.cc b/content/browser/devtools/embedded_worker_devtools_agent_host.cc
new file mode 100644
index 0000000000000000000000000000000000000000..c53a37f735330c4b7537658dc9d342b03179bcc7
--- /dev/null
+++ b/content/browser/devtools/embedded_worker_devtools_agent_host.cc
@@ -0,0 +1,156 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "content/browser/devtools/embedded_worker_devtools_agent_host.h"
+
+#include "content/browser/devtools/devtools_manager_impl.h"
+#include "content/browser/devtools/devtools_protocol.h"
+#include "content/browser/devtools/devtools_protocol_constants.h"
+#include "content/common/devtools_messages.h"
+#include "content/public/browser/browser_thread.h"
+#include "content/public/browser/render_process_host.h"
+
+namespace content {
+
+EmbeddedWorkerDevToolsAgentHost::EmbeddedWorkerDevToolsAgentHost(
+ WorkerId worker_id,
+ const SharedWorkerInstance& shared_worker)
+ : shared_worker_(new SharedWorkerInstance(shared_worker)),
+ state_(WORKER_UNINSPECTED),
+ worker_id_(worker_id) {
+ WorkerCreated();
+}
+
+EmbeddedWorkerDevToolsAgentHost::EmbeddedWorkerDevToolsAgentHost(
+ WorkerId worker_id,
+ const ServiceWorkerIdentifier& service_worker,
+ bool debug_service_worker_on_start)
+ : service_worker_(new ServiceWorkerIdentifier(service_worker)),
+ state_(WORKER_UNINSPECTED),
+ worker_id_(worker_id) {
+ if (debug_service_worker_on_start)
+ state_ = WORKER_PAUSED_FOR_DEBUG_ON_START;
+ WorkerCreated();
+}
+
+bool EmbeddedWorkerDevToolsAgentHost::IsWorker() const {
+ return true;
+}
+
+void EmbeddedWorkerDevToolsAgentHost::SendMessageToAgent(
+ IPC::Message* message_raw) {
+ scoped_ptr<IPC::Message> message(message_raw);
+ if (state_ != WORKER_INSPECTED)
+ return;
+ if (RenderProcessHost* host = RenderProcessHost::FromID(worker_id_.first)) {
+ message->set_routing_id(worker_id_.second);
+ host->Send(message.release());
+ }
+}
+
+void EmbeddedWorkerDevToolsAgentHost::Attach() {
+ if (state_ != WORKER_INSPECTED) {
+ state_ = WORKER_INSPECTED;
+ AttachToWorker();
+ }
+ IPCDevToolsAgentHost::Attach();
+}
+
+void EmbeddedWorkerDevToolsAgentHost::OnClientDetached() {
+ if (state_ == WORKER_INSPECTED) {
+ state_ = WORKER_UNINSPECTED;
+ DetachFromWorker();
+ }
yurys 2014/08/08 11:42:12 else if (state_ == WORKER_PAUSED_FOR_REATTACH) {
vkuzkokov 2014/08/08 12:22:37 Done.
+}
+
+bool EmbeddedWorkerDevToolsAgentHost::OnMessageReceived(
+ const IPC::Message& msg) {
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+ bool handled = true;
+ IPC_BEGIN_MESSAGE_MAP(EmbeddedWorkerDevToolsAgentHost, msg)
+ IPC_MESSAGE_HANDLER(DevToolsClientMsg_DispatchOnInspectorFrontend,
+ OnDispatchOnInspectorFrontend)
+ IPC_MESSAGE_HANDLER(DevToolsHostMsg_SaveAgentRuntimeState,
+ OnSaveAgentRuntimeState)
+ IPC_MESSAGE_UNHANDLED(handled = false)
+ IPC_END_MESSAGE_MAP()
+ return handled;
+}
+
+void EmbeddedWorkerDevToolsAgentHost::WorkerContextStarted() {
+ if (state_ == WORKER_PAUSED_FOR_DEBUG_ON_START) {
+ RenderProcessHost* rph = RenderProcessHost::FromID(worker_id_.first);
+ DevToolsManagerImpl::GetInstance()->Inspect(rph->GetBrowserContext(), this);
+ } else if (state_ == WORKER_PAUSED_FOR_REATTACH && IsAttached()) {
yurys 2014/08/08 11:42:12 DCHECK(IsAttached());
vkuzkokov 2014/08/08 12:22:38 Done.
+ state_ = WORKER_INSPECTED;
+ AttachToWorker();
+ Reattach(saved_agent_state_);
+ }
+}
+
+void EmbeddedWorkerDevToolsAgentHost::WorkerRestarted(WorkerId worker_id) {
+ DCHECK_EQ(WORKER_TERMINATED, state_);
+ state_ = WORKER_PAUSED_FOR_REATTACH;
yurys 2014/08/08 11:42:12 state_ = IsAttached() ? WORKER_PAUSED_FOR_REATTACH
vkuzkokov 2014/08/08 12:22:37 Done.
+ worker_id_ = worker_id;
+ WorkerCreated();
+}
+
+void EmbeddedWorkerDevToolsAgentHost::WorkerDestroyed() {
+ DCHECK_NE(WORKER_TERMINATED, state_);
+ if (state_ == WORKER_INSPECTED) {
+ DCHECK(IsAttached());
+ // Client host is debugging this worker agent host.
+ std::string notification =
+ DevToolsProtocol::CreateNotification(
+ devtools::Worker::disconnectedFromWorker::kName, NULL)->Serialize();
+ DevToolsManagerImpl::GetInstance()->DispatchOnInspectorFrontend(
+ this, notification);
+ DetachFromWorker();
+ }
+ state_ = WORKER_TERMINATED;
+ Release(); // Balanced in WorkerCreated()
+}
+
+bool EmbeddedWorkerDevToolsAgentHost::Matches(
+ const SharedWorkerInstance& other) {
+ return shared_worker_ && shared_worker_->Matches(other);
+}
+
+bool EmbeddedWorkerDevToolsAgentHost::Matches(
+ const ServiceWorkerIdentifier& other) {
+ return service_worker_ && service_worker_->Matches(other);
+}
+
+EmbeddedWorkerDevToolsAgentHost::~EmbeddedWorkerDevToolsAgentHost() {
+ DCHECK_EQ(WORKER_TERMINATED, state_);
+ EmbeddedWorkerDevToolsManager::GetInstance()->RemoveInspectedWorkerData(
+ worker_id_);
+}
+
+void EmbeddedWorkerDevToolsAgentHost::AttachToWorker() {
+ if (RenderProcessHost* host = RenderProcessHost::FromID(worker_id_.first))
+ host->AddRoute(worker_id_.second, this);
+}
+
+void EmbeddedWorkerDevToolsAgentHost::DetachFromWorker() {
+ if (RenderProcessHost* host = RenderProcessHost::FromID(worker_id_.first))
+ host->RemoveRoute(worker_id_.second);
+}
+
+void EmbeddedWorkerDevToolsAgentHost::WorkerCreated() {
+ AddRef(); // Balanced in WorkerDestroyed()
+}
+
+void EmbeddedWorkerDevToolsAgentHost::OnDispatchOnInspectorFrontend(
+ const std::string& message) {
+ DevToolsManagerImpl::GetInstance()->DispatchOnInspectorFrontend(
+ this, message);
+}
+
+void EmbeddedWorkerDevToolsAgentHost::OnSaveAgentRuntimeState(
+ const std::string& state) {
+ saved_agent_state_ = state;
+}
+
+} // namespace content

Powered by Google App Engine
This is Rietveld 408576698