summaryrefslogtreecommitdiffstats
path: root/chrome/browser/debugger
diff options
context:
space:
mode:
authoryurys@chromium.org <yurys@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-08-31 14:01:11 +0000
committeryurys@chromium.org <yurys@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-08-31 14:01:11 +0000
commit2b8cf90084f83ee5901caeeb84bd5bc9e620f31f (patch)
tree475f6c3421af31be99a576326575feefb25b38a8 /chrome/browser/debugger
parent7d18ef2699c19c9c3e231535ef177e3897c48f18 (diff)
downloadchromium_src-2b8cf90084f83ee5901caeeb84bd5bc9e620f31f.zip
chromium_src-2b8cf90084f83ee5901caeeb84bd5bc9e620f31f.tar.gz
chromium_src-2b8cf90084f83ee5901caeeb84bd5bc9e620f31f.tar.bz2
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
Diffstat (limited to 'chrome/browser/debugger')
-rw-r--r--chrome/browser/debugger/devtools_window.cc100
-rw-r--r--chrome/browser/debugger/devtools_window.h36
2 files changed, 99 insertions, 37 deletions
diff --git a/chrome/browser/debugger/devtools_window.cc b/chrome/browser/debugger/devtools_window.cc
index 52e2d13b..5ae3c46 100644
--- a/chrome/browser/debugger/devtools_window.cc
+++ b/chrome/browser/debugger/devtools_window.cc
@@ -30,7 +30,9 @@
#include "chrome/common/render_messages.h"
#include "chrome/common/url_constants.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/worker_devtools_manager_io.h"
#include "content/browser/in_process_webkit/session_storage_namespace.h"
#include "content/browser/load_notification_details.h"
#include "content/browser/renderer_host/render_view_host.h"
@@ -39,6 +41,7 @@
#include "content/browser/tab_contents/tab_contents.h"
#include "content/browser/tab_contents/tab_contents_view.h"
#include "content/common/bindings_policy.h"
+#include "content/common/devtools_messages.h"
#include "content/common/notification_service.h"
#include "grit/generated_resources.h"
@@ -81,7 +84,7 @@ DevToolsWindow* DevToolsWindow::FindDevToolsWindow(
// static
DevToolsWindow* DevToolsWindow::CreateDevToolsWindowForWorker(
Profile* profile) {
- return new DevToolsWindow(profile, NULL, false, true);
+ return Create(profile, NULL, false, true);
}
// static
@@ -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,
- bool docked,
- bool shared_worker_frontend)
- : profile_(profile),
+ bool docked)
+ : RenderViewHostObserver(tab_contents->render_view_host()),
+ profile_(profile),
inspected_tab_(NULL),
+ tab_contents_(tab_contents),
browser_(NULL),
docked_(docked),
is_loaded_(false),
- 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);
-
+ action_on_load_(DEVTOOLS_TOGGLE_ACTION_NONE) {
// Wipe out page icon so that the default application icon is used.
NavigationEntry* entry = tab_contents_->controller().GetActiveEntry();
entry->favicon().set_bitmap(SkBitmap());
@@ -155,8 +167,7 @@ DevToolsWindow::~DevToolsWindow() {
}
void DevToolsWindow::SendMessageToClient(const IPC::Message& message) {
- RenderViewHost* target_host =
- tab_contents_->tab_contents()->render_view_host();
+ RenderViewHost* target_host = tab_contents_->render_view_host();
IPC::Message* m = new IPC::Message(message);
m->set_routing_id(target_host->routing_id());
target_host->Send(m);
@@ -237,7 +248,7 @@ void DevToolsWindow::Show(DevToolsToggleAction action) {
ScheduleAction(action);
}
-void DevToolsWindow::RequestActivate() {
+void DevToolsWindow::OnActivateWindow() {
if (!docked_) {
if (!browser_->window()->IsActive()) {
browser_->window()->Activate();
@@ -283,14 +294,14 @@ void DevToolsWindow::RequestSetDocked(bool docked) {
Show(DEVTOOLS_TOGGLE_ACTION_NONE);
}
-void DevToolsWindow::RequestClose() {
+void DevToolsWindow::OnCloseWindow() {
DCHECK(docked_);
NotifyCloseListener();
InspectedTabClosing();
}
-void DevToolsWindow::RequestSaveAs(const std::string& suggested_file_name,
- const std::string& content) {
+void DevToolsWindow::OnSaveAs(const std::string& suggested_file_name,
+ const std::string& content) {
DevToolsFileUtil::SaveAs(tab_contents_->profile(),
suggested_file_name,
content);
@@ -485,8 +496,9 @@ std::string SkColorToRGBAString(SkColor color) {
base::DoubleToString(SkColorGetA(color) / 255.0).c_str());
}
-GURL DevToolsWindow::GetDevToolsUrl() {
- ThemeService* tp = ThemeServiceFactory::GetForProfile(profile_);
+GURL DevToolsWindow::GetDevToolsUrl(Profile* profile, bool docked,
+ bool shared_worker_frontend) {
+ ThemeService* tp = ThemeServiceFactory::GetForProfile(profile);
CHECK(tp);
SkColor color_toolbar =
@@ -497,10 +509,10 @@ GURL DevToolsWindow::GetDevToolsUrl() {
std::string url_string = StringPrintf(
"%sdevtools.html?docked=%s&toolbarColor=%s&textColor=%s%s",
chrome::kChromeUIDevToolsURL,
- docked_ ? "true" : "false",
+ docked ? "true" : "false",
SkColorToRGBAString(color_toolbar).c_str(),
SkColorToRGBAString(color_tab_text).c_str(),
- shared_worker_frontend_ ? "&isSharedWorker=true" : "");
+ shared_worker_frontend ? "&isSharedWorker=true" : "");
return GURL(url_string);
}
@@ -577,7 +589,7 @@ DevToolsWindow* DevToolsWindow::ToggleDevToolsWindow(
Profile* profile = Profile::FromBrowserContext(
inspected_rvh->process()->browser_context());
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);
do_open = true;
}
@@ -602,6 +614,42 @@ DevToolsWindow* DevToolsWindow::AsDevToolsWindow(
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() {
if (inspected_tab_ && inspected_tab_->tab_contents()->delegate()) {
return inspected_tab_->tab_contents()->delegate()->
diff --git a/chrome/browser/debugger/devtools_window.h b/chrome/browser/debugger/devtools_window.h
index 6565bf6..4b02e96 100644
--- a/chrome/browser/debugger/devtools_window.h
+++ b/chrome/browser/debugger/devtools_window.h
@@ -10,8 +10,10 @@
#include <vector>
#include "base/basictypes.h"
+#include "base/memory/scoped_ptr.h"
#include "chrome/browser/debugger/devtools_toggle_action.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/common/notification_observer.h"
#include "content/common/notification_registrar.h"
@@ -33,8 +35,9 @@ class Value;
class DevToolsWindow
: public DevToolsClientHost,
- public NotificationObserver,
- public TabContentsDelegate {
+ private NotificationObserver,
+ private TabContentsDelegate,
+ private RenderViewHostObserver {
public:
static const char kDevToolsApp[];
static void RegisterUserPrefs(PrefService* prefs);
@@ -54,11 +57,6 @@ class DevToolsWindow
virtual void InspectedTabClosing();
virtual void TabReplaced(TabContents* new_tab);
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();
void Show(DevToolsToggleAction action);
@@ -68,8 +66,11 @@ class DevToolsWindow
bool is_docked() { return docked_; }
private:
- DevToolsWindow(Profile* profile, RenderViewHost* inspected_rvh, bool docked,
- bool shared_worker_frontend);
+ static DevToolsWindow* Create(Profile* profile,
+ RenderViewHost* inspected_rvh,
+ bool docked, bool shared_worker_frontend);
+ DevToolsWindow(TabContentsWrapper* tab_contents, Profile* profile,
+ RenderViewHost* inspected_rvh, bool docked);
void CreateDevToolsBrowser();
bool FindInspectedBrowserAndTabIndex(Browser**, int* tab);
@@ -84,7 +85,8 @@ class DevToolsWindow
void ScheduleAction(DevToolsToggleAction action);
void DoAction();
- GURL GetDevToolsUrl();
+ static GURL GetDevToolsUrl(Profile* profile, bool docked,
+ bool shared_worker_frontend);
void UpdateTheme();
void AddDevToolsExtensionsToClient();
void CallClientFunction(const string16& function_name,
@@ -118,6 +120,19 @@ class DevToolsWindow
DevToolsToggleAction action);
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_;
TabContentsWrapper* inspected_tab_;
TabContentsWrapper* tab_contents_;
@@ -125,7 +140,6 @@ class DevToolsWindow
bool docked_;
bool is_loaded_;
DevToolsToggleAction action_on_load_;
- const bool shared_worker_frontend_;
NotificationRegistrar registrar_;
DISALLOW_COPY_AND_ASSIGN(DevToolsWindow);
};