| // Copyright 2013 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/shell/renderer/shell_render_view_observer.h" |
| |
| #include "base/command_line.h" |
| #include "content/public/renderer/render_thread.h" |
| #include "content/public/renderer/render_view.h" |
| #include "content/public/renderer/render_view_observer.h" |
| #include "content/shell/common/shell_messages.h" |
| #include "content/shell/common/shell_switches.h" |
| #include "content/shell/renderer/ipc_echo.h" |
| #include "third_party/WebKit/public/web/WebTestingSupport.h" |
| #include "third_party/WebKit/public/web/WebView.h" |
| |
| namespace content { |
| |
| ShellRenderViewObserver::ShellRenderViewObserver(RenderView* render_view) |
| : RenderViewObserver(render_view) { |
| } |
| |
| ShellRenderViewObserver::~ShellRenderViewObserver() { |
| } |
| |
| void ShellRenderViewObserver::DidClearWindowObject( |
| blink::WebLocalFrame* frame) { |
| if (base::CommandLine::ForCurrentProcess()->HasSwitch( |
| switches::kExposeInternalsForTesting)) { |
| blink::WebTestingSupport::injectInternalsObject(frame); |
| } |
| |
| if (base::CommandLine::ForCurrentProcess()->HasSwitch( |
| switches::kExposeIpcEcho)) { |
| RenderView* view = render_view(); |
| if (!ipc_echo_) |
| ipc_echo_.reset(new IPCEcho(view->GetWebView()->mainFrame()->document(), |
| RenderThread::Get(), view->GetRoutingID())); |
| ipc_echo_->Install(view->GetWebView()->mainFrame()); |
| } |
| } |
| |
| bool ShellRenderViewObserver::OnMessageReceived(const IPC::Message& message) { |
| bool handled = true; |
| IPC_BEGIN_MESSAGE_MAP(ShellRenderViewObserver, message) |
| IPC_MESSAGE_HANDLER(ShellViewMsg_EchoPong, OnEchoPong) |
| IPC_MESSAGE_UNHANDLED(handled = false) |
| IPC_END_MESSAGE_MAP() |
| |
| return handled; |
| } |
| |
| void ShellRenderViewObserver::OnEchoPong(int id, const std::string& body) { |
| ipc_echo_->DidRespondEcho(id, body.size()); |
| } |
| |
| } // namespace content |