1eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// Copyright 2013 The Chromium Authors. All rights reserved. 2eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// Use of this source code is governed by a BSD-style license that can be 3eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// found in the LICENSE file. 4eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 5eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "content/shell/renderer/shell_render_view_observer.h" 6eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 7eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "base/command_line.h" 803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#include "content/public/renderer/render_thread.h" 9eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "content/public/renderer/render_view.h" 10eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "content/public/renderer/render_view_observer.h" 1103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#include "content/shell/common/shell_messages.h" 12eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "content/shell/common/shell_switches.h" 1303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#include "content/shell/renderer/ipc_echo.h" 14eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "third_party/WebKit/public/web/WebTestingSupport.h" 15eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "third_party/WebKit/public/web/WebView.h" 16eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 17eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochnamespace content { 18eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 19eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen MurdochShellRenderViewObserver::ShellRenderViewObserver(RenderView* render_view) 20eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch : RenderViewObserver(render_view) { 21eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} 22eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 2303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)ShellRenderViewObserver::~ShellRenderViewObserver() { 2403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)} 2503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 26cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)void ShellRenderViewObserver::DidClearWindowObject( 27cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) blink::WebLocalFrame* frame) { 28eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch if (CommandLine::ForCurrentProcess()->HasSwitch( 29eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch switches::kExposeInternalsForTesting)) { 30f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) blink::WebTestingSupport::injectInternalsObject(frame); 31eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch } 3203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 3303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) if (CommandLine::ForCurrentProcess()->HasSwitch( 3403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) switches::kExposeIpcEcho)) { 3503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) RenderView* view = render_view(); 3603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) if (!ipc_echo_) 3703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) ipc_echo_.reset(new IPCEcho(view->GetWebView()->mainFrame()->document(), 3803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) RenderThread::Get(), view->GetRoutingID())); 3903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) ipc_echo_->Install(view->GetWebView()->mainFrame()); 4003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) } 4103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)} 4203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 4303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)bool ShellRenderViewObserver::OnMessageReceived(const IPC::Message& message) { 4403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) bool handled = true; 4503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) IPC_BEGIN_MESSAGE_MAP(ShellRenderViewObserver, message) 4603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) IPC_MESSAGE_HANDLER(ShellViewMsg_EchoPong, OnEchoPong) 4703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) IPC_MESSAGE_UNHANDLED(handled = false) 4803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) IPC_END_MESSAGE_MAP() 4903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 5003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) return handled; 5103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)} 5203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 5303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)void ShellRenderViewObserver::OnEchoPong(int id, const std::string& body) { 5403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) ipc_echo_->DidRespondEcho(id, body.size()); 55eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} 56eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 57eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} // namespace content 58