summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--content/browser/debugger/devtools_agent_host.cc10
-rw-r--r--content/browser/debugger/devtools_agent_host.h3
-rw-r--r--content/browser/debugger/devtools_manager.cc39
-rw-r--r--content/browser/debugger/devtools_manager.h18
-rw-r--r--content/browser/debugger/render_view_devtools_agent_host.cc12
-rw-r--r--content/browser/debugger/render_view_devtools_agent_host.h3
-rw-r--r--content/common/devtools_messages.h23
-rw-r--r--content/renderer/devtools_agent.cc37
-rw-r--r--content/renderer/devtools_agent.h8
-rw-r--r--content/renderer/worker_devtools_agent_proxy.cc2
-rw-r--r--content/worker/worker_devtools_agent.cc7
11 files changed, 96 insertions, 66 deletions
diff --git a/content/browser/debugger/devtools_agent_host.cc b/content/browser/debugger/devtools_agent_host.cc
index 0d206c9..50edfd9 100644
--- a/content/browser/debugger/devtools_agent_host.cc
+++ b/content/browser/debugger/devtools_agent_host.cc
@@ -10,14 +10,10 @@
DevToolsAgentHost::DevToolsAgentHost() : close_listener_(NULL) {
}
-void DevToolsAgentHost::Attach() {
- SendMessageToAgent(new DevToolsAgentMsg_Attach(MSG_ROUTING_NONE));
-}
-
-void DevToolsAgentHost::Reattach(const std::string& saved_agent_state) {
- SendMessageToAgent(new DevToolsAgentMsg_Reattach(
+void DevToolsAgentHost::Attach(const DevToolsRuntimeProperties& properties) {
+ SendMessageToAgent(new DevToolsAgentMsg_Attach(
MSG_ROUTING_NONE,
- saved_agent_state));
+ properties));
}
void DevToolsAgentHost::Detach() {
diff --git a/content/browser/debugger/devtools_agent_host.h b/content/browser/debugger/devtools_agent_host.h
index 3eb7a33..848de04 100644
--- a/content/browser/debugger/devtools_agent_host.h
+++ b/content/browser/debugger/devtools_agent_host.h
@@ -29,8 +29,7 @@ class CONTENT_EXPORT DevToolsAgentHost {
// Sends the message to the devtools agent hosted by this object.
virtual void SendMessageToAgent(IPC::Message* msg) = 0;
- virtual void Attach();
- virtual void Reattach(const std::string& saved_agent_state);
+ virtual void Attach(const DevToolsRuntimeProperties&);
virtual void Detach();
// TODO(yurys): get rid of this method
diff --git a/content/browser/debugger/devtools_manager.cc b/content/browser/debugger/devtools_manager.cc
index 87e9ff7..53a1684 100644
--- a/content/browser/debugger/devtools_manager.cc
+++ b/content/browser/debugger/devtools_manager.cc
@@ -63,8 +63,8 @@ void DevToolsManager::RegisterDevToolsClientHostFor(
void DevToolsManager::RegisterDevToolsClientHostFor(
DevToolsAgentHost* agent_host,
DevToolsClientHost* client_host) {
- BindClientHost(agent_host, client_host);
- agent_host->Attach();
+ DevToolsRuntimeProperties initial_properties;
+ BindClientHost(agent_host, client_host, initial_properties);
client_host->set_close_listener(this);
}
@@ -89,9 +89,18 @@ void DevToolsManager::ForwardToDevToolsClient(DevToolsAgentHost* agent_host,
client_host->SendMessageToClient(message);
}
-void DevToolsManager::SaveAgentRuntimeState(DevToolsAgentHost* agent_host,
- const std::string& state) {
- agent_runtime_states_[agent_host] = state;
+void DevToolsManager::RuntimePropertyChanged(DevToolsAgentHost* agent_host,
+ const std::string& name,
+ const std::string& value) {
+ RuntimePropertiesMap::iterator it =
+ runtime_properties_map_.find(agent_host);
+ if (it == runtime_properties_map_.end()) {
+ std::pair<DevToolsAgentHost*, DevToolsRuntimeProperties> value(
+ agent_host,
+ DevToolsRuntimeProperties());
+ it = runtime_properties_map_.insert(value).first;
+ }
+ it->second[name] = value;
}
void DevToolsManager::ClientHostClosing(DevToolsClientHost* client_host) {
@@ -180,8 +189,8 @@ int DevToolsManager::DetachClientHost(RenderViewHost* from_rvh) {
int cookie = last_orphan_cookie_++;
orphan_client_hosts_[cookie] =
- std::pair<DevToolsClientHost*, std::string>(
- client_host, agent_runtime_states_[agent_host]);
+ std::pair<DevToolsClientHost*, DevToolsRuntimeProperties>(
+ client_host, runtime_properties_map_[agent_host]);
UnbindClientHost(agent_host, client_host);
return cookie;
@@ -195,16 +204,17 @@ void DevToolsManager::AttachClientHost(int client_host_cookie,
return;
DevToolsClientHost* client_host = (*it).second.first;
- DevToolsAgentHost* agent_host = RenderViewDevToolsAgentHost::FindFor(to_rvh);
- BindClientHost(agent_host, client_host);
- agent_host->Reattach((*it).second.second);
+ DevToolsAgentHost* agent_host = RenderViewDevToolsAgentHost::FindFor(
+ to_rvh);
+ BindClientHost(agent_host, client_host, (*it).second.second);
- orphan_client_hosts_.erase(it);
+ orphan_client_hosts_.erase(client_host_cookie);
}
void DevToolsManager::BindClientHost(
DevToolsAgentHost* agent_host,
- DevToolsClientHost* client_host) {
+ DevToolsClientHost* client_host,
+ const DevToolsRuntimeProperties& runtime_properties) {
DCHECK(agent_to_client_host_.find(agent_host) ==
agent_to_client_host_.end());
DCHECK(client_to_agent_host_.find(client_host) ==
@@ -218,11 +228,14 @@ void DevToolsManager::BindClientHost(
}
agent_to_client_host_[agent_host] = client_host;
client_to_agent_host_[client_host] = agent_host;
+ runtime_properties_map_[agent_host] = runtime_properties;
agent_host->set_close_listener(this);
int process_id = agent_host->GetRenderProcessId();
if (process_id != -1)
ChildProcessSecurityPolicy::GetInstance()->GrantReadRawCookies(process_id);
+
+ agent_host->Attach(runtime_properties);
}
void DevToolsManager::UnbindClientHost(DevToolsAgentHost* agent_host,
@@ -236,7 +249,7 @@ void DevToolsManager::UnbindClientHost(DevToolsAgentHost* agent_host,
agent_to_client_host_.erase(agent_host);
client_to_agent_host_.erase(client_host);
- agent_runtime_states_.erase(agent_host);
+ runtime_properties_map_.erase(agent_host);
if (client_to_agent_host_.empty()) {
BrowserThread::PostTask(
diff --git a/content/browser/debugger/devtools_manager.h b/content/browser/debugger/devtools_manager.h
index 623e0c9..1104203 100644
--- a/content/browser/debugger/devtools_manager.h
+++ b/content/browser/debugger/devtools_manager.h
@@ -25,6 +25,8 @@ class PrefService;
class RenderViewHost;
class TabContents;
+typedef std::map<std::string, std::string> DevToolsRuntimeProperties;
+
// This class is a singleton that manages DevToolsClientHost instances and
// routes messages between developer tools clients and agents.
//
@@ -55,8 +57,9 @@ class CONTENT_EXPORT DevToolsManager
void ForwardToDevToolsClient(DevToolsAgentHost* agent_host,
const IPC::Message& message);
- void SaveAgentRuntimeState(DevToolsAgentHost* agent_host,
- const std::string& state);
+ void RuntimePropertyChanged(DevToolsAgentHost* agent_host,
+ const std::string& name,
+ const std::string& value);
// Sends 'Attach' message to the agent using |dest_rvh| in case
// there is a DevToolsClientHost registered for the |inspected_rvh|.
@@ -98,7 +101,8 @@ class CONTENT_EXPORT DevToolsManager
DevToolsAgentHost* GetAgentHost(DevToolsClientHost* client_host);
void BindClientHost(DevToolsAgentHost* agent_host,
- DevToolsClientHost* client_host);
+ DevToolsClientHost* client_host,
+ const DevToolsRuntimeProperties& runtime_properties);
void UnbindClientHost(DevToolsAgentHost* agent_host,
DevToolsClientHost* client_host);
@@ -116,10 +120,12 @@ class CONTENT_EXPORT DevToolsManager
ClientHostToInspectedRvhMap;
ClientHostToInspectedRvhMap client_to_agent_host_;
- typedef std::map<DevToolsAgentHost*, std::string> AgentRuntimeStates;
- AgentRuntimeStates agent_runtime_states_;
+ typedef std::map<DevToolsAgentHost*, DevToolsRuntimeProperties>
+ RuntimePropertiesMap;
+ RuntimePropertiesMap runtime_properties_map_;
- typedef std::map<int, std::pair<DevToolsClientHost*, std::string> >
+ typedef std::map<int,
+ std::pair<DevToolsClientHost*, DevToolsRuntimeProperties> >
OrphanClientHosts;
OrphanClientHosts orphan_client_hosts_;
int last_orphan_cookie_;
diff --git a/content/browser/debugger/render_view_devtools_agent_host.cc b/content/browser/debugger/render_view_devtools_agent_host.cc
index a9937da..188756a 100644
--- a/content/browser/debugger/render_view_devtools_agent_host.cc
+++ b/content/browser/debugger/render_view_devtools_agent_host.cc
@@ -78,8 +78,8 @@ bool RenderViewDevToolsAgentHost::OnMessageReceived(
bool handled = true;
IPC_BEGIN_MESSAGE_MAP(RenderViewDevToolsAgentHost, message)
IPC_MESSAGE_HANDLER(DevToolsHostMsg_ForwardToClient, OnForwardToClient)
- IPC_MESSAGE_HANDLER(DevToolsHostMsg_SaveAgentRuntimeState,
- OnSaveAgentRuntimeState)
+ IPC_MESSAGE_HANDLER(DevToolsHostMsg_RuntimePropertyChanged,
+ OnRuntimePropertyChanged)
IPC_MESSAGE_HANDLER(DevToolsHostMsg_ClearBrowserCache, OnClearBrowserCache)
IPC_MESSAGE_HANDLER(DevToolsHostMsg_ClearBrowserCookies,
OnClearBrowserCookies)
@@ -88,9 +88,11 @@ bool RenderViewDevToolsAgentHost::OnMessageReceived(
return handled;
}
-void RenderViewDevToolsAgentHost::OnSaveAgentRuntimeState(
- const std::string& state) {
- DevToolsManager::GetInstance()->SaveAgentRuntimeState(this, state);
+void RenderViewDevToolsAgentHost::OnRuntimePropertyChanged(
+ const std::string& name,
+ const std::string& value) {
+ DevToolsManager::GetInstance()->RuntimePropertyChanged(
+ this, name, value);
}
void RenderViewDevToolsAgentHost::OnForwardToClient(
diff --git a/content/browser/debugger/render_view_devtools_agent_host.h b/content/browser/debugger/render_view_devtools_agent_host.h
index 329369b..0a3193c 100644
--- a/content/browser/debugger/render_view_devtools_agent_host.h
+++ b/content/browser/debugger/render_view_devtools_agent_host.h
@@ -36,7 +36,8 @@ class CONTENT_EXPORT RenderViewDevToolsAgentHost
virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE;
void OnForwardToClient(const IPC::Message& message);
- void OnSaveAgentRuntimeState(const std::string& state);
+ void OnRuntimePropertyChanged(const std::string& name,
+ const std::string& value);
void OnClearBrowserCache();
void OnClearBrowserCookies();
diff --git a/content/common/devtools_messages.h b/content/common/devtools_messages.h
index 5101049..5f09147 100644
--- a/content/common/devtools_messages.h
+++ b/content/common/devtools_messages.h
@@ -45,6 +45,14 @@
#include "content/common/content_export.h"
#include "ipc/ipc_message_macros.h"
+// Singly-included section.
+#ifndef CONTENT_COMMON_DEVTOOLS_MESSAGES_H_
+#define CONTENT_COMMON_DEVTOOLS_MESSAGES_H_
+
+typedef std::map<std::string, std::string> DevToolsRuntimeProperties;
+
+#endif // CONTENT_COMMON_DEVTOOLS_MESSAGES_H_
+
#undef IPC_MESSAGE_EXPORT
#define IPC_MESSAGE_EXPORT CONTENT_EXPORT
@@ -65,12 +73,8 @@ IPC_MESSAGE_ROUTED1(DevToolsClientMsg_DebuggerOutput,
// These are messages sent from DevToolsClient to DevToolsAgent through the
// browser.
// Tells agent that there is a client host connected to it.
-IPC_MESSAGE_ROUTED0(DevToolsAgentMsg_Attach)
-
-// Tells agent that a client host was disconnected from another agent and
-// connected to this one.
-IPC_MESSAGE_ROUTED1(DevToolsAgentMsg_Reattach,
- std::string /* agent_state */)
+IPC_MESSAGE_ROUTED1(DevToolsAgentMsg_Attach,
+ DevToolsRuntimeProperties /* properties */)
// Tells agent that there is no longer a client host connected to it.
IPC_MESSAGE_ROUTED0(DevToolsAgentMsg_Detach)
@@ -140,10 +144,11 @@ IPC_MESSAGE_ROUTED2(DevToolsHostMsg_SaveAs,
std::string /* file_name */,
std::string /* content */)
-// Updates agent runtime state stored in devtools manager in order to support
+// Updates runtime features store in devtools manager in order to support
// cross-navigation instrumentation.
-IPC_MESSAGE_ROUTED1(DevToolsHostMsg_SaveAgentRuntimeState,
- std::string /* state */)
+IPC_MESSAGE_ROUTED2(DevToolsHostMsg_RuntimePropertyChanged,
+ std::string /* name */,
+ std::string /* value */)
// Clears browser cache.
IPC_MESSAGE_ROUTED0(DevToolsHostMsg_ClearBrowserCache)
diff --git a/content/renderer/devtools_agent.cc b/content/renderer/devtools_agent.cc
index 1934641..c9a27bb 100644
--- a/content/renderer/devtools_agent.cc
+++ b/content/renderer/devtools_agent.cc
@@ -78,7 +78,6 @@ bool DevToolsAgent::OnMessageReceived(const IPC::Message& message) {
bool handled = true;
IPC_BEGIN_MESSAGE_MAP(DevToolsAgent, message)
IPC_MESSAGE_HANDLER(DevToolsAgentMsg_Attach, OnAttach)
- IPC_MESSAGE_HANDLER(DevToolsAgentMsg_Reattach, OnReattach)
IPC_MESSAGE_HANDLER(DevToolsAgentMsg_Detach, OnDetach)
IPC_MESSAGE_HANDLER(DevToolsAgentMsg_FrontendLoaded, OnFrontendLoaded)
IPC_MESSAGE_HANDLER(DevToolsAgentMsg_DispatchOnInspectorBackend,
@@ -112,9 +111,22 @@ int DevToolsAgent::hostIdentifier() {
return routing_id();
}
-void DevToolsAgent::saveAgentRuntimeState(
- const WebKit::WebString& state) {
- Send(new DevToolsHostMsg_SaveAgentRuntimeState(routing_id(), state.utf8()));
+void DevToolsAgent::runtimeFeatureStateChanged(
+ const WebKit::WebString& feature,
+ bool enabled) {
+ Send(new DevToolsHostMsg_RuntimePropertyChanged(
+ routing_id(),
+ feature.utf8(),
+ enabled ? "true" : "false"));
+}
+
+void DevToolsAgent::runtimePropertyChanged(
+ const WebKit::WebString& name,
+ const WebKit::WebString& value) {
+ Send(new DevToolsHostMsg_RuntimePropertyChanged(
+ routing_id(),
+ name.utf8(),
+ value.utf8()));
}
WebKit::WebDevToolsAgentClient::WebKitClientMessageLoop*
@@ -144,19 +156,18 @@ DevToolsAgent* DevToolsAgent::FromHostId(int host_id) {
return NULL;
}
-void DevToolsAgent::OnAttach() {
+void DevToolsAgent::OnAttach(
+ const DevToolsRuntimeProperties& runtime_properties) {
WebDevToolsAgent* web_agent = GetWebAgent();
if (web_agent) {
web_agent->attach();
is_attached_ = true;
- }
-}
-
-void DevToolsAgent::OnReattach(const std::string& agent_state) {
- WebDevToolsAgent* web_agent = GetWebAgent();
- if (web_agent) {
- web_agent->reattach(WebString::fromUTF8(agent_state));
- is_attached_ = true;
+ for (DevToolsRuntimeProperties::const_iterator it =
+ runtime_properties.begin();
+ it != runtime_properties.end(); ++it) {
+ web_agent->setRuntimeProperty(WebString::fromUTF8(it->first),
+ WebString::fromUTF8(it->second));
+ }
}
}
diff --git a/content/renderer/devtools_agent.h b/content/renderer/devtools_agent.h
index a527569..64d6254 100644
--- a/content/renderer/devtools_agent.h
+++ b/content/renderer/devtools_agent.h
@@ -49,15 +49,17 @@ class DevToolsAgent : public content::RenderViewObserver,
virtual void sendDebuggerOutput(const WebKit::WebString& data);
virtual int hostIdentifier();
- virtual void saveAgentRuntimeState(const WebKit::WebString& state);
+ virtual void runtimeFeatureStateChanged(const WebKit::WebString& feature,
+ bool enabled);
+ virtual void runtimePropertyChanged(const WebKit::WebString& name,
+ const WebKit::WebString& value);
virtual WebKit::WebDevToolsAgentClient::WebKitClientMessageLoop*
createClientMessageLoop();
virtual bool exposeV8DebuggerProtocol();
virtual void clearBrowserCache();
virtual void clearBrowserCookies();
- void OnAttach();
- void OnReattach(const std::string& agent_state);
+ void OnAttach(const DevToolsRuntimeProperties& runtime_properties);
void OnDetach();
void OnFrontendLoaded();
void OnDispatchOnInspectorBackend(const std::string& message);
diff --git a/content/renderer/worker_devtools_agent_proxy.cc b/content/renderer/worker_devtools_agent_proxy.cc
index 7f898ad..6a1907b 100644
--- a/content/renderer/worker_devtools_agent_proxy.cc
+++ b/content/renderer/worker_devtools_agent_proxy.cc
@@ -44,7 +44,7 @@ bool WorkerDevToolsAgentProxy::OnMessageReceived(const IPC::Message& message) {
}
void WorkerDevToolsAgentProxy::AttachDevTools() {
- Send(new DevToolsAgentMsg_Attach(route_id_));
+ Send(new DevToolsAgentMsg_Attach(route_id_, DevToolsRuntimeProperties()));
}
void WorkerDevToolsAgentProxy::DetachDevTools() {
diff --git a/content/worker/worker_devtools_agent.cc b/content/worker/worker_devtools_agent.cc
index 8498fea..1ef2f03 100644
--- a/content/worker/worker_devtools_agent.cc
+++ b/content/worker/worker_devtools_agent.cc
@@ -32,7 +32,6 @@ class WorkerDevToolsAgentImpl : public WorkerDevToolsAgent {
bool handled = true;
IPC_BEGIN_MESSAGE_MAP(WorkerDevToolsAgentImpl, message)
IPC_MESSAGE_HANDLER(DevToolsAgentMsg_Attach, OnAttach)
- IPC_MESSAGE_HANDLER(DevToolsAgentMsg_Reattach, OnReattach)
IPC_MESSAGE_HANDLER(DevToolsAgentMsg_Detach, OnDetach)
IPC_MESSAGE_HANDLER(DevToolsAgentMsg_DispatchOnInspectorBackend,
OnDispatchOnInspectorBackend)
@@ -43,14 +42,10 @@ class WorkerDevToolsAgentImpl : public WorkerDevToolsAgent {
virtual void SendDevToolsMessage(const WebKit::WebString& message);
- void OnAttach() {
+ void OnAttach(const DevToolsRuntimeProperties&) {
webworker_->attachDevTools();
}
- void OnReattach(const std::string&) {
- OnAttach();
- }
-
void OnDetach() {
webworker_->detachDevTools();
}