diff options
-rw-r--r-- | content/browser/debugger/devtools_agent_host.cc | 10 | ||||
-rw-r--r-- | content/browser/debugger/devtools_agent_host.h | 3 | ||||
-rw-r--r-- | content/browser/debugger/devtools_manager.cc | 39 | ||||
-rw-r--r-- | content/browser/debugger/devtools_manager.h | 18 | ||||
-rw-r--r-- | content/browser/debugger/render_view_devtools_agent_host.cc | 12 | ||||
-rw-r--r-- | content/browser/debugger/render_view_devtools_agent_host.h | 3 | ||||
-rw-r--r-- | content/common/devtools_messages.h | 23 | ||||
-rw-r--r-- | content/renderer/devtools_agent.cc | 37 | ||||
-rw-r--r-- | content/renderer/devtools_agent.h | 8 | ||||
-rw-r--r-- | content/renderer/worker_devtools_agent_proxy.cc | 2 | ||||
-rw-r--r-- | content/worker/worker_devtools_agent.cc | 7 |
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(); } |