Commit 2b8cf900 authored by yurys@chromium.org's avatar yurys@chromium.org

DevTools handler now handles messages from both client and agent and is...

DevTools handler now handles messages from both client and agent and is created for all new render_view_hosts. This patch moves handling of IPC messages from agent to RenderViewDevToolsAgentHost and handling of client IPC messages to DevToolsWindow.

BUG=None
TEST=Existing DevTools tests

Review URL: http://codereview.chromium.org/7778010

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@98964 0039d316-1c4b-4281-b951-d872f2087c98
parent 7d18ef26
...@@ -55,7 +55,6 @@ ...@@ -55,7 +55,6 @@
#include "chrome/common/url_constants.h" #include "chrome/common/url_constants.h"
#include "content/browser/browser_url_handler.h" #include "content/browser/browser_url_handler.h"
#include "content/browser/browsing_instance.h" #include "content/browser/browsing_instance.h"
#include "content/browser/debugger/devtools_handler.h"
#include "content/browser/plugin_process_host.h" #include "content/browser/plugin_process_host.h"
#include "content/browser/renderer_host/browser_render_process_host.h" #include "content/browser/renderer_host/browser_render_process_host.h"
#include "content/browser/renderer_host/render_view_host.h" #include "content/browser/renderer_host/render_view_host.h"
...@@ -132,7 +131,6 @@ TabContentsView* ChromeContentBrowserClient::CreateTabContentsView( ...@@ -132,7 +131,6 @@ TabContentsView* ChromeContentBrowserClient::CreateTabContentsView(
void ChromeContentBrowserClient::RenderViewHostCreated( void ChromeContentBrowserClient::RenderViewHostCreated(
RenderViewHost* render_view_host) { RenderViewHost* render_view_host) {
new ChromeRenderViewHostObserver(render_view_host); new ChromeRenderViewHostObserver(render_view_host);
new DevToolsHandler(render_view_host);
new ExtensionMessageHandler(render_view_host); new ExtensionMessageHandler(render_view_host);
} }
......
...@@ -30,7 +30,9 @@ ...@@ -30,7 +30,9 @@
#include "chrome/common/render_messages.h" #include "chrome/common/render_messages.h"
#include "chrome/common/url_constants.h" #include "chrome/common/url_constants.h"
#include "content/browser/browsing_instance.h" #include "content/browser/browsing_instance.h"
#include "content/browser/content_browser_client.h"
#include "content/browser/debugger/devtools_manager.h" #include "content/browser/debugger/devtools_manager.h"
#include "content/browser/debugger/worker_devtools_manager_io.h"
#include "content/browser/in_process_webkit/session_storage_namespace.h" #include "content/browser/in_process_webkit/session_storage_namespace.h"
#include "content/browser/load_notification_details.h" #include "content/browser/load_notification_details.h"
#include "content/browser/renderer_host/render_view_host.h" #include "content/browser/renderer_host/render_view_host.h"
...@@ -39,6 +41,7 @@ ...@@ -39,6 +41,7 @@
#include "content/browser/tab_contents/tab_contents.h" #include "content/browser/tab_contents/tab_contents.h"
#include "content/browser/tab_contents/tab_contents_view.h" #include "content/browser/tab_contents/tab_contents_view.h"
#include "content/common/bindings_policy.h" #include "content/common/bindings_policy.h"
#include "content/common/devtools_messages.h"
#include "content/common/notification_service.h" #include "content/common/notification_service.h"
#include "grit/generated_resources.h" #include "grit/generated_resources.h"
...@@ -81,7 +84,7 @@ DevToolsWindow* DevToolsWindow::FindDevToolsWindow( ...@@ -81,7 +84,7 @@ DevToolsWindow* DevToolsWindow::FindDevToolsWindow(
// static // static
DevToolsWindow* DevToolsWindow::CreateDevToolsWindowForWorker( DevToolsWindow* DevToolsWindow::CreateDevToolsWindowForWorker(
Profile* profile) { Profile* profile) {
return new DevToolsWindow(profile, NULL, false, true); return Create(profile, NULL, false, true);
} }
// static // static
...@@ -108,25 +111,34 @@ void DevToolsWindow::InspectElement(RenderViewHost* inspected_rvh, ...@@ -108,25 +111,34 @@ void DevToolsWindow::InspectElement(RenderViewHost* inspected_rvh,
} }
DevToolsWindow::DevToolsWindow(Profile* profile, DevToolsWindow* DevToolsWindow::Create(
Profile* profile,
RenderViewHost* inspected_rvh,
bool docked,
bool shared_worker_frontend) {
// Create TabContents with devtools.
TabContentsWrapper* tab_contents =
Browser::TabContentsFactory(profile, NULL, MSG_ROUTING_NONE, NULL, NULL);
tab_contents->render_view_host()->AllowBindings(BindingsPolicy::WEB_UI);
tab_contents->controller().LoadURL(
GetDevToolsUrl(profile, docked, shared_worker_frontend),
GURL(),
PageTransition::START_PAGE);
return new DevToolsWindow(tab_contents, profile, inspected_rvh, docked);
}
DevToolsWindow::DevToolsWindow(TabContentsWrapper* tab_contents,
Profile* profile,
RenderViewHost* inspected_rvh, RenderViewHost* inspected_rvh,
bool docked, bool docked)
bool shared_worker_frontend) : RenderViewHostObserver(tab_contents->render_view_host()),
: profile_(profile), profile_(profile),
inspected_tab_(NULL), inspected_tab_(NULL),
tab_contents_(tab_contents),
browser_(NULL), browser_(NULL),
docked_(docked), docked_(docked),
is_loaded_(false), is_loaded_(false),
action_on_load_(DEVTOOLS_TOGGLE_ACTION_NONE), action_on_load_(DEVTOOLS_TOGGLE_ACTION_NONE) {
shared_worker_frontend_(shared_worker_frontend) {
// Create TabContents with devtools.
tab_contents_ =
Browser::TabContentsFactory(profile, NULL, MSG_ROUTING_NONE, NULL, NULL);
tab_contents_->tab_contents()->
render_view_host()->AllowBindings(BindingsPolicy::WEB_UI);
tab_contents_->controller().LoadURL(
GetDevToolsUrl(), GURL(), PageTransition::START_PAGE);
// Wipe out page icon so that the default application icon is used. // Wipe out page icon so that the default application icon is used.
NavigationEntry* entry = tab_contents_->controller().GetActiveEntry(); NavigationEntry* entry = tab_contents_->controller().GetActiveEntry();
entry->favicon().set_bitmap(SkBitmap()); entry->favicon().set_bitmap(SkBitmap());
...@@ -155,8 +167,7 @@ DevToolsWindow::~DevToolsWindow() { ...@@ -155,8 +167,7 @@ DevToolsWindow::~DevToolsWindow() {
} }
void DevToolsWindow::SendMessageToClient(const IPC::Message& message) { void DevToolsWindow::SendMessageToClient(const IPC::Message& message) {
RenderViewHost* target_host = RenderViewHost* target_host = tab_contents_->render_view_host();
tab_contents_->tab_contents()->render_view_host();
IPC::Message* m = new IPC::Message(message); IPC::Message* m = new IPC::Message(message);
m->set_routing_id(target_host->routing_id()); m->set_routing_id(target_host->routing_id());
target_host->Send(m); target_host->Send(m);
...@@ -237,7 +248,7 @@ void DevToolsWindow::Show(DevToolsToggleAction action) { ...@@ -237,7 +248,7 @@ void DevToolsWindow::Show(DevToolsToggleAction action) {
ScheduleAction(action); ScheduleAction(action);
} }
void DevToolsWindow::RequestActivate() { void DevToolsWindow::OnActivateWindow() {
if (!docked_) { if (!docked_) {
if (!browser_->window()->IsActive()) { if (!browser_->window()->IsActive()) {
browser_->window()->Activate(); browser_->window()->Activate();
...@@ -283,14 +294,14 @@ void DevToolsWindow::RequestSetDocked(bool docked) { ...@@ -283,14 +294,14 @@ void DevToolsWindow::RequestSetDocked(bool docked) {
Show(DEVTOOLS_TOGGLE_ACTION_NONE); Show(DEVTOOLS_TOGGLE_ACTION_NONE);
} }
void DevToolsWindow::RequestClose() { void DevToolsWindow::OnCloseWindow() {
DCHECK(docked_); DCHECK(docked_);
NotifyCloseListener(); NotifyCloseListener();
InspectedTabClosing(); InspectedTabClosing();
} }
void DevToolsWindow::RequestSaveAs(const std::string& suggested_file_name, void DevToolsWindow::OnSaveAs(const std::string& suggested_file_name,
const std::string& content) { const std::string& content) {
DevToolsFileUtil::SaveAs(tab_contents_->profile(), DevToolsFileUtil::SaveAs(tab_contents_->profile(),
suggested_file_name, suggested_file_name,
content); content);
...@@ -485,8 +496,9 @@ std::string SkColorToRGBAString(SkColor color) { ...@@ -485,8 +496,9 @@ std::string SkColorToRGBAString(SkColor color) {
base::DoubleToString(SkColorGetA(color) / 255.0).c_str()); base::DoubleToString(SkColorGetA(color) / 255.0).c_str());
} }
GURL DevToolsWindow::GetDevToolsUrl() { GURL DevToolsWindow::GetDevToolsUrl(Profile* profile, bool docked,
ThemeService* tp = ThemeServiceFactory::GetForProfile(profile_); bool shared_worker_frontend) {
ThemeService* tp = ThemeServiceFactory::GetForProfile(profile);
CHECK(tp); CHECK(tp);
SkColor color_toolbar = SkColor color_toolbar =
...@@ -497,10 +509,10 @@ GURL DevToolsWindow::GetDevToolsUrl() { ...@@ -497,10 +509,10 @@ GURL DevToolsWindow::GetDevToolsUrl() {
std::string url_string = StringPrintf( std::string url_string = StringPrintf(
"%sdevtools.html?docked=%s&toolbarColor=%s&textColor=%s%s", "%sdevtools.html?docked=%s&toolbarColor=%s&textColor=%s%s",
chrome::kChromeUIDevToolsURL, chrome::kChromeUIDevToolsURL,
docked_ ? "true" : "false", docked ? "true" : "false",
SkColorToRGBAString(color_toolbar).c_str(), SkColorToRGBAString(color_toolbar).c_str(),
SkColorToRGBAString(color_tab_text).c_str(), SkColorToRGBAString(color_tab_text).c_str(),
shared_worker_frontend_ ? "&isSharedWorker=true" : ""); shared_worker_frontend ? "&isSharedWorker=true" : "");
return GURL(url_string); return GURL(url_string);
} }
...@@ -577,7 +589,7 @@ DevToolsWindow* DevToolsWindow::ToggleDevToolsWindow( ...@@ -577,7 +589,7 @@ DevToolsWindow* DevToolsWindow::ToggleDevToolsWindow(
Profile* profile = Profile::FromBrowserContext( Profile* profile = Profile::FromBrowserContext(
inspected_rvh->process()->browser_context()); inspected_rvh->process()->browser_context());
bool docked = profile->GetPrefs()->GetBoolean(prefs::kDevToolsOpenDocked); bool docked = profile->GetPrefs()->GetBoolean(prefs::kDevToolsOpenDocked);
window = new DevToolsWindow(profile, inspected_rvh, docked, false); window = Create(profile, inspected_rvh, docked, false);
manager->RegisterDevToolsClientHostFor(inspected_rvh, window); manager->RegisterDevToolsClientHostFor(inspected_rvh, window);
do_open = true; do_open = true;
} }
...@@ -602,6 +614,42 @@ DevToolsWindow* DevToolsWindow::AsDevToolsWindow( ...@@ -602,6 +614,42 @@ DevToolsWindow* DevToolsWindow::AsDevToolsWindow(
return NULL; return NULL;
} }
void DevToolsWindow::RenderViewHostDestroyed() {
// Don't delete |this| here, do it on NOTIFICATION_TAB_CLOSING event.
}
bool DevToolsWindow::OnMessageReceived(const IPC::Message& message) {
bool handled = true;
IPC_BEGIN_MESSAGE_MAP(DevToolsWindow, message)
IPC_MESSAGE_HANDLER(DevToolsHostMsg_ForwardToAgent, OnForwardToAgent)
IPC_MESSAGE_HANDLER(DevToolsHostMsg_ActivateWindow, OnActivateWindow)
IPC_MESSAGE_HANDLER(DevToolsHostMsg_CloseWindow, OnCloseWindow)
IPC_MESSAGE_HANDLER(DevToolsHostMsg_RequestDockWindow, OnRequestDockWindow)
IPC_MESSAGE_HANDLER(DevToolsHostMsg_RequestUndockWindow,
OnRequestUndockWindow)
IPC_MESSAGE_HANDLER(DevToolsHostMsg_SaveAs,
OnSaveAs)
IPC_MESSAGE_UNHANDLED(handled = false)
IPC_END_MESSAGE_MAP()
return handled;
}
void DevToolsWindow::OnForwardToAgent(const IPC::Message& message) {
if (DevToolsManager::GetInstance()->
ForwardToDevToolsAgent(this, message))
return;
WorkerDevToolsManagerIO::ForwardToWorkerDevToolsAgentOnUIThread(
this, message);
}
void DevToolsWindow::OnRequestDockWindow() {
RequestSetDocked(true);
}
void DevToolsWindow::OnRequestUndockWindow() {
RequestSetDocked(false);
}
content::JavaScriptDialogCreator* DevToolsWindow::GetJavaScriptDialogCreator() { content::JavaScriptDialogCreator* DevToolsWindow::GetJavaScriptDialogCreator() {
if (inspected_tab_ && inspected_tab_->tab_contents()->delegate()) { if (inspected_tab_ && inspected_tab_->tab_contents()->delegate()) {
return inspected_tab_->tab_contents()->delegate()-> return inspected_tab_->tab_contents()->delegate()->
......
...@@ -10,8 +10,10 @@ ...@@ -10,8 +10,10 @@
#include <vector> #include <vector>
#include "base/basictypes.h" #include "base/basictypes.h"
#include "base/memory/scoped_ptr.h"
#include "chrome/browser/debugger/devtools_toggle_action.h" #include "chrome/browser/debugger/devtools_toggle_action.h"
#include "content/browser/debugger/devtools_client_host.h" #include "content/browser/debugger/devtools_client_host.h"
#include "content/browser/renderer_host/render_view_host_observer.h"
#include "content/browser/tab_contents/tab_contents_delegate.h" #include "content/browser/tab_contents/tab_contents_delegate.h"
#include "content/common/notification_observer.h" #include "content/common/notification_observer.h"
#include "content/common/notification_registrar.h" #include "content/common/notification_registrar.h"
...@@ -33,8 +35,9 @@ class Value; ...@@ -33,8 +35,9 @@ class Value;
class DevToolsWindow class DevToolsWindow
: public DevToolsClientHost, : public DevToolsClientHost,
public NotificationObserver, private NotificationObserver,
public TabContentsDelegate { private TabContentsDelegate,
private RenderViewHostObserver {
public: public:
static const char kDevToolsApp[]; static const char kDevToolsApp[];
static void RegisterUserPrefs(PrefService* prefs); static void RegisterUserPrefs(PrefService* prefs);
...@@ -54,11 +57,6 @@ class DevToolsWindow ...@@ -54,11 +57,6 @@ class DevToolsWindow
virtual void InspectedTabClosing(); virtual void InspectedTabClosing();
virtual void TabReplaced(TabContents* new_tab); virtual void TabReplaced(TabContents* new_tab);
virtual RenderViewHost* GetClientRenderViewHost(); virtual RenderViewHost* GetClientRenderViewHost();
virtual void RequestActivate();
virtual void RequestSetDocked(bool docked);
virtual void RequestClose();
virtual void RequestSaveAs(const std::string& suggested_file_name,
const std::string& content);
RenderViewHost* GetRenderViewHost(); RenderViewHost* GetRenderViewHost();
void Show(DevToolsToggleAction action); void Show(DevToolsToggleAction action);
...@@ -68,8 +66,11 @@ class DevToolsWindow ...@@ -68,8 +66,11 @@ class DevToolsWindow
bool is_docked() { return docked_; } bool is_docked() { return docked_; }
private: private:
DevToolsWindow(Profile* profile, RenderViewHost* inspected_rvh, bool docked, static DevToolsWindow* Create(Profile* profile,
bool shared_worker_frontend); RenderViewHost* inspected_rvh,
bool docked, bool shared_worker_frontend);
DevToolsWindow(TabContentsWrapper* tab_contents, Profile* profile,
RenderViewHost* inspected_rvh, bool docked);
void CreateDevToolsBrowser(); void CreateDevToolsBrowser();
bool FindInspectedBrowserAndTabIndex(Browser**, int* tab); bool FindInspectedBrowserAndTabIndex(Browser**, int* tab);
...@@ -84,7 +85,8 @@ class DevToolsWindow ...@@ -84,7 +85,8 @@ class DevToolsWindow
void ScheduleAction(DevToolsToggleAction action); void ScheduleAction(DevToolsToggleAction action);
void DoAction(); void DoAction();
GURL GetDevToolsUrl(); static GURL GetDevToolsUrl(Profile* profile, bool docked,
bool shared_worker_frontend);
void UpdateTheme(); void UpdateTheme();
void AddDevToolsExtensionsToClient(); void AddDevToolsExtensionsToClient();
void CallClientFunction(const string16& function_name, void CallClientFunction(const string16& function_name,
...@@ -118,6 +120,19 @@ class DevToolsWindow ...@@ -118,6 +120,19 @@ class DevToolsWindow
DevToolsToggleAction action); DevToolsToggleAction action);
static DevToolsWindow* AsDevToolsWindow(DevToolsClientHost*); static DevToolsWindow* AsDevToolsWindow(DevToolsClientHost*);
// RenderViewHostObserver overrides.
virtual void RenderViewHostDestroyed() OVERRIDE;
virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE;
void OnForwardToAgent(const IPC::Message& message);
void OnActivateWindow();
void OnCloseWindow();
void OnRequestDockWindow();
void OnRequestUndockWindow();
void OnSaveAs(const std::string& file_name,
const std::string& content);
void RequestSetDocked(bool docked);
Profile* profile_; Profile* profile_;
TabContentsWrapper* inspected_tab_; TabContentsWrapper* inspected_tab_;
TabContentsWrapper* tab_contents_; TabContentsWrapper* tab_contents_;
...@@ -125,7 +140,6 @@ class DevToolsWindow ...@@ -125,7 +140,6 @@ class DevToolsWindow
bool docked_; bool docked_;
bool is_loaded_; bool is_loaded_;
DevToolsToggleAction action_on_load_; DevToolsToggleAction action_on_load_;
const bool shared_worker_frontend_;
NotificationRegistrar registrar_; NotificationRegistrar registrar_;
DISALLOW_COPY_AND_ASSIGN(DevToolsWindow); DISALLOW_COPY_AND_ASSIGN(DevToolsWindow);
}; };
......
...@@ -55,24 +55,6 @@ class DevToolsClientHost { ...@@ -55,24 +55,6 @@ class DevToolsClientHost {
// TabStripModel::ReplaceTabContentsAt. // TabStripModel::ReplaceTabContentsAt.
virtual void TabReplaced(TabContents* new_tab) = 0; virtual void TabReplaced(TabContents* new_tab) = 0;
// Default front-end implementation requests that the window representing
// this client host is activated.
virtual void RequestActivate() {}
// Default front-end implementation requests that the window representing
// this client host is (un)docked.
virtual void RequestSetDocked(bool docked) {}
// Default front-end implementation requests that the window representing
// this client host is closed.
virtual void RequestClose() {}
// Default front-end implementation requests that the Save As dialog using
// default save location is shown with |suggested_file_name| as the default
// name and |content| as the data to save.
virtual void RequestSaveAs(const std::string& suggested_file_name,
const std::string& content) {}
// Returns client (front-end) RenderViewHost implementation of this // Returns client (front-end) RenderViewHost implementation of this
// client host if applicable. NULL otherwise. // client host if applicable. NULL otherwise.
virtual RenderViewHost* GetClientRenderViewHost(); virtual RenderViewHost* GetClientRenderViewHost();
......
// Copyright (c) 2011 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/debugger/devtools_handler.h"
#include "content/browser/content_browser_client.h"
#include "content/browser/debugger/devtools_client_host.h"
#include "content/browser/debugger/devtools_manager.h"
#include "content/browser/debugger/worker_devtools_manager_io.h"
#include "content/browser/renderer_host/render_view_host.h"
#include "content/browser/tab_contents/tab_contents.h"
#include "content/common/devtools_messages.h"
DevToolsHandler::DevToolsHandler(RenderViewHost* render_view_host)
: RenderViewHostObserver(render_view_host) {
}
DevToolsHandler::~DevToolsHandler() {
}
bool DevToolsHandler::OnMessageReceived(const IPC::Message& message) {
bool handled = true;
IPC_BEGIN_MESSAGE_MAP(DevToolsHandler, message)
IPC_MESSAGE_HANDLER(DevToolsHostMsg_ForwardToAgent, OnForwardToAgent)
IPC_MESSAGE_HANDLER(DevToolsHostMsg_ForwardToClient, OnForwardToClient)
IPC_MESSAGE_HANDLER(DevToolsHostMsg_ActivateWindow, OnActivateWindow)
IPC_MESSAGE_HANDLER(DevToolsHostMsg_CloseWindow, OnCloseWindow)
IPC_MESSAGE_HANDLER(DevToolsHostMsg_RequestDockWindow, OnRequestDockWindow)
IPC_MESSAGE_HANDLER(DevToolsHostMsg_RequestUndockWindow,
OnRequestUndockWindow)
IPC_MESSAGE_HANDLER(DevToolsHostMsg_SaveAs,
OnSaveAs)
IPC_MESSAGE_HANDLER(DevToolsHostMsg_RuntimePropertyChanged,
OnRuntimePropertyChanged)
IPC_MESSAGE_HANDLER(DevToolsHostMsg_ClearBrowserCache, OnClearBrowserCache)
IPC_MESSAGE_HANDLER(DevToolsHostMsg_ClearBrowserCookies,
OnClearBrowserCookies)
IPC_MESSAGE_UNHANDLED(handled = false)
IPC_END_MESSAGE_MAP()
return handled;
}
void DevToolsHandler::OnForwardToAgent(const IPC::Message& message) {
DevToolsClientHost* client_host = GetOwnerClientHost();
if (!client_host)
return;
if (DevToolsManager::GetInstance()->
ForwardToDevToolsAgent(client_host, message))
return;
WorkerDevToolsManagerIO::ForwardToWorkerDevToolsAgentOnUIThread(
client_host, message);
}
void DevToolsHandler::OnForwardToClient(const IPC::Message& message) {
DevToolsManager::GetInstance()->ForwardToDevToolsClient(
render_view_host(), message);
}
void DevToolsHandler::OnActivateWindow() {
DevToolsClientHost* client_host = GetOwnerClientHost();
if (client_host)
client_host->RequestActivate();
}
void DevToolsHandler::OnCloseWindow() {
DevToolsClientHost* client_host = GetOwnerClientHost();
if (client_host)
client_host->RequestClose();
}
void DevToolsHandler::OnRequestDockWindow() {
DevToolsClientHost* client_host = GetOwnerClientHost();
if (client_host)
client_host->RequestSetDocked(true);
}
void DevToolsHandler::OnRequestUndockWindow() {
DevToolsClientHost* client_host = GetOwnerClientHost();
if (client_host)
client_host->RequestSetDocked(false);
}
void DevToolsHandler::OnSaveAs(const std::string& file_name,
const std::string& content) {
DevToolsClientHost* client_host = GetOwnerClientHost();
if (client_host)
client_host->RequestSaveAs(file_name, content);
}
void DevToolsHandler::OnRuntimePropertyChanged(const std::string& name,
const std::string& value) {
DevToolsManager::GetInstance()->RuntimePropertyChanged(
render_view_host(), name, value);
}
void DevToolsHandler::OnClearBrowserCache() {
content::GetContentClient()->browser()->ClearCache(render_view_host());
}
void DevToolsHandler::OnClearBrowserCookies() {
content::GetContentClient()->browser()->ClearCookies(render_view_host());
}
DevToolsClientHost* DevToolsHandler::GetOwnerClientHost() {
return DevToolsClientHost::FindOwnerClientHost(render_view_host());
}
// Copyright (c) 2011 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.
#ifndef CONTENT_BROWSER_DEBUGGER_DEVTOOLS_HANDLER_H_
#define CONTENT_BROWSER_DEBUGGER_DEVTOOLS_HANDLER_H_
#pragma once
#include "content/browser/renderer_host/render_view_host_observer.h"
class DevToolsClientHost;
class DevToolsHandler : public RenderViewHostObserver {
public:
explicit DevToolsHandler(RenderViewHost* render_view_host);
virtual ~DevToolsHandler();
// RenderViewHostObserver overrides.
virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE;
private:
void OnForwardToAgent(const IPC::Message& message);
void OnForwardToClient(const IPC::Message& message);
void OnActivateWindow();
void OnCloseWindow();
void OnRequestDockWindow();
void OnRequestUndockWindow();
void OnSaveAs(const std::string& file_name,
const std::string& content);
void OnRuntimePropertyChanged(const std::string& name,
const std::string& value);
void OnClearBrowserCache();
void OnClearBrowserCookies();
DevToolsClientHost* GetOwnerClientHost();
DISALLOW_COPY_AND_ASSIGN(DevToolsHandler);
};
#endif // CONTENT_BROWSER_DEBUGGER_DEVTOOLS_HANDLER_H_
...@@ -75,9 +75,9 @@ bool DevToolsManager::ForwardToDevToolsAgent(DevToolsClientHost* from, ...@@ -75,9 +75,9 @@ bool DevToolsManager::ForwardToDevToolsAgent(DevToolsClientHost* from,
return true; return true;
} }
void DevToolsManager::ForwardToDevToolsClient(RenderViewHost* inspected_rvh, void DevToolsManager::ForwardToDevToolsClient(DevToolsAgentHost* agent_host,
const IPC::Message& message) { const IPC::Message& message) {
DevToolsClientHost* client_host = GetDevToolsClientHostFor(inspected_rvh); DevToolsClientHost* client_host = GetDevToolsClientHostFor(agent_host);
if (!client_host) { if (!client_host) {
// Client window was closed while there were messages // Client window was closed while there were messages
// being sent to it. // being sent to it.
...@@ -86,11 +86,9 @@ void DevToolsManager::ForwardToDevToolsClient(RenderViewHost* inspected_rvh, ...@@ -86,11 +86,9 @@ void DevToolsManager::ForwardToDevToolsClient(RenderViewHost* inspected_rvh,
client_host->SendMessageToClient(message); client_host->SendMessageToClient(message);
} }
void DevToolsManager::RuntimePropertyChanged(RenderViewHost* inspected_rvh, void DevToolsManager::RuntimePropertyChanged(DevToolsAgentHost* agent_host,
const std::string& name, const std::string& name,
const std::string& value) { const std::string& value) {
DevToolsAgentHost* agent_host = RenderViewDevToolsAgentHost::FindFor(
inspected_rvh);
RuntimePropertiesMap::iterator it = RuntimePropertiesMap::iterator it =
runtime_properties_map_.find(agent_host); runtime_properties_map_.find(agent_host);
if (it == runtime_properties_map_.end()) { if (it == runtime_properties_map_.end()) {
...@@ -232,10 +230,8 @@ void DevToolsManager::SendAttachToAgent(DevToolsAgentHost* agent_host) { ...@@ -232,10 +230,8 @@ void DevToolsManager::SendAttachToAgent(DevToolsAgentHost* agent_host) {
} }
void DevToolsManager::SendDetachToAgent(DevToolsAgentHost* agent_host) { void DevToolsManager::SendDetachToAgent(DevToolsAgentHost* agent_host) {
if (agent_host) { agent_host->SendMessageToAgent(new DevToolsAgentMsg_Detach(
agent_host->SendMessageToAgent(new DevToolsAgentMsg_Detach( MSG_ROUTING_NONE));
MSG_ROUTING_NONE));
}
} }
void DevToolsManager::BindClientHost( void DevToolsManager::BindClientHost(
......
...@@ -52,10 +52,10 @@ class DevToolsManager : public DevToolsClientHost::CloseListener, ...@@ -52,10 +52,10 @@ class DevToolsManager : public DevToolsClientHost::CloseListener,
bool ForwardToDevToolsAgent(DevToolsClientHost* from, bool ForwardToDevToolsAgent(DevToolsClientHost* from,
const IPC::Message& message); const IPC::Message& message);
void ForwardToDevToolsClient(RenderViewHost* inspected_rvh, void ForwardToDevToolsClient(DevToolsAgentHost* agent_host,
const IPC::Message& message); const IPC::Message& message);
void RuntimePropertyChanged(RenderViewHost* inspected_rvh, void RuntimePropertyChanged(DevToolsAgentHost* agent_host,
const std::string& name, const std::string& name,
const std::string& value); const std::string& value);
......
...@@ -7,6 +7,7 @@ ...@@ -7,6 +7,7 @@
#include "content/browser/content_browser_client.h" #include "content/browser/content_browser_client.h"
#include "content/browser/debugger/devtools_client_host.h" #include "content/browser/debugger/devtools_client_host.h"
#include "content/browser/debugger/devtools_manager.h" #include "content/browser/debugger/devtools_manager.h"
#include "content/browser/debugger/render_view_devtools_agent_host.h"
#include "content/browser/mock_content_browser_client.h" #include "content/browser/mock_content_browser_client.h"
#include "content/browser/renderer_host/test_render_view_host.h" #include "content/browser/renderer_host/test_render_view_host.h"
#include "content/browser/tab_contents/tab_contents_delegate.h" #include "content/browser/tab_contents/tab_contents_delegate.h"
...@@ -158,7 +159,8 @@ TEST_F(DevToolsManagerTest, ForwardMessageToClient) { ...@@ -158,7 +159,8 @@ TEST_F(DevToolsManagerTest, ForwardMessageToClient) {
EXPECT_EQ(0, TestDevToolsClientHost::close_counter); EXPECT_EQ(0, TestDevToolsClientHost::close_counter);
IPC::Message m; IPC::Message m;
manager.ForwardToDevToolsClient(rvh(), m); DevToolsAgentHost* agent_host = RenderViewDevToolsAgentHost::FindFor(rvh());
manager.ForwardToDevToolsClient(agent_host, m);
EXPECT_TRUE(&m == client_host.last_sent_message); EXPECT_TRUE(&m == client_host.last_sent_message);
client_host.Close(); client_host.Close();
......
...@@ -5,9 +5,13 @@ ...@@ -5,9 +5,13 @@
#include "content/browser/debugger/render_view_devtools_agent_host.h" #include "content/browser/debugger/render_view_devtools_agent_host.h"
#include "base/basictypes.h" #include "base/basictypes.h"
#include "content/browser/content_browser_client.h"
#include "content/browser/debugger/devtools_manager.h"
#include "content/browser/debugger/render_view_devtools_agent_host.h"
#include "content/browser/renderer_host/render_process_host.h" #include "content/browser/renderer_host/render_process_host.h"
#include "content/browser/renderer_host/render_view_host.h" #include "content/browser/renderer_host/render_view_host.h"
#include "content/browser/site_instance.h" #include "content/browser/site_instance.h"
#include "content/common/devtools_messages.h"
#include "content/common/notification_service.h" #include "content/common/notification_service.h"
RenderViewDevToolsAgentHost::Instances RenderViewDevToolsAgentHost::instances_; RenderViewDevToolsAgentHost::Instances RenderViewDevToolsAgentHost::instances_;
...@@ -21,9 +25,8 @@ DevToolsAgentHost* RenderViewDevToolsAgentHost::FindFor( ...@@ -21,9 +25,8 @@ DevToolsAgentHost* RenderViewDevToolsAgentHost::FindFor(
} }
RenderViewDevToolsAgentHost::RenderViewDevToolsAgentHost(RenderViewHost* rvh) RenderViewDevToolsAgentHost::RenderViewDevToolsAgentHost(RenderViewHost* rvh)
: render_view_host_(rvh) { : RenderViewHostObserver(rvh),
registrar_.Add(this, content::NOTIFICATION_RENDER_VIEW_HOST_DELETED, render_view_host_(rvh) {
Source<RenderViewHost>(rvh));
instances_[rvh] = this; instances_[rvh] = this;
} }
...@@ -44,15 +47,48 @@ int RenderViewDevToolsAgentHost::GetRenderProcessId() { ...@@ -44,15 +47,48 @@ int RenderViewDevToolsAgentHost::GetRenderProcessId() {
return render_view_host_->process()->id(); return render_view_host_->process()->id();
} }
void RenderViewDevToolsAgentHost::Observe(int type, RenderViewDevToolsAgentHost::~RenderViewDevToolsAgentHost() {
const NotificationSource& source, instances_.erase(render_view_host_);
const NotificationDetails& details) { }
DCHECK(type == content::NOTIFICATION_RENDER_VIEW_HOST_DELETED);
void RenderViewDevToolsAgentHost::RenderViewHostDestroyed() {
NotifyCloseListener(); NotifyCloseListener();
delete this; delete this;
} }
RenderViewDevToolsAgentHost::~RenderViewDevToolsAgentHost() { bool RenderViewDevToolsAgentHost::OnMessageReceived(
instances_.erase(render_view_host_); const IPC::Message& message) {
bool handled = true;
IPC_BEGIN_MESSAGE_MAP(RenderViewDevToolsAgentHost, message)
IPC_MESSAGE_HANDLER(DevToolsHostMsg_ForwardToClient, OnForwardToClient)
IPC_MESSAGE_HANDLER(DevToolsHostMsg_RuntimePropertyChanged,
OnRuntimePropertyChanged)
IPC_MESSAGE_HANDLER(DevToolsHostMsg_ClearBrowserCache, OnClearBrowserCache)
IPC_MESSAGE_HANDLER(DevToolsHostMsg_ClearBrowserCookies,
OnClearBrowserCookies)
IPC_MESSAGE_UNHANDLED(handled = false)
IPC_END_MESSAGE_MAP()
return handled;
}
void RenderViewDevToolsAgentHost::OnRuntimePropertyChanged(
const std::string& name,
const std::string& value) {
DevToolsManager::GetInstance()->RuntimePropertyChanged(
this, name, value);
}
void RenderViewDevToolsAgentHost::OnForwardToClient(
const IPC::Message& message) {
DevToolsManager::GetInstance()->ForwardToDevToolsClient(
this, message);
}
void RenderViewDevToolsAgentHost::OnClearBrowserCache() {
content::GetContentClient()->browser()->ClearCache(render_view_host_);
}
void RenderViewDevToolsAgentHost::OnClearBrowserCookies() {
content::GetContentClient()->browser()->ClearCookies(render_view_host_);
} }
...@@ -10,13 +10,12 @@ ...@@ -10,13 +10,12 @@
#include "base/basictypes.h" #include "base/basictypes.h"
#include "content/browser/debugger/devtools_agent_host.h" #include "content/browser/debugger/devtools_agent_host.h"
#include "content/common/notification_observer.h" #include "content/browser/renderer_host/render_view_host_observer.h"
#include "content/common/notification_registrar.h"
class RenderViewHost; class RenderViewHost;
class RenderViewDevToolsAgentHost : public DevToolsAgentHost, class RenderViewDevToolsAgentHost : public DevToolsAgentHost,
public NotificationObserver { private RenderViewHostObserver {
public: public:
static DevToolsAgentHost* FindFor(RenderViewHost*); static DevToolsAgentHost* FindFor(RenderViewHost*);
...@@ -29,13 +28,17 @@ class RenderViewDevToolsAgentHost : public DevToolsAgentHost, ...@@ -29,13 +28,17 @@ class RenderViewDevToolsAgentHost : public DevToolsAgentHost,
virtual void NotifyClientClosing(); virtual void NotifyClientClosing();
virtual int GetRenderProcessId(); virtual int GetRenderProcessId();
// Overridden from NotificationObserver: // RenderViewHostObserver overrides.
virtual void Observe(int type, virtual void RenderViewHostDestroyed() OVERRIDE;
const NotificationSource& source, virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE;
const NotificationDetails& details);
void OnForwardToClient(const IPC::Message& message);
void OnRuntimePropertyChanged(const std::string& name,
const std::string& value);
void OnClearBrowserCache();
void OnClearBrowserCookies();
RenderViewHost* render_view_host_; RenderViewHost* render_view_host_;
NotificationRegistrar registrar_;
typedef std::map<RenderViewHost*, RenderViewDevToolsAgentHost*> Instances; typedef std::map<RenderViewHost*, RenderViewDevToolsAgentHost*> Instances;
static Instances instances_; static Instances instances_;
......
...@@ -83,8 +83,6 @@ ...@@ -83,8 +83,6 @@
'browser/debugger/devtools_agent_host.h', 'browser/debugger/devtools_agent_host.h',
'browser/debugger/devtools_client_host.cc', 'browser/debugger/devtools_client_host.cc',
'browser/debugger/devtools_client_host.h', 'browser/debugger/devtools_client_host.h',
'browser/debugger/devtools_handler.cc',
'browser/debugger/devtools_handler.h',
'browser/debugger/devtools_http_protocol_handler.cc', 'browser/debugger/devtools_http_protocol_handler.cc',
'browser/debugger/devtools_http_protocol_handler.h', 'browser/debugger/devtools_http_protocol_handler.h',
'browser/debugger/devtools_manager.cc', 'browser/debugger/devtools_manager.cc',
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment