diff options
Diffstat (limited to 'chrome/renderer/render_view.cc')
-rw-r--r-- | chrome/renderer/render_view.cc | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/chrome/renderer/render_view.cc b/chrome/renderer/render_view.cc index a8adb2f..1fa3650 100644 --- a/chrome/renderer/render_view.cc +++ b/chrome/renderer/render_view.cc @@ -11,6 +11,7 @@ #include "base/command_line.h" #include "base/gfx/png_encoder.h" #include "base/gfx/native_widget_types.h" +#include "base/process_util.h" #include "base/string_piece.h" #include "base/string_util.h" #include "build/build_config.h" @@ -25,6 +26,7 @@ #include "chrome/common/thumbnail_score.h" #include "chrome/renderer/about_handler.h" #include "chrome/renderer/debug_message_handler.h" +#include "chrome/renderer/tools_client.h" #include "chrome/renderer/localized_error.h" #include "chrome/renderer/render_process.h" #include "chrome/renderer/user_script_slave.h" @@ -168,6 +170,9 @@ RenderView::RenderView(RenderThreadBase* render_thread) method_factory_(this), first_default_plugin_(NULL), printed_document_width_(0), + tools_agent_(NULL), + enable_tools_client_(false), + tools_client_(NULL), history_back_list_count_(0), history_forward_list_count_(0), disable_popup_blocking_(false), @@ -196,6 +201,10 @@ RenderView::~RenderView() { } render_thread_->RemoveFilter(debug_message_handler_); + render_thread_->RemoveFilter(tools_agent_); + if (tools_client_.get()) { + render_thread_->RemoveFilter(tools_client_); + } #ifdef CHROME_PERSONALIZATION Personalization::CleanupRendererPersonalization(personalization_); @@ -313,6 +322,9 @@ void RenderView::Init(gfx::NativeViewId parent_hwnd, debug_message_handler_ = new DebugMessageHandler(this); render_thread_->AddFilter(debug_message_handler_); + + tools_agent_ = new ToolsAgent(this); + render_thread_->AddFilter(tools_agent_); } void RenderView::OnMessageReceived(const IPC::Message& message) { @@ -355,6 +367,7 @@ void RenderView::OnMessageReceived(const IPC::Message& message) { IPC_MESSAGE_HANDLER(ViewMsg_SetPageEncoding, OnSetPageEncoding) IPC_MESSAGE_HANDLER(ViewMsg_InspectElement, OnInspectElement) IPC_MESSAGE_HANDLER(ViewMsg_ShowJavaScriptConsole, OnShowJavaScriptConsole) + IPC_MESSAGE_HANDLER(ViewMsg_SetUpToolsClient, OnSetUpToolsClient) IPC_MESSAGE_HANDLER(ViewMsg_DownloadImage, OnDownloadImage) IPC_MESSAGE_HANDLER(ViewMsg_ScriptEvalRequest, OnScriptEvalRequest) IPC_MESSAGE_HANDLER(ViewMsg_AddMessageToConsole, OnAddMessageToConsole) @@ -897,6 +910,10 @@ void RenderView::OnShowJavaScriptConsole() { webview()->ShowJavaScriptConsole(); } +void RenderView::OnSetUpToolsClient() { + enable_tools_client_ = true; +} + void RenderView::OnStopFinding(bool clear_selection) { WebView* view = webview(); if (!view) @@ -1502,6 +1519,13 @@ void RenderView::BindDOMAutomationController(WebFrame* webframe) { L"domAutomationController"); } +void RenderView::CreateToolsClient() { + DCHECK(!tools_client_.get()); + tools_client_ = new ToolsClient(this); + webview()->SetUpToolsProxy(tools_client_); + render_thread_->AddFilter(tools_client_); +} + void RenderView::WindowObjectCleared(WebFrame* webframe) { external_js_object_.set_render_view(this); external_js_object_.BindToJavascript(webframe, L"external"); @@ -1517,6 +1541,11 @@ void RenderView::WindowObjectCleared(WebFrame* webframe) { external_host_bindings_.set_routing_id(routing_id_); external_host_bindings_.BindToJavascript(webframe, L"externalHost"); } + // TODO(yurys): we wouldn't need to check that tools_client_ is not set yet if + // WindowObjectCleared were not called several times recursively + if (enable_tools_client_ && !tools_client_.get()) { + CreateToolsClient(); + } #ifdef CHROME_PERSONALIZATION Personalization::ConfigureRendererPersonalization(personalization_, this, |